From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: [PATCH 7/7] drm: extract drm_atomic_uapi.c Date: Wed, 5 Sep 2018 15:57:11 +0200 Message-ID: <20180905135711.28370-7-daniel.vetter@ffwll.ch> References: <20180905135711.28370-1-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180905135711.28370-1-daniel.vetter-/w4YWyX8dFk@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: DRI Development Cc: David Airlie , Daniel Vetter , Intel Graphics Development , Joonas Lahtinen , Maarten Lankhorst , Rob Clark , Jani Nikula , Eric Anholt , Rodrigo Vivi , Sean Paul , Gustavo Padovan , Daniel Vetter , freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org VGhpcyBsZWF2ZXMgYWxsIHRoZSBjb21taXQvY2hlY2sgYW5kIHN0YXRlIGhhbmRsaW5nIGluIGRy bV9hdG9taWMuYywKd2hpbGUgcHVsbGluZyBhbGwgdGhlIHVhcGkgZ2x1ZSBhbmQgdGhlIGh1Z2Ug aW9jdGwgaXRzZWxmIGludG8gYQpzZXByYXRlIGZpbGUuCgpUaGlzIHNlZW1zIHRvIGFsbW9zdCBw ZXJmZWN0bHkgc3BsaXQgdGhlIHJhdGhlciBiaWcgZHJtX2F0b21pYy5jIGZpbGUKaW50byAyIGVx dWFsIHNpemVzLgoKQWxzbyBhZGp1c3QgdGhlIGtlcm5lbGRvYyBhbmQgdHlwZSBhIHZlcnkgdGVy c2Ugb3ZlcnZpZXcgdGV4dC4KCnYyOiBSZWJhc2UuCgp2MzogRml4IHRpbnkgdHlwby4KCnY0Ogot IEZpeHVwIGFybWFkYSwgbmV3bHkgY29udmVydGVkIGF0b21pYyBkcml2ZXIgaG9vcmF5IQotIEZp eHVwIG1zbS9kcHUxLCBuZXdseSBhZGRlZCB0b28uCgpTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgVmV0 dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNvbT4KQ2M6IERhdmlkIEFpcmxpZSA8YWlybGllZEBs aW51eC5pZT4KQ2M6IEd1c3Rhdm8gUGFkb3ZhbiA8Z3VzdGF2b0BwYWRvdmFuLm9yZz4KQ2M6IE1h YXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+CkNjOiBT ZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9yZz4KQ2M6IEphbmkgTmlrdWxhIDxqYW5pLm5p a3VsYUBsaW51eC5pbnRlbC5jb20+CkNjOiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5l bkBsaW51eC5pbnRlbC5jb20+CkNjOiBSb2RyaWdvIFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5j b20+CkNjOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+CkNjOiBFcmljIEFuaG9sdCA8 ZXJpY0BhbmhvbHQubmV0PgpDYzogaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpDYzog bGludXgtYXJtLW1zbUB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGZyZWVkcmVub0BsaXN0cy5mcmVlZGVz a3RvcC5vcmcKQWNrZWQtYnk6IFJvZHJpZ28gVml2aSA8cm9kcmlnby52aXZpQGludGVsLmNvbT4K LS0tCiBEb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLnJzdCAgICAgICAgICAgICAgICB8ICAgMTEg Ky0KIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAgMyAr LQogZHJpdmVycy9ncHUvZHJtL2FybWFkYS9hcm1hZGFfb3ZlcmxheS5jICAgICAgfCAgICAxICsK IGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMgICAgICAgICAgICAgICAgIHwgMTM1OSArLS0t LS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMgICAgICAg ICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX3VhcGkuYyAgICAgICAgICAg IHwgMTM5MyArKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxw ZXIuYyAgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaW50ZXJu YWwuaCAgICAgICAgICB8ICAgIDUgKwogZHJpdmVycy9ncHUvZHJtL2RybV9mcmFtZWJ1ZmZlci5j ICAgICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2ZyYW1lYnVmZmVy X2hlbHBlci5jIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vZHJtX3BsYW5lX2hlbHBlci5jICAg ICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jICAg ICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5j ICAgIHwgICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9hdG9taWMuYyAgICAgICAgICAg ICB8ICAgIDIgKwogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jICAgICAgICAgICAgICAg fCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMgICAgICAgICAgICAgIHwg ICAgMSArCiBpbmNsdWRlL2RybS9kcm1fYXRvbWljLmggICAgICAgICAgICAgICAgICAgICB8ICAg MTYgLQogaW5jbHVkZS9kcm0vZHJtX2F0b21pY191YXBpLmggICAgICAgICAgICAgICAgfCAgIDU4 ICsKIDE4IGZpbGVzIGNoYW5nZWQsIDE0ODMgaW5zZXJ0aW9ucygrKSwgMTM3NSBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY191YXBpLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS9kcm1fYXRvbWljX3VhcGkuaAoKZGlmZiAt LWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUv ZHJtLWttcy5yc3QKaW5kZXggM2E5ZGQ2OGI5N2M5Li40YjE1MDFiNDgzNWIgMTAwNjQ0Ci0tLSBh L0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMucnN0CisrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2Ry bS1rbXMucnN0CkBAIC0yODcsNiArMjg3LDE1IEBAIEF0b21pYyBNb2RlIFNldHRpbmcgRnVuY3Rp b24gUmVmZXJlbmNlCiAuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMu YwogICAgOmV4cG9ydDoKIAorQXRvbWljIE1vZGUgU2V0dGluZyBJT0NUTCBhbmQgVUFQSSBGdW5j dGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4u IGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY191YXBpLmMKKyAgIDpkb2M6 IG92ZXJ2aWV3CisKKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY191 YXBpLmMKKyAgIDpleHBvcnQ6CisKIENSVEMgQWJzdHJhY3Rpb24KID09PT09PT09PT09PT09PT0K IApAQCAtNTYzLDcgKzU3Miw3IEBAIFRpbGUgR3JvdXAgUHJvcGVydHkKIEV4cGxpY2l0IEZlbmNp bmcgUHJvcGVydGllcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS4uIGtlcm5lbC1k b2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCisuLiBrZXJuZWwtZG9jOjogZHJpdmVy cy9ncHUvZHJtL2RybV9hdG9taWNfdWFwaS5jCiAgICA6ZG9jOiBleHBsaWNpdCBmZW5jaW5nIHBy b3BlcnRpZXMKIAogRXhpc3RpbmcgS01TIFByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCBhNjc3MWNl Zjg1ZTIuLmJjNmExNmEzYzM2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtMTgsNyArMTgsOCBAQCBkcm0teSAg ICAgICA6PQlkcm1fYXV0aC5vIGRybV9idWZzLm8gZHJtX2NhY2hlLm8gXAogCQlkcm1fZW5jb2Rl ci5vIGRybV9tb2RlX29iamVjdC5vIGRybV9wcm9wZXJ0eS5vIFwKIAkJZHJtX3BsYW5lLm8gZHJt X2NvbG9yX21nbXQubyBkcm1fcHJpbnQubyBcCiAJCWRybV9kdW1iX2J1ZmZlcnMubyBkcm1fbW9k ZV9jb25maWcubyBkcm1fdmJsYW5rLm8gXAotCQlkcm1fc3luY29iai5vIGRybV9sZWFzZS5vIGRy bV93cml0ZWJhY2subyBkcm1fY2xpZW50Lm8KKwkJZHJtX3N5bmNvYmoubyBkcm1fbGVhc2UubyBk cm1fd3JpdGViYWNrLm8gZHJtX2NsaWVudC5vIFwKKwkJZHJtX2F0b21pY191YXBpLm8KIAogZHJt LSQoQ09ORklHX0RSTV9MSUJfUkFORE9NKSArPSBsaWIvZHJtX3JhbmRvbS5vCiBkcm0tJChDT05G SUdfRFJNX1ZNKSArPSBkcm1fdm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybWFk YS9hcm1hZGFfb3ZlcmxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2FybWFkYS9hcm1hZGFfb3Zlcmxh eS5jCmluZGV4IGViN2RmYjY1ZWY0Ny4uOGQ3NzA2NDFmY2M0IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vYXJtYWRhL2FybWFkYV9vdmVybGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2Fy bWFkYS9hcm1hZGFfb3ZlcmxheS5jCkBAIC04LDYgKzgsNyBAQAogICovCiAjaW5jbHVkZSA8ZHJt L2RybVAuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljX3VhcGkuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KICNpbmNs dWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9hcm1hZGFfZHJtLmg+ CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jIGIvZHJpdmVycy9ncHUv ZHJtL2RybV9hdG9taWMuYwppbmRleCAyOWE0ZTY5NTkzNTguLjE5NjM0ZTAzYjc4ZSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX2F0b21pYy5jCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDxkcm0vZHJtUC5oPgog I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfdWFw aS5oPgogI2luY2x1ZGUgPGRybS9kcm1fbW9kZS5oPgogI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQu aD4KICNpbmNsdWRlIDxkcm0vZHJtX3dyaXRlYmFjay5oPgpAQCAtMzA5LDI4NSArMzEwLDYgQEAg ZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUs CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUpOwogCi1zdGF0aWMg dm9pZCBzZXRfb3V0X2ZlbmNlX2Zvcl9jcnRjKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwKLQkJCQkgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHMzMiBfX3VzZXIgKmZlbmNlX3B0cikK LXsKLQlzdGF0ZS0+Y3J0Y3NbZHJtX2NydGNfaW5kZXgoY3J0YyldLm91dF9mZW5jZV9wdHIgPSBm ZW5jZV9wdHI7Ci19Ci0KLXN0YXRpYyBzMzIgX191c2VyICpnZXRfb3V0X2ZlbmNlX2Zvcl9jcnRj KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKLQkJCQkJICBzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCi17Ci0JczMyIF9fdXNlciAqZmVuY2VfcHRyOwotCi0JZmVuY2VfcHRyID0gc3RhdGUt PmNydGNzW2RybV9jcnRjX2luZGV4KGNydGMpXS5vdXRfZmVuY2VfcHRyOwotCXN0YXRlLT5jcnRj c1tkcm1fY3J0Y19pbmRleChjcnRjKV0ub3V0X2ZlbmNlX3B0ciA9IE5VTEw7Ci0KLQlyZXR1cm4g ZmVuY2VfcHRyOwotfQotCi1zdGF0aWMgaW50IHNldF9vdXRfZmVuY2VfZm9yX2Nvbm5lY3Rvcihz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCi0JCQkJCXN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsCi0JCQkJCXMzMiBfX3VzZXIgKmZlbmNlX3B0cikKLXsKLQl1bnNpZ25lZCBp bnQgaW5kZXggPSBkcm1fY29ubmVjdG9yX2luZGV4KGNvbm5lY3Rvcik7Ci0KLQlpZiAoIWZlbmNl X3B0cikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocHV0X3VzZXIoLTEsIGZlbmNlX3B0cikpCi0JCXJl dHVybiAtRUZBVUxUOwotCi0Jc3RhdGUtPmNvbm5lY3RvcnNbaW5kZXhdLm91dF9mZW5jZV9wdHIg PSBmZW5jZV9wdHI7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHMzMiBfX3VzZXIgKmdldF9v dXRfZmVuY2VfZm9yX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCi0J CQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXVuc2lnbmVk IGludCBpbmRleCA9IGRybV9jb25uZWN0b3JfaW5kZXgoY29ubmVjdG9yKTsKLQlzMzIgX191c2Vy ICpmZW5jZV9wdHI7Ci0KLQlmZW5jZV9wdHIgPSBzdGF0ZS0+Y29ubmVjdG9yc1tpbmRleF0ub3V0 X2ZlbmNlX3B0cjsKLQlzdGF0ZS0+Y29ubmVjdG9yc1tpbmRleF0ub3V0X2ZlbmNlX3B0ciA9IE5V TEw7Ci0KLQlyZXR1cm4gZmVuY2VfcHRyOwotfQotCi0vKioKLSAqIGRybV9hdG9taWNfc2V0X21v ZGVfZm9yX2NydGMgLSBzZXQgbW9kZSBmb3IgQ1JUQwotICogQHN0YXRlOiB0aGUgQ1JUQyB3aG9z ZSBpbmNvbWluZyBzdGF0ZSB0byB1cGRhdGUKLSAqIEBtb2RlOiBrZXJuZWwtaW50ZXJuYWwgbW9k ZSB0byB1c2UgZm9yIHRoZSBDUlRDLCBvciBOVUxMIHRvIGRpc2FibGUKLSAqCi0gKiBTZXQgYSBt b2RlIChvcmlnaW5hdGluZyBmcm9tIHRoZSBrZXJuZWwpIG9uIHRoZSBkZXNpcmVkIENSVEMgc3Rh dGUgYW5kIHVwZGF0ZQotICogdGhlIGVuYWJsZSBwcm9wZXJ0eS4KLSAqCi0gKiBSRVRVUk5TOgot ICogWmVybyBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUuIENhbm5vdCByZXR1cm4g LUVERUFETEsuCi0gKi8KLWludCBkcm1fYXRvbWljX3NldF9tb2RlX2Zvcl9jcnRjKHN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqc3RhdGUsCi0JCQkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlKQotewotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5jcnRjOwotCXN0cnVj dCBkcm1fbW9kZV9tb2RlaW5mbyB1bW9kZTsKLQotCS8qIEVhcmx5IHJldHVybiBmb3Igbm8gY2hh bmdlLiAqLwotCWlmIChtb2RlICYmIG1lbWNtcCgmc3RhdGUtPm1vZGUsIG1vZGUsIHNpemVvZigq bW9kZSkpID09IDApCi0JCXJldHVybiAwOwotCi0JZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KHN0YXRl LT5tb2RlX2Jsb2IpOwotCXN0YXRlLT5tb2RlX2Jsb2IgPSBOVUxMOwotCi0JaWYgKG1vZGUpIHsK LQkJZHJtX21vZGVfY29udmVydF90b191bW9kZSgmdW1vZGUsIG1vZGUpOwotCQlzdGF0ZS0+bW9k ZV9ibG9iID0KLQkJCWRybV9wcm9wZXJ0eV9jcmVhdGVfYmxvYihzdGF0ZS0+Y3J0Yy0+ZGV2LAot CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodW1vZGUpLAotCQkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdW1vZGUpOwotCQlpZiAoSVNfRVJSKHN0YXRl LT5tb2RlX2Jsb2IpKQotCQkJcmV0dXJuIFBUUl9FUlIoc3RhdGUtPm1vZGVfYmxvYik7Ci0KLQkJ ZHJtX21vZGVfY29weSgmc3RhdGUtPm1vZGUsIG1vZGUpOwotCQlzdGF0ZS0+ZW5hYmxlID0gdHJ1 ZTsKLQkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtNT0RFOiVzXSBmb3IgW0NSVEM6JWQ6JXNdIHN0 YXRlICVwXG4iLAotCQkJCSBtb2RlLT5uYW1lLCBjcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lLCBz dGF0ZSk7Ci0JfSBlbHNlIHsKLQkJbWVtc2V0KCZzdGF0ZS0+bW9kZSwgMCwgc2l6ZW9mKHN0YXRl LT5tb2RlKSk7Ci0JCXN0YXRlLT5lbmFibGUgPSBmYWxzZTsKLQkJRFJNX0RFQlVHX0FUT01JQygi U2V0IFtOT01PREVdIGZvciBbQ1JUQzolZDolc10gc3RhdGUgJXBcbiIsCi0JCQkJIGNydGMtPmJh c2UuaWQsIGNydGMtPm5hbWUsIHN0YXRlKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9T WU1CT0woZHJtX2F0b21pY19zZXRfbW9kZV9mb3JfY3J0Yyk7Ci0KLS8qKgotICogZHJtX2F0b21p Y19zZXRfbW9kZV9wcm9wX2Zvcl9jcnRjIC0gc2V0IG1vZGUgZm9yIENSVEMKLSAqIEBzdGF0ZTog dGhlIENSVEMgd2hvc2UgaW5jb21pbmcgc3RhdGUgdG8gdXBkYXRlCi0gKiBAYmxvYjogcG9pbnRl ciB0byBibG9iIHByb3BlcnR5IHRvIHVzZSBmb3IgbW9kZQotICoKLSAqIFNldCBhIG1vZGUgKG9y aWdpbmF0aW5nIGZyb20gYSBibG9iIHByb3BlcnR5KSBvbiB0aGUgZGVzaXJlZCBDUlRDIHN0YXRl LgotICogVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYSByZWZlcmVuY2Ugb24gdGhlIGJsb2IgcHJv cGVydHkgZm9yIHRoZSBDUlRDIHN0YXRlLAotICogYW5kIHJlbGVhc2UgdGhlIHJlZmVyZW5jZSBo ZWxkIG9uIHRoZSBzdGF0ZSdzIGV4aXN0aW5nIG1vZGUgcHJvcGVydHksIGlmIGFueQotICogd2Fz IHNldC4KLSAqCi0gKiBSRVRVUk5TOgotICogWmVybyBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9u IGZhaWx1cmUuIENhbm5vdCByZXR1cm4gLUVERUFETEsuCi0gKi8KLWludCBkcm1fYXRvbWljX3Nl dF9tb2RlX3Byb3BfZm9yX2NydGMoc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9i ICpibG9iKQotewotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5jcnRjOwotCi0JaWYg KGJsb2IgPT0gc3RhdGUtPm1vZGVfYmxvYikKLQkJcmV0dXJuIDA7Ci0KLQlkcm1fcHJvcGVydHlf YmxvYl9wdXQoc3RhdGUtPm1vZGVfYmxvYik7Ci0Jc3RhdGUtPm1vZGVfYmxvYiA9IE5VTEw7Ci0K LQltZW1zZXQoJnN0YXRlLT5tb2RlLCAwLCBzaXplb2Yoc3RhdGUtPm1vZGUpKTsKLQotCWlmIChi bG9iKSB7Ci0JCWludCByZXQ7Ci0KLQkJaWYgKGJsb2ItPmxlbmd0aCAhPSBzaXplb2Yoc3RydWN0 IGRybV9tb2RlX21vZGVpbmZvKSkgewotCQkJRFJNX0RFQlVHX0FUT01JQygiW0NSVEM6JWQ6JXNd IGJhZCBtb2RlIGJsb2IgbGVuZ3RoOiAlenVcbiIsCi0JCQkJCSBjcnRjLT5iYXNlLmlkLCBjcnRj LT5uYW1lLAotCQkJCQkgYmxvYi0+bGVuZ3RoKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0K LQkJcmV0ID0gZHJtX21vZGVfY29udmVydF91bW9kZShjcnRjLT5kZXYsCi0JCQkJCSAgICAgJnN0 YXRlLT5tb2RlLCBibG9iLT5kYXRhKTsKLQkJaWYgKHJldCkgewotCQkJRFJNX0RFQlVHX0FUT01J QygiW0NSVEM6JWQ6JXNdIGludmFsaWQgbW9kZSAocmV0PSVkLCBzdGF0dXM9JXMpOlxuIiwKLQkJ CQkJIGNydGMtPmJhc2UuaWQsIGNydGMtPm5hbWUsCi0JCQkJCSByZXQsIGRybV9nZXRfbW9kZV9z dGF0dXNfbmFtZShzdGF0ZS0+bW9kZS5zdGF0dXMpKTsKLQkJCWRybV9tb2RlX2RlYnVnX3ByaW50 bW9kZWxpbmUoJnN0YXRlLT5tb2RlKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJc3Rh dGUtPm1vZGVfYmxvYiA9IGRybV9wcm9wZXJ0eV9ibG9iX2dldChibG9iKTsKLQkJc3RhdGUtPmVu YWJsZSA9IHRydWU7Ci0JCURSTV9ERUJVR19BVE9NSUMoIlNldCBbTU9ERTolc10gZm9yIFtDUlRD OiVkOiVzXSBzdGF0ZSAlcFxuIiwKLQkJCQkgc3RhdGUtPm1vZGUubmFtZSwgY3J0Yy0+YmFzZS5p ZCwgY3J0Yy0+bmFtZSwKLQkJCQkgc3RhdGUpOwotCX0gZWxzZSB7Ci0JCXN0YXRlLT5lbmFibGUg PSBmYWxzZTsKLQkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtOT01PREVdIGZvciBbQ1JUQzolZDol c10gc3RhdGUgJXBcbiIsCi0JCQkJIGNydGMtPmJhc2UuaWQsIGNydGMtPm5hbWUsIHN0YXRlKTsK LQl9Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19zZXRfbW9kZV9w cm9wX2Zvcl9jcnRjKTsKLQotc3RhdGljIGludAotZHJtX2F0b21pY19yZXBsYWNlX3Byb3BlcnR5 X2Jsb2JfZnJvbV9pZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCQkgc3RydWN0IGRybV9w cm9wZXJ0eV9ibG9iICoqYmxvYiwKLQkJCQkJIHVpbnQ2NF90IGJsb2JfaWQsCi0JCQkJCSBzc2l6 ZV90IGV4cGVjdGVkX3NpemUsCi0JCQkJCSBzc2l6ZV90IGV4cGVjdGVkX2VsZW1fc2l6ZSwKLQkJ CQkJIGJvb2wgKnJlcGxhY2VkKQotewotCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqbmV3X2Js b2IgPSBOVUxMOwotCi0JaWYgKGJsb2JfaWQgIT0gMCkgewotCQluZXdfYmxvYiA9IGRybV9wcm9w ZXJ0eV9sb29rdXBfYmxvYihkZXYsIGJsb2JfaWQpOwotCQlpZiAobmV3X2Jsb2IgPT0gTlVMTCkK LQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmIChleHBlY3RlZF9zaXplID4gMCAmJgotCQkgICAg bmV3X2Jsb2ItPmxlbmd0aCAhPSBleHBlY3RlZF9zaXplKSB7Ci0JCQlkcm1fcHJvcGVydHlfYmxv Yl9wdXQobmV3X2Jsb2IpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKGV4cGVjdGVk X2VsZW1fc2l6ZSA+IDAgJiYKLQkJICAgIG5ld19ibG9iLT5sZW5ndGggJSBleHBlY3RlZF9lbGVt X3NpemUgIT0gMCkgewotCQkJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KG5ld19ibG9iKTsKLQkJCXJl dHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JKnJlcGxhY2VkIHw9IGRybV9wcm9wZXJ0eV9yZXBs YWNlX2Jsb2IoYmxvYiwgbmV3X2Jsb2IpOwotCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChuZXdfYmxv Yik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkcm1fYXRvbWljX2NydGNfc2V0X3By b3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpz dGF0ZSwgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCi0JCXVpbnQ2NF90IHZhbCkKLXsK LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXN0cnVjdCBkcm1fbW9kZV9j b25maWcgKmNvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOwotCWJvb2wgcmVwbGFjZWQgPSBmYWxz ZTsKLQlpbnQgcmV0OwotCi0JaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9hY3RpdmUpCi0J CXN0YXRlLT5hY3RpdmUgPSB2YWw7Ci0JZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9w X21vZGVfaWQpIHsKLQkJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICptb2RlID0KLQkJCWRybV9w cm9wZXJ0eV9sb29rdXBfYmxvYihkZXYsIHZhbCk7Ci0JCXJldCA9IGRybV9hdG9taWNfc2V0X21v ZGVfcHJvcF9mb3JfY3J0YyhzdGF0ZSwgbW9kZSk7Ci0JCWRybV9wcm9wZXJ0eV9ibG9iX3B1dCht b2RlKTsKLQkJcmV0dXJuIHJldDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+ZGVn YW1tYV9sdXRfcHJvcGVydHkpIHsKLQkJcmV0ID0gZHJtX2F0b21pY19yZXBsYWNlX3Byb3BlcnR5 X2Jsb2JfZnJvbV9pZChkZXYsCi0JCQkJCSZzdGF0ZS0+ZGVnYW1tYV9sdXQsCi0JCQkJCXZhbCwK LQkJCQkJLTEsIHNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2x1dCksCi0JCQkJCSZyZXBsYWNlZCk7 Ci0JCXN0YXRlLT5jb2xvcl9tZ210X2NoYW5nZWQgfD0gcmVwbGFjZWQ7Ci0JCXJldHVybiByZXQ7 Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmN0bV9wcm9wZXJ0eSkgewotCQlyZXQg PSBkcm1fYXRvbWljX3JlcGxhY2VfcHJvcGVydHlfYmxvYl9mcm9tX2lkKGRldiwKLQkJCQkJJnN0 YXRlLT5jdG0sCi0JCQkJCXZhbCwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfY3RtKSwg LTEsCi0JCQkJCSZyZXBsYWNlZCk7Ci0JCXN0YXRlLT5jb2xvcl9tZ210X2NoYW5nZWQgfD0gcmVw bGFjZWQ7Ci0JCXJldHVybiByZXQ7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmdh bW1hX2x1dF9wcm9wZXJ0eSkgewotCQlyZXQgPSBkcm1fYXRvbWljX3JlcGxhY2VfcHJvcGVydHlf YmxvYl9mcm9tX2lkKGRldiwKLQkJCQkJJnN0YXRlLT5nYW1tYV9sdXQsCi0JCQkJCXZhbCwKLQkJ CQkJLTEsIHNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2x1dCksCi0JCQkJCSZyZXBsYWNlZCk7Ci0J CXN0YXRlLT5jb2xvcl9tZ210X2NoYW5nZWQgfD0gcmVwbGFjZWQ7Ci0JCXJldHVybiByZXQ7Ci0J fSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3Bfb3V0X2ZlbmNlX3B0cikgewotCQlz MzIgX191c2VyICpmZW5jZV9wdHIgPSB1NjRfdG9fdXNlcl9wdHIodmFsKTsKLQotCQlpZiAoIWZl bmNlX3B0cikKLQkJCXJldHVybiAwOwotCi0JCWlmIChwdXRfdXNlcigtMSwgZmVuY2VfcHRyKSkK LQkJCXJldHVybiAtRUZBVUxUOwotCi0JCXNldF9vdXRfZmVuY2VfZm9yX2NydGMoc3RhdGUtPnN0 YXRlLCBjcnRjLCBmZW5jZV9wdHIpOwotCX0gZWxzZSBpZiAoY3J0Yy0+ZnVuY3MtPmF0b21pY19z ZXRfcHJvcGVydHkpIHsKLQkJcmV0dXJuIGNydGMtPmZ1bmNzLT5hdG9taWNfc2V0X3Byb3BlcnR5 KGNydGMsIHN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKLQl9IGVsc2UgewotCQlEUk1fREVCVUdfQVRP TUlDKCJbQ1JUQzolZDolc10gdW5rbm93biBwcm9wZXJ0eSBbUFJPUDolZDolc11dXG4iLAotCQkJ CSBjcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lLAotCQkJCSBwcm9wZXJ0eS0+YmFzZS5pZCwgcHJv cGVydHktPm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIGludAotZHJtX2F0b21pY19jcnRjX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCi0JCWNvbnN0IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCi0JCXN0cnVjdCBk cm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRfdCAqdmFsKQotewotCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0Jc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0g JmRldi0+bW9kZV9jb25maWc7Ci0KLQlpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2FjdGl2 ZSkKLQkJKnZhbCA9IHN0YXRlLT5hY3RpdmU7Ci0JZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmln LT5wcm9wX21vZGVfaWQpCi0JCSp2YWwgPSAoc3RhdGUtPm1vZGVfYmxvYikgPyBzdGF0ZS0+bW9k ZV9ibG9iLT5iYXNlLmlkIDogMDsKLQllbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmRlZ2Ft bWFfbHV0X3Byb3BlcnR5KQotCQkqdmFsID0gKHN0YXRlLT5kZWdhbW1hX2x1dCkgPyBzdGF0ZS0+ ZGVnYW1tYV9sdXQtPmJhc2UuaWQgOiAwOwotCWVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+ Y3RtX3Byb3BlcnR5KQotCQkqdmFsID0gKHN0YXRlLT5jdG0pID8gc3RhdGUtPmN0bS0+YmFzZS5p ZCA6IDA7Ci0JZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5nYW1tYV9sdXRfcHJvcGVydHkp Ci0JCSp2YWwgPSAoc3RhdGUtPmdhbW1hX2x1dCkgPyBzdGF0ZS0+Z2FtbWFfbHV0LT5iYXNlLmlk IDogMDsKLQllbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3Bfb3V0X2ZlbmNlX3B0cikK LQkJKnZhbCA9IDA7Ci0JZWxzZSBpZiAoY3J0Yy0+ZnVuY3MtPmF0b21pY19nZXRfcHJvcGVydHkp Ci0JCXJldHVybiBjcnRjLT5mdW5jcy0+YXRvbWljX2dldF9wcm9wZXJ0eShjcnRjLCBzdGF0ZSwg cHJvcGVydHksIHZhbCk7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAwOwot fQotCiBzdGF0aWMgaW50IGRybV9hdG9taWNfY3J0Y19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCiAJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCiB7CkBAIC03NjEsMTQ0ICs0ODMs NiBAQCBkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsCiB9CiBFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlKTsKIAot LyoqCi0gKiBkcm1fYXRvbWljX3BsYW5lX3NldF9wcm9wZXJ0eSAtIHNldCBwcm9wZXJ0eSBvbiBw bGFuZQotICogQHBsYW5lOiB0aGUgZHJtIHBsYW5lIHRvIHNldCBhIHByb3BlcnR5IG9uCi0gKiBA c3RhdGU6IHRoZSBzdGF0ZSBvYmplY3QgdG8gdXBkYXRlIHdpdGggdGhlIG5ldyBwcm9wZXJ0eSB2 YWx1ZQotICogQHByb3BlcnR5OiB0aGUgcHJvcGVydHkgdG8gc2V0Ci0gKiBAdmFsOiB0aGUgbmV3 IHByb3BlcnR5IHZhbHVlCi0gKgotICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGdlbmVyaWMvY29y ZSBwcm9wZXJ0aWVzIGFuZCBjYWxscyBvdXQgdG8gZHJpdmVyJ3MKLSAqICZkcm1fcGxhbmVfZnVu Y3MuYXRvbWljX3NldF9wcm9wZXJ0eSBmb3IgZHJpdmVyIHByb3BlcnRpZXMuICBUbyBlbnN1cmUK LSAqIGNvbnNpc3RlbnQgYmVoYXZpb3IgeW91IG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHJhdGhl ciB0aGFuIHRoZSBkcml2ZXIgaG9vawotICogZGlyZWN0bHkuCi0gKgotICogUkVUVVJOUzoKLSAq IFplcm8gb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWlsdXJlCi0gKi8KLXN0YXRpYyBpbnQg ZHJtX2F0b21pY19wbGFuZV9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0J CXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9w ZXJ0eSwKLQkJdWludDY0X3QgdmFsKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwbGFu ZS0+ZGV2OwotCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZkZXYtPm1vZGVfY29u ZmlnOwotCi0JaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9mYl9pZCkgewotCQlzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IGRybV9mcmFtZWJ1ZmZlcl9sb29rdXAoZGV2LCBOVUxMLCB2 YWwpOwotCQlkcm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUoc3RhdGUsIGZiKTsKLQkJaWYgKGZi KQotCQkJZHJtX2ZyYW1lYnVmZmVyX3B1dChmYik7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBj b25maWctPnByb3BfaW5fZmVuY2VfZmQpIHsKLQkJaWYgKHN0YXRlLT5mZW5jZSkKLQkJCXJldHVy biAtRUlOVkFMOwotCi0JCWlmIChVNjQySTY0KHZhbCkgPT0gLTEpCi0JCQlyZXR1cm4gMDsKLQot CQlzdGF0ZS0+ZmVuY2UgPSBzeW5jX2ZpbGVfZ2V0X2ZlbmNlKHZhbCk7Ci0JCWlmICghc3RhdGUt PmZlbmNlKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNv bmZpZy0+cHJvcF9jcnRjX2lkKSB7Ci0JCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGRybV9jcnRj X2ZpbmQoZGV2LCBOVUxMLCB2YWwpOwotCQlyZXR1cm4gZHJtX2F0b21pY19zZXRfY3J0Y19mb3Jf cGxhbmUoc3RhdGUsIGNydGMpOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9w X2NydGNfeCkgewotCQlzdGF0ZS0+Y3J0Y194ID0gVTY0Mkk2NCh2YWwpOwotCX0gZWxzZSBpZiAo cHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNfeSkgewotCQlzdGF0ZS0+Y3J0Y195ID0gVTY0 Mkk2NCh2YWwpOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNfdykg ewotCQlzdGF0ZS0+Y3J0Y193ID0gdmFsOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmln LT5wcm9wX2NydGNfaCkgewotCQlzdGF0ZS0+Y3J0Y19oID0gdmFsOwotCX0gZWxzZSBpZiAocHJv cGVydHkgPT0gY29uZmlnLT5wcm9wX3NyY194KSB7Ci0JCXN0YXRlLT5zcmNfeCA9IHZhbDsKLQl9 IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9zcmNfeSkgewotCQlzdGF0ZS0+c3Jj X3kgPSB2YWw7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3Bfc3JjX3cpIHsK LQkJc3RhdGUtPnNyY193ID0gdmFsOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5w cm9wX3NyY19oKSB7Ci0JCXN0YXRlLT5zcmNfaCA9IHZhbDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5 ID09IHBsYW5lLT5hbHBoYV9wcm9wZXJ0eSkgewotCQlzdGF0ZS0+YWxwaGEgPSB2YWw7Ci0JfSBl bHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+YmxlbmRfbW9kZV9wcm9wZXJ0eSkgewotCQlzdGF0 ZS0+cGl4ZWxfYmxlbmRfbW9kZSA9IHZhbDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5l LT5yb3RhdGlvbl9wcm9wZXJ0eSkgewotCQlpZiAoIWlzX3Bvd2VyX29mXzIodmFsICYgRFJNX01P REVfUk9UQVRFX01BU0spKSB7Ci0JCQlEUk1fREVCVUdfQVRPTUlDKCJbUExBTkU6JWQ6JXNdIGJh ZCByb3RhdGlvbiBiaXRtYXNrOiAweCVsbHhcbiIsCi0JCQkJCSBwbGFuZS0+YmFzZS5pZCwgcGxh bmUtPm5hbWUsIHZhbCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlzdGF0ZS0+cm90YXRp b24gPSB2YWw7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+enBvc19wcm9wZXJ0eSkg ewotCQlzdGF0ZS0+enBvcyA9IHZhbDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT5j b2xvcl9lbmNvZGluZ19wcm9wZXJ0eSkgewotCQlzdGF0ZS0+Y29sb3JfZW5jb2RpbmcgPSB2YWw7 Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+Y29sb3JfcmFuZ2VfcHJvcGVydHkpIHsK LQkJc3RhdGUtPmNvbG9yX3JhbmdlID0gdmFsOwotCX0gZWxzZSBpZiAocGxhbmUtPmZ1bmNzLT5h dG9taWNfc2V0X3Byb3BlcnR5KSB7Ci0JCXJldHVybiBwbGFuZS0+ZnVuY3MtPmF0b21pY19zZXRf cHJvcGVydHkocGxhbmUsIHN0YXRlLAotCQkJCXByb3BlcnR5LCB2YWwpOwotCX0gZWxzZSB7Ci0J CURSTV9ERUJVR19BVE9NSUMoIltQTEFORTolZDolc10gdW5rbm93biBwcm9wZXJ0eSBbUFJPUDol ZDolc11dXG4iLAotCQkJCSBwbGFuZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUsCi0JCQkJIHByb3Bl cnR5LT5iYXNlLmlkLCBwcm9wZXJ0eS0+bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1kcm1fYXRvbWljX3BsYW5lX2dldF9wcm9wZXJ0 eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKLQkJY29uc3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqc3RhdGUsCi0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRfdCAqdmFs KQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwbGFuZS0+ZGV2OwotCXN0cnVjdCBkcm1f bW9kZV9jb25maWcgKmNvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOwotCi0JaWYgKHByb3BlcnR5 ID09IGNvbmZpZy0+cHJvcF9mYl9pZCkgewotCQkqdmFsID0gKHN0YXRlLT5mYikgPyBzdGF0ZS0+ ZmItPmJhc2UuaWQgOiAwOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2lu X2ZlbmNlX2ZkKSB7Ci0JCSp2YWwgPSAtMTsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZp Zy0+cHJvcF9jcnRjX2lkKSB7Ci0JCSp2YWwgPSAoc3RhdGUtPmNydGMpID8gc3RhdGUtPmNydGMt PmJhc2UuaWQgOiAwOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNf eCkgewotCQkqdmFsID0gSTY0MlU2NChzdGF0ZS0+Y3J0Y194KTsKLQl9IGVsc2UgaWYgKHByb3Bl cnR5ID09IGNvbmZpZy0+cHJvcF9jcnRjX3kpIHsKLQkJKnZhbCA9IEk2NDJVNjQoc3RhdGUtPmNy dGNfeSk7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfY3J0Y193KSB7Ci0J CSp2YWwgPSBzdGF0ZS0+Y3J0Y193OwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5w cm9wX2NydGNfaCkgewotCQkqdmFsID0gc3RhdGUtPmNydGNfaDsKLQl9IGVsc2UgaWYgKHByb3Bl cnR5ID09IGNvbmZpZy0+cHJvcF9zcmNfeCkgewotCQkqdmFsID0gc3RhdGUtPnNyY194OwotCX0g ZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX3NyY195KSB7Ci0JCSp2YWwgPSBzdGF0 ZS0+c3JjX3k7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3Bfc3JjX3cpIHsK LQkJKnZhbCA9IHN0YXRlLT5zcmNfdzsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+ cHJvcF9zcmNfaCkgewotCQkqdmFsID0gc3RhdGUtPnNyY19oOwotCX0gZWxzZSBpZiAocHJvcGVy dHkgPT0gcGxhbmUtPmFscGhhX3Byb3BlcnR5KSB7Ci0JCSp2YWwgPSBzdGF0ZS0+YWxwaGE7Ci0J fSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+YmxlbmRfbW9kZV9wcm9wZXJ0eSkgewotCQkq dmFsID0gc3RhdGUtPnBpeGVsX2JsZW5kX21vZGU7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBw bGFuZS0+cm90YXRpb25fcHJvcGVydHkpIHsKLQkJKnZhbCA9IHN0YXRlLT5yb3RhdGlvbjsKLQl9 IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT56cG9zX3Byb3BlcnR5KSB7Ci0JCSp2YWwgPSBz dGF0ZS0+enBvczsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT5jb2xvcl9lbmNvZGlu Z19wcm9wZXJ0eSkgewotCQkqdmFsID0gc3RhdGUtPmNvbG9yX2VuY29kaW5nOwotCX0gZWxzZSBp ZiAocHJvcGVydHkgPT0gcGxhbmUtPmNvbG9yX3JhbmdlX3Byb3BlcnR5KSB7Ci0JCSp2YWwgPSBz dGF0ZS0+Y29sb3JfcmFuZ2U7Ci0JfSBlbHNlIGlmIChwbGFuZS0+ZnVuY3MtPmF0b21pY19nZXRf cHJvcGVydHkpIHsKLQkJcmV0dXJuIHBsYW5lLT5mdW5jcy0+YXRvbWljX2dldF9wcm9wZXJ0eShw bGFuZSwgc3RhdGUsIHByb3BlcnR5LCB2YWwpOwotCX0gZWxzZSB7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgYm9vbAogcGxhbmVfc3dpdGNoaW5nX2Ny dGMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAogCQkgICAgIHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLApAQCAtMTIzOCwxMjkgKzgyMiw2IEBAIGRybV9hdG9taWNfZ2V0X2Nvbm5lY3Rv cl9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCiB9CiBFWFBPUlRfU1lNQk9M KGRybV9hdG9taWNfZ2V0X2Nvbm5lY3Rvcl9zdGF0ZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgZHJtX3dy aXRlYmFja19qb2IgKgotZHJtX2F0b21pY19nZXRfd3JpdGViYWNrX2pvYihzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKLXsKLQlXQVJOX09OKGNvbm5fc3RhdGUtPmNvbm5l Y3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX1dSSVRFQkFDSyk7Ci0K LQlpZiAoIWNvbm5fc3RhdGUtPndyaXRlYmFja19qb2IpCi0JCWNvbm5fc3RhdGUtPndyaXRlYmFj a19qb2IgPQotCQkJa3phbGxvYyhzaXplb2YoKmNvbm5fc3RhdGUtPndyaXRlYmFja19qb2IpLCBH RlBfS0VSTkVMKTsKLQotCXJldHVybiBjb25uX3N0YXRlLT53cml0ZWJhY2tfam9iOwotfQotCi1z dGF0aWMgaW50IGRybV9hdG9taWNfc2V0X3dyaXRlYmFja19mYl9mb3JfY29ubmVjdG9yKAotCQlz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSwKLQkJc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIpCi17Ci0Jc3RydWN0IGRybV93cml0ZWJhY2tfam9iICpqb2IgPQotCQlkcm1f YXRvbWljX2dldF93cml0ZWJhY2tfam9iKGNvbm5fc3RhdGUpOwotCWlmICgham9iKQotCQlyZXR1 cm4gLUVOT01FTTsKLQotCWRybV9mcmFtZWJ1ZmZlcl9hc3NpZ24oJmpvYi0+ZmIsIGZiKTsKLQot CWlmIChmYikKLQkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtGQjolZF0gZm9yIGNvbm5lY3RvciBz dGF0ZSAlcFxuIiwKLQkJCQkgZmItPmJhc2UuaWQsIGNvbm5fc3RhdGUpOwotCWVsc2UKLQkJRFJN X0RFQlVHX0FUT01JQygiU2V0IFtOT0ZCXSBmb3IgY29ubmVjdG9yIHN0YXRlICVwXG4iLAotCQkJ CSBjb25uX3N0YXRlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRybV9hdG9taWNf Y29ubmVjdG9yX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAot CQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBkcm1fcHJvcGVydHkg KnByb3BlcnR5LAotCQl1aW50NjRfdCB2YWwpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGNvbm5lY3Rvci0+ZGV2OwotCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZkZXYt Pm1vZGVfY29uZmlnOwotCi0JaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9jcnRjX2lkKSB7 Ci0JCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGRybV9jcnRjX2ZpbmQoZGV2LCBOVUxMLCB2YWwp OwotCQlyZXR1cm4gZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfY29ubmVjdG9yKHN0YXRlLCBjcnRj KTsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+ZHBtc19wcm9wZXJ0eSkgewotCQkv KiBzZXR0aW5nIERQTVMgcHJvcGVydHkgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZywgd2hpY2gK LQkJICogaXMgZG9uZSBpbiBsZWdhY3kgc2V0cHJvcCBwYXRoIGZvciB1cy4gIERpc2FsbG93IChm b3IKLQkJICogbm93PykgYXRvbWljIHdyaXRlcyB0byBEUE1TIHByb3BlcnR5OgotCQkgKi8KLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X3NlbGVj dF9zdWJjb25uZWN0b3JfcHJvcGVydHkpIHsKLQkJc3RhdGUtPnR2LnN1YmNvbm5lY3RvciA9IHZh bDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfbGVmdF9tYXJnaW5fcHJvcGVy dHkpIHsKLQkJc3RhdGUtPnR2Lm1hcmdpbnMubGVmdCA9IHZhbDsKLQl9IGVsc2UgaWYgKHByb3Bl cnR5ID09IGNvbmZpZy0+dHZfcmlnaHRfbWFyZ2luX3Byb3BlcnR5KSB7Ci0JCXN0YXRlLT50di5t YXJnaW5zLnJpZ2h0ID0gdmFsOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl90 b3BfbWFyZ2luX3Byb3BlcnR5KSB7Ci0JCXN0YXRlLT50di5tYXJnaW5zLnRvcCA9IHZhbDsKLQl9 IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfYm90dG9tX21hcmdpbl9wcm9wZXJ0eSkg ewotCQlzdGF0ZS0+dHYubWFyZ2lucy5ib3R0b20gPSB2YWw7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0 eSA9PSBjb25maWctPnR2X21vZGVfcHJvcGVydHkpIHsKLQkJc3RhdGUtPnR2Lm1vZGUgPSB2YWw7 Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2JyaWdodG5lc3NfcHJvcGVydHkp IHsKLQkJc3RhdGUtPnR2LmJyaWdodG5lc3MgPSB2YWw7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9 PSBjb25maWctPnR2X2NvbnRyYXN0X3Byb3BlcnR5KSB7Ci0JCXN0YXRlLT50di5jb250cmFzdCA9 IHZhbDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfZmxpY2tlcl9yZWR1Y3Rp b25fcHJvcGVydHkpIHsKLQkJc3RhdGUtPnR2LmZsaWNrZXJfcmVkdWN0aW9uID0gdmFsOwotCX0g ZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9vdmVyc2Nhbl9wcm9wZXJ0eSkgewotCQlz dGF0ZS0+dHYub3ZlcnNjYW4gPSB2YWw7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWct PnR2X3NhdHVyYXRpb25fcHJvcGVydHkpIHsKLQkJc3RhdGUtPnR2LnNhdHVyYXRpb24gPSB2YWw7 Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2h1ZV9wcm9wZXJ0eSkgewotCQlz dGF0ZS0+dHYuaHVlID0gdmFsOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5saW5r X3N0YXR1c19wcm9wZXJ0eSkgewotCQkvKiBOZXZlciBkb3duZ3JhZGUgZnJvbSBHT09EIHRvIEJB RCBvbiB1c2Vyc3BhY2UncyByZXF1ZXN0IGhlcmUsCi0JCSAqIG9ubHkgaHcgaXNzdWVzIGNhbiBk byB0aGF0LgotCQkgKgotCQkgKiBGb3IgYW4gYXRvbWljIHByb3BlcnR5IHRoZSB1c2Vyc3BhY2Ug ZG9lc24ndCBuZWVkIHRvIGJlIGFibGUKLQkJICogdG8gdW5kZXJzdGFuZCBhbGwgdGhlIHByb3Bl cnRpZXMsIGJ1dCBuZWVkcyB0byBiZSBhYmxlIHRvCi0JCSAqIHJlc3RvcmUgdGhlIHN0YXRlIGl0 IHdhbnRzIG9uIFZUIHN3aXRjaC4gU28gaWYgdGhlIHVzZXJzcGFjZQotCQkgKiB0cmllcyB0byBj aGFuZ2UgdGhlIGxpbmtfc3RhdHVzIGZyb20gR09PRCB0byBCQUQsIGRyaXZlcgotCQkgKiBzaWxl bnRseSByZWplY3RzIGl0IGFuZCByZXR1cm5zIGEgMC4gVGhpcyBwcmV2ZW50cyB1c2Vyc3BhY2UK LQkJICogZnJvbSBhY2NpZGVudGx5IGJyZWFraW5nICB0aGUgZGlzcGxheSB3aGVuIGl0IHJlc3Rv cmVzIHRoZQotCQkgKiBzdGF0ZS4KLQkJICovCi0JCWlmIChzdGF0ZS0+bGlua19zdGF0dXMgIT0g RFJNX0xJTktfU1RBVFVTX0dPT0QpCi0JCQlzdGF0ZS0+bGlua19zdGF0dXMgPSB2YWw7Ci0JfSBl bHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmFzcGVjdF9yYXRpb19wcm9wZXJ0eSkgewotCQlz dGF0ZS0+cGljdHVyZV9hc3BlY3RfcmF0aW8gPSB2YWw7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9 PSBjb25maWctPmNvbnRlbnRfdHlwZV9wcm9wZXJ0eSkgewotCQlzdGF0ZS0+Y29udGVudF90eXBl ID0gdmFsOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29ubmVjdG9yLT5zY2FsaW5nX21vZGVf cHJvcGVydHkpIHsKLQkJc3RhdGUtPnNjYWxpbmdfbW9kZSA9IHZhbDsKLQl9IGVsc2UgaWYgKHBy b3BlcnR5ID09IGNvbm5lY3Rvci0+Y29udGVudF9wcm90ZWN0aW9uX3Byb3BlcnR5KSB7Ci0JCWlm ICh2YWwgPT0gRFJNX01PREVfQ09OVEVOVF9QUk9URUNUSU9OX0VOQUJMRUQpIHsKLQkJCURSTV9E RUJVR19LTVMoIm9ubHkgZHJpdmVycyBjYW4gc2V0IENQIEVuYWJsZWRcbiIpOwotCQkJcmV0dXJu IC1FSU5WQUw7Ci0JCX0KLQkJc3RhdGUtPmNvbnRlbnRfcHJvdGVjdGlvbiA9IHZhbDsKLQl9IGVs c2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+d3JpdGViYWNrX2ZiX2lkX3Byb3BlcnR5KSB7Ci0J CXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gZHJtX2ZyYW1lYnVmZmVyX2xvb2t1cChkZXYs IE5VTEwsIHZhbCk7Ci0JCWludCByZXQgPSBkcm1fYXRvbWljX3NldF93cml0ZWJhY2tfZmJfZm9y X2Nvbm5lY3RvcihzdGF0ZSwgZmIpOwotCQlpZiAoZmIpCi0JCQlkcm1fZnJhbWVidWZmZXJfcHV0 KGZiKTsKLQkJcmV0dXJuIHJldDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+d3Jp dGViYWNrX291dF9mZW5jZV9wdHJfcHJvcGVydHkpIHsKLQkJczMyIF9fdXNlciAqZmVuY2VfcHRy ID0gdTY0X3RvX3VzZXJfcHRyKHZhbCk7Ci0KLQkJcmV0dXJuIHNldF9vdXRfZmVuY2VfZm9yX2Nv bm5lY3RvcihzdGF0ZS0+c3RhdGUsIGNvbm5lY3RvciwKLQkJCQkJCSAgIGZlbmNlX3B0cik7Ci0J fSBlbHNlIGlmIChjb25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfc2V0X3Byb3BlcnR5KSB7Ci0JCXJl dHVybiBjb25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfc2V0X3Byb3BlcnR5KGNvbm5lY3RvciwKLQkJ CQlzdGF0ZSwgcHJvcGVydHksIHZhbCk7Ci0JfSBlbHNlIHsKLQkJRFJNX0RFQlVHX0FUT01JQygi W0NPTk5FQ1RPUjolZDolc10gdW5rbm93biBwcm9wZXJ0eSBbUFJPUDolZDolc11dXG4iLAotCQkJ CSBjb25uZWN0b3ItPmJhc2UuaWQsIGNvbm5lY3Rvci0+bmFtZSwKLQkJCQkgcHJvcGVydHktPmJh c2UuaWQsIHByb3BlcnR5LT5uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJu IDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGRybV9hdG9taWNfY29ubmVjdG9yX3ByaW50X3N0YXRlKHN0 cnVjdCBkcm1fcHJpbnRlciAqcCwKIAkJY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUg KnN0YXRlKQogewpAQCAtMTM3NywyODEgKzgzOCw2IEBAIHN0YXRpYyB2b2lkIGRybV9hdG9taWNf Y29ubmVjdG9yX3ByaW50X3N0YXRlKHN0cnVjdCBkcm1fcHJpbnRlciAqcCwKIAkJY29ubmVjdG9y LT5mdW5jcy0+YXRvbWljX3ByaW50X3N0YXRlKHAsIHN0YXRlKTsKIH0KIAotc3RhdGljIGludAot ZHJtX2F0b21pY19jb25uZWN0b3JfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsCi0JCWNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSwKLQkJ c3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksIHVpbnQ2NF90ICp2YWwpCi17Ci0Jc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OwotCXN0cnVjdCBkcm1fbW9kZV9jb25m aWcgKmNvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOwotCi0JaWYgKHByb3BlcnR5ID09IGNvbmZp Zy0+cHJvcF9jcnRjX2lkKSB7Ci0JCSp2YWwgPSAoc3RhdGUtPmNydGMpID8gc3RhdGUtPmNydGMt PmJhc2UuaWQgOiAwOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5kcG1zX3Byb3Bl cnR5KSB7Ci0JCSp2YWwgPSBjb25uZWN0b3ItPmRwbXM7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9 PSBjb25maWctPnR2X3NlbGVjdF9zdWJjb25uZWN0b3JfcHJvcGVydHkpIHsKLQkJKnZhbCA9IHN0 YXRlLT50di5zdWJjb25uZWN0b3I7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2 X2xlZnRfbWFyZ2luX3Byb3BlcnR5KSB7Ci0JCSp2YWwgPSBzdGF0ZS0+dHYubWFyZ2lucy5sZWZ0 OwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9yaWdodF9tYXJnaW5fcHJvcGVy dHkpIHsKLQkJKnZhbCA9IHN0YXRlLT50di5tYXJnaW5zLnJpZ2h0OwotCX0gZWxzZSBpZiAocHJv cGVydHkgPT0gY29uZmlnLT50dl90b3BfbWFyZ2luX3Byb3BlcnR5KSB7Ci0JCSp2YWwgPSBzdGF0 ZS0+dHYubWFyZ2lucy50b3A7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2Jv dHRvbV9tYXJnaW5fcHJvcGVydHkpIHsKLQkJKnZhbCA9IHN0YXRlLT50di5tYXJnaW5zLmJvdHRv bTsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfbW9kZV9wcm9wZXJ0eSkgewot CQkqdmFsID0gc3RhdGUtPnR2Lm1vZGU7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWct PnR2X2JyaWdodG5lc3NfcHJvcGVydHkpIHsKLQkJKnZhbCA9IHN0YXRlLT50di5icmlnaHRuZXNz OwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9jb250cmFzdF9wcm9wZXJ0eSkg ewotCQkqdmFsID0gc3RhdGUtPnR2LmNvbnRyYXN0OwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0g Y29uZmlnLT50dl9mbGlja2VyX3JlZHVjdGlvbl9wcm9wZXJ0eSkgewotCQkqdmFsID0gc3RhdGUt PnR2LmZsaWNrZXJfcmVkdWN0aW9uOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50 dl9vdmVyc2Nhbl9wcm9wZXJ0eSkgewotCQkqdmFsID0gc3RhdGUtPnR2Lm92ZXJzY2FuOwotCX0g ZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9zYXR1cmF0aW9uX3Byb3BlcnR5KSB7Ci0J CSp2YWwgPSBzdGF0ZS0+dHYuc2F0dXJhdGlvbjsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNv bmZpZy0+dHZfaHVlX3Byb3BlcnR5KSB7Ci0JCSp2YWwgPSBzdGF0ZS0+dHYuaHVlOwotCX0gZWxz ZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5saW5rX3N0YXR1c19wcm9wZXJ0eSkgewotCQkqdmFs ID0gc3RhdGUtPmxpbmtfc3RhdHVzOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5h c3BlY3RfcmF0aW9fcHJvcGVydHkpIHsKLQkJKnZhbCA9IHN0YXRlLT5waWN0dXJlX2FzcGVjdF9y YXRpbzsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+Y29udGVudF90eXBlX3Byb3Bl cnR5KSB7Ci0JCSp2YWwgPSBzdGF0ZS0+Y29udGVudF90eXBlOwotCX0gZWxzZSBpZiAocHJvcGVy dHkgPT0gY29ubmVjdG9yLT5zY2FsaW5nX21vZGVfcHJvcGVydHkpIHsKLQkJKnZhbCA9IHN0YXRl LT5zY2FsaW5nX21vZGU7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25uZWN0b3ItPmNvbnRl bnRfcHJvdGVjdGlvbl9wcm9wZXJ0eSkgewotCQkqdmFsID0gc3RhdGUtPmNvbnRlbnRfcHJvdGVj dGlvbjsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+d3JpdGViYWNrX2ZiX2lkX3By b3BlcnR5KSB7Ci0JCS8qIFdyaXRlYmFjayBmcmFtZWJ1ZmZlciBpcyBvbmUtc2hvdCwgd3JpdGUg YW5kIGZvcmdldCAqLwotCQkqdmFsID0gMDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZp Zy0+d3JpdGViYWNrX291dF9mZW5jZV9wdHJfcHJvcGVydHkpIHsKLQkJKnZhbCA9IDA7Ci0JfSBl bHNlIGlmIChjb25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfZ2V0X3Byb3BlcnR5KSB7Ci0JCXJldHVy biBjb25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfZ2V0X3Byb3BlcnR5KGNvbm5lY3RvciwKLQkJCQlz dGF0ZSwgcHJvcGVydHksIHZhbCk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBkcm1fYXRvbWljX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJt X21vZGVfb2JqZWN0ICpvYmosCi0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50 NjRfdCAqdmFsKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwcm9wZXJ0eS0+ZGV2Owot CWludCByZXQ7Ci0KLQlzd2l0Y2ggKG9iai0+dHlwZSkgewotCWNhc2UgRFJNX01PREVfT0JKRUNU X0NPTk5FQ1RPUjogewotCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gb2JqX3Rv X2Nvbm5lY3RvcihvYmopOwotCQlXQVJOX09OKCFkcm1fbW9kZXNldF9pc19sb2NrZWQoJmRldi0+ bW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCkpOwotCQlyZXQgPSBkcm1fYXRvbWljX2Nvbm5l Y3Rvcl9nZXRfcHJvcGVydHkoY29ubmVjdG9yLAotCQkJCWNvbm5lY3Rvci0+c3RhdGUsIHByb3Bl cnR5LCB2YWwpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBEUk1fTU9ERV9PQkpFQ1RfQ1JUQzogewot CQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBvYmpfdG9fY3J0YyhvYmopOwotCQlXQVJOX09OKCFk cm1fbW9kZXNldF9pc19sb2NrZWQoJmNydGMtPm11dGV4KSk7Ci0JCXJldCA9IGRybV9hdG9taWNf Y3J0Y19nZXRfcHJvcGVydHkoY3J0YywKLQkJCQljcnRjLT5zdGF0ZSwgcHJvcGVydHksIHZhbCk7 Ci0JCWJyZWFrOwotCX0KLQljYXNlIERSTV9NT0RFX09CSkVDVF9QTEFORTogewotCQlzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSA9IG9ial90b19wbGFuZShvYmopOwotCQlXQVJOX09OKCFkcm1fbW9k ZXNldF9pc19sb2NrZWQoJnBsYW5lLT5tdXRleCkpOwotCQlyZXQgPSBkcm1fYXRvbWljX3BsYW5l X2dldF9wcm9wZXJ0eShwbGFuZSwKLQkJCQlwbGFuZS0+c3RhdGUsIHByb3BlcnR5LCB2YWwpOwot CQlicmVhazsKLQl9Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQot Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9wbGFu ZSAtIHNldCBjcnRjIGZvciBwbGFuZQotICogQHBsYW5lX3N0YXRlOiB0aGUgcGxhbmUgd2hvc2Ug aW5jb21pbmcgc3RhdGUgdG8gdXBkYXRlCi0gKiBAY3J0YzogY3J0YyB0byB1c2UgZm9yIHRoZSBw bGFuZQotICoKLSAqIENoYW5naW5nIHRoZSBhc3NpZ25lZCBjcnRjIGZvciBhIHBsYW5lIHJlcXVp cmVzIHVzIHRvIGdyYWIgdGhlIGxvY2sgYW5kIHN0YXRlCi0gKiBmb3IgdGhlIG5ldyBjcnRjLCBh cyBuZWVkZWQuIFRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiBhbGwgdGhlc2UgZGV0YWlscwot ICogYmVzaWRlcyB1cGRhdGluZyB0aGUgcG9pbnRlciBpbiB0aGUgc3RhdGUgb2JqZWN0IGl0c2Vs Zi4KLSAqCi0gKiBSZXR1cm5zOgotICogMCBvbiBzdWNjZXNzIG9yIGNhbiBmYWlsIHdpdGggLUVE RUFETEsgb3IgLUVOT01FTS4gV2hlbiB0aGUgZXJyb3IgaXMgRURFQURMSwotICogdGhlbiB0aGUg dy93IG11dGV4IGNvZGUgaGFzIGRldGVjdGVkIGEgZGVhZGxvY2sgYW5kIHRoZSBlbnRpcmUgYXRv bWljCi0gKiBzZXF1ZW5jZSBtdXN0IGJlIHJlc3RhcnRlZC4gQWxsIG90aGVyIGVycm9ycyBhcmUg ZmF0YWwuCi0gKi8KLWludAotZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfcGxhbmUoc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCi0JCQkgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCi17Ci0Jc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBwbGFuZV9zdGF0ZS0+cGxhbmU7Ci0J c3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwotCS8qIE5vdGhpbmcgdG8gZG8gZm9y IHNhbWUgY3J0YyovCi0JaWYgKHBsYW5lX3N0YXRlLT5jcnRjID09IGNydGMpCi0JCXJldHVybiAw OwotCWlmIChwbGFuZV9zdGF0ZS0+Y3J0YykgewotCQljcnRjX3N0YXRlID0gZHJtX2F0b21pY19n ZXRfY3J0Y19zdGF0ZShwbGFuZV9zdGF0ZS0+c3RhdGUsCi0JCQkJCQkgICAgICAgcGxhbmVfc3Rh dGUtPmNydGMpOwotCQlpZiAoV0FSTl9PTihJU19FUlIoY3J0Y19zdGF0ZSkpKQotCQkJcmV0dXJu IFBUUl9FUlIoY3J0Y19zdGF0ZSk7Ci0KLQkJY3J0Y19zdGF0ZS0+cGxhbmVfbWFzayAmPSB+ZHJt X3BsYW5lX21hc2socGxhbmUpOwotCX0KLQotCXBsYW5lX3N0YXRlLT5jcnRjID0gY3J0YzsKLQot CWlmIChjcnRjKSB7Ci0JCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKHBs YW5lX3N0YXRlLT5zdGF0ZSwKLQkJCQkJCSAgICAgICBjcnRjKTsKLQkJaWYgKElTX0VSUihjcnRj X3N0YXRlKSkKLQkJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOwotCQljcnRjX3N0YXRlLT5w bGFuZV9tYXNrIHw9IGRybV9wbGFuZV9tYXNrKHBsYW5lKTsKLQl9Ci0KLQlpZiAoY3J0YykKLQkJ RFJNX0RFQlVHX0FUT01JQygiTGluayBbUExBTkU6JWQ6JXNdIHN0YXRlICVwIHRvIFtDUlRDOiVk OiVzXVxuIiwKLQkJCQkgcGxhbmUtPmJhc2UuaWQsIHBsYW5lLT5uYW1lLCBwbGFuZV9zdGF0ZSwK LQkJCQkgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+bmFtZSk7Ci0JZWxzZQotCQlEUk1fREVCVUdfQVRP TUlDKCJMaW5rIFtQTEFORTolZDolc10gc3RhdGUgJXAgdG8gW05PQ1JUQ11cbiIsCi0JCQkJIHBs YW5lLT5iYXNlLmlkLCBwbGFuZS0+bmFtZSwgcGxhbmVfc3RhdGUpOwotCi0JcmV0dXJuIDA7Ci19 Ci1FWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc2V0X2NydGNfZm9yX3BsYW5lKTsKLQotLyoqCi0g KiBkcm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUgLSBzZXQgZnJhbWVidWZmZXIgZm9yIHBsYW5l Ci0gKiBAcGxhbmVfc3RhdGU6IGF0b21pYyBzdGF0ZSBvYmplY3QgZm9yIHRoZSBwbGFuZQotICog QGZiOiBmYiB0byB1c2UgZm9yIHRoZSBwbGFuZQotICoKLSAqIENoYW5naW5nIHRoZSBhc3NpZ25l ZCBmcmFtZWJ1ZmZlciBmb3IgYSBwbGFuZSByZXF1aXJlcyB1cyB0byBncmFiIGEgcmVmZXJlbmNl Ci0gKiB0byB0aGUgbmV3IGZiIGFuZCBkcm9wIHRoZSByZWZlcmVuY2UgdG8gdGhlIG9sZCBmYiwg aWYgdGhlcmUgaXMgb25lLiBUaGlzCi0gKiBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIGFsbCB0aGVz ZSBkZXRhaWxzIGJlc2lkZXMgdXBkYXRpbmcgdGhlIHBvaW50ZXIgaW4gdGhlCi0gKiBzdGF0ZSBv YmplY3QgaXRzZWxmLgotICovCi12b2lkCi1kcm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUoc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCi0JCQkgICAgc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIpCi17Ci0Jc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBwbGFuZV9zdGF0ZS0+ cGxhbmU7Ci0KLQlpZiAoZmIpCi0JCURSTV9ERUJVR19BVE9NSUMoIlNldCBbRkI6JWRdIGZvciBb UExBTkU6JWQ6JXNdIHN0YXRlICVwXG4iLAotCQkJCSBmYi0+YmFzZS5pZCwgcGxhbmUtPmJhc2Uu aWQsIHBsYW5lLT5uYW1lLAotCQkJCSBwbGFuZV9zdGF0ZSk7Ci0JZWxzZQotCQlEUk1fREVCVUdf QVRPTUlDKCJTZXQgW05PRkJdIGZvciBbUExBTkU6JWQ6JXNdIHN0YXRlICVwXG4iLAotCQkJCSBw bGFuZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUsIHBsYW5lX3N0YXRlKTsKLQotCWRybV9mcmFtZWJ1 ZmZlcl9hc3NpZ24oJnBsYW5lX3N0YXRlLT5mYiwgZmIpOwotfQotRVhQT1JUX1NZTUJPTChkcm1f YXRvbWljX3NldF9mYl9mb3JfcGxhbmUpOwotCi0vKioKLSAqIGRybV9hdG9taWNfc2V0X2ZlbmNl X2Zvcl9wbGFuZSAtIHNldCBmZW5jZSBmb3IgcGxhbmUKLSAqIEBwbGFuZV9zdGF0ZTogYXRvbWlj IHN0YXRlIG9iamVjdCBmb3IgdGhlIHBsYW5lCi0gKiBAZmVuY2U6IGRtYV9mZW5jZSB0byB1c2Ug Zm9yIHRoZSBwbGFuZQotICoKLSAqIEhlbHBlciB0byBzZXR1cCB0aGUgcGxhbmVfc3RhdGUgZmVu Y2UgaW4gY2FzZSBpdCBpcyBub3Qgc2V0IHlldC4KLSAqIEJ5IHVzaW5nIHRoaXMgZHJpdmVycyBk b2Vzbid0IG5lZWQgdG8gd29ycnkgaWYgdGhlIHVzZXIgY2hvb3NlCi0gKiBpbXBsaWNpdCBvciBl eHBsaWNpdCBmZW5jaW5nLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBub3Qgc2V0IHRoZSBm ZW5jZSB0byB0aGUgc3RhdGUgaWYgaXQgd2FzIHNldAotICogdmlhIGV4cGxpY2l0IGZlbmNpbmcg aW50ZXJmYWNlcyBvbiB0aGUgYXRvbWljIGlvY3RsLiBJbiB0aGF0IGNhc2UgaXQgd2lsbAotICog ZHJvcCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBmZW5jZSBhcyB3ZSBhcmUgbm90IHN0b3JpbmcgaXQg YW55d2hlcmUuCi0gKiBPdGhlcndpc2UsIGlmICZkcm1fcGxhbmVfc3RhdGUuZmVuY2UgaXMgbm90 IHNldCB0aGlzIGZ1bmN0aW9uIHdlIGp1c3Qgc2V0IGl0Ci0gKiB3aXRoIHRoZSByZWNlaXZlZCBp bXBsaWNpdCBmZW5jZS4gSW4gYm90aCBjYXNlcyB0aGlzIGZ1bmN0aW9uIGNvbnN1bWVzIGEKLSAq IHJlZmVyZW5jZSBmb3IgQGZlbmNlLgotICoKLSAqIFRoaXMgd2F5IGV4cGxpY2l0IGZlbmNpbmcg Y2FuIGJlIHVzZWQgdG8gb3ZlcnJ1bGUgaW1wbGljaXQgZmVuY2luZywgd2hpY2ggaXMKLSAqIGlt cG9ydGFudCB0byBtYWtlIGV4cGxpY2l0IGZlbmNpbmcgdXNlLWNhc2VzIHdvcms6IE9uZSBleGFt cGxlIGlzIHVzaW5nIG9uZQotICogYnVmZmVyIGZvciAyIHNjcmVlbnMgd2l0aCBkaWZmZXJlbnQg cmVmcmVzaCByYXRlcy4gSW1wbGljaXQgZmVuY2luZyB3aWxsCi0gKiBjbGFtcCByZW5kZXJpbmcg dG8gdGhlIHJlZnJlc2ggcmF0ZSBvZiB0aGUgc2xvd2VyIHNjcmVlbiwgd2hlcmVhcyBleHBsaWNp dAotICogZmVuY2UgYWxsb3dzIDIgaW5kZXBlbmRlbnQgcmVuZGVyIGFuZCBkaXNwbGF5IGxvb3Bz IG9uIGEgc2luZ2xlIGJ1ZmZlci4gSWYgYQotICogZHJpdmVyIGFsbG93cyBvYmV5cyBib3RoIGlt cGxpY2l0IGFuZCBleHBsaWNpdCBmZW5jZXMgZm9yIHBsYW5lIHVwZGF0ZXMsIHRoZW4KLSAqIGl0 IHdpbGwgYnJlYWsgYWxsIHRoZSBiZW5lZml0cyBvZiBleHBsaWNpdCBmZW5jaW5nLgotICovCi12 b2lkCi1kcm1fYXRvbWljX3NldF9mZW5jZV9mb3JfcGxhbmUoc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUsCi0JCQkgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCi17Ci0J aWYgKHBsYW5lX3N0YXRlLT5mZW5jZSkgewotCQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKLQkJcmV0 dXJuOwotCX0KLQotCXBsYW5lX3N0YXRlLT5mZW5jZSA9IGZlbmNlOwotfQotRVhQT1JUX1NZTUJP TChkcm1fYXRvbWljX3NldF9mZW5jZV9mb3JfcGxhbmUpOwotCi0vKioKLSAqIGRybV9hdG9taWNf c2V0X2NydGNfZm9yX2Nvbm5lY3RvciAtIHNldCBjcnRjIGZvciBjb25uZWN0b3IKLSAqIEBjb25u X3N0YXRlOiBhdG9taWMgc3RhdGUgb2JqZWN0IGZvciB0aGUgY29ubmVjdG9yCi0gKiBAY3J0Yzog Y3J0YyB0byB1c2UgZm9yIHRoZSBjb25uZWN0b3IKLSAqCi0gKiBDaGFuZ2luZyB0aGUgYXNzaWdu ZWQgY3J0YyBmb3IgYSBjb25uZWN0b3IgcmVxdWlyZXMgdXMgdG8gZ3JhYiB0aGUgbG9jayBhbmQK LSAqIHN0YXRlIGZvciB0aGUgbmV3IGNydGMsIGFzIG5lZWRlZC4gVGhpcyBmdW5jdGlvbiB0YWtl cyBjYXJlIG9mIGFsbCB0aGVzZQotICogZGV0YWlscyBiZXNpZGVzIHVwZGF0aW5nIHRoZSBwb2lu dGVyIGluIHRoZSBzdGF0ZSBvYmplY3QgaXRzZWxmLgotICoKLSAqIFJldHVybnM6Ci0gKiAwIG9u IHN1Y2Nlc3Mgb3IgY2FuIGZhaWwgd2l0aCAtRURFQURMSyBvciAtRU5PTUVNLiBXaGVuIHRoZSBl cnJvciBpcyBFREVBRExLCi0gKiB0aGVuIHRoZSB3L3cgbXV0ZXggY29kZSBoYXMgZGV0ZWN0ZWQg YSBkZWFkbG9jayBhbmQgdGhlIGVudGlyZSBhdG9taWMKLSAqIHNlcXVlbmNlIG11c3QgYmUgcmVz dGFydGVkLiBBbGwgb3RoZXIgZXJyb3JzIGFyZSBmYXRhbC4KLSAqLwotaW50Ci1kcm1fYXRvbWlj X3NldF9jcnRjX2Zvcl9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5f c3RhdGUsCi0JCQkJICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvciA9IGNvbm5fc3RhdGUtPmNvbm5lY3RvcjsKLQlzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGU7Ci0KLQlpZiAoY29ubl9zdGF0ZS0+Y3J0YyA9PSBjcnRjKQot CQlyZXR1cm4gMDsKLQotCWlmIChjb25uX3N0YXRlLT5jcnRjKSB7Ci0JCWNydGNfc3RhdGUgPSBk cm1fYXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShjb25uX3N0YXRlLT5zdGF0ZSwKLQkJCQkJCQkg ICBjb25uX3N0YXRlLT5jcnRjKTsKLQotCQljcnRjX3N0YXRlLT5jb25uZWN0b3JfbWFzayAmPQot CQkJfmRybV9jb25uZWN0b3JfbWFzayhjb25uX3N0YXRlLT5jb25uZWN0b3IpOwotCi0JCWRybV9j b25uZWN0b3JfcHV0KGNvbm5fc3RhdGUtPmNvbm5lY3Rvcik7Ci0JCWNvbm5fc3RhdGUtPmNydGMg PSBOVUxMOwotCX0KLQotCWlmIChjcnRjKSB7Ci0JCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dl dF9jcnRjX3N0YXRlKGNvbm5fc3RhdGUtPnN0YXRlLCBjcnRjKTsKLQkJaWYgKElTX0VSUihjcnRj X3N0YXRlKSkKLQkJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOwotCi0JCWNydGNfc3RhdGUt PmNvbm5lY3Rvcl9tYXNrIHw9Ci0JCQlkcm1fY29ubmVjdG9yX21hc2soY29ubl9zdGF0ZS0+Y29u bmVjdG9yKTsKLQotCQlkcm1fY29ubmVjdG9yX2dldChjb25uX3N0YXRlLT5jb25uZWN0b3IpOwot CQljb25uX3N0YXRlLT5jcnRjID0gY3J0YzsKLQotCQlEUk1fREVCVUdfQVRPTUlDKCJMaW5rIFtD T05ORUNUT1I6JWQ6JXNdIHN0YXRlICVwIHRvIFtDUlRDOiVkOiVzXVxuIiwKLQkJCQkgY29ubmVj dG9yLT5iYXNlLmlkLCBjb25uZWN0b3ItPm5hbWUsCi0JCQkJIGNvbm5fc3RhdGUsIGNydGMtPmJh c2UuaWQsIGNydGMtPm5hbWUpOwotCX0gZWxzZSB7Ci0JCURSTV9ERUJVR19BVE9NSUMoIkxpbmsg W0NPTk5FQ1RPUjolZDolc10gc3RhdGUgJXAgdG8gW05PQ1JUQ11cbiIsCi0JCQkJIGNvbm5lY3Rv ci0+YmFzZS5pZCwgY29ubmVjdG9yLT5uYW1lLAotCQkJCSBjb25uX3N0YXRlKTsKLQl9Ci0KLQly ZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfY29ubmVj dG9yKTsKLQogLyoqCiAgKiBkcm1fYXRvbWljX2FkZF9hZmZlY3RlZF9jb25uZWN0b3JzIC0gYWRk IGNvbm5lY3RvcnMgZm9yIGNydGMKICAqIEBzdGF0ZTogYXRvbWljIHN0YXRlCkBAIC0xOTE2LDcg KzExMDIsNyBAQCBpbnQgZHJtX2F0b21pY19ub25ibG9ja2luZ19jb21taXQoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlKQogfQogRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX25vbmJsb2Nr aW5nX2NvbW1pdCk7CiAKLXN0YXRpYyB2b2lkIGRybV9hdG9taWNfcHJpbnRfc3RhdGUoY29uc3Qg c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQordm9pZCBkcm1fYXRvbWljX3ByaW50X3N0 YXRlKGNvbnN0IHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgZHJt X3ByaW50ZXIgcCA9IGRybV9pbmZvX3ByaW50ZXIoc3RhdGUtPmRldi0+ZGV2KTsKIAlzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZTsKQEAgLTIwMjMsNTQ0ICsxMjA5LDMgQEAgaW50IGRybV9hdG9taWNf ZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQogfQogI2VuZGlmCiAKLS8qCi0g KiBUaGUgYmlnIG1vbnN0ZXIgaW9jdGwKLSAqLwotCi1zdGF0aWMgc3RydWN0IGRybV9wZW5kaW5n X3ZibGFua19ldmVudCAqY3JlYXRlX3ZibGFua19ldmVudCgKLQkJc3RydWN0IGRybV9jcnRjICpj cnRjLCB1aW50NjRfdCB1c2VyX2RhdGEpCi17Ci0Jc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19l dmVudCAqZSA9IE5VTEw7Ci0KLQllID0ga3phbGxvYyhzaXplb2YgKmUsIEdGUF9LRVJORUwpOwot CWlmICghZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQllLT5ldmVudC5iYXNlLnR5cGUgPSBEUk1fRVZF TlRfRkxJUF9DT01QTEVURTsKLQllLT5ldmVudC5iYXNlLmxlbmd0aCA9IHNpemVvZihlLT5ldmVu dCk7Ci0JZS0+ZXZlbnQudmJsLmNydGNfaWQgPSBjcnRjLT5iYXNlLmlkOwotCWUtPmV2ZW50LnZi bC51c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0KLQlyZXR1cm4gZTsKLX0KLQotaW50IGRybV9hdG9t aWNfY29ubmVjdG9yX2NvbW1pdF9kcG1zKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwK LQkJCQkgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCQkJICAgICBpbnQg bW9kZSkKLXsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqdG1wX2Nvbm5lY3RvcjsKLQlzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqbmV3X2Nvbm5fc3RhdGU7Ci0Jc3RydWN0IGRybV9jcnRjICpj cnRjOwotCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKLQlpbnQgaSwgcmV0LCBv bGRfbW9kZSA9IGNvbm5lY3Rvci0+ZHBtczsKLQlib29sIGFjdGl2ZSA9IGZhbHNlOwotCi0JcmV0 ID0gZHJtX21vZGVzZXRfbG9jaygmc3RhdGUtPmRldi0+bW9kZV9jb25maWcuY29ubmVjdGlvbl9t dXRleCwKLQkJCSAgICAgICBzdGF0ZS0+YWNxdWlyZV9jdHgpOwotCWlmIChyZXQpCi0JCXJldHVy biByZXQ7Ci0KLQlpZiAobW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OKQotCQltb2RlID0gRFJNX01P REVfRFBNU19PRkY7Ci0JY29ubmVjdG9yLT5kcG1zID0gbW9kZTsKLQotCWNydGMgPSBjb25uZWN0 b3ItPnN0YXRlLT5jcnRjOwotCWlmICghY3J0YykKLQkJZ290byBvdXQ7Ci0JcmV0ID0gZHJtX2F0 b21pY19hZGRfYWZmZWN0ZWRfY29ubmVjdG9ycyhzdGF0ZSwgY3J0Yyk7Ci0JaWYgKHJldCkKLQkJ Z290byBvdXQ7Ci0KLQljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0 ZSwgY3J0Yyk7Ci0JaWYgKElTX0VSUihjcnRjX3N0YXRlKSkgewotCQlyZXQgPSBQVFJfRVJSKGNy dGNfc3RhdGUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlmb3JfZWFjaF9uZXdfY29ubmVjdG9yX2lu X3N0YXRlKHN0YXRlLCB0bXBfY29ubmVjdG9yLCBuZXdfY29ubl9zdGF0ZSwgaSkgewotCQlpZiAo bmV3X2Nvbm5fc3RhdGUtPmNydGMgIT0gY3J0YykKLQkJCWNvbnRpbnVlOwotCQlpZiAodG1wX2Nv bm5lY3Rvci0+ZHBtcyA9PSBEUk1fTU9ERV9EUE1TX09OKSB7Ci0JCQlhY3RpdmUgPSB0cnVlOwot CQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQljcnRjX3N0YXRlLT5hY3RpdmUgPSBhY3RpdmU7Ci0JcmV0 ID0gZHJtX2F0b21pY19jb21taXQoc3RhdGUpOwotb3V0OgotCWlmIChyZXQgIT0gMCkKLQkJY29u bmVjdG9yLT5kcG1zID0gb2xkX21vZGU7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGRybV9hdG9t aWNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKLQkJCSAgICBz dHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmosCi0JCQkgICAgc3RydWN0IGRybV9wcm9wZXJ0eSAq cHJvcCwKLQkJCSAgICB1aW50NjRfdCBwcm9wX3ZhbHVlKQotewotCXN0cnVjdCBkcm1fbW9kZV9v YmplY3QgKnJlZjsKLQlpbnQgcmV0OwotCi0JaWYgKCFkcm1fcHJvcGVydHlfY2hhbmdlX3ZhbGlk X2dldChwcm9wLCBwcm9wX3ZhbHVlLCAmcmVmKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzd2l0 Y2ggKG9iai0+dHlwZSkgewotCWNhc2UgRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RPUjogewotCQlz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gb2JqX3RvX2Nvbm5lY3RvcihvYmopOwot CQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubmVjdG9yX3N0YXRlOwotCi0JCWNvbm5l Y3Rvcl9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubmVj dG9yKTsKLQkJaWYgKElTX0VSUihjb25uZWN0b3Jfc3RhdGUpKSB7Ci0JCQlyZXQgPSBQVFJfRVJS KGNvbm5lY3Rvcl9zdGF0ZSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJldCA9IGRybV9hdG9taWNf Y29ubmVjdG9yX3NldF9wcm9wZXJ0eShjb25uZWN0b3IsCi0JCQkJY29ubmVjdG9yX3N0YXRlLCBw cm9wLCBwcm9wX3ZhbHVlKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgRFJNX01PREVfT0JKRUNUX0NS VEM6IHsKLQkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gb2JqX3RvX2NydGMob2JqKTsKLQkJc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwotCi0JCWNydGNfc3RhdGUgPSBkcm1fYXRv bWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsKLQkJaWYgKElTX0VSUihjcnRjX3N0YXRl KSkgewotCQkJcmV0ID0gUFRSX0VSUihjcnRjX3N0YXRlKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJ cmV0ID0gZHJtX2F0b21pY19jcnRjX3NldF9wcm9wZXJ0eShjcnRjLAotCQkJCWNydGNfc3RhdGUs IHByb3AsIHByb3BfdmFsdWUpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBEUk1fTU9ERV9PQkpFQ1Rf UExBTkU6IHsKLQkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBvYmpfdG9fcGxhbmUob2JqKTsK LQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7Ci0KLQkJcGxhbmVfc3RhdGUg PSBkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZShzdGF0ZSwgcGxhbmUpOwotCQlpZiAoSVNfRVJS KHBsYW5lX3N0YXRlKSkgewotCQkJcmV0ID0gUFRSX0VSUihwbGFuZV9zdGF0ZSk7Ci0JCQlicmVh azsKLQkJfQotCi0JCXJldCA9IGRybV9hdG9taWNfcGxhbmVfc2V0X3Byb3BlcnR5KHBsYW5lLAot CQkJCXBsYW5lX3N0YXRlLCBwcm9wLCBwcm9wX3ZhbHVlKTsKLQkJYnJlYWs7Ci0JfQotCWRlZmF1 bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQotCWRybV9wcm9wZXJ0eV9jaGFu Z2VfdmFsaWRfcHV0KHByb3AsIHJlZik7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBET0M6 IGV4cGxpY2l0IGZlbmNpbmcgcHJvcGVydGllcwotICoKLSAqIEV4cGxpY2l0IGZlbmNpbmcgYWxs b3dzIHVzZXJzcGFjZSB0byBjb250cm9sIHRoZSBidWZmZXIgc3luY2hyb25pemF0aW9uCi0gKiBi ZXR3ZWVuIGRldmljZXMuIEEgRmVuY2Ugb3IgYSBncm91cCBvZiBmZW5jZXMgYXJlIHRyYW5zZmVy ZWQgdG8vZnJvbQotICogdXNlcnNwYWNlIHVzaW5nIFN5bmMgRmlsZSBmZHMgYW5kIHRoZXJlIGFy ZSB0d28gRFJNIHByb3BlcnRpZXMgZm9yIHRoYXQuCi0gKiBJTl9GRU5DRV9GRCBvbiBlYWNoIERS TSBQbGFuZSB0byBzZW5kIGZlbmNlcyB0byB0aGUga2VybmVsIGFuZAotICogT1VUX0ZFTkNFX1BU UiBvbiBlYWNoIERSTSBDUlRDIHRvIHJlY2VpdmUgZmVuY2VzIGZyb20gdGhlIGtlcm5lbC4KLSAq Ci0gKiBBcyBhIGNvbnRyYXN0LCB3aXRoIGltcGxpY2l0IGZlbmNpbmcgdGhlIGtlcm5lbCBrZWVw cyB0cmFjayBvZiBhbnkKLSAqIG9uZ29pbmcgcmVuZGVyaW5nLCBhbmQgYXV0b21hdGljYWxseSBl bnN1cmVzIHRoYXQgdGhlIGF0b21pYyB1cGRhdGUgd2FpdHMKLSAqIGZvciBhbnkgcGVuZGluZyBy ZW5kZXJpbmcgdG8gY29tcGxldGUuIEZvciBzaGFyZWQgYnVmZmVycyByZXByZXNlbnRlZCB3aXRo Ci0gKiBhICZzdHJ1Y3QgZG1hX2J1ZiB0aGlzIGlzIHRyYWNrZWQgaW4gJnN0cnVjdCByZXNlcnZh dGlvbl9vYmplY3QuCi0gKiBJbXBsaWNpdCBzeW5jaW5nIGlzIGhvdyBMaW51eCB0cmFkaXRpb25h bGx5IHdvcmtlZCAoZS5nLiBEUkkyLzMgb24gWC5vcmcpLAotICogd2hlcmVhcyBleHBsaWNpdCBm ZW5jaW5nIGlzIHdoYXQgQW5kcm9pZCB3YW50cy4KLSAqCi0gKiAiSU5fRkVOQ0VfRkTigJ06Ci0g KglVc2UgdGhpcyBwcm9wZXJ0eSB0byBwYXNzIGEgZmVuY2UgdGhhdCBEUk0gc2hvdWxkIHdhaXQg b24gYmVmb3JlCi0gKglwcm9jZWVkaW5nIHdpdGggdGhlIEF0b21pYyBDb21taXQgcmVxdWVzdCBh bmQgc2hvdyB0aGUgZnJhbWVidWZmZXIgZm9yCi0gKgl0aGUgcGxhbmUgb24gdGhlIHNjcmVlbi4g VGhlIGZlbmNlIGNhbiBiZSBlaXRoZXIgYSBub3JtYWwgZmVuY2Ugb3IgYQotICoJbWVyZ2VkIG9u ZSwgdGhlIHN5bmNfZmlsZSBmcmFtZXdvcmsgd2lsbCBoYW5kbGUgYm90aCBjYXNlcyBhbmQgdXNl IGEKLSAqCWZlbmNlX2FycmF5IGlmIGEgbWVyZ2VkIGZlbmNlIGlzIHJlY2VpdmVkLiBQYXNzaW5n IC0xIGhlcmUgbWVhbnMgbm8KLSAqCWZlbmNlcyB0byB3YWl0IG9uLgotICoKLSAqCUlmIHRoZSBB dG9taWMgQ29tbWl0IHJlcXVlc3QgaGFzIHRoZSBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIGZs YWcKLSAqCWl0IHdpbGwgb25seSBjaGVjayBpZiB0aGUgU3luYyBGaWxlIGlzIGEgdmFsaWQgb25l LgotICoKLSAqCU9uIHRoZSBkcml2ZXIgc2lkZSB0aGUgZmVuY2UgaXMgc3RvcmVkIG9uIHRoZSBA ZmVuY2UgcGFyYW1ldGVyIG9mCi0gKgkmc3RydWN0IGRybV9wbGFuZV9zdGF0ZS4gRHJpdmVycyB3 aGljaCBhbHNvIHN1cHBvcnQgaW1wbGljaXQgZmVuY2luZwotICoJc2hvdWxkIHNldCB0aGUgaW1w bGljaXQgZmVuY2UgdXNpbmcgZHJtX2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5lKCksCi0gKgl0 byBtYWtlIHN1cmUgdGhlcmUncyBjb25zaXN0ZW50IGJlaGF2aW91ciBiZXR3ZWVuIGRyaXZlcnMg aW4gcHJlY2VkZW5jZQotICoJb2YgaW1wbGljaXQgdnMuIGV4cGxpY2l0IGZlbmNpbmcuCi0gKgot ICogIk9VVF9GRU5DRV9QVFLigJ06Ci0gKglVc2UgdGhpcyBwcm9wZXJ0eSB0byBwYXNzIGEgZmls ZSBkZXNjcmlwdG9yIHBvaW50ZXIgdG8gRFJNLiBPbmNlIHRoZQotICoJQXRvbWljIENvbW1pdCBy ZXF1ZXN0IGNhbGwgcmV0dXJucyBPVVRfRkVOQ0VfUFRSIHdpbGwgYmUgZmlsbGVkIHdpdGgKLSAq CXRoZSBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyIG9mIGEgU3luYyBGaWxlLiBUaGlzIFN5bmMgRmls ZSBjb250YWlucyB0aGUKLSAqCUNSVEMgZmVuY2UgdGhhdCB3aWxsIGJlIHNpZ25hbGVkIHdoZW4g YWxsIGZyYW1lYnVmZmVycyBwcmVzZW50IG9uIHRoZQotICoJQXRvbWljIENvbW1pdCAqIHJlcXVl c3QgZm9yIHRoYXQgZ2l2ZW4gQ1JUQyBhcmUgc2Nhbm5lZCBvdXQgb24gdGhlCi0gKglzY3JlZW4u Ci0gKgotICoJVGhlIEF0b21pYyBDb21taXQgcmVxdWVzdCBmYWlscyBpZiBhIGludmFsaWQgcG9p bnRlciBpcyBwYXNzZWQuIElmIHRoZQotICoJQXRvbWljIENvbW1pdCByZXF1ZXN0IGZhaWxzIGZv ciBhbnkgb3RoZXIgcmVhc29uIHRoZSBvdXQgZmVuY2UgZmQKLSAqCXJldHVybmVkIHdpbGwgYmUg LTEuIE9uIGEgQXRvbWljIENvbW1pdCB3aXRoIHRoZQotICoJRFJNX01PREVfQVRPTUlDX1RFU1Rf T05MWSBmbGFnIHRoZSBvdXQgZmVuY2Ugd2lsbCBhbHNvIGJlIHNldCB0byAtMS4KLSAqCi0gKglO b3RlIHRoYXQgb3V0LWZlbmNlcyBkb24ndCBoYXZlIGEgc3BlY2lhbCBpbnRlcmZhY2UgdG8gZHJp dmVycyBhbmQgYXJlCi0gKglpbnRlcm5hbGx5IHJlcHJlc2VudGVkIGJ5IGEgJnN0cnVjdCBkcm1f cGVuZGluZ192YmxhbmtfZXZlbnQgaW4gc3RydWN0Ci0gKgkmZHJtX2NydGNfc3RhdGUsIHdoaWNo IGlzIGFsc28gdXNlZCBieSB0aGUgbm9uYmxvY2tpbmcgYXRvbWljIGNvbW1pdAotICoJaGVscGVy cyBhbmQgZm9yIHRoZSBEUk0gZXZlbnQgaGFuZGxpbmcgZm9yIGV4aXN0aW5nIHVzZXJzcGFjZS4K LSAqLwotCi1zdHJ1Y3QgZHJtX291dF9mZW5jZV9zdGF0ZSB7Ci0JczMyIF9fdXNlciAqb3V0X2Zl bmNlX3B0cjsKLQlzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGU7Ci0JaW50IGZkOwotfTsKLQot c3RhdGljIGludCBzZXR1cF9vdXRfZmVuY2Uoc3RydWN0IGRybV9vdXRfZmVuY2Vfc3RhdGUgKmZl bmNlX3N0YXRlLAotCQkJICAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCi17Ci0JZmVuY2Vfc3Rh dGUtPmZkID0gZ2V0X3VudXNlZF9mZF9mbGFncyhPX0NMT0VYRUMpOwotCWlmIChmZW5jZV9zdGF0 ZS0+ZmQgPCAwKQotCQlyZXR1cm4gZmVuY2Vfc3RhdGUtPmZkOwotCi0JaWYgKHB1dF91c2VyKGZl bmNlX3N0YXRlLT5mZCwgZmVuY2Vfc3RhdGUtPm91dF9mZW5jZV9wdHIpKQotCQlyZXR1cm4gLUVG QVVMVDsKLQotCWZlbmNlX3N0YXRlLT5zeW5jX2ZpbGUgPSBzeW5jX2ZpbGVfY3JlYXRlKGZlbmNl KTsKLQlpZiAoIWZlbmNlX3N0YXRlLT5zeW5jX2ZpbGUpCi0JCXJldHVybiAtRU5PTUVNOwotCi0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHJlcGFyZV9zaWduYWxpbmcoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKLQkJCQkg IHN0cnVjdCBkcm1fbW9kZV9hdG9taWMgKmFyZywKLQkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmls ZV9wcml2LAotCQkJCSAgc3RydWN0IGRybV9vdXRfZmVuY2Vfc3RhdGUgKipmZW5jZV9zdGF0ZSwK LQkJCQkgIHVuc2lnbmVkIGludCAqbnVtX2ZlbmNlcykKLXsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNy dGM7Ci0Jc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwotCXN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlOwot CWludCBpLCBjID0gMCwgcmV0OwotCi0JaWYgKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9BVE9NSUNf VEVTVF9PTkxZKQotCQlyZXR1cm4gMDsKLQotCWZvcl9lYWNoX25ld19jcnRjX2luX3N0YXRlKHN0 YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7Ci0JCXMzMiBfX3VzZXIgKmZlbmNlX3B0cjsKLQot CQlmZW5jZV9wdHIgPSBnZXRfb3V0X2ZlbmNlX2Zvcl9jcnRjKGNydGNfc3RhdGUtPnN0YXRlLCBj cnRjKTsKLQotCQlpZiAoYXJnLT5mbGFncyAmIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCB8fCBm ZW5jZV9wdHIpIHsKLQkJCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmU7Ci0KLQkJ CWUgPSBjcmVhdGVfdmJsYW5rX2V2ZW50KGNydGMsIGFyZy0+dXNlcl9kYXRhKTsKLQkJCWlmICgh ZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJY3J0Y19zdGF0ZS0+ZXZlbnQgPSBlOwotCQl9 Ci0KLQkJaWYgKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQpIHsKLQkJCXN0 cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmUgPSBjcnRjX3N0YXRlLT5ldmVudDsKLQot CQkJaWYgKCFmaWxlX3ByaXYpCi0JCQkJY29udGludWU7Ci0KLQkJCXJldCA9IGRybV9ldmVudF9y ZXNlcnZlX2luaXQoZGV2LCBmaWxlX3ByaXYsICZlLT5iYXNlLAotCQkJCQkJICAgICAmZS0+ZXZl bnQuYmFzZSk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJa2ZyZWUoZSk7Ci0JCQkJY3J0Y19zdGF0ZS0+ ZXZlbnQgPSBOVUxMOwotCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoZmVuY2Vf cHRyKSB7Ci0JCQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKLQkJCXN0cnVjdCBkcm1fb3V0X2Zl bmNlX3N0YXRlICpmOwotCi0JCQlmID0ga3JlYWxsb2MoKmZlbmNlX3N0YXRlLCBzaXplb2YoKipm ZW5jZV9zdGF0ZSkgKgotCQkJCSAgICAgKCpudW1fZmVuY2VzICsgMSksIEdGUF9LRVJORUwpOwot CQkJaWYgKCFmKQotCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQltZW1zZXQoJmZbKm51bV9mZW5j ZXNdLCAwLCBzaXplb2YoKmYpKTsKLQotCQkJZlsqbnVtX2ZlbmNlc10ub3V0X2ZlbmNlX3B0ciA9 IGZlbmNlX3B0cjsKLQkJCSpmZW5jZV9zdGF0ZSA9IGY7Ci0KLQkJCWZlbmNlID0gZHJtX2NydGNf Y3JlYXRlX2ZlbmNlKGNydGMpOwotCQkJaWYgKCFmZW5jZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsK LQotCQkJcmV0ID0gc2V0dXBfb3V0X2ZlbmNlKCZmWygqbnVtX2ZlbmNlcykrK10sIGZlbmNlKTsK LQkJCWlmIChyZXQpIHsKLQkJCQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKLQkJCQlyZXR1cm4gcmV0 OwotCQkJfQotCi0JCQljcnRjX3N0YXRlLT5ldmVudC0+YmFzZS5mZW5jZSA9IGZlbmNlOwotCQl9 Ci0KLQkJYysrOwotCX0KLQotCWZvcl9lYWNoX25ld19jb25uZWN0b3JfaW5fc3RhdGUoc3RhdGUs IGNvbm4sIGNvbm5fc3RhdGUsIGkpIHsKLQkJc3RydWN0IGRybV93cml0ZWJhY2tfY29ubmVjdG9y ICp3Yl9jb25uOwotCQlzdHJ1Y3QgZHJtX3dyaXRlYmFja19qb2IgKmpvYjsKLQkJc3RydWN0IGRy bV9vdXRfZmVuY2Vfc3RhdGUgKmY7Ci0JCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOwotCQlzMzIg X191c2VyICpmZW5jZV9wdHI7Ci0KLQkJZmVuY2VfcHRyID0gZ2V0X291dF9mZW5jZV9mb3JfY29u bmVjdG9yKHN0YXRlLCBjb25uKTsKLQkJaWYgKCFmZW5jZV9wdHIpCi0JCQljb250aW51ZTsKLQot CQlqb2IgPSBkcm1fYXRvbWljX2dldF93cml0ZWJhY2tfam9iKGNvbm5fc3RhdGUpOwotCQlpZiAo IWpvYikKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCWYgPSBrcmVhbGxvYygqZmVuY2Vfc3RhdGUs IHNpemVvZigqKmZlbmNlX3N0YXRlKSAqCi0JCQkgICAgICgqbnVtX2ZlbmNlcyArIDEpLCBHRlBf S0VSTkVMKTsKLQkJaWYgKCFmKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJbWVtc2V0KCZmWypu dW1fZmVuY2VzXSwgMCwgc2l6ZW9mKCpmKSk7Ci0KLQkJZlsqbnVtX2ZlbmNlc10ub3V0X2ZlbmNl X3B0ciA9IGZlbmNlX3B0cjsKLQkJKmZlbmNlX3N0YXRlID0gZjsKLQotCQl3Yl9jb25uID0gZHJt X2Nvbm5lY3Rvcl90b193cml0ZWJhY2soY29ubik7Ci0JCWZlbmNlID0gZHJtX3dyaXRlYmFja19n ZXRfb3V0X2ZlbmNlKHdiX2Nvbm4pOwotCQlpZiAoIWZlbmNlKQotCQkJcmV0dXJuIC1FTk9NRU07 Ci0KLQkJcmV0ID0gc2V0dXBfb3V0X2ZlbmNlKCZmWygqbnVtX2ZlbmNlcykrK10sIGZlbmNlKTsK LQkJaWYgKHJldCkgewotCQkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7Ci0JCQlyZXR1cm4gcmV0Owot CQl9Ci0KLQkJam9iLT5vdXRfZmVuY2UgPSBmZW5jZTsKLQl9Ci0KLQkvKgotCSAqIEhhdmluZyB0 aGlzIGZsYWcgbWVhbnMgdXNlciBtb2RlIHBlbmRzIG9uIGV2ZW50IHdoaWNoIHdpbGwgbmV2ZXIK LQkgKiByZWFjaCBkdWUgdG8gbGFjayBvZiBhdCBsZWFzdCBvbmUgQ1JUQyBmb3Igc2lnbmFsaW5n Ci0JICovCi0JaWYgKGMgPT0gMCAmJiAoYXJnLT5mbGFncyAmIERSTV9NT0RFX1BBR0VfRkxJUF9F VkVOVCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lk IGNvbXBsZXRlX3NpZ25hbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKLQkJCSAgICAgICBzdHJ1Y3QgZHJtX291dF9m ZW5jZV9zdGF0ZSAqZmVuY2Vfc3RhdGUsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IG51bV9mZW5j ZXMsCi0JCQkgICAgICAgYm9vbCBpbnN0YWxsX2ZkcykKLXsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNy dGM7Ci0Jc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwotCWludCBpOwotCi0JaWYg KGluc3RhbGxfZmRzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1fZmVuY2VzOyBpKyspCi0JCQlm ZF9pbnN0YWxsKGZlbmNlX3N0YXRlW2ldLmZkLAotCQkJCSAgIGZlbmNlX3N0YXRlW2ldLnN5bmNf ZmlsZS0+ZmlsZSk7Ci0KLQkJa2ZyZWUoZmVuY2Vfc3RhdGUpOwotCQlyZXR1cm47Ci0JfQotCi0J Zm9yX2VhY2hfbmV3X2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUsIGkpIHsK LQkJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQgPSBjcnRjX3N0YXRlLT5l dmVudDsKLQkJLyoKLQkJICogRnJlZSB0aGUgYWxsb2NhdGVkIGV2ZW50LiBkcm1fYXRvbWljX2hl bHBlcl9zZXR1cF9jb21taXQKLQkJICogY2FuIGFsbG9jYXRlIGFuIGV2ZW50IHRvbywgc28gb25s eSBmcmVlIGl0IGlmIGl0J3Mgb3VycwotCQkgKiB0byBwcmV2ZW50IGEgZG91YmxlIGZyZWUgaW4g ZHJtX2F0b21pY19zdGF0ZV9jbGVhci4KLQkJICovCi0JCWlmIChldmVudCAmJiAoZXZlbnQtPmJh c2UuZmVuY2UgfHwgZXZlbnQtPmJhc2UuZmlsZV9wcml2KSkgewotCQkJZHJtX2V2ZW50X2NhbmNl bF9mcmVlKGRldiwgJmV2ZW50LT5iYXNlKTsKLQkJCWNydGNfc3RhdGUtPmV2ZW50ID0gTlVMTDsK LQkJfQotCX0KLQotCWlmICghZmVuY2Vfc3RhdGUpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7 IGkgPCBudW1fZmVuY2VzOyBpKyspIHsKLQkJaWYgKGZlbmNlX3N0YXRlW2ldLnN5bmNfZmlsZSkK LQkJCWZwdXQoZmVuY2Vfc3RhdGVbaV0uc3luY19maWxlLT5maWxlKTsKLQkJaWYgKGZlbmNlX3N0 YXRlW2ldLmZkID49IDApCi0JCQlwdXRfdW51c2VkX2ZkKGZlbmNlX3N0YXRlW2ldLmZkKTsKLQot CQkvKiBJZiB0aGlzIGZhaWxzIGxvZyBlcnJvciB0byB0aGUgdXNlciAqLwotCQlpZiAoZmVuY2Vf c3RhdGVbaV0ub3V0X2ZlbmNlX3B0ciAmJgotCQkgICAgcHV0X3VzZXIoLTEsIGZlbmNlX3N0YXRl W2ldLm91dF9mZW5jZV9wdHIpKQotCQkJRFJNX0RFQlVHX0FUT01JQygiQ291bGRuJ3QgY2xlYXIg b3V0X2ZlbmNlX3B0clxuIik7Ci0JfQotCi0Ja2ZyZWUoZmVuY2Vfc3RhdGUpOwotfQotCi1pbnQg ZHJtX21vZGVfYXRvbWljX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgIHZvaWQg KmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQotewotCXN0cnVjdCBkcm1fbW9kZV9h dG9taWMgKmFyZyA9IGRhdGE7Ci0JdWludDMyX3QgX191c2VyICpvYmpzX3B0ciA9ICh1aW50MzJf dCBfX3VzZXIgKikodW5zaWduZWQgbG9uZykoYXJnLT5vYmpzX3B0cik7Ci0JdWludDMyX3QgX191 c2VyICpjb3VudF9wcm9wc19wdHIgPSAodWludDMyX3QgX191c2VyICopKHVuc2lnbmVkIGxvbmcp KGFyZy0+Y291bnRfcHJvcHNfcHRyKTsKLQl1aW50MzJfdCBfX3VzZXIgKnByb3BzX3B0ciA9ICh1 aW50MzJfdCBfX3VzZXIgKikodW5zaWduZWQgbG9uZykoYXJnLT5wcm9wc19wdHIpOwotCXVpbnQ2 NF90IF9fdXNlciAqcHJvcF92YWx1ZXNfcHRyID0gKHVpbnQ2NF90IF9fdXNlciAqKSh1bnNpZ25l ZCBsb25nKShhcmctPnByb3BfdmFsdWVzX3B0cik7Ci0JdW5zaWduZWQgaW50IGNvcGllZF9vYmpz LCBjb3BpZWRfcHJvcHM7Ci0Jc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOwotCXN0cnVj dCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCBjdHg7Ci0Jc3RydWN0IGRybV9vdXRfZmVuY2Vfc3Rh dGUgKmZlbmNlX3N0YXRlOwotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGludCBpLCBqLCBudW1f ZmVuY2VzOwotCi0JLyogZGlzYWxsb3cgZm9yIGRyaXZlcnMgbm90IHN1cHBvcnRpbmcgYXRvbWlj OiAqLwotCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9BVE9NSUMpKQot CQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIGRpc2FsbG93IGZvciB1c2Vyc3BhY2UgdGhhdCBoYXMg bm90IGVuYWJsZWQgYXRvbWljIGNhcCAoZXZlbgotCSAqIHRob3VnaCB0aGlzIG1heSBiZSBhIGJp dCBvdmVya2lsbCwgc2luY2UgbGVnYWN5IHVzZXJzcGFjZQotCSAqIHdvdWxkbid0IGtub3cgaG93 IHRvIGNhbGwgdGhpcyBpb2N0bCkKLQkgKi8KLQlpZiAoIWZpbGVfcHJpdi0+YXRvbWljKQotCQly ZXR1cm4gLUVJTlZBTDsKLQotCWlmIChhcmctPmZsYWdzICYgfkRSTV9NT0RFX0FUT01JQ19GTEFH UykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYXJnLT5yZXNlcnZlZCkKLQkJcmV0dXJuIC1F SU5WQUw7Ci0KLQlpZiAoKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9QQUdFX0ZMSVBfQVNZTkMpICYm Ci0JCQkhZGV2LT5tb2RlX2NvbmZpZy5hc3luY19wYWdlX2ZsaXApCi0JCXJldHVybiAtRUlOVkFM OwotCi0JLyogY2FuJ3QgdGVzdCBhbmQgZXhwZWN0IGFuIGV2ZW50IGF0IHRoZSBzYW1lIHRpbWUu ICovCi0JaWYgKChhcmctPmZsYWdzICYgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSkgJiYKLQkJ CShhcmctPmZsYWdzICYgRFJNX01PREVfUEFHRV9GTElQX0VWRU5UKSkKLQkJcmV0dXJuIC1FSU5W QUw7Ci0KLQlkcm1fbW9kZXNldF9hY3F1aXJlX2luaXQoJmN0eCwgRFJNX01PREVTRVRfQUNRVUlS RV9JTlRFUlJVUFRJQkxFKTsKLQotCXN0YXRlID0gZHJtX2F0b21pY19zdGF0ZV9hbGxvYyhkZXYp OwotCWlmICghc3RhdGUpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc3RhdGUtPmFjcXVpcmVfY3R4 ID0gJmN0eDsKLQlzdGF0ZS0+YWxsb3dfbW9kZXNldCA9ICEhKGFyZy0+ZmxhZ3MgJiBEUk1fTU9E RV9BVE9NSUNfQUxMT1dfTU9ERVNFVCk7Ci0KLXJldHJ5OgotCWNvcGllZF9vYmpzID0gMDsKLQlj b3BpZWRfcHJvcHMgPSAwOwotCWZlbmNlX3N0YXRlID0gTlVMTDsKLQludW1fZmVuY2VzID0gMDsK LQotCWZvciAoaSA9IDA7IGkgPCBhcmctPmNvdW50X29ianM7IGkrKykgewotCQl1aW50MzJfdCBv YmpfaWQsIGNvdW50X3Byb3BzOwotCQlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmo7Ci0KLQkJ aWYgKGdldF91c2VyKG9ial9pZCwgb2Jqc19wdHIgKyBjb3BpZWRfb2JqcykpIHsKLQkJCXJldCA9 IC1FRkFVTFQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCW9iaiA9IGRybV9tb2RlX29iamVjdF9m aW5kKGRldiwgZmlsZV9wcml2LCBvYmpfaWQsIERSTV9NT0RFX09CSkVDVF9BTlkpOwotCQlpZiAo IW9iaikgewotCQkJcmV0ID0gLUVOT0VOVDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJaWYgKCFv YmotPnByb3BlcnRpZXMpIHsKLQkJCWRybV9tb2RlX29iamVjdF9wdXQob2JqKTsKLQkJCXJldCA9 IC1FTk9FTlQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWlmIChnZXRfdXNlcihjb3VudF9wcm9w cywgY291bnRfcHJvcHNfcHRyICsgY29waWVkX29ianMpKSB7Ci0JCQlkcm1fbW9kZV9vYmplY3Rf cHV0KG9iaik7Ci0JCQlyZXQgPSAtRUZBVUxUOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQljb3Bp ZWRfb2JqcysrOwotCi0JCWZvciAoaiA9IDA7IGogPCBjb3VudF9wcm9wczsgaisrKSB7Ci0JCQl1 aW50MzJfdCBwcm9wX2lkOwotCQkJdWludDY0X3QgcHJvcF92YWx1ZTsKLQkJCXN0cnVjdCBkcm1f cHJvcGVydHkgKnByb3A7Ci0KLQkJCWlmIChnZXRfdXNlcihwcm9wX2lkLCBwcm9wc19wdHIgKyBj b3BpZWRfcHJvcHMpKSB7Ci0JCQkJZHJtX21vZGVfb2JqZWN0X3B1dChvYmopOwotCQkJCXJldCA9 IC1FRkFVTFQ7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0KLQkJCXByb3AgPSBkcm1fbW9kZV9vYmpf ZmluZF9wcm9wX2lkKG9iaiwgcHJvcF9pZCk7Ci0JCQlpZiAoIXByb3ApIHsKLQkJCQlkcm1fbW9k ZV9vYmplY3RfcHV0KG9iaik7Ci0JCQkJcmV0ID0gLUVOT0VOVDsKLQkJCQlnb3RvIG91dDsKLQkJ CX0KLQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwcm9wX3ZhbHVlLAotCQkJCQkgICBwcm9wX3Zh bHVlc19wdHIgKyBjb3BpZWRfcHJvcHMsCi0JCQkJCSAgIHNpemVvZihwcm9wX3ZhbHVlKSkpIHsK LQkJCQlkcm1fbW9kZV9vYmplY3RfcHV0KG9iaik7Ci0JCQkJcmV0ID0gLUVGQVVMVDsKLQkJCQln b3RvIG91dDsKLQkJCX0KLQotCQkJcmV0ID0gZHJtX2F0b21pY19zZXRfcHJvcGVydHkoc3RhdGUs IG9iaiwgcHJvcCwKLQkJCQkJCSAgICAgIHByb3BfdmFsdWUpOwotCQkJaWYgKHJldCkgewotCQkJ CWRybV9tb2RlX29iamVjdF9wdXQob2JqKTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQotCQkJY29w aWVkX3Byb3BzKys7Ci0JCX0KLQotCQlkcm1fbW9kZV9vYmplY3RfcHV0KG9iaik7Ci0JfQotCi0J cmV0ID0gcHJlcGFyZV9zaWduYWxpbmcoZGV2LCBzdGF0ZSwgYXJnLCBmaWxlX3ByaXYsICZmZW5j ZV9zdGF0ZSwKLQkJCQkmbnVtX2ZlbmNlcyk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlp ZiAoYXJnLT5mbGFncyAmIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFkpIHsKLQkJcmV0ID0gZHJt X2F0b21pY19jaGVja19vbmx5KHN0YXRlKTsKLQl9IGVsc2UgaWYgKGFyZy0+ZmxhZ3MgJiBEUk1f TU9ERV9BVE9NSUNfTk9OQkxPQ0spIHsKLQkJcmV0ID0gZHJtX2F0b21pY19ub25ibG9ja2luZ19j b21taXQoc3RhdGUpOwotCX0gZWxzZSB7Ci0JCWlmICh1bmxpa2VseShkcm1fZGVidWcgJiBEUk1f VVRfU1RBVEUpKQotCQkJZHJtX2F0b21pY19wcmludF9zdGF0ZShzdGF0ZSk7Ci0KLQkJcmV0ID0g ZHJtX2F0b21pY19jb21taXQoc3RhdGUpOwotCX0KLQotb3V0OgotCWNvbXBsZXRlX3NpZ25hbGlu ZyhkZXYsIHN0YXRlLCBmZW5jZV9zdGF0ZSwgbnVtX2ZlbmNlcywgIXJldCk7Ci0KLQlpZiAocmV0 ID09IC1FREVBRExLKSB7Ci0JCWRybV9hdG9taWNfc3RhdGVfY2xlYXIoc3RhdGUpOwotCQlyZXQg PSBkcm1fbW9kZXNldF9iYWNrb2ZmKCZjdHgpOwotCQlpZiAoIXJldCkKLQkJCWdvdG8gcmV0cnk7 Ci0JfQotCi0JZHJtX2F0b21pY19zdGF0ZV9wdXQoc3RhdGUpOwotCi0JZHJtX21vZGVzZXRfZHJv cF9sb2NrcygmY3R4KTsKLQlkcm1fbW9kZXNldF9hY3F1aXJlX2ZpbmkoJmN0eCk7Ci0KLQlyZXR1 cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVy LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwppbmRleCBkYWEwNGQyOWY4 Y2MuLjg0NjlhN2U5YWZlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNf aGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKQEAgLTI3 LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPGRybS9kcm1QLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY191YXBpLmg+CiAjaW5jbHVkZSA8ZHJt L2RybV9wbGFuZV9oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CiAj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2F0b21pY191YXBpLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY191YXBp LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yNjY5MGE2NjRlYzYK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY191YXBpLmMKQEAg LTAsMCArMSwxMzkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFJlZCBIYXQKKyAqIENv cHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDE4IEludGVs IENvcnAuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09Q WVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFM SU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqIFJvYiBDbGFyayA8cm9i ZGNsYXJrQGdtYWlsLmNvbT4KKyAqIERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwu Y2g+CisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX3VhcGkuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2Rydi5oPgorI2luY2x1ZGUgPGRybS9kcm1fd3JpdGViYWNrLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV92YmxhbmsuaD4KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1mZW5jZS5oPgorI2luY2x1 ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zeW5jX2ZpbGUuaD4KKyNpbmNs dWRlIDxsaW51eC9maWxlLmg+CisKKyNpbmNsdWRlICJkcm1fY3J0Y19pbnRlcm5hbC5oIgorCisv KioKKyAqIERPQzogb3ZlcnZpZXcKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG1hcnNo YWxsaW5nIGFuZCBkZW1hcnNoYWxsaW5nIGdsdWUgZm9yIHRoZSBhdG9taWMgVUFQSQorICogaW4g YWxsIGl0J3MgZm9ybTogVGhlIG1vbnN0ZXIgQVRPTUlDIElPQ1RMIGl0c2VsZiwgY29kZSBmb3Ig R0VUX1BST1BFUlRZIGFuZAorICogU0VUX1BST1BFUlRZIElPQ1Rscy4gUGx1cyBpbnRlcmZhY2Ug ZnVuY3Rpb25zIGZvciBjb21wYXRpYmlsaXR5IGhlbHBlcnMgYW5kCisgKiBkcml2ZXJzIHdoaWNo IGhhdmUgc3BlY2lhbCBuZWVkcyB0byBjb25zdHJ1Y3QgdGhlaXIgb3duIGF0b21pYyB1cGRhdGVz LCBlLmcuCisgKiBmb3IgbG9hZCBkZXRlY3Qgb3Igc2ltaWxpYXIuCisgKi8KKworLyoqCisgKiBk cm1fYXRvbWljX3NldF9tb2RlX2Zvcl9jcnRjIC0gc2V0IG1vZGUgZm9yIENSVEMKKyAqIEBzdGF0 ZTogdGhlIENSVEMgd2hvc2UgaW5jb21pbmcgc3RhdGUgdG8gdXBkYXRlCisgKiBAbW9kZToga2Vy bmVsLWludGVybmFsIG1vZGUgdG8gdXNlIGZvciB0aGUgQ1JUQywgb3IgTlVMTCB0byBkaXNhYmxl CisgKgorICogU2V0IGEgbW9kZSAob3JpZ2luYXRpbmcgZnJvbSB0aGUga2VybmVsKSBvbiB0aGUg ZGVzaXJlZCBDUlRDIHN0YXRlIGFuZCB1cGRhdGUKKyAqIHRoZSBlbmFibGUgcHJvcGVydHkuCisg KgorICogUkVUVVJOUzoKKyAqIFplcm8gb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWlsdXJl LiBDYW5ub3QgcmV0dXJuIC1FREVBRExLLgorICovCitpbnQgZHJtX2F0b21pY19zZXRfbW9kZV9m b3JfY3J0YyhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlLAorCQkJCSBjb25zdCBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0 ZS0+Y3J0YzsKKwlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gdW1vZGU7CisKKwkvKiBFYXJseSBy ZXR1cm4gZm9yIG5vIGNoYW5nZS4gKi8KKwlpZiAobW9kZSAmJiBtZW1jbXAoJnN0YXRlLT5tb2Rl LCBtb2RlLCBzaXplb2YoKm1vZGUpKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWRybV9wcm9wZXJ0 eV9ibG9iX3B1dChzdGF0ZS0+bW9kZV9ibG9iKTsKKwlzdGF0ZS0+bW9kZV9ibG9iID0gTlVMTDsK KworCWlmIChtb2RlKSB7CisJCWRybV9tb2RlX2NvbnZlcnRfdG9fdW1vZGUoJnVtb2RlLCBtb2Rl KTsKKwkJc3RhdGUtPm1vZGVfYmxvYiA9CisJCQlkcm1fcHJvcGVydHlfY3JlYXRlX2Jsb2Ioc3Rh dGUtPmNydGMtPmRldiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m KHVtb2RlKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVtb2RlKTsKKwkJ aWYgKElTX0VSUihzdGF0ZS0+bW9kZV9ibG9iKSkKKwkJCXJldHVybiBQVFJfRVJSKHN0YXRlLT5t b2RlX2Jsb2IpOworCisJCWRybV9tb2RlX2NvcHkoJnN0YXRlLT5tb2RlLCBtb2RlKTsKKwkJc3Rh dGUtPmVuYWJsZSA9IHRydWU7CisJCURSTV9ERUJVR19BVE9NSUMoIlNldCBbTU9ERTolc10gZm9y IFtDUlRDOiVkOiVzXSBzdGF0ZSAlcFxuIiwKKwkJCQkgbW9kZS0+bmFtZSwgY3J0Yy0+YmFzZS5p ZCwgY3J0Yy0+bmFtZSwgc3RhdGUpOworCX0gZWxzZSB7CisJCW1lbXNldCgmc3RhdGUtPm1vZGUs IDAsIHNpemVvZihzdGF0ZS0+bW9kZSkpOworCQlzdGF0ZS0+ZW5hYmxlID0gZmFsc2U7CisJCURS TV9ERUJVR19BVE9NSUMoIlNldCBbTk9NT0RFXSBmb3IgW0NSVEM6JWQ6JXNdIHN0YXRlICVwXG4i LAorCQkJCSBjcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lLCBzdGF0ZSk7CisJfQorCisJcmV0dXJu IDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc2V0X21vZGVfZm9yX2NydGMpOworCisv KioKKyAqIGRybV9hdG9taWNfc2V0X21vZGVfcHJvcF9mb3JfY3J0YyAtIHNldCBtb2RlIGZvciBD UlRDCisgKiBAc3RhdGU6IHRoZSBDUlRDIHdob3NlIGluY29taW5nIHN0YXRlIHRvIHVwZGF0ZQor ICogQGJsb2I6IHBvaW50ZXIgdG8gYmxvYiBwcm9wZXJ0eSB0byB1c2UgZm9yIG1vZGUKKyAqCisg KiBTZXQgYSBtb2RlIChvcmlnaW5hdGluZyBmcm9tIGEgYmxvYiBwcm9wZXJ0eSkgb24gdGhlIGRl c2lyZWQgQ1JUQyBzdGF0ZS4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGEgcmVmZXJlbmNl IG9uIHRoZSBibG9iIHByb3BlcnR5IGZvciB0aGUgQ1JUQyBzdGF0ZSwKKyAqIGFuZCByZWxlYXNl IHRoZSByZWZlcmVuY2UgaGVsZCBvbiB0aGUgc3RhdGUncyBleGlzdGluZyBtb2RlIHByb3BlcnR5 LCBpZiBhbnkKKyAqIHdhcyBzZXQuCisgKgorICogUkVUVVJOUzoKKyAqIFplcm8gb24gc3VjY2Vz cywgZXJyb3IgY29kZSBvbiBmYWlsdXJlLiBDYW5ub3QgcmV0dXJuIC1FREVBRExLLgorICovCitp bnQgZHJtX2F0b21pY19zZXRfbW9kZV9wcm9wX2Zvcl9jcnRjKHN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBk cm1fcHJvcGVydHlfYmxvYiAqYmxvYikKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0 ZS0+Y3J0YzsKKworCWlmIChibG9iID09IHN0YXRlLT5tb2RlX2Jsb2IpCisJCXJldHVybiAwOwor CisJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KHN0YXRlLT5tb2RlX2Jsb2IpOworCXN0YXRlLT5tb2Rl X2Jsb2IgPSBOVUxMOworCisJbWVtc2V0KCZzdGF0ZS0+bW9kZSwgMCwgc2l6ZW9mKHN0YXRlLT5t b2RlKSk7CisKKwlpZiAoYmxvYikgeworCQlpbnQgcmV0OworCisJCWlmIChibG9iLT5sZW5ndGgg IT0gc2l6ZW9mKHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbykpIHsKKwkJCURSTV9ERUJVR19BVE9N SUMoIltDUlRDOiVkOiVzXSBiYWQgbW9kZSBibG9iIGxlbmd0aDogJXp1XG4iLAorCQkJCQkgY3J0 Yy0+YmFzZS5pZCwgY3J0Yy0+bmFtZSwKKwkJCQkJIGJsb2ItPmxlbmd0aCk7CisJCQlyZXR1cm4g LUVJTlZBTDsKKwkJfQorCisJCXJldCA9IGRybV9tb2RlX2NvbnZlcnRfdW1vZGUoY3J0Yy0+ZGV2 LAorCQkJCQkgICAgICZzdGF0ZS0+bW9kZSwgYmxvYi0+ZGF0YSk7CisJCWlmIChyZXQpIHsKKwkJ CURSTV9ERUJVR19BVE9NSUMoIltDUlRDOiVkOiVzXSBpbnZhbGlkIG1vZGUgKHJldD0lZCwgc3Rh dHVzPSVzKTpcbiIsCisJCQkJCSBjcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lLAorCQkJCQkgcmV0 LCBkcm1fZ2V0X21vZGVfc3RhdHVzX25hbWUoc3RhdGUtPm1vZGUuc3RhdHVzKSk7CisJCQlkcm1f bW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKCZzdGF0ZS0+bW9kZSk7CisJCQlyZXR1cm4gLUVJTlZB TDsKKwkJfQorCisJCXN0YXRlLT5tb2RlX2Jsb2IgPSBkcm1fcHJvcGVydHlfYmxvYl9nZXQoYmxv Yik7CisJCXN0YXRlLT5lbmFibGUgPSB0cnVlOworCQlEUk1fREVCVUdfQVRPTUlDKCJTZXQgW01P REU6JXNdIGZvciBbQ1JUQzolZDolc10gc3RhdGUgJXBcbiIsCisJCQkJIHN0YXRlLT5tb2RlLm5h bWUsIGNydGMtPmJhc2UuaWQsIGNydGMtPm5hbWUsCisJCQkJIHN0YXRlKTsKKwl9IGVsc2Ugewor CQlzdGF0ZS0+ZW5hYmxlID0gZmFsc2U7CisJCURSTV9ERUJVR19BVE9NSUMoIlNldCBbTk9NT0RF XSBmb3IgW0NSVEM6JWQ6JXNdIHN0YXRlICVwXG4iLAorCQkJCSBjcnRjLT5iYXNlLmlkLCBjcnRj LT5uYW1lLCBzdGF0ZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9h dG9taWNfc2V0X21vZGVfcHJvcF9mb3JfY3J0Yyk7CisKKy8qKgorICogZHJtX2F0b21pY19zZXRf Y3J0Y19mb3JfcGxhbmUgLSBzZXQgY3J0YyBmb3IgcGxhbmUKKyAqIEBwbGFuZV9zdGF0ZTogdGhl IHBsYW5lIHdob3NlIGluY29taW5nIHN0YXRlIHRvIHVwZGF0ZQorICogQGNydGM6IGNydGMgdG8g dXNlIGZvciB0aGUgcGxhbmUKKyAqCisgKiBDaGFuZ2luZyB0aGUgYXNzaWduZWQgY3J0YyBmb3Ig YSBwbGFuZSByZXF1aXJlcyB1cyB0byBncmFiIHRoZSBsb2NrIGFuZCBzdGF0ZQorICogZm9yIHRo ZSBuZXcgY3J0YywgYXMgbmVlZGVkLiBUaGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUgb2YgYWxsIHRo ZXNlIGRldGFpbHMKKyAqIGJlc2lkZXMgdXBkYXRpbmcgdGhlIHBvaW50ZXIgaW4gdGhlIHN0YXRl IG9iamVjdCBpdHNlbGYuCisgKgorICogUmV0dXJuczoKKyAqIDAgb24gc3VjY2VzcyBvciBjYW4g ZmFpbCB3aXRoIC1FREVBRExLIG9yIC1FTk9NRU0uIFdoZW4gdGhlIGVycm9yIGlzIEVERUFETEsK KyAqIHRoZW4gdGhlIHcvdyBtdXRleCBjb2RlIGhhcyBkZXRlY3RlZCBhIGRlYWRsb2NrIGFuZCB0 aGUgZW50aXJlIGF0b21pYworICogc2VxdWVuY2UgbXVzdCBiZSByZXN0YXJ0ZWQuIEFsbCBvdGhl ciBlcnJvcnMgYXJlIGZhdGFsLgorICovCitpbnQKK2RybV9hdG9taWNfc2V0X2NydGNfZm9yX3Bs YW5lKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAorCQkJICAgICAgc3RydWN0 IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gcGxhbmVfc3Rh dGUtPnBsYW5lOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwkvKiBOb3Ro aW5nIHRvIGRvIGZvciBzYW1lIGNydGMqLworCWlmIChwbGFuZV9zdGF0ZS0+Y3J0YyA9PSBjcnRj KQorCQlyZXR1cm4gMDsKKwlpZiAocGxhbmVfc3RhdGUtPmNydGMpIHsKKwkJY3J0Y19zdGF0ZSA9 IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUocGxhbmVfc3RhdGUtPnN0YXRlLAorCQkJCQkJICAg ICAgIHBsYW5lX3N0YXRlLT5jcnRjKTsKKwkJaWYgKFdBUk5fT04oSVNfRVJSKGNydGNfc3RhdGUp KSkKKwkJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOworCisJCWNydGNfc3RhdGUtPnBsYW5l X21hc2sgJj0gfmRybV9wbGFuZV9tYXNrKHBsYW5lKTsKKwl9CisKKwlwbGFuZV9zdGF0ZS0+Y3J0 YyA9IGNydGM7CisKKwlpZiAoY3J0YykgeworCQljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRf Y3J0Y19zdGF0ZShwbGFuZV9zdGF0ZS0+c3RhdGUsCisJCQkJCQkgICAgICAgY3J0Yyk7CisJCWlm IChJU19FUlIoY3J0Y19zdGF0ZSkpCisJCQlyZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKKwkJ Y3J0Y19zdGF0ZS0+cGxhbmVfbWFzayB8PSBkcm1fcGxhbmVfbWFzayhwbGFuZSk7CisJfQorCisJ aWYgKGNydGMpCisJCURSTV9ERUJVR19BVE9NSUMoIkxpbmsgW1BMQU5FOiVkOiVzXSBzdGF0ZSAl cCB0byBbQ1JUQzolZDolc11cbiIsCisJCQkJIHBsYW5lLT5iYXNlLmlkLCBwbGFuZS0+bmFtZSwg cGxhbmVfc3RhdGUsCisJCQkJIGNydGMtPmJhc2UuaWQsIGNydGMtPm5hbWUpOworCWVsc2UKKwkJ RFJNX0RFQlVHX0FUT01JQygiTGluayBbUExBTkU6JWQ6JXNdIHN0YXRlICVwIHRvIFtOT0NSVENd XG4iLAorCQkJCSBwbGFuZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUsIHBsYW5lX3N0YXRlKTsKKwor CXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9wbGFu ZSk7CisKKy8qKgorICogZHJtX2F0b21pY19zZXRfZmJfZm9yX3BsYW5lIC0gc2V0IGZyYW1lYnVm ZmVyIGZvciBwbGFuZQorICogQHBsYW5lX3N0YXRlOiBhdG9taWMgc3RhdGUgb2JqZWN0IGZvciB0 aGUgcGxhbmUKKyAqIEBmYjogZmIgdG8gdXNlIGZvciB0aGUgcGxhbmUKKyAqCisgKiBDaGFuZ2lu ZyB0aGUgYXNzaWduZWQgZnJhbWVidWZmZXIgZm9yIGEgcGxhbmUgcmVxdWlyZXMgdXMgdG8gZ3Jh YiBhIHJlZmVyZW5jZQorICogdG8gdGhlIG5ldyBmYiBhbmQgZHJvcCB0aGUgcmVmZXJlbmNlIHRv IHRoZSBvbGQgZmIsIGlmIHRoZXJlIGlzIG9uZS4gVGhpcworICogZnVuY3Rpb24gdGFrZXMgY2Fy ZSBvZiBhbGwgdGhlc2UgZGV0YWlscyBiZXNpZGVzIHVwZGF0aW5nIHRoZSBwb2ludGVyIGluIHRo ZQorICogc3RhdGUgb2JqZWN0IGl0c2VsZi4KKyAqLwordm9pZAorZHJtX2F0b21pY19zZXRfZmJf Zm9yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAorCQkJICAgIHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQoreworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0g cGxhbmVfc3RhdGUtPnBsYW5lOworCisJaWYgKGZiKQorCQlEUk1fREVCVUdfQVRPTUlDKCJTZXQg W0ZCOiVkXSBmb3IgW1BMQU5FOiVkOiVzXSBzdGF0ZSAlcFxuIiwKKwkJCQkgZmItPmJhc2UuaWQs IHBsYW5lLT5iYXNlLmlkLCBwbGFuZS0+bmFtZSwKKwkJCQkgcGxhbmVfc3RhdGUpOworCWVsc2UK KwkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtOT0ZCXSBmb3IgW1BMQU5FOiVkOiVzXSBzdGF0ZSAl cFxuIiwKKwkJCQkgcGxhbmUtPmJhc2UuaWQsIHBsYW5lLT5uYW1lLCBwbGFuZV9zdGF0ZSk7CisK Kwlkcm1fZnJhbWVidWZmZXJfYXNzaWduKCZwbGFuZV9zdGF0ZS0+ZmIsIGZiKTsKK30KK0VYUE9S VF9TWU1CT0woZHJtX2F0b21pY19zZXRfZmJfZm9yX3BsYW5lKTsKKworLyoqCisgKiBkcm1fYXRv bWljX3NldF9mZW5jZV9mb3JfcGxhbmUgLSBzZXQgZmVuY2UgZm9yIHBsYW5lCisgKiBAcGxhbmVf c3RhdGU6IGF0b21pYyBzdGF0ZSBvYmplY3QgZm9yIHRoZSBwbGFuZQorICogQGZlbmNlOiBkbWFf ZmVuY2UgdG8gdXNlIGZvciB0aGUgcGxhbmUKKyAqCisgKiBIZWxwZXIgdG8gc2V0dXAgdGhlIHBs YW5lX3N0YXRlIGZlbmNlIGluIGNhc2UgaXQgaXMgbm90IHNldCB5ZXQuCisgKiBCeSB1c2luZyB0 aGlzIGRyaXZlcnMgZG9lc24ndCBuZWVkIHRvIHdvcnJ5IGlmIHRoZSB1c2VyIGNob29zZQorICog aW1wbGljaXQgb3IgZXhwbGljaXQgZmVuY2luZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwg bm90IHNldCB0aGUgZmVuY2UgdG8gdGhlIHN0YXRlIGlmIGl0IHdhcyBzZXQKKyAqIHZpYSBleHBs aWNpdCBmZW5jaW5nIGludGVyZmFjZXMgb24gdGhlIGF0b21pYyBpb2N0bC4gSW4gdGhhdCBjYXNl IGl0IHdpbGwKKyAqIGRyb3AgdGhlIHJlZmVyZW5jZSB0byB0aGUgZmVuY2UgYXMgd2UgYXJlIG5v dCBzdG9yaW5nIGl0IGFueXdoZXJlLgorICogT3RoZXJ3aXNlLCBpZiAmZHJtX3BsYW5lX3N0YXRl LmZlbmNlIGlzIG5vdCBzZXQgdGhpcyBmdW5jdGlvbiB3ZSBqdXN0IHNldCBpdAorICogd2l0aCB0 aGUgcmVjZWl2ZWQgaW1wbGljaXQgZmVuY2UuIEluIGJvdGggY2FzZXMgdGhpcyBmdW5jdGlvbiBj b25zdW1lcyBhCisgKiByZWZlcmVuY2UgZm9yIEBmZW5jZS4KKyAqCisgKiBUaGlzIHdheSBleHBs aWNpdCBmZW5jaW5nIGNhbiBiZSB1c2VkIHRvIG92ZXJydWxlIGltcGxpY2l0IGZlbmNpbmcsIHdo aWNoIGlzCisgKiBpbXBvcnRhbnQgdG8gbWFrZSBleHBsaWNpdCBmZW5jaW5nIHVzZS1jYXNlcyB3 b3JrOiBPbmUgZXhhbXBsZSBpcyB1c2luZyBvbmUKKyAqIGJ1ZmZlciBmb3IgMiBzY3JlZW5zIHdp dGggZGlmZmVyZW50IHJlZnJlc2ggcmF0ZXMuIEltcGxpY2l0IGZlbmNpbmcgd2lsbAorICogY2xh bXAgcmVuZGVyaW5nIHRvIHRoZSByZWZyZXNoIHJhdGUgb2YgdGhlIHNsb3dlciBzY3JlZW4sIHdo ZXJlYXMgZXhwbGljaXQKKyAqIGZlbmNlIGFsbG93cyAyIGluZGVwZW5kZW50IHJlbmRlciBhbmQg ZGlzcGxheSBsb29wcyBvbiBhIHNpbmdsZSBidWZmZXIuIElmIGEKKyAqIGRyaXZlciBhbGxvd3Mg b2JleXMgYm90aCBpbXBsaWNpdCBhbmQgZXhwbGljaXQgZmVuY2VzIGZvciBwbGFuZSB1cGRhdGVz LCB0aGVuCisgKiBpdCB3aWxsIGJyZWFrIGFsbCB0aGUgYmVuZWZpdHMgb2YgZXhwbGljaXQgZmVu Y2luZy4KKyAqLwordm9pZAorZHJtX2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5lKHN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAorCQkJICAgICAgIHN0cnVjdCBkbWFfZmVuY2Ug KmZlbmNlKQoreworCWlmIChwbGFuZV9zdGF0ZS0+ZmVuY2UpIHsKKwkJZG1hX2ZlbmNlX3B1dChm ZW5jZSk7CisJCXJldHVybjsKKwl9CisKKwlwbGFuZV9zdGF0ZS0+ZmVuY2UgPSBmZW5jZTsKK30K K0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5lKTsKKworLyoqCisg KiBkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0b3IgLSBzZXQgY3J0YyBmb3IgY29ubmVj dG9yCisgKiBAY29ubl9zdGF0ZTogYXRvbWljIHN0YXRlIG9iamVjdCBmb3IgdGhlIGNvbm5lY3Rv cgorICogQGNydGM6IGNydGMgdG8gdXNlIGZvciB0aGUgY29ubmVjdG9yCisgKgorICogQ2hhbmdp bmcgdGhlIGFzc2lnbmVkIGNydGMgZm9yIGEgY29ubmVjdG9yIHJlcXVpcmVzIHVzIHRvIGdyYWIg dGhlIGxvY2sgYW5kCisgKiBzdGF0ZSBmb3IgdGhlIG5ldyBjcnRjLCBhcyBuZWVkZWQuIFRoaXMg ZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiBhbGwgdGhlc2UKKyAqIGRldGFpbHMgYmVzaWRlcyB1cGRh dGluZyB0aGUgcG9pbnRlciBpbiB0aGUgc3RhdGUgb2JqZWN0IGl0c2VsZi4KKyAqCisgKiBSZXR1 cm5zOgorICogMCBvbiBzdWNjZXNzIG9yIGNhbiBmYWlsIHdpdGggLUVERUFETEsgb3IgLUVOT01F TS4gV2hlbiB0aGUgZXJyb3IgaXMgRURFQURMSworICogdGhlbiB0aGUgdy93IG11dGV4IGNvZGUg aGFzIGRldGVjdGVkIGEgZGVhZGxvY2sgYW5kIHRoZSBlbnRpcmUgYXRvbWljCisgKiBzZXF1ZW5j ZSBtdXN0IGJlIHJlc3RhcnRlZC4gQWxsIG90aGVyIGVycm9ycyBhcmUgZmF0YWwuCisgKi8KK2lu dAorZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfY29ubmVjdG9yKHN0cnVjdCBkcm1fY29ubmVjdG9y X3N0YXRlICpjb25uX3N0YXRlLAorCQkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBjb25uX3N0YXRlLT5jb25uZWN0b3I7CisJ c3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCisJaWYgKGNvbm5fc3RhdGUtPmNy dGMgPT0gY3J0YykKKwkJcmV0dXJuIDA7CisKKwlpZiAoY29ubl9zdGF0ZS0+Y3J0YykgeworCQlj cnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoY29ubl9zdGF0ZS0+c3Rh dGUsCisJCQkJCQkJICAgY29ubl9zdGF0ZS0+Y3J0Yyk7CisKKwkJY3J0Y19zdGF0ZS0+Y29ubmVj dG9yX21hc2sgJj0KKwkJCX5kcm1fY29ubmVjdG9yX21hc2soY29ubl9zdGF0ZS0+Y29ubmVjdG9y KTsKKworCQlkcm1fY29ubmVjdG9yX3B1dChjb25uX3N0YXRlLT5jb25uZWN0b3IpOworCQljb25u X3N0YXRlLT5jcnRjID0gTlVMTDsKKwl9CisKKwlpZiAoY3J0YykgeworCQljcnRjX3N0YXRlID0g ZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShjb25uX3N0YXRlLT5zdGF0ZSwgY3J0Yyk7CisJCWlm IChJU19FUlIoY3J0Y19zdGF0ZSkpCisJCQlyZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKKwor CQljcnRjX3N0YXRlLT5jb25uZWN0b3JfbWFzayB8PQorCQkJZHJtX2Nvbm5lY3Rvcl9tYXNrKGNv bm5fc3RhdGUtPmNvbm5lY3Rvcik7CisKKwkJZHJtX2Nvbm5lY3Rvcl9nZXQoY29ubl9zdGF0ZS0+ Y29ubmVjdG9yKTsKKwkJY29ubl9zdGF0ZS0+Y3J0YyA9IGNydGM7CisKKwkJRFJNX0RFQlVHX0FU T01JQygiTGluayBbQ09OTkVDVE9SOiVkOiVzXSBzdGF0ZSAlcCB0byBbQ1JUQzolZDolc11cbiIs CisJCQkJIGNvbm5lY3Rvci0+YmFzZS5pZCwgY29ubmVjdG9yLT5uYW1lLAorCQkJCSBjb25uX3N0 YXRlLCBjcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lKTsKKwl9IGVsc2UgeworCQlEUk1fREVCVUdf QVRPTUlDKCJMaW5rIFtDT05ORUNUT1I6JWQ6JXNdIHN0YXRlICVwIHRvIFtOT0NSVENdXG4iLAor CQkJCSBjb25uZWN0b3ItPmJhc2UuaWQsIGNvbm5lY3Rvci0+bmFtZSwKKwkJCQkgY29ubl9zdGF0 ZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc2V0X2Ny dGNfZm9yX2Nvbm5lY3Rvcik7CisKK3N0YXRpYyB2b2lkIHNldF9vdXRfZmVuY2VfZm9yX2NydGMo c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJCSAgIHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywgczMyIF9fdXNlciAqZmVuY2VfcHRyKQoreworCXN0YXRlLT5jcnRjc1tkcm1fY3J0Y19p bmRleChjcnRjKV0ub3V0X2ZlbmNlX3B0ciA9IGZlbmNlX3B0cjsKK30KKworc3RhdGljIHMzMiBf X3VzZXIgKmdldF9vdXRfZmVuY2VfZm9yX2NydGMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlLAorCQkJCQkgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzMzIgX191c2VyICpmZW5j ZV9wdHI7CisKKwlmZW5jZV9wdHIgPSBzdGF0ZS0+Y3J0Y3NbZHJtX2NydGNfaW5kZXgoY3J0Yyld Lm91dF9mZW5jZV9wdHI7CisJc3RhdGUtPmNydGNzW2RybV9jcnRjX2luZGV4KGNydGMpXS5vdXRf ZmVuY2VfcHRyID0gTlVMTDsKKworCXJldHVybiBmZW5jZV9wdHI7Cit9CisKK3N0YXRpYyBpbnQg c2V0X291dF9mZW5jZV9mb3JfY29ubmVjdG9yKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwKKwkJCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkJczMyIF9fdXNl ciAqZmVuY2VfcHRyKQoreworCXVuc2lnbmVkIGludCBpbmRleCA9IGRybV9jb25uZWN0b3JfaW5k ZXgoY29ubmVjdG9yKTsKKworCWlmICghZmVuY2VfcHRyKQorCQlyZXR1cm4gMDsKKworCWlmIChw dXRfdXNlcigtMSwgZmVuY2VfcHRyKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzdGF0ZS0+Y29u bmVjdG9yc1tpbmRleF0ub3V0X2ZlbmNlX3B0ciA9IGZlbmNlX3B0cjsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgczMyIF9fdXNlciAqZ2V0X291dF9mZW5jZV9mb3JfY29ubmVjdG9yKHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IpCit7CisJdW5zaWduZWQgaW50IGluZGV4ID0gZHJtX2Nvbm5lY3Rvcl9p bmRleChjb25uZWN0b3IpOworCXMzMiBfX3VzZXIgKmZlbmNlX3B0cjsKKworCWZlbmNlX3B0ciA9 IHN0YXRlLT5jb25uZWN0b3JzW2luZGV4XS5vdXRfZmVuY2VfcHRyOworCXN0YXRlLT5jb25uZWN0 b3JzW2luZGV4XS5vdXRfZmVuY2VfcHRyID0gTlVMTDsKKworCXJldHVybiBmZW5jZV9wdHI7Cit9 CisKK3N0YXRpYyBpbnQKK2RybV9hdG9taWNfcmVwbGFjZV9wcm9wZXJ0eV9ibG9iX2Zyb21faWQo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAq KmJsb2IsCisJCQkJCSB1aW50NjRfdCBibG9iX2lkLAorCQkJCQkgc3NpemVfdCBleHBlY3RlZF9z aXplLAorCQkJCQkgc3NpemVfdCBleHBlY3RlZF9lbGVtX3NpemUsCisJCQkJCSBib29sICpyZXBs YWNlZCkKK3sKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKm5ld19ibG9iID0gTlVMTDsKKwor CWlmIChibG9iX2lkICE9IDApIHsKKwkJbmV3X2Jsb2IgPSBkcm1fcHJvcGVydHlfbG9va3VwX2Js b2IoZGV2LCBibG9iX2lkKTsKKwkJaWYgKG5ld19ibG9iID09IE5VTEwpCisJCQlyZXR1cm4gLUVJ TlZBTDsKKworCQlpZiAoZXhwZWN0ZWRfc2l6ZSA+IDAgJiYKKwkJICAgIG5ld19ibG9iLT5sZW5n dGggIT0gZXhwZWN0ZWRfc2l6ZSkgeworCQkJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KG5ld19ibG9i KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChleHBlY3RlZF9lbGVtX3NpemUgPiAw ICYmCisJCSAgICBuZXdfYmxvYi0+bGVuZ3RoICUgZXhwZWN0ZWRfZWxlbV9zaXplICE9IDApIHsK KwkJCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChuZXdfYmxvYik7CisJCQlyZXR1cm4gLUVJTlZBTDsK KwkJfQorCX0KKworCSpyZXBsYWNlZCB8PSBkcm1fcHJvcGVydHlfcmVwbGFjZV9ibG9iKGJsb2Is IG5ld19ibG9iKTsKKwlkcm1fcHJvcGVydHlfYmxvYl9wdXQobmV3X2Jsb2IpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgZHJtX2F0b21pY19jcnRjX3NldF9wcm9wZXJ0eShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCisJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsIHN0cnVjdCBk cm1fcHJvcGVydHkgKnByb3BlcnR5LAorCQl1aW50NjRfdCB2YWwpCit7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcg PSAmZGV2LT5tb2RlX2NvbmZpZzsKKwlib29sIHJlcGxhY2VkID0gZmFsc2U7CisJaW50IHJldDsK KworCWlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfYWN0aXZlKQorCQlzdGF0ZS0+YWN0aXZl ID0gdmFsOworCWVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9tb2RlX2lkKSB7CisJ CXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqbW9kZSA9CisJCQlkcm1fcHJvcGVydHlfbG9va3Vw X2Jsb2IoZGV2LCB2YWwpOworCQlyZXQgPSBkcm1fYXRvbWljX3NldF9tb2RlX3Byb3BfZm9yX2Ny dGMoc3RhdGUsIG1vZGUpOworCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQobW9kZSk7CisJCXJldHVy biByZXQ7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmRlZ2FtbWFfbHV0X3Byb3Bl cnR5KSB7CisJCXJldCA9IGRybV9hdG9taWNfcmVwbGFjZV9wcm9wZXJ0eV9ibG9iX2Zyb21faWQo ZGV2LAorCQkJCQkmc3RhdGUtPmRlZ2FtbWFfbHV0LAorCQkJCQl2YWwsCisJCQkJCS0xLCBzaXpl b2Yoc3RydWN0IGRybV9jb2xvcl9sdXQpLAorCQkJCQkmcmVwbGFjZWQpOworCQlzdGF0ZS0+Y29s b3JfbWdtdF9jaGFuZ2VkIHw9IHJlcGxhY2VkOworCQlyZXR1cm4gcmV0OworCX0gZWxzZSBpZiAo cHJvcGVydHkgPT0gY29uZmlnLT5jdG1fcHJvcGVydHkpIHsKKwkJcmV0ID0gZHJtX2F0b21pY19y ZXBsYWNlX3Byb3BlcnR5X2Jsb2JfZnJvbV9pZChkZXYsCisJCQkJCSZzdGF0ZS0+Y3RtLAorCQkJ CQl2YWwsCisJCQkJCXNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2N0bSksIC0xLAorCQkJCQkmcmVw bGFjZWQpOworCQlzdGF0ZS0+Y29sb3JfbWdtdF9jaGFuZ2VkIHw9IHJlcGxhY2VkOworCQlyZXR1 cm4gcmV0OworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5nYW1tYV9sdXRfcHJvcGVy dHkpIHsKKwkJcmV0ID0gZHJtX2F0b21pY19yZXBsYWNlX3Byb3BlcnR5X2Jsb2JfZnJvbV9pZChk ZXYsCisJCQkJCSZzdGF0ZS0+Z2FtbWFfbHV0LAorCQkJCQl2YWwsCisJCQkJCS0xLCBzaXplb2Yo c3RydWN0IGRybV9jb2xvcl9sdXQpLAorCQkJCQkmcmVwbGFjZWQpOworCQlzdGF0ZS0+Y29sb3Jf bWdtdF9jaGFuZ2VkIHw9IHJlcGxhY2VkOworCQlyZXR1cm4gcmV0OworCX0gZWxzZSBpZiAocHJv cGVydHkgPT0gY29uZmlnLT5wcm9wX291dF9mZW5jZV9wdHIpIHsKKwkJczMyIF9fdXNlciAqZmVu Y2VfcHRyID0gdTY0X3RvX3VzZXJfcHRyKHZhbCk7CisKKwkJaWYgKCFmZW5jZV9wdHIpCisJCQly ZXR1cm4gMDsKKworCQlpZiAocHV0X3VzZXIoLTEsIGZlbmNlX3B0cikpCisJCQlyZXR1cm4gLUVG QVVMVDsKKworCQlzZXRfb3V0X2ZlbmNlX2Zvcl9jcnRjKHN0YXRlLT5zdGF0ZSwgY3J0YywgZmVu Y2VfcHRyKTsKKwl9IGVsc2UgaWYgKGNydGMtPmZ1bmNzLT5hdG9taWNfc2V0X3Byb3BlcnR5KSB7 CisJCXJldHVybiBjcnRjLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0eShjcnRjLCBzdGF0ZSwg cHJvcGVydHksIHZhbCk7CisJfSBlbHNlIHsKKwkJRFJNX0RFQlVHX0FUT01JQygiW0NSVEM6JWQ6 JXNdIHVua25vd24gcHJvcGVydHkgW1BST1A6JWQ6JXNdXVxuIiwKKwkJCQkgY3J0Yy0+YmFzZS5p ZCwgY3J0Yy0+bmFtZSwKKwkJCQkgcHJvcGVydHktPmJhc2UuaWQsIHByb3BlcnR5LT5uYW1lKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Ry bV9hdG9taWNfY3J0Y19nZXRfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQljb25z dCBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlLAorCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpw cm9wZXJ0eSwgdWludDY0X3QgKnZhbCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0 Yy0+ZGV2OworCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZkZXYtPm1vZGVfY29u ZmlnOworCisJaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9hY3RpdmUpCisJCSp2YWwgPSBz dGF0ZS0+YWN0aXZlOworCWVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9tb2RlX2lk KQorCQkqdmFsID0gKHN0YXRlLT5tb2RlX2Jsb2IpID8gc3RhdGUtPm1vZGVfYmxvYi0+YmFzZS5p ZCA6IDA7CisJZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5kZWdhbW1hX2x1dF9wcm9wZXJ0 eSkKKwkJKnZhbCA9IChzdGF0ZS0+ZGVnYW1tYV9sdXQpID8gc3RhdGUtPmRlZ2FtbWFfbHV0LT5i YXNlLmlkIDogMDsKKwllbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmN0bV9wcm9wZXJ0eSkK KwkJKnZhbCA9IChzdGF0ZS0+Y3RtKSA/IHN0YXRlLT5jdG0tPmJhc2UuaWQgOiAwOworCWVsc2Ug aWYgKHByb3BlcnR5ID09IGNvbmZpZy0+Z2FtbWFfbHV0X3Byb3BlcnR5KQorCQkqdmFsID0gKHN0 YXRlLT5nYW1tYV9sdXQpID8gc3RhdGUtPmdhbW1hX2x1dC0+YmFzZS5pZCA6IDA7CisJZWxzZSBp ZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX291dF9mZW5jZV9wdHIpCisJCSp2YWwgPSAwOwor CWVsc2UgaWYgKGNydGMtPmZ1bmNzLT5hdG9taWNfZ2V0X3Byb3BlcnR5KQorCQlyZXR1cm4gY3J0 Yy0+ZnVuY3MtPmF0b21pY19nZXRfcHJvcGVydHkoY3J0Yywgc3RhdGUsIHByb3BlcnR5LCB2YWwp OworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBkcm1fYXRvbWljX3BsYW5lX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK KwkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBkcm1fcHJvcGVydHkgKnBy b3BlcnR5LAorCQl1aW50NjRfdCB2YWwpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBs YW5lLT5kZXY7CisJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJmRldi0+bW9kZV9j b25maWc7CisKKwlpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2ZiX2lkKSB7CisJCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiID0gZHJtX2ZyYW1lYnVmZmVyX2xvb2t1cChkZXYsIE5VTEws IHZhbCk7CisJCWRybV9hdG9taWNfc2V0X2ZiX2Zvcl9wbGFuZShzdGF0ZSwgZmIpOworCQlpZiAo ZmIpCisJCQlkcm1fZnJhbWVidWZmZXJfcHV0KGZiKTsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09 IGNvbmZpZy0+cHJvcF9pbl9mZW5jZV9mZCkgeworCQlpZiAoc3RhdGUtPmZlbmNlKQorCQkJcmV0 dXJuIC1FSU5WQUw7CisKKwkJaWYgKFU2NDJJNjQodmFsKSA9PSAtMSkKKwkJCXJldHVybiAwOwor CisJCXN0YXRlLT5mZW5jZSA9IHN5bmNfZmlsZV9nZXRfZmVuY2UodmFsKTsKKwkJaWYgKCFzdGF0 ZS0+ZmVuY2UpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0g Y29uZmlnLT5wcm9wX2NydGNfaWQpIHsKKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gZHJtX2Ny dGNfZmluZChkZXYsIE5VTEwsIHZhbCk7CisJCXJldHVybiBkcm1fYXRvbWljX3NldF9jcnRjX2Zv cl9wbGFuZShzdGF0ZSwgY3J0Yyk7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnBy b3BfY3J0Y194KSB7CisJCXN0YXRlLT5jcnRjX3ggPSBVNjQySTY0KHZhbCk7CisJfSBlbHNlIGlm IChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfY3J0Y195KSB7CisJCXN0YXRlLT5jcnRjX3kgPSBV NjQySTY0KHZhbCk7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfY3J0Y193 KSB7CisJCXN0YXRlLT5jcnRjX3cgPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25m aWctPnByb3BfY3J0Y19oKSB7CisJCXN0YXRlLT5jcnRjX2ggPSB2YWw7CisJfSBlbHNlIGlmIChw cm9wZXJ0eSA9PSBjb25maWctPnByb3Bfc3JjX3gpIHsKKwkJc3RhdGUtPnNyY194ID0gdmFsOwor CX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX3NyY195KSB7CisJCXN0YXRlLT5z cmNfeSA9IHZhbDsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9zcmNfdykg eworCQlzdGF0ZS0+c3JjX3cgPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWct PnByb3Bfc3JjX2gpIHsKKwkJc3RhdGUtPnNyY19oID0gdmFsOworCX0gZWxzZSBpZiAocHJvcGVy dHkgPT0gcGxhbmUtPmFscGhhX3Byb3BlcnR5KSB7CisJCXN0YXRlLT5hbHBoYSA9IHZhbDsKKwl9 IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT5ibGVuZF9tb2RlX3Byb3BlcnR5KSB7CisJCXN0 YXRlLT5waXhlbF9ibGVuZF9tb2RlID0gdmFsOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxh bmUtPnJvdGF0aW9uX3Byb3BlcnR5KSB7CisJCWlmICghaXNfcG93ZXJfb2ZfMih2YWwgJiBEUk1f TU9ERV9ST1RBVEVfTUFTSykpIHsKKwkJCURSTV9ERUJVR19BVE9NSUMoIltQTEFORTolZDolc10g YmFkIHJvdGF0aW9uIGJpdG1hc2s6IDB4JWxseFxuIiwKKwkJCQkJIHBsYW5lLT5iYXNlLmlkLCBw bGFuZS0+bmFtZSwgdmFsKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXN0YXRlLT5yb3Rh dGlvbiA9IHZhbDsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT56cG9zX3Byb3BlcnR5 KSB7CisJCXN0YXRlLT56cG9zID0gdmFsOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUt PmNvbG9yX2VuY29kaW5nX3Byb3BlcnR5KSB7CisJCXN0YXRlLT5jb2xvcl9lbmNvZGluZyA9IHZh bDsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT5jb2xvcl9yYW5nZV9wcm9wZXJ0eSkg eworCQlzdGF0ZS0+Y29sb3JfcmFuZ2UgPSB2YWw7CisJfSBlbHNlIGlmIChwbGFuZS0+ZnVuY3Mt PmF0b21pY19zZXRfcHJvcGVydHkpIHsKKwkJcmV0dXJuIHBsYW5lLT5mdW5jcy0+YXRvbWljX3Nl dF9wcm9wZXJ0eShwbGFuZSwgc3RhdGUsCisJCQkJcHJvcGVydHksIHZhbCk7CisJfSBlbHNlIHsK KwkJRFJNX0RFQlVHX0FUT01JQygiW1BMQU5FOiVkOiVzXSB1bmtub3duIHByb3BlcnR5IFtQUk9Q OiVkOiVzXV1cbiIsCisJCQkJIHBsYW5lLT5iYXNlLmlkLCBwbGFuZS0+bmFtZSwKKwkJCQkgcHJv cGVydHktPmJhc2UuaWQsIHByb3BlcnR5LT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2RybV9hdG9taWNfcGxhbmVfZ2V0X3Byb3Bl cnR5KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpzdGF0ZSwKKwkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksIHVpbnQ2NF90ICp2 YWwpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBsYW5lLT5kZXY7CisJc3RydWN0IGRy bV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7CisKKwlpZiAocHJvcGVy dHkgPT0gY29uZmlnLT5wcm9wX2ZiX2lkKSB7CisJCSp2YWwgPSAoc3RhdGUtPmZiKSA/IHN0YXRl LT5mYi0+YmFzZS5pZCA6IDA7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3Bf aW5fZmVuY2VfZmQpIHsKKwkJKnZhbCA9IC0xOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29u ZmlnLT5wcm9wX2NydGNfaWQpIHsKKwkJKnZhbCA9IChzdGF0ZS0+Y3J0YykgPyBzdGF0ZS0+Y3J0 Yy0+YmFzZS5pZCA6IDA7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfY3J0 Y194KSB7CisJCSp2YWwgPSBJNjQyVTY0KHN0YXRlLT5jcnRjX3gpOworCX0gZWxzZSBpZiAocHJv cGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNfeSkgeworCQkqdmFsID0gSTY0MlU2NChzdGF0ZS0+ Y3J0Y195KTsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9jcnRjX3cpIHsK KwkJKnZhbCA9IHN0YXRlLT5jcnRjX3c7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWct PnByb3BfY3J0Y19oKSB7CisJCSp2YWwgPSBzdGF0ZS0+Y3J0Y19oOworCX0gZWxzZSBpZiAocHJv cGVydHkgPT0gY29uZmlnLT5wcm9wX3NyY194KSB7CisJCSp2YWwgPSBzdGF0ZS0+c3JjX3g7CisJ fSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3Bfc3JjX3kpIHsKKwkJKnZhbCA9IHN0 YXRlLT5zcmNfeTsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9zcmNfdykg eworCQkqdmFsID0gc3RhdGUtPnNyY193OworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmln LT5wcm9wX3NyY19oKSB7CisJCSp2YWwgPSBzdGF0ZS0+c3JjX2g7CisJfSBlbHNlIGlmIChwcm9w ZXJ0eSA9PSBwbGFuZS0+YWxwaGFfcHJvcGVydHkpIHsKKwkJKnZhbCA9IHN0YXRlLT5hbHBoYTsK Kwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT5ibGVuZF9tb2RlX3Byb3BlcnR5KSB7CisJ CSp2YWwgPSBzdGF0ZS0+cGl4ZWxfYmxlbmRfbW9kZTsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09 IHBsYW5lLT5yb3RhdGlvbl9wcm9wZXJ0eSkgeworCQkqdmFsID0gc3RhdGUtPnJvdGF0aW9uOwor CX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPnpwb3NfcHJvcGVydHkpIHsKKwkJKnZhbCA9 IHN0YXRlLT56cG9zOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPmNvbG9yX2VuY29k aW5nX3Byb3BlcnR5KSB7CisJCSp2YWwgPSBzdGF0ZS0+Y29sb3JfZW5jb2Rpbmc7CisJfSBlbHNl IGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+Y29sb3JfcmFuZ2VfcHJvcGVydHkpIHsKKwkJKnZhbCA9 IHN0YXRlLT5jb2xvcl9yYW5nZTsKKwl9IGVsc2UgaWYgKHBsYW5lLT5mdW5jcy0+YXRvbWljX2dl dF9wcm9wZXJ0eSkgeworCQlyZXR1cm4gcGxhbmUtPmZ1bmNzLT5hdG9taWNfZ2V0X3Byb3BlcnR5 KHBsYW5lLCBzdGF0ZSwgcHJvcGVydHksIHZhbCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3dyaXRlYmFja19q b2IgKgorZHJtX2F0b21pY19nZXRfd3JpdGViYWNrX2pvYihzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z dGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlXQVJOX09OKGNvbm5fc3RhdGUtPmNvbm5lY3Rvci0+Y29u bmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX1dSSVRFQkFDSyk7CisKKwlpZiAoIWNv bm5fc3RhdGUtPndyaXRlYmFja19qb2IpCisJCWNvbm5fc3RhdGUtPndyaXRlYmFja19qb2IgPQor CQkJa3phbGxvYyhzaXplb2YoKmNvbm5fc3RhdGUtPndyaXRlYmFja19qb2IpLCBHRlBfS0VSTkVM KTsKKworCXJldHVybiBjb25uX3N0YXRlLT53cml0ZWJhY2tfam9iOworfQorCitzdGF0aWMgaW50 IGRybV9hdG9taWNfc2V0X3dyaXRlYmFja19mYl9mb3JfY29ubmVjdG9yKAorCQlzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSwKKwkJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIpCit7CisJc3RydWN0IGRybV93cml0ZWJhY2tfam9iICpqb2IgPQorCQlkcm1fYXRvbWljX2dl dF93cml0ZWJhY2tfam9iKGNvbm5fc3RhdGUpOworCWlmICgham9iKQorCQlyZXR1cm4gLUVOT01F TTsKKworCWRybV9mcmFtZWJ1ZmZlcl9hc3NpZ24oJmpvYi0+ZmIsIGZiKTsKKworCWlmIChmYikK KwkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtGQjolZF0gZm9yIGNvbm5lY3RvciBzdGF0ZSAlcFxu IiwKKwkJCQkgZmItPmJhc2UuaWQsIGNvbm5fc3RhdGUpOworCWVsc2UKKwkJRFJNX0RFQlVHX0FU T01JQygiU2V0IFtOT0ZCXSBmb3IgY29ubmVjdG9yIHN0YXRlICVwXG4iLAorCQkJCSBjb25uX3N0 YXRlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRybV9hdG9taWNfY29ubmVjdG9y X3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQlzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5 LAorCQl1aW50NjRfdCB2YWwpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rv ci0+ZGV2OworCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZkZXYtPm1vZGVfY29u ZmlnOworCisJaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9jcnRjX2lkKSB7CisJCXN0cnVj dCBkcm1fY3J0YyAqY3J0YyA9IGRybV9jcnRjX2ZpbmQoZGV2LCBOVUxMLCB2YWwpOworCQlyZXR1 cm4gZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfY29ubmVjdG9yKHN0YXRlLCBjcnRjKTsKKwl9IGVs c2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+ZHBtc19wcm9wZXJ0eSkgeworCQkvKiBzZXR0aW5n IERQTVMgcHJvcGVydHkgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZywgd2hpY2gKKwkJICogaXMg ZG9uZSBpbiBsZWdhY3kgc2V0cHJvcCBwYXRoIGZvciB1cy4gIERpc2FsbG93IChmb3IKKwkJICog bm93PykgYXRvbWljIHdyaXRlcyB0byBEUE1TIHByb3BlcnR5OgorCQkgKi8KKwkJcmV0dXJuIC1F SU5WQUw7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X3NlbGVjdF9zdWJjb25u ZWN0b3JfcHJvcGVydHkpIHsKKwkJc3RhdGUtPnR2LnN1YmNvbm5lY3RvciA9IHZhbDsKKwl9IGVs c2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfbGVmdF9tYXJnaW5fcHJvcGVydHkpIHsKKwkJ c3RhdGUtPnR2Lm1hcmdpbnMubGVmdCA9IHZhbDsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNv bmZpZy0+dHZfcmlnaHRfbWFyZ2luX3Byb3BlcnR5KSB7CisJCXN0YXRlLT50di5tYXJnaW5zLnJp Z2h0ID0gdmFsOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl90b3BfbWFyZ2lu X3Byb3BlcnR5KSB7CisJCXN0YXRlLT50di5tYXJnaW5zLnRvcCA9IHZhbDsKKwl9IGVsc2UgaWYg KHByb3BlcnR5ID09IGNvbmZpZy0+dHZfYm90dG9tX21hcmdpbl9wcm9wZXJ0eSkgeworCQlzdGF0 ZS0+dHYubWFyZ2lucy5ib3R0b20gPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25m aWctPnR2X21vZGVfcHJvcGVydHkpIHsKKwkJc3RhdGUtPnR2Lm1vZGUgPSB2YWw7CisJfSBlbHNl IGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2JyaWdodG5lc3NfcHJvcGVydHkpIHsKKwkJc3Rh dGUtPnR2LmJyaWdodG5lc3MgPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWct PnR2X2NvbnRyYXN0X3Byb3BlcnR5KSB7CisJCXN0YXRlLT50di5jb250cmFzdCA9IHZhbDsKKwl9 IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfZmxpY2tlcl9yZWR1Y3Rpb25fcHJvcGVy dHkpIHsKKwkJc3RhdGUtPnR2LmZsaWNrZXJfcmVkdWN0aW9uID0gdmFsOworCX0gZWxzZSBpZiAo cHJvcGVydHkgPT0gY29uZmlnLT50dl9vdmVyc2Nhbl9wcm9wZXJ0eSkgeworCQlzdGF0ZS0+dHYu b3ZlcnNjYW4gPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X3NhdHVy YXRpb25fcHJvcGVydHkpIHsKKwkJc3RhdGUtPnR2LnNhdHVyYXRpb24gPSB2YWw7CisJfSBlbHNl IGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2h1ZV9wcm9wZXJ0eSkgeworCQlzdGF0ZS0+dHYu aHVlID0gdmFsOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5saW5rX3N0YXR1c19w cm9wZXJ0eSkgeworCQkvKiBOZXZlciBkb3duZ3JhZGUgZnJvbSBHT09EIHRvIEJBRCBvbiB1c2Vy c3BhY2UncyByZXF1ZXN0IGhlcmUsCisJCSAqIG9ubHkgaHcgaXNzdWVzIGNhbiBkbyB0aGF0Lgor CQkgKgorCQkgKiBGb3IgYW4gYXRvbWljIHByb3BlcnR5IHRoZSB1c2Vyc3BhY2UgZG9lc24ndCBu ZWVkIHRvIGJlIGFibGUKKwkJICogdG8gdW5kZXJzdGFuZCBhbGwgdGhlIHByb3BlcnRpZXMsIGJ1 dCBuZWVkcyB0byBiZSBhYmxlIHRvCisJCSAqIHJlc3RvcmUgdGhlIHN0YXRlIGl0IHdhbnRzIG9u IFZUIHN3aXRjaC4gU28gaWYgdGhlIHVzZXJzcGFjZQorCQkgKiB0cmllcyB0byBjaGFuZ2UgdGhl IGxpbmtfc3RhdHVzIGZyb20gR09PRCB0byBCQUQsIGRyaXZlcgorCQkgKiBzaWxlbnRseSByZWpl Y3RzIGl0IGFuZCByZXR1cm5zIGEgMC4gVGhpcyBwcmV2ZW50cyB1c2Vyc3BhY2UKKwkJICogZnJv bSBhY2NpZGVudGx5IGJyZWFraW5nICB0aGUgZGlzcGxheSB3aGVuIGl0IHJlc3RvcmVzIHRoZQor CQkgKiBzdGF0ZS4KKwkJICovCisJCWlmIChzdGF0ZS0+bGlua19zdGF0dXMgIT0gRFJNX0xJTktf U1RBVFVTX0dPT0QpCisJCQlzdGF0ZS0+bGlua19zdGF0dXMgPSB2YWw7CisJfSBlbHNlIGlmIChw cm9wZXJ0eSA9PSBjb25maWctPmFzcGVjdF9yYXRpb19wcm9wZXJ0eSkgeworCQlzdGF0ZS0+cGlj dHVyZV9hc3BlY3RfcmF0aW8gPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWct PmNvbnRlbnRfdHlwZV9wcm9wZXJ0eSkgeworCQlzdGF0ZS0+Y29udGVudF90eXBlID0gdmFsOwor CX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29ubmVjdG9yLT5zY2FsaW5nX21vZGVfcHJvcGVydHkp IHsKKwkJc3RhdGUtPnNjYWxpbmdfbW9kZSA9IHZhbDsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09 IGNvbm5lY3Rvci0+Y29udGVudF9wcm90ZWN0aW9uX3Byb3BlcnR5KSB7CisJCWlmICh2YWwgPT0g RFJNX01PREVfQ09OVEVOVF9QUk9URUNUSU9OX0VOQUJMRUQpIHsKKwkJCURSTV9ERUJVR19LTVMo Im9ubHkgZHJpdmVycyBjYW4gc2V0IENQIEVuYWJsZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7 CisJCX0KKwkJc3RhdGUtPmNvbnRlbnRfcHJvdGVjdGlvbiA9IHZhbDsKKwl9IGVsc2UgaWYgKHBy b3BlcnR5ID09IGNvbmZpZy0+d3JpdGViYWNrX2ZiX2lkX3Byb3BlcnR5KSB7CisJCXN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiID0gZHJtX2ZyYW1lYnVmZmVyX2xvb2t1cChkZXYsIE5VTEwsIHZh bCk7CisJCWludCByZXQgPSBkcm1fYXRvbWljX3NldF93cml0ZWJhY2tfZmJfZm9yX2Nvbm5lY3Rv cihzdGF0ZSwgZmIpOworCQlpZiAoZmIpCisJCQlkcm1fZnJhbWVidWZmZXJfcHV0KGZiKTsKKwkJ cmV0dXJuIHJldDsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+d3JpdGViYWNrX291 dF9mZW5jZV9wdHJfcHJvcGVydHkpIHsKKwkJczMyIF9fdXNlciAqZmVuY2VfcHRyID0gdTY0X3Rv X3VzZXJfcHRyKHZhbCk7CisKKwkJcmV0dXJuIHNldF9vdXRfZmVuY2VfZm9yX2Nvbm5lY3Rvcihz dGF0ZS0+c3RhdGUsIGNvbm5lY3RvciwKKwkJCQkJCSAgIGZlbmNlX3B0cik7CisJfSBlbHNlIGlm IChjb25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfc2V0X3Byb3BlcnR5KSB7CisJCXJldHVybiBjb25u ZWN0b3ItPmZ1bmNzLT5hdG9taWNfc2V0X3Byb3BlcnR5KGNvbm5lY3RvciwKKwkJCQlzdGF0ZSwg cHJvcGVydHksIHZhbCk7CisJfSBlbHNlIHsKKwkJRFJNX0RFQlVHX0FUT01JQygiW0NPTk5FQ1RP UjolZDolc10gdW5rbm93biBwcm9wZXJ0eSBbUFJPUDolZDolc11dXG4iLAorCQkJCSBjb25uZWN0 b3ItPmJhc2UuaWQsIGNvbm5lY3Rvci0+bmFtZSwKKwkJCQkgcHJvcGVydHktPmJhc2UuaWQsIHBy b3BlcnR5LT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQKK2RybV9hdG9taWNfY29ubmVjdG9yX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQljb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0 ZSAqc3RhdGUsCisJCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRfdCAqdmFs KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3Qg ZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKKworCWlmIChwcm9w ZXJ0eSA9PSBjb25maWctPnByb3BfY3J0Y19pZCkgeworCQkqdmFsID0gKHN0YXRlLT5jcnRjKSA/ IHN0YXRlLT5jcnRjLT5iYXNlLmlkIDogMDsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZp Zy0+ZHBtc19wcm9wZXJ0eSkgeworCQkqdmFsID0gY29ubmVjdG9yLT5kcG1zOworCX0gZWxzZSBp ZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9zZWxlY3Rfc3ViY29ubmVjdG9yX3Byb3BlcnR5KSB7 CisJCSp2YWwgPSBzdGF0ZS0+dHYuc3ViY29ubmVjdG9yOworCX0gZWxzZSBpZiAocHJvcGVydHkg PT0gY29uZmlnLT50dl9sZWZ0X21hcmdpbl9wcm9wZXJ0eSkgeworCQkqdmFsID0gc3RhdGUtPnR2 Lm1hcmdpbnMubGVmdDsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfcmlnaHRf bWFyZ2luX3Byb3BlcnR5KSB7CisJCSp2YWwgPSBzdGF0ZS0+dHYubWFyZ2lucy5yaWdodDsKKwl9 IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfdG9wX21hcmdpbl9wcm9wZXJ0eSkgewor CQkqdmFsID0gc3RhdGUtPnR2Lm1hcmdpbnMudG9wOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0g Y29uZmlnLT50dl9ib3R0b21fbWFyZ2luX3Byb3BlcnR5KSB7CisJCSp2YWwgPSBzdGF0ZS0+dHYu bWFyZ2lucy5ib3R0b207CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X21vZGVf cHJvcGVydHkpIHsKKwkJKnZhbCA9IHN0YXRlLT50di5tb2RlOworCX0gZWxzZSBpZiAocHJvcGVy dHkgPT0gY29uZmlnLT50dl9icmlnaHRuZXNzX3Byb3BlcnR5KSB7CisJCSp2YWwgPSBzdGF0ZS0+ dHYuYnJpZ2h0bmVzczsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfY29udHJh c3RfcHJvcGVydHkpIHsKKwkJKnZhbCA9IHN0YXRlLT50di5jb250cmFzdDsKKwl9IGVsc2UgaWYg KHByb3BlcnR5ID09IGNvbmZpZy0+dHZfZmxpY2tlcl9yZWR1Y3Rpb25fcHJvcGVydHkpIHsKKwkJ KnZhbCA9IHN0YXRlLT50di5mbGlja2VyX3JlZHVjdGlvbjsKKwl9IGVsc2UgaWYgKHByb3BlcnR5 ID09IGNvbmZpZy0+dHZfb3ZlcnNjYW5fcHJvcGVydHkpIHsKKwkJKnZhbCA9IHN0YXRlLT50di5v dmVyc2NhbjsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfc2F0dXJhdGlvbl9w cm9wZXJ0eSkgeworCQkqdmFsID0gc3RhdGUtPnR2LnNhdHVyYXRpb247CisJfSBlbHNlIGlmIChw cm9wZXJ0eSA9PSBjb25maWctPnR2X2h1ZV9wcm9wZXJ0eSkgeworCQkqdmFsID0gc3RhdGUtPnR2 Lmh1ZTsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+bGlua19zdGF0dXNfcHJvcGVy dHkpIHsKKwkJKnZhbCA9IHN0YXRlLT5saW5rX3N0YXR1czsKKwl9IGVsc2UgaWYgKHByb3BlcnR5 ID09IGNvbmZpZy0+YXNwZWN0X3JhdGlvX3Byb3BlcnR5KSB7CisJCSp2YWwgPSBzdGF0ZS0+cGlj dHVyZV9hc3BlY3RfcmF0aW87CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmNvbnRl bnRfdHlwZV9wcm9wZXJ0eSkgeworCQkqdmFsID0gc3RhdGUtPmNvbnRlbnRfdHlwZTsKKwl9IGVs c2UgaWYgKHByb3BlcnR5ID09IGNvbm5lY3Rvci0+c2NhbGluZ19tb2RlX3Byb3BlcnR5KSB7CisJ CSp2YWwgPSBzdGF0ZS0+c2NhbGluZ19tb2RlOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29u bmVjdG9yLT5jb250ZW50X3Byb3RlY3Rpb25fcHJvcGVydHkpIHsKKwkJKnZhbCA9IHN0YXRlLT5j b250ZW50X3Byb3RlY3Rpb247CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPndyaXRl YmFja19mYl9pZF9wcm9wZXJ0eSkgeworCQkvKiBXcml0ZWJhY2sgZnJhbWVidWZmZXIgaXMgb25l LXNob3QsIHdyaXRlIGFuZCBmb3JnZXQgKi8KKwkJKnZhbCA9IDA7CisJfSBlbHNlIGlmIChwcm9w ZXJ0eSA9PSBjb25maWctPndyaXRlYmFja19vdXRfZmVuY2VfcHRyX3Byb3BlcnR5KSB7CisJCSp2 YWwgPSAwOworCX0gZWxzZSBpZiAoY29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX2dldF9wcm9wZXJ0 eSkgeworCQlyZXR1cm4gY29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX2dldF9wcm9wZXJ0eShjb25u ZWN0b3IsCisJCQkJc3RhdGUsIHByb3BlcnR5LCB2YWwpOworCX0gZWxzZSB7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZHJtX2F0b21pY19nZXRfcHJvcGVy dHkoc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqLAorCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpw cm9wZXJ0eSwgdWludDY0X3QgKnZhbCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHJv cGVydHktPmRldjsKKwlpbnQgcmV0OworCisJc3dpdGNoIChvYmotPnR5cGUpIHsKKwljYXNlIERS TV9NT0RFX09CSkVDVF9DT05ORUNUT1I6IHsKKwkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciA9IG9ial90b19jb25uZWN0b3Iob2JqKTsKKwkJV0FSTl9PTighZHJtX21vZGVzZXRfaXNf bG9ja2VkKCZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgpKTsKKwkJcmV0ID0gZHJt X2F0b21pY19jb25uZWN0b3JfZ2V0X3Byb3BlcnR5KGNvbm5lY3RvciwKKwkJCQljb25uZWN0b3It PnN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFJNX01PREVfT0JK RUNUX0NSVEM6IHsKKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gb2JqX3RvX2NydGMob2JqKTsK KwkJV0FSTl9PTighZHJtX21vZGVzZXRfaXNfbG9ja2VkKCZjcnRjLT5tdXRleCkpOworCQlyZXQg PSBkcm1fYXRvbWljX2NydGNfZ2V0X3Byb3BlcnR5KGNydGMsCisJCQkJY3J0Yy0+c3RhdGUsIHBy b3BlcnR5LCB2YWwpOworCQlicmVhazsKKwl9CisJY2FzZSBEUk1fTU9ERV9PQkpFQ1RfUExBTkU6 IHsKKwkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBvYmpfdG9fcGxhbmUob2JqKTsKKwkJV0FS Tl9PTighZHJtX21vZGVzZXRfaXNfbG9ja2VkKCZwbGFuZS0+bXV0ZXgpKTsKKwkJcmV0ID0gZHJt X2F0b21pY19wbGFuZV9nZXRfcHJvcGVydHkocGxhbmUsCisJCQkJcGxhbmUtPnN0YXRlLCBwcm9w ZXJ0eSwgdmFsKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJ CWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGUgYmlnIG1vbnN0ZXIg aW9jdGwKKyAqLworCitzdGF0aWMgc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqY3Jl YXRlX3ZibGFua19ldmVudCgKKwkJc3RydWN0IGRybV9jcnRjICpjcnRjLCB1aW50NjRfdCB1c2Vy X2RhdGEpCit7CisJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZSA9IE5VTEw7CisK KwllID0ga3phbGxvYyhzaXplb2YgKmUsIEdGUF9LRVJORUwpOworCWlmICghZSkKKwkJcmV0dXJu IE5VTEw7CisKKwllLT5ldmVudC5iYXNlLnR5cGUgPSBEUk1fRVZFTlRfRkxJUF9DT01QTEVURTsK KwllLT5ldmVudC5iYXNlLmxlbmd0aCA9IHNpemVvZihlLT5ldmVudCk7CisJZS0+ZXZlbnQudmJs LmNydGNfaWQgPSBjcnRjLT5iYXNlLmlkOworCWUtPmV2ZW50LnZibC51c2VyX2RhdGEgPSB1c2Vy X2RhdGE7CisKKwlyZXR1cm4gZTsKK30KKworaW50IGRybV9hdG9taWNfY29ubmVjdG9yX2NvbW1p dF9kcG1zKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgIHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJICAgICBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqdG1wX2Nvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0 ZSAqbmV3X2Nvbm5fc3RhdGU7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwlpbnQgaSwgcmV0LCBvbGRfbW9kZSA9IGNvbm5lY3Rv ci0+ZHBtczsKKwlib29sIGFjdGl2ZSA9IGZhbHNlOworCisJcmV0ID0gZHJtX21vZGVzZXRfbG9j aygmc3RhdGUtPmRldi0+bW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCwKKwkJCSAgICAgICBz dGF0ZS0+YWNxdWlyZV9jdHgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAobW9k ZSAhPSBEUk1fTU9ERV9EUE1TX09OKQorCQltb2RlID0gRFJNX01PREVfRFBNU19PRkY7CisJY29u bmVjdG9yLT5kcG1zID0gbW9kZTsKKworCWNydGMgPSBjb25uZWN0b3ItPnN0YXRlLT5jcnRjOwor CWlmICghY3J0YykKKwkJZ290byBvdXQ7CisJcmV0ID0gZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRf Y29ubmVjdG9ycyhzdGF0ZSwgY3J0Yyk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwljcnRj X3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7CisJaWYgKElT X0VSUihjcnRjX3N0YXRlKSkgeworCQlyZXQgPSBQVFJfRVJSKGNydGNfc3RhdGUpOworCQlnb3Rv IG91dDsKKwl9CisKKwlmb3JfZWFjaF9uZXdfY29ubmVjdG9yX2luX3N0YXRlKHN0YXRlLCB0bXBf Y29ubmVjdG9yLCBuZXdfY29ubl9zdGF0ZSwgaSkgeworCQlpZiAobmV3X2Nvbm5fc3RhdGUtPmNy dGMgIT0gY3J0YykKKwkJCWNvbnRpbnVlOworCQlpZiAodG1wX2Nvbm5lY3Rvci0+ZHBtcyA9PSBE Uk1fTU9ERV9EUE1TX09OKSB7CisJCQlhY3RpdmUgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9 CisKKwljcnRjX3N0YXRlLT5hY3RpdmUgPSBhY3RpdmU7CisJcmV0ID0gZHJtX2F0b21pY19jb21t aXQoc3RhdGUpOworb3V0OgorCWlmIChyZXQgIT0gMCkKKwkJY29ubmVjdG9yLT5kcG1zID0gb2xk X21vZGU7CisJcmV0dXJuIHJldDsKK30KKworaW50IGRybV9hdG9taWNfc2V0X3Byb3BlcnR5KHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfb2Jq ZWN0ICpvYmosCisJCQkgICAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcCwKKwkJCSAgICB1aW50 NjRfdCBwcm9wX3ZhbHVlKQoreworCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKnJlZjsKKwlpbnQg cmV0OworCisJaWYgKCFkcm1fcHJvcGVydHlfY2hhbmdlX3ZhbGlkX2dldChwcm9wLCBwcm9wX3Zh bHVlLCAmcmVmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKG9iai0+dHlwZSkgewor CWNhc2UgRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RPUjogeworCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yID0gb2JqX3RvX2Nvbm5lY3RvcihvYmopOworCQlzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqY29ubmVjdG9yX3N0YXRlOworCisJCWNvbm5lY3Rvcl9zdGF0ZSA9IGRybV9h dG9taWNfZ2V0X2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yKTsKKwkJaWYgKElTX0VS Uihjb25uZWN0b3Jfc3RhdGUpKSB7CisJCQlyZXQgPSBQVFJfRVJSKGNvbm5lY3Rvcl9zdGF0ZSk7 CisJCQlicmVhazsKKwkJfQorCisJCXJldCA9IGRybV9hdG9taWNfY29ubmVjdG9yX3NldF9wcm9w ZXJ0eShjb25uZWN0b3IsCisJCQkJY29ubmVjdG9yX3N0YXRlLCBwcm9wLCBwcm9wX3ZhbHVlKTsK KwkJYnJlYWs7CisJfQorCWNhc2UgRFJNX01PREVfT0JKRUNUX0NSVEM6IHsKKwkJc3RydWN0IGRy bV9jcnRjICpjcnRjID0gb2JqX3RvX2NydGMob2JqKTsKKwkJc3RydWN0IGRybV9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlOworCisJCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRl KHN0YXRlLCBjcnRjKTsKKwkJaWYgKElTX0VSUihjcnRjX3N0YXRlKSkgeworCQkJcmV0ID0gUFRS X0VSUihjcnRjX3N0YXRlKTsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0ID0gZHJtX2F0b21pY19j cnRjX3NldF9wcm9wZXJ0eShjcnRjLAorCQkJCWNydGNfc3RhdGUsIHByb3AsIHByb3BfdmFsdWUp OworCQlicmVhazsKKwl9CisJY2FzZSBEUk1fTU9ERV9PQkpFQ1RfUExBTkU6IHsKKwkJc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUgPSBvYmpfdG9fcGxhbmUob2JqKTsKKwkJc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwkJcGxhbmVfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9w bGFuZV9zdGF0ZShzdGF0ZSwgcGxhbmUpOworCQlpZiAoSVNfRVJSKHBsYW5lX3N0YXRlKSkgewor CQkJcmV0ID0gUFRSX0VSUihwbGFuZV9zdGF0ZSk7CisJCQlicmVhazsKKwkJfQorCisJCXJldCA9 IGRybV9hdG9taWNfcGxhbmVfc2V0X3Byb3BlcnR5KHBsYW5lLAorCQkJCXBsYW5lX3N0YXRlLCBw cm9wLCBwcm9wX3ZhbHVlKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5W QUw7CisJCWJyZWFrOworCX0KKworCWRybV9wcm9wZXJ0eV9jaGFuZ2VfdmFsaWRfcHV0KHByb3As IHJlZik7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBET0M6IGV4cGxpY2l0IGZlbmNpbmcg cHJvcGVydGllcworICoKKyAqIEV4cGxpY2l0IGZlbmNpbmcgYWxsb3dzIHVzZXJzcGFjZSB0byBj b250cm9sIHRoZSBidWZmZXIgc3luY2hyb25pemF0aW9uCisgKiBiZXR3ZWVuIGRldmljZXMuIEEg RmVuY2Ugb3IgYSBncm91cCBvZiBmZW5jZXMgYXJlIHRyYW5zZmVyZWQgdG8vZnJvbQorICogdXNl cnNwYWNlIHVzaW5nIFN5bmMgRmlsZSBmZHMgYW5kIHRoZXJlIGFyZSB0d28gRFJNIHByb3BlcnRp ZXMgZm9yIHRoYXQuCisgKiBJTl9GRU5DRV9GRCBvbiBlYWNoIERSTSBQbGFuZSB0byBzZW5kIGZl bmNlcyB0byB0aGUga2VybmVsIGFuZAorICogT1VUX0ZFTkNFX1BUUiBvbiBlYWNoIERSTSBDUlRD IHRvIHJlY2VpdmUgZmVuY2VzIGZyb20gdGhlIGtlcm5lbC4KKyAqCisgKiBBcyBhIGNvbnRyYXN0 LCB3aXRoIGltcGxpY2l0IGZlbmNpbmcgdGhlIGtlcm5lbCBrZWVwcyB0cmFjayBvZiBhbnkKKyAq IG9uZ29pbmcgcmVuZGVyaW5nLCBhbmQgYXV0b21hdGljYWxseSBlbnN1cmVzIHRoYXQgdGhlIGF0 b21pYyB1cGRhdGUgd2FpdHMKKyAqIGZvciBhbnkgcGVuZGluZyByZW5kZXJpbmcgdG8gY29tcGxl dGUuIEZvciBzaGFyZWQgYnVmZmVycyByZXByZXNlbnRlZCB3aXRoCisgKiBhICZzdHJ1Y3QgZG1h X2J1ZiB0aGlzIGlzIHRyYWNrZWQgaW4gJnN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QuCisgKiBJ bXBsaWNpdCBzeW5jaW5nIGlzIGhvdyBMaW51eCB0cmFkaXRpb25hbGx5IHdvcmtlZCAoZS5nLiBE UkkyLzMgb24gWC5vcmcpLAorICogd2hlcmVhcyBleHBsaWNpdCBmZW5jaW5nIGlzIHdoYXQgQW5k cm9pZCB3YW50cy4KKyAqCisgKiAiSU5fRkVOQ0VfRkTigJ06CisgKglVc2UgdGhpcyBwcm9wZXJ0 eSB0byBwYXNzIGEgZmVuY2UgdGhhdCBEUk0gc2hvdWxkIHdhaXQgb24gYmVmb3JlCisgKglwcm9j ZWVkaW5nIHdpdGggdGhlIEF0b21pYyBDb21taXQgcmVxdWVzdCBhbmQgc2hvdyB0aGUgZnJhbWVi dWZmZXIgZm9yCisgKgl0aGUgcGxhbmUgb24gdGhlIHNjcmVlbi4gVGhlIGZlbmNlIGNhbiBiZSBl aXRoZXIgYSBub3JtYWwgZmVuY2Ugb3IgYQorICoJbWVyZ2VkIG9uZSwgdGhlIHN5bmNfZmlsZSBm cmFtZXdvcmsgd2lsbCBoYW5kbGUgYm90aCBjYXNlcyBhbmQgdXNlIGEKKyAqCWZlbmNlX2FycmF5 IGlmIGEgbWVyZ2VkIGZlbmNlIGlzIHJlY2VpdmVkLiBQYXNzaW5nIC0xIGhlcmUgbWVhbnMgbm8K KyAqCWZlbmNlcyB0byB3YWl0IG9uLgorICoKKyAqCUlmIHRoZSBBdG9taWMgQ29tbWl0IHJlcXVl c3QgaGFzIHRoZSBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIGZsYWcKKyAqCWl0IHdpbGwgb25s eSBjaGVjayBpZiB0aGUgU3luYyBGaWxlIGlzIGEgdmFsaWQgb25lLgorICoKKyAqCU9uIHRoZSBk cml2ZXIgc2lkZSB0aGUgZmVuY2UgaXMgc3RvcmVkIG9uIHRoZSBAZmVuY2UgcGFyYW1ldGVyIG9m CisgKgkmc3RydWN0IGRybV9wbGFuZV9zdGF0ZS4gRHJpdmVycyB3aGljaCBhbHNvIHN1cHBvcnQg aW1wbGljaXQgZmVuY2luZworICoJc2hvdWxkIHNldCB0aGUgaW1wbGljaXQgZmVuY2UgdXNpbmcg ZHJtX2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5lKCksCisgKgl0byBtYWtlIHN1cmUgdGhlcmUn cyBjb25zaXN0ZW50IGJlaGF2aW91ciBiZXR3ZWVuIGRyaXZlcnMgaW4gcHJlY2VkZW5jZQorICoJ b2YgaW1wbGljaXQgdnMuIGV4cGxpY2l0IGZlbmNpbmcuCisgKgorICogIk9VVF9GRU5DRV9QVFLi gJ06CisgKglVc2UgdGhpcyBwcm9wZXJ0eSB0byBwYXNzIGEgZmlsZSBkZXNjcmlwdG9yIHBvaW50 ZXIgdG8gRFJNLiBPbmNlIHRoZQorICoJQXRvbWljIENvbW1pdCByZXF1ZXN0IGNhbGwgcmV0dXJu cyBPVVRfRkVOQ0VfUFRSIHdpbGwgYmUgZmlsbGVkIHdpdGgKKyAqCXRoZSBmaWxlIGRlc2NyaXB0 b3IgbnVtYmVyIG9mIGEgU3luYyBGaWxlLiBUaGlzIFN5bmMgRmlsZSBjb250YWlucyB0aGUKKyAq CUNSVEMgZmVuY2UgdGhhdCB3aWxsIGJlIHNpZ25hbGVkIHdoZW4gYWxsIGZyYW1lYnVmZmVycyBw cmVzZW50IG9uIHRoZQorICoJQXRvbWljIENvbW1pdCAqIHJlcXVlc3QgZm9yIHRoYXQgZ2l2ZW4g Q1JUQyBhcmUgc2Nhbm5lZCBvdXQgb24gdGhlCisgKglzY3JlZW4uCisgKgorICoJVGhlIEF0b21p YyBDb21taXQgcmVxdWVzdCBmYWlscyBpZiBhIGludmFsaWQgcG9pbnRlciBpcyBwYXNzZWQuIElm IHRoZQorICoJQXRvbWljIENvbW1pdCByZXF1ZXN0IGZhaWxzIGZvciBhbnkgb3RoZXIgcmVhc29u IHRoZSBvdXQgZmVuY2UgZmQKKyAqCXJldHVybmVkIHdpbGwgYmUgLTEuIE9uIGEgQXRvbWljIENv bW1pdCB3aXRoIHRoZQorICoJRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSBmbGFnIHRoZSBvdXQg ZmVuY2Ugd2lsbCBhbHNvIGJlIHNldCB0byAtMS4KKyAqCisgKglOb3RlIHRoYXQgb3V0LWZlbmNl cyBkb24ndCBoYXZlIGEgc3BlY2lhbCBpbnRlcmZhY2UgdG8gZHJpdmVycyBhbmQgYXJlCisgKglp bnRlcm5hbGx5IHJlcHJlc2VudGVkIGJ5IGEgJnN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZl bnQgaW4gc3RydWN0CisgKgkmZHJtX2NydGNfc3RhdGUsIHdoaWNoIGlzIGFsc28gdXNlZCBieSB0 aGUgbm9uYmxvY2tpbmcgYXRvbWljIGNvbW1pdAorICoJaGVscGVycyBhbmQgZm9yIHRoZSBEUk0g ZXZlbnQgaGFuZGxpbmcgZm9yIGV4aXN0aW5nIHVzZXJzcGFjZS4KKyAqLworCitzdHJ1Y3QgZHJt X291dF9mZW5jZV9zdGF0ZSB7CisJczMyIF9fdXNlciAqb3V0X2ZlbmNlX3B0cjsKKwlzdHJ1Y3Qg c3luY19maWxlICpzeW5jX2ZpbGU7CisJaW50IGZkOworfTsKKworc3RhdGljIGludCBzZXR1cF9v dXRfZmVuY2Uoc3RydWN0IGRybV9vdXRfZmVuY2Vfc3RhdGUgKmZlbmNlX3N0YXRlLAorCQkJICAg c3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJZmVuY2Vfc3RhdGUtPmZkID0gZ2V0X3VudXNl ZF9mZF9mbGFncyhPX0NMT0VYRUMpOworCWlmIChmZW5jZV9zdGF0ZS0+ZmQgPCAwKQorCQlyZXR1 cm4gZmVuY2Vfc3RhdGUtPmZkOworCisJaWYgKHB1dF91c2VyKGZlbmNlX3N0YXRlLT5mZCwgZmVu Y2Vfc3RhdGUtPm91dF9mZW5jZV9wdHIpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWZlbmNlX3N0 YXRlLT5zeW5jX2ZpbGUgPSBzeW5jX2ZpbGVfY3JlYXRlKGZlbmNlKTsKKwlpZiAoIWZlbmNlX3N0 YXRlLT5zeW5jX2ZpbGUpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgcHJlcGFyZV9zaWduYWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkg IHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCQkgIHN0cnVjdCBkcm1fbW9kZV9h dG9taWMgKmFyZywKKwkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgc3Ry dWN0IGRybV9vdXRfZmVuY2Vfc3RhdGUgKipmZW5jZV9zdGF0ZSwKKwkJCQkgIHVuc2lnbmVkIGlu dCAqbnVtX2ZlbmNlcykKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9j cnRjX3N0YXRlICpjcnRjX3N0YXRlOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOworCXN0 cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlOworCWludCBpLCBjID0gMCwgcmV0 OworCisJaWYgKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZKQorCQlyZXR1 cm4gMDsKKworCWZvcl9lYWNoX25ld19jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0 YXRlLCBpKSB7CisJCXMzMiBfX3VzZXIgKmZlbmNlX3B0cjsKKworCQlmZW5jZV9wdHIgPSBnZXRf b3V0X2ZlbmNlX2Zvcl9jcnRjKGNydGNfc3RhdGUtPnN0YXRlLCBjcnRjKTsKKworCQlpZiAoYXJn LT5mbGFncyAmIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCB8fCBmZW5jZV9wdHIpIHsKKwkJCXN0 cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmU7CisKKwkJCWUgPSBjcmVhdGVfdmJsYW5r X2V2ZW50KGNydGMsIGFyZy0+dXNlcl9kYXRhKTsKKwkJCWlmICghZSkKKwkJCQlyZXR1cm4gLUVO T01FTTsKKworCQkJY3J0Y19zdGF0ZS0+ZXZlbnQgPSBlOworCQl9CisKKwkJaWYgKGFyZy0+Zmxh Z3MgJiBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQpIHsKKwkJCXN0cnVjdCBkcm1fcGVuZGluZ192 YmxhbmtfZXZlbnQgKmUgPSBjcnRjX3N0YXRlLT5ldmVudDsKKworCQkJaWYgKCFmaWxlX3ByaXYp CisJCQkJY29udGludWU7CisKKwkJCXJldCA9IGRybV9ldmVudF9yZXNlcnZlX2luaXQoZGV2LCBm aWxlX3ByaXYsICZlLT5iYXNlLAorCQkJCQkJICAgICAmZS0+ZXZlbnQuYmFzZSk7CisJCQlpZiAo cmV0KSB7CisJCQkJa2ZyZWUoZSk7CisJCQkJY3J0Y19zdGF0ZS0+ZXZlbnQgPSBOVUxMOworCQkJ CXJldHVybiByZXQ7CisJCQl9CisJCX0KKworCQlpZiAoZmVuY2VfcHRyKSB7CisJCQlzdHJ1Y3Qg ZG1hX2ZlbmNlICpmZW5jZTsKKwkJCXN0cnVjdCBkcm1fb3V0X2ZlbmNlX3N0YXRlICpmOworCisJ CQlmID0ga3JlYWxsb2MoKmZlbmNlX3N0YXRlLCBzaXplb2YoKipmZW5jZV9zdGF0ZSkgKgorCQkJ CSAgICAgKCpudW1fZmVuY2VzICsgMSksIEdGUF9LRVJORUwpOworCQkJaWYgKCFmKQorCQkJCXJl dHVybiAtRU5PTUVNOworCisJCQltZW1zZXQoJmZbKm51bV9mZW5jZXNdLCAwLCBzaXplb2YoKmYp KTsKKworCQkJZlsqbnVtX2ZlbmNlc10ub3V0X2ZlbmNlX3B0ciA9IGZlbmNlX3B0cjsKKwkJCSpm ZW5jZV9zdGF0ZSA9IGY7CisKKwkJCWZlbmNlID0gZHJtX2NydGNfY3JlYXRlX2ZlbmNlKGNydGMp OworCQkJaWYgKCFmZW5jZSkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKworCQkJcmV0ID0gc2V0dXBf b3V0X2ZlbmNlKCZmWygqbnVtX2ZlbmNlcykrK10sIGZlbmNlKTsKKwkJCWlmIChyZXQpIHsKKwkJ CQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQljcnRj X3N0YXRlLT5ldmVudC0+YmFzZS5mZW5jZSA9IGZlbmNlOworCQl9CisKKwkJYysrOworCX0KKwor CWZvcl9lYWNoX25ld19jb25uZWN0b3JfaW5fc3RhdGUoc3RhdGUsIGNvbm4sIGNvbm5fc3RhdGUs IGkpIHsKKwkJc3RydWN0IGRybV93cml0ZWJhY2tfY29ubmVjdG9yICp3Yl9jb25uOworCQlzdHJ1 Y3QgZHJtX3dyaXRlYmFja19qb2IgKmpvYjsKKwkJc3RydWN0IGRybV9vdXRfZmVuY2Vfc3RhdGUg KmY7CisJCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOworCQlzMzIgX191c2VyICpmZW5jZV9wdHI7 CisKKwkJZmVuY2VfcHRyID0gZ2V0X291dF9mZW5jZV9mb3JfY29ubmVjdG9yKHN0YXRlLCBjb25u KTsKKwkJaWYgKCFmZW5jZV9wdHIpCisJCQljb250aW51ZTsKKworCQlqb2IgPSBkcm1fYXRvbWlj X2dldF93cml0ZWJhY2tfam9iKGNvbm5fc3RhdGUpOworCQlpZiAoIWpvYikKKwkJCXJldHVybiAt RU5PTUVNOworCisJCWYgPSBrcmVhbGxvYygqZmVuY2Vfc3RhdGUsIHNpemVvZigqKmZlbmNlX3N0 YXRlKSAqCisJCQkgICAgICgqbnVtX2ZlbmNlcyArIDEpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFm KQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJbWVtc2V0KCZmWypudW1fZmVuY2VzXSwgMCwgc2l6 ZW9mKCpmKSk7CisKKwkJZlsqbnVtX2ZlbmNlc10ub3V0X2ZlbmNlX3B0ciA9IGZlbmNlX3B0cjsK KwkJKmZlbmNlX3N0YXRlID0gZjsKKworCQl3Yl9jb25uID0gZHJtX2Nvbm5lY3Rvcl90b193cml0 ZWJhY2soY29ubik7CisJCWZlbmNlID0gZHJtX3dyaXRlYmFja19nZXRfb3V0X2ZlbmNlKHdiX2Nv bm4pOworCQlpZiAoIWZlbmNlKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcmV0ID0gc2V0dXBf b3V0X2ZlbmNlKCZmWygqbnVtX2ZlbmNlcykrK10sIGZlbmNlKTsKKwkJaWYgKHJldCkgeworCQkJ ZG1hX2ZlbmNlX3B1dChmZW5jZSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJam9iLT5vdXRf ZmVuY2UgPSBmZW5jZTsKKwl9CisKKwkvKgorCSAqIEhhdmluZyB0aGlzIGZsYWcgbWVhbnMgdXNl ciBtb2RlIHBlbmRzIG9uIGV2ZW50IHdoaWNoIHdpbGwgbmV2ZXIKKwkgKiByZWFjaCBkdWUgdG8g bGFjayBvZiBhdCBsZWFzdCBvbmUgQ1JUQyBmb3Igc2lnbmFsaW5nCisJICovCisJaWYgKGMgPT0g MCAmJiAoYXJnLT5mbGFncyAmIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCkpCisJCXJldHVybiAt RUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBsZXRlX3NpZ25hbGlu ZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX291dF9mZW5jZV9zdGF0ZSAqZmVuY2Vf c3RhdGUsCisJCQkgICAgICAgdW5zaWduZWQgaW50IG51bV9mZW5jZXMsCisJCQkgICAgICAgYm9v bCBpbnN0YWxsX2ZkcykKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9j cnRjX3N0YXRlICpjcnRjX3N0YXRlOworCWludCBpOworCisJaWYgKGluc3RhbGxfZmRzKSB7CisJ CWZvciAoaSA9IDA7IGkgPCBudW1fZmVuY2VzOyBpKyspCisJCQlmZF9pbnN0YWxsKGZlbmNlX3N0 YXRlW2ldLmZkLAorCQkJCSAgIGZlbmNlX3N0YXRlW2ldLnN5bmNfZmlsZS0+ZmlsZSk7CisKKwkJ a2ZyZWUoZmVuY2Vfc3RhdGUpOworCQlyZXR1cm47CisJfQorCisJZm9yX2VhY2hfbmV3X2NydGNf aW5fc3RhdGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUsIGkpIHsKKwkJc3RydWN0IGRybV9wZW5k aW5nX3ZibGFua19ldmVudCAqZXZlbnQgPSBjcnRjX3N0YXRlLT5ldmVudDsKKwkJLyoKKwkJICog RnJlZSB0aGUgYWxsb2NhdGVkIGV2ZW50LiBkcm1fYXRvbWljX2hlbHBlcl9zZXR1cF9jb21taXQK KwkJICogY2FuIGFsbG9jYXRlIGFuIGV2ZW50IHRvbywgc28gb25seSBmcmVlIGl0IGlmIGl0J3Mg b3VycworCQkgKiB0byBwcmV2ZW50IGEgZG91YmxlIGZyZWUgaW4gZHJtX2F0b21pY19zdGF0ZV9j bGVhci4KKwkJICovCisJCWlmIChldmVudCAmJiAoZXZlbnQtPmJhc2UuZmVuY2UgfHwgZXZlbnQt PmJhc2UuZmlsZV9wcml2KSkgeworCQkJZHJtX2V2ZW50X2NhbmNlbF9mcmVlKGRldiwgJmV2ZW50 LT5iYXNlKTsKKwkJCWNydGNfc3RhdGUtPmV2ZW50ID0gTlVMTDsKKwkJfQorCX0KKworCWlmICgh ZmVuY2Vfc3RhdGUpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fZmVuY2VzOyBp KyspIHsKKwkJaWYgKGZlbmNlX3N0YXRlW2ldLnN5bmNfZmlsZSkKKwkJCWZwdXQoZmVuY2Vfc3Rh dGVbaV0uc3luY19maWxlLT5maWxlKTsKKwkJaWYgKGZlbmNlX3N0YXRlW2ldLmZkID49IDApCisJ CQlwdXRfdW51c2VkX2ZkKGZlbmNlX3N0YXRlW2ldLmZkKTsKKworCQkvKiBJZiB0aGlzIGZhaWxz IGxvZyBlcnJvciB0byB0aGUgdXNlciAqLworCQlpZiAoZmVuY2Vfc3RhdGVbaV0ub3V0X2ZlbmNl X3B0ciAmJgorCQkgICAgcHV0X3VzZXIoLTEsIGZlbmNlX3N0YXRlW2ldLm91dF9mZW5jZV9wdHIp KQorCQkJRFJNX0RFQlVHX0FUT01JQygiQ291bGRuJ3QgY2xlYXIgb3V0X2ZlbmNlX3B0clxuIik7 CisJfQorCisJa2ZyZWUoZmVuY2Vfc3RhdGUpOworfQorCitpbnQgZHJtX21vZGVfYXRvbWljX2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fbW9kZV9hdG9taWMgKmFyZyA9IGRhdGE7 CisJdWludDMyX3QgX191c2VyICpvYmpzX3B0ciA9ICh1aW50MzJfdCBfX3VzZXIgKikodW5zaWdu ZWQgbG9uZykoYXJnLT5vYmpzX3B0cik7CisJdWludDMyX3QgX191c2VyICpjb3VudF9wcm9wc19w dHIgPSAodWludDMyX3QgX191c2VyICopKHVuc2lnbmVkIGxvbmcpKGFyZy0+Y291bnRfcHJvcHNf cHRyKTsKKwl1aW50MzJfdCBfX3VzZXIgKnByb3BzX3B0ciA9ICh1aW50MzJfdCBfX3VzZXIgKiko dW5zaWduZWQgbG9uZykoYXJnLT5wcm9wc19wdHIpOworCXVpbnQ2NF90IF9fdXNlciAqcHJvcF92 YWx1ZXNfcHRyID0gKHVpbnQ2NF90IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKShhcmctPnByb3Bf dmFsdWVzX3B0cik7CisJdW5zaWduZWQgaW50IGNvcGllZF9vYmpzLCBjb3BpZWRfcHJvcHM7CisJ c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOworCXN0cnVjdCBkcm1fbW9kZXNldF9hY3F1 aXJlX2N0eCBjdHg7CisJc3RydWN0IGRybV9vdXRfZmVuY2Vfc3RhdGUgKmZlbmNlX3N0YXRlOwor CWludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBpLCBqLCBudW1fZmVuY2VzOworCisJLyogZGlz YWxsb3cgZm9yIGRyaXZlcnMgbm90IHN1cHBvcnRpbmcgYXRvbWljOiAqLworCWlmICghZHJtX2Nv cmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9BVE9NSUMpKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCS8qIGRpc2FsbG93IGZvciB1c2Vyc3BhY2UgdGhhdCBoYXMgbm90IGVuYWJsZWQgYXRvbWlj IGNhcCAoZXZlbgorCSAqIHRob3VnaCB0aGlzIG1heSBiZSBhIGJpdCBvdmVya2lsbCwgc2luY2Ug bGVnYWN5IHVzZXJzcGFjZQorCSAqIHdvdWxkbid0IGtub3cgaG93IHRvIGNhbGwgdGhpcyBpb2N0 bCkKKwkgKi8KKwlpZiAoIWZpbGVfcHJpdi0+YXRvbWljKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CWlmIChhcmctPmZsYWdzICYgfkRSTV9NT0RFX0FUT01JQ19GTEFHUykKKwkJcmV0dXJuIC1FSU5W QUw7CisKKwlpZiAoYXJnLT5yZXNlcnZlZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKGFy Zy0+ZmxhZ3MgJiBEUk1fTU9ERV9QQUdFX0ZMSVBfQVNZTkMpICYmCisJCQkhZGV2LT5tb2RlX2Nv bmZpZy5hc3luY19wYWdlX2ZsaXApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogY2FuJ3QgdGVz dCBhbmQgZXhwZWN0IGFuIGV2ZW50IGF0IHRoZSBzYW1lIHRpbWUuICovCisJaWYgKChhcmctPmZs YWdzICYgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSkgJiYKKwkJCShhcmctPmZsYWdzICYgRFJN X01PREVfUEFHRV9GTElQX0VWRU5UKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkcm1fbW9kZXNl dF9hY3F1aXJlX2luaXQoJmN0eCwgRFJNX01PREVTRVRfQUNRVUlSRV9JTlRFUlJVUFRJQkxFKTsK KworCXN0YXRlID0gZHJtX2F0b21pY19zdGF0ZV9hbGxvYyhkZXYpOworCWlmICghc3RhdGUpCisJ CXJldHVybiAtRU5PTUVNOworCisJc3RhdGUtPmFjcXVpcmVfY3R4ID0gJmN0eDsKKwlzdGF0ZS0+ YWxsb3dfbW9kZXNldCA9ICEhKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9E RVNFVCk7CisKK3JldHJ5OgorCWNvcGllZF9vYmpzID0gMDsKKwljb3BpZWRfcHJvcHMgPSAwOwor CWZlbmNlX3N0YXRlID0gTlVMTDsKKwludW1fZmVuY2VzID0gMDsKKworCWZvciAoaSA9IDA7IGkg PCBhcmctPmNvdW50X29ianM7IGkrKykgeworCQl1aW50MzJfdCBvYmpfaWQsIGNvdW50X3Byb3Bz OworCQlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmo7CisKKwkJaWYgKGdldF91c2VyKG9ial9p ZCwgb2Jqc19wdHIgKyBjb3BpZWRfb2JqcykpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3Rv IG91dDsKKwkJfQorCisJCW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGRldiwgZmlsZV9wcml2 LCBvYmpfaWQsIERSTV9NT0RFX09CSkVDVF9BTlkpOworCQlpZiAoIW9iaikgeworCQkJcmV0ID0g LUVOT0VOVDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKCFvYmotPnByb3BlcnRpZXMpIHsK KwkJCWRybV9tb2RlX29iamVjdF9wdXQob2JqKTsKKwkJCXJldCA9IC1FTk9FTlQ7CisJCQlnb3Rv IG91dDsKKwkJfQorCisJCWlmIChnZXRfdXNlcihjb3VudF9wcm9wcywgY291bnRfcHJvcHNfcHRy ICsgY29waWVkX29ianMpKSB7CisJCQlkcm1fbW9kZV9vYmplY3RfcHV0KG9iaik7CisJCQlyZXQg PSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKworCQljb3BpZWRfb2JqcysrOworCisJCWZv ciAoaiA9IDA7IGogPCBjb3VudF9wcm9wczsgaisrKSB7CisJCQl1aW50MzJfdCBwcm9wX2lkOwor CQkJdWludDY0X3QgcHJvcF92YWx1ZTsKKwkJCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3A7CisK KwkJCWlmIChnZXRfdXNlcihwcm9wX2lkLCBwcm9wc19wdHIgKyBjb3BpZWRfcHJvcHMpKSB7CisJ CQkJZHJtX21vZGVfb2JqZWN0X3B1dChvYmopOworCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJZ290 byBvdXQ7CisJCQl9CisKKwkJCXByb3AgPSBkcm1fbW9kZV9vYmpfZmluZF9wcm9wX2lkKG9iaiwg cHJvcF9pZCk7CisJCQlpZiAoIXByb3ApIHsKKwkJCQlkcm1fbW9kZV9vYmplY3RfcHV0KG9iaik7 CisJCQkJcmV0ID0gLUVOT0VOVDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJaWYgKGNvcHlf ZnJvbV91c2VyKCZwcm9wX3ZhbHVlLAorCQkJCQkgICBwcm9wX3ZhbHVlc19wdHIgKyBjb3BpZWRf cHJvcHMsCisJCQkJCSAgIHNpemVvZihwcm9wX3ZhbHVlKSkpIHsKKwkJCQlkcm1fbW9kZV9vYmpl Y3RfcHV0KG9iaik7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwor CQkJcmV0ID0gZHJtX2F0b21pY19zZXRfcHJvcGVydHkoc3RhdGUsIG9iaiwgcHJvcCwKKwkJCQkJ CSAgICAgIHByb3BfdmFsdWUpOworCQkJaWYgKHJldCkgeworCQkJCWRybV9tb2RlX29iamVjdF9w dXQob2JqKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJY29waWVkX3Byb3BzKys7CisJCX0K KworCQlkcm1fbW9kZV9vYmplY3RfcHV0KG9iaik7CisJfQorCisJcmV0ID0gcHJlcGFyZV9zaWdu YWxpbmcoZGV2LCBzdGF0ZSwgYXJnLCBmaWxlX3ByaXYsICZmZW5jZV9zdGF0ZSwKKwkJCQkmbnVt X2ZlbmNlcyk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpZiAoYXJnLT5mbGFncyAmIERS TV9NT0RFX0FUT01JQ19URVNUX09OTFkpIHsKKwkJcmV0ID0gZHJtX2F0b21pY19jaGVja19vbmx5 KHN0YXRlKTsKKwl9IGVsc2UgaWYgKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9BVE9NSUNfTk9OQkxP Q0spIHsKKwkJcmV0ID0gZHJtX2F0b21pY19ub25ibG9ja2luZ19jb21taXQoc3RhdGUpOworCX0g ZWxzZSB7CisJCWlmICh1bmxpa2VseShkcm1fZGVidWcgJiBEUk1fVVRfU1RBVEUpKQorCQkJZHJt X2F0b21pY19wcmludF9zdGF0ZShzdGF0ZSk7CisKKwkJcmV0ID0gZHJtX2F0b21pY19jb21taXQo c3RhdGUpOworCX0KKworb3V0OgorCWNvbXBsZXRlX3NpZ25hbGluZyhkZXYsIHN0YXRlLCBmZW5j ZV9zdGF0ZSwgbnVtX2ZlbmNlcywgIXJldCk7CisKKwlpZiAocmV0ID09IC1FREVBRExLKSB7CisJ CWRybV9hdG9taWNfc3RhdGVfY2xlYXIoc3RhdGUpOworCQlyZXQgPSBkcm1fbW9kZXNldF9iYWNr b2ZmKCZjdHgpOworCQlpZiAoIXJldCkKKwkJCWdvdG8gcmV0cnk7CisJfQorCisJZHJtX2F0b21p Y19zdGF0ZV9wdXQoc3RhdGUpOworCisJZHJtX21vZGVzZXRfZHJvcF9sb2NrcygmY3R4KTsKKwlk cm1fbW9kZXNldF9hY3F1aXJlX2ZpbmkoJmN0eCk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJt L2RybV9jcnRjX2hlbHBlci5jCmluZGV4IDVhODRjM2JjOTE1ZC4uY2U3NWU5NTA2ZTg1IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlIDxk cm0vZHJtUC5oPgogI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWNfdWFwaS5oPgogI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgogI2luY2x1ZGUgPGRy bS9kcm1fZW5jb2Rlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaW50ZXJuYWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fY3J0Y19pbnRlcm5hbC5oCmluZGV4IGZmNWUwZDUyMWMyMS4uZWRlMjBiNTVkNTBjIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaW50ZXJuYWwuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vZHJtX2NydGNfaW50ZXJuYWwuaApAQCAtMjA0LDYgKzIwNCw5IEBAIHN0cnVjdCBk cm1fbWlub3I7CiBpbnQgZHJtX2F0b21pY19kZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9taW5vciAq bWlub3IpOwogI2VuZGlmCiAKK3ZvaWQgZHJtX2F0b21pY19wcmludF9zdGF0ZShjb25zdCBzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOworCisvKiBkcm1fYXRvbWljX3VhcGkuYyAqLwog aW50IGRybV9hdG9taWNfY29ubmVjdG9yX2NvbW1pdF9kcG1zKHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSwKIAkJCQkgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJ CQkJICAgICBpbnQgbW9kZSk7CkBAIC0yMTMsNiArMjE2LDggQEAgaW50IGRybV9hdG9taWNfc2V0 X3Byb3BlcnR5KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKIAkJCSAgICB1aW50NjRf dCBwcm9wX3ZhbHVlKTsKIGludCBkcm1fYXRvbWljX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX21v ZGVfb2JqZWN0ICpvYmosCiAJCQkgICAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksIHVp bnQ2NF90ICp2YWwpOworCisvKiBJT0NUTCAqLwogaW50IGRybV9tb2RlX2F0b21pY19pb2N0bChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZnJhbWVidWZm ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZnJhbWVidWZmZXIuYwppbmRleCA3ODFhZjFkNDJk NzYuLjdjYThjNzcyMjNjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mcmFtZWJ1 ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZnJhbWVidWZmZXIuYwpAQCAtMjUsNiAr MjUsNyBAQAogI2luY2x1ZGUgPGRybS9kcm1fYXV0aC5oPgogI2luY2x1ZGUgPGRybS9kcm1fZnJh bWVidWZmZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9k cm1fYXRvbWljX3VhcGkuaD4KICNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+CiAKICNpbmNsdWRl ICJkcm1faW50ZXJuYWwuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2Zy YW1lYnVmZmVyX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZnJhbWVidWZmZXJf aGVscGVyLmMKaW5kZXggMjgxMGQ0MTMxNDExLi43NjA3ZjljZDZmNzcgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5jCkBAIC0xNiw2ICsxNiw3IEBACiAK ICNpbmNsdWRlIDxkcm0vZHJtUC5oPgogI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9hdG9taWNfdWFwaS5oPgogI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVy Lmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2ZyYW1l YnVmZmVyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3BsYW5lX2hlbHBlci5j IGIvZHJpdmVycy9ncHUvZHJtL2RybV9wbGFuZV9oZWxwZXIuYwppbmRleCA2MjFmMTc2NDNiYjAu LmEzOTM3NTZiNjY0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9wbGFuZV9oZWxw ZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BsYW5lX2hlbHBlci5jCkBAIC0yOCw2ICsy OCw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0v ZHJtX3JlY3QuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9k cm1fYXRvbWljX3VhcGkuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CiAjaW5j bHVkZSA8ZHJtL2RybV9lbmNvZGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVy Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggYTg1YTgzZjMxOTc5Li44 NWNhZDE2ZjMxZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3Bs YXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTQ2LDYg KzQ2LDcgQEAKICNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJt L2RybV9wbGFuZV9oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJtX3JlY3QuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2F0b21pY191YXBpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hX3JlbWFwcGluZy5o PgogI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X3BsYW5lLmMKaW5kZXggYjY0MGUzOWViYWNhLi4wMTUzNDFlMmRkNGMgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jCkBAIC0yMSw2ICsyMSw4 IEBACiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYu aD4KIAorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX3VhcGkuaD4KKwogI2luY2x1ZGUgIm1zbV9k cnYuaCIKICNpbmNsdWRlICJkcHVfa21zLmgiCiAjaW5jbHVkZSAiZHB1X2Zvcm1hdHMuaCIKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2F0b21pYy5jIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9tc21fYXRvbWljLmMKaW5kZXggYzFmMTc3OWM5ODBmLi40YmNkZWNhNzQ3OWQgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2F0b21pYy5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vbXNtX2F0b21pYy5jCkBAIC0xNSw2ICsxNSw4IEBACiAgKiB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKi8KIAor I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX3VhcGkuaD4KKwogI2luY2x1ZGUgIm1zbV9kcnYuaCIK ICNpbmNsdWRlICJtc21fZ2VtLmgiCiAjaW5jbHVkZSAibXNtX2ttcy5oIgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRf Y3J0Yy5jCmluZGV4IDBlNmExMjE4NThkMS4uM2NlMTM2YmE4NzkxIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRf Y3J0Yy5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KICNp bmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2NydGNf aGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfdWFwaS5oPgogI2luY2x1ZGUgPGxp bnV4L2Nsay5oPgogI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgogI2luY2x1ZGUg PGxpbnV4L2NvbXBvbmVudC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRf cGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMKaW5kZXggNmM2ZDM3YWE1 MTJhLi45ZGMzZmNiZDI5MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3Bs YW5lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYwpAQCAtMjIsNiArMjIs NyBAQAogI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9k cm1fZmJfY21hX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfdWFwaS5oPgogCiAjaW5jbHVkZSAidWFwaS9kcm0vdmM0 X2RybS5oIgogI2luY2x1ZGUgInZjNF9kcnYuaCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2Ry bV9hdG9taWMuaCBiL2luY2x1ZGUvZHJtL2RybV9hdG9taWMuaAppbmRleCA5M2QyOWFmMzQwMjQu LmQ2YWRlYmNkNmVhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oCisrKyBi L2luY2x1ZGUvZHJtL2RybV9hdG9taWMuaApAQCAtNTg0LDIyICs1ODQsNiBAQCBfX2RybV9hdG9t aWNfZ2V0X2N1cnJlbnRfcGxhbmVfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl LAogCXJldHVybiBwbGFuZS0+c3RhdGU7CiB9CiAKLWludCBfX211c3RfY2hlY2sKLWRybV9hdG9t aWNfc2V0X21vZGVfZm9yX2NydGMoc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKLQkJCSAg ICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOwotaW50IF9fbXVzdF9jaGVj awotZHJtX2F0b21pY19zZXRfbW9kZV9wcm9wX2Zvcl9jcnRjKHN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqc3RhdGUsCi0JCQkJICBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IpOwotaW50IF9f bXVzdF9jaGVjawotZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfcGxhbmUoc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCi0JCQkgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwot dm9pZCBkcm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAq cGxhbmVfc3RhdGUsCi0JCQkJIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKLXZvaWQgZHJt X2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlLAotCQkJCSAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSk7Ci1pbnQgX19tdXN0X2No ZWNrCi1kcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25uZWN0 b3Jfc3RhdGUgKmNvbm5fc3RhdGUsCi0JCQkJICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogaW50 IF9fbXVzdF9jaGVjawogZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfY29ubmVjdG9ycyhzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCiAJCQkJICAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsK ZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9hdG9taWNfdWFwaS5oIGIvaW5jbHVkZS9kcm0v ZHJtX2F0b21pY191YXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li44Y2VjNTJhZDEyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS9kcm1fYXRvbWlj X3VhcGkuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFJlZCBI YXQKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAy MDE4IEludGVsIENvcnAuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ TkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisg KiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBP VEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqIFJvYiBD bGFyayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4KKyAqIERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0 ZXJAZmZ3bGwuY2g+CisgKi8KKworI2lmbmRlZiBEUk1fQVRPTUlDX1VBUElfSF8KKyNkZWZpbmUg RFJNX0FUT01JQ19VQVBJX0hfCisKK3N0cnVjdCBkcm1fY3J0Y19zdGF0ZTsKK3N0cnVjdCBkcm1f ZGlzcGxheV9tb2RlOworc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iOworc3RydWN0IGRybV9wbGFu ZV9zdGF0ZTsKK3N0cnVjdCBkcm1fY3J0YzsKK3N0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlOwor c3RydWN0IGRtYV9mZW5jZTsKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXI7CisKK2ludCBfX211c3Rf Y2hlY2sKK2RybV9hdG9taWNfc2V0X21vZGVfZm9yX2NydGMoc3RydWN0IGRybV9jcnRjX3N0YXRl ICpzdGF0ZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOwor aW50IF9fbXVzdF9jaGVjaworZHJtX2F0b21pY19zZXRfbW9kZV9wcm9wX2Zvcl9jcnRjKHN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCisJCQkJICBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2Ig KmJsb2IpOworaW50IF9fbXVzdF9jaGVjaworZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfcGxhbmUo c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCisJCQkgICAgICBzdHJ1Y3QgZHJt X2NydGMgKmNydGMpOwordm9pZCBkcm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUoc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCisJCQkJIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiKTsKK3ZvaWQgZHJtX2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5lKHN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgKnBsYW5lX3N0YXRlLAorCQkJCSAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSk7 CitpbnQgX19tdXN0X2NoZWNrCitkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0b3Ioc3Ry dWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUsCisJCQkJICBzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpOworCisjZW5kaWYKLS0gCjIuMTkuMC5yYzEKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRy ZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=