From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756881AbYDUTi7 (ORCPT ); Mon, 21 Apr 2008 15:38:59 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1758804AbYDUTir (ORCPT ); Mon, 21 Apr 2008 15:38:47 -0400 Received: from rv-out-0708.google.com ([209.85.198.242]:5084 "EHLO rv-out-0506.google.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756210AbYDUTip (ORCPT ); Mon, 21 Apr 2008 15:38:45 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=ve6mT0LQQCIrMuo4aJDcQcj2WqwYeMCo4rixOhXEacRs980oDoTpN/2H7VsQa6kdAG0jfgCzrhGED4yo4GaMIq7BTyzrmkgtjVOb76CDF6bSW27u/p9vS3XRwNPjlbCyDnQ8FbZ/gowHCUVyF7Wsr6tnXEmUyxdXdCAXs3pl1VE= Message-ID: Date: Mon, 21 Apr 2008 15:38:39 -0400 From: "Dan Upton" To: "Dmitry Adamushko" Subject: Re: migration thread and active_load_balance Cc: linux-kernel@vger.kernel.org In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_6004_31467322.1208806719366" References: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ------=_Part_6004_31467322.1208806719366 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline On Mon, Apr 21, 2008 at 7:03 AM, Dmitry Adamushko wrote: > On 21/04/2008, Dan Upton wrote: > > [ ... ] > > > > > kernel BUG at kernel/sched.c:2103 > > and what's this line in your patched sched.c? > > is it -- BUG_ON(!irqs_disabled()); ? > > anything in your unposted code (e.g. find_coolest_cpu()) that might > re-enable the interrupts before __migration_task() is called? > > If you post your modifications as a patch > (Documentation/applying-patches.txt) that contains _all_ relevant > modifications, it'd be easier to guess what's wrong. Yes, that's the line. I don't recall ever reenabling interrupts, but maybe somebody will see what I'm missing. I've attached a full diff; there are a few other places I've made changes for other scheduling stuff that you'll see in the diff, that have all tested fine. -dan ------=_Part_6004_31467322.1208806719366 Content-Type: application/octet-stream; name=thermdiff Content-Transfer-Encoding: base64 X-Attachment-Id: f_ffbgfebu0 Content-Disposition: attachment; filename=thermdiff QmluYXJ5IGZpbGVzIGxpbnV4LTIuNi4yNC4zL0RvY3VtZW50YXRpb24vLmFwcGx5aW5nLXBhdGNo ZXMudHh0LnN3cCBhbmQgbGludXgtMi42LjI0LjMtdGhlcm0vRG9jdW1lbnRhdGlvbi8uYXBwbHlp bmctcGF0Y2hlcy50eHQuc3dwIGRpZmZlcgpkaWZmIC1OdXIgbGludXgtMi42LjI0LjMvZnMvcHJv Yy9hcnJheS5jIGxpbnV4LTIuNi4yNC4zLXRoZXJtL2ZzL3Byb2MvYXJyYXkuYwotLS0gbGludXgt Mi42LjI0LjMvZnMvcHJvYy9hcnJheS5jCTIwMDgtMDItMjUgMTk6MjA6MjAuMDAwMDAwMDAwIC0w NTAwCisrKyBsaW51eC0yLjYuMjQuMy10aGVybS9mcy9wcm9jL2FycmF5LmMJMjAwOC0wMy0yNSAx NTowODozNC4wMDAwMDAwMDAgLTA0MDAKQEAgLTQ5Niw3ICs0OTYsNyBAQAogCiAJcmVzID0gc3By aW50ZihidWZmZXIsICIlZCAoJXMpICVjICVkICVkICVkICVkICVkICV1ICVsdSBcCiAlbHUgJWx1 ICVsdSAlbHUgJWx1ICVsZCAlbGQgJWxkICVsZCAlZCAwICVsbHUgJWx1ICVsZCAlbHUgJWx1ICVs dSAlbHUgJWx1IFwKLSVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWQgJWQgJXUgJXUg JWxsdSAlbHUgJWxkXG4iLAorJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlZCAlZCAl dSAldSAlbGx1ICVsdSAlbGQgbmV3ICVkXG4iLAogCQl0YXNrX3BpZF9ucl9ucyh0YXNrLCBucyks CiAJCXRjb21tLAogCQlzdGF0ZSwKQEAgLTU0Myw3ICs1NDMsOCBAQAogCQl0YXNrLT5wb2xpY3ks CiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpZGVsYXlhY2N0X2Jsa2lvX3RpY2tzKHRhc2spLAogCQlj cHV0aW1lX3RvX2Nsb2NrX3QoZ3RpbWUpLAotCQljcHV0aW1lX3RvX2Nsb2NrX3QoY2d0aW1lKSk7 CisJCWNwdXRpbWVfdG9fY2xvY2tfdChjZ3RpbWUpLAorCQl0YXNrLT5sYXN0dGVtcCk7CiAJaWYg KG1tKQogCQltbXB1dChtbSk7CiAJcmV0dXJuIHJlczsKZGlmZiAtTnVyIGxpbnV4LTIuNi4yNC4z L2luY2x1ZGUvbGludXgvc2NoZWQuaCBsaW51eC0yLjYuMjQuMy10aGVybS9pbmNsdWRlL2xpbnV4 L3NjaGVkLmgKLS0tIGxpbnV4LTIuNi4yNC4zL2luY2x1ZGUvbGludXgvc2NoZWQuaAkyMDA4LTAy LTI1IDE5OjIwOjIwLjAwMDAwMDAwMCAtMDUwMAorKysgbGludXgtMi42LjI0LjMtdGhlcm0vaW5j bHVkZS9saW51eC9zY2hlZC5oCTIwMDgtMDItMjYgMTU6NTE6MDQuMDAwMDAwMDAwIC0wNTAwCkBA IC0xMTc4LDYgKzExNzgsOCBAQAogCWludCBtYWtlX2l0X2ZhaWw7CiAjZW5kaWYKIAlzdHJ1Y3Qg cHJvcF9sb2NhbF9zaW5nbGUgZGlydGllczsKKworCWludCBsYXN0dGVtcDsgLyogZHN1OXcgLSBs YXN0IHRlbXBlcmF0dXJlIG9mIHRoaXMgcHJvY2VzcyAqLwogfTsKIAogLyoKZGlmZiAtTnVyIGxp bnV4LTIuNi4yNC4zL2luaXQvbWFpbi5jIGxpbnV4LTIuNi4yNC4zLXRoZXJtL2luaXQvbWFpbi5j Ci0tLSBsaW51eC0yLjYuMjQuMy9pbml0L21haW4uYwkyMDA4LTAyLTI1IDE5OjIwOjIwLjAwMDAw MDAwMCAtMDUwMAorKysgbGludXgtMi42LjI0LjMtdGhlcm0vaW5pdC9tYWluLmMJMjAwOC0wMy0y NCAxMzo0NzoxOC4wMDAwMDAwMDAgLTA0MDAKQEAgLTc3LDYgKzc3LDkgQEAKICN3YXJuaW5nIGdj Yy00LjEuMCBpcyBrbm93biB0byBtaXNjb21waWxlIHRoZSBrZXJuZWwuICBBIGRpZmZlcmVudCBj b21waWxlciB2ZXJzaW9uIGlzIHJlY29tbWVuZGVkLgogI2VuZGlmCiAKKy8vZXh0ZXJuIGludCBz Y2hlZF90aGVybWFsOworZXh0ZXJuIGludCBpbml0X3N5c2ZzX3RlbXAodm9pZCk7CisKIHN0YXRp YyBpbnQga2VybmVsX2luaXQodm9pZCAqKTsKIAogZXh0ZXJuIHZvaWQgaW5pdF9JUlEodm9pZCk7 CkBAIC00NDksNiArNDUyLDkgQEAKIAlzY2hlZHVsZSgpOwogCXByZWVtcHRfZGlzYWJsZSgpOwog CisJLy9zY2hlZF90aGVybWFsID0gMTsgLy8gdHVybiBvbiB0aGVybWFsIHNjaGVkdWxpbmcKKwlp bml0X3N5c2ZzX3RlbXAoKTsKKwogCS8qIENhbGwgaW50byBjcHVfaWRsZSB3aXRoIHByZWVtcHQg ZGlzYWJsZWQgKi8KIAljcHVfaWRsZSgpOwogfQpAQCAtNjQ2LDYgKzY1Miw3IEBACiAKIAkvKiBE byB0aGUgcmVzdCBub24tX19pbml0J2VkLCB3ZSdyZSBub3cgYWxpdmUgKi8KIAlyZXN0X2luaXQo KTsKKwogfQogCiBzdGF0aWMgaW50IF9faW5pdGRhdGEgaW5pdGNhbGxfZGVidWc7CmRpZmYgLU51 ciBsaW51eC0yLjYuMjQuMy9rZXJuZWwvcHJpbnRrLmMgbGludXgtMi42LjI0LjMtdGhlcm0va2Vy bmVsL3ByaW50ay5jCi0tLSBsaW51eC0yLjYuMjQuMy9rZXJuZWwvcHJpbnRrLmMJMjAwOC0wMi0y NSAxOToyMDoyMC4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yNC4zLXRoZXJtL2tlcm5l bC9wcmludGsuYwkyMDA4LTA0LTA3IDE2OjQwOjIxLjAwMDAwMDAwMCAtMDQwMApAQCAtOTc4LDcg Kzk3OCw3IEBACiAJY29uc29sZV9sb2NrZWQgPSAwOwogCXVwKCZjb25zb2xlX3NlbSk7CiAJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmbG9nYnVmX2xvY2ssIGZsYWdzKTsKLQlpZiAod2FrZV9rbG9n ZCkKKwlpZiAoIWlycXNfZGlzYWJsZWQoKSAmJiB3YWtlX2tsb2dkKQogCQl3YWtlX3VwX2tsb2dk KCk7CiB9CiBFWFBPUlRfU1lNQk9MKHJlbGVhc2VfY29uc29sZV9zZW0pOwpkaWZmIC1OdXIgbGlu dXgtMi42LjI0LjMva2VybmVsL3NjaGVkLmMgbGludXgtMi42LjI0LjMtdGhlcm0va2VybmVsL3Nj aGVkLmMKLS0tIGxpbnV4LTIuNi4yNC4zL2tlcm5lbC9zY2hlZC5jCTIwMDgtMDItMjUgMTk6MjA6 MjAuMDAwMDAwMDAwIC0wNTAwCisrKyBsaW51eC0yLjYuMjQuMy10aGVybS9rZXJuZWwvc2NoZWQu YwkyMDA4LTA0LTIxIDEyOjAxOjM3LjAwMDAwMDAwMCAtMDQwMApAQCAtNjcsNiArNjcsMTEgQEAK ICNpbmNsdWRlIDxhc20vdGxiLmg+CiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CiAKKy8qIHRo ZXJtYWwgc2NoZWR1bGluZyBmbGFnICovCitpbnQgc2NoZWRfdGhlcm1hbCA9IDA7CisvKiB3aGVy ZSB3ZSdyZSBjb21pbmcgZnJvbS4uLiAqLworaW50IGZyb21fYWN0aXZlX2JhbGFuY2UgPSAwOwor CiAvKgogICogU2NoZWR1bGVyIGNsb2NrIC0gcmV0dXJucyBjdXJyZW50IHRpbWUgaW4gbmFub3Nl YyB1bml0cy4KICAqIFRoaXMgaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KQEAgLTI1OSw2ICsy NjQsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGVhZl9jZnNfcnFfbGlzdDsKIAlzdHJ1Y3QgdGFz a19ncm91cCAqdGc7CS8qIGdyb3VwIHRoYXQgIm93bnMiIHRoaXMgcnVucXVldWUgKi8KICNlbmRp ZgorCWludCBsYXN0X3RoZXJtX2JhbGFuY2VfaW5kZXg7CisJaW50IGxhc3RfdGhlcm1fYmFsYW5j ZV90ZW1wOwogfTsKIAogLyogUmVhbC1UaW1lIGNsYXNzZXMnIHJlbGF0ZWQgZmllbGQgaW4gYSBy dW5xdWV1ZTogKi8KQEAgLTM2MCw2ICszNjcsNyBAQAogCXVuc2lnbmVkIGludCBia2xfY291bnQ7 CiAjZW5kaWYKIAlzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcnFfbG9ja19rZXk7CisJaW50IGZyb21f YWN0aXZlX2JhbGFuY2U7CiB9OwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdO RUQoc3RydWN0IHJxLCBydW5xdWV1ZXMpOwpAQCAtODc1LDYgKzg4Myw3IEBACiAjaW5jbHVkZSAi c2NoZWRfaWRsZXRhc2suYyIKICNpbmNsdWRlICJzY2hlZF9mYWlyLmMiCiAjaW5jbHVkZSAic2No ZWRfcnQuYyIKKyNpbmNsdWRlICJzY2hlZF90ZW1wLmMiCiAjaWZkZWYgQ09ORklHX1NDSEVEX0RF QlVHCiAjIGluY2x1ZGUgInNjaGVkX2RlYnVnLmMiCiAjZW5kaWYKQEAgLTEzOTcsNiArMTQwNiw3 IEBACiAJfQogCiAJd2hpbGUgKHNkKSB7CisJLy93aGlsZSgwKXsgLy8gJ2NhdXNlIGkgZG9uJ3Qg YWN0dWFsbHkgY2FyZSBhYm91dCB0aGlzCiAJCWNwdW1hc2tfdCBzcGFuOwogCQlzdHJ1Y3Qgc2No ZWRfZ3JvdXAgKmdyb3VwOwogCQlpbnQgbmV3X2NwdSwgd2VpZ2h0OwpAQCAtMTQzMiw2ICsxNDQy LDkgQEAKIAkJfQogCQkvKiB3aGlsZSBsb29wIHdpbGwgYnJlYWsgaGVyZSBpZiBzZCA9PSBOVUxM ICovCiAJfQorCWlmKHNjaGVkX3RoZXJtYWwgPT0gMSl7CisJCWNwdT1maW5kX2Nvb2xlc3RfY3B1 KGN1cnJlbnQpOworCX0KIAogCXJldHVybiBjcHU7CiB9CkBAIC0yMzU0LDcgKzIzNjcsMTEgQEAK IAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBpdGVyYXRvci0+c3RhcnQoaXRlcmF0b3ItPmFyZyk7 CiAJaW50IHBpbm5lZCA9IDA7CiAKKwkvKiBkZWJ1Z2chICovCisJLy9pZihidXNpZXN0LT5mcm9t X2FjdGl2ZV9iYWxhbmNlKSByZXR1cm47CisKIAl3aGlsZSAocCkgeworCiAJCWlmIChjYW5fbWln cmF0ZV90YXNrKHAsIGJ1c2llc3QsIHRoaXNfY3B1LCBzZCwgaWRsZSwgJnBpbm5lZCkpIHsKIAkJ CXB1bGxfdGFzayhidXNpZXN0LCBwLCB0aGlzX3JxLCB0aGlzX2NwdSk7CiAJCQkvKgpAQCAtMjM4 Myw2ICsyNDAwLDkgQEAKIAkJCSBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRs ZV90eXBlIGlkbGUpCiB7CiAJY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpjbGFzczsKKwkKKwkv KiBkZWJ1Z2chICovCisJLy9pZihidXNpZXN0LT5mcm9tX2FjdGl2ZV9iYWxhbmNlKSByZXR1cm4g MDsKIAogCWZvciAoY2xhc3MgPSBzY2hlZF9jbGFzc19oaWdoZXN0OyBjbGFzczsgY2xhc3MgPSBj bGFzcy0+bmV4dCkKIAkJaWYgKGNsYXNzLT5tb3ZlX29uZV90YXNrKHRoaXNfcnEsIHRoaXNfY3B1 LCBidXNpZXN0LCBzZCwgaWRsZSkpCkBAIC0zMDE5LDYgKzMwMzksOSBAQAogCXN0cnVjdCBzY2hl ZF9kb21haW4gKnNkOwogCXN0cnVjdCBycSAqdGFyZ2V0X3JxOwogCisJLyogZGVidWdnISAqLwor CS8vaWYoYnVzaWVzdF9ycS0+ZnJvbV9hY3RpdmVfYmFsYW5jZSkgcmV0dXJuOworCiAJLyogSXMg dGhlcmUgYW55IHRhc2sgdG8gbW92ZT8gKi8KIAlpZiAoYnVzaWVzdF9ycS0+bnJfcnVubmluZyA8 PSAxKQogCQlyZXR1cm47CkBAIC0zMDUzLDYgKzMwNzYsOCBAQAogCQllbHNlCiAJCQlzY2hlZHN0 YXRfaW5jKHNkLCBhbGJfZmFpbGVkKTsKIAl9CisKKwogCXNwaW5fdW5sb2NrKCZ0YXJnZXRfcnEt PmxvY2spOwogfQogCkBAIC0zNjIyLDYgKzM2NDcsOCBAQAogCWxvbmcgKnN3aXRjaF9jb3VudDsK IAlzdHJ1Y3QgcnEgKnJxOwogCWludCBjcHU7CisJaW50IHRlbXBlcmF0dXJlOworCXN0YXRpYyBp bnQgZGJnZmxhZz0xOwogCiBuZWVkX3Jlc2NoZWQ6CiAJcHJlZW1wdF9kaXNhYmxlKCk7CkBAIC0z NjM2LDYgKzM2NjMsMTMgQEAKIAogCXNjaGVkdWxlX2RlYnVnKHByZXYpOwogCisJLyogdHJ5IHJl YWRpbmcgdGhlIHRlbXBlcmF0dXJlIGhlcmUgYmVmb3JlIGludGVycnVwdHMKKwkgICBhcmUgZGlz YWJsZWQgKi8KKwlpZihzY2hlZF90aGVybWFsID09IDIpeworCQl0ZW1wZXJhdHVyZSA9IGdldF90 ZW1wZXJhdHVyZShjcHUpOworCQlwcmV2LT5sYXN0dGVtcCA9IHRlbXBlcmF0dXJlOworCX0KKwog CS8qCiAJICogRG8gdGhlIHJxLWNsb2NrIHVwZGF0ZSBvdXRzaWRlIHRoZSBycSBsb2NrOgogCSAq LwpAQCAtMzY1NCw4ICszNjg4LDE4IEBACiAJCXN3aXRjaF9jb3VudCA9ICZwcmV2LT5udmNzdzsK IAl9CiAKLQlpZiAodW5saWtlbHkoIXJxLT5ucl9ydW5uaW5nKSkKKwlpZiAodW5saWtlbHkoIXJx LT5ucl9ydW5uaW5nKSl7CisJCS8qaWYoc2NoZWRfdGhlcm1hbCA9PSAyKXsKKwkJCWlmKGRiZ2Zs YWcgPT0gMSl7CisJCQkJcHJpbnRrKEtFUk5fQUxFUlQgInRlbXBfYmFsYW5jaW5nXG4iKTsKKwkJ CQlkYmdmbGFnPTA7CisJCQl9CisJCQl0ZW1wX2JhbGFuY2UoY3B1LCBycSwgdGVtcGVyYXR1cmUp OworCQl9ZWxzZXsKKwkJCWlkbGVfYmFsYW5jZShjcHUsIHJxKTsKKwkJfSovCiAJCWlkbGVfYmFs YW5jZShjcHUsIHJxKTsKKwl9CiAKIAlwcmV2LT5zY2hlZF9jbGFzcy0+cHV0X3ByZXZfdGFzayhy cSwgcHJldik7CiAJbmV4dCA9IHBpY2tfbmV4dF90YXNrKHJxLCBwcmV2KTsKQEAgLTUxNTEsNiAr NTE5NSw5IEBACiB7CiAJaW50IGNwdSA9IChsb25nKWRhdGE7CiAJc3RydWN0IHJxICpycTsKKwlz dGF0aWMgaW50IGRiZ2ZsYWc9MTsKKwlpbnQgc2F2ZV9hYiA9IDAsIHNhdmVfcHVzaD0wOworCWlu dCBjb29sZXN0ID0gIWNwdTsKIAogCXJxID0gY3B1X3JxKGNwdSk7CiAJQlVHX09OKHJxLT5taWdy YXRpb25fdGhyZWFkICE9IGN1cnJlbnQpOwpAQCAtNTE1OSw3ICs1MjA2LDcgQEAKIAl3aGlsZSAo IWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCQlzdHJ1Y3QgbWlncmF0aW9uX3JlcSAqcmVxOwog CQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwotCisJCiAJCXNwaW5fbG9ja19pcnEoJnJxLT5sb2Nr KTsKIAogCQlpZiAoY3B1X2lzX29mZmxpbmUoY3B1KSkgewpAQCAtNTE2NywxMSArNTIxNCwzMSBA QAogCQkJZ290byB3YWl0X3RvX2RpZTsKIAkJfQogCisJCS8vIG90aGVyIHN0dWZmIGhlcmUgdG9v LCBsaWtlIGNoZWNraW5nIHRoZSBjcHUgdGVtcAorCQlpZihzY2hlZF90aGVybWFsID09IDMpewor CQorCQkJY29vbGVzdCA9IGZpbmRfY29vbGVzdF9jcHUoTlVMTCk7CisJCQlpZihjb29sZXN0ICE9 IGNwdSl7IC8vIGlmIHRoZXJlJ3Mgc29tZXdoZXJlIGNvb2xlciB0byBwdXNoIHN0dWZmCisJCQkJ cnEtPmZyb21fYWN0aXZlX2JhbGFuY2U9MTsKKwkJCQlzYXZlX2FiID0gcnEtPmFjdGl2ZV9iYWxh bmNlOworCQkJCXNhdmVfcHVzaCA9IHJxLT5wdXNoX2NwdTsKKwkJCQlycS0+cHVzaF9jcHUgPSBj b29sZXN0OwkKKwkJCQkvL3JxLT5hY3RpdmVfYmFsYW5jZSA9IDE7CisJCQkJCQkJCisJCQkJLy9h Y3RpdmVfbG9hZF9iYWxhbmNlKHJxLCBjcHUpOworCQkJCXJxLT5mcm9tX2FjdGl2ZV9iYWxhbmNl PTA7CisJCQkJcnEtPmFjdGl2ZV9iYWxhbmNlID0gc2F2ZV9hYjsKKwkJCQlycS0+cHVzaF9jcHUg PSBzYXZlX3B1c2g7CisJCQl9CisJCX0KKwkJLy8gaXMgaXQgcG9zc2libGUgdGhpcyBjb3VsZCB1 bmRvIGFueSB3b3JrIHdlIGp1c3QgZGlkPyBvciBtYXliZSB3ZSBjb3VsZAorCQkvLyBjYXVzZSBh IGJ1ZyBpZiB0aGlzIHdhcyBnb2luZyB0byBiZSBjYWxsZWQgYmVjYXVzZSBpdCB3YXMgdGhlIGJ1 c2llc3QgcHJvYywKKwkJLy8gYW5kIG5vdyBpdCBpc24ndD8KIAkJaWYgKHJxLT5hY3RpdmVfYmFs YW5jZSkgewogCQkJYWN0aXZlX2xvYWRfYmFsYW5jZShycSwgY3B1KTsKIAkJCXJxLT5hY3RpdmVf YmFsYW5jZSA9IDA7CiAJCX0KLQorCQkKIAkJaGVhZCA9ICZycS0+bWlncmF0aW9uX3F1ZXVlOwog CiAJCWlmIChsaXN0X2VtcHR5KGhlYWQpKSB7CkBAIC01MTgwLDYgKzUyNDcsNyBAQAogCQkJc2V0 X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJCWNvbnRpbnVlOwogCQl9CisJ CQogCQlyZXEgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBtaWdyYXRpb25fcmVxLCBs aXN0KTsKIAkJbGlzdF9kZWxfaW5pdChoZWFkLT5uZXh0KTsKIApkaWZmIC1OdXIgbGludXgtMi42 LjI0LjMva2VybmVsL3NjaGVkX2RlYnVnLmMgbGludXgtMi42LjI0LjMtdGhlcm0va2VybmVsL3Nj aGVkX2RlYnVnLmMKLS0tIGxpbnV4LTIuNi4yNC4zL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCTIwMDgt MDItMjUgMTk6MjA6MjAuMDAwMDAwMDAwIC0wNTAwCisrKyBsaW51eC0yLjYuMjQuMy10aGVybS9r ZXJuZWwvc2NoZWRfZGVidWcuYwkyMDA4LTAzLTI4IDEyOjMxOjU1LjAwMDAwMDAwMCAtMDQwMApA QCAtMTAzLDcgKzEwMyw3IEBACiAKIHZvaWQgcHJpbnRfY2ZzX3JxKHN0cnVjdCBzZXFfZmlsZSAq bSwgaW50IGNwdSwgc3RydWN0IGNmc19ycSAqY2ZzX3JxKQogewotCXM2NCBNSU5fdnJ1bnRpbWUg PSAtMSwgbWluX3ZydW50aW1lLCBtYXhfdnJ1bnRpbWUgPSAtMSwKKwkvKnM2NCBNSU5fdnJ1bnRp bWUgPSAtMSwgbWluX3ZydW50aW1lLCBtYXhfdnJ1bnRpbWUgPSAtMSwKIAkJc3ByZWFkLCBycTBf bWluX3ZydW50aW1lLCBzcHJlYWQwOwogCXN0cnVjdCBycSAqcnEgPSAmcGVyX2NwdShydW5xdWV1 ZXMsIGNwdSk7CiAJc3RydWN0IHNjaGVkX2VudGl0eSAqbGFzdDsKQEAgLTE0MywxMiArMTQzLDMz IEBACiAjZW5kaWYKIAlTRVFfcHJpbnRmKG0sICIgIC4lLTMwczogJWxkXG4iLCAibnJfc3ByZWFk X292ZXIiLAogCQkJY2ZzX3JxLT5ucl9zcHJlYWRfb3Zlcik7CisJKi8KKworCS8qIGdldCB0aGUg bGFzdC1ydW5uaW5nIHRhc2sgZm9yIHRoaXMgcXVldWUgKi8KKyAgICAgICAgc3RydWN0IHJiX25v ZGUqIGxhc3R0YXNrID0gZmlyc3RfZmFpcihjZnNfcnEpOworICAgICAgICAvKiBpZiBpdCdzIG51 bGwsIHRoaXMgY29yZSBpcyBpZGxlICovCisgICAgICAgIGlmKCFsYXN0dGFzayl7CisgICAgICAg ICAgICAgICAgU0VRX3ByaW50ZihtLCAiQ1BVICVkOiAwIGlkbGVcbiIsIGNwdSk7CisgICAgICAg ICAgICAgICAgcmV0dXJuOworICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qg dGFza19zdHJ1Y3QqIHRhc2sgPSByYl9lbnRyeShsYXN0dGFzaywgc3RydWN0IHRhc2tfc3RydWN0 LCBzZS5ydW5fbm9kZSk7CisgICAgICAgICAgICAgICAgU0VRX3ByaW50ZihtLCAiQ1BVICVkOiAl ZCAlcyIsIGNwdSwgdGFzay0+cGlkLCB0YXNrLT5jb21tKTsKKyAgICAgICAgICAgICAgICAvKiBu b3cgc2VlIHdoYXQgZWxzZSB3YXMgb24gdGhpcyBydW5xdWV1ZSAqLworICAgICAgICAgICAgICAg IGxhc3R0YXNrID0gcmJfbmV4dChsYXN0dGFzayk7CisgICAgICAgICAgICAgICAgd2hpbGUobGFz dHRhc2sgIT0gTlVMTCl7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrID0gcmJfZW50cnko bGFzdHRhc2ssIHN0cnVjdCB0YXNrX3N0cnVjdCwgc2UucnVuX25vZGUpOworICAgICAgICAgICAg ICAgICAgICAgICAgU0VRX3ByaW50ZihtLCAiICVkICVzIiwgdGFzay0+cGlkLCB0YXNrLT5jb21t KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3R0YXNrID0gcmJfbmV4dChsYXN0dGFzayk7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFNFUV9wcmludGYobSwgIlxuIik7 CisgICAgICAgIH0KKwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9jcHUoc3RydWN0IHNlcV9maWxl ICptLCBpbnQgY3B1KQogewogCXN0cnVjdCBycSAqcnEgPSAmcGVyX2NwdShydW5xdWV1ZXMsIGNw dSk7Ci0KKy8qCiAjaWZkZWYgQ09ORklHX1g4NgogCXsKIAkJdW5zaWduZWQgaW50IGZyZXEgPSBj cHVfa2h6ID8gOiAxOwpAQCAtMTg4LDE3ICsyMDksMTcgQEAKIAlQKGNwdV9sb2FkWzRdKTsKICN1 bmRlZiBQCiAjdW5kZWYgUE4KLQorKi8KIAlwcmludF9jZnNfc3RhdHMobSwgY3B1KTsKIAotCXBy aW50X3JxKG0sIHJxLCBjcHUpOworCS8vcHJpbnRfcnEobSwgcnEsIGNwdSk7CiB9CiAKIHN0YXRp YyBpbnQgc2NoZWRfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJ dTY0IG5vdyA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsKIAlpbnQgY3B1OwotCisvKgogCVNF UV9wcmludGYobSwgIlNjaGVkIERlYnVnIFZlcnNpb246IHYwLjA3LCAlcyAlLipzXG4iLAogCQlp bml0X3V0c25hbWUoKS0+cmVsZWFzZSwKIAkJKGludClzdHJjc3BuKGluaXRfdXRzbmFtZSgpLT52 ZXJzaW9uLCAiICIpLApAQCAtMjE4LDExICsyMzksMTEgQEAKIAlQKHN5c2N0bF9zY2hlZF9mZWF0 dXJlcyk7CiAjdW5kZWYgUE4KICN1bmRlZiBQCi0KKyovCiAJZm9yX2VhY2hfb25saW5lX2NwdShj cHUpCiAJCXByaW50X2NwdShtLCBjcHUpOwogCi0JU0VRX3ByaW50ZihtLCAiXG4iKTsKKwkvL1NF UV9wcmludGYobSwgIlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtTnVyIGxpbnV4LTIuNi4y NC4zL2tlcm5lbC9zY2hlZF9kZWJ1Zy5vbGQgbGludXgtMi42LjI0LjMtdGhlcm0va2VybmVsL3Nj aGVkX2RlYnVnLm9sZAotLS0gbGludXgtMi42LjI0LjMva2VybmVsL3NjaGVkX2RlYnVnLm9sZAkx OTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysgbGludXgtMi42LjI0LjMtdGhl cm0va2VybmVsL3NjaGVkX2RlYnVnLm9sZAkyMDA4LTAyLTI2IDE0OjQ0OjUzLjAwMDAwMDAwMCAt MDUwMApAQCAtMCwwICsxLDM5NiBAQAorLyoKKyAqIGtlcm5lbC90aW1lL3NjaGVkX2RlYnVnLmMK KyAqCisgKiBQcmludCB0aGUgQ0ZTIHJidHJlZQorICoKKyAqIENvcHlyaWdodChDKSAyMDA3LCBS ZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh cworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKwor I2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2lu Y2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNp bmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisKKy8qCisgKiBUaGlzIGFsbG93cyBwcmludGluZyBi b3RoIHRvIC9wcm9jL3NjaGVkX2RlYnVnIGFuZAorICogdG8gdGhlIGNvbnNvbGUKKyAqLworI2Rl ZmluZSBTRVFfcHJpbnRmKG0sIHguLi4pCQkJXAorIGRvIHsJCQkJCQlcCisJaWYgKG0pCQkJCQlc CisJCXNlcV9wcmludGYobSwgeCk7CQlcCisJZWxzZQkJCQkJXAorCQlwcmludGsoeCk7CQkJXAor IH0gd2hpbGUgKDApCisKKy8qCisgKiBFYXNlIHRoZSBwcmludGluZyBvZiBuc2VjIGZpZWxkczoK KyAqLworc3RhdGljIGxvbmcgbG9uZyBuc2VjX2hpZ2godW5zaWduZWQgbG9uZyBsb25nIG5zZWMp Cit7CisJaWYgKChsb25nIGxvbmcpbnNlYyA8IDApIHsKKwkJbnNlYyA9IC1uc2VjOworCQlkb19k aXYobnNlYywgMTAwMDAwMCk7CisJCXJldHVybiAtbnNlYzsKKwl9CisJZG9fZGl2KG5zZWMsIDEw MDAwMDApOworCisJcmV0dXJuIG5zZWM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5zZWNf bG93KHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjKQoreworCWlmICgobG9uZyBsb25nKW5zZWMgPCAw KQorCQluc2VjID0gLW5zZWM7CisKKwlyZXR1cm4gZG9fZGl2KG5zZWMsIDEwMDAwMDApOworfQor CisjZGVmaW5lIFNQTElUX05TKHgpIG5zZWNfaGlnaCh4KSwgbnNlY19sb3coeCkKKworc3RhdGlj IHZvaWQKK3ByaW50X3Rhc2soc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcnEgKnJxLCBzdHJ1 Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJaWYgKHJxLT5jdXJyID09IHApCisJCVNFUV9wcmludGYo bSwgIlIiKTsKKwllbHNlCisJCVNFUV9wcmludGYobSwgIiAiKTsKKworCVNFUV9wcmludGYobSwg IiUxNXMgJTVkICU5TGQuJTA2bGQgJTlMZCAlNWQgIiwKKwkJcC0+Y29tbSwgcC0+cGlkLAorCQlT UExJVF9OUyhwLT5zZS52cnVudGltZSksCisJCShsb25nIGxvbmcpKHAtPm52Y3N3ICsgcC0+bml2 Y3N3KSwKKwkJcC0+cHJpbyk7CisjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKKwlTRVFfcHJpbnRm KG0sICIlOUxkLiUwNmxkICU5TGQuJTA2bGQgJTlMZC4lMDZsZFxuIiwKKwkJU1BMSVRfTlMocC0+ c2UudnJ1bnRpbWUpLAorCQlTUExJVF9OUyhwLT5zZS5zdW1fZXhlY19ydW50aW1lKSwKKwkJU1BM SVRfTlMocC0+c2Uuc3VtX3NsZWVwX3J1bnRpbWUpKTsKKyNlbHNlCisJU0VRX3ByaW50ZihtLCAi JTE1TGQgJTE1TGQgJTE1TGQuJTA2bGQgJTE1TGQuJTA2bGQgJTE1TGQuJTA2bGRcbiIsCisJCTBM TCwgMExMLCAwTEwsIDBMLCAwTEwsIDBMLCAwTEwsIDBMKTsKKyNlbmRpZgorfQorCitzdGF0aWMg dm9pZCBwcmludF9ycShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBycSAqcnEsIGludCBycV9j cHUpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdz OworCisJU0VRX3ByaW50ZihtLAorCSJcbnJ1bm5hYmxlIHRhc2tzOlxuIgorCSIgICAgICAgICAg ICB0YXNrICAgUElEICAgICAgICAgdHJlZS1rZXkgIHN3aXRjaGVzICBwcmlvIgorCSIgICAgIGV4 ZWMtcnVudGltZSAgICAgICAgIHN1bS1leGVjICAgICAgICBzdW0tc2xlZXBcbiIKKwkiLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCSItLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwor CXJlYWRfbG9ja19pcnFzYXZlKCZ0YXNrbGlzdF9sb2NrLCBmbGFncyk7CisKKwlkb19lYWNoX3Ro cmVhZChnLCBwKSB7CisJCWlmICghcC0+c2Uub25fcnEgfHwgdGFza19jcHUocCkgIT0gcnFfY3B1 KQorCQkJY29udGludWU7CisKKwkJcHJpbnRfdGFzayhtLCBycSwgcCk7CisJfSB3aGlsZV9lYWNo X3RocmVhZChnLCBwKTsKKworCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnRhc2tsaXN0X2xvY2ss IGZsYWdzKTsKK30KKwordm9pZCBwcmludF9jZnNfcnEoc3RydWN0IHNlcV9maWxlICptLCBpbnQg Y3B1LCBzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCit7CisJczY0IE1JTl92cnVudGltZSA9IC0xLCBt aW5fdnJ1bnRpbWUsIG1heF92cnVudGltZSA9IC0xLAorCQlzcHJlYWQsIHJxMF9taW5fdnJ1bnRp bWUsIHNwcmVhZDA7CisJc3RydWN0IHJxICpycSA9ICZwZXJfY3B1KHJ1bnF1ZXVlcywgY3B1KTsK KwlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpsYXN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlT RVFfcHJpbnRmKG0sICJcbmNmc19ycVxuIik7CisKKwlTRVFfcHJpbnRmKG0sICIgIC4lLTMwczog JUxkLiUwNmxkXG4iLCAiZXhlY19jbG9jayIsCisJCQlTUExJVF9OUyhjZnNfcnEtPmV4ZWNfY2xv Y2spKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOworCWlmIChjZnNf cnEtPnJiX2xlZnRtb3N0KQorCQlNSU5fdnJ1bnRpbWUgPSAoX19waWNrX25leHRfZW50aXR5KGNm c19ycSkpLT52cnVudGltZTsKKwlsYXN0ID0gX19waWNrX2xhc3RfZW50aXR5KGNmc19ycSk7CisJ aWYgKGxhc3QpCisJCW1heF92cnVudGltZSA9IGxhc3QtPnZydW50aW1lOworCW1pbl92cnVudGlt ZSA9IHJxLT5jZnMubWluX3ZydW50aW1lOworCXJxMF9taW5fdnJ1bnRpbWUgPSBwZXJfY3B1KHJ1 bnF1ZXVlcywgMCkuY2ZzLm1pbl92cnVudGltZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZy cS0+bG9jaywgZmxhZ3MpOworCVNFUV9wcmludGYobSwgIiAgLiUtMzBzOiAlTGQuJTA2bGRcbiIs ICJNSU5fdnJ1bnRpbWUiLAorCQkJU1BMSVRfTlMoTUlOX3ZydW50aW1lKSk7CisJU0VRX3ByaW50 ZihtLCAiICAuJS0zMHM6ICVMZC4lMDZsZFxuIiwgIm1pbl92cnVudGltZSIsCisJCQlTUExJVF9O UyhtaW5fdnJ1bnRpbWUpKTsKKwlTRVFfcHJpbnRmKG0sICIgIC4lLTMwczogJUxkLiUwNmxkXG4i LCAibWF4X3ZydW50aW1lIiwKKwkJCVNQTElUX05TKG1heF92cnVudGltZSkpOworCXNwcmVhZCA9 IG1heF92cnVudGltZSAtIE1JTl92cnVudGltZTsKKwlTRVFfcHJpbnRmKG0sICIgIC4lLTMwczog JUxkLiUwNmxkXG4iLCAic3ByZWFkIiwKKwkJCVNQTElUX05TKHNwcmVhZCkpOworCXNwcmVhZDAg PSBtaW5fdnJ1bnRpbWUgLSBycTBfbWluX3ZydW50aW1lOworCVNFUV9wcmludGYobSwgIiAgLiUt MzBzOiAlTGQuJTA2bGRcbiIsICJzcHJlYWQwIiwKKwkJCVNQTElUX05TKHNwcmVhZDApKTsKKwlT RVFfcHJpbnRmKG0sICIgIC4lLTMwczogJWxkXG4iLCAibnJfcnVubmluZyIsIGNmc19ycS0+bnJf cnVubmluZyk7CisJU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVsZFxuIiwgImxvYWQiLCBjZnNf cnEtPmxvYWQud2VpZ2h0KTsKKyNpZmRlZiBDT05GSUdfU0NIRURTVEFUUworCVNFUV9wcmludGYo bSwgIiAgLiUtMzBzOiAlZFxuIiwgImJrbF9jb3VudCIsCisJCQlycS0+YmtsX2NvdW50KTsKKyNl bmRpZgorCVNFUV9wcmludGYobSwgIiAgLiUtMzBzOiAlbGRcbiIsICJucl9zcHJlYWRfb3ZlciIs CisJCQljZnNfcnEtPm5yX3NwcmVhZF9vdmVyKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfY3B1 KHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcnEgKnJxID0gJnBlcl9j cHUocnVucXVldWVzLCBjcHUpOworCisjaWZkZWYgQ09ORklHX1g4NgorCXsKKwkJdW5zaWduZWQg aW50IGZyZXEgPSBjcHVfa2h6ID8gOiAxOworCisJCVNFUV9wcmludGYobSwgIlxuY3B1IyVkLCAl dS4lMDN1IE1IelxuIiwKKwkJCSAgIGNwdSwgZnJlcSAvIDEwMDAsIChmcmVxICUgMTAwMCkpOwor CX0KKyNlbHNlCisJU0VRX3ByaW50ZihtLCAiXG5jcHUjJWRcbiIsIGNwdSk7CisjZW5kaWYKKwor I2RlZmluZSBQKHgpIFwKKwlTRVFfcHJpbnRmKG0sICIgIC4lLTMwczogJUxkXG4iLCAjeCwgKGxv bmcgbG9uZykocnEtPngpKQorI2RlZmluZSBQTih4KSBcCisJU0VRX3ByaW50ZihtLCAiICAuJS0z MHM6ICVMZC4lMDZsZFxuIiwgI3gsIFNQTElUX05TKHJxLT54KSkKKworCVAobnJfcnVubmluZyk7 CisJU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVsdVxuIiwgImxvYWQiLAorCQkgICBycS0+bG9h ZC53ZWlnaHQpOworCVAobnJfc3dpdGNoZXMpOworCVAobnJfbG9hZF91cGRhdGVzKTsKKwlQKG5y X3VuaW50ZXJydXB0aWJsZSk7CisJU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVsdVxuIiwgImpp ZmZpZXMiLCBqaWZmaWVzKTsKKwlQTihuZXh0X2JhbGFuY2UpOworCVAoY3Vyci0+cGlkKTsKKwlQ TihjbG9jayk7CisJUE4oaWRsZV9jbG9jayk7CisJUE4ocHJldl9jbG9ja19yYXcpOworCVAoY2xv Y2tfd2FycHMpOworCVAoY2xvY2tfb3ZlcmZsb3dzKTsKKwlQKGNsb2NrX2RlZXBfaWRsZV9ldmVu dHMpOworCVBOKGNsb2NrX21heF9kZWx0YSk7CisJUChjcHVfbG9hZFswXSk7CisJUChjcHVfbG9h ZFsxXSk7CisJUChjcHVfbG9hZFsyXSk7CisJUChjcHVfbG9hZFszXSk7CisJUChjcHVfbG9hZFs0 XSk7CisjdW5kZWYgUAorI3VuZGVmIFBOCisKKwlwcmludF9jZnNfc3RhdHMobSwgY3B1KTsKKwor CXByaW50X3JxKG0sIHJxLCBjcHUpOworfQorCitzdGF0aWMgaW50IHNjaGVkX2RlYnVnX3Nob3co c3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXU2NCBub3cgPSBrdGltZV90b19ucyhr dGltZV9nZXQoKSk7CisJaW50IGNwdTsKKworCVNFUV9wcmludGYobSwgIlNjaGVkIERlYnVnIFZl cnNpb246IHYwLjA3LCAlcyAlLipzXG4iLAorCQlpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKKwkJ KGludClzdHJjc3BuKGluaXRfdXRzbmFtZSgpLT52ZXJzaW9uLCAiICIpLAorCQlpbml0X3V0c25h bWUoKS0+dmVyc2lvbik7CisKKwlTRVFfcHJpbnRmKG0sICJub3cgYXQgJUx1LiUwNmxkIG1zZWNz XG4iLCBTUExJVF9OUyhub3cpKTsKKworI2RlZmluZSBQKHgpIFwKKwlTRVFfcHJpbnRmKG0sICIg IC4lLTQwczogJUxkXG4iLCAjeCwgKGxvbmcgbG9uZykoeCkpCisjZGVmaW5lIFBOKHgpIFwKKwlT RVFfcHJpbnRmKG0sICIgIC4lLTQwczogJUxkLiUwNmxkXG4iLCAjeCwgU1BMSVRfTlMoeCkpCisJ UE4oc3lzY3RsX3NjaGVkX2xhdGVuY3kpOworCVBOKHN5c2N0bF9zY2hlZF9taW5fZ3JhbnVsYXJp dHkpOworCVBOKHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkpOworCVBOKHN5c2N0bF9z Y2hlZF9iYXRjaF93YWtldXBfZ3JhbnVsYXJpdHkpOworCVBOKHN5c2N0bF9zY2hlZF9jaGlsZF9y dW5zX2ZpcnN0KTsKKwlQKHN5c2N0bF9zY2hlZF9mZWF0dXJlcyk7CisjdW5kZWYgUE4KKyN1bmRl ZiBQCisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwkJcHJpbnRfY3B1KG0sIGNwdSk7CisK KwlTRVFfcHJpbnRmKG0sICJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN5 c3JxX3NjaGVkX2RlYnVnX3Nob3codm9pZCkKK3sKKwlzY2hlZF9kZWJ1Z19zaG93KE5VTEwsIE5V TEwpOworfQorCitzdGF0aWMgaW50IHNjaGVkX2RlYnVnX29wZW4oc3RydWN0IGlub2RlICppbm9k ZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbHAsIHNjaGVk X2RlYnVnX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0 aW9ucyBzY2hlZF9kZWJ1Z19mb3BzID0geworCS5vcGVuCQk9IHNjaGVkX2RlYnVnX29wZW4sCisJ LnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBz aW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfc2NoZWRfZGVidWdf cHJvY2ZzKHZvaWQpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZTsKKworCXBlID0gY3Jl YXRlX3Byb2NfZW50cnkoInNjaGVkX2RlYnVnIiwgMDY0NCwgTlVMTCk7CisJaWYgKCFwZSkKKwkJ cmV0dXJuIC1FTk9NRU07CisKKwlwZS0+cHJvY19mb3BzID0gJnNjaGVkX2RlYnVnX2ZvcHM7CisK KwlyZXR1cm4gMDsKK30KKworX19pbml0Y2FsbChpbml0X3NjaGVkX2RlYnVnX3Byb2Nmcyk7CisK K3ZvaWQgcHJvY19zY2hlZF9zaG93X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3Qg c2VxX2ZpbGUgKm0pCit7CisJdW5zaWduZWQgbG9uZyBucl9zd2l0Y2hlczsKKwl1bnNpZ25lZCBs b25nIGZsYWdzOworCWludCBudW1fdGhyZWFkcyA9IDE7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJ aWYgKGxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncykpIHsKKwkJbnVtX3RocmVhZHMgPSBhdG9t aWNfcmVhZCgmcC0+c2lnbmFsLT5jb3VudCk7CisJCXVubG9ja190YXNrX3NpZ2hhbmQocCwgJmZs YWdzKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlTRVFfcHJpbnRmKG0sICIlcyAoJWQs ICN0aHJlYWRzOiAlZClcbiIsIHAtPmNvbW0sIHAtPnBpZCwgbnVtX3RocmVhZHMpOworCVNFUV9w cmludGYobSwKKwkJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLVxuIik7CisjZGVmaW5lIF9fUChGKSBcCisJU0VRX3ByaW50ZihtLCAiJS0z NXM6JTIxTGRcbiIsICNGLCAobG9uZyBsb25nKUYpCisjZGVmaW5lIFAoRikgXAorCVNFUV9wcmlu dGYobSwgIiUtMzVzOiUyMUxkXG4iLCAjRiwgKGxvbmcgbG9uZylwLT5GKQorI2RlZmluZSBfX1BO KEYpIFwKKwlTRVFfcHJpbnRmKG0sICIlLTM1czolMTRMZC4lMDZsZFxuIiwgI0YsIFNQTElUX05T KChsb25nIGxvbmcpRikpCisjZGVmaW5lIFBOKEYpIFwKKwlTRVFfcHJpbnRmKG0sICIlLTM1czol MTRMZC4lMDZsZFxuIiwgI0YsIFNQTElUX05TKChsb25nIGxvbmcpcC0+RikpCisKKwlQTihzZS5l eGVjX3N0YXJ0KTsKKwlQTihzZS52cnVudGltZSk7CisJUE4oc2Uuc3VtX2V4ZWNfcnVudGltZSk7 CisKKwlucl9zd2l0Y2hlcyA9IHAtPm52Y3N3ICsgcC0+bml2Y3N3OworCisjaWZkZWYgQ09ORklH X1NDSEVEU1RBVFMKKwlQTihzZS53YWl0X3N0YXJ0KTsKKwlQTihzZS5zbGVlcF9zdGFydCk7CisJ UE4oc2UuYmxvY2tfc3RhcnQpOworCVBOKHNlLnNsZWVwX21heCk7CisJUE4oc2UuYmxvY2tfbWF4 KTsKKwlQTihzZS5leGVjX21heCk7CisJUE4oc2Uuc2xpY2VfbWF4KTsKKwlQTihzZS53YWl0X21h eCk7CisJUChzY2hlZF9pbmZvLmJrbF9jb3VudCk7CisJUChzZS5ucl9taWdyYXRpb25zKTsKKwlQ KHNlLm5yX21pZ3JhdGlvbnNfY29sZCk7CisJUChzZS5ucl9mYWlsZWRfbWlncmF0aW9uc19hZmZp bmUpOworCVAoc2UubnJfZmFpbGVkX21pZ3JhdGlvbnNfcnVubmluZyk7CisJUChzZS5ucl9mYWls ZWRfbWlncmF0aW9uc19ob3QpOworCVAoc2UubnJfZm9yY2VkX21pZ3JhdGlvbnMpOworCVAoc2Uu bnJfZm9yY2VkMl9taWdyYXRpb25zKTsKKwlQKHNlLm5yX3dha2V1cHMpOworCVAoc2UubnJfd2Fr ZXVwc19zeW5jKTsKKwlQKHNlLm5yX3dha2V1cHNfbWlncmF0ZSk7CisJUChzZS5ucl93YWtldXBz X2xvY2FsKTsKKwlQKHNlLm5yX3dha2V1cHNfcmVtb3RlKTsKKwlQKHNlLm5yX3dha2V1cHNfYWZm aW5lKTsKKwlQKHNlLm5yX3dha2V1cHNfYWZmaW5lX2F0dGVtcHRzKTsKKwlQKHNlLm5yX3dha2V1 cHNfcGFzc2l2ZSk7CisJUChzZS5ucl93YWtldXBzX2lkbGUpOworCisJeworCQl1NjQgYXZnX2F0 b20sIGF2Z19wZXJfY3B1OworCisJCWF2Z19hdG9tID0gcC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsK KwkJaWYgKG5yX3N3aXRjaGVzKQorCQkJZG9fZGl2KGF2Z19hdG9tLCBucl9zd2l0Y2hlcyk7CisJ CWVsc2UKKwkJCWF2Z19hdG9tID0gLTFMTDsKKworCQlhdmdfcGVyX2NwdSA9IHAtPnNlLnN1bV9l eGVjX3J1bnRpbWU7CisJCWlmIChwLT5zZS5ucl9taWdyYXRpb25zKSB7CisJCQlhdmdfcGVyX2Nw dSA9IGRpdjY0XzY0KGF2Z19wZXJfY3B1LAorCQkJCQkgICAgICAgcC0+c2UubnJfbWlncmF0aW9u cyk7CisJCX0gZWxzZSB7CisJCQlhdmdfcGVyX2NwdSA9IC0xTEw7CisJCX0KKworCQlfX1BOKGF2 Z19hdG9tKTsKKwkJX19QTihhdmdfcGVyX2NwdSk7CisJfQorI2VuZGlmCisJX19QKG5yX3N3aXRj aGVzKTsKKwlTRVFfcHJpbnRmKG0sICIlLTM1czolMjFMZFxuIiwKKwkJICAgIm5yX3ZvbHVudGFy eV9zd2l0Y2hlcyIsIChsb25nIGxvbmcpcC0+bnZjc3cpOworCVNFUV9wcmludGYobSwgIiUtMzVz OiUyMUxkXG4iLAorCQkgICAibnJfaW52b2x1bnRhcnlfc3dpdGNoZXMiLCAobG9uZyBsb25nKXAt Pm5pdmNzdyk7CisKKwlQKHNlLmxvYWQud2VpZ2h0KTsKKwlQKHBvbGljeSk7CisJUChwcmlvKTsK KyN1bmRlZiBQTgorI3VuZGVmIF9fUE4KKyN1bmRlZiBQCisjdW5kZWYgX19QCisKKwl7CisJCXU2 NCB0MCwgdDE7CisKKwkJdDAgPSBzY2hlZF9jbG9jaygpOworCQl0MSA9IHNjaGVkX2Nsb2NrKCk7 CisJCVNFUV9wcmludGYobSwgIiUtMzVzOiUyMUxkXG4iLAorCQkJICAgImNsb2NrLWRlbHRhIiwg KGxvbmcgbG9uZykodDEtdDApKTsKKwl9Cit9CisKK3ZvaWQgcHJvY19zY2hlZF9zZXRfdGFzayhz dHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKKwlwLT5z ZS53YWl0X21heAkJCQk9IDA7CisJcC0+c2Uuc2xlZXBfbWF4CQkJCT0gMDsKKwlwLT5zZS5zdW1f c2xlZXBfcnVudGltZQkJCT0gMDsKKwlwLT5zZS5ibG9ja19tYXgJCQkJPSAwOworCXAtPnNlLmV4 ZWNfbWF4CQkJCT0gMDsKKwlwLT5zZS5zbGljZV9tYXgJCQkJPSAwOworCXAtPnNlLm5yX21pZ3Jh dGlvbnMJCQk9IDA7CisJcC0+c2UubnJfbWlncmF0aW9uc19jb2xkCQk9IDA7CisJcC0+c2UubnJf ZmFpbGVkX21pZ3JhdGlvbnNfYWZmaW5lCT0gMDsKKwlwLT5zZS5ucl9mYWlsZWRfbWlncmF0aW9u c19ydW5uaW5nCT0gMDsKKwlwLT5zZS5ucl9mYWlsZWRfbWlncmF0aW9uc19ob3QJCT0gMDsKKwlw LT5zZS5ucl9mb3JjZWRfbWlncmF0aW9ucwkJPSAwOworCXAtPnNlLm5yX2ZvcmNlZDJfbWlncmF0 aW9ucwkJPSAwOworCXAtPnNlLm5yX3dha2V1cHMJCQk9IDA7CisJcC0+c2UubnJfd2FrZXVwc19z eW5jCQkJPSAwOworCXAtPnNlLm5yX3dha2V1cHNfbWlncmF0ZQkJPSAwOworCXAtPnNlLm5yX3dh a2V1cHNfbG9jYWwJCQk9IDA7CisJcC0+c2UubnJfd2FrZXVwc19yZW1vdGUJCQk9IDA7CisJcC0+ c2UubnJfd2FrZXVwc19hZmZpbmUJCQk9IDA7CisJcC0+c2UubnJfd2FrZXVwc19hZmZpbmVfYXR0 ZW1wdHMJPSAwOworCXAtPnNlLm5yX3dha2V1cHNfcGFzc2l2ZQkJPSAwOworCXAtPnNlLm5yX3dh a2V1cHNfaWRsZQkJCT0gMDsKKwlwLT5zY2hlZF9pbmZvLmJrbF9jb3VudAkJCT0gMDsKKyNlbmRp ZgorCXAtPnNlLnN1bV9leGVjX3J1bnRpbWUJCQk9IDA7CisJcC0+c2UucHJldl9zdW1fZXhlY19y dW50aW1lCQk9IDA7CisJcC0+bnZjc3cJCQkJPSAwOworCXAtPm5pdmNzdwkJCQk9IDA7Cit9CmRp ZmYgLU51ciBsaW51eC0yLjYuMjQuMy9rZXJuZWwvc2NoZWRfZmFpci5jIGxpbnV4LTIuNi4yNC4z LXRoZXJtL2tlcm5lbC9zY2hlZF9mYWlyLmMKLS0tIGxpbnV4LTIuNi4yNC4zL2tlcm5lbC9zY2hl ZF9mYWlyLmMJMjAwOC0wMi0yNSAxOToyMDoyMC4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIu Ni4yNC4zLXRoZXJtL2tlcm5lbC9zY2hlZF9mYWlyLmMJMjAwOC0wNC0yMSAxMjowMDoxMS4wMDAw MDAwMDAgLTA0MDAKQEAgLTk0OCw2ICs5NDgsMTAxIEBACiAJcmV0dXJuIF9fbG9hZF9iYWxhbmNl X2l0ZXJhdG9yKGNmc19ycSwgY2ZzX3JxLT5yYl9sb2FkX2JhbGFuY2VfY3Vycik7CiB9CiAKKwor c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19sb2FkX2JhbGFuY2VfdGhlcm1faXRlcmF0b3Io c3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3QgcmJfbm9kZSAqY3Vycil7CisJLy8gbG9jYWwg aW5mbworCWludCBpbmRleGN0ciA9IDAsIHJldGluZGV4PTA7CisJc3RydWN0IHRhc2tfc3RydWN0 ICpwX3RtcCwgKnBfcmV0OworCXN0cnVjdCByYl9ub2RlICppdGVyPWN1cnI7CisJaW50IGxvd2Vz dF90ZW1wID0gY2ZzX3JxLT5sYXN0X3RoZXJtX2JhbGFuY2VfdGVtcDsKKwlpbnQgbGFzdF9pbmRl eCA9IGNmc19ycS0+bGFzdF90aGVybV9iYWxhbmNlX2luZGV4OworCisJaWYoIWN1cnIpCisJCXJl dHVybiBOVUxMOworCQorCS8vIGlmIGxhc3RfdGhlcm1fYmFsYW5jZV9pbmRleCBpcyAtMSwgdGhl biB0aGlzIGlzIGJlaW5nIGNhbGxlZCBmcm9tCisJLy8gbG9hZF9iYWxhbmNlX3N0YXJ0X3RoZXJt LCBzbyB3ZSBjYW4ganVzdCBsb29rIHRocm91Z2ggdGhlIHdob2xlCisJLy8gcnVucXVldWUgdG8g ZmluZCBzb21ldGhpbmcgY29vbGVyIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgd2hldGhlcgorCS8v IHdlJ3ZlIGFscmVhZHkgdHJpZWQgaXQKKwlpZihsYXN0X2luZGV4ID09IC0xKXsKKwkJd2hpbGUo aXRlcil7CisJCQlwX3RtcCA9IHJiX2VudHJ5KGl0ZXIsIHN0cnVjdCB0YXNrX3N0cnVjdCwgc2Uu cnVuX25vZGUpOworCQkJaWYocF90bXAtPmxhc3R0ZW1wIDwgbG93ZXN0X3RlbXApeworCQkJCXBf cmV0ID0gcF90bXA7CisJCQkJbG93ZXN0X3RlbXAgPSBwX3RtcC0+bGFzdHRlbXA7CisJCQkJcmV0 aW5kZXggPSBpbmRleGN0cjsKKwkJCX0KKwkJCWl0ZXIgPSByYl9uZXh0KGl0ZXIpOworCQkJaW5k ZXhjdHIrKzsKKwkJfQorCX0KKwkvLyBvdGhlcndpc2UsIHdlIHdhbnQgdG8gbG9vayBmb3IKKwkv LyAtIGEgcHJvY2VzcyBvZiBlcXVhbCB0ZW1wZXJhdHVyZSBmdXJ0aGVyIGRvd24gdGhlIHF1ZXVl CisJLy8gLSB0aGUgbmV4dC1sb3dlc3QgdGVtcGVyYXR1cmUKKwllbHNleworCQlpbnQgc2Vjb25k X2xvd2VzdF90ZW1wPTEwMDsgLy8gc2VlIGJlbG93CisKKwkJLy8gc28gZmlyc3Qgd2UgbG9vayB0 aHJvdWdoIGZvciB0aGUgbmV4dCBlbnRyeSB3aXRoIHRoZSBzYW1lIHRlbXBlcmF0dXJlCisJCS8v IHRoZSBjb21tZW50cyBvbiBfX2xvYWRfYmFsYW5jZV9pdGVyYXRvciBzdWdnZXN0IGRlcXVldWVz IGNhbiBoYXBwZW4gZGVzcGl0ZQorCQkvLyB0aGUgbG9jayBiZWluZyBoZWxkLCBidXQgaSdtIGFz c3VtaW5nIHF1ZXVlaW5nIGNhbid0IGhhcHBlbiwgc28gd2UgZG9uJ3QgaGF2ZQorCQkvLyB0byB3 b3JyeSBhYm91dCBuZXcsIGxvd2VyLXRlbXBlcmF0dXJlZCBwcm9jZXNzZXMgbWFnaWNhbGx5IGFw cGVhcmluZy4gIHRoaXMKKwkJLy8gYXNzdW1wdGlvbiBzaW1wbGlmaWVzIHRoZSBzZWFyY2ggZm9y IG5leHQtY29vbGVzdCB0YXNrcy4KKwkJd2hpbGUoaXRlcil7CisJCQlwX3RtcCA9IHJiX2VudHJ5 KGl0ZXIsIHN0cnVjdCB0YXNrX3N0cnVjdCwgc2UucnVuX25vZGUpOworCQkJaWYoIChwX3RtcC0+ bGFzdHRlbXAgPD0gbG93ZXN0X3RlbXApICYmIGluZGV4Y3RyID4gbGFzdF9pbmRleCl7CisJCQkJ Ly8gd2UncmUganVzdCBsb29raW5nIGZvciB0aGUgbmV4dCBvbmUgZG93biB0aGUgbGluZSwgCisJ CQkJLy8gYW5kIGl0IGxvb2tzIGxpa2Ugd2UndmUgZm91bmQgaXQsIHNvIHdlIHVwZGF0ZSBjZl9y cSBzdGF0cworCQkJCS8vIGFuZCByZXR1cm4gZnJvbSBoZXJlCisJCQkJY2ZzX3JxLT5sYXN0X3Ro ZXJtX2JhbGFuY2VfdGVtcCA9IHBfdG1wLT5sYXN0dGVtcDsKKwkJCQljZnNfcnEtPmxhc3RfdGhl cm1fYmFsYW5jZV9pbmRleCA9IGluZGV4Y3RyOworCQkJCXJldHVybiBwX3RtcDsKKwkJCX1lbHNl IGlmKHBfdG1wLT5sYXN0dGVtcCA+IGxvd2VzdF90ZW1wICYmIHBfdG1wIDwgc2Vjb25kX2xvd2Vz dF90ZW1wKXsKKwkJCQlzZWNvbmRfbG93ZXN0X3RlbXAgPSBwX3RtcC0+bGFzdHRlbXA7CisJCQl9 CisJCQlpbmRleGN0cisrOworCQkJaXRlciA9IHJiX25leHQoaXRlcik7CisJCX0KKworCQkvLyBp ZiB3ZSBnZXQgaGVyZSwgaXQgbWVhbnMgd2Ugd2FuZGVyZWQgb2ZmIHRoZSBlbmQgb2YgdGhlIHJ1 bnF1ZXVlIHdpdGhvdXQgZmluZGluZworCQkvLyBhbnl0aGluZyBlbHNlIHdpdGggdGhlIHNhbWUg bG93ZXN0IHRlbXBlcmF0dXJlLiAgaG93ZXZlciwgd2Uga25vdyBub3cgd2hhdCB0aGUgCisJCS8v IHNlY29uZCBsb3dlc3QgdGVtcGVyYXR1cmUgb2YgdGhlIHJ1bnF1ZXVlIGlzIChzZWNvbmRfbG93 ZXN0X3RlbXAgYXMgY2FsY3VsYXRlZCBhYm92ZSksCisJCS8vIHNvIHdlIGNhbiBqdXN0IGxvb2sg Zm9yIHRoZSBmaXJzdCB0YXNrIHdpdGggdGhhdCB0ZW1wLgorCisJCS8vIHRoaXMgbWFrZXMgdXNl IG9mIHRoZSBhYm92ZSBhc3N1bXB0aW9uIHRoYXQgdGFza3MgY2FuIG9ubHkgYmUgZGVxdWV1ZWQg YnV0IG5vdCBlbnF1ZXVlZAorCQlpdGVyID0gY3VycjsgLy8gcmVzZXQgdGhlIGl0ZXJhdG9yCisJ CWluZGV4Y3RyPTA7CisJCXdoaWxlKGl0ZXIpeworCQkJcF90bXAgPSByYl9lbnRyeShpdGVyLCBz dHJ1Y3QgdGFza19zdHJ1Y3QsIHNlLnJ1bl9ub2RlKTsKKwkJCWlmKHBfdG1wLT5sYXN0dGVtcCA9 PSBzZWNvbmRfbG93ZXN0X3RlbXApeworCQkJCS8vIHdlIGZvdW5kIHNvbWV0aGluZywgc28gbGV0 J3MgdXBkYXRlIHRoZSBzdGF0cyBhbmQgcmV0dXJuIGl0CisJCQkJY2ZzX3JxLT5sYXN0X3RoZXJt X2JhbGFuY2VfdGVtcCA9IHBfdG1wLT5sYXN0dGVtcDsKKwkJCQljZnNfcnEtPmxhc3RfdGhlcm1f YmFsYW5jZV9pbmRleCA9IGluZGV4Y3RyOworCQkJCXJldHVybiBwX3RtcDsKKwkJCX0KKwkJCWlu ZGV4Y3RyKys7CisJCQlpdGVyID0gcmJfbmV4dChpdGVyKTsKKwkJfQorCX0KKworCS8vIHVwZGF0 ZSBzdGF0cyBpbiBjYXNlIHdlIGNvbWUgYmFjayBoZXJlCisJY2ZzX3JxLT5sYXN0X3RoZXJtX2Jh bGFuY2VfdGVtcCA9IGxvd2VzdF90ZW1wOworCWNmc19ycS0+bGFzdF90aGVybV9iYWxhbmNlX2lu ZGV4ID0gcmV0aW5kZXg7CisJcmV0dXJuIHBfcmV0OworCit9CisKK3N0YXRpYyBzdHJ1Y3QgdGFz a19zdHJ1Y3QgKmxvYWRfYmFsYW5jZV9zdGFydF90aGVybSh2b2lkICphcmcpeworCXN0cnVjdCBj ZnNfcnEgKmNmc19ycSA9IGFyZzsKKwljZnNfcnEtPmxhc3RfdGhlcm1fYmFsYW5jZV9pbmRleCA9 IC0xOworCWNmc19ycS0+bGFzdF90aGVybV9iYWxhbmNlX3RlbXAgPSAxMDA7IAorCXJldHVybiBf X2xvYWRfYmFsYW5jZV90aGVybV9pdGVyYXRvcihjZnNfcnEsIGZpcnN0X2ZhaXIoY2ZzX3JxKSk7 Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxvYWRfYmFsYW5jZV9uZXh0X3RoZXJt KHZvaWQgKmFyZyl7CisJc3RydWN0IGNmc19ycSAqY2ZzX3JxID0gYXJnOworCXJldHVybiBfX2xv YWRfYmFsYW5jZV90aGVybV9pdGVyYXRvcihjZnNfcnEsIGZpcnN0X2ZhaXIoY2ZzX3JxKSk7Cit9 CisKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogc3RhdGljIGludCBjZnNfcnFfYmVz dF9wcmlvKHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKIHsKQEAgLTk2Nyw2ICsxMDYyLDcgQEAKIH0K ICNlbmRpZgogCisKIHN0YXRpYyB1bnNpZ25lZCBsb25nCiBsb2FkX2JhbGFuY2VfZmFpcihzdHJ1 Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAogCQkgIHVu c2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwKQEAgLTk3NiwxMCArMTA3MiwxNyBAQAogCXN0cnVj dCBjZnNfcnEgKmJ1c3lfY2ZzX3JxOwogCWxvbmcgcmVtX2xvYWRfbW92ZSA9IG1heF9sb2FkX21v dmU7CiAJc3RydWN0IHJxX2l0ZXJhdG9yIGNmc19ycV9pdGVyYXRvcjsKKwkKIAogCWNmc19ycV9p dGVyYXRvci5zdGFydCA9IGxvYWRfYmFsYW5jZV9zdGFydF9mYWlyOwogCWNmc19ycV9pdGVyYXRv ci5uZXh0ID0gbG9hZF9iYWxhbmNlX25leHRfZmFpcjsKIAorCWlmKHNjaGVkX3RoZXJtYWwgPT0g Mil7CisJCS8vIHVzZSBvdXIgbmV3IGl0ZXJhdG9ycworCQljZnNfcnFfaXRlcmF0b3Iuc3RhcnQg PSBsb2FkX2JhbGFuY2Vfc3RhcnRfdGhlcm07CisJCWNmc19ycV9pdGVyYXRvci5uZXh0ID0gbG9h ZF9iYWxhbmNlX25leHRfdGhlcm07CisJfQorCiAJZm9yX2VhY2hfbGVhZl9jZnNfcnEoYnVzaWVz dCwgYnVzeV9jZnNfcnEpIHsKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogCQlzdHJ1 Y3QgY2ZzX3JxICp0aGlzX2Nmc19ycTsKQEAgLTEwMjQsOSArMTEyNywyNCBAQAogewogCXN0cnVj dCBjZnNfcnEgKmJ1c3lfY2ZzX3JxOwogCXN0cnVjdCBycV9pdGVyYXRvciBjZnNfcnFfaXRlcmF0 b3I7CisJc3RhdGljIGludCBkYmdmbGFnID0gMTsKIAogCWNmc19ycV9pdGVyYXRvci5zdGFydCA9 IGxvYWRfYmFsYW5jZV9zdGFydF9mYWlyOwogCWNmc19ycV9pdGVyYXRvci5uZXh0ID0gbG9hZF9i YWxhbmNlX25leHRfZmFpcjsKKwkKKwkvKiBpIHRoaW5rIHlvdSBjYW4gb25seSBnZXQgaGVyZSBm cm9tIG1pZ3JhdGlvbl90aHJlYWQKKwkgICB3aGljaCBzZXRzIGZyb21fYWN0aXZlIGJhbGFuY2Us IGFuZCBpdCBvbmx5IGRvZXMgdGhhdAorICAgICAgICAgICB3aGVuIHNjaGVkX3RoZXJtYWwgaXMg MywgYnV0IGp1c3QgaW4gY2FzZSBpJ20gbWlzc2luZworICAgICAgICAgICBhIGNhbGwgc2l0ZSBp J2xsIGRvdWJsZS1jaGVjayBzY2hlZF90aGVybWFsJ3MgdmFsdWUKKwkgICBoZXJlIGFzIHdlbGwu ICovCisJaWYoYnVzaWVzdC0+ZnJvbV9hY3RpdmVfYmFsYW5jZSA9PSAxICYmIHNjaGVkX3RoZXJt YWwgPT0gMyl7CisJCWlmKGRiZ2ZsYWc9PTEpeworCQkJLy9wcmludGsoS0VSTl9BTEVSVCAibW92 ZV9vbmVfdGFza19mYWlyK3RoZXJtXG4iKTsKKwkJCWRiZ2ZsYWc9MDsKKwkJfQorCQljZnNfcnFf aXRlcmF0b3Iuc3RhcnQgPSBsb2FkX2JhbGFuY2Vfc3RhcnRfdGhlcm07CisJCWNmc19ycV9pdGVy YXRvci5uZXh0ID0gbG9hZF9iYWxhbmNlX25leHRfdGhlcm07CisJfQogCiAJZm9yX2VhY2hfbGVh Zl9jZnNfcnEoYnVzaWVzdCwgYnVzeV9jZnNfcnEpIHsKIAkJLyoKQEAgLTExMzYsNyArMTI1NCw3 IEBACiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKIAlwcmludF9jZnNfcnEobSwgY3B1 LCAmY3B1X3JxKGNwdSktPmNmcyk7CiAjZW5kaWYKLQlmb3JfZWFjaF9sZWFmX2Nmc19ycShjcHVf cnEoY3B1KSwgY2ZzX3JxKQotCQlwcmludF9jZnNfcnEobSwgY3B1LCBjZnNfcnEpOworCS8qZm9y X2VhY2hfbGVhZl9jZnNfcnEoY3B1X3JxKGNwdSksIGNmc19ycSkKKwkJcHJpbnRfY2ZzX3JxKG0s IGNwdSwgY2ZzX3JxKTsqLwogfQogI2VuZGlmCmRpZmYgLU51ciBsaW51eC0yLjYuMjQuMy9rZXJu ZWwvc2NoZWRfdGVtcC5jIGxpbnV4LTIuNi4yNC4zLXRoZXJtL2tlcm5lbC9zY2hlZF90ZW1wLmMK LS0tIGxpbnV4LTIuNi4yNC4zL2tlcm5lbC9zY2hlZF90ZW1wLmMJMTk2OS0xMi0zMSAxOTowMDow MC4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yNC4zLXRoZXJtL2tlcm5lbC9zY2hlZF90 ZW1wLmMJMjAwOC0wNC0yMSAxMTo1Nzo1My4wMDAwMDAwMDAgLTA0MDAKQEAgLTAsMCArMSwxMzYg QEAKKy8qIAorICogc2NoZWRfdGVtcC5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tvYmplY3Qu aD4KKworI2RlZmluZSBURU1QQkFTRSA4NTAwMAorCisKKy8qIHByb3RvdHlwZXMgYW5kIHN1Y2gg dGhhdCB3ZSBuZWVkIGhlcmUgdGhhdCBhcmUgZGVmaW5lZCBidXQgCisgICBub3QgcHJvdG90eXBl ZCBpbiBzY2hlZC5jIG9yIHNjaGVkX2ZhaXIuYyAqLworCisjZGVmaW5lIGZvcl9lYWNoX2xlYWZf Y2ZzX3JxKHJxLCBjZnMpIFwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNmc19ycSwgJnJxLT5sZWFm X2Nmc19ycV9saXN0LCBsZWFmX2Nmc19ycV9saXN0KQorCitzdGF0aWMgdm9pZCBwdWxsX3Rhc2so c3RydWN0IHJxICpzcmNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKKwlzdHJ1Y3QgcnEgKnRo aXNfcnEsIGludCB0aGlzX2NwdSk7CisKK3N0YXRpYyBpbnQgY2FuX21pZ3JhdGVfdGFzayhzdHJ1 Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBycSAqcnEsIAorCWludCB0aGlzX2NwdSwgc3RydWN0 IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAorCWludCAqYWxsX3Bp bm5lZCk7CisKKy8qIHRoaXMgc3R1ZmYgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSBpcyBuZWNlc3Nh cnkgZm9yIGFkZGluZworICAgdGhlIGZpbGUgdW5kZXIgL3N5cy8gdGhhdCBsZXRzIHVzIHR1cm4g b24vb2ZmIHRoZXJtYWwKKyAgIHNjaGVkdWxpbmcgbWV0aG9kcy4gIFNwZWNpZmljYWxseSwgaXQg c2V0cyB0aGUgdmFsdWUgb2YKKyAgIGludCBzY2hlZF90aGVybWFsLCB3aGljaCBpcyBkZWZpbmVk IGFuZCB1c2VkIHZhcmlvdXNseSBpbgorICAgc2NoZWQuYy4gKi8KKworc3RydWN0IGtvYmplY3Qg dGVtcHNjaGVkOworCitzdGF0aWMgc3NpemVfdCBzY2hlZF90ZW1wX3Nob3coc3RydWN0IHN5c19k ZXZpY2UgKmRldiwgY2hhciAqcGFnZSl7CisJcmV0dXJuIHNwcmludGYocGFnZSwgIiV1XG4iLCBz Y2hlZF90aGVybWFsKTsKK30KKworLyogdXBkYXRlIHRoaXMgYW55IHRpbWUgYSBuZXcgdmFsaWQg dmFsdWUgZm9yIHNjaGVkX3RoZXJtYWwgaXMgYWRkZWQgKi8KK3N0YXRpYyBzc2l6ZV90IHNjaGVk X3RlbXBfc3RvcmUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCAKKwlz aXplX3QgY291bnQpeworCXN3aXRjaChidWZbMF0peworCQljYXNlICcwJzoKKwkJCXNjaGVkX3Ro ZXJtYWw9MDsKKwkJCWJyZWFrOworCQljYXNlICcxJzoKKwkJCXNjaGVkX3RoZXJtYWw9MTsKKwkJ CWJyZWFrOworCQljYXNlICcyJzoKKwkJCXNjaGVkX3RoZXJtYWw9MjsKKwkJCWJyZWFrOworCQlj YXNlICczJzoKKwkJCXNjaGVkX3RoZXJtYWw9MzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ cmV0dXJuIC1FSU5WQUw7CisJfTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qIFNZU0RFVl9BVFRS IGFwcGVhcnMgdG8gYmUgYSBtYWNybyB3aGljaCwgYW1vbmcgb3RoZXIgdGhpbmdzLCBjcmVhdGVz CisgICBhdHRyX3NjaGVkX3RoZXJtYWwgKi8KK3N0YXRpYyBTWVNERVZfQVRUUihzY2hlZF90aGVy bWFsLCAwNjQ0LCBzY2hlZF90ZW1wX3Nob3csIHNjaGVkX3RlbXBfc3RvcmUpOworCit2b2lkIGlu aXRfc3lzZnNfdGVtcCh2b2lkKXsKKwlrb2JqZWN0X3NldF9uYW1lKCZ0ZW1wc2NoZWQsICJzY2hl ZF90ZW1wIik7CisJa29iamVjdF9yZWdpc3RlcigmdGVtcHNjaGVkKTsKKwlzeXNmc19jcmVhdGVf ZmlsZSgmdGVtcHNjaGVkLCAmYXR0cl9zY2hlZF90aGVybWFsLmF0dHIpOworfQorCisvKiB0aGlz IG1ldGhvZCBpcyBjYWxsZWQgaW4gdmFyaW91cyBwbGFjZXMgdG8gZ2V0IHRoZSB0ZW1wZXJhdHVy ZQorICAgb2YgYSBnaXZlbiBjb3JlIChvciwgcHJhY3RpY2FsbHksIGZvciBhbiBhcHBsaWNhdGlv bikuCisKKyAgIHRoaXMgaXMgbm90IGdlbmVyYWwgcHVycG9zZSBhbmQgaXMgcHJldHR5IG11Y2gg anVzdCBsaWZ0ZWQgZnJvbQorICAgdGhlIGNvcmV0ZW1wIGRyaXZlci4KKyovCitpbnQgZ2V0X3Rl bXBlcmF0dXJlKGludCBjcHUpeworCisJdTMyIGVheCwgZWR4OworCWludCB0ZW1wZXJhdHVyZTsK KwkvKiB0aGUgQ29yZTIgTVNSX1RIRVJNX1NUQVRVUyBpcyByZXBvcnRlZCBhcyBhIGRlbHRhCisJ ICAgZnJvbSBhIGJhc2UgdGVtcGVyYXR1cmU7IGluIG91ciBjYXNlLCA4NTAwMCBtQyAqLworCQor CXJkbXNyX29uX2NwdShjcHUsIE1TUl9JQTMyX1RIRVJNX1NUQVRVUywgJmVheCwgJmVkeCk7CisK KwlpZihlYXggJiAweDgwMDAwMDAwKXsKKwkJdGVtcGVyYXR1cmUgPSBURU1QQkFTRSAtICgoKGVh eCA+PiAxNikgJiAweDdmKSAqIDEwMDApOworCQl0ZW1wZXJhdHVyZSA9IHRlbXBlcmF0dXJlIC8g MTAwMDsKKwkJcmV0dXJuIHRlbXBlcmF0dXJlOworCX0KKworCS8vIGVycm9yIGNvZGUKKwlyZXR1 cm4gLTE7Cit9CisKKy8qIGZpbmRfY29vbGVzdF9jcHUgbG9va3MgZm9yIHRoZSBjdXJyZW50IGNv b2xlc3QgY3B1IGluIHRoZSBzeXN0ZW0KKyAqIHRoaXMgaXMgdXN1YWxseSBjYWxsZWQgaW4gdGhl IGNvbnRleHQgb2YgYSBnaXZlbiBwcm9jZXNzLCBzbyB3ZQorICogbmVlZCB0byBvbmx5IHBvbGwg J2xlZ2FsJyBjb3Jlcy4gIGlmIHdlIHdhbnQgdG8ga25vdyBnZW5lcmFsbHkKKyAqIGluc3RlYWQg b2YgaW4gdGhlIGNvbnRleHQgb2YgYSBnaXZlbiBwcm9jZXNzLCBzZXQgcD1OVUxMLgorICoKKyAq IGFnYWluLCBub3QgdGVycmlibHkgZ2VuZXJhbCBwdXJwb3NlIGNvZGUgKGJ1aWxkaW5nIG91ciBv d24gY3B1bWFzaykKKyAqLworaW50IGZpbmRfY29vbGVzdF9jcHUoc3RydWN0IHRhc2tfc3RydWN0 ICpwKXsKKwlpbnQgbnVtY3B1cyA9IDI7IC8vIGhhcmQtY29kZWQgOngKKwljcHVtYXNrX3QgdG1w OworCWludCBjb29sZXN0X3RlbXAgPSAxMDA7CisJaW50IGNvb2xlc3RfY3B1ID0gMDsKKwlpbnQg aSwgdGVtcDsKKwlzdGF0aWMgaW50IG5leHRfY3B1ID0gMDsKKwkvLyBidWlsZCBvdXIgb3duIGNw dW1hc2ssIGJlY2F1c2UganVzdCB1c2luZyBzZXRhbGwKKwkvLyBnaXZlcyB1cyB3YXkgdG9vIG11 Y2gKKwlmb3IoaT0wOyBpPG51bWNwdXM7IGkrKyl7CisJCWNwdV9zZXQoaSwgdG1wKTsKKwl9CisK KwkvKiBub3cgY3JlYXRlIGEgbWFzayB0aGF0IGlzIHRoZSBsZWdhbCBwcm9jZXNzb3JzCisJICAg Zm9yIHRoaXMgdGFzayAqLworCWlmKHApeworCQljcHVzX2FuZCh0bXAsIHRtcCwgcC0+Y3B1c19h bGxvd2VkKTsKKwl9CisKKwkvKiBsb29rIGZvciB0aGUgY29vbGVzdCBjcHUgb2YgdGhvc2UgYWxs b3dlZCAqLworCWZvcl9lYWNoX2NwdV9tYXNrKGksIHRtcCl7CisJCXRlbXAgPSBnZXRfdGVtcGVy YXR1cmUoaSk7CisJCWlmKHRlbXAgPCBjb29sZXN0X3RlbXApeworCQkJY29vbGVzdF90ZW1wID0g dGVtcDsKKwkJCWNvb2xlc3RfY3B1ID0gaTsKKwkJfQorCX0KKwkKKwkvKiBpZiBjb29sZXN0X3Rl bXAgaXMgLTEsIHdlIGdvdCBpbnZhbGlkIGRhdGEKKwkgICBzb21ld2hlcmUsIHNvIHdlJ3JlIGp1 c3QgZ29pbmcgdG8gZGVmYXVsdAorCSAgIHRvIHJvdW5kLXJvYmluIHBsYWNlbWVudC4gKi8KKwlp Zihjb29sZXN0X3RlbXAgPT0gLTEpeworCQljb29sZXN0X2NwdSA9IG5leHRfY3B1OworCQluZXh0 X2NwdSsrOworCQluZXh0X2NwdSA9IG5leHRfY3B1ICUgbnVtY3B1czsKKwl9CisJcmV0dXJuIGNv b2xlc3RfY3B1OworfQpkaWZmIC1OdXIgbGludXgtMi42LjI0LjMva2VybmVsL3NjaGVkX3RlbXAu Y2xhc3MgbGludXgtMi42LjI0LjMtdGhlcm0va2VybmVsL3NjaGVkX3RlbXAuY2xhc3MKLS0tIGxp bnV4LTIuNi4yNC4zL2tlcm5lbC9zY2hlZF90ZW1wLmNsYXNzCTE5NjktMTItMzEgMTk6MDA6MDAu MDAwMDAwMDAwIC0wNTAwCisrKyBsaW51eC0yLjYuMjQuMy10aGVybS9rZXJuZWwvc2NoZWRfdGVt cC5jbGFzcwkyMDA4LTA0LTA5IDEzOjQ1OjQ1LjAwMDAwMDAwMCAtMDQwMApAQCAtMCwwICsxLDE4 MCBAQAorLyogCisgKiBzY2hlZF90ZW1wLmMKKyAqIAorICogdGVtcGVyYXR1cmUtYmFzZWQgc2No ZWR1bGluZyBpbXBsZW1lbnRhdGlvbgorICogKHRyeWluZyB0byByZXdvcmsgaXQgYmFzZWQgb24g YSBDRlMgc2NoZWR1bGluZyBjbGFzcykKKyAqCisgKiB0aGUgdXNlIG9mIHRoZSBSQiB0cmVlIHNl ZW1zIHRvIGJlIHNwZWNpZmljIHRvIHNjaGVkX2ZhaXIKKyAqIHNvIEkgbWF5IGVuZCB1cCBoYXZp bmcgdG8gY29tZSB1cCB3aXRoIGEgY29tcGxldGUgbWV0aG9kIGZvcgorICogbWFuYWdpbmcgdGFz a3MuLi4gb3IgbWF5YmUgaSByZWFsbHkgc2hvdWxkIGp1c3QgbW9ua2V5IGFyb3VuZAorICogd2l0 aCBzdHVmZiBpbnNpZGUgc2NoZWRfZmFpci5jLgorICoKKyAqCisgKiBWYWx1ZXMgb2Ygc2NoZWRf dGhlcm1hbCBkZXRlcm1pbmUgd2hlbiBhbmQgd2hhdCBzb3J0IG9mIAorICogc2NoZWR1bGluZyBk ZWNpc2lvbnMgd2UgbWlnaHQgbWFrZS4gIFRoZSBjdXJyZW50IGxpc3Q6CisgKiAgICAxIC0gUHV0 IGEgbmV3IGpvYiAoc2NoZWRfZm9yaygpIGFuZCBzY2hlZF9leGVjKCkpIG9uCisgKiAgICAgICAg dGhlIGNvb2xlc3QgY29yZS4KKyAqICAgIDIgLSBXaGVuIGEgY29yZSBiZWNvbWVzIGlkbGUsIGxv b2sgZm9yIHRoZSBjb29sZXN0IAorICogICAgICAgIChvciBob3R0ZXN0KSB0YXNrIHdlIGNhbiBm aW5kIGFuZCBzdGVhbCBpdAorICovCisKKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisKKyNk ZWZpbmUgVEVNUEJBU0UgODUwMDAKKworLyogcHJvdG90eXBlcyBhbmQgc3VjaCB0aGF0IHdlIG5l ZWQgaGVyZSB0aGF0IGFyZSBkZWZpbmVkIGJ1dCAKKyAgIG5vdCBwcm90b3R5cGVkIGluIHNjaGVk LmMgb3Igc2NoZWRfZmFpci5jICovCisKKyNkZWZpbmUgZm9yX2VhY2hfbGVhZl9jZnNfcnEocnEs IGNmcykgXAorCWxpc3RfZm9yX2VhY2hfZW50cnkoY2ZzX3JxLCAmcnEtPmxlYWZfY2ZzX3JxX2xp c3QsIGxlYWZfY2ZzX3JxX2xpc3QpCisKK3N0YXRpYyB2b2lkIHB1bGxfdGFzayhzdHJ1Y3QgcnEg KnNyY19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAorCXN0cnVjdCBycSAqdGhpc19ycSwgaW50 IHRoaXNfY3B1KTsKKworc3RhdGljIGludCBjYW5fbWlncmF0ZV90YXNrKHN0cnVjdCB0YXNrX3N0 cnVjdCAqcCwgc3RydWN0IHJxICpycSwgCisJaW50IHRoaXNfY3B1LCBzdHJ1Y3Qgc2NoZWRfZG9t YWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCisJaW50ICphbGxfcGlubmVkKTsKKwor LyogdGhpcyBzdHVmZiBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlIGlzIG5lY2Vzc2FyeSBmb3IgYWRk aW5nCisgICB0aGUgZmlsZSB1bmRlciAvc3lzLyB0aGF0IGxldHMgdXMgdHVybiBvbi9vZmYgdGhl cm1hbAorICAgc2NoZWR1bGluZyBtZXRob2RzLiAgU3BlY2lmaWNhbGx5LCBpdCBzZXRzIHRoZSB2 YWx1ZSBvZgorICAgaW50IHNjaGVkX3RoZXJtYWwsIHdoaWNoIGlzIGRlZmluZWQgYW5kIHVzZWQg dmFyaW91c2x5IGluCisgICBzY2hlZC5jLiAqLworCitzdHJ1Y3Qga29iamVjdCB0ZW1wc2NoZWQ7 CisKK3N0YXRpYyBzc2l6ZV90IHNjaGVkX3RlbXBfc2hvdyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2 LCBjaGFyICpwYWdlKXsKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXVcbiIsIHNjaGVkX3RoZXJt YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBzY2hlZF90ZW1wX3N0b3JlKHN0cnVjdCBzeXNfZGV2 aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwgCisJc2l6ZV90IGNvdW50KXsKKwlzd2l0Y2goYnVm WzBdKXsKKwkJY2FzZSAnMCc6CisJCQlzY2hlZF90aGVybWFsPTA7CisJCQlicmVhazsKKwkJY2Fz ZSAnMSc6CisJCQlzY2hlZF90aGVybWFsPTE7CisJCQlicmVhazsKKwkJY2FzZSAnMic6CisJCQlz Y2hlZF90aGVybWFsPTI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFM OworCX07CisJcmV0dXJuIGNvdW50OworfQorCisvKiBTWVNERVZfQVRUUiBhcHBlYXJzIHRvIGJl IGEgbWFjcm8gd2hpY2gsIGFtb25nIG90aGVyIHRoaW5ncywgY3JlYXRlcworICAgYXR0cl9zY2hl ZF90aGVybWFsICovCitzdGF0aWMgU1lTREVWX0FUVFIoc2NoZWRfdGhlcm1hbCwgMDY0NCwgc2No ZWRfdGVtcF9zaG93LCBzY2hlZF90ZW1wX3N0b3JlKTsKKwordm9pZCBpbml0X3N5c2ZzX3RlbXAo dm9pZCl7CisJa29iamVjdF9zZXRfbmFtZSgmdGVtcHNjaGVkLCAic2NoZWRfdGVtcCIpOworCWtv YmplY3RfcmVnaXN0ZXIoJnRlbXBzY2hlZCk7CisJc3lzZnNfY3JlYXRlX2ZpbGUoJnRlbXBzY2hl ZCwgJmF0dHJfc2NoZWRfdGhlcm1hbC5hdHRyKTsKK30KKworLyogdGhpcyBtZXRob2QgaXMgY2Fs bGVkIGluIHZhcmlvdXMgcGxhY2VzIHRvIGdldCB0aGUgdGVtcGVyYXR1cmUKKyAgIG9mIGEgZ2l2 ZW4gY29yZSAob3IsIHByYWN0aWNhbGx5LCBmb3IgYW4gYXBwbGljYXRpb24pLgorIAorICAgTm90 ZSAxOiBUaGlzIGlzIGN1cnJlbnRseSBub3QgYXQgYWxsIGdlbmVyYWwtcHVycG9zZSwgYW5kIGlz IGluCisgICAgICAgICAgIGZhY3QgcHJldHR5IG11Y2gganVzdCB3aGF0IHlvdSBuZWVkIHRvIGRv IHJlYWQgdGhlCisgICAgICAgICAgIHRlbXBlcmF0dXJlIG9uIENvcmUyLXNlcmllcyBwcm9jZXNz b3JzLiAgQXMgc3VjaCwgdGhlCisgICAgICAgICAgIGNvZGUgaXMgbGFyZ2VseSBsaWZ0ZWQgZnJv bSB0aGUgY29yZXRlbXAgZHJpdmVyLgorCisgICBOb3RlIDI6IFRoaXMgY2FsbHMgcmRtc3Jfb25f Y3B1LCB3aGljaCBldmVudHVhbGx5IGNhbGxzCisgICAgICAgICAgIHNtcF9jYWxsX2Z1bmN0aW9u X3NpbmdsZSwgd2hpY2ggY2FuIGRlYWRsb2NrIGlmCisgICAgICAgICAgIGNhbGxlZCB3aXRoIGlu dGVycnVwdHMgZGlzYWJsZWQuICBUaHVzLCB0aGlzIAorICAgICAgICAgICBmdW5jdGlvbiwgdG9v LCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzCisgICAgICAgICAgIGVuYWJs ZWQuICAoSSd2ZSBhZGRlZCBhIFdBUk5fT04gaGVyZSBmb3IgdGhhdCBjYXNlLikgKi8KK2ludCBn ZXRfdGVtcGVyYXR1cmUoaW50IGNwdSl7CisKKwl1MzIgZWF4LCBlZHg7CisJaW50IHRlbXBlcmF0 dXJlOworCS8qIHRoZSBDb3JlMiBNU1JfVEhFUk1fU1RBVFVTIGlzIHJlcG9ydGVkIGFzIGEgZGVs dGEKKwkgICBmcm9tIGEgYmFzZSB0ZW1wZXJhdHVyZTsgaW4gb3VyIGNhc2UsIDg1MDAwIG1DICov CisJCisJcmRtc3Jfb25fY3B1KGNwdSwgTVNSX0lBMzJfVEhFUk1fU1RBVFVTLCAmZWF4LCAmZWR4 KTsKKworCWlmKGVheCAmIDB4ODAwMDAwMDApeworCQl0ZW1wZXJhdHVyZSA9IFRFTVBCQVNFIC0g KCgoZWF4ID4+IDE2KSAmIDB4N2YpICogMTAwMCk7CisJCXRlbXBlcmF0dXJlID0gdGVtcGVyYXR1 cmUgLyAxMDAwOworCQlyZXR1cm4gdGVtcGVyYXR1cmU7CisJfQorCisJLy8gZXJyb3IgY29kZQor CXJldHVybiAtMTsKK30KKworLyogZmluZF9jb29sZXN0X2NwdSBpcyB1c2VkIGlmIHNjaGVkX3Ro ZXJtYWwgPSAxIAorICoKKyAqIHdlIGhhdmUgdG8gcGFzcyBpbiBwIHRvIG1ha2Ugc3VyZSB3ZSBk b24ndCBwdXQgdGhlCisgKiBwcm9jZXNzIG9uIGFuICdpbGxlZ2FsJyBjb3JlCisgKi8KK2ludCBm aW5kX2Nvb2xlc3RfY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCl7CisJaW50IG51bWNwdXMgPSAy OyAvLyBoYXJkLWNvZGVkIDp4CisJY3B1bWFza190IHRtcDsKKwlpbnQgY29vbGVzdF90ZW1wID0g MTAwOworCWludCBjb29sZXN0X2NwdSA9IDA7CisJaW50IGksIHRlbXA7CisJc3RhdGljIGludCBu ZXh0X2NwdSA9IDA7CisJCisJLy8gYnVpbGQgb3VyIG93biBjcHVtYXNrLCBiZWNhdXNlIGp1c3Qg dXNpbmcgc2V0YWxsCisJLy8gZ2l2ZXMgdXMgd2F5IHRvbyBtdWNoCisJZm9yKGk9MDsgaTxudW1j cHVzOyBpKyspeworCQljcHVfc2V0KGksIHRtcCk7CisJfQorCisJLyogbm93IGNyZWF0ZSBhIG1h c2sgdGhhdCBpcyB0aGUgbGVnYWwgcHJvY2Vzc29ycworCSAgIGZvciB0aGlzIHRhc2sgKi8KKwlj cHVzX2FuZCh0bXAsIHRtcCwgcC0+Y3B1c19hbGxvd2VkKTsKKworCS8qIGxvb2sgZm9yIHRoZSBj b29sZXN0IGNwdSBvZiB0aG9zZSBhbGxvd2VkICovCisJZm9yX2VhY2hfY3B1X21hc2soaSwgdG1w KXsKKwkJdGVtcCA9IGdldF90ZW1wZXJhdHVyZShpKTsKKwkJaWYodGVtcCA8IGNvb2xlc3RfdGVt cCl7CisJCQljb29sZXN0X3RlbXAgPSB0ZW1wOworCQkJY29vbGVzdF9jcHUgPSBpOworCQl9CisJ fQorCQorCS8qIGlmIGNvb2xlc3RfdGVtcCBpcyAtMSwgd2UgZ290IGludmFsaWQgZGF0YQorCSAg IHNvbWV3aGVyZSwgc28gd2UncmUganVzdCBnb2luZyB0byBkZWZhdWx0CisJICAgdG8gcm91bmQt cm9iaW4gcGxhY2VtZW50LiAqLworCWlmKGNvb2xlc3RfdGVtcCA9PSAtMSl7CisJCWNvb2xlc3Rf Y3B1ID0gbmV4dF9jcHU7CisJCW5leHRfY3B1Kys7CisJCW5leHRfY3B1ID0gbmV4dF9jcHUgJSBu dW1jcHVzOworCX0KKwkKKwlyZXR1cm4gY29vbGVzdF9jcHU7Cit9CisKKy8qIAorICogc3RydWN0 IHJlcHJlc2VudGluZyBhIHNjaGVkdWxpbmcgY2xhc3MKKyAqCisgKiBJIGtpbmQgb2Ygd2lzaCB0 aGVyZSB3YXMgYmV0dGVyIGRvY3VtZW50YXRpb24KKyAqIG9uIHRoaXMuCisgKi8KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyB0aGVybWFsX3NjaGVkX2NsYXNzID0geworCS8qIG5v dCBzdXJlIHdoYXQgdGhlIC5uZXh0IHB0ciBpcyBmb3IsIG1heWJlCisgICAgICAgICAgIHRoZSBu ZXh0IGNsYXNzIHRvIHRyeSwgc28gaSdsbCBwb2ludCBpdCB0bworCSAgIGZhaXJfc2NoZWRfY2xh c3MgKi8KKwkubmV4dCA9ICZmYWlyX3NjaGVkX2NsYXNzLAorCS5lbnF1ZXVlX3Rhc2sgPSAsCisJ LmRlcXVldWVfdGFzayA9ICwKKwkueWllbGRfdGFzayA9ICwKKwkuY2hlY2tfcHJlZW1wdF9jdXJy ID0gLAorCS5waWNrX25leHRfdGFzayA9ICwKKwkucHV0X3ByZXZfdGFzayA9ICwKKyNpZmRlZiBD T05GSUdfU01QCisJLmxvYWRfYmFsYW5jZSA9ICwKKwkubW92ZV9vbmVfdGFzayA9ICwKKyNlbmRp ZgorCS5zZXRfY3Vycl90YXNrID0gLAorCS50YXNrX3RpY2sgPSAsCisJLnRhc2tfbmV3ID0gLAor fTsKKwoK ------=_Part_6004_31467322.1208806719366--