From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id AAB746E45F for ; Wed, 11 Apr 2018 08:15:16 +0000 (UTC) From: Katarzyna Dec Date: Wed, 11 Apr 2018 10:14:58 +0200 Message-Id: <20180411081501.5375-2-katarzyna.dec@intel.com> In-Reply-To: <20180411081501.5375-1-katarzyna.dec@intel.com> References: <20180411081501.5375-1-katarzyna.dec@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v7 1/4] lib: Move common gpgpu/media fill functions to gpu_fill library List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: R3BncHVfZmlsbCBhbmQgbWVkaWFfZmlsbCBsaWJyYXJpZXMgYXJlIHZlcnkgc2ltaWxhciBhbmQg bWFueQpmdW5jdGlvbnMgY2FuIGJlIHNoYXJlZC4gSSBoYXZlIGNyZWF0ZWQgbGlicmFyeSBncHVf ZmlsbCB3aXRoCmFsbCBmdW5jdGlvbnMgbmVlZGVkIGZvciBpbXBsZW1lbnRpbmcgZ3BncHVfZmls bCBhbmQgbWVkaWFfZmlsbAp0ZXN0cyBmb3IgYWxsIEdlbnMuIEZvciByZXZpZXdpbmcgYW5kIGRl YnVnZ2luZyBwdXJwb3NlcyB0aGlzIHBhdGNoCnNob3VsZCBiZSBvbmx5IG1vdmluZyBmdW5jdGlv bnMgZnJvbSBmZXcgbGlicmFyaWVzIHRvIG9uZSByZW1vdmluZwpmdW5jdGlvbnMgaWRlbnRpY2Fs IGZvciBib3RoIG1lZGlhIGFuZCBncGdwdS4KUGxhY2VzIGluIHRoZSBjb2RlIHRoYXQgcmVxdWly ZWQgbW9yZSBjaGFuZ2VzOgogIFJlbW92aW5nIGdlbjdfZmlsbF9ncGdwdV9rZXJuZWwgZnVuY3Rp b24gdGhhdCBpcyBpZGVudGljYWwgdG8KZ2VuN19maWxsX21lZGlhX2tlcm5lbCBhbmQgaW50cm9k dWNlcyBjb25mbGljdCB3aXRoIG1vdmluZwpnZW5YX2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Is IHdoaWNoIGFyZSB0aGUgc2FtZSBmb3IgbWVkaWEgYW5kIGdwZ3B1LgogIEZ1bmN0aW9uIGdlbjhf ZmlsbF9tZWRpYV9rZXJuZWwgaXMgbm90IHJlbW92ZWQgaW4gdGhpcyBwYXRjaAooYWx0aG91Z2gg aXQgaXMgaWRlbnRpY2FsIHdpdGggZ2VuNyB2ZXJzaW9uKSwgYmVjYXVzZSB0aGlzIHBhdGNoCnNo b3VsZCBiZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGZ1bmN0aW9ucyBtb3ZlbWVudC4KICBnZW44X2Zp bGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Igd2FzIHVuaWZpZWQgZm9yIG1lZGlhIGFuZCBncGdwdQpi eSBhZGRpbmcga2VybmVsIGFuZCBpdHMgc2l6ZSBhcyBhIHBhcmFtZXRlciAodGhpcyBwYXJhbWV0 ZXJzCndlcmUgbWlzc2luZyBpbiBtZWRpYSBnZW44LCBnZW44bHAgYW5kIGdlbjkgZnVuY3Rpb25z KQogIGdlbjhfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Mgd2FzIHVuaWZpZWQsIHRoZSBvbmUgZm9y IGdwZ3B1IHdhcwpjb25maWd1cmVkIGxpa2UgaXQgd291bGQgYmUgdXNpbmcgaW5kaXJlY3Qgc3Rh dGUgKHdoaWxlIHdlIGFyZQp1c2luZyBDVVJCRSkuIEkgaGF2ZSBjaGVja2VkIHRoYXQgbWVkaWEg ZmlsbCB2ZXJzaW9uCihPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpKSB3b3JrcyBm aW5lIG9uIGdwZ3B1IGdlbjggYW5kIG5ld2VyLgoKdjI6IENoYW5nZWQgY29kZSBsYXlvdXQuIEdl blhfZmlsbF9tZWRpYV9rZXJuZWwgd2FzIGlkZW50aWNhbCB0bwpnZW5YX2ZpbGxfZ3BncHVfa2Vy bmVsIHNvIHRoaXMgZnVuY3Rpb24gd2FzIHVuaWZpZWQgdG8KZ2VuN19maWxsX2tlcm5lbC4gVGhl cmUgd2VyZSAyIHZlcnkgc2ltaWxhciBmdW5jdGlvbnMKZ2VuOF9lbWl0X3N0YXRlX2Jhc2VfYWRk cmVzcyBmb3IgbWVkaWEgYW5kIGdwZ3B1LCB3aGVyZSB0aGUgb25lCmZvciBncGdwdSB3YXMgY29u ZmlndXJlZCBsaWtlIGl0IHdvdWxkIGJlIHVzaW5nIGluZGlyZWN0IHN0YXRlCih3aGlsZSB3ZSBh cmUgdXNpbmcgQ1VSQkUpLiBJIGhhdmUgY2hlY2tlZCBpZiBtZWRpYSBmaWxsIHZlcnNpb24Kd29y a3MgZmluZSBpbiBncGdwdSB0ZXN0IG9uIEdlbjggYW5kIHVuaWZpZWQgdGhlbS4KCnYzOiBNYWRl IHBhdGNoIGVhc2llciBmb3IgcmV2aWV3aW5nIG1vdmluZyBjaGFuZ2VzIHVuaWZ5aW5nIGNvZGUg Zm9yCnZhcmlvdXMgZ2VucyAodGhhdCB3ZXJlIGluY2x1ZGVkIHYxKSB0byBvdGhlciBwYXRjaCwg bGVhdmluZyBvbmx5CnRoZSBtb3N0IGNyaXRpY2FsIGNvZGUgY2hhbmdlcy4KCnY1OiBBZGRlZCBj b3B5cmlnaHRzIGFuZCAjaWZuZGVmIHRvIGdwdV9maWxsLmgKdjU6IEFkZGVkIGNvcHlyaWdodHMg dG8gZ3B1X2ZpbGwuYwoKU2lnbmVkLW9mZi1ieTogS2F0YXJ6eW5hIERlYyA8a2F0YXJ6eW5hLmRl Y0BpbnRlbC5jb20+CkNjOiBMdWthc3ogS2FsYW1hcnogPGx1a2Fzei5rYWxhbWFyekBpbnRlbC5j b20+CkNjOiBEYW5pZWxlIENlcmFvbG8gU3B1cmlvIDxkYW5pZWxlLmNlcmFvbG9zcHVyaW9AaW50 ZWwuY29tPgotLS0KIGxpYi9NYWtlZmlsZS5zb3VyY2VzICAgIHwgICAyICsKIGxpYi9ncGdwdV9m aWxsLmMgICAgICAgIHwgNTcxICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBs aWIvZ3B1X2ZpbGwuYyAgICAgICAgICB8IDc4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIGxpYi9ncHVfZmlsbC5oICAgICAgICAgIHwgMTY3ICsrKysr KysrKysrCiBsaWIvbWVkaWFfZmlsbF9nZW43LmMgICB8IDI3MSArLS0tLS0tLS0tLS0tLS0tLQog bGliL21lZGlhX2ZpbGxfZ2VuOC5jICAgfCAyOTAgKy0tLS0tLS0tLS0tLS0tLS0tCiBsaWIvbWVk aWFfZmlsbF9nZW44bHAuYyB8IDI4NCArLS0tLS0tLS0tLS0tLS0tLS0KIGxpYi9tZWRpYV9maWxs X2dlbjkuYyAgIHwgMjk4ICstLS0tLS0tLS0tLS0tLS0tLQogbGliL21lc29uLmJ1aWxkICAgICAg ICAgfCAgIDEgKwogOSBmaWxlcyBjaGFuZ2VkLCA5NjEgaW5zZXJ0aW9ucygrKSwgMTcwNSBkZWxl dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvZ3B1X2ZpbGwuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGxpYi9ncHVfZmlsbC5oCgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnNvdXJjZXMg Yi9saWIvTWFrZWZpbGUuc291cmNlcwppbmRleCAzZDM3ZWYxZC4uNDVlNjVkZDcgMTAwNjQ0Ci0t LSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCkBAIC02 NCw2ICs2NCw4IEBAIGxpYl9zb3VyY2VfbGlzdCA9CSAJXAogCW1lZGlhX3NwaW4uYwkJXAogCWdw Z3B1X2ZpbGwuaAkJXAogCWdwZ3B1X2ZpbGwuYwkJXAorCWdwdV9maWxsLmgJCVwKKwlncHVfZmls bC5jCQlcCiAJZ2VuN19tZWRpYS5oICAgICAgICAgICAgXAogCWdlbjhfbWVkaWEuaCAgICAgICAg ICAgIFwKIAlyZW5kZXJjb3B5X2k5MTUuYwlcCmRpZmYgLS1naXQgYS9saWIvZ3BncHVfZmlsbC5j IGIvbGliL2dwZ3B1X2ZpbGwuYwppbmRleCA0ZDk4NjQzZC4uZjI3NjVmZDYgMTAwNjQ0Ci0tLSBh L2xpYi9ncGdwdV9maWxsLmMKKysrIGIvbGliL2dwZ3B1X2ZpbGwuYwpAQCAtMzAsMTAgKzMwLDkg QEAKIAogI2luY2x1ZGUgImludGVsX3JlZy5oIgogI2luY2x1ZGUgImRybXRlc3QuaCIKLSNpbmNs dWRlICJpbnRlbF9iYXRjaGJ1ZmZlci5oIgotI2luY2x1ZGUgImdlbjdfbWVkaWEuaCIKLSNpbmNs dWRlICJnZW44X21lZGlhLmgiCisKICNpbmNsdWRlICJncGdwdV9maWxsLmgiCisjaW5jbHVkZSAi Z3B1X2ZpbGwuaCIKIAogLyogc2hhZGVycy9ncGdwdS9ncGdwdV9maWxsLmd4YSAqLwogc3RhdGlj IGNvbnN0IHVpbnQzMl90IGdlbjdfZ3BncHVfa2VybmVsW11bNF0gPSB7CkBAIC03NSw1NzIgKzc0 LDYgQEAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGdlbjlfZ3BncHVfa2VybmVsW11bNF0gPSB7CiAJ eyAweDA3ODAwMDMxLCAweDIwMDAwYTQwLCAweDA2MDAwZTAwLCAweDgyMDAwMDEwIH0sCiB9Owog Ci1zdGF0aWMgdWludDMyX3QKLWJhdGNoX3VzZWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCkKLXsKLQlyZXR1cm4gYmF0Y2gtPnB0ciAtIGJhdGNoLT5idWZmZXI7Ci19Ci0KLXN0YXRp YyB1aW50MzJfdAotYmF0Y2hfYWxpZ24oc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwg dWludDMyX3QgYWxpZ24pCi17Ci0JdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfdXNlZChiYXRjaCk7 Ci0Jb2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBhbGlnbik7Ci0JYmF0Y2gtPnB0ciA9IGJhdGNoLT5i dWZmZXIgKyBvZmZzZXQ7Ci0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQgKgotYmF0 Y2hfYWxsb2Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qgc2l6ZSwg dWludDMyX3QgYWxpZ24pCi17Ci0JdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfYWxpZ24oYmF0Y2gs IGFsaWduKTsKLQliYXRjaC0+cHRyICs9IHNpemU7Ci0JcmV0dXJuIG1lbXNldChiYXRjaC0+YnVm ZmVyICsgb2Zmc2V0LCAwLCBzaXplKTsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1iYXRjaF9vZmZz ZXQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdm9pZCAqcHRyKQotewotCXJldHVy biAodWludDhfdCAqKXB0ciAtIGJhdGNoLT5idWZmZXI7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAot YmF0Y2hfY29weShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25zdCB2b2lkICpw dHIsIHVpbnQzMl90IHNpemUsCi0JICAgdWludDMyX3QgYWxpZ24pCi17Ci0JcmV0dXJuIGJhdGNo X29mZnNldChiYXRjaCwgbWVtY3B5KGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplLCBhbGlnbiksIHB0 ciwgc2l6ZSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuN19yZW5kZXJfZmx1c2goc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYmF0Y2hfZW5kKQotewotCWludCByZXQ7 Ci0KLQlyZXQgPSBkcm1faW50ZWxfYm9fc3ViZGF0YShiYXRjaC0+Ym8sIDAsIDQwOTYsIGJhdGNo LT5idWZmZXIpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gZHJtX2ludGVsX2JvX21yYl9leGVj KGJhdGNoLT5ibywgYmF0Y2hfZW5kLAotCQkJCQlOVUxMLCAwLCAwLCAwKTsKLQlpZ3RfYXNzZXJ0 KHJldCA9PSAwKTsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1nZW43X2ZpbGxfY3VyYmVfYnVmZmVy X2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDhfdCBjb2xvcikKLXsK LQl1aW50OF90ICpjdXJiZV9idWZmZXI7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCi0JY3VyYmVfYnVm ZmVyID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZih1aW50MzJfdCkgKiA4LCA2NCk7Ci0Jb2Zm c2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBjdXJiZV9idWZmZXIpOwotCSpjdXJiZV9idWZmZXIg PSBjb2xvcjsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuN19m aWxsX3N1cmZhY2Vfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCXN0 cnVjdCBpZ3RfYnVmICpidWYsCi0JCQl1aW50MzJfdCBmb3JtYXQsCi0JCQlpbnQgaXNfZHN0KQot ewotCXN0cnVjdCBnZW43X3N1cmZhY2Vfc3RhdGUgKnNzOwotCXVpbnQzMl90IHdyaXRlX2RvbWFp biwgcmVhZF9kb21haW4sIG9mZnNldDsKLQlpbnQgcmV0OwotCi0JaWYgKGlzX2RzdCkgewotCQl3 cml0ZV9kb21haW4gPSByZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Ci0JfSBl bHNlIHsKLQkJd3JpdGVfZG9tYWluID0gMDsKLQkJcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01B SU5fU0FNUExFUjsKLQl9Ci0KLQlzcyA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YoKnNzKSwg NjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgc3MpOwotCi0Jc3MtPnNzMC5zdXJm YWNlX3R5cGUgPSBHRU43X1NVUkZBQ0VfMkQ7Ci0Jc3MtPnNzMC5zdXJmYWNlX2Zvcm1hdCA9IGZv cm1hdDsKLQlzcy0+c3MwLnJlbmRlcl9jYWNoZV9yZWFkX3dyaXRlID0gMTsKLQotCWlmIChidWYt PnRpbGluZyA9PSBJOTE1X1RJTElOR19YKQotCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAyOwotCWVs c2UgaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1kpCi0JCXNzLT5zczAudGlsZWRfbW9k ZSA9IDM7Ci0KLQlzcy0+c3MxLmJhc2VfYWRkciA9IGJ1Zi0+Ym8tPm9mZnNldDsKLQlyZXQgPSBk cm1faW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8sCi0JCQkJYmF0Y2hfb2Zmc2V0KGJhdGNo LCBzcykgKyA0LAotCQkJCWJ1Zi0+Ym8sIDAsCi0JCQkJcmVhZF9kb21haW4sIHdyaXRlX2RvbWFp bik7Ci0JaWd0X2Fzc2VydChyZXQgPT0gMCk7Ci0KLQlzcy0+c3MyLmhlaWdodCA9IGlndF9idWZf aGVpZ2h0KGJ1ZikgLSAxOwotCXNzLT5zczIud2lkdGggID0gaWd0X2J1Zl93aWR0aChidWYpIC0g MTsKLQotCXNzLT5zczMucGl0Y2ggID0gYnVmLT5zdHJpZGUgLSAxOwotCi0Jc3MtPnNzNy5zaGFk ZXJfY2hhbmVsX3NlbGVjdF9yID0gNDsKLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2cg PSA1OwotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYiA9IDY7Ci0Jc3MtPnNzNy5zaGFk ZXJfY2hhbmVsX3NlbGVjdF9hID0gNzsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1 aW50MzJfdAotZ2VuOF9maWxsX3N1cmZhY2Vfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwKLQkJCXN0cnVjdCBpZ3RfYnVmICpidWYsCi0JCQl1aW50MzJfdCBmb3JtYXQsCi0J CQlpbnQgaXNfZHN0KQotewotCXN0cnVjdCBnZW44X3N1cmZhY2Vfc3RhdGUgKnNzOwotCXVpbnQz Ml90IHdyaXRlX2RvbWFpbiwgcmVhZF9kb21haW4sIG9mZnNldDsKLQlpbnQgcmV0OwotCi0JaWYg KGlzX2RzdCkgewotCQl3cml0ZV9kb21haW4gPSByZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJ Tl9SRU5ERVI7Ci0JfSBlbHNlIHsKLQkJd3JpdGVfZG9tYWluID0gMDsKLQkJcmVhZF9kb21haW4g PSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUjsKLQl9Ci0KLQlzcyA9IGJhdGNoX2FsbG9jKGJhdGNo LCBzaXplb2YoKnNzKSwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgc3MpOwot Ci0Jc3MtPnNzMC5zdXJmYWNlX3R5cGUgPSBHRU44X1NVUkZBQ0VfMkQ7Ci0Jc3MtPnNzMC5zdXJm YWNlX2Zvcm1hdCA9IGZvcm1hdDsKLQlzcy0+c3MwLnJlbmRlcl9jYWNoZV9yZWFkX3dyaXRlID0g MTsKLQlzcy0+c3MwLnZlcnRpY2FsX2FsaWdubWVudCA9IDE7IC8qIGFsaWduIDQgKi8KLQlzcy0+ c3MwLmhvcml6b250YWxfYWxpZ25tZW50ID0gMTsgLyogYWxpZ24gNCAqLwotCi0JaWYgKGJ1Zi0+ dGlsaW5nID09IEk5MTVfVElMSU5HX1gpCi0JCXNzLT5zczAudGlsZWRfbW9kZSA9IDI7Ci0JZWxz ZSBpZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkKLQkJc3MtPnNzMC50aWxlZF9tb2Rl ID0gMzsKLQotCXNzLT5zczguYmFzZV9hZGRyID0gYnVmLT5iby0+b2Zmc2V0OwotCi0JcmV0ID0g ZHJtX2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJvLAotCQkJCWJhdGNoX29mZnNldChiYXRj aCwgc3MpICsgOCAqIDQsCi0JCQkJYnVmLT5ibywgMCwKLQkJCQlyZWFkX2RvbWFpbiwgd3JpdGVf ZG9tYWluKTsKLQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Ci0KLQlzcy0+c3MyLmhlaWdodCA9IGln dF9idWZfaGVpZ2h0KGJ1ZikgLSAxOwotCXNzLT5zczIud2lkdGggID0gaWd0X2J1Zl93aWR0aChi dWYpIC0gMTsKLQlzcy0+c3MzLnBpdGNoICA9IGJ1Zi0+c3RyaWRlIC0gMTsKLQotCXNzLT5zczcu c2hhZGVyX2NoYW5lbF9zZWxlY3RfciA9IDQ7Ci0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVj dF9nID0gNTsKLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2IgPSA2OwotCXNzLT5zczcu c2hhZGVyX2NoYW5lbF9zZWxlY3RfYSA9IDc7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotCi19Ci0KLXN0 YXRpYyB1aW50MzJfdAotZ2VuN19maWxsX2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCwKLQkJCXN0cnVjdCBpZ3RfYnVmICpkc3QpCi17Ci0JdWludDMyX3QgKmJp bmRpbmdfdGFibGUsIG9mZnNldDsKLQotCWJpbmRpbmdfdGFibGUgPSBiYXRjaF9hbGxvYyhiYXRj aCwgMzIsIDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGJpbmRpbmdfdGFibGUp OwotCi0JYmluZGluZ190YWJsZVswXSA9IGdlbjdfZmlsbF9zdXJmYWNlX3N0YXRlKGJhdGNoLCBk c3QsIEdFTjdfU1VSRkFDRUZPUk1BVF9SOF9VTk9STSwgMSk7Ci0KLQlyZXR1cm4gb2Zmc2V0Owot fQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjhfZmlsbF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQotewotCXVpbnQz Ml90ICpiaW5kaW5nX3RhYmxlLCBvZmZzZXQ7Ci0KLQliaW5kaW5nX3RhYmxlID0gYmF0Y2hfYWxs b2MoYmF0Y2gsIDMyLCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBiaW5kaW5n X3RhYmxlKTsKLQotCWJpbmRpbmdfdGFibGVbMF0gPSBnZW44X2ZpbGxfc3VyZmFjZV9zdGF0ZShi YXRjaCwgZHN0LCBHRU44X1NVUkZBQ0VGT1JNQVRfUjhfVU5PUk0sIDEpOwotCi0JcmV0dXJuIG9m ZnNldDsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1nZW43X2ZpbGxfZ3BncHVfa2VybmVsKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCWNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRd LAotCQlzaXplX3Qgc2l6ZSkKLXsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0KLQlvZmZzZXQgPSBiYXRj aF9jb3B5KGJhdGNoLCBrZXJuZWwsIHNpemUsIDY0KTsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0K LXN0YXRpYyB1aW50MzJfdAotZ2VuN19maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHN0cnVjdCBpZ3RfYnVmICpkc3QsCi0JCQkgICAgICAg Y29uc3QgdWludDMyX3Qga2VybmVsW11bNF0sIHNpemVfdCBzaXplKQotewotCXN0cnVjdCBnZW43 X2ludGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEgKmlkZDsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0JdWlu dDMyX3QgYmluZGluZ190YWJsZV9vZmZzZXQsIGtlcm5lbF9vZmZzZXQ7Ci0KLQliaW5kaW5nX3Rh YmxlX29mZnNldCA9IGdlbjdfZmlsbF9iaW5kaW5nX3RhYmxlKGJhdGNoLCBkc3QpOwotCWtlcm5l bF9vZmZzZXQgPSBnZW43X2ZpbGxfZ3BncHVfa2VybmVsKGJhdGNoLCBrZXJuZWwsIHNpemUpOwot Ci0JaWRkID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZigqaWRkKSwgNjQpOwotCW9mZnNldCA9 IGJhdGNoX29mZnNldChiYXRjaCwgaWRkKTsKLQotCWlkZC0+ZGVzYzAua2VybmVsX3N0YXJ0X3Bv aW50ZXIgPSAoa2VybmVsX29mZnNldCA+PiA2KTsKLQotCWlkZC0+ZGVzYzEuc2luZ2xlX3Byb2dy YW1fZmxvdyA9IDE7Ci0JaWRkLT5kZXNjMS5mbG9hdGluZ19wb2ludF9tb2RlID0gR0VON19GTE9B VElOR19QT0lOVF9JRUVFXzc1NDsKLQotCWlkZC0+ZGVzYzIuc2FtcGxlcl9jb3VudCA9IDA7ICAg ICAgLyogMCBzYW1wbGVycyB1c2VkICovCi0JaWRkLT5kZXNjMi5zYW1wbGVyX3N0YXRlX3BvaW50 ZXIgPSAwOwotCi0JaWRkLT5kZXNjMy5iaW5kaW5nX3RhYmxlX2VudHJ5X2NvdW50ID0gMDsKLQlp ZGQtPmRlc2MzLmJpbmRpbmdfdGFibGVfcG9pbnRlciA9IChiaW5kaW5nX3RhYmxlX29mZnNldCA+ PiA1KTsKLQotCWlkZC0+ZGVzYzQuY29uc3RhbnRfdXJiX2VudHJ5X3JlYWRfb2Zmc2V0ID0gMDsK LQlpZGQtPmRlc2M0LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX2xlbmd0aCA9IDE7IC8qIGdyZiAx ICovCi0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjhfZmlsbF9p bnRlcmZhY2VfZGVzY3JpcHRvcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBzdHJ1 Y3QgaWd0X2J1ZiAqZHN0LAotCQkJICAgICAgIGNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLCBz aXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgZ2VuOF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9kYXRhICpp ZGQ7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQzMl90IGJpbmRpbmdfdGFibGVfb2Zmc2V0LCBr ZXJuZWxfb2Zmc2V0OwotCi0JYmluZGluZ190YWJsZV9vZmZzZXQgPSBnZW44X2ZpbGxfYmluZGlu Z190YWJsZShiYXRjaCwgZHN0KTsKLQlrZXJuZWxfb2Zmc2V0ID0gZ2VuN19maWxsX2dwZ3B1X2tl cm5lbChiYXRjaCwga2VybmVsLCBzaXplKTsKLQotCWlkZCA9IGJhdGNoX2FsbG9jKGJhdGNoLCBz aXplb2YoKmlkZCksIDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGlkZCk7Ci0K LQlpZGQtPmRlc2MwLmtlcm5lbF9zdGFydF9wb2ludGVyID0gKGtlcm5lbF9vZmZzZXQgPj4gNik7 Ci0KLQlpZGQtPmRlc2MyLnNpbmdsZV9wcm9ncmFtX2Zsb3cgPSAxOwotCWlkZC0+ZGVzYzIuZmxv YXRpbmdfcG9pbnRfbW9kZSA9IEdFTjhfRkxPQVRJTkdfUE9JTlRfSUVFRV83NTQ7Ci0KLQlpZGQt PmRlc2MzLnNhbXBsZXJfY291bnQgPSAwOyAgICAgIC8qIDAgc2FtcGxlcnMgdXNlZCAqLwotCWlk ZC0+ZGVzYzMuc2FtcGxlcl9zdGF0ZV9wb2ludGVyID0gMDsKLQotCWlkZC0+ZGVzYzQuYmluZGlu Z190YWJsZV9lbnRyeV9jb3VudCA9IDA7Ci0JaWRkLT5kZXNjNC5iaW5kaW5nX3RhYmxlX3BvaW50 ZXIgPSAoYmluZGluZ190YWJsZV9vZmZzZXQgPj4gNSk7Ci0KLQlpZGQtPmRlc2M1LmNvbnN0YW50 X3VyYl9lbnRyeV9yZWFkX29mZnNldCA9IDA7Ci0JaWRkLT5kZXNjNS5jb25zdGFudF91cmJfZW50 cnlfcmVhZF9sZW5ndGggPSAxOyAvKiBncmYgMSAqLwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQot c3RhdGljIHZvaWQKLWdlbjdfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCkKLXsKLQlPVVRfQkFUQ0goR0VON19TVEFURV9CQVNFX0FERFJFU1Mg fCAoMTAgLSAyKSk7Ci0KLQkvKiBnZW5lcmFsICovCi0JT1VUX0JBVENIKDApOwotCi0JLyogc3Vy ZmFjZSAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElP TiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBkeW5hbWljICovCi0JT1VUX1JFTE9D KGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1Nf TU9ESUZZKTsKLQotCS8qIGluZGlyZWN0ICovCi0JT1VUX0JBVENIKDApOwotCi0JLyogaW5zdHJ1 Y3Rpb24gKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJ T04sIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogZ2VuZXJhbC9keW5hbWljL2luZGly ZWN0L2luc3RydWN0aW9uIGFjY2VzcyBCb3VuZCAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0go MCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0X3N0 YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQotewotCU9V VF9CQVRDSChHRU44X1NUQVRFX0JBU0VfQUREUkVTUyB8ICgxNiAtIDIpKTsKLQotCS8qIGdlbmVy YWwgKi8KLQlPVVRfQkFUQ0goMCB8ICgweDc4IDw8IDQpIHwgKDAgPDwgMSkgfCAgQkFTRV9BRERS RVNTX01PRElGWSk7Ci0JT1VUX0JBVENIKDApOwotCi0JLyogc3RhdGVsZXNzIGRhdGEgcG9ydCAq LwotCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBzdXJmYWNlICov Ci0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIsIDAsIEJBU0Vf QUREUkVTU19NT0RJRlkpOwotCi0JLyogZHluYW1pYyAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8s IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIgfCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sCi0J CSAgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBpbmRpcmVjdCAqLwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMCApOwotCi0JLyogaW5zdHJ1Y3Rpb24gKi8KLQlPVVRfUkVMT0Mo YmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0VfQUREUkVTU19N T0RJRlkpOwotCi0JLyogZ2VuZXJhbCBzdGF0ZSBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgw eGZmZmZmMDAwIHwgMSk7Ci0JLyogZHluYW1pYyBzdGF0ZSBidWZmZXIgc2l6ZSAqLwotCU9VVF9C QVRDSCgxIDw8IDEyIHwgMSk7Ci0JLyogaW5kaXJlY3Qgb2JqZWN0IGJ1ZmZlciBzaXplICovCi0J T1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAxKTsKLQkvKiBpbnRydWN0aW9uIGJ1ZmZlciBzaXplLCBt dXN0IHNldCBtb2RpZnkgZW5hYmxlIGJpdCwgb3RoZXJ3aXNlIGl0IG1heSByZXN1bHQgaW4gR1BV IGhhbmcgKi8KLQlPVVRfQkFUQ0goMSA8PCAxMiB8IDEpOwotfQotCi1zdGF0aWMgdm9pZAotZ2Vu OV9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo KQotewotCU9VVF9CQVRDSChHRU44X1NUQVRFX0JBU0VfQUREUkVTUyB8ICgxOSAtIDIpKTsKLQot CS8qIGdlbmVyYWwgKi8KLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCU9V VF9CQVRDSCgwKTsKLQotCS8qIHN0YXRlbGVzcyBkYXRhIHBvcnQgKi8KLQlPVVRfQkFUQ0goMCB8 IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogc3VyZmFjZSAqLwotCU9VVF9SRUxPQyhiYXRj aC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsK LQotCS8qIGR5bmFtaWMgKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5f UkVOREVSIHwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAotCQkwLCBCQVNFX0FERFJFU1Nf TU9ESUZZKTsKLQotCS8qIGluZGlyZWN0ICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKLQotCS8qIGluc3RydWN0aW9uICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1f RE9NQUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGdlbmVy YWwgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOwotCS8q IGR5bmFtaWMgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMSA8PCAxMiB8IDEpOwot CS8qIGluZGlyZWN0IG9iamVjdCBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgweGZmZmZmMDAw IHwgMSk7Ci0JLyogaW50cnVjdGlvbiBidWZmZXIgc2l6ZSwgbXVzdCBzZXQgbW9kaWZ5IGVuYWJs ZSBiaXQsIG90aGVyd2lzZSBpdCBtYXkgcmVzdWx0IGluIEdQVSBoYW5nICovCi0JT1VUX0JBVENI KDEgPDwgMTIgfCAxKTsKLQotCS8qIEJpbmRsZXNzIHN1cmZhY2Ugc3RhdGUgYmFzZSBhZGRyZXNz ICovCi0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQlPVVRfQkFUQ0goMCk7 Ci0JT1VUX0JBVENIKDB4ZmZmZmYwMDApOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuN19lbWl0X3Zm ZV9zdGF0ZV9ncGdwdShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQotewotCU9VVF9C QVRDSChHRU43X01FRElBX1ZGRV9TVEFURSB8ICg4IC0gMikpOwotCi0JLyogc2NyYXRjaCBidWZm ZXIgKi8KLQlPVVRfQkFUQ0goMCk7Ci0KLQkvKiBudW1iZXIgb2YgdGhyZWFkcyAmIHVyYiBlbnRy aWVzICovCi0JT1VUX0JBVENIKDEgPDwgMTYgfCAvKiBtYXggbnVtIG9mIHRocmVhZHMgKi8KLQkJ ICAwIDw8IDggfCAvKiBudW0gb2YgVVJCIGVudHJ5ICovCi0JCSAgMSA8PCAyKTsgLyogR1BHUFUg bW9kZSAqLwotCi0JT1VUX0JBVENIKDApOwotCi0JLyogdXJiIGVudHJ5IHNpemUgJiBjdXJiZSBz aXplICovCi0JT1VUX0JBVENIKDAgPDwgMTYgfCAJLyogVVJCIGVudHJ5IHNpemUgaW4gMjU2IGJp dHMgdW5pdCAqLwotCQkgIDEpOwkJLyogQ1VSQkUgZW50cnkgc2l6ZSBpbiAyNTYgYml0cyB1bml0 ICovCi0KLQkvKiBzY29yZWJvYXJkICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW44X2VtaXRfdmZlX3N0YXRlX2dw Z3B1KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCi17Ci0JT1VUX0JBVENIKEdFTjhf TUVESUFfVkZFX1NUQVRFIHwgKDkgLSAyKSk7Ci0KLQkvKiBzY3JhdGNoIGJ1ZmZlciAqLwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQkvKiBudW1iZXIgb2YgdGhyZWFkcyAmIHVy YiBlbnRyaWVzICovCi0JT1VUX0JBVENIKDEgPDwgMTYgfCAxIDw8IDgpOwotCi0JT1VUX0JBVENI KDApOwotCi0JLyogdXJiIGVudHJ5IHNpemUgJiBjdXJiZSBzaXplICovCi0JT1VUX0JBVENIKDAg PDwgMTYgfCAxKTsKLQotCS8qIHNjb3JlYm9hcmQgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9jdXJi ZV9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGN1cmJlX2J1 ZmZlcikKLXsKLQlPVVRfQkFUQ0goR0VON19NRURJQV9DVVJCRV9MT0FEIHwgKDQgLSAyKSk7Ci0J T1VUX0JBVENIKDApOwotCS8qIGN1cmJlIHRvdGFsIGRhdGEgbGVuZ3RoICovCi0JT1VUX0JBVENI KDY0KTsKLQkvKiBjdXJiZSBkYXRhIHN0YXJ0IGFkZHJlc3MsIGlzIHJlbGF0aXZlIHRvIHRoZSBk eW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KLQlPVVRfQkFUQ0goY3VyYmVfYnVmZmVyKTsKLX0KLQot c3RhdGljIHZvaWQKLWdlbjdfZW1pdF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9sb2FkKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGludGVyZmFjZV9kZXNjcmlwdG9yKQot ewotCU9VVF9CQVRDSChHRU43X01FRElBX0lOVEVSRkFDRV9ERVNDUklQVE9SX0xPQUQgfCAoNCAt IDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JLyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgZGF0YSBsZW5n dGggKi8KLQlPVVRfQkFUQ0goc2l6ZW9mKHN0cnVjdCBnZW43X2ludGVyZmFjZV9kZXNjcmlwdG9y X2RhdGEpKTsKLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBhZGRyZXNzLCBpcyByZWxhdGl2ZSB0 byB0aGUgZHluYW1pY3MgYmFzZSBhZGRyZXNzICovCi0JT1VUX0JBVENIKGludGVyZmFjZV9kZXNj cmlwdG9yKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9pbnRlcmZhY2VfZGVzY3JpcHRv cl9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGludGVyZmFj ZV9kZXNjcmlwdG9yKQotewotCU9VVF9CQVRDSChHRU44X01FRElBX0lOVEVSRkFDRV9ERVNDUklQ VE9SX0xPQUQgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JLyogaW50ZXJmYWNlIGRlc2Ny aXB0b3IgZGF0YSBsZW5ndGggKi8KLQlPVVRfQkFUQ0goc2l6ZW9mKHN0cnVjdCBnZW44X2ludGVy ZmFjZV9kZXNjcmlwdG9yX2RhdGEpKTsKLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBhZGRyZXNz LCBpcyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFzZSBhZGRyZXNzICovCi0JT1VUX0JBVENI KGludGVyZmFjZV9kZXNjcmlwdG9yKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9ncGdw dV93YWxrKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCSAgICAgdW5zaWduZWQg eCwgdW5zaWduZWQgeSwKLQkJICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQot ewotCXVpbnQzMl90IHhfZGltLCB5X2RpbSwgdG1wLCByaWdodF9tYXNrOwotCi0JLyoKLQkgKiBT aW1wbHkgZG8gU0lNRDE2IGJhc2VkIGRpc3BhdGNoLCBzbyBldmVyeSB0aHJlYWQgdXNlcwotCSAq IFNJTUQxNiBjaGFubmVscy4KLQkgKgotCSAqIERlZmluZSBvdXIgb3duIHRocmVhZCBncm91cCBz aXplLCBlLmcgMTZ4MSBmb3IgZXZlcnkgZ3JvdXAsIHRoZW4KLQkgKiB3aWxsIGhhdmUgMSB0aHJl YWQgZWFjaCBncm91cCBpbiBTSU1EMTYgZGlzcGF0Y2guIFNvIHRocmVhZAotCSAqIHdpZHRoL2hl aWdodC9kZXB0aCBhcmUgYWxsIDEuCi0JICoKLQkgKiBUaGVuIHRocmVhZCBncm91cCBYID0gd2lk dGggLyAxNiAoYWxpZ25lZCB0byAxNikKLQkgKiB0aHJlYWQgZ3JvdXAgWSA9IGhlaWdodDsKLQkg Ki8KLQl4X2RpbSA9ICh3aWR0aCArIDE1KSAvIDE2OwotCXlfZGltID0gaGVpZ2h0OwotCi0JdG1w ID0gd2lkdGggJiAxNTsKLQlpZiAodG1wID09IDApCi0JCXJpZ2h0X21hc2sgPSAoMSA8PCAxNikg LSAxOwotCWVsc2UKLQkJcmlnaHRfbWFzayA9ICgxIDw8IHRtcCkgLSAxOwotCi0JT1VUX0JBVENI KEdFTjdfR1BHUFVfV0FMS0VSIHwgOSk7Ci0KLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBvZmZz ZXQgKi8KLQlPVVRfQkFUQ0goMCk7Ci0KLQkvKiBTSU1EIHNpemUsIHRocmVhZCB3L2gvZCAqLwot CU9VVF9CQVRDSCgxIDw8IDMwIHwgLyogU0lNRDE2ICovCi0JCSAgMCA8PCAxNiB8IC8qIGRlcHRo OjEgKi8KLQkJICAwIDw8IDggfCAvKiBoZWlnaHQ6MSAqLwotCQkgIDApOyAvKiB3aWR0aDoxICov Ci0KLQkvKiB0aHJlYWQgZ3JvdXAgWCAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goeF9k aW0pOwotCi0JLyogdGhyZWFkIGdyb3VwIFkgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KHlfZGltKTsKLQotCS8qIHRocmVhZCBncm91cCBaICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgxKTsKLQotCS8qIHJpZ2h0IG1hc2sgKi8KLQlPVVRfQkFUQ0gocmlnaHRfbWFzayk7Ci0K LQkvKiBib3R0b20gbWFzaywgaGVpZ2h0IDEsIGFsd2F5cyAweGZmZmZmZmZmICovCi0JT1VUX0JB VENIKDB4ZmZmZmZmZmYpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0X2dwZ3B1X3dhbGso c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJICAgICB1bnNpZ25lZCB4LCB1bnNp Z25lZCB5LAotCQkgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCi17Ci0JdWlu dDMyX3QgeF9kaW0sIHlfZGltLCB0bXAsIHJpZ2h0X21hc2s7Ci0KLQkvKgotCSAqIFNpbXBseSBk byBTSU1EMTYgYmFzZWQgZGlzcGF0Y2gsIHNvIGV2ZXJ5IHRocmVhZCB1c2VzCi0JICogU0lNRDE2 IGNoYW5uZWxzLgotCSAqCi0JICogRGVmaW5lIG91ciBvd24gdGhyZWFkIGdyb3VwIHNpemUsIGUu ZyAxNngxIGZvciBldmVyeSBncm91cCwgdGhlbgotCSAqIHdpbGwgaGF2ZSAxIHRocmVhZCBlYWNo IGdyb3VwIGluIFNJTUQxNiBkaXNwYXRjaC4gU28gdGhyZWFkCi0JICogd2lkdGgvaGVpZ2h0L2Rl cHRoIGFyZSBhbGwgMS4KLQkgKgotCSAqIFRoZW4gdGhyZWFkIGdyb3VwIFggPSB3aWR0aCAvIDE2 IChhbGlnbmVkIHRvIDE2KQotCSAqIHRocmVhZCBncm91cCBZID0gaGVpZ2h0OwotCSAqLwotCXhf ZGltID0gKHdpZHRoICsgMTUpIC8gMTY7Ci0JeV9kaW0gPSBoZWlnaHQ7Ci0KLQl0bXAgPSB3aWR0 aCAmIDE1OwotCWlmICh0bXAgPT0gMCkKLQkJcmlnaHRfbWFzayA9ICgxIDw8IDE2KSAtIDE7Ci0J ZWxzZQotCQlyaWdodF9tYXNrID0gKDEgPDwgdG1wKSAtIDE7Ci0KLQlPVVRfQkFUQ0goR0VON19H UEdQVV9XQUxLRVIgfCAxMyk7Ci0KLQlPVVRfQkFUQ0goMCk7IC8qIGtlcm5lbCBvZmZzZXQgKi8K LQlPVVRfQkFUQ0goMCk7IC8qIGluZGlyZWN0IGRhdGEgbGVuZ3RoICovCi0JT1VUX0JBVENIKDAp OyAvKiBpbmRpcmVjdCBkYXRhIG9mZnNldCAqLwotCi0JLyogU0lNRCBzaXplLCB0aHJlYWQgdy9o L2QgKi8KLQlPVVRfQkFUQ0goMSA8PCAzMCB8IC8qIFNJTUQxNiAqLwotCQkgIDAgPDwgMTYgfCAv KiBkZXB0aDoxICovCi0JCSAgMCA8PCA4IHwgLyogaGVpZ2h0OjEgKi8KLQkJICAwKTsgLyogd2lk dGg6MSAqLwotCi0JLyogdGhyZWFkIGdyb3VwIFggKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCh4X2RpbSk7Ci0KLQkvKiB0aHJlYWQgZ3JvdXAgWSAqLwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKHlfZGltKTsKLQotCS8qIHRo cmVhZCBncm91cCBaICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgxKTsKLQotCS8qIHJp Z2h0IG1hc2sgKi8KLQlPVVRfQkFUQ0gocmlnaHRfbWFzayk7Ci0KLQkvKiBib3R0b20gbWFzaywg aGVpZ2h0IDEsIGFsd2F5cyAweGZmZmZmZmZmICovCi0JT1VUX0JBVENIKDB4ZmZmZmZmZmYpOwot fQotCiAvKgogICogVGhpcyBzZXRzIHVwIHRoZSBncGdwdSBwaXBlbGluZSwKICAqCmRpZmYgLS1n aXQgYS9saWIvZ3B1X2ZpbGwuYyBiL2xpYi9ncHVfZmlsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwLi5kN2EyZGQ0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ncHVfZmls bC5jCkBAIC0wLDAgKzEsNzgyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29y cG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hh bGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisg KgorICovCisKKyNpbmNsdWRlICJncHVfZmlsbC5oIgorCit1aW50MzJfdAorYmF0Y2hfdXNlZChz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQoreworCXJldHVybiBiYXRjaC0+cHRyIC0g YmF0Y2gtPmJ1ZmZlcjsKK30KKwordWludDMyX3QKK2JhdGNoX2FsaWduKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGFsaWduKQoreworCXVpbnQzMl90IG9mZnNldCA9 IGJhdGNoX3VzZWQoYmF0Y2gpOworCW9mZnNldCA9IEFMSUdOKG9mZnNldCwgYWxpZ24pOworCWJh dGNoLT5wdHIgPSBiYXRjaC0+YnVmZmVyICsgb2Zmc2V0OworCXJldHVybiBvZmZzZXQ7Cit9CisK K3ZvaWQgKgorYmF0Y2hfYWxsb2Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWlu dDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24pCit7CisJdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hf YWxpZ24oYmF0Y2gsIGFsaWduKTsKKwliYXRjaC0+cHRyICs9IHNpemU7CisJcmV0dXJuIG1lbXNl dChiYXRjaC0+YnVmZmVyICsgb2Zmc2V0LCAwLCBzaXplKTsKK30KKwordWludDMyX3QKK2JhdGNo X29mZnNldChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB2b2lkICpwdHIpCit7CisJ cmV0dXJuICh1aW50OF90ICopcHRyIC0gYmF0Y2gtPmJ1ZmZlcjsKK30KKwordWludDMyX3QKK2Jh dGNoX2NvcHkoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgY29uc3Qgdm9pZCAqcHRy LCB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBhbGlnbikKK3sKKwlyZXR1cm4gYmF0Y2hfb2Zmc2V0 KGJhdGNoLCBtZW1jcHkoYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemUsIGFsaWduKSwgcHRyLCBzaXpl KSk7Cit9CisKK3ZvaWQKK2dlbjdfcmVuZGVyX2ZsdXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gsIHVpbnQzMl90IGJhdGNoX2VuZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZHJt X2ludGVsX2JvX3N1YmRhdGEoYmF0Y2gtPmJvLCAwLCA0MDk2LCBiYXRjaC0+YnVmZmVyKTsKKwlp ZiAocmV0ID09IDApCisJCXJldCA9IGRybV9pbnRlbF9ib19tcmJfZXhlYyhiYXRjaC0+Ym8sIGJh dGNoX2VuZCwKKwkJCQkJTlVMTCwgMCwgMCwgMCk7CisJaWd0X2Fzc2VydChyZXQgPT0gMCk7Cit9 CisKK3VpbnQzMl90CitnZW43X2ZpbGxfY3VyYmVfYnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwKKwkJCXVpbnQ4X3QgY29sb3IpCit7CisJdWludDhfdCAqY3VyYmVf YnVmZmVyOworCXVpbnQzMl90IG9mZnNldDsKKworCWN1cmJlX2J1ZmZlciA9IGJhdGNoX2FsbG9j KGJhdGNoLCBzaXplb2YodWludDMyX3QpICogOCwgNjQpOworCW9mZnNldCA9IGJhdGNoX29mZnNl dChiYXRjaCwgY3VyYmVfYnVmZmVyKTsKKwkqY3VyYmVfYnVmZmVyID0gY29sb3I7CisKKwlyZXR1 cm4gb2Zmc2V0OworfQorCit1aW50MzJfdAorZ2VuN19maWxsX3N1cmZhY2Vfc3RhdGUoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJCXN0cnVjdCBpZ3RfYnVmICpidWYsCisJCQl1 aW50MzJfdCBmb3JtYXQsCisJCQlpbnQgaXNfZHN0KQoreworCXN0cnVjdCBnZW43X3N1cmZhY2Vf c3RhdGUgKnNzOworCXVpbnQzMl90IHdyaXRlX2RvbWFpbiwgcmVhZF9kb21haW4sIG9mZnNldDsK KwlpbnQgcmV0OworCisJaWYgKGlzX2RzdCkgeworCQl3cml0ZV9kb21haW4gPSByZWFkX2RvbWFp biA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7CisJfSBlbHNlIHsKKwkJd3JpdGVfZG9tYWluID0g MDsKKwkJcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUjsKKwl9CisKKwlzcyA9 IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YoKnNzKSwgNjQpOworCW9mZnNldCA9IGJhdGNoX29m ZnNldChiYXRjaCwgc3MpOworCisJc3MtPnNzMC5zdXJmYWNlX3R5cGUgPSBHRU43X1NVUkZBQ0Vf MkQ7CisJc3MtPnNzMC5zdXJmYWNlX2Zvcm1hdCA9IGZvcm1hdDsKKwlzcy0+c3MwLnJlbmRlcl9j YWNoZV9yZWFkX3dyaXRlID0gMTsKKworCWlmIChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19Y KQorCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAyOworCWVsc2UgaWYgKGJ1Zi0+dGlsaW5nID09IEk5 MTVfVElMSU5HX1kpCisJCXNzLT5zczAudGlsZWRfbW9kZSA9IDM7CisKKwlzcy0+c3MxLmJhc2Vf YWRkciA9IGJ1Zi0+Ym8tPm9mZnNldDsKKwlyZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhi YXRjaC0+Ym8sCisJCQkJYmF0Y2hfb2Zmc2V0KGJhdGNoLCBzcykgKyA0LAorCQkJCWJ1Zi0+Ym8s IDAsCisJCQkJcmVhZF9kb21haW4sIHdyaXRlX2RvbWFpbik7CisJaWd0X2Fzc2VydChyZXQgPT0g MCk7CisKKwlzcy0+c3MyLmhlaWdodCA9IGlndF9idWZfaGVpZ2h0KGJ1ZikgLSAxOworCXNzLT5z czIud2lkdGggID0gaWd0X2J1Zl93aWR0aChidWYpIC0gMTsKKworCXNzLT5zczMucGl0Y2ggID0g YnVmLT5zdHJpZGUgLSAxOworCisJc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9yID0gNDsK Kwlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2cgPSA1OworCXNzLT5zczcuc2hhZGVyX2No YW5lbF9zZWxlY3RfYiA9IDY7CisJc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9hID0gNzsK KworCXJldHVybiBvZmZzZXQ7Cit9CisKK3VpbnQzMl90CitnZW43X2ZpbGxfYmluZGluZ190YWJs ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJc3RydWN0IGlndF9idWYgKmRz dCkKK3sKKwl1aW50MzJfdCAqYmluZGluZ190YWJsZSwgb2Zmc2V0OworCisJYmluZGluZ190YWJs ZSA9IGJhdGNoX2FsbG9jKGJhdGNoLCAzMiwgNjQpOworCW9mZnNldCA9IGJhdGNoX29mZnNldChi YXRjaCwgYmluZGluZ190YWJsZSk7CisJYmluZGluZ190YWJsZVswXSA9IGdlbjdfZmlsbF9zdXJm YWNlX3N0YXRlKGJhdGNoLCBkc3QsCisJCQkJCQlHRU43X1NVUkZBQ0VGT1JNQVRfUjhfVU5PUk0s IDEpOworCisJcmV0dXJuIG9mZnNldDsKK30KKwordWludDMyX3QKK2dlbjdfZmlsbF9tZWRpYV9r ZXJuZWwoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJY29uc3QgdWludDMyX3Qg a2VybmVsW11bNF0sCisJCXNpemVfdCBzaXplKQoreworCXVpbnQzMl90IG9mZnNldDsKKworCW9m ZnNldCA9IGJhdGNoX2NvcHkoYmF0Y2gsIGtlcm5lbCwgc2l6ZSwgNjQpOworCisJcmV0dXJuIG9m ZnNldDsKK30KKwordWludDMyX3QKK2dlbjhfZmlsbF9tZWRpYV9rZXJuZWwoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJY29uc3QgdWludDMyX3Qga2VybmVsW11bNF0sCisJCXNp emVfdCBzaXplKQoreworCXVpbnQzMl90IG9mZnNldDsKKworCW9mZnNldCA9IGJhdGNoX2NvcHko YmF0Y2gsIGtlcm5lbCwgc2l6ZSwgNjQpOworCisJcmV0dXJuIG9mZnNldDsKK30KKwordWludDMy X3QKK2dlbjdfZmlsbF9pbnRlcmZhY2VfZGVzY3JpcHRvcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LAorCQkJICAgICAgIGNvbnN0IHVpbnQzMl90 IGtlcm5lbFtdWzRdLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZ2VuN19pbnRlcmZhY2VfZGVz Y3JpcHRvcl9kYXRhICppZGQ7CisJdWludDMyX3Qgb2Zmc2V0OworCXVpbnQzMl90IGJpbmRpbmdf dGFibGVfb2Zmc2V0LCBrZXJuZWxfb2Zmc2V0OworCisJYmluZGluZ190YWJsZV9vZmZzZXQgPSBn ZW43X2ZpbGxfYmluZGluZ190YWJsZShiYXRjaCwgZHN0KTsKKwlrZXJuZWxfb2Zmc2V0ID0gZ2Vu N19maWxsX21lZGlhX2tlcm5lbChiYXRjaCwga2VybmVsLCBzaXplKTsKKworCWlkZCA9IGJhdGNo X2FsbG9jKGJhdGNoLCBzaXplb2YoKmlkZCksIDY0KTsKKwlvZmZzZXQgPSBiYXRjaF9vZmZzZXQo YmF0Y2gsIGlkZCk7CisKKwlpZGQtPmRlc2MwLmtlcm5lbF9zdGFydF9wb2ludGVyID0gKGtlcm5l bF9vZmZzZXQgPj4gNik7CisKKwlpZGQtPmRlc2MxLnNpbmdsZV9wcm9ncmFtX2Zsb3cgPSAxOwor CWlkZC0+ZGVzYzEuZmxvYXRpbmdfcG9pbnRfbW9kZSA9IEdFTjdfRkxPQVRJTkdfUE9JTlRfSUVF RV83NTQ7CisKKwlpZGQtPmRlc2MyLnNhbXBsZXJfY291bnQgPSAwOyAgICAgIC8qIDAgc2FtcGxl cnMgdXNlZCAqLworCWlkZC0+ZGVzYzIuc2FtcGxlcl9zdGF0ZV9wb2ludGVyID0gMDsKKworCWlk ZC0+ZGVzYzMuYmluZGluZ190YWJsZV9lbnRyeV9jb3VudCA9IDA7CisJaWRkLT5kZXNjMy5iaW5k aW5nX3RhYmxlX3BvaW50ZXIgPSAoYmluZGluZ190YWJsZV9vZmZzZXQgPj4gNSk7CisKKwlpZGQt PmRlc2M0LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX29mZnNldCA9IDA7CisJaWRkLT5kZXNjNC5j b25zdGFudF91cmJfZW50cnlfcmVhZF9sZW5ndGggPSAxOyAvKiBncmYgMSAqLworCisJcmV0dXJu IG9mZnNldDsKK30KKwordm9pZAorZ2VuN19lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQoreworCU9VVF9CQVRDSChHRU43X1NUQVRFX0JBU0Vf QUREUkVTUyB8ICgxMCAtIDIpKTsKKworCS8qIGdlbmVyYWwgKi8KKwlPVVRfQkFUQ0goMCk7CisK KwkvKiBzdXJmYWNlICovCisJT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lO U1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKworCS8qIGR5bmFtaWMgKi8KKwlP VVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0Vf QUREUkVTU19NT0RJRlkpOworCisJLyogaW5kaXJlY3QgKi8KKwlPVVRfQkFUQ0goMCk7CisKKwkv KiBpbnN0cnVjdGlvbiAqLworCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9J TlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7CisKKwkvKiBnZW5lcmFsL2R5bmFt aWMvaW5kaXJlY3QvaW5zdHJ1Y3Rpb24gYWNjZXNzIEJvdW5kICovCisJT1VUX0JBVENIKDApOwor CU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7CisJT1VUX0JBVENIKDApOworCU9V VF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7Cit9CisKK3ZvaWQKK2dlbjdfZW1pdF92 ZmVfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK3sKKwlPVVRfQkFUQ0go R0VON19NRURJQV9WRkVfU1RBVEUgfCAoOCAtIDIpKTsKKworCS8qIHNjcmF0Y2ggYnVmZmVyICov CisJT1VUX0JBVENIKDApOworCisJLyogbnVtYmVyIG9mIHRocmVhZHMgJiB1cmIgZW50cmllcyAq LworCU9VVF9CQVRDSCgxIDw8IDE2IHwKKwkJMiA8PCA4KTsKKworCU9VVF9CQVRDSCgwKTsKKwor CS8qIHVyYiBlbnRyeSBzaXplICYgY3VyYmUgc2l6ZSAqLworCU9VVF9CQVRDSCgyIDw8IDE2IHwg CS8qIGluIDI1NiBiaXRzIHVuaXQgKi8KKwkJMik7CQkvKiBpbiAyNTYgYml0cyB1bml0ICovCisK KwkvKiBzY29yZWJvYXJkICovCisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsKKwlPVVRf QkFUQ0goMCk7Cit9CisKK3ZvaWQKK2dlbjdfZW1pdF92ZmVfc3RhdGVfZ3BncHUoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK3sKKwlPVVRfQkFUQ0goR0VON19NRURJQV9WRkVfU1RB VEUgfCAoOCAtIDIpKTsKKworCS8qIHNjcmF0Y2ggYnVmZmVyICovCisJT1VUX0JBVENIKDApOwor CisJLyogbnVtYmVyIG9mIHRocmVhZHMgJiB1cmIgZW50cmllcyAqLworCU9VVF9CQVRDSCgxIDw8 IDE2IHwgLyogbWF4IG51bSBvZiB0aHJlYWRzICovCisJCSAgMCA8PCA4IHwgLyogbnVtIG9mIFVS QiBlbnRyeSAqLworCQkgIDEgPDwgMik7IC8qIEdQR1BVIG1vZGUgKi8KKworCU9VVF9CQVRDSCgw KTsKKworCS8qIHVyYiBlbnRyeSBzaXplICYgY3VyYmUgc2l6ZSAqLworCU9VVF9CQVRDSCgwIDw8 IDE2IHwgCS8qIFVSQiBlbnRyeSBzaXplIGluIDI1NiBiaXRzIHVuaXQgKi8KKwkJICAxKTsJCS8q IENVUkJFIGVudHJ5IHNpemUgaW4gMjU2IGJpdHMgdW5pdCAqLworCisJLyogc2NvcmVib2FyZCAq LworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDApOworfQorCit2 b2lkCitnZW43X2VtaXRfY3VyYmVfbG9hZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LCB1aW50MzJfdCBjdXJiZV9idWZmZXIpCit7CisJT1VUX0JBVENIKEdFTjdfTUVESUFfQ1VSQkVf TE9BRCB8ICg0IC0gMikpOworCU9VVF9CQVRDSCgwKTsKKwkvKiBjdXJiZSB0b3RhbCBkYXRhIGxl bmd0aCAqLworCU9VVF9CQVRDSCg2NCk7CisJLyogY3VyYmUgZGF0YSBzdGFydCBhZGRyZXNzLCBp cyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFzZSBhZGRyZXNzICovCisJT1VUX0JBVENIKGN1 cmJlX2J1ZmZlcik7Cit9CisKK3ZvaWQKK2dlbjdfZW1pdF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9s b2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGludGVyZmFjZV9k ZXNjcmlwdG9yKQoreworCU9VVF9CQVRDSChHRU43X01FRElBX0lOVEVSRkFDRV9ERVNDUklQVE9S X0xPQUQgfCAoNCAtIDIpKTsKKwlPVVRfQkFUQ0goMCk7CisJLyogaW50ZXJmYWNlIGRlc2NyaXB0 b3IgZGF0YSBsZW5ndGggKi8KKwlPVVRfQkFUQ0goc2l6ZW9mKHN0cnVjdCBnZW43X2ludGVyZmFj ZV9kZXNjcmlwdG9yX2RhdGEpKTsKKwkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBhZGRyZXNzLCBp cyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFzZSBhZGRyZXNzICovCisJT1VUX0JBVENIKGlu dGVyZmFjZV9kZXNjcmlwdG9yKTsKK30KKwordm9pZAorZ2VuN19lbWl0X21lZGlhX29iamVjdHMo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJCXVuc2lnbmVkIHgsIHVuc2lnbmVk IHksCisJCQl1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQoreworCWludCBpLCBqOwor CisJZm9yIChpID0gMDsgaSA8IHdpZHRoIC8gMTY7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwg aGVpZ2h0IC8gMTY7IGorKykgeworCQkJT1VUX0JBVENIKEdFTjdfTUVESUFfT0JKRUNUIHwgKDgg LSAyKSk7CisKKwkJCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIG9mZnNldCAqLworCQkJT1VUX0JB VENIKDApOworCisJCQkvKiB3aXRob3V0IGluZGlyZWN0IGRhdGEgKi8KKwkJCU9VVF9CQVRDSCgw KTsKKwkJCU9VVF9CQVRDSCgwKTsKKworCQkJLyogc2NvcmVib2FyZCAqLworCQkJT1VUX0JBVENI KDApOworCQkJT1VUX0JBVENIKDApOworCisJCQkvKiBpbmxpbmUgZGF0YSAoeG9mZnNldCwgeW9m ZnNldCkgKi8KKwkJCU9VVF9CQVRDSCh4ICsgaSAqIDE2KTsKKwkJCU9VVF9CQVRDSCh5ICsgaiAq IDE2KTsKKwkJfQorCX0KK30KKwordm9pZAorZ2VuN19lbWl0X2dwZ3B1X3dhbGsoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJICAgICB1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LAor CQkgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCit7CisJdWludDMyX3QgeF9k aW0sIHlfZGltLCB0bXAsIHJpZ2h0X21hc2s7CisKKwkvKgorCSAqIFNpbXBseSBkbyBTSU1EMTYg YmFzZWQgZGlzcGF0Y2gsIHNvIGV2ZXJ5IHRocmVhZCB1c2VzCisJICogU0lNRDE2IGNoYW5uZWxz LgorCSAqCisJICogRGVmaW5lIG91ciBvd24gdGhyZWFkIGdyb3VwIHNpemUsIGUuZyAxNngxIGZv ciBldmVyeSBncm91cCwgdGhlbgorCSAqIHdpbGwgaGF2ZSAxIHRocmVhZCBlYWNoIGdyb3VwIGlu IFNJTUQxNiBkaXNwYXRjaC4gU28gdGhyZWFkCisJICogd2lkdGgvaGVpZ2h0L2RlcHRoIGFyZSBh bGwgMS4KKwkgKgorCSAqIFRoZW4gdGhyZWFkIGdyb3VwIFggPSB3aWR0aCAvIDE2IChhbGlnbmVk IHRvIDE2KQorCSAqIHRocmVhZCBncm91cCBZID0gaGVpZ2h0OworCSAqLworCXhfZGltID0gKHdp ZHRoICsgMTUpIC8gMTY7CisJeV9kaW0gPSBoZWlnaHQ7CisKKwl0bXAgPSB3aWR0aCAmIDE1Owor CWlmICh0bXAgPT0gMCkKKwkJcmlnaHRfbWFzayA9ICgxIDw8IDE2KSAtIDE7CisJZWxzZQorCQly aWdodF9tYXNrID0gKDEgPDwgdG1wKSAtIDE7CisKKwlPVVRfQkFUQ0goR0VON19HUEdQVV9XQUxL RVIgfCA5KTsKKworCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIG9mZnNldCAqLworCU9VVF9CQVRD SCgwKTsKKworCS8qIFNJTUQgc2l6ZSwgdGhyZWFkIHcvaC9kICovCisJT1VUX0JBVENIKDEgPDwg MzAgfCAvKiBTSU1EMTYgKi8KKwkJICAwIDw8IDE2IHwgLyogZGVwdGg6MSAqLworCQkgIDAgPDwg OCB8IC8qIGhlaWdodDoxICovCisJCSAgMCk7IC8qIHdpZHRoOjEgKi8KKworCS8qIHRocmVhZCBn cm91cCBYICovCisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCh4X2RpbSk7CisKKwkvKiB0aHJl YWQgZ3JvdXAgWSAqLworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goeV9kaW0pOworCisJLyog dGhyZWFkIGdyb3VwIFogKi8KKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDEpOworCisJLyog cmlnaHQgbWFzayAqLworCU9VVF9CQVRDSChyaWdodF9tYXNrKTsKKworCS8qIGJvdHRvbSBtYXNr LCBoZWlnaHQgMSwgYWx3YXlzIDB4ZmZmZmZmZmYgKi8KKwlPVVRfQkFUQ0goMHhmZmZmZmZmZik7 Cit9CisKK3ZvaWQKK2dlbjhfcmVuZGVyX2ZsdXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsIHVpbnQzMl90IGJhdGNoX2VuZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2lu dGVsX2JvX3N1YmRhdGEoYmF0Y2gtPmJvLCAwLCA0MDk2LCBiYXRjaC0+YnVmZmVyKTsKKwlpZiAo cmV0ID09IDApCisJCXJldCA9IGRybV9pbnRlbF9ib19tcmJfZXhlYyhiYXRjaC0+Ym8sIGJhdGNo X2VuZCwKKwkJCQkJTlVMTCwgMCwgMCwgMCk7CisJaWd0X2Fzc2VydChyZXQgPT0gMCk7Cit9CisK KwordWludDMyX3QKK2dlbjhfZmlsbF9jdXJiZV9idWZmZXJfZGF0YShzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLAorCQkJdWludDhfdCBjb2xvcikKK3sKKwl1aW50OF90ICpjdXJiZV9i dWZmZXI7CisJdWludDMyX3Qgb2Zmc2V0OworCisJY3VyYmVfYnVmZmVyID0gYmF0Y2hfYWxsb2Mo YmF0Y2gsIHNpemVvZih1aW50MzJfdCkgKiA4LCA2NCk7CisJb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0 KGJhdGNoLCBjdXJiZV9idWZmZXIpOworCSpjdXJiZV9idWZmZXIgPSBjb2xvcjsKKworCXJldHVy biBvZmZzZXQ7Cit9CisKK3VpbnQzMl90CitnZW44X2ZpbGxfc3VyZmFjZV9zdGF0ZShzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJc3RydWN0IGlndF9idWYgKmJ1ZiwKKwkJCXVp bnQzMl90IGZvcm1hdCwKKwkJCWludCBpc19kc3QpCit7CisJc3RydWN0IGdlbjhfc3VyZmFjZV9z dGF0ZSAqc3M7CisJdWludDMyX3Qgd3JpdGVfZG9tYWluLCByZWFkX2RvbWFpbiwgb2Zmc2V0Owor CWludCByZXQ7CisKKwlpZiAoaXNfZHN0KSB7CisJCXdyaXRlX2RvbWFpbiA9IHJlYWRfZG9tYWlu ID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKKwl9IGVsc2UgeworCQl3cml0ZV9kb21haW4gPSAw OworCQlyZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSOworCX0KKworCXNzID0g YmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZigqc3MpLCA2NCk7CisJb2Zmc2V0ID0gYmF0Y2hfb2Zm c2V0KGJhdGNoLCBzcyk7CisKKwlzcy0+c3MwLnN1cmZhY2VfdHlwZSA9IEdFTjhfU1VSRkFDRV8y RDsKKwlzcy0+c3MwLnN1cmZhY2VfZm9ybWF0ID0gZm9ybWF0OworCXNzLT5zczAucmVuZGVyX2Nh Y2hlX3JlYWRfd3JpdGUgPSAxOworCXNzLT5zczAudmVydGljYWxfYWxpZ25tZW50ID0gMTsgLyog YWxpZ24gNCAqLworCXNzLT5zczAuaG9yaXpvbnRhbF9hbGlnbm1lbnQgPSAxOyAvKiBhbGlnbiA0 ICovCisKKwlpZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWCkKKwkJc3MtPnNzMC50aWxl ZF9tb2RlID0gMjsKKwllbHNlIGlmIChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZKQorCQlz cy0+c3MwLnRpbGVkX21vZGUgPSAzOworCisJc3MtPnNzOC5iYXNlX2FkZHIgPSBidWYtPmJvLT5v ZmZzZXQ7CisKKwlyZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8sCisJCQkJ YmF0Y2hfb2Zmc2V0KGJhdGNoLCBzcykgKyA4ICogNCwKKwkJCQlidWYtPmJvLCAwLAorCQkJCXJl YWRfZG9tYWluLCB3cml0ZV9kb21haW4pOworCWlndF9hc3NlcnQocmV0ID09IDApOworCisJc3Mt PnNzMi5oZWlnaHQgPSBpZ3RfYnVmX2hlaWdodChidWYpIC0gMTsKKwlzcy0+c3MyLndpZHRoICA9 IGlndF9idWZfd2lkdGgoYnVmKSAtIDE7CisJc3MtPnNzMy5waXRjaCAgPSBidWYtPnN0cmlkZSAt IDE7CisKKwlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X3IgPSA0OworCXNzLT5zczcuc2hh ZGVyX2NoYW5lbF9zZWxlY3RfZyA9IDU7CisJc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9i ID0gNjsKKwlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2EgPSA3OworCisJcmV0dXJuIG9m ZnNldDsKK30KKwordWludDMyX3QKK2dlbjhfZmlsbF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJCQlzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQoreworCXVpbnQz Ml90ICpiaW5kaW5nX3RhYmxlLCBvZmZzZXQ7CisKKwliaW5kaW5nX3RhYmxlID0gYmF0Y2hfYWxs b2MoYmF0Y2gsIDMyLCA2NCk7CisJb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBiaW5kaW5n X3RhYmxlKTsKKworCWJpbmRpbmdfdGFibGVbMF0gPSBnZW44X2ZpbGxfc3VyZmFjZV9zdGF0ZShi YXRjaCwgZHN0LAorCQkJCQkJR0VOOF9TVVJGQUNFRk9STUFUX1I4X1VOT1JNLCAxKTsKKworCXJl dHVybiBvZmZzZXQ7Cit9CisKK3VpbnQzMl90CitnZW44X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0 b3Ioc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgc3RydWN0IGlndF9idWYgKmRzdCwg IGNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZ2Vu OF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9kYXRhICppZGQ7CisJdWludDMyX3Qgb2Zmc2V0OworCXVp bnQzMl90IGJpbmRpbmdfdGFibGVfb2Zmc2V0LCBrZXJuZWxfb2Zmc2V0OworCisJYmluZGluZ190 YWJsZV9vZmZzZXQgPSBnZW44X2ZpbGxfYmluZGluZ190YWJsZShiYXRjaCwgZHN0KTsKKwlrZXJu ZWxfb2Zmc2V0ID0gZ2VuOF9maWxsX21lZGlhX2tlcm5lbChiYXRjaCwga2VybmVsLCBzaXplKTsK KworCWlkZCA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YoKmlkZCksIDY0KTsKKwlvZmZzZXQg PSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGlkZCk7CisKKwlpZGQtPmRlc2MwLmtlcm5lbF9zdGFydF9w b2ludGVyID0gKGtlcm5lbF9vZmZzZXQgPj4gNik7CisKKwlpZGQtPmRlc2MyLnNpbmdsZV9wcm9n cmFtX2Zsb3cgPSAxOworCWlkZC0+ZGVzYzIuZmxvYXRpbmdfcG9pbnRfbW9kZSA9IEdFTjhfRkxP QVRJTkdfUE9JTlRfSUVFRV83NTQ7CisKKwlpZGQtPmRlc2MzLnNhbXBsZXJfY291bnQgPSAwOyAg ICAgIC8qIDAgc2FtcGxlcnMgdXNlZCAqLworCWlkZC0+ZGVzYzMuc2FtcGxlcl9zdGF0ZV9wb2lu dGVyID0gMDsKKworCWlkZC0+ZGVzYzQuYmluZGluZ190YWJsZV9lbnRyeV9jb3VudCA9IDA7CisJ aWRkLT5kZXNjNC5iaW5kaW5nX3RhYmxlX3BvaW50ZXIgPSAoYmluZGluZ190YWJsZV9vZmZzZXQg Pj4gNSk7CisKKwlpZGQtPmRlc2M1LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX29mZnNldCA9IDA7 CisJaWRkLT5kZXNjNS5jb25zdGFudF91cmJfZW50cnlfcmVhZF9sZW5ndGggPSAxOyAvKiBncmYg MSAqLworCisJcmV0dXJuIG9mZnNldDsKK30KKwordm9pZAorZ2VuOF9lbWl0X3N0YXRlX2Jhc2Vf YWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQoreworCU9VVF9CQVRDSChH RU44X1NUQVRFX0JBU0VfQUREUkVTUyB8ICgxNiAtIDIpKTsKKworCS8qIGdlbmVyYWwgKi8KKwlP VVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOworCU9VVF9CQVRDSCgwKTsKKworCS8q IHN0YXRlbGVzcyBkYXRhIHBvcnQgKi8KKwlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJ RlkpOworCisJLyogc3VyZmFjZSAqLworCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RP TUFJTl9TQU1QTEVSLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKworCS8qIGR5bmFtaWMgKi8K KwlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSIHwgSTkxNV9HRU1f RE9NQUlOX0lOU1RSVUNUSU9OLAorCQkwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKworCS8qIGlu ZGlyZWN0ICovCisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsKKworCS8qIGluc3RydWN0 aW9uICovCisJT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9O LCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKworCS8qIGdlbmVyYWwgc3RhdGUgYnVmZmVyIHNp emUgKi8KKwlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOworCS8qIGR5bmFtaWMgc3RhdGUgYnVm ZmVyIHNpemUgKi8KKwlPVVRfQkFUQ0goMSA8PCAxMiB8IDEpOworCS8qIGluZGlyZWN0IG9iamVj dCBidWZmZXIgc2l6ZSAqLworCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7CisJLyogaW50cnVj dGlvbiBidWZmZXIgc2l6ZSwgbXVzdCBzZXQgbW9kaWZ5IGVuYWJsZSBiaXQsIG90aGVyd2lzZSBp dCBtYXkgcmVzdWx0IGluIEdQVSBoYW5nICovCisJT1VUX0JBVENIKDEgPDwgMTIgfCAxKTsKK30K Kwordm9pZAorZ2VuOF9lbWl0X3ZmZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoKQoreworCU9VVF9CQVRDSChHRU44X01FRElBX1ZGRV9TVEFURSB8ICg5IC0gMikpOworCisJ Lyogc2NyYXRjaCBidWZmZXIgKi8KKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDApOworCisJ LyogbnVtYmVyIG9mIHRocmVhZHMgJiB1cmIgZW50cmllcyAqLworCU9VVF9CQVRDSCgxIDw8IDE2 IHwKKwkJMiA8PCA4KTsKKworCU9VVF9CQVRDSCgwKTsKKworCS8qIHVyYiBlbnRyeSBzaXplICYg Y3VyYmUgc2l6ZSAqLworCU9VVF9CQVRDSCgyIDw8IDE2IHwKKwkJMik7CisKKwkvKiBzY29yZWJv YXJkICovCisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCk7Cit9 CisKK3ZvaWQKK2dlbjhfZW1pdF92ZmVfc3RhdGVfZ3BncHUoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCkKK3sKKwlPVVRfQkFUQ0goR0VOOF9NRURJQV9WRkVfU1RBVEUgfCAoOSAtIDIp KTsKKworCS8qIHNjcmF0Y2ggYnVmZmVyICovCisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgw KTsKKworCS8qIG51bWJlciBvZiB0aHJlYWRzICYgdXJiIGVudHJpZXMgKi8KKwlPVVRfQkFUQ0go MSA8PCAxNiB8IDEgPDwgOCk7CisKKwlPVVRfQkFUQ0goMCk7CisKKwkvKiB1cmIgZW50cnkgc2l6 ZSAmIGN1cmJlIHNpemUgKi8KKwlPVVRfQkFUQ0goMCA8PCAxNiB8IDEpOworCisJLyogc2NvcmVi b2FyZCAqLworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDApOwor fQorCit2b2lkCitnZW44X2VtaXRfY3VyYmVfbG9hZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLCB1aW50MzJfdCBjdXJiZV9idWZmZXIpCit7CisJT1VUX0JBVENIKEdFTjhfTUVESUFf Q1VSQkVfTE9BRCB8ICg0IC0gMikpOworCU9VVF9CQVRDSCgwKTsKKwkvKiBjdXJiZSB0b3RhbCBk YXRhIGxlbmd0aCAqLworCU9VVF9CQVRDSCg2NCk7CisJLyogY3VyYmUgZGF0YSBzdGFydCBhZGRy ZXNzLCBpcyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFzZSBhZGRyZXNzICovCisJT1VUX0JB VENIKGN1cmJlX2J1ZmZlcik7Cit9CisKK3ZvaWQKK2dlbjhfZW1pdF9pbnRlcmZhY2VfZGVzY3Jp cHRvcl9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGludGVy ZmFjZV9kZXNjcmlwdG9yKQoreworCU9VVF9CQVRDSChHRU44X01FRElBX0lOVEVSRkFDRV9ERVND UklQVE9SX0xPQUQgfCAoNCAtIDIpKTsKKwlPVVRfQkFUQ0goMCk7CisJLyogaW50ZXJmYWNlIGRl c2NyaXB0b3IgZGF0YSBsZW5ndGggKi8KKwlPVVRfQkFUQ0goc2l6ZW9mKHN0cnVjdCBnZW44X2lu dGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEpKTsKKwkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBhZGRy ZXNzLCBpcyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFzZSBhZGRyZXNzICovCisJT1VUX0JB VENIKGludGVyZmFjZV9kZXNjcmlwdG9yKTsKK30KKwordm9pZAorZ2VuOF9lbWl0X21lZGlhX3N0 YXRlX2ZsdXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCit7CisJT1VUX0JBVENI KEdFTjhfTUVESUFfU1RBVEVfRkxVU0ggfCAoMiAtIDIpKTsKKwlPVVRfQkFUQ0goMCk7Cit9CisK K3ZvaWQKK2dlbjhfZW1pdF9tZWRpYV9vYmplY3RzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCisJCQl1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LAorCQkJdW5zaWduZWQgd2lkdGgsIHVu c2lnbmVkIGhlaWdodCkKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAv IDE2OyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IGhlaWdodCAvIDE2OyBqKyspIHsKKwkJCU9V VF9CQVRDSChHRU44X01FRElBX09CSkVDVCB8ICg4IC0gMikpOworCisJCQkvKiBpbnRlcmZhY2Ug ZGVzY3JpcHRvciBvZmZzZXQgKi8KKwkJCU9VVF9CQVRDSCgwKTsKKworCQkJLyogd2l0aG91dCBp bmRpcmVjdCBkYXRhICovCisJCQlPVVRfQkFUQ0goMCk7CisJCQlPVVRfQkFUQ0goMCk7CisKKwkJ CS8qIHNjb3JlYm9hcmQgKi8KKwkJCU9VVF9CQVRDSCgwKTsKKwkJCU9VVF9CQVRDSCgwKTsKKwor CQkJLyogaW5saW5lIGRhdGEgKHhvZmZzZXQsIHlvZmZzZXQpICovCisJCQlPVVRfQkFUQ0goeCAr IGkgKiAxNik7CisJCQlPVVRfQkFUQ0goeSArIGogKiAxNik7CisJCQlnZW44X2VtaXRfbWVkaWFf c3RhdGVfZmx1c2goYmF0Y2gpOworCQl9CisJfQorfQordm9pZAorZ2VuOGxwX2VtaXRfbWVkaWFf b2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJdW5zaWduZWQgeCwg dW5zaWduZWQgeSwKKwkJCXVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCit7CisJaW50 IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLyAxNjsgaSsrKSB7CisJCWZvciAoaiA9 IDA7IGogPCBoZWlnaHQgLyAxNjsgaisrKSB7CisJCQlPVVRfQkFUQ0goR0VOOF9NRURJQV9PQkpF Q1QgfCAoOCAtIDIpKTsKKworCQkJLyogaW50ZXJmYWNlIGRlc2NyaXB0b3Igb2Zmc2V0ICovCisJ CQlPVVRfQkFUQ0goMCk7CisKKwkJCS8qIHdpdGhvdXQgaW5kaXJlY3QgZGF0YSAqLworCQkJT1VU X0JBVENIKDApOworCQkJT1VUX0JBVENIKDApOworCisJCQkvKiBzY29yZWJvYXJkICovCisJCQlP VVRfQkFUQ0goMCk7CisJCQlPVVRfQkFUQ0goMCk7CisKKwkJCS8qIGlubGluZSBkYXRhICh4b2Zm c2V0LCB5b2Zmc2V0KSAqLworCQkJT1VUX0JBVENIKHggKyBpICogMTYpOworCQkJT1VUX0JBVENI KHkgKyBqICogMTYpOworCQl9CisJfQorfQordm9pZAorZ2VuOF9lbWl0X2dwZ3B1X3dhbGsoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJICAgICB1bnNpZ25lZCB4LCB1bnNpZ25l ZCB5LAorCQkgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCit7CisJdWludDMy X3QgeF9kaW0sIHlfZGltLCB0bXAsIHJpZ2h0X21hc2s7CisKKwkvKgorCSAqIFNpbXBseSBkbyBT SU1EMTYgYmFzZWQgZGlzcGF0Y2gsIHNvIGV2ZXJ5IHRocmVhZCB1c2VzCisJICogU0lNRDE2IGNo YW5uZWxzLgorCSAqCisJICogRGVmaW5lIG91ciBvd24gdGhyZWFkIGdyb3VwIHNpemUsIGUuZyAx NngxIGZvciBldmVyeSBncm91cCwgdGhlbgorCSAqIHdpbGwgaGF2ZSAxIHRocmVhZCBlYWNoIGdy b3VwIGluIFNJTUQxNiBkaXNwYXRjaC4gU28gdGhyZWFkCisJICogd2lkdGgvaGVpZ2h0L2RlcHRo IGFyZSBhbGwgMS4KKwkgKgorCSAqIFRoZW4gdGhyZWFkIGdyb3VwIFggPSB3aWR0aCAvIDE2IChh bGlnbmVkIHRvIDE2KQorCSAqIHRocmVhZCBncm91cCBZID0gaGVpZ2h0OworCSAqLworCXhfZGlt ID0gKHdpZHRoICsgMTUpIC8gMTY7CisJeV9kaW0gPSBoZWlnaHQ7CisKKwl0bXAgPSB3aWR0aCAm IDE1OworCWlmICh0bXAgPT0gMCkKKwkJcmlnaHRfbWFzayA9ICgxIDw8IDE2KSAtIDE7CisJZWxz ZQorCQlyaWdodF9tYXNrID0gKDEgPDwgdG1wKSAtIDE7CisKKwlPVVRfQkFUQ0goR0VON19HUEdQ VV9XQUxLRVIgfCAxMyk7CisKKwlPVVRfQkFUQ0goMCk7IC8qIGtlcm5lbCBvZmZzZXQgKi8KKwlP VVRfQkFUQ0goMCk7IC8qIGluZGlyZWN0IGRhdGEgbGVuZ3RoICovCisJT1VUX0JBVENIKDApOyAv KiBpbmRpcmVjdCBkYXRhIG9mZnNldCAqLworCisJLyogU0lNRCBzaXplLCB0aHJlYWQgdy9oL2Qg Ki8KKwlPVVRfQkFUQ0goMSA8PCAzMCB8IC8qIFNJTUQxNiAqLworCQkgIDAgPDwgMTYgfCAvKiBk ZXB0aDoxICovCisJCSAgMCA8PCA4IHwgLyogaGVpZ2h0OjEgKi8KKwkJICAwKTsgLyogd2lkdGg6 MSAqLworCisJLyogdGhyZWFkIGdyb3VwIFggKi8KKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENI KDApOworCU9VVF9CQVRDSCh4X2RpbSk7CisKKwkvKiB0aHJlYWQgZ3JvdXAgWSAqLworCU9VVF9C QVRDSCgwKTsKKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKHlfZGltKTsKKworCS8qIHRocmVh ZCBncm91cCBaICovCisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgxKTsKKworCS8qIHJpZ2h0 IG1hc2sgKi8KKwlPVVRfQkFUQ0gocmlnaHRfbWFzayk7CisKKwkvKiBib3R0b20gbWFzaywgaGVp Z2h0IDEsIGFsd2F5cyAweGZmZmZmZmZmICovCisJT1VUX0JBVENIKDB4ZmZmZmZmZmYpOworfQor Cit2b2lkCitnZW45X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gpCit7CisJT1VUX0JBVENIKEdFTjhfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDE5 IC0gMikpOworCisJLyogZ2VuZXJhbCAqLworCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01P RElGWSk7CisJT1VUX0JBVENIKDApOworCisJLyogc3RhdGVsZXNzIGRhdGEgcG9ydCAqLworCU9V VF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7CisKKwkvKiBzdXJmYWNlICovCisJT1VU X1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIsIDAsIEJBU0VfQUREUkVT U19NT0RJRlkpOworCisJLyogZHluYW1pYyAqLworCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVf R0VNX0RPTUFJTl9SRU5ERVIgfCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sCisJCTAsIEJB U0VfQUREUkVTU19NT0RJRlkpOworCisJLyogaW5kaXJlY3QgKi8KKwlPVVRfQkFUQ0goMCk7CisJ T1VUX0JBVENIKDApOworCisJLyogaW5zdHJ1Y3Rpb24gKi8KKwlPVVRfUkVMT0MoYmF0Y2gtPmJv LCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwor CisJLyogZ2VuZXJhbCBzdGF0ZSBidWZmZXIgc2l6ZSAqLworCU9VVF9CQVRDSCgweGZmZmZmMDAw IHwgMSk7CisJLyogZHluYW1pYyBzdGF0ZSBidWZmZXIgc2l6ZSAqLworCU9VVF9CQVRDSCgxIDw8 IDEyIHwgMSk7CisJLyogaW5kaXJlY3Qgb2JqZWN0IGJ1ZmZlciBzaXplICovCisJT1VUX0JBVENI KDB4ZmZmZmYwMDAgfCAxKTsKKwkvKiBpbnRydWN0aW9uIGJ1ZmZlciBzaXplLCBtdXN0IHNldCBt b2RpZnkgZW5hYmxlIGJpdCwgb3RoZXJ3aXNlIGl0IG1heSByZXN1bHQgaW4gR1BVIGhhbmcgKi8K KwlPVVRfQkFUQ0goMSA8PCAxMiB8IDEpOworCisJLyogQmluZGxlc3Mgc3VyZmFjZSBzdGF0ZSBi YXNlIGFkZHJlc3MgKi8KKwlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOworCU9V VF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMHhmZmZmZjAwMCk7Cit9CmRpZmYgLS1naXQgYS9saWIv Z3B1X2ZpbGwuaCBiL2xpYi9ncHVfZmlsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwLi44N2U2MmM4NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9ncHVfZmlsbC5oCkBAIC0w LDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24K KyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNv ZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H CisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisK KyNpZm5kZWYgR1BVX0ZJTExfSAorI2RlZmluZSBHUFVfRklMTF9ICisKKyNpbmNsdWRlIDxpbnRl bF9idWZtZ3IuaD4KKyNpbmNsdWRlIDxpOTE1X2RybS5oPgorCisjaW5jbHVkZSAibWVkaWFfZmls bC5oIgorI2luY2x1ZGUgImdlbjdfbWVkaWEuaCIKKyNpbmNsdWRlICJnZW44X21lZGlhLmgiCisj aW5jbHVkZSAiaW50ZWxfcmVnLmgiCisjaW5jbHVkZSAiZHJtdGVzdC5oIgorI2luY2x1ZGUgImlu dGVsX2JhdGNoYnVmZmVyLmgiCisjaW5jbHVkZSAiaW50ZWxfY2hpcHNldC5oIgorI2luY2x1ZGUg PGFzc2VydC5oPgorCit1aW50MzJfdAorYmF0Y2hfdXNlZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoKTsKKwordWludDMyX3QKK2JhdGNoX2FsaWduKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGFsaWduKTsKKwordm9pZCAqCitiYXRjaF9hbGxvYyhzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBhbGln bik7CisKK3VpbnQzMl90CitiYXRjaF9vZmZzZXQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwgdm9pZCAqcHRyKTsKKwordWludDMyX3QKK2JhdGNoX2NvcHkoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwgY29uc3Qgdm9pZCAqcHRyLCB1aW50MzJfdCBzaXplLCB1aW50MzJf dCBhbGlnbik7CisKK3ZvaWQKK2dlbjdfcmVuZGVyX2ZsdXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGJhdGNoX2VuZCk7CisKK3VpbnQzMl90CitnZW43X2ZpbGxf Y3VyYmVfYnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJCXVp bnQ4X3QgY29sb3IpOworCit1aW50MzJfdAorZ2VuN19maWxsX3N1cmZhY2Vfc3RhdGUoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJCXN0cnVjdCBpZ3RfYnVmICpidWYsCisJCQl1 aW50MzJfdCBmb3JtYXQsCisJCQlpbnQgaXNfZHN0KTsKKwordWludDMyX3QKK2dlbjdfZmlsbF9i aW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJCQlzdHJ1Y3Qg aWd0X2J1ZiAqZHN0KTsKKwordWludDMyX3QKK2dlbjdfZmlsbF9tZWRpYV9rZXJuZWwoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJY29uc3QgdWludDMyX3Qga2VybmVsW11bNF0s CisJCXNpemVfdCBzaXplKTsKKwordWludDMyX3QKK2dlbjhfZmlsbF9tZWRpYV9rZXJuZWwoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJY29uc3QgdWludDMyX3Qga2VybmVsW11b NF0sCisJCXNpemVfdCBzaXplKTsKKwordWludDMyX3QKK2dlbjdfZmlsbF9pbnRlcmZhY2VfZGVz Y3JpcHRvcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBzdHJ1Y3QgaWd0X2J1ZiAq ZHN0LAorCQkJICAgICAgIGNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLCBzaXplX3Qgc2l6ZSk7 CisKK3ZvaWQKK2dlbjdfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCk7CisKK3ZvaWQKK2dlbjdfZW1pdF92ZmVfc3RhdGUoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCk7CisKK3ZvaWQKK2dlbjdfZW1pdF92ZmVfc3RhdGVfZ3BncHUo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCk7CisKK3ZvaWQKK2dlbjdfZW1pdF9jdXJi ZV9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGN1cmJlX2J1 ZmZlcik7CisKK3ZvaWQKK2dlbjdfZW1pdF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9sb2FkKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGludGVyZmFjZV9kZXNjcmlwdG9y KTsKKwordm9pZAorZ2VuN19lbWl0X21lZGlhX29iamVjdHMoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwKKwkJCXVuc2lnbmVkIHgsIHVuc2lnbmVkIHksCisJCQl1bnNpZ25lZCB3aWR0 aCwgdW5zaWduZWQgaGVpZ2h0KTsKKwordm9pZAorZ2VuN19lbWl0X2dwZ3B1X3dhbGsoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJICAgICB1bnNpZ25lZCB4LCB1bnNpZ25lZCB5 LAorCQkgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOworCit2b2lkCitnZW44 X3JlbmRlcl9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBi YXRjaF9lbmQpOworCit1aW50MzJfdAorZ2VuOF9maWxsX2N1cmJlX2J1ZmZlcl9kYXRhKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJCQl1aW50OF90IGNvbG9yKTsKKwordWludDMy X3QKK2dlbjhfZmlsbF9zdXJmYWNlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsCisJCQlzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAorCQkJdWludDMyX3QgZm9ybWF0LAorCQkJaW50 IGlzX2RzdCk7CisKK3VpbnQzMl90CitnZW44X2ZpbGxfYmluZGluZ190YWJsZShzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJc3RydWN0IGlndF9idWYgKmRzdCk7CisKK3VpbnQz Ml90CitnZW44X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Ioc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwgc3RydWN0IGlndF9idWYgKmRzdCwgIGNvbnN0IHVpbnQzMl90IGtlcm5lbFtd WzRdLCBzaXplX3Qgc2l6ZSk7CisKK3ZvaWQKK2dlbjhfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Mo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCk7CisKK3ZvaWQKK2dlbjhfZW1pdF92ZmVf c3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCk7CisKK3ZvaWQKK2dlbjhfZW1p dF92ZmVfc3RhdGVfZ3BncHUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCk7CisKK3Zv aWQKK2dlbjhfZW1pdF9jdXJiZV9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs IHVpbnQzMl90IGN1cmJlX2J1ZmZlcik7CisKK3ZvaWQKK2dlbjhfZW1pdF9pbnRlcmZhY2VfZGVz Y3JpcHRvcl9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGlu dGVyZmFjZV9kZXNjcmlwdG9yKTsKKwordm9pZAorZ2VuOF9lbWl0X21lZGlhX3N0YXRlX2ZsdXNo KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpOworCit2b2lkCitnZW44X2VtaXRfbWVk aWFfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJdW5zaWduZWQg eCwgdW5zaWduZWQgeSwKKwkJCXVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOworCit2 b2lkCitnZW44bHBfZW1pdF9tZWRpYV9vYmplY3RzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCisJCQl1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LAorCQkJdW5zaWduZWQgd2lkdGgsIHVu c2lnbmVkIGhlaWdodCk7CisKK3ZvaWQKK2dlbjhfZW1pdF9ncGdwdV93YWxrKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJCSAgICAgdW5zaWduZWQgeCwgdW5zaWduZWQgeSwKKwkJ ICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKKwordm9pZAorZ2VuOV9lbWl0 X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKTsKKwor I2VuZGlmIC8qIEdQVV9GSUxMX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9tZWRpYV9maWxsX2dlbjcu YyBiL2xpYi9tZWRpYV9maWxsX2dlbjcuYwppbmRleCA2ZmI0NDc5OC4uYzk3NTU1YTYgMTAwNjQ0 Ci0tLSBhL2xpYi9tZWRpYV9maWxsX2dlbjcuYworKysgYi9saWIvbWVkaWFfZmlsbF9nZW43LmMK QEAgLTUsNyArNSw3IEBACiAjaW5jbHVkZSAiZ2VuN19tZWRpYS5oIgogI2luY2x1ZGUgImludGVs X3JlZy5oIgogI2luY2x1ZGUgImRybXRlc3QuaCIKLQorI2luY2x1ZGUgImdwdV9maWxsLmgiCiAj aW5jbHVkZSA8YXNzZXJ0Lmg+CiAKIHN0YXRpYyBjb25zdCB1aW50MzJfdCBtZWRpYV9rZXJuZWxb XVs0XSA9IHsKQEAgLTIyLDI3NSArMjIsNiBAQCBzdGF0aWMgY29uc3QgdWludDMyX3QgbWVkaWFf a2VybmVsW11bNF0gPSB7CiAJeyAweDA3ODAwMDMxLCAweDIwMDAxY2E4LCAweDAwMDAwZTAwLCAw eDgyMDAwMDEwIH0sCiB9OwogCi1zdGF0aWMgdWludDMyX3QKLWJhdGNoX3VzZWQoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlyZXR1cm4gYmF0Y2gtPnB0ciAtIGJhdGNoLT5i dWZmZXI7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfYWxpZ24oc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYWxpZ24pCi17Ci0JdWludDMyX3Qgb2Zmc2V0ID0g YmF0Y2hfdXNlZChiYXRjaCk7Ci0Jb2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBhbGlnbik7Ci0JYmF0 Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXIgKyBvZmZzZXQ7Ci0JcmV0dXJuIG9mZnNldDsKLX0KLQot c3RhdGljIHZvaWQgKgotYmF0Y2hfYWxsb2Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24pCi17Ci0JdWludDMyX3Qgb2Zmc2V0ID0g YmF0Y2hfYWxpZ24oYmF0Y2gsIGFsaWduKTsKLQliYXRjaC0+cHRyICs9IHNpemU7Ci0JcmV0dXJu IG1lbXNldChiYXRjaC0+YnVmZmVyICsgb2Zmc2V0LCAwLCBzaXplKTsKLX0KLQotc3RhdGljIHVp bnQzMl90Ci1iYXRjaF9vZmZzZXQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdm9p ZCAqcHRyKQotewotCXJldHVybiAodWludDhfdCAqKXB0ciAtIGJhdGNoLT5idWZmZXI7Ci19Ci0K LXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfY29weShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLCBjb25zdCB2b2lkICpwdHIsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90IGFsaWduKQotewot CXJldHVybiBiYXRjaF9vZmZzZXQoYmF0Y2gsIG1lbWNweShiYXRjaF9hbGxvYyhiYXRjaCwgc2l6 ZSwgYWxpZ24pLCBwdHIsIHNpemUpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjdfcmVuZGVyX2Zs dXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGJhdGNoX2VuZCkK LXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZHJtX2ludGVsX2JvX3N1YmRhdGEoYmF0Y2gtPmJvLCAw LCA0MDk2LCBiYXRjaC0+YnVmZmVyKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IGRybV9pbnRl bF9ib19tcmJfZXhlYyhiYXRjaC0+Ym8sIGJhdGNoX2VuZCwKLQkJCQkJTlVMTCwgMCwgMCwgMCk7 Ci0JaWd0X2Fzc2VydChyZXQgPT0gMCk7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuN19maWxs X2N1cmJlX2J1ZmZlcl9kYXRhKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQl1 aW50OF90IGNvbG9yKQotewotCXVpbnQ4X3QgKmN1cmJlX2J1ZmZlcjsKLQl1aW50MzJfdCBvZmZz ZXQ7Ci0KLQljdXJiZV9idWZmZXIgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKHVpbnQzMl90 KSAqIDgsIDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGN1cmJlX2J1ZmZlcik7 Ci0JKmN1cmJlX2J1ZmZlciA9IGNvbG9yOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGlj IHVpbnQzMl90Ci1nZW43X2ZpbGxfc3VyZmFjZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLAotCQkJc3RydWN0IGlndF9idWYgKmJ1ZiwKLQkJCXVpbnQzMl90IGZvcm1hdCwK LQkJCWludCBpc19kc3QpCi17Ci0Jc3RydWN0IGdlbjdfc3VyZmFjZV9zdGF0ZSAqc3M7Ci0JdWlu dDMyX3Qgd3JpdGVfZG9tYWluLCByZWFkX2RvbWFpbiwgb2Zmc2V0OwotCWludCByZXQ7Ci0KLQlp ZiAoaXNfZHN0KSB7Ci0JCXdyaXRlX2RvbWFpbiA9IHJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9N QUlOX1JFTkRFUjsKLQl9IGVsc2UgewotCQl3cml0ZV9kb21haW4gPSAwOwotCQlyZWFkX2RvbWFp biA9IEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSOwotCX0KLQotCXNzID0gYmF0Y2hfYWxsb2MoYmF0 Y2gsIHNpemVvZigqc3MpLCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBzcyk7 Ci0KLQlzcy0+c3MwLnN1cmZhY2VfdHlwZSA9IEdFTjdfU1VSRkFDRV8yRDsKLQlzcy0+c3MwLnN1 cmZhY2VfZm9ybWF0ID0gZm9ybWF0OwotCXNzLT5zczAucmVuZGVyX2NhY2hlX3JlYWRfd3JpdGUg PSAxOwotCi0JaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1gpCi0JCXNzLT5zczAudGls ZWRfbW9kZSA9IDI7Ci0JZWxzZSBpZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkKLQkJ c3MtPnNzMC50aWxlZF9tb2RlID0gMzsKLQotCXNzLT5zczEuYmFzZV9hZGRyID0gYnVmLT5iby0+ b2Zmc2V0OwotCXJldCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywKLQkJCQli YXRjaF9vZmZzZXQoYmF0Y2gsIHNzKSArIDQsCi0JCQkJYnVmLT5ibywgMCwKLQkJCQlyZWFkX2Rv bWFpbiwgd3JpdGVfZG9tYWluKTsKLQlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKLQotCXNzLT5zczIu aGVpZ2h0ID0gaWd0X2J1Zl9oZWlnaHQoYnVmKSAtIDE7Ci0Jc3MtPnNzMi53aWR0aCAgPSBpZ3Rf YnVmX3dpZHRoKGJ1ZikgLSAxOwotCi0Jc3MtPnNzMy5waXRjaCAgPSBidWYtPnN0cmlkZSAtIDE7 Ci0KLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X3IgPSA0OwotCXNzLT5zczcuc2hhZGVy X2NoYW5lbF9zZWxlY3RfZyA9IDU7Ci0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9iID0g NjsKLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2EgPSA3OwotCi0JcmV0dXJuIG9mZnNl dDsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1nZW43X2ZpbGxfYmluZGluZ190YWJsZShzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJc3RydWN0IGlndF9idWYgKmRzdCkKLXsKLQl1 aW50MzJfdCAqYmluZGluZ190YWJsZSwgb2Zmc2V0OwotCi0JYmluZGluZ190YWJsZSA9IGJhdGNo X2FsbG9jKGJhdGNoLCAzMiwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgYmlu ZGluZ190YWJsZSk7Ci0KLQliaW5kaW5nX3RhYmxlWzBdID0gZ2VuN19maWxsX3N1cmZhY2Vfc3Rh dGUoYmF0Y2gsIGRzdCwgR0VON19TVVJGQUNFRk9STUFUX1I4X1VOT1JNLCAxKTsKLQotCXJldHVy biBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuN19maWxsX21lZGlhX2tlcm5lbChz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQljb25zdCB1aW50MzJfdCBrZXJuZWxb XVs0XSwKLQkJc2l6ZV90IHNpemUpCi17Ci0JdWludDMyX3Qgb2Zmc2V0OwotCi0Jb2Zmc2V0ID0g YmF0Y2hfY29weShiYXRjaCwga2VybmVsLCBzaXplLCA2NCk7Ci0KLQlyZXR1cm4gb2Zmc2V0Owot fQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjdfZmlsbF9pbnRlcmZhY2VfZGVzY3JpcHRvcihzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LAotCQkJICAg ICAgIGNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3Qg Z2VuN19pbnRlcmZhY2VfZGVzY3JpcHRvcl9kYXRhICppZGQ7Ci0JdWludDMyX3Qgb2Zmc2V0Owot CXVpbnQzMl90IGJpbmRpbmdfdGFibGVfb2Zmc2V0LCBrZXJuZWxfb2Zmc2V0OwotCi0JYmluZGlu Z190YWJsZV9vZmZzZXQgPSBnZW43X2ZpbGxfYmluZGluZ190YWJsZShiYXRjaCwgZHN0KTsKLQlr ZXJuZWxfb2Zmc2V0ID0gZ2VuN19maWxsX21lZGlhX2tlcm5lbChiYXRjaCwga2VybmVsLCBzaXpl KTsKLQotCWlkZCA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YoKmlkZCksIDY0KTsKLQlvZmZz ZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGlkZCk7Ci0KLQlpZGQtPmRlc2MwLmtlcm5lbF9zdGFy dF9wb2ludGVyID0gKGtlcm5lbF9vZmZzZXQgPj4gNik7Ci0KLQlpZGQtPmRlc2MxLnNpbmdsZV9w cm9ncmFtX2Zsb3cgPSAxOwotCWlkZC0+ZGVzYzEuZmxvYXRpbmdfcG9pbnRfbW9kZSA9IEdFTjdf RkxPQVRJTkdfUE9JTlRfSUVFRV83NTQ7Ci0KLQlpZGQtPmRlc2MyLnNhbXBsZXJfY291bnQgPSAw OyAgICAgIC8qIDAgc2FtcGxlcnMgdXNlZCAqLwotCWlkZC0+ZGVzYzIuc2FtcGxlcl9zdGF0ZV9w b2ludGVyID0gMDsKLQotCWlkZC0+ZGVzYzMuYmluZGluZ190YWJsZV9lbnRyeV9jb3VudCA9IDA7 Ci0JaWRkLT5kZXNjMy5iaW5kaW5nX3RhYmxlX3BvaW50ZXIgPSAoYmluZGluZ190YWJsZV9vZmZz ZXQgPj4gNSk7Ci0KLQlpZGQtPmRlc2M0LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX29mZnNldCA9 IDA7Ci0JaWRkLT5kZXNjNC5jb25zdGFudF91cmJfZW50cnlfcmVhZF9sZW5ndGggPSAxOyAvKiBn cmYgMSAqLwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9z dGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlP VVRfQkFUQ0goR0VON19TVEFURV9CQVNFX0FERFJFU1MgfCAoMTAgLSAyKSk7Ci0KLQkvKiBnZW5l cmFsICovCi0JT1VUX0JBVENIKDApOwotCi0JLyogc3VyZmFjZSAqLwotCU9VVF9SRUxPQyhiYXRj aC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01PRElG WSk7Ci0KLQkvKiBkeW5hbWljICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9N QUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGluZGlyZWN0 ICovCi0JT1VUX0JBVENIKDApOwotCi0JLyogaW5zdHJ1Y3Rpb24gKi8KLQlPVVRfUkVMT0MoYmF0 Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJ RlkpOwotCi0JLyogZ2VuZXJhbC9keW5hbWljL2luZGlyZWN0L2luc3RydWN0aW9uIGFjY2VzcyBC b3VuZCAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJ RlkpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkp OwotfQotCi1zdGF0aWMgdm9pZAotZ2VuN19lbWl0X3ZmZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoKQotewotCU9VVF9CQVRDSChHRU43X01FRElBX1ZGRV9TVEFURSB8ICg4 IC0gMikpOwotCi0JLyogc2NyYXRjaCBidWZmZXIgKi8KLQlPVVRfQkFUQ0goMCk7Ci0KLQkvKiBu dW1iZXIgb2YgdGhyZWFkcyAmIHVyYiBlbnRyaWVzICovCi0JT1VUX0JBVENIKDEgPDwgMTYgfAot CQkyIDw8IDgpOwotCi0JT1VUX0JBVENIKDApOwotCi0JLyogdXJiIGVudHJ5IHNpemUgJiBjdXJi ZSBzaXplICovCi0JT1VUX0JBVENIKDIgPDwgMTYgfCAJLyogaW4gMjU2IGJpdHMgdW5pdCAqLwot CQkyKTsJCS8qIGluIDI1NiBiaXRzIHVuaXQgKi8KLQotCS8qIHNjb3JlYm9hcmQgKi8KLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLX0KLQotc3RhdGljIHZv aWQKLWdlbjdfZW1pdF9jdXJiZV9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs IHVpbnQzMl90IGN1cmJlX2J1ZmZlcikKLXsKLQlPVVRfQkFUQ0goR0VON19NRURJQV9DVVJCRV9M T0FEIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCS8qIGN1cmJlIHRvdGFsIGRhdGEgbGVu Z3RoICovCi0JT1VUX0JBVENIKDY0KTsKLQkvKiBjdXJiZSBkYXRhIHN0YXJ0IGFkZHJlc3MsIGlz IHJlbGF0aXZlIHRvIHRoZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KLQlPVVRfQkFUQ0goY3Vy YmVfYnVmZmVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9pbnRlcmZhY2VfZGVzY3Jp cHRvcl9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGludGVy ZmFjZV9kZXNjcmlwdG9yKQotewotCU9VVF9CQVRDSChHRU43X01FRElBX0lOVEVSRkFDRV9ERVND UklQVE9SX0xPQUQgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JLyogaW50ZXJmYWNlIGRl c2NyaXB0b3IgZGF0YSBsZW5ndGggKi8KLQlPVVRfQkFUQ0goc2l6ZW9mKHN0cnVjdCBnZW43X2lu dGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEpKTsKLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBhZGRy ZXNzLCBpcyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFzZSBhZGRyZXNzICovCi0JT1VUX0JB VENIKGludGVyZmFjZV9kZXNjcmlwdG9yKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9t ZWRpYV9vYmplY3RzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQl1bnNpZ25l ZCB4LCB1bnNpZ25lZCB5LAotCQkJdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKLXsK LQlpbnQgaSwgajsKLQotCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAvIDE2OyBpKyspIHsKLQkJZm9y IChqID0gMDsgaiA8IGhlaWdodCAvIDE2OyBqKyspIHsKLQkJCU9VVF9CQVRDSChHRU43X01FRElB X09CSkVDVCB8ICg4IC0gMikpOwotCi0JCQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBvZmZzZXQg Ki8KLQkJCU9VVF9CQVRDSCgwKTsKLQotCQkJLyogd2l0aG91dCBpbmRpcmVjdCBkYXRhICovCi0J CQlPVVRfQkFUQ0goMCk7Ci0JCQlPVVRfQkFUQ0goMCk7Ci0KLQkJCS8qIHNjb3JlYm9hcmQgKi8K LQkJCU9VVF9CQVRDSCgwKTsKLQkJCU9VVF9CQVRDSCgwKTsKLQotCQkJLyogaW5saW5lIGRhdGEg KHhvZmZzZXQsIHlvZmZzZXQpICovCi0JCQlPVVRfQkFUQ0goeCArIGkgKiAxNik7Ci0JCQlPVVRf QkFUQ0goeSArIGogKiAxNik7Ci0JCX0KLQl9Ci19Ci0KIC8qCiAgKiBUaGlzIHNldHMgdXAgdGhl IG1lZGlhIHBpcGVsaW5lLAogICoKZGlmZiAtLWdpdCBhL2xpYi9tZWRpYV9maWxsX2dlbjguYyBi L2xpYi9tZWRpYV9maWxsX2dlbjguYwppbmRleCA0YThmZTVhMi4uNDI3MDk5N2UgMTAwNjQ0Ci0t LSBhL2xpYi9tZWRpYV9maWxsX2dlbjguYworKysgYi9saWIvbWVkaWFfZmlsbF9nZW44LmMKQEAg LTUsNyArNSw3IEBACiAjaW5jbHVkZSAiZ2VuOF9tZWRpYS5oIgogI2luY2x1ZGUgImludGVsX3Jl Zy5oIgogI2luY2x1ZGUgImRybXRlc3QuaCIKLQorI2luY2x1ZGUgImdwdV9maWxsLmgiCiAjaW5j bHVkZSA8YXNzZXJ0Lmg+CiAKIApAQCAtMjMsMjkzICsyMyw3IEBAIHN0YXRpYyBjb25zdCB1aW50 MzJfdCBtZWRpYV9rZXJuZWxbXVs0XSA9IHsKIAl7IDB4MDc4MDAwMzEsIDB4MjAwMDBhNDAsIDB4 MGUwMDBlMDAsIDB4ODIwMDAwMTAgfSwKIH07CiAKLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfdXNl ZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQotewotCXJldHVybiBiYXRjaC0+cHRy IC0gYmF0Y2gtPmJ1ZmZlcjsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1iYXRjaF9hbGlnbihzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBhbGlnbikKLXsKLQl1aW50MzJf dCBvZmZzZXQgPSBiYXRjaF91c2VkKGJhdGNoKTsKLQlvZmZzZXQgPSBBTElHTihvZmZzZXQsIGFs aWduKTsKLQliYXRjaC0+cHRyID0gYmF0Y2gtPmJ1ZmZlciArIG9mZnNldDsKLQlyZXR1cm4gb2Zm c2V0OwotfQotCi1zdGF0aWMgdm9pZCAqCi1iYXRjaF9hbGxvYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoLCB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBhbGlnbikKLXsKLQl1aW50MzJf dCBvZmZzZXQgPSBiYXRjaF9hbGlnbihiYXRjaCwgYWxpZ24pOwotCWJhdGNoLT5wdHIgKz0gc2l6 ZTsKLQlyZXR1cm4gbWVtc2V0KGJhdGNoLT5idWZmZXIgKyBvZmZzZXQsIDAsIHNpemUpOwotfQot Ci1zdGF0aWMgdWludDMyX3QKLWJhdGNoX29mZnNldChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLCB2b2lkICpwdHIpCi17Ci0JcmV0dXJuICh1aW50OF90ICopcHRyIC0gYmF0Y2gtPmJ1 ZmZlcjsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1iYXRjaF9jb3B5KHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsIGNvbnN0IHZvaWQgKnB0ciwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3Qg YWxpZ24pCi17Ci0JcmV0dXJuIGJhdGNoX29mZnNldChiYXRjaCwgbWVtY3B5KGJhdGNoX2FsbG9j KGJhdGNoLCBzaXplLCBhbGlnbiksIHB0ciwgc2l6ZSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ2Vu OF9yZW5kZXJfZmx1c2goc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qg YmF0Y2hfZW5kKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBkcm1faW50ZWxfYm9fc3ViZGF0YShi YXRjaC0+Ym8sIDAsIDQwOTYsIGJhdGNoLT5idWZmZXIpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0 ID0gZHJtX2ludGVsX2JvX21yYl9leGVjKGJhdGNoLT5ibywgYmF0Y2hfZW5kLAotCQkJCQlOVUxM LCAwLCAwLCAwKTsKLQlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKLX0KLQotc3RhdGljIHVpbnQzMl90 Ci1nZW44X2ZpbGxfY3VyYmVfYnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwKLQkJCXVpbnQ4X3QgY29sb3IpCi17Ci0JdWludDhfdCAqY3VyYmVfYnVmZmVyOwotCXVp bnQzMl90IG9mZnNldDsKLQotCWN1cmJlX2J1ZmZlciA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXpl b2YodWludDMyX3QpICogOCwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgY3Vy YmVfYnVmZmVyKTsKLQkqY3VyYmVfYnVmZmVyID0gY29sb3I7Ci0KLQlyZXR1cm4gb2Zmc2V0Owot fQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjhfZmlsbF9zdXJmYWNlX3N0YXRlKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAotCQkJdWludDMy X3QgZm9ybWF0LAotCQkJaW50IGlzX2RzdCkKLXsKLQlzdHJ1Y3QgZ2VuOF9zdXJmYWNlX3N0YXRl ICpzczsKLQl1aW50MzJfdCB3cml0ZV9kb21haW4sIHJlYWRfZG9tYWluLCBvZmZzZXQ7Ci0JaW50 IHJldDsKLQotCWlmIChpc19kc3QpIHsKLQkJd3JpdGVfZG9tYWluID0gcmVhZF9kb21haW4gPSBJ OTE1X0dFTV9ET01BSU5fUkVOREVSOwotCX0gZWxzZSB7Ci0JCXdyaXRlX2RvbWFpbiA9IDA7Ci0J CXJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVI7Ci0JfQotCi0Jc3MgPSBiYXRj aF9hbGxvYyhiYXRjaCwgc2l6ZW9mKCpzcyksIDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQo YmF0Y2gsIHNzKTsKLQotCXNzLT5zczAuc3VyZmFjZV90eXBlID0gR0VOOF9TVVJGQUNFXzJEOwot CXNzLT5zczAuc3VyZmFjZV9mb3JtYXQgPSBmb3JtYXQ7Ci0Jc3MtPnNzMC5yZW5kZXJfY2FjaGVf cmVhZF93cml0ZSA9IDE7Ci0Jc3MtPnNzMC52ZXJ0aWNhbF9hbGlnbm1lbnQgPSAxOyAvKiBhbGln biA0ICovCi0Jc3MtPnNzMC5ob3Jpem9udGFsX2FsaWdubWVudCA9IDE7IC8qIGFsaWduIDQgKi8K LQotCWlmIChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19YKQotCQlzcy0+c3MwLnRpbGVkX21v ZGUgPSAyOwotCWVsc2UgaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1kpCi0JCXNzLT5z czAudGlsZWRfbW9kZSA9IDM7Ci0KLQlzcy0+c3M4LmJhc2VfYWRkciA9IGJ1Zi0+Ym8tPm9mZnNl dDsKLQotCXJldCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywKLQkJCQliYXRj aF9vZmZzZXQoYmF0Y2gsIHNzKSArIDggKiA0LAotCQkJCWJ1Zi0+Ym8sIDAsCi0JCQkJcmVhZF9k b21haW4sIHdyaXRlX2RvbWFpbik7Ci0JaWd0X2Fzc2VydChyZXQgPT0gMCk7Ci0KLQlzcy0+c3My LmhlaWdodCA9IGlndF9idWZfaGVpZ2h0KGJ1ZikgLSAxOwotCXNzLT5zczIud2lkdGggID0gaWd0 X2J1Zl93aWR0aChidWYpIC0gMTsKLQlzcy0+c3MzLnBpdGNoICA9IGJ1Zi0+c3RyaWRlIC0gMTsK LQotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfciA9IDQ7Ci0Jc3MtPnNzNy5zaGFkZXJf Y2hhbmVsX3NlbGVjdF9nID0gNTsKLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2IgPSA2 OwotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYSA9IDc7Ci0KLQlyZXR1cm4gb2Zmc2V0 OwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjhfZmlsbF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQotewotCXVp bnQzMl90ICpiaW5kaW5nX3RhYmxlLCBvZmZzZXQ7Ci0KLQliaW5kaW5nX3RhYmxlID0gYmF0Y2hf YWxsb2MoYmF0Y2gsIDMyLCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBiaW5k aW5nX3RhYmxlKTsKLQotCWJpbmRpbmdfdGFibGVbMF0gPSBnZW44X2ZpbGxfc3VyZmFjZV9zdGF0 ZShiYXRjaCwgZHN0LCBHRU44X1NVUkZBQ0VGT1JNQVRfUjhfVU5PUk0sIDEpOwotCi0JcmV0dXJu IG9mZnNldDsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1nZW44X2ZpbGxfbWVkaWFfa2VybmVsKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCWNvbnN0IHVpbnQzMl90IGtlcm5lbFtd WzRdLAotCQlzaXplX3Qgc2l6ZSkKLXsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0KLQlvZmZzZXQgPSBi YXRjaF9jb3B5KGJhdGNoLCBrZXJuZWwsIHNpemUsIDY0KTsKLQotCXJldHVybiBvZmZzZXQ7Ci19 Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuOF9maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHN0cnVjdCBpZ3RfYnVmICpkc3QpCi17Ci0Jc3Ry dWN0IGdlbjhfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfZGF0YSAqaWRkOwotCXVpbnQzMl90IG9mZnNl dDsKLQl1aW50MzJfdCBiaW5kaW5nX3RhYmxlX29mZnNldCwga2VybmVsX29mZnNldDsKLQotCWJp bmRpbmdfdGFibGVfb2Zmc2V0ID0gZ2VuOF9maWxsX2JpbmRpbmdfdGFibGUoYmF0Y2gsIGRzdCk7 Ci0Ja2VybmVsX29mZnNldCA9IGdlbjhfZmlsbF9tZWRpYV9rZXJuZWwoYmF0Y2gsIG1lZGlhX2tl cm5lbCwgc2l6ZW9mKG1lZGlhX2tlcm5lbCkpOwotCi0JaWRkID0gYmF0Y2hfYWxsb2MoYmF0Y2gs IHNpemVvZigqaWRkKSwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgaWRkKTsK LQotCWlkZC0+ZGVzYzAua2VybmVsX3N0YXJ0X3BvaW50ZXIgPSAoa2VybmVsX29mZnNldCA+PiA2 KTsKLQotCWlkZC0+ZGVzYzIuc2luZ2xlX3Byb2dyYW1fZmxvdyA9IDE7Ci0JaWRkLT5kZXNjMi5m bG9hdGluZ19wb2ludF9tb2RlID0gR0VOOF9GTE9BVElOR19QT0lOVF9JRUVFXzc1NDsKLQotCWlk ZC0+ZGVzYzMuc2FtcGxlcl9jb3VudCA9IDA7ICAgICAgLyogMCBzYW1wbGVycyB1c2VkICovCi0J aWRkLT5kZXNjMy5zYW1wbGVyX3N0YXRlX3BvaW50ZXIgPSAwOwotCi0JaWRkLT5kZXNjNC5iaW5k aW5nX3RhYmxlX2VudHJ5X2NvdW50ID0gMDsKLQlpZGQtPmRlc2M0LmJpbmRpbmdfdGFibGVfcG9p bnRlciA9IChiaW5kaW5nX3RhYmxlX29mZnNldCA+PiA1KTsKLQotCWlkZC0+ZGVzYzUuY29uc3Rh bnRfdXJiX2VudHJ5X3JlYWRfb2Zmc2V0ID0gMDsKLQlpZGQtPmRlc2M1LmNvbnN0YW50X3VyYl9l bnRyeV9yZWFkX2xlbmd0aCA9IDE7IC8qIGdyZiAxICovCi0KLQlyZXR1cm4gb2Zmc2V0OwotfQot Ci1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoKQotewotCU9VVF9CQVRDSChHRU44X1NUQVRFX0JBU0VfQUREUkVT UyB8ICgxNiAtIDIpKTsKLQotCS8qIGdlbmVyYWwgKi8KLQlPVVRfQkFUQ0goMCB8IEJBU0VfQURE UkVTU19NT0RJRlkpOwotCU9VVF9CQVRDSCgwKTsKLQotCS8qIHN0YXRlbGVzcyBkYXRhIHBvcnQg Ki8KLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogc3VyZmFjZSAq LwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAwLCBCQVNF X0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGR5bmFtaWMgKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJv LCBJOTE1X0dFTV9ET01BSU5fUkVOREVSIHwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAot CQkwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGluZGlyZWN0ICovCi0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSCgwKTsKLQotCS8qIGluc3RydWN0aW9uICovCi0JT1VUX1JFTE9DKGJh dGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9E SUZZKTsKLQotCS8qIGdlbmVyYWwgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMHhm ZmZmZjAwMCB8IDEpOwotCS8qIGR5bmFtaWMgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFU Q0goMSA8PCAxMiB8IDEpOwotCS8qIGluZGlyZWN0IG9iamVjdCBidWZmZXIgc2l6ZSAqLwotCU9V VF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7Ci0JLyogaW50cnVjdGlvbiBidWZmZXIgc2l6ZSwgbXVz dCBzZXQgbW9kaWZ5IGVuYWJsZSBiaXQsIG90aGVyd2lzZSBpdCBtYXkgcmVzdWx0IGluIEdQVSBo YW5nICovCi0JT1VUX0JBVENIKDEgPDwgMTIgfCAxKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhf ZW1pdF92ZmVfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlPVVRf QkFUQ0goR0VOOF9NRURJQV9WRkVfU1RBVEUgfCAoOSAtIDIpKTsKLQotCS8qIHNjcmF0Y2ggYnVm ZmVyICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCS8qIG51bWJlciBvZiB0 aHJlYWRzICYgdXJiIGVudHJpZXMgKi8KLQlPVVRfQkFUQ0goMSA8PCAxNiB8Ci0JCTIgPDwgOCk7 Ci0KLQlPVVRfQkFUQ0goMCk7Ci0KLQkvKiB1cmIgZW50cnkgc2l6ZSAmIGN1cmJlIHNpemUgKi8K LQlPVVRfQkFUQ0goMiA8PCAxNiB8Ci0JCTIpOwotCi0JLyogc2NvcmVib2FyZCAqLwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotfQotCi1zdGF0aWMgdm9p ZAotZ2VuOF9lbWl0X2N1cmJlX2xvYWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwg dWludDMyX3QgY3VyYmVfYnVmZmVyKQotewotCU9VVF9CQVRDSChHRU44X01FRElBX0NVUkJFX0xP QUQgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JLyogY3VyYmUgdG90YWwgZGF0YSBsZW5n dGggKi8KLQlPVVRfQkFUQ0goNjQpOwotCS8qIGN1cmJlIGRhdGEgc3RhcnQgYWRkcmVzcywgaXMg cmVsYXRpdmUgdG8gdGhlIGR5bmFtaWNzIGJhc2UgYWRkcmVzcyAqLwotCU9VVF9CQVRDSChjdXJi ZV9idWZmZXIpOwotfQogCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0X2ludGVyZmFjZV9kZXNjcmlw dG9yX2xvYWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgaW50ZXJm YWNlX2Rlc2NyaXB0b3IpCi17Ci0JT1VUX0JBVENIKEdFTjhfTUVESUFfSU5URVJGQUNFX0RFU0NS SVBUT1JfTE9BRCB8ICg0IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQkvKiBpbnRlcmZhY2UgZGVz Y3JpcHRvciBkYXRhIGxlbmd0aCAqLwotCU9VVF9CQVRDSChzaXplb2Yoc3RydWN0IGdlbjhfaW50 ZXJmYWNlX2Rlc2NyaXB0b3JfZGF0YSkpOwotCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGFkZHJl c3MsIGlzIHJlbGF0aXZlIHRvIHRoZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KLQlPVVRfQkFU Q0goaW50ZXJmYWNlX2Rlc2NyaXB0b3IpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0X21l ZGlhX3N0YXRlX2ZsdXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCi17Ci0JT1VU X0JBVENIKEdFTjhfTUVESUFfU1RBVEVfRkxVU0ggfCAoMiAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7 Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW44X2VtaXRfbWVkaWFfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJdW5zaWduZWQgeCwgdW5zaWduZWQgeSwKLQkJCXVuc2ln bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCi17Ci0JaW50IGksIGo7Ci0KLQlmb3IgKGkgPSAw OyBpIDwgd2lkdGggLyAxNjsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBoZWlnaHQgLyAxNjsg aisrKSB7Ci0JCQlPVVRfQkFUQ0goR0VOOF9NRURJQV9PQkpFQ1QgfCAoOCAtIDIpKTsKLQotCQkJ LyogaW50ZXJmYWNlIGRlc2NyaXB0b3Igb2Zmc2V0ICovCi0JCQlPVVRfQkFUQ0goMCk7Ci0KLQkJ CS8qIHdpdGhvdXQgaW5kaXJlY3QgZGF0YSAqLwotCQkJT1VUX0JBVENIKDApOwotCQkJT1VUX0JB VENIKDApOwotCi0JCQkvKiBzY29yZWJvYXJkICovCi0JCQlPVVRfQkFUQ0goMCk7Ci0JCQlPVVRf QkFUQ0goMCk7Ci0KLQkJCS8qIGlubGluZSBkYXRhICh4b2Zmc2V0LCB5b2Zmc2V0KSAqLwotCQkJ T1VUX0JBVENIKHggKyBpICogMTYpOwotCQkJT1VUX0JBVENIKHkgKyBqICogMTYpOwotCQkJZ2Vu OF9lbWl0X21lZGlhX3N0YXRlX2ZsdXNoKGJhdGNoKTsKLQkJfQotCX0KLX0KIAogLyoKICAqIFRo aXMgc2V0cyB1cCB0aGUgbWVkaWEgcGlwZWxpbmUsCkBAIC0zNDksNyArNjMsNyBAQCBnZW44X21l ZGlhX2ZpbGxmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJYmF0Y2gtPnB0 ciA9ICZiYXRjaC0+YnVmZmVyW0JBVENIX1NUQVRFX1NQTElUXTsKIAogCWN1cmJlX2J1ZmZlciA9 IGdlbjhfZmlsbF9jdXJiZV9idWZmZXJfZGF0YShiYXRjaCwgY29sb3IpOwotCWludGVyZmFjZV9k ZXNjcmlwdG9yID0gZ2VuOF9maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKGJhdGNoLCBkc3QpOwor CWludGVyZmFjZV9kZXNjcmlwdG9yID0gZ2VuOF9maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKGJh dGNoLCBkc3QsIG1lZGlhX2tlcm5lbCwgc2l6ZW9mKG1lZGlhX2tlcm5lbCkpOwogCWlndF9hc3Nl cnQoYmF0Y2gtPnB0ciA8ICZiYXRjaC0+YnVmZmVyWzQwOTVdKTsKIAogCS8qIG1lZGlhIHBpcGVs aW5lICovCmRpZmYgLS1naXQgYS9saWIvbWVkaWFfZmlsbF9nZW44bHAuYyBiL2xpYi9tZWRpYV9m aWxsX2dlbjhscC5jCmluZGV4IDFmOGE0YWRjLi5kY2MxMTk4MiAxMDA2NDQKLS0tIGEvbGliL21l ZGlhX2ZpbGxfZ2VuOGxwLmMKKysrIGIvbGliL21lZGlhX2ZpbGxfZ2VuOGxwLmMKQEAgLTUsNyAr NSw3IEBACiAjaW5jbHVkZSAiZ2VuOF9tZWRpYS5oIgogI2luY2x1ZGUgImludGVsX3JlZy5oIgog I2luY2x1ZGUgImRybXRlc3QuaCIKLQorI2luY2x1ZGUgImdwdV9maWxsLmgiCiAjaW5jbHVkZSA8 YXNzZXJ0Lmg+CiAKIApAQCAtMjMsMjg2ICsyMyw2IEBAIHN0YXRpYyBjb25zdCB1aW50MzJfdCBt ZWRpYV9rZXJuZWxbXVs0XSA9IHsKIAl7IDB4MDc4MDAwMzEsIDB4MjAwMDBhNDAsIDB4MGUwMDBl MDAsIDB4ODIwMDAwMTAgfSwKIH07CiAKLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfdXNlZChzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQotewotCXJldHVybiBiYXRjaC0+cHRyIC0gYmF0 Y2gtPmJ1ZmZlcjsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1iYXRjaF9hbGlnbihzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBhbGlnbikKLXsKLQl1aW50MzJfdCBvZmZz ZXQgPSBiYXRjaF91c2VkKGJhdGNoKTsKLQlvZmZzZXQgPSBBTElHTihvZmZzZXQsIGFsaWduKTsK LQliYXRjaC0+cHRyID0gYmF0Y2gtPmJ1ZmZlciArIG9mZnNldDsKLQlyZXR1cm4gb2Zmc2V0Owot fQotCi1zdGF0aWMgdm9pZCAqCi1iYXRjaF9hbGxvYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLCB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBhbGlnbikKLXsKLQl1aW50MzJfdCBvZmZz ZXQgPSBiYXRjaF9hbGlnbihiYXRjaCwgYWxpZ24pOwotCWJhdGNoLT5wdHIgKz0gc2l6ZTsKLQly ZXR1cm4gbWVtc2V0KGJhdGNoLT5idWZmZXIgKyBvZmZzZXQsIDAsIHNpemUpOwotfQotCi1zdGF0 aWMgdWludDMyX3QKLWJhdGNoX29mZnNldChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LCB2b2lkICpwdHIpCi17Ci0JcmV0dXJuICh1aW50OF90ICopcHRyIC0gYmF0Y2gtPmJ1ZmZlcjsK LX0KLQotc3RhdGljIHVpbnQzMl90Ci1iYXRjaF9jb3B5KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gsIGNvbnN0IHZvaWQgKnB0ciwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24p Ci17Ci0JcmV0dXJuIGJhdGNoX29mZnNldChiYXRjaCwgbWVtY3B5KGJhdGNoX2FsbG9jKGJhdGNo LCBzaXplLCBhbGlnbiksIHB0ciwgc2l6ZSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9yZW5k ZXJfZmx1c2goc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYmF0Y2hf ZW5kKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBkcm1faW50ZWxfYm9fc3ViZGF0YShiYXRjaC0+ Ym8sIDAsIDQwOTYsIGJhdGNoLT5idWZmZXIpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gZHJt X2ludGVsX2JvX21yYl9leGVjKGJhdGNoLT5ibywgYmF0Y2hfZW5kLAotCQkJCQlOVUxMLCAwLCAw LCAwKTsKLQlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1nZW44 X2ZpbGxfY3VyYmVfYnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwK LQkJCXVpbnQ4X3QgY29sb3IpCi17Ci0JdWludDhfdCAqY3VyYmVfYnVmZmVyOwotCXVpbnQzMl90 IG9mZnNldDsKLQotCWN1cmJlX2J1ZmZlciA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YodWlu dDMyX3QpICogOCwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgY3VyYmVfYnVm ZmVyKTsKLQkqY3VyYmVfYnVmZmVyID0gY29sb3I7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1z dGF0aWMgdWludDMyX3QKLWdlbjhfZmlsbF9zdXJmYWNlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAotCQkJdWludDMyX3QgZm9y bWF0LAotCQkJaW50IGlzX2RzdCkKLXsKLQlzdHJ1Y3QgZ2VuOF9zdXJmYWNlX3N0YXRlICpzczsK LQl1aW50MzJfdCB3cml0ZV9kb21haW4sIHJlYWRfZG9tYWluLCBvZmZzZXQ7Ci0JaW50IHJldDsK LQotCWlmIChpc19kc3QpIHsKLQkJd3JpdGVfZG9tYWluID0gcmVhZF9kb21haW4gPSBJOTE1X0dF TV9ET01BSU5fUkVOREVSOwotCX0gZWxzZSB7Ci0JCXdyaXRlX2RvbWFpbiA9IDA7Ci0JCXJlYWRf ZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVI7Ci0JfQotCi0Jc3MgPSBiYXRjaF9hbGxv YyhiYXRjaCwgc2l6ZW9mKCpzcyksIDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gs IHNzKTsKLQotCXNzLT5zczAuc3VyZmFjZV90eXBlID0gR0VOOF9TVVJGQUNFXzJEOwotCXNzLT5z czAuc3VyZmFjZV9mb3JtYXQgPSBmb3JtYXQ7Ci0Jc3MtPnNzMC5yZW5kZXJfY2FjaGVfcmVhZF93 cml0ZSA9IDE7Ci0Jc3MtPnNzMC52ZXJ0aWNhbF9hbGlnbm1lbnQgPSAxOyAvKiBhbGlnbiA0ICov Ci0Jc3MtPnNzMC5ob3Jpem9udGFsX2FsaWdubWVudCA9IDE7IC8qIGFsaWduIDQgKi8KLQotCWlm IChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19YKQotCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAy OwotCWVsc2UgaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1kpCi0JCXNzLT5zczAudGls ZWRfbW9kZSA9IDM7Ci0KLQlzcy0+c3M4LmJhc2VfYWRkciA9IGJ1Zi0+Ym8tPm9mZnNldDsKLQot CXJldCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywKLQkJCQliYXRjaF9vZmZz ZXQoYmF0Y2gsIHNzKSArIDggKiA0LAotCQkJCWJ1Zi0+Ym8sIDAsCi0JCQkJcmVhZF9kb21haW4s IHdyaXRlX2RvbWFpbik7Ci0JaWd0X2Fzc2VydChyZXQgPT0gMCk7Ci0KLQlzcy0+c3MyLmhlaWdo dCA9IGlndF9idWZfaGVpZ2h0KGJ1ZikgLSAxOwotCXNzLT5zczIud2lkdGggID0gaWd0X2J1Zl93 aWR0aChidWYpIC0gMTsKLQlzcy0+c3MzLnBpdGNoICA9IGJ1Zi0+c3RyaWRlIC0gMTsKLQotCXNz LT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfciA9IDQ7Ci0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVs X3NlbGVjdF9nID0gNTsKLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2IgPSA2OwotCXNz LT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYSA9IDc7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQot Ci1zdGF0aWMgdWludDMyX3QKLWdlbjhfZmlsbF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQotewotCXVpbnQzMl90 ICpiaW5kaW5nX3RhYmxlLCBvZmZzZXQ7Ci0KLQliaW5kaW5nX3RhYmxlID0gYmF0Y2hfYWxsb2Mo YmF0Y2gsIDMyLCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3Rh YmxlKTsKLQotCWJpbmRpbmdfdGFibGVbMF0gPSBnZW44X2ZpbGxfc3VyZmFjZV9zdGF0ZShiYXRj aCwgZHN0LCBHRU44X1NVUkZBQ0VGT1JNQVRfUjhfVU5PUk0sIDEpOwotCi0JcmV0dXJuIG9mZnNl dDsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1nZW44X2ZpbGxfbWVkaWFfa2VybmVsKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCWNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLAot CQlzaXplX3Qgc2l6ZSkKLXsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0KLQlvZmZzZXQgPSBiYXRjaF9j b3B5KGJhdGNoLCBrZXJuZWwsIHNpemUsIDY0KTsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0 YXRpYyB1aW50MzJfdAotZ2VuOF9maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHN0cnVjdCBpZ3RfYnVmICpkc3QpCi17Ci0Jc3RydWN0IGdl bjhfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfZGF0YSAqaWRkOwotCXVpbnQzMl90IG9mZnNldDsKLQl1 aW50MzJfdCBiaW5kaW5nX3RhYmxlX29mZnNldCwga2VybmVsX29mZnNldDsKLQotCWJpbmRpbmdf dGFibGVfb2Zmc2V0ID0gZ2VuOF9maWxsX2JpbmRpbmdfdGFibGUoYmF0Y2gsIGRzdCk7Ci0Ja2Vy bmVsX29mZnNldCA9IGdlbjhfZmlsbF9tZWRpYV9rZXJuZWwoYmF0Y2gsIG1lZGlhX2tlcm5lbCwg c2l6ZW9mKG1lZGlhX2tlcm5lbCkpOwotCi0JaWRkID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVv ZigqaWRkKSwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgaWRkKTsKLQotCWlk ZC0+ZGVzYzAua2VybmVsX3N0YXJ0X3BvaW50ZXIgPSAoa2VybmVsX29mZnNldCA+PiA2KTsKLQot CWlkZC0+ZGVzYzIuc2luZ2xlX3Byb2dyYW1fZmxvdyA9IDE7Ci0JaWRkLT5kZXNjMi5mbG9hdGlu Z19wb2ludF9tb2RlID0gR0VOOF9GTE9BVElOR19QT0lOVF9JRUVFXzc1NDsKLQotCWlkZC0+ZGVz YzMuc2FtcGxlcl9jb3VudCA9IDA7ICAgICAgLyogMCBzYW1wbGVycyB1c2VkICovCi0JaWRkLT5k ZXNjMy5zYW1wbGVyX3N0YXRlX3BvaW50ZXIgPSAwOwotCi0JaWRkLT5kZXNjNC5iaW5kaW5nX3Rh YmxlX2VudHJ5X2NvdW50ID0gMDsKLQlpZGQtPmRlc2M0LmJpbmRpbmdfdGFibGVfcG9pbnRlciA9 IChiaW5kaW5nX3RhYmxlX29mZnNldCA+PiA1KTsKLQotCWlkZC0+ZGVzYzUuY29uc3RhbnRfdXJi X2VudHJ5X3JlYWRfb2Zmc2V0ID0gMDsKLQlpZGQtPmRlc2M1LmNvbnN0YW50X3VyYl9lbnRyeV9y ZWFkX2xlbmd0aCA9IDE7IC8qIGdyZiAxICovCi0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0 aWMgdm9pZAotZ2VuOF9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoKQotewotCU9VVF9CQVRDSChHRU44X1NUQVRFX0JBU0VfQUREUkVTUyB8ICgx NiAtIDIpKTsKLQotCS8qIGdlbmVyYWwgKi8KLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19N T0RJRlkpOwotCU9VVF9CQVRDSCgwKTsKLQotCS8qIHN0YXRlbGVzcyBkYXRhIHBvcnQgKi8KLQlP VVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogc3VyZmFjZSAqLwotCU9V VF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAwLCBCQVNFX0FERFJF U1NfTU9ESUZZKTsKLQotCS8qIGR5bmFtaWMgKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1 X0dFTV9ET01BSU5fUkVOREVSIHwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAotCQkwLCBC QVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGluZGlyZWN0ICovCi0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwKTsKLQotCS8qIGluc3RydWN0aW9uICovCi0JT1VUX1JFTE9DKGJhdGNoLT5i bywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsK LQotCS8qIGdlbmVyYWwgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMHhmZmZmZjAw MCB8IDEpOwotCS8qIGR5bmFtaWMgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMSA8 PCAxMiB8IDEpOwotCS8qIGluZGlyZWN0IG9iamVjdCBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRD SCgweGZmZmZmMDAwIHwgMSk7Ci0JLyogaW50cnVjdGlvbiBidWZmZXIgc2l6ZSwgbXVzdCBzZXQg bW9kaWZ5IGVuYWJsZSBiaXQsIG90aGVyd2lzZSBpdCBtYXkgcmVzdWx0IGluIEdQVSBoYW5nICov Ci0JT1VUX0JBVENIKDEgPDwgMTIgfCAxKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhfZW1pdF92 ZmVfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlPVVRfQkFUQ0go R0VOOF9NRURJQV9WRkVfU1RBVEUgfCAoOSAtIDIpKTsKLQotCS8qIHNjcmF0Y2ggYnVmZmVyICov Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCS8qIG51bWJlciBvZiB0aHJlYWRz ICYgdXJiIGVudHJpZXMgKi8KLQlPVVRfQkFUQ0goMSA8PCAxNiB8Ci0JCTIgPDwgOCk7Ci0KLQlP VVRfQkFUQ0goMCk7Ci0KLQkvKiB1cmIgZW50cnkgc2l6ZSAmIGN1cmJlIHNpemUgKi8KLQlPVVRf QkFUQ0goMiA8PCAxNiB8Ci0JCTIpOwotCi0JLyogc2NvcmVib2FyZCAqLwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotfQotCi1zdGF0aWMgdm9pZAotZ2Vu OF9lbWl0X2N1cmJlX2xvYWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMy X3QgY3VyYmVfYnVmZmVyKQotewotCU9VVF9CQVRDSChHRU44X01FRElBX0NVUkJFX0xPQUQgfCAo NCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JLyogY3VyYmUgdG90YWwgZGF0YSBsZW5ndGggKi8K LQlPVVRfQkFUQ0goNjQpOwotCS8qIGN1cmJlIGRhdGEgc3RhcnQgYWRkcmVzcywgaXMgcmVsYXRp dmUgdG8gdGhlIGR5bmFtaWNzIGJhc2UgYWRkcmVzcyAqLwotCU9VVF9CQVRDSChjdXJiZV9idWZm ZXIpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0X2ludGVyZmFjZV9kZXNjcmlwdG9yX2xv YWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgaW50ZXJmYWNlX2Rl c2NyaXB0b3IpCi17Ci0JT1VUX0JBVENIKEdFTjhfTUVESUFfSU5URVJGQUNFX0RFU0NSSVBUT1Jf TE9BRCB8ICg0IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRv ciBkYXRhIGxlbmd0aCAqLwotCU9VVF9CQVRDSChzaXplb2Yoc3RydWN0IGdlbjhfaW50ZXJmYWNl X2Rlc2NyaXB0b3JfZGF0YSkpOwotCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGFkZHJlc3MsIGlz IHJlbGF0aXZlIHRvIHRoZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KLQlPVVRfQkFUQ0goaW50 ZXJmYWNlX2Rlc2NyaXB0b3IpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOGxwX2VtaXRfbWVkaWFf b2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJdW5zaWduZWQgeCwg dW5zaWduZWQgeSwKLQkJCXVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCi17Ci0JaW50 IGksIGo7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLyAxNjsgaSsrKSB7Ci0JCWZvciAoaiA9 IDA7IGogPCBoZWlnaHQgLyAxNjsgaisrKSB7Ci0JCQlPVVRfQkFUQ0goR0VOOF9NRURJQV9PQkpF Q1QgfCAoOCAtIDIpKTsKLQotCQkJLyogaW50ZXJmYWNlIGRlc2NyaXB0b3Igb2Zmc2V0ICovCi0J CQlPVVRfQkFUQ0goMCk7Ci0KLQkJCS8qIHdpdGhvdXQgaW5kaXJlY3QgZGF0YSAqLwotCQkJT1VU X0JBVENIKDApOwotCQkJT1VUX0JBVENIKDApOwotCi0JCQkvKiBzY29yZWJvYXJkICovCi0JCQlP VVRfQkFUQ0goMCk7Ci0JCQlPVVRfQkFUQ0goMCk7Ci0KLQkJCS8qIGlubGluZSBkYXRhICh4b2Zm c2V0LCB5b2Zmc2V0KSAqLwotCQkJT1VUX0JBVENIKHggKyBpICogMTYpOwotCQkJT1VUX0JBVENI KHkgKyBqICogMTYpOwotCQl9Ci0JfQotfQotCiAvKgogICogVGhpcyBzZXRzIHVwIHRoZSBtZWRp YSBwaXBlbGluZSwKICAqCkBAIC0zNDEsNyArNjEsNyBAQCBnZW44bHBfbWVkaWFfZmlsbGZ1bmMo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAliYXRjaC0+cHRyID0gJmJhdGNoLT5i dWZmZXJbQkFUQ0hfU1RBVEVfU1BMSVRdOwogCiAJY3VyYmVfYnVmZmVyID0gZ2VuOF9maWxsX2N1 cmJlX2J1ZmZlcl9kYXRhKGJhdGNoLCBjb2xvcik7Ci0JaW50ZXJmYWNlX2Rlc2NyaXB0b3IgPSBn ZW44X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3IoYmF0Y2gsIGRzdCk7CisJaW50ZXJmYWNlX2Rl c2NyaXB0b3IgPSBnZW44X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3IoYmF0Y2gsIGRzdCwgbWVk aWFfa2VybmVsLCBzaXplb2YobWVkaWFfa2VybmVsKSk7CiAJaWd0X2Fzc2VydChiYXRjaC0+cHRy IDwgJmJhdGNoLT5idWZmZXJbNDA5NV0pOwogCiAJLyogbWVkaWEgcGlwZWxpbmUgKi8KZGlmZiAt LWdpdCBhL2xpYi9tZWRpYV9maWxsX2dlbjkuYyBiL2xpYi9tZWRpYV9maWxsX2dlbjkuYwppbmRl eCAzZmQyMTgxOS4uNmFjY2RiZTQgMTAwNjQ0Ci0tLSBhL2xpYi9tZWRpYV9maWxsX2dlbjkuYwor KysgYi9saWIvbWVkaWFfZmlsbF9nZW45LmMKQEAgLTQsMTEgKzQsOSBAQAogI2luY2x1ZGUgIm1l ZGlhX2ZpbGwuaCIKICNpbmNsdWRlICJnZW44X21lZGlhLmgiCiAjaW5jbHVkZSAiaW50ZWxfcmVn LmgiCi0KKyNpbmNsdWRlICJncHVfZmlsbC5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgogCi0jZGVm aW5lIEFMSUdOKHgsIHkpICgoKHgpICsgKHkpLTEpICYgfigoeSktMSkpCi0KIHN0YXRpYyBjb25z dCB1aW50MzJfdCBtZWRpYV9rZXJuZWxbXVs0XSA9IHsKIAl7IDB4MDA0MDAwMDEsIDB4MjAyMDIy ODgsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMDAgfSwKIAl7IDB4MDA2MDAwMDEsIDB4MjA4MDAyMDgs IDB4MDA4ZDAwMDAsIDB4MDAwMDAwMDAgfSwKQEAgLTIzLDI5OCArMjEsNiBAQCBzdGF0aWMgY29u c3QgdWludDMyX3QgbWVkaWFfa2VybmVsW11bNF0gPSB7CiAJeyAweDA3ODAwMDMxLCAweDIwMDAw YTQwLCAweDBlMDAwZTAwLCAweDgyMDAwMDEwIH0sCiB9OwogCi1zdGF0aWMgdWludDMyX3QKLWJh dGNoX3VzZWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlyZXR1cm4gYmF0 Y2gtPnB0ciAtIGJhdGNoLT5idWZmZXI7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfYWxp Z24oc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYWxpZ24pCi17Ci0J dWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfdXNlZChiYXRjaCk7Ci0Jb2Zmc2V0ID0gQUxJR04ob2Zm c2V0LCBhbGlnbik7Ci0JYmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXIgKyBvZmZzZXQ7Ci0JcmV0 dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQgKgotYmF0Y2hfYWxsb2Moc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24pCi17Ci0J dWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfYWxpZ24oYmF0Y2gsIGFsaWduKTsKLQliYXRjaC0+cHRy ICs9IHNpemU7Ci0JcmV0dXJuIG1lbXNldChiYXRjaC0+YnVmZmVyICsgb2Zmc2V0LCAwLCBzaXpl KTsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1iYXRjaF9vZmZzZXQoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCwgdm9pZCAqcHRyKQotewotCXJldHVybiAodWludDhfdCAqKXB0ciAtIGJh dGNoLT5idWZmZXI7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfY29weShzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25zdCB2b2lkICpwdHIsIHVpbnQzMl90IHNpemUsIHVp bnQzMl90IGFsaWduKQotewotCXJldHVybiBiYXRjaF9vZmZzZXQoYmF0Y2gsIG1lbWNweShiYXRj aF9hbGxvYyhiYXRjaCwgc2l6ZSwgYWxpZ24pLCBwdHIsIHNpemUpKTsKLX0KLQotc3RhdGljIHZv aWQKLWdlbjhfcmVuZGVyX2ZsdXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVp bnQzMl90IGJhdGNoX2VuZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZHJtX2ludGVsX2JvX3N1 YmRhdGEoYmF0Y2gtPmJvLCAwLCA0MDk2LCBiYXRjaC0+YnVmZmVyKTsKLQlpZiAocmV0ID09IDAp Ci0JCXJldCA9IGRybV9pbnRlbF9ib19tcmJfZXhlYyhiYXRjaC0+Ym8sIGJhdGNoX2VuZCwKLQkJ CQkJTlVMTCwgMCwgMCwgMCk7Ci0JYXNzZXJ0KHJldCA9PSAwKTsKLX0KLQotc3RhdGljIHVpbnQz Ml90Ci1nZW44X2ZpbGxfY3VyYmVfYnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwKLQkJCXVpbnQ4X3QgY29sb3IpCi17Ci0JdWludDhfdCAqY3VyYmVfYnVmZmVyOwot CXVpbnQzMl90IG9mZnNldDsKLQotCWN1cmJlX2J1ZmZlciA9IGJhdGNoX2FsbG9jKGJhdGNoLCBz aXplb2YodWludDMyX3QpICogOCwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwg Y3VyYmVfYnVmZmVyKTsKLQkqY3VyYmVfYnVmZmVyID0gY29sb3I7Ci0KLQlyZXR1cm4gb2Zmc2V0 OwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjhfZmlsbF9zdXJmYWNlX3N0YXRlKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAotCQkJdWlu dDMyX3QgZm9ybWF0LAotCQkJaW50IGlzX2RzdCkKLXsKLQlzdHJ1Y3QgZ2VuOF9zdXJmYWNlX3N0 YXRlICpzczsKLQl1aW50MzJfdCB3cml0ZV9kb21haW4sIHJlYWRfZG9tYWluLCBvZmZzZXQ7Ci0J aW50IHJldDsKLQotCWlmIChpc19kc3QpIHsKLQkJd3JpdGVfZG9tYWluID0gcmVhZF9kb21haW4g PSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwotCX0gZWxzZSB7Ci0JCXdyaXRlX2RvbWFpbiA9IDA7 Ci0JCXJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVI7Ci0JfQotCi0Jc3MgPSBi YXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKCpzcyksIDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZz ZXQoYmF0Y2gsIHNzKTsKLQotCXNzLT5zczAuc3VyZmFjZV90eXBlID0gR0VOOF9TVVJGQUNFXzJE OwotCXNzLT5zczAuc3VyZmFjZV9mb3JtYXQgPSBmb3JtYXQ7Ci0Jc3MtPnNzMC5yZW5kZXJfY2Fj aGVfcmVhZF93cml0ZSA9IDE7Ci0Jc3MtPnNzMC52ZXJ0aWNhbF9hbGlnbm1lbnQgPSAxOyAvKiBh bGlnbiA0ICovCi0Jc3MtPnNzMC5ob3Jpem9udGFsX2FsaWdubWVudCA9IDE7IC8qIGFsaWduIDQg Ki8KLQotCWlmIChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19YKQotCQlzcy0+c3MwLnRpbGVk X21vZGUgPSAyOwotCWVsc2UgaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1kpCi0JCXNz LT5zczAudGlsZWRfbW9kZSA9IDM7Ci0KLQlzcy0+c3M4LmJhc2VfYWRkciA9IGJ1Zi0+Ym8tPm9m ZnNldDsKLQotCXJldCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywKLQkJCQli YXRjaF9vZmZzZXQoYmF0Y2gsIHNzKSArIDggKiA0LAotCQkJCWJ1Zi0+Ym8sIDAsCi0JCQkJcmVh ZF9kb21haW4sIHdyaXRlX2RvbWFpbik7Ci0JYXNzZXJ0KHJldCA9PSAwKTsKLQotCXNzLT5zczIu aGVpZ2h0ID0gaWd0X2J1Zl9oZWlnaHQoYnVmKSAtIDE7Ci0Jc3MtPnNzMi53aWR0aCAgPSBpZ3Rf YnVmX3dpZHRoKGJ1ZikgLSAxOwotCXNzLT5zczMucGl0Y2ggID0gYnVmLT5zdHJpZGUgLSAxOwot Ci0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9yID0gNDsKLQlzcy0+c3M3LnNoYWRlcl9j aGFuZWxfc2VsZWN0X2cgPSA1OwotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYiA9IDY7 Ci0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9hID0gNzsKLQotCXJldHVybiBvZmZzZXQ7 Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuOF9maWxsX2JpbmRpbmdfdGFibGUoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCXN0cnVjdCBpZ3RfYnVmICpkc3QpCi17Ci0JdWlu dDMyX3QgKmJpbmRpbmdfdGFibGUsIG9mZnNldDsKLQotCWJpbmRpbmdfdGFibGUgPSBiYXRjaF9h bGxvYyhiYXRjaCwgMzIsIDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGJpbmRp bmdfdGFibGUpOwotCi0JYmluZGluZ190YWJsZVswXSA9IGdlbjhfZmlsbF9zdXJmYWNlX3N0YXRl KGJhdGNoLCBkc3QsIEdFTjhfU1VSRkFDRUZPUk1BVF9SOF9VTk9STSwgMSk7Ci0KLQlyZXR1cm4g b2Zmc2V0OwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjhfZmlsbF9tZWRpYV9rZXJuZWwoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJY29uc3QgdWludDMyX3Qga2VybmVsW11b NF0sCi0JCXNpemVfdCBzaXplKQotewotCXVpbnQzMl90IG9mZnNldDsKLQotCW9mZnNldCA9IGJh dGNoX2NvcHkoYmF0Y2gsIGtlcm5lbCwgc2l6ZSwgNjQpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0K LQotc3RhdGljIHVpbnQzMl90Ci1nZW44X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Ioc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgc3RydWN0IGlndF9idWYgKmRzdCkKLXsKLQlzdHJ1 Y3QgZ2VuOF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9kYXRhICppZGQ7Ci0JdWludDMyX3Qgb2Zmc2V0 OwotCXVpbnQzMl90IGJpbmRpbmdfdGFibGVfb2Zmc2V0LCBrZXJuZWxfb2Zmc2V0OwotCi0JYmlu ZGluZ190YWJsZV9vZmZzZXQgPSBnZW44X2ZpbGxfYmluZGluZ190YWJsZShiYXRjaCwgZHN0KTsK LQlrZXJuZWxfb2Zmc2V0ID0gZ2VuOF9maWxsX21lZGlhX2tlcm5lbChiYXRjaCwgbWVkaWFfa2Vy bmVsLCBzaXplb2YobWVkaWFfa2VybmVsKSk7Ci0KLQlpZGQgPSBiYXRjaF9hbGxvYyhiYXRjaCwg c2l6ZW9mKCppZGQpLCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBpZGQpOwot Ci0JaWRkLT5kZXNjMC5rZXJuZWxfc3RhcnRfcG9pbnRlciA9IChrZXJuZWxfb2Zmc2V0ID4+IDYp OwotCi0JaWRkLT5kZXNjMi5zaW5nbGVfcHJvZ3JhbV9mbG93ID0gMTsKLQlpZGQtPmRlc2MyLmZs b2F0aW5nX3BvaW50X21vZGUgPSBHRU44X0ZMT0FUSU5HX1BPSU5UX0lFRUVfNzU0OwotCi0JaWRk LT5kZXNjMy5zYW1wbGVyX2NvdW50ID0gMDsgICAgICAvKiAwIHNhbXBsZXJzIHVzZWQgKi8KLQlp ZGQtPmRlc2MzLnNhbXBsZXJfc3RhdGVfcG9pbnRlciA9IDA7Ci0KLQlpZGQtPmRlc2M0LmJpbmRp bmdfdGFibGVfZW50cnlfY291bnQgPSAwOwotCWlkZC0+ZGVzYzQuYmluZGluZ190YWJsZV9wb2lu dGVyID0gKGJpbmRpbmdfdGFibGVfb2Zmc2V0ID4+IDUpOwotCi0JaWRkLT5kZXNjNS5jb25zdGFu dF91cmJfZW50cnlfcmVhZF9vZmZzZXQgPSAwOwotCWlkZC0+ZGVzYzUuY29uc3RhbnRfdXJiX2Vu dHJ5X3JlYWRfbGVuZ3RoID0gMTsgLyogZ3JmIDEgKi8KLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0K LXN0YXRpYyB2b2lkCi1nZW45X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gpCi17Ci0JT1VUX0JBVENIKEdFTjhfU1RBVEVfQkFTRV9BRERSRVNT IHwgKDE5IC0gMikpOwotCi0JLyogZ2VuZXJhbCAqLwotCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERS RVNTX01PRElGWSk7Ci0JT1VUX0JBVENIKDApOwotCi0JLyogc3RhdGVsZXNzIGRhdGEgcG9ydCAq LwotCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBzdXJmYWNlICov Ci0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIsIDAsIEJBU0Vf QUREUkVTU19NT0RJRlkpOwotCi0JLyogZHluYW1pYyAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8s IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIgfCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sCi0J CTAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogaW5kaXJlY3QgKi8KLQlPVVRfQkFUQ0go MCk7Ci0JT1VUX0JBVENIKDApOwotCi0JLyogaW5zdHJ1Y3Rpb24gKi8KLQlPVVRfUkVMT0MoYmF0 Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJ RlkpOwotCi0JLyogZ2VuZXJhbCBzdGF0ZSBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgweGZm ZmZmMDAwIHwgMSk7Ci0JLyogZHluYW1pYyBzdGF0ZSBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRD SCgxIDw8IDEyIHwgMSk7Ci0JLyogaW5kaXJlY3Qgb2JqZWN0IGJ1ZmZlciBzaXplICovCi0JT1VU X0JBVENIKDB4ZmZmZmYwMDAgfCAxKTsKLQkvKiBpbnRydWN0aW9uIGJ1ZmZlciBzaXplLCBtdXN0 IHNldCBtb2RpZnkgZW5hYmxlIGJpdCwgb3RoZXJ3aXNlIGl0IG1heSByZXN1bHQgaW4gR1BVIGhh bmcgKi8KLQlPVVRfQkFUQ0goMSA8PCAxMiB8IDEpOwotCi0JLyogQmluZGxlc3Mgc3VyZmFjZSBz dGF0ZSBiYXNlIGFkZHJlc3MgKi8KLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCk7Ci19Ci0KLXN0YXRpYyB2 b2lkCi1nZW44X2VtaXRfdmZlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gp Ci17Ci0JT1VUX0JBVENIKEdFTjhfTUVESUFfVkZFX1NUQVRFIHwgKDkgLSAyKSk7Ci0KLQkvKiBz Y3JhdGNoIGJ1ZmZlciAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQkvKiBu dW1iZXIgb2YgdGhyZWFkcyAmIHVyYiBlbnRyaWVzICovCi0JT1VUX0JBVENIKDEgPDwgMTYgfAot CQkyIDw8IDgpOwotCi0JT1VUX0JBVENIKDApOwotCi0JLyogdXJiIGVudHJ5IHNpemUgJiBjdXJi ZSBzaXplICovCi0JT1VUX0JBVENIKDIgPDwgMTYgfAotCQkyKTsKLQotCS8qIHNjb3JlYm9hcmQg Ki8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLX0KLQot c3RhdGljIHZvaWQKLWdlbjhfZW1pdF9jdXJiZV9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gsIHVpbnQzMl90IGN1cmJlX2J1ZmZlcikKLXsKLQlPVVRfQkFUQ0goR0VOOF9NRURJ QV9DVVJCRV9MT0FEIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCS8qIGN1cmJlIHRvdGFs IGRhdGEgbGVuZ3RoICovCi0JT1VUX0JBVENIKDY0KTsKLQkvKiBjdXJiZSBkYXRhIHN0YXJ0IGFk ZHJlc3MsIGlzIHJlbGF0aXZlIHRvIHRoZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KLQlPVVRf QkFUQ0goY3VyYmVfYnVmZmVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9pbnRlcmZh Y2VfZGVzY3JpcHRvcl9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQz Ml90IGludGVyZmFjZV9kZXNjcmlwdG9yKQotewotCU9VVF9CQVRDSChHRU44X01FRElBX0lOVEVS RkFDRV9ERVNDUklQVE9SX0xPQUQgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JLyogaW50 ZXJmYWNlIGRlc2NyaXB0b3IgZGF0YSBsZW5ndGggKi8KLQlPVVRfQkFUQ0goc2l6ZW9mKHN0cnVj dCBnZW44X2ludGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEpKTsKLQkvKiBpbnRlcmZhY2UgZGVzY3Jp cHRvciBhZGRyZXNzLCBpcyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFzZSBhZGRyZXNzICov Ci0JT1VUX0JBVENIKGludGVyZmFjZV9kZXNjcmlwdG9yKTsKLX0KLQotc3RhdGljIHZvaWQKLWdl bjhfZW1pdF9tZWRpYV9zdGF0ZV9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo KQotewotCU9VVF9CQVRDSChHRU44X01FRElBX1NUQVRFX0ZMVVNIIHwgKDIgLSAyKSk7Ci0JT1VU X0JBVENIKDApOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0X21lZGlhX29iamVjdHMoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCXVuc2lnbmVkIHgsIHVuc2lnbmVkIHks Ci0JCQl1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQotewotCWludCBpLCBqOwotCi0J Zm9yIChpID0gMDsgaSA8IHdpZHRoIC8gMTY7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgaGVp Z2h0IC8gMTY7IGorKykgewotCQkJT1VUX0JBVENIKEdFTjhfTUVESUFfT0JKRUNUIHwgKDggLSAy KSk7Ci0KLQkJCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIG9mZnNldCAqLwotCQkJT1VUX0JBVENI KDApOwotCi0JCQkvKiB3aXRob3V0IGluZGlyZWN0IGRhdGEgKi8KLQkJCU9VVF9CQVRDSCgwKTsK LQkJCU9VVF9CQVRDSCgwKTsKLQotCQkJLyogc2NvcmVib2FyZCAqLwotCQkJT1VUX0JBVENIKDAp OwotCQkJT1VUX0JBVENIKDApOwotCi0JCQkvKiBpbmxpbmUgZGF0YSAoeG9mZnNldCwgeW9mZnNl dCkgKi8KLQkJCU9VVF9CQVRDSCh4ICsgaSAqIDE2KTsKLQkJCU9VVF9CQVRDSCh5ICsgaiAqIDE2 KTsKLQkJCWdlbjhfZW1pdF9tZWRpYV9zdGF0ZV9mbHVzaChiYXRjaCk7Ci0JCX0KLQl9Ci19CiAK IC8qCiAgKiBUaGlzIHNldHMgdXAgdGhlIG1lZGlhIHBpcGVsaW5lLApAQCAtMzU0LDcgKzYwLDcg QEAgZ2VuOV9tZWRpYV9maWxsZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAog CWJhdGNoLT5wdHIgPSAmYmF0Y2gtPmJ1ZmZlcltCQVRDSF9TVEFURV9TUExJVF07CiAKIAljdXJi ZV9idWZmZXIgPSBnZW44X2ZpbGxfY3VyYmVfYnVmZmVyX2RhdGEoYmF0Y2gsIGNvbG9yKTsKLQlp bnRlcmZhY2VfZGVzY3JpcHRvciA9IGdlbjhfZmlsbF9pbnRlcmZhY2VfZGVzY3JpcHRvcihiYXRj aCwgZHN0KTsKKwlpbnRlcmZhY2VfZGVzY3JpcHRvciA9IGdlbjhfZmlsbF9pbnRlcmZhY2VfZGVz Y3JpcHRvcihiYXRjaCwgZHN0LCBtZWRpYV9rZXJuZWwsIHNpemVvZihtZWRpYV9rZXJuZWwpKTsK IAlhc3NlcnQoYmF0Y2gtPnB0ciA8ICZiYXRjaC0+YnVmZmVyWzQwOTVdKTsKIAogCS8qIG1lZGlh IHBpcGVsaW5lICovCmRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVzb24uYnVp bGQKaW5kZXggYjNiOGIxNGEuLjM4NWUwOGI5IDEwMDY0NAotLS0gYS9saWIvbWVzb24uYnVpbGQK KysrIGIvbGliL21lc29uLmJ1aWxkCkBAIC0zMCw2ICszMCw3IEBAIGxpYl9zb3VyY2VzID0gWwog CSdtZWRpYV9maWxsX2dlbjkuYycsCiAJJ21lZGlhX3NwaW4uYycsCiAJJ2dwZ3B1X2ZpbGwuYycs CisJJ2dwdV9maWxsLmMnLAogCSdyZW5kZXJjb3B5X2k5MTUuYycsCiAJJ3JlbmRlcmNvcHlfaTgz MC5jJywKIAkncmVuZGVyY29weV9nZW42LmMnLAotLSAKMi4xNC4zCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3Qt ZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK