From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Howells Date: Tue, 31 Mar 2020 19:47:22 +0000 Subject: Re: Upcoming: Notifications, FS notifications and fsinfo() Message-Id: <2303960.1585684042@warthog.procyon.org.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="maccentraleurope" Content-Transfer-Encoding: base64 List-Id: References: <1445647.1585576702@warthog.procyon.org.uk> <2294742.1585675875@warthog.procyon.org.uk> In-Reply-To: To: Miklos Szeredi Cc: dhowells@redhat.com, Linus Torvalds , Al Viro , dray@redhat.com, Karel Zak , Miklos Szeredi , Steven Whitehouse , Jeff Layton , Ian Kent , andres@anarazel.de, Christian Brauner , Lennart Poettering , keyrings@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org TWlrbG9zIFN6ZXJlZGkgPG1pa2xvc0BzemVyZWRpLmh1PiB3cm90ZToKCj4gQ29vbCwgdGhhbmtz IGZvciB0ZXN0aW5nLiAgVW5mb3J0dW5hdGVseSB0aGUgdGVzdC1mc2luZm8tcGVyZi5jIGZpbGUK PiBkaWRuJ3QgbWFrZSBpdCBpbnRvIHRoZSBwYXRjaC4gICBDYW4geW91IHBsZWFzZSByZWZyZXNo IGFuZCByZXNlbmQ/CgpPb3BzIC0gSSBmb3Jnb3QgdG8gYWRkIGl0LiAgU2VlIGF0dGFjaGVkLgoK RGF2aWQKLS0tCmNvbW1pdCBiNzIzOTAyMWNiNzY2MGJmMzI4YmI3ZmNjZTA1ZTNhMzVjZTU4NDJi CkF1dGhvcjogRGF2aWQgSG93ZWxscyA8ZGhvd2VsbHNAcmVkaGF0LmNvbT4KRGF0ZTogICBUdWUg TWFyIDMxIDE0OjM5OjA3IDIwMjAgKzAxMDAKCiAgICBQZXJmb3JtYW5jZSB0ZXN0IE1pa2zDs3Mn cyBwYXRjaCB2cyBmc2luZm8KCmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxl CmluZGV4IGI2YmYyNDI0YzdmNy4uYWMwNjI3MTc2ZGIxIDEwMDY0NAotLS0gYS9mcy9NYWtlZmls ZQorKysgYi9mcy9NYWtlZmlsZQpAQCAtMTM3LDMgKzEzNyw0IEBAIG9iai0kKENPTkZJR19FRklW QVJfRlMpCQkrPSBlZml2YXJmcy8KIG9iai0kKENPTkZJR19FUk9GU19GUykJCSs9IGVyb2ZzLwog b2JqLSQoQ09ORklHX1ZCT1hTRl9GUykJCSs9IHZib3hzZi8KIG9iai0kKENPTkZJR19aT05FRlNf RlMpCQkrPSB6b25lZnMvCitvYmoteQkJCQkrPSBtb3VudGZzLwpkaWZmIC0tZ2l0IGEvZnMvbW91 bnQuaCBiL2ZzL21vdW50LmgKaW5kZXggMDYzZjQxYmMyZTkzLi44OWIwOTFmYzQ4MmYgMTAwNjQ0 Ci0tLSBhL2ZzL21vdW50LmgKKysrIGIvZnMvbW91bnQuaApAQCAtODIsNiArODIsNyBAQCBzdHJ1 Y3QgbW91bnQgewogCWF0b21pY190IG1udF9zdWJ0cmVlX25vdGlmaWNhdGlvbnM7CS8qIE51bWJl ciBvZiBub3RpZmljYXRpb25zIGluIHN1YnRyZWUgKi8KIAlzdHJ1Y3Qgd2F0Y2hfbGlzdCAqbW50 X3dhdGNoZXJzOyAvKiBXYXRjaGVzIG9uIGRlbnRyaWVzIHdpdGhpbiB0aGlzIG1vdW50ICovCiAj ZW5kaWYKKwlzdHJ1Y3QgbW91bnRmc19lbnRyeSAqbW50X21vdW50ZnNfZW50cnk7CiB9IF9fcmFu ZG9taXplX2xheW91dDsKIAogI2RlZmluZSBNTlRfTlNfSU5URVJOQUwgRVJSX1BUUigtRUlOVkFM KSAvKiBkaXN0aW5jdCBmcm9tIGFueSBtbnRfbmFtZXNwYWNlICovCkBAIC0xNzcsMyArMTc4LDEx IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlfbW91bnQoc3RydWN0IG1vdW50ICp0cmlnZ2Vy ZWQsCiB7CiB9CiAjZW5kaWYKKwordm9pZCBtbnRfbmFtZXNwYWNlX2xvY2tfcmVhZCh2b2lkKTsK K3ZvaWQgbW50X25hbWVzcGFjZV91bmxvY2tfcmVhZCh2b2lkKTsKKwordm9pZCBtb3VudGZzX2Ny ZWF0ZShzdHJ1Y3QgbW91bnQgKm1udCk7CitleHRlcm4gdm9pZCBtb3VudGZzX3JlbW92ZShzdHJ1 Y3QgbW91bnQgKm1udCk7CitpbnQgbW91bnRmc19sb29rdXBfaW50ZXJuYWwoc3RydWN0IHZmc21v dW50ICptLCBzdHJ1Y3QgcGF0aCAqcGF0aCk7CisKZGlmZiAtLWdpdCBhL2ZzL21vdW50ZnMvTWFr ZWZpbGUgYi9mcy9tb3VudGZzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uMzVhNjVlOWE5NjZmCi0tLSAvZGV2L251bGwKKysrIGIvZnMvbW91bnRmcy9N YWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteQkJCQkrPSBzdXBlci5vCmRpZmYgLS1naXQgYS9m cy9tb3VudGZzL3N1cGVyLmMgYi9mcy9tb3VudGZzL3N1cGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44MmMwMWViNjE1NGQKLS0tIC9kZXYvbnVsbAorKysgYi9m cy9tb3VudGZzL3N1cGVyLmMKQEAgLTAsMCArMSw1MDIgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9ubHkKKworI2luY2x1ZGUgIi4uL3Bub2RlLmgiCisjaW5jbHVkZSA8 bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvbnNw cm94eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zz X2NvbnRleHQuaD4KKworI2RlZmluZSBNT1VOVEZTX1NVUEVSX01BR0lDIDB4NGU3NTZmNGQKKwor c3RhdGljIERFRklORV9TUElOTE9DSyhtb3VudGZzX2xvY2spOworc3RhdGljIHN0cnVjdCByYl9y b290IG1vdW50ZnNfZW50cmllcyA9IFJCX1JPT1Q7CitzdGF0aWMgc3RydWN0IHZmc21vdW50ICpt b3VudGZzX21udCBfX3JlYWRfbW9zdGx5OworCitzdHJ1Y3QgbW91bnRmc19lbnRyeSB7CisJc3Ry dWN0IGtyZWYga3JlZjsKKwlzdHJ1Y3QgbW91bnQgKm1udDsKKwlzdHJ1Y3QgcmJfbm9kZSBub2Rl OworCWludCBpZDsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICptb3VudGZzX2F0dHJzW10gPSB7 CisJInJvb3QiLCAibW91bnRwb2ludCIsICJpZCIsICJwYXJlbnQiLCAib3B0aW9ucyIsICJjaGls ZHJlbiIsCisJImdyb3VwIiwgIm1hc3RlciIsICJwcm9wYWdhdGVfZnJvbSIKK307CisKKyNkZWZp bmUgTU9VTlRGU19JTk8oaWQpICgoKHVuc2lnbmVkIGxvbmcpIGlkICsgMSkgKiBcCisJCQkgKEFS UkFZX1NJWkUobW91bnRmc19hdHRycykgKyAxKSkKKwordm9pZCBtb3VudGZzX2VudHJ5X3JlbGVh c2Uoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJa2ZyZWUoY29udGFpbmVyX29mKGtyZWYsIHN0cnVj dCBtb3VudGZzX2VudHJ5LCBrcmVmKSk7Cit9CisKK3ZvaWQgbW91bnRmc19lbnRyeV9wdXQoc3Ry dWN0IG1vdW50ZnNfZW50cnkgKmVudHJ5KQoreworCWtyZWZfcHV0KCZlbnRyeS0+a3JlZiwgbW91 bnRmc19lbnRyeV9yZWxlYXNlKTsKK30KKworc3RhdGljIGJvb2wgbW91bnRmc19lbnRyeV92aXNp YmxlKHN0cnVjdCBtb3VudGZzX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgbW91bnQgKm1udDsK Kwlib29sIHZpc2libGUgPSBmYWxzZTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwltbnQgPSByY3Vf ZGVyZWZlcmVuY2UoZW50cnktPm1udCk7CisJaWYgKG1udCAmJiBtbnQtPm1udF9ucyA9PSBjdXJy ZW50LT5uc3Byb3h5LT5tbnRfbnMpCisJCXZpc2libGUgPSB0cnVlOworCXJjdV9yZWFkX3VubG9j aygpOworCisJcmV0dXJuIHZpc2libGU7Cit9CitzdGF0aWMgaW50IG1vdW50ZnNfYXR0cl9zaG93 KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpCit7CisJY29uc3QgY2hhciAqbmFtZSA9IHNm LT5maWxlLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZTsKKwlzdHJ1Y3QgbW91bnRmc19lbnRy eSAqZW50cnkgPSBzZi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbW91bnQgKm1udDsKKwlzdHJ1Y3QgdmZz bW91bnQgKm07CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKKwlzdHJ1Y3QgcGF0aCByb290Owor CWludCB0bXAsIGVyciA9IC1FTk9ERVY7CisKKwltbnRfbmFtZXNwYWNlX2xvY2tfcmVhZCgpOwor CisJbW50ID0gZW50cnktPm1udDsKKwlpZiAoIW1udCB8fCAhbW50LT5tbnRfbnMpCisJCWdvdG8g b3V0OworCisJZXJyID0gMDsKKwltID0gJm1udC0+bW50OworCXNiID0gbS0+bW50X3NiOworCisJ aWYgKHN0cmNtcChuYW1lLCAicm9vdCIpID09IDApIHsKKwkJaWYgKHNiLT5zX29wLT5zaG93X3Bh dGgpIHsKKwkJCWVyciA9IHNiLT5zX29wLT5zaG93X3BhdGgoc2YsIG0tPm1udF9yb290KTsKKwkJ fSBlbHNlIHsKKwkJCXNlcV9kZW50cnkoc2YsIG0tPm1udF9yb290LCAiIFx0XG5cXCIpOworCQl9 CisJCXNlcV9wdXRjKHNmLCAnXG4nKTsKKwl9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAibW91bnRw b2ludCIpID09IDApIHsKKwkJc3RydWN0IHBhdGggbW50X3BhdGggPSB7IC5kZW50cnkgPSBtLT5t bnRfcm9vdCwgLm1udCA9IG0gfTsKKworCQlnZXRfZnNfcm9vdChjdXJyZW50LT5mcywgJnJvb3Qp OworCQllcnIgPSBzZXFfcGF0aF9yb290KHNmLCAmbW50X3BhdGgsICZyb290LCAiIFx0XG5cXCIp OworCQlpZiAoZXJyID09IFNFUV9TS0lQKSB7CisJCQlzZXFfcHV0cyhzZiwgIih1bnJlYWNoYWJs ZSkiKTsKKwkJCWVyciA9IDA7CisJCX0KKwkJc2VxX3B1dGMoc2YsICdcbicpOworCQlwYXRoX3B1 dCgmcm9vdCk7CisJfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImlkIikgPT0gMCkgeworCQlzZXFf cHJpbnRmKHNmLCAiJWlcbiIsIG1udC0+bW50X2lkKTsKKwl9IGVsc2UgaWYgKHN0cmNtcChuYW1l LCAicGFyZW50IikgPT0gMCkgeworCQl0bXAgPSByY3VfZGVyZWZlcmVuY2UobW50LT5tbnRfcGFy ZW50KS0+bW50X2lkOworCQlzZXFfcHJpbnRmKHNmLCAiJWlcbiIsIHRtcCk7CisJfSBlbHNlIGlm IChzdHJjbXAobmFtZSwgIm9wdGlvbnMiKSA9PSAwKSB7CisJCWludCBtbnRfZmxhZ3MgPSBSRUFE X09OQ0UobS0+bW50X2ZsYWdzKTsKKworCQlzZXFfcHV0cyhzZiwgbW50X2ZsYWdzICYgTU5UX1JF QURPTkxZID8gInJvIiA6ICJydyIpOworCQlzZXFfbW50X29wdHMoc2YsIG1udF9mbGFncyk7CisJ CXNlcV9wdXRjKHNmLCAnXG4nKTsKKwl9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiY2hpbGRyZW4i KSA9PSAwKSB7CisJCXN0cnVjdCBtb3VudCAqY2hpbGQ7CisJCWJvb2wgZmlyc3QgPSB0cnVlOwor CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZtbnQtPm1udF9tb3VudHMsIG1udF9jaGls ZCkgeworCQkJaWYgKCFmaXJzdCkKKwkJCQlzZXFfcHV0YyhzZiwgJywnKTsKKwkJCWVsc2UKKwkJ CQlmaXJzdCA9IGZhbHNlOworCQkJc2VxX3ByaW50ZihzZiwgIiVpIiwgY2hpbGQtPm1udF9pZCk7 CisJCX0KKwkJaWYgKCFmaXJzdCkKKwkJCXNlcV9wdXRjKHNmLCAnXG4nKTsKKwl9IGVsc2UgaWYg KHN0cmNtcChuYW1lLCAiZ3JvdXAiKSA9PSAwKSB7CisJCWlmIChJU19NTlRfU0hBUkVEKG1udCkp CisJCQlzZXFfcHJpbnRmKHNmLCAiJWlcbiIsIG1udC0+bW50X2dyb3VwX2lkKTsKKwl9IGVsc2Ug aWYgKHN0cmNtcChuYW1lLCAibWFzdGVyIikgPT0gMCkgeworCQlpZiAoSVNfTU5UX1NMQVZFKG1u dCkpIHsKKwkJCXRtcCA9IHJjdV9kZXJlZmVyZW5jZShtbnQtPm1udF9tYXN0ZXIpLT5tbnRfZ3Jv dXBfaWQ7CisJCQlzZXFfcHJpbnRmKHNmLCAiJWlcbiIsIHRtcCk7CisJCX0KKwl9IGVsc2UgaWYg KHN0cmNtcChuYW1lLCAicHJvcGFnYXRlX2Zyb20iKSA9PSAwKSB7CisJCWlmIChJU19NTlRfU0xB VkUobW50KSkgeworCQkJZ2V0X2ZzX3Jvb3QoY3VycmVudC0+ZnMsICZyb290KTsKKwkJCXRtcCA9 IGdldF9kb21pbmF0aW5nX2lkKG1udCwgJnJvb3QpOworCQkJaWYgKHRtcCkKKwkJCQlzZXFfcHJp bnRmKHNmLCAiJWlcbiIsIHRtcCk7CisJCX0KKwl9IGVsc2UgeworCQlXQVJOX09OKDEpOworCQll cnIgPSAtRUlPOworCX0KK291dDoKKwltbnRfbmFtZXNwYWNlX3VubG9ja19yZWFkKCk7CisKKwly ZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG1vdW50ZnNfYXR0cl9vcGVuKHN0cnVjdCBpbm9k ZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxl LCBtb3VudGZzX2F0dHJfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1vdW50ZnNfYXR0cl9mb3BzID0geworCS5vcGVuCQk9 IG1vdW50ZnNfYXR0cl9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2Vx X2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0 IG1vdW50ZnNfZW50cnkgKm1vdW50ZnNfbm9kZV90b19lbnRyeShzdHJ1Y3QgcmJfbm9kZSAqbm9k ZSkKK3sKKwlyZXR1cm4gcmJfZW50cnkobm9kZSwgc3RydWN0IG1vdW50ZnNfZW50cnksIG5vZGUp OworfQorCitzdGF0aWMgc3RydWN0IHJiX25vZGUgKiptb3VudGZzX2ZpbmRfbm9kZShpbnQgaWQs IHN0cnVjdCByYl9ub2RlICoqcGFyZW50KQoreworCXN0cnVjdCByYl9ub2RlICoqbGluayA9ICZt b3VudGZzX2VudHJpZXMucmJfbm9kZTsKKworCSpwYXJlbnQgPSBOVUxMOworCXdoaWxlICgqbGlu aykgeworCQlzdHJ1Y3QgbW91bnRmc19lbnRyeSAqZW50cnkgPSBtb3VudGZzX25vZGVfdG9fZW50 cnkoKmxpbmspOworCisJCSpwYXJlbnQgPSAqbGluazsKKwkJaWYgKGlkIDwgZW50cnktPmlkKQor CQkJbGluayA9ICZlbnRyeS0+bm9kZS5yYl9sZWZ0OworCQllbHNlIGlmIChpZCA+IGVudHJ5LT5p ZCkKKwkJCWxpbmsgPSAmZW50cnktPm5vZGUucmJfcmlnaHQ7CisJCWVsc2UKKwkJCWJyZWFrOwor CX0KKwlyZXR1cm4gbGluazsKK30KKwordm9pZCBtb3VudGZzX2NyZWF0ZShzdHJ1Y3QgbW91bnQg Km1udCkKK3sKKwlzdHJ1Y3QgbW91bnRmc19lbnRyeSAqZW50cnk7CisJc3RydWN0IHJiX25vZGUg KipsaW5rLCAqcGFyZW50OworCisJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBf S0VSTkVMKTsKKwlpZiAoIWVudHJ5KSB7CisJCVdBUk4oMSwgImZhaWxlZCB0byBhbGxvY2F0ZSBt b3VudGZzIGVudHJ5Iik7CisJCXJldHVybjsKKwl9CisJa3JlZl9pbml0KCZlbnRyeS0+a3JlZik7 CisJZW50cnktPm1udCA9IG1udDsKKwllbnRyeS0+aWQgPSBtbnQtPm1udF9pZDsKKworCXNwaW5f bG9jaygmbW91bnRmc19sb2NrKTsKKwlsaW5rID0gbW91bnRmc19maW5kX25vZGUoZW50cnktPmlk LCAmcGFyZW50KTsKKwlpZiAoIVdBUk5fT04oKmxpbmspKSB7CisJCXJiX2xpbmtfbm9kZSgmZW50 cnktPm5vZGUsIHBhcmVudCwgbGluayk7CisJCXJiX2luc2VydF9jb2xvcigmZW50cnktPm5vZGUs ICZtb3VudGZzX2VudHJpZXMpOworCQltbnQtPm1udF9tb3VudGZzX2VudHJ5ID0gZW50cnk7CisJ fSBlbHNlIHsKKwkJa2ZyZWUoZW50cnkpOworCX0KKwlzcGluX3VubG9jaygmbW91bnRmc19sb2Nr KTsKK30KKwordm9pZCBtb3VudGZzX3JlbW92ZShzdHJ1Y3QgbW91bnQgKm1udCkKK3sKKwlzdHJ1 Y3QgbW91bnRmc19lbnRyeSAqZW50cnkgPSBtbnQtPm1udF9tb3VudGZzX2VudHJ5OworCisJaWYg KCFlbnRyeSkKKwkJcmV0dXJuOworCXNwaW5fbG9jaygmbW91bnRmc19sb2NrKTsKKwllbnRyeS0+ bW50ID0gTlVMTDsKKwlyYl9lcmFzZSgmZW50cnktPm5vZGUsICZtb3VudGZzX2VudHJpZXMpOwor CXNwaW5fdW5sb2NrKCZtb3VudGZzX2xvY2spOworCisJbW91bnRmc19lbnRyeV9wdXQoZW50cnkp OworCisJbW50LT5tbnRfbW91bnRmc19lbnRyeSA9IE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg bW91bnRmc19lbnRyeSAqbW91bnRmc19nZXRfZW50cnkoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlz dHJ1Y3QgbW91bnRmc19lbnRyeSAqZW50cnkgPSBOVUxMOworCXN0cnVjdCByYl9ub2RlICoqbGlu aywgKmR1bW15OworCXVuc2lnbmVkIGxvbmcgbW50X2lkOworCWNoYXIgYnVmWzMyXTsKKwlpbnQg cmV0OworCisJcmV0ID0ga3N0cnRvdWwobmFtZSwgMTAsICZtbnRfaWQpOworCWlmIChyZXQgfHwg bW50X2lkID4gSU5UX01BWCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzbnByaW50ZihidWYsIHNpemVv ZihidWYpLCAiJWx1IiwgbW50X2lkKTsKKwlpZiAoc3RyY21wKGJ1ZiwgbmFtZSkgIT0gMCkKKwkJ cmV0dXJuIE5VTEw7CisKKwlzcGluX2xvY2soJm1vdW50ZnNfbG9jayk7CisJbGluayA9IG1vdW50 ZnNfZmluZF9ub2RlKG1udF9pZCwgJmR1bW15KTsKKwlpZiAoKmxpbmspIHsKKwkJZW50cnkgPSBt b3VudGZzX25vZGVfdG9fZW50cnkoKmxpbmspOworCQlpZiAoIW1vdW50ZnNfZW50cnlfdmlzaWJs ZShlbnRyeSkpCisJCQllbnRyeSA9IE5VTEw7CisJCWVsc2UKKwkJCWtyZWZfZ2V0KCZlbnRyeS0+ a3JlZik7CisJfQorCXNwaW5fdW5sb2NrKCZtb3VudGZzX2xvY2spOworCisJcmV0dXJuIGVudHJ5 OworfQorCitzdGF0aWMgdm9pZCBtb3VudGZzX2luaXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9k ZSwgdW1vZGVfdCBtb2RlKTsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKm1vdW50ZnNfbG9va3Vw X2VudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCQkJICAgc3RydWN0IG1vdW50ZnNfZW50 cnkgKmVudHJ5LAorCQkJCQkgICBpbnQgaWR4KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisK Kwlpbm9kZSA9IG5ld19pbm9kZShkZW50cnktPmRfc2IpOworCWlmICghaW5vZGUpIHsKKwkJbW91 bnRmc19lbnRyeV9wdXQoZW50cnkpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisJ aW5vZGUtPmlfcHJpdmF0ZSA9IGVudHJ5OworCWlub2RlLT5pX2lubyA9IE1PVU5URlNfSU5PKGVu dHJ5LT5pZCkgKyBpZHg7CisJbW91bnRmc19pbml0X2lub2RlKGlub2RlLCBpZHggPyBTX0lGUkVH IHwgMDQ0NCA6IFNfSUZESVIgfCAwNTU1KTsKKwlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUs IGRlbnRyeSk7CisKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKm1vdW50ZnNfbG9va3VwKHN0 cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJICAgICB1bnNpZ25l ZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IG1vdW50ZnNfZW50cnkgKmVudHJ5ID0gZGlyLT5pX3By aXZhdGU7CisJaW50IGkgPSAwOworCisJaWYgKGVudHJ5KSB7CisJCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKG1vdW50ZnNfYXR0cnMpOyBpKyspCisJCQlpZiAoc3RyY21wKG1vdW50ZnNfYXR0 cnNbaV0sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpID09IDApCisJCQkJYnJlYWs7CisJCWlmIChpID09 IEFSUkFZX1NJWkUobW91bnRmc19hdHRycykpCisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK KwkJaSsrOworCQlrcmVmX2dldCgmZW50cnktPmtyZWYpOworCX0gZWxzZSB7CisJCWVudHJ5ID0g bW91bnRmc19nZXRfZW50cnkoZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCWlmICghZW50cnkpCisJ CQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKKwl9CisKKwlyZXR1cm4gbW91bnRmc19sb29rdXBf ZW50cnkoZGVudHJ5LCBlbnRyeSwgaSk7Cit9CisKK3N0YXRpYyBpbnQgbW91bnRmc19kX3JldmFs aWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3Ry dWN0IG1vdW50ZnNfZW50cnkgKmVudHJ5ID0gZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGU7CisK KwkvKiByb290OiB2YWxpZCAqLworCWlmICghZW50cnkpCisJCXJldHVybiAxOworCisJLyogcmVt b3ZlZDogaW52YWxpZCAqLworCWlmICghZW50cnktPm1udCkKKwkJcmV0dXJuIDA7CisKKwkvKiBh dHRyaWJ1dGUgb3IgdmlzaWJsZSBpbiB0aGlzIG5hbWVzcGFjZTogdmFsaWQgKi8KKwlpZiAoIWRf Y2FuX2xvb2t1cChkZW50cnkpIHx8IG1vdW50ZnNfZW50cnlfdmlzaWJsZShlbnRyeSkpCisJCXJl dHVybiAxOworCisJLyogaW52bGlzaWJsZSBpbiB0aGlzIG5hbWVzcGFjZTogdmFsaWQgYnV0IGRl bnkgZW50cnkqLworCXJldHVybiAtRU5PRU5UOworfQorCitzdGF0aWMgaW50IG1vdW50ZnNfcmVh ZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpCit7CisJc3Ry dWN0IHJiX25vZGUgKm5vZGU7CisJc3RydWN0IG1vdW50ZnNfZW50cnkgKmVudHJ5ID0gZmlsZV9p bm9kZShmaWxlKS0+aV9wcml2YXRlOworCWNoYXIgbmFtZVszMl07CisJY29uc3QgY2hhciAqczsK Kwl1bnNpZ25lZCBpbnQgbGVuLCBwb3MsIGlkOworCisJaWYgKGN0eC0+cG9zIC0gMiA+IElOVF9N QVggfHwgIWRpcl9lbWl0X2RvdHMoZmlsZSwgY3R4KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZW50 cnkpIHsKKwkJd2hpbGUgKGN0eC0+cG9zIC0gMiA8IEFSUkFZX1NJWkUobW91bnRmc19hdHRycykp IHsKKwkJCXMgPSBtb3VudGZzX2F0dHJzW2N0eC0+cG9zIC0gMl07CisJCQlpZiAoIWRpcl9lbWl0 KGN0eCwgcywgc3RybGVuKHMpLAorCQkJCSAgICAgIE1PVU5URlNfSU5PKGVudHJ5LT5pZCkgKyBj dHgtPnBvcywKKwkJCQkgICAgICBEVF9SRUcpKQorCQkJCWJyZWFrOworCQkJY3R4LT5wb3MrKzsK KwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlwb3MgPSBjdHgtPnBvcyAtIDI7CisJZG8geworCQlz cGluX2xvY2soJm1vdW50ZnNfbG9jayk7CisJCW1vdW50ZnNfZmluZF9ub2RlKHBvcywgJm5vZGUp OworCQlwb3MgPSAxVSArIElOVF9NQVg7CisJCWRvIHsKKwkJCWlmICghbm9kZSkgeworCQkJCXNw aW5fdW5sb2NrKCZtb3VudGZzX2xvY2spOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJZW50cnkg PSBtb3VudGZzX25vZGVfdG9fZW50cnkobm9kZSk7CisJCQlub2RlID0gcmJfbmV4dChub2RlKTsK KwkJfSB3aGlsZSAoIW1vdW50ZnNfZW50cnlfdmlzaWJsZShlbnRyeSkpOworCQlpZiAobm9kZSkK KwkJCXBvcyA9IG1vdW50ZnNfbm9kZV90b19lbnRyeShub2RlKS0+aWQ7CisJCWlkID0gZW50cnkt PmlkOworCQlzcGluX3VubG9jaygmbW91bnRmc19sb2NrKTsKKworCQlsZW4gPSBzbnByaW50Zihu YW1lLCBzaXplb2YobmFtZSksICIlaSIsIGlkKTsKKwkJY3R4LT5wb3MgPSBpZCArIDI7CisJCWlm ICghZGlyX2VtaXQoY3R4LCBuYW1lLCBsZW4sIE1PVU5URlNfSU5PKGlkKSwgRFRfRElSKSkKKwkJ CXJldHVybiAwOworCX0gd2hpbGUgKHBvcyA8PSBJTlRfTUFYKTsKK291dDoKKwljdHgtPnBvcyA9 ICBwb3MgKyAyOworCXJldHVybiAwOworfQorCitpbnQgbW91bnRmc19sb29rdXBfaW50ZXJuYWwo c3RydWN0IHZmc21vdW50ICptLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKK3sKKwljaGFyIG5hbWVbMzJd OworCXN0cnVjdCBxc3RyIHRoaXMgPSB7IC5uYW1lID0gbmFtZSB9OworCXN0cnVjdCBtb3VudCAq bW50ID0gcmVhbF9tb3VudChtKTsKKwlzdHJ1Y3QgbW91bnRmc19lbnRyeSAqZW50cnkgPSBtbnQt Pm1udF9tb3VudGZzX2VudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgKm9sZCwgKnJvb3Qg PSBtb3VudGZzX21udC0+bW50X3Jvb3Q7CisKKwl0aGlzLmxlbiA9IHNucHJpbnRmKG5hbWUsIHNp emVvZihuYW1lKSwgIiVpIiwgbW50LT5tbnRfaWQpOworCWRlbnRyeSA9IGRfaGFzaF9hbmRfbG9v a3VwKHJvb3QsICZ0aGlzKTsKKwlpZiAoZGVudHJ5ICYmIGRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2 YXRlICE9IGVudHJ5KSB7CisJCWRfaW52YWxpZGF0ZShkZW50cnkpOworCQlkcHV0KGRlbnRyeSk7 CisJCWRlbnRyeSA9IE5VTEw7CisJfQorCWlmICghZGVudHJ5KSB7CisJCWRlbnRyeSA9IGRfYWxs b2Mocm9vdCwgJnRoaXMpOworCQlpZiAoIWRlbnRyeSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJ CWtyZWZfZ2V0KCZlbnRyeS0+a3JlZik7CisJCW9sZCA9IG1vdW50ZnNfbG9va3VwX2VudHJ5KGRl bnRyeSwgZW50cnksIDApOworCQlpZiAob2xkKSB7CisJCQlkcHV0KGRlbnRyeSk7CisJCQlpZiAo SVNfRVJSKG9sZCkpCisJCQkJcmV0dXJuIFBUUl9FUlIob2xkKTsKKwkJCWRlbnRyeSA9IG9sZDsK KwkJfQorCX0KKworCSpwYXRoID0gKHN0cnVjdCBwYXRoKSB7IC5tbnQgPSBtb3VudGZzX21udCwg LmRlbnRyeSA9IGRlbnRyeSB9OworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRlbnRyeV9vcGVyYXRpb25zIG1vdW50ZnNfZG9wcyA9IHsKKwkuZF9yZXZhbGlkYXRlID0gbW91 bnRmc19kX3JldmFsaWRhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJh dGlvbnMgbW91bnRmc19pb3BzID0geworCS5sb29rdXAgPSBtb3VudGZzX2xvb2t1cCwKK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1vdW50ZnNfZm9wcyA9IHsKKwku aXRlcmF0ZV9zaGFyZWQgPSBtb3VudGZzX3JlYWRkaXIsCisJLnJlYWQgPSBnZW5lcmljX3JlYWRf ZGlyLAorCS5sbHNlZWsgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAorfTsKKworc3RhdGljIHZvaWQg bW91bnRmc19pbml0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVtb2RlX3QgbW9kZSkKK3sK Kwlpbm9kZS0+aV9tb2RlID0gbW9kZTsKKwlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1l ID0gaW5vZGUtPmlfY3RpbWUgPSBjdXJyZW50X3RpbWUoaW5vZGUpOworCWlmIChTX0lTUkVHKG1v ZGUpKSB7CisJCWlub2RlLT5pX3NpemUgPSBQQUdFX1NJWkU7CisJCWlub2RlLT5pX2ZvcCA9ICZt b3VudGZzX2F0dHJfZm9wczsKKwl9IGVsc2UgeworCQlpbm9kZS0+aV9vcCA9ICZtb3VudGZzX2lv cHM7CisJCWlub2RlLT5pX2ZvcCA9ICZtb3VudGZzX2ZvcHM7CisJfQorfQorCitzdGF0aWMgdm9p ZCBtb3VudGZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IG1v dW50ZnNfZW50cnkgKmVudHJ5ID0gaW5vZGUtPmlfcHJpdmF0ZTsKKworCWNsZWFyX2lub2RlKGlu b2RlKTsKKwlpZiAoZW50cnkpCisJCW1vdW50ZnNfZW50cnlfcHV0KGVudHJ5KTsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1vdW50ZnNfc29wcyA9IHsKKwkuc3Rh dGZzCQk9IHNpbXBsZV9zdGF0ZnMsCisJLmRyb3BfaW5vZGUJPSBnZW5lcmljX2RlbGV0ZV9pbm9k ZSwKKwkuZXZpY3RfaW5vZGUJPSBtb3VudGZzX2V2aWN0X2lub2RlLAorfTsKKworc3RhdGljIGlu dCBtb3VudGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2Nv bnRleHQgKmZjKQoreworCXN0cnVjdCBpbm9kZSAqcm9vdDsKKworCXNiLT5zX2lmbGFncyB8PSBT Ql9JX05PRVhFQyB8IFNCX0lfTk9ERVY7CisJc2ItPnNfYmxvY2tzaXplID0gUEFHRV9TSVpFOwor CXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gUEFHRV9TSElGVDsKKwlzYi0+c19tYWdpYyA9IE1PVU5U RlNfU1VQRVJfTUFHSUM7CisJc2ItPnNfdGltZV9ncmFuID0gMTsKKwlzYi0+c19zaHJpbmsuc2Vl a3MgPSAwOworCXNiLT5zX29wID0gJm1vdW50ZnNfc29wczsKKwlzYi0+c19kX29wID0gJm1vdW50 ZnNfZG9wczsKKworCXJvb3QgPSBuZXdfaW5vZGUoc2IpOworCWlmICghcm9vdCkKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlyb290LT5pX2lubyA9IDE7CisJbW91bnRmc19pbml0X2lub2RlKHJvb3Qs IFNfSUZESVIgfCAwNDQ0KTsKKworCXNiLT5zX3Jvb3QgPSBkX21ha2Vfcm9vdChyb290KTsKKwlp ZiAoIXNiLT5zX3Jvb3QpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgbW91bnRmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCit7CisJcmV0 dXJuIGdldF90cmVlX3NpbmdsZShmYywgbW91bnRmc19maWxsX3N1cGVyKTsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgbW91bnRmc19jb250ZXh0X29wcyA9 IHsKKwkuZ2V0X3RyZWUgPSBtb3VudGZzX2dldF90cmVlLAorfTsKKworc3RhdGljIGludCBtb3Vu dGZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCit7CisJZmMtPm9wcyA9 ICZtb3VudGZzX2NvbnRleHRfb3BzOworCWZjLT5nbG9iYWwgPSB0cnVlOworCXJldHVybiAwOwor fQorCitzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbW91bnRmc19mc190eXBlID0gewor CS5uYW1lID0gIm1vdW50ZnMiLAorCS5pbml0X2ZzX2NvbnRleHQgPSBtb3VudGZzX2luaXRfZnNf Y29udGV4dCwKKwkua2lsbF9zYiA9IGtpbGxfYW5vbl9zdXBlciwKK307CisKK3N0YXRpYyBpbnQg X19pbml0IG1vdW50ZnNfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSByZWdpc3Rl cl9maWxlc3lzdGVtKCZtb3VudGZzX2ZzX3R5cGUpOworCWlmICghZXJyKSB7CisJCW1vdW50ZnNf bW50ID0ga2Vybl9tb3VudCgmbW91bnRmc19mc190eXBlKTsKKwkJaWYgKElTX0VSUihtb3VudGZz X21udCkpIHsKKwkJCWVyciA9IFBUUl9FUlIobW91bnRmc19tbnQpOworCQkJdW5yZWdpc3Rlcl9m aWxlc3lzdGVtKCZtb3VudGZzX2ZzX3R5cGUpOworCQl9CisJfQorCXJldHVybiBlcnI7Cit9Citm c19pbml0Y2FsbChtb3VudGZzX2luaXQpOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9m cy9uYW1lc3BhY2UuYwppbmRleCA1NDI3ZTczMmMxYmYuLmEwNWEyODg1YTkwZSAxMDA2NDQKLS0t IGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTk2Miw2ICs5NjIsOCBA QCBzdHJ1Y3QgdmZzbW91bnQgKnZmc19jcmVhdGVfbW91bnQoc3RydWN0IGZzX2NvbnRleHQgKmZj KQogCiAJaWYgKGZjLT5zYl9mbGFncyAmIFNCX0tFUk5NT1VOVCkKIAkJbW50LT5tbnQubW50X2Zs YWdzID0gTU5UX0lOVEVSTkFMOworCWVsc2UKKwkJbW91bnRmc19jcmVhdGUobW50KTsKIAogCWF0 b21pY19pbmMoJmZjLT5yb290LT5kX3NiLT5zX2FjdGl2ZSk7CiAJbW50LT5tbnQubW50X3NiCQk9 IGZjLT5yb290LT5kX3NiOwpAQCAtMTAzMyw3ICsxMDM1LDcgQEAgdmZzX3N1Ym1vdW50KGNvbnN0 IHN0cnVjdCBkZW50cnkgKm1vdW50cG9pbnQsIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBl LAogfQogRVhQT1JUX1NZTUJPTF9HUEwodmZzX3N1Ym1vdW50KTsKIAotc3RhdGljIHN0cnVjdCBt b3VudCAqY2xvbmVfbW50KHN0cnVjdCBtb3VudCAqb2xkLCBzdHJ1Y3QgZGVudHJ5ICpyb290LAor c3RhdGljIHN0cnVjdCBtb3VudCAqY2xvbmVfbW50X2NvbW1vbihzdHJ1Y3QgbW91bnQgKm9sZCwg c3RydWN0IGRlbnRyeSAqcm9vdCwKIAkJCQkJaW50IGZsYWcpCiB7CiAJc3RydWN0IHN1cGVyX2Js b2NrICpzYiA9IG9sZC0+bW50Lm1udF9zYjsKQEAgLTExMDAsNiArMTEwMiwxNyBAQCBzdGF0aWMg c3RydWN0IG1vdW50ICpjbG9uZV9tbnQoc3RydWN0IG1vdW50ICpvbGQsIHN0cnVjdCBkZW50cnkg KnJvb3QsCiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAorc3RhdGljIHN0cnVjdCBtb3VudCAq Y2xvbmVfbW50KHN0cnVjdCBtb3VudCAqb2xkLCBzdHJ1Y3QgZGVudHJ5ICpyb290LAorCQkJICAg ICAgIGludCBmbGFnKQoreworCXN0cnVjdCBtb3VudCAqbW50ID0gY2xvbmVfbW50X2NvbW1vbihv bGQsIHJvb3QsIGZsYWcpOworCisJaWYgKCFJU19FUlIobW50KSkKKwkJbW91bnRmc19jcmVhdGUo bW50KTsKKworCXJldHVybiBtbnQ7Cit9CisKIHN0YXRpYyB2b2lkIGNsZWFudXBfbW50KHN0cnVj dCBtb3VudCAqbW50KQogewogCXN0cnVjdCBobGlzdF9ub2RlICpwOwpAQCAtMTExMiw2ICsxMTI1 LDcgQEAgc3RhdGljIHZvaWQgY2xlYW51cF9tbnQoc3RydWN0IG1vdW50ICptbnQpCiAJICogc28g bW50X2dldF93cml0ZXJzKCkgYmVsb3cgaXMgc2FmZS4KIAkgKi8KIAlXQVJOX09OKG1udF9nZXRf d3JpdGVycyhtbnQpKTsKKwogCWlmICh1bmxpa2VseShtbnQtPm1udF9waW5zLmZpcnN0KSkKIAkJ bW50X3Bpbl9raWxsKG1udCk7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtLCBwLCAmbW50 LT5tbnRfc3R1Y2tfY2hpbGRyZW4sIG1udF91bW91bnQpIHsKQEAgLTExOTcsNiArMTIxMSw4IEBA IHN0YXRpYyB2b2lkIG1udHB1dF9ub19leHBpcmUoc3RydWN0IG1vdW50ICptbnQpCiAJdW5sb2Nr X21vdW50X2hhc2goKTsKIAlzaHJpbmtfZGVudHJ5X2xpc3QoJmxpc3QpOwogCisJbW91bnRmc19y ZW1vdmUobW50KTsKKwogCWlmIChsaWtlbHkoIShtbnQtPm1udC5tbnRfZmxhZ3MgJiBNTlRfSU5U RVJOQUwpKSkgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdXJyZW50OwogCQlpZiAo bGlrZWx5KCEodGFzay0+ZmxhZ3MgJiBQRl9LVEhSRUFEKSkpIHsKQEAgLTEyNjMsMTMgKzEyNzks MTQgQEAgRVhQT1JUX1NZTUJPTChwYXRoX2lzX21vdW50cG9pbnQpOwogc3RydWN0IHZmc21vdW50 ICptbnRfY2xvbmVfaW50ZXJuYWwoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpCiB7CiAJc3RydWN0 IG1vdW50ICpwOwotCXAgPSBjbG9uZV9tbnQocmVhbF9tb3VudChwYXRoLT5tbnQpLCBwYXRoLT5k ZW50cnksIENMX1BSSVZBVEUpOworCXAgPSBjbG9uZV9tbnRfY29tbW9uKHJlYWxfbW91bnQocGF0 aC0+bW50KSwgcGF0aC0+ZGVudHJ5LCBDTF9QUklWQVRFKTsKIAlpZiAoSVNfRVJSKHApKQogCQly ZXR1cm4gRVJSX0NBU1QocCk7CiAJcC0+bW50Lm1udF9mbGFncyB8PSBNTlRfSU5URVJOQUw7CiAJ cmV0dXJuICZwLT5tbnQ7CiB9CiAKKwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAvKiBpdGVyYXRv cjsgd2Ugd2FudCBpdCB0byBoYXZlIGFjY2VzcyB0byBuYW1lc3BhY2Vfc2VtLCB0aHVzIGhlcmUu Li4gKi8KIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpw b3MpCkBAIC0xNDExLDYgKzE0MjgsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIG5hbWVzcGFjZV9s b2NrKHZvaWQpCiAJZG93bl93cml0ZSgmbmFtZXNwYWNlX3NlbSk7CiB9CiAKK3ZvaWQgbW50X25h bWVzcGFjZV9sb2NrX3JlYWQodm9pZCkKK3sKKwlkb3duX3JlYWQoJm5hbWVzcGFjZV9zZW0pOwor fQorCit2b2lkIG1udF9uYW1lc3BhY2VfdW5sb2NrX3JlYWQodm9pZCkKK3sKKwl1cF9yZWFkKCZu YW1lc3BhY2Vfc2VtKTsKK30KKwogZW51bSB1bW91bnRfdHJlZV9mbGFncyB7CiAJVU1PVU5UX1NZ TkMgPSAxLAogCVVNT1VOVF9QUk9QQUdBVEUgPSAyLApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNl LmMgYi9mcy9wcm9jL2Jhc2UuYwppbmRleCBjN2M2NDI3MmIwZmEuLjA0NzdmOGI1MTE4MiAxMDA2 NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTMwOTIsNiAr MzA5Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5IHRnaWRfYmFzZV9zdHVmZltd ID0gewogCURJUigiZmQiLCAgICAgICAgIFNfSVJVU1J8U19JWFVTUiwgcHJvY19mZF9pbm9kZV9v cGVyYXRpb25zLCBwcm9jX2ZkX29wZXJhdGlvbnMpLAogCURJUigibWFwX2ZpbGVzIiwgIFNfSVJV U1J8U19JWFVTUiwgcHJvY19tYXBfZmlsZXNfaW5vZGVfb3BlcmF0aW9ucywgcHJvY19tYXBfZmls ZXNfb3BlcmF0aW9ucyksCiAJRElSKCJmZGluZm8iLCAgICAgU19JUlVTUnxTX0lYVVNSLCBwcm9j X2ZkaW5mb19pbm9kZV9vcGVyYXRpb25zLCBwcm9jX2ZkaW5mb19vcGVyYXRpb25zKSwKKwlESVIo ImZkbW91bnQiLCAgICBTX0lSVVNSfFNfSVhVU1IsIHByb2NfZmRtb3VudF9pbm9kZV9vcGVyYXRp b25zLCBwcm9jX2ZkbW91bnRfb3BlcmF0aW9ucyksCiAJRElSKCJucyIsCSAgU19JUlVTUnxTX0lY VUdPLCBwcm9jX25zX2Rpcl9pbm9kZV9vcGVyYXRpb25zLCBwcm9jX25zX2Rpcl9vcGVyYXRpb25z KSwKICNpZmRlZiBDT05GSUdfTkVUCiAJRElSKCJuZXQiLCAgICAgICAgU19JUlVHT3xTX0lYVUdP LCBwcm9jX25ldF9pbm9kZV9vcGVyYXRpb25zLCBwcm9jX25ldF9vcGVyYXRpb25zKSwKQEAgLTM0 OTcsNiArMzQ5OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwcm9j X3RpZF9jb21tX2lub2RlX29wZXJhdGlvbnMgPSB7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9l bnRyeSB0aWRfYmFzZV9zdHVmZltdID0gewogCURJUigiZmQiLCAgICAgICAgU19JUlVTUnxTX0lY VVNSLCBwcm9jX2ZkX2lub2RlX29wZXJhdGlvbnMsIHByb2NfZmRfb3BlcmF0aW9ucyksCiAJRElS KCJmZGluZm8iLCAgICBTX0lSVVNSfFNfSVhVU1IsIHByb2NfZmRpbmZvX2lub2RlX29wZXJhdGlv bnMsIHByb2NfZmRpbmZvX29wZXJhdGlvbnMpLAorCURJUigiZmRtb3VudCIsICAgU19JUlVTUnxT X0lYVVNSLCBwcm9jX2ZkbW91bnRfaW5vZGVfb3BlcmF0aW9ucywgcHJvY19mZG1vdW50X29wZXJh dGlvbnMpLAogCURJUigibnMiLAkgU19JUlVTUnxTX0lYVUdPLCBwcm9jX25zX2Rpcl9pbm9kZV9v cGVyYXRpb25zLCBwcm9jX25zX2Rpcl9vcGVyYXRpb25zKSwKICNpZmRlZiBDT05GSUdfTkVUCiAJ RElSKCJuZXQiLCAgICAgICAgU19JUlVHT3xTX0lYVUdPLCBwcm9jX25ldF9pbm9kZV9vcGVyYXRp b25zLCBwcm9jX25ldF9vcGVyYXRpb25zKSwKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvZmQuYyBiL2Zz L3Byb2MvZmQuYwppbmRleCA4MTg4MmExMzIxMmQuLjk0YTU3ZTE3ODgwMSAxMDA2NDQKLS0tIGEv ZnMvcHJvYy9mZC5jCisrKyBiL2ZzL3Byb2MvZmQuYwpAQCAtMzYxLDMgKzM2MSw4NSBAQCBjb25z dCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfZmRpbmZvX29wZXJhdGlvbnMgPSB7CiAJLml0 ZXJhdGVfc2hhcmVkCT0gcHJvY19yZWFkZmRpbmZvLAogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxl X2xsc2VlaywKIH07CisKK3N0YXRpYyBpbnQgcHJvY19mZG1vdW50X2xpbmsoc3RydWN0IGRlbnRy eSAqZGVudHJ5LCBzdHJ1Y3QgcGF0aCAqcGF0aCkKK3sKKwlzdHJ1Y3QgZmlsZXNfc3RydWN0ICpm aWxlcyA9IE5VTEw7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCXN0cnVjdCBwYXRoIGZk X3BhdGg7CisJaW50IHJldCA9IC1FTk9FTlQ7CisKKwl0YXNrID0gZ2V0X3Byb2NfdGFzayhkX2lu b2RlKGRlbnRyeSkpOworCWlmICh0YXNrKSB7CisJCWZpbGVzID0gZ2V0X2ZpbGVzX3N0cnVjdCh0 YXNrKTsKKwkJcHV0X3Rhc2tfc3RydWN0KHRhc2spOworCX0KKworCWlmIChmaWxlcykgeworCQl1 bnNpZ25lZCBpbnQgZmQgPSBwcm9jX2ZkKGRfaW5vZGUoZGVudHJ5KSk7CisJCXN0cnVjdCBmaWxl ICpmZF9maWxlOworCisJCXNwaW5fbG9jaygmZmlsZXMtPmZpbGVfbG9jayk7CisJCWZkX2ZpbGUg PSBmY2hlY2tfZmlsZXMoZmlsZXMsIGZkKTsKKwkJaWYgKGZkX2ZpbGUpIHsKKwkJCWZkX3BhdGgg PSBmZF9maWxlLT5mX3BhdGg7CisJCQlwYXRoX2dldCgmZmRfcGF0aCk7CisJCQlyZXQgPSAwOwor CQl9CisJCXNwaW5fdW5sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKKwkJcHV0X2ZpbGVzX3N0cnVj dChmaWxlcyk7CisJfQorCWlmICghcmV0KSB7CisJCXJldCA9IG1vdW50ZnNfbG9va3VwX2ludGVy bmFsKGZkX3BhdGgubW50LCBwYXRoKTsKKwkJcGF0aF9wdXQoJmZkX3BhdGgpOworCX0KKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpwcm9jX2ZkbW91bnRfaW5zdGFu dGlhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywg Y29uc3Qgdm9pZCAqcHRyKQoreworCWNvbnN0IHN0cnVjdCBmZF9kYXRhICpkYXRhID0gcHRyOwor CXN0cnVjdCBwcm9jX2lub2RlICplaTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaW5vZGUg PSBwcm9jX3BpZF9tYWtlX2lub2RlKGRlbnRyeS0+ZF9zYiwgdGFzaywgU19JRkxOSyB8IDA0MDAp OworCWlmICghaW5vZGUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCisJZWkgPSBQUk9D X0koaW5vZGUpOworCWVpLT5mZCA9IGRhdGEtPmZkOworCisJaW5vZGUtPmlfb3AgPSAmcHJvY19w aWRfbGlua19pbm9kZV9vcGVyYXRpb25zOworCWlub2RlLT5pX3NpemUgPSA2NDsKKworCWVpLT5v cC5wcm9jX2dldF9saW5rID0gcHJvY19mZG1vdW50X2xpbms7CisJdGlkX2ZkX3VwZGF0ZV9pbm9k ZSh0YXNrLCBpbm9kZSwgMCk7CisKKwlkX3NldF9kX29wKGRlbnRyeSwgJnRpZF9mZF9kZW50cnlf b3BlcmF0aW9ucyk7CisJcmV0dXJuIGRfc3BsaWNlX2FsaWFzKGlub2RlLCBkZW50cnkpOworfQor CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqCitwcm9jX2xvb2t1cGZkbW91bnQoc3RydWN0IGlub2Rl ICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXJl dHVybiBwcm9jX2xvb2t1cGZkX2NvbW1vbihkaXIsIGRlbnRyeSwgcHJvY19mZG1vdW50X2luc3Rh bnRpYXRlKTsKK30KKworc3RhdGljIGludCBwcm9jX3JlYWRmZG1vdW50KHN0cnVjdCBmaWxlICpm aWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCkKK3sKKwlyZXR1cm4gcHJvY19yZWFkZmRfY29t bW9uKGZpbGUsIGN0eCwKKwkJCQkgIHByb2NfZmRtb3VudF9pbnN0YW50aWF0ZSk7Cit9CisKK2Nv bnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHByb2NfZmRtb3VudF9pbm9kZV9vcGVyYXRpb25z ID0geworCS5sb29rdXAJCT0gcHJvY19sb29rdXBmZG1vdW50LAorCS5zZXRhdHRyCT0gcHJvY19z ZXRhdHRyLAorfTsKKworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2ZkbW91bnRf b3BlcmF0aW9ucyA9IHsKKwkucmVhZAkJPSBnZW5lcmljX3JlYWRfZGlyLAorCS5pdGVyYXRlX3No YXJlZAk9IHByb2NfcmVhZGZkbW91bnQsCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVr LAorfTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvZmQuaCBiL2ZzL3Byb2MvZmQuaAppbmRleCBmMzcx YTYwMmJmNTguLjllMDg3YzgzM2U2NSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9mZC5oCisrKyBiL2Zz L3Byb2MvZmQuaApAQCAtMTAsNiArMTAsOSBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29w ZXJhdGlvbnMgcHJvY19mZF9pbm9kZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBm aWxlX29wZXJhdGlvbnMgcHJvY19mZGluZm9fb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1 Y3QgaW5vZGVfb3BlcmF0aW9ucyBwcm9jX2ZkaW5mb19pbm9kZV9vcGVyYXRpb25zOwogCitleHRl cm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2ZkbW91bnRfb3BlcmF0aW9uczsK K2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwcm9jX2ZkbW91bnRfaW5vZGVf b3BlcmF0aW9uczsKKwogZXh0ZXJuIGludCBwcm9jX2ZkX3Blcm1pc3Npb24oc3RydWN0IGlub2Rl ICppbm9kZSwgaW50IG1hc2spOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwcm9jX2Zk KHN0cnVjdCBpbm9kZSAqaW5vZGUpCmRpZmYgLS1naXQgYS9mcy9wcm9jX25hbWVzcGFjZS5jIGIv ZnMvcHJvY19uYW1lc3BhY2UuYwppbmRleCAyNzNlZTgyZDhhYTkuLmU2MzRmYWE5MTYwZSAxMDA2 NDQKLS0tIGEvZnMvcHJvY19uYW1lc3BhY2UuYworKysgYi9mcy9wcm9jX25hbWVzcGFjZS5jCkBA IC02MSwyNCArNjEsNiBAQCBzdGF0aWMgaW50IHNob3dfc2Jfb3B0cyhzdHJ1Y3Qgc2VxX2ZpbGUg Km0sIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJcmV0dXJuIHNlY3VyaXR5X3NiX3Nob3dfb3B0 aW9ucyhtLCBzYik7CiB9CiAKLXN0YXRpYyB2b2lkIHNob3dfbW50X29wdHMoc3RydWN0IHNlcV9m aWxlICptLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKLXsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IHBy b2NfZnNfaW5mbyBtbnRfaW5mb1tdID0gewotCQl7IE1OVF9OT1NVSUQsICIsbm9zdWlkIiB9LAot CQl7IE1OVF9OT0RFViwgIixub2RldiIgfSwKLQkJeyBNTlRfTk9FWEVDLCAiLG5vZXhlYyIgfSwK LQkJeyBNTlRfTk9BVElNRSwgIixub2F0aW1lIiB9LAotCQl7IE1OVF9OT0RJUkFUSU1FLCAiLG5v ZGlyYXRpbWUiIH0sCi0JCXsgTU5UX1JFTEFUSU1FLCAiLHJlbGF0aW1lIiB9LAotCQl7IDAsIE5V TEwgfQotCX07Ci0JY29uc3Qgc3RydWN0IHByb2NfZnNfaW5mbyAqZnNfaW5mb3A7Ci0KLQlmb3Ig KGZzX2luZm9wID0gbW50X2luZm87IGZzX2luZm9wLT5mbGFnOyBmc19pbmZvcCsrKSB7Ci0JCWlm IChtbnQtPm1udF9mbGFncyAmIGZzX2luZm9wLT5mbGFnKQotCQkJc2VxX3B1dHMobSwgZnNfaW5m b3AtPnN0cik7Ci0JfQotfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFuZ2xlKHN0cnVjdCBzZXFf ZmlsZSAqbSwgY29uc3QgY2hhciAqcykKIHsKQEAgLTEyMCw3ICsxMDIsNyBAQCBzdGF0aWMgaW50 IHNob3dfdmZzbW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZmc21vdW50ICptbnQpCiAJ ZXJyID0gc2hvd19zYl9vcHRzKG0sIHNiKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKLQlzaG93 X21udF9vcHRzKG0sIG1udCk7CisJc2VxX21udF9vcHRzKG0sIG1udC0+bW50X2ZsYWdzKTsKIAlp ZiAoc2ItPnNfb3AtPnNob3dfb3B0aW9ucykKIAkJZXJyID0gc2ItPnNfb3AtPnNob3dfb3B0aW9u cyhtLCBtbnRfcGF0aC5kZW50cnkpOwogCXNlcV9wdXRzKG0sICIgMCAwXG4iKTsKQEAgLTE1Myw3 ICsxMzUsNyBAQCBzdGF0aWMgaW50IHNob3dfbW91bnRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwg c3RydWN0IHZmc21vdW50ICptbnQpCiAJCWdvdG8gb3V0OwogCiAJc2VxX3B1dHMobSwgbW50LT5t bnRfZmxhZ3MgJiBNTlRfUkVBRE9OTFkgPyAiIHJvIiA6ICIgcnciKTsKLQlzaG93X21udF9vcHRz KG0sIG1udCk7CisJc2VxX21udF9vcHRzKG0sIG1udC0+bW50X2ZsYWdzKTsKIAogCS8qIFRhZ2dl ZCBmaWVsZHMgKCJmb286WCIgb3IgImJhciIpICovCiAJaWYgKElTX01OVF9TSEFSRUQocikpCmRp ZmYgLS1naXQgYS9mcy9zZXFfZmlsZS5jIGIvZnMvc2VxX2ZpbGUuYwppbmRleCAxNjAwMDM0YTky OWIuLjk3MjZiYWJhMTczMiAxMDA2NDQKLS0tIGEvZnMvc2VxX2ZpbGUuYworKysgYi9mcy9zZXFf ZmlsZS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvY3JlZC5oPgogI2luY2x1 ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+CisjaW5jbHVkZSA8bGlu dXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdfaGVscGVycy5oPgogCiAjaW5jbHVk ZSA8bGludXgvdWFjY2Vzcy5oPgpAQCAtNTQ4LDYgKzU0OSwyOCBAQCBpbnQgc2VxX2RlbnRyeShz dHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqZXNj KQogfQogRVhQT1JUX1NZTUJPTChzZXFfZGVudHJ5KTsKIAordm9pZCBzZXFfbW50X29wdHMoc3Ry dWN0IHNlcV9maWxlICptLCBpbnQgbW50X2ZsYWdzKQoreworCXVuc2lnbmVkIGludCBpOworCXN0 YXRpYyBjb25zdCBzdHJ1Y3QgeworCQlpbnQgZmxhZzsKKwkJY29uc3QgY2hhciAqc3RyOworCX0g bW50X2luZm9bXSA9IHsKKwkJeyBNTlRfTk9TVUlELCAiLG5vc3VpZCIgfSwKKwkJeyBNTlRfTk9E RVYsICIsbm9kZXYiIH0sCisJCXsgTU5UX05PRVhFQywgIixub2V4ZWMiIH0sCisJCXsgTU5UX05P QVRJTUUsICIsbm9hdGltZSIgfSwKKwkJeyBNTlRfTk9ESVJBVElNRSwgIixub2RpcmF0aW1lIiB9 LAorCQl7IE1OVF9SRUxBVElNRSwgIixyZWxhdGltZSIgfSwKKwkJeyAwLCBOVUxMIH0KKwl9Owor CisJZm9yIChpID0gMDsgbW50X2luZm9baV0uZmxhZzsgaSsrKSB7CisJCWlmIChtbnRfZmxhZ3Mg JiBtbnRfaW5mb1tpXS5mbGFnKQorCQkJc2VxX3B1dHMobSwgbW50X2luZm9baV0uc3RyKTsKKwl9 Cit9CisKIHN0YXRpYyB2b2lkICpzaW5nbGVfc3RhcnQoc3RydWN0IHNlcV9maWxlICpwLCBsb2Zm X3QgKnBvcykKIHsKIAlyZXR1cm4gTlVMTCArICgqcG9zID09IDApOwpkaWZmIC0tZ2l0IGEvaW5j bHVkZS9saW51eC9zZXFfZmlsZS5oIGIvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oCmluZGV4IDc3 MGMyYmYzYWE0My4uOWRkNzgxMmViNzc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcV9m aWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oCkBAIC0xMzgsNiArMTM4LDcgQEAg aW50IHNlcV9maWxlX3BhdGgoc3RydWN0IHNlcV9maWxlICosIHN0cnVjdCBmaWxlICosIGNvbnN0 IGNoYXIgKik7CiBpbnQgc2VxX2RlbnRyeShzdHJ1Y3Qgc2VxX2ZpbGUgKiwgc3RydWN0IGRlbnRy eSAqLCBjb25zdCBjaGFyICopOwogaW50IHNlcV9wYXRoX3Jvb3Qoc3RydWN0IHNlcV9maWxlICpt LCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwKIAkJICBjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCwg Y29uc3QgY2hhciAqZXNjKTsKK3ZvaWQgc2VxX21udF9vcHRzKHN0cnVjdCBzZXFfZmlsZSAqbSwg aW50IG1udF9mbGFncyk7CiAKIGludCBzaW5nbGVfb3BlbihzdHJ1Y3QgZmlsZSAqLCBpbnQgKCop KHN0cnVjdCBzZXFfZmlsZSAqLCB2b2lkICopLCB2b2lkICopOwogaW50IHNpbmdsZV9vcGVuX3Np emUoc3RydWN0IGZpbGUgKiwgaW50ICgqKShzdHJ1Y3Qgc2VxX2ZpbGUgKiwgdm9pZCAqKSwgdm9p ZCAqLCBzaXplX3QpOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy92ZnMvTWFrZWZpbGUgYi9zYW1wbGVz L3Zmcy9NYWtlZmlsZQppbmRleCAxOWJlNjBhYjk1MGUuLjc4ZGViODQ4M2QyNyAxMDA2NDQKLS0t IGEvc2FtcGxlcy92ZnMvTWFrZWZpbGUKKysrIGIvc2FtcGxlcy92ZnMvTWFrZWZpbGUKQEAgLTQs NiArNCw3IEBACiBob3N0cHJvZ3MgOj0gXAogCXRlc3QtZnNpbmZvIFwKIAl0ZXN0LWZzbW91bnQg XAorCXRlc3QtZnNpbmZvLXBlcmYgXAogCXRlc3QtbW50aW5mbyBcCiAJdGVzdC1zdGF0eAogCkBA IC0xMiw2ICsxMyw3IEBAIGFsd2F5cy15IDo9ICQoaG9zdHByb2dzKQogSE9TVENGTEFHU190ZXN0 LWZzaW5mby5vICs9IC1JJChvYmp0cmVlKS91c3IvaW5jbHVkZQogSE9TVExETElCU190ZXN0LWZz aW5mbyArPSAtc3RhdGljIC1sbQogSE9TVENGTEFHU190ZXN0LW1udGluZm8ubyArPSAtSSQob2Jq dHJlZSkvdXNyL2luY2x1ZGUKK0hPU1RDRkxBR1NfdGVzdC1mc2luZm8tcGVyZi5vICs9IC1JJChv Ymp0cmVlKS91c3IvaW5jbHVkZQogCiBIT1NUQ0ZMQUdTX3Rlc3QtZnNtb3VudC5vICs9IC1JJChv Ymp0cmVlKS91c3IvaW5jbHVkZQogSE9TVENGTEFHU190ZXN0LXN0YXR4Lm8gKz0gLUkkKG9ianRy ZWUpL3Vzci9pbmNsdWRlCmRpZmYgLS1naXQgYS9zYW1wbGVzL3Zmcy90ZXN0LWZzaW5mby1wZXJm LmMgYi9zYW1wbGVzL3Zmcy90ZXN0LWZzaW5mby1wZXJmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi5mYmE0MDczN2Y3NjgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1w bGVzL3Zmcy90ZXN0LWZzaW5mby1wZXJmLmMKQEAgLTAsMCArMSwzNjEgQEAKKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCisvKiBUZXN0IHRoZSBmc2luZm8oKSBz eXN0ZW0gY2FsbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBSZWQgSGF0LCBJbmMuIEFsbCBS aWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJl ZGhhdC5jb20pCisgKi8KKworI2RlZmluZSBfR05VX1NPVVJDRQorI2RlZmluZSBfQVRGSUxFX1NP VVJDRQorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg PHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lu Y2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4K KyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+ CisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1 ZGUgPHN5cy9tb3VudC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8bGludXgv ZnNpbmZvLmg+CisKKyNpZm5kZWYgX19OUl9mc2luZm8KKyNkZWZpbmUgX19OUl9mc2luZm8gLTEK KyNlbmRpZgorCisjZGVmaW5lIEVSUihyZXQsIHdoYXQpIGRvIHsgaWYgKChsb25nKShyZXQpID09 IC0xKSB7IHBlcnJvcih3aGF0KTsgZXhpdCgxKTsgfSB9IHdoaWxlKDApCisjZGVmaW5lIE9PTShy ZXQpIGRvIHsgaWYgKCEocmV0KSkgeyBwZXJyb3IoTlVMTCk7IGV4aXQoMSk7IH0gfSB3aGlsZSgw KQorCitzdGF0aWMgaW50IG5yX21vdW50cyA9IDM7CitzdGF0aWMgY29uc3QgY2hhciAqYmFzZV9w YXRoOworCitzdGF0aWMgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKK3NzaXplX3QgZnNpbmZvKGlu dCBkZmQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCSAgICAgICBzdHJ1Y3QgZnNpbmZvX3BhcmFt cyAqcGFyYW1zLCBzaXplX3QgcGFyYW1zX3NpemUsCisJICAgICAgIHZvaWQgKnJlc3VsdF9idWZm ZXIsIHNpemVfdCByZXN1bHRfYnVmX3NpemUpCit7CisJcmV0dXJuIHN5c2NhbGwoX19OUl9mc2lu Zm8sIGRmZCwgZmlsZW5hbWUsCisJCSAgICAgICBwYXJhbXMsIHBhcmFtc19zaXplLAorCQkgICAg ICAgcmVzdWx0X2J1ZmZlciwgcmVzdWx0X2J1Zl9zaXplKTsKK30KKworc3RhdGljIHZvaWQgaXRl cmF0ZSh2b2lkICgqZnVuYykoaW50IGksIGNvbnN0IGNoYXIgKikpCit7CisJY2hhciBuYW1lWzQw OTZdOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5yX21vdW50czsgaSsrKSB7CisJCXNw cmludGYobmFtZSwgIiVzLyVkIiwgYmFzZV9wYXRoLCBpKTsKKwkJZnVuYyhpLCBuYW1lKTsKKwl9 Cit9CisKK3N0YXRpYyB2b2lkIG1ha2VfbW91bnQoaW50IGl4LCBjb25zdCBjaGFyICpwYXRoKQor eworCUVSUihta2RpcihwYXRoLCAwNzU1KSwgIm1rZGlyIik7CisJRVJSKG1vdW50KCJub25lIiwg cGF0aCwgInRtcGZzIiwgMCwgTlVMTCksICJtb3VudCIpOworCUVSUihtb3VudCgibm9uZSIsIHBh dGgsIE5VTEwsIE1TX1BSSVZBVEUsIE5VTEwpLCAibW91bnQiKTsKK30KKworc3RhdGljIHZvaWQg ZG9fdW1vdW50KHZvaWQpCit7CisJcHJpbnRmKCItLS0gdW1vdW50IC0tLVxuIik7CisJaWYgKHVt b3VudDIoYmFzZV9wYXRoLCBNTlRfREVUQUNIKSA9PSAtMSkKKwkJcGVycm9yKCJ1bW91bnQiKTsK K30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VtX21udF9pZDsKKworc3RhdGljIHZvaWQgZ2V0 X21udGlkX2J5X2ZzaW5mbyhpbnQgaXgsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGZz aW5mb19tb3VudF9pbmZvIHI7CisJc3RydWN0IGZzaW5mb19wYXJhbXMgcGFyYW1zID0geworCQku ZmxhZ3MJCT0gRlNJTkZPX0ZMQUdTX1FVRVJZX1BBVEgsCisJCS5yZXF1ZXN0CT0gRlNJTkZPX0FU VFJfTU9VTlRfSU5GTywKKwl9OworCisJRVJSKGZzaW5mbyhBVF9GRENXRCwgcGF0aCwgJnBhcmFt cywgc2l6ZW9mKHBhcmFtcyksICZyLCBzaXplb2YocikpLAorCSAgICAiZnNpbmZvIik7CisJLy9w cmludGYoIlsldV0gJXVcbiIsIGl4LCByLm1udF9pZCk7CisJc3VtX21udF9pZCArPSByLm1udF9p ZDsKK30KKworc3RhdGljIHZvaWQgZ2V0X21udGlkX2J5X3Byb2MoaW50IGl4LCBjb25zdCBjaGFy ICpwYXRoKQoreworCXVuc2lnbmVkIGludCBtbnRfaWQ7CisJc3NpemVfdCBsZW47CisJY2hhciBw cm9jZmlsZVsxMDBdLCBidWZmZXJbNDA5Nl0sICpwLCAqbmw7CisJaW50IGZkLCBmZDI7CisKKwlm ZCA9IG9wZW4ocGF0aCwgT19QQVRIKTsKKwlFUlIoZmQsICJvcGVuL3BhdGgiKTsKKwlzcHJpbnRm KHByb2NmaWxlLCAiL3Byb2Mvc2VsZi9mZGluZm8vJXUiLCBmZCk7CisJZmQyID0gb3Blbihwcm9j ZmlsZSwgT19SRE9OTFkpOworCUVSUihmZDIsICJvcGVuL3Byb2MiKTsKKwlsZW4gPSByZWFkKGZk MiwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEpOworCUVSUihsZW4sICJyZWFkIik7CisJYnVm ZmVyW2xlbl0gPSAwOworCWNsb3NlKGZkMik7CisJY2xvc2UoZmQpOworCisJcCA9IGJ1ZmZlcjsK KwlkbyB7CisJCW5sID0gc3RyY2hyKHAsICdcbicpOworCQlpZiAobmwpCisJCQkqbmwrKyA9ICdc MCc7CisJCWVsc2UKKwkJCW5sID0gTlVMTDsKKworCQlpZiAoc3RybmNtcChwLCAibW50X2lkOiIs IDcpICE9IDApCisJCQljb250aW51ZTsKKwkJcCArPSA3OworCQl3aGlsZSAoaXNibGFuaygqcCkp CisJCQlwKys7CisJCS8qIEhhdmUgdG8gYWxsb3cgZm9yIGV4dHJhIG51bWJlcnMgYmVpbmcgYWRk ZWQgdG8gdGhlIGxpbmUgKi8KKwkJaWYgKHNzY2FuZihwLCAiJXUiLCAmbW50X2lkKSAhPSAxKSB7 CisJCQlmcHJpbnRmKHN0ZGVyciwgIkJhZCBmb3JtYXQgJXNcbiIsIHByb2NmaWxlKTsKKwkJCWV4 aXQoMyk7CisJCX0KKwkJYnJlYWs7CisKKwl9IHdoaWxlICgocCA9IG5sKSk7CisKKwlpZiAoIXAp IHsKKwkJZnByaW50ZihzdGRlcnIsICJNaXNzaW5nIGZpZWxkICVzXG4iLCBwcm9jZmlsZSk7CisJ CWV4aXQoMyk7CisJfQorCisJc3VtX21udF9pZCArPSBtbnRfaWQ7CisJLy9wcmludGYoIlsldV0g JXVcbiIsIGl4LCBtbnRfaWQpOworfQorCitzdGF0aWMgdm9pZCBnZXRfbW50aWRfYnlfZnNpbmZv XzIodm9pZCkKK3sKKwlzdHJ1Y3QgZnNpbmZvX21vdW50X2NoaWxkICpjaGlsZHJlbiwgKmMsICpl bmQ7CisJc3RydWN0IGZzaW5mb19tb3VudF9pbmZvIHI7CisJc3RydWN0IGZzaW5mb19wYXJhbXMg cGFyYW1zID0geworCQkuZmxhZ3MJCT0gRlNJTkZPX0ZMQUdTX1FVRVJZX1BBVEgsCisJCS5yZXF1 ZXN0CT0gRlNJTkZPX0FUVFJfTU9VTlRfSU5GTywKKwl9OworCXVuc2lnbmVkIGludCBiYXNlX21u dF9pZDsKKwlzaXplX3Qgc19jaGlsZHJlbiwgbl9jaGlsZHJlbjsKKwljaGFyIG5hbWVbMzJdOwor CWludCBpOworCisJLyogQ29udmVydCBwYXRoIHRvIG1vdW50IElEICovCisJRVJSKGZzaW5mbyhB VF9GRENXRCwgYmFzZV9wYXRoLCAmcGFyYW1zLCBzaXplb2YocGFyYW1zKSwgJnIsIHNpemVvZihy KSksCisJICAgICJmc2luZm8vYmFzZSIpOworCWJhc2VfbW50X2lkID0gci5tbnRfaWQ7CisJLy9w cmludGYoIltCXSAldVxuIiwgYmFzZV9tbnRfaWQpOworCisJLyogR2V0IGEgbGlzdCBvZiBhbGwg dGhlIGNoaWxkcmVuIG9mIHRoaXMgbW91bnQgSUQgKi8KKwlzX2NoaWxkcmVuID0gKG5yX21vdW50 cyArIDEpICogc2l6ZW9mKCpjaGlsZHJlbik7CisJY2hpbGRyZW4gPSBtYWxsb2Moc19jaGlsZHJl bik7CisJT09NKGNoaWxkcmVuKTsKKworCXBhcmFtcy5mbGFncwk9IEZTSU5GT19GTEFHU19RVUVS WV9NT1VOVDsKKwlwYXJhbXMucmVxdWVzdAk9IEZTSU5GT19BVFRSX01PVU5UX0NISUxEUkVOOwor CXNwcmludGYobmFtZSwgIiV1IiwgYmFzZV9tbnRfaWQpOworCXNfY2hpbGRyZW4gPSBmc2luZm8o QVRfRkRDV0QsIG5hbWUsICZwYXJhbXMsIHNpemVvZihwYXJhbXMpLCBjaGlsZHJlbiwgc19jaGls ZHJlbik7CisJRVJSKHNfY2hpbGRyZW4sICJmc2luZm8vY2hpbGRyZW4iKTsKKworCS8qIFF1ZXJ5 IGVhY2ggY2hpbGQgKi8KKwluX2NoaWxkcmVuID0gc19jaGlsZHJlbiAvIHNpemVvZigqYykgLSAx OyAvLyBQYXJlbnQgaXMgYWRkZWQgYXQgZW5kCisJYyA9IGNoaWxkcmVuOworCWVuZCA9IGMgKyBu X2NoaWxkcmVuOworCWZvciAoaSA9IDA7IGMgPCBlbmQ7IGMrKywgaSsrKSB7CisJCS8vcHJpbnRm KCJbJXVdICV1XG4iLCBpLCBjLT5tbnRfaWQpOworCQlwYXJhbXMuZmxhZ3MJPSBGU0lORk9fRkxB R1NfUVVFUllfTU9VTlQ7CisJCXBhcmFtcy5yZXF1ZXN0CT0gRlNJTkZPX0FUVFJfTU9VTlRfSU5G TzsKKwkJc3ByaW50ZihuYW1lLCAiJXUiLCBjLT5tbnRfaWQpOworCQlFUlIoZnNpbmZvKEFUX0ZE Q1dELCBuYW1lLCAmcGFyYW1zLCBzaXplb2YocGFyYW1zKSwgJnIsIHNpemVvZihyKSksCisJCSAg ICAiZnNpbmZvL2NoaWxkIik7CisJCXN1bV9tbnRfaWQgKz0gci5tbnRfaWQ7CisJfQorfQorCitz dGF0aWMgdm9pZCBnZXRfbW50aWRfYnlfbW91bnRmcyh2b2lkKQoreworCXVuc2lnbmVkIGludCBi YXNlX21udF9pZCwgbW50X2lkLCB4OworCXNzaXplX3QgbGVuLCBzX2NoaWxkcmVuOworCWNoYXIg cHJvY2ZpbGVbMTAwXSwgYnVmZmVyWzEwMF0sICpjaGlsZHJlbiwgKnAsICpxLCAqbmwsICpjb21t YTsKKwlpbnQgZmQsIGZkMiwgbW50ZmQsIGk7CisKKwkvKiBTdGFydCBvZmYgYnkgcmVhZGluZyB0 aGUgbW91bnQgSUQgZnJvbSB0aGUgYmFzZSBwYXRoICovCisJZmQgPSBvcGVuKGJhc2VfcGF0aCwg T19QQVRIKTsKKwlFUlIoZmQsICJvcGVuL3BhdGgiKTsKKwlzcHJpbnRmKHByb2NmaWxlLCAiL3By b2Mvc2VsZi9mZGluZm8vJXUiLCBmZCk7CisJZmQyID0gb3Blbihwcm9jZmlsZSwgT19SRE9OTFkp OworCUVSUihmZDIsICJvcGVuL3Byb2MiKTsKKwlsZW4gPSByZWFkKGZkMiwgYnVmZmVyLCBzaXpl b2YoYnVmZmVyKSAtIDEpOworCUVSUihsZW4sICJyZWFkIik7CisJYnVmZmVyW2xlbl0gPSAwOwor CWNsb3NlKGZkMik7CisJY2xvc2UoZmQpOworCisJcCA9IGJ1ZmZlcjsKKwlkbyB7CisJCW5sID0g c3RyY2hyKHAsICdcbicpOworCQlpZiAobmwpCisJCQkqbmwrKyA9ICdcMCc7CisJCWVsc2UKKwkJ CW5sID0gTlVMTDsKKworCQlpZiAoc3RybmNtcChwLCAibW50X2lkOiIsIDcpICE9IDApCisJCQlj b250aW51ZTsKKwkJcCArPSA3OworCQl3aGlsZSAoaXNibGFuaygqcCkpCisJCQlwKys7CisJCS8q IEhhdmUgdG8gYWxsb3cgZm9yIGV4dHJhIG51bWJlcnMgYmVpbmcgYWRkZWQgdG8gdGhlIGxpbmUg Ki8KKwkJaWYgKHNzY2FuZihwLCAiJXUiLCAmYmFzZV9tbnRfaWQpICE9IDEpIHsKKwkJCWZwcmlu dGYoc3RkZXJyLCAiQmFkIGZvcm1hdCAlc1xuIiwgcHJvY2ZpbGUpOworCQkJZXhpdCgzKTsKKwkJ fQorCQlicmVhazsKKworCX0gd2hpbGUgKChwID0gbmwpKTsKKworCWlmICghcCkgeworCQlmcHJp bnRmKHN0ZGVyciwgIk1pc3NpbmcgZmllbGQgJXNcbiIsIHByb2NmaWxlKTsKKwkJZXhpdCgzKTsK Kwl9CisKKwlpZiAoMCkgcHJpbnRmKCJbQl0gJXVcbiIsIGJhc2VfbW50X2lkKTsKKworCW1udGZk ID0gb3BlbigiL21udCIsIE9fUEFUSCk7CisJRVJSKGZkLCAib3Blbi9tb3VudGZzIik7CisKKwkv KiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhpcyBtb3VudCBJRCAqLworCXNf Y2hpbGRyZW4gPSAobnJfbW91bnRzKSAqIDEyOworCWNoaWxkcmVuID0gbWFsbG9jKHNfY2hpbGRy ZW4pOworCU9PTShjaGlsZHJlbik7CisKKwlzcHJpbnRmKHByb2NmaWxlLCAiJXUvY2hpbGRyZW4i LCBiYXNlX21udF9pZCk7CisJZmQgPSBvcGVuYXQobW50ZmQsIHByb2NmaWxlLCBPX1JET05MWSk7 CisJRVJSKGZkLCAib3Blbi9jaGlsZHJlbiIpOworCXNfY2hpbGRyZW4gPSByZWFkKGZkLCBjaGls ZHJlbiwgc19jaGlsZHJlbiAtIDEpOworCUVSUihzX2NoaWxkcmVuLCAicmVhZC9jaGlsZHJlbiIp OworCWNsb3NlKGZkKTsKKwlpZiAoc19jaGlsZHJlbiA+IDAgJiYgY2hpbGRyZW5bc19jaGlsZHJl biAtIDFdID09ICdcbicpCisJCXNfY2hpbGRyZW4tLTsKKwljaGlsZHJlbltzX2NoaWxkcmVuXSA9 IDA7CisKKwkvKiBRdWVyeSBlYWNoIGNoaWxkICovCisJcCA9IGNoaWxkcmVuOworCWlmICghKnAp CisJCXJldHVybjsKKwlpID0gMDsKKwlkbyB7CisJCW1udF9pZCA9IHN0cnRvdWwocCwgJmNvbW1h LCAxMCk7CisJCWlmICgqY29tbWEpIHsKKwkJCWlmICgqY29tbWEgIT0gJywnKSB7CisJCQkJZnBy aW50ZihzdGRlcnIsICJCYWQgZm9ybWF0IGluIG1vdW50ZnMtY2hpbGRyZW5cbiIpOworCQkJCWV4 aXQoMyk7CisJCQl9CisJCQljb21tYSsrOworCQl9CisKKwkJc3ByaW50Zihwcm9jZmlsZSwgIiV1 L2lkIiwgbW50X2lkKTsKKwkJZmQgPSBvcGVuYXQobW50ZmQsIHByb2NmaWxlLCBPX1JET05MWSk7 CisJCUVSUihmZCwgcHJvY2ZpbGUpOworCQlsZW4gPSByZWFkKGZkLCBidWZmZXIsIHNpemVvZihi dWZmZXIpIC0gMSk7CisJCUVSUihsZW4sICJyZWFkL2lkIik7CisJCWNsb3NlKGZkKTsKKwkJaWYg KGxlbiA+IDAgJiYgYnVmZmVyW2xlbiAtIDFdID09ICdcbicpCisJCQlsZW4tLTsKKwkJYnVmZmVy W2xlbl0gPSAwOworCisJCXggPSBzdHJ0b3VsKGJ1ZmZlciwgJnEsIDEwKTsKKworCQlpZiAoKnEp IHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQmFkIGZvcm1hdCBpbiAlcyAnJXMnXG4iLCBwcm9jZmls ZSwgYnVmZmVyKTsKKwkJCWV4aXQoMyk7CisJCX0KKworCQlpZiAoMCkgcHJpbnRmKCJbJXVdICV1 XG4iLCBpKyssIHgpOworCQlzdW1fbW50X2lkICs9IHg7CisJfSB3aGlsZSAocCA9IGNvbW1hLCAq Y29tbWEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkdXJhdGlvbihzdHJ1Y3QgdGltZXZh bCAqYmVmb3JlLCBzdHJ1Y3QgdGltZXZhbCAqYWZ0ZXIpCit7CisJdW5zaWduZWQgbG9uZyBhLCBi OworCisJYSA9IGFmdGVyLT50dl9zZWMgKiAxMDAwMDAwICsgYWZ0ZXItPnR2X3VzZWM7CisJYiA9 IGJlZm9yZS0+dHZfc2VjICogMTAwMDAwMCArIGJlZm9yZS0+dHZfdXNlYzsKKwlyZXR1cm4gYSAt IGI7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgdGlt ZXZhbCBmX2JlZm9yZSwgZl9hZnRlcjsKKwlzdHJ1Y3QgdGltZXZhbCBmMl9iZWZvcmUsIGYyX2Fm dGVyOworCXN0cnVjdCB0aW1ldmFsIHBfYmVmb3JlLCBwX2FmdGVyOworCXN0cnVjdCB0aW1ldmFs IHAyX2JlZm9yZSwgcDJfYWZ0ZXI7CisJY29uc3QgY2hhciAqcGF0aDsKKwl1bnNpZ25lZCBsb25n IGZfZHVyLCBmMl9kdXIsIHBfZHVyLCBwMl9kdXI7CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJZnBy aW50ZihzdGRlcnIsICJGb3JtYXQ6ICVzIDxwYXRoPiBbbnJfbW91bnRzXVxuIiwgYXJndlswXSk7 CisJCWV4aXQoMik7CisJfQorCisJaWYgKGFyZ2MgPT0gMykKKwkJbnJfbW91bnRzID0gYXRvaShh cmd2WzJdKTsKKworCXBhdGggPSBhcmd2WzFdOworCUVSUihtb3VudCgibm9uZSIsIHBhdGgsICJ0 bXBmcyIsIDAsIE5VTEwpLCAibW91bnQiKTsKKwlFUlIobW91bnQoIm5vbmUiLCBwYXRoLCBOVUxM LCBNU19QUklWQVRFLCBOVUxMKSwgIm1vdW50Iik7CisJYmFzZV9wYXRoID0gcGF0aDsKKwlhdGV4 aXQoZG9fdW1vdW50KTsKKworCXByaW50ZigiLS0tIG1ha2UgbW91bnRzIC0tLVxuIik7CisJaXRl cmF0ZShtYWtlX21vdW50KTsKKworCXByaW50ZigiLS0tIHRlc3QgZnNpbmZvIGJ5IHBhdGggLS0t XG4iKTsKKwlzdW1fbW50X2lkID0gMDsKKwlFUlIoZ2V0dGltZW9mZGF5KCZmX2JlZm9yZSwgTlVM TCksICJnZXR0aW1lb2ZkYXkiKTsKKwlpdGVyYXRlKGdldF9tbnRpZF9ieV9mc2luZm8pOworCUVS UihnZXR0aW1lb2ZkYXkoJmZfYWZ0ZXIsIE5VTEwpLCAiZ2V0dGltZW9mZGF5Iik7CisJcHJpbnRm KCJzdW0obW50X2lkKSA9ICVsdVxuIiwgc3VtX21udF9pZCk7CisKKwlwcmludGYoIi0tLSB0ZXN0 IGZzaW5mbyBieSBtbnRfaWQgLS0tXG4iKTsKKwlzdW1fbW50X2lkID0gMDsKKwlFUlIoZ2V0dGlt ZW9mZGF5KCZmMl9iZWZvcmUsIE5VTEwpLCAiZ2V0dGltZW9mZGF5Iik7CisJZ2V0X21udGlkX2J5 X2ZzaW5mb18yKCk7CisJRVJSKGdldHRpbWVvZmRheSgmZjJfYWZ0ZXIsIE5VTEwpLCAiZ2V0dGlt ZW9mZGF5Iik7CisJcHJpbnRmKCJzdW0obW50X2lkKSA9ICVsdVxuIiwgc3VtX21udF9pZCk7CisK KwlwcmludGYoIi0tLSB0ZXN0IC9wcm9jL2ZkaW5mbyAtLS1cbiIpOworCXN1bV9tbnRfaWQgPSAw OworCUVSUihnZXR0aW1lb2ZkYXkoJnBfYmVmb3JlLCBOVUxMKSwgImdldHRpbWVvZmRheSIpOwor CWl0ZXJhdGUoZ2V0X21udGlkX2J5X3Byb2MpOworCUVSUihnZXR0aW1lb2ZkYXkoJnBfYWZ0ZXIs IE5VTEwpLCAiZ2V0dGltZW9mZGF5Iik7CisJcHJpbnRmKCJzdW0obW50X2lkKSA9ICVsdVxuIiwg c3VtX21udF9pZCk7CisKKwlwcmludGYoIi0tLSB0ZXN0IG1vdW50ZnMgLS0tXG4iKTsKKwlzdW1f bW50X2lkID0gMDsKKwlFUlIoZ2V0dGltZW9mZGF5KCZwMl9iZWZvcmUsIE5VTEwpLCAiZ2V0dGlt ZW9mZGF5Iik7CisJZ2V0X21udGlkX2J5X21vdW50ZnMoKTsKKwlFUlIoZ2V0dGltZW9mZGF5KCZw Ml9hZnRlciwgTlVMTCksICJnZXR0aW1lb2ZkYXkiKTsKKwlwcmludGYoInN1bShtbnRfaWQpID0g JWx1XG4iLCBzdW1fbW50X2lkKTsKKworCWZfZHVyICA9IGR1cmF0aW9uKCZmX2JlZm9yZSwgICZm X2FmdGVyKTsKKwlmMl9kdXIgPSBkdXJhdGlvbigmZjJfYmVmb3JlLCAmZjJfYWZ0ZXIpOworCXBf ZHVyICA9IGR1cmF0aW9uKCZwX2JlZm9yZSwgICZwX2FmdGVyKTsKKwlwMl9kdXIgPSBkdXJhdGlv bigmcDJfYmVmb3JlLCAmcDJfYWZ0ZXIpOworCS8vcHJpbnRmKCJmc2luZm8gZHVyYXRpb24gJTEw bHV1cyBmb3IgJWQgbW91bnRzXG4iLCBmX2R1ciwgbnJfbW91bnRzKTsKKwkvL3ByaW50ZigicHJv Y2ZkIGR1cmF0aW9uICUxMGx1dXMgZm9yICVkIG1vdW50c1xuIiwgcF9kdXIsIG5yX21vdW50cyk7 CisKKwlwcmludGYoIkZvciAlN2QgbW91bnRzLCBmPSUxMGx1dXMgZjI9JTEwbHV1cyBwPSUxMGx1 dXMgcDI9JTEwbHV1czsgcD0lLjFmKmYgcD0lLjFmKmYyIHA9JS4xZipwMlxuIiwKKwkgICAgICAg bnJfbW91bnRzLCBmX2R1ciwgZjJfZHVyLCBwX2R1ciwgcDJfZHVyLAorCSAgICAgICAoZG91Ymxl KXBfZHVyIC8gKGRvdWJsZSlmX2R1ciwKKwkgICAgICAgKGRvdWJsZSlwX2R1ciAvIChkb3VibGUp ZjJfZHVyLAorCSAgICAgICAoZG91YmxlKXBfZHVyIC8gKGRvdWJsZSlwMl9kdXIpOworCXJldHVy biAwOworfQo=