From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: Re: [RFC PATCH v2 07/26] ARM: GICv3 ITS: introduce host LPI array Date: Fri, 6 Jan 2017 17:59:27 +0000 Message-ID: <591e0403-21aa-7fb6-8ea2-23b4e93b3a67@arm.com> References: <20161222182446.18791-1-andre.przywara@arm.com> <20161222182446.18791-8-andre.przywara@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cPYmQ-0002Ld-Lq for xen-devel@lists.xenproject.org; Fri, 06 Jan 2017 17:58:18 +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 , Vijay Kilari List-Id: xen-devel@lists.xenproject.org SGksCgpPbiAwNS8wMS8xNyAxODo1NiwgU3RlZmFubyBTdGFiZWxsaW5pIHdyb3RlOgo+IE9uIFRo dSwgMjIgRGVjIDIwMTYsIEFuZHJlIFByenl3YXJhIHdyb3RlOgo+IDc+IFRoZSBudW1iZXIgb2Yg TFBJcyBvbiBhIGhvc3QgY2FuIGJlIHBvdGVudGlhbGx5IGh1Z2UgKG1pbGxpb25zKSwKPj4gYWx0 aG91Z2ggaW4gcHJhY3Rpc2Ugd2lsbCBiZSBtb3N0bHkgcmVhc29uYWJsZS4gU28gcHJlbWF0dXJl bHkgYWxsb2NhdGluZwo+PiBhbiBhcnJheSBvZiBzdHJ1Y3QgaXJxX2Rlc2MncyBmb3IgZWFjaCBM UEkgaXMgbm90IGFuIG9wdGlvbi4KPj4gSG93ZXZlciBYZW4gaXRzZWxmIGRvZXMgbm90IGNhcmUg YWJvdXQgTFBJcywgYXMgZXZlcnkgTFBJIHdpbGwgYmUgaW5qZWN0ZWQKPj4gaW50byBhIGd1ZXN0 IChEb20wIGZvciBub3cpLgo+PiBDcmVhdGUgYSBkZW5zZSBkYXRhIHN0cnVjdHVyZSAoOCBCeXRl cykgZm9yIGVhY2ggTFBJIHdoaWNoIGhvbGRzIGp1c3QKPj4gZW5vdWdoIGluZm9ybWF0aW9uIHRv IGRldGVybWluZSB0aGUgdmlydHVhbCBJUlEgbnVtYmVyIGFuZCB0aGUgVkNQVSBpbnRvCj4+IHdo aWNoIHRoZSBMUEkgbmVlZHMgdG8gYmUgaW5qZWN0ZWQuCj4+IEFsc28gdG8gbm90IGFydGlmaWNp YWxseSBsaW1pdCB0aGUgbnVtYmVyIG9mIExQSXMsIHdlIGNyZWF0ZSBhIDItbGV2ZWwKPj4gdGFi bGUgZm9yIGhvbGRpbmcgdGhvc2Ugc3RydWN0dXJlcy4KPj4gVGhpcyBwYXRjaCBpbnRyb2R1Y2Vz IGZ1bmN0aW9ucyB0byBpbml0aWFsaXplIHRoZXNlIHRhYmxlcyBhbmQgdG8KPj4gY3JlYXRlLCBs b29rdXAgYW5kIGRlc3Ryb3kgZW50cmllcyBmb3IgYSBnaXZlbiBMUEkuCj4+IFdlIGFsbG9jYXRl IGFuZCBhY2Nlc3MgTFBJIGluZm9ybWF0aW9uIGluIGEgd2F5IHRoYXQgZG9lcyBub3QgcmVxdWly ZQo+PiBhIGxvY2suCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IEFuZHJlIFByenl3YXJhIDxhbmRyZS5w cnp5d2FyYUBhcm0uY29tPgo+PiAtLS0KPj4gIHhlbi9hcmNoL2FybS9naWMtaXRzLmMgICAgICAg IHwgMjMzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+PiAgeGVu L2luY2x1ZGUvYXNtLWFybS9naWMtaXRzLmggfCAgIDEgKwo+PiAgMiBmaWxlcyBjaGFuZ2VkLCAy MzMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEveGVuL2Fy Y2gvYXJtL2dpYy1pdHMuYyBiL3hlbi9hcmNoL2FybS9naWMtaXRzLmMKPj4gaW5kZXggZTE1N2M2 Yi4uZTdkZGQ5MCAxMDA2NDQKPj4gLS0tIGEveGVuL2FyY2gvYXJtL2dpYy1pdHMuYwo+PiArKysg Yi94ZW4vYXJjaC9hcm0vZ2ljLWl0cy5jCj4+IEBAIC0xOCwyMSArMTgsMzYgQEAKPj4gIAo+PiAg I2luY2x1ZGUgPHhlbi9jb25maWcuaD4KPj4gICNpbmNsdWRlIDx4ZW4vbGliLmg+Cj4+ICsjaW5j bHVkZSA8eGVuL3NjaGVkLmg+Cj4+ICAjaW5jbHVkZSA8eGVuL2Vyci5oPgo+PiAgI2luY2x1ZGUg PHhlbi9kZXZpY2VfdHJlZS5oPgo+PiAgI2luY2x1ZGUgPHhlbi9saWJmZHQvbGliZmR0Lmg+Cj4+ ICAjaW5jbHVkZSA8eGVuL3NjaGVkLmg+Cj4+ICAjaW5jbHVkZSA8eGVuL3NpemVzLmg+Cj4+ICAj aW5jbHVkZSA8YXNtL3AybS5oPgo+PiArI2luY2x1ZGUgPGFzbS9kb21haW4uaD4KPj4gICNpbmNs dWRlIDxhc20vaW8uaD4KPj4gICNpbmNsdWRlIDxhc20vZ2ljLmg+Cj4+ICAjaW5jbHVkZSA8YXNt L2dpY192M19kZWZzLmg+Cj4+ICAjaW5jbHVkZSA8YXNtL2dpYy1pdHMuaD4KPj4gIAo+PiArLyog TFBJcyBvbiB0aGUgaG9zdCBhbHdheXMgZ28gdG8gYSBndWVzdCwgc28gbm8gc3RydWN0IGlycV9k ZXNjIGZvciB0aGVtLiAqLwo+PiArdW5pb24gaG9zdF9scGkgewo+PiArICAgIHVpbnQ2NF90IGRh dGE7Cj4+ICsgICAgc3RydWN0IHsKPj4gKyAgICAgICAgdWludDY0X3QgdmlydF9scGk6MzI7Cj4+ ICsgICAgICAgIHVpbnQ2NF90IGRvbV9pZDoxNjsKPj4gKyAgICAgICAgdWludDY0X3QgdmNwdV9p ZDoxNjsKPj4gKyAgICB9Owo+PiArfTsKPiAKPiBKdXN0IGdvIHdpdGggYSByZWd1bGFyIHN0cnVj dAo+IAo+ICAgICBzdHJ1Y3QgaG9zdF9scGkgewo+ICAgICAgICAgdWludDMyX3QgdmlydF9scGk7 Cj4gICAgICAgICB1aW50MTZfdCBkb21faWQ7Cj4gICAgICAgICB1aW50MTZfdCB2Y3B1X2lkOwo+ ICAgICB9Owo+IAo+IFRoZSBhYXJjaDY0IEMgQUJJIGd1YXJhbnRlZXMgdGhlIGFsaWdubWVudHMg b2YgdGhlIGZpZWxkcy4KClllcywgSSB3aWxsIGdldCByaWQgb2YgdGhlIGJpdGZpZWxkcy4gQnV0 IHRoZSBhY3R1YWwgcHVycG9zZSBvZiB0aGUKdW5pb24gaXMgdG8gYWxsb3cgbG9jay1mcmVlIGF0 b21pYyBhY2Nlc3MuIEkganVzdCBzZWUgbm93IHRoYXQgSSBmYWlsZWQKdG8gZG9jdW1lbnQgdGhh dCwgc29ycnkhCgpXZSBjYW4ndCBhZmZvcmQgdG8gaGF2ZSBhIGxvY2sgZm9yIHRoZSBhY3R1YWwg ZGF0YSBoZXJlLCBzbyB0aGUgaWRlYSB3YXMKdG8gdXNlIHRoZSBuYXR1cmFsbHkgYXRvbWljIGFj Y2VzcyBhIG5hdGl2ZSBkYXRhIHR5cGUgd291bGQgZ2l2ZSB1cy4KSW4gY2FzZSB3ZSB3YW50IHRv IHdyaXRlIG11bHRpcGxlIG1lbWJlcnMsIHdlIGFzc2VtYmxlIHRoZW0gaW4gYSBsb2NhbApjb3B5 IGFuZCB0aGVuIHdyaXRlIHRoZSB1aW50NjRfdCB2YXJpYWJsZSBpbnRvIHRoZSBhY3R1YWwgbG9j YXRpb24uClNpbWlsYXIgZm9yIHJlYWRpbmcuIFNpbmdsZSBtZW1iZXJzIGNhbiBiZSB1cGRhdGVk IHVzaW5nIHRoZSBtZW1iZXJzCmRpcmVjdGx5LgpTaW5jZSB0aGUgYXJjaGl0ZWN0dXJlIGd1YXJh bnRlZXMgYXRvbWljIGFjY2VzcyBmb3IgYW4gYWxpZ25lZCBtZW1vcnkKYWNjZXNzIHRvL2Zyb20g YSBHUFIsIEkgdGhpbmsgdGhpcyBpcyBzYWZlLgpJIGFtIG5vdCBzdXJlIHdlIG5lZWQgdG8gdXNl IHRoZSBhdG9taWNfPHR5cGU+X3tyZWFkLHdyaXRlfSBhY2Nlc3NvcnMKaGVyZT8gSSB0cmllZCBp dDogdGhlIHJlc3VsdGluZyBhc3NlbWJseSBpcyBpZGVudGljYWwsIGFuZCB0aGUgc291cmNlCmRv ZXNuJ3QgbG9vayB0b28gYmFkIGVpdGhlciwgc28gSSBndWVzcyBJIHdpbGwgY2hhbmdlIHRoZW0g b3ZlciwganVzdCB0bwpiZSBzYWZlPwoKUGxlYXNlIG5vdGUgdGhhdCB0aGlzIG5vdCBhYm91dCBh Y2Nlc3Mgb3JkZXJpbmcgZHVlIHRvIGNvbmN1cnJlbnQKYWNjZXNzZXMgKHNvIG5vIGJhcnJpZXJz KSwgd2UganVzdCBuZWVkIHRvIGd1YXJhbnRlZSB0aGF0IGEgaG9zdF9scGkKc3RhdGUgaXMgY29u c2lzdGVudCBpbiByZXNwZWN0IHRvIGl0cyBtZW1iZXJzLgoKPj4gIC8qIEdsb2JhbCBzdGF0ZSAq Lwo+PiAgc3RhdGljIHN0cnVjdCB7Cj4+ICAgICAgdWludDhfdCAqbHBpX3Byb3BlcnR5Owo+PiAr ICAgIHVuaW9uIGhvc3RfbHBpICoqaG9zdF9scGlzOwo+PiAgICAgIHVuc2lnbmVkIGludCBob3N0 X2xwaV9iaXRzOwo+PiArICAgIC8qIFByb3RlY3RzIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlv biBvZiBob3N0IExQSXMsIGJ1dCBub3QgdGhlIGFjY2VzcyAqLwo+PiArICAgIHNwaW5sb2NrX3Qg aG9zdF9scGlzX2xvY2s7Cj4+ICB9IGxwaV9kYXRhOwo+PiAgCj4+ICAvKiBQaHlzaWNhbCByZWRp c3RyaWJ1dG9yIGFkZHJlc3MgKi8KPj4gQEAgLTQzLDYgKzU4LDE5IEBAIHN0YXRpYyBERUZJTkVf UEVSX0NQVSh1aW50NjRfdCwgcmRpc3RfaWQpOwo+PiAgc3RhdGljIERFRklORV9QRVJfQ1BVKHZv aWQgKiwgcGVuZGluZ190YWJsZSk7Cj4+ICAKPj4gICNkZWZpbmUgTUFYX1BIWVNfTFBJUyAgIChC SVRfVUxMKGxwaV9kYXRhLmhvc3RfbHBpX2JpdHMpIC0gODE5MikKPj4gKyNkZWZpbmUgSE9TVF9M UElTX1BFUl9QQUdFICAgICAgKFBBR0VfU0laRSAvIHNpemVvZih1bmlvbiBob3N0X2xwaSkpCj4+ ICsKPj4gK3N0YXRpYyB1bmlvbiBob3N0X2xwaSAqZ2ljX2dldF9ob3N0X2xwaSh1aW50MzJfdCBw bHBpKQo+PiArewo+PiArICAgIGlmICggcGxwaSA8IDgxOTIgfHwgcGxwaSA+PSBNQVhfUEhZU19M UElTICsgODE5MiApCj4+ICsgICAgICAgIHJldHVybiBOVUxMOwo+PiArCj4+ICsgICAgcGxwaSAt PSA4MTkyOwo+PiArICAgIGlmICggIWxwaV9kYXRhLmhvc3RfbHBpc1twbHBpIC8gSE9TVF9MUElT X1BFUl9QQUdFXSApCj4+ICsgICAgICAgIHJldHVybiBOVUxMOwo+PiArCj4+ICsgICAgcmV0dXJu ICZscGlfZGF0YS5ob3N0X2xwaXNbcGxwaSAvIEhPU1RfTFBJU19QRVJfUEFHRV1bcGxwaSAlIEhP U1RfTFBJU19QRVJfUEFHRV07Cj4+ICt9Cj4+ICAKPj4gICNkZWZpbmUgSVRTX0NNRF9RVUVVRV9T WiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1pfNjRLCj4+ICAKPj4gQEAgLTk2LDYg KzEyNCwyMCBAQCBzdGF0aWMgaW50IGl0c19zZW5kX2NtZF9zeW5jKHN0cnVjdCBob3N0X2l0cyAq aXRzLCBpbnQgY3B1KQo+PiAgICAgIHJldHVybiBpdHNfc2VuZF9jb21tYW5kKGl0cywgY21kKTsK Pj4gIH0KPj4gIAo+PiArc3RhdGljIGludCBpdHNfc2VuZF9jbWRfbWFwdGkoc3RydWN0IGhvc3Rf aXRzICppdHMsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkZXZp Y2VpZCwgdWludDMyX3QgZXZlbnRpZCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQzMl90IHBpbnRpZCwgdWludDE2X3QgaWNpZCkKPj4gK3sKPj4gKyAgICB1aW50NjRfdCBj bWRbNF07Cj4+ICsKPj4gKyAgICBjbWRbMF0gPSBHSVRTX0NNRF9NQVBUSSB8ICgodWludDY0X3Qp ZGV2aWNlaWQgPDwgMzIpOwo+PiArICAgIGNtZFsxXSA9IGV2ZW50aWQgfCAoKHVpbnQ2NF90KXBp bnRpZCA8PCAzMik7Cj4+ICsgICAgY21kWzJdID0gaWNpZDsKPj4gKyAgICBjbWRbM10gPSAweDAw Owo+PiArCj4+ICsgICAgcmV0dXJuIGl0c19zZW5kX2NvbW1hbmQoaXRzLCBjbWQpOwo+PiArfQo+ PiArCj4+ICBzdGF0aWMgaW50IGl0c19zZW5kX2NtZF9tYXBjKHN0cnVjdCBob3N0X2l0cyAqaXRz LCBpbnQgY29sbGVjdGlvbl9pZCwgaW50IGNwdSkKPj4gIHsKPj4gICAgICB1aW50NjRfdCBjbWRb NF07Cj4+IEBAIC0xMjQsNiArMTY2LDE5IEBAIHN0YXRpYyBpbnQgaXRzX3NlbmRfY21kX21hcGQo c3RydWN0IGhvc3RfaXRzICppdHMsIHVpbnQzMl90IGRldmljZWlkLAo+PiAgICAgIHJldHVybiBp dHNfc2VuZF9jb21tYW5kKGl0cywgY21kKTsKPj4gIH0KPj4gIAo+PiArc3RhdGljIGludCBpdHNf c2VuZF9jbWRfaW52KHN0cnVjdCBob3N0X2l0cyAqaXRzLAo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90IGRldmljZWlkLCB1aW50MzJfdCBldmVudGlkKQo+PiArewo+PiAr ICAgIHVpbnQ2NF90IGNtZFs0XTsKPj4gKwo+PiArICAgIGNtZFswXSA9IEdJVFNfQ01EX0lOViB8 ICgodWludDY0X3QpZGV2aWNlaWQgPDwgMzIpOwo+PiArICAgIGNtZFsxXSA9IGV2ZW50aWQ7Cj4+ ICsgICAgY21kWzJdID0gMHgwMDsKPj4gKyAgICBjbWRbM10gPSAweDAwOwo+PiArCj4+ICsgICAg cmV0dXJuIGl0c19zZW5kX2NvbW1hbmQoaXRzLCBjbWQpOwo+PiArfQo+PiArCj4+ICAvKiBTZXQg dXAgdGhlICgxOjEpIGNvbGxlY3Rpb24gbWFwcGluZyBmb3IgdGhlIGdpdmVuIGhvc3QgQ1BVLiAq Lwo+PiAgdm9pZCBnaWN2M19pdHNfc2V0dXBfY29sbGVjdGlvbihpbnQgY3B1KQo+PiAgewo+PiBA QCAtMzY2LDIxICs0MjEsMTgxIEBAIHVpbnQ2NF90IGdpY3YzX2xwaV9nZXRfcHJvcHRhYmxlKCkK Pj4gIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X2xwaV9iaXRzID0gQ09ORklHX01BWF9IT1NUX0xQ SV9CSVRTOwo+PiAgaW50ZWdlcl9wYXJhbSgibWF4X2xwaV9iaXRzIiwgbWF4X2xwaV9iaXRzKTsK Pj4gIAo+PiArLyogQWxsb2NhdGUgdGhlIDJuZCBsZXZlbCBhcnJheSBmb3IgaG9zdCBMUElzLiBU aGlzIG9uZSBob2xkcyBwb2ludGVycwo+PiArICogdG8gdGhlIHBhZ2Ugd2l0aCB0aGUgYWN0dWFs ICJ1bmlvbiBob3N0X2xwaSIgZW50cmllcy4gT3VyIExQSSBsaW1pdAo+PiArICogYXZvaWRzIGV4 Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2UuCj4+ICsgKi8KPj4gIGludCBnaWN2M19scGlfaW5pdF9ob3N0 X2xwaXModW5zaWduZWQgaW50IGh3X2xwaV9iaXRzKQo+PiAgewo+PiArICAgIGludCBucl9scGlf cHRyczsKPj4gKwo+PiAgICAgIGxwaV9kYXRhLmhvc3RfbHBpX2JpdHMgPSBtaW4oaHdfbHBpX2Jp dHMsIG1heF9scGlfYml0cyk7Cj4+ICAKPj4gKyAgICBzcGluX2xvY2tfaW5pdCgmbHBpX2RhdGEu aG9zdF9scGlzX2xvY2spOwo+PiArCj4+ICsgICAgbnJfbHBpX3B0cnMgPSBNQVhfUEhZU19MUElT IC8gKFBBR0VfU0laRSAvIHNpemVvZih1bmlvbiBob3N0X2xwaSkpOwo+PiArICAgIGxwaV9kYXRh Lmhvc3RfbHBpcyA9IHh6YWxsb2NfYXJyYXkodW5pb24gaG9zdF9scGkgKiwgbnJfbHBpX3B0cnMp Owo+PiArICAgIGlmICggIWxwaV9kYXRhLmhvc3RfbHBpcyApCj4+ICsgICAgICAgIHJldHVybiAt RU5PTUVNOwo+PiArCj4+ICAgICAgcHJpbnRrKCJHSUN2MzogdXNpbmcgYXQgbW9zdCAlbGxkIExQ SXMgb24gdGhlIGhvc3QuXG4iLCBNQVhfUEhZU19MUElTKTsKPj4gIAo+PiAgICAgIHJldHVybiAw Owo+PiAgfQo+PiAgCj4+ICsjZGVmaW5lIElOVkFMSURfRE9NSUQgKCh1aW50MTZfdCl+MCkKPj4g KyNkZWZpbmUgTFBJX0JMT0NLICAgICAgIDMyCj4gCj4gV2h5IDMyPyBXaGF0IGlzIHRoZSByZWFz b24gYmVoaW5kIGl0PyBJdCBzaG91bGQgYmUgZXhwbGFpbmVkIGluIHRoZQo+IGNvbW1pdCBtZXNz YWdlIGFuZCBpbiB0aGUgY29kZS4KClRoZXJlIGFyZSBtdWx0aXBsZSByZWFzb25zIGZvciAzMjoK MSkgbWF4aW11bSBudW1iZXIgb2YgTVNJcyBwZXIgZGV2aWNlIGluIChsZWdhY3kpIFBDSSBkZXZp Y2VzCjIpIHNtYWxsZXN0IHJlYXNvbmFibGUgc2l6ZSBvZiBJVFQgKDI1NiBCeXRlIGFsaWdubWVu dCB3aXRoIHR5cGljYWxseSA4CkJ5dGUgc2l6ZWQgZW50cmllcykKMykgbnVtYmVyIG9mIElUVCBl bnRyaWVzIHRoZSBMaW51eCBrZXJuZWwgYWxsb2NhdGVzIG5vcm1hbGx5CgpUaGUgcHJldmlvdXMg dmVyc2lvbiB3b3JrZWQgd2l0aG91dCB1c2luZyBibG9ja3MsIGJ5IGFsbG9jYXRpbmcgc2luZ2xl CkxQSXMuIE5vdyBvdXIgZWFybHkgZGV2aWNlIGFuZCBMUEkgbWFwcGluZyBtYW5kYXRlcyBhIG51 bWJlciBvZiBldmVudHMKdG8gYmUgYWxsb2NhdGVkLCB3aGljaCB3ZSBoYXBwZW4gdG8gc2V0IHRv IDMyLiBJZGVhbGx5IHRoaXMgbnVtYmVyIHdvdWxkCmJlIHBhc3NlZCBvbiBmcm9tIGEgZ3Vlc3Qg b3IgRG9tMCwgYnV0IHRoaXMgd291bGQgcmVxdWlyZSBjaGFuZ2luZyB0aGUKKGh5cGVyY2FsbCkg aW50ZXJmYWNlcy4gV2UgbWF5IGRvIHRoaXMgbGF0ZXIsIGJ1dCBmb3Igbm93IGp1c3QgdXNpbmcg MzIKc2VlbXMgdG8gYmUgZ29vZCBlbm91Z2guCgo+IFBsZWFzZSBhZGQgc29tZSBudW1iZXJzIG9m IG1lbW9yeSBjb25zdW1wdGlvbiBhbmQgYXZlcmFnZSBudW1iZXIgb2YKPiBpdGVyYXRpb25zIHJl cXVpcmVkIHRvIHNldHVwIGxwaXMgb24gYW4gZXhhbXBsZSBzZXJ2ZXIgc3lzdGVtLiBJdCBpcwo+ IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjdXJyZW50IGFsZ29yaXRobSBhbmQgZGF0 YSBzdHJ1Y3RzIGFyZQo+IHN1ZmZpY2llbnQgZm9yIG91ciBuZWVkcy4KCk9LLCBjYW4gZG8uCgo+ IFdpdGggdGhlIG5ldyBob3N0X2xwaXMgZGF0YSBzdHJ1Y3QgYmVsb3csIHRoZSBtZW1vcnkgY29u c3VtcHRpb24gaXMKPiAKPiAgICAgUk9VTkRVUChucl9wbHBpcyAqIDgsIDQwOTYpICsKPiAgICAg KFJPVU5EVVAobnJfcGxwaXMgKiA4LCA0MDk2KSAvIDQwOTYpICogOCArCj4gICAgIChucl9ldmVu dHMgLyAzMikgKiA0CgpJIGFtIG5vdCBzdXJlIEkgZ2V0IHRoZSBtZWFuaW5ncyBvZiB0aGUgbGlu ZXMgaGVyZSwgc2luY2UgeW91IG1peApwaHlzaWNhbCBMUElzIChvbiB0aGUgaG9zdCkgd2l0aCBl dmVudHMgKHBlciBtYXBwZWQgZGV2aWNlIGluIGVhY2ggZG9tYWluKS4KCkZvciBwaHlzaWNhbCBM UElzOgotIE9uZSB0b3AgbGV2ZWwgdGFibGUgdXNpbmcgb25lIHBvaW50ZXIgcGVyICg0SyAvIHNp emVvZih1bmlvbgpob3N0X2xwaSkpIExQSXMsIHNvIGZvciBlYWNoIDUxMiBMUElzLiBUaGUgbnVt YmVyIG9mIExQSXMgaXMgdGhlIGNvbXBpbGUKdGltZSBjb25zdGFudCwgcG9zc2libHkgb3ZlcnJp ZGRlbiB2aWEgdGhlIGNvbW1hbmQgbGluZS4gRGVmYXVsdCB2YWx1ZQppcyAyMCBiaXRzLCBzbyB0 aGUgdG9wIGxldmVsIHRhYmxlIHRha2VzIDE2S0IuCi0gRm9yIGVhY2ggYWN0dWFsbHkgYWxsb2Nh dGVkIGNvbnRpZ3VvdXMgYmxvY2sgb2YgNTEyIExQSXMgYW5vdGhlciA0SwpwYWdlIHRvIGhvbGQg dGhlIGFjdHVhbCB1bmlvbiBob3N0X2xwaSBlbnRyaWVzLiBUaGlzIGlzIGRlbnNlbHkKYWxsb2Nh dGVkLCBzbyBvbmUgNEsgdGFibGUgY292ZXJzIDE2IHBhc3NlZC10aHJvdWdoIGRldmljZXMgKHdp dGggMzIKTFBJcyDDoSA4IGJ5dGVzIGVhY2gpLCByZWdhcmRsZXNzIG9mIHRoZWlyIGRldmljZSBJ RCBvciB2aXJ0dWFsIExQSS4gU28KMTI4IChQQ0kpIGRldmljZXMgdGFrZSB1cCAzMiBLQiwgZm9y IGluc3RhbmNlLCB0aGUgZGVmYXVsdCBtYXhpbXVtIG9mCjEwMjQgZGV2aWNlcyBuZWVkcyAyNTZL QiAoaWYgZXZlcnkgZGV2aWNlIGlzIGFjdHVhbGx5IHVzZWQpLgoKVGhpcyBjb3ZlcnMgdGhlIGRh dGEgc3RydWN0dXJlcyBmb3Igb3VyIGludGVybmFsIHBoeXNpY2FsIExQSSBmb3J3YXJkaW5nCmlu Zm9ybWF0aW9uLgpBZGRpdGlvbmFsbHkgdGhlIGhvc3QgSVRTIHJlcXVpcmVzIHNvbWUgbWVtb3J5 LCB3aGljaCBpcyBvbmUgSVRUIHBlcgp1c2VkIGRldmljZSAoMzIgZXZlbnRzICg9TVNJcykgw6Eg OCBieXRlcyA9IDI1NiBieXRlcykgYW5kIG5yX2RldmljZXMKKD0xMDI0IGJ5IGRlZmF1bHQpICog OCBCeXRlcyBmb3IgdGhlIGRldmljZSB0YWJsZS4gVGhhdCBhZGRzIHVwIHRvIDI1NksKKHdvcnN0 IGNhc2UpICsgOEsuCgpJIGd1ZXNzIEkgd2lsbCBlaXRoZXIgYWRkIHRoZSBicm9rZW4tZG93biBt ZW1vcnkgcmVxdWlyZW1lbnRzIGludG8gc29tZQpkb2N1bWVudGF0aW9uIGZpbGUgb3IgaW50byB0 aGUgZGVzaWduIGRvY3VtZW50LgoKPiBXaGljaCwgYXNzdW1pbmcgbnJfZXZlbnRzID0gbnJfcGxw aXMgPSAxMDI0LCBtZWFucyA4MTkyICsgMTYgKyAxMjgsIHJpZ2h0Pwo+IAo+IAo+PiArLyogTXVz dCBiZSBjYWxsZWQgd2l0aCBob3N0X2xwaXNfbG9jayBoZWxkLiAqLwo+PiArc3RhdGljIGludCBm aW5kX3VudXNlZF9ob3N0X2xwaShpbnQgc3RhcnQsIHVpbnQzMl90ICppbmRleCkKPj4gK3sKPj4g KyAgICBpbnQgY2h1bms7Cj4+ICsgICAgdWludDMyX3QgaSA9ICppbmRleDsKPj4gKwo+PiArICAg IGZvciAoIGNodW5rID0gc3RhcnQ7IGNodW5rIDwgTUFYX1BIWVNfTFBJUyAvIEhPU1RfTFBJU19Q RVJfUEFHRTsgY2h1bmsrKyApCj4+ICsgICAgewo+PiArICAgICAgICAvKiBJZiB3ZSBoaXQgYW4g dW5hbGxvY2F0ZWQgY2h1bmssIHVzZSBlbnRyeSAwIGluIHRoYXQgb25lLiAqLwo+PiArICAgICAg ICBpZiAoICFscGlfZGF0YS5ob3N0X2xwaXNbY2h1bmtdICkKPj4gKyAgICAgICAgewo+PiArICAg ICAgICAgICAgKmluZGV4ID0gMDsKPj4gKyAgICAgICAgICAgIHJldHVybiBjaHVuazsKPj4gKyAg ICAgICAgfQo+PiArCj4+ICsgICAgICAgIC8qIEZpbmQgYW4gdW5hbGxvY2F0ZWQgZW50cnkgaW4g dGhpcyBjaHVuay4gKi8KPj4gKyAgICAgICAgZm9yICggOyBpIDwgSE9TVF9MUElTX1BFUl9QQUdF OyBpICs9IExQSV9CTE9DSyApCj4+ICsgICAgICAgIHsKPj4gKyAgICAgICAgICAgIGlmICggbHBp X2RhdGEuaG9zdF9scGlzW2NodW5rXVtpXS5kb21faWQgPT0gSU5WQUxJRF9ET01JRCApCj4+ICsg ICAgICAgICAgICB7Cj4+ICsgICAgICAgICAgICAgICAgKmluZGV4ID0gaTsKPj4gKyAgICAgICAg ICAgICAgICByZXR1cm4gY2h1bms7Cj4+ICsgICAgICAgICAgICB9Cj4gCj4gVGhpcyBhc3N1bWVz IHRoYXQgcGxwaXMgYXJlIGFsd2F5cyBhbGxvY2F0ZWQgMzIgYXQgYSB0aW1lLCBieSBub3QKPiBj aGVja2luZyB3aXRoaW4gYSBibG9jay4KClllcywgdGhpcyBpcyBmaW5lIGFzIHRoZSBvbmx5IGZ1 bmN0aW9uIHRvIGFsbG9jYXRlIGEgYmxvY2sgKGJlbG93KSBkb2VzCnRoaXMgaW4gY2h1bmtzIG9m IExQSV9CTE9DSy4KCj4+ICsgICAgICAgIH0KPj4gKyAgICAgICAgaSA9IDA7Cj4+ICsgICAgfQo+ PiArCj4+ICsgICAgcmV0dXJuIC0xOwo+PiArfQo+PiArCj4+ICsvKgo+PiArICogQWxsb2NhdGUg YSBibG9jayBvZiAzMiBMUElzIG9uIHRoZSBnaXZlbiBob3N0IElUUyBmb3IgZGV2aWNlICJkZXZp ZCIsCj4+ICsgKiBzdGFydGluZyB3aXRoICJldmVudGlkIi4gUHV0IHRoZW0gaW50byB0aGUgcmVz cGVjdGl2ZSBJVFQgYnkgaXNzdWluZyBhCj4+ICsgKiBNQVBUSSBjb21tYW5kIGZvciBlYWNoIG9m IHRoZW0uCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgZ2ljdjNfYWxsb2NhdGVfaG9zdF9scGlfYmxv Y2soc3RydWN0IGhvc3RfaXRzICppdHMsIHN0cnVjdCBkb21haW4gKmQsCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGhvc3RfZGV2aWQsIHVpbnQz Ml90IGV2ZW50aWQpCj4+ICt7Cj4+ICsgICAgc3RhdGljIHVpbnQzMl90IG5leHRfbHBpID0gMDsK Pj4gKyAgICB1aW50MzJfdCBscGksIGxwaV9pZHggPSBuZXh0X2xwaSAlIEhPU1RfTFBJU19QRVJf UEFHRTsKPj4gKyAgICBpbnQgY2h1bms7Cj4+ICsgICAgaW50IGk7Cj4+ICsKPj4gKyAgICBzcGlu X2xvY2soJmxwaV9kYXRhLmhvc3RfbHBpc19sb2NrKTsKPj4gKyAgICBjaHVuayA9IGZpbmRfdW51 c2VkX2hvc3RfbHBpKG5leHRfbHBpIC8gSE9TVF9MUElTX1BFUl9QQUdFLCAmbHBpX2lkeCk7Cj4+ ICsKPj4gKyAgICBpZiAoIGNodW5rID09IC0gMSApICAgICAgICAgIC8qIHJlc2NhbiBmb3IgYSBo b2xlIGZyb20gdGhlIGJlZ2lubmluZyAqLwo+PiArICAgIHsKPj4gKyAgICAgICAgbHBpX2lkeCA9 IDA7Cj4+ICsgICAgICAgIGNodW5rID0gZmluZF91bnVzZWRfaG9zdF9scGkoMCwgJmxwaV9pZHgp Owo+PiArICAgICAgICBpZiAoIGNodW5rID09IC0xICkKPj4gKyAgICAgICAgewo+PiArICAgICAg ICAgICAgc3Bpbl91bmxvY2soJmxwaV9kYXRhLmhvc3RfbHBpc19sb2NrKTsKPj4gKyAgICAgICAg ICAgIHJldHVybiAtRU5PU1BDOwo+PiArICAgICAgICB9Cj4+ICsgICAgfQo+PiArCj4+ICsgICAg LyogSWYgd2UgaGl0IGFuIHVuYWxsb2NhdGVkIGNodW5rLCB3ZSBpbml0aWFsaXplIGl0IGFuZCB1 c2UgZW50cnkgMC4gKi8KPj4gKyAgICBpZiAoICFscGlfZGF0YS5ob3N0X2xwaXNbY2h1bmtdICkK Pj4gKyAgICB7Cj4+ICsgICAgICAgIHVuaW9uIGhvc3RfbHBpICpuZXdfY2h1bms7Cj4+ICsKPj4g KyAgICAgICAgbmV3X2NodW5rID0gYWxsb2NfeGVuaGVhcF9wYWdlcygwLCAwKTsKPj4gKyAgICAg ICAgaWYgKCAhbmV3X2NodW5rICkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgICAgc3Bpbl91 bmxvY2soJmxwaV9kYXRhLmhvc3RfbHBpc19sb2NrKTsKPj4gKyAgICAgICAgICAgIHJldHVybiAt RU5PTUVNOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBI T1NUX0xQSVNfUEVSX1BBR0U7IGkgKz0gTFBJX0JMT0NLICkKPj4gKyAgICAgICAgICAgIG5ld19j aHVua1tpXS5kb21faWQgPSBJTlZBTElEX0RPTUlEOwo+IAo+IERvbid0IHdlIG5lZWQgdG8gcHJv cGVybHkgaW5pdGlhbGl6ZSBlYWNoIGVudHJ5IGluIHRoZSBibG9jaz8gSSB3b3VsZAo+IHVzZSBt ZW1zZXQgZm9yIGluaXRpYWxpemF0aW9uLgoKSWYgdGhlIGRvbWFpbiBJRCBpcyBpbnZhbGlkLCB0 aGUgb3RoZXIgdHdvIGVudHJpZXMgd2lsbCBhbHdheXMgYmUKaWdub3JlZC4gT25seSBpbiBjYXNl IG9mIGEgdmFsaWQgZG9tSUQgd2UgZXZlciBsb29rIGF0IHRoZSBMUEkgbnVtYmVyCmFuZCBWQ1BV IGlkLgoKPj4gKyAgICAgICAgbHBpX2RhdGEuaG9zdF9scGlzW2NodW5rXSA9IG5ld19jaHVuazsK Pj4gKyAgICAgICAgbHBpX2lkeCA9IDA7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgbHBpID0gY2h1 bmsgKiBIT1NUX0xQSVNfUEVSX1BBR0UgKyBscGlfaWR4Owo+PiArCj4+ICsgICAgZm9yICggaSA9 IDA7IGkgPCBMUElfQkxPQ0s7IGkrKyApCj4+ICsgICAgewo+PiArICAgICAgICB1bmlvbiBob3N0 X2xwaSBobHBpOwo+PiArCj4+ICsgICAgICAgIC8qCj4+ICsgICAgICAgICAqIE1hcmsgdGhpcyBo b3N0IExQSSBhcyBiZWxvbmdpbmcgdG8gdGhlIGRvbWFpbiwgYnV0IGRvbid0IGFzc2lnbgo+PiAr ICAgICAgICAgKiBhbnkgdmlydHVhbCBMUEkgb3IgYSBWQ1BVIHlldC4KPj4gKyAgICAgICAgICov Cj4+ICsgICAgICAgIGhscGkudmlydF9scGkgPSAwOwo+IAo+ICAjZGVmaW5lIDAgdG8gaW52YWxp ZCB2bHBpCj4gCj4gCj4+ICsgICAgICAgIGhscGkuZG9tX2lkID0gZC0+ZG9tYWluX2lkOwo+PiAr ICAgICAgICBobHBpLnZjcHVfaWQgPSB+MDsKPiAKPiAgI2RlZmluZSB+MCB0byBpbnZhbGlkIHZj cHUKClN1cmUuCgo+PiArICAgICAgICBscGlfZGF0YS5ob3N0X2xwaXNbY2h1bmtdW2xwaV9pZHgg KyBpXS5kYXRhID0gaGxwaS5kYXRhOwo+PiArCj4+ICsgICAgICAgIC8qCj4+ICsgICAgICAgICAq IEVuYWJsZSB0aGlzIGhvc3QgTFBJLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoaXMgZHVyaW5n IHRoZQo+PiArICAgICAgICAgKiBndWVzdCdzIHJ1bnRpbWUuCj4+ICsgICAgICAgICAqLwo+PiAr ICAgICAgICBscGlfZGF0YS5scGlfcHJvcGVydHlbbHBpICsgaV0gfD0gTFBJX1BST1BfRU5BQkxF RDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICAvKiBXZSBoYXZlIGFsbG9jYXRlZCBhbmQgaW5pdGlh bGl6ZWQgdGhlIGhvc3QgTFBJIGVudHJpZXMsIHNvIGl0J3Mgc2FmZQo+PiArICAgICAqIHRvIGRy b3AgdGhlIGxvY2sgbm93LiBBY2Nlc3MgdG8gdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGRvbmUgY29u Y3VycmVudGx5Cj4+ICsgICAgICogYXMgaXQgaW52b2x2ZXMgb25seSBhbiBhdG9taWMgdWludDY0 X3QgYWNjZXNzLgo+PiArICAgICAqLwo+PiArICAgIHNwaW5fdW5sb2NrKCZscGlfZGF0YS5ob3N0 X2xwaXNfbG9jayk7Cj4+ICsKPj4gKyAgICBfX2ZsdXNoX2RjYWNoZV9hcmVhKCZscGlfZGF0YS5s cGlfcHJvcGVydHlbbHBpXSwgTFBJX0JMT0NLKTsKPj4gKwo+PiArICAgIC8qIFRlbGwgdGhlIHJl ZGlzdHJpYnV0b3IgYWJvdXQgdGhlIGNoYW5nZWQgZW5hYmxlZCBiaXRzIGFuZCBtYXAgdGhlIExQ SXMgKi8KPj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IExQSV9CTE9DSzsgaSsrICkKPj4gKyAgICB7 Cj4+ICsgICAgICAgIGl0c19zZW5kX2NtZF9tYXB0aShpdHMsIGhvc3RfZGV2aWQsIGV2ZW50aWQg KyBpLCBscGkgKyBpICsgODE5MiwgMCk7Cj4+ICsgICAgICAgIGl0c19zZW5kX2NtZF9pbnYoaXRz LCBob3N0X2RldmlkLCBldmVudGlkICsgaSk7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgaXRzX3Nl bmRfY21kX3N5bmMoaXRzLCAwKTsKPj4gKwo+PiArICAgIG5leHRfbHBpID0gbHBpICsgTFBJX0JM T0NLOwo+PiArICAgIHJldHVybiBscGkgKyA4MTkyOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGdpY3YzX2ZyZWVfaG9zdF9scGlfYmxvY2soc3RydWN0IGhvc3RfaXRzICppdHMsIHVpbnQzMl90 IGxwaSkKPj4gK3sKPj4gKyAgICB1bmlvbiBob3N0X2xwaSAqaGxwaSwgZW1wdHlfbHBpID0geyAu ZG9tX2lkID0gSU5WQUxJRF9ET01JRCB9Owo+PiArICAgIGludCBpOwo+PiArCj4+ICsgICAgaGxw aSA9IGdpY19nZXRfaG9zdF9scGkobHBpKTsKPj4gKyAgICBpZiAoICFobHBpICkKPj4gKyAgICAg ICAgcmV0dXJuIC1FTk9FTlQ7Cj4+ICsKPj4gKyAgICBzcGluX2xvY2soJmxwaV9kYXRhLmhvc3Rf bHBpc19sb2NrKTsKPj4gKwo+PiArICAgIGZvciAoIGkgPSAwOyBpIDwgTFBJX0JMT0NLOyBpKysg KQo+PiArICAgICAgICBobHBpW2ldLmRhdGEgPSBlbXB0eV9scGkuZGF0YTsKPj4gKwo+PiArICAg IHNwaW5fdW5sb2NrKCZscGlfZGF0YS5ob3N0X2xwaXNfbG9jayk7Cj4+ICsKPj4gKyAgICByZXR1 cm4gMDsKPj4gK30KPj4gKwo+PiAgc3RhdGljIHZvaWQgcmVtb3ZlX21hcHBlZF9ndWVzdF9kZXZp Y2Uoc3RydWN0IGl0c19kZXZpY2VzICpkZXYpCj4+ICB7Cj4+ICsgICAgaW50IGk7Cj4+ICsKPj4g ICAgICBpZiAoIGRldi0+aHdfaXRzICkKPj4gICAgICAgICAgaXRzX3NlbmRfY21kX21hcGQoZGV2 LT5od19pdHMsIGRldi0+aG9zdF9kZXZpZCwgMCwgMCwgZmFsc2UpOwo+PiAgCj4+ICsgICAgZm9y ICggaSA9IDA7IGkgPCBkZXYtPmV2ZW50aWRzIC8gMzI7IGkrKyApCj4+ICsgICAgICAgIGdpY3Yz X2ZyZWVfaG9zdF9scGlfYmxvY2soZGV2LT5od19pdHMsIGRldi0+aG9zdF9scGlzW2ldKTsKPj4g Kwo+PiAgICAgIHhmcmVlKGRldi0+aXR0X2FkZHIpOwo+PiArICAgIHhmcmVlKGRldi0+aG9zdF9s cGlzKTsKPj4gICAgICB4ZnJlZShkZXYpOwo+PiAgfQo+PiAgCj4+IEBAIC0zOTAsNyArNjA1LDcg QEAgaW50IGdpY3YzX2l0c19tYXBfZGV2aWNlKHN0cnVjdCBkb21haW4gKmQsIGludCBob3N0X2Rl dmlkLCBpbnQgZ3Vlc3RfZGV2aWQsCj4+ICAgICAgdm9pZCAqaXR0X2FkZHIgPSBOVUxMOwo+PiAg ICAgIHN0cnVjdCBpdHNfZGV2aWNlcyAqZGV2LCAqdGVtcDsKPj4gICAgICBzdHJ1Y3QgaG9zdF9p dHMgKmh3X2l0czsKPj4gLSAgICBpbnQgcmV0Owo+PiArICAgIGludCByZXQsIGk7Cj4+ICAKPj4g ICAgICAvKiBjaGVjayBmb3IgYWxyZWFkeSBleGlzdGluZyBtYXBwaW5ncyAqLwo+PiAgICAgIHNw aW5fbG9jaygmZC0+YXJjaC52Z2ljLml0c19kZXZpY2VzX2xvY2spOwo+PiBAQCAtNDM1LDkgKzY1 MCwxOCBAQCBpbnQgZ2ljdjNfaXRzX21hcF9kZXZpY2Uoc3RydWN0IGRvbWFpbiAqZCwgaW50IGhv c3RfZGV2aWQsIGludCBndWVzdF9kZXZpZCwKPj4gICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4+ ICAgICAgfQo+PiAgCj4+ICsgICAgZGV2LT5ob3N0X2xwaXMgPSB4emFsbG9jX2FycmF5KHVpbnQz Ml90LCBCSVQoYml0cykgLyAzMik7Cj4+ICsgICAgaWYgKCAhZGV2LT5ob3N0X2xwaXMgKQo+PiAr ICAgIHsKPj4gKyAgICAgICAgeGZyZWUoZGV2KTsKPj4gKyAgICAgICAgeGZyZWUoaXR0X2FkZHIp Owo+PiArICAgICAgICByZXR1cm4gLUVOT01FTTsKPj4gKyAgICB9Cj4+ICsKPj4gICAgICByZXQg PSBpdHNfc2VuZF9jbWRfbWFwZChod19pdHMsIGhvc3RfZGV2aWQsIGJpdHMgLSAxLAo+PiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnRfdG9fbWFkZHIoaXR0X2FkZHIpLCB0cnVlKTsK Pj4gICAgICBpZiAocmV0KSB7Cj4+ICsgICAgICAgIHhmcmVlKGRldi0+aG9zdF9scGlzKTsKPj4g ICAgICAgICAgeGZyZWUoaXR0X2FkZHIpOwo+PiAgICAgICAgICB4ZnJlZShkZXYpOwo+PiAgICAg ICAgICByZXR1cm4gcmV0Owo+PiBAQCAtNDUzLDYgKzY3NywxMyBAQCBpbnQgZ2ljdjNfaXRzX21h cF9kZXZpY2Uoc3RydWN0IGRvbWFpbiAqZCwgaW50IGhvc3RfZGV2aWQsIGludCBndWVzdF9kZXZp ZCwKPj4gICAgICBsaXN0X2FkZF90YWlsKCZkZXYtPmVudHJ5LCAmZC0+YXJjaC52Z2ljLml0c19k ZXZpY2VzKTsKPj4gICAgICBzcGluX3VubG9jaygmZC0+YXJjaC52Z2ljLml0c19kZXZpY2VzX2xv Y2spOwo+PiAgCj4+ICsgICAgLyogTWFwIGFsbCBob3N0IExQSXMgd2l0aGluIHRoaXMgZGV2aWNl IGFscmVhZHkuIFdlIGNhbid0IGFmZm9yZCB0byBxdWV1ZQo+PiArICAgICAqIGFueSBob3N0IElU UyBjb21tYW5kcyBsYXRlciBvbiBkdXJpbmcgdGhlIGd1ZXN0J3MgcnVudGltZS4KPj4gKyAgICAg Ki8KPj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IEJJVChiaXRzKSAvIDMyOyBpKysgKQo+PiArICAg ICAgICBkZXYtPmhvc3RfbHBpc1tpXSA9IGdpY3YzX2FsbG9jYXRlX2hvc3RfbHBpX2Jsb2NrKGh3 X2l0cywgZCwgaG9zdF9kZXZpZCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpICogMzIpOwo+IAo+IFNob3VsZG4ndCB3ZSBjaGVj ayBmb3IgZXJyb3JzIHJldHVybmVkIGJ5IGdpY3YzX2FsbG9jYXRlX2hvc3RfbHBpX2Jsb2NrPwoK SSBqdXN0IHNlZSB0aGF0IHBhc3NpbmcgbGVzcyB0aGFuIDUgYml0cyB3aWxsIHNraXAgdGhpcyBs b29wIGF0IGFsbCA6LSgKV2lsbCBmaXggaXQgKGFsc28gYXBwbGllcyB0byB0aGUgYWxsb2NhdGlv biBhIGJpdCBlYXJsaWVyKS4KCj4gSWYgQklUKGJpdHMpIDwgMzIsIGl0IGlzIHBvc3NpYmxlIHRv IGFsbG9jYXRlIG1vcmUgcGxwaXMgdGhhbiBuZWNlc3NhcnkuCgpZZXMsIGJ1dCB0aGlzIGlzIG5v dCBhIHByb2JsZW0uIFRoZXkgd29uJ3QgaGF2ZSBhIHZpcnR1YWwgTFBJIGFzc2lnbmVkCig9MCks IHNvIGFueSBpbmNvbWluZyBMUEkgd2lsbCBiZSBqdXN0IGlnbm9yZWQuCgo+IEl0IGlzIGFsc28g cG9zc2libGUgdG8gZW5kIHVwIGNhbGxpbmcgbWFwdGkgd2l0aCBhbiBpbmV4aXN0ZW50IGV2ZW50 aWQKPiBmb3IgaG9zdF9kZXZpZC4gQ291bGQgdGhhdCBiZSBhIHByb2JsZW0/CgpOb3QgYXQgYWxs LiBBY3R1YWxseSB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGEgIm5vbmV4aXN0ZW50IGV2ZW50 IElEIiwKYmVjYXVzZSB0aGUgZXZlbnQgSUQgd2lsbCBiZSB3cml0dGVuIGJ5IHRoZSBkZXZpY2Ug YXMgdGhlIHBheWxvYWQgdG8gdGhlCk1TSSBkb29yYmVsbCBhZGRyZXNzLCBwcm9iYWJseSBiZWNh dXNlIGl0IGxlYXJuZWQgYWJvdXQgaXQgYnkgdGhlCmRyaXZlci4gU28gaWYgd2UgcHJvdmlzaW9u IGFuIElUVEUgd2l0aCBhbiBldmVudCBJRCB3aGljaCB0aGUgZGV2aWNlCndpbGwgbmV2ZXIgc2Vu ZCwgdGhhdCBMUEkgd2lsbCBqdXN0IG5ldmVyIGZpcmUuClNpbmNlIFhlbiAoaW4gY29udHJhc3Qg dG8gdGhlIGRyaXZlciBpbiB0aGUgZG9tYWluKSBoYXMgbm8gaWRlYSBob3cgbWFueQphbmQgd2hp Y2ggTVNJcyB0aGUgZGV2aWNlIHdpbGwgdXNlLCB3ZSBqdXN0IGFsbG9jYXRlIGEgYnVuY2ggb2Yg dGhlbS4KVGhlIHVwcGVyIGxpbWl0ICgzMiBhdG0pIGlzIHNvbWV0aGluZyB3ZSBwcm9iYWJseSBu ZWVkIHRvIHN0aWxsIHRoaW5rCmFib3V0LCB0aG91Z2guCkkgdHJpZWQgdG8gbGVhcm4gYSBsaW1p dCBmcm9tIExpbnV4ICgibnZlY3MiIGluIGl0c19jcmVhdGVfZGV2aWNlKCkKc2VlbXMgdG8gYmUg dGhlIHNvdXJjZSksIGJ1dCBjb3VsZG4ndCBmaW5kIGFueXRoaW5nIHVzZWZ1bCBvdGhlciB0aGFu IDMyLgpXZSB3aWxsIGxlYXJuIGFib3V0IGV4Y2VlZGluZyB0aGlzIGFzIHNvb24gYXMgYSBkb21h aW4gdHJpZXMgdG8gbWFwIGEKdmlydHVhbCBMUEkgd2l0aCBhbiBldmVudCBJRCBoaWdoZXIgdGhh biAzMSwgaG93ZXZlciBpdCdzIHRvbyBsYXRlIHRvCmZpeCB0aGlzIHRoZW4uIFdlIGNhbiBiYXJr IHdoZW4gdGhpcyBoYXBwZW5zIHRvIGxlYXJuIGlmIGFueSBkZXZpY2UgZXZlcgpkb2VzIHRoaXMg ZHVyaW5nIG91ciB0ZXN0aW5nIHRvIGdldCBzb21lIGhldXJpc3RpYyBkYXRhLgoKRXZlbnR1YWxs eSBhbGwgYm9pbHMgZG93biB0byBYZW4gZ2V0dGluZyBtb3JlIGluZm9ybWF0aW9uIGZyb20gRG9t MAphYm91dCB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIE1TSXMuIFdlIGNvdWxkIHRoZW4gZXZlbiBs aW1pdCB0aGUKYWxsb2NhdGlvbiB0byBsZXNzIHRoYW4gMzIsIGlmIHRoYXQgaGVscHMuCgpDaGVl cnMsCkFuZHJlLgoKPiAKPj4gICAgICByZXR1cm4gMDsKPj4gIH0KPj4gIAo+PiBkaWZmIC0tZ2l0 IGEveGVuL2luY2x1ZGUvYXNtLWFybS9naWMtaXRzLmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL2dp Yy1pdHMuaAo+PiBpbmRleCA1MjVhMjlkLi5kMWViYzE5IDEwMDY0NAo+PiAtLS0gYS94ZW4vaW5j bHVkZS9hc20tYXJtL2dpYy1pdHMuaAo+PiArKysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL2dpYy1p dHMuaAo+PiBAQCAtMTA0LDYgKzEwNCw3IEBAIHN0cnVjdCBpdHNfZGV2aWNlcyB7Cj4+ICAgICAg dWludDMyX3QgZ3Vlc3RfZGV2aWQ7Cj4+ICAgICAgdWludDMyX3QgaG9zdF9kZXZpZDsKPj4gICAg ICB1aW50MzJfdCBldmVudGlkczsKPj4gKyAgICB1aW50MzJfdCAqaG9zdF9scGlzOwo+PiAgfTsK Pj4gIAo+PiAgZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaG9zdF9pdHNfbGlzdDsKPj4gLS0gCj4+ IDIuOS4wCj4+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8v bGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK