From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v5 05/23] x86/mm: move ro page fault emulation code Date: Thu, 14 Sep 2017 13:58:34 +0100 Message-ID: <20170914125852.22129-6-wei.liu2@citrix.com> References: <20170914125852.22129-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dsTja-0004MB-3Q for xen-devel@lists.xenproject.org; Thu, 14 Sep 2017 12:59:10 +0000 In-Reply-To: <20170914125852.22129-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: George Dunlap , Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org TW92ZSB0aGUgY29kZSB0byBwdi9yby1wYWdlLWZhdWx0LmMuICBDcmVhdGUgYSBuZXcgaGVhZGVy IGZpbGUKYXNtLXg4Ni9wdi9tbS5oIGFuZCBtb3ZlIHRoZSBkZWNsYXJhdGlvbiBvZiBwdl9yb19w YWdlX2ZhdWx0IHRoZXJlLgpJbmNsdWRlIHRoZSBuZXcgaGVhZGVyIGZpbGUgaW4gdHJhcHMuYy4K CkZpeCBzb21lIGNvZGluZyBzdHlsZSBpc3N1ZXMuIFRoZSBwcmVmaXhlcyAocHR3ciBhbmQgbW1p bykgYXJlCnJldGFpbmVkIGJlY2F1c2UgdGhlcmUgYXJlIHR3byBzZXRzIG9mIGVtdWxhdGlvbiBj b2RlIGluIHRoZSBzYW1lIGZpbGUuCgpTaWduZWQtb2ZmLWJ5OiBXZWkgTGl1IDx3ZWkubGl1MkBj aXRyaXguY29tPgotLS0KIHhlbi9hcmNoL3g4Ni9tbS5jICAgICAgICAgICAgICAgfCAzNjQgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB4ZW4vYXJjaC94ODYvcHYvTWFrZWZp bGUgICAgICAgIHwgICAxICsKIHhlbi9hcmNoL3g4Ni9wdi9yby1wYWdlLWZhdWx0LmMgfCAzOTkg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogeGVuL2FyY2gveDg2L3Ry YXBzLmMgICAgICAgICAgICB8ICAgMSArCiB4ZW4vaW5jbHVkZS9hc20teDg2L21tLmggICAgICAg IHwgICAyIC0KIHhlbi9pbmNsdWRlL2FzbS14ODYvcHYvbW0uaCAgICAgfCAgMzggKysrKwogNiBm aWxlcyBjaGFuZ2VkLCA0MzkgaW5zZXJ0aW9ucygrKSwgMzY2IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHhlbi9hcmNoL3g4Ni9wdi9yby1wYWdlLWZhdWx0LmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCB4ZW4vaW5jbHVkZS9hc20teDg2L3B2L21tLmgKCmRpZmYgLS1naXQgYS94ZW4vYXJj aC94ODYvbW0uYyBiL3hlbi9hcmNoL3g4Ni9tbS5jCmluZGV4IGIwNTY0OGU0ZTcuLmNjMGE3Y2Fi NDEgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9tbS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9tbS5j CkBAIC00NzI5LDI2NSArNDcyOSw2IEBAIGxvbmcgYXJjaF9tZW1vcnlfb3AodW5zaWduZWQgbG9u ZyBjbWQsIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgYXJnKQogICAgIHJldHVybiAwOwog fQogCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBXcml0YWJsZSBQYWdldGFibGVz Ci0gKi8KLQotc3RydWN0IHB0d3JfZW11bGF0ZV9jdHh0IHsKLSAgICB1bnNpZ25lZCBsb25nIGNy MjsKLSAgICBsMV9wZ2VudHJ5X3QgIHB0ZTsKLX07Ci0KLXN0YXRpYyBpbnQgcHR3cl9lbXVsYXRl ZF9yZWFkKAotICAgIGVudW0geDg2X3NlZ21lbnQgc2VnLAotICAgIHVuc2lnbmVkIGxvbmcgb2Zm c2V0LAotICAgIHZvaWQgKnBfZGF0YSwKLSAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0gICAgc3Ry dWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17Ci0gICAgdW5zaWduZWQgaW50IHJjID0gYnl0 ZXM7Ci0gICAgdW5zaWduZWQgbG9uZyBhZGRyID0gb2Zmc2V0OwotCi0gICAgaWYgKCAhX19hZGRy X29rKGFkZHIpIHx8Ci0gICAgICAgICAocmMgPSBfX2NvcHlfZnJvbV91c2VyKHBfZGF0YSwgKHZv aWQgKilhZGRyLCBieXRlcykpICkKLSAgICB7Ci0gICAgICAgIHg4Nl9lbXVsX3BhZ2VmYXVsdCgw LCBhZGRyICsgYnl0ZXMgLSByYywgY3R4dCk7ICAvKiBSZWFkIGZhdWx0LiAqLwotICAgICAgICBy ZXR1cm4gWDg2RU1VTF9FWENFUFRJT047Ci0gICAgfQotCi0gICAgcmV0dXJuIFg4NkVNVUxfT0tB WTsKLX0KLQotc3RhdGljIGludCBwdHdyX2VtdWxhdGVkX3VwZGF0ZSgKLSAgICB1bnNpZ25lZCBs b25nIGFkZHIsCi0gICAgcGFkZHJfdCBvbGQsCi0gICAgcGFkZHJfdCB2YWwsCi0gICAgdW5zaWdu ZWQgaW50IGJ5dGVzLAotICAgIHVuc2lnbmVkIGludCBkb19jbXB4Y2hnLAotICAgIHN0cnVjdCB4 ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQotewotICAgIHVuc2lnbmVkIGxvbmcgbWZuOwotICAgIHVu c2lnbmVkIGxvbmcgdW5hbGlnbmVkX2FkZHIgPSBhZGRyOwotICAgIHN0cnVjdCBwYWdlX2luZm8g KnBhZ2U7Ci0gICAgbDFfcGdlbnRyeV90IHB0ZSwgb2wxZSwgbmwxZSwgKnBsMWU7Ci0gICAgc3Ry dWN0IHZjcHUgKnYgPSBjdXJyZW50OwotICAgIHN0cnVjdCBkb21haW4gKmQgPSB2LT5kb21haW47 Ci0gICAgc3RydWN0IHB0d3JfZW11bGF0ZV9jdHh0ICpwdHdyX2N0eHQgPSBjdHh0LT5kYXRhOwot ICAgIGludCByZXQ7Ci0KLSAgICAvKiBPbmx5IGFsbG93IG5hdHVyYWxseS1hbGlnbmVkIHN0b3Jl cyB3aXRoaW4gdGhlIG9yaWdpbmFsICVjcjIgcGFnZS4gKi8KLSAgICBpZiAoIHVubGlrZWx5KCgo YWRkciBeIHB0d3JfY3R4dC0+Y3IyKSAmIFBBR0VfTUFTSykgfHwKLSAgICAgICAgICAgICAgICAg IChhZGRyICYgKGJ5dGVzIC0gMSkpKSApCi0gICAgewotICAgICAgICBnZHByaW50ayhYRU5MT0df V0FSTklORywgImJhZCBhY2Nlc3MgKGNyMj0lbHgsIGFkZHI9JWx4LCBieXRlcz0ldSlcbiIsCi0g ICAgICAgICAgICAgICAgIHB0d3JfY3R4dC0+Y3IyLCBhZGRyLCBieXRlcyk7Ci0gICAgICAgIHJl dHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLSAgICB9Ci0KLSAgICAvKiBUdXJuIGEgc3ViLXdv cmQgYWNjZXNzIGludG8gYSBmdWxsLXdvcmQgYWNjZXNzLiAqLwotICAgIGlmICggYnl0ZXMgIT0g c2l6ZW9mKHBhZGRyX3QpICkKLSAgICB7Ci0gICAgICAgIHBhZGRyX3QgICAgICBmdWxsOwotICAg ICAgICB1bnNpZ25lZCBpbnQgcmMsIG9mZnNldCA9IGFkZHIgJiAoc2l6ZW9mKHBhZGRyX3QpIC0g MSk7Ci0KLSAgICAgICAgLyogQWxpZ24gYWRkcmVzczsgcmVhZCBmdWxsIHdvcmQuICovCi0gICAg ICAgIGFkZHIgJj0gfihzaXplb2YocGFkZHJfdCkgLSAxKTsKLSAgICAgICAgaWYgKCAocmMgPSBj b3B5X2Zyb21fdXNlcigmZnVsbCwgKHZvaWQgKilhZGRyLCBzaXplb2YocGFkZHJfdCkpKSAhPSAw ICkKLSAgICAgICAgewotICAgICAgICAgICAgeDg2X2VtdWxfcGFnZWZhdWx0KDAsIC8qIFJlYWQg ZmF1bHQuICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkciArIHNpemVvZihw YWRkcl90KSAtIHJjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQpOwotICAg ICAgICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOwotICAgICAgICB9Ci0gICAgICAgIC8q IE1hc2sgb3V0IGJpdHMgcHJvdmlkZWQgYnkgY2FsbGVyLiAqLwotICAgICAgICBmdWxsICY9IH4o KCgocGFkZHJfdCkxIDw8IChieXRlcyAqIDgpKSAtIDEpIDw8IChvZmZzZXQgKiA4KSk7Ci0gICAg ICAgIC8qIFNoaWZ0IHRoZSBjYWxsZXIgdmFsdWUgYW5kIE9SIGluIHRoZSBtaXNzaW5nIGJpdHMu ICovCi0gICAgICAgIHZhbCAgJj0gKCgocGFkZHJfdCkxIDw8IChieXRlcyAqIDgpKSAtIDEpOwot ICAgICAgICB2YWwgPDw9IChvZmZzZXQpICogODsKLSAgICAgICAgdmFsICB8PSBmdWxsOwotICAg ICAgICAvKiBBbHNvIGZpbGwgaW4gbWlzc2luZyBwYXJ0cyBvZiB0aGUgY21weGNoZyBvbGQgdmFs dWUuICovCi0gICAgICAgIG9sZCAgJj0gKCgocGFkZHJfdCkxIDw8IChieXRlcyAqIDgpKSAtIDEp OwotICAgICAgICBvbGQgPDw9IChvZmZzZXQpICogODsKLSAgICAgICAgb2xkICB8PSBmdWxsOwot ICAgIH0KLQotICAgIHB0ZSAgPSBwdHdyX2N0eHQtPnB0ZTsKLSAgICBtZm4gID0gbDFlX2dldF9w Zm4ocHRlKTsKLSAgICBwYWdlID0gbWZuX3RvX3BhZ2UoX21mbihtZm4pKTsKLQotICAgIC8qIFdl IGFyZSBsb29raW5nIG9ubHkgZm9yIHJlYWQtb25seSBtYXBwaW5ncyBvZiBwLnQuIHBhZ2VzLiAq LwotICAgIEFTU0VSVCgobDFlX2dldF9mbGFncyhwdGUpICYgKF9QQUdFX1JXfF9QQUdFX1BSRVNF TlQpKSA9PSBfUEFHRV9QUkVTRU5UKTsKLSAgICBBU1NFUlQobWZuX3ZhbGlkKF9tZm4obWZuKSkp OwotICAgIEFTU0VSVCgocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSA9 PSBQR1RfbDFfcGFnZV90YWJsZSk7Ci0gICAgQVNTRVJUKChwYWdlLT51LmludXNlLnR5cGVfaW5m byAmIFBHVF9jb3VudF9tYXNrKSAhPSAwKTsKLSAgICBBU1NFUlQocGFnZV9nZXRfb3duZXIocGFn ZSkgPT0gZCk7Ci0KLSAgICAvKiBDaGVjayB0aGUgbmV3IFBURS4gKi8KLSAgICBubDFlID0gbDFl X2Zyb21faW50cHRlKHZhbCk7Ci0gICAgc3dpdGNoICggcmV0ID0gZ2V0X3BhZ2VfZnJvbV9sMWUo bmwxZSwgZCwgZCkgKQotICAgIHsKLSAgICBkZWZhdWx0OgotICAgICAgICBpZiAoIGlzX3B2XzMy Yml0X2RvbWFpbihkKSAmJiAoYnl0ZXMgPT0gNCkgJiYgKHVuYWxpZ25lZF9hZGRyICYgNCkgJiYK LSAgICAgICAgICAgICAhZG9fY21weGNoZyAmJiAobDFlX2dldF9mbGFncyhubDFlKSAmIF9QQUdF X1BSRVNFTlQpICkKLSAgICAgICAgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIElm IHRoaXMgaXMgYW4gdXBwZXItaGFsZiB3cml0ZSB0byBhIFBBRSBQVEUgdGhlbiB3ZSBhc3N1bWUg dGhhdAotICAgICAgICAgICAgICogdGhlIGd1ZXN0IGhhcyBzaW1wbHkgZ290IHRoZSB0d28gd3Jp dGVzIHRoZSB3cm9uZyB3YXkgcm91bmQuIFdlCi0gICAgICAgICAgICAgKiB6YXAgdGhlIFBSRVNF TlQgYml0IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGJvdHRvbSBoYWxmIHdpbGwKLSAgICAg ICAgICAgICAqIGJlIHdyaXR0ZW4gaW1tZWRpYXRlbHkgYWZ0ZXIgd2UgcmV0dXJuIHRvIHRoZSBn dWVzdC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX0RFQlVH LCAicHR3cl9lbXVsYXRlOiBmaXhpbmcgdXAgaW52YWxpZCBQQUUgUFRFICUiCi0gICAgICAgICAg ICAgICAgICAgICBQUklwdGUiXG4iLCBsMWVfZ2V0X2ludHB0ZShubDFlKSk7Ci0gICAgICAgICAg ICBsMWVfcmVtb3ZlX2ZsYWdzKG5sMWUsIF9QQUdFX1BSRVNFTlQpOwotICAgICAgICB9Ci0gICAg ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcs ICJjb3VsZCBub3QgZ2V0X3BhZ2VfZnJvbV9sMWUoKVxuIik7Ci0gICAgICAgICAgICByZXR1cm4g WDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSAwOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIF9QQUdFX1JXIC4uLiBfUEFHRV9SVyB8IFBB R0VfQ0FDSEVfQVRUUlM6Ci0gICAgICAgIEFTU0VSVCghKHJldCAmIH4oX1BBR0VfUlcgfCBQQUdF X0NBQ0hFX0FUVFJTKSkpOwotICAgICAgICBsMWVfZmxpcF9mbGFncyhubDFlLCByZXQpOwotICAg ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBubDFlID0gYWRqdXN0X2d1ZXN0X2wxZShubDFlLCBk KTsKLQotICAgIC8qIENoZWNrZWQgc3VjY2Vzc2Z1bGx5OiBkbyB0aGUgdXBkYXRlICh3cml0ZSBv ciBjbXB4Y2hnKS4gKi8KLSAgICBwbDFlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4obWZuKSk7Ci0g ICAgcGwxZSA9IChsMV9wZ2VudHJ5X3QgKikoKHVuc2lnbmVkIGxvbmcpcGwxZSArIChhZGRyICYg flBBR0VfTUFTSykpOwotICAgIGlmICggZG9fY21weGNoZyApCi0gICAgewotICAgICAgICBib29s IG9rYXk7Ci0gICAgICAgIGludHB0ZV90IHQgPSBvbGQ7Ci0KLSAgICAgICAgb2wxZSA9IGwxZV9m cm9tX2ludHB0ZShvbGQpOwotICAgICAgICBva2F5ID0gcGFnaW5nX2NtcHhjaGdfZ3Vlc3RfZW50 cnkodiwgJmwxZV9nZXRfaW50cHRlKCpwbDFlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZ0LCBsMWVfZ2V0X2ludHB0ZShubDFlKSwgX21mbihtZm4pKTsKLSAg ICAgICAgb2theSA9IChva2F5ICYmIHQgPT0gb2xkKTsKLQotICAgICAgICBpZiAoICFva2F5ICkK LSAgICAgICAgewotICAgICAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UocGwxZSk7Ci0gICAgICAg ICAgICBwdXRfcGFnZV9mcm9tX2wxZShubDFlLCBkKTsKLSAgICAgICAgICAgIHJldHVybiBYODZF TVVMX1JFVFJZOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG9s MWUgPSAqcGwxZTsKLSAgICAgICAgaWYgKCAhVVBEQVRFX0VOVFJZKGwxLCBwbDFlLCBvbDFlLCBu bDFlLCBtZm4sIHYsIDApICkKLSAgICAgICAgICAgIEJVRygpOwotICAgIH0KLQotICAgIHRyYWNl X3B0d3JfZW11bGF0aW9uKGFkZHIsIG5sMWUpOwotCi0gICAgdW5tYXBfZG9tYWluX3BhZ2UocGwx ZSk7Ci0KLSAgICAvKiBGaW5hbGx5LCBkcm9wIHRoZSBvbGQgUFRFLiAqLwotICAgIHB1dF9wYWdl X2Zyb21fbDFlKG9sMWUsIGQpOwotCi0gICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLX0KLQotc3Rh dGljIGludCBwdHdyX2VtdWxhdGVkX3dyaXRlKAotICAgIGVudW0geDg2X3NlZ21lbnQgc2VnLAot ICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotICAgIHZvaWQgKnBfZGF0YSwKLSAgICB1bnNpZ25l ZCBpbnQgYnl0ZXMsCi0gICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17Ci0gICAg cGFkZHJfdCB2YWwgPSAwOwotCi0gICAgaWYgKCAoYnl0ZXMgPiBzaXplb2YocGFkZHJfdCkpIHx8 IChieXRlcyAmIChieXRlcyAtIDEpKSB8fCAhYnl0ZXMgKQotICAgIHsKLSAgICAgICAgZ2Rwcmlu dGsoWEVOTE9HX1dBUk5JTkcsICJiYWQgd3JpdGUgc2l6ZSAoYWRkcj0lbHgsIGJ5dGVzPSV1KVxu IiwKLSAgICAgICAgICAgICAgICAgb2Zmc2V0LCBieXRlcyk7Ci0gICAgICAgIHJldHVybiBYODZF TVVMX1VOSEFORExFQUJMRTsKLSAgICB9Ci0KLSAgICBtZW1jcHkoJnZhbCwgcF9kYXRhLCBieXRl cyk7Ci0KLSAgICByZXR1cm4gcHR3cl9lbXVsYXRlZF91cGRhdGUob2Zmc2V0LCAwLCB2YWwsIGJ5 dGVzLCAwLCBjdHh0KTsKLX0KLQotc3RhdGljIGludCBwdHdyX2VtdWxhdGVkX2NtcHhjaGcoCi0g ICAgZW51bSB4ODZfc2VnbWVudCBzZWcsCi0gICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0gICAg dm9pZCAqcF9vbGQsCi0gICAgdm9pZCAqcF9uZXcsCi0gICAgdW5zaWduZWQgaW50IGJ5dGVzLAot ICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQotewotICAgIHBhZGRyX3Qgb2xkID0g MCwgbmV3ID0gMDsKLQotICAgIGlmICggKGJ5dGVzID4gc2l6ZW9mKHBhZGRyX3QpKSB8fCAoYnl0 ZXMgJiAoYnl0ZXMgLSAxKSkgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5J TkcsICJiYWQgY21weGNoZyBzaXplIChhZGRyPSVseCwgYnl0ZXM9JXUpXG4iLAotICAgICAgICAg ICAgICAgICBvZmZzZXQsIGJ5dGVzKTsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVB QkxFOwotICAgIH0KLQotICAgIG1lbWNweSgmb2xkLCBwX29sZCwgYnl0ZXMpOwotICAgIG1lbWNw eSgmbmV3LCBwX25ldywgYnl0ZXMpOwotCi0gICAgcmV0dXJuIHB0d3JfZW11bGF0ZWRfdXBkYXRl KG9mZnNldCwgb2xkLCBuZXcsIGJ5dGVzLCAxLCBjdHh0KTsKLX0KLQotc3RhdGljIGNvbnN0IHN0 cnVjdCB4ODZfZW11bGF0ZV9vcHMgcHR3cl9lbXVsYXRlX29wcyA9IHsKLSAgICAucmVhZCAgICAg ICA9IHB0d3JfZW11bGF0ZWRfcmVhZCwKLSAgICAuaW5zbl9mZXRjaCA9IHB0d3JfZW11bGF0ZWRf cmVhZCwKLSAgICAud3JpdGUgICAgICA9IHB0d3JfZW11bGF0ZWRfd3JpdGUsCi0gICAgLmNtcHhj aGcgICAgPSBwdHdyX2VtdWxhdGVkX2NtcHhjaGcsCi0gICAgLnZhbGlkYXRlICAgPSBwdl9lbXVs X2lzX21lbV93cml0ZSwKLSAgICAuY3B1aWQgICAgICA9IHB2X2VtdWxfY3B1aWQsCi19OwotCi0v KiBXcml0ZSBwYWdlIGZhdWx0IGhhbmRsZXI6IGNoZWNrIGlmIGd1ZXN0IGlzIHRyeWluZyB0byBt b2RpZnkgYSBQVEUuICovCi1zdGF0aWMgaW50IHB0d3JfZG9fcGFnZV9mYXVsdChzdHJ1Y3QgeDg2 X2VtdWxhdGVfY3R4dCAqY3R4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGxvbmcgYWRkciwgbDFfcGdlbnRyeV90IHB0ZSkKLXsKLSAgICBzdHJ1Y3QgcHR3cl9lbXVs YXRlX2N0eHQgcHR3cl9jdHh0ID0gewotICAgICAgICAuY3IyID0gYWRkciwKLSAgICAgICAgLnB0 ZSA9IHB0ZSwKLSAgICB9OwotICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0gICAgaW50IHJj OwotCi0gICAgaWYgKCAhZ2V0X3BhZ2VfZnJvbV9tZm4obDFlX2dldF9tZm4ocHRlKSwgY3VycmVu dC0+ZG9tYWluKSApCi0gICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLQotICAg IHBhZ2UgPSBsMWVfZ2V0X3BhZ2UocHRlKTsKLSAgICBpZiAoICFwYWdlX2xvY2socGFnZSkgKQot ICAgIHsKLSAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgIHJldHVybiBYODZFTVVMX1VO SEFORExFQUJMRTsKLSAgICB9Ci0KLSAgICBpZiAoIChwYWdlLT51LmludXNlLnR5cGVfaW5mbyAm IFBHVF90eXBlX21hc2spICE9IFBHVF9sMV9wYWdlX3RhYmxlICkKLSAgICB7Ci0gICAgICAgIHBh Z2VfdW5sb2NrKHBhZ2UpOwotICAgICAgICBwdXRfcGFnZShwYWdlKTsKLSAgICAgICAgcmV0dXJu IFg4NkVNVUxfVU5IQU5ETEVBQkxFOwotICAgIH0KLQotICAgIGN0eHQtPmRhdGEgPSAmcHR3cl9j dHh0OwotICAgIHJjID0geDg2X2VtdWxhdGUoY3R4dCwgJnB0d3JfZW11bGF0ZV9vcHMpOwotCi0g ICAgcGFnZV91bmxvY2socGFnZSk7Ci0gICAgcHV0X3BhZ2UocGFnZSk7Ci0KLSAgICByZXR1cm4g cmM7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmYXVsdCBoYW5kbGluZyBm b3IgcmVhZC1vbmx5IE1NSU8gcGFnZXMKLSAqLwotCiBpbnQgbW1pb19yb19lbXVsYXRlZF93cml0 ZSgKICAgICBlbnVtIHg4Nl9zZWdtZW50IHNlZywKICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwK QEAgLTUwMDksMTQgKzQ3NTAsNiBAQCBpbnQgbW1pb19yb19lbXVsYXRlZF93cml0ZSgKICAgICBy ZXR1cm4gWDg2RU1VTF9PS0FZOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRl X29wcyBtbWlvX3JvX2VtdWxhdGVfb3BzID0gewotICAgIC5yZWFkICAgICAgID0geDg2ZW11bF91 bmhhbmRsZWFibGVfcncsCi0gICAgLmluc25fZmV0Y2ggPSBwdHdyX2VtdWxhdGVkX3JlYWQsCi0g ICAgLndyaXRlICAgICAgPSBtbWlvX3JvX2VtdWxhdGVkX3dyaXRlLAotICAgIC52YWxpZGF0ZSAg ID0gcHZfZW11bF9pc19tZW1fd3JpdGUsCi0gICAgLmNwdWlkICAgICAgPSBwdl9lbXVsX2NwdWlk LAotfTsKLQogaW50IG1tY2ZnX2ludGVyY2VwdF93cml0ZSgKICAgICBlbnVtIHg4Nl9zZWdtZW50 IHNlZywKICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKQEAgLTUwNDgsMzkgKzQ3ODEsNiBAQCBp bnQgbW1jZmdfaW50ZXJjZXB0X3dyaXRlKAogICAgIHJldHVybiBYODZFTVVMX09LQVk7CiB9CiAK LXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIG1tY2ZnX2ludGVyY2VwdF9vcHMg PSB7Ci0gICAgLnJlYWQgICAgICAgPSB4ODZlbXVsX3VuaGFuZGxlYWJsZV9ydywKLSAgICAuaW5z bl9mZXRjaCA9IHB0d3JfZW11bGF0ZWRfcmVhZCwKLSAgICAud3JpdGUgICAgICA9IG1tY2ZnX2lu dGVyY2VwdF93cml0ZSwKLSAgICAudmFsaWRhdGUgICA9IHB2X2VtdWxfaXNfbWVtX3dyaXRlLAot ICAgIC5jcHVpZCAgICAgID0gcHZfZW11bF9jcHVpZCwKLX07Ci0KLS8qIENoZWNrIGlmIGd1ZXN0 IGlzIHRyeWluZyB0byBtb2RpZnkgYSByL28gTU1JTyBwYWdlLiAqLwotc3RhdGljIGludCBtbWlv X3JvX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGwxX3BnZW50cnlf dCBwdGUpCi17Ci0gICAgc3RydWN0IG1taW9fcm9fZW11bGF0ZV9jdHh0IG1taW9fcm9fY3R4dCA9 IHsgLmNyMiA9IGFkZHIgfTsKLSAgICBtZm5fdCBtZm4gPSBsMWVfZ2V0X21mbihwdGUpOwotCi0g ICAgaWYgKCBtZm5fdmFsaWQobWZuKSApCi0gICAgewotICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZv ICpwYWdlID0gbWZuX3RvX3BhZ2UobWZuKTsKLSAgICAgICAgY29uc3Qgc3RydWN0IGRvbWFpbiAq b3duZXIgPSBwYWdlX2dldF9vd25lcl9hbmRfcmVmZXJlbmNlKHBhZ2UpOwotCi0gICAgICAgIGlm ICggb3duZXIgKQotICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgIGlmICggb3du ZXIgIT0gZG9tX2lvICkKLSAgICAgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsK LSAgICB9Ci0KLSAgICBjdHh0LT5kYXRhID0gJm1taW9fcm9fY3R4dDsKLSAgICBpZiAoIHBjaV9y b19tbWNmZ19kZWNvZGUobWZuX3gobWZuKSwgJm1taW9fcm9fY3R4dC5zZWcsICZtbWlvX3JvX2N0 eHQuYmRmKSApCi0gICAgICAgIHJldHVybiB4ODZfZW11bGF0ZShjdHh0LCAmbW1jZmdfaW50ZXJj ZXB0X29wcyk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4geDg2X2VtdWxhdGUoY3R4dCwgJm1t aW9fcm9fZW11bGF0ZV9vcHMpOwotfQotCiB2b2lkICphbGxvY194ZW5fcGFnZXRhYmxlKHZvaWQp CiB7CiAgICAgaWYgKCBzeXN0ZW1fc3RhdGUgIT0gU1lTX1NUQVRFX2Vhcmx5X2Jvb3QgKQpAQCAt NjExMiw3MCArNTgxMiw2IEBAIHZvaWQgd3JpdGVfMzJiaXRfcHNlX2lkZW50bWFwKHVpbnQzMl90 ICpsMikKICAgICAgICAgICAgICAgICAgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSB8IF9Q QUdFX1BTRSk7CiB9CiAKLWludCBwdl9yb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwg c3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCi17Ci0gICAgbDFfcGdlbnRyeV90IHB0ZTsKLSAg ICBjb25zdCBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnJlbnQtPmRvbWFpbjsKLSAgICB1bnNp Z25lZCBpbnQgYWRkcl9zaXplID0gaXNfcHZfMzJiaXRfZG9tYWluKGN1cnJkKSA/IDMyIDogQklU U19QRVJfTE9ORzsKLSAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCBjdHh0ID0gewotICAgICAg ICAucmVncyAgICAgID0gcmVncywKLSAgICAgICAgLnZlbmRvciAgICA9IGN1cnJkLT5hcmNoLmNw dWlkLT54ODZfdmVuZG9yLAotICAgICAgICAuYWRkcl9zaXplID0gYWRkcl9zaXplLAotICAgICAg ICAuc3Bfc2l6ZSAgID0gYWRkcl9zaXplLAotICAgICAgICAubG1hICAgICAgID0gYWRkcl9zaXpl ID4gMzIsCi0gICAgfTsKLSAgICBpbnQgcmM7Ci0gICAgYm9vbCBtbWlvX3JvOwotCi0gICAgLyog QXR0ZW1wdCB0byByZWFkIHRoZSBQVEUgdGhhdCBtYXBzIHRoZSBWQSBiZWluZyBhY2Nlc3NlZC4g Ki8KLSAgICBwdGUgPSBndWVzdF9nZXRfZWZmX2wxZShhZGRyKTsKLQotICAgIC8qIFdlIGFyZSBv bmx5IGxvb2tpbmcgZm9yIHJlYWQtb25seSBtYXBwaW5ncyAqLwotICAgIGlmICggKChsMWVfZ2V0 X2ZsYWdzKHB0ZSkgJiAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXKSkgIT0gX1BBR0VfUFJFU0VO VCkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIG1taW9fcm8gPSByYW5nZXNldF9jb250YWlu c19zaW5nbGV0b24obW1pb19yb19yYW5nZXMsIGwxZV9nZXRfcGZuKHB0ZSkpOwotICAgIGlmICgg bW1pb19ybyApCi0gICAgICAgIHJjID0gbW1pb19yb19kb19wYWdlX2ZhdWx0KCZjdHh0LCBhZGRy LCBwdGUpOwotICAgIGVsc2UKLSAgICAgICAgcmMgPSBwdHdyX2RvX3BhZ2VfZmF1bHQoJmN0eHQs IGFkZHIsIHB0ZSk7Ci0KLSAgICBzd2l0Y2ggKCByYyApCi0gICAgewotICAgIGNhc2UgWDg2RU1V TF9FWENFUFRJT046Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgZW11bGF0aW9uIGNvdmVy cyB3cml0ZXMgdG86Ci0gICAgICAgICAqICAtIEwxIHBhZ2V0YWJsZXMuCi0gICAgICAgICAqICAt IE1NQ0ZHIHNwYWNlIG9yIHJlYWQtb25seSBNRk5zLgotICAgICAgICAgKiBXZSB0b2xlcmF0ZSAj UEYgKGZyb20gaGl0dGluZyBhbiBhZGphY2VudCBwYWdlIG9yIGEgc3VjY2Vzc2Z1bAotICAgICAg ICAgKiBjb25jdXJyZW50IHBhZ2V0YWJsZSB1cGRhdGUpLiAgQW55dGhpbmcgZWxzZSBpcyBhbiBl bXVsYXRpb24gYnVnLAotICAgICAgICAgKiBvciBhIGd1ZXN0IHBsYXlpbmcgd2l0aCB0aGUgaW5z dHJ1Y3Rpb24gc3RyZWFtIHVuZGVyIFhlbidzIGZlZXQuCi0gICAgICAgICAqLwotICAgICAgICBp ZiAoIGN0eHQuZXZlbnQudHlwZSA9PSBYODZfRVZFTlRUWVBFX0hXX0VYQ0VQVElPTiAmJgotICAg ICAgICAgICAgIGN0eHQuZXZlbnQudmVjdG9yID09IFRSQVBfcGFnZV9mYXVsdCApCi0gICAgICAg ICAgICBwdl9pbmplY3RfZXZlbnQoJmN0eHQuZXZlbnQpOwotICAgICAgICBlbHNlCi0gICAgICAg ICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICJVbmV4 cGVjdGVkIGV2ZW50ICh0eXBlICV1LCB2ZWN0b3IgJSN4KSBmcm9tIGVtdWxhdGlvblxuIiwKLSAg ICAgICAgICAgICAgICAgICAgIGN0eHQuZXZlbnQudHlwZSwgY3R4dC5ldmVudC52ZWN0b3IpOwot Ci0gICAgICAgIC8qIEZhbGx0aHJvdWdoICovCi0gICAgY2FzZSBYODZFTVVMX09LQVk6Ci0gICAg ICAgIGlmICggY3R4dC5yZXRpcmUuc2luZ2xlc3RlcCApCi0gICAgICAgICAgICBwdl9pbmplY3Rf aHdfZXhjZXB0aW9uKFRSQVBfZGVidWcsIFg4Nl9FVkVOVF9OT19FQyk7Ci0KLSAgICAgICAgLyog RmFsbHRocm91Z2ggKi8KLSAgICBjYXNlIFg4NkVNVUxfUkVUUlk6Ci0gICAgICAgIGlmICggbW1p b19ybyApCi0gICAgICAgICAgICBwZXJmY19pbmNyKG1taW9fcm9fZW11bGF0aW9ucyk7Ci0gICAg ICAgIGVsc2UKLSAgICAgICAgICAgIHBlcmZjX2luY3IocHR3cl9lbXVsYXRpb25zKTsKLSAgICAg ICAgcmV0dXJuIEVYQ1JFVF9mYXVsdF9maXhlZDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0K LQogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMKZGlmZiAtLWdpdCBhL3hlbi9h cmNoL3g4Ni9wdi9NYWtlZmlsZSBiL3hlbi9hcmNoL3g4Ni9wdi9NYWtlZmlsZQppbmRleCA0ZTE1 NDg0NDcxLi4yNGFmMGI1NTBlIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUK KysrIGIveGVuL2FyY2gveDg2L3B2L01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQCBvYmoteSArPSBl bXVsLXByaXYtb3Aubwogb2JqLXkgKz0gaHlwZXJjYWxsLm8KIG9iai15ICs9IGlyZXQubwogb2Jq LXkgKz0gbWlzYy1oeXBlcmNhbGxzLm8KK29iai15ICs9IHJvLXBhZ2UtZmF1bHQubwogb2JqLXkg Kz0gdHJhcHMubwogCiBvYmotYmluLXkgKz0gZG9tMF9idWlsZC5pbml0Lm8KZGlmZiAtLWdpdCBh L3hlbi9hcmNoL3g4Ni9wdi9yby1wYWdlLWZhdWx0LmMgYi94ZW4vYXJjaC94ODYvcHYvcm8tcGFn ZS1mYXVsdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjUzYTNjMTVh MzEKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vYXJjaC94ODYvcHYvcm8tcGFnZS1mYXVsdC5jCkBA IC0wLDAgKzEsMzk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhcmNoL3g4Ni9wdi9y by1wYWdlLWZhdWx0LmMKKyAqCisgKiBSZWFkLW9ubHkgcGFnZSBmYXVsdCBlbXVsYXRpb24gZm9y IFBWIGd1ZXN0cworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IEsgQSBGcmFzZXIKKyAq IENvcHlyaWdodCAoYykgMjAwNCBDaHJpc3RpYW4gTGltcGFjaAorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8eGVuL2d1ZXN0X2FjY2Vzcy5oPgorI2lu Y2x1ZGUgPHhlbi9yYW5nZXNldC5oPgorI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgorI2luY2x1ZGUg PHhlbi90cmFjZS5oPgorCisjaW5jbHVkZSA8YXNtL2RvbWFpbi5oPgorI2luY2x1ZGUgPGFzbS9t bS5oPgorI2luY2x1ZGUgPGFzbS9wY2kuaD4KKyNpbmNsdWRlIDxhc20vcHYvbW0uaD4KKworI2lu Y2x1ZGUgImVtdWxhdGUuaCIKKyNpbmNsdWRlICJtbS5oIgorCisvKiBPdmVycmlkZSBtYWNyb3Mg ZnJvbSBhc20vcGFnZS5oIHRvIG1ha2UgdGhlbSB3b3JrIHdpdGggbWZuX3QgKi8KKyN1bmRlZiBt Zm5fdG9fcGFnZQorI2RlZmluZSBtZm5fdG9fcGFnZShtZm4pIF9fbWZuX3RvX3BhZ2UobWZuX3go bWZuKSkKKyN1bmRlZiBwYWdlX3RvX21mbgorI2RlZmluZSBwYWdlX3RvX21mbihwZykgX21mbihf X3BhZ2VfdG9fbWZuKHBnKSkKKworLyoqKioqKioqKioqKioqKioqKioqKgorICogV3JpdGFibGUg UGFnZXRhYmxlcworICovCisKK3N0cnVjdCBwdHdyX2VtdWxhdGVfY3R4dCB7CisgICAgdW5zaWdu ZWQgbG9uZyBjcjI7CisgICAgbDFfcGdlbnRyeV90ICBwdGU7Cit9OworCitzdGF0aWMgaW50IHB0 d3JfZW11bGF0ZWRfcmVhZChlbnVtIHg4Nl9zZWdtZW50IHNlZywgdW5zaWduZWQgbG9uZyBvZmZz ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX2RhdGEsIHVuc2lnbmVk IGludCBieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11 bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHVuc2lnbmVkIGludCByYyA9IGJ5dGVzOworICAgIHVu c2lnbmVkIGxvbmcgYWRkciA9IG9mZnNldDsKKworICAgIGlmICggIV9fYWRkcl9vayhhZGRyKSB8 fAorICAgICAgICAgKHJjID0gX19jb3B5X2Zyb21fdXNlcihwX2RhdGEsICh2b2lkICopYWRkciwg Ynl0ZXMpKSApCisgICAgeworICAgICAgICB4ODZfZW11bF9wYWdlZmF1bHQoMCwgYWRkciArIGJ5 dGVzIC0gcmMsIGN0eHQpOyAgLyogUmVhZCBmYXVsdC4gKi8KKyAgICAgICAgcmV0dXJuIFg4NkVN VUxfRVhDRVBUSU9OOworICAgIH0KKworICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9CisKK3N0 YXRpYyBpbnQgcHR3cl9lbXVsYXRlZF91cGRhdGUodW5zaWduZWQgbG9uZyBhZGRyLCBwYWRkcl90 IG9sZCwgcGFkZHJfdCB2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBieXRlcywgdW5zaWduZWQgaW50IGRvX2NtcHhjaGcsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHVu c2lnbmVkIGxvbmcgbWZuOworICAgIHVuc2lnbmVkIGxvbmcgdW5hbGlnbmVkX2FkZHIgPSBhZGRy OworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgbDFfcGdlbnRyeV90IHB0ZSwgb2wx ZSwgbmwxZSwgKnBsMWU7CisgICAgc3RydWN0IHZjcHUgKnYgPSBjdXJyZW50OworICAgIHN0cnVj dCBkb21haW4gKmQgPSB2LT5kb21haW47CisgICAgc3RydWN0IHB0d3JfZW11bGF0ZV9jdHh0ICpw dHdyX2N0eHQgPSBjdHh0LT5kYXRhOworICAgIGludCByZXQ7CisKKyAgICAvKiBPbmx5IGFsbG93 IG5hdHVyYWxseS1hbGlnbmVkIHN0b3JlcyB3aXRoaW4gdGhlIG9yaWdpbmFsICVjcjIgcGFnZS4g Ki8KKyAgICBpZiAoIHVubGlrZWx5KCgoYWRkciBeIHB0d3JfY3R4dC0+Y3IyKSAmIFBBR0VfTUFT SykgfHwKKyAgICAgICAgICAgICAgICAgIChhZGRyICYgKGJ5dGVzIC0gMSkpKSApCisgICAgewor ICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgImJhZCBhY2Nlc3MgKGNyMj0lbHgsIGFk ZHI9JWx4LCBieXRlcz0ldSlcbiIsCisgICAgICAgICAgICAgICAgIHB0d3JfY3R4dC0+Y3IyLCBh ZGRyLCBieXRlcyk7CisgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKyAgICB9 CisKKyAgICAvKiBUdXJuIGEgc3ViLXdvcmQgYWNjZXNzIGludG8gYSBmdWxsLXdvcmQgYWNjZXNz LiAqLworICAgIGlmICggYnl0ZXMgIT0gc2l6ZW9mKHBhZGRyX3QpICkKKyAgICB7CisgICAgICAg IHBhZGRyX3QgICAgICBmdWxsOworICAgICAgICB1bnNpZ25lZCBpbnQgcmMsIG9mZnNldCA9IGFk ZHIgJiAoc2l6ZW9mKHBhZGRyX3QpIC0gMSk7CisKKyAgICAgICAgLyogQWxpZ24gYWRkcmVzczsg cmVhZCBmdWxsIHdvcmQuICovCisgICAgICAgIGFkZHIgJj0gfihzaXplb2YocGFkZHJfdCkgLSAx KTsKKyAgICAgICAgaWYgKCAocmMgPSBjb3B5X2Zyb21fdXNlcigmZnVsbCwgKHZvaWQgKilhZGRy LCBzaXplb2YocGFkZHJfdCkpKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgeDg2X2Vt dWxfcGFnZWZhdWx0KDAsIC8qIFJlYWQgZmF1bHQuICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYWRkciArIHNpemVvZihwYWRkcl90KSAtIHJjLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGN0eHQpOworICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9O OworICAgICAgICB9CisgICAgICAgIC8qIE1hc2sgb3V0IGJpdHMgcHJvdmlkZWQgYnkgY2FsbGVy LiAqLworICAgICAgICBmdWxsICY9IH4oKCgocGFkZHJfdCkxIDw8IChieXRlcyAqIDgpKSAtIDEp IDw8IChvZmZzZXQgKiA4KSk7CisgICAgICAgIC8qIFNoaWZ0IHRoZSBjYWxsZXIgdmFsdWUgYW5k IE9SIGluIHRoZSBtaXNzaW5nIGJpdHMuICovCisgICAgICAgIHZhbCAgJj0gKCgocGFkZHJfdCkx IDw8IChieXRlcyAqIDgpKSAtIDEpOworICAgICAgICB2YWwgPDw9IChvZmZzZXQpICogODsKKyAg ICAgICAgdmFsICB8PSBmdWxsOworICAgICAgICAvKiBBbHNvIGZpbGwgaW4gbWlzc2luZyBwYXJ0 cyBvZiB0aGUgY21weGNoZyBvbGQgdmFsdWUuICovCisgICAgICAgIG9sZCAgJj0gKCgocGFkZHJf dCkxIDw8IChieXRlcyAqIDgpKSAtIDEpOworICAgICAgICBvbGQgPDw9IChvZmZzZXQpICogODsK KyAgICAgICAgb2xkICB8PSBmdWxsOworICAgIH0KKworICAgIHB0ZSAgPSBwdHdyX2N0eHQtPnB0 ZTsKKyAgICBtZm4gID0gbDFlX2dldF9wZm4ocHRlKTsKKyAgICBwYWdlID0gbWZuX3RvX3BhZ2Uo X21mbihtZm4pKTsKKworICAgIC8qIFdlIGFyZSBsb29raW5nIG9ubHkgZm9yIHJlYWQtb25seSBt YXBwaW5ncyBvZiBwLnQuIHBhZ2VzLiAqLworICAgIEFTU0VSVCgobDFlX2dldF9mbGFncyhwdGUp ICYgKF9QQUdFX1JXfF9QQUdFX1BSRVNFTlQpKSA9PSBfUEFHRV9QUkVTRU5UKTsKKyAgICBBU1NF UlQobWZuX3ZhbGlkKF9tZm4obWZuKSkpOworICAgIEFTU0VSVCgocGFnZS0+dS5pbnVzZS50eXBl X2luZm8gJiBQR1RfdHlwZV9tYXNrKSA9PSBQR1RfbDFfcGFnZV90YWJsZSk7CisgICAgQVNTRVJU KChwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIFBHVF9jb3VudF9tYXNrKSAhPSAwKTsKKyAgICBB U1NFUlQocGFnZV9nZXRfb3duZXIocGFnZSkgPT0gZCk7CisKKyAgICAvKiBDaGVjayB0aGUgbmV3 IFBURS4gKi8KKyAgICBubDFlID0gbDFlX2Zyb21faW50cHRlKHZhbCk7CisgICAgc3dpdGNoICgg cmV0ID0gZ2V0X3BhZ2VfZnJvbV9sMWUobmwxZSwgZCwgZCkgKQorICAgIHsKKyAgICBkZWZhdWx0 OgorICAgICAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihkKSAmJiAoYnl0ZXMgPT0gNCkgJiYg KHVuYWxpZ25lZF9hZGRyICYgNCkgJiYKKyAgICAgICAgICAgICAhZG9fY21weGNoZyAmJiAobDFl X2dldF9mbGFncyhubDFlKSAmIF9QQUdFX1BSRVNFTlQpICkKKyAgICAgICAgeworICAgICAgICAg ICAgLyoKKyAgICAgICAgICAgICAqIElmIHRoaXMgaXMgYW4gdXBwZXItaGFsZiB3cml0ZSB0byBh IFBBRSBQVEUgdGhlbiB3ZSBhc3N1bWUgdGhhdAorICAgICAgICAgICAgICogdGhlIGd1ZXN0IGhh cyBzaW1wbHkgZ290IHRoZSB0d28gd3JpdGVzIHRoZSB3cm9uZyB3YXkgcm91bmQuIFdlCisgICAg ICAgICAgICAgKiB6YXAgdGhlIFBSRVNFTlQgYml0IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhl IGJvdHRvbSBoYWxmIHdpbGwKKyAgICAgICAgICAgICAqIGJlIHdyaXR0ZW4gaW1tZWRpYXRlbHkg YWZ0ZXIgd2UgcmV0dXJuIHRvIHRoZSBndWVzdC4KKyAgICAgICAgICAgICAqLworICAgICAgICAg ICAgZ2RwcmludGsoWEVOTE9HX0RFQlVHLCAicHR3cl9lbXVsYXRlOiBmaXhpbmcgdXAgaW52YWxp ZCBQQUUgUFRFICUiCisgICAgICAgICAgICAgICAgICAgICBQUklwdGUiXG4iLCBsMWVfZ2V0X2lu dHB0ZShubDFlKSk7CisgICAgICAgICAgICBsMWVfcmVtb3ZlX2ZsYWdzKG5sMWUsIF9QQUdFX1BS RVNFTlQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg Z2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJjb3VsZCBub3QgZ2V0X3BhZ2VfZnJvbV9sMWUoKVxu Iik7CisgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisgICAgICAgIH0K KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAwOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIF9Q QUdFX1JXIC4uLiBfUEFHRV9SVyB8IFBBR0VfQ0FDSEVfQVRUUlM6CisgICAgICAgIEFTU0VSVCgh KHJldCAmIH4oX1BBR0VfUlcgfCBQQUdFX0NBQ0hFX0FUVFJTKSkpOworICAgICAgICBsMWVfZmxp cF9mbGFncyhubDFlLCByZXQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBubDFlID0g YWRqdXN0X2d1ZXN0X2wxZShubDFlLCBkKTsKKworICAgIC8qIENoZWNrZWQgc3VjY2Vzc2Z1bGx5 OiBkbyB0aGUgdXBkYXRlICh3cml0ZSBvciBjbXB4Y2hnKS4gKi8KKyAgICBwbDFlID0gbWFwX2Rv bWFpbl9wYWdlKF9tZm4obWZuKSk7CisgICAgcGwxZSA9IChsMV9wZ2VudHJ5X3QgKikoKHVuc2ln bmVkIGxvbmcpcGwxZSArIChhZGRyICYgflBBR0VfTUFTSykpOworICAgIGlmICggZG9fY21weGNo ZyApCisgICAgeworICAgICAgICBib29sIG9rYXk7CisgICAgICAgIGludHB0ZV90IHQgPSBvbGQ7 CisKKyAgICAgICAgb2wxZSA9IGwxZV9mcm9tX2ludHB0ZShvbGQpOworICAgICAgICBva2F5ID0g cGFnaW5nX2NtcHhjaGdfZ3Vlc3RfZW50cnkodiwgJmwxZV9nZXRfaW50cHRlKCpwbDFlKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0LCBsMWVfZ2V0X2ludHB0 ZShubDFlKSwgX21mbihtZm4pKTsKKyAgICAgICAgb2theSA9IChva2F5ICYmIHQgPT0gb2xkKTsK KworICAgICAgICBpZiAoICFva2F5ICkKKyAgICAgICAgeworICAgICAgICAgICAgdW5tYXBfZG9t YWluX3BhZ2UocGwxZSk7CisgICAgICAgICAgICBwdXRfcGFnZV9mcm9tX2wxZShubDFlLCBkKTsK KyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX1JFVFJZOworICAgICAgICB9CisgICAgfQorICAg IGVsc2UKKyAgICB7CisgICAgICAgIG9sMWUgPSAqcGwxZTsKKyAgICAgICAgaWYgKCAhVVBEQVRF X0VOVFJZKGwxLCBwbDFlLCBvbDFlLCBubDFlLCBtZm4sIHYsIDApICkKKyAgICAgICAgICAgIEJV RygpOworICAgIH0KKworICAgIHRyYWNlX3B0d3JfZW11bGF0aW9uKGFkZHIsIG5sMWUpOworCisg ICAgdW5tYXBfZG9tYWluX3BhZ2UocGwxZSk7CisKKyAgICAvKiBGaW5hbGx5LCBkcm9wIHRoZSBv bGQgUFRFLiAqLworICAgIHB1dF9wYWdlX2Zyb21fbDFlKG9sMWUsIGQpOworCisgICAgcmV0dXJu IFg4NkVNVUxfT0tBWTsKK30KKworc3RhdGljIGludCBwdHdyX2VtdWxhdGVkX3dyaXRlKGVudW0g eDg2X3NlZ21lbnQgc2VnLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICpwX2RhdGEsIHVuc2lnbmVkIGludCBieXRlcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sK KyAgICBwYWRkcl90IHZhbCA9IDA7CisKKyAgICBpZiAoIChieXRlcyA+IHNpemVvZihwYWRkcl90 KSkgfHwgKGJ5dGVzICYgKGJ5dGVzIC0gMSkpIHx8ICFieXRlcyApCisgICAgeworICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywgImJhZCB3cml0ZSBzaXplIChhZGRyPSVseCwgYnl0ZXM9 JXUpXG4iLAorICAgICAgICAgICAgICAgICBvZmZzZXQsIGJ5dGVzKTsKKyAgICAgICAgcmV0dXJu IFg4NkVNVUxfVU5IQU5ETEVBQkxFOworICAgIH0KKworICAgIG1lbWNweSgmdmFsLCBwX2RhdGEs IGJ5dGVzKTsKKworICAgIHJldHVybiBwdHdyX2VtdWxhdGVkX3VwZGF0ZShvZmZzZXQsIDAsIHZh bCwgYnl0ZXMsIDAsIGN0eHQpOworfQorCitzdGF0aWMgaW50IHB0d3JfZW11bGF0ZWRfY21weGNo ZyhlbnVtIHg4Nl9zZWdtZW50IHNlZywgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX29sZCwgdm9pZCAqcF9uZXcsIHVuc2lnbmVk IGludCBieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZf ZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHBhZGRyX3Qgb2xkID0gMCwgbmV3ID0gMDsKKwor ICAgIGlmICggKGJ5dGVzID4gc2l6ZW9mKHBhZGRyX3QpKSB8fCAoYnl0ZXMgJiAoYnl0ZXMgLSAx KSkgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJiYWQgY21weGNo ZyBzaXplIChhZGRyPSVseCwgYnl0ZXM9JXUpXG4iLAorICAgICAgICAgICAgICAgICBvZmZzZXQs IGJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworICAgIH0KKwor ICAgIG1lbWNweSgmb2xkLCBwX29sZCwgYnl0ZXMpOworICAgIG1lbWNweSgmbmV3LCBwX25ldywg Ynl0ZXMpOworCisgICAgcmV0dXJuIHB0d3JfZW11bGF0ZWRfdXBkYXRlKG9mZnNldCwgb2xkLCBu ZXcsIGJ5dGVzLCAxLCBjdHh0KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0 ZV9vcHMgcHR3cl9lbXVsYXRlX29wcyA9IHsKKyAgICAucmVhZCAgICAgICA9IHB0d3JfZW11bGF0 ZWRfcmVhZCwKKyAgICAuaW5zbl9mZXRjaCA9IHB0d3JfZW11bGF0ZWRfcmVhZCwKKyAgICAud3Jp dGUgICAgICA9IHB0d3JfZW11bGF0ZWRfd3JpdGUsCisgICAgLmNtcHhjaGcgICAgPSBwdHdyX2Vt dWxhdGVkX2NtcHhjaGcsCisgICAgLnZhbGlkYXRlICAgPSBwdl9lbXVsX2lzX21lbV93cml0ZSwK KyAgICAuY3B1aWQgICAgICA9IHB2X2VtdWxfY3B1aWQsCit9OworCisvKiBXcml0ZSBwYWdlIGZh dWx0IGhhbmRsZXI6IGNoZWNrIGlmIGd1ZXN0IGlzIHRyeWluZyB0byBtb2RpZnkgYSBQVEUuICov CitzdGF0aWMgaW50IHB0d3JfZG9fcGFnZV9mYXVsdChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAq Y3R4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwg bDFfcGdlbnRyeV90IHB0ZSkKK3sKKyAgICBzdHJ1Y3QgcHR3cl9lbXVsYXRlX2N0eHQgcHR3cl9j dHh0ID0geworICAgICAgICAuY3IyID0gYWRkciwKKyAgICAgICAgLnB0ZSA9IHB0ZSwKKyAgICB9 OworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgaW50IHJjOworCisgICAgaWYgKCAh Z2V0X3BhZ2VfZnJvbV9tZm4obDFlX2dldF9tZm4ocHRlKSwgY3VycmVudC0+ZG9tYWluKSApCisg ICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKworICAgIHBhZ2UgPSBsMWVfZ2V0 X3BhZ2UocHRlKTsKKyAgICBpZiAoICFwYWdlX2xvY2socGFnZSkgKQorICAgIHsKKyAgICAgICAg cHV0X3BhZ2UocGFnZSk7CisgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKyAg ICB9CisKKyAgICBpZiAoIChwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIFBHVF90eXBlX21hc2sp ICE9IFBHVF9sMV9wYWdlX3RhYmxlICkKKyAgICB7CisgICAgICAgIHBhZ2VfdW5sb2NrKHBhZ2Up OworICAgICAgICBwdXRfcGFnZShwYWdlKTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5E TEVBQkxFOworICAgIH0KKworICAgIGN0eHQtPmRhdGEgPSAmcHR3cl9jdHh0OworICAgIHJjID0g eDg2X2VtdWxhdGUoY3R4dCwgJnB0d3JfZW11bGF0ZV9vcHMpOworCisgICAgcGFnZV91bmxvY2so cGFnZSk7CisgICAgcHV0X3BhZ2UocGFnZSk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZmF1bHQgaGFuZGxpbmcg Zm9yIHJlYWQtb25seSBNTUlPIHBhZ2VzCisgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB4ODZf ZW11bGF0ZV9vcHMgbW1pb19yb19lbXVsYXRlX29wcyA9IHsKKyAgICAucmVhZCAgICAgICA9IHg4 NmVtdWxfdW5oYW5kbGVhYmxlX3J3LAorICAgIC5pbnNuX2ZldGNoID0gcHR3cl9lbXVsYXRlZF9y ZWFkLAorICAgIC53cml0ZSAgICAgID0gbW1pb19yb19lbXVsYXRlZF93cml0ZSwKKyAgICAudmFs aWRhdGUgICA9IHB2X2VtdWxfaXNfbWVtX3dyaXRlLAorICAgIC5jcHVpZCAgICAgID0gcHZfZW11 bF9jcHVpZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIG1tY2Zn X2ludGVyY2VwdF9vcHMgPSB7CisgICAgLnJlYWQgICAgICAgPSB4ODZlbXVsX3VuaGFuZGxlYWJs ZV9ydywKKyAgICAuaW5zbl9mZXRjaCA9IHB0d3JfZW11bGF0ZWRfcmVhZCwKKyAgICAud3JpdGUg ICAgICA9IG1tY2ZnX2ludGVyY2VwdF93cml0ZSwKKyAgICAudmFsaWRhdGUgICA9IHB2X2VtdWxf aXNfbWVtX3dyaXRlLAorICAgIC5jcHVpZCAgICAgID0gcHZfZW11bF9jcHVpZCwKK307CisKKy8q IENoZWNrIGlmIGd1ZXN0IGlzIHRyeWluZyB0byBtb2RpZnkgYSByL28gTU1JTyBwYWdlLiAqLwor c3RhdGljIGludCBtbWlvX3JvX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQg KmN0eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFk ZHIsIGwxX3BnZW50cnlfdCBwdGUpCit7CisgICAgc3RydWN0IG1taW9fcm9fZW11bGF0ZV9jdHh0 IG1taW9fcm9fY3R4dCA9IHsgLmNyMiA9IGFkZHIgfTsKKyAgICBtZm5fdCBtZm4gPSBsMWVfZ2V0 X21mbihwdGUpOworCisgICAgaWYgKCBtZm5fdmFsaWQobWZuKSApCisgICAgeworICAgICAgICBz dHJ1Y3QgcGFnZV9pbmZvICpwYWdlID0gbWZuX3RvX3BhZ2UobWZuKTsKKyAgICAgICAgY29uc3Qg c3RydWN0IGRvbWFpbiAqb3duZXIgPSBwYWdlX2dldF9vd25lcl9hbmRfcmVmZXJlbmNlKHBhZ2Up OworCisgICAgICAgIGlmICggb3duZXIgKQorICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Cisg ICAgICAgIGlmICggb3duZXIgIT0gZG9tX2lvICkKKyAgICAgICAgICAgIHJldHVybiBYODZFTVVM X1VOSEFORExFQUJMRTsKKyAgICB9CisKKyAgICBjdHh0LT5kYXRhID0gJm1taW9fcm9fY3R4dDsK KyAgICBpZiAoIHBjaV9yb19tbWNmZ19kZWNvZGUobWZuX3gobWZuKSwgJm1taW9fcm9fY3R4dC5z ZWcsICZtbWlvX3JvX2N0eHQuYmRmKSApCisgICAgICAgIHJldHVybiB4ODZfZW11bGF0ZShjdHh0 LCAmbW1jZmdfaW50ZXJjZXB0X29wcyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4geDg2X2Vt dWxhdGUoY3R4dCwgJm1taW9fcm9fZW11bGF0ZV9vcHMpOworfQorCitpbnQgcHZfcm9fcGFnZV9m YXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQorewor ICAgIGwxX3BnZW50cnlfdCBwdGU7CisgICAgY29uc3Qgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBj dXJyZW50LT5kb21haW47CisgICAgdW5zaWduZWQgaW50IGFkZHJfc2l6ZSA9IGlzX3B2XzMyYml0 X2RvbWFpbihjdXJyZCkgPyAzMiA6IEJJVFNfUEVSX0xPTkc7CisgICAgc3RydWN0IHg4Nl9lbXVs YXRlX2N0eHQgY3R4dCA9IHsKKyAgICAgICAgLnJlZ3MgICAgICA9IHJlZ3MsCisgICAgICAgIC52 ZW5kb3IgICAgPSBjdXJyZC0+YXJjaC5jcHVpZC0+eDg2X3ZlbmRvciwKKyAgICAgICAgLmFkZHJf c2l6ZSA9IGFkZHJfc2l6ZSwKKyAgICAgICAgLnNwX3NpemUgICA9IGFkZHJfc2l6ZSwKKyAgICAg ICAgLmxtYSAgICAgICA9IGFkZHJfc2l6ZSA+IDMyLAorICAgIH07CisgICAgaW50IHJjOworICAg IGJvb2wgbW1pb19ybzsKKworICAgIC8qIEF0dGVtcHQgdG8gcmVhZCB0aGUgUFRFIHRoYXQgbWFw cyB0aGUgVkEgYmVpbmcgYWNjZXNzZWQuICovCisgICAgcHRlID0gZ3Vlc3RfZ2V0X2VmZl9sMWUo YWRkcik7CisKKyAgICAvKiBXZSBhcmUgb25seSBsb29raW5nIGZvciByZWFkLW9ubHkgbWFwcGlu Z3MgKi8KKyAgICBpZiAoICgobDFlX2dldF9mbGFncyhwdGUpICYgKF9QQUdFX1BSRVNFTlQgfCBf UEFHRV9SVykpICE9IF9QQUdFX1BSRVNFTlQpICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBt bWlvX3JvID0gcmFuZ2VzZXRfY29udGFpbnNfc2luZ2xldG9uKG1taW9fcm9fcmFuZ2VzLCBsMWVf Z2V0X3BmbihwdGUpKTsKKyAgICBpZiAoIG1taW9fcm8gKQorICAgICAgICByYyA9IG1taW9fcm9f ZG9fcGFnZV9mYXVsdCgmY3R4dCwgYWRkciwgcHRlKTsKKyAgICBlbHNlCisgICAgICAgIHJjID0g cHR3cl9kb19wYWdlX2ZhdWx0KCZjdHh0LCBhZGRyLCBwdGUpOworCisgICAgc3dpdGNoICggcmMg KQorICAgIHsKKyAgICBjYXNlIFg4NkVNVUxfRVhDRVBUSU9OOgorICAgICAgICAvKgorICAgICAg ICAgKiBUaGlzIGVtdWxhdGlvbiBjb3ZlcnMgd3JpdGVzIHRvOgorICAgICAgICAgKiAgLSBMMSBw YWdldGFibGVzLgorICAgICAgICAgKiAgLSBNTUNGRyBzcGFjZSBvciByZWFkLW9ubHkgTUZOcy4K KyAgICAgICAgICogV2UgdG9sZXJhdGUgI1BGIChmcm9tIGhpdHRpbmcgYW4gYWRqYWNlbnQgcGFn ZSBvciBhIHN1Y2Nlc3NmdWwKKyAgICAgICAgICogY29uY3VycmVudCBwYWdldGFibGUgdXBkYXRl KS4gIEFueXRoaW5nIGVsc2UgaXMgYW4gZW11bGF0aW9uIGJ1ZywKKyAgICAgICAgICogb3IgYSBn dWVzdCBwbGF5aW5nIHdpdGggdGhlIGluc3RydWN0aW9uIHN0cmVhbSB1bmRlciBYZW4ncyBmZWV0 LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBjdHh0LmV2ZW50LnR5cGUgPT0gWDg2X0VWRU5U VFlQRV9IV19FWENFUFRJT04gJiYKKyAgICAgICAgICAgICBjdHh0LmV2ZW50LnZlY3RvciA9PSBU UkFQX3BhZ2VfZmF1bHQgKQorICAgICAgICAgICAgcHZfaW5qZWN0X2V2ZW50KCZjdHh0LmV2ZW50 KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisg ICAgICAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBldmVudCAodHlwZSAldSwgdmVjdG9yICUj eCkgZnJvbSBlbXVsYXRpb25cbiIsCisgICAgICAgICAgICAgICAgICAgICBjdHh0LmV2ZW50LnR5 cGUsIGN0eHQuZXZlbnQudmVjdG9yKTsKKworICAgICAgICAvKiBGYWxsdGhyb3VnaCAqLworICAg IGNhc2UgWDg2RU1VTF9PS0FZOgorICAgICAgICBpZiAoIGN0eHQucmV0aXJlLnNpbmdsZXN0ZXAg KQorICAgICAgICAgICAgcHZfaW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2RlYnVnLCBYODZfRVZF TlRfTk9fRUMpOworCisgICAgICAgIC8qIEZhbGx0aHJvdWdoICovCisgICAgY2FzZSBYODZFTVVM X1JFVFJZOgorICAgICAgICBpZiAoIG1taW9fcm8gKQorICAgICAgICAgICAgcGVyZmNfaW5jciht bWlvX3JvX2VtdWxhdGlvbnMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwZXJmY19pbmNy KHB0d3JfZW11bGF0aW9ucyk7CisgICAgICAgIHJldHVybiBFWENSRVRfZmF1bHRfZml4ZWQ7Cisg ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBt b2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICog dGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZm IC0tZ2l0IGEveGVuL2FyY2gveDg2L3RyYXBzLmMgYi94ZW4vYXJjaC94ODYvdHJhcHMuYwppbmRl eCA2MDkxZjIzOWNlLi5kODRkYjRhY2RhIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvdHJhcHMu YworKysgYi94ZW4vYXJjaC94ODYvdHJhcHMuYwpAQCAtNzgsNiArNzgsNyBAQAogI2luY2x1ZGUg PGFzbS9jcHVpZC5oPgogI2luY2x1ZGUgPHhzbS94c20uaD4KICNpbmNsdWRlIDxhc20vcHYvdHJh cHMuaD4KKyNpbmNsdWRlIDxhc20vcHYvbW0uaD4KIAogLyoKICAqIG9wdF9ubWk6IG9uZSBvZiAn aWdub3JlJywgJ2RvbTAnLCBvciAnZmF0YWwnLgpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNt LXg4Ni9tbS5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9tbS5oCmluZGV4IDc2NzA5MTJlMGEuLmE0 OGQ3NWQ0MzQgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvbW0uaAorKysgYi94ZW4v aW5jbHVkZS9hc20teDg2L21tLmgKQEAgLTUyNSw4ICs1MjUsNiBAQCBleHRlcm4gaW50IG1tY2Zn X2ludGVyY2VwdF93cml0ZShlbnVtIHg4Nl9zZWdtZW50IHNlZywKIGludCBwdl9lbXVsX2NwdWlk KHVpbnQzMl90IGxlYWYsIHVpbnQzMl90IHN1YmxlYWYsCiAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgY3B1aWRfbGVhZiAqcmVzLCBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7CiAKLWlu dCBwdl9yb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBjcHVfdXNlcl9yZWdzICop OwotCiBpbnQgYXVkaXRfYWRqdXN0X3BndGFibGVzKHN0cnVjdCBkb21haW4gKmQsIGludCBkaXIs IGludCBub2lzeSk7CiAKIGV4dGVybiBpbnQgcGFnZWZhdWx0X2J5X21lbWFkZCh1bnNpZ25lZCBs b25nIGFkZHIsIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKTsKZGlmZiAtLWdpdCBhL3hlbi9p bmNsdWRlL2FzbS14ODYvcHYvbW0uaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvcHYvbW0uaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lMjUxZTFlZjA2Ci0tLSAvZGV2L251 bGwKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi9tbS5oCkBAIC0wLDAgKzEsMzggQEAKKy8q CisgKiBhc20teDg2L3B2L21tLmgKKyAqCisgKiBNZW1vcnkgbWFuYWdlbWVudCBpbnRlcmZhY2Vz IGZvciBQViBndWVzdHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgV2VpIExpdSA8d2VpLmxp dTJAY2l0cml4LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UsIHZl cnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KyAqLworCisjaWZuZGVmIF9fWDg2X1BWX01NX0hfXworI2RlZmluZSBfX1g4Nl9QVl9NTV9IX18K KworI2lmZGVmIENPTkZJR19QVgorCitpbnQgcHZfcm9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25n IGFkZHIsIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKTsKKworI2Vsc2UKKworc3RhdGljIGlu bGluZSBpbnQgcHZfcm9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQorewor ICAgIHJldHVybiAwOworfQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fWDg2X1BWX01NX0hfXyAq LwotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRw czovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==