From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18441 invoked by alias); 6 Nov 2008 07:47:49 -0000 Received: (qmail 18133 invoked by uid 22791); 6 Nov 2008 07:47:41 -0000 X-Spam-Check-By: sourceware.org Received: from ti-out-0910.google.com (HELO ti-out-0910.google.com) (209.85.142.189) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 06 Nov 2008 07:46:43 +0000 Received: by ti-out-0910.google.com with SMTP id d10so246477tib.12 for ; Wed, 05 Nov 2008 23:46:41 -0800 (PST) Received: by 10.110.105.10 with SMTP id d10mr1797125tic.5.1225957601354; Wed, 05 Nov 2008 23:46:41 -0800 (PST) Received: by 10.110.42.9 with HTTP; Wed, 5 Nov 2008 23:46:41 -0800 (PST) Message-ID: Date: Thu, 06 Nov 2008 07:47:00 -0000 From: teawater To: "gdb-patches@sourceware.org" Subject: [RFA] Process record and replay, 3/10 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_24848_1062256.1225957601305" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-11/txt/msg00099.txt.bz2 ------=_Part_24848_1062256.1225957601305 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 437 This patch add the process record and replay target. This is the core part of process record and replay. 2008-11-06 Hui Zhu Process record and replay target. * Makefile.in (record.c): New file. * record.c, record.h: New file. Makefile.in | 4 record.c | 1143 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ record.h | 99 +++++ 3 files changed, 1244 insertions(+), 2 deletions(-) ------=_Part_24848_1062256.1225957601305 Content-Type: text/plain; name=record_target.txt Content-Transfer-Encoding: base64 X-Attachment-Id: f_fn73n3rc0 Content-Disposition: attachment; filename=record_target.txt Content-length: 46003 LS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTY1Nyw3 ICs2NTcsNyBAQCBTRklMRVMgPSBhZGEtZXhwLnkgYWRhLWxhbmcuYyBhZGEt dHlwZXByCiAJdmFsYXJpdGguYyB2YWxvcHMuYyB2YWxwcmludC5jIHZhbHVl LmMgdmFyb2JqLmMgdmVjLmMgXAogCXdyYXBwZXIuYyBcCiAJeG1sLXRkZXNj LmMgeG1sLXN1cHBvcnQuYyBcCi0JaW5mZXJpb3IuYworCWluZmVyaW9yLmMg cmVjb3JkLmMKIAogTElOVEZJTEVTID0gJChTRklMRVMpICQoWVlGSUxFUykg JChDT05GSUdfU1JDUykgaW5pdC5jCiAKQEAgLTgwOCw3ICs4MDgsNyBAQCBD T01NT05fT0JTID0gJChERVBGSUxFUykgJChDT05GSUdfT0JTKSAkCiAJc29s aWIubyBzb2xpYi1udWxsLm8gXAogCXByb2xvZ3VlLXZhbHVlLm8gbWVtb3J5 LW1hcC5vIHhtbC1zdXBwb3J0Lm8gXAogCXRhcmdldC1kZXNjcmlwdGlvbnMu byB0YXJnZXQtbWVtb3J5Lm8geG1sLXRkZXNjLm8geG1sLWJ1aWx0aW4ubyBc Ci0JaW5mZXJpb3IubworCWluZmVyaW9yLm8gcmVjb3JkLm8KIAogVFNPQlMg PSBpbmZsb3cubwogCi0tLSBhL3JlY29yZC5jCisrKyBiL3JlY29yZC5jCkBA IC0wLDAgKzEsMTE0MyBAQAorLyogUHJvY2VzcyByZWNvcmQgYW5kIHJlcGxh eSB0YXJnZXQgZm9yIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29w eXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5j bHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisjaW5jbHVk ZSAicmVnY2FjaGUuaCIKKyNpbmNsdWRlICJpbmZlcmlvci5oIgorI2luY2x1 ZGUgImdkYnRocmVhZC5oIgorI2luY2x1ZGUgInJlY29yZC5oIgorCisjaW5j bHVkZSA8c2lnbmFsLmg+CisKKyNkZWZpbmUgREVGQVVMVF9SRUNPUkRfSU5T Tl9NQVhfTlVNCTIwMDAwMAorCitpbnQgcmVjb3JkX2RlYnVnID0gMDsKKwor cmVjb3JkX3QgcmVjb3JkX2ZpcnN0OworcmVjb3JkX3QgKnJlY29yZF9saXN0 ID0gJnJlY29yZF9maXJzdDsKK3JlY29yZF90ICpyZWNvcmRfYXJjaF9saXN0 X2hlYWQgPSBOVUxMOworcmVjb3JkX3QgKnJlY29yZF9hcmNoX2xpc3RfdGFp bCA9IE5VTEw7CitzdHJ1Y3QgcmVnY2FjaGUgKnJlY29yZF9yZWdjYWNoZSA9 IE5VTEw7CisKKy8qIDEgYXNrIHVzZXIuIDAgYXV0byBkZWxldGUgdGhlIGxh c3QgcmVjb3JkX3QuICAqLworc3RhdGljIGludCByZWNvcmRfc3RvcF9hdF9s aW1pdCA9IDE7CitzdGF0aWMgaW50IHJlY29yZF9pbnNuX21heF9udW0gPSBE RUZBVUxUX1JFQ09SRF9JTlNOX01BWF9OVU07CitzdGF0aWMgaW50IHJlY29y ZF9pbnNuX251bSA9IDA7CisKK3N0cnVjdCB0YXJnZXRfb3BzIHJlY29yZF9v cHM7CitpbnQgcmVjb3JkX3Jlc3VtZV9zdGVwID0gMDsKK3N0YXRpYyBpbnQg cmVjb3JkX2dldF9zaWcgPSAwOworc3RhdGljIHNpZ3NldF90IHJlY29yZF9t YXNrYWxsOworc3RhdGljIGludCByZWNvcmRfbm90X3JlY29yZCA9IDA7Citp bnQgcmVjb3JkX3dpbGxfc3RvcmVfcmVnaXN0ZXJzID0gMDsKKworZXh0ZXJu IHN0cnVjdCBicF9sb2NhdGlvbiAqYnBfbG9jYXRpb25fY2hhaW47CisKKy8q IFRoZSByZWFsIGJlbmVhdGggZnVuY3Rpb24gcG9pbnRlcnMuICAqLwordm9p ZCAoKnJlY29yZF9iZW5lYXRoX3RvX3Jlc3VtZSkgKHB0aWRfdCwgaW50LCBl bnVtIHRhcmdldF9zaWduYWwpOworcHRpZF90ICgqcmVjb3JkX2JlbmVhdGhf dG9fd2FpdCkgKHB0aWRfdCwgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzICop Owordm9pZCAoKnJlY29yZF9iZW5lYXRoX3RvX3N0b3JlX3JlZ2lzdGVycykg KHN0cnVjdCByZWdjYWNoZSAqLCBpbnQgcmVnbm8pOworTE9OR0VTVCAoKnJl Y29yZF9iZW5lYXRoX3RvX3hmZXJfcGFydGlhbCkgKHN0cnVjdCB0YXJnZXRf b3BzICogb3BzLAorCQkJCQkgICBlbnVtIHRhcmdldF9vYmplY3Qgb2JqZWN0 LAorCQkJCQkgICBjb25zdCBjaGFyICphbm5leCwKKwkJCQkJICAgZ2RiX2J5 dGUgKiByZWFkYnVmLAorCQkJCQkgICBjb25zdCBnZGJfYnl0ZSAqIHdyaXRl YnVmLAorCQkJCQkgICBVTE9OR0VTVCBvZmZzZXQsIExPTkdFU1QgbGVuKTsK K2ludCAoKnJlY29yZF9iZW5lYXRoX3RvX2luc2VydF9icmVha3BvaW50KSAo c3RydWN0IGJwX3RhcmdldF9pbmZvICopOworaW50ICgqcmVjb3JkX2JlbmVh dGhfdG9fcmVtb3ZlX2JyZWFrcG9pbnQpIChzdHJ1Y3QgYnBfdGFyZ2V0X2lu Zm8gKik7CisKK3N0YXRpYyB2b2lkCityZWNvcmRfbGlzdF9yZWxlYXNlIChy ZWNvcmRfdCAqIHJlYykKK3sKKyAgcmVjb3JkX3QgKnRtcDsKKworICBpZiAo IXJlYykKKyAgICByZXR1cm47CisKKyAgd2hpbGUgKHJlYy0+bmV4dCkKKyAg ICB7CisgICAgICByZWMgPSByZWMtPm5leHQ7CisgICAgfQorCisgIHdoaWxl IChyZWMtPnByZXYpCisgICAgeworICAgICAgdG1wID0gcmVjOworICAgICAg cmVjID0gcmVjLT5wcmV2OworICAgICAgaWYgKHRtcC0+dHlwZSA9PSByZWNv cmRfcmVnKQorCXsKKwkgIHhmcmVlICh0bXAtPnUucmVnLnZhbCk7CisJfQor ICAgICAgZWxzZSBpZiAodG1wLT50eXBlID09IHJlY29yZF9tZW0pCisJewor CSAgeGZyZWUgKHRtcC0+dS5tZW0udmFsKTsKKwl9CisgICAgICB4ZnJlZSAo dG1wKTsKKyAgICB9CisKKyAgaWYgKHJlYyAhPSAmcmVjb3JkX2ZpcnN0KQor ICAgIHsKKyAgICAgIHhmcmVlIChyZWMpOworICAgIH0KK30KKworc3RhdGlj IHZvaWQKK3JlY29yZF9saXN0X3JlbGVhc2VfbmV4dCAodm9pZCkKK3sKKyAg cmVjb3JkX3QgKnJlYyA9IHJlY29yZF9saXN0OworICByZWNvcmRfdCAqdG1w ID0gcmVjLT5uZXh0OworICByZWMtPm5leHQgPSBOVUxMOworICB3aGlsZSAo dG1wKQorICAgIHsKKyAgICAgIHJlYyA9IHRtcC0+bmV4dDsKKyAgICAgIGlm ICh0bXAtPnR5cGUgPT0gcmVjb3JkX3JlZykKKwl7CisJICByZWNvcmRfaW5z bl9udW0tLTsKKwl9CisgICAgICBlbHNlIGlmICh0bXAtPnR5cGUgPT0gcmVj b3JkX3JlZykKKwl7CisJICB4ZnJlZSAodG1wLT51LnJlZy52YWwpOworCX0K KyAgICAgIGVsc2UgaWYgKHRtcC0+dHlwZSA9PSByZWNvcmRfbWVtKQorCXsK KwkgIHhmcmVlICh0bXAtPnUubWVtLnZhbCk7CisJfQorICAgICAgeGZyZWUg KHRtcCk7CisgICAgICB0bXAgPSByZWM7CisgICAgfQorfQorCitzdGF0aWMg dm9pZAorcmVjb3JkX2xpc3RfcmVsZWFzZV9maXJzdCAodm9pZCkKK3sKKyAg cmVjb3JkX3QgKnRtcCA9IE5VTEw7CisgIGVudW0gcmVjb3JkX3R5cGUgdHlw ZTsKKworICBpZiAoIXJlY29yZF9maXJzdC5uZXh0KQorICAgIHsKKyAgICAg IHJldHVybjsKKyAgICB9CisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAg dHlwZSA9IHJlY29yZF9maXJzdC5uZXh0LT50eXBlOworCisgICAgICBpZiAo dHlwZSA9PSByZWNvcmRfcmVnKQorCXsKKwkgIHhmcmVlIChyZWNvcmRfZmly c3QubmV4dC0+dS5yZWcudmFsKTsKKwl9CisgICAgICBlbHNlIGlmICh0eXBl ID09IHJlY29yZF9tZW0pCisJeworCSAgeGZyZWUgKHJlY29yZF9maXJzdC5u ZXh0LT51Lm1lbS52YWwpOworCX0KKyAgICAgIHRtcCA9IHJlY29yZF9maXJz dC5uZXh0OworICAgICAgcmVjb3JkX2ZpcnN0Lm5leHQgPSB0bXAtPm5leHQ7 CisgICAgICB4ZnJlZSAodG1wKTsKKworICAgICAgaWYgKCFyZWNvcmRfZmly c3QubmV4dCkKKwl7CisJICBnZGJfYXNzZXJ0IChyZWNvcmRfaW5zbl9udW0g PT0gMSk7CisJICBicmVhazsKKwl9CisKKyAgICAgIHJlY29yZF9maXJzdC5u ZXh0LT5wcmV2ID0gJnJlY29yZF9maXJzdDsKKworICAgICAgaWYgKHR5cGUg PT0gcmVjb3JkX2VuZCkKKwl7CisJICBicmVhazsKKwl9CisgICAgfQorCisg IHJlY29yZF9pbnNuX251bS0tOworfQorCisvKiBBZGQgYSByZWNvcmRfdCB0 byByZWNvcmRfYXJjaF9saXN0LiAgKi8KK3N0YXRpYyB2b2lkCityZWNvcmRf YXJjaF9saXN0X2FkZCAocmVjb3JkX3QgKiByZWMpCit7CisgIGlmIChyZWNv cmRfYXJjaF9saXN0X3RhaWwpCisgICAgeworICAgICAgcmVjb3JkX2FyY2hf bGlzdF90YWlsLT5uZXh0ID0gcmVjOworICAgICAgcmVjLT5wcmV2ID0gcmVj b3JkX2FyY2hfbGlzdF90YWlsOworICAgICAgcmVjb3JkX2FyY2hfbGlzdF90 YWlsID0gcmVjOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJlY29y ZF9hcmNoX2xpc3RfaGVhZCA9IHJlYzsKKyAgICAgIHJlY29yZF9hcmNoX2xp c3RfdGFpbCA9IHJlYzsKKyAgICB9Cit9CisKKy8qIFJlY29yZCB0aGUgdmFs dWUgb2YgYSByZWdpc3RlciAoIm51bSIpIHRvIHJlY29yZF9hcmNoX2xpc3Qu ICAqLworaW50CityZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKGludCBudW0p Cit7CisgIHJlY29yZF90ICpyZWM7CisKKyAgaWYgKHJlY29yZF9kZWJ1ZyA+ IDEpCisgICAgeworICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3Rk bG9nLAorCQkJICAiUHJvY2VzcyByZWNvcmQ6IGFkZCByZWdpc3RlciBudW0g PSAlZCB0byByZWNvcmQgbGlzdC5cbiIsIAorCQkJICBudW0pOworICAgIH0K KworICByZWMgPSAocmVjb3JkX3QgKikgeG1hbGxvYyAoc2l6ZW9mIChyZWNv cmRfdCkpOworICByZWMtPnUucmVnLnZhbCA9IChnZGJfYnl0ZSAqKSB4bWFs bG9jIChNQVhfUkVHSVNURVJfU0laRSk7CisgIHJlYy0+cHJldiA9IE5VTEw7 CisgIHJlYy0+bmV4dCA9IE5VTEw7CisgIHJlYy0+dHlwZSA9IHJlY29yZF9y ZWc7CisgIHJlYy0+dS5yZWcubnVtID0gbnVtOworCisgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIG51bSwgcmVjLT51LnJlZy52YWwp OworCisgIHJlY29yZF9hcmNoX2xpc3RfYWRkIChyZWMpOworCisgIHJldHVy biAoMCk7Cit9CisKKy8qIFJlY29yZCB0aGUgdmFsdWUgb2YgYSByZWdpb24g b2YgbWVtb3J5IHdob3NlIGFkZHJlc3MgaXMgImFkZHIiIGFuZAorICAgbGVu Z3RoIGlzICJsZW4iIHRvIHJlY29yZF9hcmNoX2xpc3QuICAqLworCitpbnQK K3JlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoQ09SRV9BRERSIGFkZHIsIGlu dCBsZW4pCit7CisgIHJlY29yZF90ICpyZWM7CisKKyAgaWYgKHJlY29yZF9k ZWJ1ZyA+IDEpCisgICAgeworICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChn ZGJfc3RkbG9nLAorCQkJICAiUHJvY2VzcyByZWNvcmQ6IGFkZCBtZW0gYWRk ciA9IDB4JXMgbGVuID0gJWQgdG8gcmVjb3JkIGxpc3QuXG4iLAorCQkJICBw YWRkcl9ueiAoYWRkciksIGxlbik7CisgICAgfQorCisgIGlmICghYWRkcikK KyAgICB7CisgICAgICByZXR1cm4gKDApOworICAgIH0KKworICByZWMgPSAo cmVjb3JkX3QgKikgeG1hbGxvYyAoc2l6ZW9mIChyZWNvcmRfdCkpOworICBy ZWMtPnUubWVtLnZhbCA9IChnZGJfYnl0ZSAqKSB4bWFsbG9jIChsZW4pOwor ICByZWMtPnByZXYgPSBOVUxMOworICByZWMtPm5leHQgPSBOVUxMOworICBy ZWMtPnR5cGUgPSByZWNvcmRfbWVtOworICByZWMtPnUubWVtLmFkZHIgPSBh ZGRyOworICByZWMtPnUubWVtLmxlbiA9IGxlbjsKKworICBpZiAodGFyZ2V0 X3JlYWRfbWVtb3J5IChhZGRyLCByZWMtPnUubWVtLnZhbCwgbGVuKSkKKyAg ICB7CisgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJ CQkgICJQcm9jZXNzIHJlY29yZDogcmVhZCBtZW1vcnkgYWRkciA9IDB4JXMg bGVuID0gJWQgZXJyb3IuXG4iLAorCQkJICBwYWRkcl9ueiAoYWRkciksIGxl bik7CisgICAgICB4ZnJlZSAocmVjLT51Lm1lbS52YWwpOworICAgICAgeGZy ZWUgKHJlYyk7CisgICAgICByZXR1cm4gKC0xKTsKKyAgICB9CisKKyAgcmVj b3JkX2FyY2hfbGlzdF9hZGQgKHJlYyk7CisKKyAgcmV0dXJuICgwKTsKK30K KworLyogQWRkIGEgcmVjb3JkX2VuZCB0eXBlIHJlY29yZF90IHRvIHJlY29y ZF9hcmNoX2xpc3QuICAqLworaW50CityZWNvcmRfYXJjaF9saXN0X2FkZF9l bmQgKGludCBuZWVkX2Rhc20pCit7CisgIHJlY29yZF90ICpyZWM7CisKKyAg aWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisgICAgeworICAgICAgZnByaW50Zl91 bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJICAiUHJvY2VzcyByZWNvcmQ6 IGFkZCBlbmQgbmVlZF9kYXNtID0gJWQgdG8gYXJjaCBsaXN0LlxuIiwKKwkJ CSAgbmVlZF9kYXNtKTsKKyAgICB9CisKKyAgcmVjID0gKHJlY29yZF90ICop IHhtYWxsb2MgKHNpemVvZiAocmVjb3JkX3QpKTsKKyAgcmVjLT5wcmV2ID0g TlVMTDsKKyAgcmVjLT5uZXh0ID0gTlVMTDsKKyAgcmVjLT50eXBlID0gcmVj b3JkX2VuZDsKKworICByZWMtPnUubmVlZF9kYXNtID0gbmVlZF9kYXNtOwor CisgIHJlY29yZF9hcmNoX2xpc3RfYWRkIChyZWMpOworCisgIHJldHVybiAo MCk7Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRfY2hlY2tfaW5zbl9udW0g KGludCBzZXRfdGVybWluYWwpCit7CisgIGlmIChyZWNvcmRfaW5zbl9tYXhf bnVtKQorICAgIHsKKyAgICAgIGdkYl9hc3NlcnQgKHJlY29yZF9pbnNuX251 bSA8PSByZWNvcmRfaW5zbl9tYXhfbnVtKTsKKyAgICAgIGlmIChyZWNvcmRf aW5zbl9udW0gPT0gcmVjb3JkX2luc25fbWF4X251bSkKKwl7CisJICAvKiBB c2sgdXNlciBob3cgdG8gZG8gKi8KKwkgIGlmIChyZWNvcmRfc3RvcF9hdF9s aW1pdCkKKwkgICAgeworCSAgICAgIGludCBxOworCSAgICAgIGlmIChzZXRf dGVybWluYWwpCisJCXRhcmdldF90ZXJtaW5hbF9vdXJzICgpOworCSAgICAg IHEgPSB5cXVlcnkgKF8oIlRoZSByZWNvcmQgaW5zdHJ1Y3Rpb24gbnVtYmVy IChyZWNvcmQtaW5zbi1udW1iZXIpIGlzIGVxdWFsIHRvIHJlY29yZC1pbnNu LW51bWJlci1tYXguICBEbyB5b3Ugd2FudCB0byBjbG9zZSByZWNvcmQvcmVw bGF5IHN0b3Agd2hlbiByZWNvcmQvcmVwbGF5IGJ1ZmZlciBiZWNvbWVzIGZ1 bGwocmVjb3JkLXN0b3AtYXQtbGltaXQpIHRoZW4gYXV0byBkZWxldGUgZmly c3QgcmVjb3JkX3Q/IikpOworCSAgICAgIGlmIChzZXRfdGVybWluYWwpCisJ CXRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsKKwkgICAgICBpZiAocSkK KwkJeworCQkgIHJlY29yZF9zdG9wX2F0X2xpbWl0ID0gMDsKKwkJfQorCSAg ICAgIGVsc2UKKwkJeworCQkgIGVycm9yIChfKCJQcm9jZXNzIHJlY29yZDog cmVjb3JkIHN0b3AgdGhlIHByb2dyYW0uIikpOworCQl9CisJICAgIH0KKwl9 CisgICAgfQorfQorCisvKiBCZWZvcmUgaW5mZXJpb3Igc3RlcCAod2hlbiBH REIgcmVjb3JkIHRoZSBydW5uaW5nIG1lc3NhZ2UsIGluZmVyaW9yCisgICBv bmx5IGNhbiBzdGVwKSwgR0RCIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIHRv IHJlY29yZCB0aGUgdmFsdWVzIHRvCisgICByZWNvcmRfbGlzdC4gIFRoaXMg ZnVuY3Rpb24gd2lsbCBjYWxsIGdkYmFyY2hfcHJvY2Vzc19yZWNvcmQgdG8K KyAgIHJlY29yZCB0aGUgcnVubmluZyBtZXNzYWdlIG9mIGluZmVyaW9yIGFu ZCBzZXQgdGhlbSB0bworICAgcmVjb3JkX2FyY2hfbGlzdCwgYW5kIGFkZCBp dCB0byByZWNvcmRfbGlzdC4gICovCisKK3N0YXRpYyB2b2lkCityZWNvcmRf bWVzc2FnZV9jbGVhbnVwcyAodm9pZCAqaWdub3JlKQoreworICByZWNvcmRf bGlzdF9yZWxlYXNlIChyZWNvcmRfYXJjaF9saXN0X3RhaWwpOworICBzZXRf ZXhlY3V0aW5nIChpbmZlcmlvcl9wdGlkLCAwKTsKKyAgbm9ybWFsX3N0b3Ag KCk7Cit9CisKK3ZvaWQKK3JlY29yZF9tZXNzYWdlIChzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaCkKK3sKKyAgaW50IHJldDsKKyAgc3RydWN0IGNsZWFudXAg Km9sZF9jbGVhbnVwcyA9IG1ha2VfY2xlYW51cCAocmVjb3JkX21lc3NhZ2Vf Y2xlYW51cHMsIDApOworCisgIC8qIENoZWNrIHJlY29yZF9pbnNuX251bS4g ICovCisgIHJlY29yZF9jaGVja19pbnNuX251bSAoMSk7CisKKyAgcmVjb3Jk X2FyY2hfbGlzdF9oZWFkID0gTlVMTDsKKyAgcmVjb3JkX2FyY2hfbGlzdF90 YWlsID0gTlVMTDsKKyAgcmVjb3JkX3JlZ2NhY2hlID0gZ2V0X2N1cnJlbnRf cmVnY2FjaGUgKCk7CisKKyAgcmV0ID0gZ2RiYXJjaF9wcm9jZXNzX3JlY29y ZCAoZ2RiYXJjaCwgCisJCQkJcmVnY2FjaGVfcmVhZF9wYyAocmVjb3JkX3Jl Z2NhY2hlKSk7CisgIGlmIChyZXQgPiAwKQorICAgIGVycm9yIChfKCJQcm9j ZXNzIHJlY29yZCBwYXVzZSB0aGUgcHJvZ3JhbS4iKSk7CisgIGlmIChyZXQg PCAwKQorICAgIGVycm9yIChfKCJQcm9jZXNzIHJlY29yZCByZWNvcmQgbWVz c2FnZSBlcnJvci4iKSk7CisKKyAgZGlzY2FyZF9jbGVhbnVwcyAob2xkX2Ns ZWFudXBzKTsKKworICByZWNvcmRfbGlzdC0+bmV4dCA9IHJlY29yZF9hcmNo X2xpc3RfaGVhZDsKKyAgcmVjb3JkX2FyY2hfbGlzdF9oZWFkLT5wcmV2ID0g cmVjb3JkX2xpc3Q7CisgIHJlY29yZF9saXN0ID0gcmVjb3JkX2FyY2hfbGlz dF90YWlsOworCisgIGlmIChyZWNvcmRfaW5zbl9udW0gPT0gcmVjb3JkX2lu c25fbWF4X251bSAmJiByZWNvcmRfaW5zbl9tYXhfbnVtKQorICAgIHsKKyAg ICAgIHJlY29yZF9saXN0X3JlbGVhc2VfZmlyc3QgKCk7CisgICAgfQorICBl bHNlCisgICAgeworICAgICAgcmVjb3JkX2luc25fbnVtKys7CisgICAgfQor fQorCisvKiBUaGluZ3MgdG8gY2xlYW4gdXAgaWYgd2UgUVVJVCBvdXQgb2Yg ZnVuY3Rpb24gdGhhdCBzZXQKKyAgIHJlY29yZF9ub3RfcmVjb3JkLiAgKi8K K3N0YXRpYyB2b2lkCityZWNvcmRfbm90X3JlY29yZF9jbGVhbnVwcyAodm9p ZCAqaWdub3JlKQoreworICByZWNvcmRfbm90X3JlY29yZCA9IDA7Cit9CisK K3ZvaWQKK3JlY29yZF9ub3RfcmVjb3JkX3NldCAodm9pZCkKK3sKKyAgc3Ry dWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwcyA9IG1ha2VfY2xlYW51cCAocmVj b3JkX25vdF9yZWNvcmRfY2xlYW51cHMsIDApOworICByZWNvcmRfbm90X3Jl Y29yZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRfb3BlbiAoY2hh ciAqbmFtZSwgaW50IGZyb21fdHR5KQoreworICBpZiAocmVjb3JkX2RlYnVn KQorICAgIHsKKyAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxv ZywgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfb3BlblxuIik7CisgICAgfQor CisgIC8qIGNoZWNrIGV4ZWMgKi8KKyAgaWYgKCF0YXJnZXRfaGFzX2V4ZWN1 dGlvbikKKyAgICB7CisgICAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6 IHRoZSBwcm9ncmFtIGlzIG5vdCBiZWluZyBydW4uIikpOworICAgIH0KKyAg aWYgKG5vbl9zdG9wKQorICAgIHsKKyAgICAgIGVycm9yIChfKCJQcm9jZXNz IHJlY29yZCB0YXJnZXQgY2FuJ3QgZGVidWcgaW5mZXJpb3IgaW4gbm9uLXN0 b3AgbW9kZSAobm9uLXN0b3ApLiIpKTsKKyAgICB9CisgIGlmICh0YXJnZXRf YXN5bmNfcGVybWl0dGVkKQorICAgIHsKKyAgICAgIGVycm9yIChfKCJQcm9j ZXNzIHJlY29yZCB0YXJnZXQgY2FuJ3QgZGVidWcgdGhlIEdOVS9MaW51eCBp bmZlcmlvciBpbiBhc3luY2hyb25vdXMgbW9kZSAobGludXgtYXN5bmMpLiIp KTsKKyAgICB9CisKKyAgaWYgKCFnZGJhcmNoX3Byb2Nlc3NfcmVjb3JkX3Ag KGN1cnJlbnRfZ2RiYXJjaCkpCisgICAgeworICAgICAgZXJyb3IgKF8oIlBy b2Nlc3MgcmVjb3JkOiB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUgZG9lc24n dCBzdXBwb3J0IHJlY29yZCBmdW5jdGlvbi4iKSk7CisgICAgfQorCisgIC8q IENoZWNrIGlmIHJlY29yZCB0YXJnZXQgaXMgYWxyZWFkeSBydW5uaW5nICov CisgIGlmIChSRUNPUkRfSVNfVVNFRCkKKyAgICB7CisgICAgICBpZiAoIW5x dWVyeQorCSAgKF8oIlByb2Nlc3MgcmVjb3JkIHRhcmdldCBhbHJlYWR5IHJ1 bm5pbmcsIGRvIHlvdSB3YW50IGRlbGV0ZSB0aGUgb2xkIHJlY29yZCBsb2c/ IikpKQorCXsKKwkgIHJldHVybjsKKwl9CisgICAgfQorCisgIHB1c2hfdGFy Z2V0ICgmcmVjb3JkX29wcyk7CisKKyAgLyogUmVzZXQgKi8KKyAgcmVjb3Jk X2luc25fbnVtID0gMDsKKyAgcmVjb3JkX2xpc3QgPSAmcmVjb3JkX2ZpcnN0 OworICByZWNvcmRfbGlzdC0+bmV4dCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2 b2lkCityZWNvcmRfY2xvc2UgKGludCBxdWl0dGluZykKK3sKKyAgaWYgKHJl Y29yZF9kZWJ1ZykKKyAgICB7CisgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQg KGdkYl9zdGRsb2csICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX2Nsb3NlXG4i KTsKKyAgICB9CisgIHJlY29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF9saXN0 KTsKK30KKworc3RhdGljIHZvaWQKK3JlY29yZF9yZXN1bWUgKHB0aWRfdCBw dGlkLCBpbnQgc3RlcCwgZW51bSB0YXJnZXRfc2lnbmFsIHNpZ2duYWwpCit7 CisgIHJlY29yZF9yZXN1bWVfc3RlcCA9IHN0ZXA7CisKKyAgaWYgKCFSRUNP UkRfSVNfUkVQTEFZKQorICAgIHsKKyAgICAgIHJlY29yZF9tZXNzYWdlIChj dXJyZW50X2dkYmFyY2gpOworICAgICAgcmVjb3JkX2JlbmVhdGhfdG9fcmVz dW1lIChwdGlkLCAxLCBzaWdnbmFsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2 b2lkCityZWNvcmRfc2lnX2hhbmRsZXIgKGludCBzaWdubykKK3sKKyAgaWYg KHJlY29yZF9kZWJ1ZykKKyAgICB7CisgICAgICBmcHJpbnRmX3VuZmlsdGVy ZWQgKGdkYl9zdGRsb2csICJQcm9jZXNzIHJlY29yZDogZ2V0IGEgc2lnbmFs XG4iKTsKKyAgICB9CisgIHJlY29yZF9yZXN1bWVfc3RlcCA9IDE7CisgIHJl Y29yZF9nZXRfc2lnID0gMTsKK30KKworc3RhdGljIHZvaWQKK3JlY29yZF93 YWl0X2NsZWFudXBzICh2b2lkICppZ25vcmUpCit7CisgIGlmIChleGVjdXRp b25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRSkKKyAgICB7CisgICAgICBp ZiAocmVjb3JkX2xpc3QtPm5leHQpCisJeworCSAgcmVjb3JkX2xpc3QgPSBy ZWNvcmRfbGlzdC0+bmV4dDsKKwl9CisgICAgfQorICBlbHNlCisgICAgewor ICAgICAgcmVjb3JkX2xpc3QgPSByZWNvcmRfbGlzdC0+cHJldjsKKyAgICB9 CisgIHNldF9leGVjdXRpbmcgKGluZmVyaW9yX3B0aWQsIDApOworICBub3Jt YWxfc3RvcCAoKTsKK30KKworLyogcmVjb3JkX3dhaXQKKyAgIEluIHJlcGxh eSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGV4YW1pbmVzIHRoZSByZWNvcmRlZCBs b2cgYW5kCisgICBkZXRlcm1pbmVzIHdoZXJlIHRvIHN0b3AuICAqLworCitz dGF0aWMgcHRpZF90CityZWNvcmRfd2FpdCAocHRpZF90IHB0aWQsIHN0cnVj dCB0YXJnZXRfd2FpdHN0YXR1cyAqc3RhdHVzKQoreworICBpZiAocmVjb3Jk X2RlYnVnKQorICAgIHsKKyAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywKKwkJCSAgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfd2FpdCBy ZWNvcmRfcmVzdW1lX3N0ZXAgPSAlZFxuIiwKKwkJCSAgcmVjb3JkX3Jlc3Vt ZV9zdGVwKTsKKyAgICB9CisKKyAgaWYgKCFSRUNPUkRfSVNfUkVQTEFZKQor ICAgIHsKKyAgICAgIHJldHVybiByZWNvcmRfYmVuZWF0aF90b193YWl0IChw dGlkLCBzdGF0dXMpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHN0 cnVjdCBzaWdhY3Rpb24gYWN0LCBvbGRfYWN0OworICAgICAgaW50IG5lZWRf ZGFzbSA9IDA7CisgICAgICBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlID0g Z2V0X2N1cnJlbnRfcmVnY2FjaGUgKCk7CisgICAgICBpbnQgY29udGludWVf ZmxhZyA9IDE7CisgICAgICBpbnQgZmlyc3RfcmVjb3JkX2VuZCA9IDE7Cisg ICAgICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBzID0gbWFrZV9jbGVh bnVwIChyZWNvcmRfd2FpdF9jbGVhbnVwcywgMCk7CisgICAgICBDT1JFX0FE RFIgdG1wX3BjOworCisgICAgICBzdGF0dXMtPmtpbmQgPSBUQVJHRVRfV0FJ VEtJTkRfU1RPUFBFRDsKKworICAgICAgLyogQ2hlY2sgYnJlYWtwb2ludCB3 aGVuIGZvcndhcmQgZXhlY3V0ZS4gICovCisgICAgICBpZiAoZXhlY3V0aW9u X2RpcmVjdGlvbiA9PSBFWEVDX0ZPUldBUkQpCisJeworCSAgdG1wX3BjID0g cmVnY2FjaGVfcmVhZF9wYyAocmVnY2FjaGUpOworCSAgaWYgKGJyZWFrcG9p bnRfaW5zZXJ0ZWRfaGVyZV9wICh0bXBfcGMpKQorCSAgICB7CisJICAgICAg aWYgKHJlY29yZF9kZWJ1ZykKKwkJeworCQkgIGZwcmludGZfdW5maWx0ZXJl ZCAoZ2RiX3N0ZGxvZywKKwkJCQkgICAgICAiUHJvY2VzcyByZWNvcmQ6IGJy ZWFrIGF0IDB4JXMuXG4iLAorCQkJCSAgICAgIHBhZGRyX256ICh0bXBfcGMp KTsKKwkJfQorCSAgICAgIGlmIChnZGJhcmNoX2RlY3JfcGNfYWZ0ZXJfYnJl YWsgKGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpCisJCSAgJiYgIXJl Y29yZF9yZXN1bWVfc3RlcCkKKwkJeworCQkgIHJlZ2NhY2hlX3dyaXRlX3Bj IChyZWdjYWNoZSwKKwkJCQkgICAgIHRtcF9wYyArCisJCQkJICAgICBnZGJh cmNoX2RlY3JfcGNfYWZ0ZXJfYnJlYWsKKwkJCQkgICAgIChnZXRfcmVnY2Fj aGVfYXJjaCAocmVnY2FjaGUpKSk7CisJCX0KKwkgICAgICBnb3RvIHJlcGxh eV9vdXQ7CisJICAgIH0KKwl9CisKKyAgICAgIHJlY29yZF9nZXRfc2lnID0g MDsKKyAgICAgIGFjdC5zYV9oYW5kbGVyID0gcmVjb3JkX3NpZ19oYW5kbGVy OworICAgICAgYWN0LnNhX21hc2sgPSByZWNvcmRfbWFza2FsbDsKKyAgICAg IGFjdC5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7CisgICAgICBpZiAoc2lnYWN0 aW9uIChTSUdJTlQsICZhY3QsICZvbGRfYWN0KSkKKwl7CisJICBwZXJyb3Jf d2l0aF9uYW1lIChfKCJQcm9jZXNzIHJlY29yZDogc2lnYWN0aW9uIikpOwor CX0KKyAgICAgIC8qIElmIEdEQiBpcyBpbiB0ZXJtaW5hbF9pbmZlcmlvciwg aXQgd2lsbCBub3QgZ2V0IHRoZSBzaWduYWwuCisgICAgICAgICBBbmQgaW4g R0RCIHJlcGxheSBtb2RlLCBHREIgZG9uJ3QgbmVlZCB0byBpbiB0ZXJtaW5h bF9pbmZlcmlvcgorICAgICAgICAgYmVjYXVzZSBpbmZlcmlvciB3aWxsIG5v dCBleGVjdXRlZC4KKyAgICAgICAgIFRoZW4gc2V0IGl0IHRvIHRlcm1pbmFs X291cnMgdG8gbWFrZSBHREIgZ2V0IHRoZSBzaWduYWwuICAqLworICAgICAg dGFyZ2V0X3Rlcm1pbmFsX291cnMgKCk7CisKKyAgICAgIC8qIEluIEVYRUNf Rk9SV0FSRCBtb2RlLCByZWNvcmRfbGlzdCBwb2ludCB0byB0aGUgdGFpbCBv ZiBwcmV2CisgICAgICAgICBpbnN0cnVjdGlvbi4gICovCisgICAgICBpZiAo ZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX0ZPUldBUkQgJiYgcmVjb3Jk X2xpc3QtPm5leHQpCisgICAgICAgIHsKKwkgIHJlY29yZF9saXN0ID0gcmVj b3JkX2xpc3QtPm5leHQ7CisJfQorCisgICAgICAvKiBMb29wIG92ZXIgdGhl IHJlY29yZF9saXN0LCBsb29raW5nIGZvciB0aGUgbmV4dCBwbGFjZSB0bwor CSBzdG9wLiAgKi8KKyAgICAgIGRvCisJeworCSAgLyogQ2hlY2sgZm9yIGJl Z2lubmluZyBhbmQgZW5kIG9mIGxvZy4gICovCisJICBpZiAoZXhlY3V0aW9u X2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UgCisJICAgICAgJiYgcmVjb3Jk X2xpc3QgPT0gJnJlY29yZF9maXJzdCkKKwkgICAgeworCSAgICAgIC8qIEhp dCBiZWdpbm5pbmcgb2YgcmVjb3JkIGxvZyBpbiByZXZlcnNlLiAgKi8KKwkg ICAgICBzdGF0dXMtPmtpbmQgPSBUQVJHRVRfV0FJVEtJTkRfTk9fSElTVE9S WTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgaWYgKGV4ZWN1dGlvbl9k aXJlY3Rpb24gIT0gRVhFQ19SRVZFUlNFICYmICFyZWNvcmRfbGlzdC0+bmV4 dCkKKwkgICAgeworCSAgICAgIC8qIEhpdCBlbmQgb2YgcmVjb3JkIGxvZyBn b2luZyBmb3J3YXJkLiAgKi8KKwkgICAgICBzdGF0dXMtPmtpbmQgPSBUQVJH RVRfV0FJVEtJTkRfTk9fSElTVE9SWTsKKwkgICAgICBicmVhazsKKwkgICAg fQorCisJICAvKiBzZXQgcHRpZCwgcmVnaXN0ZXIgYW5kIG1lbW9yeSBhY2Nv cmRpbmcgdG8gcmVjb3JkX2xpc3QgKi8KKwkgIGlmIChyZWNvcmRfbGlzdC0+ dHlwZSA9PSByZWNvcmRfcmVnKQorCSAgICB7CisJICAgICAgLyogcmVnICov CisJICAgICAgZ2RiX2J5dGUgcmVnW01BWF9SRUdJU1RFUl9TSVpFXTsKKwkg ICAgICBpZiAocmVjb3JkX2RlYnVnID4gMSkKKwkJeworCQkgIGZwcmludGZf dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkgICAgICAiUHJvY2VzcyBy ZWNvcmQ6IHJlY29yZF9yZWcgMHglcyB0byBpbmZlcmlvciBudW0gPSAlZC5c biIsCisJCQkJICAgICAgcGFkZHJfbnogKChDT1JFX0FERFIpcmVjb3JkX2xp c3QpLAorCQkJCSAgICAgIHJlY29yZF9saXN0LT51LnJlZy5udW0pOworCQl9 CisJICAgICAgcmVnY2FjaGVfY29va2VkX3JlYWQgKHJlZ2NhY2hlLCByZWNv cmRfbGlzdC0+dS5yZWcubnVtLCByZWcpOworCSAgICAgIHJlZ2NhY2hlX2Nv b2tlZF93cml0ZSAocmVnY2FjaGUsIHJlY29yZF9saXN0LT51LnJlZy5udW0s CisJCQkJICAgICByZWNvcmRfbGlzdC0+dS5yZWcudmFsKTsKKwkgICAgICBt ZW1jcHkgKHJlY29yZF9saXN0LT51LnJlZy52YWwsIHJlZywgTUFYX1JFR0lT VEVSX1NJWkUpOworCSAgICB9CisJICBlbHNlIGlmIChyZWNvcmRfbGlzdC0+ dHlwZSA9PSByZWNvcmRfbWVtKQorCSAgICB7CisJICAgICAgLyogbWVtICov CisJICAgICAgZ2RiX2J5dGUgKm1lbSA9IGFsbG9jYSAocmVjb3JkX2xpc3Qt PnUubWVtLmxlbik7CisJICAgICAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisJ CXsKKwkJICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJ ICAgICAgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfbWVtIDB4JXMgdG8gaW5m ZXJpb3IgYWRkciA9IDB4JXMgbGVuID0gJWQuXG4iLAorCQkJCSAgICAgIHBh ZGRyX256ICgoQ09SRV9BRERSKXJlY29yZF9saXN0KSwKKwkJCQkgICAgICBw YWRkcl9ueiAocmVjb3JkX2xpc3QtPnUubWVtLmFkZHIpLAorCQkJCSAgICAg IHJlY29yZF9saXN0LT51Lm1lbS5sZW4pOworCQl9CisJICAgICAgaWYgKHRh cmdldF9yZWFkX21lbW9yeQorCQkgIChyZWNvcmRfbGlzdC0+dS5tZW0uYWRk ciwgbWVtLCByZWNvcmRfbGlzdC0+dS5tZW0ubGVuKSkKKwkJeworCQkgIGVy cm9yIChfKCJQcm9jZXNzIHJlY29yZDogcmVhZCBtZW1vcnkgYWRkciA9IDB4 JXMgbGVuID0gJWQgZXJyb3IuIiksCisJCQkgcGFkZHJfbnogKHJlY29yZF9s aXN0LT51Lm1lbS5hZGRyKSwKKwkJCSByZWNvcmRfbGlzdC0+dS5tZW0ubGVu KTsKKwkJfQorCSAgICAgIGlmICh0YXJnZXRfd3JpdGVfbWVtb3J5CisJCSAg KHJlY29yZF9saXN0LT51Lm1lbS5hZGRyLCByZWNvcmRfbGlzdC0+dS5tZW0u dmFsLAorCQkgICByZWNvcmRfbGlzdC0+dS5tZW0ubGVuKSkKKwkJeworCQkg IGVycm9yIChfCisJCQkgKCJQcm9jZXNzIHJlY29yZDogd3JpdGUgbWVtb3J5 IGFkZHIgPSAweCVzIGxlbiA9ICVkIGVycm9yLiIpLAorCQkJIHBhZGRyX256 IChyZWNvcmRfbGlzdC0+dS5tZW0uYWRkciksCisJCQkgcmVjb3JkX2xpc3Qt PnUubWVtLmxlbik7CisJCX0KKwkgICAgICBtZW1jcHkgKHJlY29yZF9saXN0 LT51Lm1lbS52YWwsIG1lbSwgcmVjb3JkX2xpc3QtPnUubWVtLmxlbik7CisJ ICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChyZWNvcmRfZGVi dWcgPiAxKQorCQl7CisJCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3Rk bG9nLAorCQkJCSAgICAgICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX2VuZCAw eCVzIHRvIGluZmVyaW9yIG5lZWRfZGFzbSA9ICVkLlxuIiwKKwkJCQkgICAg ICBwYWRkcl9ueiAoKENPUkVfQUREUilyZWNvcmRfbGlzdCksCisJCQkJICAg ICAgcmVjb3JkX2xpc3QtPnUubmVlZF9kYXNtKTsKKwkJfQorCisJICAgICAg aWYgKGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19GT1JXQVJEKQorCQl7 CisJCSAgbmVlZF9kYXNtID0gcmVjb3JkX2xpc3QtPnUubmVlZF9kYXNtOwor CQl9CisJICAgICAgaWYgKG5lZWRfZGFzbSkKKwkJeworCQkgIGdkYmFyY2hf cHJvY2Vzc19yZWNvcmRfZGFzbSAoY3VycmVudF9nZGJhcmNoKTsKKwkJfQor CisJICAgICAgaWYgKGZpcnN0X3JlY29yZF9lbmQgJiYgZXhlY3V0aW9uX2Rp cmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UpCisJCXsKKwkJICAvKiBXaGVuIHJl dmVyc2UgZXhjdXRlLCB0aGUgZmlyc3QgcmVjb3JkX2VuZCBpcyB0aGUgcGFy dCBvZgorCQkgICAgIGN1cnJlbnQgaW5zdHJ1Y3Rpb24uICovCisJCSAgZmly c3RfcmVjb3JkX2VuZCA9IDA7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJ ICAvKiBJbiBFWEVDX1JFVkVSU0UgbW9kZSwgdGhpcyBpcyB0aGUgcmVjb3Jk X2VuZCBvZiBwcmV2CisJCSAgICAgaW5zdHJ1Y3Rpb24uCisJCSAgICAgSW4g RVhFQ19GT1JXQVJEIG1vZGUsIHRoaXMgaXMgdGhlIHJlY29yZF9lbmQgb2Yg Y3VycmVudAorCQkgICAgIGluc3RydWN0aW9uLiAgKi8KKwkJICAvKiBzdGVw ICovCisJCSAgaWYgKHJlY29yZF9yZXN1bWVfc3RlcCkKKwkJICAgIHsKKwkJ ICAgICAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisJCQl7CisJCQkgIGZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiBz dGVwLlxuIik7CisJCQl9CisJCSAgICAgIGNvbnRpbnVlX2ZsYWcgPSAwOwor CQkgICAgfQorCisJCSAgLyogY2hlY2sgYnJlYWtwb2ludCAqLworCQkgIHRt cF9wYyA9IHJlZ2NhY2hlX3JlYWRfcGMgKHJlZ2NhY2hlKTsKKwkJICBpZiAo YnJlYWtwb2ludF9pbnNlcnRlZF9oZXJlX3AgKHRtcF9wYykpCisJCSAgICB7 CisJCSAgICAgIGlmIChyZWNvcmRfZGVidWcpCisJCQl7CisJCQkgIGZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkJICAgICAgIlByb2Nl c3MgcmVjb3JkOiBicmVhayBhdCAweCVzLlxuIiwKKwkJCQkJICAgICAgcGFk ZHJfbnogKHRtcF9wYykpOworCQkJfQorCQkgICAgICBpZiAoZ2RiYXJjaF9k ZWNyX3BjX2FmdGVyX2JyZWFrIChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2Fj aGUpKQorCQkJICAmJiBleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfRk9S V0FSRAorCQkJICAmJiAhcmVjb3JkX3Jlc3VtZV9zdGVwKQorIAkJCXsKKwkJ CSAgcmVnY2FjaGVfd3JpdGVfcGMgKHJlZ2NhY2hlLAorCQkJCQkgICAgIHRt cF9wYyArCisJCQkJCSAgICAgZ2RiYXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFr CisJCQkJCSAgICAgKGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpKTsK KyAJCQl9CisJCSAgICAgIGNvbnRpbnVlX2ZsYWcgPSAwOworCQkgICAgfQor CQl9CisJICAgICAgaWYgKGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19S RVZFUlNFKQorCQl7CisJCSAgbmVlZF9kYXNtID0gcmVjb3JkX2xpc3QtPnUu bmVlZF9kYXNtOworCQl9CisJICAgIH0KKworbmV4dDoKKwkgIGlmIChjb250 aW51ZV9mbGFnKQorCSAgICB7CisJICAgICAgaWYgKGV4ZWN1dGlvbl9kaXJl Y3Rpb24gPT0gRVhFQ19SRVZFUlNFKQorCQl7CisJCSAgaWYgKHJlY29yZF9s aXN0LT5wcmV2KQorCQkgICAgcmVjb3JkX2xpc3QgPSByZWNvcmRfbGlzdC0+ cHJldjsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGlmIChyZWNvcmRf bGlzdC0+bmV4dCkKKwkJICAgIHJlY29yZF9saXN0ID0gcmVjb3JkX2xpc3Qt Pm5leHQ7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIHdoaWxlIChjb250aW51 ZV9mbGFnKTsKKworICAgICAgaWYgKHNpZ2FjdGlvbiAoU0lHQUxSTSwgJm9s ZF9hY3QsIE5VTEwpKQorCXsKKwkgIHBlcnJvcl93aXRoX25hbWUgKF8oIlBy b2Nlc3MgcmVjb3JkOiBzaWdhY3Rpb24iKSk7CisJfQorCityZXBsYXlfb3V0 OgorICAgICAgaWYgKHJlY29yZF9nZXRfc2lnKQorCXsKKwkgIHN0YXR1cy0+ dmFsdWUuc2lnID0gVEFSR0VUX1NJR05BTF9JTlQ7CisJfQorICAgICAgZWxz ZQorCXsKKwkgIHN0YXR1cy0+dmFsdWUuc2lnID0gVEFSR0VUX1NJR05BTF9U UkFQOworCX0KKworICAgICAgZGlzY2FyZF9jbGVhbnVwcyAob2xkX2NsZWFu dXBzKTsKKyAgICB9CisKKyAgcmV0dXJuIGluZmVyaW9yX3B0aWQ7Cit9CisK K3N0YXRpYyB2b2lkCityZWNvcmRfZGlzY29ubmVjdCAoc3RydWN0IHRhcmdl dF9vcHMgKnRhcmdldCwgY2hhciAqYXJncywgaW50IGZyb21fdHR5KQorewor ICBpZiAocmVjb3JkX2RlYnVnKQorICAgIHsKKyAgICAgIGZwcmludGZfdW5m aWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRf ZGlzY29ubmVjdFxuIik7CisgICAgfQorICB1bnB1c2hfdGFyZ2V0ICgmcmVj b3JkX29wcyk7CisgIHRhcmdldF9kaXNjb25uZWN0IChhcmdzLCBmcm9tX3R0 eSk7Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRfZGV0YWNoIChjaGFyICph cmdzLCBpbnQgZnJvbV90dHkpCit7CisgIGlmIChyZWNvcmRfZGVidWcpCisg ICAgeworICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAi UHJvY2VzcyByZWNvcmQ6IHJlY29yZF9kZXRhY2hcbiIpOworICAgIH0KKyAg dW5wdXNoX3RhcmdldCAoJnJlY29yZF9vcHMpOworICB0YXJnZXRfZGV0YWNo IChhcmdzLCBmcm9tX3R0eSk7Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRf bW91cm5faW5mZXJpb3IgKHZvaWQpCit7CisgIGlmIChyZWNvcmRfZGVidWcp CisgICAgeworICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9n LCAiUHJvY2VzcyByZWNvcmQ6IHJlY29yZF9tb3Vybl9pbmZlcmlvclxuIik7 CisgICAgfQorICB1bnB1c2hfdGFyZ2V0ICgmcmVjb3JkX29wcyk7CisgIHRh cmdldF9tb3Vybl9pbmZlcmlvciAoKTsKK30KKworLyogQ2xvc2UgcHJvY2Vz cyByZWNvcmQgdGFyZ2V0IGJlZm9yZSBraWxsIHRoZSBpbmZlcmlvciBwcm9j ZXNzLiAgKi8KK3N0YXRpYyB2b2lkCityZWNvcmRfa2lsbCAodm9pZCkKK3sK KyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICB7CisgICAgICBmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csICJQcm9jZXNzIHJlY29yZDogcmVjb3Jk X2tpbGxcbiIpOworICAgIH0KKyAgdW5wdXNoX3RhcmdldCAoJnJlY29yZF9v cHMpOworICB0YXJnZXRfa2lsbCAoKTsKK30KKworLyogUmVjb3JkIHJlZ2lz dGVycyBjaGFuZ2UgKGJ5IHVzZXIgb3IgYnkgR0RCKSB0byBsaXN0IGFzIGFu IGluc3RydWN0aW9uLiAgKi8KK3N0YXRpYyB2b2lkCityZWNvcmRfcmVnaXN0 ZXJzX2NoYW5nZSAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJl Z251bSkKK3sKKyAgLyogQ2hlY2sgcmVjb3JkX2luc25fbnVtLiAgKi8KKyAg cmVjb3JkX2NoZWNrX2luc25fbnVtICgwKTsKKworICByZWNvcmRfYXJjaF9s aXN0X2hlYWQgPSBOVUxMOworICByZWNvcmRfYXJjaF9saXN0X3RhaWwgPSBO VUxMOworCisgIHJlY29yZF9yZWdjYWNoZSA9IGdldF9jdXJyZW50X3JlZ2Nh Y2hlICgpOworCisgIGlmIChyZWdudW0gPCAwKQorICAgIHsKKyAgICAgIGlu dCBpOworICAgICAgZm9yIChpID0gMDsgaSA8IGdkYmFyY2hfbnVtX3JlZ3Mg KGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpOyBpKyspCisJeworCSAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoaSkpCisJICAgIHsKKwkg ICAgICByZWNvcmRfbGlzdF9yZWxlYXNlIChyZWNvcmRfYXJjaF9saXN0X3Rh aWwpOworCSAgICAgIGVycm9yIChfKCJQcm9jZXNzIHJlY29yZDogcmVjb3Jk IG1lc3NhZ2UgZXJyb3IuIikpOworCSAgICB9CisJfQorICAgIH0KKyAgZWxz ZQorICAgIHsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcg KHJlZ251bSkpCisJeworCSAgcmVjb3JkX2xpc3RfcmVsZWFzZSAocmVjb3Jk X2FyY2hfbGlzdF90YWlsKTsKKwkgIGVycm9yIChfKCJQcm9jZXNzIHJlY29y ZDogcmVjb3JkIG1lc3NhZ2UgZXJyb3IuIikpOworCX0KKyAgICB9CisgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9lbmQgKDApKQorICAgIHsKKyAgICAg IHJlY29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF9hcmNoX2xpc3RfdGFpbCk7 CisgICAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IHJlY29yZCBtZXNz YWdlIGVycm9yLiIpKTsKKyAgICB9CisgIHJlY29yZF9saXN0LT5uZXh0ID0g cmVjb3JkX2FyY2hfbGlzdF9oZWFkOworICByZWNvcmRfYXJjaF9saXN0X2hl YWQtPnByZXYgPSByZWNvcmRfbGlzdDsKKyAgcmVjb3JkX2xpc3QgPSByZWNv cmRfYXJjaF9saXN0X3RhaWw7CisKKyAgaWYgKHJlY29yZF9pbnNuX251bSA9 PSByZWNvcmRfaW5zbl9tYXhfbnVtICYmIHJlY29yZF9pbnNuX21heF9udW0p CisgICAgeworICAgICAgcmVjb3JkX2xpc3RfcmVsZWFzZV9maXJzdCAoKTsK KyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByZWNvcmRfaW5zbl9udW0r KzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRfc3RvcmVfcmVn aXN0ZXJzIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8p Cit7CisgIGlmICghcmVjb3JkX25vdF9yZWNvcmQpCisgICAgeworICAgICAg aWYgKFJFQ09SRF9JU19SRVBMQVkpCisJeworCSAgaW50IG47CisJICBzdHJ1 Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBzOworCisJICAvKiBMZXQgdXNlciBj aG9pY2UgaWYgaGUgd2FudCB0byB3cml0ZSByZWdpc3RlciBvciBub3QuICAq LworCSAgaWYgKHJlZ25vIDwgMCkKKwkgICAgeworCSAgICAgIG4gPQorCQlu cXVlcnkgKF8KKwkJCSgiQmVjdXNlIEdEQiBpcyBpbiByZXBsYXkgbW9kZSwg Y2hhbmdpbmcgdGhlIHZhbHVlIG9mIGEgcmVnaXN0ZXIgd2lsbCBkZXN0cm95 IHRoZSByZWNvcmQgZnJvbSB0aGlzIHBvaW50IGZvcndhcmQuIENoYW5nZSBh bGwgcmVnaXN0ZXI/IikpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkg ICAgICBuID0KKwkJbnF1ZXJ5IChfCisJCQkoIkJlY3VzZSBHREIgaXMgaW4g cmVwbGF5IG1vZGUsIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBhIHJlZ2lzdGVy IHdpbGwgZGVzdHJveSB0aGUgcmVjb3JkIGZyb20gdGhpcyBwb2ludCBmb3J3 YXJkLiBDaGFuZ2UgcmVnaXN0ZXIgJXM/IiksCisJCQlnZGJhcmNoX3JlZ2lz dGVyX25hbWUgKGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSksCisJCQkJ CSAgICAgICByZWdubykpOworCSAgICB9CisKKwkgIGlmICghbikKKwkgICAg eworCSAgICAgIC8qIEludmFsaWRhdGUgdGhlIHZhbHVlIG9mIHJlZ2NhY2hl IHRoYXQgc2V0IGluIGZ1bmN0aW9uCisJICAgICAgICAgInJlZ2NhY2hlX3Jh d193cml0ZSIuICovCisJICAgICAgaWYgKHJlZ25vIDwgMCkKKwkJeworCQkg IGludCBpOworCQkgIGZvciAoaSA9IDA7CisJCSAgICAgICBpIDwgZ2RiYXJj aF9udW1fcmVncyAoZ2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKSk7CisJ CSAgICAgICBpKyspCisJCSAgICB7CisJCSAgICAgIHJlZ2NhY2hlX2ludmFs aWRhdGUgKHJlZ2NhY2hlLCBpKTsKKwkJICAgIH0KKwkJfQorCSAgICAgIGVs c2UKKwkJeworCQkgIHJlZ2NhY2hlX2ludmFsaWRhdGUgKHJlZ2NhY2hlLCBy ZWdubyk7CisJCX0KKworCSAgICAgIGVycm9yIChfKCJQcm9jZXNzIHJlY29y ZCBjYW5jZWwgdGhlIG9wZXJhdGlvbi4iKSk7CisJICAgIH0KKworCSAgLyog RGVzdHJveSB0aGUgcmVjb3JkIGZyb20gaGVyZSBmb3J3YXJkLiAgKi8KKwkg IHJlY29yZF9saXN0X3JlbGVhc2VfbmV4dCAoKTsKKwl9CisKKyAgICAgIHJl Y29yZF9yZWdpc3RlcnNfY2hhbmdlIChyZWdjYWNoZSwgcmVnbm8pOworICAg IH0KKyAgcmVjb3JkX2JlbmVhdGhfdG9fc3RvcmVfcmVnaXN0ZXJzIChyZWdj YWNoZSwgcmVnbm8pOworfQorCisvKiByZWNvcmRfeGZlcl9wYXJ0aWFsIC0t IGJlaGF2aW9yIGlzIGNvbmRpdGlvbmFsIG9uIFJFQ09SRF9JU19SRVBMQVku CisgICBJbiByZXBsYXkgbW9kZSwgd2UgY2Fubm90IHdyaXRlIG1lbW9yeSB1 bmxlcyB3ZSBhcmUgd2lsbGluZyB0byAKKyAgIGludmFsaWRhdGUgdGhlIHJl Y29yZC9yZXBsYXkgbG9nIGZyb20gdGhpcyBwb2ludCBmb3J3YXJkLiAgKi8K Kworc3RhdGljIExPTkdFU1QKK3JlY29yZF94ZmVyX3BhcnRpYWwgKHN0cnVj dCB0YXJnZXRfb3BzICpvcHMsIGVudW0gdGFyZ2V0X29iamVjdCBvYmplY3Qs CisJCSAgICAgY29uc3QgY2hhciAqYW5uZXgsIGdkYl9ieXRlICogcmVhZGJ1 ZiwKKwkJICAgICBjb25zdCBnZGJfYnl0ZSAqIHdyaXRlYnVmLCBVTE9OR0VT VCBvZmZzZXQsIExPTkdFU1QgbGVuKQoreworICBpZiAoIXJlY29yZF9ub3Rf cmVjb3JkCisgICAgICAmJiAob2JqZWN0ID09IFRBUkdFVF9PQkpFQ1RfTUVN T1JZCisJICB8fCBvYmplY3QgPT0gVEFSR0VUX09CSkVDVF9SQVdfTUVNT1JZ KSAmJiB3cml0ZWJ1ZikKKyAgICB7CisgICAgICBpZiAoUkVDT1JEX0lTX1JF UExBWSkKKwl7CisJICAvKiBMZXQgdXNlciBjaG9pY2UgaWYgaGUgd2FudCB0 byB3cml0ZSBtZW1vcnkgb3Igbm90LiAgKi8KKwkgIGlmICghbnF1ZXJ5IChf KCJCZWNhdXNlIEdEQiBpcyBpbiByZXBsYXkgbW9kZSwgd3JpdGluZyB0byBt ZW1vcnkgd2lsbCBkZXN0cm95IHRoZSByZWNvcmQgZnJvbSB0aGlzIHBvaW50 IGZvcndhcmQuICBXcml0ZSBtZW1vcnkgYXQgYWRkcmVzcyAweCVzPyIpLAor CQkgICAgICAgcGFkZHJfbnogKG9mZnNldCkpKQorCSAgICB7CisJICAgICAg cmV0dXJuIC0xOworCSAgICB9CisKKwkgIC8qIERlc3Ryb3kgdGhlIHJlY29y ZCBmcm9tIGhlcmUgZm9yd2FyZC4gICovCisJICByZWNvcmRfbGlzdF9yZWxl YXNlX25leHQgKCk7CisJfQorCisgICAgICAvKiBDaGVjayByZWNvcmRfaW5z bl9udW0gKi8KKyAgICAgIHJlY29yZF9jaGVja19pbnNuX251bSAoMCk7CisK KyAgICAgIC8qIFJlY29yZCByZWdpc3RlcnMgY2hhbmdlIHRvIGxpc3QgYXMg YW4gaW5zdHJ1Y3Rpb24uICAqLworICAgICAgcmVjb3JkX2FyY2hfbGlzdF9o ZWFkID0gTlVMTDsKKyAgICAgIHJlY29yZF9hcmNoX2xpc3RfdGFpbCA9IE5V TEw7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChvZmZz ZXQsIGxlbikpCisJeworCSAgcmVjb3JkX2xpc3RfcmVsZWFzZSAocmVjb3Jk X2FyY2hfbGlzdF90YWlsKTsKKwkgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywgXygiUHJvY2VzcyByZWNvcmQ6IHJlY29yZCBtZXNzYWdlIGVy cm9yLiIpKTsKKwkgIHJldHVybiAtMTsKKwl9CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfZW5kICgwKSkKKwl7CisJICByZWNvcmRfbGlzdF9y ZWxlYXNlIChyZWNvcmRfYXJjaF9saXN0X3RhaWwpOworCSAgZnByaW50Zl91 bmZpbHRlcmVkIChnZGJfc3RkbG9nLCBfKCJQcm9jZXNzIHJlY29yZDogcmVj b3JkIG1lc3NhZ2UgZXJyb3IuIikpOworCSAgcmV0dXJuIC0xOworCX0KKyAg ICAgIHJlY29yZF9saXN0LT5uZXh0ID0gcmVjb3JkX2FyY2hfbGlzdF9oZWFk OworICAgICAgcmVjb3JkX2FyY2hfbGlzdF9oZWFkLT5wcmV2ID0gcmVjb3Jk X2xpc3Q7CisgICAgICByZWNvcmRfbGlzdCA9IHJlY29yZF9hcmNoX2xpc3Rf dGFpbDsKKworICAgICAgaWYgKHJlY29yZF9pbnNuX251bSA9PSByZWNvcmRf aW5zbl9tYXhfbnVtICYmIHJlY29yZF9pbnNuX21heF9udW0pCisJeworCSAg cmVjb3JkX2xpc3RfcmVsZWFzZV9maXJzdCAoKTsKKwl9CisgICAgICBlbHNl CisJeworCSAgcmVjb3JkX2luc25fbnVtKys7CisJfQorICAgIH0KKworICBy ZXR1cm4gcmVjb3JkX2JlbmVhdGhfdG9feGZlcl9wYXJ0aWFsIChvcHMsIG9i amVjdCwgYW5uZXgsIHJlYWRidWYsCisJCQkJCSB3cml0ZWJ1Ziwgb2Zmc2V0 LCBsZW4pOworfQorCisvKiByZWNvcmRfaW5zZXJ0X2JyZWFrcG9pbnQKKyAg IHJlY29yZF9yZW1vdmVfYnJlYWtwb2ludAorICAgQmVoYXZpb3IgaXMgY29u ZGl0aW9uYWwgb24gUkVDT1JEX0lTX1JFUExBWS4KKyAgIFdlIHdpbGwgbm90 IGFjdHVhbGx5IGluc2VydCBvciByZW1vdmUgYnJlYWtwb2ludHMgd2hlbiBy ZXBsYXlpbmcuICAqLworCitzdGF0aWMgaW50CityZWNvcmRfaW5zZXJ0X2Jy ZWFrcG9pbnQgKHN0cnVjdCBicF90YXJnZXRfaW5mbyAqYnBfdGd0KQorewor ICBpZiAoIVJFQ09SRF9JU19SRVBMQVkpCisgICAgeworICAgICAgcmV0dXJu IHJlY29yZF9iZW5lYXRoX3RvX2luc2VydF9icmVha3BvaW50IChicF90Z3Qp OworICAgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVj b3JkX3JlbW92ZV9icmVha3BvaW50IChzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8g KmJwX3RndCkKK3sKKyAgaWYgKCFSRUNPUkRfSVNfUkVQTEFZKQorICAgIHsK KyAgICAgIHJldHVybiByZWNvcmRfYmVuZWF0aF90b19yZW1vdmVfYnJlYWtw b2ludCAoYnBfdGd0KTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQKK3JlY29yZF9jYW5fZXhlY3V0ZV9yZXZlcnNlICh2b2lkKQor eworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2luaXRfcmVjb3Jk X29wcyAodm9pZCkKK3sKKyAgcmVjb3JkX29wcy50b19zaG9ydG5hbWUgPSAi cmVjb3JkIjsKKyAgcmVjb3JkX29wcy50b19sb25nbmFtZSA9ICJQcm9jZXNz IHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCI7CisgIHJlY29yZF9vcHMudG9f ZG9jID0KKyAgICAiTG9nIHByb2dyYW0gd2hpbGUgZXhlY3V0aW5nIGFuZCBy ZXBsYXkgZXhlY3V0aW9uIGZyb20gbG9nLiI7CisgIHJlY29yZF9vcHMudG9f b3BlbiA9IHJlY29yZF9vcGVuOworICByZWNvcmRfb3BzLnRvX2Nsb3NlID0g cmVjb3JkX2Nsb3NlOworICByZWNvcmRfb3BzLnRvX3Jlc3VtZSA9IHJlY29y ZF9yZXN1bWU7CisgIHJlY29yZF9vcHMudG9fd2FpdCA9IHJlY29yZF93YWl0 OworICByZWNvcmRfb3BzLnRvX2Rpc2Nvbm5lY3QgPSByZWNvcmRfZGlzY29u bmVjdDsKKyAgcmVjb3JkX29wcy50b19kZXRhY2ggPSByZWNvcmRfZGV0YWNo OworICByZWNvcmRfb3BzLnRvX21vdXJuX2luZmVyaW9yID0gcmVjb3JkX21v dXJuX2luZmVyaW9yOworICByZWNvcmRfb3BzLnRvX2tpbGwgPSByZWNvcmRf a2lsbDsKKyAgcmVjb3JkX29wcy50b19jcmVhdGVfaW5mZXJpb3IgPSBmaW5k X2RlZmF1bHRfY3JlYXRlX2luZmVyaW9yOwkvKiBNYWtlIHJlY29yZCBzdXBw cG9ydCBjb21tYW5kICJydW4iLiAgKi8KKyAgcmVjb3JkX29wcy50b19zdG9y ZV9yZWdpc3RlcnMgPSByZWNvcmRfc3RvcmVfcmVnaXN0ZXJzOworICByZWNv cmRfb3BzLnRvX3hmZXJfcGFydGlhbCA9IHJlY29yZF94ZmVyX3BhcnRpYWw7 CisgIHJlY29yZF9vcHMudG9faW5zZXJ0X2JyZWFrcG9pbnQgPSByZWNvcmRf aW5zZXJ0X2JyZWFrcG9pbnQ7CisgIHJlY29yZF9vcHMudG9fcmVtb3ZlX2Jy ZWFrcG9pbnQgPSByZWNvcmRfcmVtb3ZlX2JyZWFrcG9pbnQ7CisgIHJlY29y ZF9vcHMudG9fY2FuX2V4ZWN1dGVfcmV2ZXJzZSA9IHJlY29yZF9jYW5fZXhl Y3V0ZV9yZXZlcnNlOworICByZWNvcmRfb3BzLnRvX3N0cmF0dW0gPSByZWNv cmRfc3RyYXR1bTsKKyAgcmVjb3JkX29wcy50b19tYWdpYyA9IE9QU19NQUdJ QzsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfcmVjb3JkX2RlYnVnIChzdHJ1 Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5LAorCQkgICBzdHJ1Y3Qg Y21kX2xpc3RfZWxlbWVudCAqYywgY29uc3QgY2hhciAqdmFsdWUpCit7Cisg IGZwcmludGZfZmlsdGVyZWQgKGZpbGUsIF8oIkRlYnVnZ2luZyBvZiBwcm9j ZXNzIHJlY29yZCB0YXJnZXQgaXMgJXMuXG4iKSwgdmFsdWUpOworfQorCisv KiBjbWRfcmVjb3JkX3N0YXJ0IC0tIGFsaWFzIGZvciAidGFyZ2V0IHJlY29y ZCIuICAqLworCitzdGF0aWMgdm9pZAorY21kX3JlY29yZF9zdGFydCAoY2hh ciAqYXJncywgaW50IGZyb21fdHR5KQoreworICBleGVjdXRlX2NvbW1hbmQg KCJ0YXJnZXQgcmVjb3JkIiwgZnJvbV90dHkpOworfQorCisvKiBjbWRfcmVj b3JkX2RlbGV0ZSAtLSB0cnVuY2F0ZSB0aGUgcmVjb3JkIGxvZyBmcm9tIHRo ZSBwcmVzZW50IHBvaW50CisgICBvZiByZXBsYXkgdW50aWwgdGhlIGVuZC4g ICovCisKK3N0YXRpYyB2b2lkCitjbWRfcmVjb3JkX2RlbGV0ZSAoY2hhciAq YXJncywgaW50IGZyb21fdHR5KQoreworICBpZiAoUkVDT1JEX0lTX1VTRUQp CisgICAgeworICAgICAgaWYgKFJFQ09SRF9JU19SRVBMQVkpCisJeworCSAg aWYgKCFmcm9tX3R0eSB8fCBxdWVyeSAoXygiUHJvY2VzcyByZWNvcmQ6IGRl bGV0ZSB0aGUgbG9nIGZyb20gdGhpcyBwb2ludCBmb3J3YXJkIGFuZCBiZWdp biB0byByZWNvcmQgdGhlIHJ1bm5pbmcgbWVzc2FnZSBhdCBjdXJyZW50IFBD PyIpKSkKKwkgICAgeworCSAgICAgIHJlY29yZF9saXN0X3JlbGVhc2VfbmV4 dCAoKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBwcmludGZf dW5maWx0ZXJlZCAoXygiUHJvY2VzcyByZWNvcmQ6IGFscmVhZHkgYXQgZW5k IG9mIHJlY29yZCBsaXN0LlxuIikpOworCX0KKworICAgIH0KKyAgZWxzZQor ICAgIHsKKyAgICAgIHByaW50Zl91bmZpbHRlcmVkIChfKCJQcm9jZXNzIHJl Y29yZCBpcyBub3Qgc3RhcnRlZC5cbiIpKTsKKyAgICB9Cit9CisKKy8qIGNt ZF9yZWNvcmRfc3RvcCAtLSBpbXBsZW1lbnQgdGhlICJzdG9wcmVjb3JkIiBj b21tYW5kLiAgKi8KKworc3RhdGljIHZvaWQKK2NtZF9yZWNvcmRfc3RvcCAo Y2hhciAqYXJncywgaW50IGZyb21fdHR5KQoreworICBpZiAoUkVDT1JEX0lT X1VTRUQpCisgICAgeworICAgICAgaWYgKCFyZWNvcmRfbGlzdCB8fCAhZnJv bV90dHkgfHwgcXVlcnkgKF8oIlByb2Nlc3MgcmVjb3JkOiBkZWxldGUgcmVj b3JkZWQgbG9nIGFuZCBzdG9wIHJlY29yZGluZz8iKSkpCisJeworCSAgdW5w dXNoX3RhcmdldCAoJnJlY29yZF9vcHMpOworCX0KKyAgICB9CisgIGVsc2UK KyAgICB7CisgICAgICBwcmludGZfdW5maWx0ZXJlZCAoXygiUHJvY2VzcyBy ZWNvcmQgaXMgbm90IHN0YXJ0ZWQuXG4iKSk7CisgICAgfQorfQorCisvKiBz ZXRfcmVjb3JkX2luc25fbWF4X251bSAtLSBzZXQgdXBwZXIgbGltaXQgb2Yg cmVjb3JkIGxvZyBzaXplLiAgKi8KKworc3RhdGljIHZvaWQKK3NldF9yZWNv cmRfaW5zbl9tYXhfbnVtIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHksIHN0 cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjKQoreworICBpZiAocmVjb3JkX2lu c25fbnVtID4gcmVjb3JkX2luc25fbWF4X251bSAmJiByZWNvcmRfaW5zbl9t YXhfbnVtKQorICAgIHsKKyAgICAgIHByaW50Zl91bmZpbHRlcmVkIChfKCJQ cm9jZXNzIHJlY29yZDogcmVjb3JkIGluc3RydWN0aW9ucyBudW1iZXIgaXMg YmlnZ2VyIHRoYW4gcmVjb3JkIGluc3RydWN0aW9ucyBtYXggbnVtYmVyLiAg QXV0byBkZWxldGUgdGhlIGZpcnN0IG9uZXMuXG4iKSk7CisKKyAgICAgIHdo aWxlIChyZWNvcmRfaW5zbl9udW0gPiByZWNvcmRfaW5zbl9tYXhfbnVtKQor CXsKKwkgIHJlY29yZF9saXN0X3JlbGVhc2VfZmlyc3QgKCk7CisJfQorICAg IH0KK30KKworLyogc2hvd19yZWNvcmRfaW5zbl9udW1iZXIgLS0gcHJpbnQg dGhlIGN1cnJlbnQgaW5kZXgKKyAgIGludG8gdGhlIHJlY29yZCBsb2cgKG51 bWJlciBvZiBpbnNucyByZWNvcmRlZCBzbyBmYXIpLiAgKi8KKworc3RhdGlj IHZvaWQKK3Nob3dfcmVjb3JkX2luc25fbnVtYmVyIChjaGFyICppZ25vcmUs IGludCBmcm9tX3R0eSkKK3sKKyAgcHJpbnRmX3VuZmlsdGVyZWQgKF8oIlJl Y29yZCBpbnN0cnVjdGlvbiBudW1iZXIgaXMgJWQuXG4iKSwKKwkJICAgICBy ZWNvcmRfaW5zbl9udW0pOworfQorCit2b2lkCitfaW5pdGlhbGl6ZV9yZWNv cmQgKHZvaWQpCit7CisgIC8qIEluaXQgcmVjb3JkX21hc2thbGwuICAqLwor ICBpZiAoc2lnZmlsbHNldCAoJnJlY29yZF9tYXNrYWxsKSA9PSAtMSkKKyAg ICB7CisgICAgICBwZXJyb3Jfd2l0aF9uYW1lIChfKCJQcm9jZXNzIHJlY29y ZDogc2lnZmlsbHNldCIpKTsKKyAgICB9CisKKyAgLyogSW5pdCByZWNvcmRf Zmlyc3QuICAqLworICByZWNvcmRfZmlyc3QucHJldiA9IE5VTEw7CisgIHJl Y29yZF9maXJzdC5uZXh0ID0gTlVMTDsKKyAgcmVjb3JkX2ZpcnN0LnR5cGUg PSByZWNvcmRfZW5kOworICByZWNvcmRfZmlyc3QudS5uZWVkX2Rhc20gPSAw OworCisgIGluaXRfcmVjb3JkX29wcyAoKTsKKyAgYWRkX3RhcmdldCAoJnJl Y29yZF9vcHMpOworCisgIGFkZF9zZXRzaG93X3ppbnRlZ2VyX2NtZCAoInJl Y29yZCIsIG5vX2NsYXNzLCAmcmVjb3JkX2RlYnVnLAorCQkJICAgIF8oIlNl dCBkZWJ1Z2dpbmcgb2YgcmVjb3JkL3JlcGxheSBmZWF0dXJlLiIpLAorCQkJ ICAgIF8oIlNob3cgZGVidWdnaW5nIG9mIHJlY29yZC9yZXBsYXkgZmVhdHVy ZS4iKSwKKwkJCSAgICBfCisJCQkgICAgKCJXaGVuIGVuYWJsZWQsIGRlYnVn Z2luZyBvdXRwdXQgZm9yIHJlY29yZC9yZXBsYXkgZmVhdHVyZSBpcyBkaXNw bGF5ZWQuIiksCisJCQkgICAgTlVMTCwgc2hvd19yZWNvcmRfZGVidWcsICZz ZXRkZWJ1Z2xpc3QsCisJCQkgICAgJnNob3dkZWJ1Z2xpc3QpOworCisgIGFk ZF9jb20gKCJyZWNvcmQiLCBjbGFzc19vYnNjdXJlLCBjbWRfcmVjb3JkX3N0 YXJ0LAorCSAgIF8oIkFiYnJldmlhdGVkIGZvcm0gb2YgXCJ0YXJnZXQgcmVj b3JkXCIgY29tbWFuZC4iKSk7CisKKyAgYWRkX2NvbV9hbGlhcyAoInJlYyIs ICJyZWNvcmQiLCBjbGFzc19vYnNjdXJlLCAxKTsKKworICAvKiBYWFg6IEkg dHJ5IHRvIHVzZSBzb21lIHNpbXBsZSBjb21tYW5kcyBzdWNoIGFzICJkaXNj b25uZWN0IiBhbmQKKyAgICAgImRldGFjaCIgdG8gc3VwcG9ydCB0aGlzIGZ1 bmN0aW9ucy4gIEJ1dCB0aGVzZSBjb21tYW5kcyBhbGwgaGF2ZQorICAgICBv dGhlciBhZmZlY3QgdG8gR0RCIHN1Y2ggYXMgY2FsbCBmdW5jdGlvbiAibm9f c2hhcmVkX2xpYnJhcmllcyIuCisgICAgIFNvIEkgYWRkIHNwZWNpYWwgY29t bWFuZHMgdG8gR0RCLiAgKi8KKyAgYWRkX2NvbSAoImRlbHJlY29yZCIsIGNs YXNzX29ic2N1cmUsIGNtZF9yZWNvcmRfZGVsZXRlLAorCSAgIF8oIldoZW4g cHJvY2VzcyByZWNvcmQgdGFyZ2V0IHJ1bm5pbmcgaW4gcmVwbGF5IG1vZGUs IGRlbGV0ZSB0aGUgbmV4dCBydW5uaW5nIG1lc3NhZ2VzIGFuZCBiZWdpbiB0 byByZWNvcmQgdGhlIHJ1bm5pbmcgbWVzc2FnZSBhdCBjdXJyZW50IGFkZHJl c3MuIikpOworICBhZGRfY29tX2FsaWFzICgiZHIiLCAiZGVscmVjb3JkIiwg Y2xhc3Nfb2JzY3VyZSwgMSk7CisgIGFkZF9jb20gKCJzdG9wcmVjb3JkIiwg Y2xhc3Nfb2JzY3VyZSwgY21kX3JlY29yZF9zdG9wLAorCSAgIF8oIlN0b3Ag dGhlIHJlY29yZC9yZXBsYXkgdGFyZ2V0LiIpKTsKKyAgYWRkX2NvbV9hbGlh cyAoInNyIiwgInN0b3ByZWNvcmQiLCBjbGFzc19vYnNjdXJlLCAxKTsKKwor ICAvKiBSZWNvcmQgaW5zdHJ1Y3Rpb25zIG51bWJlciBsaW1pdCBjb21tYW5k LiAgKi8KKyAgYWRkX3NldHNob3dfYm9vbGVhbl9jbWQgKCJyZWNvcmQtc3Rv cC1hdC1saW1pdCIsIG5vX2NsYXNzLAorCQkJICAgICZyZWNvcmRfc3RvcF9h dF9saW1pdCwKKwkJCSAgICBfKCJTZXQgcmVjb3JkL3JlcGxheSBzdG9wIHdo ZW4gcmVjb3JkL3JlcGxheSBidWZmZXIgYmVjb21lcyBmdWxsLiIpLAorCQkJ ICAgIF8oIlNob3cgcmVjb3JkL3JlcGxheSBzdG9wIHdoZW4gcmVjb3JkL3Jl cGxheSBidWZmZXIgYmVjb21lcyBmdWxsLiIpLCBfKCJcCitFbmFibGUgaXMg ZGVmYXVsdCB2YWx1ZS5cblwKK1doZW4gZW5hYmxlLCBpZiB0aGUgcmVjb3Jk L3JlcGxheSBidWZmZXIgYmVjb21lcyBmdWxsLFxuXAorYXNrIHVzZXIgaG93 IHRvIGRvLlxuXAorV2hlbiBkaXNhYmxlLCBpZiB0aGUgcmVjb3JkL3JlcGxh eSBidWZmZXIgYmVjb21lcyBmdWxsLFxuXAorZGVsZXRlIGl0IGFuZCBzdGFy dCBuZXcgcmVjb3JkaW5nLiIpLCBOVUxMLCBOVUxMLCAmc2V0bGlzdCwgJnNo b3dsaXN0KTsKKyAgYWRkX3NldHNob3dfemludGVnZXJfY21kICgicmVjb3Jk LWluc24tbnVtYmVyLW1heCIsIG5vX2NsYXNzLAorCQkJICAgICZyZWNvcmRf aW5zbl9tYXhfbnVtLAorCQkJICAgIF8oIlNldCByZWNvcmQvcmVwbGF5IGJ1 ZmZlciBsaW1pdC4iKSwKKwkJCSAgICBfKCJTaG93IHJlY29yZC9yZXBsYXkg YnVmZmVyIGxpbWl0LiIpLCBfKCJcCitTZXQgdGhlIG1heGltdW0gbnVtYmVy IG9mIGluc3RydWN0aW9ucyB0byBiZSBzdG9yZWQgaW4gdGhlXG5cCityZWNv cmQvcmVwbGF5IGJ1ZmZlci4gIFplcm8gbWVhbnMgdW5saW1pdGVkIChkZWZh dWx0IDIwMDAwMCkuIiksIAorCQkJICAgIHNldF9yZWNvcmRfaW5zbl9tYXhf bnVtLCAKKwkJCSAgICBOVUxMLCAmc2V0bGlzdCwgJnNob3dsaXN0KTsKKyAg YWRkX2luZm8gKCJyZWNvcmQtaW5zbi1udW1iZXIiLCBzaG93X3JlY29yZF9p bnNuX251bWJlciwgXygiXAorU2hvdyB0aGUgY3VycmVudCBudW1iZXIgb2Yg aW5zdHJ1Y3Rpb25zIGluIHRoZSByZWNvcmQvcmVwbGF5IGJ1ZmZlci4iKSk7 Cit9Ci0tLSBhL3JlY29yZC5oCisrKyBiL3JlY29yZC5oCkBAIC0wLDAgKzEs OTkgQEAKKy8qIFByb2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0IGZv ciBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisKKyAgIENvcHlyaWdodCAoQykg MjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhp cyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2Yg dGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uICAqLworCisjaWZuZGVmIF9SRUNPUkRfSF8KKyNkZWZpbmUgX1JFQ09S RF9IXworCisjZGVmaW5lIFJFQ09SRF9JU19VU0VEICAgXAorICAgICAoY3Vy cmVudF90YXJnZXQuYmVuZWF0aCA9PSAmcmVjb3JkX29wcykKKyNkZWZpbmUg UkVDT1JEX0lTX1JFUExBWSBcCisgICAgIChyZWNvcmRfbGlzdC0+bmV4dCB8 fCBleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRSkKKwordHlw ZWRlZiBzdHJ1Y3QgcmVjb3JkX3JlZ19zCit7CisgIGludCBudW07CisgIGdk Yl9ieXRlICp2YWw7Cit9IHJlY29yZF9yZWdfdDsKKwordHlwZWRlZiBzdHJ1 Y3QgcmVjb3JkX21lbV9zCit7CisgIENPUkVfQUREUiBhZGRyOworICBpbnQg bGVuOworICBnZGJfYnl0ZSAqdmFsOworfSByZWNvcmRfbWVtX3Q7CisKK2Vu dW0gcmVjb3JkX3R5cGUKK3sKKyAgcmVjb3JkX2VuZCA9IDAsCisgIHJlY29y ZF9yZWcsCisgIHJlY29yZF9tZW0KK307CisKKy8qIFRoaXMgaXMgdGhlIGNv cmUgc3RydWN0IG9mIHJlY29yZCBmdW5jdGlvbi4KKyAgIEFuIGVudGl0eSBv ZiByZWNvcmRfdCBpcyBhIHJlY29yZCBvZiB0aGUgdmFsdWUgY2hhbmdlIG9m IGEgcmVnaXN0ZXIKKyAgICgicmVjb3JkX3JlZyIpIG9yIGEgcGFydCBvZiBt ZW1vcnkgKCJyZWNvcmRfbWVtIikuIEFuZCBFYWNoIGluc3RydWN0aW9uIG11 c3QKKyAgIGhhcyBhIHJlY29yZF90ICgicmVjb3JkX2VuZCIpIHRoYXQgcG9p bnQgb3V0IHRoaXMgaXMgdGhlIGxhc3QgcmVjb3JkX3Qgb2YKKyAgIHRoaXMg aW5zdHJ1Y3Rpb24uCisgICBFYWNoIHJlY29yZF90IGlzIGxpbmtlZCB0byAi cmVjb3JkX2xpc3QiIGJ5ICJwcmV2IiBhbmQgIm5leHQiLiAKKyAqLwordHlw ZWRlZiBzdHJ1Y3QgcmVjb3JkX3MKK3sKKyAgc3RydWN0IHJlY29yZF9zICpw cmV2OworICBzdHJ1Y3QgcmVjb3JkX3MgKm5leHQ7CisgIGVudW0gcmVjb3Jk X3R5cGUgdHlwZTsKKyAgdW5pb24KKyAgeworICAgIC8qIHJlZyAqLworICAg IHJlY29yZF9yZWdfdCByZWc7CisgICAgLyogbWVtICovCisgICAgcmVjb3Jk X21lbV90IG1lbTsKKyAgICAvKiBlbmQgKi8KKyAgICBpbnQgbmVlZF9kYXNt OworICB9IHU7Cit9IHJlY29yZF90OworCitleHRlcm4gaW50IHJlY29yZF9k ZWJ1ZzsKK2V4dGVybiByZWNvcmRfdCAqcmVjb3JkX2xpc3Q7CitleHRlcm4g cmVjb3JkX3QgKnJlY29yZF9hcmNoX2xpc3RfaGVhZDsKK2V4dGVybiByZWNv cmRfdCAqcmVjb3JkX2FyY2hfbGlzdF90YWlsOworZXh0ZXJuIHN0cnVjdCBy ZWdjYWNoZSAqcmVjb3JkX3JlZ2NhY2hlOworCitleHRlcm4gc3RydWN0IHRh cmdldF9vcHMgcmVjb3JkX29wczsKK2V4dGVybiBpbnQgcmVjb3JkX3Jlc3Vt ZV9zdGVwOworCitleHRlcm4gaW50IHJlY29yZF9hcmNoX2xpc3RfYWRkX3Jl ZyAoaW50IG51bSk7CitleHRlcm4gaW50IHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAoQ09SRV9BRERSIGFkZHIsIGludCBsZW4pOworZXh0ZXJuIGludCBy ZWNvcmRfYXJjaF9saXN0X2FkZF9lbmQgKGludCBuZWVkX2Rhc20pOworZXh0 ZXJuIHZvaWQgcmVjb3JkX21lc3NhZ2UgKHN0cnVjdCBnZGJhcmNoICpnZGJh cmNoKTsKK2V4dGVybiB2b2lkIHJlY29yZF9ub3RfcmVjb3JkX3NldCAodm9p ZCk7CisKK2V4dGVybiB2b2lkICgqcmVjb3JkX2JlbmVhdGhfdG9fcmVzdW1l KSAocHRpZF90LCBpbnQsIGVudW0gdGFyZ2V0X3NpZ25hbCk7CitleHRlcm4g cHRpZF90ICgqcmVjb3JkX2JlbmVhdGhfdG9fd2FpdCkgKHB0aWRfdCwgc3Ry dWN0IHRhcmdldF93YWl0c3RhdHVzICopOworZXh0ZXJuIHZvaWQgKCpyZWNv cmRfYmVuZWF0aF90b19zdG9yZV9yZWdpc3RlcnMpIChzdHJ1Y3QgcmVnY2Fj aGUgKiwgaW50IHJlZ25vKTsKK2V4dGVybiBMT05HRVNUICgqcmVjb3JkX2Jl bmVhdGhfdG9feGZlcl9wYXJ0aWFsKSAoc3RydWN0IHRhcmdldF9vcHMgKiBv cHMsCisJCQkJCQkgIGVudW0gdGFyZ2V0X29iamVjdCBvYmplY3QsCisJCQkJ CQkgIGNvbnN0IGNoYXIgKmFubmV4LAorCQkJCQkJICBnZGJfYnl0ZSAqIHJl YWRidWYsCisJCQkJCQkgIGNvbnN0IGdkYl9ieXRlICogd3JpdGVidWYsCisJ CQkJCQkgIFVMT05HRVNUIG9mZnNldCwKKwkJCQkJCSAgTE9OR0VTVCBsZW4p OworZXh0ZXJuIGludCAoKnJlY29yZF9iZW5lYXRoX3RvX2luc2VydF9icmVh a3BvaW50KSAoc3RydWN0IGJwX3RhcmdldF9pbmZvICopOworZXh0ZXJuIGlu dCAoKnJlY29yZF9iZW5lYXRoX3RvX3JlbW92ZV9icmVha3BvaW50KSAoc3Ry dWN0IGJwX3RhcmdldF9pbmZvICopOworCisjZW5kaWYgLyogX1JFQ09SRF9I XyAqLwo= ------=_Part_24848_1062256.1225957601305--