From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: Re: [PATCH v2 08/27] ARM: GICv3 ITS: introduce host LPI array Date: Thu, 23 Mar 2017 10:21:30 +0000 Message-ID: <17bff3cb-4b86-d369-8837-f44fd1bcd2ee@arm.com> References: <20170316112030.20419-1-andre.przywara@arm.com> <20170316112030.20419-9-andre.przywara@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cqzqF-0004l5-I8 for xen-devel@lists.xenproject.org; Thu, 23 Mar 2017 10:19:39 +0000 In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Stefano Stabellini Cc: xen-devel@lists.xenproject.org, Julien Grall , Shanker Donthineni , Vijay Kilari List-Id: xen-devel@lists.xenproject.org SGksCgpPbiAyMi8wMy8xNyAyMzozOCwgU3RlZmFubyBTdGFiZWxsaW5pIHdyb3RlOgo+IE9uIFRo dSwgMTYgTWFyIDIwMTcsIEFuZHJlIFByenl3YXJhIHdyb3RlOgo+PiBUaGUgbnVtYmVyIG9mIExQ SXMgb24gYSBob3N0IGNhbiBiZSBwb3RlbnRpYWxseSBodWdlIChtaWxsaW9ucyksCj4+IGFsdGhv dWdoIGluIHByYWN0aXNlIHdpbGwgYmUgbW9zdGx5IHJlYXNvbmFibGUuIFNvIHByZW1hdHVyZWx5 IGFsbG9jYXRpbmcKPj4gYW4gYXJyYXkgb2Ygc3RydWN0IGlycV9kZXNjJ3MgZm9yIGVhY2ggTFBJ IGlzIG5vdCBhbiBvcHRpb24uCj4+IEhvd2V2ZXIgWGVuIGl0c2VsZiBkb2VzIG5vdCBjYXJlIGFi b3V0IExQSXMsIGFzIGV2ZXJ5IExQSSB3aWxsIGJlIGluamVjdGVkCj4+IGludG8gYSBndWVzdCAo RG9tMCBmb3Igbm93KS4KPj4gQ3JlYXRlIGEgZGVuc2UgZGF0YSBzdHJ1Y3R1cmUgKDggQnl0ZXMp IGZvciBlYWNoIExQSSB3aGljaCBob2xkcyBqdXN0Cj4+IGVub3VnaCBpbmZvcm1hdGlvbiB0byBk ZXRlcm1pbmUgdGhlIHZpcnR1YWwgSVJRIG51bWJlciBhbmQgdGhlIFZDUFUgaW50bwo+PiB3aGlj aCB0aGUgTFBJIG5lZWRzIHRvIGJlIGluamVjdGVkLgo+PiBBbHNvIHRvIG5vdCBhcnRpZmljaWFs bHkgbGltaXQgdGhlIG51bWJlciBvZiBMUElzLCB3ZSBjcmVhdGUgYSAyLWxldmVsCj4+IHRhYmxl IGZvciBob2xkaW5nIHRob3NlIHN0cnVjdHVyZXMuCj4+IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBm dW5jdGlvbnMgdG8gaW5pdGlhbGl6ZSB0aGVzZSB0YWJsZXMgYW5kIHRvCj4+IGNyZWF0ZSwgbG9v a3VwIGFuZCBkZXN0cm95IGVudHJpZXMgZm9yIGEgZ2l2ZW4gTFBJLgo+PiBCeSB1c2luZyB0aGUg bmF0dXJhbGx5IGF0b21pYyBhY2Nlc3MgZ3VhcmFudGVlIHRoZSBuYXRpdmUgdWludDY0X3QgZGF0 YQo+PiB0eXBlIGdpdmVzIHVzLCB3ZSBhbGxvY2F0ZSBhbmQgYWNjZXNzIExQSSBpbmZvcm1hdGlv biBpbiBhIHdheSB0aGF0IGRvZXMKPj4gbm90IHJlcXVpcmUgYSBsb2NrLgo+Pgo+PiBTaWduZWQt b2ZmLWJ5OiBBbmRyZSBQcnp5d2FyYSA8YW5kcmUucHJ6eXdhcmFAYXJtLmNvbT4KPj4gLS0tCj4+ ICB4ZW4vYXJjaC9hcm0vZ2ljLXYzLWl0cy5jICAgICAgICB8ICA5MCArKysrKysrKysrKysrKysr KystCj4+ICB4ZW4vYXJjaC9hcm0vZ2ljLXYzLWxwaS5jICAgICAgICB8IDE4OCArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gIHhlbi9pbmNsdWRlL2FzbS1hcm0vZ2lj LmggICAgICAgIHwgICA1ICsrCj4+ICB4ZW4vaW5jbHVkZS9hc20tYXJtL2dpY192M19pdHMuaCB8 ICAxMSArKysKPj4gIDQgZmlsZXMgY2hhbmdlZCwgMjkyIGluc2VydGlvbnMoKyksIDIgZGVsZXRp b25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vZ2ljLXYzLWl0cy5jIGIveGVu L2FyY2gvYXJtL2dpYy12My1pdHMuYwo+PiBpbmRleCA2MGIxNWI1Li5lZDE0ZDk1IDEwMDY0NAo+ PiAtLS0gYS94ZW4vYXJjaC9hcm0vZ2ljLXYzLWl0cy5jCj4+ICsrKyBiL3hlbi9hcmNoL2FybS9n aWMtdjMtaXRzLmMKPj4gQEAgLTE0OCw2ICsxNDgsMjAgQEAgc3RhdGljIGludCBpdHNfc2VuZF9j bWRfc3luYyhzdHJ1Y3QgaG9zdF9pdHMgKml0cywgdW5zaWduZWQgaW50IGNwdSkKPj4gICAgICBy ZXR1cm4gaXRzX3NlbmRfY29tbWFuZChpdHMsIGNtZCk7Cj4+ICB9Cj4+ICAKPj4gK3N0YXRpYyBp bnQgaXRzX3NlbmRfY21kX21hcHRpKHN0cnVjdCBob3N0X2l0cyAqaXRzLAo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGV2aWNlaWQsIHVpbnQzMl90IGV2ZW50aWQs Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwaW50aWQsIHVpbnQx Nl90IGljaWQpCj4+ICt7Cj4+ICsgICAgdWludDY0X3QgY21kWzRdOwo+PiArCj4+ICsgICAgY21k WzBdID0gR0lUU19DTURfTUFQVEkgfCAoKHVpbnQ2NF90KWRldmljZWlkIDw8IDMyKTsKPj4gKyAg ICBjbWRbMV0gPSBldmVudGlkIHwgKCh1aW50NjRfdClwaW50aWQgPDwgMzIpOwo+PiArICAgIGNt ZFsyXSA9IGljaWQ7Cj4+ICsgICAgY21kWzNdID0gMHgwMDsKPj4gKwo+PiArICAgIHJldHVybiBp dHNfc2VuZF9jb21tYW5kKGl0cywgY21kKTsKPj4gK30KPj4gKwo+PiAgc3RhdGljIGludCBpdHNf c2VuZF9jbWRfbWFwYyhzdHJ1Y3QgaG9zdF9pdHMgKml0cywgdWludDMyX3QgY29sbGVjdGlvbl9p ZCwKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNwdSkKPj4g IHsKPj4gQEAgLTE4MCw2ICsxOTQsMTkgQEAgc3RhdGljIGludCBpdHNfc2VuZF9jbWRfbWFwZChz dHJ1Y3QgaG9zdF9pdHMgKml0cywgdWludDMyX3QgZGV2aWNlaWQsCj4+ICAgICAgcmV0dXJuIGl0 c19zZW5kX2NvbW1hbmQoaXRzLCBjbWQpOwo+PiAgfQo+PiAgCj4+ICtzdGF0aWMgaW50IGl0c19z ZW5kX2NtZF9pbnYoc3RydWN0IGhvc3RfaXRzICppdHMsCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDMyX3QgZGV2aWNlaWQsIHVpbnQzMl90IGV2ZW50aWQpCj4+ICt7Cj4+ICsg ICAgdWludDY0X3QgY21kWzRdOwo+PiArCj4+ICsgICAgY21kWzBdID0gR0lUU19DTURfSU5WIHwg KCh1aW50NjRfdClkZXZpY2VpZCA8PCAzMik7Cj4+ICsgICAgY21kWzFdID0gZXZlbnRpZDsKPj4g KyAgICBjbWRbMl0gPSAweDAwOwo+PiArICAgIGNtZFszXSA9IDB4MDA7Cj4+ICsKPj4gKyAgICBy ZXR1cm4gaXRzX3NlbmRfY29tbWFuZChpdHMsIGNtZCk7Cj4+ICt9Cj4+ICsKPj4gIC8qIFNldCB1 cCB0aGUgKDE6MSkgY29sbGVjdGlvbiBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gaG9zdCBDUFUuICov Cj4+ICBpbnQgZ2ljdjNfaXRzX3NldHVwX2NvbGxlY3Rpb24odW5zaWduZWQgaW50IGNwdSkKPj4g IHsKPj4gQEAgLTQ2Miw3ICs0ODksNyBAQCBpbnQgZ2ljdjNfaXRzX2luaXQodm9pZCkKPj4gIAo+ PiAgc3RhdGljIGludCByZW1vdmVfbWFwcGVkX2d1ZXN0X2RldmljZShzdHJ1Y3QgaXRzX2Rldmlj ZXMgKmRldikKPj4gIHsKPj4gLSAgICBpbnQgcmV0Owo+PiArICAgIGludCByZXQsIGk7Cj4+ICAK Pj4gICAgICBpZiAoIGRldi0+aHdfaXRzICkKPj4gICAgICB7Cj4+IEBAIC00NzEsMTEgKzQ5OCwx OSBAQCBzdGF0aWMgaW50IHJlbW92ZV9tYXBwZWRfZ3Vlc3RfZGV2aWNlKHN0cnVjdCBpdHNfZGV2 aWNlcyAqZGV2KQo+PiAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4gICAgICB9Cj4+ICAKPj4g KyAgICAvKgo+PiArICAgICAqIFRoZSBvbmx5IGVycm9yIHRoZSBmdW5jdGlvbiBiZWxvdyB3b3Vs ZCByZXR1cm4gaXMgLUVOT0VOVCwgaW4gd2hpY2gKPj4gKyAgICAgKiBjYXNlIHRoZXJlIGlzIG5v dGhpbmcgdG8gZnJlZSBoZXJlLiBTbyB3ZSBqdXN0IGlnbm9yZSBpdC4KPj4gKyAgICAgKi8KPj4g KyAgICBmb3IgKCBpID0gMDsgaSA8IERJVl9ST1VORF9VUChkZXYtPmV2ZW50aWRzLCBMUElfQkxP Q0spOyBpKysgKQo+PiArICAgICAgICBnaWN2M19mcmVlX2hvc3RfbHBpX2Jsb2NrKGRldi0+aHdf aXRzLCBkZXYtPmhvc3RfbHBpc1tpXSk7Cj4+ICsKPj4gICAgICByZXQgPSBnaWN2M19pdHNfd2Fp dF9jb21tYW5kcyhkZXYtPmh3X2l0cyk7Cj4+ICAgICAgaWYgKCByZXQgKQo+PiAgICAgICAgICBy ZXR1cm4gcmV0Owo+PiAgCj4+ICAgICAgeGZyZWUoZGV2LT5pdHRfYWRkcik7Cj4+ICsgICAgeGZy ZWUoZGV2LT5ob3N0X2xwaXMpOwo+PiAgICAgIHhmcmVlKGRldik7Cj4+ICAKPj4gICAgICByZXR1 cm4gMDsKPj4gQEAgLTUxMyw2ICs1NDgsMzYgQEAgc3RhdGljIGludCBjb21wYXJlX2l0c19ndWVz dF9kZXZpY2VzKHN0cnVjdCBpdHNfZGV2aWNlcyAqZGV2LAo+PiAgfQo+PiAgCj4+ICAvKgo+PiAr ICogT24gdGhlIGhvc3QgSVRTIEBpdHMsIG1hcCBAbnJfZXZlbnRzIGNvbnNlY3V0aXZlIExQSXMu Cj4+ICsgKiBUaGUgbWFwcGluZyBjb25uZWN0cyBhIGRldmljZSBAZGV2aWQgYW5kIGV2ZW50IEBl dmVudGlkIHBhaXIgdG8gTFBJIEBscGksCj4+ICsgKiBpbmNyZWFzaW5nIGJvdGggQGV2ZW50aWQg YW5kIEBscGkgdG8gY292ZXIgdGhlIG51bWJlciBvZiByZXF1ZXN0ZWQgTFBJcy4KPj4gKyAqLwo+ PiAraW50IGdpY3YzX2l0c19tYXBfaG9zdF9ldmVudHMoc3RydWN0IGhvc3RfaXRzICppdHMsCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkZXZpZCwgdWludDMyX3Qg ZXZlbnRpZCwgdWludDMyX3QgbHBpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3QgbnJfZXZlbnRzKQo+PiArewo+PiArICAgIHVpbnQzMl90IGk7Cj4+ICsgICAgaW50 IHJldDsKPj4gKwo+PiArICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfZXZlbnRzOyBpKysgKQo+PiAr ICAgIHsKPj4gKyAgICAgICAgLyogRm9yIG5vdyB3ZSBtYXAgZXZlcnkgaG9zdCBMUEkgdG8gaG9z dCBDUFUgMCAqLwo+PiArICAgICAgICByZXQgPSBpdHNfc2VuZF9jbWRfbWFwdGkoaXRzLCBkZXZp ZCwgZXZlbnRpZCArIGksIGxwaSArIGksIDApOwo+PiArICAgICAgICBpZiAoIHJldCApCj4+ICsg ICAgICAgICAgICByZXR1cm4gcmV0Owo+PiArICAgICAgICByZXQgPSBpdHNfc2VuZF9jbWRfaW52 KGl0cywgZGV2aWQsIGV2ZW50aWQgKyBpKTsKPj4gKyAgICAgICAgaWYgKCByZXQgKQo+PiArICAg ICAgICAgICAgcmV0dXJuIHJldDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICByZXQgPSBpdHNfc2Vu ZF9jbWRfc3luYyhpdHMsIDApOwo+PiArICAgIGlmICggcmV0ICkKPj4gKyAgICAgICAgcmV0dXJu IHJldDsKPj4gKwo+PiArICAgIHJldHVybiBnaWN2M19pdHNfd2FpdF9jb21tYW5kcyhpdHMpOwo+ PiArfQo+PiArCj4+ICsvKgo+PiAgICogTWFwIGEgaGFyZHdhcmUgZGV2aWNlLCBpZGVudGlmaWVk IGJ5IGEgY2VydGFpbiBob3N0IElUUyBhbmQgaXRzIGRldmljZSBJRAo+PiAgICogdG8gZG9tYWlu IGQsIGEgZ3Vlc3QgSVRTIChpZGVudGlmaWVkIGJ5IGl0cyBkb29yYmVsbCBhZGRyZXNzKSBhbmQg ZGV2aWNlIElELgo+PiAgICogQWxzbyBwcm92aWRlIHRoZSBudW1iZXIgb2YgZXZlbnRzIChNU0lz KSBuZWVkZWQgZm9yIHRoYXQgZGV2aWNlLgo+PiBAQCAtNTI4LDcgKzU5Myw3IEBAIGludCBnaWN2 M19pdHNfbWFwX2d1ZXN0X2RldmljZShzdHJ1Y3QgZG9tYWluICpkLAo+PiAgICAgIHN0cnVjdCBo b3N0X2l0cyAqaHdfaXRzOwo+PiAgICAgIHN0cnVjdCBpdHNfZGV2aWNlcyAqZGV2ID0gTlVMTCwg KnRlbXA7Cj4+ICAgICAgc3RydWN0IHJiX25vZGUgKipuZXcgPSAmZC0+YXJjaC52Z2ljLml0c19k ZXZpY2VzLnJiX25vZGUsICpwYXJlbnQgPSBOVUxMOwo+PiAtICAgIGludCByZXQgPSAtRU5PRU5U Owo+PiArICAgIGludCByZXQgPSAtRU5PRU5ULCBpOwo+PiAgCj4+ICAgICAgaHdfaXRzID0gZ2lj djNfaXRzX2ZpbmRfYnlfZG9vcmJlbGwoaG9zdF9kb29yYmVsbCk7Cj4+ICAgICAgaWYgKCAhaHdf aXRzICkKPj4gQEAgLTU3NCw2ICs2MzksMTEgQEAgaW50IGdpY3YzX2l0c19tYXBfZ3Vlc3RfZGV2 aWNlKHN0cnVjdCBkb21haW4gKmQsCj4+ICAgICAgaWYgKCAhZGV2ICkKPj4gICAgICAgICAgZ290 byBvdXRfdW5sb2NrOwo+PiAgCj4+ICsgICAgZGV2LT5ob3N0X2xwaXMgPSB4emFsbG9jX2FycmF5 KHVpbnQzMl90LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBESVZfUk9V TkRfVVAobnJfZXZlbnRzLCBMUElfQkxPQ0spKTsKPj4gKyAgICBpZiAoICFkZXYtPmhvc3RfbHBp cyApCj4+ICsgICAgICAgIGdvdG8gb3V0X3VubG9jazsKPiAKPiBUaGUgZXhwZWN0YXRpb24gaXMg dGhhdCB3ZSBhcmUgZ29pbmcgdG8gYWxsb2NhdGUgZmFyIG1vcmUgdGhhbiAzMiBscGlzCj4gZm9y IG9uZSBkZXZpY2UsIHBvc3NpYmx5IHRob3VzYW5kcywgcmlnaHQ/CgpNbWgsIHdoYXQgbWFrZXMg eW91IHRoaW5rIHNvPwpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgeW91IGhhdmUgb25lIE1TSSBw ZXIgaW50ZXJydXB0ICJyZWFzb24iIChUWCwKUlgsIGVycm9yLCBmb3IgaW5zdGFuY2UpLiBBbmQg ZXZlbiBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBxdWV1ZXMsIGVhY2gKY29ubmVjdGVkIHRvIHNlcGFy YXRlIE1TSXMsIHRoYXQgd29uJ3QgZ28gaW50byB0aGUgdGhvdXNhbmRzLiBNU0ktWCBmb3IKaW5z dGFuY2UgaXMgKmxpbWl0ZWQqIHRvIDIwNDggTVNJcy4KCkJ1dCBpbiByZWFsaXR5IEkgZG9udCcg c2VlIG5lYXJseSB0aGF0IG1hbnkgTVNJcywgbW9zdGx5IGxlc3MgdGhhbiBhCmRvemVuIHBlciBk ZXZpY2UuIEFuZCBzaW5jZSAzMiBpcyB0aGUgb2xkIFBDSSBNU0kgbGltaXQsIEkgdGhvdWdodCB0 aGlzCndvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gU28gbW9zdCBvZiB0aGUgdGltZSB3 ZSBqdXN0IG5lZWQgb25lIGJsb2NrLgoKSSBiZWxpZXZlIHRoaXMgY291bGQgYWRkIHVwIHdpdGgg dmlydHVhbCBmdW5jdGlvbnMsIGJ1dCB0aG9zZSBhcmUKc2VwYXJhdGUgZGV2aWNlcywgcmlnaHQ/ CgpDaGVlcnMsCkFuZHJlLgoKPiBJZiBzbywgZGV2LT5ob3N0X2xwaXMgY291bGQgYmUgcXVpdGUg bGFyZ2UuIEkgYW0gdGhpbmtpbmcgd2Ugc2hvdWxkCj4gY29uc2lkZXIgc3dpdGNoaW5nIHRvIGEg c3BhcnNlIGRhdGEgc3RydWN0dXJlIHRvIHNhdmUgbWVtb3J5LCBhcyBpbiBtb3N0Cj4gY2FzZXMg dGhlIGFsbG9jYXRlZCBibG9ja3MgYXJlIGdvaW5nIHRvIGJlIGNvbnNlY3V0aXZlLgo+IAo+IEkg d291bGQgcHJvYmFibHkgc3RvcmUgdGhlIGZpcnN0IGxwaSBhbmQgdGhlIG51bWJlciBvZiBjb25z ZWN1dGl2ZSBscGlzLAo+IHJhdGhlciB0aGFuIHRoZSBmaXJzdCBscGkgaW4gZWFjaCBibG9jay4g Rm9yIGV4YW1wbGUsIGlmIHRoZSBhbGxvY2F0ZWQKPiBibG9ja3MgYXJlOgo+IAo+ICAwLTMxLCAz Mi02MywgNjQtOTUsIDk2LTEyNywgMTI4LTE1OSwgMjU2LTI4Nwo+IAo+IE5vdyB3ZSBzdG9yZTog MCwgMzIsIDY0LCA5NiwgMTI4LCAyNTYKPiBJIHdvdWxkIHN0b3JlIFswLCAxNjBdLCBbMjU2LCAz Ml0KPiAKPiBJbiB0aGUgY2FzZSBvZiBhIHRob3VzYW5kIGNvbnNlY3V0aXZlIGJsb2NrIGFsbG9j YXRpb25zLCBpdCB3b3VsZAo+IHNob3J0ZW4gdGhlIGFycmF5IGZyb20gMTAwMC8zMiB0byAxIGVs ZW1lbnQuCj4gCj4gRG9lcyBpdCBtYWtlIHNlbnNlPyBJcyBpdCB3b3J0aCBkb2luZz8gVGhpcyBs YXN0IHF1ZXN0aW9uIGlzIG1vc3RseSBmb3IKPiB0aGUgUXVhbGNvbW0gYW5kIENhdml1bSBndXlz IG9uIHRoZSBsaXN0IGJlY2F1c2UgaXQgZGVwZW5kcyBvbiB0aGUKPiBudW1iZXJzIG9mIGV2ZW50 cyBvbiBhIGdpdmVuIHBsYXRmb3JtLgo+IAo+IAo+PiAgICAgIHJldCA9IGl0c19zZW5kX2NtZF9t YXBkKGh3X2l0cywgaG9zdF9kZXZpZCwgZmxzKG5yX2V2ZW50cyAtIDEpIC0gMSwKPj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2aXJ0X3RvX21hZGRyKGl0dF9hZGRyKSwgdHJ1ZSk7Cj4+ ICAgICAgaWYgKCByZXQgKQo+PiBAQCAtNTkxLDEwICs2NjEsMjYgQEAgaW50IGdpY3YzX2l0c19t YXBfZ3Vlc3RfZGV2aWNlKHN0cnVjdCBkb21haW4gKmQsCj4+ICAKPj4gICAgICBzcGluX3VubG9j aygmZC0+YXJjaC52Z2ljLml0c19kZXZpY2VzX2xvY2spOwo+PiAgCj4+ICsgICAgLyoKPj4gKyAg ICAgKiBNYXAgYWxsIGhvc3QgTFBJcyB3aXRoaW4gdGhpcyBkZXZpY2UgYWxyZWFkeS4gV2UgY2Fu J3QgYWZmb3JkIHRvIHF1ZXVlCj4+ICsgICAgICogYW55IGhvc3QgSVRTIGNvbW1hbmRzIGxhdGVy IG9uIGR1cmluZyB0aGUgZ3Vlc3QncyBydW50aW1lLgo+PiArICAgICAqLwo+PiArICAgIGZvciAo IGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKG5yX2V2ZW50cywgTFBJX0JMT0NLKTsgaSsrICkKPj4g KyAgICB7Cj4+ICsgICAgICAgIHJldCA9IGdpY3YzX2FsbG9jYXRlX2hvc3RfbHBpX2Jsb2NrKGh3 X2l0cywgZCwgaG9zdF9kZXZpZCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaSAqIExQSV9CTE9DSyk7Cj4+ICsgICAgICAgIGlmICggcmV0IDwgMCApCj4+ ICsgICAgICAgICAgICBnb3RvIG91dDsKPj4gKwo+PiArICAgICAgICBkZXYtPmhvc3RfbHBpc1tp XSA9IHJldDsKPj4gKyAgICB9Cj4+ICsKPj4gICAgICByZXR1cm4gMDsKPj4gIAo+PiAgb3V0X3Vu bG9jazoKPj4gICAgICBzcGluX3VubG9jaygmZC0+YXJjaC52Z2ljLml0c19kZXZpY2VzX2xvY2sp Owo+PiArCj4+ICtvdXQ6Cj4+ICAgICAgaWYgKCBkZXYgKQo+PiAgICAgICAgICB4ZnJlZShkZXYt Pmhvc3RfbHBpcyk7Cj4+ICAgICAgeGZyZWUoaXR0X2FkZHIpOwo+PiBkaWZmIC0tZ2l0IGEveGVu L2FyY2gvYXJtL2dpYy12My1scGkuYyBiL3hlbi9hcmNoL2FybS9naWMtdjMtbHBpLmMKPj4gaW5k ZXggNTFkNzQyNS4uNTlkM2JhNCAxMDA2NDQKPj4gLS0tIGEveGVuL2FyY2gvYXJtL2dpYy12My1s cGkuYwo+PiArKysgYi94ZW4vYXJjaC9hcm0vZ2ljLXYzLWxwaS5jCj4+IEBAIC0yMCwyNCArMjAs NDQgQEAKPj4gIAo+PiAgI2luY2x1ZGUgPHhlbi9saWIuaD4KPj4gICNpbmNsdWRlIDx4ZW4vbW0u aD4KPj4gKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KPj4gKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+ Cj4+ICsjaW5jbHVkZSA8YXNtL2RvbWFpbi5oPgo+PiAgI2luY2x1ZGUgPGFzbS9naWMuaD4KPj4g ICNpbmNsdWRlIDxhc20vZ2ljX3YzX2RlZnMuaD4KPj4gICNpbmNsdWRlIDxhc20vZ2ljX3YzX2l0 cy5oPgo+PiAgI2luY2x1ZGUgPGFzbS9pby5oPgo+PiAgI2luY2x1ZGUgPGFzbS9wYWdlLmg+Cj4+ ICAKPj4gKy8qIExQSXMgb24gdGhlIGhvc3QgYWx3YXlzIGdvIHRvIGEgZ3Vlc3QsIHNvIG5vIHN0 cnVjdCBpcnFfZGVzYyBmb3IgdGhlbS4gKi8KPj4gK3VuaW9uIGhvc3RfbHBpIHsKPj4gKyAgICB1 aW50NjRfdCBkYXRhOwo+PiArICAgIHN0cnVjdCB7Cj4+ICsgICAgICAgIHVpbnQzMl90IHZpcnRf bHBpOwo+PiArICAgICAgICB1aW50MTZfdCBkb21faWQ7Cj4+ICsgICAgICAgIHVpbnQxNl90IHZj cHVfaWQ7Cj4+ICsgICAgfTsKPj4gK307Cj4+Cj4+ICAjZGVmaW5lIExQSV9QUk9QVEFCTEVfTkVF RFNfRkxVU0hJTkcgICAgKDFVIDw8IDApCj4+ICAvKiBHbG9iYWwgc3RhdGUgKi8KPj4gIHN0YXRp YyBzdHJ1Y3Qgewo+PiAgICAgIC8qIFRoZSBnbG9iYWwgTFBJIHByb3BlcnR5IHRhYmxlLCBzaGFy ZWQgYnkgYWxsIHJlZGlzdHJpYnV0b3JzLiAqLwo+PiAgICAgIHVpbnQ4X3QgKmxwaV9wcm9wZXJ0 eTsKPj4gICAgICAvKgo+PiArICAgICAqIEEgdHdvLWxldmVsIHRhYmxlIHRvIGxvb2t1cCBMUElz IGZpcmluZyBvbiB0aGUgaG9zdCBhbmQgbG9vayB1cCB0aGUKPj4gKyAgICAgKiBkb21haW4gYW5k IHZpcnR1YWwgTFBJIG51bWJlciB0byBpbmplY3QuCj4+ICsgICAgICovCj4+ICsgICAgdW5pb24g aG9zdF9scGkgKipob3N0X2xwaXM7Cj4+ICsgICAgLyoKPj4gICAgICAgKiBOdW1iZXIgb2YgcGh5 c2ljYWwgTFBJcyB0aGUgaG9zdCBzdXBwb3J0cy4gVGhpcyBpcyBhIHByb3BlcnR5IG9mCj4+ICAg ICAgICogdGhlIEdJQyBoYXJkd2FyZS4gV2UgZGVwYXJ0IGZyb20gdGhlIGhhYml0IG9mIG5hbWlu ZyB0aGVzZSB0aGluZ3MKPj4gICAgICAgKiAicGh5c2ljYWwiIGluIFhlbiwgYXMgdGhlIEdJQ3Yz LzQgc3BlYyB1c2VzIHRoZSB0ZXJtICJwaHlzaWNhbCBMUEkiCj4+ICAgICAgICogaW4gYSBkaWZm ZXJlbnQgY29udGV4dCB0byBkaWZmZXJlbnRpYXRlIHRoZW0gZnJvbSAidmlydHVhbCBMUElzIi4K Pj4gICAgICAgKi8KPj4gICAgICB1bnNpZ25lZCBsb25nIGludCBucl9ob3N0X2xwaXM7Cj4+ICsg ICAgLyogUHJvdGVjdHMgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIG9mIGhvc3QgTFBJcywg YnV0IG5vdCB0aGUgYWNjZXNzICovCj4gCj4gT0suIFdoYXQgZG9lcyBwcm90ZWN0IHRoZSBhY2Nl c3MgdG8gaG9zdCBMUElzPwo+IAo+IAo+PiArICAgIHNwaW5sb2NrX3QgaG9zdF9scGlzX2xvY2s7 Cj4+ICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwo+PiAgfSBscGlfZGF0YTsKPj4gIAo+PiBAQCAt NTAsNiArNzAsMTkgQEAgc3RydWN0IGxwaV9yZWRpc3RfZGF0YSB7Cj4+ICBzdGF0aWMgREVGSU5F X1BFUl9DUFUoc3RydWN0IGxwaV9yZWRpc3RfZGF0YSwgbHBpX3JlZGlzdCk7Cj4+ICAKPj4gICNk ZWZpbmUgTUFYX1BIWVNfTFBJUyAgIChscGlfZGF0YS5ucl9ob3N0X2xwaXMgLSBMUElfT0ZGU0VU KQo+PiArI2RlZmluZSBIT1NUX0xQSVNfUEVSX1BBR0UgICAgICAoUEFHRV9TSVpFIC8gc2l6ZW9m KHVuaW9uIGhvc3RfbHBpKSkKPj4gKwo+PiArc3RhdGljIHVuaW9uIGhvc3RfbHBpICpnaWNfZ2V0 X2hvc3RfbHBpKHVpbnQzMl90IHBscGkpCj4+ICt7Cj4+ICsgICAgaWYgKCAhaXNfbHBpKHBscGkp IHx8IHBscGkgPj0gTUFYX1BIWVNfTFBJUyArIExQSV9PRkZTRVQgKQo+IAo+IEFyZ3VhYmx5IGlm IChwbHBpID49IE1BWF9QSFlTX0xQSVMgKyBMUElfT0ZGU0VUKSBpcyBub3QgcmVhbGx5IGFuIGxw aS4gSQo+IHdvdWxkIGFkZCB0aGUgcGxwaSA+PSBNQVhfUEhZU19MUElTICsgTFBJX09GRlNFVCBj aGVjayB0byBpc19scGkuCj4gCj4gCj4+ICsgICAgICAgIHJldHVybiBOVUxMOwo+PiArCj4+ICsg ICAgcGxwaSAtPSBMUElfT0ZGU0VUOwo+PiArICAgIGlmICggIWxwaV9kYXRhLmhvc3RfbHBpc1tw bHBpIC8gSE9TVF9MUElTX1BFUl9QQUdFXSApCj4+ICsgICAgICAgIHJldHVybiBOVUxMOwo+PiAr Cj4+ICsgICAgcmV0dXJuICZscGlfZGF0YS5ob3N0X2xwaXNbcGxwaSAvIEhPU1RfTFBJU19QRVJf UEFHRV1bcGxwaSAlIEhPU1RfTFBJU19QRVJfUEFHRV07Cj4gCj4gSSBhbSBhbG1vc3Qgc3VyZSB0 aGlzIGxpbmUgaXMgbG9uZ2VyIHRoYW4gODAgY2hhcmFjdGVycy4uIFBsZWFzZSBkb3VibGUKPiBj aGVjayB0aGUgY29kaW5nIHN0eWxlIHRocm91Z2hvdXQgdGhlIHNlcmllcy4KPiAKPiAKPj4gK30K Pj4gIAo+PiAgLyogU3RvcmVzIHRoaXMgcmVkaXN0cmlidXRvcidzIHBoeXNpY2FsIGFkZHJlc3Mg YW5kIElEIGluIGEgcGVyLUNQVSB2YXJpYWJsZSAqLwo+PiAgdm9pZCBnaWN2M19zZXRfcmVkaXN0 X2FkZHJlc3MocGFkZHJfdCBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgcmVkaXN0X2lkKQo+PiBAQCAt MjA0LDE1ICsyMzcsMTcwIEBAIGludCBnaWN2M19scGlfaW5pdF9yZGlzdCh2b2lkIF9faW9tZW0g KiByZGlzdF9iYXNlKQo+PiAgc3RhdGljIHVuc2lnbmVkIGludCBtYXhfbHBpX2JpdHMgPSBDT05G SUdfTUFYX1BIWVNfTFBJX0JJVFM7Cj4+ICBpbnRlZ2VyX3BhcmFtKCJtYXhfbHBpX2JpdHMiLCBt YXhfbHBpX2JpdHMpOwo+PiAgCj4+ICsvKgo+PiArICogQWxsb2NhdGUgdGhlIDJuZCBsZXZlbCBh cnJheSBmb3IgaG9zdCBMUElzLiBUaGlzIG9uZSBob2xkcyBwb2ludGVycwo+PiArICogdG8gdGhl IHBhZ2Ugd2l0aCB0aGUgYWN0dWFsICJ1bmlvbiBob3N0X2xwaSIgZW50cmllcy4gT3VyIExQSSBs aW1pdAo+PiArICogYXZvaWRzIGV4Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2UuCj4+ICsgKi8KPj4gIGlu dCBnaWN2M19scGlfaW5pdF9ob3N0X2xwaXModW5zaWduZWQgaW50IGh3X2xwaV9iaXRzKQo+PiAg ewo+PiArICAgIGludCBucl9scGlfcHRyczsKPj4gKwo+PiArICAgIC8qIFdlIHJlbHkgb24gdGhl IGRhdGEgc3RydWN0dXJlIGJlaW5nIGF0b21pY2FsbHkgYWNjZXNzaWJsZS4gKi8KPj4gKyAgICBC VUlMRF9CVUdfT04oc2l6ZW9mKHVuaW9uIGhvc3RfbHBpKSA+IHNpemVvZih1bnNpZ25lZCBsb25n KSk7Cj4gCj4gVGVjaG5pY2FsbHksIEkgdGhpbmsgdGhhdCBhcm0zMiBpcyBhYmxlIHRvIGFjY2Vz cyB1aW50NjRfdCBhdG9taWNhbGx5Cj4gKGxkcmV4ZCBhbmQgc3RyZXhkKS4KPiAKPiAKPj4gICAg ICBscGlfZGF0YS5ucl9ob3N0X2xwaXMgPSBCSVRfVUxMKG1pbihod19scGlfYml0cywgbWF4X2xw aV9iaXRzKSk7Cj4+ICAKPj4gKyAgICBzcGluX2xvY2tfaW5pdCgmbHBpX2RhdGEuaG9zdF9scGlz X2xvY2spOwo+PiArCj4+ICsgICAgbnJfbHBpX3B0cnMgPSBNQVhfUEhZU19MUElTIC8gKFBBR0Vf U0laRSAvIHNpemVvZih1bmlvbiBob3N0X2xwaSkpOwo+PiArICAgIGxwaV9kYXRhLmhvc3RfbHBp cyA9IHh6YWxsb2NfYXJyYXkodW5pb24gaG9zdF9scGkgKiwgbnJfbHBpX3B0cnMpOwo+PiArICAg IGlmICggIWxwaV9kYXRhLmhvc3RfbHBpcyApCj4+ICsgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ PiArCj4+ICAgICAgcHJpbnRrKCJHSUN2MzogdXNpbmcgYXQgbW9zdCAlbGQgTFBJcyBvbiB0aGUg aG9zdC5cbiIsIE1BWF9QSFlTX0xQSVMpOwo+PiAgCj4+ICAgICAgcmV0dXJuIDA7Cj4+ICB9Cj4+ ICAKPj4gKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggaG9zdF9scGlzX2xvY2sgaGVsZC4gKi8KPj4g K3N0YXRpYyBpbnQgZmluZF91bnVzZWRfaG9zdF9scGkoaW50IHN0YXJ0LCB1aW50MzJfdCAqaW5k ZXgpCj4+ICt7Cj4+ICsgICAgaW50IGNodW5rOwo+PiArICAgIHVpbnQzMl90IGkgPSAqaW5kZXg7 Cj4+ICsKPj4gKyAgICBmb3IgKCBjaHVuayA9IHN0YXJ0OyBjaHVuayA8IE1BWF9QSFlTX0xQSVMg LyBIT1NUX0xQSVNfUEVSX1BBR0U7IGNodW5rKysgKQo+PiArICAgIHsKPj4gKyAgICAgICAgLyog SWYgd2UgaGl0IGFuIHVuYWxsb2NhdGVkIGNodW5rLCB1c2UgZW50cnkgMCBpbiB0aGF0IG9uZS4g Ki8KPj4gKyAgICAgICAgaWYgKCAhbHBpX2RhdGEuaG9zdF9scGlzW2NodW5rXSApCj4+ICsgICAg ICAgIHsKPj4gKyAgICAgICAgICAgICppbmRleCA9IDA7Cj4+ICsgICAgICAgICAgICByZXR1cm4g Y2h1bms7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgICAvKiBGaW5kIGFuIHVuYWxsb2Nh dGVkIGVudHJ5IGluIHRoaXMgY2h1bmsuICovCj4+ICsgICAgICAgIGZvciAoIDsgaSA8IEhPU1Rf TFBJU19QRVJfUEFHRTsgaSArPSBMUElfQkxPQ0sgKQo+PiArICAgICAgICB7Cj4+ICsgICAgICAg ICAgICBpZiAoIGxwaV9kYXRhLmhvc3RfbHBpc1tjaHVua11baV0uZG9tX2lkID09IElOVkFMSURf RE9NSUQgKQo+PiArICAgICAgICAgICAgewo+PiArICAgICAgICAgICAgICAgICppbmRleCA9IGk7 Cj4+ICsgICAgICAgICAgICAgICAgcmV0dXJuIGNodW5rOwo+PiArICAgICAgICAgICAgfQo+PiAr ICAgICAgICB9Cj4+ICsgICAgICAgIGkgPSAwOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHJldHVy biAtMTsKPj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIEFsbG9jYXRlIGEgYmxvY2sgb2YgMzIgTFBJ cyBvbiB0aGUgZ2l2ZW4gaG9zdCBJVFMgZm9yIGRldmljZSAiZGV2aWQiLAo+PiArICogc3RhcnRp bmcgd2l0aCAiZXZlbnRpZCIuIFB1dCB0aGVtIGludG8gdGhlIHJlc3BlY3RpdmUgSVRUIGJ5IGlz c3VpbmcgYQo+PiArICogTUFQVEkgY29tbWFuZCBmb3IgZWFjaCBvZiB0aGVtLgo+PiArICovCj4+ ICtpbnQgZ2ljdjNfYWxsb2NhdGVfaG9zdF9scGlfYmxvY2soc3RydWN0IGhvc3RfaXRzICppdHMs IHN0cnVjdCBkb21haW4gKmQsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3QgaG9zdF9kZXZpZCwgdWludDMyX3QgZXZlbnRpZCkKPj4gK3sKPj4gKyAgICBzdGF0 aWMgdWludDMyX3QgbmV4dF9scGkgPSAwOwo+PiArICAgIHVpbnQzMl90IGxwaSwgbHBpX2lkeCA9 IG5leHRfbHBpICUgSE9TVF9MUElTX1BFUl9QQUdFOwo+PiArICAgIGludCBjaHVuazsKPj4gKyAg ICBpbnQgaTsKPj4gKwo+PiArICAgIHNwaW5fbG9jaygmbHBpX2RhdGEuaG9zdF9scGlzX2xvY2sp Owo+PiArICAgIGNodW5rID0gZmluZF91bnVzZWRfaG9zdF9scGkobmV4dF9scGkgLyBIT1NUX0xQ SVNfUEVSX1BBR0UsICZscGlfaWR4KTsKPj4gKwo+PiArICAgIGlmICggY2h1bmsgPT0gLSAxICkg ICAgICAgICAgLyogcmVzY2FuIGZvciBhIGhvbGUgZnJvbSB0aGUgYmVnaW5uaW5nICovCj4+ICsg ICAgewo+PiArICAgICAgICBscGlfaWR4ID0gMDsKPj4gKyAgICAgICAgY2h1bmsgPSBmaW5kX3Vu dXNlZF9ob3N0X2xwaSgwLCAmbHBpX2lkeCk7Cj4+ICsgICAgICAgIGlmICggY2h1bmsgPT0gLTEg KQo+PiArICAgICAgICB7Cj4+ICsgICAgICAgICAgICBzcGluX3VubG9jaygmbHBpX2RhdGEuaG9z dF9scGlzX2xvY2spOwo+PiArICAgICAgICAgICAgcmV0dXJuIC1FTk9TUEM7Cj4+ICsgICAgICAg IH0KPj4gKyAgICB9Cj4+ICsKPj4gKyAgICAvKiBJZiB3ZSBoaXQgYW4gdW5hbGxvY2F0ZWQgY2h1 bmssIHdlIGluaXRpYWxpemUgaXQgYW5kIHVzZSBlbnRyeSAwLiAqLwo+PiArICAgIGlmICggIWxw aV9kYXRhLmhvc3RfbHBpc1tjaHVua10gKQo+PiArICAgIHsKPj4gKyAgICAgICAgdW5pb24gaG9z dF9scGkgKm5ld19jaHVuazsKPj4gKwo+PiArICAgICAgICBuZXdfY2h1bmsgPSBhbGxvY194ZW5o ZWFwX3BhZ2VzKDAsIDApOwo+PiArICAgICAgICBpZiAoICFuZXdfY2h1bmsgKQo+PiArICAgICAg ICB7Cj4+ICsgICAgICAgICAgICBzcGluX3VubG9jaygmbHBpX2RhdGEuaG9zdF9scGlzX2xvY2sp Owo+PiArICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4+ICsgICAgICAgIH0KPj4gKwo+PiAr ICAgICAgICBmb3IgKCBpID0gMDsgaSA8IEhPU1RfTFBJU19QRVJfUEFHRTsgaSArPSBMUElfQkxP Q0sgKQo+PiArICAgICAgICAgICAgbmV3X2NodW5rW2ldLmRvbV9pZCA9IElOVkFMSURfRE9NSUQ7 Cj4+ICsKPj4gKyAgICAgICAgbHBpX2RhdGEuaG9zdF9scGlzW2NodW5rXSA9IG5ld19jaHVuazsK Pj4gKyAgICAgICAgbHBpX2lkeCA9IDA7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgbHBpID0gY2h1 bmsgKiBIT1NUX0xQSVNfUEVSX1BBR0UgKyBscGlfaWR4Owo+PiArCj4+ICsgICAgZm9yICggaSA9 IDA7IGkgPCBMUElfQkxPQ0s7IGkrKyApCj4+ICsgICAgewo+PiArICAgICAgICB1bmlvbiBob3N0 X2xwaSBobHBpOwo+PiArCj4+ICsgICAgICAgIC8qCj4+ICsgICAgICAgICAqIE1hcmsgdGhpcyBo b3N0IExQSSBhcyBiZWxvbmdpbmcgdG8gdGhlIGRvbWFpbiwgYnV0IGRvbid0IGFzc2lnbgo+PiAr ICAgICAgICAgKiBhbnkgdmlydHVhbCBMUEkgb3IgYSBWQ1BVIHlldC4KPj4gKyAgICAgICAgICov Cj4+ICsgICAgICAgIGhscGkudmlydF9scGkgPSBJTlZBTElEX0xQSTsKPj4gKyAgICAgICAgaGxw aS5kb21faWQgPSBkLT5kb21haW5faWQ7Cj4+ICsgICAgICAgIGhscGkudmNwdV9pZCA9IElOVkFM SURfRE9NSUQ7Cj4+ICsgICAgICAgIHdyaXRlX3U2NF9hdG9taWMoJmxwaV9kYXRhLmhvc3RfbHBp c1tjaHVua11bbHBpX2lkeCArIGldLmRhdGEsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg aGxwaS5kYXRhKTsKPj4gKwo+PiArICAgICAgICAvKgo+PiArICAgICAgICAgKiBFbmFibGUgdGhp cyBob3N0IExQSSwgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzIGR1cmluZyB0aGUKPj4gKyAg ICAgICAgICogZ3Vlc3QncyBydW50aW1lLgo+PiArICAgICAgICAgKi8KPj4gKyAgICAgICAgbHBp X2RhdGEubHBpX3Byb3BlcnR5W2xwaSArIGldIHw9IExQSV9QUk9QX0VOQUJMRUQ7Cj4+ICsgICAg fQo+PiArCj4+ICsgICAgLyoKPj4gKyAgICAgKiBXZSBoYXZlIGFsbG9jYXRlZCBhbmQgaW5pdGlh bGl6ZWQgdGhlIGhvc3QgTFBJIGVudHJpZXMsIHNvIGl0J3Mgc2FmZQo+PiArICAgICAqIHRvIGRy b3AgdGhlIGxvY2sgbm93LiBBY2Nlc3MgdG8gdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGRvbmUgY29u Y3VycmVudGx5Cj4+ICsgICAgICogYXMgaXQgaW52b2x2ZXMgb25seSBhbiBhdG9taWMgdWludDY0 X3QgYWNjZXNzLgo+PiArICAgICAqLwo+PiArICAgIHNwaW5fdW5sb2NrKCZscGlfZGF0YS5ob3N0 X2xwaXNfbG9jayk7Cj4+ICsKPj4gKyAgICBpZiAoIGxwaV9kYXRhLmZsYWdzICYgTFBJX1BST1BU QUJMRV9ORUVEU19GTFVTSElORyApCj4+ICsgICAgICAgIGNsZWFuX2FuZF9pbnZhbGlkYXRlX2Rj YWNoZV92YV9yYW5nZSgmbHBpX2RhdGEubHBpX3Byb3BlcnR5W2xwaV0sCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUElfQkxPQ0spOwo+IAo+IEkgd291 bGQgbW92ZSB0aGlzIHJpZ2h0IGJlbG93IAo+ICAgbHBpX2RhdGEubHBpX3Byb3BlcnR5W2xwaSAr IGldIHw9IExQSV9QUk9QX0VOQUJMRUQ7Cj4gCj4gCj4+ICsgICAgZ2ljdjNfaXRzX21hcF9ob3N0 X2V2ZW50cyhpdHMsIGhvc3RfZGV2aWQsIGV2ZW50aWQsIGxwaSArIExQSV9PRkZTRVQsCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUElfQkxPQ0spOwo+PiArCj4+ICsgICAgbmV4 dF9scGkgPSBscGkgKyBMUElfQkxPQ0s7Cj4+ICsgICAgcmV0dXJuIGxwaSArIExQSV9PRkZTRVQ7 Cj4+ICt9Cj4+ICsKPj4gK2ludCBnaWN2M19mcmVlX2hvc3RfbHBpX2Jsb2NrKHN0cnVjdCBob3N0 X2l0cyAqaXRzLCB1aW50MzJfdCBscGkpCj4+ICt7Cj4+ICsgICAgdW5pb24gaG9zdF9scGkgKmhs cGksIGVtcHR5X2xwaSA9IHsgLmRvbV9pZCA9IElOVkFMSURfRE9NSUQgfTsKPj4gKyAgICBpbnQg aTsKPj4gKwo+PiArICAgIGhscGkgPSBnaWNfZ2V0X2hvc3RfbHBpKGxwaSk7Cj4gCj4gSSB0aGlu ayB5b3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCAibHBpIiBpcyB0aGUgZmlyc3QgbHBpIG9mIGEg TFBJX0JMT0NLLgo+IEVpdGhlciB0aGF0LCBvciBnaWNfZ2V0X2hvc3RfbHBpIHNob3VsZCBtYWtl IHN1cmUgdG8gYWx3YXlzIHJldHVybiB0aGUKPiBmaXJzdCBscGkgaW4gYSBibG9jay4gCj4gCj4g Cj4+ICsgICAgaWYgKCAhaGxwaSApCj4+ICsgICAgICAgIHJldHVybiAtRU5PRU5UOwo+PiArCj4+ ICsgICAgc3Bpbl9sb2NrKCZscGlfZGF0YS5ob3N0X2xwaXNfbG9jayk7Cj4+ICsKPj4gKyAgICBm b3IgKCBpID0gMDsgaSA8IExQSV9CTE9DSzsgaSsrICkKPj4gKyAgICAgICAgd3JpdGVfdTY0X2F0 b21pYygmaGxwaVtpXS5kYXRhLCBlbXB0eV9scGkuZGF0YSk7Cj4+ICsKPj4gKyAgICAvKiBUT0RP OiBDYWxsIGEgZnVuY3Rpb24gaW4gZ2ljLXYzLWl0cy5jIHRvIHNlbmQgRElTQ0FSRHMgKi8KPj4g Kwo+PiArICAgIHNwaW5fdW5sb2NrKCZscGlfZGF0YS5ob3N0X2xwaXNfbG9jayk7Cj4+ICsKPj4g KyAgICByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiAgLyoKPj4gICAqIExvY2FsIHZhcmlhYmxlczoK Pj4gICAqIG1vZGU6IEMKPj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljLmgg Yi94ZW4vaW5jbHVkZS9hc20tYXJtL2dpYy5oCj4+IGluZGV4IDEyYmQxNTUuLjc4MjU1NzUgMTAw NjQ0Cj4+IC0tLSBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljLmgKPj4gKysrIGIveGVuL2luY2x1 ZGUvYXNtLWFybS9naWMuaAo+PiBAQCAtMjIwLDcgKzIyMCwxMiBAQCBlbnVtIGdpY192ZXJzaW9u IHsKPj4gICAgICBHSUNfVjMsCj4+ICB9Owo+PiAgCj4+ICsjZGVmaW5lIElOVkFMSURfTFBJICAg ICAwCj4+ICAjZGVmaW5lIExQSV9PRkZTRVQgICAgICA4MTkyCj4+ICtzdGF0aWMgaW5saW5lIGJv b2wgaXNfbHBpKHVuc2lnbmVkIGludCBpcnEpCj4+ICt7Cj4+ICsgICAgcmV0dXJuIGlycSA+PSBM UElfT0ZGU0VUOwo+PiArfQo+PiAgCj4+ICBleHRlcm4gZW51bSBnaWNfdmVyc2lvbiBnaWNfaHdf dmVyc2lvbih2b2lkKTsKPj4gIAo+PiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLWFybS9n aWNfdjNfaXRzLmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL2dpY192M19pdHMuaAo+PiBpbmRleCAz NDIxZWEwLi4yMzg3OTcyIDEwMDY0NAo+PiAtLS0gYS94ZW4vaW5jbHVkZS9hc20tYXJtL2dpY192 M19pdHMuaAo+PiArKysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL2dpY192M19pdHMuaAo+PiBAQCAt MTA2LDYgKzEwNiwxMSBAQAo+PiAgI2RlZmluZSBIT1NUX0lUU19GTFVTSF9DTURfUVVFVUUgICAg ICAgICgxVSA8PCAwKQo+PiAgI2RlZmluZSBIT1NUX0lUU19VU0VTX1BUQSAgICAgICAgICAgICAg ICgxVSA8PCAxKQo+PiAgCj4+ICsjZGVmaW5lIElOVkFMSURfRE9NSUQgKCh1aW50MTZfdCl+MCkK PiAKPiBXZSBhbHJlYWR5IGhhdmUgRE9NSURfSU5WQUxJRAo+IAo+IAo+PiArLyogV2UgYWxsb2Nh dGUgTFBJcyBvbiB0aGUgaG9zdHMgaW4gY2h1bmtzIG9mIDMyIHRvIHJlZHVjZSBoYW5kbGluZyBv dmVyaGVhZC4gKi8KPj4gKyNkZWZpbmUgTFBJX0JMT0NLICAgICAgICAgICAgICAgICAgICAgICAz Mgo+PiArCj4+ICAvKiBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBoYXJkd2FyZSBJVFMgKi8KPj4g IHN0cnVjdCBob3N0X2l0cyB7Cj4+ICAgICAgc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKPj4gQEAg LTE1MSw2ICsxNTYsMTIgQEAgaW50IGdpY3YzX2l0c19tYXBfZ3Vlc3RfZGV2aWNlKHN0cnVjdCBk b21haW4gKmQsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZHJfdCBob3N0 X2Rvb3JiZWxsLCB1aW50MzJfdCBob3N0X2RldmlkLAo+PiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBhZGRyX3QgZ3Vlc3RfZG9vcmJlbGwsIHVpbnQzMl90IGd1ZXN0X2RldmlkLAo+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG5yX2V2ZW50cywgYm9v bCB2YWxpZCk7Cj4+ICtpbnQgZ2ljdjNfaXRzX21hcF9ob3N0X2V2ZW50cyhzdHJ1Y3QgaG9zdF9p dHMgKml0cywKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGhvc3Rf ZGV2aWQsIHVpbnQzMl90IGV2ZW50aWQsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCBscGksIHVpbnQzMl90IG5yZXZlbnRzKTsKPj4gK2ludCBnaWN2M19hbGxvY2F0 ZV9ob3N0X2xwaV9ibG9jayhzdHJ1Y3QgaG9zdF9pdHMgKml0cywgc3RydWN0IGRvbWFpbiAqZCwK Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBob3N0X2Rldmlk LCB1aW50MzJfdCBldmVudGlkKTsKPj4gK2ludCBnaWN2M19mcmVlX2hvc3RfbHBpX2Jsb2NrKHN0 cnVjdCBob3N0X2l0cyAqaXRzLCB1aW50MzJfdCBscGkpOwo+PiAgCj4+ICAjZWxzZQo+PiAgCj4+ IC0tIAo+PiAyLjkuMAo+PgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpo dHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==