From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27942 invoked by alias); 13 Jan 2009 03:06:46 -0000 Received: (qmail 27929 invoked by uid 22791); 13 Jan 2009 03:06:42 -0000 X-SWARE-Spam-Status: No, hits=-0.4 required=5.0 tests=AWL,BAYES_50,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from rv-out-0708.google.com (HELO rv-out-0708.google.com) (209.85.198.245) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 13 Jan 2009 03:06:12 +0000 Received: by rv-out-0708.google.com with SMTP id b17so10663509rvf.48 for ; Mon, 12 Jan 2009 19:06:10 -0800 (PST) MIME-Version: 1.0 Received: by 10.110.86.3 with SMTP id j3mr11266686tib.32.1231815968841; Mon, 12 Jan 2009 19:06:08 -0800 (PST) In-Reply-To: References: Date: Tue, 13 Jan 2009 03:06:00 -0000 Message-ID: Subject: Re: [RFA] Submit process record and replay third time, 3/9 From: teawater To: "gdb-patches@sourceware.org" Content-Type: multipart/mixed; boundary=0016e651fac2405f3f0460548111 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: 2009-01/txt/msg00267.txt.bz2 --0016e651fac2405f3f0460548111 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 2689 Update follow the cvs-head. On Thu, Jan 8, 2009 at 13:46, teawater wrote: > > This patch add the process record and replay target. This is the core > part of process record and replay. > > 2009-01-08 Hui Zhu > > Process record and replay target. > > * Makefile.in (record.c): New file. > * record.c, record.h: New file. > > 2008-12-28 Michael Snyder > * Comments, spelling, white space clean-ups. > > 2008-12-26 Michael Snyder > * record.h: Don't export record_not_record. > * record.c (record_not_record): Rename to in_record_wait. > (record_not_record_set): Rename to in_record_wait_set. > (record_not_record_cleanup): Rename to in_record_wait_cleanup. > (record_store_registers): Check in_record_wait flag. > (record_xfer_partial): Ditto. > > 2008-10-07 Michael Snyder > * record.h (record_exec_direction): Delete. > (RECORD_IS_REPLAY): Consult infrun global direction variable. > * record.c: (record_wait_cleanups): Use infrun state variable. > (record_wait): Ditto. > (record_get_exec_direction, record_set_exec_direction): Remove. > (record_can_execute_reverse): New target method. > > 2008-10-06 Michael Snyder > * record.c (displaced_step_fixup): Remove. > (record_message_cleanups): Remove displaced step handling. > (record_message): Remove displaced step handling. > > 2008-10-06 Michael Snyder > * record.c (record_regcache_raw_write_regnum): Remove. > > 2008-10-05 Michael Snyder > * record.c, record.h: Rename execdir to exec_direction. > > 2008-10-02 Michael Snyder > * record.c (record_open): Call target_can_async_p() instead > of relying on a global variable. > * record.h (record_linux_async_permitted): Delete. > > 2008-09-19 Michael Snyder > * record.c (trivial): Fix two commas in a comment. > * record.c (record_wait): On end of record log, return > TARGET_WAITKIND_NO_HISTORY and let infrun decide what to do. > > 2008-09-06 Michael Snyder > * record.c: Comment and message string cleanup. > Add some function header comments. > > 2008-08-01 Michael Snyder > * record.c (_initialize_record): Clarify language in help > strings. > Fix up comment format (period must be followed by two spaces). --0016e651fac2405f3f0460548111 Content-Type: text/plain; charset=US-ASCII; name="3-record_target.txt" Content-Disposition: attachment; filename="3-record_target.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fpvzpd371 Content-length: 50956 LS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTY1OCw3 ICs2NTgsNyBAQAogCXZhbGFyaXRoLmMgdmFsb3BzLmMgdmFscHJpbnQuYyB2 YWx1ZS5jIHZhcm9iai5jIHZlYy5jIFwKIAl3cmFwcGVyLmMgXAogCXhtbC10 ZGVzYy5jIHhtbC1zdXBwb3J0LmMgXAotCWluZmVyaW9yLmMKKwlpbmZlcmlv ci5jIHJlY29yZC5jCiAKIExJTlRGSUxFUyA9ICQoU0ZJTEVTKSAkKFlZRklM RVMpICQoQ09ORklHX1NSQ1MpIGluaXQuYwogCkBAIC04MDksNyArODA5LDcg QEAKIAlzb2xpYi5vIHNvbGliLW51bGwubyBcCiAJcHJvbG9ndWUtdmFsdWUu byBtZW1vcnktbWFwLm8geG1sLXN1cHBvcnQubyBcCiAJdGFyZ2V0LWRlc2Ny aXB0aW9ucy5vIHRhcmdldC1tZW1vcnkubyB4bWwtdGRlc2MubyB4bWwtYnVp bHRpbi5vIFwKLQlpbmZlcmlvci5vIG9zZGF0YS5vCisJaW5mZXJpb3IubyBv c2RhdGEubyByZWNvcmQubwogCiBUU09CUyA9IGluZmxvdy5vCiAKLS0tIGEv L2Rldi9udWxsCisrKyBiL3JlY29yZC5jCkBAIC0wLDAgKzEsMTI5OSBAQAor LyogUHJvY2VzcyByZWNvcmQgYW5kIHJlcGxheSB0YXJnZXQgZm9yIEdEQiwg dGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUg aXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICov CisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAidGFyZ2V0LmgiCisj aW5jbHVkZSAiZ2RiY21kLmgiCisjaW5jbHVkZSAicmVnY2FjaGUuaCIKKyNp bmNsdWRlICJpbmZlcmlvci5oIgorI2luY2x1ZGUgImdkYnRocmVhZC5oIgor I2luY2x1ZGUgInJlY29yZC5oIgorCisjaW5jbHVkZSA8c2lnbmFsLmg+CisK KyNkZWZpbmUgREVGQVVMVF9SRUNPUkRfSU5TTl9NQVhfTlVNCTIwMDAwMAor CitpbnQgcmVjb3JkX2RlYnVnID0gMDsKKworcmVjb3JkX3QgcmVjb3JkX2Zp cnN0OworcmVjb3JkX3QgKnJlY29yZF9saXN0ID0gJnJlY29yZF9maXJzdDsK K3JlY29yZF90ICpyZWNvcmRfYXJjaF9saXN0X2hlYWQgPSBOVUxMOworcmVj b3JkX3QgKnJlY29yZF9hcmNoX2xpc3RfdGFpbCA9IE5VTEw7CitzdHJ1Y3Qg cmVnY2FjaGUgKnJlY29yZF9yZWdjYWNoZSA9IE5VTEw7CisKKy8qIDEgYXNr IHVzZXIuIDAgYXV0byBkZWxldGUgdGhlIGxhc3QgcmVjb3JkX3QuICAqLwor c3RhdGljIGludCByZWNvcmRfc3RvcF9hdF9saW1pdCA9IDE7CitzdGF0aWMg aW50IHJlY29yZF9pbnNuX21heF9udW0gPSBERUZBVUxUX1JFQ09SRF9JTlNO X01BWF9OVU07CitzdGF0aWMgaW50IHJlY29yZF9pbnNuX251bSA9IDA7CisK K3N0cnVjdCB0YXJnZXRfb3BzIHJlY29yZF9vcHM7CitzdGF0aWMgaW50IHJl Y29yZF9yZXN1bWVfc3RlcCA9IDA7CitzdGF0aWMgZW51bSB0YXJnZXRfc2ln bmFsIHJlY29yZF9yZXN1bWVfc2lnZ25hbDsKK3N0YXRpYyBpbnQgcmVjb3Jk X2dldF9zaWcgPSAwOworc3RhdGljIHNpZ3NldF90IHJlY29yZF9tYXNrYWxs Oworc3RhdGljIGludCByZWNvcmRfZ2RiX29wZXJhdGlvbl9kaXNhYmxlID0g MDsKK2ludCByZWNvcmRfd2lsbF9zdG9yZV9yZWdpc3RlcnMgPSAwOworCitl eHRlcm4gc3RydWN0IGJwX2xvY2F0aW9uICpicF9sb2NhdGlvbl9jaGFpbjsK KworLyogVGhlIHJlYWwgYmVuZWF0aCBmdW5jdGlvbiBwb2ludGVycy4gICov Cit2b2lkICgqcmVjb3JkX2JlbmVhdGhfdG9fcmVzdW1lKSAocHRpZF90LCBp bnQsIGVudW0gdGFyZ2V0X3NpZ25hbCk7CitwdGlkX3QgKCpyZWNvcmRfYmVu ZWF0aF90b193YWl0KSAocHRpZF90LCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0 dXMgKik7Cit2b2lkICgqcmVjb3JkX2JlbmVhdGhfdG9fc3RvcmVfcmVnaXN0 ZXJzKSAoc3RydWN0IHJlZ2NhY2hlICosIGludCByZWdubyk7CitMT05HRVNU ICgqcmVjb3JkX2JlbmVhdGhfdG9feGZlcl9wYXJ0aWFsKSAoc3RydWN0IHRh cmdldF9vcHMgKiBvcHMsCisJCQkJCSAgIGVudW0gdGFyZ2V0X29iamVjdCBv YmplY3QsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmFubmV4LAorCQkJCQkgICBn ZGJfYnl0ZSAqIHJlYWRidWYsCisJCQkJCSAgIGNvbnN0IGdkYl9ieXRlICog d3JpdGVidWYsCisJCQkJCSAgIFVMT05HRVNUIG9mZnNldCwgTE9OR0VTVCBs ZW4pOworaW50ICgqcmVjb3JkX2JlbmVhdGhfdG9faW5zZXJ0X2JyZWFrcG9p bnQpIChzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8gKik7CitpbnQgKCpyZWNvcmRf YmVuZWF0aF90b19yZW1vdmVfYnJlYWtwb2ludCkgKHN0cnVjdCBicF90YXJn ZXRfaW5mbyAqKTsKKworc3RhdGljIHZvaWQKK3JlY29yZF9saXN0X3JlbGVh c2UgKHJlY29yZF90ICogcmVjKQoreworICByZWNvcmRfdCAqdG1wOworCisg IGlmICghcmVjKQorICAgIHJldHVybjsKKworICB3aGlsZSAocmVjLT5uZXh0 KQorICAgIHsKKyAgICAgIHJlYyA9IHJlYy0+bmV4dDsKKyAgICB9CisKKyAg d2hpbGUgKHJlYy0+cHJldikKKyAgICB7CisgICAgICB0bXAgPSByZWM7Cisg ICAgICByZWMgPSByZWMtPnByZXY7CisgICAgICBpZiAodG1wLT50eXBlID09 IHJlY29yZF9yZWcpCisJeworCSAgeGZyZWUgKHRtcC0+dS5yZWcudmFsKTsK Kwl9CisgICAgICBlbHNlIGlmICh0bXAtPnR5cGUgPT0gcmVjb3JkX21lbSkK Kwl7CisJICB4ZnJlZSAodG1wLT51Lm1lbS52YWwpOworCX0KKyAgICAgIHhm cmVlICh0bXApOworICAgIH0KKworICBpZiAocmVjICE9ICZyZWNvcmRfZmly c3QpCisgICAgeworICAgICAgeGZyZWUgKHJlYyk7CisgICAgfQorfQorCitz dGF0aWMgdm9pZAorcmVjb3JkX2xpc3RfcmVsZWFzZV9uZXh0ICh2b2lkKQor eworICByZWNvcmRfdCAqcmVjID0gcmVjb3JkX2xpc3Q7CisgIHJlY29yZF90 ICp0bXAgPSByZWMtPm5leHQ7CisgIHJlYy0+bmV4dCA9IE5VTEw7CisgIHdo aWxlICh0bXApCisgICAgeworICAgICAgcmVjID0gdG1wLT5uZXh0OworICAg ICAgaWYgKHRtcC0+dHlwZSA9PSByZWNvcmRfcmVnKQorCXsKKwkgIHJlY29y ZF9pbnNuX251bS0tOworCX0KKyAgICAgIGVsc2UgaWYgKHRtcC0+dHlwZSA9 PSByZWNvcmRfcmVnKQorCXsKKwkgIHhmcmVlICh0bXAtPnUucmVnLnZhbCk7 CisJfQorICAgICAgZWxzZSBpZiAodG1wLT50eXBlID09IHJlY29yZF9tZW0p CisJeworCSAgeGZyZWUgKHRtcC0+dS5tZW0udmFsKTsKKwl9CisgICAgICB4 ZnJlZSAodG1wKTsKKyAgICAgIHRtcCA9IHJlYzsKKyAgICB9Cit9CisKK3N0 YXRpYyB2b2lkCityZWNvcmRfbGlzdF9yZWxlYXNlX2ZpcnN0ICh2b2lkKQor eworICByZWNvcmRfdCAqdG1wID0gTlVMTDsKKyAgZW51bSByZWNvcmRfdHlw ZSB0eXBlOworCisgIGlmICghcmVjb3JkX2ZpcnN0Lm5leHQpCisgICAgewor ICAgICAgcmV0dXJuOworICAgIH0KKworICB3aGlsZSAoMSkKKyAgICB7Cisg ICAgICB0eXBlID0gcmVjb3JkX2ZpcnN0Lm5leHQtPnR5cGU7CisKKyAgICAg IGlmICh0eXBlID09IHJlY29yZF9yZWcpCisJeworCSAgeGZyZWUgKHJlY29y ZF9maXJzdC5uZXh0LT51LnJlZy52YWwpOworCX0KKyAgICAgIGVsc2UgaWYg KHR5cGUgPT0gcmVjb3JkX21lbSkKKwl7CisJICB4ZnJlZSAocmVjb3JkX2Zp cnN0Lm5leHQtPnUubWVtLnZhbCk7CisJfQorICAgICAgdG1wID0gcmVjb3Jk X2ZpcnN0Lm5leHQ7CisgICAgICByZWNvcmRfZmlyc3QubmV4dCA9IHRtcC0+ bmV4dDsKKyAgICAgIHhmcmVlICh0bXApOworCisgICAgICBpZiAoIXJlY29y ZF9maXJzdC5uZXh0KQorCXsKKwkgIGdkYl9hc3NlcnQgKHJlY29yZF9pbnNu X251bSA9PSAxKTsKKwkgIGJyZWFrOworCX0KKworICAgICAgcmVjb3JkX2Zp cnN0Lm5leHQtPnByZXYgPSAmcmVjb3JkX2ZpcnN0OworCisgICAgICBpZiAo dHlwZSA9PSByZWNvcmRfZW5kKQorCXsKKwkgIGJyZWFrOworCX0KKyAgICB9 CisKKyAgcmVjb3JkX2luc25fbnVtLS07Cit9CisKKy8qIEFkZCBhIHJlY29y ZF90IHRvIHJlY29yZF9hcmNoX2xpc3QuICAqLworc3RhdGljIHZvaWQKK3Jl Y29yZF9hcmNoX2xpc3RfYWRkIChyZWNvcmRfdCAqIHJlYykKK3sKKyAgaWYg KHJlY29yZF9kZWJ1ZyA+IDEpCisgICAgeworICAgICAgZnByaW50Zl91bmZp bHRlcmVkIChnZGJfc3RkbG9nLAorCQkJICAiUHJvY2VzcyByZWNvcmQ6IHJl Y29yZF9hcmNoX2xpc3RfYWRkIDB4JXMuXG4iLAorCQkJICBwYWRkcl9ueiAo KENPUkVfQUREUilyZWMpKTsKKyAgICB9CisKKyAgaWYgKHJlY29yZF9hcmNo X2xpc3RfdGFpbCkKKyAgICB7CisgICAgICByZWNvcmRfYXJjaF9saXN0X3Rh aWwtPm5leHQgPSByZWM7CisgICAgICByZWMtPnByZXYgPSByZWNvcmRfYXJj aF9saXN0X3RhaWw7CisgICAgICByZWNvcmRfYXJjaF9saXN0X3RhaWwgPSBy ZWM7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmVjb3JkX2FyY2hf bGlzdF9oZWFkID0gcmVjOworICAgICAgcmVjb3JkX2FyY2hfbGlzdF90YWls ID0gcmVjOworICAgIH0KK30KKworLyogUmVjb3JkIHRoZSB2YWx1ZSBvZiBh IHJlZ2lzdGVyICgibnVtIikgdG8gcmVjb3JkX2FyY2hfbGlzdC4gICovCitp bnQKK3JlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoaW50IG51bSkKK3sKKyAg cmVjb3JkX3QgKnJlYzsKKworICBpZiAocmVjb3JkX2RlYnVnID4gMSkKKyAg ICB7CisgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJ CQkgICJQcm9jZXNzIHJlY29yZDogYWRkIHJlZ2lzdGVyIG51bSA9ICVkIHRv IHJlY29yZCBsaXN0LlxuIiwKKwkJCSAgbnVtKTsKKyAgICB9CisKKyAgcmVj ID0gKHJlY29yZF90ICopIHhtYWxsb2MgKHNpemVvZiAocmVjb3JkX3QpKTsK KyAgcmVjLT51LnJlZy52YWwgPSAoZ2RiX2J5dGUgKikgeG1hbGxvYyAoTUFY X1JFR0lTVEVSX1NJWkUpOworICByZWMtPnByZXYgPSBOVUxMOworICByZWMt Pm5leHQgPSBOVUxMOworICByZWMtPnR5cGUgPSByZWNvcmRfcmVnOworICBy ZWMtPnUucmVnLm51bSA9IG51bTsKKworICByZWdjYWNoZV9yYXdfcmVhZCAo cmVjb3JkX3JlZ2NhY2hlLCBudW0sIHJlYy0+dS5yZWcudmFsKTsKKworICBy ZWNvcmRfYXJjaF9saXN0X2FkZCAocmVjKTsKKworICByZXR1cm4gKDApOwor fQorCisvKiBSZWNvcmQgdGhlIHZhbHVlIG9mIGEgcmVnaW9uIG9mIG1lbW9y eSB3aG9zZSBhZGRyZXNzIGlzICJhZGRyIiBhbmQKKyAgIGxlbmd0aCBpcyAi bGVuIiB0byByZWNvcmRfYXJjaF9saXN0LiAgKi8KKworaW50CityZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKENPUkVfQUREUiBhZGRyLCBpbnQgbGVuKQor eworICByZWNvcmRfdCAqcmVjOworCisgIGlmIChyZWNvcmRfZGVidWcgPiAx KQorICAgIHsKKyAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxv ZywKKwkJCSAgIlByb2Nlc3MgcmVjb3JkOiBhZGQgbWVtIGFkZHIgPSAweCVz IGxlbiA9ICVkIHRvIHJlY29yZCBsaXN0LlxuIiwKKwkJCSAgcGFkZHJfbnog KGFkZHIpLCBsZW4pOworICAgIH0KKworICBpZiAoIWFkZHIpCisgICAgewor ICAgICAgcmV0dXJuICgwKTsKKyAgICB9CisKKyAgcmVjID0gKHJlY29yZF90 ICopIHhtYWxsb2MgKHNpemVvZiAocmVjb3JkX3QpKTsKKyAgcmVjLT51Lm1l bS52YWwgPSAoZ2RiX2J5dGUgKikgeG1hbGxvYyAobGVuKTsKKyAgcmVjLT5w cmV2ID0gTlVMTDsKKyAgcmVjLT5uZXh0ID0gTlVMTDsKKyAgcmVjLT50eXBl ID0gcmVjb3JkX21lbTsKKyAgcmVjLT51Lm1lbS5hZGRyID0gYWRkcjsKKyAg cmVjLT51Lm1lbS5sZW4gPSBsZW47CisKKyAgaWYgKHRhcmdldF9yZWFkX21l bW9yeSAoYWRkciwgcmVjLT51Lm1lbS52YWwsIGxlbikpCisgICAgeworICAg ICAgaWYgKHJlY29yZF9kZWJ1ZykKKwl7CisJICBmcHJpbnRmX3VuZmlsdGVy ZWQgKGdkYl9zdGRsb2csCisJCQkgICAgICAiUHJvY2VzcyByZWNvcmQ6IGVy cm9yIHJlYWRpbmcgbWVtb3J5IGF0IGFkZHIgPSAweCVzIGxlbiA9ICVkLlxu IiwKKwkJCSAgICAgIHBhZGRyX256IChhZGRyKSwgbGVuKTsKKwl9CisgICAg ICB4ZnJlZSAocmVjLT51Lm1lbS52YWwpOworICAgICAgeGZyZWUgKHJlYyk7 CisgICAgICByZXR1cm4gKC0xKTsKKyAgICB9CisKKyAgcmVjb3JkX2FyY2hf bGlzdF9hZGQgKHJlYyk7CisKKyAgcmV0dXJuICgwKTsKK30KKworLyogQWRk IGEgcmVjb3JkX2VuZCB0eXBlIHJlY29yZF90IHRvIHJlY29yZF9hcmNoX2xp c3QuICAqLworaW50CityZWNvcmRfYXJjaF9saXN0X2FkZF9lbmQgKGludCBu ZWVkX2Rhc20pCit7CisgIHJlY29yZF90ICpyZWM7CisKKyAgaWYgKHJlY29y ZF9kZWJ1ZyA+IDEpCisgICAgeworICAgICAgZnByaW50Zl91bmZpbHRlcmVk IChnZGJfc3RkbG9nLAorCQkJICAiUHJvY2VzcyByZWNvcmQ6IGFkZCBlbmQg bmVlZF9kYXNtID0gJWQgdG8gYXJjaCBsaXN0LlxuIiwKKwkJCSAgbmVlZF9k YXNtKTsKKyAgICB9CisKKyAgcmVjID0gKHJlY29yZF90ICopIHhtYWxsb2Mg KHNpemVvZiAocmVjb3JkX3QpKTsKKyAgcmVjLT5wcmV2ID0gTlVMTDsKKyAg cmVjLT5uZXh0ID0gTlVMTDsKKyAgcmVjLT50eXBlID0gcmVjb3JkX2VuZDsK KworICByZWMtPnUubmVlZF9kYXNtID0gbmVlZF9kYXNtOworCisgIHJlY29y ZF9hcmNoX2xpc3RfYWRkIChyZWMpOworCisgIHJldHVybiAoMCk7Cit9CisK K3N0YXRpYyB2b2lkCityZWNvcmRfY2hlY2tfaW5zbl9udW0gKGludCBzZXRf dGVybWluYWwpCit7CisgIGlmIChyZWNvcmRfaW5zbl9tYXhfbnVtKQorICAg IHsKKyAgICAgIGdkYl9hc3NlcnQgKHJlY29yZF9pbnNuX251bSA8PSByZWNv cmRfaW5zbl9tYXhfbnVtKTsKKyAgICAgIGlmIChyZWNvcmRfaW5zbl9udW0g PT0gcmVjb3JkX2luc25fbWF4X251bSkKKwl7CisJICAvKiBBc2sgdXNlciB3 aGF0IHRvIGRvLiAgKi8KKwkgIGlmIChyZWNvcmRfc3RvcF9hdF9saW1pdCkK KwkgICAgeworCSAgICAgIGludCBxOworCSAgICAgIGlmIChzZXRfdGVybWlu YWwpCisJCXRhcmdldF90ZXJtaW5hbF9vdXJzICgpOworCSAgICAgIHEgPSB5 cXVlcnkgKF8oIkRvIHlvdSB3YW50IHRvIGF1dG8gZGVsZXRlIHByZXZpb3Vz IGV4ZWN1dGlvbiBsb2cgZW50cmllcyB3aGVuIHJlY29yZC9yZXBsYXkgYnVm ZmVyIGJlY29tZXMgZnVsbCAocmVjb3JkLXN0b3AtYXQtbGltaXQpPyIpKTsK KwkgICAgICBpZiAoc2V0X3Rlcm1pbmFsKQorCQl0YXJnZXRfdGVybWluYWxf aW5mZXJpb3IgKCk7CisJICAgICAgaWYgKHEpCisJCXsKKwkJICByZWNvcmRf c3RvcF9hdF9saW1pdCA9IDA7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJ ICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGluZmVyaW9yIHByb2dyYW0g c3RvcHBlZC4iKSk7CisJCX0KKwkgICAgfQorCX0KKyAgICB9Cit9CisKKy8q IEJlZm9yZSBpbmZlcmlvciBzdGVwICh3aGVuIEdEQiByZWNvcmQgdGhlIHJ1 bm5pbmcgbWVzc2FnZSwgaW5mZXJpb3IKKyAgIG9ubHkgY2FuIHN0ZXApLCBH REIgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gcmVjb3JkIHRoZSB2YWx1 ZXMgdG8KKyAgIHJlY29yZF9saXN0LiAgVGhpcyBmdW5jdGlvbiB3aWxsIGNh bGwgZ2RiYXJjaF9wcm9jZXNzX3JlY29yZCB0bworICAgcmVjb3JkIHRoZSBy dW5uaW5nIG1lc3NhZ2Ugb2YgaW5mZXJpb3IgYW5kIHNldCB0aGVtIHRvCisg ICByZWNvcmRfYXJjaF9saXN0LCBhbmQgYWRkIGl0IHRvIHJlY29yZF9saXN0 LiAgKi8KKworc3RhdGljIHZvaWQKK3JlY29yZF9tZXNzYWdlX2NsZWFudXBz ICh2b2lkICppZ25vcmUpCit7CisgIHJlY29yZF9saXN0X3JlbGVhc2UgKHJl Y29yZF9hcmNoX2xpc3RfdGFpbCk7CisgIHNldF9leGVjdXRpbmcgKGluZmVy aW9yX3B0aWQsIDApOworICBub3JtYWxfc3RvcCAoKTsKK30KKwordm9pZAor cmVjb3JkX21lc3NhZ2UgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoKQorewor ICBpbnQgcmV0OworICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBzID0g bWFrZV9jbGVhbnVwIChyZWNvcmRfbWVzc2FnZV9jbGVhbnVwcywgMCk7CisK KyAgLyogQ2hlY2sgcmVjb3JkX2luc25fbnVtLiAgKi8KKyAgcmVjb3JkX2No ZWNrX2luc25fbnVtICgxKTsKKworICByZWNvcmRfYXJjaF9saXN0X2hlYWQg PSBOVUxMOworICByZWNvcmRfYXJjaF9saXN0X3RhaWwgPSBOVUxMOworICBy ZWNvcmRfcmVnY2FjaGUgPSBnZXRfY3VycmVudF9yZWdjYWNoZSAoKTsKKwor ICByZXQgPSBnZGJhcmNoX3Byb2Nlc3NfcmVjb3JkIChnZGJhcmNoLAorCQkJ CXJlZ2NhY2hlX3JlYWRfcGMgKHJlY29yZF9yZWdjYWNoZSkpOworICBpZiAo cmV0ID4gMCkKKyAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGluZmVy aW9yIHByb2dyYW0gc3RvcHBlZC4iKSk7CisgIGlmIChyZXQgPCAwKQorICAg IGVycm9yIChfKCJQcm9jZXNzIHJlY29yZDogZmFpbGVkIHRvIHJlY29yZCBl eGVjdXRpb24gbG9nLiIpKTsKKworICBkaXNjYXJkX2NsZWFudXBzIChvbGRf Y2xlYW51cHMpOworCisgIHJlY29yZF9saXN0LT5uZXh0ID0gcmVjb3JkX2Fy Y2hfbGlzdF9oZWFkOworICByZWNvcmRfYXJjaF9saXN0X2hlYWQtPnByZXYg PSByZWNvcmRfbGlzdDsKKyAgcmVjb3JkX2xpc3QgPSByZWNvcmRfYXJjaF9s aXN0X3RhaWw7CisKKyAgaWYgKHJlY29yZF9pbnNuX251bSA9PSByZWNvcmRf aW5zbl9tYXhfbnVtICYmIHJlY29yZF9pbnNuX21heF9udW0pCisgICAgewor ICAgICAgcmVjb3JkX2xpc3RfcmVsZWFzZV9maXJzdCAoKTsKKyAgICB9Cisg IGVsc2UKKyAgICB7CisgICAgICByZWNvcmRfaW5zbl9udW0rKzsKKyAgICB9 Cit9CisKKy8qIFRoaW5ncyB0byBjbGVhbiB1cCBpZiB3ZSBlcnJvciBvciBR VUlUIG91dCBvZiBmdW5jdGlvbiB0aGF0IHNldAorICAgcmVjb3JkX2dkYl9v cGVyYXRpb25fZGlzYWJsZSAoaWUuIGNvbW1hbmQgdGhhdCBjYXVzZWQgdGFy Z2V0X3dhaXQgdG8gYmUgY2FsbGVkKS4gICovCitzdGF0aWMgdm9pZAorcmVj b3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZV9jbGVhbnVwcyAodm9pZCAqaWdu b3JlKQoreworICByZWNvcmRfZ2RiX29wZXJhdGlvbl9kaXNhYmxlID0gMDsK K30KKworc3RydWN0IGNsZWFudXAgKgorcmVjb3JkX2dkYl9vcGVyYXRpb25f ZGlzYWJsZV9zZXQgKHZvaWQpCit7CisgIHN0cnVjdCBjbGVhbnVwICpvbGRf Y2xlYW51cHMgPSBtYWtlX2NsZWFudXAgKHJlY29yZF9nZGJfb3BlcmF0aW9u X2Rpc2FibGVfY2xlYW51cHMsIDApOworICByZWNvcmRfZ2RiX29wZXJhdGlv bl9kaXNhYmxlID0gMTsKKworICByZXR1cm4gb2xkX2NsZWFudXBzOworfQor CitzdGF0aWMgdm9pZAorcmVjb3JkX29wZW4gKGNoYXIgKm5hbWUsIGludCBm cm9tX3R0eSkKK3sKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICB7CisgICAg ICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJQcm9jZXNzIHJl Y29yZDogcmVjb3JkX29wZW5cbiIpOworICAgIH0KKworICAvKiBjaGVjayBl eGVjICovCisgIGlmICghdGFyZ2V0X2hhc19leGVjdXRpb24pCisgICAgewor ICAgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiB0aGUgcHJvZ3JhbSBp cyBub3QgYmVpbmcgcnVuLiIpKTsKKyAgICB9CisgIGlmIChub25fc3RvcCkK KyAgICB7CisgICAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQgdGFyZ2V0 IGNhbid0IGRlYnVnIGluZmVyaW9yIGluIG5vbi1zdG9wIG1vZGUgKG5vbi1z dG9wKS4iKSk7CisgICAgfQorICBpZiAodGFyZ2V0X2FzeW5jX3Blcm1pdHRl ZCkKKyAgICB7CisgICAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQgdGFy Z2V0IGNhbid0IGRlYnVnIGluZmVyaW9yIGluIGFzeW5jaHJvbm91cyBtb2Rl ICh0YXJnZXQtYXN5bmMpLiIpKTsKKyAgICB9CisKKyAgaWYgKCFnZGJhcmNo X3Byb2Nlc3NfcmVjb3JkX3AgKGN1cnJlbnRfZ2RiYXJjaCkpCisgICAgewor ICAgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiB0aGUgY3VycmVudCBh cmNoaXRlY3R1cmUgZG9lc24ndCBzdXBwb3J0IHJlY29yZCBmdW5jdGlvbi4i KSk7CisgICAgfQorCisgIC8qIENoZWNrIGlmIHJlY29yZCB0YXJnZXQgaXMg YWxyZWFkeSBydW5uaW5nLiAgKi8KKyAgaWYgKFRBUkdFVF9JU19QUk9DRVNT X1JFQ09SRCkKKyAgICB7CisgICAgICBpZiAoIW5xdWVyeQorCSAgKF8oIlBy b2Nlc3MgcmVjb3JkIHRhcmdldCBhbHJlYWR5IHJ1bm5pbmcsIGRvIHlvdSB3 YW50IHRvIGRlbGV0ZSB0aGUgb2xkIHJlY29yZCBsb2c/IikpKQorCXsKKwkg IHJldHVybjsKKwl9CisgICAgfQorCisgIHB1c2hfdGFyZ2V0ICgmcmVjb3Jk X29wcyk7CisKKyAgLyogUmVzZXQgKi8KKyAgcmVjb3JkX2luc25fbnVtID0g MDsKKyAgcmVjb3JkX2xpc3QgPSAmcmVjb3JkX2ZpcnN0OworICByZWNvcmRf bGlzdC0+bmV4dCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRf Y2xvc2UgKGludCBxdWl0dGluZykKK3sKKyAgaWYgKHJlY29yZF9kZWJ1ZykK KyAgICB7CisgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2cs ICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX2Nsb3NlXG4iKTsKKyAgICB9Cisg IHJlY29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF9saXN0KTsKK30KKworc3Rh dGljIHZvaWQKK3JlY29yZF9yZXN1bWUgKHB0aWRfdCBwdGlkLCBpbnQgc3Rl cCwgZW51bSB0YXJnZXRfc2lnbmFsIHNpZ2duYWwpCit7CisgIHJlY29yZF9y ZXN1bWVfc3RlcCA9IHN0ZXA7CisgIHJlY29yZF9yZXN1bWVfc2lnZ25hbCA9 IHNpZ2duYWw7CisKKyAgaWYgKCFSRUNPUkRfSVNfUkVQTEFZKQorICAgIHsK KyAgICAgIHJlY29yZF9tZXNzYWdlIChjdXJyZW50X2dkYmFyY2gpOworICAg ICAgcmVjb3JkX2JlbmVhdGhfdG9fcmVzdW1lIChwdGlkLCAxLCBzaWdnbmFs KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRfc2lnX2hhbmRs ZXIgKGludCBzaWdubykKK3sKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICB7 CisgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJQcm9j ZXNzIHJlY29yZDogZ2V0IGEgc2lnbmFsXG4iKTsKKyAgICB9CisgIHJlY29y ZF9yZXN1bWVfc3RlcCA9IDE7CisgIHJlY29yZF9nZXRfc2lnID0gMTsKK30K Kworc3RhdGljIHZvaWQKK3JlY29yZF93YWl0X2NsZWFudXBzICh2b2lkICpp Z25vcmUpCit7CisgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNf UkVWRVJTRSkKKyAgICB7CisgICAgICBpZiAocmVjb3JkX2xpc3QtPm5leHQp CisJeworCSAgcmVjb3JkX2xpc3QgPSByZWNvcmRfbGlzdC0+bmV4dDsKKwl9 CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmVjb3JkX2xpc3QgPSBy ZWNvcmRfbGlzdC0+cHJldjsKKyAgICB9CisgIHNldF9leGVjdXRpbmcgKGlu ZmVyaW9yX3B0aWQsIDApOworICBub3JtYWxfc3RvcCAoKTsKK30KKworLyog cmVjb3JkX3dhaXQKKyAgIEluIHJlcGxheSBtb2RlLCB0aGlzIGZ1bmN0aW9u IGV4YW1pbmVzIHRoZSByZWNvcmRlZCBsb2cgYW5kCisgICBkZXRlcm1pbmVz IHdoZXJlIHRvIHN0b3AuICAqLworCitzdGF0aWMgcHRpZF90CityZWNvcmRf d2FpdCAocHRpZF90IHB0aWQsIHN0cnVjdCB0YXJnZXRfd2FpdHN0YXR1cyAq c3RhdHVzKQoreworICBzdHJ1Y3QgY2xlYW51cCAqc2V0X2NsZWFudXBzID0g cmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZV9zZXQgKCk7CisKKyAgaWYg KHJlY29yZF9kZWJ1ZykKKyAgICB7CisgICAgICBmcHJpbnRmX3VuZmlsdGVy ZWQgKGdkYl9zdGRsb2csCisJCQkgICJQcm9jZXNzIHJlY29yZDogcmVjb3Jk X3dhaXQgcmVjb3JkX3Jlc3VtZV9zdGVwID0gJWRcbiIsCisJCQkgIHJlY29y ZF9yZXN1bWVfc3RlcCk7CisgICAgfQorCisgIGlmICghUkVDT1JEX0lTX1JF UExBWSkKKyAgICB7CisgICAgICBpZiAocmVjb3JkX3Jlc3VtZV9zdGVwKQor CXsKKwkgIC8qIFRoaXMgaXMgYSBzaW5nbGUgc3RlcC4gICovCisJICByZXR1 cm4gcmVjb3JkX2JlbmVhdGhfdG9fd2FpdCAocHRpZCwgc3RhdHVzKTsKKwl9 CisgICAgICBlbHNlCisJeworCSAgaWYgKHJlY29yZF9yZXN1bWVfc3RlcCkK KwkgICAgeworCSAgICAgIC8qIFRoaXMgaXMgYSBzaW5nbGUgc3RlcC4gICov CisJICAgICAgcmV0dXJuIHJlY29yZF9iZW5lYXRoX3RvX3dhaXQgKHB0aWQs IHN0YXR1cyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8q IFRoaXMgaXMgbm90IGEgc2luZ2xlIHN0ZXAuICAqLworCSAgICAgIHB0aWRf dCByZXQ7CisJICAgICAgaW50IGlzX2JyZWFrcG9pbnQgPSAxOworCSAgICAg IENPUkVfQUREUiBwYyA9IDA7CisJICAgICAgaW50IHBjX2lzX3JlYWQgPSAw OworCSAgICAgIHN0cnVjdCBicF9sb2NhdGlvbiAqYmw7CisJICAgICAgc3Ry dWN0IGJyZWFrcG9pbnQgKmI7CisKKwkgICAgICBkbworCQl7CisJCSAgcmV0 ID0gcmVjb3JkX2JlbmVhdGhfdG9fd2FpdCAocHRpZCwgc3RhdHVzKTsKKwor CQkgIGlmIChzdGF0dXMtPmtpbmQgPT0gVEFSR0VUX1dBSVRLSU5EX1NUT1BQ RUQKKwkJICAgICAgJiYgc3RhdHVzLT52YWx1ZS5zaWcgPT0gVEFSR0VUX1NJ R05BTF9UUkFQKQorCQkgICAgeworCQkgICAgICAvKiBDaGVjayBpZiB0aGVy ZSBpcyBhIGJyZWFrcG9pbnQuICAqLworCQkgICAgICBwY19pc19yZWFkID0g MDsKKwkJICAgICAgcmVnaXN0ZXJzX2NoYW5nZWQgKCk7CisJCSAgICAgIGZv ciAoYmwgPSBicF9sb2NhdGlvbl9jaGFpbjsgYmw7IGJsID0gYmwtPmdsb2Jh bF9uZXh0KQorCQkJeworCQkJICBiID0gYmwtPm93bmVyOworCQkJICBnZGJf YXNzZXJ0IChiKTsKKwkJCSAgaWYgKGItPmVuYWJsZV9zdGF0ZSAhPSBicF9l bmFibGVkCisJCQkgICAgICAmJiBiLT5lbmFibGVfc3RhdGUgIT0gYnBfcGVy bWFuZW50KQorCQkJICAgIGNvbnRpbnVlOworCQkJICBpZiAoIXBjX2lzX3Jl YWQpCisJCQkgICAgeworCQkJICAgICAgcGMgPQorCQkJCXJlZ2NhY2hlX3Jl YWRfcGMgKGdldF90aHJlYWRfcmVnY2FjaGUgKHJldCkpOworCQkJICAgICAg cGNfaXNfcmVhZCA9IDE7CisJCQkgICAgfQorCQkJICBzd2l0Y2ggKGItPnR5 cGUpCisJCQkgICAgeworCQkJICAgIGRlZmF1bHQ6CisJCQkgICAgICBpZiAo YmwtPmFkZHJlc3MgPT0gcGMpCisJCQkJeworCQkJCSAgZ290byBicmVha3Bv aW50OworCQkJCX0KKwkJCSAgICAgIGJyZWFrOworCisJCQkgICAgY2FzZSBi cF93YXRjaHBvaW50OgorCQkJICAgICAgLypYWFggdGVhd2F0ZXI6IEkgc3Rp bGwgbm90IHZlcnkgY2xlYXIgaG93IHRvIGRlYWwgd2l0aCBpdC4gICovCisJ CQkgICAgICBnb3RvIGJyZWFrcG9pbnQ7CisJCQkgICAgICBicmVhazsKKwor CQkJICAgIGNhc2UgYnBfY2F0Y2hwb2ludDoKKwkJCSAgICAgIGdkYl9hc3Nl cnQgKGItPm9wcyAhPSBOVUxMCisJCQkJCSAgJiYgYi0+b3BzLT5icmVha3Bv aW50X2hpdCAhPSBOVUxMKTsKKwkJCSAgICAgIGlmIChiLT5vcHMtPmJyZWFr cG9pbnRfaGl0IChiKSkKKwkJCQl7CisJCQkJICBnb3RvIGJyZWFrcG9pbnQ7 CisJCQkJfQorCQkJICAgICAgYnJlYWs7CisKKwkJCSAgICBjYXNlIGJwX2hh cmR3YXJlX3dhdGNocG9pbnQ6CisJCQkgICAgY2FzZSBicF9yZWFkX3dhdGNo cG9pbnQ6CisJCQkgICAgY2FzZSBicF9hY2Nlc3Nfd2F0Y2hwb2ludDoKKwkJ CSAgICAgIGlmIChTVE9QUEVEX0JZX1dBVENIUE9JTlQgKDApKQorCQkJCXsK KwkJCQkgIGdvdG8gYnJlYWtwb2ludDsKKwkJCQl9CisJCQkgICAgICBicmVh azsKKwkJCSAgICB9CisJCQl9CisKKwkJICAgICAgLyogVGhlcmUgaXMgbm90 IGEgYnJlYWtwb2ludC4gICovCisJCSAgICAgIHJlY29yZF9tZXNzYWdlIChj dXJyZW50X2dkYmFyY2gpOworCQkgICAgICByZWNvcmRfYmVuZWF0aF90b19y ZXN1bWUgKHB0aWQsIDEsCisJCQkJCQlyZWNvcmRfcmVzdW1lX3NpZ2duYWwp OworCQkgICAgICBjb250aW51ZTsKKwkJICAgIH0KKworCQkgIGlzX2JyZWFr cG9pbnQgPSAwOworCisJCWJyZWFrcG9pbnQ6CisJCSAgLyogQWRkIGdkYmFy Y2hfZGVjcl9wY19hZnRlcl9icmVhayB0byBwYyBiZWNhdXNlIGdkYiB3aWxs CisJCSAgICAgZXhwZWN0IHRoZSBwYyB0byBiZSBhdCBhZGRyZXNzIHBsdXMg ZGVjcl9wY19hZnRlcl9icmVhaworCQkgICAgIHdoZW4gdGhlIGluZmVyaW9y IHN0b3BzIGF0IGEgYnJlYWtwb2ludC4gICovCisJCSAgaWYgKGlzX2JyZWFr cG9pbnQpCisJCSAgICB7CisJCSAgICAgIENPUkVfQUREUiBkZWNyX3BjX2Fm dGVyX2JyZWFrID0KKwkJCWdkYmFyY2hfZGVjcl9wY19hZnRlcl9icmVhayAo Y3VycmVudF9nZGJhcmNoKTsKKwkJICAgICAgaWYgKGRlY3JfcGNfYWZ0ZXJf YnJlYWspCisJCQl7CisJCQkgIGlmICghcGNfaXNfcmVhZCkKKwkJCSAgICB7 CisJCQkgICAgICBwYyA9CisJCQkJcmVnY2FjaGVfcmVhZF9wYyAoZ2V0X3Ro cmVhZF9yZWdjYWNoZSAocmV0KSk7CisJCQkgICAgfQorCQkJICByZWdjYWNo ZV93cml0ZV9wYyAoZ2V0X3RocmVhZF9yZWdjYWNoZSAocmV0KSwKKwkJCQkJ ICAgICBwYyArIGRlY3JfcGNfYWZ0ZXJfYnJlYWspOworCQkJfQorCQkgICAg fQorCisJCSAgYnJlYWs7CisJCX0KKwkgICAgICB3aGlsZSAoMSk7CisKKwkg ICAgICByZXR1cm4gcmV0OworCSAgICB9CisJfQorICAgIH0KKyAgZWxzZQor ICAgIHsKKyAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0LCBvbGRfYWN0Owor ICAgICAgaW50IG5lZWRfZGFzbSA9IDA7CisgICAgICBzdHJ1Y3QgcmVnY2Fj aGUgKnJlZ2NhY2hlID0gZ2V0X2N1cnJlbnRfcmVnY2FjaGUgKCk7CisgICAg ICBpbnQgY29udGludWVfZmxhZyA9IDE7CisgICAgICBpbnQgZmlyc3RfcmVj b3JkX2VuZCA9IDE7CisgICAgICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFu dXBzID0gbWFrZV9jbGVhbnVwIChyZWNvcmRfd2FpdF9jbGVhbnVwcywgMCk7 CisgICAgICBDT1JFX0FERFIgdG1wX3BjOworCisgICAgICBzdGF0dXMtPmtp bmQgPSBUQVJHRVRfV0FJVEtJTkRfU1RPUFBFRDsKKworICAgICAgLyogQ2hl Y2sgYnJlYWtwb2ludCB3aGVuIGZvcndhcmQgZXhlY3V0ZS4gICovCisgICAg ICBpZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX0ZPUldBUkQpCisJ eworCSAgdG1wX3BjID0gcmVnY2FjaGVfcmVhZF9wYyAocmVnY2FjaGUpOwor CSAgaWYgKGJyZWFrcG9pbnRfaW5zZXJ0ZWRfaGVyZV9wICh0bXBfcGMpKQor CSAgICB7CisJICAgICAgaWYgKHJlY29yZF9kZWJ1ZykKKwkJeworCQkgIGZw cmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkgICAgICAiUHJv Y2VzcyByZWNvcmQ6IGJyZWFrIGF0IDB4JXMuXG4iLAorCQkJCSAgICAgIHBh ZGRyX256ICh0bXBfcGMpKTsKKwkJfQorCSAgICAgIGlmIChnZGJhcmNoX2Rl Y3JfcGNfYWZ0ZXJfYnJlYWsgKGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNo ZSkpCisJCSAgJiYgIXJlY29yZF9yZXN1bWVfc3RlcCkKKwkJeworCQkgIHJl Z2NhY2hlX3dyaXRlX3BjIChyZWdjYWNoZSwKKwkJCQkgICAgIHRtcF9wYyAr CisJCQkJICAgICBnZGJhcmNoX2RlY3JfcGNfYWZ0ZXJfYnJlYWsKKwkJCQkg ICAgIChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpKSk7CisJCX0KKwkg ICAgICBnb3RvIHJlcGxheV9vdXQ7CisJICAgIH0KKwl9CisKKyAgICAgIHJl Y29yZF9nZXRfc2lnID0gMDsKKyAgICAgIGFjdC5zYV9oYW5kbGVyID0gcmVj b3JkX3NpZ19oYW5kbGVyOworICAgICAgYWN0LnNhX21hc2sgPSByZWNvcmRf bWFza2FsbDsKKyAgICAgIGFjdC5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7Cisg ICAgICBpZiAoc2lnYWN0aW9uIChTSUdJTlQsICZhY3QsICZvbGRfYWN0KSkK Kwl7CisJICBwZXJyb3Jfd2l0aF9uYW1lIChfKCJQcm9jZXNzIHJlY29yZDog c2lnYWN0aW9uIGZhaWxlZCIpKTsKKwl9CisgICAgICAvKiBJZiBHREIgaXMg aW4gdGVybWluYWxfaW5mZXJpb3IgbW9kZSwgaXQgd2lsbCBub3QgZ2V0IHRo ZSBzaWduYWwuCisgICAgICAgICBBbmQgaW4gR0RCIHJlcGxheSBtb2RlLCBH REIgZG9lc24ndCBuZWVkIHRvIGJlIGluIHRlcm1pbmFsX2luZmVyaW9yCisg ICAgICAgICBtb2RlLCBiZWNhdXNlIGluZmVyaW9yIHdpbGwgbm90IGV4ZWN1 dGVkLgorICAgICAgICAgVGhlbiBzZXQgaXQgdG8gdGVybWluYWxfb3VycyB0 byBtYWtlIEdEQiBnZXQgdGhlIHNpZ25hbC4gICovCisgICAgICB0YXJnZXRf dGVybWluYWxfb3VycyAoKTsKKworICAgICAgLyogSW4gRVhFQ19GT1JXQVJE IG1vZGUsIHJlY29yZF9saXN0IHBvaW50cyB0byB0aGUgdGFpbCBvZiBwcmV2 CisgICAgICAgICBpbnN0cnVjdGlvbi4gICovCisgICAgICBpZiAoZXhlY3V0 aW9uX2RpcmVjdGlvbiA9PSBFWEVDX0ZPUldBUkQgJiYgcmVjb3JkX2xpc3Qt Pm5leHQpCisgICAgICAgIHsKKwkgIHJlY29yZF9saXN0ID0gcmVjb3JkX2xp c3QtPm5leHQ7CisJfQorCisgICAgICAvKiBMb29wIG92ZXIgdGhlIHJlY29y ZF9saXN0LCBsb29raW5nIGZvciB0aGUgbmV4dCBwbGFjZSB0bworCSBzdG9w LiAgKi8KKyAgICAgIGRvCisJeworCSAgLyogQ2hlY2sgZm9yIGJlZ2lubmlu ZyBhbmQgZW5kIG9mIGxvZy4gICovCisJICBpZiAoZXhlY3V0aW9uX2RpcmVj dGlvbiA9PSBFWEVDX1JFVkVSU0UKKwkgICAgICAmJiByZWNvcmRfbGlzdCA9 PSAmcmVjb3JkX2ZpcnN0KQorCSAgICB7CisJICAgICAgLyogSGl0IGJlZ2lu bmluZyBvZiByZWNvcmQgbG9nIGluIHJldmVyc2UuICAqLworCSAgICAgIHN0 YXR1cy0+a2luZCA9IFRBUkdFVF9XQUlUS0lORF9OT19ISVNUT1JZOworCSAg ICAgIGJyZWFrOworCSAgICB9CisJICBpZiAoZXhlY3V0aW9uX2RpcmVjdGlv biAhPSBFWEVDX1JFVkVSU0UgJiYgIXJlY29yZF9saXN0LT5uZXh0KQorCSAg ICB7CisJICAgICAgLyogSGl0IGVuZCBvZiByZWNvcmQgbG9nIGdvaW5nIGZv cndhcmQuICAqLworCSAgICAgIHN0YXR1cy0+a2luZCA9IFRBUkdFVF9XQUlU S0lORF9OT19ISVNUT1JZOworCSAgICAgIGJyZWFrOworCSAgICB9CisKKwkg IC8qIFNldCBwdGlkLCByZWdpc3RlciBhbmQgbWVtb3J5IGFjY29yZGluZyB0 byByZWNvcmRfbGlzdC4gICovCisJICBpZiAocmVjb3JkX2xpc3QtPnR5cGUg PT0gcmVjb3JkX3JlZykKKwkgICAgeworCSAgICAgIC8qIHJlZyAqLworCSAg ICAgIGdkYl9ieXRlIHJlZ1tNQVhfUkVHSVNURVJfU0laRV07CisJICAgICAg aWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisJCXsKKwkJICBmcHJpbnRmX3VuZmls dGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICAgIlByb2Nlc3MgcmVjb3Jk OiByZWNvcmRfcmVnIDB4JXMgdG8gaW5mZXJpb3IgbnVtID0gJWQuXG4iLAor CQkJCSAgICAgIHBhZGRyX256ICgoQ09SRV9BRERSKXJlY29yZF9saXN0KSwK KwkJCQkgICAgICByZWNvcmRfbGlzdC0+dS5yZWcubnVtKTsKKwkJfQorCSAg ICAgIHJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgcmVjb3JkX2xp c3QtPnUucmVnLm51bSwgcmVnKTsKKwkgICAgICByZWdjYWNoZV9jb29rZWRf d3JpdGUgKHJlZ2NhY2hlLCByZWNvcmRfbGlzdC0+dS5yZWcubnVtLAorCQkJ CSAgICAgcmVjb3JkX2xpc3QtPnUucmVnLnZhbCk7CisJICAgICAgbWVtY3B5 IChyZWNvcmRfbGlzdC0+dS5yZWcudmFsLCByZWcsIE1BWF9SRUdJU1RFUl9T SVpFKTsKKwkgICAgfQorCSAgZWxzZSBpZiAocmVjb3JkX2xpc3QtPnR5cGUg PT0gcmVjb3JkX21lbSkKKwkgICAgeworCSAgICAgIC8qIG1lbSAqLworCSAg ICAgIGdkYl9ieXRlICptZW0gPSBhbGxvY2EgKHJlY29yZF9saXN0LT51Lm1l bS5sZW4pOworCSAgICAgIGlmIChyZWNvcmRfZGVidWcgPiAxKQorCQl7CisJ CSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSAgICAg ICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX21lbSAweCVzIHRvIGluZmVyaW9y IGFkZHIgPSAweCVzIGxlbiA9ICVkLlxuIiwKKwkJCQkgICAgICBwYWRkcl9u eiAoKENPUkVfQUREUilyZWNvcmRfbGlzdCksCisJCQkJICAgICAgcGFkZHJf bnogKHJlY29yZF9saXN0LT51Lm1lbS5hZGRyKSwKKwkJCQkgICAgICByZWNv cmRfbGlzdC0+dS5tZW0ubGVuKTsKKwkJfQorCisJICAgICAgaWYgKHRhcmdl dF9yZWFkX21lbW9yeQorCQkgIChyZWNvcmRfbGlzdC0+dS5tZW0uYWRkciwg bWVtLCByZWNvcmRfbGlzdC0+dS5tZW0ubGVuKSkKKwkJeworCQkgIGVycm9y IChfKCJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyBtZW1vcnkgYXQg YWRkciA9IDB4JXMgbGVuID0gJWQuIiksCisJCQkgcGFkZHJfbnogKHJlY29y ZF9saXN0LT51Lm1lbS5hZGRyKSwKKwkJCSByZWNvcmRfbGlzdC0+dS5tZW0u bGVuKTsKKwkJfQorCisJICAgICAgaWYgKHRhcmdldF93cml0ZV9tZW1vcnkK KwkJICAocmVjb3JkX2xpc3QtPnUubWVtLmFkZHIsIHJlY29yZF9saXN0LT51 Lm1lbS52YWwsCisJCSAgIHJlY29yZF9saXN0LT51Lm1lbS5sZW4pKQorCQl7 CisJCSAgZXJyb3IgKF8KKwkJCSAoIlByb2Nlc3MgcmVjb3JkOiBlcnJvciB3 cml0aW5nIG1lbW9yeSBhdCBhZGRyID0gMHglcyBsZW4gPSAlZC4iKSwKKwkJ CSBwYWRkcl9ueiAocmVjb3JkX2xpc3QtPnUubWVtLmFkZHIpLAorCQkJIHJl Y29yZF9saXN0LT51Lm1lbS5sZW4pOworCQl9CisJICAgICAgbWVtY3B5IChy ZWNvcmRfbGlzdC0+dS5tZW0udmFsLCBtZW0sIHJlY29yZF9saXN0LT51Lm1l bS5sZW4pOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAo cmVjb3JkX2RlYnVnID4gMSkKKwkJeworCQkgIGZwcmludGZfdW5maWx0ZXJl ZCAoZ2RiX3N0ZGxvZywKKwkJCQkgICAgICAiUHJvY2VzcyByZWNvcmQ6IHJl Y29yZF9lbmQgMHglcyB0byBpbmZlcmlvciBuZWVkX2Rhc20gPSAlZC5cbiIs CisJCQkJICAgICAgcGFkZHJfbnogKChDT1JFX0FERFIpcmVjb3JkX2xpc3Qp LAorCQkJCSAgICAgIHJlY29yZF9saXN0LT51Lm5lZWRfZGFzbSk7CisJCX0K KworCSAgICAgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfRk9S V0FSRCkKKwkJeworCQkgIG5lZWRfZGFzbSA9IHJlY29yZF9saXN0LT51Lm5l ZWRfZGFzbTsKKwkJfQorCSAgICAgIGlmIChuZWVkX2Rhc20pCisJCXsKKwkJ ICBnZGJhcmNoX3Byb2Nlc3NfcmVjb3JkX2Rhc20gKGN1cnJlbnRfZ2RiYXJj aCk7CisJCX0KKworCSAgICAgIGlmIChmaXJzdF9yZWNvcmRfZW5kICYmIGV4 ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19SRVZFUlNFKQorCQl7CisJCSAg LyogV2hlbiByZXZlcnNlIGV4Y3V0ZSwgdGhlIGZpcnN0IHJlY29yZF9lbmQg aXMgdGhlIHBhcnQgb2YKKwkJICAgICBjdXJyZW50IGluc3RydWN0aW9uLiAg Ki8KKwkJICBmaXJzdF9yZWNvcmRfZW5kID0gMDsKKwkJfQorCSAgICAgIGVs c2UKKwkJeworCQkgIC8qIEluIEVYRUNfUkVWRVJTRSBtb2RlLCB0aGlzIGlz IHRoZSByZWNvcmRfZW5kIG9mIHByZXYKKwkJICAgICBpbnN0cnVjdGlvbi4K KwkJICAgICBJbiBFWEVDX0ZPUldBUkQgbW9kZSwgdGhpcyBpcyB0aGUgcmVj b3JkX2VuZCBvZiBjdXJyZW50CisJCSAgICAgaW5zdHJ1Y3Rpb24uICAqLwor CQkgIC8qIHN0ZXAgKi8KKwkJICBpZiAocmVjb3JkX3Jlc3VtZV9zdGVwKQor CQkgICAgeworCQkgICAgICBpZiAocmVjb3JkX2RlYnVnID4gMSkKKwkJCXsK KwkJCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCQkg ICAgICAiUHJvY2VzcyByZWNvcmQ6IHN0ZXAuXG4iKTsKKwkJCX0KKwkJICAg ICAgY29udGludWVfZmxhZyA9IDA7CisJCSAgICB9CisKKwkJICAvKiBjaGVj ayBicmVha3BvaW50ICovCisJCSAgdG1wX3BjID0gcmVnY2FjaGVfcmVhZF9w YyAocmVnY2FjaGUpOworCQkgIGlmIChicmVha3BvaW50X2luc2VydGVkX2hl cmVfcCAodG1wX3BjKSkKKwkJICAgIHsKKwkJICAgICAgaWYgKHJlY29yZF9k ZWJ1ZykKKwkJCXsKKwkJCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3Rk bG9nLAorCQkJCQkgICAgICAiUHJvY2VzcyByZWNvcmQ6IGJyZWFrIGF0IDB4 JXMuXG4iLAorCQkJCQkgICAgICBwYWRkcl9ueiAodG1wX3BjKSk7CisJCQl9 CisJCSAgICAgIGlmIChnZGJhcmNoX2RlY3JfcGNfYWZ0ZXJfYnJlYWsgKGdl dF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpCisJCQkgICYmIGV4ZWN1dGlv bl9kaXJlY3Rpb24gPT0gRVhFQ19GT1JXQVJECisJCQkgICYmICFyZWNvcmRf cmVzdW1lX3N0ZXApCisgCQkJeworCQkJICByZWdjYWNoZV93cml0ZV9wYyAo cmVnY2FjaGUsCisJCQkJCSAgICAgdG1wX3BjICsKKwkJCQkJICAgICBnZGJh cmNoX2RlY3JfcGNfYWZ0ZXJfYnJlYWsKKwkJCQkJICAgICAoZ2V0X3JlZ2Nh Y2hlX2FyY2ggKHJlZ2NhY2hlKSkpOworIAkJCX0KKwkJICAgICAgY29udGlu dWVfZmxhZyA9IDA7CisJCSAgICB9CisJCX0KKwkgICAgICBpZiAoZXhlY3V0 aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UpCisJCXsKKwkJICBuZWVk X2Rhc20gPSByZWNvcmRfbGlzdC0+dS5uZWVkX2Rhc207CisJCX0KKwkgICAg fQorCituZXh0OgorCSAgaWYgKGNvbnRpbnVlX2ZsYWcpCisJICAgIHsKKwkg ICAgICBpZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0Up CisJCXsKKwkJICBpZiAocmVjb3JkX2xpc3QtPnByZXYpCisJCSAgICByZWNv cmRfbGlzdCA9IHJlY29yZF9saXN0LT5wcmV2OworCQl9CisJICAgICAgZWxz ZQorCQl7CisJCSAgaWYgKHJlY29yZF9saXN0LT5uZXh0KQorCQkgICAgcmVj b3JkX2xpc3QgPSByZWNvcmRfbGlzdC0+bmV4dDsKKwkJfQorCSAgICB9CisJ fQorICAgICAgd2hpbGUgKGNvbnRpbnVlX2ZsYWcpOworCisgICAgICBpZiAo c2lnYWN0aW9uIChTSUdBTFJNLCAmb2xkX2FjdCwgTlVMTCkpCisJeworCSAg cGVycm9yX3dpdGhfbmFtZSAoXygiUHJvY2VzcyByZWNvcmQ6IHNpZ2FjdGlv biBmYWlsZWQiKSk7CisJfQorCityZXBsYXlfb3V0OgorICAgICAgaWYgKHJl Y29yZF9nZXRfc2lnKQorCXsKKwkgIHN0YXR1cy0+dmFsdWUuc2lnID0gVEFS R0VUX1NJR05BTF9JTlQ7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHN0YXR1 cy0+dmFsdWUuc2lnID0gVEFSR0VUX1NJR05BTF9UUkFQOworCX0KKworICAg ICAgZGlzY2FyZF9jbGVhbnVwcyAob2xkX2NsZWFudXBzKTsKKyAgICB9CisK KyAgZG9fY2xlYW51cHMgKHNldF9jbGVhbnVwcyk7CisgIHJldHVybiBpbmZl cmlvcl9wdGlkOworfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX2Rpc2Nvbm5l Y3QgKHN0cnVjdCB0YXJnZXRfb3BzICp0YXJnZXQsIGNoYXIgKmFyZ3MsIGlu dCBmcm9tX3R0eSkKK3sKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICB7Cisg ICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJQcm9jZXNz IHJlY29yZDogcmVjb3JkX2Rpc2Nvbm5lY3RcbiIpOworICAgIH0KKyAgdW5w dXNoX3RhcmdldCAoJnJlY29yZF9vcHMpOworICB0YXJnZXRfZGlzY29ubmVj dCAoYXJncywgZnJvbV90dHkpOworfQorCitzdGF0aWMgdm9pZAorcmVjb3Jk X2RldGFjaCAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywgY2hhciAqYXJncywg aW50IGZyb21fdHR5KQoreworICBpZiAocmVjb3JkX2RlYnVnKQorICAgIHsK KyAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIlByb2Nl c3MgcmVjb3JkOiByZWNvcmRfZGV0YWNoXG4iKTsKKyAgICB9CisgIHVucHVz aF90YXJnZXQgKCZyZWNvcmRfb3BzKTsKKyAgdGFyZ2V0X2RldGFjaCAoYXJn cywgZnJvbV90dHkpOworfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX21vdXJu X2luZmVyaW9yIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzKQoreworICBpZiAo cmVjb3JkX2RlYnVnKQorICAgIHsKKyAgICAgIGZwcmludGZfdW5maWx0ZXJl ZCAoZ2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfbW91cm5f aW5mZXJpb3JcbiIpOworICAgIH0KKyAgdW5wdXNoX3RhcmdldCAoJnJlY29y ZF9vcHMpOworICB0YXJnZXRfbW91cm5faW5mZXJpb3IgKCk7Cit9CisKKy8q IENsb3NlIHByb2Nlc3MgcmVjb3JkIHRhcmdldCBiZWZvcmUga2lsbGluZyB0 aGUgaW5mZXJpb3IgcHJvY2Vzcy4gICovCitzdGF0aWMgdm9pZAorcmVjb3Jk X2tpbGwgKHZvaWQpCit7CisgIGlmIChyZWNvcmRfZGVidWcpCisgICAgewor ICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiUHJvY2Vz cyByZWNvcmQ6IHJlY29yZF9raWxsXG4iKTsKKyAgICB9CisgIHVucHVzaF90 YXJnZXQgKCZyZWNvcmRfb3BzKTsKKyAgdGFyZ2V0X2tpbGwgKCk7Cit9CisK Ky8qIFJlY29yZCByZWdpc3RlcnMgY2hhbmdlIChieSB1c2VyIG9yIGJ5IEdE QikgdG8gbGlzdCBhcyBhbiBpbnN0cnVjdGlvbi4gICovCitzdGF0aWMgdm9p ZAorcmVjb3JkX3JlZ2lzdGVyc19jaGFuZ2UgKHN0cnVjdCByZWdjYWNoZSAq cmVnY2FjaGUsIGludCByZWdudW0pCit7CisgIC8qIENoZWNrIHJlY29yZF9p bnNuX251bS4gICovCisgIHJlY29yZF9jaGVja19pbnNuX251bSAoMCk7CisK KyAgcmVjb3JkX2FyY2hfbGlzdF9oZWFkID0gTlVMTDsKKyAgcmVjb3JkX2Fy Y2hfbGlzdF90YWlsID0gTlVMTDsKKworICByZWNvcmRfcmVnY2FjaGUgPSBn ZXRfY3VycmVudF9yZWdjYWNoZSAoKTsKKworICBpZiAocmVnbnVtIDwgMCkK KyAgICB7CisgICAgICBpbnQgaTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBn ZGJhcmNoX251bV9yZWdzIChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUp KTsgaSsrKQorCXsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcg KGkpKQorCSAgICB7CisJICAgICAgcmVjb3JkX2xpc3RfcmVsZWFzZSAocmVj b3JkX2FyY2hfbGlzdF90YWlsKTsKKwkgICAgICBlcnJvciAoXygiUHJvY2Vz cyByZWNvcmQ6IGZhaWxlZCB0byByZWNvcmQgZXhlY3V0aW9uIGxvZy4iKSk7 CisJICAgIH0KKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAocmVnbnVtKSkKKwl7CisJICBy ZWNvcmRfbGlzdF9yZWxlYXNlIChyZWNvcmRfYXJjaF9saXN0X3RhaWwpOwor CSAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiBmYWlsZWQgdG8gcmVjb3Jk IGV4ZWN1dGlvbiBsb2cuIikpOworCX0KKyAgICB9CisgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9lbmQgKDApKQorICAgIHsKKyAgICAgIHJlY29yZF9s aXN0X3JlbGVhc2UgKHJlY29yZF9hcmNoX2xpc3RfdGFpbCk7CisgICAgICBl cnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGZhaWxlZCB0byByZWNvcmQgZXhl Y3V0aW9uIGxvZy4iKSk7CisgICAgfQorICByZWNvcmRfbGlzdC0+bmV4dCA9 IHJlY29yZF9hcmNoX2xpc3RfaGVhZDsKKyAgcmVjb3JkX2FyY2hfbGlzdF9o ZWFkLT5wcmV2ID0gcmVjb3JkX2xpc3Q7CisgIHJlY29yZF9saXN0ID0gcmVj b3JkX2FyY2hfbGlzdF90YWlsOworCisgIGlmIChyZWNvcmRfaW5zbl9udW0g PT0gcmVjb3JkX2luc25fbWF4X251bSAmJiByZWNvcmRfaW5zbl9tYXhfbnVt KQorICAgIHsKKyAgICAgIHJlY29yZF9saXN0X3JlbGVhc2VfZmlyc3QgKCk7 CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmVjb3JkX2luc25fbnVt Kys7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX3N0b3JlX3Jl Z2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25v KQoreworICBpZiAoIXJlY29yZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGUpCisg ICAgeworICAgICAgaWYgKFJFQ09SRF9JU19SRVBMQVkpCisJeworCSAgaW50 IG47CisJICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBzOworCisJICAv KiBMZXQgdXNlciBjaG9vc2UgaWYgaGUgd2FudHMgdG8gd3JpdGUgcmVnaXN0 ZXIgb3Igbm90LiAgKi8KKwkgIGlmIChyZWdubyA8IDApCisJICAgIHsKKwkg ICAgICBuID0KKwkJbnF1ZXJ5IChfCisJCQkoIkJlY2F1c2UgR0RCIGlzIGlu IHJlcGxheSBtb2RlLCBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgYSByZWdpc3Rl ciB3aWxsIG1ha2UgdGhlIGV4ZWN1dGlvbiBsb2cgdW51c2FibGUgZnJvbSB0 aGlzIHBvaW50IG9ud2FyZC4gIENoYW5nZSBhbGwgcmVnaXN0ZXJzPyIpKTsK KwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgbiA9CisJCW5xdWVy eSAoXworCQkJKCJCZWNhdXNlIEdEQiBpcyBpbiByZXBsYXkgbW9kZSwgY2hh bmdpbmcgdGhlIHZhbHVlIG9mIGEgcmVnaXN0ZXIgd2lsbCBtYWtlIHRoZSBl eGVjdXRpb24gbG9nIHVudXNhYmxlIGZyb20gdGhpcyBwb2ludCBvbndhcmQu ICBDaGFuZ2UgcmVnaXN0ZXIgJXM/IiksCisJCQlnZGJhcmNoX3JlZ2lzdGVy X25hbWUgKGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSksCisJCQkJCSAg ICAgICByZWdubykpOworCSAgICB9CisKKwkgIGlmICghbikKKwkgICAgewor CSAgICAgIC8qIEludmFsaWRhdGUgdGhlIHZhbHVlIG9mIHJlZ2NhY2hlIHRo YXQgd2FzIHNldCBpbiBmdW5jdGlvbgorCSAgICAgICAgICJyZWdjYWNoZV9y YXdfd3JpdGUiLiAgKi8KKwkgICAgICBpZiAocmVnbm8gPCAwKQorCQl7CisJ CSAgaW50IGk7CisJCSAgZm9yIChpID0gMDsKKwkJICAgICAgIGkgPCBnZGJh cmNoX251bV9yZWdzIChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpKTsK KwkJICAgICAgIGkrKykKKwkJICAgIHsKKwkJICAgICAgcmVnY2FjaGVfaW52 YWxpZGF0ZSAocmVnY2FjaGUsIGkpOworCQkgICAgfQorCQl9CisJICAgICAg ZWxzZQorCQl7CisJCSAgcmVnY2FjaGVfaW52YWxpZGF0ZSAocmVnY2FjaGUs IHJlZ25vKTsKKwkJfQorCisJICAgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVj b3JkIGNhbmNlbGVkIHRoZSBvcGVyYXRpb24uIikpOworCSAgICB9CisKKwkg IC8qIERlc3Ryb3kgdGhlIHJlY29yZCBmcm9tIGhlcmUgZm9yd2FyZC4gICov CisJICByZWNvcmRfbGlzdF9yZWxlYXNlX25leHQgKCk7CisJfQorCisgICAg ICByZWNvcmRfcmVnaXN0ZXJzX2NoYW5nZSAocmVnY2FjaGUsIHJlZ25vKTsK KyAgICB9CisgIHJlY29yZF9iZW5lYXRoX3RvX3N0b3JlX3JlZ2lzdGVycyAo cmVnY2FjaGUsIHJlZ25vKTsKK30KKworLyogcmVjb3JkX3hmZXJfcGFydGlh bCAtLSBiZWhhdmlvciBpcyBjb25kaXRpb25hbCBvbiBSRUNPUkRfSVNfUkVQ TEFZLgorICAgSW4gcmVwbGF5IG1vZGUsIHdlIGNhbm5vdCB3cml0ZSBtZW1v cnkgdW5sZXMgd2UgYXJlIHdpbGxpbmcgdG8KKyAgIGludmFsaWRhdGUgdGhl IHJlY29yZC9yZXBsYXkgbG9nIGZyb20gdGhpcyBwb2ludCBmb3J3YXJkLiAg Ki8KKworc3RhdGljIExPTkdFU1QKK3JlY29yZF94ZmVyX3BhcnRpYWwgKHN0 cnVjdCB0YXJnZXRfb3BzICpvcHMsIGVudW0gdGFyZ2V0X29iamVjdCBvYmpl Y3QsCisJCSAgICAgY29uc3QgY2hhciAqYW5uZXgsIGdkYl9ieXRlICogcmVh ZGJ1ZiwKKwkJICAgICBjb25zdCBnZGJfYnl0ZSAqIHdyaXRlYnVmLCBVTE9O R0VTVCBvZmZzZXQsIExPTkdFU1QgbGVuKQoreworICBpZiAoIXJlY29yZF9n ZGJfb3BlcmF0aW9uX2Rpc2FibGUKKyAgICAgICYmIChvYmplY3QgPT0gVEFS R0VUX09CSkVDVF9NRU1PUlkKKwkgIHx8IG9iamVjdCA9PSBUQVJHRVRfT0JK RUNUX1JBV19NRU1PUlkpICYmIHdyaXRlYnVmKQorICAgIHsKKyAgICAgIGlm IChSRUNPUkRfSVNfUkVQTEFZKQorCXsKKwkgIC8qIExldCB1c2VyIGNob29z ZSBpZiBoZSB3YW50cyB0byB3cml0ZSBtZW1vcnkgb3Igbm90LiAgKi8KKwkg IGlmICghbnF1ZXJ5IChfKCJCZWNhdXNlIEdEQiBpcyBpbiByZXBsYXkgbW9k ZSwgd3JpdGluZyB0byBtZW1vcnkgd2lsbCBtYWtlIHRoZSBleGVjdXRpb24g bG9nIHVudXNhYmxlIGZyb20gdGhpcyBwb2ludCBvbndhcmQuICBXcml0ZSBt ZW1vcnkgYXQgYWRkcmVzcyAweCVzPyIpLAorCQkgICAgICAgcGFkZHJfbnog KG9mZnNldCkpKQorCSAgICB7CisJICAgICAgcmV0dXJuIC0xOworCSAgICB9 CisKKwkgIC8qIERlc3Ryb3kgdGhlIHJlY29yZCBmcm9tIGhlcmUgZm9yd2Fy ZC4gICovCisJICByZWNvcmRfbGlzdF9yZWxlYXNlX25leHQgKCk7CisJfQor CisgICAgICAvKiBDaGVjayByZWNvcmRfaW5zbl9udW0gKi8KKyAgICAgIHJl Y29yZF9jaGVja19pbnNuX251bSAoMCk7CisKKyAgICAgIC8qIFJlY29yZCBy ZWdpc3RlcnMgY2hhbmdlIHRvIGxpc3QgYXMgYW4gaW5zdHJ1Y3Rpb24uICAq LworICAgICAgcmVjb3JkX2FyY2hfbGlzdF9oZWFkID0gTlVMTDsKKyAgICAg IHJlY29yZF9hcmNoX2xpc3RfdGFpbCA9IE5VTEw7CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtIChvZmZzZXQsIGxlbikpCisJeworCSAg cmVjb3JkX2xpc3RfcmVsZWFzZSAocmVjb3JkX2FyY2hfbGlzdF90YWlsKTsK KwkgIGlmIChyZWNvcmRfZGVidWcpCisJICAgIHsKKwkgICAgICBmcHJpbnRm X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICBfCisJCQkJICAoIlBy b2Nlc3MgcmVjb3JkOiBmYWlsZWQgdG8gcmVjb3JkIGV4ZWN1dGlvbiBsb2cu IikpOworCSAgICB9CisJICByZXR1cm4gLTE7CisJfQorICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX2VuZCAoMCkpCisJeworCSAgcmVjb3JkX2xp c3RfcmVsZWFzZSAocmVjb3JkX2FyY2hfbGlzdF90YWlsKTsKKwkgIGlmIChy ZWNvcmRfZGVidWcpCisJICAgIHsKKwkgICAgICBmcHJpbnRmX3VuZmlsdGVy ZWQgKGdkYl9zdGRsb2csCisJCQkJICBfCisJCQkJICAoIlByb2Nlc3MgcmVj b3JkOiBmYWlsZWQgdG8gcmVjb3JkIGV4ZWN1dGlvbiBsb2cuIikpOworCSAg ICB9CisJICByZXR1cm4gLTE7CisJfQorICAgICAgcmVjb3JkX2xpc3QtPm5l eHQgPSByZWNvcmRfYXJjaF9saXN0X2hlYWQ7CisgICAgICByZWNvcmRfYXJj aF9saXN0X2hlYWQtPnByZXYgPSByZWNvcmRfbGlzdDsKKyAgICAgIHJlY29y ZF9saXN0ID0gcmVjb3JkX2FyY2hfbGlzdF90YWlsOworCisgICAgICBpZiAo cmVjb3JkX2luc25fbnVtID09IHJlY29yZF9pbnNuX21heF9udW0gJiYgcmVj b3JkX2luc25fbWF4X251bSkKKwl7CisJICByZWNvcmRfbGlzdF9yZWxlYXNl X2ZpcnN0ICgpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICByZWNvcmRfaW5z bl9udW0rKzsKKwl9CisgICAgfQorCisgIHJldHVybiByZWNvcmRfYmVuZWF0 aF90b194ZmVyX3BhcnRpYWwgKG9wcywgb2JqZWN0LCBhbm5leCwgcmVhZGJ1 ZiwKKwkJCQkJIHdyaXRlYnVmLCBvZmZzZXQsIGxlbik7Cit9CisKKy8qIHJl Y29yZF9pbnNlcnRfYnJlYWtwb2ludAorICAgcmVjb3JkX3JlbW92ZV9icmVh a3BvaW50CisgICBCZWhhdmlvciBpcyBjb25kaXRpb25hbCBvbiBSRUNPUkRf SVNfUkVQTEFZLgorICAgV2Ugd2lsbCBub3QgYWN0dWFsbHkgaW5zZXJ0IG9y IHJlbW92ZSBicmVha3BvaW50cyB3aGVuIHJlcGxheWluZywKKyAgIG5vciB3 aGVuIHJlY29yZGluZy4gICovCisKK3N0YXRpYyBpbnQKK3JlY29yZF9pbnNl cnRfYnJlYWtwb2ludCAoc3RydWN0IGJwX3RhcmdldF9pbmZvICpicF90Z3Qp Cit7CisgIGlmICghUkVDT1JEX0lTX1JFUExBWSkKKyAgICB7CisgICAgICBz dHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBzID0gcmVjb3JkX2dkYl9vcGVy YXRpb25fZGlzYWJsZV9zZXQgKCk7CisgICAgICBpbnQgcmV0ID0gcmVjb3Jk X2JlbmVhdGhfdG9faW5zZXJ0X2JyZWFrcG9pbnQgKGJwX3RndCk7CisKKyAg ICAgIGRvX2NsZWFudXBzIChvbGRfY2xlYW51cHMpOworCisgICAgICByZXR1 cm4gcmV0OworICAgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlu dAorcmVjb3JkX3JlbW92ZV9icmVha3BvaW50IChzdHJ1Y3QgYnBfdGFyZ2V0 X2luZm8gKmJwX3RndCkKK3sKKyAgaWYgKCFSRUNPUkRfSVNfUkVQTEFZKQor ICAgIHsKKyAgICAgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2xlYW51cHMgPSBy ZWNvcmRfZ2RiX29wZXJhdGlvbl9kaXNhYmxlX3NldCAoKTsKKyAgICAgIGlu dCByZXQgPSByZWNvcmRfYmVuZWF0aF90b19yZW1vdmVfYnJlYWtwb2ludCAo YnBfdGd0KTsKKworICAgICAgZG9fY2xlYW51cHMgKG9sZF9jbGVhbnVwcyk7 CisKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgIHJldHVybiAwOwor fQorCitzdGF0aWMgaW50CityZWNvcmRfY2FuX2V4ZWN1dGVfcmV2ZXJzZSAo dm9pZCkKK3sKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0 X3JlY29yZF9vcHMgKHZvaWQpCit7CisgIHJlY29yZF9vcHMudG9fc2hvcnRu YW1lID0gInJlY29yZCI7CisgIHJlY29yZF9vcHMudG9fbG9uZ25hbWUgPSAi UHJvY2VzcyByZWNvcmQgYW5kIHJlcGxheSB0YXJnZXQiOworICByZWNvcmRf b3BzLnRvX2RvYyA9CisgICAgIkxvZyBwcm9ncmFtIHdoaWxlIGV4ZWN1dGlu ZyBhbmQgcmVwbGF5IGV4ZWN1dGlvbiBmcm9tIGxvZy4iOworICByZWNvcmRf b3BzLnRvX29wZW4gPSByZWNvcmRfb3BlbjsKKyAgcmVjb3JkX29wcy50b19j bG9zZSA9IHJlY29yZF9jbG9zZTsKKyAgcmVjb3JkX29wcy50b19yZXN1bWUg PSByZWNvcmRfcmVzdW1lOworICByZWNvcmRfb3BzLnRvX3dhaXQgPSByZWNv cmRfd2FpdDsKKyAgcmVjb3JkX29wcy50b19kaXNjb25uZWN0ID0gcmVjb3Jk X2Rpc2Nvbm5lY3Q7CisgIHJlY29yZF9vcHMudG9fZGV0YWNoID0gcmVjb3Jk X2RldGFjaDsKKyAgcmVjb3JkX29wcy50b19tb3Vybl9pbmZlcmlvciA9IHJl Y29yZF9tb3Vybl9pbmZlcmlvcjsKKyAgcmVjb3JkX29wcy50b19raWxsID0g cmVjb3JkX2tpbGw7CisgIHJlY29yZF9vcHMudG9fY3JlYXRlX2luZmVyaW9y ID0gZmluZF9kZWZhdWx0X2NyZWF0ZV9pbmZlcmlvcjsJLyogTWFrZSByZWNv cmQgc3VwcG9ydCBjb21tYW5kICJydW4iLiAgKi8KKyAgcmVjb3JkX29wcy50 b19zdG9yZV9yZWdpc3RlcnMgPSByZWNvcmRfc3RvcmVfcmVnaXN0ZXJzOwor ICByZWNvcmRfb3BzLnRvX3hmZXJfcGFydGlhbCA9IHJlY29yZF94ZmVyX3Bh cnRpYWw7CisgIHJlY29yZF9vcHMudG9faW5zZXJ0X2JyZWFrcG9pbnQgPSBy ZWNvcmRfaW5zZXJ0X2JyZWFrcG9pbnQ7CisgIHJlY29yZF9vcHMudG9fcmVt b3ZlX2JyZWFrcG9pbnQgPSByZWNvcmRfcmVtb3ZlX2JyZWFrcG9pbnQ7Cisg IHJlY29yZF9vcHMudG9fY2FuX2V4ZWN1dGVfcmV2ZXJzZSA9IHJlY29yZF9j YW5fZXhlY3V0ZV9yZXZlcnNlOworICByZWNvcmRfb3BzLnRvX3N0cmF0dW0g PSByZWNvcmRfc3RyYXR1bTsKKyAgcmVjb3JkX29wcy50b19tYWdpYyA9IE9Q U19NQUdJQzsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfcmVjb3JkX2RlYnVn IChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5LAorCQkgICBz dHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqYywgY29uc3QgY2hhciAqdmFsdWUp Cit7CisgIGZwcmludGZfZmlsdGVyZWQgKGZpbGUsIF8oIkRlYnVnZ2luZyBv ZiBwcm9jZXNzIHJlY29yZCB0YXJnZXQgaXMgJXMuXG4iKSwKKwkJICAgIHZh bHVlKTsKK30KKworLyogY21kX3JlY29yZF9zdGFydCAtLSBhbGlhcyBmb3Ig InRhcmdldCByZWNvcmQiLiAgKi8KKworc3RhdGljIHZvaWQKK2NtZF9yZWNv cmRfc3RhcnQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKK3sKKyAgZXhl Y3V0ZV9jb21tYW5kICgidGFyZ2V0IHJlY29yZCIsIGZyb21fdHR5KTsKK30K KworLyogY21kX3JlY29yZF9kZWxldGUgLS0gdHJ1bmNhdGUgdGhlIHJlY29y ZCBsb2cgZnJvbSB0aGUgcHJlc2VudCBwb2ludAorICAgb2YgcmVwbGF5IHVu dGlsIHRoZSBlbmQuICAqLworCitzdGF0aWMgdm9pZAorY21kX3JlY29yZF9k ZWxldGUgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKK3sKKyAgaWYgKFRB UkdFVF9JU19QUk9DRVNTX1JFQ09SRCkKKyAgICB7CisgICAgICBpZiAoUkVD T1JEX0lTX1JFUExBWSkKKwl7CisJICBpZiAoIWZyb21fdHR5IHx8IHF1ZXJ5 IChfKCJEZWxldGUgdGhlIGxvZyBmcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCBh bmQgYmVnaW4gdG8gcmVjb3JkIHRoZSBydW5uaW5nIG1lc3NhZ2UgYXQgY3Vy cmVudCBQQz8iKSkpCisJICAgIHsKKwkgICAgICByZWNvcmRfbGlzdF9yZWxl YXNlX25leHQgKCk7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAg cHJpbnRmX3VuZmlsdGVyZWQgKF8oIkFscmVhZHkgYXQgZW5kIG9mIHJlY29y ZCBsaXN0LlxuIikpOworCX0KKworICAgIH0KKyAgZWxzZQorICAgIHsKKyAg ICAgIHByaW50Zl91bmZpbHRlcmVkIChfKCJQcm9jZXNzIHJlY29yZCBpcyBu b3Qgc3RhcnRlZC5cbiIpKTsKKyAgICB9Cit9CisKKy8qIGNtZF9yZWNvcmRf c3RvcCAtLSBpbXBsZW1lbnQgdGhlICJzdG9wcmVjb3JkIiBjb21tYW5kLiAg Ki8KKworc3RhdGljIHZvaWQKK2NtZF9yZWNvcmRfc3RvcCAoY2hhciAqYXJn cywgaW50IGZyb21fdHR5KQoreworICBpZiAoVEFSR0VUX0lTX1BST0NFU1Nf UkVDT1JEKQorICAgIHsKKyAgICAgIGlmICghcmVjb3JkX2xpc3QgfHwgIWZy b21fdHR5IHx8IHF1ZXJ5IChfKCJEZWxldGUgcmVjb3JkZWQgbG9nIGFuZCBz dG9wIHJlY29yZGluZz8iKSkpCisJeworCSAgdW5wdXNoX3RhcmdldCAoJnJl Y29yZF9vcHMpOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBw cmludGZfdW5maWx0ZXJlZCAoXygiUHJvY2VzcyByZWNvcmQgaXMgbm90IHN0 YXJ0ZWQuXG4iKSk7CisgICAgfQorfQorCisvKiBzZXRfcmVjb3JkX2luc25f bWF4X251bSAtLSBzZXQgdXBwZXIgbGltaXQgb2YgcmVjb3JkIGxvZyBzaXpl LiAgKi8KKworc3RhdGljIHZvaWQKK3NldF9yZWNvcmRfaW5zbl9tYXhfbnVt IChjaGFyICphcmdzLCBpbnQgZnJvbV90dHksIHN0cnVjdCBjbWRfbGlzdF9l bGVtZW50ICpjKQoreworICBpZiAocmVjb3JkX2luc25fbnVtID4gcmVjb3Jk X2luc25fbWF4X251bSAmJiByZWNvcmRfaW5zbl9tYXhfbnVtKQorICAgIHsK KyAgICAgIHByaW50Zl91bmZpbHRlcmVkIChfKCJSZWNvcmQgaW5zdHJ1Y3Rp b25zIG51bWJlciBpcyBiaWdnZXIgdGhhbiByZWNvcmQgaW5zdHJ1Y3Rpb25z IG1heCBudW1iZXIuICBBdXRvIGRlbGV0ZSB0aGUgZmlyc3Qgb25lcz9cbiIp KTsKKworICAgICAgd2hpbGUgKHJlY29yZF9pbnNuX251bSA+IHJlY29yZF9p bnNuX21heF9udW0pCisJeworCSAgcmVjb3JkX2xpc3RfcmVsZWFzZV9maXJz dCAoKTsKKwl9CisgICAgfQorfQorCisvKiBzaG93X3JlY29yZF9pbnNuX251 bWJlciAtLSBwcmludCB0aGUgY3VycmVudCBpbmRleAorICAgaW50byB0aGUg cmVjb3JkIGxvZyAobnVtYmVyIG9mIGluc25zIHJlY29yZGVkIHNvIGZhciku ICAqLworCitzdGF0aWMgdm9pZAorc2hvd19yZWNvcmRfaW5zbl9udW1iZXIg KGNoYXIgKmlnbm9yZSwgaW50IGZyb21fdHR5KQoreworICBwcmludGZfdW5m aWx0ZXJlZCAoXygiUmVjb3JkIGluc3RydWN0aW9uIG51bWJlciBpcyAlZC5c biIpLAorCQkgICAgIHJlY29yZF9pbnNuX251bSk7Cit9CisKK3ZvaWQKK19p bml0aWFsaXplX3JlY29yZCAodm9pZCkKK3sKKyAgLyogSW5pdCByZWNvcmRf bWFza2FsbC4gICovCisgIGlmIChzaWdmaWxsc2V0ICgmcmVjb3JkX21hc2th bGwpID09IC0xKQorICAgIHsKKyAgICAgIHBlcnJvcl93aXRoX25hbWUgKF8o IlByb2Nlc3MgcmVjb3JkOiBzaWdmaWxsc2V0IGZhaWxlZCIpKTsKKyAgICB9 CisKKyAgLyogSW5pdCByZWNvcmRfZmlyc3QuICAqLworICByZWNvcmRfZmly c3QucHJldiA9IE5VTEw7CisgIHJlY29yZF9maXJzdC5uZXh0ID0gTlVMTDsK KyAgcmVjb3JkX2ZpcnN0LnR5cGUgPSByZWNvcmRfZW5kOworICByZWNvcmRf Zmlyc3QudS5uZWVkX2Rhc20gPSAwOworCisgIGluaXRfcmVjb3JkX29wcyAo KTsKKyAgYWRkX3RhcmdldCAoJnJlY29yZF9vcHMpOworCisgIGFkZF9zZXRz aG93X3ppbnRlZ2VyX2NtZCAoInJlY29yZCIsIG5vX2NsYXNzLCAmcmVjb3Jk X2RlYnVnLAorCQkJICAgIF8oIlNldCBkZWJ1Z2dpbmcgb2YgcmVjb3JkL3Jl cGxheSBmZWF0dXJlLiIpLAorCQkJICAgIF8oIlNob3cgZGVidWdnaW5nIG9m IHJlY29yZC9yZXBsYXkgZmVhdHVyZS4iKSwKKwkJCSAgICBfCisJCQkgICAg KCJXaGVuIGVuYWJsZWQsIGRlYnVnZ2luZyBvdXRwdXQgZm9yIHJlY29yZC9y ZXBsYXkgZmVhdHVyZSBpcyBkaXNwbGF5ZWQuIiksCisJCQkgICAgTlVMTCwg c2hvd19yZWNvcmRfZGVidWcsICZzZXRkZWJ1Z2xpc3QsCisJCQkgICAgJnNo b3dkZWJ1Z2xpc3QpOworCisgIGFkZF9jb20gKCJyZWNvcmQiLCBjbGFzc19v YnNjdXJlLCBjbWRfcmVjb3JkX3N0YXJ0LAorCSAgIF8oIkFiYnJldmlhdGVk IGZvcm0gb2YgXCJ0YXJnZXQgcmVjb3JkXCIgY29tbWFuZC4iKSk7CisKKyAg YWRkX2NvbV9hbGlhcyAoInJlYyIsICJyZWNvcmQiLCBjbGFzc19vYnNjdXJl LCAxKTsKKworICAvKiBYWFg6IEkgdHJ5IHRvIHVzZSBzb21lIHNpbXBsZSBj b21tYW5kcyBzdWNoIGFzICJkaXNjb25uZWN0IiBhbmQKKyAgICAgImRldGFj aCIgdG8gc3VwcG9ydCB0aGlzIGZ1bmN0aW9ucy4gIEJ1dCB0aGVzZSBjb21t YW5kcyBhbGwgaGF2ZQorICAgICBvdGhlciBhZmZlY3QgdG8gR0RCIHN1Y2gg YXMgY2FsbCBmdW5jdGlvbiAibm9fc2hhcmVkX2xpYnJhcmllcyIuCisgICAg IFNvIEkgYWRkIHNwZWNpYWwgY29tbWFuZHMgdG8gR0RCLiAgKi8KKyAgYWRk X2NvbSAoImRlbHJlY29yZCIsIGNsYXNzX29ic2N1cmUsIGNtZF9yZWNvcmRf ZGVsZXRlLAorCSAgIF8oIkRlbGV0ZSB0aGUgcmVzdCBvZiBleGVjdXRpb24g bG9nIGFuZCBzdGFydCByZWNvcmRpbmcgaXQgYW5ldy4iKSk7CisgIGFkZF9j b21fYWxpYXMgKCJkciIsICJkZWxyZWNvcmQiLCBjbGFzc19vYnNjdXJlLCAx KTsKKyAgYWRkX2NvbSAoInN0b3ByZWNvcmQiLCBjbGFzc19vYnNjdXJlLCBj bWRfcmVjb3JkX3N0b3AsCisJICAgXygiU3RvcCB0aGUgcmVjb3JkL3JlcGxh eSB0YXJnZXQuIikpOworICBhZGRfY29tX2FsaWFzICgic3IiLCAic3RvcHJl Y29yZCIsIGNsYXNzX29ic2N1cmUsIDEpOworCisgIC8qIFJlY29yZCBpbnN0 cnVjdGlvbnMgbnVtYmVyIGxpbWl0IGNvbW1hbmQuICAqLworICBhZGRfc2V0 c2hvd19ib29sZWFuX2NtZCAoInJlY29yZC1zdG9wLWF0LWxpbWl0Iiwgbm9f Y2xhc3MsCisJCQkgICAgJnJlY29yZF9zdG9wX2F0X2xpbWl0LAorCQkJICAg IF8oIlNldCB3aGV0aGVyIHJlY29yZC9yZXBsYXkgc3RvcCB3aGVuIHJlY29y ZC9yZXBsYXkgYnVmZmVyIGJlY29tZXMgZnVsbC4iKSwKKwkJCSAgICBfKCJT aG93IHdoZXRoZXIgcmVjb3JkL3JlcGxheSBzdG9wIHdoZW4gcmVjb3JkL3Jl cGxheSBidWZmZXIgYmVjb21lcyBmdWxsLiIpLCBfKCJcCitFbmFibGUgaXMg ZGVmYXVsdCB2YWx1ZS5cblwKK1doZW4gZW5hYmxlZCwgaWYgdGhlIHJlY29y ZC9yZXBsYXkgYnVmZmVyIGJlY29tZXMgZnVsbCxcblwKK2FzayB1c2VyIHdo YXQgdG8gZG8uXG5cCitXaGVuIGRpc2FibGVkLCBpZiB0aGUgcmVjb3JkL3Jl cGxheSBidWZmZXIgYmVjb21lcyBmdWxsLFxuXAorZGVsZXRlIGl0IGFuZCBz dGFydCBuZXcgcmVjb3JkaW5nLiIpLCBOVUxMLCBOVUxMLCAmc2V0bGlzdCwg JnNob3dsaXN0KTsKKyAgYWRkX3NldHNob3dfemludGVnZXJfY21kICgicmVj b3JkLWluc24tbnVtYmVyLW1heCIsIG5vX2NsYXNzLAorCQkJICAgICZyZWNv cmRfaW5zbl9tYXhfbnVtLAorCQkJICAgIF8oIlNldCByZWNvcmQvcmVwbGF5 IGJ1ZmZlciBsaW1pdC4iKSwKKwkJCSAgICBfKCJTaG93IHJlY29yZC9yZXBs YXkgYnVmZmVyIGxpbWl0LiIpLCBfKCJcCitTZXQgdGhlIG1heGltdW0gbnVt YmVyIG9mIGluc3RydWN0aW9ucyB0byBiZSBzdG9yZWQgaW4gdGhlXG5cCity ZWNvcmQvcmVwbGF5IGJ1ZmZlci4gIFplcm8gbWVhbnMgdW5saW1pdGVkIChk ZWZhdWx0IDIwMDAwMCkuIiksCisJCQkgICAgc2V0X3JlY29yZF9pbnNuX21h eF9udW0sCisJCQkgICAgTlVMTCwgJnNldGxpc3QsICZzaG93bGlzdCk7Cisg IGFkZF9pbmZvICgicmVjb3JkLWluc24tbnVtYmVyIiwgc2hvd19yZWNvcmRf aW5zbl9udW1iZXIsIF8oIlwKK1Nob3cgdGhlIGN1cnJlbnQgbnVtYmVyIG9m IGluc3RydWN0aW9ucyBpbiB0aGUgcmVjb3JkL3JlcGxheSBidWZmZXIuIikp OworfQotLS0gYS8vZGV2L251bGwKKysrIGIvcmVjb3JkLmgKQEAgLTAsMCAr MSwxMDAgQEAKKy8qIFByb2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0 IGZvciBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisKKyAgIENvcHlyaWdodCAo QykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAg VGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMg b2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uICAqLworCisjaWZuZGVmIF9SRUNPUkRfSF8KKyNkZWZpbmUgX1JF Q09SRF9IXworCisjZGVmaW5lIFRBUkdFVF9JU19QUk9DRVNTX1JFQ09SRCAg IFwKKyAgICAgKGN1cnJlbnRfdGFyZ2V0LmJlbmVhdGggPT0gJnJlY29yZF9v cHMpCisjZGVmaW5lIFJFQ09SRF9JU19SRVBMQVkgXAorICAgICAocmVjb3Jk X2xpc3QtPm5leHQgfHwgZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JF VkVSU0UpCisKK3R5cGVkZWYgc3RydWN0IHJlY29yZF9yZWdfcworeworICBp bnQgbnVtOworICBnZGJfYnl0ZSAqdmFsOworfSByZWNvcmRfcmVnX3Q7CisK K3R5cGVkZWYgc3RydWN0IHJlY29yZF9tZW1fcworeworICBDT1JFX0FERFIg YWRkcjsKKyAgaW50IGxlbjsKKyAgZ2RiX2J5dGUgKnZhbDsKK30gcmVjb3Jk X21lbV90OworCitlbnVtIHJlY29yZF90eXBlCit7CisgIHJlY29yZF9lbmQg PSAwLAorICByZWNvcmRfcmVnLAorICByZWNvcmRfbWVtCit9OworCisvKiBU aGlzIGlzIHRoZSBjb3JlIHN0cnVjdCBvZiByZWNvcmQgZnVuY3Rpb24uCisK KyAgIEFuIGVudGl0eSBvZiByZWNvcmRfdCBpcyBhIHJlY29yZCBvZiB0aGUg dmFsdWUgY2hhbmdlIG9mIGEgcmVnaXN0ZXIKKyAgICgicmVjb3JkX3JlZyIp IG9yIGEgcGFydCBvZiBtZW1vcnkgKCJyZWNvcmRfbWVtIikuICBBbmQgZWFj aAorICAgaW5zdHJ1Y3Rpb24gbXVzdCBoYXMgYSByZWNvcmRfdCAoInJlY29y ZF9lbmQiKSB0aGF0IHBvaW50cyBvdXQgdGhpcworICAgaXMgdGhlIGxhc3Qg cmVjb3JkX3Qgb2YgdGhpcyBpbnN0cnVjdGlvbi4KKworICAgRWFjaCByZWNv cmRfdCBpcyBsaW5rZWQgdG8gInJlY29yZF9saXN0IiBieSAicHJldiIgYW5k ICJuZXh0Ii4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcmVjb3JkX3MKK3sKKyAg c3RydWN0IHJlY29yZF9zICpwcmV2OworICBzdHJ1Y3QgcmVjb3JkX3MgKm5l eHQ7CisgIGVudW0gcmVjb3JkX3R5cGUgdHlwZTsKKyAgdW5pb24KKyAgewor ICAgIC8qIHJlZyAqLworICAgIHJlY29yZF9yZWdfdCByZWc7CisgICAgLyog bWVtICovCisgICAgcmVjb3JkX21lbV90IG1lbTsKKyAgICAvKiBlbmQgKi8K KyAgICBpbnQgbmVlZF9kYXNtOworICB9IHU7Cit9IHJlY29yZF90OworCitl eHRlcm4gaW50IHJlY29yZF9kZWJ1ZzsKK2V4dGVybiByZWNvcmRfdCAqcmVj b3JkX2xpc3Q7CitleHRlcm4gcmVjb3JkX3QgKnJlY29yZF9hcmNoX2xpc3Rf aGVhZDsKK2V4dGVybiByZWNvcmRfdCAqcmVjb3JkX2FyY2hfbGlzdF90YWls OworZXh0ZXJuIHN0cnVjdCByZWdjYWNoZSAqcmVjb3JkX3JlZ2NhY2hlOwor CitleHRlcm4gc3RydWN0IHRhcmdldF9vcHMgcmVjb3JkX29wczsKKworZXh0 ZXJuIGludCByZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKGludCBudW0pOwor ZXh0ZXJuIGludCByZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKENPUkVfQURE UiBhZGRyLCBpbnQgbGVuKTsKK2V4dGVybiBpbnQgcmVjb3JkX2FyY2hfbGlz dF9hZGRfZW5kIChpbnQgbmVlZF9kYXNtKTsKK2V4dGVybiB2b2lkIHJlY29y ZF9tZXNzYWdlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCk7CitleHRlcm4g c3RydWN0IGNsZWFudXAgKiByZWNvcmRfZ2RiX29wZXJhdGlvbl9kaXNhYmxl X3NldCAodm9pZCk7CisKK2V4dGVybiB2b2lkICgqcmVjb3JkX2JlbmVhdGhf dG9fcmVzdW1lKSAocHRpZF90LCBpbnQsIGVudW0gdGFyZ2V0X3NpZ25hbCk7 CitleHRlcm4gcHRpZF90ICgqcmVjb3JkX2JlbmVhdGhfdG9fd2FpdCkgKHB0 aWRfdCwgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzICopOworZXh0ZXJuIHZv aWQgKCpyZWNvcmRfYmVuZWF0aF90b19zdG9yZV9yZWdpc3RlcnMpIChzdHJ1 Y3QgcmVnY2FjaGUgKiwgaW50IHJlZ25vKTsKK2V4dGVybiBMT05HRVNUICgq cmVjb3JkX2JlbmVhdGhfdG9feGZlcl9wYXJ0aWFsKSAoc3RydWN0IHRhcmdl dF9vcHMgKiBvcHMsCisJCQkJCQkgIGVudW0gdGFyZ2V0X29iamVjdCBvYmpl Y3QsCisJCQkJCQkgIGNvbnN0IGNoYXIgKmFubmV4LAorCQkJCQkJICBnZGJf Ynl0ZSAqIHJlYWRidWYsCisJCQkJCQkgIGNvbnN0IGdkYl9ieXRlICogd3Jp dGVidWYsCisJCQkJCQkgIFVMT05HRVNUIG9mZnNldCwKKwkJCQkJCSAgTE9O R0VTVCBsZW4pOworZXh0ZXJuIGludCAoKnJlY29yZF9iZW5lYXRoX3RvX2lu c2VydF9icmVha3BvaW50KSAoc3RydWN0IGJwX3RhcmdldF9pbmZvICopOwor ZXh0ZXJuIGludCAoKnJlY29yZF9iZW5lYXRoX3RvX3JlbW92ZV9icmVha3Bv aW50KSAoc3RydWN0IGJwX3RhcmdldF9pbmZvICopOworCisjZW5kaWYgLyog X1JFQ09SRF9IXyAqLwo= --0016e651fac2405f3f0460548111--