From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: Re: [RFC PATCH 25/49] ARM: new VGIC: Add GICv2 world switch backend Date: Mon, 26 Feb 2018 15:13:33 +0000 Message-ID: <1d221d96-0d50-78d1-cd9c-1c9d15b8e114@linaro.org> References: <20180209143937.28866-1-andre.przywara@linaro.org> <20180209143937.28866-26-andre.przywara@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eqKTG-0001vB-KV for xen-devel@lists.xenproject.org; Mon, 26 Feb 2018 15:13:42 +0000 Received: by mail-wr0-x243.google.com with SMTP id v111so9363708wrb.3 for ; Mon, 26 Feb 2018 07:13:39 -0800 (PST) In-Reply-To: Content-Language: en-GB List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Julien Grall , Stefano Stabellini , xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org SGksCgpPbiAxMy8wMi8xOCAxNDozMSwgSnVsaWVuIEdyYWxsIHdyb3RlOgo+IEhpLAo+IAo+IE9u IDA5LzAyLzE4IDE0OjM5LCBBbmRyZSBQcnp5d2FyYSB3cm90ZToKPj4gUHJvY2Vzc2luZyBtYWlu dGVuYW5jZSBpbnRlcnJ1cHRzIGFuZCBhY2Nlc3NpbmcgdGhlIGxpc3QgcmVnaXN0ZXJzCj4+IGFy ZSBkZXBlbmRlbnQgb24gdGhlIGhvc3QncyBHSUMgdmVyc2lvbi4KPj4gSW50cm9kdWNlIHZnaWMt djIuYyB0byBjb250YWluIEdJQ3YyIHNwZWNpZmljIGZ1bmN0aW9ucy4KPj4gSW1wbGVtZW50IHRo ZSBHSUN2MiBzcGVjaWZpYyBjb2RlIGZvciBzeW5jaW5nIHRoZSBlbXVsYXRpb24gc3RhdGUKPj4g aW50byB0aGUgVkdJQyByZWdpc3RlcnMuCj4+IFRoaXMgYWxzbyBhZGRzIHRoZSBob29rIHRvIGxl dCBYZW4gc2V0dXAgdGhlIGhvc3QgR0lDIGFkZHJlc3Nlcy4KPj4KPj4gVGhpcyBpcyBiYXNlZCBv biBMaW51eCBjb21taXQgMTQwYjA4NmRkMTk3LCB3cml0dGVuIGJ5IE1hcmMgWnluZ2llci4KPj4K Pj4gU2lnbmVkLW9mZi1ieTogQW5kcmUgUHJ6eXdhcmEgPGFuZHJlLnByenl3YXJhQGxpbmFyby5v cmc+Cj4+IC0tLQo+PiDCoCB4ZW4vYXJjaC9hcm0vdmdpYy92Z2ljLXYyLmMgfCAyNjEKPj4gKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gwqAgeGVuL2FyY2gv YXJtL3ZnaWMvdmdpYy5jwqDCoMKgIHzCoCAyMCArKysrCj4+IMKgIHhlbi9hcmNoL2FybS92Z2lj L3ZnaWMuaMKgwqDCoCB8wqDCoCA4ICsrCj4+IMKgIDMgZmlsZXMgY2hhbmdlZCwgMjg5IGluc2Vy dGlvbnMoKykKPj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9hcmNoL2FybS92Z2ljL3ZnaWMt djIuYwo+Pgo+PiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3ZnaWMvdmdpYy12Mi5jIGIveGVu L2FyY2gvYXJtL3ZnaWMvdmdpYy12Mi5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4 IDAwMDAwMDAwMDAuLjEwZmM0NjdmZmEKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi94ZW4vYXJj aC9hcm0vdmdpYy92Z2ljLXYyLmMKPj4gQEAgLTAsMCArMSwyNjEgQEAKPj4gKy8qCj4+ICsgKiBD b3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQVJNIEx0ZC4KPj4gKyAqIEltcG9ydGVkIGZyb20gTGlu dXggKCJuZXciIEtWTSBWR0lDKSBhbmQgaGVhdmlseSBhZGFwdGVkIHRvIFhlbi4KPj4gKyAqCj4+ ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQo+PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiArICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKPj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS7CoCBTZWUgdGhlCj4+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4+ICsgKiBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS7CoCBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCj4+ ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgPGFzbS9hcm1fdmdpYy5oPgo+PiArI2luY2x1ZGUgPGFz bS9idWcuaD4KPj4gKyNpbmNsdWRlIDxhc20vaW8uaD4KPj4gKyNpbmNsdWRlIDx4ZW4vc2NoZWQu aD4KPj4gKyNpbmNsdWRlIDx4ZW4vc2l6ZXMuaD4KPj4gKwo+PiArI2luY2x1ZGUgInZnaWMuaCIK Pj4gKwo+PiArI2RlZmluZSBHSUNIX0VMUlNSMMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgMHgzMAo+PiArI2RlZmluZSBHSUNIX0VMUlNSMcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgzNAo+PiArI2RlZmluZSBHSUNIX0xSMMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxMDAKPj4gKwo+PiArI2Rl ZmluZSBHSUNIX0xSX1ZJUlRVQUxJRMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKDB4M2Zm IDw8IDApCj4+ICsjZGVmaW5lIEdJQ0hfTFJfUEhZU0lEX0NQVUlEX1NISUZUwqDCoMKgwqDCoCAo MTApCj4+ICsjZGVmaW5lIEdJQ0hfTFJfUEhZU0lEX0NQVUlEwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAoMHgzZmYgPDwKPj4gR0lDSF9MUl9QSFlTSURfQ1BVSURfU0hJRlQpCj4+ICsjZGVmaW5lIEdJ Q0hfTFJfUFJJT1JJVFlfU0hJRlTCoMKgwqDCoMKgwqDCoMKgwqAgMjMKPj4gKyNkZWZpbmUgR0lD SF9MUl9TVEFURcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoMyA8PCAyOCkK Pj4gKyNkZWZpbmUgR0lDSF9MUl9QRU5ESU5HX0JJVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAo MSA8PCAyOCkKPj4gKyNkZWZpbmUgR0lDSF9MUl9BQ1RJVkVfQklUwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKDEgPDwgMjkpCj4+ICsjZGVmaW5lIEdJQ0hfTFJfRU9JwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoMSA8PCAxOSkKPj4gKyNkZWZpbmUgR0lDSF9MUl9I V8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoMSA8PCAzMSkKPiAK PiBDYW4gd2UgZGVmaW5lIHRoZW0gaW4gZWl0aGVyIGluIGdpYy5oIG9yIGEgbmV3IGhlYWRlciBn aWMtdjIuaD8KClllcywgYnV0IHRoZXkgY2xhc2ggd2l0aCBzb21lIGlsbC1uYW1lZCBHSUN2MyBM UiBiaXRzLiBTbyBleHBlY3QgYW5vdGhlcgpwYXRjaCB3aGljaCByZW5hbWVzIEdJQ0hfTFJfU1RB VEVfU0hJRlQgdG8gSUNIX0xSX1NUQVRFX1NISUZULiBXaGljaCBpcwp0aGUgYWN0dWFsIHNwZWMg bmFtZSBmb3IgdGhhdCBzeXN0ZW0gcmVnaXN0ZXIgaW4gR0lDdjMsIHRoZXJlIGlzIG5vCkdJQ0hf TFJfIHdpdGggdGhlIEdJQ3YzIGJpdCBwb3NpdGlvbnMuCgoKPj4gKwo+PiArc3RhdGljIHN0cnVj dCB7Cj4+ICvCoMKgwqAgYm9vbCBlbmFibGVkOwo+PiArwqDCoMKgIHBhZGRyX3QgZGJhc2U7wqDC oMKgwqDCoMKgwqDCoMKgIC8qIERpc3RyaWJ1dG9yIGludGVyZmFjZSBhZGRyZXNzICovCj4+ICvC oMKgwqAgcGFkZHJfdCBjYmFzZTvCoMKgwqDCoMKgwqDCoMKgwqAgLyogQ1BVIGludGVyZmFjZSBh ZGRyZXNzICYgc2l6ZSAqLwo+PiArwqDCoMKgIHBhZGRyX3QgY3NpemU7Cj4+ICvCoMKgwqAgcGFk ZHJfdCB2YmFzZTvCoMKgwqDCoMKgwqDCoMKgwqAgLyogVmlydHVhbCBDUFUgaW50ZXJmYWNlIGFk ZHJlc3MgKi8KPj4gK8KgwqDCoCB2b2lkIF9faW9tZW0gKmhiYXNlO8KgwqDCoMKgwqDCoMKgIC8q IEh5cGVydmlzb3IgY29udHJvbCBpbnRlcmZhY2UgKi8KPj4gKwo+PiArwqDCoMKgIC8qIE9mZnNl dCB0byBhZGQgdG8gZ2V0IGFuIDhrQiBjb250aWd1b3VzIHJlZ2lvbiBpZiBHSUMgaXMKPj4gYWxp YXNlZCAqLwo+PiArwqDCoMKgIHVpbnQzMl90IGFsaWFzZWRfb2Zmc2V0Owo+PiArfSBnaWNfdjJf aHdfZGF0YTsKPj4gKwo+PiArdm9pZCB2Z2ljX3YyX3NldHVwX2h3KHBhZGRyX3QgZGJhc2UsIHBh ZGRyX3QgY2Jhc2UsIHBhZGRyX3QgY3NpemUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBwYWRkcl90IHZiYXNlLCB2b2lkIF9faW9tZW0gKmhiYXNlLAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgdWludDMyX3QgYWxpYXNlZF9vZmZzZXQpCj4+ICt7Cj4+ICvCoMKgwqAgZ2lj X3YyX2h3X2RhdGEuZW5hYmxlZCA9IHRydWU7Cj4+ICvCoMKgwqAgZ2ljX3YyX2h3X2RhdGEuZGJh c2UgPSBkYmFzZTsKPj4gK8KgwqDCoCBnaWNfdjJfaHdfZGF0YS5jYmFzZSA9IGNiYXNlOwo+PiAr wqDCoMKgIGdpY192Ml9od19kYXRhLmNzaXplID0gY3NpemU7Cj4+ICvCoMKgwqAgZ2ljX3YyX2h3 X2RhdGEudmJhc2UgPSB2YmFzZTsKPj4gK8KgwqDCoCBnaWNfdjJfaHdfZGF0YS5oYmFzZSA9IGhi YXNlOwo+PiArwqDCoMKgIGdpY192Ml9od19kYXRhLmFsaWFzZWRfb2Zmc2V0ID0gYWxpYXNlZF9v ZmZzZXQ7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgdmdpY192Ml9zZXRfdW5kZXJmbG93KHN0cnVjdCB2 Y3B1ICp2Y3B1KQo+PiArewo+PiArwqDCoMKgIGdpY19od19vcHMtPnVwZGF0ZV9oY3Jfc3RhdHVz KEdJQ0hfSENSX1VJRSwgMSk7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiB0cmFuc2ZlciB0aGUg Y29udGVudCBvZiB0aGUgTFJzIGJhY2sgaW50byB0aGUgY29ycmVzcG9uZGluZyBhcF9saXN0Ogo+ PiArICogLSBhY3RpdmUgYml0IGlzIHRyYW5zZmVycmVkIGFzIGlzCj4+ICsgKiAtIHBlbmRpbmcg Yml0IGlzCj4+ICsgKsKgwqAgLSB0cmFuc2ZlcnJlZCBhcyBpcyBpbiBjYXNlIG9mIGVkZ2Ugc2Vu c2l0aXZlIElSUXMKPj4gKyAqwqDCoCAtIHNldCB0byB0aGUgbGluZS1sZXZlbCAocmVzYW1wbGUg dGltZSkgZm9yIGxldmVsIHNlbnNpdGl2ZSBJUlFzCj4+ICsgKi8KPj4gK3ZvaWQgdmdpY192Ml9m b2xkX2xyX3N0YXRlKHN0cnVjdCB2Y3B1ICp2Y3B1KQo+IAo+IEkgYW0gd29uZGVyaW5nIGhvdyBt dWNoIHdlIGNvdWxkIHNoYXJlIHRoaXMgY29kZSB3aXRoCj4gdmdpY192M19mb2xkX2xyX3N0YXRl LgoKSSB0aGluayB3ZSBkaXNjdXNzZWQgdGhpcyBhbmQgZGlzbWlzc2VkIHRoZSBpZGVhOgotIFRo ZSBhY3R1YWwgTFIgZW5jb2RpbmcgaXMgbXVjaCBkaWZmZXJlbnQgYmV0d2VlbiBHSUN2MyBhbmQg R0lDdjIsIHVwCnRvIHRoZSBwb2ludCB3aGVyZSB3ZSBoYXZlIHNvbWUgZmllbGRzIGluIG9uZSB3 aGljaCBhcmUgbm90IGluIHRoZQpvdGhlci4gVGhhdCByZWFsbHkgY2x1dHRlcnMgdGhlIGNvZGUu Ci0gT3JpZ2luYWxseSB0aGlzIGZ1bmN0aW9uIHdhcyBtdWNoIHNob3J0ZXIgYW5kIGRpZG4ndCBo YXZlIHRoYXQgbWFueQpzcGVjaWFsIGNhc2VzLiBTbyB0aGUgY29kZSBkdXBsaWNhdGlvbiB3YXMg cmVhbGx5IG1pbmltYWwuCgpJIHNlZSB5b3VyIHBvaW50LCBidXQgZG9uJ3QgcmVhbGx5IHdhbnQg dG8gZ28gdGhlcmUgbm93IGZvciB0d28gcmVhc29uczoKLSBJdCBpcyBwcm9iYWJseSBuYXN0eSB0 byBpbXBsZW1lbnQsIHNpbmNlIHdlIGFsd2F5cyBoYXZlIHRvIGNoZWNrIHdoaWNoCkdJQyB3ZSBh cmUgcnVubmluZyBvbiB3aGVuIG1hc2tpbmcgdGhlIExSIHZhbHVlLgotIEl0IHdvdWxkIGRldmlh dGUgZnVydGhlciBmcm9tIHRoZSBLVk0gaW1wbGVtZW50YXRpb24sIGluIGEgY29yZQpmdW5jdGlv bi4gRm9yIGFueSBidWdzIGludHJvZHVjZWQgd2UgYXJlIG9uIG91ciBvd24gaGVyZS4KCkkgd2ls bCB0cnkgdG8gYnJpbmcgdGhpcyB1cCB3aXRoIHRoZSBLVk0gcGVvcGxlLCB0byBzZWUgd2hldGhl ciBpdCdzCndvcnRoIHRvIHJldmlzaXQgdGhpcyBkZWNpc2lvbi4gVGhlcmUgaXMgaW5kZWVkIHF1 aXRlIHNvbWUgY29kZQpkdXBsaWNhdGlvbiB0aGVzZSBkYXlzLgpCdXQgdGhpcyBtYXkgY29tZSBh cyBhbiBvcHRpbWl6YXRpb24gbGF0ZXIuCgo+PiArewo+PiArwqDCoMKgIHN0cnVjdCB2Z2ljX2Nw dSAqdmdpY19jcHUgPSAmdmNwdS0+YXJjaC52Z2ljX2NwdTsKPj4gK8KgwqDCoCBzdHJ1Y3Qgdmdp Y192Ml9jcHVfaWYgKmNwdWlmID0gJnZnaWNfY3B1LT52Z2ljX3YyOwo+PiArwqDCoMKgIGludCBs cjsKPiAKPiB1bnNpZ25lZCBwbGVhc2UuCj4gCj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyBmbGFn czsKPj4gKwo+PiArwqDCoMKgIGNwdWlmLT52Z2ljX2hjciAmPSB+R0lDSF9IQ1JfVUlFOwo+PiAr Cj4+ICvCoMKgwqAgZm9yICggbHIgPSAwOyBsciA8IHZnaWNfY3B1LT51c2VkX2xyczsgbHIrKyAp Cj4+ICvCoMKgwqAgewo+PiArwqDCoMKgwqDCoMKgwqAgdTMyIHZhbCA9IGNwdWlmLT52Z2ljX2xy W2xyXTsKPj4gK8KgwqDCoMKgwqDCoMKgIHUzMiBpbnRpZCA9IHZhbCAmIEdJQ0hfTFJfVklSVFVB TElEOwo+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IHZnaWNfaXJxICppcnE7Cj4+ICsKPj4gK8Kg wqDCoMKgwqDCoMKgIGlycSA9IHZnaWNfZ2V0X2lycSh2Y3B1LT5kb21haW4sIHZjcHUsIGludGlk KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgc3Bpbl9sb2NrX2lycXNhdmUoJmlycS0+aXJxX2xv Y2ssIGZsYWdzKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgLyogQWx3YXlzIHByZXNlcnZlIHRo ZSBhY3RpdmUgYml0ICovCj4+ICvCoMKgwqDCoMKgwqDCoCBpcnEtPmFjdGl2ZSA9ICEhKHZhbCAm IEdJQ0hfTFJfQUNUSVZFX0JJVCk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIEVkZ2UgaXMg dGhlIG9ubHkgY2FzZSB3aGVyZSB3ZSBwcmVzZXJ2ZSB0aGUgcGVuZGluZyBiaXQgKi8KPj4gK8Kg wqDCoMKgwqDCoMKgIGlmICggaXJxLT5jb25maWcgPT0gVkdJQ19DT05GSUdfRURHRSAmJiAodmFs ICYKPj4gR0lDSF9MUl9QRU5ESU5HX0JJVCkgKQo+PiArwqDCoMKgwqDCoMKgwqAgewo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpcnEtPnBlbmRpbmdfbGF0Y2ggPSB0cnVlOwo+PiArCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICggdmdpY19pcnFfaXNfc2dpKGludGlkKSApCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB1MzIgY3B1aWQgPSB2YWwgJiBHSUNIX0xSX1BIWVNJRF9DUFVJRDsKPj4gKwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNwdWlkID4+PSBHSUNIX0xSX1BIWVNJRF9DUFVJRF9T SElGVDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpcnEtPnNvdXJjZSB8PSAo MSA8PCBjcHVpZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDC oMKgIH0KPj4gKwo+IAo+IE1heSBJIGFzayB0byBrZWVwIHRoZSBiaWcgY29tbWVudHMgZnJvbSBL Vk0gYXJvdW5kPyBJdCBsb29rcyBxdWl0ZQo+IHVzZWZ1bCB0byBoYXZlIGl0LgoKSW5kZWVkIEkg c29tZWhvdyBsb3N0IHRoYXQuIEFkZGVkIG5vdy4KCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIGly cS0+aHcgJiYgaXJxLT5jb25maWcgPT0gVkdJQ19DT05GSUdfTEVWRUwgJiYKPiAKPiBZb3UgcHJv YmFibHkgd2FudCB0byBoYXZlIHRoZSBoZWxwZXIgdmdpY19pcnFfaXNfbWFwcGVkX2xldmVsKC4u LikgYXMgaW4KPiBLVk0uCgpZZXMuCgpDaGVlcnMsCkFuZHJlCgo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAodmFsICYgR0lDSF9MUl9QRU5ESU5HX0JJVCkgKQo+PiArwqDCoMKgwqDCoMKgwqAg ewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpcnEtPmxpbmVfbGV2ZWwgPSBnaWNfcmVhZF9w ZW5kaW5nX3N0YXRlKGlycS0+aHdpbnRpZCk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKCAhaXJxLT5saW5lX2xldmVsICkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnaWNfc2V0X2FjdGl2ZV9zdGF0ZShpcnEtPmh3 aW50aWQsIHRydWUpOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDC oCBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnEtPmlycV9sb2NrLCBmbGFncyk7Cj4+ICvCoMKg wqDCoMKgwqDCoCB2Z2ljX3B1dF9pcnEodmNwdS0+ZG9tYWluLCBpcnEpOwo+PiArwqDCoMKgIH0K Pj4gKwo+PiArwqDCoMKgIHZnaWNfY3B1LT51c2VkX2xycyA9IDA7Cj4+ICt9Cj4+ICsKPj4gKy8q Cj4+ICsgKiBQb3B1bGF0ZXMgdGhlIHBhcnRpY3VsYXIgTFIgd2l0aCB0aGUgc3RhdGUgb2YgYSBn aXZlbiBJUlE6Cj4+ICsgKiAtIGZvciBhbiBlZGdlIHNlbnNpdGl2ZSBJUlEgdGhlIHBlbmRpbmcg c3RhdGUgaXMgY2xlYXJlZCBpbiBzdHJ1Y3QKPj4gdmdpY19pcnEKPj4gKyAqIC0gZm9yIGEgbGV2 ZWwgc2Vuc2l0aXZlIElSUSB0aGUgcGVuZGluZyBzdGF0ZSB2YWx1ZSBpcyB1bmNoYW5nZWQ7Cj4+ ICsgKsKgwqAgaXQgaXMgZGljdGF0ZWQgZGlyZWN0bHkgYnkgdGhlIGlucHV0IGxldmVsCj4+ICsg Kgo+PiArICogSWYgQGlycSBkZXNjcmliZXMgYW4gU0dJIHdpdGggbXVsdGlwbGUgc291cmNlcywg d2UgY2hvb3NlIHRoZQo+PiArICogbG93ZXN0LW51bWJlcmVkIHNvdXJjZSBWQ1BVIGFuZCBjbGVh ciB0aGF0IGJpdCBpbiB0aGUgc291cmNlIGJpdG1hcC4KPj4gKyAqCj4+ICsgKiBUaGUgaXJxX2xv Y2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIuCj4+ICsgKi8KPj4gK3ZvaWQgdmdpY192Ml9w b3B1bGF0ZV9scihzdHJ1Y3QgdmNwdSAqdmNwdSwgc3RydWN0IHZnaWNfaXJxICppcnEsIGludAo+ PiBscikKPiAKPiBJIGFtIHdvbmRlcmluZyBob3cgbXVjaCB3ZSBjb3VsZCBzaGFyZSB0aGlzIGNv ZGUgd2l0aCB2Z2ljX3YzX3BvcHVsYXRlX2xyLgo+IAo+PiArewo+PiArwqDCoMKgIHUzMiB2YWwg PSBpcnEtPmludGlkOwo+PiArCj4+ICvCoMKgwqAgaWYgKCBpcnFfaXNfcGVuZGluZyhpcnEpICkK Pj4gK8KgwqDCoCB7Cj4+ICvCoMKgwqDCoMKgwqDCoCB2YWwgfD0gR0lDSF9MUl9QRU5ESU5HX0JJ VDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCBpcnEtPmNvbmZpZyA9PSBWR0lDX0NPTkZJ R19FREdFICkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaXJxLT5wZW5kaW5nX2xhdGNoID0g ZmFsc2U7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICggdmdpY19pcnFfaXNfc2dpKGlycS0+ aW50aWQpICkKPj4gK8KgwqDCoMKgwqDCoMKgIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dTMyIHNyYyA9IGZmcyhpcnEtPnNvdXJjZSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgQlVHX09OKCFzcmMpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YWwgfD0gKHNyYyAt IDEpIDw8IEdJQ0hfTFJfUEhZU0lEX0NQVUlEX1NISUZUOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpcnEtPnNvdXJjZSAmPSB+KDEgPDwgKHNyYyAtIDEpKTsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaWYgKCBpcnEtPnNvdXJjZSApCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaXJxLT5wZW5kaW5nX2xhdGNoID0gdHJ1ZTsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4g K8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIGlycS0+YWN0aXZlICkKPj4gK8KgwqDCoMKg wqDCoMKgIHZhbCB8PSBHSUNIX0xSX0FDVElWRV9CSVQ7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIGly cS0+aHcgKQo+PiArwqDCoMKgIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHZhbCB8PSBHSUNIX0xSX0hX Owo+PiArwqDCoMKgwqDCoMKgwqAgdmFsIHw9IGlycS0+aHdpbnRpZCA8PCBHSUNIX0xSX1BIWVNJ RF9DUFVJRF9TSElGVDsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qCj4+ICvCoMKgwqDCoMKgwqDCoMKg ICogTmV2ZXIgc2V0IHBlbmRpbmcrYWN0aXZlIG9uIGEgSFcgaW50ZXJydXB0LCBhcyB0aGUKPj4g K8KgwqDCoMKgwqDCoMKgwqAgKiBwZW5kaW5nIHN0YXRlIGlzIGtlcHQgYXQgdGhlIHBoeXNpY2Fs IGRpc3RyaWJ1dG9yCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogbGV2ZWwuCj4+ICvCoMKgwqDCoMKg wqDCoMKgICovCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIGlycS0+YWN0aXZlICYmIGlycV9pc19w ZW5kaW5nKGlycSkgKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YWwgJj0gfkdJQ0hfTFJf UEVORElOR19CSVQ7Cj4+ICvCoMKgwqAgfQo+PiArwqDCoMKgIGVsc2UKPj4gK8KgwqDCoCB7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBpZiAoIGlycS0+Y29uZmlnID09IFZHSUNfQ09ORklHX0xFVkVMICkK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFsIHw9IEdJQ0hfTFJfRU9JOwo+PiArwqDCoMKg IH0KPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIExldmVsLXRyaWdnZXJlZCBtYXBw ZWQgSVJRcyBhcmUgc3BlY2lhbCBiZWNhdXNlIHdlIG9ubHkgb2JzZXJ2ZQo+PiArwqDCoMKgwqAg KiByaXNpbmcgZWRnZXMgYXMgaW5wdXQgdG8gdGhlIFZHSUMuwqAgV2UgdGhlcmVmb3JlIGxvd2Vy IHRoZSBsaW5lCj4+ICvCoMKgwqDCoCAqIGxldmVsIGhlcmUsIHNvIHRoYXQgd2UgY2FuIHRha2Ug bmV3IHZpcnR1YWwgSVJRcy7CoCBTZWUKPj4gK8KgwqDCoMKgICogdmdpY192Ml9mb2xkX2xyX3N0 YXRlIGZvciBtb3JlIGluZm8uCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIGlmICggaXJxLT5o dyAmJiBpcnEtPmNvbmZpZyA9PSBWR0lDX0NPTkZJR19MRVZFTCAmJgo+IAo+IFNhbWUgcmVtYXJr IGZvciB0aGUgaGVscGVyLgo+IAo+PiArwqDCoMKgwqDCoMKgwqAgKHZhbCAmIEdJQ0hfTFJfUEVO RElOR19CSVQpICkKPj4gK8KgwqDCoMKgwqDCoMKgIGlycS0+bGluZV9sZXZlbCA9IGZhbHNlOwo+ PiArCj4+ICvCoMKgwqAgLyogVGhlIEdJQ3YyIExSIG9ubHkgaG9sZHMgZml2ZSBiaXRzIG9mIHBy aW9yaXR5LiAqLwo+PiArwqDCoMKgIHZhbCB8PSAoaXJxLT5wcmlvcml0eSA+PiAzKSA8PCBHSUNI X0xSX1BSSU9SSVRZX1NISUZUOwo+PiArCj4+ICvCoMKgwqAgdmNwdS0+YXJjaC52Z2ljX2NwdS52 Z2ljX3YyLnZnaWNfbHJbbHJdID0gdmFsOwo+PiArfQo+PiArCj4+ICt2b2lkIHZnaWNfdjJfY2xl YXJfbHIoc3RydWN0IHZjcHUgKnZjcHUsIGludCBscikKPj4gK3sKPj4gK8KgwqDCoCB2Y3B1LT5h cmNoLnZnaWNfY3B1LnZnaWNfdjIudmdpY19scltscl0gPSAwOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgdm9pZCBzYXZlX2xycyhzdHJ1Y3QgdmNwdSAqdmNwdSwgdm9pZCBfX2lvbWVtICpiYXNlKQo+ PiArewo+PiArwqDCoMKgIHN0cnVjdCB2Z2ljX3YyX2NwdV9pZiAqY3B1X2lmID0gJnZjcHUtPmFy Y2gudmdpY19jcHUudmdpY192MjsKPj4gK8KgwqDCoCB1NjQgdXNlZF9scnMgPSB2Y3B1LT5hcmNo LnZnaWNfY3B1LnVzZWRfbHJzOwo+PiArwqDCoMKgIHU2NCBlbHJzcjsKPj4gK8KgwqDCoCBpbnQg aTsKPj4gKwo+PiArwqDCoMKgIGVscnNyID0gcmVhZGxfcmVsYXhlZChiYXNlICsgR0lDSF9FTFJT UjApOwo+PiArwqDCoMKgIGlmICggdW5saWtlbHkodXNlZF9scnMgPiAzMikgKQo+PiArwqDCoMKg wqDCoMKgwqAgZWxyc3IgfD0gKCh1NjQpcmVhZGxfcmVsYXhlZChiYXNlICsgR0lDSF9FTFJTUjEp KSA8PCAzMjsKPj4gKwo+PiArwqDCoMKgIGZvciAoIGkgPSAwOyBpIDwgdXNlZF9scnM7IGkrKyAp Cj4+ICvCoMKgwqAgewo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCBlbHJzciAmICgxVUwgPDwgaSkg KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjcHVfaWYtPnZnaWNfbHJbaV0gJj0gfkdJQ0hf TFJfU1RBVEU7Cj4+ICvCoMKgwqDCoMKgwqDCoCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNwdV9pZi0+dmdpY19scltpXSA9IHJlYWRsX3JlbGF4ZWQoYmFzZSArIEdJQ0hfTFIwICsg KGkgKgo+PiA0KSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHdyaXRlbF9yZWxheGVkKDAsIGJh c2UgKyBHSUNIX0xSMCArIChpICogNCkpOwo+PiArwqDCoMKgIH0KPj4gK30KPj4gKwo+PiArdm9p ZCB2Z2ljX3YyX3NhdmVfc3RhdGUoc3RydWN0IHZjcHUgKnZjcHUpCj4+ICt7Cj4+ICvCoMKgwqAg dTY0IHVzZWRfbHJzID0gdmNwdS0+YXJjaC52Z2ljX2NwdS51c2VkX2xyczsKPj4gKwo+PiArwqDC oMKgIGlmICggdXNlZF9scnMgKQo+PiArwqDCoMKgIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHNhdmVf bHJzKHZjcHUsIGdpY192Ml9od19kYXRhLmhiYXNlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHdyaXRl bF9yZWxheGVkKDAsIGdpY192Ml9od19kYXRhLmhiYXNlICsgR0lDSF9IQ1IpOwo+PiArwqDCoMKg IH0KPj4gK30KPiAKPiBJIGFtIG5vdCBlbnRpcmVseSBjb252aW5jZWQgdGhhdCBoYXZlIGEgc2Vw YXJhdGUgZnVuY3Rpb24gdG8gc2F2ZSB0aGUKPiBMUnMgaXMgbmVjZXNzYXJ5LiBUaGlzIGNvdWxk IGJlIGRvbmUgaW4gZm9sZF9scl9zdGF0ZSgpLgoKPj4gKwo+PiArdm9pZCB2Z2ljX3YyX3Jlc3Rv cmVfc3RhdGUoc3RydWN0IHZjcHUgKnZjcHUpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IHZnaWNf djJfY3B1X2lmICpjcHVfaWYgPSAmdmNwdS0+YXJjaC52Z2ljX2NwdS52Z2ljX3YyOwo+PiArwqDC oMKgIHU2NCB1c2VkX2xycyA9IHZjcHUtPmFyY2gudmdpY19jcHUudXNlZF9scnM7Cj4+ICvCoMKg wqAgaW50IGk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIHVzZWRfbHJzICkKPj4gK8KgwqDCoCB7Cj4+ ICvCoMKgwqDCoMKgwqDCoCB3cml0ZWxfcmVsYXhlZChjcHVfaWYtPnZnaWNfaGNyLAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ2ljX3YyX2h3X2RhdGEu aGJhc2UgKyBHSUNIX0hDUik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKCBpID0gMDsgaSA8IHVz ZWRfbHJzOyBpKysgKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3cml0ZWxfcmVsYXhlZChj cHVfaWYtPnZnaWNfbHJbaV0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGdpY192Ml9od19kYXRhLmhiYXNlICsgR0lDSF9MUjAgKyAoaSAq IDQpKTsKPj4gK8KgwqDCoCB9Cj4gCj4gU2FtZSBoZXJlIGJ1dCB3aXRoIHBvcHVsYXRlX2xyX3N0 YXRlKCkuIFRoaXMgd291bGQgbWFrZSB0aGUgY29kZSBlYXNpZXIKPiB0byBmb2xsb3cgYW5kIGFs c28gYXZvaWQgYSBsb3QgaWZlcnkgaW4gdGhlIHZnaWMuYyBjb2RlLgo+IAo+PiArfQo+PiArCj4+ ICsvKgo+PiArICogTG9jYWwgdmFyaWFibGVzOgo+PiArICogbW9kZTogQwo+PiArICogYy1maWxl LXN0eWxlOiAiQlNEIgo+PiArICogYy1iYXNpYy1vZmZzZXQ6IDQKPj4gKyAqIGluZGVudC10YWJz LW1vZGU6IG5pbAo+PiArICogRW5kOgo+PiArICovCj4+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9h cm0vdmdpYy92Z2ljLmMgYi94ZW4vYXJjaC9hcm0vdmdpYy92Z2ljLmMKPj4gaW5kZXggYTFmNzcx MzBkNC4uZjRmMmEwNGE2MCAxMDA2NDQKPj4gLS0tIGEveGVuL2FyY2gvYXJtL3ZnaWMvdmdpYy5j Cj4+ICsrKyBiL3hlbi9hcmNoL2FybS92Z2ljL3ZnaWMuYwo+PiBAQCAtNDg4LDYgKzQ4OCw3IEBA IHJldHJ5Ogo+PiDCoCDCoCBzdGF0aWMgaW5saW5lIHZvaWQgdmdpY19mb2xkX2xyX3N0YXRlKHN0 cnVjdCB2Y3B1ICp2Y3B1KQo+PiDCoCB7Cj4+ICvCoMKgwqAgdmdpY192Ml9mb2xkX2xyX3N0YXRl KHZjcHUpOwo+PiDCoCB9Cj4+IMKgIMKgIC8qIFJlcXVpcmVzIHRoZSBpcnFfbG9jayB0byBiZSBo ZWxkLiAqLwo+PiBAQCAtNDk1LDE0ICs0OTYsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIHZnaWNf cG9wdWxhdGVfbHIoc3RydWN0IHZjcHUKPj4gKnZjcHUsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cnVjdCB2Z2ljX2lycSAqaXJxLCBpbnQgbHIpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBBU1NFUlQo c3Bpbl9pc19sb2NrZWQoJmlycS0+aXJxX2xvY2spKTsKPj4gKwo+PiArwqDCoMKgIHZnaWNfdjJf cG9wdWxhdGVfbHIodmNwdSwgaXJxLCBscik7Cj4+IMKgIH0KPj4gwqAgwqAgc3RhdGljIGlubGlu ZSB2b2lkIHZnaWNfY2xlYXJfbHIoc3RydWN0IHZjcHUgKnZjcHUsIGludCBscikKPj4gwqAgewo+ PiArwqDCoMKgIHZnaWNfdjJfY2xlYXJfbHIodmNwdSwgbHIpOwo+PiDCoCB9Cj4+IMKgIMKgIHN0 YXRpYyBpbmxpbmUgdm9pZCB2Z2ljX3NldF91bmRlcmZsb3coc3RydWN0IHZjcHUgKnZjcHUpCj4+ IMKgIHsKPj4gK8KgwqDCoCB2Z2ljX3YyX3NldF91bmRlcmZsb3codmNwdSk7Cj4+IMKgIH0KPj4g wqAgwqAgLyogUmVxdWlyZXMgdGhlIGFwX2xpc3RfbG9jayB0byBiZSBoZWxkLiAqLwo+PiBAQCAt NTczLDYgKzU3OCwxMSBAQCBuZXh0Ogo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdmdpY19jbGVhcl9s cih2Y3B1LCBjb3VudCk7Cj4+IMKgIH0KPj4gwqAgK3N0YXRpYyBpbmxpbmUgdm9pZCB2Z2ljX3Nh dmVfc3RhdGUoc3RydWN0IHZjcHUgKnZjcHUpCj4+ICt7Cj4+ICvCoMKgwqAgdmdpY192Ml9zYXZl X3N0YXRlKHZjcHUpOwo+PiArfQo+PiArCj4+IMKgIC8qCj4+IMKgwqAgKiBnaWNfY2xlYXJfbHJz KCkgLSBVcGRhdGUgdGhlIFZHSUMgc3RhdGUgZnJvbSBoYXJkd2FyZSBhZnRlciBhCj4+IGd1ZXN0 J3MgcnVuLgo+PiDCoMKgICogQHZjcHU6IHRoZSBWQ1BVLgo+PiBAQCAtNTkyLDExICs2MDIsMTgg QEAgdm9pZCBnaWNfY2xlYXJfbHJzKHN0cnVjdCB2Y3B1ICp2Y3B1KQo+PiDCoMKgwqDCoMKgIGlm ICggbGlzdF9lbXB0eSgmdmNwdS0+YXJjaC52Z2ljX2NwdS5hcF9saXN0X2hlYWQpICkKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gwqAgK8KgwqDCoCB2Z2ljX3NhdmVfc3RhdGUodmNw dSk7Cj4+ICsKPj4gwqDCoMKgwqDCoCBpZiAoIHZnaWNfY3B1LT51c2VkX2xycyApCj4+IMKgwqDC oMKgwqDCoMKgwqDCoCB2Z2ljX2ZvbGRfbHJfc3RhdGUodmNwdSk7Cj4+IMKgwqDCoMKgwqAgdmdp Y19wcnVuZV9hcF9saXN0KHZjcHUpOwo+PiDCoCB9Cj4+IMKgICtzdGF0aWMgaW5saW5lIHZvaWQg dmdpY19yZXN0b3JlX3N0YXRlKHN0cnVjdCB2Y3B1ICp2Y3B1KQo+PiArewo+PiArwqDCoMKgIHZn aWNfdjJfcmVzdG9yZV9zdGF0ZSh2Y3B1KTsKPj4gK30KPj4gKwo+PiDCoCAvKgo+PiDCoMKgICog Z2ljX2luamVjdCgpIC0gZmx1c2ggdGhlIGVtdWxhdGlvbiBzdGF0ZSBpbnRvIHRoZSBoYXJkd2Fy ZSBvbgo+PiBndWVzdCBlbnRyeQo+PiDCoMKgICoKPj4gQEAgLTYyNSw3ICs2NDIsMTAgQEAgdm9p ZCBnaWNfaW5qZWN0KHZvaWQpCj4+IMKgwqDCoMKgwqAgc3Bpbl9sb2NrKCZjdXJyZW50LT5hcmNo LnZnaWNfY3B1LmFwX2xpc3RfbG9jayk7Cj4+IMKgwqDCoMKgwqAgdmdpY19mbHVzaF9scl9zdGF0 ZShjdXJyZW50KTsKPj4gwqDCoMKgwqDCoCBzcGluX3VubG9jaygmY3VycmVudC0+YXJjaC52Z2lj X2NwdS5hcF9saXN0X2xvY2spOwo+PiArCj4+ICvCoMKgwqAgdmdpY19yZXN0b3JlX3N0YXRlKGN1 cnJlbnQpOwo+PiDCoCB9Cj4+ICsKPj4gwqAgLyoKPj4gwqDCoCAqIExvY2FsIHZhcmlhYmxlczoK Pj4gwqDCoCAqIG1vZGU6IEMKPj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS92Z2ljL3ZnaWMu aCBiL3hlbi9hcmNoL2FybS92Z2ljL3ZnaWMuaAo+PiBpbmRleCA0N2ZjNThiODFlLi43NzFjYTZm MDQ2IDEwMDY0NAo+PiAtLS0gYS94ZW4vYXJjaC9hcm0vdmdpYy92Z2ljLmgKPj4gKysrIGIveGVu L2FyY2gvYXJtL3ZnaWMvdmdpYy5oCj4+IEBAIC00MSw0ICs0MSwxMiBAQCBzdGF0aWMgaW5saW5l IHZvaWQgdmdpY19nZXRfaXJxX2tyZWYoc3RydWN0Cj4+IHZnaWNfaXJxICppcnEpCj4+IMKgwqDC oMKgwqAgYXRvbWljX2luYygmaXJxLT5yZWZjb3VudCk7Cj4+IMKgIH0KPj4gwqAgK3ZvaWQgdmdp Y192Ml9mb2xkX2xyX3N0YXRlKHN0cnVjdCB2Y3B1ICp2Y3B1KTsKPj4gK3ZvaWQgdmdpY192Ml9w b3B1bGF0ZV9scihzdHJ1Y3QgdmNwdSAqdmNwdSwgc3RydWN0IHZnaWNfaXJxICppcnEsIGludAo+ PiBscik7Cj4+ICt2b2lkIHZnaWNfdjJfY2xlYXJfbHIoc3RydWN0IHZjcHUgKnZjcHUsIGludCBs cik7Cj4+ICt2b2lkIHZnaWNfdjJfc2V0X3VuZGVyZmxvdyhzdHJ1Y3QgdmNwdSAqdmNwdSk7Cj4+ ICsKPj4gK3ZvaWQgdmdpY192Ml9zYXZlX3N0YXRlKHN0cnVjdCB2Y3B1ICp2Y3B1KTsKPj4gK3Zv aWQgdmdpY192Ml9yZXN0b3JlX3N0YXRlKHN0cnVjdCB2Y3B1ICp2Y3B1KTsKPj4gKwo+PiDCoCAj ZW5kaWYKPj4KPiAKPiBDaGVlcnMsCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54 ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu Zm8veGVuLWRldmVs