From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v5 20/23] x86/mm: split out PV mm code to pv/mm.c Date: Thu, 14 Sep 2017 13:58:49 +0100 Message-ID: <20170914125852.22129-21-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.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dsUCZ-0008HQ-Db for xen-devel@lists.xenproject.org; Thu, 14 Sep 2017 13:29:07 +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 QSBsb2FkIG9mIGZ1bmN0aW9ucyBhcmUgbW92ZWQ6CgoxLiB7Z2V0LHB1dH1fcGFnZV9mcm9tX2x7 MiwzLDR9ZQoyLiBwdl97YWxsb2MsZnJlZX1fcGFnZV90eXBlCjMuIGFsbCBoZWxwZXJzIGZvciB0 aGUgYWJvdmUKClRoZSBsMWUgZnVuY3Rpb25zIGNhbid0IGJlIG1vdmVkIGJlY2F1c2UgdGhleSBh cmUgbmVlZGVkIGJ5IHNoYWRvdwpjb2RlIGFzIHdlbGwuCgpGaXggY29kaW5nIHN0eWxlIGlzc3Vl cyB3aGlsZSBtb3ZpbmcuCgpTaWduZWQtb2ZmLWJ5OiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXgu Y29tPgotLS0KIHhlbi9hcmNoL3g4Ni9tbS5jICAgIHwgNzk3IC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogeGVuL2FyY2gveDg2L3B2L21tLmMgfCA3 OTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIg ZmlsZXMgY2hhbmdlZCwgNzkwIGluc2VydGlvbnMoKyksIDc5NyBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS94ZW4vYXJjaC94ODYvbW0uYyBiL3hlbi9hcmNoL3g4Ni9tbS5jCmluZGV4IGMzYTI2 ZmUwM2QuLjNmOGQyMjY1MGQgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9tbS5jCisrKyBiL3hl bi9hcmNoL3g4Ni9tbS5jCkBAIC01MjMsMTA4ICs1MjMsNiBAQCBzdGF0aWMgdm9pZCBpbnZhbGlk YXRlX3NoYWRvd19sZHQoc3RydWN0IHZjcHUgKnYsIGludCBmbHVzaCkKIH0KIAogCi1zdGF0aWMg aW50IGFsbG9jX3NlZ2Rlc2NfcGFnZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQotewotICAgIGNv bnN0IHN0cnVjdCBkb21haW4gKm93bmVyID0gcGFnZV9nZXRfb3duZXIocGFnZSk7Ci0gICAgc3Ry dWN0IGRlc2Nfc3RydWN0ICpkZXNjcyA9IF9fbWFwX2RvbWFpbl9wYWdlKHBhZ2UpOwotICAgIHVu c2lnbmVkIGk7Ci0KLSAgICBmb3IgKCBpID0gMDsgaSA8IDUxMjsgaSsrICkKLSAgICAgICAgaWYg KCB1bmxpa2VseSghY2hlY2tfZGVzY3JpcHRvcihvd25lciwgJmRlc2NzW2ldKSkgKQotICAgICAg ICAgICAgYnJlYWs7Ci0KLSAgICB1bm1hcF9kb21haW5fcGFnZShkZXNjcyk7Ci0KLSAgICByZXR1 cm4gaSA9PSA1MTIgPyAwIDogLUVJTlZBTDsKLX0KLQotaW50IGdldF9wYWdlX2FuZF90eXBlX2Zy b21fbWZuKG1mbl90IG1mbiwgdW5zaWduZWQgbG9uZyB0eXBlLCBzdHJ1Y3QgZG9tYWluICpkLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXJ0aWFsLCBpbnQgcHJlZW1wdGli bGUpCi17Ci0gICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSA9IG1mbl90b19wYWdlKG1mbik7Ci0g ICAgaW50IHJjOwotCi0gICAgaWYgKCBsaWtlbHkocGFydGlhbCA+PSAwKSAmJgotICAgICAgICAg dW5saWtlbHkoIWdldF9wYWdlX2Zyb21fbWZuKG1mbiwgZCkpICkKLSAgICAgICAgcmV0dXJuIC1F SU5WQUw7Ci0KLSAgICByYyA9IChwcmVlbXB0aWJsZSA/Ci0gICAgICAgICAgZ2V0X3BhZ2VfdHlw ZV9wcmVlbXB0aWJsZShwYWdlLCB0eXBlKSA6Ci0gICAgICAgICAgKGdldF9wYWdlX3R5cGUocGFn ZSwgdHlwZSkgPyAwIDogLUVJTlZBTCkpOwotCi0gICAgaWYgKCB1bmxpa2VseShyYykgJiYgcGFy dGlhbCA+PSAwICYmCi0gICAgICAgICAoIXByZWVtcHRpYmxlIHx8IHBhZ2UgIT0gY3VycmVudC0+ YXJjaC5vbGRfZ3Vlc3RfdGFibGUpICkKLSAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0KLSAgICBy ZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIHB1dF9kYXRhX3BhZ2UoCi0gICAgc3RydWN0IHBh Z2VfaW5mbyAqcGFnZSwgaW50IHdyaXRlYWJsZSkKLXsKLSAgICBpZiAoIHdyaXRlYWJsZSApCi0g ICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKHBhZ2UpOwotICAgIGVsc2UKLSAgICAgICAgcHV0X3Bh Z2UocGFnZSk7Ci19Ci0KLS8qCi0gKiBXZSBhbGxvdyByb290IHRhYmxlcyB0byBtYXAgZWFjaCBv dGhlciAoYS5rLmEuIGxpbmVhciBwYWdlIHRhYmxlcykuIEl0Ci0gKiBuZWVkcyBzb21lIHNwZWNp YWwgY2FyZSB3aXRoIHJlZmVyZW5jZSBjb3VudHMgYW5kIGFjY2VzcyBwZXJtaXNzaW9uczoKLSAq ICAxLiBUaGUgbWFwcGluZyBlbnRyeSBtdXN0IGJlIHJlYWQtb25seSwgb3IgdGhlIGd1ZXN0IG1h eSBnZXQgd3JpdGUgYWNjZXNzCi0gKiAgICAgdG8gaXRzIG93biBQVEVzLgotICogIDIuIFdlIG11 c3Qgb25seSBidW1wIHRoZSByZWZlcmVuY2UgY291bnRzIGZvciBhbiAqYWxyZWFkeSB2YWxpZGF0 ZWQqCi0gKiAgICAgTDIgdGFibGUsIG9yIHdlIGNhbiBlbmQgdXAgaW4gYSBkZWFkbG9jayBpbiBn ZXRfcGFnZV90eXBlKCkgYnkgd2FpdGluZwotICogICAgIG9uIGEgdmFsaWRhdGlvbiB0aGF0IGlz IHJlcXVpcmVkIHRvIGNvbXBsZXRlIHRoYXQgdmFsaWRhdGlvbi4KLSAqICAzLiBXZSBvbmx5IG5l ZWQgdG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnRzIGZvciB0aGUgbWFwcGVkIHBhZ2UK LSAqICAgICBmcmFtZSBpZiBpdCBpcyBtYXBwZWQgYnkgYSBkaWZmZXJlbnQgcm9vdCB0YWJsZS4g VGhpcyBpcyBzdWZmaWNpZW50IGFuZAotICogICAgIGFsc28gbmVjZXNzYXJ5IHRvIGFsbG93IHZh bGlkYXRpb24gb2YgYSByb290IHRhYmxlIG1hcHBpbmcgaXRzZWxmLgotICovCi0jZGVmaW5lIGRl ZmluZV9nZXRfbGluZWFyX3BhZ2V0YWJsZShsZXZlbCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotc3RhdGljIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWdldF8jI2xldmVsIyNfbGluZWFyX3Bh Z2V0YWJsZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgbGV2ZWwjI19wZ2VudHJ5X3QgcGRlLCB1bnNpZ25lZCBsb25nIHBkZV9wZm4sIHN0cnVjdCBk b21haW4gKmQpICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB1bnNpZ25lZCBs b25nIHgsIHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHVuc2lnbmVkIGxvbmcgcGZuOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgaWYgKCAobGV2ZWwjI2VfZ2V0X2ZsYWdzKHBkZSkgJiBfUEFH RV9SVykgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIGNy ZWF0ZSBsaW5lYXIgcC50LiB3aXRoIHdyaXRlIHBlcm1zXG4iKTsgICAgICAgXAotICAgICAgICBy ZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgIGlmICggKHBmbiA9IGxldmVsIyNlX2dldF9wZm4ocGRlKSkgIT0gcGRlX3BmbiApICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC8qIE1h a2Ugc3VyZSB0aGUgbWFwcGVkIGZyYW1lIGJlbG9uZ3MgdG8gdGhlIGNvcnJlY3QgZG9tYWluLiAq LyAgICAgXAotICAgICAgICBpZiAoIHVubGlrZWx5KCFnZXRfcGFnZV9mcm9tX21mbihfbWZuKHBm biksIGQpKSApICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJldHVybiAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICogRW5zdXJl IHRoYXQgdGhlIG1hcHBlZCBmcmFtZSBpcyBhbiBhbHJlYWR5LXZhbGlkYXRlZCBwYWdlIHRhYmxl LiBcCi0gICAgICAgICAqIElmIHNvLCBhdG9taWNhbGx5IGluY3JlbWVudCB0aGUgY291bnQgKGNo ZWNraW5nIGZvciBvdmVyZmxvdykuICAgXAotICAgICAgICAgKi8gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg cGFnZSA9IG1mbl90b19wYWdlKF9tZm4ocGZuKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gICAgICAgIHkgPSBwYWdlLT51LmludXNlLnR5cGVfaW5mbzsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBkbyB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSAgICAgICAgICAgIHggPSB5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KCh4ICYgUEdU X2NvdW50X21hc2spID09IFBHVF9jb3VudF9tYXNrKSB8fCAgICAgICAgXAotICAgICAgICAgICAg ICAgICB1bmxpa2VseSgoeCAmIChQR1RfdHlwZV9tYXNrfFBHVF92YWxpZGF0ZWQpKSAhPSAgICAg ICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKFBHVF8jI2xldmVsIyNfcGFnZV90 YWJsZXxQR1RfdmFsaWRhdGVkKSkgKSAgICAgICBcCi0gICAgICAgICAgICB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg ICAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgd2hpbGUgKCAoeSA9IGNtcHhjaGco JnBhZ2UtPnUuaW51c2UudHlwZV9pbmZvLCB4LCB4ICsgMSkpICE9IHggKTsgICBcCi0gICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gMTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci19Ci0KLQogYm9vbCBpc19pb21lbV9wYWdlKG1mbl90IG1mbikKIHsKICAgICBzdHJ1Y3QgcGFn ZV9pbmZvICpwYWdlOwpAQCAtOTEzLDEwOCArODExLDYgQEAgZ2V0X3BhZ2VfZnJvbV9sMWUoCiAg ICAgcmV0dXJuIC1FQlVTWTsKIH0KIAotCi0vKiBOQi4gVmlydHVhbCBhZGRyZXNzICdsMmUnIG1h cHMgdG8gYSBtYWNoaW5lIGFkZHJlc3Mgd2l0aGluIGZyYW1lICdwZm4nLiAqLwotLyoKLSAqIGdl dF9wYWdlX2Zyb21fbDJlIHJldHVybnM6Ci0gKiAgIDEgPT4gcGFnZSBub3QgcHJlc2VudAotICog ICAwID0+IHN1Y2Nlc3MKLSAqICA8MCA9PiBlcnJvciBjb2RlCi0gKi8KLWRlZmluZV9nZXRfbGlu ZWFyX3BhZ2V0YWJsZShsMik7Ci1pbnQKLWdldF9wYWdlX2Zyb21fbDJlKAotICAgIGwyX3BnZW50 cnlfdCBsMmUsIHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgZG9tYWluICpkKQotewotICAgIHVu c2lnbmVkIGxvbmcgbWZuID0gbDJlX2dldF9wZm4obDJlKTsKLSAgICBpbnQgcmM7Ci0KLSAgICBp ZiAoICEobDJlX2dldF9mbGFncyhsMmUpICYgX1BBR0VfUFJFU0VOVCkgKQotICAgICAgICByZXR1 cm4gMTsKLQotICAgIGlmICggdW5saWtlbHkoKGwyZV9nZXRfZmxhZ3MobDJlKSAmIEwyX0RJU0FM TE9XX01BU0spKSApCi0gICAgewotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkJh ZCBMMiBmbGFncyAleFxuIiwKLSAgICAgICAgICAgICAgICAgbDJlX2dldF9mbGFncyhsMmUpICYg TDJfRElTQUxMT1dfTUFTSyk7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAg IGlmICggIShsMmVfZ2V0X2ZsYWdzKGwyZSkgJiBfUEFHRV9QU0UpICkKLSAgICB7Ci0gICAgICAg IHJjID0gZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9tZm4oX21mbihtZm4pLCBQR1RfbDFfcGFnZV90 YWJsZSwgZCwgMCwgMCk7Ci0gICAgICAgIGlmICggdW5saWtlbHkocmMgPT0gLUVJTlZBTCkgJiYg Z2V0X2wyX2xpbmVhcl9wYWdldGFibGUobDJlLCBwZm4sIGQpICkKLSAgICAgICAgICAgIHJjID0g MDsKLSAgICAgICAgcmV0dXJuIHJjOwotICAgIH0KLQotICAgIHJldHVybiAtRUlOVkFMOwotfQot Ci0KLS8qCi0gKiBnZXRfcGFnZV9mcm9tX2wzZSByZXR1cm5zOgotICogICAxID0+IHBhZ2Ugbm90 IHByZXNlbnQKLSAqICAgMCA9PiBzdWNjZXNzCi0gKiAgPDAgPT4gZXJyb3IgY29kZQotICovCi1k ZWZpbmVfZ2V0X2xpbmVhcl9wYWdldGFibGUobDMpOwotaW50Ci1nZXRfcGFnZV9mcm9tX2wzZSgK LSAgICBsM19wZ2VudHJ5X3QgbDNlLCB1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IGRvbWFpbiAq ZCwgaW50IHBhcnRpYWwpCi17Ci0gICAgaW50IHJjOwotCi0gICAgaWYgKCAhKGwzZV9nZXRfZmxh Z3MobDNlKSAmIF9QQUdFX1BSRVNFTlQpICkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBpZiAo IHVubGlrZWx5KChsM2VfZ2V0X2ZsYWdzKGwzZSkgJiBsM19kaXNhbGxvd19tYXNrKGQpKSkgKQot ICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJCYWQgTDMgZmxhZ3MgJXhc biIsCi0gICAgICAgICAgICAgICAgIGwzZV9nZXRfZmxhZ3MobDNlKSAmIGwzX2Rpc2FsbG93X21h c2soZCkpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICByYyA9IGdldF9w YWdlX2FuZF90eXBlX2Zyb21fbWZuKAotICAgICAgICBsM2VfZ2V0X21mbihsM2UpLCBQR1RfbDJf cGFnZV90YWJsZSwgZCwgcGFydGlhbCwgMSk7Ci0gICAgaWYgKCB1bmxpa2VseShyYyA9PSAtRUlO VkFMKSAmJgotICAgICAgICAgIWlzX3B2XzMyYml0X2RvbWFpbihkKSAmJgotICAgICAgICAgZ2V0 X2wzX2xpbmVhcl9wYWdldGFibGUobDNlLCBwZm4sIGQpICkKLSAgICAgICAgcmMgPSAwOwotCi0g ICAgcmV0dXJuIHJjOwotfQotCi0vKgotICogZ2V0X3BhZ2VfZnJvbV9sNGUgcmV0dXJuczoKLSAq ICAgMSA9PiBwYWdlIG5vdCBwcmVzZW50Ci0gKiAgIDAgPT4gc3VjY2VzcwotICogIDwwID0+IGVy cm9yIGNvZGUKLSAqLwotZGVmaW5lX2dldF9saW5lYXJfcGFnZXRhYmxlKGw0KTsKLWludAotZ2V0 X3BhZ2VfZnJvbV9sNGUoCi0gICAgbDRfcGdlbnRyeV90IGw0ZSwgdW5zaWduZWQgbG9uZyBwZm4s IHN0cnVjdCBkb21haW4gKmQsIGludCBwYXJ0aWFsKQotewotICAgIGludCByYzsKLQotICAgIGlm ICggIShsNGVfZ2V0X2ZsYWdzKGw0ZSkgJiBfUEFHRV9QUkVTRU5UKSApCi0gICAgICAgIHJldHVy biAxOwotCi0gICAgaWYgKCB1bmxpa2VseSgobDRlX2dldF9mbGFncyhsNGUpICYgTDRfRElTQUxM T1dfTUFTSykpICkKLSAgICB7Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQmFk IEw0IGZsYWdzICV4XG4iLAotICAgICAgICAgICAgICAgICBsNGVfZ2V0X2ZsYWdzKGw0ZSkgJiBM NF9ESVNBTExPV19NQVNLKTsKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0gICAg cmMgPSBnZXRfcGFnZV9hbmRfdHlwZV9mcm9tX21mbigKLSAgICAgICAgbDRlX2dldF9tZm4obDRl KSwgUEdUX2wzX3BhZ2VfdGFibGUsIGQsIHBhcnRpYWwsIDEpOwotICAgIGlmICggdW5saWtlbHko cmMgPT0gLUVJTlZBTCkgJiYgZ2V0X2w0X2xpbmVhcl9wYWdldGFibGUobDRlLCBwZm4sIGQpICkK LSAgICAgICAgcmMgPSAwOwotCi0gICAgcmV0dXJuIHJjOwotfQotCiB2b2lkIHB1dF9wYWdlX2Zy b21fbDFlKGwxX3BnZW50cnlfdCBsMWUsIHN0cnVjdCBkb21haW4gKmwxZV9vd25lcikKIHsKICAg ICB1bnNpZ25lZCBsb25nICAgICBwZm4gPSBsMWVfZ2V0X3BmbihsMWUpOwpAQCAtMTA3NCwyOTIg Kzg3MCw2IEBAIHZvaWQgcHV0X3BhZ2VfZnJvbV9sMWUobDFfcGdlbnRyeV90IGwxZSwgc3RydWN0 IGRvbWFpbiAqbDFlX293bmVyKQogICAgIH0KIH0KIAotCi0vKgotICogTkIuIFZpcnR1YWwgYWRk cmVzcyAnbDJlJyBtYXBzIHRvIGEgbWFjaGluZSBhZGRyZXNzIHdpdGhpbiBmcmFtZSAncGZuJy4K LSAqIE5vdGUgYWxzbyB0aGF0IHRoaXMgYXV0b21hdGljYWxseSBkZWFscyBjb3JyZWN0bHkgd2l0 aCBsaW5lYXIgcC50LidzLgotICovCi1pbnQgcHV0X3BhZ2VfZnJvbV9sMmUobDJfcGdlbnRyeV90 IGwyZSwgdW5zaWduZWQgbG9uZyBwZm4pCi17Ci0gICAgaWYgKCAhKGwyZV9nZXRfZmxhZ3MobDJl KSAmIF9QQUdFX1BSRVNFTlQpIHx8IChsMmVfZ2V0X3BmbihsMmUpID09IHBmbikgKQotICAgICAg ICByZXR1cm4gMTsKLQotICAgIGlmICggbDJlX2dldF9mbGFncyhsMmUpICYgX1BBR0VfUFNFICkK LSAgICB7Ci0gICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBsMmVfZ2V0X3BhZ2UobDJl KTsKLSAgICAgICAgdW5zaWduZWQgaW50IGk7Ci0KLSAgICAgICAgZm9yICggaSA9IDA7IGkgPCAo MXUgPDwgUEFHRVRBQkxFX09SREVSKTsgaSsrLCBwYWdlKysgKQotICAgICAgICAgICAgcHV0X3Bh Z2VfYW5kX3R5cGUocGFnZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHB1dF9wYWdlX2FuZF90eXBl KGwyZV9nZXRfcGFnZShsMmUpKTsKLQotICAgIHJldHVybiAwOwotfQotCi1pbnQgcHV0X3BhZ2Vf ZnJvbV9sM2UobDNfcGdlbnRyeV90IGwzZSwgdW5zaWduZWQgbG9uZyBwZm4sIGludCBwYXJ0aWFs LAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVmZXIpCi17Ci0gICAgc3RydWN0IHBhZ2Vf aW5mbyAqcGc7Ci0KLSAgICBpZiAoICEobDNlX2dldF9mbGFncyhsM2UpICYgX1BBR0VfUFJFU0VO VCkgfHwgKGwzZV9nZXRfcGZuKGwzZSkgPT0gcGZuKSApCi0gICAgICAgIHJldHVybiAxOwotCi0g ICAgaWYgKCB1bmxpa2VseShsM2VfZ2V0X2ZsYWdzKGwzZSkgJiBfUEFHRV9QU0UpICkKLSAgICB7 Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuID0gbDNlX2dldF9wZm4obDNlKTsKLSAgICAgICAg aW50IHdyaXRlYWJsZSA9IGwzZV9nZXRfZmxhZ3MobDNlKSAmIF9QQUdFX1JXOwotCi0gICAgICAg IEFTU0VSVCghKG1mbiAmICgoMVVMIDw8IChMM19QQUdFVEFCTEVfU0hJRlQgLSBQQUdFX1NISUZU KSkgLSAxKSkpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBwdXRfZGF0YV9wYWdlKG1mbl90 b19wYWdlKF9tZm4obWZuKSksIHdyaXRlYWJsZSk7Ci0gICAgICAgIH0gd2hpbGUgKCArK21mbiAm ICgoMVVMIDw8IChMM19QQUdFVEFCTEVfU0hJRlQgLSBQQUdFX1NISUZUKSkgLSAxKSApOwotCi0g ICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHBnID0gbDNlX2dldF9wYWdlKGwzZSk7Ci0K LSAgICBpZiAoIHVubGlrZWx5KHBhcnRpYWwgPiAwKSApCi0gICAgewotICAgICAgICBBU1NFUlQo IWRlZmVyKTsKLSAgICAgICAgcmV0dXJuIHB1dF9wYWdlX3R5cGVfcHJlZW1wdGlibGUocGcpOwot ICAgIH0KLQotICAgIGlmICggZGVmZXIgKQotICAgIHsKLSAgICAgICAgY3VycmVudC0+YXJjaC5v bGRfZ3Vlc3RfdGFibGUgPSBwZzsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0 dXJuIHB1dF9wYWdlX2FuZF90eXBlX3ByZWVtcHRpYmxlKHBnKTsKLX0KLQotaW50IHB1dF9wYWdl X2Zyb21fbDRlKGw0X3BnZW50cnlfdCBsNGUsIHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgcGFydGlh bCwKLSAgICAgICAgICAgICAgICAgICAgICBib29sIGRlZmVyKQotewotICAgIGlmICggKGw0ZV9n ZXRfZmxhZ3MobDRlKSAmIF9QQUdFX1BSRVNFTlQpICYmCi0gICAgICAgICAobDRlX2dldF9wZm4o bDRlKSAhPSBwZm4pICkKLSAgICB7Ci0gICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBnID0gbDRl X2dldF9wYWdlKGw0ZSk7Ci0KLSAgICAgICAgaWYgKCB1bmxpa2VseShwYXJ0aWFsID4gMCkgKQot ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWRlZmVyKTsKLSAgICAgICAgICAgIHJldHVy biBwdXRfcGFnZV90eXBlX3ByZWVtcHRpYmxlKHBnKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm ICggZGVmZXIgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjdXJyZW50LT5hcmNoLm9sZF9ndWVz dF90YWJsZSA9IHBnOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAg ICByZXR1cm4gcHV0X3BhZ2VfYW5kX3R5cGVfcHJlZW1wdGlibGUocGcpOwotICAgIH0KLSAgICBy ZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBhbGxvY19sMV90YWJsZShzdHJ1Y3QgcGFnZV9pbmZv ICpwYWdlKQotewotICAgIHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsK LSAgICBsMV9wZ2VudHJ5X3QgICpwbDFlOwotICAgIHVuc2lnbmVkIGludCAgIGk7Ci0gICAgaW50 ICAgICAgICAgICAgcmV0ID0gMDsKLQotICAgIHBsMWUgPSBfX21hcF9kb21haW5fcGFnZShwYWdl KTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgTDFfUEFHRVRBQkxFX0VOVFJJRVM7IGkrKyApCi0g ICAgewotICAgICAgICBzd2l0Y2ggKCByZXQgPSBnZXRfcGFnZV9mcm9tX2wxZShwbDFlW2ldLCBk LCBkKSApCi0gICAgICAgIHsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGdvdG8gZmFp bDsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgX1BB R0VfUlcgLi4uIF9QQUdFX1JXIHwgUEFHRV9DQUNIRV9BVFRSUzoKLSAgICAgICAgICAgIEFTU0VS VCghKHJldCAmIH4oX1BBR0VfUlcgfCBQQUdFX0NBQ0hFX0FUVFJTKSkpOwotICAgICAgICAgICAg bDFlX2ZsaXBfZmxhZ3MocGwxZVtpXSwgcmV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICB9Ci0KLSAgICAgICAgcGwxZVtpXSA9IGFkanVzdF9ndWVzdF9sMWUocGwxZVtpXSwgZCk7Ci0g ICAgfQotCi0gICAgdW5tYXBfZG9tYWluX3BhZ2UocGwxZSk7Ci0gICAgcmV0dXJuIDA7Ci0KLSBm YWlsOgotICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiRmFpbHVyZSBpbiBhbGxvY19sMV90 YWJsZTogc2xvdCAlI3hcbiIsIGkpOwotICAgIHdoaWxlICggaS0tID4gMCApCi0gICAgICAgIHB1 dF9wYWdlX2Zyb21fbDFlKHBsMWVbaV0sIGQpOwotCi0gICAgdW5tYXBfZG9tYWluX3BhZ2UocGwx ZSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotaW50IGNyZWF0ZV9wYWVfeGVuX21hcHBpbmdzKHN0 cnVjdCBkb21haW4gKmQsIGwzX3BnZW50cnlfdCAqcGwzZSkKLXsKLSAgICBzdHJ1Y3QgcGFnZV9p bmZvICpwYWdlOwotICAgIGwzX3BnZW50cnlfdCAgICAgbDNlMzsKLQotICAgIGlmICggIWlzX3B2 XzMyYml0X2RvbWFpbihkKSApCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgcGwzZSA9IChsM19w Z2VudHJ5X3QgKikoKHVuc2lnbmVkIGxvbmcpcGwzZSAmIFBBR0VfTUFTSyk7Ci0KLSAgICAvKiAz cmQgTDMgc2xvdCBjb250YWlucyBMMiB3aXRoIFhlbi1wcml2YXRlIG1hcHBpbmdzLiBJdCAqbXVz dCogZXhpc3QuICovCi0gICAgbDNlMyA9IHBsM2VbM107Ci0gICAgaWYgKCAhKGwzZV9nZXRfZmxh Z3MobDNlMykgJiBfUEFHRV9QUkVTRU5UKSApCi0gICAgewotICAgICAgICBnZHByaW50ayhYRU5M T0dfV0FSTklORywgIlBBRSBMMyAzcmQgc2xvdCBpcyBlbXB0eVxuIik7Ci0gICAgICAgIHJldHVy biAwOwotICAgIH0KLQotICAgIC8qCi0gICAgICogVGhlIFhlbi1wcml2YXRlIG1hcHBpbmdzIGlu Y2x1ZGUgbGluZWFyIG1hcHBpbmdzLiBUaGUgTDIgdGh1cyBjYW5ub3QKLSAgICAgKiBiZSBzaGFy ZWQgYnkgbXVsdGlwbGUgTDMgdGFibGVzLiBUaGUgdGVzdCBoZXJlIGlzIGFkZXF1YXRlIGJlY2F1 c2U6Ci0gICAgICogIDEuIENhbm5vdCBhcHBlYXIgaW4gc2xvdHMgIT0gMyBiZWNhdXNlIGdldF9w YWdlX3R5cGUoKSBjaGVja3MgdGhlCi0gICAgICogICAgIFBHVF9wYWVfeGVuX2wyIGZsYWcsIHdo aWNoIGlzIGFzc2VydGVkIGlmZiB0aGUgTDIgYXBwZWFycyBpbiBzbG90IDMKLSAgICAgKiAgMi4g Q2Fubm90IGFwcGVhciBpbiBhbm90aGVyIHBhZ2UgdGFibGUncyBMMzoKLSAgICAgKiAgICAgYS4g YWxsb2NfbDNfdGFibGUoKSBjYWxscyB0aGlzIGZ1bmN0aW9uIGFuZCB0aGlzIGNoZWNrIHdpbGwg ZmFpbAotICAgICAqICAgICBiLiBtb2RfbDNfZW50cnkoKSBkaXNhbGxvd3MgdXBkYXRlcyB0byBz bG90IDMgaW4gYW4gZXhpc3RpbmcgdGFibGUKLSAgICAgKi8KLSAgICBwYWdlID0gbDNlX2dldF9w YWdlKGwzZTMpOwotICAgIEJVR19PTihwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIFBHVF9waW5u ZWQpOwotICAgIEJVR19PTigocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfY291bnRfbWFz aykgPT0gMCk7Ci0gICAgQlVHX09OKCEocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfcGFl X3hlbl9sMikpOwotICAgIGlmICggKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX2NvdW50 X21hc2spICE9IDEgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJQ QUUgTDMgM3JkIHNsb3QgaXMgc2hhcmVkXG4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgYWxsb2NfbDJfdGFibGUoc3RydWN0IHBh Z2VfaW5mbyAqcGFnZSwgdW5zaWduZWQgbG9uZyB0eXBlLAotICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgcHJlZW1wdGlibGUpCi17Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0 X293bmVyKHBhZ2UpOwotICAgIHVuc2lnbmVkIGxvbmcgIHBmbiA9IG1mbl94KHBhZ2VfdG9fbWZu KHBhZ2UpKTsKLSAgICBsMl9wZ2VudHJ5X3QgICpwbDJlOwotICAgIHVuc2lnbmVkIGludCAgIGk7 Ci0gICAgaW50ICAgICAgICAgICAgcmMgPSAwOwotCi0gICAgcGwyZSA9IG1hcF9kb21haW5fcGFn ZShfbWZuKHBmbikpOwotCi0gICAgZm9yICggaSA9IHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzOyBp IDwgTDJfUEFHRVRBQkxFX0VOVFJJRVM7IGkrKyApCi0gICAgewotICAgICAgICBpZiAoIHByZWVt cHRpYmxlICYmIGkgPiBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcwotICAgICAgICAgICAgICYmIGh5 cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBwYWdlLT5u cl92YWxpZGF0ZWRfcHRlcyA9IGk7Ci0gICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCAhaXNfZ3Vlc3RfbDJfc2xv dChkLCB0eXBlLCBpKSB8fAotICAgICAgICAgICAgIChyYyA9IGdldF9wYWdlX2Zyb21fbDJlKHBs MmVbaV0sIHBmbiwgZCkpID4gMCApCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBp ZiAoIHJjIDwgMCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJO SU5HLCAiRmFpbHVyZSBpbiBhbGxvY19sMl90YWJsZTogc2xvdCAlI3hcbiIsIGkpOwotICAgICAg ICAgICAgd2hpbGUgKCBpLS0gPiAwICkKLSAgICAgICAgICAgICAgICBpZiAoIGlzX2d1ZXN0X2wy X3Nsb3QoZCwgdHlwZSwgaSkgKQotICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZV9mcm9tX2wy ZShwbDJlW2ldLCBwZm4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg ICBwbDJlW2ldID0gYWRqdXN0X2d1ZXN0X2wyZShwbDJlW2ldLCBkKTsKLSAgICB9Ci0KLSAgICBp ZiAoIHJjID49IDAgJiYgKHR5cGUgJiBQR1RfcGFlX3hlbl9sMikgKQotICAgIHsKLSAgICAgICAg LyogWGVuIHByaXZhdGUgbWFwcGluZ3MuICovCi0gICAgICAgIG1lbWNweSgmcGwyZVtDT01QQVRf TDJfUEFHRVRBQkxFX0ZJUlNUX1hFTl9TTE9UKGQpXSwKLSAgICAgICAgICAgICAgICZjb21wYXRf aWRsZV9wZ190YWJsZV9sMlsKLSAgICAgICAgICAgICAgICAgICBsMl90YWJsZV9vZmZzZXQoSElS T19DT01QQVRfTVBUX1ZJUlRfU1RBUlQpXSwKLSAgICAgICAgICAgICAgIENPTVBBVF9MMl9QQUdF VEFCTEVfWEVOX1NMT1RTKGQpICogc2l6ZW9mKCpwbDJlKSk7Ci0gICAgfQotCi0gICAgdW5tYXBf ZG9tYWluX3BhZ2UocGwyZSk7Ci0gICAgcmV0dXJuIHJjID4gMCA/IDAgOiByYzsKLX0KLQotc3Rh dGljIGludCBhbGxvY19sM190YWJsZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQotewotICAgIHN0 cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKLSAgICB1bnNpZ25lZCBsb25n ICBwZm4gPSBtZm5feChwYWdlX3RvX21mbihwYWdlKSk7Ci0gICAgbDNfcGdlbnRyeV90ICAqcGwz ZTsKLSAgICB1bnNpZ25lZCBpbnQgICBpOwotICAgIGludCAgICAgICAgICAgIHJjID0gMCwgcGFy dGlhbCA9IHBhZ2UtPnBhcnRpYWxfcHRlOwotCi0gICAgcGwzZSA9IG1hcF9kb21haW5fcGFnZShf bWZuKHBmbikpOwotCi0gICAgLyoKLSAgICAgKiBQQUUgZ3Vlc3RzIGFsbG9jYXRlIGZ1bGwgcGFn ZXMsIGJ1dCBhcmVuJ3QgcmVxdWlyZWQgdG8gaW5pdGlhbGl6ZQotICAgICAqIG1vcmUgdGhhbiB0 aGUgZmlyc3QgZm91ciBlbnRyaWVzOyB3aGVuIHJ1bm5pbmcgaW4gY29tcGF0aWJpbGl0eQotICAg ICAqIG1vZGUsIGhvd2V2ZXIsIHRoZSBmdWxsIHBhZ2UgaXMgdmlzaWJsZSB0byB0aGUgTU1VLCBh bmQgaGVuY2UgYWxsCi0gICAgICogNTEyIGVudHJpZXMgbXVzdCBiZSB2YWxpZC92ZXJpZmllZCwg d2hpY2ggaXMgbW9zdCBlYXNpbHkgYWNoaWV2ZWQKLSAgICAgKiBieSBjbGVhcmluZyB0aGVtIG91 dC4KLSAgICAgKi8KLSAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihkKSApCi0gICAgICAgIG1l bXNldChwbDNlICsgNCwgMCwgKEwzX1BBR0VUQUJMRV9FTlRSSUVTIC0gNCkgKiBzaXplb2YoKnBs M2UpKTsKLQotICAgIGZvciAoIGkgPSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlczsgaSA8IEwzX1BB R0VUQUJMRV9FTlRSSUVTOwotICAgICAgICAgIGkrKywgcGFydGlhbCA9IDAgKQotICAgIHsKLSAg ICAgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oZCkgJiYgKGkgPT0gMykgKQotICAgICAgICB7 Ci0gICAgICAgICAgICBpZiAoICEobDNlX2dldF9mbGFncyhwbDNlW2ldKSAmIF9QQUdFX1BSRVNF TlQpIHx8Ci0gICAgICAgICAgICAgICAgIChsM2VfZ2V0X2ZsYWdzKHBsM2VbaV0pICYgbDNfZGlz YWxsb3dfbWFzayhkKSkgKQotICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKLSAgICAgICAg ICAgIGVsc2UKLSAgICAgICAgICAgICAgICByYyA9IGdldF9wYWdlX2FuZF90eXBlX2Zyb21fbWZu KAotICAgICAgICAgICAgICAgICAgICBsM2VfZ2V0X21mbihwbDNlW2ldKSwKLSAgICAgICAgICAg ICAgICAgICAgUEdUX2wyX3BhZ2VfdGFibGUgfCBQR1RfcGFlX3hlbl9sMiwgZCwgcGFydGlhbCwg MSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIChyYyA9IGdldF9wYWdlX2Zyb21fbDNl KHBsM2VbaV0sIHBmbiwgZCwgcGFydGlhbCkpID4gMCApCi0gICAgICAgICAgICBjb250aW51ZTsK LQotICAgICAgICBpZiAoIHJjID09IC1FUkVTVEFSVCApCi0gICAgICAgIHsKLSAgICAgICAgICAg IHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKLSAgICAgICAgICAgIHBhZ2UtPnBhcnRpYWxf cHRlID0gcGFydGlhbCA/OiAxOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCByYyA9PSAt RUlOVFIgJiYgaSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9w dGVzID0gaTsKLSAgICAgICAgICAgIHBhZ2UtPnBhcnRpYWxfcHRlID0gMDsKLSAgICAgICAgICAg IHJjID0gLUVSRVNUQVJUOwotICAgICAgICB9Ci0gICAgICAgIGlmICggcmMgPCAwICkKLSAgICAg ICAgICAgIGJyZWFrOwotCi0gICAgICAgIHBsM2VbaV0gPSBhZGp1c3RfZ3Vlc3RfbDNlKHBsM2Vb aV0sIGQpOwotICAgIH0KLQotICAgIGlmICggcmMgPj0gMCAmJiAhY3JlYXRlX3BhZV94ZW5fbWFw cGluZ3MoZCwgcGwzZSkgKQotICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAgaWYgKCByYyA8IDAg JiYgcmMgIT0gLUVSRVNUQVJUICYmIHJjICE9IC1FSU5UUiApCi0gICAgewotICAgICAgICBnZHBy aW50ayhYRU5MT0dfV0FSTklORywgIkZhaWx1cmUgaW4gYWxsb2NfbDNfdGFibGU6IHNsb3QgJSN4 XG4iLCBpKTsKLSAgICAgICAgaWYgKCBpICkKLSAgICAgICAgewotICAgICAgICAgICAgcGFnZS0+ bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOwotICAgICAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSAw OwotICAgICAgICAgICAgY3VycmVudC0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgPSBwYWdlOwotICAg ICAgICB9Ci0gICAgICAgIHdoaWxlICggaS0tID4gMCApCi0gICAgICAgICAgICBwbDNlW2ldID0g dW5hZGp1c3RfZ3Vlc3RfbDNlKHBsM2VbaV0sIGQpOwotICAgIH0KLQotICAgIHVubWFwX2RvbWFp bl9wYWdlKHBsM2UpOwotICAgIHJldHVybiByYyA+IDAgPyAwIDogcmM7Ci19Ci0KIGJvb2wgZmls bF9yb19tcHQobWZuX3QgbWZuKQogewogICAgIGw0X3BnZW50cnlfdCAqbDR0YWIgPSBtYXBfZG9t YWluX3BhZ2UobWZuKTsKQEAgLTEzODQsMTg0ICs4OTQsNiBAQCB2b2lkIHphcF9yb19tcHQobWZu X3QgbWZuKQogICAgIHVubWFwX2RvbWFpbl9wYWdlKGw0dGFiKTsKIH0KIAotc3RhdGljIGludCBh bGxvY19sNF90YWJsZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQotewotICAgIHN0cnVjdCBkb21h aW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKLSAgICB1bnNpZ25lZCBsb25nICBwZm4gPSBt Zm5feChwYWdlX3RvX21mbihwYWdlKSk7Ci0gICAgbDRfcGdlbnRyeV90ICAqcGw0ZSA9IG1hcF9k b21haW5fcGFnZShfbWZuKHBmbikpOwotICAgIHVuc2lnbmVkIGludCAgIGk7Ci0gICAgaW50ICAg ICAgICAgICAgcmMgPSAwLCBwYXJ0aWFsID0gcGFnZS0+cGFydGlhbF9wdGU7Ci0KLSAgICBmb3Ig KCBpID0gcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXM7IGkgPCBMNF9QQUdFVEFCTEVfRU5UUklFUzsK LSAgICAgICAgICBpKyssIHBhcnRpYWwgPSAwICkKLSAgICB7Ci0gICAgICAgIGlmICggIWlzX2d1 ZXN0X2w0X3Nsb3QoZCwgaSkgfHwKLSAgICAgICAgICAgICAocmMgPSBnZXRfcGFnZV9mcm9tX2w0 ZShwbDRlW2ldLCBwZm4sIGQsIHBhcnRpYWwpKSA+IDAgKQotICAgICAgICAgICAgY29udGludWU7 Ci0KLSAgICAgICAgaWYgKCByYyA9PSAtRVJFU1RBUlQgKQotICAgICAgICB7Ci0gICAgICAgICAg ICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IGk7Ci0gICAgICAgICAgICBwYWdlLT5wYXJ0aWFs X3B0ZSA9IHBhcnRpYWwgPzogMTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggcmMgPCAw ICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCByYyAhPSAtRUlOVFIgKQotICAgICAgICAg ICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAg ICJGYWlsdXJlIGluIGFsbG9jX2w0X3RhYmxlOiBzbG90ICUjeFxuIiwgaSk7Ci0gICAgICAgICAg ICBpZiAoIGkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlk YXRlZF9wdGVzID0gaTsKLSAgICAgICAgICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IDA7Ci0g ICAgICAgICAgICAgICAgaWYgKCByYyA9PSAtRUlOVFIgKQotICAgICAgICAgICAgICAgICAgICBy YyA9IC1FUkVTVEFSVDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewot ICAgICAgICAgICAgICAgICAgICBpZiAoIGN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3RhYmxlICkK LSAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzKys7Ci0gICAg ICAgICAgICAgICAgICAgIGN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3RhYmxlID0gcGFnZTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCBy YyA8IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bm1hcF9kb21haW5fcGFnZShwbDRlKTsK LSAgICAgICAgICAgIHJldHVybiByYzsKLSAgICAgICAgfQotCi0gICAgICAgIHBsNGVbaV0gPSBh ZGp1c3RfZ3Vlc3RfbDRlKHBsNGVbaV0sIGQpOwotICAgIH0KLQotICAgIGlmICggcmMgPj0gMCAp Ci0gICAgewotICAgICAgICBpbml0X2d1ZXN0X2w0X3RhYmxlKHBsNGUsIGQsICFWTV9BU1NJU1Qo ZCwgbTJwX3N0cmljdCkpOwotICAgICAgICBhdG9taWNfaW5jKCZkLT5hcmNoLnB2X2RvbWFpbi5u cl9sNF9wYWdlcyk7Ci0gICAgICAgIHJjID0gMDsKLSAgICB9Ci0gICAgdW5tYXBfZG9tYWluX3Bh Z2UocGw0ZSk7Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVfbDFfdGFi bGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKLXsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gcGFn ZV9nZXRfb3duZXIocGFnZSk7Ci0gICAgbDFfcGdlbnRyeV90ICpwbDFlOwotICAgIHVuc2lnbmVk IGludCAgaTsKLQotICAgIHBsMWUgPSBfX21hcF9kb21haW5fcGFnZShwYWdlKTsKLQotICAgIGZv ciAoIGkgPSAwOyBpIDwgTDFfUEFHRVRBQkxFX0VOVFJJRVM7IGkrKyApCi0gICAgICAgIHB1dF9w YWdlX2Zyb21fbDFlKHBsMWVbaV0sIGQpOwotCi0gICAgdW5tYXBfZG9tYWluX3BhZ2UocGwxZSk7 Ci19Ci0KLQotc3RhdGljIGludCBmcmVlX2wyX3RhYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2Us IGludCBwcmVlbXB0aWJsZSkKLXsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gcGFnZV9nZXRfb3du ZXIocGFnZSk7Ci0gICAgdW5zaWduZWQgbG9uZyBwZm4gPSBtZm5feChwYWdlX3RvX21mbihwYWdl KSk7Ci0gICAgbDJfcGdlbnRyeV90ICpwbDJlOwotICAgIHVuc2lnbmVkIGludCAgaSA9IHBhZ2Ut Pm5yX3ZhbGlkYXRlZF9wdGVzIC0gMTsKLSAgICBpbnQgZXJyID0gMDsKLQotICAgIHBsMmUgPSBt YXBfZG9tYWluX3BhZ2UoX21mbihwZm4pKTsKLQotICAgIEFTU0VSVChwYWdlLT5ucl92YWxpZGF0 ZWRfcHRlcyk7Ci0gICAgZG8gewotICAgICAgICBpZiAoIGlzX2d1ZXN0X2wyX3Nsb3QoZCwgcGFn ZS0+dS5pbnVzZS50eXBlX2luZm8sIGkpICYmCi0gICAgICAgICAgICAgcHV0X3BhZ2VfZnJvbV9s MmUocGwyZVtpXSwgcGZuKSA9PSAwICYmCi0gICAgICAgICAgICAgcHJlZW1wdGlibGUgJiYgaSAm JiBoeXBlcmNhbGxfcHJlZW1wdF9jaGVjaygpICkKLSAgICAgICAgewotICAgICAgICAgICBwYWdl LT5ucl92YWxpZGF0ZWRfcHRlcyA9IGk7Ci0gICAgICAgICAgIGVyciA9IC1FUkVTVEFSVDsKLSAg ICAgICAgfQotICAgIH0gd2hpbGUgKCAhZXJyICYmIGktLSApOwotCi0gICAgdW5tYXBfZG9tYWlu X3BhZ2UocGwyZSk7Ci0KLSAgICBpZiAoICFlcnIgKQotICAgICAgICBwYWdlLT51LmludXNlLnR5 cGVfaW5mbyAmPSB+UEdUX3BhZV94ZW5fbDI7Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0 aWMgaW50IGZyZWVfbDNfdGFibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKLXsKLSAgICBzdHJ1 Y3QgZG9tYWluICpkID0gcGFnZV9nZXRfb3duZXIocGFnZSk7Ci0gICAgdW5zaWduZWQgbG9uZyBw Zm4gPSBtZm5feChwYWdlX3RvX21mbihwYWdlKSk7Ci0gICAgbDNfcGdlbnRyeV90ICpwbDNlOwot ICAgIGludCByYyA9IDAsIHBhcnRpYWwgPSBwYWdlLT5wYXJ0aWFsX3B0ZTsKLSAgICB1bnNpZ25l ZCBpbnQgIGkgPSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyAtICFwYXJ0aWFsOwotCi0gICAgcGwz ZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBmbikpOwotCi0gICAgZG8gewotICAgICAgICByYyA9 IHB1dF9wYWdlX2Zyb21fbDNlKHBsM2VbaV0sIHBmbiwgcGFydGlhbCwgMCk7Ci0gICAgICAgIGlm ICggcmMgPCAwICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBwYXJ0aWFsID0gMDsKLSAg ICAgICAgaWYgKCByYyA+IDAgKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHBsM2Vb aV0gPSB1bmFkanVzdF9ndWVzdF9sM2UocGwzZVtpXSwgZCk7Ci0gICAgfSB3aGlsZSAoIGktLSAp OwotCi0gICAgdW5tYXBfZG9tYWluX3BhZ2UocGwzZSk7Ci0KLSAgICBpZiAoIHJjID09IC1FUkVT VEFSVCApCi0gICAgewotICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IGk7Ci0gICAg ICAgIHBhZ2UtPnBhcnRpYWxfcHRlID0gcGFydGlhbCA/OiAtMTsKLSAgICB9Ci0gICAgZWxzZSBp ZiAoIHJjID09IC1FSU5UUiAmJiBpIDwgTDNfUEFHRVRBQkxFX0VOVFJJRVMgLSAxICkKLSAgICB7 Ci0gICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaSArIDE7Ci0gICAgICAgIHBhZ2Ut PnBhcnRpYWxfcHRlID0gMDsKLSAgICAgICAgcmMgPSAtRVJFU1RBUlQ7Ci0gICAgfQotICAgIHJl dHVybiByYyA+IDAgPyAwIDogcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZnJlZV9sNF90YWJsZShzdHJ1 Y3QgcGFnZV9pbmZvICpwYWdlKQotewotICAgIHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9v d25lcihwYWdlKTsKLSAgICB1bnNpZ25lZCBsb25nIHBmbiA9IG1mbl94KHBhZ2VfdG9fbWZuKHBh Z2UpKTsKLSAgICBsNF9wZ2VudHJ5X3QgKnBsNGUgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihwZm4p KTsKLSAgICBpbnQgcmMgPSAwLCBwYXJ0aWFsID0gcGFnZS0+cGFydGlhbF9wdGU7Ci0gICAgdW5z aWduZWQgaW50ICBpID0gcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgLSAhcGFydGlhbDsKLQotICAg IGRvIHsKLSAgICAgICAgaWYgKCBpc19ndWVzdF9sNF9zbG90KGQsIGkpICkKLSAgICAgICAgICAg IHJjID0gcHV0X3BhZ2VfZnJvbV9sNGUocGw0ZVtpXSwgcGZuLCBwYXJ0aWFsLCAwKTsKLSAgICAg ICAgaWYgKCByYyA8IDAgKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHBhcnRpYWwgPSAw OwotICAgIH0gd2hpbGUgKCBpLS0gKTsKLQotICAgIGlmICggcmMgPT0gLUVSRVNUQVJUICkKLSAg ICB7Ci0gICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKLSAgICAgICAgcGFnZS0+ cGFydGlhbF9wdGUgPSBwYXJ0aWFsID86IC0xOwotICAgIH0KLSAgICBlbHNlIGlmICggcmMgPT0g LUVJTlRSICYmIGkgPCBMNF9QQUdFVEFCTEVfRU5UUklFUyAtIDEgKQotICAgIHsKLSAgICAgICAg cGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpICsgMTsKLSAgICAgICAgcGFnZS0+cGFydGlhbF9w dGUgPSAwOwotICAgICAgICByYyA9IC1FUkVTVEFSVDsKLSAgICB9Ci0KLSAgICB1bm1hcF9kb21h aW5fcGFnZShwbDRlKTsKLQotICAgIGlmICggcmMgPj0gMCApCi0gICAgewotICAgICAgICBhdG9t aWNfZGVjKCZkLT5hcmNoLnB2X2RvbWFpbi5ucl9sNF9wYWdlcyk7Ci0gICAgICAgIHJjID0gMDsK LSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KIGludCBwYWdlX2xvY2soc3RydWN0IHBhZ2Vf aW5mbyAqcGFnZSkKIHsKICAgICB1bnNpZ25lZCBsb25nIHgsIG54OwpAQCAtMTk2OSwxMzUgKzEz MDEsNiBAQCB2b2lkIGdldF9wYWdlX2xpZ2h0KHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCiAgICAg d2hpbGUgKCB1bmxpa2VseSh5ICE9IHgpICk7CiB9CiAKLWludCBwdl9hbGxvY19wYWdlX3R5cGUo c3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5zaWduZWQgbG9uZyB0eXBlLAotICAgICAgICAgICAg ICAgICAgICAgICBpbnQgcHJlZW1wdGlibGUpCi17Ci0gICAgc3RydWN0IGRvbWFpbiAqb3duZXIg PSBwYWdlX2dldF9vd25lcihwYWdlKTsKLSAgICBpbnQgcmM7Ci0KLSAgICAvKiBBIHBhZ2UgdGFi bGUgaXMgZGlydGllZCB3aGVuIGl0cyB0eXBlIGNvdW50IGJlY29tZXMgbm9uLXplcm8uICovCi0g ICAgaWYgKCBsaWtlbHkob3duZXIgIT0gTlVMTCkgKQotICAgICAgICBwYWdpbmdfbWFya19kaXJ0 eShvd25lciwgcGFnZV90b19tZm4ocGFnZSkpOwotCi0gICAgc3dpdGNoICggdHlwZSAmIFBHVF90 eXBlX21hc2sgKQotICAgIHsKLSAgICBjYXNlIFBHVF9sMV9wYWdlX3RhYmxlOgotICAgICAgICBy YyA9IGFsbG9jX2wxX3RhYmxlKHBhZ2UpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBHVF9s Ml9wYWdlX3RhYmxlOgotICAgICAgICByYyA9IGFsbG9jX2wyX3RhYmxlKHBhZ2UsIHR5cGUsIHBy ZWVtcHRpYmxlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQR1RfbDNfcGFnZV90YWJsZToK LSAgICAgICAgQVNTRVJUKHByZWVtcHRpYmxlKTsKLSAgICAgICAgcmMgPSBhbGxvY19sM190YWJs ZShwYWdlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQR1RfbDRfcGFnZV90YWJsZToKLSAg ICAgICAgQVNTRVJUKHByZWVtcHRpYmxlKTsKLSAgICAgICAgcmMgPSBhbGxvY19sNF90YWJsZShw YWdlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQR1Rfc2VnX2Rlc2NfcGFnZToKLSAgICAg ICAgcmMgPSBhbGxvY19zZWdkZXNjX3BhZ2UocGFnZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl ZmF1bHQ6Ci0gICAgICAgIHByaW50aygiQmFkIHR5cGUgaW4gJXMgJWx4IHQ9JSIgUFJ0eXBlX2lu Zm8gIiBjPSVseFxuIiwgX19mdW5jX18sCi0gICAgICAgICAgICAgICB0eXBlLCBwYWdlLT51Lmlu dXNlLnR5cGVfaW5mbywKLSAgICAgICAgICAgICAgIHBhZ2UtPmNvdW50X2luZm8pOwotICAgICAg ICByYyA9IC1FSU5WQUw7Ci0gICAgICAgIEJVRygpOwotICAgIH0KLQotICAgIC8qIE5vIG5lZWQg Zm9yIGF0b21pYyB1cGRhdGUgb2YgdHlwZV9pbmZvIGhlcmU6IG5vb25lIGVsc2UgdXBkYXRlcyBp dC4gKi8KLSAgICBzbXBfd21iKCk7Ci0gICAgc3dpdGNoICggcmMgKQotICAgIHsKLSAgICBjYXNl IDA6Ci0gICAgICAgIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvIHw9IFBHVF92YWxpZGF0ZWQ7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgLUVJTlRSOgotICAgICAgICBBU1NFUlQoKHBhZ2UtPnUu aW51c2UudHlwZV9pbmZvICYKLSAgICAgICAgICAgICAgICAoUEdUX2NvdW50X21hc2t8UEdUX3Zh bGlkYXRlZHxQR1RfcGFydGlhbCkpID09IDEpOwotICAgICAgICBwYWdlLT51LmludXNlLnR5cGVf aW5mbyAmPSB+UEdUX2NvdW50X21hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g ICAgICAgIEFTU0VSVChyYyA8IDApOwotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywg IkVycm9yIHdoaWxlIHZhbGlkYXRpbmcgbWZuICUiIFBSSV9tZm4KLSAgICAgICAgICAgICAgICAg IiAocGZuICUiIFBSSV9wZm4gIikgZm9yIHR5cGUgJSIgUFJ0eXBlX2luZm8KLSAgICAgICAgICAg ICAgICAgIjogY2FmPSUwOGx4IHRhZj0lIiBQUnR5cGVfaW5mbyAiXG4iLAotICAgICAgICAgICAg ICAgICBtZm5feChwYWdlX3RvX21mbihwYWdlKSksCi0gICAgICAgICAgICAgICAgIGdldF9ncGZu X2Zyb21fbWZuKG1mbl94KHBhZ2VfdG9fbWZuKHBhZ2UpKSksCi0gICAgICAgICAgICAgICAgIHR5 cGUsIHBhZ2UtPmNvdW50X2luZm8sIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvKTsKLSAgICAgICAg aWYgKCBwYWdlICE9IGN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3RhYmxlICkKLSAgICAgICAgICAg IHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvID0gMDsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0g ICAgICAgICAgICBBU1NFUlQoKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYKLSAgICAgICAgICAg ICAgICAgICAgKFBHVF9jb3VudF9tYXNrIHwgUEdUX3ZhbGlkYXRlZCkpID09IDEpOwotICAgIGNh c2UgLUVSRVNUQVJUOgotICAgICAgICAgICAgZ2V0X3BhZ2VfbGlnaHQocGFnZSk7Ci0gICAgICAg ICAgICBwYWdlLT51LmludXNlLnR5cGVfaW5mbyB8PSBQR1RfcGFydGlhbDsKLSAgICAgICAgfQot ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotaW50IHB2X2Zy ZWVfcGFnZV90eXBlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdHlwZSwK LSAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJlZW1wdGlibGUpCi17Ci0gICAgc3RydWN0IGRv bWFpbiAqb3duZXIgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKLSAgICB1bnNpZ25lZCBsb25nIGdt Zm47Ci0gICAgaW50IHJjOwotCi0gICAgaWYgKCBsaWtlbHkob3duZXIgIT0gTlVMTCkgJiYgdW5s aWtlbHkocGFnaW5nX21vZGVfZW5hYmxlZChvd25lcikpICkKLSAgICB7Ci0gICAgICAgIC8qIEEg cGFnZSB0YWJsZSBpcyBkaXJ0aWVkIHdoZW4gaXRzIHR5cGUgY291bnQgYmVjb21lcyB6ZXJvLiAq LwotICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShvd25lciwgcGFnZV90b19tZm4ocGFnZSkpOwot Ci0gICAgICAgIEFTU0VSVCghc2hhZG93X21vZGVfcmVmY291bnRzKG93bmVyKSk7Ci0KLSAgICAg ICAgZ21mbiA9IG1mbl90b19nbWZuKG93bmVyLCBtZm5feChwYWdlX3RvX21mbihwYWdlKSkpOwot ICAgICAgICBBU1NFUlQoVkFMSURfTTJQKGdtZm4pKTsKLSAgICAgICAgLyogUGFnZSBzaGFyaW5n IG5vdCBzdXBwb3J0ZWQgZm9yIHNoYWRvd2VkIGRvbWFpbnMgKi8KLSAgICAgICAgaWYoIVNIQVJF RF9NMlAoZ21mbikpCi0gICAgICAgICAgICBzaGFkb3dfcmVtb3ZlX2FsbF9zaGFkb3dzKG93bmVy LCBfbWZuKGdtZm4pKTsKLSAgICB9Ci0KLSAgICBpZiAoICEodHlwZSAmIFBHVF9wYXJ0aWFsKSAp Ci0gICAgewotICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IDFVIDw8IFBBR0VUQUJM RV9PUkRFUjsKLSAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSAwOwotICAgIH0KLQotICAgIHN3 aXRjaCAoIHR5cGUgJiBQR1RfdHlwZV9tYXNrICkKLSAgICB7Ci0gICAgY2FzZSBQR1RfbDFfcGFn ZV90YWJsZToKLSAgICAgICAgZnJlZV9sMV90YWJsZShwYWdlKTsKLSAgICAgICAgcmMgPSAwOwot ICAgICAgICBicmVhazsKLSAgICBjYXNlIFBHVF9sMl9wYWdlX3RhYmxlOgotICAgICAgICByYyA9 IGZyZWVfbDJfdGFibGUocGFnZSwgcHJlZW1wdGlibGUpOwotICAgICAgICBicmVhazsKLSAgICBj YXNlIFBHVF9sM19wYWdlX3RhYmxlOgotICAgICAgICBBU1NFUlQocHJlZW1wdGlibGUpOwotICAg ICAgICByYyA9IGZyZWVfbDNfdGFibGUocGFnZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug UEdUX2w0X3BhZ2VfdGFibGU6Ci0gICAgICAgIEFTU0VSVChwcmVlbXB0aWJsZSk7Ci0gICAgICAg IHJjID0gZnJlZV9sNF90YWJsZShwYWdlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK LSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJ0eXBlICUiIFBSdHlwZV9pbmZvICIg bWZuICUiIFBSSV9tZm4gIlxuIiwKLSAgICAgICAgICAgICAgICAgdHlwZSwgbWZuX3gocGFnZV90 b19tZm4ocGFnZSkpKTsKLSAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICBCVUcoKTsKLSAg ICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQogc3RhdGljIGludCBfX3B1dF9maW5hbF9wYWdl X3R5cGUoCiAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5zaWduZWQgbG9uZyB0eXBlLCBp bnQgcHJlZW1wdGlibGUpCiB7CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvbW0uYyBiL3hl bi9hcmNoL3g4Ni9wdi9tbS5jCmluZGV4IGQwZmMxNGRmYTYuLjQ3Y2RmNThkY2YgMTAwNjQ0Ci0t LSBhL3hlbi9hcmNoL3g4Ni9wdi9tbS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9wdi9tbS5jCkBAIC0x OSwxMSArMTksMTQgQEAKICAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqLwogCisjaW5jbHVkZSA8 eGVuL2V2ZW50Lmg+CiAjaW5jbHVkZSA8eGVuL2d1ZXN0X2FjY2Vzcy5oPgogCiAjaW5jbHVkZSA8 YXNtL2N1cnJlbnQuaD4KKyNpbmNsdWRlIDxhc20vbW0uaD4KICNpbmNsdWRlIDxhc20vcDJtLmg+ CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3NoYWRvdy5oPgogCiAjaW5j bHVkZSAibW0uaCIKIApAQCAtNDEsNiArNDQsMjczIEBAIHN0YXRpYyBsNF9wZ2VudHJ5X3QgX19y ZWFkX21vc3RseSBzcGxpdF9sNGU7CiAjZGVmaW5lIHJvb3RfcGd0X3B2X3hlbl9zbG90cyBST09U X1BBR0VUQUJMRV9QVl9YRU5fU0xPVFMKICNlbmRpZgogCisvKgorICogV2UgYWxsb3cgcm9vdCB0 YWJsZXMgdG8gbWFwIGVhY2ggb3RoZXIgKGEuay5hLiBsaW5lYXIgcGFnZSB0YWJsZXMpLiBJdAor ICogbmVlZHMgc29tZSBzcGVjaWFsIGNhcmUgd2l0aCByZWZlcmVuY2UgY291bnRzIGFuZCBhY2Nl c3MgcGVybWlzc2lvbnM6CisgKiAgMS4gVGhlIG1hcHBpbmcgZW50cnkgbXVzdCBiZSByZWFkLW9u bHksIG9yIHRoZSBndWVzdCBtYXkgZ2V0IHdyaXRlIGFjY2VzcworICogICAgIHRvIGl0cyBvd24g UFRFcy4KKyAqICAyLiBXZSBtdXN0IG9ubHkgYnVtcCB0aGUgcmVmZXJlbmNlIGNvdW50cyBmb3Ig YW4gKmFscmVhZHkgdmFsaWRhdGVkKgorICogICAgIEwyIHRhYmxlLCBvciB3ZSBjYW4gZW5kIHVw IGluIGEgZGVhZGxvY2sgaW4gZ2V0X3BhZ2VfdHlwZSgpIGJ5IHdhaXRpbmcKKyAqICAgICBvbiBh IHZhbGlkYXRpb24gdGhhdCBpcyByZXF1aXJlZCB0byBjb21wbGV0ZSB0aGF0IHZhbGlkYXRpb24u CisgKiAgMy4gV2Ugb25seSBuZWVkIHRvIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50cyBm b3IgdGhlIG1hcHBlZCBwYWdlCisgKiAgICAgZnJhbWUgaWYgaXQgaXMgbWFwcGVkIGJ5IGEgZGlm ZmVyZW50IHJvb3QgdGFibGUuIFRoaXMgaXMgc3VmZmljaWVudCBhbmQKKyAqICAgICBhbHNvIG5l Y2Vzc2FyeSB0byBhbGxvdyB2YWxpZGF0aW9uIG9mIGEgcm9vdCB0YWJsZSBtYXBwaW5nIGl0c2Vs Zi4KKyAqLworI2RlZmluZSBkZWZpbmVfZ2V0X2xpbmVhcl9wYWdldGFibGUobGV2ZWwpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBpbnQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitnZXRf IyNsZXZlbCMjX2xpbmVhcl9wYWdldGFibGUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgIGxldmVsIyNfcGdlbnRyeV90IHBkZSwgdW5zaWduZWQgbG9u ZyBwZGVfcGZuLCBzdHJ1Y3QgZG9tYWluICpkKSAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgdW5zaWduZWQgbG9uZyB4LCB5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNp Z25lZCBsb25nIHBmbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICggKGxldmVsIyNlX2dl dF9mbGFncyhwZGUpICYgX1BBR0VfUlcpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg ICAgICAiQXR0ZW1wdCB0byBjcmVhdGUgbGluZWFyIHAudC4gd2l0aCB3cml0ZSBwZXJtc1xuIik7 ICAgICAgIFwKKyAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIChwZm4gPSBsZXZlbCMjZV9nZXRfcGZuKHBkZSkp ICE9IHBkZV9wZm4gKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIG1hcHBlZCBmcmFtZSBiZWxvbmdzIHRvIHRo ZSBjb3JyZWN0IGRvbWFpbi4gKi8gICAgIFwKKyAgICAgICAgaWYgKCB1bmxpa2VseSghZ2V0X3Bh Z2VfZnJvbV9tZm4oX21mbihwZm4pLCBkKSkgKSAgICAgICAgICAgICAgICAgICBcCisgICAgICAg ICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgICAqIEVuc3VyZSB0aGF0IHRoZSBtYXBwZWQgZnJhbWUgaXMgYW4gYWxyZWFkeS12 YWxpZGF0ZWQgcGFnZSB0YWJsZS4gXAorICAgICAgICAgKiBJZiBzbywgYXRvbWljYWxseSBpbmNy ZW1lbnQgdGhlIGNvdW50IChjaGVja2luZyBmb3Igb3ZlcmZsb3cpLiAgIFwKKyAgICAgICAgICov ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgICAgIHBhZ2UgPSBtZm5fdG9fcGFnZShfbWZuKHBmbikpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5ID0gcGFnZS0+dS5pbnVz ZS50eXBlX2luZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB4ID0geTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYg KCB1bmxpa2VseSgoeCAmIFBHVF9jb3VudF9tYXNrKSA9PSBQR1RfY291bnRfbWFzaykgfHwgICAg ICAgIFwKKyAgICAgICAgICAgICAgICAgdW5saWtlbHkoKHggJiAoUEdUX3R5cGVfbWFza3xQR1Rf dmFsaWRhdGVkKSkgIT0gICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIChQ R1RfIyNsZXZlbCMjX3BhZ2VfdGFibGV8UEdUX3ZhbGlkYXRlZCkpICkgICAgICAgXAorICAgICAg ICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgcmV0 dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHdo aWxlICggKHkgPSBjbXB4Y2hnKCZwYWdlLT51LmludXNlLnR5cGVfaW5mbywgeCwgeCArIDEpKSAh PSB4ICk7ICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgcmV0dXJuIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorfQorCitpbnQgZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9tZm4o bWZuX3QgbWZuLCB1bnNpZ25lZCBsb25nIHR5cGUsIHN0cnVjdCBkb21haW4gKmQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhcnRpYWwsIGludCBwcmVlbXB0aWJsZSkKK3sK KyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlID0gbWZuX3RvX3BhZ2UobWZuKTsKKyAgICBpbnQg cmM7CisKKyAgICBpZiAoIGxpa2VseShwYXJ0aWFsID49IDApICYmCisgICAgICAgICB1bmxpa2Vs eSghZ2V0X3BhZ2VfZnJvbV9tZm4obWZuLCBkKSkgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsK KworICAgIHJjID0gKHByZWVtcHRpYmxlID8KKyAgICAgICAgICBnZXRfcGFnZV90eXBlX3ByZWVt cHRpYmxlKHBhZ2UsIHR5cGUpIDoKKyAgICAgICAgICAoZ2V0X3BhZ2VfdHlwZShwYWdlLCB0eXBl KSA/IDAgOiAtRUlOVkFMKSk7CisKKyAgICBpZiAoIHVubGlrZWx5KHJjKSAmJiBwYXJ0aWFsID49 IDAgJiYKKyAgICAgICAgICghcHJlZW1wdGlibGUgfHwgcGFnZSAhPSBjdXJyZW50LT5hcmNoLm9s ZF9ndWVzdF90YWJsZSkgKQorICAgICAgICBwdXRfcGFnZShwYWdlKTsKKworICAgIHJldHVybiBy YzsKK30KKworLyogTkIuIFZpcnR1YWwgYWRkcmVzcyAnbDJlJyBtYXBzIHRvIGEgbWFjaGluZSBh ZGRyZXNzIHdpdGhpbiBmcmFtZSAncGZuJy4gKi8KKy8qCisgKiBnZXRfcGFnZV9mcm9tX2wyZSBy ZXR1cm5zOgorICogICAxID0+IHBhZ2Ugbm90IHByZXNlbnQKKyAqICAgMCA9PiBzdWNjZXNzCisg KiAgPDAgPT4gZXJyb3IgY29kZQorICovCitkZWZpbmVfZ2V0X2xpbmVhcl9wYWdldGFibGUobDIp OworaW50IGdldF9wYWdlX2Zyb21fbDJlKGwyX3BnZW50cnlfdCBsMmUsIHVuc2lnbmVkIGxvbmcg cGZuLCBzdHJ1Y3QgZG9tYWluICpkKQoreworICAgIHVuc2lnbmVkIGxvbmcgbWZuID0gbDJlX2dl dF9wZm4obDJlKTsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoICEobDJlX2dldF9mbGFncyhsMmUp ICYgX1BBR0VfUFJFU0VOVCkgKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGlmICggdW5saWtl bHkoKGwyZV9nZXRfZmxhZ3MobDJlKSAmIEwyX0RJU0FMTE9XX01BU0spKSApCisgICAgeworICAg ICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkJhZCBMMiBmbGFncyAleFxuIiwKKyAgICAg ICAgICAgICAgICAgbDJlX2dldF9mbGFncyhsMmUpICYgTDJfRElTQUxMT1dfTUFTSyk7CisgICAg ICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIGlmICggIShsMmVfZ2V0X2ZsYWdzKGwy ZSkgJiBfUEFHRV9QU0UpICkKKyAgICB7CisgICAgICAgIHJjID0gZ2V0X3BhZ2VfYW5kX3R5cGVf ZnJvbV9tZm4oX21mbihtZm4pLCBQR1RfbDFfcGFnZV90YWJsZSwgZCwgMCwgMCk7CisgICAgICAg IGlmICggdW5saWtlbHkocmMgPT0gLUVJTlZBTCkgJiYgZ2V0X2wyX2xpbmVhcl9wYWdldGFibGUo bDJlLCBwZm4sIGQpICkKKyAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgcmV0dXJuIHJjOwor ICAgIH0KKworICAgIHJldHVybiAtRUlOVkFMOworfQorCisKKy8qCisgKiBnZXRfcGFnZV9mcm9t X2wzZSByZXR1cm5zOgorICogICAxID0+IHBhZ2Ugbm90IHByZXNlbnQKKyAqICAgMCA9PiBzdWNj ZXNzCisgKiAgPDAgPT4gZXJyb3IgY29kZQorICovCitkZWZpbmVfZ2V0X2xpbmVhcl9wYWdldGFi bGUobDMpOworaW50IGdldF9wYWdlX2Zyb21fbDNlKGwzX3BnZW50cnlfdCBsM2UsIHVuc2lnbmVk IGxvbmcgcGZuLCBzdHJ1Y3QgZG9tYWluICpkLAorICAgICAgICAgICAgICAgICAgICAgIGludCBw YXJ0aWFsKQoreworICAgIGludCByYzsKKworICAgIGlmICggIShsM2VfZ2V0X2ZsYWdzKGwzZSkg JiBfUEFHRV9QUkVTRU5UKSApCisgICAgICAgIHJldHVybiAxOworCisgICAgaWYgKCB1bmxpa2Vs eSgobDNlX2dldF9mbGFncyhsM2UpICYgbDNfZGlzYWxsb3dfbWFzayhkKSkpICkKKyAgICB7Cisg ICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQmFkIEwzIGZsYWdzICV4XG4iLAorICAg ICAgICAgICAgICAgICBsM2VfZ2V0X2ZsYWdzKGwzZSkgJiBsM19kaXNhbGxvd19tYXNrKGQpKTsK KyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgcmMgPSBnZXRfcGFnZV9hbmRf dHlwZV9mcm9tX21mbigKKyAgICAgICAgbDNlX2dldF9tZm4obDNlKSwgUEdUX2wyX3BhZ2VfdGFi bGUsIGQsIHBhcnRpYWwsIDEpOworICAgIGlmICggdW5saWtlbHkocmMgPT0gLUVJTlZBTCkgJiYK KyAgICAgICAgICFpc19wdl8zMmJpdF9kb21haW4oZCkgJiYKKyAgICAgICAgIGdldF9sM19saW5l YXJfcGFnZXRhYmxlKGwzZSwgcGZuLCBkKSApCisgICAgICAgIHJjID0gMDsKKworICAgIHJldHVy biByYzsKK30KKworLyoKKyAqIGdldF9wYWdlX2Zyb21fbDRlIHJldHVybnM6CisgKiAgIDEgPT4g cGFnZSBub3QgcHJlc2VudAorICogICAwID0+IHN1Y2Nlc3MKKyAqICA8MCA9PiBlcnJvciBjb2Rl CisgKi8KK2RlZmluZV9nZXRfbGluZWFyX3BhZ2V0YWJsZShsNCk7CitpbnQgZ2V0X3BhZ2VfZnJv bV9sNGUobDRfcGdlbnRyeV90IGw0ZSwgdW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBkb21haW4g KmQsCisgICAgICAgICAgICAgICAgICAgICAgaW50IHBhcnRpYWwpCit7CisgICAgaW50IHJjOwor CisgICAgaWYgKCAhKGw0ZV9nZXRfZmxhZ3MobDRlKSAmIF9QQUdFX1BSRVNFTlQpICkKKyAgICAg ICAgcmV0dXJuIDE7CisKKyAgICBpZiAoIHVubGlrZWx5KChsNGVfZ2V0X2ZsYWdzKGw0ZSkgJiBM NF9ESVNBTExPV19NQVNLKSkgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5J TkcsICJCYWQgTDQgZmxhZ3MgJXhcbiIsCisgICAgICAgICAgICAgICAgIGw0ZV9nZXRfZmxhZ3Mo bDRlKSAmIEw0X0RJU0FMTE9XX01BU0spOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9 CisKKyAgICByYyA9IGdldF9wYWdlX2FuZF90eXBlX2Zyb21fbWZuKAorICAgICAgICBsNGVfZ2V0 X21mbihsNGUpLCBQR1RfbDNfcGFnZV90YWJsZSwgZCwgcGFydGlhbCwgMSk7CisgICAgaWYgKCB1 bmxpa2VseShyYyA9PSAtRUlOVkFMKSAmJiBnZXRfbDRfbGluZWFyX3BhZ2V0YWJsZShsNGUsIHBm biwgZCkgKQorICAgICAgICByYyA9IDA7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBO Qi4gVmlydHVhbCBhZGRyZXNzICdsMmUnIG1hcHMgdG8gYSBtYWNoaW5lIGFkZHJlc3Mgd2l0aGlu IGZyYW1lICdwZm4nLgorICogTm90ZSBhbHNvIHRoYXQgdGhpcyBhdXRvbWF0aWNhbGx5IGRlYWxz IGNvcnJlY3RseSB3aXRoIGxpbmVhciBwLnQuJ3MuCisgKi8KK2ludCBwdXRfcGFnZV9mcm9tX2wy ZShsMl9wZ2VudHJ5X3QgbDJlLCB1bnNpZ25lZCBsb25nIHBmbikKK3sKKyAgICBpZiAoICEobDJl X2dldF9mbGFncyhsMmUpICYgX1BBR0VfUFJFU0VOVCkgfHwgKGwyZV9nZXRfcGZuKGwyZSkgPT0g cGZuKSApCisgICAgICAgIHJldHVybiAxOworCisgICAgaWYgKCBsMmVfZ2V0X2ZsYWdzKGwyZSkg JiBfUEFHRV9QU0UgKQorICAgIHsKKyAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSA9IGwy ZV9nZXRfcGFnZShsMmUpOworICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgICAgICBmb3Ig KCBpID0gMDsgaSA8ICgxdSA8PCBQQUdFVEFCTEVfT1JERVIpOyBpKyssIHBhZ2UrKyApCisgICAg ICAgICAgICBwdXRfcGFnZV9hbmRfdHlwZShwYWdlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcHV0 X3BhZ2VfYW5kX3R5cGUobDJlX2dldF9wYWdlKGwyZSkpOworCisgICAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIHB1dF9kYXRhX3BhZ2Uoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgYm9vbCB3 cml0ZWFibGUpCit7CisgICAgaWYgKCB3cml0ZWFibGUgKQorICAgICAgICBwdXRfcGFnZV9hbmRf dHlwZShwYWdlKTsKKyAgICBlbHNlCisgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworfQorCitpbnQg cHV0X3BhZ2VfZnJvbV9sM2UobDNfcGdlbnRyeV90IGwzZSwgdW5zaWduZWQgbG9uZyBwZm4sIGlu dCBwYXJ0aWFsLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVmZXIpCit7CisgICAgc3Ry dWN0IHBhZ2VfaW5mbyAqcGc7CisKKyAgICBpZiAoICEobDNlX2dldF9mbGFncyhsM2UpICYgX1BB R0VfUFJFU0VOVCkgfHwgKGwzZV9nZXRfcGZuKGwzZSkgPT0gcGZuKSApCisgICAgICAgIHJldHVy biAxOworCisgICAgaWYgKCB1bmxpa2VseShsM2VfZ2V0X2ZsYWdzKGwzZSkgJiBfUEFHRV9QU0Up ICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuID0gbDNlX2dldF9wZm4obDNlKTsK KyAgICAgICAgYm9vbCB3cml0ZWFibGUgPSBsM2VfZ2V0X2ZsYWdzKGwzZSkgJiBfUEFHRV9SVzsK KworICAgICAgICBBU1NFUlQoIShtZm4gJiAoKDFVTCA8PCAoTDNfUEFHRVRBQkxFX1NISUZUIC0g UEFHRV9TSElGVCkpIC0gMSkpKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgcHV0X2RhdGFf cGFnZShtZm5fdG9fcGFnZShfbWZuKG1mbikpLCB3cml0ZWFibGUpOworICAgICAgICB9IHdoaWxl ICggKyttZm4gJiAoKDFVTCA8PCAoTDNfUEFHRVRBQkxFX1NISUZUIC0gUEFHRV9TSElGVCkpIC0g MSkgKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBwZyA9IGwzZV9nZXRfcGFn ZShsM2UpOworCisgICAgaWYgKCB1bmxpa2VseShwYXJ0aWFsID4gMCkgKQorICAgIHsKKyAgICAg ICAgQVNTRVJUKCFkZWZlcik7CisgICAgICAgIHJldHVybiBwdXRfcGFnZV90eXBlX3ByZWVtcHRp YmxlKHBnKTsKKyAgICB9CisKKyAgICBpZiAoIGRlZmVyICkKKyAgICB7CisgICAgICAgIGN1cnJl bnQtPmFyY2gub2xkX2d1ZXN0X3RhYmxlID0gcGc7CisgICAgICAgIHJldHVybiAwOworICAgIH0K KworICAgIHJldHVybiBwdXRfcGFnZV9hbmRfdHlwZV9wcmVlbXB0aWJsZShwZyk7Cit9CisKK2lu dCBwdXRfcGFnZV9mcm9tX2w0ZShsNF9wZ2VudHJ5X3QgbDRlLCB1bnNpZ25lZCBsb25nIHBmbiwg aW50IHBhcnRpYWwsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWZlcikKK3sKKyAgICBp ZiAoIChsNGVfZ2V0X2ZsYWdzKGw0ZSkgJiBfUEFHRV9QUkVTRU5UKSAmJgorICAgICAgICAgKGw0 ZV9nZXRfcGZuKGw0ZSkgIT0gcGZuKSApCisgICAgeworICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZv ICpwZyA9IGw0ZV9nZXRfcGFnZShsNGUpOworCisgICAgICAgIGlmICggdW5saWtlbHkocGFydGlh bCA+IDApICkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFkZWZlcik7CisgICAgICAg ICAgICByZXR1cm4gcHV0X3BhZ2VfdHlwZV9wcmVlbXB0aWJsZShwZyk7CisgICAgICAgIH0KKwor ICAgICAgICBpZiAoIGRlZmVyICkKKyAgICAgICAgeworICAgICAgICAgICAgY3VycmVudC0+YXJj aC5vbGRfZ3Vlc3RfdGFibGUgPSBwZzsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9 CisKKyAgICAgICAgcmV0dXJuIHB1dF9wYWdlX2FuZF90eXBlX3ByZWVtcHRpYmxlKHBnKTsKKyAg ICB9CisgICAgcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBHZXQgYSBtYXBwaW5nIG9mIGEgUFYgZ3Vl c3QncyBsMWUgZm9yIHRoaXMgbGluZWFyIGFkZHJlc3MuICBUaGUgcmV0dXJuCiAgKiBwb2ludGVy IHNob3VsZCBiZSB1bm1hcHBlZCB1c2luZyB1bm1hcF9kb21haW5fcGFnZSgpLgpAQCAtMjE1LDYg KzQ4NSw1MjYgQEAgdm9pZCBwdl9hcmNoX2luaXRfbWVtb3J5KHZvaWQpCiAjZW5kaWYKIH0KIAor c3RhdGljIGludCBhbGxvY19zZWdkZXNjX3BhZ2Uoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKK3sK KyAgICBjb25zdCBzdHJ1Y3QgZG9tYWluICpvd25lciA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOwor ICAgIHN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzY3MgPSBfX21hcF9kb21haW5fcGFnZShwYWdlKTsK KyAgICB1bnNpZ25lZCBpOworCisgICAgZm9yICggaSA9IDA7IGkgPCA1MTI7IGkrKyApCisgICAg ICAgIGlmICggdW5saWtlbHkoIWNoZWNrX2Rlc2NyaXB0b3Iob3duZXIsICZkZXNjc1tpXSkpICkK KyAgICAgICAgICAgIGJyZWFrOworCisgICAgdW5tYXBfZG9tYWluX3BhZ2UoZGVzY3MpOworCisg ICAgcmV0dXJuIGkgPT0gNTEyID8gMCA6IC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2Nf bDFfdGFibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpk ID0gcGFnZV9nZXRfb3duZXIocGFnZSk7CisgICAgbDFfcGdlbnRyeV90ICAqcGwxZTsKKyAgICB1 bnNpZ25lZCBpbnQgICBpOworICAgIGludCAgICAgICAgICAgIHJldCA9IDA7CisKKyAgICBwbDFl ID0gX19tYXBfZG9tYWluX3BhZ2UocGFnZSk7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IEwxX1BB R0VUQUJMRV9FTlRSSUVTOyBpKysgKQorICAgIHsKKyAgICAgICAgc3dpdGNoICggcmV0ID0gZ2V0 X3BhZ2VfZnJvbV9sMWUocGwxZVtpXSwgZCwgZCkgKQorICAgICAgICB7CisgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlIF9QQUdFX1JXIC4uLiBfUEFHRV9SVyB8IFBBR0VfQ0FDSEVf QVRUUlM6CisgICAgICAgICAgICBBU1NFUlQoIShyZXQgJiB+KF9QQUdFX1JXIHwgUEFHRV9DQUNI RV9BVFRSUykpKTsKKyAgICAgICAgICAgIGwxZV9mbGlwX2ZsYWdzKHBsMWVbaV0sIHJldCk7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHBsMWVbaV0gPSBhZGp1c3Rf Z3Vlc3RfbDFlKHBsMWVbaV0sIGQpOworICAgIH0KKworICAgIHVubWFwX2RvbWFpbl9wYWdlKHBs MWUpOworICAgIHJldHVybiAwOworCisgZmFpbDoKKyAgICBnZHByaW50ayhYRU5MT0dfV0FSTklO RywgIkZhaWx1cmUgaW4gYWxsb2NfbDFfdGFibGU6IHNsb3QgJSN4XG4iLCBpKTsKKyAgICB3aGls ZSAoIGktLSA+IDAgKQorICAgICAgICBwdXRfcGFnZV9mcm9tX2wxZShwbDFlW2ldLCBkKTsKKwor ICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMWUpOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBj cmVhdGVfcGFlX3hlbl9tYXBwaW5ncyhzdHJ1Y3QgZG9tYWluICpkLCBsM19wZ2VudHJ5X3QgKnBs M2UpCit7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKKyAgICBsM19wZ2VudHJ5X3QgICAg IGwzZTM7CisKKyAgICBpZiAoICFpc19wdl8zMmJpdF9kb21haW4oZCkgKQorICAgICAgICByZXR1 cm4gMTsKKworICAgIHBsM2UgPSAobDNfcGdlbnRyeV90ICopKCh1bnNpZ25lZCBsb25nKXBsM2Ug JiBQQUdFX01BU0spOworCisgICAgLyogM3JkIEwzIHNsb3QgY29udGFpbnMgTDIgd2l0aCBYZW4t cHJpdmF0ZSBtYXBwaW5ncy4gSXQgKm11c3QqIGV4aXN0LiAqLworICAgIGwzZTMgPSBwbDNlWzNd OworICAgIGlmICggIShsM2VfZ2V0X2ZsYWdzKGwzZTMpICYgX1BBR0VfUFJFU0VOVCkgKQorICAg IHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJQQUUgTDMgM3JkIHNsb3QgaXMg ZW1wdHlcbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRo ZSBYZW4tcHJpdmF0ZSBtYXBwaW5ncyBpbmNsdWRlIGxpbmVhciBtYXBwaW5ncy4gVGhlIEwyIHRo dXMgY2Fubm90CisgICAgICogYmUgc2hhcmVkIGJ5IG11bHRpcGxlIEwzIHRhYmxlcy4gVGhlIHRl c3QgaGVyZSBpcyBhZGVxdWF0ZSBiZWNhdXNlOgorICAgICAqICAxLiBDYW5ub3QgYXBwZWFyIGlu IHNsb3RzICE9IDMgYmVjYXVzZSBnZXRfcGFnZV90eXBlKCkgY2hlY2tzIHRoZQorICAgICAqICAg ICBQR1RfcGFlX3hlbl9sMiBmbGFnLCB3aGljaCBpcyBhc3NlcnRlZCBpZmYgdGhlIEwyIGFwcGVh cnMgaW4gc2xvdCAzCisgICAgICogIDIuIENhbm5vdCBhcHBlYXIgaW4gYW5vdGhlciBwYWdlIHRh YmxlJ3MgTDM6CisgICAgICogICAgIGEuIGFsbG9jX2wzX3RhYmxlKCkgY2FsbHMgdGhpcyBmdW5j dGlvbiBhbmQgdGhpcyBjaGVjayB3aWxsIGZhaWwKKyAgICAgKiAgICAgYi4gbW9kX2wzX2VudHJ5 KCkgZGlzYWxsb3dzIHVwZGF0ZXMgdG8gc2xvdCAzIGluIGFuIGV4aXN0aW5nIHRhYmxlCisgICAg ICovCisgICAgcGFnZSA9IGwzZV9nZXRfcGFnZShsM2UzKTsKKyAgICBCVUdfT04ocGFnZS0+dS5p bnVzZS50eXBlX2luZm8gJiBQR1RfcGlubmVkKTsKKyAgICBCVUdfT04oKHBhZ2UtPnUuaW51c2Uu dHlwZV9pbmZvICYgUEdUX2NvdW50X21hc2spID09IDApOworICAgIEJVR19PTighKHBhZ2UtPnUu aW51c2UudHlwZV9pbmZvICYgUEdUX3BhZV94ZW5fbDIpKTsKKyAgICBpZiAoIChwYWdlLT51Lmlu dXNlLnR5cGVfaW5mbyAmIFBHVF9jb3VudF9tYXNrKSAhPSAxICkKKyAgICB7CisgICAgICAgIGdk cHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiUEFFIEwzIDNyZCBzbG90IGlzIHNoYXJlZFxuIik7Cisg ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50 IGFsbG9jX2wyX3RhYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdHlw ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWVtcHRpYmxlKQoreworICAgIHN0 cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKKyAgICB1bnNpZ25lZCBsb25n ICBwZm4gPSBtZm5feChwYWdlX3RvX21mbihwYWdlKSk7CisgICAgbDJfcGdlbnRyeV90ICAqcGwy ZTsKKyAgICB1bnNpZ25lZCBpbnQgICBpOworICAgIGludCAgICAgICAgICAgIHJjID0gMDsKKwor ICAgIHBsMmUgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihwZm4pKTsKKworICAgIGZvciAoIGkgPSBw YWdlLT5ucl92YWxpZGF0ZWRfcHRlczsgaSA8IEwyX1BBR0VUQUJMRV9FTlRSSUVTOyBpKysgKQor ICAgIHsKKyAgICAgICAgaWYgKCBwcmVlbXB0aWJsZSAmJiBpID4gcGFnZS0+bnJfdmFsaWRhdGVk X3B0ZXMKKyAgICAgICAgICAgICAmJiBoeXBlcmNhbGxfcHJlZW1wdF9jaGVjaygpICkKKyAgICAg ICAgeworICAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOworICAgICAgICAg ICAgcmMgPSAtRVJFU1RBUlQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg ICAgIGlmICggIWlzX2d1ZXN0X2wyX3Nsb3QoZCwgdHlwZSwgaSkgfHwKKyAgICAgICAgICAgICAo cmMgPSBnZXRfcGFnZV9mcm9tX2wyZShwbDJlW2ldLCBwZm4sIGQpKSA+IDAgKQorICAgICAgICAg ICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCByYyA8IDAgKQorICAgICAgICB7CisgICAgICAg ICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkZhaWx1cmUgaW4gYWxsb2NfbDJfdGFibGU6 IHNsb3QgJSN4XG4iLCBpKTsKKyAgICAgICAgICAgIHdoaWxlICggaS0tID4gMCApCisgICAgICAg ICAgICAgICAgaWYgKCBpc19ndWVzdF9sMl9zbG90KGQsIHR5cGUsIGkpICkKKyAgICAgICAgICAg ICAgICAgICAgcHV0X3BhZ2VfZnJvbV9sMmUocGwyZVtpXSwgcGZuKTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisKKyAgICAgICAgcGwyZVtpXSA9IGFkanVzdF9ndWVzdF9sMmUocGwy ZVtpXSwgZCk7CisgICAgfQorCisgICAgaWYgKCByYyA+PSAwICYmICh0eXBlICYgUEdUX3BhZV94 ZW5fbDIpICkKKyAgICB7CisgICAgICAgIC8qIFhlbiBwcml2YXRlIG1hcHBpbmdzLiAqLworICAg ICAgICBtZW1jcHkoJnBsMmVbQ09NUEFUX0wyX1BBR0VUQUJMRV9GSVJTVF9YRU5fU0xPVChkKV0s CisgICAgICAgICAgICAgICAmY29tcGF0X2lkbGVfcGdfdGFibGVfbDJbCisgICAgICAgICAgICAg ICAgICAgbDJfdGFibGVfb2Zmc2V0KEhJUk9fQ09NUEFUX01QVF9WSVJUX1NUQVJUKV0sCisgICAg ICAgICAgICAgICBDT01QQVRfTDJfUEFHRVRBQkxFX1hFTl9TTE9UUyhkKSAqIHNpemVvZigqcGwy ZSkpOworICAgIH0KKworICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMmUpOworICAgIHJldHVybiBy YyA+IDAgPyAwIDogcmM7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfbDNfdGFibGUoc3RydWN0IHBh Z2VfaW5mbyAqcGFnZSkKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpkID0gcGFnZV9nZXRfb3duZXIo cGFnZSk7CisgICAgdW5zaWduZWQgbG9uZyAgcGZuID0gbWZuX3gocGFnZV90b19tZm4ocGFnZSkp OworICAgIGwzX3BnZW50cnlfdCAgKnBsM2U7CisgICAgdW5zaWduZWQgaW50ICAgaTsKKyAgICBp bnQgICAgICAgICAgICByYyA9IDAsIHBhcnRpYWwgPSBwYWdlLT5wYXJ0aWFsX3B0ZTsKKworICAg IHBsM2UgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihwZm4pKTsKKworICAgIC8qCisgICAgICogUEFF IGd1ZXN0cyBhbGxvY2F0ZSBmdWxsIHBhZ2VzLCBidXQgYXJlbid0IHJlcXVpcmVkIHRvIGluaXRp YWxpemUKKyAgICAgKiBtb3JlIHRoYW4gdGhlIGZpcnN0IGZvdXIgZW50cmllczsgd2hlbiBydW5u aW5nIGluIGNvbXBhdGliaWxpdHkKKyAgICAgKiBtb2RlLCBob3dldmVyLCB0aGUgZnVsbCBwYWdl IGlzIHZpc2libGUgdG8gdGhlIE1NVSwgYW5kIGhlbmNlIGFsbAorICAgICAqIDUxMiBlbnRyaWVz IG11c3QgYmUgdmFsaWQvdmVyaWZpZWQsIHdoaWNoIGlzIG1vc3QgZWFzaWx5IGFjaGlldmVkCisg ICAgICogYnkgY2xlYXJpbmcgdGhlbSBvdXQuCisgICAgICovCisgICAgaWYgKCBpc19wdl8zMmJp dF9kb21haW4oZCkgKQorICAgICAgICBtZW1zZXQocGwzZSArIDQsIDAsIChMM19QQUdFVEFCTEVf RU5UUklFUyAtIDQpICogc2l6ZW9mKCpwbDNlKSk7CisKKyAgICBmb3IgKCBpID0gcGFnZS0+bnJf dmFsaWRhdGVkX3B0ZXM7IGkgPCBMM19QQUdFVEFCTEVfRU5UUklFUzsKKyAgICAgICAgICBpKyss IHBhcnRpYWwgPSAwICkKKyAgICB7CisgICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGQp ICYmIChpID09IDMpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCAhKGwzZV9nZXRfZmxh Z3MocGwzZVtpXSkgJiBfUEFHRV9QUkVTRU5UKSB8fAorICAgICAgICAgICAgICAgICAobDNlX2dl dF9mbGFncyhwbDNlW2ldKSAmIGwzX2Rpc2FsbG93X21hc2soZCkpICkKKyAgICAgICAgICAgICAg ICByYyA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmMgPSBn ZXRfcGFnZV9hbmRfdHlwZV9mcm9tX21mbigKKyAgICAgICAgICAgICAgICAgICAgbDNlX2dldF9t Zm4ocGwzZVtpXSksCisgICAgICAgICAgICAgICAgICAgIFBHVF9sMl9wYWdlX3RhYmxlIHwgUEdU X3BhZV94ZW5fbDIsIGQsIHBhcnRpYWwsIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg KCAocmMgPSBnZXRfcGFnZV9mcm9tX2wzZShwbDNlW2ldLCBwZm4sIGQsIHBhcnRpYWwpKSA+IDAg KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCByYyA9PSAtRVJFU1RBUlQg KQorICAgICAgICB7CisgICAgICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IGk7Cisg ICAgICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IHBhcnRpYWwgPzogMTsKKyAgICAgICAgfQor ICAgICAgICBlbHNlIGlmICggcmMgPT0gLUVJTlRSICYmIGkgKQorICAgICAgICB7CisgICAgICAg ICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IGk7CisgICAgICAgICAgICBwYWdlLT5wYXJ0 aWFsX3B0ZSA9IDA7CisgICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsKKyAgICAgICAgfQorICAg ICAgICBpZiAoIHJjIDwgMCApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBwbDNlW2ld ID0gYWRqdXN0X2d1ZXN0X2wzZShwbDNlW2ldLCBkKTsKKyAgICB9CisKKyAgICBpZiAoIHJjID49 IDAgJiYgIWNyZWF0ZV9wYWVfeGVuX21hcHBpbmdzKGQsIHBsM2UpICkKKyAgICAgICAgcmMgPSAt RUlOVkFMOworICAgIGlmICggcmMgPCAwICYmIHJjICE9IC1FUkVTVEFSVCAmJiByYyAhPSAtRUlO VFIgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJGYWlsdXJlIGlu IGFsbG9jX2wzX3RhYmxlOiBzbG90ICUjeFxuIiwgaSk7CisgICAgICAgIGlmICggaSApCisgICAg ICAgIHsKKyAgICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKKyAgICAgICAg ICAgIHBhZ2UtPnBhcnRpYWxfcHRlID0gMDsKKyAgICAgICAgICAgIGN1cnJlbnQtPmFyY2gub2xk X2d1ZXN0X3RhYmxlID0gcGFnZTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoIGktLSA+IDAg KQorICAgICAgICAgICAgcGwzZVtpXSA9IHVuYWRqdXN0X2d1ZXN0X2wzZShwbDNlW2ldLCBkKTsK KyAgICB9CisKKyAgICB1bm1hcF9kb21haW5fcGFnZShwbDNlKTsKKyAgICByZXR1cm4gcmMgPiAw ID8gMCA6IHJjOworfQorCitzdGF0aWMgaW50IGFsbG9jX2w0X3RhYmxlKHN0cnVjdCBwYWdlX2lu Zm8gKnBhZ2UpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVyKHBhZ2Up OworICAgIHVuc2lnbmVkIGxvbmcgIHBmbiA9IG1mbl94KHBhZ2VfdG9fbWZuKHBhZ2UpKTsKKyAg ICBsNF9wZ2VudHJ5X3QgICpwbDRlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4ocGZuKSk7CisgICAg dW5zaWduZWQgaW50ICAgaTsKKyAgICBpbnQgICAgICAgICAgICByYyA9IDAsIHBhcnRpYWwgPSBw YWdlLT5wYXJ0aWFsX3B0ZTsKKworICAgIGZvciAoIGkgPSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRl czsgaSA8IEw0X1BBR0VUQUJMRV9FTlRSSUVTOworICAgICAgICAgIGkrKywgcGFydGlhbCA9IDAg KQorICAgIHsKKyAgICAgICAgaWYgKCAhaXNfZ3Vlc3RfbDRfc2xvdChkLCBpKSB8fAorICAgICAg ICAgICAgIChyYyA9IGdldF9wYWdlX2Zyb21fbDRlKHBsNGVbaV0sIHBmbiwgZCwgcGFydGlhbCkp ID4gMCApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIHJjID09IC1FUkVT VEFSVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0g aTsKKyAgICAgICAgICAgIHBhZ2UtPnBhcnRpYWxfcHRlID0gcGFydGlhbCA/OiAxOworICAgICAg ICB9CisgICAgICAgIGVsc2UgaWYgKCByYyA8IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBp ZiAoIHJjICE9IC1FSU5UUiApCisgICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5J TkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWx1cmUgaW4gYWxsb2NfbDRfdGFibGU6 IHNsb3QgJSN4XG4iLCBpKTsKKyAgICAgICAgICAgIGlmICggaSApCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOworICAgICAgICAgICAg ICAgIHBhZ2UtPnBhcnRpYWxfcHRlID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoIHJjID09IC1F SU5UUiApCisgICAgICAgICAgICAgICAgICAgIHJjID0gLUVSRVNUQVJUOworICAgICAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICggY3Vy cmVudC0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFn ZS0+bnJfdmFsaWRhdGVkX3B0ZXMrKzsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudC0+YXJj aC5vbGRfZ3Vlc3RfdGFibGUgPSBwYWdlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIHJjIDwgMCApCisgICAgICAgIHsKKyAgICAgICAg ICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsNGUpOworICAgICAgICAgICAgcmV0dXJuIHJjOworICAg ICAgICB9CisKKyAgICAgICAgcGw0ZVtpXSA9IGFkanVzdF9ndWVzdF9sNGUocGw0ZVtpXSwgZCk7 CisgICAgfQorCisgICAgaWYgKCByYyA+PSAwICkKKyAgICB7CisgICAgICAgIGluaXRfZ3Vlc3Rf bDRfdGFibGUocGw0ZSwgZCwgIVZNX0FTU0lTVChkLCBtMnBfc3RyaWN0KSk7CisgICAgICAgIGF0 b21pY19pbmMoJmQtPmFyY2gucHZfZG9tYWluLm5yX2w0X3BhZ2VzKTsKKyAgICAgICAgcmMgPSAw OworICAgIH0KKyAgICB1bm1hcF9kb21haW5fcGFnZShwbDRlKTsKKworICAgIHJldHVybiByYzsK K30KKworaW50IHB2X2FsbG9jX3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCB1bnNp Z25lZCBsb25nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVlbXB0aWJsZSkK K3sKKyAgICBzdHJ1Y3QgZG9tYWluICpvd25lciA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOworICAg IGludCByYzsKKworICAgIC8qIEEgcGFnZSB0YWJsZSBpcyBkaXJ0aWVkIHdoZW4gaXRzIHR5cGUg Y291bnQgYmVjb21lcyBub24temVyby4gKi8KKyAgICBpZiAoIGxpa2VseShvd25lciAhPSBOVUxM KSApCisgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KG93bmVyLCBwYWdlX3RvX21mbihwYWdlKSk7 CisKKyAgICBzd2l0Y2ggKCB0eXBlICYgUEdUX3R5cGVfbWFzayApCisgICAgeworICAgIGNhc2Ug UEdUX2wxX3BhZ2VfdGFibGU6CisgICAgICAgIHJjID0gYWxsb2NfbDFfdGFibGUocGFnZSk7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgUEdUX2wyX3BhZ2VfdGFibGU6CisgICAgICAgIHJjID0g YWxsb2NfbDJfdGFibGUocGFnZSwgdHlwZSwgcHJlZW1wdGlibGUpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIFBHVF9sM19wYWdlX3RhYmxlOgorICAgICAgICBBU1NFUlQocHJlZW1wdGlibGUp OworICAgICAgICByYyA9IGFsbG9jX2wzX3RhYmxlKHBhZ2UpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIFBHVF9sNF9wYWdlX3RhYmxlOgorICAgICAgICBBU1NFUlQocHJlZW1wdGlibGUpOwor ICAgICAgICByYyA9IGFsbG9jX2w0X3RhYmxlKHBhZ2UpOworICAgICAgICBicmVhazsKKyAgICBj YXNlIFBHVF9zZWdfZGVzY19wYWdlOgorICAgICAgICByYyA9IGFsbG9jX3NlZ2Rlc2NfcGFnZShw YWdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRrKCJCYWQg dHlwZSBpbiAlcyAlbHggdD0lIiBQUnR5cGVfaW5mbyAiIGM9JWx4XG4iLCBfX2Z1bmNfXywKKyAg ICAgICAgICAgICAgIHR5cGUsIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvLAorICAgICAgICAgICAg ICAgcGFnZS0+Y291bnRfaW5mbyk7CisgICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgQlVH KCk7CisgICAgfQorCisgICAgLyogTm8gbmVlZCBmb3IgYXRvbWljIHVwZGF0ZSBvZiB0eXBlX2lu Zm8gaGVyZTogbm9vbmUgZWxzZSB1cGRhdGVzIGl0LiAqLworICAgIHNtcF93bWIoKTsKKyAgICBz d2l0Y2ggKCByYyApCisgICAgeworICAgIGNhc2UgMDoKKyAgICAgICAgcGFnZS0+dS5pbnVzZS50 eXBlX2luZm8gfD0gUEdUX3ZhbGlkYXRlZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAtRUlO VFI6CisgICAgICAgIEFTU0VSVCgocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJgorICAgICAgICAg ICAgICAgIChQR1RfY291bnRfbWFza3xQR1RfdmFsaWRhdGVkfFBHVF9wYXJ0aWFsKSkgPT0gMSk7 CisgICAgICAgIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICY9IH5QR1RfY291bnRfbWFzazsKKyAg ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKHJjIDwgMCk7CisgICAg ICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiRXJyb3Igd2hpbGUgdmFsaWRhdGluZyBtZm4g JSIgUFJJX21mbgorICAgICAgICAgICAgICAgICAiIChwZm4gJSIgUFJJX3BmbiAiKSBmb3IgdHlw ZSAlIiBQUnR5cGVfaW5mbworICAgICAgICAgICAgICAgICAiOiBjYWY9JTA4bHggdGFmPSUiIFBS dHlwZV9pbmZvICJcbiIsCisgICAgICAgICAgICAgICAgIG1mbl94KHBhZ2VfdG9fbWZuKHBhZ2Up KSwKKyAgICAgICAgICAgICAgICAgZ2V0X2dwZm5fZnJvbV9tZm4obWZuX3gocGFnZV90b19tZm4o cGFnZSkpKSwKKyAgICAgICAgICAgICAgICAgdHlwZSwgcGFnZS0+Y291bnRfaW5mbywgcGFnZS0+ dS5pbnVzZS50eXBlX2luZm8pOworICAgICAgICBpZiAoIHBhZ2UgIT0gY3VycmVudC0+YXJjaC5v bGRfZ3Vlc3RfdGFibGUgKQorICAgICAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gPSAw OworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCgocGFnZS0+dS5p bnVzZS50eXBlX2luZm8gJgorICAgICAgICAgICAgICAgICAgICAoUEdUX2NvdW50X21hc2sgfCBQ R1RfdmFsaWRhdGVkKSkgPT0gMSk7CisgICAgY2FzZSAtRVJFU1RBUlQ6CisgICAgICAgICAgICBn ZXRfcGFnZV9saWdodChwYWdlKTsKKyAgICAgICAgICAgIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZv IHw9IFBHVF9wYXJ0aWFsOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg IHJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgZnJlZV9sMV90YWJsZShzdHJ1Y3QgcGFnZV9p bmZvICpwYWdlKQoreworICAgIHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdl KTsKKyAgICBsMV9wZ2VudHJ5X3QgKnBsMWU7CisgICAgdW5zaWduZWQgaW50ICBpOworCisgICAg cGwxZSA9IF9fbWFwX2RvbWFpbl9wYWdlKHBhZ2UpOworCisgICAgZm9yICggaSA9IDA7IGkgPCBM MV9QQUdFVEFCTEVfRU5UUklFUzsgaSsrICkKKyAgICAgICAgcHV0X3BhZ2VfZnJvbV9sMWUocGwx ZVtpXSwgZCk7CisKKyAgICB1bm1hcF9kb21haW5fcGFnZShwbDFlKTsKK30KKworCitzdGF0aWMg aW50IGZyZWVfbDJfdGFibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgaW50IHByZWVtcHRpYmxl KQoreworICAgIHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKKyAgICB1 bnNpZ25lZCBsb25nIHBmbiA9IG1mbl94KHBhZ2VfdG9fbWZuKHBhZ2UpKTsKKyAgICBsMl9wZ2Vu dHJ5X3QgKnBsMmU7CisgICAgdW5zaWduZWQgaW50ICBpID0gcGFnZS0+bnJfdmFsaWRhdGVkX3B0 ZXMgLSAxOworICAgIGludCBlcnIgPSAwOworCisgICAgcGwyZSA9IG1hcF9kb21haW5fcGFnZShf bWZuKHBmbikpOworCisgICAgQVNTRVJUKHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzKTsKKyAgICBk byB7CisgICAgICAgIGlmICggaXNfZ3Vlc3RfbDJfc2xvdChkLCBwYWdlLT51LmludXNlLnR5cGVf aW5mbywgaSkgJiYKKyAgICAgICAgICAgICBwdXRfcGFnZV9mcm9tX2wyZShwbDJlW2ldLCBwZm4p ID09IDAgJiYKKyAgICAgICAgICAgICBwcmVlbXB0aWJsZSAmJiBpICYmIGh5cGVyY2FsbF9wcmVl bXB0X2NoZWNrKCkgKQorICAgICAgICB7CisgICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9w dGVzID0gaTsKKyAgICAgICAgICAgZXJyID0gLUVSRVNUQVJUOworICAgICAgICB9CisgICAgfSB3 aGlsZSAoICFlcnIgJiYgaS0tICk7CisKKyAgICB1bm1hcF9kb21haW5fcGFnZShwbDJlKTsKKwor ICAgIGlmICggIWVyciApCisgICAgICAgIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICY9IH5QR1Rf cGFlX3hlbl9sMjsKKworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZnJlZV9sM190 YWJsZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQoreworICAgIHN0cnVjdCBkb21haW4gKmQgPSBw YWdlX2dldF9vd25lcihwYWdlKTsKKyAgICB1bnNpZ25lZCBsb25nIHBmbiA9IG1mbl94KHBhZ2Vf dG9fbWZuKHBhZ2UpKTsKKyAgICBsM19wZ2VudHJ5X3QgKnBsM2U7CisgICAgaW50IHJjID0gMCwg cGFydGlhbCA9IHBhZ2UtPnBhcnRpYWxfcHRlOworICAgIHVuc2lnbmVkIGludCAgaSA9IHBhZ2Ut Pm5yX3ZhbGlkYXRlZF9wdGVzIC0gIXBhcnRpYWw7CisKKyAgICBwbDNlID0gbWFwX2RvbWFpbl9w YWdlKF9tZm4ocGZuKSk7CisKKyAgICBkbyB7CisgICAgICAgIHJjID0gcHV0X3BhZ2VfZnJvbV9s M2UocGwzZVtpXSwgcGZuLCBwYXJ0aWFsLCAwKTsKKyAgICAgICAgaWYgKCByYyA8IDAgKQorICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIHBhcnRpYWwgPSAwOworICAgICAgICBpZiAoIHJjID4g MCApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcGwzZVtpXSA9IHVuYWRqdXN0X2d1 ZXN0X2wzZShwbDNlW2ldLCBkKTsKKyAgICB9IHdoaWxlICggaS0tICk7CisKKyAgICB1bm1hcF9k b21haW5fcGFnZShwbDNlKTsKKworICAgIGlmICggcmMgPT0gLUVSRVNUQVJUICkKKyAgICB7Cisg ICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKKyAgICAgICAgcGFnZS0+cGFydGlh bF9wdGUgPSBwYXJ0aWFsID86IC0xOworICAgIH0KKyAgICBlbHNlIGlmICggcmMgPT0gLUVJTlRS ICYmIGkgPCBMM19QQUdFVEFCTEVfRU5UUklFUyAtIDEgKQorICAgIHsKKyAgICAgICAgcGFnZS0+ bnJfdmFsaWRhdGVkX3B0ZXMgPSBpICsgMTsKKyAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSAw OworICAgICAgICByYyA9IC1FUkVTVEFSVDsKKyAgICB9CisgICAgcmV0dXJuIHJjID4gMCA/IDAg OiByYzsKK30KKworc3RhdGljIGludCBmcmVlX2w0X3RhYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBh Z2UpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOworICAg IHVuc2lnbmVkIGxvbmcgcGZuID0gbWZuX3gocGFnZV90b19tZm4ocGFnZSkpOworICAgIGw0X3Bn ZW50cnlfdCAqcGw0ZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBmbikpOworICAgIGludCByYyA9 IDAsIHBhcnRpYWwgPSBwYWdlLT5wYXJ0aWFsX3B0ZTsKKyAgICB1bnNpZ25lZCBpbnQgIGkgPSBw YWdlLT5ucl92YWxpZGF0ZWRfcHRlcyAtICFwYXJ0aWFsOworCisgICAgZG8geworICAgICAgICBp ZiAoIGlzX2d1ZXN0X2w0X3Nsb3QoZCwgaSkgKQorICAgICAgICAgICAgcmMgPSBwdXRfcGFnZV9m cm9tX2w0ZShwbDRlW2ldLCBwZm4sIHBhcnRpYWwsIDApOworICAgICAgICBpZiAoIHJjIDwgMCAp CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcGFydGlhbCA9IDA7CisgICAgfSB3aGlsZSAo IGktLSApOworCisgICAgaWYgKCByYyA9PSAtRVJFU1RBUlQgKQorICAgIHsKKyAgICAgICAgcGFn ZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOworICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IHBh cnRpYWwgPzogLTE7CisgICAgfQorICAgIGVsc2UgaWYgKCByYyA9PSAtRUlOVFIgJiYgaSA8IEw0 X1BBR0VUQUJMRV9FTlRSSUVTIC0gMSApCisgICAgeworICAgICAgICBwYWdlLT5ucl92YWxpZGF0 ZWRfcHRlcyA9IGkgKyAxOworICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IDA7CisgICAgICAg IHJjID0gLUVSRVNUQVJUOworICAgIH0KKworICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsNGUpOwor CisgICAgaWYgKCByYyA+PSAwICkKKyAgICB7CisgICAgICAgIGF0b21pY19kZWMoJmQtPmFyY2gu cHZfZG9tYWluLm5yX2w0X3BhZ2VzKTsKKyAgICAgICAgcmMgPSAwOworICAgIH0KKworICAgIHJl dHVybiByYzsKK30KKworaW50IHB2X2ZyZWVfcGFnZV90eXBlKHN0cnVjdCBwYWdlX2luZm8gKnBh Z2UsIHVuc2lnbmVkIGxvbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJlZW1w dGlibGUpCit7CisgICAgc3RydWN0IGRvbWFpbiAqb3duZXIgPSBwYWdlX2dldF9vd25lcihwYWdl KTsKKyAgICB1bnNpZ25lZCBsb25nIGdtZm47CisgICAgaW50IHJjOworCisgICAgaWYgKCBsaWtl bHkob3duZXIgIT0gTlVMTCkgJiYgdW5saWtlbHkocGFnaW5nX21vZGVfZW5hYmxlZChvd25lcikp ICkKKyAgICB7CisgICAgICAgIC8qIEEgcGFnZSB0YWJsZSBpcyBkaXJ0aWVkIHdoZW4gaXRzIHR5 cGUgY291bnQgYmVjb21lcyB6ZXJvLiAqLworICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShvd25l ciwgcGFnZV90b19tZm4ocGFnZSkpOworCisgICAgICAgIEFTU0VSVCghc2hhZG93X21vZGVfcmVm Y291bnRzKG93bmVyKSk7CisKKyAgICAgICAgZ21mbiA9IG1mbl90b19nbWZuKG93bmVyLCBtZm5f eChwYWdlX3RvX21mbihwYWdlKSkpOworICAgICAgICBBU1NFUlQoVkFMSURfTTJQKGdtZm4pKTsK KyAgICAgICAgLyogUGFnZSBzaGFyaW5nIG5vdCBzdXBwb3J0ZWQgZm9yIHNoYWRvd2VkIGRvbWFp bnMgKi8KKyAgICAgICAgaWYoIVNIQVJFRF9NMlAoZ21mbikpCisgICAgICAgICAgICBzaGFkb3df cmVtb3ZlX2FsbF9zaGFkb3dzKG93bmVyLCBfbWZuKGdtZm4pKTsKKyAgICB9CisKKyAgICBpZiAo ICEodHlwZSAmIFBHVF9wYXJ0aWFsKSApCisgICAgeworICAgICAgICBwYWdlLT5ucl92YWxpZGF0 ZWRfcHRlcyA9IDFVIDw8IFBBR0VUQUJMRV9PUkRFUjsKKyAgICAgICAgcGFnZS0+cGFydGlhbF9w dGUgPSAwOworICAgIH0KKworICAgIHN3aXRjaCAoIHR5cGUgJiBQR1RfdHlwZV9tYXNrICkKKyAg ICB7CisgICAgY2FzZSBQR1RfbDFfcGFnZV90YWJsZToKKyAgICAgICAgZnJlZV9sMV90YWJsZShw YWdlKTsKKyAgICAgICAgcmMgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBHVF9sMl9w YWdlX3RhYmxlOgorICAgICAgICByYyA9IGZyZWVfbDJfdGFibGUocGFnZSwgcHJlZW1wdGlibGUp OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBHVF9sM19wYWdlX3RhYmxlOgorICAgICAgICBB U1NFUlQocHJlZW1wdGlibGUpOworICAgICAgICByYyA9IGZyZWVfbDNfdGFibGUocGFnZSk7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgUEdUX2w0X3BhZ2VfdGFibGU6CisgICAgICAgIEFTU0VS VChwcmVlbXB0aWJsZSk7CisgICAgICAgIHJjID0gZnJlZV9sNF90YWJsZShwYWdlKTsKKyAgICAg ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcs ICJ0eXBlICUiIFBSdHlwZV9pbmZvICIgbWZuICUiIFBSSV9tZm4gIlxuIiwKKyAgICAgICAgICAg ICAgICAgdHlwZSwgbWZuX3gocGFnZV90b19tZm4ocGFnZSkpKTsKKyAgICAgICAgcmMgPSAtRUlO VkFMOworICAgICAgICBCVUcoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKIC8qCiAg KiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBtb2RlOiBDCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0 Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK