From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: Date: Mon, 16 Jun 2008 13:27:50 -0700 From: "Glenn Durfee" To: "BlueZ development" MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_8499_28474897.1213648070535" Subject: [Bluez-devel] SDP payload processing vulnerability Reply-To: BlueZ development List-Id: BlueZ development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: bluez-devel-bounces@lists.sourceforge.net Errors-To: bluez-devel-bounces@lists.sourceforge.net ------=_Part_8499_28474897.1213648070535 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi all, The SDP parsing code blindly trusts string length fields in incoming SDP packets, exposing reliant applications to over-the-wireless memory manipulation attacks. An attacker need only send a malformed response to an SDP query to take advantage of this. This is most apparent in file bluez-libs-3.30/src/sdp.c, lines 988, 994, 1002 (see below). Also elsewhere in the code where input pointers are advanced without checking bytes remaining to be parsed. The root of the problem is that in bluez-libs-3.30/src/sdp.c:1125, the function sdp_extract_pdu() takes a buffer to parse (in) and a pointer to a length field (out), but it does not take an incoming length field (in). Attached is a patch to fix this issue. Basically I added a "bytesleft" argument to all of the SDP payload processing routines; length fields are checked against the number of remaining bytes to ensure the parser doesn't run past the end of the packet, or do crazy things like malloc two gigs of memory. This touches a lot of places, and changes the external API for SDP payload processing, but I don't see any other way to do this -- the parser MUST be aware of the incoming packet size in order for this to be secure. Glenn bluez-libs-3.30/src/sdp.c: 972 static sdp_data_t *extract_str(const void *p, int *len) 973 { 974 char *s; 975 int n; 976 sdp_data_t *d = malloc(sizeof(sdp_data_t)); 977 978 memset(d, 0, sizeof(sdp_data_t)); 979 d->dtd = *(uint8_t *) p; 980 p += sizeof(uint8_t); 981 *len += sizeof(uint8_t); 982 983 switch (d->dtd) { 984 case SDP_TEXT_STR8: 985 case SDP_URL_STR8: 986 n = *(uint8_t *) p; // <-- from the incoming packet 987 p += sizeof(uint8_t); 988 *len += sizeof(uint8_t) + n; // <-- blindly trusted here, may advance parser past end of packet 989 break; 990 case SDP_TEXT_STR16: 991 case SDP_URL_STR16: 992 n = ntohs(bt_get_unaligned((uint16_t *) p)); // <-- from the incoming packet 993 p += sizeof(uint16_t); 994 *len += sizeof(uint16_t) + n; // <-- blindly trusted here, may advance parser past end of packet 995 break; 996 default: 997 SDPERR("Sizeof text string > UINT16_MAX\n"); 998 free(d); 999 return 0; 1000 } 1001 1002 s = malloc(n + 1); // <-- really blindly trusted here, also no NULL checking 1003 memset(s, 0, n + 1); 1004 memcpy(s, p, n); 1005 1006 SDPDBG("Len : %d\n", n); 1007 SDPDBG("Str : %s\n", s); 1008 1009 d->val.str = s; 1010 d->unitSize = n + sizeof(uint8_t); // <-- more blind trust 1011 return d; 1012 } ------=_Part_8499_28474897.1213648070535 Content-Type: application/octet-stream; name=bluetooth.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fhjiit9r0 Content-Disposition: attachment; filename=bluetooth.patch ZGlmZiAtdXIgYmx1ZXRvb3RoLm9yaWcvYmx1ZXotbGlicy0zLjMwL2luY2x1ZGUvYmx1ZXRvb3Ro L3NkcF9saWIuaCBibHVldG9vdGgvYmx1ZXotbGlicy0zLjMwL2luY2x1ZGUvYmx1ZXRvb3RoL3Nk cF9saWIuaAotLS0gYmx1ZXRvb3RoLm9yaWcvYmx1ZXotbGlicy0zLjMwL2luY2x1ZGUvYmx1ZXRv b3RoL3NkcF9saWIuaAkyMDA4LTA2LTEzIDEzOjM2OjEzLjkxMzI3NDAwMCAtMDcwMAorKysgYmx1 ZXRvb3RoL2JsdWV6LWxpYnMtMy4zMC9pbmNsdWRlL2JsdWV0b290aC9zZHBfbGliLmgJMjAwOC0w Ni0xMyAxMjowNjoyNi45Mjk1NjUwMDAgLTA3MDAKQEAgLTQ3OCw3ICs0NzgsNyBAQAogdm9pZCBz ZHBfdXVpZDMyX3RvX3V1aWQxMjgodXVpZF90ICp1dWlkMTI4LCB1dWlkX3QgKnV1aWQzMik7CiBp bnQgc2RwX3V1aWQxMjhfdG9fdXVpZCh1dWlkX3QgKnV1aWQpOwogaW50IHNkcF91dWlkX3RvX3By b3RvKHV1aWRfdCAqdXVpZCk7Ci1pbnQgc2RwX3V1aWRfZXh0cmFjdChjb25zdCB1aW50OF90ICpi dWZmZXIsIHV1aWRfdCAqdXVpZCwgaW50ICpzY2FubmVkKTsKK2ludCBzZHBfdXVpZF9leHRyYWN0 KGNvbnN0IHVpbnQ4X3QgKmJ1ZmZlciwgdXVpZF90ICp1dWlkLCBpbnQgKnNjYW5uZWQsIGludCBi eXRlc2xlZnQpOwogdm9pZCBzZHBfdXVpZF9wcmludChjb25zdCB1dWlkX3QgKnV1aWQpOwogCiAj ZGVmaW5lIE1BWF9MRU5fVVVJRF9TVFIgMzcKQEAgLTU4NCw4ICs1ODQsNyBAQAogCXJldHVybiBz ZHBfZ2V0X3N0cmluZ19hdHRyKHJlYywgU0RQX0FUVFJfSUNPTl9VUkwsIHN0ciwgbGVuKTsKIH0K IAotc2RwX3JlY29yZF90ICpzZHBfZXh0cmFjdF9wZHUoY29uc3QgdWludDhfdCAqcGRhdGEsIGlu dCAqc2Nhbm5lZCk7Ci1zZHBfZGF0YV90ICpzZHBfZXh0cmFjdF9zdHJpbmcodWludDhfdCAqLCBp bnQgKik7CitzZHBfcmVjb3JkX3QgKnNkcF9leHRyYWN0X3BkdShjb25zdCB1aW50OF90ICpwZGF0 YSwgaW50ICpzY2FubmVkLCBpbnQgcGFja2V0X3NpemUpOwogCiB2b2lkIHNkcF9kYXRhX3ByaW50 KHNkcF9kYXRhX3QgKmRhdGEpOwogdm9pZCBzZHBfcHJpbnRfc2VydmljZV9hdHRyKHNkcF9saXN0 X3QgKmFsaXN0KTsKQEAgLTYwMCw5ICs1OTksOSBAQAogaW50IHNkcF9nZW5fcGR1KHNkcF9idWZf dCAqcGR1LCBzZHBfZGF0YV90ICpkYXRhKTsKIGludCBzZHBfZ2VuX3JlY29yZF9wZHUoY29uc3Qg c2RwX3JlY29yZF90ICpyZWMsIHNkcF9idWZfdCAqcGR1KTsKIAotaW50IHNkcF9leHRyYWN0X3Nl cXR5cGUoY29uc3QgdWludDhfdCAqYnVmLCB1aW50OF90ICpkdGRwLCBpbnQgKnNlcWxlbik7Citp bnQgc2RwX2V4dHJhY3Rfc2VxdHlwZShjb25zdCB1aW50OF90ICpidWYsIHVpbnQ4X3QgKmR0ZHAs IGludCAqc2VxbGVuLCBpbnQgYnl0ZXNsZWZ0KTsKIAotc2RwX2RhdGFfdCAqc2RwX2V4dHJhY3Rf YXR0cihjb25zdCB1aW50OF90ICpwZGF0YSwgaW50ICpleHRyYWN0ZWRMZW5ndGgsIHNkcF9yZWNv cmRfdCAqcmVjKTsKK3NkcF9kYXRhX3QgKnNkcF9leHRyYWN0X2F0dHIoY29uc3QgdWludDhfdCAq cGRhdGEsIGludCAqZXh0cmFjdGVkTGVuZ3RoLCBzZHBfcmVjb3JkX3QgKnJlYywgaW50IGJ5dGVz bGVmdCk7CiAKIHZvaWQgc2RwX3BhdHRlcm5fYWRkX3V1aWQoc2RwX3JlY29yZF90ICpyZWMsIHV1 aWRfdCAqdXVpZCk7CiB2b2lkIHNkcF9wYXR0ZXJuX2FkZF91dWlkc2VxKHNkcF9yZWNvcmRfdCAq cmVjLCBzZHBfbGlzdF90ICpzZXEpOwpkaWZmIC11ciBibHVldG9vdGgub3JpZy9ibHVlei1saWJz LTMuMzAvc3JjL3NkcC5jIGJsdWV0b290aC9ibHVlei1saWJzLTMuMzAvc3JjL3NkcC5jCi0tLSBi bHVldG9vdGgub3JpZy9ibHVlei1saWJzLTMuMzAvc3JjL3NkcC5jCTIwMDgtMDYtMTMgMTM6MzY6 MTMuOTkwMjgxMDAwIC0wNzAwCisrKyBibHVldG9vdGgvYmx1ZXotbGlicy0zLjMwL3NyYy9zZHAu YwkyMDA4LTA2LTEzIDEyOjM0OjE0Ljk5OTkzMjAwMCAtMDcwMApAQCAtOTA0LDQzICs5MDQsODEg QEAKIAlmcmVlKGQpOwogfQogCi1zdGF0aWMgc2RwX2RhdGFfdCAqZXh0cmFjdF9pbnQoY29uc3Qg dm9pZCAqcCwgaW50ICpsZW4pCitzdGF0aWMgc2RwX2RhdGFfdCAqZXh0cmFjdF9pbnQoY29uc3Qg dm9pZCAqcCwgaW50ICpsZW4sIGludCBieXRlc2xlZnQpCiB7CiAJc2RwX2RhdGFfdCAqZCA9IG1h bGxvYyhzaXplb2Yoc2RwX2RhdGFfdCkpOwogCiAJU0RQREJHKCJFeHRyYWN0aW5nIGludGVnZXJc biIpOwogCW1lbXNldChkLCAwLCBzaXplb2Yoc2RwX2RhdGFfdCkpOworCisJaWYgKGJ5dGVzbGVm dCA8IHNpemVvZih1aW50OF90KSkgeworCSAgU0RQRVJSKCJVbmV4cGVjdGVkIGVuZCBvZiBwYWNr ZXQiKTsKKwkgIGZyZWUoZCk7CisJICByZXR1cm4gMDsKKwl9CisJCiAJZC0+ZHRkID0gKih1aW50 OF90ICopIHA7CiAJcCArPSBzaXplb2YodWludDhfdCk7CiAJKmxlbiArPSBzaXplb2YodWludDhf dCk7Ci0KKwlieXRlc2xlZnQgLT0gc2l6ZW9mKHVpbnQ4X3QpOworICAKIAlzd2l0Y2ggKGQtPmR0 ZCkgewogCWNhc2UgU0RQX0RBVEFfTklMOgogCQlicmVhazsKIAljYXNlIFNEUF9CT09MOgogCWNh c2UgU0RQX0lOVDg6CiAJY2FzZSBTRFBfVUlOVDg6CisgICAgaWYgKGJ5dGVzbGVmdCA8IHNpemVv Zih1aW50OF90KSkgeworICAgICAgU0RQRVJSKCJVbmV4cGVjdGVkIGVuZCBvZiBwYWNrZXQiKTsK KyAgICAgIGZyZWUoZCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CiAJCSpsZW4gKz0gc2l6ZW9m KHVpbnQ4X3QpOworICAgIGJ5dGVzbGVmdCAtPSBzaXplb2YodWludDhfdCk7CiAJCWQtPnZhbC51 aW50OCA9ICoodWludDhfdCAqKSBwOwogCQlicmVhazsKIAljYXNlIFNEUF9JTlQxNjoKIAljYXNl IFNEUF9VSU5UMTY6CisgICAgaWYgKGJ5dGVzbGVmdCA8IHNpemVvZih1aW50MTZfdCkpIHsKKyAg ICAgIFNEUEVSUigiVW5leHBlY3RlZCBlbmQgb2YgcGFja2V0Iik7CisgICAgICBmcmVlKGQpOwor ICAgICAgcmV0dXJuIDA7CisgICAgfQogCQkqbGVuICs9IHNpemVvZih1aW50MTZfdCk7CisJCWJ5 dGVzbGVmdCAtPSBzaXplb2YodWludDE2X3QpOwogCQlkLT52YWwudWludDE2ID0gbnRvaHMoYnRf Z2V0X3VuYWxpZ25lZCgodWludDE2X3QgKikgcCkpOwogCQlicmVhazsKIAljYXNlIFNEUF9JTlQz MjoKIAljYXNlIFNEUF9VSU5UMzI6CisgICAgaWYgKGJ5dGVzbGVmdCA8IHNpemVvZih1aW50MzJf dCkpIHsKKyAgICAgIFNEUEVSUigiVW5leHBlY3RlZCBlbmQgb2YgcGFja2V0Iik7CisgICAgICBm cmVlKGQpOworICAgICAgcmV0dXJuIDA7CisgICAgfQogCQkqbGVuICs9IHNpemVvZih1aW50MzJf dCk7CisJCWJ5dGVzbGVmdCAtPSBzaXplb2YodWludDMyX3QpOwogCQlkLT52YWwudWludDMyID0g bnRvaGwoYnRfZ2V0X3VuYWxpZ25lZCgodWludDMyX3QgKikgcCkpOwogCQlicmVhazsKIAljYXNl IFNEUF9JTlQ2NDoKIAljYXNlIFNEUF9VSU5UNjQ6CisgICAgaWYgKGJ5dGVzbGVmdCA8IHNpemVv Zih1aW50NjRfdCkpIHsKKyAgICAgIFNEUEVSUigiVW5leHBlY3RlZCBlbmQgb2YgcGFja2V0Iik7 CisgICAgICBmcmVlKGQpOworICAgICAgcmV0dXJuIDA7CisgICAgfQogCQkqbGVuICs9IHNpemVv Zih1aW50NjRfdCk7CisJCWJ5dGVzbGVmdCAtPSBzaXplb2YodWludDY0X3QpOwogCQlkLT52YWwu dWludDY0ID0gbnRvaDY0KGJ0X2dldF91bmFsaWduZWQoKHVpbnQ2NF90ICopIHApKTsKIAkJYnJl YWs7CiAJY2FzZSBTRFBfSU5UMTI4OgogCWNhc2UgU0RQX1VJTlQxMjg6CisgICAgaWYgKGJ5dGVz bGVmdCA8IHNpemVvZih1aW50MTI4X3QpKSB7CisgICAgICBTRFBFUlIoIlVuZXhwZWN0ZWQgZW5k IG9mIHBhY2tldCIpOworICAgICAgZnJlZShkKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KIAkJ KmxlbiArPSBzaXplb2YodWludDEyOF90KTsKKwkJYnl0ZXNsZWZ0IC09IHNpemVvZih1aW50MTI4 X3QpOwogCQludG9oMTI4KCh1aW50MTI4X3QgKikgcCwgJmQtPnZhbC51aW50MTI4KTsKIAkJYnJl YWs7CiAJZGVmYXVsdDoKQEAgLTk1MCwxNiArOTg4LDIxIEBACiAJcmV0dXJuIGQ7CiB9CiAKLXN0 YXRpYyBzZHBfZGF0YV90ICpleHRyYWN0X3V1aWQoY29uc3QgdWludDhfdCAqcCwgaW50ICpsZW4s IHNkcF9yZWNvcmRfdCAqcmVjKQorc3RhdGljIHNkcF9kYXRhX3QgKmV4dHJhY3RfdXVpZChjb25z dCB1aW50OF90ICpwLCBpbnQgKmxlbiwgc2RwX3JlY29yZF90ICpyZWMsIGludCBieXRlc2xlZnQp CiB7CiAJc2RwX2RhdGFfdCAqZCA9IG1hbGxvYyhzaXplb2Yoc2RwX2RhdGFfdCkpOwogCiAJU0RQ REJHKCJFeHRyYWN0aW5nIFVVSUQiKTsKIAltZW1zZXQoZCwgMCwgc2l6ZW9mKHNkcF9kYXRhX3Qp KTsKLQlpZiAoc2RwX3V1aWRfZXh0cmFjdChwLCAmZC0+dmFsLnV1aWQsIGxlbikgPCAwKSB7CisJ aWYgKHNkcF91dWlkX2V4dHJhY3QocCwgJmQtPnZhbC51dWlkLCBsZW4sIGJ5dGVzbGVmdCkgPCAw KSB7CiAJCWZyZWUoZCk7CiAJCXJldHVybiBOVUxMOwogCX0KKwlpZiAoYnl0ZXNsZWZ0IDwgc2l6 ZW9mKHVpbnQ4X3QpKSB7CisJICBTRFBFUlIoIlVuZXhwZWN0ZWQgZW5kIG9mIHBhY2tldCIpOwor CSAgZnJlZShkKTsKKwkgIHJldHVybiAwOworCX0KIAlkLT5kdGQgPSAqKHVpbnQ4X3QgKikgcDsK IAlpZiAocmVjKQogCQlzZHBfcGF0dGVybl9hZGRfdXVpZChyZWMsICZkLT52YWwudXVpZCk7CkBA IC05NjksMjkgKzEwMTIsNjMgQEAKIC8qCiAgKiBFeHRyYWN0IHN0cmluZ3MgZnJvbSB0aGUgUERV IChjb3VsZCBiZSBzZXJ2aWNlIGRlc2NyaXB0aW9uIGFuZCBzaW1pbGFyIGluZm8pIAogICovCi1z dGF0aWMgc2RwX2RhdGFfdCAqZXh0cmFjdF9zdHIoY29uc3Qgdm9pZCAqcCwgaW50ICpsZW4pCitz dGF0aWMgc2RwX2RhdGFfdCAqZXh0cmFjdF9zdHIoY29uc3Qgdm9pZCAqcCwgaW50ICpsZW4sIGlu dCBieXRlc2xlZnQpCiB7CiAJY2hhciAqczsKIAlpbnQgbjsKIAlzZHBfZGF0YV90ICpkID0gbWFs bG9jKHNpemVvZihzZHBfZGF0YV90KSk7CiAKIAltZW1zZXQoZCwgMCwgc2l6ZW9mKHNkcF9kYXRh X3QpKTsKKwkKKwlpZiAoYnl0ZXNsZWZ0IDwgc2l6ZW9mKHVpbnQ4X3QpKSB7CisJICBTRFBFUlIo IlVuZXhwZWN0ZWQgZW5kIG9mIHBhY2tldCIpOworCSAgZnJlZShkKTsKKwkgIHJldHVybiAwOwor CX0KKwkKIAlkLT5kdGQgPSAqKHVpbnQ4X3QgKikgcDsKIAlwICs9IHNpemVvZih1aW50OF90KTsK IAkqbGVuICs9IHNpemVvZih1aW50OF90KTsKKwlieXRlc2xlZnQgLT0gc2l6ZW9mKHVpbnQ4X3Qp OwogCiAJc3dpdGNoIChkLT5kdGQpIHsKIAljYXNlIFNEUF9URVhUX1NUUjg6CiAJY2FzZSBTRFBf VVJMX1NUUjg6CisJICBpZiAoYnl0ZXNsZWZ0IDwgc2l6ZW9mKHVpbnQ4X3QpKSB7CisgICAgICBT RFBFUlIoIlVuZXhwZWN0ZWQgZW5kIG9mIHBhY2tldCIpOworICAgICAgZnJlZShkKTsKKyAgICAg IHJldHVybiAwOworCSAgfQogCQluID0gKih1aW50OF90ICopIHA7CiAJCXAgKz0gc2l6ZW9mKHVp bnQ4X3QpOwotCQkqbGVuICs9IHNpemVvZih1aW50OF90KSArIG47CisJCSpsZW4gKz0gc2l6ZW9m KHVpbnQ4X3QpOworCQlieXRlc2xlZnQgLT0gc2l6ZW9mKHVpbnQ4X3QpOworCQlpZiAobiA8PSAw IHx8IG4gPiBieXRlc2xlZnQpIHsKKwkJICBTRFBFUlIoIkludmFsaWQgbGVuZ3RoIG9mIHRleHQg c3RyaW5nIik7CisJCSAgZnJlZShkKTsKKwkJICByZXR1cm4gMDsKKwkJfQorCQkqbGVuICs9IG47 CisJCWJ5dGVzbGVmdCAtPSBuOwogCQlicmVhazsKIAljYXNlIFNEUF9URVhUX1NUUjE2OgogCWNh c2UgU0RQX1VSTF9TVFIxNjoKKyAgICBpZiAoYnl0ZXNsZWZ0IDwgc2l6ZW9mKHVpbnQxNl90KSkg eworICAgICAgU0RQRVJSKCJVbmV4cGVjdGVkIGVuZCBvZiBwYWNrZXQiKTsKKyAgICAgIGZyZWUo ZCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CiAJCW4gPSBudG9ocyhidF9nZXRfdW5hbGlnbmVk KCh1aW50MTZfdCAqKSBwKSk7CiAJCXAgKz0gc2l6ZW9mKHVpbnQxNl90KTsKLQkJKmxlbiArPSBz aXplb2YodWludDE2X3QpICsgbjsKKwkJKmxlbiArPSBzaXplb2YodWludDE2X3QpOworICAgIGJ5 dGVzbGVmdCAtPSBzaXplb2YodWludDE2X3QpOworICAgIGlmIChuIDw9IDAgfHwgbiA+IGJ5dGVz bGVmdCkgeworICAgICAgU0RQRVJSKCJJbnZhbGlkIGxlbmd0aCBvZiB0ZXh0IHN0cmluZyIpOwor ICAgICAgZnJlZShkKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAqbGVuICs9IG47Cisg ICAgYnl0ZXNsZWZ0IC09IG47CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVNEUEVSUigiU2l6ZW9m IHRleHQgc3RyaW5nID4gVUlOVDE2X01BWFxuIik7CkBAIC0xMDAwLDYgKzEwNzcsMTIgQEAKIAl9 CiAKIAlzID0gbWFsbG9jKG4gKyAxKTsKKwlpZiAoTlVMTCA9PSBzKSB7CisJICBTRFBFUlIoIkNh bm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHN0cmluZyIpOworCSAgZnJlZShkKTsKKwkgIHJldHVy biAwOworCX0KKwkKIAltZW1zZXQocywgMCwgbiArIDEpOwogCW1lbWNweShzLCBwLCBuKTsKIApA QCAtMTAxMSw3ICsxMDk0LDcgQEAKIAlyZXR1cm4gZDsKIH0KIAotc3RhdGljIHNkcF9kYXRhX3Qg KmV4dHJhY3Rfc2VxKGNvbnN0IHZvaWQgKnAsIGludCAqbGVuLCBzZHBfcmVjb3JkX3QgKnJlYykK K3N0YXRpYyBzZHBfZGF0YV90ICpleHRyYWN0X3NlcShjb25zdCB2b2lkICpwLCBpbnQgKmxlbiwg c2RwX3JlY29yZF90ICpyZWMsIGludCBieXRlc2xlZnQpCiB7CiAJaW50IHNlcWxlbiwgbiA9IDA7 CiAJc2RwX2RhdGFfdCAqY3VyciwgKnByZXY7CkBAIC0xMDE5LDE3ICsxMTAyLDI0IEBACiAKIAlT RFBEQkcoIkV4dHJhY3RpbmcgU0VRIik7CiAJbWVtc2V0KGQsIDAsIHNpemVvZihzZHBfZGF0YV90 KSk7Ci0JKmxlbiA9IHNkcF9leHRyYWN0X3NlcXR5cGUocCwgJmQtPmR0ZCwgJnNlcWxlbik7CisJ KmxlbiA9IHNkcF9leHRyYWN0X3NlcXR5cGUocCwgJmQtPmR0ZCwgJnNlcWxlbiwgYnl0ZXNsZWZ0 KTsKIAlTRFBEQkcoIlNlcXVlbmNlIFR5cGUgOiAweCV4IGxlbmd0aCA6IDB4JXhcbiIsIGQtPmR0 ZCwgc2VxbGVuKTsKIAogCWlmICgqbGVuID09IDApCiAJCXJldHVybiBkOwogCisJaWYgKGJ5dGVz bGVmdCA8ICpsZW4pIHsKKwkgIFNEUEVSUigiVW5leHBlY3RlZCBlbmQgb2YgcGFja2V0Iik7CisJ ICBmcmVlKGQpOworCSAgcmV0dXJuIDA7CisJfQorCQogCXAgKz0gKmxlbjsKKwlieXRlc2xlZnQg LT0gKmxlbjsKIAljdXJyID0gcHJldiA9IE5VTEw7CiAJd2hpbGUgKG4gPCBzZXFsZW4pIHsKIAkJ aW50IGF0dHJsZW4gPSAwOwotCQljdXJyID0gc2RwX2V4dHJhY3RfYXR0cihwLCAmYXR0cmxlbiwg cmVjKTsKKwkJY3VyciA9IHNkcF9leHRyYWN0X2F0dHIocCwgJmF0dHJsZW4sIHJlYywgYnl0ZXNs ZWZ0KTsKIAkJaWYgKGN1cnIgPT0gTlVMTCkKIAkJCWJyZWFrOwogCkBAIC0xMDQwLDYgKzExMzAs NyBAQAogCQlwcmV2ID0gY3VycjsKIAkJcCArPSBhdHRybGVuOwogCQluICs9IGF0dHJsZW47CisJ CWJ5dGVzbGVmdCAtPSBhdHRybGVuOwogCiAJCVNEUERCRygiRXh0cmFjdGVkOiAlZCBTZXF1ZW5j ZUxlbmd0aDogJWQiLCBuLCBzZXFsZW4pOwogCX0KQEAgLTEwNDgsMTAgKzExMzksMTYgQEAKIAly ZXR1cm4gZDsKIH0KIAotc2RwX2RhdGFfdCAqc2RwX2V4dHJhY3RfYXR0cihjb25zdCB1aW50OF90 ICpwLCBpbnQgKnNpemUsIHNkcF9yZWNvcmRfdCAqcmVjKQorc2RwX2RhdGFfdCAqc2RwX2V4dHJh Y3RfYXR0cihjb25zdCB1aW50OF90ICpwLCBpbnQgKnNpemUsIHNkcF9yZWNvcmRfdCAqcmVjLCBp bnQgYnl0ZXNsZWZ0KQogewogCXNkcF9kYXRhX3QgKmVsZW07CiAJaW50IG4gPSAwOworCQorCWlm IChieXRlc2xlZnQgPCBzaXplb2YodWludDhfdCkpIHsKKwkgIFNEUEVSUigiVW5leHBlY3RlZCBl bmQgb2YgcGFja2V0Iik7CisJICByZXR1cm4gMDsKKwl9CisJCiAJdWludDhfdCBkdGQgPSAqKGNv bnN0IHVpbnQ4X3QgKilwOwogCiAJU0RQREJHKCJleHRyYWN0X2F0dHI6IGR0ZD0weCV4IiwgZHRk KTsKQEAgLTEwNjgsMTIgKzExNjUsMTIgQEAKIAljYXNlIFNEUF9JTlQzMjoKIAljYXNlIFNEUF9J TlQ2NDoKIAljYXNlIFNEUF9JTlQxMjg6Ci0JCWVsZW0gPSBleHRyYWN0X2ludChwLCAmbik7CisJ CWVsZW0gPSBleHRyYWN0X2ludChwLCAmbiwgYnl0ZXNsZWZ0KTsKIAkJYnJlYWs7CiAJY2FzZSBT RFBfVVVJRDE2OgogCWNhc2UgU0RQX1VVSUQzMjoKIAljYXNlIFNEUF9VVUlEMTI4OgotCQllbGVt ID0gZXh0cmFjdF91dWlkKHAsICZuLCByZWMpOworCQllbGVtID0gZXh0cmFjdF91dWlkKHAsICZu LCByZWMsIGJ5dGVzbGVmdCk7CiAJCWJyZWFrOwogCWNhc2UgU0RQX1RFWFRfU1RSODoKIAljYXNl IFNEUF9URVhUX1NUUjE2OgpAQCAtMTA4MSw3ICsxMTc4LDcgQEAKIAljYXNlIFNEUF9VUkxfU1RS ODoKIAljYXNlIFNEUF9VUkxfU1RSMTY6CiAJY2FzZSBTRFBfVVJMX1NUUjMyOgotCQllbGVtID0g ZXh0cmFjdF9zdHIocCwgJm4pOworCQllbGVtID0gZXh0cmFjdF9zdHIocCwgJm4sIGJ5dGVzbGVm dCk7CiAJCWJyZWFrOwogCWNhc2UgU0RQX1NFUTg6CiAJY2FzZSBTRFBfU0VRMTY6CkBAIC0xMDg5 LDEzICsxMTg2LDE0IEBACiAJY2FzZSBTRFBfQUxUODoKIAljYXNlIFNEUF9BTFQxNjoKIAljYXNl IFNEUF9BTFQzMjoKLQkJZWxlbSA9IGV4dHJhY3Rfc2VxKHAsICZuLCByZWMpOworCQllbGVtID0g ZXh0cmFjdF9zZXEocCwgJm4sIHJlYywgYnl0ZXNsZWZ0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoK IAkJU0RQRVJSKCJVbmtub3duIGRhdGEgZGVzY3JpcHRvciA6IDB4JXggdGVybWluYXRpbmdcbiIs IGR0ZCk7CiAJCXJldHVybiBOVUxMOwogCX0KIAkqc2l6ZSArPSBuOworCWJ5dGVzbGVmdCAtPSBu OwogCXJldHVybiBlbGVtOwogfQogCkBAIC0xMTIyLDIxICsxMjIwLDM3IEBACiB9CiAjZW5kaWYK IAotc2RwX3JlY29yZF90ICpzZHBfZXh0cmFjdF9wZHUoY29uc3QgdWludDhfdCAqYnVmLCBpbnQg KnNjYW5uZWQpCitzZHBfcmVjb3JkX3QgKnNkcF9leHRyYWN0X3BkdShjb25zdCB1aW50OF90ICpi dWYsIGludCAqc2Nhbm5lZCwgaW50IHBhY2tldF9zaXplKQogewogCWludCBleHRyYWN0ZWQgPSAw LCBzZXFsZW4gPSAwOwogCXVpbnQ4X3QgZHRkOwogCXVpbnQxNl90IGF0dHI7CiAJc2RwX3JlY29y ZF90ICpyZWMgPSBzZHBfcmVjb3JkX2FsbG9jKCk7CiAJY29uc3QgdWludDhfdCAqcCA9IGJ1ZjsK KwlpbnQgYnl0ZXNsZWZ0ID0gcGFja2V0X3NpemU7CiAKLQkqc2Nhbm5lZCA9IHNkcF9leHRyYWN0 X3NlcXR5cGUoYnVmLCAmZHRkLCAmc2VxbGVuKTsKKwkqc2Nhbm5lZCA9IHNkcF9leHRyYWN0X3Nl cXR5cGUoYnVmLCAmZHRkLCAmc2VxbGVuLCBieXRlc2xlZnQpOworCWlmICgqc2Nhbm5lZCA9PSAw KSB7CisJICBTRFBFUlIoIlNlcXVlbmNlIGxlbmd0aCAwIG9mIGluY29taW5nIFNEUCBQRFUiKTsK KwkgIHJldHVybiByZWM7CisJfQkKIAlwICs9ICpzY2FubmVkOworCWJ5dGVzbGVmdCAtPSAqc2Nh bm5lZDsKKwlpZiAoYnl0ZXNsZWZ0IDwgc2VxbGVuKSB7CisJICBTRFBFUlIoIkluc3VmZmljaWVu dCBkYXRhIGluIHBhY2tldCB0byBjb250YWluIHNlcXVlbmNlIik7CisJICByZXR1cm4gcmVjOwor CX0KKwkKIAlyZWMtPmF0dHJsaXN0ID0gTlVMTDsKIAl3aGlsZSAoZXh0cmFjdGVkIDwgc2VxbGVu KSB7CiAJCWludCBuID0gc2l6ZW9mKHVpbnQ4X3QpLCBhdHRybGVuID0gMDsKIAkJc2RwX2RhdGFf dCAqZGF0YSA9IE5VTEw7CiAKKwkJaWYgKGJ5dGVzbGVmdCA8IHNpemVvZih1aW50OF90KStzaXpl b2YodWludDE2X3QpKSB7CisJCSAgU0RQRVJSKCJVbmV4cGVjdGVkIGVuZCBvZiBwYWNrZXQiKTsK KwkJICBicmVhazsKKwkJfQorCQkKIAkJU0RQREJHKCJFeHRyYWN0IFBEVSwgc2VxdWVuY2VMZW5n dGg6ICVkIGxvY2FsRXh0cmFjdGVkTGVuZ3RoOiAlZCIsIHNlcWxlbiwgZXh0cmFjdGVkKTsKIAkJ ZHRkID0gKih1aW50OF90ICopIHA7CiAJCWF0dHIgPSBudG9ocyhidF9nZXRfdW5hbGlnbmVkKCh1 aW50MTZfdCAqKSAocCArIG4pKSk7CkBAIC0xMTQ0LDcgKzEyNTgsOCBAQAogCiAJCVNEUERCRygi RFREIG9mIGF0dHJJZCA6ICVkIEF0dHIgaWQgOiAweCV4IFxuIiwgZHRkLCBhdHRyKTsKIAotCQlk YXRhID0gc2RwX2V4dHJhY3RfYXR0cihwICsgbiwgJmF0dHJsZW4sIHJlYyk7CisJCWJ5dGVzbGVm dCAtPSBzaXplb2YodWludDhfdCkrc2l6ZW9mKHVpbnQxNl90KTsKKwkJZGF0YSA9IHNkcF9leHRy YWN0X2F0dHIocCArIG4sICZhdHRybGVuLCByZWMsIGJ5dGVzbGVmdCk7CiAKIAkJU0RQREJHKCJB dHRyIGlkIDogMHgleCBhdHRyVmFsdWVMZW5ndGggOiAlZFxuIiwgYXR0ciwgYXR0cmxlbik7CiAK QEAgLTExNjIsNiArMTI3Nyw3IEBACiAKIAkJZXh0cmFjdGVkICs9IG47CiAJCXAgKz0gbjsKKyAg ICBieXRlc2xlZnQgLT0gbjsKIAkJc2RwX2F0dHJfcmVwbGFjZShyZWMsIGF0dHIsIGRhdGEpOwog CQlTRFBEQkcoIkV4dHJhY3QgUERVLCBzZXFMZW5ndGg6ICVkIGxvY2FsRXh0cmFjdGVkTGVuZ3Ro OiAlZCIsCiAJCQkJCXNlcWxlbiwgZXh0cmFjdGVkKTsKQEAgLTEyNjYsMjYgKzEzODIsNDMgQEAK ICAqIEV4dHJhY3QgdGhlIHNlcXVlbmNlIHR5cGUgYW5kIGl0cyBsZW5ndGgsIGFuZCByZXR1cm4g b2Zmc2V0IGludG8gYnVmCiAgKiBvciAwIG9uIGZhaWx1cmUuCiAgKi8KLWludCBzZHBfZXh0cmFj dF9zZXF0eXBlKGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDhfdCAqZHRkcCwgaW50ICpzaXplKQor aW50IHNkcF9leHRyYWN0X3NlcXR5cGUoY29uc3QgdWludDhfdCAqYnVmLCB1aW50OF90ICpkdGRw LCBpbnQgKnNpemUsIGludCBieXRlc2xlZnQpCiB7CiAJdWludDhfdCBkdGQgPSAqKHVpbnQ4X3Qg KikgYnVmOwogCWludCBzY2FubmVkID0gc2l6ZW9mKHVpbnQ4X3QpOwogCisJaWYgKGJ5dGVzbGVm dCA8IHNpemVvZih1aW50OF90KSkgeworCSAgU0RQRVJSKCJVbmV4cGVjdGVkIGVuZCBvZiBwYWNr ZXQiKTsKKwkgIHJldHVybiAwOworCX0KIAlidWYgKz0gc2l6ZW9mKHVpbnQ4X3QpOworCWJ5dGVz bGVmdCAtPSBzaXplb2YodWludDhfdCk7CiAJKmR0ZHAgPSBkdGQ7CiAJc3dpdGNoIChkdGQpIHsK IAljYXNlIFNEUF9TRVE4OgogCWNhc2UgU0RQX0FMVDg6CisJICBpZiAoYnl0ZXNsZWZ0IDwgc2l6 ZW9mKHVpbnQ4X3QpKSB7CisJICAgIFNEUEVSUigiVW5leHBlY3RlZCBlbmQgb2YgcGFja2V0Iik7 CisJICAgIHJldHVybiAwOworCSAgfQogCQkqc2l6ZSA9ICoodWludDhfdCAqKSBidWY7CiAJCXNj YW5uZWQgKz0gc2l6ZW9mKHVpbnQ4X3QpOwogCQlicmVhazsKIAljYXNlIFNEUF9TRVExNjoKIAlj YXNlIFNEUF9BTFQxNjoKKyAgICBpZiAoYnl0ZXNsZWZ0IDwgc2l6ZW9mKHVpbnQxNl90KSkgewor ICAgICAgU0RQRVJSKCJVbmV4cGVjdGVkIGVuZCBvZiBwYWNrZXQiKTsKKyAgICAgIHJldHVybiAw OworICAgIH0KIAkJKnNpemUgPSBudG9ocyhidF9nZXRfdW5hbGlnbmVkKCh1aW50MTZfdCAqKSBi dWYpKTsKIAkJc2Nhbm5lZCArPSBzaXplb2YodWludDE2X3QpOwogCQlicmVhazsKIAljYXNlIFNE UF9TRVEzMjoKIAljYXNlIFNEUF9BTFQzMjoKKyAgICBpZiAoYnl0ZXNsZWZ0IDwgc2l6ZW9mKHVp bnQzMl90KSkgeworICAgICAgU0RQRVJSKCJVbmV4cGVjdGVkIGVuZCBvZiBwYWNrZXQiKTsKKyAg ICAgIHJldHVybiAwOworICAgIH0KIAkJKnNpemUgPSBudG9obChidF9nZXRfdW5hbGlnbmVkKCh1 aW50MzJfdCAqKSBidWYpKTsKIAkJc2Nhbm5lZCArPSBzaXplb2YodWludDMyX3QpOwogCQlicmVh azsKQEAgLTIzMjksOSArMjQ2MiwxNiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgc2RwX3V1aWRf ZXh0cmFjdChjb25zdCB1aW50OF90ICpwLCB1dWlkX3QgKnV1aWQsIGludCAqc2Nhbm5lZCkKK2lu dCBzZHBfdXVpZF9leHRyYWN0KGNvbnN0IHVpbnQ4X3QgKnAsIHV1aWRfdCAqdXVpZCwgaW50ICpz Y2FubmVkLCBpbnQgYnl0ZXNsZWZ0KQogewotCXVpbnQ4X3QgdHlwZSA9ICooY29uc3QgdWludDhf dCAqKSBwOworCXVpbnQ4X3QgdHlwZTsKKwkKKwlpZiAoYnl0ZXNsZWZ0IDwgc2l6ZW9mKHVpbnQ4 X3QpKSB7CisJICBTRFBFUlIoIlVuZXhwZWN0ZWQgZW5kIG9mIHBhY2tldCIpOworCSAgcmV0dXJu IC0xOworCX0KKwkKKwl0eXBlID0gKihjb25zdCB1aW50OF90ICopIHA7CiAKIAlpZiAoIVNEUF9J U19VVUlEKHR5cGUpKSB7CiAJCVNEUEVSUigiVW5rbm93biBkYXRhIHR5cGUgOiAlZCBleHBlY3Rp bmcgYSBzdmMgVVVJRFxuIiwgdHlwZSk7CkBAIC0yMzM5LDE3ICsyNDc5LDM0IEBACiAJfQogCXAg Kz0gc2l6ZW9mKHVpbnQ4X3QpOwogCSpzY2FubmVkICs9IHNpemVvZih1aW50OF90KTsKKwlieXRl c2xlZnQgLT0gc2l6ZW9mKHVpbnQ4X3QpOworCQogCWlmICh0eXBlID09IFNEUF9VVUlEMTYpIHsK KwkgIGlmIChieXRlc2xlZnQgPCBzaXplb2YodWludDE2X3QpKSB7CisJICAgIFNEUEVSUigiVW5l eHBlY3RlZCBlbmQgb2YgcGFja2V0Iik7CisJICAgIHJldHVybiAtMTsKKwkgIH0KIAkJc2RwX3V1 aWQxNl9jcmVhdGUodXVpZCwgbnRvaHMoYnRfZ2V0X3VuYWxpZ25lZCgodWludDE2X3QgKikgcCkp KTsKIAkJKnNjYW5uZWQgKz0gc2l6ZW9mKHVpbnQxNl90KTsKKwkJYnl0ZXNsZWZ0IC09IHNpemVv Zih1aW50MTZfdCk7CiAJCXAgKz0gc2l6ZW9mKHVpbnQxNl90KTsKIAl9IGVsc2UgaWYgKHR5cGUg PT0gU0RQX1VVSUQzMikgeworICAgIGlmIChieXRlc2xlZnQgPCBzaXplb2YodWludDMyX3QpKSB7 CisgICAgICBTRFBFUlIoIlVuZXhwZWN0ZWQgZW5kIG9mIHBhY2tldCIpOworICAgICAgcmV0dXJu IC0xOworICAgIH0KIAkJc2RwX3V1aWQzMl9jcmVhdGUodXVpZCwgbnRvaGwoYnRfZ2V0X3VuYWxp Z25lZCgodWludDMyX3QgKikgcCkpKTsKIAkJKnNjYW5uZWQgKz0gc2l6ZW9mKHVpbnQzMl90KTsK KyAgICBieXRlc2xlZnQgLT0gc2l6ZW9mKHVpbnQzMl90KTsKIAkJcCArPSBzaXplb2YodWludDMy X3QpOwogCX0gZWxzZSB7CisgICAgaWYgKGJ5dGVzbGVmdCA8IHNpemVvZih1aW50MTI4X3QpKSB7 CisgICAgICBTRFBFUlIoIlVuZXhwZWN0ZWQgZW5kIG9mIHBhY2tldCIpOworICAgICAgcmV0dXJu IC0xOworICAgIH0KIAkJc2RwX3V1aWQxMjhfY3JlYXRlKHV1aWQsIHApOwogCQkqc2Nhbm5lZCAr PSBzaXplb2YodWludDEyOF90KTsKKwkJYnl0ZXNsZWZ0IC09IHNpemVvZih1aW50MTI4X3QpOwog CQlwICs9IHNpemVvZih1aW50MTI4X3QpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTI0NDcsNiArMjYw NCw3IEBACiAJdWludDMyX3QgcmVxc2l6ZSwgcnNwc2l6ZTsKIAlzZHBfcGR1X2hkcl90ICpyZXFo ZHIsICpyc3BoZHI7CiAJaW50IHN0YXR1czsKKwlpbnQgYnl0ZXNsZWZ0OwogCiAJU0RQREJHKCIi KTsKIApAQCAtMjQ4Myw5ICsyNjQxLDE5IEBACiAJc3RhdHVzID0gc2RwX3NlbmRfcmVxX3c0X3Jz cChzZXNzaW9uLCByZXEsIHJzcCwgcmVxc2l6ZSwgJnJzcHNpemUpOwogCWlmIChzdGF0dXMgPCAw KQogCQlnb3RvIGVuZDsKKwkKKwlieXRlc2xlZnQgPSByc3BzaXplOwogCisJaWYgKGJ5dGVzbGVm dCA8IHNpemVvZihzZHBfcGR1X2hkcl90KSkgeworCSAgU0RQRVJSKCJVbmV4cGVjdGVkIGVuZCBv ZiBwYWNrZXQiKTsKKwkgIGVycm5vID0gRUlOVkFMOworCSAgc3RhdHVzID0gLTE7CisJICBnb3Rv IGVuZDsKKwl9CisJCiAJcnNwaGRyID0gKHNkcF9wZHVfaGRyX3QgKikgcnNwOwogCXAgPSByc3Ag KyBzaXplb2Yoc2RwX3BkdV9oZHJfdCk7CisJYnl0ZXNsZWZ0IC09IHNpemVvZihzZHBfcGR1X2hk cl90KTsKIAogCWlmIChyc3BoZHItPnBkdV9pZCA9PSBTRFBfRVJST1JfUlNQKSB7CiAJCS8qIElu dmFsaWQgc2VydmljZSByZWNvcmQgKi8KQEAgLTI0OTUsNyArMjY2MywxMyBAQAogCQllcnJubyA9 IEVQUk9UTzsKIAkJc3RhdHVzID0gLTE7CiAJfSBlbHNlIHsKLQkJaWYgKGhhbmRsZSkKKwkgIGlm IChieXRlc2xlZnQgPCBzaXplb2YodWludDMyX3QpKSB7CisJICAgIFNEUEVSUigiVW5leHBlY3Rl ZCBlbmQgb2YgcGFja2V0Iik7CisJICAgIGVycm5vID0gRUlOVkFMOworCSAgICBzdGF0dXMgPSAt MTsKKwkgICAgZ290byBlbmQ7CisJICB9CisJICBpZiAoaGFuZGxlKQogCQkJKmhhbmRsZSAgPSBu dG9obChidF9nZXRfdW5hbGlnbmVkKCh1aW50MzJfdCAqKSBwKSk7CiAJfQogCkBAIC0yNTU2LDYg KzI3MzAsNyBAQAogCXVpbnQzMl90IHJlcXNpemUgPSAwLCByc3BzaXplID0gMDsKIAlzZHBfcGR1 X2hkcl90ICpyZXFoZHIsICpyc3BoZHI7CiAJaW50IHN0YXR1czsKKwlpbnQgYnl0ZXNsZWZ0Owog CiAJU0RQREJHKCIiKTsKIApAQCAtMjU5MCw5ICsyNzY1LDE5IEBACiAJaWYgKHN0YXR1cyA8IDAp CiAJCWdvdG8gZW5kOwogCi0JcnNwaGRyID0gKHNkcF9wZHVfaGRyX3QgKikgcnNwYnVmOworCWJ5 dGVzbGVmdCA9IHJzcHNpemU7CisgIGlmIChieXRlc2xlZnQgPCBzaXplb2Yoc2RwX3BkdV9oZHJf dCkrc2l6ZW9mKHVpbnQxNl90KSkgeworICAgIFNEUEVSUigiVW5leHBlY3RlZCBlbmQgb2YgcGFj a2V0Iik7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgc3RhdHVzID0gLTE7CisgICAgZ290byBl bmQ7CisgIH0KKworICByc3BoZHIgPSAoc2RwX3BkdV9oZHJfdCAqKSByc3BidWY7CiAJcCA9IHJz cGJ1ZiArIHNpemVvZihzZHBfcGR1X2hkcl90KTsKKyAgYnl0ZXNsZWZ0IC09IHNpemVvZihzZHBf cGR1X2hkcl90KTsKIAlzdGF0dXMgPSBidF9nZXRfdW5hbGlnbmVkKCh1aW50MTZfdCAqKSBwKTsK KwlieXRlc2xlZnQgLT0gc2l6ZW9mKHVpbnQxNl90KTsKIAogCWlmIChyc3BoZHItPnBkdV9pZCA9 PSBTRFBfRVJST1JfUlNQKSB7CiAJCS8qIEZvciB0aGlzIGNhc2UgdGhlIHN0YXR1cyBhbHdheXMg aXMgaW52YWxpZCByZWNvcmQgaGFuZGxlICovCkBAIC0yNjQ0LDYgKzI4MjksNyBAQAogCXVpbnQz Ml90IGhhbmRsZTsKIAlzZHBfYnVmX3QgcGR1OwogCWludCBzdGF0dXM7CisJaW50IGJ5dGVzbGVm dDsKIAogCVNEUERCRygiIik7CiAKQEAgLTI2ODgsMTIgKzI4NzQsMjMgQEAKIAlzdGF0dXMgPSBz ZHBfc2VuZF9yZXFfdzRfcnNwKHNlc3Npb24sIHJlcWJ1ZiwgcnNwYnVmLCByZXFzaXplLCAmcnNw c2l6ZSk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8gZW5kOworCQorCWJ5dGVzbGVmdCA9IHJz cHNpemU7CiAKIAlTRFBEQkcoIlNlbmQgcmVxIHN0YXR1cyA6ICVkXG4iLCBzdGF0dXMpOwogCi0J cnNwaGRyID0gKHNkcF9wZHVfaGRyX3QgKikgcnNwYnVmOworICBpZiAoYnl0ZXNsZWZ0IDwgc2l6 ZW9mKHNkcF9wZHVfaGRyX3QpK3NpemVvZih1aW50MTZfdCkpIHsKKyAgICBTRFBFUlIoIlVuZXhw ZWN0ZWQgZW5kIG9mIHBhY2tldCIpOworICAgIGVycm5vID0gRUlOVkFMOworICAgIHN0YXR1cyA9 IC0xOworICAgIGdvdG8gZW5kOworICB9CisgIAorICByc3BoZHIgPSAoc2RwX3BkdV9oZHJfdCAq KSByc3BidWY7CiAJcCA9IHJzcGJ1ZiArIHNpemVvZihzZHBfcGR1X2hkcl90KTsKKwlieXRlc2xl ZnQgLT0gc2l6ZW9mKHNkcF9wZHVfaGRyX3QpOwogCXN0YXR1cyA9IGJ0X2dldF91bmFsaWduZWQo KHVpbnQxNl90ICopIHApOworCWJ5dGVzbGVmdCAtPSBzaXplb2YodWludDE2X3QpOwogCiAJaWYg KHJzcGhkci0+cGR1X2lkID09IFNEUF9FUlJPUl9SU1ApIHsKIAkJLyogVGhlIHN0YXR1cyBjYW4g YmUgaW52YWxpZCBzaW50YXggb3IgaW52YWxpZCByZWNvcmQgaGFuZGxlICovCkBAIC0yNzY0LDE4 ICsyOTYxLDIzIEBACiAgKiBoYW5kbGVzIGFyZSBub3QgaW4gImRhdGEgZWxlbWVudCBzZXF1ZW5j ZSIgZm9ybSwgYnV0IGp1c3QgbGlrZQogICogYW4gYXJyYXkgb2Ygc2VydmljZSBoYW5kbGVzCiAg Ki8KLXN0YXRpYyB2b2lkIGV4dHJhY3RfcmVjb3JkX2hhbmRsZV9zZXEodWludDhfdCAqcGR1LCBz ZHBfbGlzdF90ICoqc2VxLCBpbnQgY291bnQsIGludCAqc2Nhbm5lZCkKK3N0YXRpYyB2b2lkIGV4 dHJhY3RfcmVjb3JkX2hhbmRsZV9zZXEodWludDhfdCAqcGR1LCBzZHBfbGlzdF90ICoqc2VxLCBp bnQgY291bnQsIGludCAqc2Nhbm5lZCwgaW50ICpieXRlc2xlZnQpCiB7CiAJc2RwX2xpc3RfdCAq cFNlcSA9ICpzZXE7CiAJdWludDhfdCAqcGRhdGEgPSBwZHU7CiAJaW50IG47CiAKIAlmb3IgKG4g PSAwOyBuIDwgY291bnQ7IG4rKykgeworCSAgaWYgKCpieXRlc2xlZnQgPCBzaXplb2YodWludDMy X3QpKSB7CisJICAgIFNEUEVSUigiVW5leHBlY3RlZCBlbmQgb2YgcGFja2V0Iik7CisJICAgIGJy ZWFrOworCSAgfQogCQl1aW50MzJfdCAqcFN2Y1JlYyA9IG1hbGxvYyhzaXplb2YodWludDMyX3Qp KTsKIAkJKnBTdmNSZWMgPSBudG9obChidF9nZXRfdW5hbGlnbmVkKCh1aW50MzJfdCAqKSBwZGF0 YSkpOwogCQlwU2VxID0gc2RwX2xpc3RfYXBwZW5kKHBTZXEsIHBTdmNSZWMpOwogCQlwZGF0YSAr PSBzaXplb2YodWludDMyX3QpOwogCQkqc2Nhbm5lZCArPSBzaXplb2YodWludDMyX3QpOworCQkq Ynl0ZXNsZWZ0IC09IHNpemVvZih1aW50MzJfdCk7CiAJfQogCSpzZXEgPSBwU2VxOwogfQpAQCAt Mjg0MywxMiArMzA0NSwxNyBAQAogCXVuc2lnbmVkIGNoYXIgZGF0YVsxNl07CiB9IF9fYXR0cmli dXRlX18gKChwYWNrZWQpKSBzZHBfY3N0YXRlX3Q7CiAKLXN0YXRpYyBpbnQgY29weV9jc3RhdGUo dWludDhfdCAqcGRhdGEsIGNvbnN0IHNkcF9jc3RhdGVfdCAqY3N0YXRlKQorc3RhdGljIGludCBj b3B5X2NzdGF0ZSh1aW50OF90ICpwZGF0YSwgaW50IHBkYXRhX2xlbiwgY29uc3Qgc2RwX2NzdGF0 ZV90ICpjc3RhdGUpCiB7CiAJaWYgKGNzdGF0ZSkgewotCQkqcGRhdGErKyA9IGNzdGF0ZS0+bGVu Z3RoOwotCQltZW1jcHkocGRhdGEsIGNzdGF0ZS0+ZGF0YSwgY3N0YXRlLT5sZW5ndGgpOwotCQly ZXR1cm4gY3N0YXRlLT5sZW5ndGggKyAxOworCSAgdWludDhfdCBsZW4gPSBjc3RhdGUtPmxlbmd0 aDsKKwkgIGlmICgoaW50KWxlbiA+IHBkYXRhX2xlbikgeworCSAgICBTRFBFUlIoIkNvbnRpbnVh dGlvbiBzdGF0ZSBzaXplIGV4Y2VlZHMgaW50ZXJuYWwgYnVmZmVyIik7CisJICB9IGVsc2Ugewor ICAJCSpwZGF0YSsrID0gbGVuOworICAJCW1lbWNweShwZGF0YSwgY3N0YXRlLT5kYXRhLCBsZW4p OworICAJCXJldHVybiBsZW4gKyAxOworCSAgfQogCX0KIAkqcGRhdGEgPSAwOwogCXJldHVybiAx OwpAQCAtMjg5Miw5ICszMDk5LDExIEBACiAJaW50IHNlcWxlbiA9IDA7CiAJaW50IHNjYW5uZWQs IHRvdGFsX3JlY19jb3VudCwgcmVjX2NvdW50OwogCXVpbnQ4X3QgKnBkYXRhLCAqX3BkYXRhOwor CWludCBfcGRhdGFfbGVuOwogCXVpbnQ4X3QgKnJlcWJ1ZiwgKnJzcGJ1ZjsKIAlzZHBfcGR1X2hk cl90ICpyZXFoZHIsICpyc3BoZHI7CiAJc2RwX2NzdGF0ZV90ICpjc3RhdGUgPSBOVUxMOworCWlu dCBieXRlc2xlZnQ7CiAKIAlyZXFidWYgPSBtYWxsb2MoU0RQX1JFUV9CVUZGRVJfU0laRSk7CiAJ cnNwYnVmID0gbWFsbG9jKFNEUF9SU1BfQlVGRkVSX1NJWkUpOwpAQCAtMjkyNCwxMSArMzEzMywx MiBAQAogCiAJX3JlcXNpemUgPSByZXFzaXplOwogCV9wZGF0YSAgID0gcGRhdGE7CisJX3BkYXRh X2xlbiA9IFNEUF9SRVFfQlVGRkVSX1NJWkUgLSByZXFzaXplOwogCSpyc3AgPSBOVUxMOwogCiAJ ZG8gewogCQkvLyBBZGQgY29udGludWF0aW9uIHN0YXRlIG9yIE5VTEwgKGZpcnN0IHRpbWUpCi0J CXJlcXNpemUgPSBfcmVxc2l6ZSArIGNvcHlfY3N0YXRlKF9wZGF0YSwgY3N0YXRlKTsKKwkJcmVx c2l6ZSA9IF9yZXFzaXplICsgY29weV9jc3RhdGUoX3BkYXRhLCBfcGRhdGFfbGVuLCBjc3RhdGUp OwogCiAJCS8vIFNldCB0aGUgcmVxdWVzdCBoZWFkZXIncyBwYXJhbSBsZW5ndGgKIAkJcmVxaGRy LT5wbGVuID0gaHRvbnMocmVxc2l6ZSAtIHNpemVvZihzZHBfcGR1X2hkcl90KSk7CkBAIC0yOTQw LDggKzMxNTAsMTYgQEAKIAkJICovCiAJCXN0YXR1cyA9IHNkcF9zZW5kX3JlcV93NF9yc3Aoc2Vz c2lvbiwgcmVxYnVmLCByc3BidWYsIHJlcXNpemUsICZyc3BzaXplKTsKIAkJaWYgKHN0YXR1cyA8 IDApCi0JCQlnb3RvIGVuZDsKLQorCQkgIGdvdG8gZW5kOworCQkKKwkJYnl0ZXNsZWZ0ID0gcnNw c2l6ZTsKKwkJCisJCWlmIChieXRlc2xlZnQgPCBzaXplb2Yoc2RwX3BkdV9oZHJfdCkpIHsKKwkJ ICBTRFBFUlIoIlVuZXhwZWN0ZWQgZW5kIG9mIHBhY2tldCIpOworCQkgIHN0YXR1cyA9IC0xOwor CQkgIGdvdG8gZW5kOworCQl9CisJCQogCQlyc3BsZW4gPSAwOwogCQlyc3BoZHIgPSAoc2RwX3Bk dV9oZHJfdCAqKSByc3BidWY7CiAJCXJzcGxlbiA9IG50b2hzKHJzcGhkci0+cGxlbik7CkBAIC0y OTUzLDE0ICszMTcxLDIyIEBACiAJCX0KIAkJc2Nhbm5lZCA9IDA7CiAJCXBkYXRhID0gcnNwYnVm ICsgc2l6ZW9mKHNkcF9wZHVfaGRyX3QpOwotCisJCWJ5dGVzbGVmdCAtPSBzaXplb2Yoc2RwX3Bk dV9oZHJfdCk7CisgICAgaWYgKGJ5dGVzbGVmdCA8IHNpemVvZih1aW50MTZfdCkrc2l6ZW9mKHVp bnQxNl90KSkgeworICAgICAgU0RQRVJSKCJVbmV4cGVjdGVkIGVuZCBvZiBwYWNrZXQiKTsKKyAg ICAgIHN0YXR1cyA9IC0xOworICAgICAgZ290byBlbmQ7CisgICAgfQorCQkKIAkJLy8gbmV0IHNl cnZpY2UgcmVjb3JkIG1hdGNoIGNvdW50CiAJCXRvdGFsX3JlY19jb3VudCA9IG50b2hzKGJ0X2dl dF91bmFsaWduZWQoKHVpbnQxNl90ICopIHBkYXRhKSk7CiAJCXBkYXRhICs9IHNpemVvZih1aW50 MTZfdCk7CiAJCXNjYW5uZWQgKz0gc2l6ZW9mKHVpbnQxNl90KTsKKwkJYnl0ZXNsZWZ0IC09IHNp emVvZih1aW50MTZfdCk7CiAJCXJlY19jb3VudCA9IG50b2hzKGJ0X2dldF91bmFsaWduZWQoKHVp bnQxNl90ICopIHBkYXRhKSk7CiAJCXBkYXRhICs9IHNpemVvZih1aW50MTZfdCk7CiAJCXNjYW5u ZWQgKz0gc2l6ZW9mKHVpbnQxNl90KTsKKwkJYnl0ZXNsZWZ0IC09IHNpemVvZih1aW50MTZfdCk7 CiAKIAkJU0RQREJHKCJUb3RhbCBzdmMgY291bnQ6ICVkXG4iLCB0b3RhbF9yZWNfY291bnQpOwog CQlTRFBEQkcoIkN1cnJlbnQgc3ZjIGNvdW50OiAlZFxuIiwgcmVjX2NvdW50KTsKQEAgLTI5NzAs MTIgKzMxOTYsMTkgQEAKIAkJCXN0YXR1cyA9IC0xOwogCQkJZ290byBlbmQ7CiAJCX0KLQkJZXh0 cmFjdF9yZWNvcmRfaGFuZGxlX3NlcShwZGF0YSwgcnNwLCByZWNfY291bnQsICZzY2FubmVkKTsK KwkJZXh0cmFjdF9yZWNvcmRfaGFuZGxlX3NlcShwZGF0YSwgcnNwLCByZWNfY291bnQsICZzY2Fu bmVkLCBieXRlc2xlZnQpOwogCQlTRFBEQkcoIkJ5dGVzU2Nhbm5lZCA6ICVkXG4iLCBzY2FubmVk KTsKKwkJYnl0ZXNsZWZ0IC09IHNjYW5uZWQ7CiAKIAkJaWYgKHJzcGxlbiA+IHNjYW5uZWQpIHsK IAkJCXVpbnQ4X3QgY3N0YXRlX2xlbjsKIAorCQkJaWYgKGJ5dGVzbGVmdCA8IHNpemVvZih1aW50 OF90KSkgeworCQkJICBTRFBFUlIoIlVuZXhwZWN0ZWQgZW5kIG9mIHBhY2tldDogY29udGludWF0 aW9uIHN0YXRlIGRhdGEgbWlzc2luZyIpOworCQkJICBzdGF0dXMgPSAtMTsKKwkJCSAgZ290byBl bmQ7CisJCQl9CisJCQkKIAkJCXBkYXRhID0gcnNwYnVmICsgc2l6ZW9mKHNkcF9wZHVfaGRyX3Qp ICsgc2Nhbm5lZDsKIAkJCWNzdGF0ZV9sZW4gPSAqKHVpbnQ4X3QgKikgcGRhdGE7CiAJCQlpZiAo Y3N0YXRlX2xlbiA+IDApIHsKQEAgLTMwMzYsMTIgKzMyNjksMTQgQEAKIAlpbnQgYXR0cl9saXN0 X2xlbiA9IDA7CiAJaW50IHNlcWxlbiA9IDA7CiAJdWludDhfdCAqcGRhdGEsICpfcGRhdGE7CisJ aW50IF9wZGF0YV9sZW47CiAJdWludDhfdCAqcmVxYnVmLCAqcnNwYnVmOwogCXNkcF9wZHVfaGRy X3QgKnJlcWhkciwgKnJzcGhkcjsKIAlzZHBfY3N0YXRlX3QgKmNzdGF0ZSA9IE5VTEw7CiAJdWlu dDhfdCBjc3RhdGVfbGVuID0gMDsKIAlzZHBfYnVmX3QgcnNwX2NvbmNhdF9idWY7CiAJc2RwX3Jl Y29yZF90ICpyZWMgPSAwOworCWludCBieXRlc2xlZnQ7CiAKIAlpZiAocmVxdHlwZSAhPSBTRFBf QVRUUl9SRVFfSU5ESVZJRFVBTCAmJiByZXF0eXBlICE9IFNEUF9BVFRSX1JFUV9SQU5HRSkgewog CQllcnJubyA9IEVJTlZBTDsKQEAgLTMwODcsMTAgKzMzMjIsMTEgQEAKIAkvLyBzYXZlIGJlZm9y ZSBDb250aW51YXRpb24gU3RhdGUKIAlfcGRhdGEgPSBwZGF0YTsKIAlfcmVxc2l6ZSA9IHJlcXNp emU7CisJX3BkYXRhX2xlbiA9IFNEUF9SRVFfQlVGRkVSX1NJWkUgLSByZXFzaXplOwogCiAJZG8g ewogCQkvLyBhZGQgTlVMTCBjb250aW51YXRpb24gc3RhdGUKLQkJcmVxc2l6ZSA9IF9yZXFzaXpl ICsgY29weV9jc3RhdGUoX3BkYXRhLCBjc3RhdGUpOworCQlyZXFzaXplID0gX3JlcXNpemUgKyBj b3B5X2NzdGF0ZShfcGRhdGEsIF9wZGF0YV9sZW4sIGNzdGF0ZSk7CiAKIAkJLy8gc2V0IHRoZSBy ZXF1ZXN0IGhlYWRlcidzIHBhcmFtIGxlbmd0aAogCQlyZXFoZHItPnRpZCAgPSBodG9ucyhzZHBf Z2VuX3RpZChzZXNzaW9uKSk7CkBAIC0zMDk5LDYgKzMzMzUsMTQgQEAKIAkJc3RhdHVzID0gc2Rw X3NlbmRfcmVxX3c0X3JzcChzZXNzaW9uLCByZXFidWYsIHJzcGJ1ZiwgcmVxc2l6ZSwgJnJzcHNp emUpOwogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCWdvdG8gZW5kOworCQlieXRlc2xlZnQgPSByc3Bz aXplOworCQkKKwkJaWYgKGJ5dGVzbGVmdCA8IHNpemVvZihzZHBfcGR1X2hkcl90KSkgeworCQkg IFNEUEVSUigiVW5leHBlY3RlZCBlbmQgb2YgcGFja2V0Iik7CisJCSAgc3RhdHVzID0gLTE7CisJ CSAgZ290byBlbmQ7CisJCX0KKwkJCiAJCXJzcF9jb3VudCA9IDA7CiAJCXJzcGhkciA9IChzZHBf cGR1X2hkcl90ICopIHJzcGJ1ZjsKIAkJaWYgKHJzcGhkci0+cGR1X2lkID09IFNEUF9FUlJPUl9S U1ApIHsKQEAgLTMxMDcsMTIgKzMzNTEsMjUgQEAKIAkJCWdvdG8gZW5kOwogCQl9CiAJCXBkYXRh ID0gcnNwYnVmICsgc2l6ZW9mKHNkcF9wZHVfaGRyX3QpOworCQlieXRlc2xlZnQgLT0gc2l6ZW9m KHNkcF9wZHVfaGRyX3QpOworCQkKKwkJaWYgKGJ5dGVzbGVmdCA8IHNpemVvZih1aW50MTZfdCkp IHsKKwkJICBTRFBFUlIoIlVuZXhwZWN0ZWQgZW5kIG9mIHBhY2tldCIpOworCQkgIHN0YXR1cyA9 IC0xOworCQkgIGdvdG8gZW5kOworCQl9CiAJCXJzcF9jb3VudCA9IG50b2hzKGJ0X2dldF91bmFs aWduZWQoKHVpbnQxNl90ICopIHBkYXRhKSk7CiAJCWF0dHJfbGlzdF9sZW4gKz0gcnNwX2NvdW50 OwogCQlwZGF0YSArPSBzaXplb2YodWludDE2X3QpOworCQlieXRlc2xlZnQgLT0gc2l6ZW9mKHVp bnQxNl90KTsKIAogCQkvLyBpZiBjb250aW51YXRpb24gc3RhdGUgc2V0IG5lZWQgdG8gcmUtaXNz dWUgcmVxdWVzdCBiZWZvcmUgcGFyc2luZwotCQljc3RhdGVfbGVuID0gKih1aW50OF90ICopIChw ZGF0YSArIHJzcF9jb3VudCk7CisgICAgaWYgKGJ5dGVzbGVmdCA8IHJzcF9jb3VudCArIHNpemVv Zih1aW50OF90KSkgeworICAgICAgU0RQRVJSKCJVbmV4cGVjdGVkIGVuZCBvZiBwYWNrZXQ6IGNv bnRpbnVhdGlvbiBzdGF0ZSBkYXRhIG1pc3NpbmciKTsKKyAgICAgIHN0YXR1cyA9IC0xOworICAg ICAgZ290byBlbmQ7CisgICAgfQorICAgIGNzdGF0ZV9sZW4gPSAqKHVpbnQ4X3QgKikgKHBkYXRh ICsgcnNwX2NvdW50KTsKIAogCQlTRFBEQkcoIlJlc3BvbnNlIGlkIDogJWRcbiIsIHJzcGhkci0+ cGR1X2lkKTsKIAkJU0RQREJHKCJBdHRybGlzdCBieXRlIGNvdW50IDogJWRcbiIsIHJzcF9jb3Vu dCk7CkBAIC0zMTM4LDkgKzMzOTUsMTEgQEAKIAogCWlmIChhdHRyX2xpc3RfbGVuID4gMCkgewog CQlpbnQgc2Nhbm5lZCA9IDA7Ci0JCWlmIChyc3BfY29uY2F0X2J1Zi5kYXRhX3NpemUgIT0gMCkK KwkJaWYgKHJzcF9jb25jYXRfYnVmLmRhdGFfc2l6ZSAhPSAwKSB7CiAJCQlwZGF0YSA9IHJzcF9j b25jYXRfYnVmLmRhdGE7Ci0JCXJlYyA9IHNkcF9leHRyYWN0X3BkdShwZGF0YSwgJnNjYW5uZWQp OworCQkJYnl0ZXNsZWZ0ID0gcnNwX2NvbmNhdF9idWYuZGF0YV9zaXplOworCQl9CisJCXJlYyA9 IHNkcF9leHRyYWN0X3BkdShwZGF0YSwgJnNjYW5uZWQsIGJ5dGVzbGVmdCk7CiAKIAkJaWYgKCFy ZWMpCiAJCQlzdGF0dXMgPSAtMTsKQEAgLTMyNjksNiArMzUyOCw3IEBACiAJc2RwX3BkdV9oZHJf dCAqcmVxaGRyOwogCXVpbnQ4X3QgKnBkYXRhOwogCWludCBjc3RhdGVfbGVuLCBzZXFsZW4gPSAw OworCWludCBwZGF0YV9sZW47CiAKIAlpZiAoIXNlc3Npb24gfHwgIXNlc3Npb24tPnByaXYpCiAJ CXJldHVybiAtMTsKQEAgLTMyOTYsNiArMzU1Niw3IEBACiAJLy8gZ2VuZXJhdGUgUERVCiAJcGRh dGEgPSB0LT5yZXFidWYgKyBzaXplb2Yoc2RwX3BkdV9oZHJfdCk7CiAJdC0+cmVxc2l6ZSA9IHNp emVvZihzZHBfcGR1X2hkcl90KTsKKwlwZGF0YV9sZW4gPSBTRFBfUkVRX0JVRkZFUl9TSVpFIC0g dC0+cmVxc2l6ZTsKIAogCS8vIGFkZCBzZXJ2aWNlIGNsYXNzIElEcyBmb3Igc2VhcmNoCiAJc2Vx bGVuID0gZ2VuX3NlYXJjaHNlcV9wZHUocGRhdGEsIHNlYXJjaCk7CkBAIC0zMzA1LDEzICszNTY2 LDE1IEBACiAJLy8gbm93IHNldCB0aGUgbGVuZ3RoIGFuZCBpbmNyZW1lbnQgdGhlIHBvaW50ZXIK IAl0LT5yZXFzaXplICs9IHNlcWxlbjsKIAlwZGF0YSArPSBzZXFsZW47CisJcGRhdGFfbGVuIC09 IHNlcWxlbjsKIAogCWJ0X3B1dF91bmFsaWduZWQoaHRvbnMobWF4X3JlY19udW0pLCAodWludDE2 X3QgKikgcGRhdGEpOwogCXQtPnJlcXNpemUgKz0gc2l6ZW9mKHVpbnQxNl90KTsKIAlwZGF0YSAr PSBzaXplb2YodWludDE2X3QpOworCXBkYXRhX2xlbiAtPSBzaXplb2YodWludDE2X3QpOwogCiAJ Ly8gc2V0IHRoZSByZXF1ZXN0IGhlYWRlcidzIHBhcmFtIGxlbmd0aAotCWNzdGF0ZV9sZW4gPSBj b3B5X2NzdGF0ZShwZGF0YSwgTlVMTCk7CisJY3N0YXRlX2xlbiA9IGNvcHlfY3N0YXRlKHBkYXRh LCBwZGF0YV9sZW4sIE5VTEwpOwogCXJlcWhkci0+cGxlbiA9IGh0b25zKCh0LT5yZXFzaXplICsg Y3N0YXRlX2xlbikgLSBzaXplb2Yoc2RwX3BkdV9oZHJfdCkpOwogCiAJaWYgKHNkcF9zZW5kX3Jl cShzZXNzaW9uLCB0LT5yZXFidWYsIHQtPnJlcXNpemUgKyBjc3RhdGVfbGVuKSA8IDApIHsKQEAg LTMzNzMsNiArMzYzNiw3IEBACiAJc2RwX3BkdV9oZHJfdCAqcmVxaGRyOwogCXVpbnQ4X3QgKnBk YXRhOwogCWludCBjc3RhdGVfbGVuLCBzZXFsZW4gPSAwOworCWludCBwZGF0YV9sZW47CiAKIAlp ZiAoIXNlc3Npb24gfHwgIXNlc3Npb24tPnByaXYpCiAJCXJldHVybiAtMTsKQEAgLTM0MDAsMTYg KzM2NjQsMTkgQEAKIAkvLyBnZW5lcmF0ZSBQRFUKIAlwZGF0YSA9IHQtPnJlcWJ1ZiArIHNpemVv ZihzZHBfcGR1X2hkcl90KTsKIAl0LT5yZXFzaXplID0gc2l6ZW9mKHNkcF9wZHVfaGRyX3QpOwor CXBkYXRhX2xlbiA9IFNEUF9SRVFfQlVGRkVSX1NJWkUgLSB0LT5yZXFzaXplOwogCiAJLy8gYWRk IHRoZSBzZXJ2aWNlIHJlY29yZCBoYW5kbGUKIAlidF9wdXRfdW5hbGlnbmVkKGh0b25sKGhhbmRs ZSksICh1aW50MzJfdCAqKSBwZGF0YSk7CiAJdC0+cmVxc2l6ZSArPSBzaXplb2YodWludDMyX3Qp OwogCXBkYXRhICs9IHNpemVvZih1aW50MzJfdCk7CisJcGRhdGFfbGVuIC09IHNpemVvZih1aW50 MzJfdCk7CiAKIAkvLyBzcGVjaWZ5IHRoZSByZXNwb25zZSBsaW1pdAogCWJ0X3B1dF91bmFsaWdu ZWQoaHRvbnMoNjU1MzUpLCAodWludDE2X3QgKikgcGRhdGEpOwogCXQtPnJlcXNpemUgKz0gc2l6 ZW9mKHVpbnQxNl90KTsKIAlwZGF0YSArPSBzaXplb2YodWludDE2X3QpOworCXBkYXRhX2xlbiAt PSBzaXplb2YodWludDE2X3QpOwogCiAJLy8gZ2V0IGF0dHIgc2VxIFBEVSBmb3JtCiAJc2VxbGVu ID0gZ2VuX2F0dHJpZHNlcV9wZHUocGRhdGEsIGF0dHJpZF9saXN0LApAQCAtMzQyMiwxMCArMzY4 OSwxMSBAQAogCS8vIG5vdyBzZXQgdGhlIGxlbmd0aCBhbmQgaW5jcmVtZW50IHRoZSBwb2ludGVy CiAJdC0+cmVxc2l6ZSArPSBzZXFsZW47CiAJcGRhdGEgKz0gc2VxbGVuOworCXBkYXRhX2xlbiAt PSBzZXFsZW47CiAJU0RQREJHKCJBdHRyIGxpc3QgbGVuZ3RoIDogJWRcbiIsIHNlcWxlbik7CiAK IAkvLyBzZXQgdGhlIHJlcXVlc3QgaGVhZGVyJ3MgcGFyYW0gbGVuZ3RoCi0JY3N0YXRlX2xlbiA9 IGNvcHlfY3N0YXRlKHBkYXRhLCBOVUxMKTsKKwljc3RhdGVfbGVuID0gY29weV9jc3RhdGUocGRh dGEsIHBkYXRhX2xlbiwgTlVMTCk7CiAJcmVxaGRyLT5wbGVuID0gaHRvbnMoKHQtPnJlcXNpemUg KyBjc3RhdGVfbGVuKSAtIHNpemVvZihzZHBfcGR1X2hkcl90KSk7CiAKIAlpZiAoc2RwX3NlbmRf cmVxKHNlc3Npb24sIHQtPnJlcWJ1ZiwgdC0+cmVxc2l6ZSArIGNzdGF0ZV9sZW4pIDwgMCkgewpA QCAtMzQ4OCw2ICszNzU2LDcgQEAKIAlzZHBfcGR1X2hkcl90ICpyZXFoZHI7CiAJdWludDhfdCAq cGRhdGE7CiAJaW50IGNzdGF0ZV9sZW4sIHNlcWxlbiA9IDA7CisJaW50IHBkYXRhX2xlbjsKIAog CWlmICghc2Vzc2lvbiB8fCAhc2Vzc2lvbi0+cHJpdikKIAkJcmV0dXJuIC0xOwpAQCAtMzUxNSw2 ICszNzg0LDcgQEAKIAkvLyBnZW5lcmF0ZSBQRFUKIAlwZGF0YSA9IHQtPnJlcWJ1ZiArIHNpemVv ZihzZHBfcGR1X2hkcl90KTsKIAl0LT5yZXFzaXplID0gc2l6ZW9mKHNkcF9wZHVfaGRyX3QpOwor CXBkYXRhX2xlbiA9IFNEUF9SRVFfQlVGRkVSX1NJWkUgLSB0LT5yZXFzaXplOwogCiAJLy8gYWRk IHNlcnZpY2UgY2xhc3MgSURzIGZvciBzZWFyY2gKIAlzZXFsZW4gPSBnZW5fc2VhcmNoc2VxX3Bk dShwZGF0YSwgc2VhcmNoKTsKQEAgLTM1MjQsMTAgKzM3OTQsMTIgQEAKIAkvLyBub3cgc2V0IHRo ZSBsZW5ndGggYW5kIGluY3JlbWVudCB0aGUgcG9pbnRlcgogCXQtPnJlcXNpemUgKz0gc2VxbGVu OwogCXBkYXRhICs9IHNlcWxlbjsKKwlwZGF0YV9sZW4gLT0gc2VxbGVuOwogCiAJYnRfcHV0X3Vu YWxpZ25lZChodG9ucyhTRFBfTUFYX0FUVFJfTEVOKSwgKHVpbnQxNl90ICopIHBkYXRhKTsKIAl0 LT5yZXFzaXplICs9IHNpemVvZih1aW50MTZfdCk7CiAJcGRhdGEgKz0gc2l6ZW9mKHVpbnQxNl90 KTsKKwlwZGF0YV9sZW4gLT0gc2l6ZW9mKHVpbnQxNl90KTsKIAogCVNEUERCRygiTWF4IGF0dHIg Ynl0ZSBjb3VudCA6ICVkXG4iLCBTRFBfTUFYX0FUVFJfTEVOKTsKIApAQCAtMzU0MCwxMSArMzgx MiwxMiBAQAogCX0KIAogCXBkYXRhICs9IHNlcWxlbjsKKwlwZGF0YV9sZW4gLT0gc2VxbGVuOwog CVNEUERCRygiQXR0ciBsaXN0IGxlbmd0aCA6ICVkXG4iLCBzZXFsZW4pOwogCXQtPnJlcXNpemUg Kz0gc2VxbGVuOwogCiAJLy8gc2V0IHRoZSByZXF1ZXN0IGhlYWRlcidzIHBhcmFtIGxlbmd0aAot CWNzdGF0ZV9sZW4gPSBjb3B5X2NzdGF0ZShwZGF0YSwgTlVMTCk7CisJY3N0YXRlX2xlbiA9IGNv cHlfY3N0YXRlKHBkYXRhLCBwZGF0YV9sZW4sIE5VTEwpOwogCXJlcWhkci0+cGxlbiA9IGh0b25z KCh0LT5yZXFzaXplICsgY3N0YXRlX2xlbikgLSBzaXplb2Yoc2RwX3BkdV9oZHJfdCkpOwogCiAJ aWYgKHNkcF9zZW5kX3JlcShzZXNzaW9uLCB0LT5yZXFidWYsIHQtPnJlcXNpemUgKyBjc3RhdGVf bGVuKSA8IDApIHsKQEAgLTM3NTcsNyArNDAzMCw3IEBACiAJCXJlcWhkci0+dGlkID0gaHRvbnMo c2RwX2dlbl90aWQoc2Vzc2lvbikpOwogCiAJCS8vIGFkZCBjb250aW51YXRpb24gc3RhdGUKLQkJ Y3N0YXRlX2xlbiA9IGNvcHlfY3N0YXRlKHQtPnJlcWJ1ZiArIHQtPnJlcXNpemUsIHBjc3RhdGUp OworCQljc3RhdGVfbGVuID0gY29weV9jc3RhdGUodC0+cmVxYnVmICsgdC0+cmVxc2l6ZSwgU0RQ X1JFUV9CVUZGRVJfU0laRSAtIHQtPnJlcXNpemUsIHBjc3RhdGUpOwogCiAJCXJlcXNpemUgPSB0 LT5yZXFzaXplICsgY3N0YXRlX2xlbjsKIApAQCAtMzgzOCwxMiArNDExMSwxNCBAQAogCWludCBz ZXFsZW4gPSAwLCBhdHRyX2xpc3RfbGVuID0gMDsKIAlpbnQgcnNwX2NvdW50ID0gMCwgY3N0YXRl X2xlbiA9IDA7CiAJdWludDhfdCAqcGRhdGEsICpfcGRhdGE7CisJaW50IF9wZGF0YV9sZW47CiAJ dWludDhfdCAqcmVxYnVmLCAqcnNwYnVmOwogCXNkcF9wZHVfaGRyX3QgKnJlcWhkciwgKnJzcGhk cjsKIAl1aW50OF90IGRhdGFUeXBlOwogCXNkcF9saXN0X3QgKnJlY19saXN0ID0gTlVMTDsKIAlz ZHBfYnVmX3QgcnNwX2NvbmNhdF9idWY7CiAJc2RwX2NzdGF0ZV90ICpjc3RhdGUgPSBOVUxMOwor CWludCBieXRlc2xlZnQ7CiAKIAlpZiAocmVxdHlwZSAhPSBTRFBfQVRUUl9SRVFfSU5ESVZJRFVB TCAmJiByZXF0eXBlICE9IFNEUF9BVFRSX1JFUV9SQU5HRSkgewogCQllcnJubyA9IEVJTlZBTDsK QEAgLTM4OTUsMTIgKzQxNzAsMTMgQEAKIAkvLyBzYXZlIGJlZm9yZSBDb250aW51YXRpb24gU3Rh dGUKIAlfcGRhdGEgPSBwZGF0YTsKIAlfcmVxc2l6ZSA9IHJlcXNpemU7CisJX3BkYXRhX2xlbiA9 IFNEUF9SRVFfQlVGRkVSX1NJWkUgLSByZXFzaXplOwogCiAJZG8gewogCQlyZXFoZHItPnRpZCA9 IGh0b25zKHNkcF9nZW5fdGlkKHNlc3Npb24pKTsKIAogCQkvLyBhZGQgY29udGludWF0aW9uIHN0 YXRlIChjYW4gYmUgbnVsbCkKLQkJcmVxc2l6ZSA9IF9yZXFzaXplICsgY29weV9jc3RhdGUoX3Bk YXRhLCBjc3RhdGUpOworCQlyZXFzaXplID0gX3JlcXNpemUgKyBjb3B5X2NzdGF0ZShfcGRhdGEs IF9wZGF0YV9sZW4sIGNzdGF0ZSk7CiAKIAkJLy8gc2V0IHRoZSByZXF1ZXN0IGhlYWRlcidzIHBh cmFtIGxlbmd0aAogCQlyZXFoZHItPnBsZW4gPSBodG9ucyhyZXFzaXplIC0gc2l6ZW9mKHNkcF9w ZHVfaGRyX3QpKTsKQEAgLTM5MTAsNiArNDE4NiwxMyBAQAogCQkJU0RQREJHKCJTdGF0dXMgOiAw eCV4XG4iLCByc3BoZHItPnBkdV9pZCk7CiAJCQlnb3RvIGVuZDsKIAkJfQorCQkKKwkJYnl0ZXNs ZWZ0ID0gcnNwc2l6ZTsKKwkJaWYgKGJ5dGVzbGVmdCA8IHNpemVvZihzZHBfcGR1X2hkcl90KSkg eworCQkgIFNEUEVSUigiVW5leHBlY3RlZCBlbmQgb2YgcGFja2V0Iik7CisJCSAgc3RhdHVzID0g LTE7IAorCQkgIGdvdG8gZW5kOworCQl9CiAJICAKIAkJaWYgKHJzcGhkci0+cGR1X2lkID09IFNE UF9FUlJPUl9SU1ApIHsKIAkJCXN0YXR1cyA9IC0xOwpAQCAtMzkxNyw5ICs0MjAwLDI1IEBACiAJ CX0KIAkgIAogCQlwZGF0YSA9IHJzcGJ1ZiArIHNpemVvZihzZHBfcGR1X2hkcl90KTsKKwkJYnl0 ZXNsZWZ0IC09IHNpemVvZihzZHBfcGR1X2hkcl90KTsKKwkJCisJCWlmIChieXRlc2xlZnQgPCBz aXplb2YodWludDE2X3QpKSB7CisgICAgICBTRFBFUlIoIlVuZXhwZWN0ZWQgZW5kIG9mIHBhY2tl dCIpOworICAgICAgc3RhdHVzID0gLTE7IAorICAgICAgZ290byBlbmQ7CisgICAgfQorCQkKIAkJ cnNwX2NvdW50ID0gbnRvaHMoYnRfZ2V0X3VuYWxpZ25lZCgodWludDE2X3QgKikgcGRhdGEpKTsK IAkJYXR0cl9saXN0X2xlbiArPSByc3BfY291bnQ7CiAJCXBkYXRhICs9IHNpemVvZih1aW50MTZf dCk7CS8vIHBkYXRhIHBvaW50cyB0byBhdHRyaWJ1dGUgbGlzdAorCQlieXRlc2xlZnQgLT0gc2l6 ZW9mKHVpbnQxNl90KTsKKwkJCisgICAgaWYgKGJ5dGVzbGVmdCA8IHJzcF9jb3VudCkgeworICAg ICAgU0RQRVJSKCJVbmV4cGVjdGVkIGVuZCBvZiBwYWNrZXQ6IGNvbnRpbnVhdGlvbiBzdGF0ZSBk YXRhIG1pc3NpbmciKTsKKyAgICAgIHN0YXR1cyA9IC0xOyAKKyAgICAgIGdvdG8gZW5kOworICAg IH0KKyAgICAKIAkJY3N0YXRlX2xlbiA9ICoodWludDhfdCAqKSAocGRhdGEgKyByc3BfY291bnQp OwogCiAJCVNEUERCRygiQXR0cmxpc3QgYnl0ZSBjb3VudCA6ICVkXG4iLCBhdHRyX2xpc3RfbGVu KTsKQEAgLTM5NDYsMjQgKzQyNDUsMjcgQEAKIAlpZiAoYXR0cl9saXN0X2xlbiA+IDApIHsKIAkJ aW50IHNjYW5uZWQgPSAwOwogCi0JCWlmIChyc3BfY29uY2F0X2J1Zi5kYXRhX3NpemUgIT0gMCkK KwkJaWYgKHJzcF9jb25jYXRfYnVmLmRhdGFfc2l6ZSAhPSAwKSB7CiAJCQlwZGF0YSA9IHJzcF9j b25jYXRfYnVmLmRhdGE7CisJCQlieXRlc2xlZnQgPSByc3BfY29uY2F0X2J1Zi5kYXRhX3NpemU7 CisJCX0KIAogCQkvKgogCQkgKiBSZXNwb25zZSBpcyBhIHNlcXVlbmNlIG9mIHNlcXVlbmNlKHMp IGZvciBvbmUgb3IKIAkJICogbW9yZSBkYXRhIGVsZW1lbnQgc2VxdWVuY2UocykgcmVwcmVzZW50 aW5nIHNlcnZpY2VzCiAJCSAqIGZvciB3aGljaCBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZAogCQkg Ki8KLQkJc2Nhbm5lZCA9IHNkcF9leHRyYWN0X3NlcXR5cGUocGRhdGEsICZkYXRhVHlwZSwgJnNl cWxlbik7CisJCXNjYW5uZWQgPSBzZHBfZXh0cmFjdF9zZXF0eXBlKHBkYXRhLCAmZGF0YVR5cGUs ICZzZXFsZW4sIGJ5dGVzbGVmdCk7CiAKIAkJU0RQREJHKCJCeXRlcyBzY2FubmVkIDogJWRcbiIs IHNjYW5uZWQpOwogCQlTRFBEQkcoIlNlcSBsZW5ndGggOiAlZFxuIiwgc2VxbGVuKTsKIAogCQlp ZiAoc2Nhbm5lZCAmJiBzZXFsZW4pIHsKIAkJCXBkYXRhICs9IHNjYW5uZWQ7CisJCQlieXRlc2xl ZnQgLT0gc2Nhbm5lZDsKIAkJCWRvIHsKIAkJCQlpbnQgcmVjc2l6ZSA9IDA7Ci0JCQkJc2RwX3Jl Y29yZF90ICpyZWMgPSBzZHBfZXh0cmFjdF9wZHUocGRhdGEsICZyZWNzaXplKTsKKwkJCQlzZHBf cmVjb3JkX3QgKnJlYyA9IHNkcF9leHRyYWN0X3BkdShwZGF0YSwgJnJlY3NpemUsIGJ5dGVzbGVm dCk7CiAJCQkJaWYgKHJlYyA9PSBOVUxMKSB7CiAJCQkJCVNEUEVSUigiU1ZDIFJFQyBpcyBudWxs XG4iKTsKIAkJCQkJc3RhdHVzID0gLTE7CkBAIC0zOTc1LDYgKzQyNzcsNyBAQAogCQkJCX0KIAkJ CQlzY2FubmVkICs9IHJlY3NpemU7CiAJCQkJcGRhdGEgKz0gcmVjc2l6ZTsKKwkJCQlieXRlc2xl ZnQgLT0gcmVjc2l6ZTsKIAogCQkJCVNEUERCRygiTG9jIHNlcSBsZW5ndGggOiAlZFxuIiwgcmVj c2l6ZSk7CiAJCQkJU0RQREJHKCJTdmMgUmVjIEhhbmRsZSA6IDB4JXhcbiIsIHJlYy0+aGFuZGxl KTsKZGlmZiAtdXIgYmx1ZXRvb3RoLm9yaWcvYmx1ZXotdXRpbHMtMy4zMC9hdWRpby9oZWFkc2V0 LmMgYmx1ZXRvb3RoL2JsdWV6LXV0aWxzLTMuMzAvYXVkaW8vaGVhZHNldC5jCi0tLSBibHVldG9v dGgub3JpZy9ibHVlei11dGlscy0zLjMwL2F1ZGlvL2hlYWRzZXQuYwkyMDA4LTA2LTEzIDEzOjM2 OjE0LjIwMTI4NDAwMCAtMDcwMAorKysgYmx1ZXRvb3RoL2JsdWV6LXV0aWxzLTMuMzAvYXVkaW8v aGVhZHNldC5jCTIwMDgtMDYtMTMgMTI6Mzc6MTUuOTU3MTU4MDAwIC0wNzAwCkBAIC04NDgsNyAr ODQ4LDcgQEAKIAkJZ290byBmYWlsZWRfbm90X3N1cHBvcnRlZDsKIAl9CiAKLQlyZWNvcmQgPSBz ZHBfZXh0cmFjdF9wZHUoYXJyYXksICZyZWNvcmRfbGVuKTsKKwlyZWNvcmQgPSBzZHBfZXh0cmFj dF9wZHUoYXJyYXksICZyZWNvcmRfbGVuLCBhcnJheV9sZW4pOwogCWlmICghcmVjb3JkKSB7CiAJ CWVycm9yKCJVbmFibGUgdG8gZXh0cmFjdCBzZXJ2aWNlIHJlY29yZCBmcm9tIHJlcGx5Iik7CiAJ CWdvdG8gZmFpbGVkX25vdF9zdXBwb3J0ZWQ7CmRpZmYgLXVyIGJsdWV0b290aC5vcmlnL2JsdWV6 LXV0aWxzLTMuMzAvYXVkaW8vbWFuYWdlci5jIGJsdWV0b290aC9ibHVlei11dGlscy0zLjMwL2F1 ZGlvL21hbmFnZXIuYwotLS0gYmx1ZXRvb3RoLm9yaWcvYmx1ZXotdXRpbHMtMy4zMC9hdWRpby9t YW5hZ2VyLmMJMjAwOC0wNi0xMyAxMzozNjoxNC4yMDQyODEwMDAgLTA3MDAKKysrIGJsdWV0b290 aC9ibHVlei11dGlscy0zLjMwL2F1ZGlvL21hbmFnZXIuYwkyMDA4LTA2LTEzIDEyOjM3OjQ0Ljc1 NzE1MzAwMCAtMDcwMApAQCAtNDE5LDcgKzQxOSw3IEBACiAJCWdvdG8gZmFpbGVkOwogCX0KIAot CXJlY29yZCA9IHNkcF9leHRyYWN0X3BkdShhcnJheSwgJnJlY29yZF9sZW4pOworCXJlY29yZCA9 IHNkcF9leHRyYWN0X3BkdShhcnJheSwgJnJlY29yZF9sZW4sIGFycmF5X2xlbik7CiAJaWYgKCFy ZWNvcmQpIHsKIAkJZXJyb3IoIlVuYWJsZSB0byBleHRyYWN0IHNlcnZpY2UgcmVjb3JkIGZyb20g cmVwbHkiKTsKIAkJZ290byBkb25lOwpkaWZmIC11ciBibHVldG9vdGgub3JpZy9ibHVlei11dGls cy0zLjMwL2NvbW1vbi9nbGliLWhlbHBlci5jIGJsdWV0b290aC9ibHVlei11dGlscy0zLjMwL2Nv bW1vbi9nbGliLWhlbHBlci5jCi0tLSBibHVldG9vdGgub3JpZy9ibHVlei11dGlscy0zLjMwL2Nv bW1vbi9nbGliLWhlbHBlci5jCTIwMDgtMDYtMTMgMTM6MzY6MTQuMzAwMzEwMDAwIC0wNzAwCisr KyBibHVldG9vdGgvYmx1ZXotdXRpbHMtMy4zMC9jb21tb24vZ2xpYi1oZWxwZXIuYwkyMDA4LTA2 LTEzIDEyOjI1OjA4LjY4Mzg2NDAwMCAtMDcwMApAQCAtNjIsMjMgKzYyLDI1IEBACiAJaW50IHNj YW5uZWQsIHNlcWxlbiA9IDA7CiAJdWludDhfdCBkYXRhVHlwZTsKIAlpbnQgZXJyID0gMDsKKwlp bnQgYnl0ZXNsZWZ0ID0gc2l6ZTsKIAogCWlmIChzdGF0dXMgfHwgdHlwZSAhPSBTRFBfU1ZDX1NF QVJDSF9BVFRSX1JTUCkgewogCQllcnIgPSAtRVBST1RPOwogCQlnb3RvIGRvbmU7CiAJfQogCi0J c2Nhbm5lZCA9IHNkcF9leHRyYWN0X3NlcXR5cGUocnNwLCAmZGF0YVR5cGUsICZzZXFsZW4pOwor CXNjYW5uZWQgPSBzZHBfZXh0cmFjdF9zZXF0eXBlKHJzcCwgJmRhdGFUeXBlLCAmc2VxbGVuLCBi eXRlc2xlZnQpOwogCWlmICghc2Nhbm5lZCB8fCAhc2VxbGVuKQogCQlnb3RvIGRvbmU7CiAKIAly c3AgKz0gc2Nhbm5lZDsKKwlieXRlc2xlZnQgLT0gc2Nhbm5lZDsKIAlkbyB7CiAJCXNkcF9yZWNv cmRfdCAqcmVjOwogCQlpbnQgcmVjc2l6ZTsKIAogCQlyZWNzaXplID0gMDsKLQkJcmVjID0gc2Rw X2V4dHJhY3RfcGR1KHJzcCwgJnJlY3NpemUpOworCQlyZWMgPSBzZHBfZXh0cmFjdF9wZHUocnNw LCAmcmVjc2l6ZSwgYnl0ZXNsZWZ0KTsKIAkJaWYgKCFyZWMpCiAJCQlicmVhazsKIApAQCAtODks NiArOTEsNyBAQAogCiAJCXNjYW5uZWQgKz0gcmVjc2l6ZTsKIAkJcnNwICs9IHJlY3NpemU7CisJ CWJ5dGVzbGVmdCAtPSByZWNzaXplOwogCiAJCXJlY3MgPSBzZHBfbGlzdF9hcHBlbmQocmVjcywg cmVjKTsKIAl9IHdoaWxlIChzY2FubmVkIDwgc2l6ZSk7CmRpZmYgLXVyIGJsdWV0b290aC5vcmln L2JsdWV6LXV0aWxzLTMuMzAvaGNpZC9kYnVzLWRhdGFiYXNlLmMgYmx1ZXRvb3RoL2JsdWV6LXV0 aWxzLTMuMzAvaGNpZC9kYnVzLWRhdGFiYXNlLmMKLS0tIGJsdWV0b290aC5vcmlnL2JsdWV6LXV0 aWxzLTMuMzAvaGNpZC9kYnVzLWRhdGFiYXNlLmMJMjAwOC0wNi0xMyAxMzozNjoxNC43MDgxNDgw MDAgLTA3MDAKKysrIGJsdWV0b290aC9ibHVlei11dGlscy0zLjMwL2hjaWQvZGJ1cy1kYXRhYmFz ZS5jCTIwMDgtMDYtMTMgMTI6Mjc6NTcuOTM1NzE1MDAwIC0wNzAwCkBAIC0xMDcsNyArMTA3LDcg QEAKIAlpZiAobGVuIDw9IDApCiAJCXJldHVybiBlcnJvcl9pbnZhbGlkX2FyZ3VtZW50cyhjb25u LCBtc2csIE5VTEwpOwogCi0Jc2RwX3JlY29yZCA9IHNkcF9leHRyYWN0X3BkdShyZWNvcmQsICZz Y2FubmVkKTsKKwlzZHBfcmVjb3JkID0gc2RwX2V4dHJhY3RfcGR1KHJlY29yZCwgJnNjYW5uZWQs IGxlbik7CiAJaWYgKCFzZHBfcmVjb3JkKSB7CiAJCWVycm9yKCJQYXJzaW5nIG9mIHNlcnZpY2Ug cmVjb3JkIGZhaWxlZCIpOwogCQlyZXR1cm4gZXJyb3JfZmFpbGVkX2Vycm5vKGNvbm4sIG1zZywg RUlPKTsKQEAgLTI1Myw3ICsyNTMsNyBAQAogCWlmICghdXNlcl9yZWNvcmQpCiAJCXJldHVybiBl cnJvcl9ub3RfYXZhaWxhYmxlKGNvbm4sIG1zZyk7CiAKLQlzZHBfcmVjb3JkID0gc2RwX2V4dHJh Y3RfcGR1KGJpbl9yZWNvcmQsICZzY2FubmVkKTsKKwlzZHBfcmVjb3JkID0gc2RwX2V4dHJhY3Rf cGR1KGJpbl9yZWNvcmQsICZzY2FubmVkLCBzaXplKTsKIAlpZiAoIXNkcF9yZWNvcmQpIHsKIAkJ ZXJyb3IoIlBhcnNpbmcgb2Ygc2VydmljZSByZWNvcmQgZmFpbGVkIik7CiAJCXJldHVybiBlcnJv cl9pbnZhbGlkX2FyZ3VtZW50cyhjb25uLCBtc2csIE5VTEwpOwpkaWZmIC11ciBibHVldG9vdGgu b3JpZy9ibHVlei11dGlscy0zLjMwL2hjaWQvZGJ1cy1zZHAuYyBibHVldG9vdGgvYmx1ZXotdXRp bHMtMy4zMC9oY2lkL2RidXMtc2RwLmMKLS0tIGJsdWV0b290aC5vcmlnL2JsdWV6LXV0aWxzLTMu MzAvaGNpZC9kYnVzLXNkcC5jCTIwMDgtMDYtMTMgMTM6MzY6MTQuNzExMTQ0MDAwIC0wNzAwCisr KyBibHVldG9vdGgvYmx1ZXotdXRpbHMtMy4zMC9oY2lkL2RidXMtc2RwLmMJMjAwOC0wNi0xMyAx MzoyNToxNC44MzA4MDYwMDAgLTA3MDAKQEAgLTQ5NCw3ICs0OTQsNyBAQAogCWRidXNfbWVzc2Fn ZV9pdGVyX29wZW5fY29udGFpbmVyKCZpdGVyLCBEQlVTX1RZUEVfQVJSQVksCiAJCQlEQlVTX1RZ UEVfQllURV9BU19TVFJJTkcsICZhcnJheV9pdGVyKTsKIAotCXJlYyA9IHNkcF9leHRyYWN0X3Bk dShyc3AsICZzY2FubmVkKTsKKwlyZWMgPSBzZHBfZXh0cmFjdF9wZHUocnNwLCAmc2Nhbm5lZCwg c2l6ZSk7CiAJaWYgKHJlYyA9PSBOVUxMIHx8IHNpemUgIT0gc2Nhbm5lZCkgewogCQllcnJvcigi SW52YWxpZCBzZXJ2aWNlIHJlY29yZCEiKTsKIAkJZ290byBkb25lOwpAQCAtNTYzLDcgKzU2Myw3 IEBACiAKIAlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihjdHh0LT5ycSk7 CiAKLQlyZWMgPSBzZHBfZXh0cmFjdF9wZHUocnNwLCAmc2Nhbm5lZCk7CisJcmVjID0gc2RwX2V4 dHJhY3RfcGR1KHJzcCwgJnNjYW5uZWQsIHNpemUpOwogCWlmIChyZWMgPT0gTlVMTCB8fCBzaXpl ICE9IHNjYW5uZWQpIHsKIAkJZXJyb3IoIkludmFsaWQgc2VydmljZSByZWNvcmQhIik7CiAJCWdv dG8gZG9uZTsKQEAgLTczMSw2ICs3MzEsNyBAQAogCUdTTGlzdCAqbCA9IE5VTEw7CiAJaW50IHNj YW5uZWQsIGV4dHJhY3RlZCA9IDAsIGxlbiA9IDAsIHJlY3NpemUgPSAwOwogCXVpbnQ4X3QgZHRk ID0gMDsKKwlpbnQgYnl0ZXNsZWZ0ID0gKGludClzaXplOwogCiAJaWYgKCFjdHh0KQogCQlyZXR1 cm47CkBAIC03NjYsMTYgKzc2NywxOCBAQAogCQkJREJVU19UWVBFX1NUUklORywgJmRzdCwKIAkJ CURCVVNfVFlQRV9JTlZBTElEKTsKIAotCXNjYW5uZWQgPSBzZHBfZXh0cmFjdF9zZXF0eXBlKHJz cCwgJmR0ZCwgJmxlbik7CisJc2Nhbm5lZCA9IHNkcF9leHRyYWN0X3NlcXR5cGUocnNwLCAmZHRk LCAmbGVuLCBieXRlc2xlZnQpOwogCXJzcCArPSBzY2FubmVkOworCWJ5dGVzbGVmdCAtPSBzY2Fu bmVkOwogCWZvciAoOyBleHRyYWN0ZWQgPCBsZW47IHJzcCArPSByZWNzaXplLCBleHRyYWN0ZWQg Kz0gcmVjc2l6ZSkgewogCQlzZHBfcmVjb3JkX3QgKnJlYzsKIAkJc2RwX2RhdGFfdCAqZDsKIAog CQlyZWNzaXplID0gMDsKLQkJcmVjID0gc2RwX2V4dHJhY3RfcGR1KHJzcCwgJnJlY3NpemUpOwor CQlyZWMgPSBzZHBfZXh0cmFjdF9wZHUocnNwLCAmcmVjc2l6ZSwgYnl0ZXNsZWZ0KTsKIAkJaWYg KCFyZWMpCiAJCQlicmVhazsKKyAgICBieXRlc2xlZnQgLT0gcmVjc2l6ZTsKIAogCQlzZHBfc3Rv cmVfcmVjb3JkKHNyYywgZHN0LCByZWMtPmhhbmRsZSwgcnNwLCByZWNzaXplKTsKIApkaWZmIC11 ciBibHVldG9vdGgub3JpZy9ibHVlei11dGlscy0zLjMwL2lucHV0L21hbmFnZXIuYyBibHVldG9v dGgvYmx1ZXotdXRpbHMtMy4zMC9pbnB1dC9tYW5hZ2VyLmMKLS0tIGJsdWV0b290aC5vcmlnL2Js dWV6LXV0aWxzLTMuMzAvaW5wdXQvbWFuYWdlci5jCTIwMDgtMDYtMTMgMTM6MzY6MTUuNDAwMTU2 MDAwIC0wNzAwCisrKyBibHVldG9vdGgvYmx1ZXotdXRpbHMtMy4zMC9pbnB1dC9tYW5hZ2VyLmMJ MjAwOC0wNi0xMyAxMjozOTozNy4xMDk4MDcwMDAgLTA3MDAKQEAgLTUzNiw3ICs1MzYsNyBAQAog CQlnb3RvIGZhaWw7CiAJfQogCi0JcHItPmhpZF9yZWMgPSBzZHBfZXh0cmFjdF9wZHUocmVjX2Jp biwgJnNjYW5uZWQpOworCXByLT5oaWRfcmVjID0gc2RwX2V4dHJhY3RfcGR1KHJlY19iaW4sICZz Y2FubmVkLCBsZW4pOwogCWlmICghcHItPmhpZF9yZWMpIHsKIAkJZXJyb3Jfbm90X3N1cHBvcnRl ZChwci0+Y29ubiwgcHItPm1zZyk7CiAJCWdvdG8gZmFpbDsKQEAgLTY3Myw3ICs2NzMsNyBAQAog CQlnb3RvIGZhaWw7CiAJfQogCi0JcHItPnBucF9yZWMgPSBzZHBfZXh0cmFjdF9wZHUocmVjX2Jp biwgJnNjYW5uZWQpOworCXByLT5wbnBfcmVjID0gc2RwX2V4dHJhY3RfcGR1KHJlY19iaW4sICZz Y2FubmVkLCBsZW4pOwogCWlmIChnZXRfaGFuZGxlcyhwciwgaGlkX3V1aWQsIGhpZF9oYW5kbGVf cmVwbHkpIDwgMCkgewogCQllcnJvcl9ub3Rfc3VwcG9ydGVkKHByLT5jb25uLCBwci0+bXNnKTsK IAkJZXJyb3IoIkhJRCBzZXJ2aWNlIHNlYXJjaCByZXF1ZXN0IGZhaWxlZCIpOwpAQCAtNzkzLDcg Kzc5Myw3IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlyZWMgPSBzZHBfZXh0cmFjdF9wZHUocmVj X2JpbiwgJnNjYW5uZWQpOworCXJlYyA9IHNkcF9leHRyYWN0X3BkdShyZWNfYmluLCAmc2Nhbm5l ZCwgbGVuKTsKIAlpZiAoIXJlYykgewogCQllcnJvcl9ub3Rfc3VwcG9ydGVkKHByLT5jb25uLCBw ci0+bXNnKTsKIAkJZ290byBmYWlsOwpkaWZmIC11ciBibHVldG9vdGgub3JpZy9ibHVlei11dGls cy0zLjMwL25ldHdvcmsvbWFuYWdlci5jIGJsdWV0b290aC9ibHVlei11dGlscy0zLjMwL25ldHdv cmsvbWFuYWdlci5jCi0tLSBibHVldG9vdGgub3JpZy9ibHVlei11dGlscy0zLjMwL25ldHdvcmsv bWFuYWdlci5jCTIwMDgtMDYtMTMgMTM6MzY6MTUuNTAzMTQwMDAwIC0wNzAwCisrKyBibHVldG9v dGgvYmx1ZXotdXRpbHMtMy4zMC9uZXR3b3JrL21hbmFnZXIuYwkyMDA4LTA2LTEzIDEyOjQwOjEz LjI4Nzg3MTAwMCAtMDcwMApAQCAtMjUzLDcgKzI1Myw3IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAK LQlyZWMgPSBzZHBfZXh0cmFjdF9wZHUocmVjX2JpbiwgJnNjYW5uZWQpOworCXJlYyA9IHNkcF9l eHRyYWN0X3BkdShyZWNfYmluLCAmc2Nhbm5lZCwgbGVuKTsKIAogCS8qIENvbmNhdCByZW1vdGUg bmFtZSBhbmQgc2VydmljZSBuYW1lICovCiAJbWVtc2V0KG5hbWUsIDAsIE1BWF9OQU1FX1NJWkUp OwpkaWZmIC11ciBibHVldG9vdGgub3JpZy9ibHVlei11dGlscy0zLjMwL3NkcGQvcmVxdWVzdC5j IGJsdWV0b290aC9ibHVlei11dGlscy0zLjMwL3NkcGQvcmVxdWVzdC5jCi0tLSBibHVldG9vdGgu b3JpZy9ibHVlei11dGlscy0zLjMwL3NkcGQvcmVxdWVzdC5jCTIwMDgtMDYtMTMgMTM6MzY6MTUu NzIwMDAwMDAwIC0wNzAwCisrKyBibHVldG9vdGgvYmx1ZXotdXRpbHMtMy4zMC9zZHBkL3JlcXVl c3QuYwkyMDA4LTA2LTEzIDEzOjMwOjUzLjU0Mzc2NDAwMCAtMDcwMApAQCAtNjcsOCArNjcsOSBA QAogCXVpbnQ4X3QgZGF0YVR5cGU7CiAJaW50IHN0YXR1cyA9IDA7CiAJY29uc3QgdWludDhfdCAq cDsKKwlpbnQgYnl0ZXNsZWZ0ID0gbGVuOwogCi0Jc2Nhbm5lZCA9IHNkcF9leHRyYWN0X3NlcXR5 cGUoYnVmLCAmc2VxVHlwZSwgJmRhdGFfc2l6ZSk7CisJc2Nhbm5lZCA9IHNkcF9leHRyYWN0X3Nl cXR5cGUoYnVmLCAmc2VxVHlwZSwgJmRhdGFfc2l6ZSwgYnl0ZXNsZWZ0KTsKIAogCWRlYnVnKCJT ZXEgdHlwZSA6ICVkIiwgc2VxVHlwZSk7CiAJaWYgKCFzY2FubmVkIHx8IChzZXFUeXBlICE9IFNE UF9TRVE4ICYmIHNlcVR5cGUgIT0gU0RQX1NFUTE2KSkgewpAQCAtNzYsMTIgKzc3LDE4IEBACiAJ CXJldHVybiAtMTsKIAl9CiAJcCA9IGJ1ZiArIHNjYW5uZWQ7CisJYnl0ZXNsZWZ0IC09IHNjYW5u ZWQ7CiAKIAlkZWJ1ZygiRGF0YSBzaXplIDogJWQiLCBkYXRhX3NpemUpOwogCiAJZm9yICg7Oykg ewogCQljaGFyICpwRWxlbSA9IE5VTEw7CiAJCWludCBsb2NhbFNlcUxlbmd0aCA9IDA7CisJCQor CQlpZiAoYnl0ZXNsZWZ0IDwgc2l6ZW9mKHVpbnQ4X3QpKSB7CisJCSAgZGVidWcoIi0+VW5leHBl Y3RlZCBlbmQgb2YgYnVmZmVyIik7CisJCSAgcmV0dXJuIC0xOworCQl9CiAKIAkJZGF0YVR5cGUg PSAqKHVpbnQ4X3QgKilwOwogCQlkZWJ1ZygiRGF0YSB0eXBlOiAweCUwMngiLCBkYXRhVHlwZSk7 CkBAIC0xMDAsNiArMTA3LDEyIEBACiAJCWNhc2UgU0RQX1VJTlQxNjoKIAkJCXAgKz0gc2l6ZW9m KHVpbnQ4X3QpOwogCQkJc2VxbGVuICs9IHNpemVvZih1aW50OF90KTsKKwkJCWJ5dGVzbGVmdCAt PSBzaXplb2YodWludDhfdCk7CisJICAgIGlmIChieXRlc2xlZnQgPCBzaXplb2YodWludDE2X3Qp KSB7CisJICAgICAgZGVidWcoIi0+VW5leHBlY3RlZCBlbmQgb2YgYnVmZmVyIik7CisJICAgICAg cmV0dXJuIC0xOworCSAgICB9CisJCQkKIAkJCXBFbGVtID0gbWFsbG9jKHNpemVvZih1aW50MTZf dCkpOwogCQkJYnRfcHV0X3VuYWxpZ25lZChudG9ocyhidF9nZXRfdW5hbGlnbmVkKCh1aW50MTZf dCAqKXApKSwgKHVpbnQxNl90ICopcEVsZW0pOwogCQkJcCArPSBzaXplb2YodWludDE2X3QpOwpA QCAtMTA4LDcgKzEyMSwxMyBAQAogCQljYXNlIFNEUF9VSU5UMzI6CiAJCQlwICs9IHNpemVvZih1 aW50OF90KTsKIAkJCXNlcWxlbiArPSBzaXplb2YodWludDhfdCk7Ci0JCQlwRWxlbSA9IG1hbGxv YyhzaXplb2YodWludDMyX3QpKTsKKyAgICAgIGJ5dGVzbGVmdCAtPSBzaXplb2YodWludDhfdCk7 CisgICAgICBpZiAoYnl0ZXNsZWZ0IDwgc2l6ZW9mKHVpbnQzMl90KSkgeworICAgICAgICBkZWJ1 ZygiLT5VbmV4cGVjdGVkIGVuZCBvZiBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAg ICAgfQorCisgICAgICBwRWxlbSA9IG1hbGxvYyhzaXplb2YodWludDMyX3QpKTsKIAkJCWJ0X3B1 dF91bmFsaWduZWQobnRvaGwoYnRfZ2V0X3VuYWxpZ25lZCgodWludDMyX3QgKilwKSksICh1aW50 MzJfdCAqKXBFbGVtKTsKIAkJCXAgKz0gc2l6ZW9mKHVpbnQzMl90KTsKIAkJCXNlcWxlbiArPSBz aXplb2YodWludDMyX3QpOwpAQCAtMTE3LDEwICsxMzYsMTEgQEAKIAkJY2FzZSBTRFBfVVVJRDMy OgogCQljYXNlIFNEUF9VVUlEMTI4OgogCQkJcEVsZW0gPSBtYWxsb2Moc2l6ZW9mKHV1aWRfdCkp OwotCQkJc3RhdHVzID0gc2RwX3V1aWRfZXh0cmFjdChwLCAodXVpZF90ICopcEVsZW0sICZsb2Nh bFNlcUxlbmd0aCk7CisJCQlzdGF0dXMgPSBzZHBfdXVpZF9leHRyYWN0KHAsICh1dWlkX3QgKilw RWxlbSwgJmxvY2FsU2VxTGVuZ3RoLCBieXRlc2xlZnQpOwogCQkJaWYgKHN0YXR1cyA9PSAwKSB7 CiAJCQkJc2VxbGVuICs9IGxvY2FsU2VxTGVuZ3RoOwogCQkJCXAgKz0gbG9jYWxTZXFMZW5ndGg7 CisJCQkJYnl0ZXNsZWZ0IC09IGxvY2FsU2VxTGVuZ3RoOwogCQkJfQogCQkJYnJlYWs7CiAJCWRl ZmF1bHQ6CmRpZmYgLXVyIGJsdWV0b290aC5vcmlnL2JsdWV6LXV0aWxzLTMuMzAvc2RwZC9zZXJ2 aWNlLmMgYmx1ZXRvb3RoL2JsdWV6LXV0aWxzLTMuMzAvc2RwZC9zZXJ2aWNlLmMKLS0tIGJsdWV0 b290aC5vcmlnL2JsdWV6LXV0aWxzLTMuMzAvc2RwZC9zZXJ2aWNlLmMJMjAwOC0wNi0xMyAxMzoz NjoxNS43MTYwMTEwMDAgLTA3MDAKKysrIGJsdWV0b290aC9ibHVlei11dGlscy0zLjMwL3NkcGQv c2VydmljZS5jCTIwMDgtMDYtMTMgMTI6NTM6MTAuOTExMTI2MDAwIC0wNzAwCkBAIC00MTIsNyAr NDEyLDcgQEAKIH0KIAogLy8gRklYTUU6IHJlZmFjdG9yIGZvciBzZXJ2ZXItc2lkZQotc3RhdGlj IHNkcF9yZWNvcmRfdCAqZXh0cmFjdF9wZHVfc2VydmVyKGJkYWRkcl90ICpkZXZpY2UsIHVpbnQ4 X3QgKnAsIHVpbnQzMl90IGhhbmRsZUV4cGVjdGVkLCBpbnQgKnNjYW5uZWQpCitzdGF0aWMgc2Rw X3JlY29yZF90ICpleHRyYWN0X3BkdV9zZXJ2ZXIoYmRhZGRyX3QgKmRldmljZSwgdWludDhfdCAq cCwgdWludDMyX3QgaGFuZGxlRXhwZWN0ZWQsIGludCAqc2Nhbm5lZCwgaW50IGJ5dGVzbGVmdCkK IHsKIAlpbnQgZXh0cmFjdFN0YXR1cyA9IC0xLCBsb2NhbEV4dHJhY3RlZExlbmd0aCA9IDA7CiAJ dWludDhfdCBkdGQ7CkBAIC00MjIsOCArNDIyLDkgQEAKIAlzZHBfZGF0YV90ICpwQXR0ciA9IE5V TEw7CiAJdWludDMyX3QgaGFuZGxlID0gMHhmZmZmZmZmZjsKIAotCSpzY2FubmVkID0gc2RwX2V4 dHJhY3Rfc2VxdHlwZShwLCAmZHRkLCAmc2VxbGVuKTsKKwkqc2Nhbm5lZCA9IHNkcF9leHRyYWN0 X3NlcXR5cGUocCwgJmR0ZCwgJnNlcWxlbiwgYnl0ZXNsZWZ0KTsKIAlwICs9ICpzY2FubmVkOwor CWJ5dGVzbGVmdCAtPSAqc2Nhbm5lZDsKIAlsb29rQWhlYWRBdHRySWQgPSBudG9ocyhidF9nZXRf dW5hbGlnbmVkKCh1aW50MTZfdCAqKSAocCArIHNpemVvZih1aW50OF90KSkpKTsKIAogCWRlYnVn KCJMb29rIGFoZWFkIGF0dHIgaWQgOiAlZCIsIGxvb2tBaGVhZEF0dHJJZCk7CkBAIC00NjQsNyAr NDY1LDcgQEAKIAkJCiAJCWRlYnVnKCJEVEQgb2YgYXR0cklkIDogJWQgQXR0ciBpZCA6IDB4JXgi LCBkdGQsIGF0dHJJZCk7CiAKLQkJcEF0dHIgPSBzZHBfZXh0cmFjdF9hdHRyKHAgKyBhdHRyU2l6 ZSwgJmF0dHJWYWx1ZUxlbmd0aCwgcmVjKTsKKwkJcEF0dHIgPSBzZHBfZXh0cmFjdF9hdHRyKHAg KyBhdHRyU2l6ZSwgJmF0dHJWYWx1ZUxlbmd0aCwgcmVjLCBieXRlc2xlZnQgLSBhdHRyU2l6ZSk7 CiAKIAkJZGVidWcoIkF0dHIgaWQgOiAweCV4IGF0dHJWYWx1ZUxlbmd0aCA6ICVkIiwgYXR0cklk LCBhdHRyVmFsdWVMZW5ndGgpOwogCkBAIC00NzUsNiArNDc2LDcgQEAKIAkJfQogCQlsb2NhbEV4 dHJhY3RlZExlbmd0aCArPSBhdHRyU2l6ZTsKIAkJcCArPSBhdHRyU2l6ZTsKKwkJYnl0ZXNsZWZ0 IC09IGF0dHJTaXplOwogCQlzZHBfYXR0cl9yZXBsYWNlKHJlYywgYXR0cklkLCBwQXR0cik7CiAJ CWV4dHJhY3RTdGF0dXMgPSAwOwogCQlkZWJ1ZygiRXh0cmFjdCBQRFUsIHNlcUxlbmd0aDogJWQg bG9jYWxFeHRyYWN0ZWRMZW5ndGg6ICVkIiwKQEAgLTUwMCwxNSArNTAyLDE3IEBACiAJc2RwX2Rh dGFfdCAqaGFuZGxlOwogCXVpbnQ4X3QgKnAgPSByZXEtPmJ1ZiArIHNpemVvZihzZHBfcGR1X2hk cl90KTsKIAlzZHBfcmVjb3JkX3QgKnJlYzsKKwlpbnQgYnl0ZXNsZWZ0ID0gcmVxLT5sZW4gLSBz aXplb2Yoc2RwX3BkdV9oZHJfdCk7CiAKIAlyZXEtPmZsYWdzID0gKnArKzsKIAlpZiAocmVxLT5m bGFncyAmIFNEUF9ERVZJQ0VfUkVDT1JEKSB7CiAJCWJhY3B5KCZyZXEtPmRldmljZSwgKGJkYWRk cl90ICopIHApOwogCQlwICs9IHNpemVvZihiZGFkZHJfdCk7CisJCWJ5dGVzbGVmdCAtPSBzaXpl b2YoYmRhZGRyX3QpOwogCX0KIAogCS8vIHNhdmUgaW1hZ2Ugb2YgUERVOiB3ZSBuZWVkIGl0IHdo ZW4gY2xpZW50cyByZXF1ZXN0IHRoaXMgYXR0cmlidXRlCi0JcmVjID0gZXh0cmFjdF9wZHVfc2Vy dmVyKCZyZXEtPmRldmljZSwgcCwgMHhmZmZmZmZmZiwgJnNjYW5uZWQpOworCXJlYyA9IGV4dHJh Y3RfcGR1X3NlcnZlcigmcmVxLT5kZXZpY2UsIHAsIDB4ZmZmZmZmZmYsICZzY2FubmVkLCBieXRl c2xlZnQpOwogCWlmICghcmVjKQogCQlnb3RvIGludmFsaWQ7CiAKQEAgLTU3OCwxOCArNTgyLDIw IEBACiAJc2RwX3JlY29yZF90ICpvcmVjOwogCWludCBzdGF0dXMgPSAwLCBzY2FubmVkID0gMDsK IAl1aW50OF90ICpwID0gcmVxLT5idWYgKyBzaXplb2Yoc2RwX3BkdV9oZHJfdCk7CisJaW50IGJ5 dGVzbGVmdCA9IHJlcS0+bGVuIC0gc2l6ZW9mKHNkcF9wZHVfaGRyX3QpOwogCXVpbnQzMl90IGhh bmRsZSA9IG50b2hsKGJ0X2dldF91bmFsaWduZWQoKHVpbnQzMl90ICopIHApKTsKIAogCWRlYnVn KCJTdmMgUmVjIEhhbmRsZTogMHgleCIsIGhhbmRsZSk7CiAKIAlwICs9IHNpemVvZih1aW50MzJf dCk7CisJYnl0ZXNsZWZ0IC09IHNpemVvZih1aW50MzJfdCk7CiAKIAlvcmVjID0gc2RwX3JlY29y ZF9maW5kKGhhbmRsZSk7CiAKIAlkZWJ1ZygiU3ZjUmVjT2xkOiAlcCIsIG9yZWMpOwogCiAJaWYg KG9yZWMpIHsKLQkJc2RwX3JlY29yZF90ICpucmVjID0gZXh0cmFjdF9wZHVfc2VydmVyKEJEQURE Ul9BTlksIHAsIGhhbmRsZSwgJnNjYW5uZWQpOworCQlzZHBfcmVjb3JkX3QgKm5yZWMgPSBleHRy YWN0X3BkdV9zZXJ2ZXIoQkRBRERSX0FOWSwgcCwgaGFuZGxlLCAmc2Nhbm5lZCwgYnl0ZXNsZWZ0 KTsKIAkJaWYgKG5yZWMgJiYgaGFuZGxlID09IG5yZWMtPmhhbmRsZSkgewogCQkJdXBkYXRlX2Ri X3RpbWVzdGFtcCgpOwogCQkJdXBkYXRlX3N2Y2xhc3NfbGlzdCgpOwpkaWZmIC11ciBibHVldG9v dGgub3JpZy9ibHVlei11dGlscy0zLjMwL3NlcmlhbC9tYW5hZ2VyLmMgYmx1ZXRvb3RoL2JsdWV6 LXV0aWxzLTMuMzAvc2VyaWFsL21hbmFnZXIuYwotLS0gYmx1ZXRvb3RoLm9yaWcvYmx1ZXotdXRp bHMtMy4zMC9zZXJpYWwvbWFuYWdlci5jCTIwMDgtMDYtMTMgMTM6MzY6MTUuNzc5MDAxMDAwIC0w NzAwCisrKyBibHVldG9vdGgvYmx1ZXotdXRpbHMtMy4zMC9zZXJpYWwvbWFuYWdlci5jCTIwMDgt MDYtMTMgMTI6NDA6NDguNTUwMDkwMDAwIC0wNzAwCkBAIC01MjAsNyArNTIwLDcgQEAKIAkJZ290 byBmYWlsOwogCX0KIAotCXJlYyA9IHNkcF9leHRyYWN0X3BkdShyZWNfYmluLCAmc2Nhbm5lZCk7 CisJcmVjID0gc2RwX2V4dHJhY3RfcGR1KHJlY19iaW4sICZzY2FubmVkLCBsZW4pOwogCWlmICgh cmVjKSB7CiAJCWVycm9yKCJDYW4ndCBleHRyYWN0IFNEUCByZWNvcmQuIik7CiAJCWVycm9yX25v dF9zdXBwb3J0ZWQocGMtPmNvbm4sIHBjLT5tc2cpOwo= ------=_Part_8499_28474897.1213648070535 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php ------=_Part_8499_28474897.1213648070535 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Bluez-devel mailing list Bluez-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bluez-devel ------=_Part_8499_28474897.1213648070535--