From owner-freebsd-xen@FreeBSD.ORG Tue Dec 27 17:40:39 2011 Return-Path: Delivered-To: xen@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 553B91065687 for ; Tue, 27 Dec 2011 17:40:39 +0000 (UTC) (envelope-from alc@rice.edu) Received: from mh6.mail.rice.edu (mh6.mail.rice.edu [128.42.201.4]) by mx1.freebsd.org (Postfix) with ESMTP id F36678FC0C for ; Tue, 27 Dec 2011 17:40:38 +0000 (UTC) Received: from mh6.mail.rice.edu (localhost.localdomain [127.0.0.1]) by mh6.mail.rice.edu (Postfix) with ESMTP id 2F017291298; Tue, 27 Dec 2011 11:40:37 -0600 (CST) Received: from mh6.mail.rice.edu (localhost.localdomain [127.0.0.1]) by mh6.mail.rice.edu (Postfix) with ESMTP id 1B84F291295; Tue, 27 Dec 2011 11:40:37 -0600 (CST) X-Virus-Scanned: by amavis-2.6.4 at mh6.mail.rice.edu, auth channel Received: from mh6.mail.rice.edu ([127.0.0.1]) by mh6.mail.rice.edu (mh6.mail.rice.edu [127.0.0.1]) (amavis, port 10026) with ESMTP id KXeWGC9NdrBA; Tue, 27 Dec 2011 11:40:36 -0600 (CST) Received: from adsl-216-63-78-18.dsl.hstntx.swbell.net (adsl-216-63-78-18.dsl.hstntx.swbell.net [216.63.78.18]) (using TLSv1 with cipher RC4-MD5 (128/128 bits)) (No client certificate requested) (Authenticated sender: alc) by mh6.mail.rice.edu (Postfix) with ESMTPSA id CE23D29128F; Tue, 27 Dec 2011 11:40:35 -0600 (CST) Message-ID: <4EFA0313.6030105@rice.edu> Date: Tue, 27 Dec 2011 11:40:35 -0600 From: Alan Cox User-Agent: Mozilla/5.0 (X11; FreeBSD i386; rv:8.0) Gecko/20111113 Thunderbird/8.0 MIME-Version: 1.0 To: Sean Bruno References: <4EEB9CCE.6090701@rice.edu> <1324169806.3093.3.camel@hitfishpass-lx.corp.yahoo.com> <4EED4982.3080208@freebsd.org> <1324339762.3093.14.camel@hitfishpass-lx.corp.yahoo.com> <4EF04F3C.9010309@rice.edu> <1324387685.3093.28.camel@hitfishpass-lx.corp.yahoo.com> <4EF0D8D7.2060503@rice.edu> <4EF0EC1A.4010604@freebsd.org> <1324412718.12783.10.camel@hitfishpass-lx.corp.yahoo.com> <4EF245D1.2050503@rice.edu> <1324679157.17645.6.camel@hitfishpass-lx.corp.yahoo.com> In-Reply-To: <1324679157.17645.6.camel@hitfishpass-lx.corp.yahoo.com> Content-Type: multipart/mixed; boundary="------------060709010809090804020504" Cc: Alan Cox , "xen@freebsd.org" Subject: Re: PV i386 patch X-BeenThere: freebsd-xen@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion of the freebsd port to xen - implementation and usage List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Dec 2011 17:40:39 -0000 This is a multi-part message in MIME format. --------------060709010809090804020504 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 12/23/2011 16:25, Sean Bruno wrote: > On Wed, 2011-12-21 at 12:47 -0800, Alan Cox wrote: >> Can you please try the attached patch? I'm trying to reduce the number >> of differences between the native and Xen pmap implementations. >> >> Alan >> > > Without really looking at the output, I note that this didn't apply > cleanly against -head ... can you regenerate it? > My bad. I gave you the wrong patch. Try this instead. Alan --------------060709010809090804020504 Content-Type: text/plain; name="native_xen_merge.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="native_xen_merge.patch" SW5kZXg6IGkzODYvaTM4Ni9wbWFwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaTM4Ni9pMzg2L3Bt YXAuYwkocmV2aXNpb24gMjI4NTcwKQorKysgaTM4Ni9pMzg2L3BtYXAuYwkod29ya2luZyBj b3B5KQpAQCAtMzMwLDcgKzMzMCw3IEBAIHN0YXRpYyB2b2lkIHBtYXBfdXBkYXRlX3BkZV9p bnZhbGlkYXRlKHZtX29mZnNldF90CiAKIHN0YXRpYyB2bV9wYWdlX3QgcG1hcF9hbGxvY3B0 ZShwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsIGludCBmbGFncyk7CiAKLXN0YXRpYyB2 bV9wYWdlX3QgX3BtYXBfYWxsb2NwdGUocG1hcF90IHBtYXAsIHVuc2lnbmVkIHB0ZXBpbmRl eCwgaW50IGZsYWdzKTsKK3N0YXRpYyB2bV9wYWdlX3QgX3BtYXBfYWxsb2NwdGUocG1hcF90 IHBtYXAsIHVfaW50IHB0ZXBpbmRleCwgaW50IGZsYWdzKTsKIHN0YXRpYyBpbnQgX3BtYXBf dW53aXJlX3B0ZV9ob2xkKHBtYXBfdCBwbWFwLCB2bV9wYWdlX3QgbSwgdm1fcGFnZV90ICpm cmVlKTsKIHN0YXRpYyBwdF9lbnRyeV90ICpwbWFwX3B0ZV9xdWljayhwbWFwX3QgcG1hcCwg dm1fb2Zmc2V0X3QgdmEpOwogc3RhdGljIHZvaWQgcG1hcF9wdGVfcmVsZWFzZShwdF9lbnRy eV90ICpwdGUpOwpAQCAtMzQwLDYgKzM0MCw4IEBAIHN0YXRpYyB2b2lkICpwbWFwX3BkcHRf YWxsb2NmKHVtYV96b25lX3Qgem9uZSwgaW50CiAjZW5kaWYKIHN0YXRpYyB2b2lkIHBtYXBf c2V0X3BnKHZvaWQpOwogCitzdGF0aWMgX19pbmxpbmUgdm9pZCBwYWdlemVybyh2b2lkICpw YWdlKTsKKwogQ1RBU1NFUlQoMSA8PCBQREVTSElGVCA9PSBzaXplb2YocGRfZW50cnlfdCkp OwogQ1RBU1NFUlQoMSA8PCBQVEVTSElGVCA9PSBzaXplb2YocHRfZW50cnlfdCkpOwogCkBA IC0xMjE2LDcgKzEyMTgsNyBAQCBwbWFwX2lzX2N1cnJlbnQocG1hcF90IHBtYXApCiB7CiAK IAlyZXR1cm4gKHBtYXAgPT0ga2VybmVsX3BtYXAgfHwKLQkJKHBtYXAgPT0gdm1zcGFjZV9w bWFwKGN1cnRocmVhZC0+dGRfcHJvYy0+cF92bXNwYWNlKSAmJgorCSAgICAocG1hcCA9PSB2 bXNwYWNlX3BtYXAoY3VydGhyZWFkLT50ZF9wcm9jLT5wX3Ztc3BhY2UpICYmCiAJICAgIChw bWFwLT5wbV9wZGlyW1BURFBUREldICYgUEdfRlJBTUUpID09IChQVERwZGVbMF0gJiBQR19G UkFNRSkpKTsKIH0KIApAQCAtMTc1OSw3ICsxNzYxLDYgQEAgcG1hcF9waW5pdChwbWFwX3Qg cG1hcCkKIAlpZiAocG1hcC0+cG1fcGRpciA9PSBOVUxMKSB7CiAJCXBtYXAtPnBtX3BkaXIg PSAocGRfZW50cnlfdCAqKWttZW1fYWxsb2Nfbm9mYXVsdChrZXJuZWxfbWFwLAogCQkgICAg TkJQVEQpOwotCiAJCWlmIChwbWFwLT5wbV9wZGlyID09IE5VTEwpIHsKIAkJCVBNQVBfTE9D S19ERVNUUk9ZKHBtYXApOwogCQkJcmV0dXJuICgwKTsKQEAgLTE3OTIsMTAgKzE3OTMsOSBA QCBwbWFwX3Bpbml0KHBtYXBfdCBwbWFwKQogCiAJcG1hcF9xZW50ZXIoKHZtX29mZnNldF90 KXBtYXAtPnBtX3BkaXIsIHB0ZHBnLCBOUEdQVEQpOwogCi0JZm9yIChpID0gMDsgaSA8IE5Q R1BURDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE5QR1BURDsgaSsrKQogCQlpZiAoKHB0 ZHBnW2ldLT5mbGFncyAmIFBHX1pFUk8pID09IDApCi0JCQliemVybyhwbWFwLT5wbV9wZGly ICsgKGkgKiBOUERFUEcpLCBQQUdFX1NJWkUpOwotCX0KKwkJCXBhZ2V6ZXJvKHBtYXAtPnBt X3BkaXIgKyAoaSAqIE5QREVQRykpOwogCiAJbXR4X2xvY2tfc3BpbigmYWxscG1hcHNfbG9j ayk7CiAJTElTVF9JTlNFUlRfSEVBRCgmYWxscG1hcHMsIHBtYXAsIHBtX2xpc3QpOwpAQCAt MTgyNCw3ICsxODI0LDcgQEAgcG1hcF9waW5pdChwbWFwX3QgcG1hcCkKICAqIG1hcHBlZCBj b3JyZWN0bHkuCiAgKi8KIHN0YXRpYyB2bV9wYWdlX3QKLV9wbWFwX2FsbG9jcHRlKHBtYXBf dCBwbWFwLCB1bnNpZ25lZCBwdGVwaW5kZXgsIGludCBmbGFncykKK19wbWFwX2FsbG9jcHRl KHBtYXBfdCBwbWFwLCB1X2ludCBwdGVwaW5kZXgsIGludCBmbGFncykKIHsKIAl2bV9wYWRk cl90IHB0ZXBhOwogCXZtX3BhZ2VfdCBtOwpAQCAtMTg3Miw3ICsxODcyLDcgQEAgc3RhdGlj IHZtX3BhZ2VfdAogc3RhdGljIHZtX3BhZ2VfdAogcG1hcF9hbGxvY3B0ZShwbWFwX3QgcG1h cCwgdm1fb2Zmc2V0X3QgdmEsIGludCBmbGFncykKIHsKLQl1bnNpZ25lZCBwdGVwaW5kZXg7 CisJdV9pbnQgcHRlcGluZGV4OwogCXBkX2VudHJ5X3QgcHRlcGE7CiAJdm1fcGFnZV90IG07 CiAKQEAgLTIwMjAsNyArMjAyMCw3IEBAIHBtYXBfbGF6eWZpeChwbWFwX3QgcG1hcCkKIAlj cjMgPSB2dG9waHlzKHBtYXAtPnBtX3BkaXIpOwogCWlmIChjcjMgPT0gcmNyMygpKSB7CiAJ CWxvYWRfY3IzKFBDUFVfR0VUKGN1cnBjYiktPnBjYl9jcjMpOwotCQlDUFVfQ0xSKFBDUFVf R0VUKGNwdWlkKSwgJnBtYXAtPnBtX2FjdGl2ZSk7IAorCQlDUFVfQ0xSKFBDUFVfR0VUKGNw dWlkKSwgJnBtYXAtPnBtX2FjdGl2ZSk7CiAJfQogfQogI2VuZGlmCS8qIFNNUCAqLwpAQCAt Mjg0OSw3ICsyODQ5LDcgQEAgcG1hcF9yZW1vdmUocG1hcF90IHBtYXAsIHZtX29mZnNldF90 IHN2YSwgdm1fb2Zmc2UKIAl9CiAKIAlmb3IgKDsgc3ZhIDwgZXZhOyBzdmEgPSBwZG54dCkg ewotCQl1bnNpZ25lZCBwZGlyaW5kZXg7CisJCXVfaW50IHBkaXJpbmRleDsKIAogCQkvKgog CQkgKiBDYWxjdWxhdGUgaW5kZXggZm9yIG5leHQgcGFnZSB0YWJsZS4KQEAgLTMwNzAsNyAr MzA3MCw3IEBAIHBtYXBfcHJvdGVjdChwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3Qgc3ZhLCB2 bV9vZmZzCiAJUE1BUF9MT0NLKHBtYXApOwogCWZvciAoOyBzdmEgPCBldmE7IHN2YSA9IHBk bnh0KSB7CiAJCXB0X2VudHJ5X3Qgb2JpdHMsIHBiaXRzOwotCQl1bnNpZ25lZCBwZGlyaW5k ZXg7CisJCXVfaW50IHBkaXJpbmRleDsKIAogCQlwZG54dCA9IChzdmEgKyBOQlBEUikgJiB+ UERSTUFTSzsKIAkJaWYgKHBkbnh0IDwgc3ZhKQpAQCAtMzU5Niw3ICszNTk2LDcgQEAgcG1h cF9lbnRlcl9vYmplY3QocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHN0YXJ0LAogCQltID0g VEFJTFFfTkVYVChtLCBsaXN0cSk7CiAJfQogCXZtX3BhZ2VfdW5sb2NrX3F1ZXVlcygpOwot IAlQTUFQX1VOTE9DSyhwbWFwKTsKKwlQTUFQX1VOTE9DSyhwbWFwKTsKIH0KIAogLyoKQEAg LTM2MzgsNyArMzYzOCw3IEBAIHBtYXBfZW50ZXJfcXVpY2tfbG9ja2VkKHBtYXBfdCBwbWFw LCB2bV9vZmZzZXRfdCB2CiAJICogcmVzaWRlbnQsIHdlIGFyZSBjcmVhdGluZyBpdCBoZXJl LgogCSAqLwogCWlmICh2YSA8IFZNX01BWFVTRVJfQUREUkVTUykgewotCQl1bnNpZ25lZCBw dGVwaW5kZXg7CisJCXVfaW50IHB0ZXBpbmRleDsKIAkJcGRfZW50cnlfdCBwdGVwYTsKIAog CQkvKgpAQCAtMzkwNCw3ICszOTA0LDcgQEAgcG1hcF9jb3B5KHBtYXBfdCBkc3RfcG1hcCwg cG1hcF90IHNyY19wbWFwLCB2bV9vZmYKIAkJcHRfZW50cnlfdCAqc3JjX3B0ZSwgKmRzdF9w dGU7CiAJCXZtX3BhZ2VfdCBkc3RtcHRlLCBzcmNtcHRlOwogCQlwZF9lbnRyeV90IHNyY3B0 ZXBhZGRyOwotCQl1bnNpZ25lZCBwdGVwaW5kZXg7CisJCXVfaW50IHB0ZXBpbmRleDsKIAog CQlLQVNTRVJUKGFkZHIgPCBVUFRfTUlOX0FERFJFU1MsCiAJCSAgICAoInBtYXBfY29weTog aW52YWxpZCB0byBwbWFwX2NvcHkgcGFnZSB0YWJsZXMiKSk7CkBAIC01MjQ0LDcgKzUyNDQs NyBAQCBwbWFwX3BpZF9kdW1wKGludCBwaWQpCiAjaWYgZGVmaW5lZChERUJVRykKIAogc3Rh dGljIHZvaWQJcGFkcyhwbWFwX3QgcG0pOwotdm9pZAkJcG1hcF9wdmR1bXAodm1fb2Zmc2V0 X3QgcGEpOwordm9pZAkJcG1hcF9wdmR1bXAodm1fcGFkZHJfdCBwYSk7CiAKIC8qIHByaW50 IGFkZHJlc3Mgc3BhY2Ugb2YgcG1hcCovCiBzdGF0aWMgdm9pZApJbmRleDogaTM4Ni94ZW4v cG1hcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIGkzODYveGVuL3BtYXAuYwkocmV2aXNpb24gMjI4 NzQ2KQorKysgaTM4Ni94ZW4vcG1hcC5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1 LDggQEAgX19GQlNESUQoIiRGcmVlQlNEJCIpOwogI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4K ICNpZmRlZiBTTVAKICNpbmNsdWRlIDxzeXMvc21wLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5 cy9jcHVzZXQuaD4KICNlbmRpZgogCiAjaW5jbHVkZSA8dm0vdm0uaD4KQEAgLTIyMSw2ICsy MjMsOCBAQCBleHRlcm4gdV9pbnQzMl90IEtFUk5lbmQ7CiBwdF9lbnRyeV90IHBnX254Owog I2VuZGlmCiAKK3N0YXRpYyBTWVNDVExfTk9ERShfdm0sIE9JRF9BVVRPLCBwbWFwLCBDVExG TEFHX1JELCAwLCAiVk0vcG1hcCBwYXJhbWV0ZXJzIik7CisKIHN0YXRpYyBpbnQgcGF0X3dv cmtzOwkJCS8qIElzIHBhZ2UgYXR0cmlidXRlIHRhYmxlIHNhbmU/ICovCiAKIC8qCkBAIC0y NzMsMTkgKzI3Nyw2IEBAIFNZU0NUTF9JTlQoX2RlYnVnLCBPSURfQVVUTywgUE1BUDF1bmNo YW5nZWQsIENUTEZMCiAJICAgIk51bWJlciBvZiB0aW1lcyBwbWFwX3B0ZV9xdWljayBkaWRu J3QgY2hhbmdlIFBNQVAxIik7CiBzdGF0aWMgc3RydWN0IG10eCBQTUFQMm11dGV4OwogCi1z dGF0aWMgU1lTQ1RMX05PREUoX3ZtLCBPSURfQVVUTywgcG1hcCwgQ1RMRkxBR19SRCwgMCwg IlZNL3BtYXAgcGFyYW1ldGVycyIpOwotCi1TWVNDVExfSU5UKF92bV9wbWFwLCBPSURfQVVU TywgcHZfZW50cnlfbWF4LCBDVExGTEFHX1JELCAmcHZfZW50cnlfbWF4LCAwLAotCSJNYXgg bnVtYmVyIG9mIFBWIGVudHJpZXMiKTsKLVNZU0NUTF9JTlQoX3ZtX3BtYXAsIE9JRF9BVVRP LCBzaHBncGVycHJvYywgQ1RMRkxBR19SRCwgJnNocGdwZXJwcm9jLCAwLAotCSJQYWdlIHNo YXJlIGZhY3RvciBwZXIgcHJvYyIpOwotc3RhdGljIFNZU0NUTF9OT0RFKF92bV9wbWFwLCBP SURfQVVUTywgcGRlLCBDVExGTEFHX1JELCAwLAotICAgICIyLzRNQiBwYWdlIG1hcHBpbmcg Y291bnRlcnMiKTsKLQotc3RhdGljIHVfbG9uZyBwbWFwX3BkZV9tYXBwaW5nczsKLVNZU0NU TF9VTE9ORyhfdm1fcG1hcF9wZGUsIE9JRF9BVVRPLCBtYXBwaW5ncywgQ1RMRkxBR19SRCwK LSAgICAmcG1hcF9wZGVfbWFwcGluZ3MsIDAsICIyLzRNQiBwYWdlIG1hcHBpbmdzIik7Ci0K IHN0YXRpYyB2b2lkCWZyZWVfcHZfZW50cnkocG1hcF90IHBtYXAsIHB2X2VudHJ5X3QgcHYp Owogc3RhdGljIHB2X2VudHJ5X3QgZ2V0X3B2X2VudHJ5KHBtYXBfdCBsb2NrZWRfcG1hcCwg aW50IHRyeSk7CiBzdGF0aWMgdm9pZAlwbWFwX3B2aF9mcmVlKHN0cnVjdCBtZF9wYWdlICpw dmgsIHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSk7CkBAIC0yOTQsNiArMjg1LDggQEAg c3RhdGljIHB2X2VudHJ5X3QgcG1hcF9wdmhfcmVtb3ZlKHN0cnVjdCBtZF9wYWdlICoKIAog c3RhdGljIHZtX3BhZ2VfdCBwbWFwX2VudGVyX3F1aWNrX2xvY2tlZChtdWx0aWNhbGxfZW50 cnlfdCAqKm1jbCwgaW50ICpjb3VudCwgcG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhLAog ICAgIHZtX3BhZ2VfdCBtLCB2bV9wcm90X3QgcHJvdCwgdm1fcGFnZV90IG1wdGUpOworc3Rh dGljIHZvaWQgcG1hcF9mbHVzaF9wYWdlKHZtX3BhZ2VfdCBtKTsKK3N0YXRpYyB2b2lkIHBt YXBfa2VudGVyX2F0dHIodm1fb2Zmc2V0X3QgdmEsIHZtX3BhZGRyX3QgcGEsIGludCBtb2Rl KTsKIHN0YXRpYyBpbnQgcG1hcF9yZW1vdmVfcHRlKHBtYXBfdCBwbWFwLCBwdF9lbnRyeV90 ICpwdHEsIHZtX29mZnNldF90IHN2YSwKICAgICB2bV9wYWdlX3QgKmZyZWUpOwogc3RhdGlj IHZvaWQgcG1hcF9yZW1vdmVfcGFnZShzdHJ1Y3QgcG1hcCAqcG1hcCwgdm1fb2Zmc2V0X3Qg dmEsCkBAIC0zMDUsMTQgKzI5OCwxMiBAQCBzdGF0aWMgYm9vbGVhbl90IHBtYXBfdHJ5X2lu c2VydF9wdl9lbnRyeShwbWFwX3QgcAogCiBzdGF0aWMgdm1fcGFnZV90IHBtYXBfYWxsb2Nw dGUocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhLCBpbnQgZmxhZ3MpOwogCi1zdGF0aWMg dm1fcGFnZV90IF9wbWFwX2FsbG9jcHRlKHBtYXBfdCBwbWFwLCB1bnNpZ25lZCBwdGVwaW5k ZXgsIGludCBmbGFncyk7CitzdGF0aWMgdm1fcGFnZV90IF9wbWFwX2FsbG9jcHRlKHBtYXBf dCBwbWFwLCB1X2ludCBwdGVwaW5kZXgsIGludCBmbGFncyk7CiBzdGF0aWMgaW50IF9wbWFw X3Vud2lyZV9wdGVfaG9sZChwbWFwX3QgcG1hcCwgdm1fcGFnZV90IG0sIHZtX3BhZ2VfdCAq ZnJlZSk7CiBzdGF0aWMgcHRfZW50cnlfdCAqcG1hcF9wdGVfcXVpY2socG1hcF90IHBtYXAs IHZtX29mZnNldF90IHZhKTsKIHN0YXRpYyB2b2lkIHBtYXBfcHRlX3JlbGVhc2UocHRfZW50 cnlfdCAqcHRlKTsKIHN0YXRpYyBpbnQgcG1hcF91bnVzZV9wdChwbWFwX3QsIHZtX29mZnNl dF90LCB2bV9wYWdlX3QgKik7Ci1zdGF0aWMgdm1fb2Zmc2V0X3QgcG1hcF9rbWVtX2Nob29z ZSh2bV9vZmZzZXRfdCBhZGRyKTsKIHN0YXRpYyBib29sZWFuX3QgcG1hcF9pc19wcmVmYXVs dGFibGVfbG9ja2VkKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCBhZGRyKTsKLXN0YXRpYyB2 b2lkIHBtYXBfa2VudGVyX2F0dHIodm1fb2Zmc2V0X3QgdmEsIHZtX3BhZGRyX3QgcGEsIGlu dCBtb2RlKTsKIAogc3RhdGljIF9faW5saW5lIHZvaWQgcGFnZXplcm8odm9pZCAqcGFnZSk7 CiAKQEAgLTMyNiw4ICszMTcsNiBAQCBDVEFTU0VSVCgxIDw8IFBURVNISUZUID09IHNpemVv ZihwdF9lbnRyeV90KSk7CiAgKi8KIENUQVNTRVJUKEtFUk5CQVNFICUgKDEgPDwgMjQpID09 IDApOwogCi0KLQogdm9pZCAKIHBkX3NldChzdHJ1Y3QgcG1hcCAqcG1hcCwgaW50IHB0ZXBp bmRleCwgdm1fcGFkZHJfdCB2YWwsIGludCB0eXBlKQogewpAQCAtMzU5LDI0ICszNDgsNiBA QCBwZF9zZXQoc3RydWN0IHBtYXAgKnBtYXAsIGludCBwdGVwaW5kZXgsIHZtX3BhZGRyXwog fQogCiAvKgotICogTW92ZSB0aGUga2VybmVsIHZpcnR1YWwgZnJlZSBwb2ludGVyIHRvIHRo ZSBuZXh0Ci0gKiA0TUIuICBUaGlzIGlzIHVzZWQgdG8gaGVscCBpbXByb3ZlIHBlcmZvcm1h bmNlCi0gKiBieSB1c2luZyBhIGxhcmdlICg0TUIpIHBhZ2UgZm9yIG11Y2ggb2YgdGhlIGtl cm5lbAotICogKC50ZXh0LCAuZGF0YSwgLmJzcykKLSAqLwotc3RhdGljIHZtX29mZnNldF90 Ci1wbWFwX2ttZW1fY2hvb3NlKHZtX29mZnNldF90IGFkZHIpCi17Ci0Jdm1fb2Zmc2V0X3Qg bmV3YWRkciA9IGFkZHI7Ci0KLSNpZm5kZWYgRElTQUJMRV9QU0UKLQlpZiAoY3B1X2ZlYXR1 cmUgJiBDUFVJRF9QU0UpCi0JCW5ld2FkZHIgPSAoYWRkciArIFBEUk1BU0spICYgflBEUk1B U0s7Ci0jZW5kaWYKLQlyZXR1cm4gbmV3YWRkcjsKLX0KLQotLyoKICAqCUJvb3RzdHJhcCB0 aGUgc3lzdGVtIGVub3VnaCB0byBydW4gd2l0aCB2aXJ0dWFsIG1lbW9yeS4KICAqCiAgKglP biB0aGUgaTM4NiB0aGlzIGlzIGNhbGxlZCBhZnRlciBtYXBwaW5nIGhhcyBhbHJlYWR5IGJl ZW4gZW5hYmxlZApAQCAtMzk1LDE1ICszNjYsMTMgQEAgcG1hcF9ib290c3RyYXAodm1fcGFk ZHJfdCBmaXJzdGFkZHIpCiAJaW50IGk7CiAKIAkvKgotCSAqIFhYWCBUaGUgY2FsY3VsYXRp b24gb2YgdmlydHVhbF9hdmFpbCBpcyB3cm9uZy4gSXQncyBOS1BUKlBBR0VfU0laRSB0b28K LQkgKiBsYXJnZS4gSXQgc2hvdWxkIGluc3RlYWQgYmUgY29ycmVjdGx5IGNhbGN1bGF0ZWQg aW4gbG9jb3JlLnMgYW5kCi0JICogbm90IGJhc2VkIG9uICdmaXJzdCcgKHdoaWNoIGlzIGEg cGh5c2ljYWwgYWRkcmVzcywgbm90IGEgdmlydHVhbAotCSAqIGFkZHJlc3MsIGZvciB0aGUg c3RhcnQgb2YgdW51c2VkIHBoeXNpY2FsIG1lbW9yeSkuIFRoZSBrZXJuZWwKLQkgKiBwYWdl IHRhYmxlcyBhcmUgTk9UIGRvdWJsZSBtYXBwZWQgYW5kIHRodXMgc2hvdWxkIG5vdCBiZSBp bmNsdWRlZAotCSAqIGluIHRoaXMgY2FsY3VsYXRpb24uCisJICogSW5pdGlhbGl6ZSB0aGUg Zmlyc3QgYXZhaWxhYmxlIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MuICBIb3dldmVyLAorCSAq IHVzaW5nICJmaXJzdGFkZHIiIG1heSB3YXN0ZSBhIGZldyBwYWdlcyBvZiB0aGUga2VybmVs IHZpcnR1YWwKKwkgKiBhZGRyZXNzIHNwYWNlLCBiZWNhdXNlIGxvY29yZSBtYXkgbm90IGhh dmUgbWFwcGVkIGV2ZXJ5IHBoeXNpY2FsCisJICogcGFnZSB0aGF0IGl0IGFsbG9jYXRlZC4g IFByZWZlcmFibHksIGxvY29yZSB3b3VsZCBwcm92aWRlIGEgZmlyc3QKKwkgKiB1bnVzZWQg dmlydHVhbCBhZGRyZXNzIGluIGFkZGl0aW9uIHRvICJmaXJzdGFkZHIiLgogCSAqLwogCXZp cnR1YWxfYXZhaWwgPSAodm1fb2Zmc2V0X3QpIEtFUk5CQVNFICsgZmlyc3RhZGRyOwotCXZp cnR1YWxfYXZhaWwgPSBwbWFwX2ttZW1fY2hvb3NlKHZpcnR1YWxfYXZhaWwpOwogCiAJdmly dHVhbF9lbmQgPSBWTV9NQVhfS0VSTkVMX0FERFJFU1M7CiAKQEAgLTQ2OCw4ICs0MzcsOCBA QCBwbWFwX2Jvb3RzdHJhcCh2bV9wYWRkcl90IGZpcnN0YWRkcikKIAkvKgogCSAqIHB0ZW1h cCBpcyB1c2VkIGZvciBwbWFwX3B0ZV9xdWljawogCSAqLwotCVNZU01BUChwdF9lbnRyeV90 ICosIFBNQVAxLCBQQUREUjEsIDEpOwotCVNZU01BUChwdF9lbnRyeV90ICosIFBNQVAyLCBQ QUREUjIsIDEpOworCVNZU01BUChwdF9lbnRyeV90ICosIFBNQVAxLCBQQUREUjEsIDEpCisJ U1lTTUFQKHB0X2VudHJ5X3QgKiwgUE1BUDIsIFBBRERSMiwgMSkKIAogCW10eF9pbml0KCZQ TUFQMm11dGV4LCAiUE1BUDIiLCBOVUxMLCBNVFhfREVGKTsKIApAQCAtNjUwLDYgKzYxOSwx OCBAQCBwbWFwX2luaXQodm9pZCkKIH0KIAogCitTWVNDVExfSU5UKF92bV9wbWFwLCBPSURf QVVUTywgcHZfZW50cnlfbWF4LCBDVExGTEFHX1JELCAmcHZfZW50cnlfbWF4LCAwLAorCSJN YXggbnVtYmVyIG9mIFBWIGVudHJpZXMiKTsKK1NZU0NUTF9JTlQoX3ZtX3BtYXAsIE9JRF9B VVRPLCBzaHBncGVycHJvYywgQ1RMRkxBR19SRCwgJnNocGdwZXJwcm9jLCAwLAorCSJQYWdl IHNoYXJlIGZhY3RvciBwZXIgcHJvYyIpOworCitzdGF0aWMgU1lTQ1RMX05PREUoX3ZtX3Bt YXAsIE9JRF9BVVRPLCBwZGUsIENUTEZMQUdfUkQsIDAsCisgICAgIjIvNE1CIHBhZ2UgbWFw cGluZyBjb3VudGVycyIpOworCitzdGF0aWMgdV9sb25nIHBtYXBfcGRlX21hcHBpbmdzOwor U1lTQ1RMX1VMT05HKF92bV9wbWFwX3BkZSwgT0lEX0FVVE8sIG1hcHBpbmdzLCBDVExGTEFH X1JELAorICAgICZwbWFwX3BkZV9tYXBwaW5ncywgMCwgIjIvNE1CIHBhZ2UgbWFwcGluZ3Mi KTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgogICogTG93IGxldmVsIGhlbHBlciByb3V0aW5lcy4uLi4uCiAgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtODk2LDYgKzg3 Nyw4IEBAIHBtYXBfaW52YWxpZGF0ZV9jYWNoZSh2b2lkKQogfQogI2VuZGlmIC8qICFTTVAg Ki8KIAorI2RlZmluZQlQTUFQX0NMRkxVU0hfVEhSRVNIT0xECSgyICogMTAyNCAqIDEwMjQp CisKIHZvaWQKIHBtYXBfaW52YWxpZGF0ZV9jYWNoZV9yYW5nZSh2bV9vZmZzZXRfdCBzdmEs IHZtX29mZnNldF90IGV2YSkKIHsKQEAgLTkwNyw3ICs4OTAsOCBAQCBwbWFwX2ludmFsaWRh dGVfY2FjaGVfcmFuZ2Uodm1fb2Zmc2V0X3Qgc3ZhLCB2bV9vZgogCiAJaWYgKGNwdV9mZWF0 dXJlICYgQ1BVSURfU1MpCiAJCTsgLyogSWYgIlNlbGYgU25vb3AiIGlzIHN1cHBvcnRlZCwg ZG8gbm90aGluZy4gKi8KLQllbHNlIGlmIChjcHVfZmVhdHVyZSAmIENQVUlEX0NMRlNIKSB7 CisJZWxzZSBpZiAoKGNwdV9mZWF0dXJlICYgQ1BVSURfQ0xGU0gpICE9IDAgJiYKKwkgICAg ZXZhIC0gc3ZhIDwgUE1BUF9DTEZMVVNIX1RIUkVTSE9MRCkgewogCiAJCS8qCiAJCSAqIE90 aGVyd2lzZSwgZG8gcGVyLWNhY2hlIGxpbmUgZmx1c2guICBVc2UgdGhlIG1mZW5jZQpAQCAt OTI0LDEyICs5MDgsMjcgQEAgcG1hcF9pbnZhbGlkYXRlX2NhY2hlX3JhbmdlKHZtX29mZnNl dF90IHN2YSwgdm1fb2YKIAogCQkvKgogCQkgKiBObyB0YXJnZXRlZCBjYWNoZSBmbHVzaCBt ZXRob2RzIGFyZSBzdXBwb3J0ZWQgYnkgQ1BVLAotCQkgKiBnbG9iYWxseSBpbnZhbGlkYXRl IGNhY2hlIGFzIGEgbGFzdCByZXNvcnQuCisJCSAqIG9yIHRoZSBzdXBwbGllZCByYW5nZSBp cyBiaWdnZXIgdGhhbiAyTUIuCisJCSAqIEdsb2JhbGx5IGludmFsaWRhdGUgY2FjaGUuCiAJ CSAqLwogCQlwbWFwX2ludmFsaWRhdGVfY2FjaGUoKTsKIAl9CiB9CiAKK3ZvaWQKK3BtYXBf aW52YWxpZGF0ZV9jYWNoZV9wYWdlcyh2bV9wYWdlX3QgKnBhZ2VzLCBpbnQgY291bnQpCit7 CisJaW50IGk7CisKKwlpZiAoY291bnQgPj0gUE1BUF9DTEZMVVNIX1RIUkVTSE9MRCAvIFBB R0VfU0laRSB8fAorCSAgICAoY3B1X2ZlYXR1cmUgJiBDUFVJRF9DTEZTSCkgPT0gMCkgewor CQlwbWFwX2ludmFsaWRhdGVfY2FjaGUoKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBp IDwgY291bnQ7IGkrKykKKwkJCXBtYXBfZmx1c2hfcGFnZShwYWdlc1tpXSk7CisJfQorfQor CiAvKgogICogQXJlIHdlIGN1cnJlbnQgYWRkcmVzcyBzcGFjZSBvciBrZXJuZWw/ICBOLkIu IFdlIHJldHVybiBGQUxTRSB3aGVuCiAgKiBhIHBtYXAncyBwYWdlIHRhYmxlIGlzIGluIHVz ZSBiZWNhdXNlIGEga2VybmVsIHRocmVhZCBpcyBib3Jyb3dpbmcKQEAgLTk0Miw3ICs5NDEs NyBAQCBwbWFwX2lzX2N1cnJlbnQocG1hcF90IHBtYXApCiAKIAlyZXR1cm4gKHBtYXAgPT0g a2VybmVsX3BtYXAgfHwKIAkgICAgKHBtYXAgPT0gdm1zcGFjZV9wbWFwKGN1cnRocmVhZC0+ dGRfcHJvYy0+cF92bXNwYWNlKSAmJgotCQkocG1hcC0+cG1fcGRpcltQVERQVERJXSAmIFBH X0ZSQU1FKSA9PSAoUFREcGRlWzBdICYgUEdfRlJBTUUpKSk7CisJICAgIChwbWFwLT5wbV9w ZGlyW1BURFBUREldICYgUEdfRlJBTUUpID09IChQVERwZGVbMF0gJiBQR19GUkFNRSkpKTsK IH0KIAogLyoKQEAgLTk3MSwxMCArOTcwLDkgQEAgcG1hcF9wdGUocG1hcF90IHBtYXAsIHZt X29mZnNldF90IHZhKQogCQkJQ1RSMyhLVFJfUE1BUCwgInBtYXBfcHRlOiBwbWFwPSVwIHZh PTB4JXggbmV3cHRlPTB4JTA4eCIsCiAJCQkgICAgcG1hcCwgdmEsICgqUE1BUDIgJiAweGZm ZmZmZmZmKSk7CiAJCX0KLQkJCiAJCXJldHVybiAoUEFERFIyICsgKGkzODZfYnRvcCh2YSkg JiAoTlBURVBHIC0gMSkpKTsKIAl9Ci0JcmV0dXJuICgwKTsKKwlyZXR1cm4gKE5VTEwpOwog fQogCiAvKgpAQCAtMTA2NSw3ICsxMDYzLDcgQEAgcG1hcF9leHRyYWN0KHBtYXBfdCBwbWFw LCB2bV9vZmZzZXRfdCB2YSkKIAlwdF9lbnRyeV90ICpwdGU7CiAJcGRfZW50cnlfdCBwZGU7 CiAJcHRfZW50cnlfdCBwdGV2YWw7Ci0JCisKIAlydHZhbCA9IDA7CiAJUE1BUF9MT0NLKHBt YXApOwogCXBkZSA9IHBtYXAtPnBtX3BkaXJbdmEgPj4gUERSU0hJRlRdOwpAQCAtMTE3MCwx MCArMTE2OCwxMyBAQCByZXRyeToKIC8qCiAgKiBBZGQgYSB3aXJlZCBwYWdlIHRvIHRoZSBr dmEuCiAgKiBOb3RlOiBub3QgU01QIGNvaGVyZW50LgorICoKKyAqIFRoaXMgZnVuY3Rpb24g bWF5IGJlIHVzZWQgYmVmb3JlIHBtYXBfYm9vdHN0cmFwKCkgaXMgY2FsbGVkLgogICovCiB2 b2lkIAogcG1hcF9rZW50ZXIodm1fb2Zmc2V0X3QgdmEsIHZtX3BhZGRyX3QgcGEpCiB7CisK IAlQVF9TRVRfTUEodmEsIHhwbWFwX3B0b20ocGEpfCBQR19SVyB8IFBHX1YgfCBwZ2VmbGFn KTsKIH0KIApAQCAtMTE4NiwxNiArMTE4NywxOCBAQCBwbWFwX2tlbnRlcl9tYSh2bV9vZmZz ZXRfdCB2YSwgdm1fcGFkZHJfdCBtYSkKIAlwdGVfc3RvcmVfbWEocHRlLCBtYSB8IFBHX1JX IHwgUEdfViB8IHBnZWZsYWcpOwogfQogCi0KLXN0YXRpYyBfX2lubGluZSB2b2lkIAorc3Rh dGljIF9faW5saW5lIHZvaWQKIHBtYXBfa2VudGVyX2F0dHIodm1fb2Zmc2V0X3QgdmEsIHZt X3BhZGRyX3QgcGEsIGludCBtb2RlKQogeworCiAJUFRfU0VUX01BKHZhLCBwYSB8IFBHX1JX IHwgUEdfViB8IHBnZWZsYWcgfCBwbWFwX2NhY2hlX2JpdHMobW9kZSwgMCkpOwogfQogCiAv KgogICogUmVtb3ZlIGEgcGFnZSBmcm9tIHRoZSBrZXJuZWwgcGFnZXRhYmxlcy4KICAqIE5v dGU6IG5vdCBTTVAgY29oZXJlbnQuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgdXNl ZCBiZWZvcmUgcG1hcF9ib290c3RyYXAoKSBpcyBjYWxsZWQuCiAgKi8KIFBNQVBfSU5MSU5F IHZvaWQKIHBtYXBfa3JlbW92ZSh2bV9vZmZzZXRfdCB2YSkKQEAgLTEyOTIsNyArMTI5NSw2 IEBAIHBtYXBfcWVudGVyKHZtX29mZnNldF90IHN2YSwgdm1fcGFnZV90ICptYSwgaW50IGNv CiAjZW5kaWYJCiB9CiAKLQogLyoKICAqIFRoaXMgcm91dGluZSB0ZWFycyBvdXQgcGFnZSBt YXBwaW5ncyBmcm9tIHRoZQogICoga2VybmVsIC0tIGl0IGlzIG1lYW50IG9ubHkgZm9yIHRl bXBvcmFyeSBtYXBwaW5ncy4KQEAgLTEzNDIsOSArMTM0NCw5IEBAIHBtYXBfdW53aXJlX3B0 ZV9ob2xkKHBtYXBfdCBwbWFwLCB2bV9wYWdlX3QgbSwgdm1fCiAKIAktLW0tPndpcmVfY291 bnQ7CiAJaWYgKG0tPndpcmVfY291bnQgPT0gMCkKLQkJcmV0dXJuIF9wbWFwX3Vud2lyZV9w dGVfaG9sZChwbWFwLCBtLCBmcmVlKTsKKwkJcmV0dXJuIChfcG1hcF91bndpcmVfcHRlX2hv bGQocG1hcCwgbSwgZnJlZSkpOwogCWVsc2UKLQkJcmV0dXJuIDA7CisJCXJldHVybiAoMCk7 CiB9CiAKIHN0YXRpYyBpbnQgCkBAIC0xMzg1LDcgKzEzODcsNyBAQCBfcG1hcF91bndpcmVf cHRlX2hvbGQocG1hcF90IHBtYXAsIHZtX3BhZ2VfdCBtLCB2bQogCW0tPnJpZ2h0ID0gKmZy ZWU7CiAJKmZyZWUgPSBtOwogCi0JcmV0dXJuIDE7CisJcmV0dXJuICgxKTsKIH0KIAogLyoK QEAgLTEzOTksMTcgKzE0MDEsMjUgQEAgcG1hcF91bnVzZV9wdChwbWFwX3QgcG1hcCwgdm1f b2Zmc2V0X3QgdmEsIHZtX3BhZ2UKIAl2bV9wYWdlX3QgbXB0ZTsKIAogCWlmICh2YSA+PSBW TV9NQVhVU0VSX0FERFJFU1MpCi0JCXJldHVybiAwOworCQlyZXR1cm4gKDApOwogCXB0ZXBk ZSA9IFBUX0dFVChwbWFwX3BkZShwbWFwLCB2YSkpOwogCW1wdGUgPSBQSFlTX1RPX1ZNX1BB R0UocHRlcGRlICYgUEdfRlJBTUUpOwotCXJldHVybiBwbWFwX3Vud2lyZV9wdGVfaG9sZChw bWFwLCBtcHRlLCBmcmVlKTsKKwlyZXR1cm4gKHBtYXBfdW53aXJlX3B0ZV9ob2xkKHBtYXAs IG1wdGUsIGZyZWUpKTsKIH0KIAorLyoKKyAqIEluaXRpYWxpemUgdGhlIHBtYXAgZm9yIHRo ZSBzd2FwcGVyIHByb2Nlc3MuCisgKi8KIHZvaWQKIHBtYXBfcGluaXQwKHBtYXBfdCBwbWFw KQogewogCiAJUE1BUF9MT0NLX0lOSVQocG1hcCk7CisJLyoKKwkgKiBTaW5jZSB0aGUgcGFn ZSB0YWJsZSBkaXJlY3RvcnkgaXMgc2hhcmVkIHdpdGggdGhlIGtlcm5lbCBwbWFwLAorCSAq IHdoaWNoIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gdGhlIGxpc3QgImFsbHBtYXBzIiwgdGhp cyBwbWFwIGRvZXMKKwkgKiBub3QgbmVlZCB0byBiZSBpbnNlcnRlZCBpbnRvIHRoYXQgbGlz dC4KKwkgKi8KIAlwbWFwLT5wbV9wZGlyID0gKHBkX2VudHJ5X3QgKikoS0VSTkJBU0UgKyAo dm1fb2Zmc2V0X3QpSWRsZVBURCk7CiAjaWZkZWYgUEFFCiAJcG1hcC0+cG1fcGRwdCA9IChw ZHB0X2VudHJ5X3QgKikoS0VSTkJBU0UgKyAodm1fb2Zmc2V0X3QpSWRsZVBEUFQpOwpAQCAt MTQxOCw5ICsxNDI4LDYgQEAgcG1hcF9waW5pdDAocG1hcF90IHBtYXApCiAJUENQVV9TRVQo Y3VycG1hcCwgcG1hcCk7CiAJVEFJTFFfSU5JVCgmcG1hcC0+cG1fcHZjaHVuayk7CiAJYnpl cm8oJnBtYXAtPnBtX3N0YXRzLCBzaXplb2YgcG1hcC0+cG1fc3RhdHMpOwotCW10eF9sb2Nr X3NwaW4oJmFsbHBtYXBzX2xvY2spOwotCUxJU1RfSU5TRVJUX0hFQUQoJmFsbHBtYXBzLCBw bWFwLCBwbV9saXN0KTsKLQltdHhfdW5sb2NrX3NwaW4oJmFsbHBtYXBzX2xvY2spOwogfQog CiAvKgpAQCAtMTQ3MSwxOCArMTQ3OCwxOSBAQCBwbWFwX3Bpbml0KHBtYXBfdCBwbWFwKQog CQkJcHRkcGdbaSsrXSA9IG07CiAJCX0KIAl9CisKIAlwbWFwX3FlbnRlcigodm1fb2Zmc2V0 X3QpcG1hcC0+cG1fcGRpciwgcHRkcGcsIE5QR1BURCk7Ci0JZm9yIChpID0gMDsgaSA8IE5Q R1BURDsgaSsrKSB7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlBHUFREOyBpKyspCiAJCWlmICgo cHRkcGdbaV0tPmZsYWdzICYgUEdfWkVSTykgPT0gMCkKLQkJCXBhZ2V6ZXJvKCZwbWFwLT5w bV9wZGlyW2kqTlBURVBHXSk7Ci0JfQorCQkJcGFnZXplcm8ocG1hcC0+cG1fcGRpciArIChp ICogTlBERVBHKSk7CiAKIAltdHhfbG9ja19zcGluKCZhbGxwbWFwc19sb2NrKTsKIAlMSVNU X0lOU0VSVF9IRUFEKCZhbGxwbWFwcywgcG1hcCwgcG1fbGlzdCk7CisJLyogQ29weSB0aGUg a2VybmVsIHBhZ2UgdGFibGUgZGlyZWN0b3J5IGVudHJpZXMuICovCisJYmNvcHkoUFREICsg S1BUREksIHBtYXAtPnBtX3BkaXIgKyBLUFRESSwgbmtwdCAqIHNpemVvZihwZF9lbnRyeV90 KSk7CiAJbXR4X3VubG9ja19zcGluKCZhbGxwbWFwc19sb2NrKTsKLQkvKiBXaXJlIGluIGtl cm5lbCBnbG9iYWwgYWRkcmVzcyBlbnRyaWVzLiAqLwogCi0JYmNvcHkoUFREICsgS1BUREks IHBtYXAtPnBtX3BkaXIgKyBLUFRESSwgbmtwdCAqIHNpemVvZihwZF9lbnRyeV90KSk7CiAj aWZkZWYgUEFFCiAJcG1hcF9xZW50ZXIoKHZtX29mZnNldF90KXBtYXAtPnBtX3BkcHQsICZw dGRwZ1tOUEdQVERdLCAxKTsKIAlpZiAoKHB0ZHBnW05QR1BURF0tPmZsYWdzICYgUEdfWkVS TykgPT0gMCkKQEAgLTE1MzQsNyArMTU0Miw3IEBAIHBtYXBfcGluaXQocG1hcF90IHBtYXAp CiAgKiBtYXBwZWQgY29ycmVjdGx5LgogICovCiBzdGF0aWMgdm1fcGFnZV90Ci1fcG1hcF9h bGxvY3B0ZShwbWFwX3QgcG1hcCwgdW5zaWduZWQgaW50IHB0ZXBpbmRleCwgaW50IGZsYWdz KQorX3BtYXBfYWxsb2NwdGUocG1hcF90IHBtYXAsIHVfaW50IHB0ZXBpbmRleCwgaW50IGZs YWdzKQogewogCXZtX3BhZGRyX3QgcHRlbWE7CiAJdm1fcGFnZV90IG07CkBAIC0xNTY5LDYg KzE1NzcsNyBAQCBzdGF0aWMgdm1fcGFnZV90CiAJICogTWFwIHRoZSBwYWdldGFibGUgcGFn ZSBpbnRvIHRoZSBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UsIGlmCiAJICogaXQgaXNuJ3QgYWxy ZWFkeSB0aGVyZS4KIAkgKi8KKwogCXBtYXAtPnBtX3N0YXRzLnJlc2lkZW50X2NvdW50Kys7 CiAKIAlwdGVtYSA9IFZNX1BBR0VfVE9fTUFDSChtKTsKQEAgLTE1ODQsNyArMTU5Myw3IEBA IHN0YXRpYyB2bV9wYWdlX3QKIHN0YXRpYyB2bV9wYWdlX3QKIHBtYXBfYWxsb2NwdGUocG1h cF90IHBtYXAsIHZtX29mZnNldF90IHZhLCBpbnQgZmxhZ3MpCiB7Ci0JdW5zaWduZWQgcHRl cGluZGV4OworCXVfaW50IHB0ZXBpbmRleDsKIAlwZF9lbnRyeV90IHB0ZW1hOwogCXZtX3Bh Z2VfdCBtOwogCkBAIC0xNzYyLDYgKzE3NzEsNyBAQCBwbWFwX3JlbGVhc2UocG1hcF90IHBt YXApCiAjZWxzZQogCWludCBucGdwdGQgPSBOUEdQVEQ7CiAjZW5kaWYKKwogCUtBU1NFUlQo cG1hcC0+cG1fc3RhdHMucmVzaWRlbnRfY291bnQgPT0gMCwKIAkgICAgKCJwbWFwX3JlbGVh c2U6IHBtYXAgcmVzaWRlbnQgY291bnQgJWxkICE9IDAiLAogCSAgICBwbWFwLT5wbV9zdGF0 cy5yZXNpZGVudF9jb3VudCkpOwpAQCAtMTgxNyw3ICsxODI3LDcgQEAga3ZtX3NpemUoU1lT Q1RMX0hBTkRMRVJfQVJHUykKIHsKIAl1bnNpZ25lZCBsb25nIGtzaXplID0gVk1fTUFYX0tF Uk5FTF9BRERSRVNTIC0gS0VSTkJBU0U7CiAKLQlyZXR1cm4gc3lzY3RsX2hhbmRsZV9sb25n KG9pZHAsICZrc2l6ZSwgMCwgcmVxKTsKKwlyZXR1cm4gKHN5c2N0bF9oYW5kbGVfbG9uZyhv aWRwLCAma3NpemUsIDAsIHJlcSkpOwogfQogU1lTQ1RMX1BST0MoX3ZtLCBPSURfQVVUTywg a3ZtX3NpemUsIENUTFRZUEVfTE9OR3xDVExGTEFHX1JELCAKICAgICAwLCAwLCBrdm1fc2l6 ZSwgIklVIiwgIlNpemUgb2YgS1ZNIik7CkBAIC0xODI3LDcgKzE4MzcsNyBAQCBrdm1fZnJl ZShTWVNDVExfSEFORExFUl9BUkdTKQogewogCXVuc2lnbmVkIGxvbmcga2ZyZWUgPSBWTV9N QVhfS0VSTkVMX0FERFJFU1MgLSBrZXJuZWxfdm1fZW5kOwogCi0JcmV0dXJuIHN5c2N0bF9o YW5kbGVfbG9uZyhvaWRwLCAma2ZyZWUsIDAsIHJlcSk7CisJcmV0dXJuIChzeXNjdGxfaGFu ZGxlX2xvbmcob2lkcCwgJmtmcmVlLCAwLCByZXEpKTsKIH0KIFNZU0NUTF9QUk9DKF92bSwg T0lEX0FVVE8sIGt2bV9mcmVlLCBDVExUWVBFX0xPTkd8Q1RMRkxBR19SRCwgCiAgICAgMCwg MCwga3ZtX2ZyZWUsICJJVSIsICJBbW91bnQgb2YgS1ZNIGZyZWUiKTsKQEAgLTE4NTYsMTIg KzE4NjYsMTIgQEAgcG1hcF9ncm93a2VybmVsKHZtX29mZnNldF90IGFkZHIpCiAJCQl9CiAJ CX0KIAl9Ci0JYWRkciA9IHJvdW5kdXAyKGFkZHIsIFBBR0VfU0laRSAqIE5QVEVQRyk7CisJ YWRkciA9IHJvdW5kdXAyKGFkZHIsIE5CUERSKTsKIAlpZiAoYWRkciAtIDEgPj0ga2VybmVs X21hcC0+bWF4X29mZnNldCkKIAkJYWRkciA9IGtlcm5lbF9tYXAtPm1heF9vZmZzZXQ7CiAJ d2hpbGUgKGtlcm5lbF92bV9lbmQgPCBhZGRyKSB7CiAJCWlmIChwZGlyX3BkZShQVEQsIGtl cm5lbF92bV9lbmQpKSB7Ci0JCQlrZXJuZWxfdm1fZW5kID0gKGtlcm5lbF92bV9lbmQgKyBQ QUdFX1NJWkUgKiBOUFRFUEcpICYgfihQQUdFX1NJWkUgKiBOUFRFUEcgLSAxKTsKKwkJCWtl cm5lbF92bV9lbmQgPSAoa2VybmVsX3ZtX2VuZCArIE5CUERSKSAmIH5QRFJNQVNLOwogCQkJ aWYgKGtlcm5lbF92bV9lbmQgLSAxID49IGtlcm5lbF9tYXAtPm1heF9vZmZzZXQpIHsKIAkJ CQlrZXJuZWxfdm1fZW5kID0ga2VybmVsX21hcC0+bWF4X29mZnNldDsKIAkJCQlicmVhazsK QEAgLTE4NjksMTcgKzE4NzksMTYgQEAgcG1hcF9ncm93a2VybmVsKHZtX29mZnNldF90IGFk ZHIpCiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qCi0JCSAqIFRoaXMgaW5kZXggaXMgYm9n dXMsIGJ1dCBvdXQgb2YgdGhlIHdheQotCQkgKi8KLQkJbmtwZyA9IHZtX3BhZ2VfYWxsb2Mo TlVMTCwgbmtwdCwKLQkJICAgIFZNX0FMTE9DX05PT0JKIHwgVk1fQUxMT0NfU1lTVEVNIHwg Vk1fQUxMT0NfV0lSRUQpOwotCQlpZiAoIW5rcGcpCisJCW5rcGcgPSB2bV9wYWdlX2FsbG9j KE5VTEwsIGtlcm5lbF92bV9lbmQgPj4gUERSU0hJRlQsCisJCSAgICBWTV9BTExPQ19JTlRF UlJVUFQgfCBWTV9BTExPQ19OT09CSiB8IFZNX0FMTE9DX1dJUkVEIHwKKwkJICAgIFZNX0FM TE9DX1pFUk8pOworCQlpZiAobmtwZyA9PSBOVUxMKQogCQkJcGFuaWMoInBtYXBfZ3Jvd2tl cm5lbDogbm8gbWVtb3J5IHRvIGdyb3cga2VybmVsIik7CiAKIAkJbmtwdCsrOwogCi0JCXBt YXBfemVyb19wYWdlKG5rcGcpOworCQlpZiAoKG5rcGctPmZsYWdzICYgUEdfWkVSTykgPT0g MCkKKwkJCXBtYXBfemVyb19wYWdlKG5rcGcpOwogCQlwdHBwYWRkciA9IFZNX1BBR0VfVE9f UEhZUyhua3BnKTsKIAkJbmV3cGRpciA9IChwZF9lbnRyeV90KSAocHRwcGFkZHIgfCBQR19W IHwgUEdfUlcgfCBQR19BIHwgUEdfTSk7CiAJCXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsKQEAg LTE4OTEsNyArMTkwMCw3IEBAIHBtYXBfZ3Jvd2tlcm5lbCh2bV9vZmZzZXRfdCBhZGRyKQog CQltdHhfdW5sb2NrX3NwaW4oJmFsbHBtYXBzX2xvY2spOwogCQl2bV9wYWdlX3VubG9ja19x dWV1ZXMoKTsKIAotCQlrZXJuZWxfdm1fZW5kID0gKGtlcm5lbF92bV9lbmQgKyBQQUdFX1NJ WkUgKiBOUFRFUEcpICYgfihQQUdFX1NJWkUgKiBOUFRFUEcgLSAxKTsKKwkJa2VybmVsX3Zt X2VuZCA9IChrZXJuZWxfdm1fZW5kICsgTkJQRFIpICYgflBEUk1BU0s7CiAJCWlmIChrZXJu ZWxfdm1fZW5kIC0gMSA+PSBrZXJuZWxfbWFwLT5tYXhfb2Zmc2V0KSB7CiAJCQlrZXJuZWxf dm1fZW5kID0ga2VybmVsX21hcC0+bWF4X29mZnNldDsKIAkJCWJyZWFrOwpAQCAtMTkxMSw3 ICsxOTIwLDcgQEAgc3RhdGljIF9faW5saW5lIHN0cnVjdCBwdl9jaHVuayAqCiBwdl90b19j aHVuayhwdl9lbnRyeV90IHB2KQogewogCi0JcmV0dXJuIChzdHJ1Y3QgcHZfY2h1bmsgKiko KHVpbnRwdHJfdClwdiAmIH4odWludHB0cl90KVBBR0VfTUFTSyk7CisJcmV0dXJuICgoc3Ry dWN0IHB2X2NodW5rICopKCh1aW50cHRyX3QpcHYgJiB+KHVpbnRwdHJfdClQQUdFX01BU0sp KTsKIH0KIAogI2RlZmluZSBQVl9QTUFQKHB2KSAocHZfdG9fY2h1bmsocHYpLT5wY19wbWFw KQpAQCAtMjAzMywxNSArMjA0MiwxNSBAQCBmcmVlX3B2X2VudHJ5KHBtYXBfdCBwbWFwLCBw dl9lbnRyeV90IHB2KQogCXBjLT5wY19tYXBbZmllbGRdIHw9IDF1bCA8PCBiaXQ7CiAJLyog bW92ZSB0byBoZWFkIG9mIGxpc3QgKi8KIAlUQUlMUV9SRU1PVkUoJnBtYXAtPnBtX3B2Y2h1 bmssIHBjLCBwY19saXN0KTsKLQlUQUlMUV9JTlNFUlRfSEVBRCgmcG1hcC0+cG1fcHZjaHVu aywgcGMsIHBjX2xpc3QpOwogCWZvciAoaWR4ID0gMDsgaWR4IDwgX05QQ007IGlkeCsrKQot CQlpZiAocGMtPnBjX21hcFtpZHhdICE9IHBjX2ZyZWVtYXNrW2lkeF0pCisJCWlmIChwYy0+ cGNfbWFwW2lkeF0gIT0gcGNfZnJlZW1hc2tbaWR4XSkgeworCQkJVEFJTFFfSU5TRVJUX0hF QUQoJnBtYXAtPnBtX3B2Y2h1bmssIHBjLCBwY19saXN0KTsKIAkJCXJldHVybjsKKwkJfQog CVBWX1NUQVQocHZfZW50cnlfc3BhcmUgLT0gX05QQ1BWKTsKIAlQVl9TVEFUKHBjX2NodW5r X2NvdW50LS0pOwogCVBWX1NUQVQocGNfY2h1bmtfZnJlZXMrKyk7CiAJLyogZW50aXJlIGNo dW5rIGlzIGZyZWUsIHJldHVybiBpdCAqLwotCVRBSUxRX1JFTU9WRSgmcG1hcC0+cG1fcHZj aHVuaywgcGMsIHBjX2xpc3QpOwogCW0gPSBQSFlTX1RPX1ZNX1BBR0UocG1hcF9rZXh0cmFj dCgodm1fb2Zmc2V0X3QpcGMpKTsKIAlwbWFwX3FyZW1vdmUoKHZtX29mZnNldF90KXBjLCAx KTsKIAl2bV9wYWdlX3Vud2lyZShtLCAwKTsKQEAgLTIyNzAsMTAgKzIyNzksMTAgQEAgcG1h cF9yZW1vdmUocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHN2YSwgdm1fb2Zmc2UKIAlwdF9l bnRyeV90ICpwdGU7CiAJdm1fcGFnZV90IGZyZWUgPSBOVUxMOwogCWludCBhbnl2YWxpZDsK LQkKKwogCUNUUjMoS1RSX1BNQVAsICJwbWFwX3JlbW92ZTogcG1hcD0lcCBzdmE9MHgleCBl dmE9MHgleCIsCiAJICAgIHBtYXAsIHN2YSwgZXZhKTsKLQkKKwogCS8qCiAJICogUGVyZm9y bSBhbiB1bnN5bmNocm9uaXplZCByZWFkLiAgVGhpcyBpcywgaG93ZXZlciwgc2FmZS4KIAkg Ki8KQEAgLTIyOTgsNyArMjMwNyw3IEBAIHBtYXBfcmVtb3ZlKHBtYXBfdCBwbWFwLCB2bV9v ZmZzZXRfdCBzdmEsIHZtX29mZnNlCiAJfQogCiAJZm9yICg7IHN2YSA8IGV2YTsgc3ZhID0g cGRueHQpIHsKLQkJdW5zaWduZWQgcGRpcmluZGV4OworCQl1X2ludCBwZGlyaW5kZXg7CiAK IAkJLyoKIAkJICogQ2FsY3VsYXRlIGluZGV4IGZvciBuZXh0IHBhZ2UgdGFibGUuCkBAIC0y MzkzLDcgKzI0MDIsNiBAQCBwbWFwX3JlbW92ZV9hbGwodm1fcGFnZV90IG0pCiAJCVBNQVBf TE9DSyhwbWFwKTsKIAkJcG1hcC0+cG1fc3RhdHMucmVzaWRlbnRfY291bnQtLTsKIAkJcHRl ID0gcG1hcF9wdGVfcXVpY2socG1hcCwgcHYtPnB2X3ZhKTsKLQogCQl0cHRlID0gKnB0ZTsK IAkJUFRfU0VUX1ZBX01BKHB0ZSwgMCwgVFJVRSk7CiAJCWlmICh0cHRlICYgUEdfVykKQEAg LTI0NTcsNyArMjQ2NSw3IEBAIHBtYXBfcHJvdGVjdChwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0 X3Qgc3ZhLCB2bV9vZmZzCiAJUE1BUF9MT0NLKHBtYXApOwogCWZvciAoOyBzdmEgPCBldmE7 IHN2YSA9IHBkbnh0KSB7CiAJCXB0X2VudHJ5X3Qgb2JpdHMsIHBiaXRzOwotCQl1bnNpZ25l ZCBwZGlyaW5kZXg7CisJCXVfaW50IHBkaXJpbmRleDsKIAogCQlwZG54dCA9IChzdmEgKyBO QlBEUikgJiB+UERSTUFTSzsKIApAQCAtMjU2OSw3ICsyNTc3LDggQEAgcG1hcF9lbnRlcihw bWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsIHZtX3Byb3RfdAogCUtBU1NFUlQodmEgPCBV UFRfTUlOX0FERFJFU1MgfHwgdmEgPj0gVVBUX01BWF9BRERSRVNTLAogCSAgICAoInBtYXBf ZW50ZXI6IGludmFsaWQgdG8gcG1hcF9lbnRlciBwYWdlIHRhYmxlIHBhZ2VzICh2YTogMHgl eCkiLAogCSAgICB2YSkpOwotCUtBU1NFUlQoKG0tPm9mbGFncyAmIChWUE9fVU5NQU5BR0VE IHwgVlBPX0JVU1kpKSAhPSAwLAorCUtBU1NFUlQoKG0tPm9mbGFncyAmIChWUE9fVU5NQU5B R0VEIHwgVlBPX0JVU1kpKSAhPSAwIHx8CisJICAgIFZNX09CSkVDVF9MT0NLRUQobS0+b2Jq ZWN0KSwKIAkgICAgKCJwbWFwX2VudGVyOiBwYWdlICVwIGlzIG5vdCBidXN5IiwgbSkpOwog CiAJbXB0ZSA9IE5VTEw7CkBAIC0yNzcyLDEwICsyNzgxLDkgQEAgcG1hcF9lbnRlcl9vYmpl Y3QocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHN0YXJ0LAogCW11bHRpY2FsbF9lbnRyeV90 IG1jbFsxNl07CiAJbXVsdGljYWxsX2VudHJ5X3QgKm1jbHAgPSBtY2w7CiAJaW50IGVycm9y LCBjb3VudCA9IDA7Ci0JCisKIAlWTV9PQkpFQ1RfTE9DS19BU1NFUlQobV9zdGFydC0+b2Jq ZWN0LCBNQV9PV05FRCk7CiAJcHNpemUgPSBhdG9wKGVuZCAtIHN0YXJ0KTsKLQkgICAgCiAJ bXB0ZSA9IE5VTEw7CiAJbSA9IG1fc3RhcnQ7CiAJdm1fcGFnZV9sb2NrX3F1ZXVlcygpOwpA QCAtMjgxNCw3ICsyODIyLDcgQEAgcG1hcF9lbnRlcl9xdWljayhwbWFwX3QgcG1hcCwgdm1f b2Zmc2V0X3QgdmEsIHZtX3AKIAltdWx0aWNhbGxfZW50cnlfdCBtY2wsICptY2xwOwogCWlu dCBjb3VudCA9IDA7CiAJbWNscCA9ICZtY2w7Ci0JCisKIAlDVFI0KEtUUl9QTUFQLCAicG1h cF9lbnRlcl9xdWljazogcG1hcD0lcCB2YT0weCV4IG09JXAgcHJvdD0weCV4IiwKIAkgICAg cG1hcCwgdmEsIG0sIHByb3QpOwogCQpAQCAtMjg2NSw3ICsyODczLDcgQEAgcG1hcF9lbnRl cl9xdWlja19sb2NrZWQobXVsdGljYWxsX2VudHJ5X3QgKiptY2xwcCwKIAl2bV9wYWRkcl90 IHBhOwogCXZtX3BhZ2VfdCBmcmVlOwogCW11bHRpY2FsbF9lbnRyeV90ICptY2wgPSAqbWNs cHA7Ci0JCisKIAlLQVNTRVJUKHZhIDwga21pLmNsZWFuX3N2YSB8fCB2YSA+PSBrbWkuY2xl YW5fZXZhIHx8CiAJICAgIChtLT5vZmxhZ3MgJiBWUE9fVU5NQU5BR0VEKSAhPSAwLAogCSAg ICAoInBtYXBfZW50ZXJfcXVpY2tfbG9ja2VkOiBtYW5hZ2VkIG1hcHBpbmcgd2l0aGluIHRo ZSBjbGVhbiBzdWJtYXAiKSk7CkBAIC0yODc3LDcgKzI4ODUsNyBAQCBwbWFwX2VudGVyX3F1 aWNrX2xvY2tlZChtdWx0aWNhbGxfZW50cnlfdCAqKm1jbHBwLAogCSAqIHJlc2lkZW50LCB3 ZSBhcmUgY3JlYXRpbmcgaXQgaGVyZS4KIAkgKi8KIAlpZiAodmEgPCBWTV9NQVhVU0VSX0FE RFJFU1MpIHsKLQkJdW5zaWduZWQgcHRlcGluZGV4OworCQl1X2ludCBwdGVwaW5kZXg7CiAJ CXBkX2VudHJ5X3QgcHRlbWE7CiAKIAkJLyoKQEAgLTI5ODEsNyArMjk4OSw3IEBAIHBtYXBf ZW50ZXJfcXVpY2tfbG9ja2VkKG11bHRpY2FsbF9lbnRyeV90ICoqbWNscHAsCiAJKm1jbHBw ID0gbWNsICsgMTsKIAkqY291bnQgPSAqY291bnQgKyAxOwogI2VuZGlmCQotCXJldHVybiBt cHRlOworCXJldHVybiAobXB0ZSk7CiB9CiAKIC8qCkBAIC0zMDA2LDkgKzMwMTQsOCBAQCBw bWFwX2tlbnRlcl90ZW1wb3Jhcnkodm1fcGFkZHJfdCBwYSwgaW50IGkpCiAgKiBhcmUgdGFr ZW4sIGJ1dCB0aGUgY29kZSB3b3Jrcy4KICAqLwogdm9pZAotcG1hcF9vYmplY3RfaW5pdF9w dChwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgYWRkciwKLQkJICAgIHZtX29iamVjdF90IG9i amVjdCwgdm1fcGluZGV4X3QgcGluZGV4LAotCQkgICAgdm1fc2l6ZV90IHNpemUpCitwbWFw X29iamVjdF9pbml0X3B0KHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCBhZGRyLCB2bV9vYmpl Y3RfdCBvYmplY3QsCisgICAgdm1fcGluZGV4X3QgcGluZGV4LCB2bV9zaXplX3Qgc2l6ZSkK IHsKIAlwZF9lbnRyeV90ICpwZGU7CiAJdm1fcGFkZHJfdCBwYSwgcHRlcGE7CkBAIC0zMDI2 LDYgKzMwMzMsNyBAQCB2b2lkCiAJCUtBU1NFUlQocC0+dmFsaWQgPT0gVk1fUEFHRV9CSVRT X0FMTCwKIAkJICAgICgicG1hcF9vYmplY3RfaW5pdF9wdDogaW52YWxpZCBwYWdlICVwIiwg cCkpOwogCQlwYXRfbW9kZSA9IHAtPm1kLnBhdF9tb2RlOworCiAJCS8qCiAJCSAqIEFib3J0 IHRoZSBtYXBwaW5nIGlmIHRoZSBmaXJzdCBwYWdlIGlzIG5vdCBwaHlzaWNhbGx5CiAJCSAq IGFsaWduZWQgdG8gYSAyLzRNQiBwYWdlIGJvdW5kYXJ5LgpAQCAtMzAzMyw2ICszMDQxLDcg QEAgdm9pZAogCQlwdGVwYSA9IFZNX1BBR0VfVE9fUEhZUyhwKTsKIAkJaWYgKHB0ZXBhICYg KE5CUERSIC0gMSkpCiAJCQlyZXR1cm47CisKIAkJLyoKIAkJICogU2tpcCB0aGUgZmlyc3Qg cGFnZS4gIEFib3J0IHRoZSBtYXBwaW5nIGlmIHRoZSByZXN0IG9mCiAJCSAqIHRoZSBwYWdl cyBhcmUgbm90IHBoeXNpY2FsbHkgY29udGlndW91cyBvciBoYXZlIGRpZmZlcmluZwpAQCAt MzA0OCw3ICszMDU3LDEyIEBAIHZvaWQKIAkJCQlyZXR1cm47CiAJCQlwID0gVEFJTFFfTkVY VChwLCBsaXN0cSk7CiAJCX0KLQkJLyogTWFwIHVzaW5nIDIvNE1CIHBhZ2VzLiAqLworCisJ CS8qCisJCSAqIE1hcCB1c2luZyAyLzRNQiBwYWdlcy4gIFNpbmNlICJwdGVwYSIgaXMgMi80 TSBhbGlnbmVkIGFuZAorCQkgKiAic2l6ZSIgaXMgYSBtdWx0aXBsZSBvZiAyLzRNLCBhZGRp bmcgdGhlIFBBVCBzZXR0aW5nIHRvCisJCSAqICJwYSIgd2lsbCBub3QgYWZmZWN0IHRoZSB0 ZXJtaW5hdGlvbiBvZiB0aGlzIGxvb3AuCisJCSAqLwogCQlQTUFQX0xPQ0socG1hcCk7CiAJ CWZvciAocGEgPSBwdGVwYSB8IHBtYXBfY2FjaGVfYml0cyhwYXRfbW9kZSwgMSk7IHBhIDwg cHRlcGEgKwogCQkgICAgc2l6ZTsgcGEgKz0gTkJQRFIpIHsKQEAgLTMxMTIsNyArMzEyNiw3 IEBAIHBtYXBfY2hhbmdlX3dpcmluZyhwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsIGJv CiAKIHZvaWQKIHBtYXBfY29weShwbWFwX3QgZHN0X3BtYXAsIHBtYXBfdCBzcmNfcG1hcCwg dm1fb2Zmc2V0X3QgZHN0X2FkZHIsIHZtX3NpemVfdCBsZW4sCi0JICB2bV9vZmZzZXRfdCBz cmNfYWRkcikKKyAgICB2bV9vZmZzZXRfdCBzcmNfYWRkcikKIHsKIAl2bV9wYWdlX3QgICBm cmVlOwogCXZtX29mZnNldF90IGFkZHI7CkBAIC0zMTQ5LDcgKzMxNjMsNyBAQCBwbWFwX2Nv cHkocG1hcF90IGRzdF9wbWFwLCBwbWFwX3Qgc3JjX3BtYXAsIHZtX29mZgogCQlwdF9lbnRy eV90ICpzcmNfcHRlLCAqZHN0X3B0ZTsKIAkJdm1fcGFnZV90IGRzdG1wdGUsIHNyY21wdGU7 CiAJCXBkX2VudHJ5X3Qgc3JjcHRlcGFkZHI7Ci0JCXVuc2lnbmVkIHB0ZXBpbmRleDsKKwkJ dV9pbnQgcHRlcGluZGV4OwogCiAJCUtBU1NFUlQoYWRkciA8IFVQVF9NSU5fQUREUkVTUywK IAkJICAgICgicG1hcF9jb3B5OiBpbnZhbGlkIHRvIHBtYXBfY29weSBwYWdlIHRhYmxlcyIp KTsKQEAgLTMxODgsNyArMzIwMiw3IEBAIHBtYXBfY29weShwbWFwX3QgZHN0X3BtYXAsIHBt YXBfdCBzcmNfcG1hcCwgdm1fb2ZmCiAJCQkJZHN0bXB0ZSA9IHBtYXBfYWxsb2NwdGUoZHN0 X3BtYXAsIGFkZHIsCiAJCQkJICAgIE1fTk9XQUlUKTsKIAkJCQlpZiAoZHN0bXB0ZSA9PSBO VUxMKQotCQkJCQlicmVhazsKKwkJCQkJZ290byBvdXQ7CiAJCQkJZHN0X3B0ZSA9IHBtYXBf cHRlX3F1aWNrKGRzdF9wbWFwLCBhZGRyKTsKIAkJCQlpZiAoKmRzdF9wdGUgPT0gMCAmJgog CQkJCSAgICBwbWFwX3RyeV9pbnNlcnRfcHZfZW50cnkoZHN0X3BtYXAsIGFkZHIsCkBAIC0z MjEyLDYgKzMyMjYsNyBAQCBwbWFwX2NvcHkocG1hcF90IGRzdF9wbWFwLCBwbWFwX3Qgc3Jj X3BtYXAsIHZtX29mZgogCQkJCQkJICAgIGFkZHIpOwogCQkJCQkJcG1hcF9mcmVlX3plcm9f cGFnZXMoZnJlZSk7CiAJCQkJCX0KKwkJCQkJZ290byBvdXQ7CiAJCQkJfQogCQkJCWlmIChk c3RtcHRlLT53aXJlX2NvdW50ID49IHNyY21wdGUtPndpcmVfY291bnQpCiAJCQkJCWJyZWFr OwpAQCAtMzIyMCw2ICszMjM1LDcgQEAgcG1hcF9jb3B5KHBtYXBfdCBkc3RfcG1hcCwgcG1h cF90IHNyY19wbWFwLCB2bV9vZmYKIAkJCXNyY19wdGUrKzsKIAkJfQogCX0KK291dDoKIAlQ VF9VUERBVEVTX0ZMVVNIKCk7CiAJc2NoZWRfdW5waW4oKTsKIAl2bV9wYWdlX3VubG9ja19x dWV1ZXMoKTsKQEAgLTMyODIsNyArMzI5OCw3IEBAIHBtYXBfemVyb19wYWdlX2FyZWEodm1f cGFnZV90IG0sIGludCBvZmYsIGludCBzaXplCiAJc3lzbWFwcyA9ICZzeXNtYXBzX3BjcHVb UENQVV9HRVQoY3B1aWQpXTsKIAltdHhfbG9jaygmc3lzbWFwcy0+bG9jayk7CiAJaWYgKCpz eXNtYXBzLT5DTUFQMikKLQkJcGFuaWMoInBtYXBfemVyb19wYWdlOiBDTUFQMiBidXN5Iik7 CisJCXBhbmljKCJwbWFwX3plcm9fcGFnZV9hcmVhOiBDTUFQMiBidXN5Iik7CiAJc2NoZWRf cGluKCk7CiAJUFRfU0VUX01BKHN5c21hcHMtPkNBRERSMiwgUEdfViB8IFBHX1JXIHwgVk1f UEFHRV9UT19NQUNIKG0pIHwgUEdfQSB8IFBHX00pOwogCkBAIC0zMzA2LDcgKzMzMjIsNyBA QCBwbWFwX3plcm9fcGFnZV9pZGxlKHZtX3BhZ2VfdCBtKQogewogCiAJaWYgKCpDTUFQMykK LQkJcGFuaWMoInBtYXBfemVyb19wYWdlOiBDTUFQMyBidXN5Iik7CisJCXBhbmljKCJwbWFw X3plcm9fcGFnZV9pZGxlOiBDTUFQMyBidXN5Iik7CiAJc2NoZWRfcGluKCk7CiAJUFRfU0VU X01BKENBRERSMywgUEdfViB8IFBHX1JXIHwgVk1fUEFHRV9UT19NQUNIKG0pIHwgUEdfQSB8 IFBHX00pOwogCXBhZ2V6ZXJvKENBRERSMyk7CkBAIC0zNzcwLDcgKzM3ODYsNiBAQCBwbWFw X3RzX3JlZmVyZW5jZWQodm1fcGFnZV90IG0pCiAJUFRfVVBEQVRFU19GTFVTSCgpOwogCWlm ICgqUE1BUDEpCiAJCVBUX1NFVF9NQShQQUREUjEsIDApOwotCiAJc2NoZWRfdW5waW4oKTsK IAl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsKIAlyZXR1cm4gKHJ0dmFsKTsKQEAgLTM4MDUs NyArMzgyMCw3IEBAIHBtYXBfY2xlYXJfbW9kaWZ5KHZtX3BhZ2VfdCBtKQogCQlwbWFwID0g UFZfUE1BUChwdik7CiAJCVBNQVBfTE9DSyhwbWFwKTsKIAkJcHRlID0gcG1hcF9wdGVfcXVp Y2socG1hcCwgcHYtPnB2X3ZhKTsKLQkJaWYgKCgqcHRlICYgUEdfTSkgIT0gMCkgeworCQlp ZiAoKCpwdGUgJiAoUEdfTSB8IFBHX1JXKSkgPT0gKFBHX00gfCBQR19SVykpIHsKIAkJCS8q CiAJCQkgKiBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBwdGUgaXMgMzIgb3IgNjQgYml0cwog CQkJICogaW4gc2l6ZSwgUEdfTSBpcyBhbW9uZyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQKQEAg LTM5MjcsOCArMzk0Miw2IEBAIHBtYXBfdW5tYXBkZXYodm1fb2Zmc2V0X3QgdmEsIHZtX3Np emVfdCBzaXplKQogdm9pZAogcG1hcF9wYWdlX3NldF9tZW1hdHRyKHZtX3BhZ2VfdCBtLCB2 bV9tZW1hdHRyX3QgbWEpCiB7Ci0Jc3RydWN0IHN5c21hcHMgKnN5c21hcHM7Ci0Jdm1fb2Zm c2V0X3Qgc3ZhLCBldmE7CiAKIAltLT5tZC5wYXRfbW9kZSA9IG1hOwogCWlmICgobS0+Zmxh Z3MgJiBQR19GSUNUSVRJT1VTKSAhPSAwKQpAQCAtMzk1MSwxMSArMzk2NCwyMSBAQCBwbWFw X3BhZ2Vfc2V0X21lbWF0dHIodm1fcGFnZV90IG0sIHZtX21lbWF0dHJfdCBtYQogCSAqIGlu dmFsaWRhdGlvbi4gSW4gdGhlIHdvcnN0IGNhc2UsIHdob2xlIGNhY2hlIGlzIGZsdXNoZWQg YnkKIAkgKiBwbWFwX2ludmFsaWRhdGVfY2FjaGVfcmFuZ2UoKS4KIAkgKi8KLQlpZiAoKGNw dV9mZWF0dXJlICYgKENQVUlEX1NTfENQVUlEX0NMRlNIKSkgPT0gQ1BVSURfQ0xGU0gpIHsK KwlpZiAoKGNwdV9mZWF0dXJlICYgQ1BVSURfU1MpID09IDApCisJCXBtYXBfZmx1c2hfcGFn ZShtKTsKK30KKworc3RhdGljIHZvaWQKK3BtYXBfZmx1c2hfcGFnZSh2bV9wYWdlX3QgbSkK K3sKKwlzdHJ1Y3Qgc3lzbWFwcyAqc3lzbWFwczsKKwl2bV9vZmZzZXRfdCBzdmEsIGV2YTsK KworCWlmICgoY3B1X2ZlYXR1cmUgJiBDUFVJRF9DTEZTSCkgIT0gMCkgewogCQlzeXNtYXBz ID0gJnN5c21hcHNfcGNwdVtQQ1BVX0dFVChjcHVpZCldOwogCQltdHhfbG9jaygmc3lzbWFw cy0+bG9jayk7CiAJCWlmICgqc3lzbWFwcy0+Q01BUDIpCi0JCQlwYW5pYygicG1hcF9wYWdl X3NldF9tZW1hdHRyOiBDTUFQMiBidXN5Iik7CisJCQlwYW5pYygicG1hcF9mbHVzaF9wYWdl OiBDTUFQMiBidXN5Iik7CiAJCXNjaGVkX3BpbigpOwogCQlQVF9TRVRfTUEoc3lzbWFwcy0+ Q0FERFIyLCBQR19WIHwgUEdfUlcgfAogCQkgICAgVk1fUEFHRV9UT19NQUNIKG0pIHwgUEdf QSB8IFBHX00gfApAQCAtMzk2MywyMSArMzk4NiwzNSBAQCBwbWFwX3BhZ2Vfc2V0X21lbWF0 dHIodm1fcGFnZV90IG0sIHZtX21lbWF0dHJfdCBtYQogCQlpbnZsY2FkZHIoc3lzbWFwcy0+ Q0FERFIyKTsKIAkJc3ZhID0gKHZtX29mZnNldF90KXN5c21hcHMtPkNBRERSMjsKIAkJZXZh ID0gc3ZhICsgUEFHRV9TSVpFOwotCX0gZWxzZQotCQlzdmEgPSBldmEgPSAwOyAvKiBnY2Mg Ki8KLQlwbWFwX2ludmFsaWRhdGVfY2FjaGVfcmFuZ2Uoc3ZhLCBldmEpOwotCWlmIChzdmEg IT0gMCkgeworCisJCS8qCisJCSAqIFVzZSBtZmVuY2UgZGVzcGl0ZSB0aGUgb3JkZXJpbmcg aW1wbGllZCBieQorCQkgKiBtdHhfe3VuLH1sb2NrKCkgYmVjYXVzZSBjbGZsdXNoIGlzIG5v dCBndWFyYW50ZWVkCisJCSAqIHRvIGJlIG9yZGVyZWQgYnkgYW55IG90aGVyIGluc3RydWN0 aW9uLgorCQkgKi8KKwkJbWZlbmNlKCk7CisJCWZvciAoOyBzdmEgPCBldmE7IHN2YSArPSBj cHVfY2xmbHVzaF9saW5lX3NpemUpCisJCQljbGZsdXNoKHN2YSk7CisJCW1mZW5jZSgpOwog CQlQVF9TRVRfTUEoc3lzbWFwcy0+Q0FERFIyLCAwKTsKIAkJc2NoZWRfdW5waW4oKTsKIAkJ bXR4X3VubG9jaygmc3lzbWFwcy0+bG9jayk7Ci0JfQorCX0gZWxzZQorCQlwbWFwX2ludmFs aWRhdGVfY2FjaGUoKTsKIH0KIAorLyoKKyAqIENoYW5nZXMgdGhlIHNwZWNpZmllZCB2aXJ0 dWFsIGFkZHJlc3MgcmFuZ2UncyBtZW1vcnkgdHlwZSB0byB0aGF0IGdpdmVuIGJ5CisgKiB0 aGUgcGFyYW1ldGVyICJtb2RlIi4gIFRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJh bmdlIG11c3QgYmUKKyAqIGNvbXBsZXRlbHkgY29udGFpbmVkIHdpdGhpbiBlaXRoZXIgdGhl IGtlcm5lbCBtYXAuCisgKgorICogUmV0dXJucyB6ZXJvIGlmIHRoZSBjaGFuZ2UgY29tcGxl dGVkIHN1Y2Nlc3NmdWxseSwgYW5kIGVpdGhlciBFSU5WQUwgb3IKKyAqIEVOT01FTSBpZiB0 aGUgY2hhbmdlIGZhaWxlZC4gIFNwZWNpZmljYWxseSwgRUlOVkFMIGlzIHJldHVybmVkIGlm IHNvbWUgcGFydAorICogb2YgdGhlIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB3YXMgbm90IG1h cHBlZCwgYW5kIEVOT01FTSBpcyByZXR1cm5lZCBpZgorICogdGhlcmUgd2FzIGluc3VmZmlj aWVudCBtZW1vcnkgYXZhaWxhYmxlIHRvIGNvbXBsZXRlIHRoZSBjaGFuZ2UuCisgKi8KIGlu dAotcG1hcF9jaGFuZ2VfYXR0cih2YSwgc2l6ZSwgbW9kZSkKLQl2bV9vZmZzZXRfdCB2YTsK LQl2bV9zaXplX3Qgc2l6ZTsKLQlpbnQgbW9kZTsKK3BtYXBfY2hhbmdlX2F0dHIodm1fb2Zm c2V0X3QgdmEsIHZtX3NpemVfdCBzaXplLCBpbnQgbW9kZSkKIHsKIAl2bV9vZmZzZXRfdCBi YXNlLCBvZmZzZXQsIHRtcHZhOwogCXB0X2VudHJ5X3QgKnB0ZTsKQEAgLTQwMzEsOCArNDA2 OCw4IEBAIGludAogCX0KIAogCS8qCi0JICogRmx1c2ggQ1BVIGNhY2hlcyB0byBtYWtlIHN1 cmUgYW55IGRhdGEgaXNuJ3QgY2FjaGVkIHRoYXQgc2hvdWxkbid0Ci0JICogYmUsIGV0Yy4K KwkgKiBGbHVzaCBDUFUgY2FjaGVzIHRvIG1ha2Ugc3VyZSBhbnkgZGF0YSBpc24ndCBjYWNo ZWQgdGhhdAorCSAqIHNob3VsZG4ndCBiZSwgZXRjLgogCSAqLwogCWlmIChjaGFuZ2VkKSB7 CiAJCXBtYXBfaW52YWxpZGF0ZV9yYW5nZShrZXJuZWxfcG1hcCwgYmFzZSwgdG1wdmEpOwpA QCAtNDA1MCw3ICs0MDg3LDcgQEAgcG1hcF9taW5jb3JlKHBtYXBfdCBwbWFwLCB2bV9vZmZz ZXRfdCBhZGRyLCB2bV9wYWQKIAlwdF9lbnRyeV90ICpwdGVwLCBwdGU7CiAJdm1fcGFkZHJf dCBwYTsKIAlpbnQgdmFsOwotCQorCiAJUE1BUF9MT0NLKHBtYXApOwogcmV0cnk6CiAJcHRl cCA9IHBtYXBfcHRlKHBtYXAsIGFkZHIpOwpAQCAtNDIzMyw3ICs0MjcwLDcgQEAgcG1hcF9w aWRfZHVtcChpbnQgcGlkKQogCQkJCQkJCQlwcmludGYoIlxuIik7CiAJCQkJCQkJfQogCQkJ CQkJCXN4X3N1bmxvY2soJmFsbHByb2NfbG9jayk7Ci0JCQkJCQkJcmV0dXJuIG5wdGU7CisJ CQkJCQkJcmV0dXJuIChucHRlKTsKIAkJCQkJCX0KIAkJCQkJCXB0ZSA9IHBtYXBfcHRlKHBt YXAsIHZhKTsKIAkJCQkJCWlmIChwdGUgJiYgcG1hcF9wdGVfdihwdGUpKSB7CkBAIC00MjU4 LDcgKzQyOTUsNyBAQCBwbWFwX3BpZF9kdW1wKGludCBwaWQpCiAJCX0KIAl9CiAJc3hfc3Vu bG9jaygmYWxscHJvY19sb2NrKTsKLQlyZXR1cm4gbnB0ZTsKKwlyZXR1cm4gKG5wdGUpOwog fQogI2VuZGlmCiAK --------------060709010809090804020504--