From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52277) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aOe1A-0005KG-73 for qemu-devel@nongnu.org; Wed, 27 Jan 2016 23:17:13 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aOe18-0002x2-EY for qemu-devel@nongnu.org; Wed, 27 Jan 2016 23:17:12 -0500 Message-ID: <1453954620.3148.46.camel@kernel.crashing.org> From: Benjamin Herrenschmidt Date: Thu, 28 Jan 2016 15:17:00 +1100 In-Reply-To: <1453889591-30968-5-git-send-email-david@gibson.dropbear.id.au> References: <1453889591-30968-1-git-send-email-david@gibson.dropbear.id.au> <1453889591-30968-5-git-send-email-david@gibson.dropbear.id.au> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: base64 Subject: Re: [Qemu-devel] [PATCHv2 04/10] target-ppc: Rework SLB page size lookup List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson Cc: lvivier@redhat.com, thuth@redhat.com, aik@ozlabs.ru, agraf@suse.de, qemu-devel@nongnu.org, qemu-ppc@nongnu.org T24gV2VkLCAyMDE2LTAxLTI3IGF0IDIxOjEzICsxMTAwLCBEYXZpZCBHaWJzb24gd3JvdGU6 DQo+IEN1cnJlbnRseSwgdGhlIHBwY19oYXNoNjRfcGFnZV9zaGlmdCgpIGZ1bmN0aW9uIGxv b2tzIHVwIGEgcGFnZSBzaXplDQo+IGJhc2VkDQo+IG9uIGluZm9ybWF0aW9uIGluIGFuIFNM QiBlbnRyeS7CoMKgSXQgb3BlbiBjb2RlcyB0aGUgYml0IHRyYW5zbGF0aW9uDQo+IGZvcg0K PiBleGlzdGluZyBDUFVzLCBob3dldmVyIGRpZmZlcmVudCBDUFUgbW9kZWxzIGNhbiBoYXZl IGRpZmZlcmVudCBTTEINCj4gZW5jb2RpbmdzLsKgwqBXZSBhbHJlYWR5IHN0b3JlIHRob3Nl IGluIHRoZSAnc3BzJyB0YWJsZSBpbiBDUFVQUENTdGF0ZSwNCj4gYnV0DQo+IHdlIGRvbid0 IGN1cnJlbnRseSBlbmZvcmNlIHRoYXQgdGhhdCBhY3R1YWxseSBtYXRjaGVzIHRoZSBsb2dp YyBpbg0KPiBwcGNfaGFzaDY0X3BhZ2Vfc2hpZnQuDQo+IA0KPiBUaGlzIHBhdGNoIHJld29y a3MgbG9va3VwIG9mIHBhZ2Ugc2l6ZSBmcm9tIFNMQiBpbiBzZXZlcmFsIHdheXM6DQo+IMKg ICogcHBjX3N0b3JlX3NsYigpIHdpbGwgbm93IGZhaWwgKHRyaWdnZXJpbmcgYW4gaWxsZWdh bCBpbnN0cnVjdGlvbg0KPiDCoMKgwqDCoGV4Y2VwdGlvbikgaWYgZ2l2ZW4gYSBiYWQgU0xC IHBhZ2Ugc2l6ZSBlbmNvZGluZw0KPiDCoCAqIE9uIHN1Y2Nlc3MgcHBjX3N0b3JlX3NsYigp IHN0b3JlcyBhIHBvaW50ZXIgdG8gdGhlIHJlbGV2YW50IGVudHJ5DQo+IGluDQo+IMKgwqDC oMKgdGhlIHBhZ2Ugc2l6ZSB0YWJsZSBpbiB0aGUgU0xCIGVudHJ5LsKgwqBUaGlzIGlzIGxv b2tlZCB1cCBkaXJlY3RseQ0KPiBmcm9tDQo+IMKgwqDCoMKgdGhlIHB1Ymxpc2hlZCB0YWJs ZSBvZiBwYWdlIHNpemUgZW5jb2RpbmdzLCBzbyBjYW4ndCBnZXQgb3V0IG90DQo+IHN5bmMu DQo+IMKgICogcHBjX2hhc2g2NF9odGFiX2xvb2t1cCgpIGFuZCBvdGhlcnMgbm93IHVzZSB0 aGlzIHByZWNhY2hlZCBwYWdlDQo+IHNpemUNCj4gwqDCoMKgwqBpbmZvcm1hdGlvbiByYXRo ZXIgdGhhbiBkZWNvZGluZyB0aGUgU0xCIHZhbHVlcw0KPiDCoCAqIE5vdyB0aGF0IGNhbGxl cnMgaGF2ZSBlYXN5IGFjY2VzcyB0byB0aGUgcGFnZV9zaGlmdCwNCj4gwqDCoMKgwqBwcGNf aGFzaDY0X3B0ZV9yYWRkcigpIGFtb3VudHMgdG8ganVzdCBhIGRlcG9zaXQ2NCgpLCBzbyBy ZW1vdmUNCj4gaXQgYW5kDQo+IMKgwqDCoMKgaGF2ZSB0aGUgY2FsbGVycyB1c2UgZGVwb3Np dDY0KCkgZGlyZWN0bHkuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBEYXZpZCBHaWJzb24gPGRh dmlkQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4NCg0KQWNrZWQtYnk6IEJlbmphbWluIEhlcnJl bnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4NCg0KPiAtLS0NCj4gwqB0YXJn ZXQtcHBjL2NwdS5owqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArDQo+IMKgdGFyZ2V0LXBwYy9t YWNoaW5lLmPCoMKgwqDCoHwgMjAgKysrKysrKysrKysrKw0KPiDCoHRhcmdldC1wcGMvbW11 LWhhc2g2NC5jIHwgNzQgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQ0K PiAtLS0tLS0tLS0tLS0NCj4gwqAzIGZpbGVzIGNoYW5nZWQsIDU2IGluc2VydGlvbnMoKyks IDM5IGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL3RhcmdldC1wcGMvY3B1Lmgg Yi90YXJnZXQtcHBjL2NwdS5oDQo+IGluZGV4IDJiYzk2YjQuLjA4MjAzOTAgMTAwNjQ0DQo+ IC0tLSBhL3RhcmdldC1wcGMvY3B1LmgNCj4gKysrIGIvdGFyZ2V0LXBwYy9jcHUuaA0KPiBA QCAtNDE5LDYgKzQxOSw3IEBAIHR5cGVkZWYgc3RydWN0IHBwY19zbGJfdCBwcGNfc2xiX3Q7 DQo+IMKgc3RydWN0IHBwY19zbGJfdCB7DQo+IMKgwqDCoMKgwqB1aW50NjRfdCBlc2lkOw0K PiDCoMKgwqDCoMKgdWludDY0X3QgdnNpZDsNCj4gK8KgwqDCoMKgY29uc3Qgc3RydWN0IHBw Y19vbmVfc2VnX3BhZ2Vfc2l6ZSAqc3BzOw0KPiDCoH07DQo+IMKgDQo+IMKgI2RlZmluZSBN QVhfU0xCX0VOVFJJRVPCoMKgwqDCoMKgwqDCoMKgwqA2NA0KPiBkaWZmIC0tZ2l0IGEvdGFy Z2V0LXBwYy9tYWNoaW5lLmMgYi90YXJnZXQtcHBjL21hY2hpbmUuYw0KPiBpbmRleCBiNjFj MDYwLi5jYTYyZDNlIDEwMDY0NA0KPiAtLS0gYS90YXJnZXQtcHBjL21hY2hpbmUuYw0KPiAr KysgYi90YXJnZXQtcHBjL21hY2hpbmUuYw0KPiBAQCAtMiw2ICsyLDcgQEANCj4gwqAjaW5j bHVkZSAiaHcvYm9hcmRzLmgiDQo+IMKgI2luY2x1ZGUgInN5c2VtdS9rdm0uaCINCj4gwqAj aW5jbHVkZSAiaGVscGVyX3JlZ3MuaCINCj4gKyNpbmNsdWRlICJtbXUtaGFzaDY0LmgiDQo+ IMKgDQo+IMKgc3RhdGljIGludCBjcHVfbG9hZF9vbGQoUUVNVUZpbGUgKmYsIHZvaWQgKm9w YXF1ZSwgaW50IHZlcnNpb25faWQpDQo+IMKgew0KPiBAQCAtMzUyLDExICszNTMsMzAgQEAg c3RhdGljIGJvb2wgc2xiX25lZWRlZCh2b2lkICpvcGFxdWUpDQo+IMKgwqDCoMKgwqByZXR1 cm4gKGNwdS0+ZW52Lm1tdV9tb2RlbCAmIFBPV0VSUENfTU1VXzY0KTsNCj4gwqB9DQo+IMKg DQo+ICtzdGF0aWMgaW50IHNsYl9wb3N0X2xvYWQodm9pZCAqb3BhcXVlLCBpbnQgdmVyc2lv bl9pZCkNCj4gK3sNCj4gK8KgwqDCoMKgUG93ZXJQQ0NQVSAqY3B1ID0gb3BhcXVlOw0KPiAr wqDCoMKgwqBDUFVQUENTdGF0ZSAqZW52ID0gJmNwdS0+ZW52Ow0KPiArwqDCoMKgwqBpbnQg aTsNCj4gKw0KPiArwqDCoMKgwqAvKiBXZSd2ZSBwdWxsZWQgaW4gdGhlIHJhdyBlc2lkIGFu ZCB2c2lkIHZhbHVlcyBmcm9tIHRoZQ0KPiBtaWdyYXRpb24NCj4gK8KgwqDCoMKgwqAqIHN0 cmVhbSwgYnV0IHdlIG5lZWQgdG8gcmVjb21wdXRlIHRoZSBwYWdlIHNpemUgcG9pbnRlcnMg Ki8NCj4gK8KgwqDCoMKgZm9yIChpID0gMDsgaSA8IGVudi0+c2xiX25yOyBpKyspIHsNCj4g K8KgwqDCoMKgwqDCoMKgwqBpZiAocHBjX3N0b3JlX3NsYihjcHUsIGksIGVudi0+c2xiW2ld LmVzaWQsIGVudi0NCj4gPnNsYltpXS52c2lkKSA8IDApIHsNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoC8qIE1pZ3JhdGlvbiBzb3VyY2UgaGFkIGJhZCB2YWx1ZXMgaW4gaXRzIFNM QiAqLw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC0xOw0KPiArwqDCoMKg wqDCoMKgwqDCoH0NCj4gK8KgwqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDCoHJldHVybiAwOw0K PiArfQ0KPiArDQo+IMKgc3RhdGljIGNvbnN0IFZNU3RhdGVEZXNjcmlwdGlvbiB2bXN0YXRl X3NsYiA9IHsNCj4gwqDCoMKgwqDCoC5uYW1lID0gImNwdS9zbGIiLA0KPiDCoMKgwqDCoMKg LnZlcnNpb25faWQgPSAxLA0KPiDCoMKgwqDCoMKgLm1pbmltdW1fdmVyc2lvbl9pZCA9IDEs DQo+IMKgwqDCoMKgwqAubmVlZGVkID0gc2xiX25lZWRlZCwNCj4gK8KgwqDCoMKgLnBvc3Rf bG9hZCA9IHNsYl9wb3N0X2xvYWQsDQo+IMKgwqDCoMKgwqAuZmllbGRzID0gKFZNU3RhdGVG aWVsZFtdKSB7DQo+IMKgwqDCoMKgwqDCoMKgwqDCoFZNU1RBVEVfSU5UMzJfRVFVQUwoZW52 LnNsYl9uciwgUG93ZXJQQ0NQVSksDQo+IMKgwqDCoMKgwqDCoMKgwqDCoFZNU1RBVEVfU0xC X0FSUkFZKGVudi5zbGIsIFBvd2VyUENDUFUsIE1BWF9TTEJfRU5UUklFUyksDQo+IGRpZmYg LS1naXQgYS90YXJnZXQtcHBjL21tdS1oYXNoNjQuYyBiL3RhcmdldC1wcGMvbW11LWhhc2g2 NC5jDQo+IGluZGV4IDZlMDU2NDMuLmI3ODQ3OTEgMTAwNjQ0DQo+IC0tLSBhL3RhcmdldC1w cGMvbW11LWhhc2g2NC5jDQo+ICsrKyBiL3RhcmdldC1wcGMvbW11LWhhc2g2NC5jDQo+IEBA IC0xOSw2ICsxOSw3IEBADQo+IMKgICovDQo+IMKgI2luY2x1ZGUgImNwdS5oIg0KPiDCoCNp bmNsdWRlICJleGVjL2hlbHBlci1wcm90by5oIg0KPiArI2luY2x1ZGUgInFlbXUvZXJyb3It cmVwb3J0LmgiDQo+IMKgI2luY2x1ZGUgInN5c2VtdS9rdm0uaCINCj4gwqAjaW5jbHVkZSAi a3ZtX3BwYy5oIg0KPiDCoCNpbmNsdWRlICJtbXUtaGFzaDY0LmgiDQo+IEBAIC0xNDAsNiAr MTQxLDggQEAgaW50IHBwY19zdG9yZV9zbGIoUG93ZXJQQ0NQVSAqY3B1LCB0YXJnZXRfdWxv bmcNCj4gc2xvdCwNCj4gwqB7DQo+IMKgwqDCoMKgwqBDUFVQUENTdGF0ZSAqZW52ID0gJmNw dS0+ZW52Ow0KPiDCoMKgwqDCoMKgcHBjX3NsYl90ICpzbGIgPSAmZW52LT5zbGJbc2xvdF07 DQo+ICvCoMKgwqDCoGNvbnN0IHN0cnVjdCBwcGNfb25lX3NlZ19wYWdlX3NpemUgKnNwcyA9 IE5VTEw7DQo+ICvCoMKgwqDCoGludCBpOw0KPiDCoA0KPiDCoMKgwqDCoMKgaWYgKHNsb3Qg Pj0gZW52LT5zbGJfbnIpIHsNCj4gwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC0xOyAvKiBC YWQgc2xvdCBudW1iZXIgKi8NCj4gQEAgLTE1NCw4ICsxNTcsMjkgQEAgaW50IHBwY19zdG9y ZV9zbGIoUG93ZXJQQ0NQVSAqY3B1LCB0YXJnZXRfdWxvbmcNCj4gc2xvdCwNCj4gwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIC0xOyAvKiAxVCBzZWdtZW50IG9uIE1NVSB0aGF0IGRvZXNu J3Qgc3VwcG9ydCBpdCAqLw0KPiDCoMKgwqDCoMKgfQ0KPiDCoA0KPiArwqDCoMKgwqBmb3Ig KGkgPSAwOyBpIDwgUFBDX1BBR0VfU0laRVNfTUFYX1NaOyBpKyspIHsNCj4gK8KgwqDCoMKg wqDCoMKgwqBjb25zdCBzdHJ1Y3QgcHBjX29uZV9zZWdfcGFnZV9zaXplICpzcHMxID0gJmVu di0+c3BzLnNwc1tpXTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqDCoGlmICghc3BzMS0+cGFn ZV9zaGlmdCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ICvCoMKg wqDCoMKgwqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKCh2c2lkICYgU0xC X1ZTSURfTExQX01BU0spID09IHNwczEtPnNsYl9lbmMpIHsNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHNwcyA9IHNwczE7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVh azsNCj4gK8KgwqDCoMKgwqDCoMKgwqB9DQo+ICvCoMKgwqDCoH0NCj4gKw0KPiArwqDCoMKg wqBpZiAoIXNwcykgew0KPiArwqDCoMKgwqDCoMKgwqDCoGVycm9yX3JlcG9ydCgiQmFkIHBh Z2Ugc2l6ZSBlbmNvZGluZyBpbiBTTEIgc3RvcmU6IHNsb3QNCj4gIlRBUkdFVF9GTVRfbHUN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCIgZXNpZCAw eCJUQVJHRVRfRk1UX2x4IiB2c2lkIDB4IlRBUkdFVF9GTVRfbHgsDQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzbG90LCBlc2lkLCB2c2lkKTsNCj4g K8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7DQo+ICvCoMKgwqDCoH0NCj4gKw0KPiDCoMKg wqDCoMKgc2xiLT5lc2lkID0gZXNpZDsNCj4gwqDCoMKgwqDCoHNsYi0+dnNpZCA9IHZzaWQ7 DQo+ICvCoMKgwqDCoHNsYi0+c3BzID0gc3BzOw0KPiDCoA0KPiDCoMKgwqDCoMKgTE9HX1NM QigiJXM6ICVkICIgVEFSR0VUX0ZNVF9seCAiIC0gIiBUQVJHRVRfRk1UX2x4ICIgPT4gJTAx NiINCj4gUFJJeDY0DQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIiAlMDE2IiBQUkl4 NjQgIlxuIiwgX19mdW5jX18sIHNsb3QsIGVzaWQsIHZzaWQsDQo+IEBAIC0zOTQsMjQgKzQx OCw2IEBAIHN0YXRpYyBod2FkZHIgcHBjX2hhc2g2NF9wdGVnX3NlYXJjaChQb3dlclBDQ1BV DQo+ICpjcHUsIGh3YWRkciBoYXNoLA0KPiDCoMKgwqDCoMKgcmV0dXJuIC0xOw0KPiDCoH0N Cj4gwqANCj4gLXN0YXRpYyB1aW50NjRfdCBwcGNfaGFzaDY0X3BhZ2Vfc2hpZnQocHBjX3Ns Yl90ICpzbGIpDQo+IC17DQo+IC3CoMKgwqDCoHVpbnQ2NF90IGVwbnNoaWZ0Ow0KPiAtDQo+ IC3CoMKgwqDCoC8qIFBhZ2Ugc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIFNMQiwgd2hpY2ggd2Ug dXNlIHRvIGdlbmVyYXRlIHRoZQ0KPiAtwqDCoMKgwqDCoCogRVBOIGZvciBoYXNoIHRhYmxl IGxvb2t1cC4uwqDCoFdoZW4gd2UgaW1wbGVtZW50IG1vcmUgcmVjZW50DQo+IE1NVQ0KPiAt wqDCoMKgwqDCoCogZXh0ZW5zaW9ucyB0aGlzIG1pZ2h0IGJlIGRpZmZlcmVudCBmcm9tIHRo ZSBhY3R1YWwgcGFnZSBzaXplDQo+IC3CoMKgwqDCoMKgKiBlbmNvZGVkIGluIHRoZSBQVEUg Ki8NCj4gLcKgwqDCoMKgaWYgKChzbGItPnZzaWQgJiBTTEJfVlNJRF9MTFBfTUFTSykgPT0g U0xCX1ZTSURfNEspIHsNCj4gLcKgwqDCoMKgwqDCoMKgwqBlcG5zaGlmdCA9IFRBUkdFVF9Q QUdFX0JJVFM7DQo+IC3CoMKgwqDCoH0gZWxzZSBpZiAoKHNsYi0+dnNpZCAmIFNMQl9WU0lE X0xMUF9NQVNLKSA9PSBTTEJfVlNJRF82NEspIHsNCj4gLcKgwqDCoMKgwqDCoMKgwqBlcG5z aGlmdCA9IFRBUkdFVF9QQUdFX0JJVFNfNjRLOw0KPiAtwqDCoMKgwqB9IGVsc2Ugew0KPiAt wqDCoMKgwqDCoMKgwqDCoGVwbnNoaWZ0ID0gVEFSR0VUX1BBR0VfQklUU18xNk07DQo+IC3C oMKgwqDCoH0NCj4gLcKgwqDCoMKgcmV0dXJuIGVwbnNoaWZ0Ow0KPiAtfQ0KPiAtDQo+IMKg c3RhdGljIGh3YWRkciBwcGNfaGFzaDY0X2h0YWJfbG9va3VwKFBvd2VyUENDUFUgKmNwdSwN Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBwY19zbGJfdCAqc2xiLCB0YXJnZXRfdWxvbmcN Cj4gZWFkZHIsDQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcGNfaGFzaF9wdGU2NF90ICpw dGUpDQo+IEBAIC00MTksMjEgKzQyNSwyNCBAQCBzdGF0aWMgaHdhZGRyIHBwY19oYXNoNjRf aHRhYl9sb29rdXAoUG93ZXJQQ0NQVQ0KPiAqY3B1LA0KPiDCoMKgwqDCoMKgQ1BVUFBDU3Rh dGUgKmVudiA9ICZjcHUtPmVudjsNCj4gwqDCoMKgwqDCoGh3YWRkciBwdGVfb2Zmc2V0Ow0K PiDCoMKgwqDCoMKgaHdhZGRyIGhhc2g7DQo+IC3CoMKgwqDCoHVpbnQ2NF90IHZzaWQsIGVw bnNoaWZ0LCBlcG5tYXNrLCBlcG4sIHB0ZW07DQo+ICvCoMKgwqDCoHVpbnQ2NF90IHZzaWQs IGVwbm1hc2ssIGVwbiwgcHRlbTsNCj4gKw0KPiArwqDCoMKgwqAvKiBUaGUgU0xCIHN0b3Jl IHBhdGggc2hvdWxkIHByZXZlbnQgYW55IGJhZCBwYWdlIHNpemUgZW5jb2RpbmdzDQo+ICvC oMKgwqDCoMKgKiBnZXR0aW5nIGluIHRoZXJlLCBzbzogKi8NCj4gK8KgwqDCoMKgYXNzZXJ0 KHNsYi0+c3BzKTsNCj4gwqANCj4gLcKgwqDCoMKgZXBuc2hpZnQgPSBwcGNfaGFzaDY0X3Bh Z2Vfc2hpZnQoc2xiKTsNCj4gLcKgwqDCoMKgZXBubWFzayA9IH4oKDFVTEwgPDwgZXBuc2hp ZnQpIC0gMSk7DQo+ICvCoMKgwqDCoGVwbm1hc2sgPSB+KCgxVUxMIDw8IHNsYi0+c3BzLT5w YWdlX3NoaWZ0KSAtIDEpOw0KPiDCoA0KPiDCoMKgwqDCoMKgaWYgKHNsYi0+dnNpZCAmIFNM Ql9WU0lEX0IpIHsNCj4gwqDCoMKgwqDCoMKgwqDCoMKgLyogMVRCIHNlZ21lbnQgKi8NCj4g wqDCoMKgwqDCoMKgwqDCoMKgdnNpZCA9IChzbGItPnZzaWQgJiBTTEJfVlNJRF9WU0lEKSA+ PiBTTEJfVlNJRF9TSElGVF8xVDsNCj4gwqDCoMKgwqDCoMKgwqDCoMKgZXBuID0gKGVhZGRy ICYgflNFR01FTlRfTUFTS18xVCkgJiBlcG5tYXNrOw0KPiAtwqDCoMKgwqDCoMKgwqDCoGhh c2ggPSB2c2lkIF4gKHZzaWQgPDwgMjUpIF4gKGVwbiA+PiBlcG5zaGlmdCk7DQo+ICvCoMKg wqDCoMKgwqDCoMKgaGFzaCA9IHZzaWQgXiAodnNpZCA8PCAyNSkgXiAoZXBuID4+IHNsYi0+ c3BzLT5wYWdlX3NoaWZ0KTsNCj4gwqDCoMKgwqDCoH0gZWxzZSB7DQo+IMKgwqDCoMKgwqDC oMKgwqDCoC8qIDI1Nk0gc2VnbWVudCAqLw0KPiDCoMKgwqDCoMKgwqDCoMKgwqB2c2lkID0g KHNsYi0+dnNpZCAmIFNMQl9WU0lEX1ZTSUQpID4+IFNMQl9WU0lEX1NISUZUOw0KPiDCoMKg wqDCoMKgwqDCoMKgwqBlcG4gPSAoZWFkZHIgJiB+U0VHTUVOVF9NQVNLXzI1Nk0pICYgZXBu bWFzazsNCj4gLcKgwqDCoMKgwqDCoMKgwqBoYXNoID0gdnNpZCBeIChlcG4gPj4gZXBuc2hp ZnQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoGhhc2ggPSB2c2lkIF4gKGVwbiA+PiBzbGItPnNw cy0+cGFnZV9zaGlmdCk7DQo+IMKgwqDCoMKgwqB9DQo+IMKgwqDCoMKgwqBwdGVtID0gKHNs Yi0+dnNpZCAmIFNMQl9WU0lEX1BURU0pIHwgKChlcG4gPj4gMTYpICYNCj4gSFBURTY0X1Zf QVZQTik7DQo+IMKgDQo+IEBAIC00NjUsMjAgKzQ3NCw2IEBAIHN0YXRpYyBod2FkZHIgcHBj X2hhc2g2NF9odGFiX2xvb2t1cChQb3dlclBDQ1BVDQo+ICpjcHUsDQo+IMKgwqDCoMKgwqBy ZXR1cm4gcHRlX29mZnNldDsNCj4gwqB9DQo+IMKgDQo+IC1zdGF0aWMgaHdhZGRyIHBwY19o YXNoNjRfcHRlX3JhZGRyKHBwY19zbGJfdCAqc2xiLCBwcGNfaGFzaF9wdGU2NF90DQo+IHB0 ZSwNCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0YXJnZXRfdWxvbmcgZWFkZHIpDQo+IC17DQo+IC3C oMKgwqDCoGh3YWRkciBtYXNrOw0KPiAtwqDCoMKgwqBpbnQgdGFyZ2V0X3BhZ2VfYml0czsN Cj4gLcKgwqDCoMKgaHdhZGRyIHJwbiA9IHB0ZS5wdGUxICYgSFBURTY0X1JfUlBOOw0KPiAt wqDCoMKgwqAvKg0KPiAtwqDCoMKgwqDCoCogV2Ugc3VwcG9ydCA0SywgNjRLIGFuZCAxNk0g bm93DQo+IC3CoMKgwqDCoMKgKi8NCj4gLcKgwqDCoMKgdGFyZ2V0X3BhZ2VfYml0cyA9IHBw Y19oYXNoNjRfcGFnZV9zaGlmdChzbGIpOw0KPiAtwqDCoMKgwqBtYXNrID0gKDFVTEwgPDwg dGFyZ2V0X3BhZ2VfYml0cykgLSAxOw0KPiAtwqDCoMKgwqByZXR1cm4gKHJwbiAmIH5tYXNr KSB8IChlYWRkciAmIG1hc2spOw0KPiAtfQ0KPiAtDQo+IMKgaW50IHBwY19oYXNoNjRfaGFu ZGxlX21tdV9mYXVsdChQb3dlclBDQ1BVICpjcHUsIHRhcmdldF91bG9uZyBlYWRkciwNCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaW50IHJ3eCwgaW50IG1tdV9pZHgpDQo+IMKgew0KPiBAQCAtNjAwLDcg KzU5NSw3IEBAIGludCBwcGNfaGFzaDY0X2hhbmRsZV9tbXVfZmF1bHQoUG93ZXJQQ0NQVSAq Y3B1LA0KPiB0YXJnZXRfdWxvbmcgZWFkZHIsDQo+IMKgDQo+IMKgwqDCoMKgwqAvKiA3LiBE ZXRlcm1pbmUgdGhlIHJlYWwgYWRkcmVzcyBmcm9tIHRoZSBQVEUgKi8NCj4gwqANCj4gLcKg wqDCoMKgcmFkZHIgPSBwcGNfaGFzaDY0X3B0ZV9yYWRkcihzbGIsIHB0ZSwgZWFkZHIpOw0K PiArwqDCoMKgwqByYWRkciA9IGRlcG9zaXQ2NChwdGUucHRlMSAmIEhQVEU2NF9SX1JQTiwg MCwgc2xiLT5zcHMtDQo+ID5wYWdlX3NoaWZ0LCBlYWRkcik7DQo+IMKgDQo+IMKgwqDCoMKg wqB0bGJfc2V0X3BhZ2UoY3MsIGVhZGRyICYgVEFSR0VUX1BBR0VfTUFTSywgcmFkZHIgJg0K PiBUQVJHRVRfUEFHRV9NQVNLLA0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBwcm90LCBtbXVfaWR4LCBUQVJHRVRfUEFHRV9TSVpFKTsNCj4gQEAgLTYzMCw3ICs2 MjUsOCBAQCBod2FkZHIgcHBjX2hhc2g2NF9nZXRfcGh5c19wYWdlX2RlYnVnKFBvd2VyUEND UFUNCj4gKmNwdSwgdGFyZ2V0X3Vsb25nIGFkZHIpDQo+IMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiAtMTsNCj4gwqDCoMKgwqDCoH0NCj4gwqANCj4gLcKgwqDCoMKgcmV0dXJuIHBwY19o YXNoNjRfcHRlX3JhZGRyKHNsYiwgcHRlLCBhZGRyKSAmIFRBUkdFVF9QQUdFX01BU0s7DQo+ ICvCoMKgwqDCoHJldHVybiBkZXBvc2l0NjQocHRlLnB0ZTEgJiBIUFRFNjRfUl9SUE4sIDAs IHNsYi0+c3BzLQ0KPiA+cGFnZV9zaGlmdCwgYWRkcikNCj4gK8KgwqDCoMKgwqDCoMKgwqAm IFRBUkdFVF9QQUdFX01BU0s7DQo+IMKgfQ0KPiDCoA0KPiDCoHZvaWQgcHBjX2hhc2g2NF9z dG9yZV9ocHRlKFBvd2VyUENDUFUgKmNwdSwNCg==