From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22204 invoked by alias); 12 Nov 2007 16:29:35 -0000 Received: (qmail 22193 invoked by uid 22791); 12 Nov 2007 16:29:33 -0000 X-Spam-Check-By: sourceware.org Received: from nz-out-0506.google.com (HELO nz-out-0506.google.com) (64.233.162.225) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 12 Nov 2007 16:29:27 +0000 Received: by nz-out-0506.google.com with SMTP id x7so864037nzc for ; Mon, 12 Nov 2007 08:29:16 -0800 (PST) Received: by 10.114.61.1 with SMTP id j1mr215168waa.1194884955009; Mon, 12 Nov 2007 08:29:15 -0800 (PST) Received: by 10.114.95.9 with HTTP; Mon, 12 Nov 2007 08:29:14 -0800 (PST) Message-ID: Date: Mon, 12 Nov 2007 16:29:00 -0000 From: "Rob Quill" To: gdb-patches@sourceware.org Subject: New scope checking patch MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_11407_3921161.1194884955000" 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: 2007-11/txt/msg00231.txt.bz2 ------=_Part_11407_3921161.1194884955000 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 2872 Hi all, The attached patch adds the ability to evaluate whether expressions are in scope without giving an error message. For example, if you were using a command file to control GDB then it it may not be ideal that the script stop executing due to a variable not being in scope at given position. This patch allows you to say (for example) while(the program is not finished) { if($in_scope(x)) print x; step; } which would step through he whole program and print all the values of x where x is valid, and just continue stepping where it is not valid. The bulk of the patch is changes to the evaluate_subexp functions in eval.c The following cases are cases which the core is written for, but have not been tested yet: case OP_SCOPE: case OP_REGISTER: case OP_STRING: case OP_OBJC_NSSTRING: /* Objective C Foundation case OP_BITSTRING: case UNOP_MEMVAL: case UNOP_MEMVAL_TLS: case OP_OBJC_SELF These cases have not been tested as I am unsure of code or commands which would allow me to test them. If anyone has any suggestions then that is greatly appreciated. The following cases are unimplemented as I am unsure of how to check the scope of these expressions. Any advice you have is greatly appreciated. case OP_ARRAY: case TERNOP_SLICE: case TERNOP_SLICE_COUNT: case TERNOP_COND: case OP_OBJC_SELECTOR: case OP_OBJC_MSGCALL: case OP_FUNCALL: case OP_F77_UNDETERMINED_ARGLIST: case STRUCTOP_PTR: case STRUCTOP_MEMBER: case STRUCTOP_MPTR: // case TYPE_CODE_METHODPTR: // case TYPE_CODE_MEMBERPTR: case MULTI_SUBSCRIPT: case UNOP_IND: For example, I think for a function call the way to check scope should be to check that there is a function in scope with that name, and that all the parameters are in scope. However, I am unsure how to implement this. TYPE_CODE_METHODPTR and TYPE_CODE_MEMBERPTR are commented out as they are supposedly redefinitions of two other cases (greater than and less than operators, I believe) I should also point out that expression are evaluated without side effects, so that, for example $in_scope(a = b) will return 1 if a and b are in scope, but will not change the value of a. There is a caveat with the patch which is as follows. If a variable is not in scope then the expression parser in c-exp.y inserts a value 0 into the expression tree. When the scope checking function sees a 0 expression in the tree it will return 0, to indicate not in scope. However, in the general case it should be true that all literals are in scope. However, due to the above caveat $in_scope(0) will return 0, any any other literal will return 1. This also affects compound expressions that involve the literal 0. For example, $in_scope(0+3) will return 0, as an expression with a binary operator is considering in scope iff both of its operands are in scope. Any thoughts on the patch are greatly appreciated. Thanks. Rob Quill ------=_Part_11407_3921161.1194884955000 Content-Type: text/x-patch; name=new_scope_check.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_f8x7n6yh Content-Disposition: attachment; filename=new_scope_check.patch Content-length: 24868 ZGlmZiAtdXJOIC4vY2xlYW4vc3JjL2dkYi8yOWstc2hhcmUvQ1ZTL0VudHJp ZXMgLi9tb2RpZmllZC9zcmMvZ2RiLzI5ay1zaGFyZS9DVlMvRW50cmllcwot LS0gLi9jbGVhbi9zcmMvZ2RiLzI5ay1zaGFyZS9DVlMvRW50cmllcwkyMDA3 LTExLTExIDE3OjA4OjMzLjAwMDAwMDAwMCArMDAwMAorKysgLi9tb2RpZmll ZC9zcmMvZ2RiLzI5ay1zaGFyZS9DVlMvRW50cmllcwkyMDA3LTExLTExIDE2 OjI3OjA2LjAwMDAwMDAwMCArMDAwMApAQCAtMSArMSBAQAotRC91ZGkvLy8v CitECmRpZmYgLXVyTiAuL2NsZWFuL3NyYy9nZGIvMjlrLXNoYXJlL0NWUy9F bnRyaWVzLkxvZyAuL21vZGlmaWVkL3NyYy9nZGIvMjlrLXNoYXJlL0NWUy9F bnRyaWVzLkxvZwotLS0gLi9jbGVhbi9zcmMvZ2RiLzI5ay1zaGFyZS9DVlMv RW50cmllcy5Mb2cJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx MDAKKysrIC4vbW9kaWZpZWQvc3JjL2dkYi8yOWstc2hhcmUvQ1ZTL0VudHJp ZXMuTG9nCTIwMDctMTEtMTEgMTY6Mjc6MDYuMDAwMDAwMDAwICswMDAwCkBA IC0wLDAgKzEgQEAKK0EgRC91ZGkvLy8vCmRpZmYgLXVyTiAuL2NsZWFuL3Ny Yy9nZGIvYy1leHAueSAuL21vZGlmaWVkL3NyYy9nZGIvYy1leHAueQotLS0g Li9jbGVhbi9zcmMvZ2RiL2MtZXhwLnkJMjAwNy0xMS0xMSAxNzowODo0Mi4w MDAwMDAwMDAgKzAwMDAKKysrIC4vbW9kaWZpZWQvc3JjL2dkYi9jLWV4cC55 CTIwMDctMTEtMTEgMTc6MDU6MzUuMDAwMDAwMDAwICswMDAwCkBAIC0xMDIs NiArMTAyLDkgQEAKICNkZWZpbmUgeXl0YWJsZQkgY195eXRhYmxlCiAjZGVm aW5lIHl5Y2hlY2sJIGNfeXljaGVjawogCisvKiBHbG9iYWwgdmFyaWFibGUg ZGVub3Rpbmcgd2hldGhlciB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHNj b3BlLCBub3QgdmFsdWUgKi8KK2ludCBjaGVja19zY29wZSA9IDA7CisKICNp Zm5kZWYgWVlERUJVRwogI2RlZmluZQlZWURFQlVHIDEJCS8qIERlZmF1bHQg dG8geXlkZWJ1ZyBzdXBwb3J0ICovCiAjZW5kaWYKQEAgLTIwNyw2ICsyMTAs OCBAQAogJXRva2VuIFRSVUVLRVlXT1JECiAldG9rZW4gRkFMU0VLRVlXT1JE CiAKKy8qICRpbl9zY29wZSBvcHBlcmF0b3IgKi8KKyVsZWZ0IElOX1NDT1BF CiAKICVsZWZ0ICcsJwogJWxlZnQgQUJPVkVfQ09NTUEKQEAgLTI1MCw2ICsy NTUsMTEgQEAKIAk7CiAKIC8qIEV4cHJlc3Npb25zLCBub3QgaW5jbHVkaW5n IHRoZSBjb21tYSBvcGVyYXRvci4gICovCitleHAJOglJTl9TQ09QRQorCQkJ eyBjaGVja19zY29wZSA9IDE7IH0KKwkJJygnIGV4cCAnKScKKwk7CisKIGV4 cAk6CScqJyBleHAgICAgJXByZWMgVU5BUlkKIAkJCXsgd3JpdGVfZXhwX2Vs dF9vcGNvZGUgKFVOT1BfSU5EKTsgfQogCTsKQEAgLTU5Niw4ICs2MDYsMjUg QEAKIAkJCQkJICAgICAgIFZBUl9ET01BSU4sIChpbnQgKikgTlVMTCwKIAkJ CQkJICAgICAgIChzdHJ1Y3Qgc3ltdGFiICoqKSBOVUxMKTsKIAkJCSAgaWYg KHN5bSA9PSAwKQotCQkJICAgIGVycm9yICgiTm8gc3ltYm9sIFwiJXNcIiBp biBzcGVjaWZpZWQgY29udGV4dC4iLAorCQkJICB7CisJCQkgICAgLyogQ2Fz ZSBmb3Igc2NvcGUgY2hlY2tpbmcuIElmIHNjb3BlIGlzIGJlaW5nIGNoZWNr ZWQgYW5kCisJCQkJICAgdGhlIHN5bWJvbCBpcyBub3QgaW4gc2NvcGUsIHJl dHVybiBhbiBleHByZXNpc29uIG9mCisJCQkJICAgdmFsdWUgMC4gKi8KKwkJ CSAgICBpZihjaGVja19zY29wZSA9PSAwKQorCQkJICAgIHsKKwkJCSAgICAg ICBlcnJvciAoIk5vIHN5bWJvbCBcIiVzXCIgaW4gc3BlY2lmaWVkIGNvbnRl eHQuIiwKIAkJCQkgICBjb3B5X25hbWUgKCQzKSk7CisJCQkgICAgfQorCQkJ ICAgIGVsc2UKKwkJCSAgICB7CisJCQkJICAgWVlTVFlQRSB2YWw7CisJCQkg CSAgIHBhcnNlX251bWJlciAoIjAiLCAxLCAwLCAmdmFsKTsKKwkJCSAgCSAg IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChPUF9MT05HKTsKKwkJCSAgCSAgIHdy aXRlX2V4cF9lbHRfdHlwZSAodmFsLnR5cGVkX3ZhbF9pbnQudHlwZSk7CisJ CQkgIAkgICB3cml0ZV9leHBfZWx0X2xvbmdjc3QgKChMT05HRVNUKXZhbC50 eXBlZF92YWxfaW50LnZhbCk7CisJCQkgIAkgICB3cml0ZV9leHBfZWx0X29w Y29kZSAoT1BfTE9ORyk7CisJCQkgICAgfQorCQkJICB9CiAKIAkJCSAgd3Jp dGVfZXhwX2VsdF9vcGNvZGUgKE9QX1ZBUl9WQUxVRSk7CiAJCQkgIC8qIGJs b2NrX2ZvdW5kIGlzIHNldCBieSBsb29rdXBfc3ltYm9sLiAgKi8KQEAgLTY3 Niw4ICs3MDMsMjIgQEAKIAkJCSAgICBpZiAoIWhhdmVfZnVsbF9zeW1ib2xz ICgpICYmICFoYXZlX3BhcnRpYWxfc3ltYm9scyAoKSkKIAkJCSAgICAgIGVy cm9yICgiTm8gc3ltYm9sIHRhYmxlIGlzIGxvYWRlZC4gIFVzZSB0aGUgXCJm aWxlXCIgY29tbWFuZC4iKTsKIAkJCSAgICBlbHNlCi0JCQkgICAgICBlcnJv ciAoIk5vIHN5bWJvbCBcIiVzXCIgaW4gY3VycmVudCBjb250ZXh0LiIsIG5h bWUpOwotCQkJfQorCQkJICAgIHsKKwkJCSAgICAgIGlmKGNoZWNrX3Njb3Bl ID09IDApCisJCQkgICAgICB7CisJCQkgICAgCWVycm9yICgiTm8gc3ltYm9s IFwiJXNcIiBpbiBjdXJyZW50IGNvbnRleHQuIiwgbmFtZSk7CisJCQkgICAg ICB9CisJCQkgICAgICBlbHNlCisJCQkgICAgICB7CisgICAgICAgICAgICAg ICAgICAgICBZWVNUWVBFIHZhbDsKKyAgICAgICAgICAgICAgICAgICAgIHBh cnNlX251bWJlciAoIjAiLCAxLCAwLCAmdmFsKTsKKyAgICAgICAgICAgICAg ICAgICAgIHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChPUF9MT05HKTsKKyAgICAg ICAgICAgICAgICAgICAgIHdyaXRlX2V4cF9lbHRfdHlwZSAodmFsLnR5cGVk X3ZhbF9pbnQudHlwZSk7CisgICAgICAgICAgICAgICAgICAgICB3cml0ZV9l eHBfZWx0X2xvbmdjc3QgKChMT05HRVNUKXZhbC50eXBlZF92YWxfaW50LnZh bCk7CisgICAgICAgICAgICAgICAgICAgICB3cml0ZV9leHBfZWx0X29wY29k ZSAoT1BfTE9ORyk7CisJCQkgICAgICB9CisJCQkgICAgfQorfQogCTsKIAog dmFyaWFibGU6CW5hbWVfbm90X3R5cGVuYW1lCkBAIC03MzEsOCArNzcyLDE5 IEBACiAJCQkgICAgICBlbHNlIGlmICghaGF2ZV9mdWxsX3N5bWJvbHMgKCkg JiYgIWhhdmVfcGFydGlhbF9zeW1ib2xzICgpKQogCQkJCWVycm9yICgiTm8g c3ltYm9sIHRhYmxlIGlzIGxvYWRlZC4gIFVzZSB0aGUgXCJmaWxlXCIgY29t bWFuZC4iKTsKIAkJCSAgICAgIGVsc2UKLQkJCQllcnJvciAoIk5vIHN5bWJv bCBcIiVzXCIgaW4gY3VycmVudCBjb250ZXh0LiIsCi0JCQkJICAgICAgIGNv cHlfbmFtZSAoJDEuc3Rva2VuKSk7CisJCQkgICAgICB7CisJCQkgICAgICAg IGlmKGNoZWNrX3Njb3BlID09IDApCisJCQkJICAgICAgIGVycm9yICgiTm8g c3ltYm9sIFwiJXNcIiBpbiBjdXJyZW50IGNvbnRleHQuIiwgY29weV9uYW1l ICgkMS5zdG9rZW4pKTsKKwkJCSAgICAgICAgZWxzZQorCQkJICAgICAgICB7 CisJCQkJICAgICAgIFlZU1RZUEUgdmFsOworCQkJIAkgICAgICAgcGFyc2Vf bnVtYmVyICgiMCIsIDEsIDAsICZ2YWwpOworCQkJICAJICAgICAgIHdyaXRl X2V4cF9lbHRfb3Bjb2RlIChPUF9MT05HKTsKKwkJCSAgCSAgICAgICB3cml0 ZV9leHBfZWx0X3R5cGUgKHZhbC50eXBlZF92YWxfaW50LnR5cGUpOworCQkJ ICAJICAgICAgIHdyaXRlX2V4cF9lbHRfbG9uZ2NzdCAoKExPTkdFU1QpdmFs LnR5cGVkX3ZhbF9pbnQudmFsKTsKKwkJCSAgCSAgICAgICB3cml0ZV9leHBf ZWx0X29wY29kZSAoT1BfTE9ORyk7CisJCQkJICAgIH0KKwkJCSAgICAgIH0K IAkJCSAgICB9CiAJCQl9CiAJOwpAQCAtMTMxMCw2ICsxMzYyLDExIEBACiAg IGVudW0gZXhwX29wY29kZSBvcGNvZGU7CiB9OwogCitzdGF0aWMgY29uc3Qg c3RydWN0IHRva2VuIHRva2VudGFiOVtdID0KKyAgeworICAgIHsiJGluX3Nj b3BlIiwgSU5fU0NPUEUsIEJJTk9QX0VORH0KKyAgfTsKKwogc3RhdGljIGNv bnN0IHN0cnVjdCB0b2tlbiB0b2tlbnRhYjNbXSA9CiAgIHsKICAgICB7Ij4+ PSIsIEFTU0lHTl9NT0RJRlksIEJJTk9QX1JTSH0sCkBAIC0xMzcyLDYgKzE0 MjksMTUgQEAKICAgcHJldl9sZXhwdHIgPSBsZXhwdHI7CiAKICAgdG9rc3Rh cnQgPSBsZXhwdHI7CisgIC8qIENvZGUgZm9yIHJlY29nbmlzaW5nIHRoZSAk aW5fc2NvcGUgdG9rZW4uICovCisgIC8qIFNlZSBpZiBpdCBpcyBhIHNwZWNp YWwgdG9rZW4gb2YgbGVuZ3RoIDkuICAqLworICBmb3IgKGkgPSAwOyBpIDwg c2l6ZW9mIHRva2VudGFiOSAvIHNpemVvZiB0b2tlbnRhYjlbMF07IGkrKykK KyAgICBpZiAoc3RybmNtcCAodG9rc3RhcnQsIHRva2VudGFiOVtpXS5vcGVy YXRvciwgOSkgPT0gMCkKKyAgICAgIHsKKwlsZXhwdHIgKz0gOTsKKwl5eWx2 YWwub3Bjb2RlID0gdG9rZW50YWI5W2ldLm9wY29kZTsKKwlyZXR1cm4gdG9r ZW50YWI5W2ldLnRva2VuOworICAgICAgfQogICAvKiBTZWUgaWYgaXQgaXMg YSBzcGVjaWFsIHRva2VuIG9mIGxlbmd0aCAzLiAgKi8KICAgZm9yIChpID0g MDsgaSA8IHNpemVvZiB0b2tlbnRhYjMgLyBzaXplb2YgdG9rZW50YWIzWzBd OyBpKyspCiAgICAgaWYgKHN0cm5jbXAgKHRva3N0YXJ0LCB0b2tlbnRhYjNb aV0ub3BlcmF0b3IsIDMpID09IDApCmRpZmYgLXVyTiAuL2NsZWFuL3NyYy9n ZGIvZXZhbC5jIC4vbW9kaWZpZWQvc3JjL2dkYi9ldmFsLmMKLS0tIC4vY2xl YW4vc3JjL2dkYi9ldmFsLmMJMjAwNy0xMS0xMSAxNzowODo0Mi4wMDAwMDAw MDAgKzAwMDAKKysrIC4vbW9kaWZpZWQvc3JjL2dkYi9ldmFsLmMJMjAwNy0x MS0xMiAxNTo1NDozNy4wMDAwMDAwMDAgKzAwMDAKQEAgLTQ0LDExICs0NCwx NSBAQAogLyogVGhpcyBpcyBkZWZpbmVkIGluIHZhbG9wcy5jICovCiBleHRl cm4gaW50IG92ZXJsb2FkX3Jlc29sdXRpb247CiAKKy8qIFZhcmlhYmxlIGRl bm90aW5nIGlzIHNjb3BlIGlzIGJlaW5nIGNoZWNrZWQgKi8KK2V4dGVybiBp bnQgY2hlY2tfc2NvcGU7CisKIC8qIEpZRzogbG9va3VwIHJ0dGkgdHlwZSBv ZiBTVFJVQ1RPUF9QVFIgd2hlbiB0aGlzIGlzIHNldCB0byBjb250aW51ZQog ICAgb24gd2l0aCBzdWNjZXNzZnVsIGxvb2t1cCBmb3IgbWVtYmVyL21ldGhv ZCBvZiB0aGUgcnR0aSB0eXBlLiAqLwogZXh0ZXJuIGludCBvYmplY3Rwcmlu dDsKIAogLyogUHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zLiAqLwor c3RhdGljIHN0cnVjdCB2YWx1ZSAqZXZhbHVhdGVfc3ViZXhwX2Zvcl9zY29w ZSAoc3RydWN0IGV4cHJlc3Npb24gKiwgaW50ICopOwogCiBzdGF0aWMgc3Ry dWN0IHZhbHVlICpldmFsdWF0ZV9zdWJleHBfZm9yX3NpemVvZiAoc3RydWN0 IGV4cHJlc3Npb24gKiwgaW50ICopOwogCkBAIC0xNjIsNyArMTY2LDI0IEBA CiBldmFsdWF0ZV9leHByZXNzaW9uIChzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhw KQogewogICBpbnQgcGMgPSAwOwotICByZXR1cm4gZXZhbHVhdGVfc3ViZXhw IChOVUxMX1RZUEUsIGV4cCwgJnBjLCBFVkFMX05PUk1BTCk7CisKKyAgLyog TW9kaWZpY2F0aW9ucyBzbyB0aGF0IGlmIHdlIGFyZSBjaGVja2luZyBzY29w ZSB3ZSBjYW4gCisgICAgIHJlc2V0IHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFi bGUgdG8gMCwgc28gd2UgZG9uJ3QgY2hlY2sgCisgICAgIHNjb3BlIHdoZW4g d2UgZG9uJ3Qgd2FudCB0byAqLworICBzdHJ1Y3QgdmFsdWUgKnZhbCA9IE5V TEw7CisgIGlmKGNoZWNrX3Njb3BlID09IDEpCisgIHsKKyAgICB2YWwgPSBl dmFsdWF0ZV9zdWJleHBfZm9yX3Njb3BlKGV4cCwgJnBjKTsKKyAgfQorICBl bHNlCisgIHsKKwl2YWwgPSBldmFsdWF0ZV9zdWJleHAgKE5VTExfVFlQRSwg ZXhwLCAmcGMsIEVWQUxfTk9STUFMKTsKKyAgfQorCisgIGlmKGNoZWNrX3Nj b3BlID09IDEpCisgICAgY2hlY2tfc2NvcGUgPSAwOworCisgIHJldHVybiB2 YWw7CiB9CiAKIC8qIEV2YWx1YXRlIGFuIGV4cHJlc3Npb24sIGF2b2lkaW5n IGFsbCBtZW1vcnkgcmVmZXJlbmNlcwpAQCAtNDQzLDEyICs0NjQsMTUgQEAK IAkJCQkgICZleHAtPmVsdHNbcGMgKyAzXS5zdHJpbmcsCiAJCQkJICAwLCBu b3NpZGUpOwogICAgICAgaWYgKGFyZzEgPT0gTlVMTCkKLQllcnJvciAoXygi VGhlcmUgaXMgbm8gZmllbGQgbmFtZWQgJXMiKSwgJmV4cC0+ZWx0c1twYyAr IDNdLnN0cmluZyk7CisgICAgICB7CisJICBlcnJvciAoXygiVGhlcmUgaXMg bm8gZmllbGQgbmFtZWQgJXMiKSwgJmV4cC0+ZWx0c1twYyArIDNdLnN0cmlu Zyk7CisgICAgICB9CisKICAgICAgIHJldHVybiBhcmcxOwogCiAgICAgY2Fz ZSBPUF9MT05HOgogICAgICAgKCpwb3MpICs9IDM7Ci0gICAgICByZXR1cm4g dmFsdWVfZnJvbV9sb25nZXN0IChleHAtPmVsdHNbcGMgKyAxXS50eXBlLAor ICAgICAgICByZXR1cm4gdmFsdWVfZnJvbV9sb25nZXN0IChleHAtPmVsdHNb cGMgKyAxXS50eXBlLAogCQkJCSBleHAtPmVsdHNbcGMgKyAyXS5sb25nY29u c3QpOwogCiAgICAgY2FzZSBPUF9ET1VCTEU6CkBAIC00NjEsNyArNDg1LDcg QEAKICAgICAgIHJldHVybiB2YWx1ZV9mcm9tX2RlY2Zsb2F0IChleHBlY3Rf dHlwZSwgZXhwLT5lbHRzW3BjICsgMV0udHlwZSwKIAkJCQlleHAtPmVsdHNb cGMgKyAyXS5kZWNmbG9hdGNvbnN0KTsKIAotICAgIGNhc2UgT1BfVkFSX1ZB TFVFOgorCWNhc2UgT1BfVkFSX1ZBTFVFOgogICAgICAgKCpwb3MpICs9IDM7 CiAgICAgICBpZiAobm9zaWRlID09IEVWQUxfU0tJUCkKIAlnb3RvIG5vc2lk ZXJldDsKQEAgLTQ5NSw3ICs1MTksNyBAQAogCiAJcmV0dXJuIHJldDsKICAg ICAgIH0KLQorIAogICAgIGNhc2UgT1BfTEFTVDoKICAgICAgICgqcG9zKSAr PSAyOwogICAgICAgcmV0dXJuCkBAIC01MjMsMjAgKzU0NywyMiBAQAogICAg ICAgfQogICAgIGNhc2UgT1BfQk9PTDoKICAgICAgICgqcG9zKSArPSAyOwot ICAgICAgcmV0dXJuIHZhbHVlX2Zyb21fbG9uZ2VzdCAoTEFfQk9PTF9UWVBF LAotCQkJCSBleHAtPmVsdHNbcGMgKyAxXS5sb25nY29uc3QpOworICAgICAg ICByZXR1cm4gdmFsdWVfZnJvbV9sb25nZXN0IChMQV9CT09MX1RZUEUsCisJ CQkJICAgZXhwLT5lbHRzW3BjICsgMV0ubG9uZ2NvbnN0KTsKKwogCiAgICAg Y2FzZSBPUF9JTlRFUk5BTFZBUjoKICAgICAgICgqcG9zKSArPSAyOwotICAg ICAgcmV0dXJuIHZhbHVlX29mX2ludGVybmFsdmFyIChleHAtPmVsdHNbcGMg KyAxXS5pbnRlcm5hbHZhcik7CisgICAgICAgIHJldHVybiB2YWx1ZV9vZl9p bnRlcm5hbHZhciAoZXhwLT5lbHRzW3BjICsgMV0uaW50ZXJuYWx2YXIpOwor CiAKICAgICBjYXNlIE9QX1NUUklORzoKICAgICAgIHRlbSA9IGxvbmdlc3Rf dG9faW50IChleHAtPmVsdHNbcGMgKyAxXS5sb25nY29uc3QpOwogICAgICAg KCpwb3MpICs9IDMgKyBCWVRFU19UT19FWFBfRUxFTSAodGVtICsgMSk7CiAg ICAgICBpZiAobm9zaWRlID09IEVWQUxfU0tJUCkKIAlnb3RvIG5vc2lkZXJl dDsKLSAgICAgIHJldHVybiB2YWx1ZV9zdHJpbmcgKCZleHAtPmVsdHNbcGMg KyAyXS5zdHJpbmcsIHRlbSk7Ci0KKwkgIHJldHVybiB2YWx1ZV9zdHJpbmcg KCZleHAtPmVsdHNbcGMgKyAyXS5zdHJpbmcsIHRlbSk7CisgICAgICAKICAg ICBjYXNlIE9QX09CSkNfTlNTVFJJTkc6CQkvKiBPYmplY3RpdmUgQyBGb3Vu ZGF0aW9uIENsYXNzIE5TU3RyaW5nIGNvbnN0YW50LiAgKi8KICAgICAgIHRl bSA9IGxvbmdlc3RfdG9faW50IChleHAtPmVsdHNbcGMgKyAxXS5sb25nY29u c3QpOwogICAgICAgKCpwb3MpICs9IDMgKyBCWVRFU19UT19FWFBfRUxFTSAo dGVtICsgMSk7CkBAIC01NDQsNiArNTcwLDcgQEAKIAl7CiAJICBnb3RvIG5v c2lkZXJldDsKIAl9CisKICAgICAgIHJldHVybiAoc3RydWN0IHZhbHVlICop IHZhbHVlX25zc3RyaW5nICgmZXhwLT5lbHRzW3BjICsgMl0uc3RyaW5nLCB0 ZW0gKyAxKTsKIAogICAgIGNhc2UgT1BfQklUU1RSSU5HOgpAQCAtNTUyLDYg KzU3OSw3IEBACiAJKz0gMyArIEJZVEVTX1RPX0VYUF9FTEVNICgodGVtICsg SE9TVF9DSEFSX0JJVCAtIDEpIC8gSE9TVF9DSEFSX0JJVCk7CiAgICAgICBp ZiAobm9zaWRlID09IEVWQUxfU0tJUCkKIAlnb3RvIG5vc2lkZXJldDsKKwog ICAgICAgcmV0dXJuIHZhbHVlX2JpdHN0cmluZyAoJmV4cC0+ZWx0c1twYyAr IDJdLnN0cmluZywgdGVtKTsKICAgICAgIGJyZWFrOwogCkBAIC0xMzM3LDcg KzEzNjUsOSBAQAogICAgIGNhc2UgU1RSVUNUT1BfU1RSVUNUOgogICAgICAg dGVtID0gbG9uZ2VzdF90b19pbnQgKGV4cC0+ZWx0c1twYyArIDFdLmxvbmdj b25zdCk7CiAgICAgICAoKnBvcykgKz0gMyArIEJZVEVTX1RPX0VYUF9FTEVN ICh0ZW0gKyAxKTsKKwogICAgICAgYXJnMSA9IGV2YWx1YXRlX3N1YmV4cCAo TlVMTF9UWVBFLCBleHAsIHBvcywgbm9zaWRlKTsKKwogICAgICAgaWYgKG5v c2lkZSA9PSBFVkFMX1NLSVApCiAJZ290byBub3NpZGVyZXQ7CiAgICAgICBp ZiAobm9zaWRlID09IEVWQUxfQVZPSURfU0lERV9FRkZFQ1RTKQpAQCAtMTQz OCw4ICsxNDY4LDExIEBACiAgICAgY2FzZSBCSU5PUF9DT05DQVQ6CiAgICAg ICBhcmcxID0gZXZhbHVhdGVfc3ViZXhwX3dpdGhfY29lcmNpb24gKGV4cCwg cG9zLCBub3NpZGUpOwogICAgICAgYXJnMiA9IGV2YWx1YXRlX3N1YmV4cF93 aXRoX2NvZXJjaW9uIChleHAsIHBvcywgbm9zaWRlKTsKKworCXJldHVybiB2 YWx1ZV9iaW5vcCAoYXJnMSwgYXJnMiwgQklOT1BfTE9HSUNBTF9BTkQpOwor CiAgICAgICBpZiAobm9zaWRlID09IEVWQUxfU0tJUCkKLQlnb3RvIG5vc2lk ZXJldDsKKyAgICAgICAgZ290byBub3NpZGVyZXQ7CiAgICAgICBpZiAoYmlu b3BfdXNlcl9kZWZpbmVkX3AgKG9wLCBhcmcxLCBhcmcyKSkKIAlyZXR1cm4g dmFsdWVfeF9iaW5vcCAoYXJnMSwgYXJnMiwgb3AsIE9QX05VTEwsIG5vc2lk ZSk7CiAgICAgICBlbHNlCkBAIC0xNDUwLDMyICsxNDgzLDM2IEBACiAgICAg ICBhcmcyID0gZXZhbHVhdGVfc3ViZXhwICh2YWx1ZV90eXBlIChhcmcxKSwg ZXhwLCBwb3MsIG5vc2lkZSk7CiAKICAgICAgIGlmIChub3NpZGUgPT0gRVZB TF9TS0lQIHx8IG5vc2lkZSA9PSBFVkFMX0FWT0lEX1NJREVfRUZGRUNUUykK LQlyZXR1cm4gYXJnMTsKKyAgICAgICAgcmV0dXJuIGFyZzE7CiAgICAgICBp ZiAoYmlub3BfdXNlcl9kZWZpbmVkX3AgKG9wLCBhcmcxLCBhcmcyKSkKLQly ZXR1cm4gdmFsdWVfeF9iaW5vcCAoYXJnMSwgYXJnMiwgb3AsIE9QX05VTEws IG5vc2lkZSk7CisgICAgICAgIHJldHVybiB2YWx1ZV94X2Jpbm9wIChhcmcx LCBhcmcyLCBvcCwgT1BfTlVMTCwgbm9zaWRlKTsKICAgICAgIGVsc2UKIAly ZXR1cm4gdmFsdWVfYXNzaWduIChhcmcxLCBhcmcyKTsKLQorICAgICAKKyAg ICAgIAogICAgIGNhc2UgQklOT1BfQVNTSUdOX01PRElGWToKICAgICAgICgq cG9zKSArPSAyOwogICAgICAgYXJnMSA9IGV2YWx1YXRlX3N1YmV4cCAoTlVM TF9UWVBFLCBleHAsIHBvcywgbm9zaWRlKTsKICAgICAgIGFyZzIgPSBldmFs dWF0ZV9zdWJleHAgKHZhbHVlX3R5cGUgKGFyZzEpLCBleHAsIHBvcywgbm9z aWRlKTsKKwogICAgICAgaWYgKG5vc2lkZSA9PSBFVkFMX1NLSVAgfHwgbm9z aWRlID09IEVWQUxfQVZPSURfU0lERV9FRkZFQ1RTKQotCXJldHVybiBhcmcx OworICAgICAgICByZXR1cm4gYXJnMTsKKyAKICAgICAgIG9wID0gZXhwLT5l bHRzW3BjICsgMV0ub3Bjb2RlOwogICAgICAgaWYgKGJpbm9wX3VzZXJfZGVm aW5lZF9wIChvcCwgYXJnMSwgYXJnMikpCi0JcmV0dXJuIHZhbHVlX3hfYmlu b3AgKGFyZzEsIGFyZzIsIEJJTk9QX0FTU0lHTl9NT0RJRlksIG9wLCBub3Np ZGUpOworICAgICAgICByZXR1cm4gdmFsdWVfeF9iaW5vcCAoYXJnMSwgYXJn MiwgQklOT1BfQVNTSUdOX01PRElGWSwgb3AsIG5vc2lkZSk7CiAgICAgICBl bHNlIGlmIChvcCA9PSBCSU5PUF9BREQpCi0JYXJnMiA9IHZhbHVlX2FkZCAo YXJnMSwgYXJnMik7CisgICAgICAgIGFyZzIgPSB2YWx1ZV9hZGQgKGFyZzEs IGFyZzIpOwogICAgICAgZWxzZSBpZiAob3AgPT0gQklOT1BfU1VCKQotCWFy ZzIgPSB2YWx1ZV9zdWIgKGFyZzEsIGFyZzIpOworICAgICAgICBhcmcyID0g dmFsdWVfc3ViIChhcmcxLCBhcmcyKTsKICAgICAgIGVsc2UKLQlhcmcyID0g dmFsdWVfYmlub3AgKGFyZzEsIGFyZzIsIG9wKTsKKyAgICAgICAgYXJnMiA9 IHZhbHVlX2Jpbm9wIChhcmcxLCBhcmcyLCBvcCk7CiAgICAgICByZXR1cm4g dmFsdWVfYXNzaWduIChhcmcxLCBhcmcyKTsKIAogICAgIGNhc2UgQklOT1Bf QUREOgogICAgICAgYXJnMSA9IGV2YWx1YXRlX3N1YmV4cF93aXRoX2NvZXJj aW9uIChleHAsIHBvcywgbm9zaWRlKTsKICAgICAgIGFyZzIgPSBldmFsdWF0 ZV9zdWJleHBfd2l0aF9jb2VyY2lvbiAoZXhwLCBwb3MsIG5vc2lkZSk7CisK ICAgICAgIGlmIChub3NpZGUgPT0gRVZBTF9TS0lQKQogCWdvdG8gbm9zaWRl cmV0OwogICAgICAgaWYgKGJpbm9wX3VzZXJfZGVmaW5lZF9wIChvcCwgYXJn MSwgYXJnMikpCkBAIC0xNDg2LDYgKzE1MjMsNyBAQAogICAgIGNhc2UgQklO T1BfU1VCOgogICAgICAgYXJnMSA9IGV2YWx1YXRlX3N1YmV4cF93aXRoX2Nv ZXJjaW9uIChleHAsIHBvcywgbm9zaWRlKTsKICAgICAgIGFyZzIgPSBldmFs dWF0ZV9zdWJleHBfd2l0aF9jb2VyY2lvbiAoZXhwLCBwb3MsIG5vc2lkZSk7 CisKICAgICAgIGlmIChub3NpZGUgPT0gRVZBTF9TS0lQKQogCWdvdG8gbm9z aWRlcmV0OwogICAgICAgaWYgKGJpbm9wX3VzZXJfZGVmaW5lZF9wIChvcCwg YXJnMSwgYXJnMikpCkBAIC0xNTA1LDYgKzE1NDMsNyBAQAogICAgIGNhc2Ug QklOT1BfQklUV0lTRV9YT1I6CiAgICAgICBhcmcxID0gZXZhbHVhdGVfc3Vi ZXhwIChOVUxMX1RZUEUsIGV4cCwgcG9zLCBub3NpZGUpOwogICAgICAgYXJn MiA9IGV2YWx1YXRlX3N1YmV4cCAoTlVMTF9UWVBFLCBleHAsIHBvcywgbm9z aWRlKTsKKwogICAgICAgaWYgKG5vc2lkZSA9PSBFVkFMX1NLSVApCiAJZ290 byBub3NpZGVyZXQ7CiAgICAgICBpZiAoYmlub3BfdXNlcl9kZWZpbmVkX3Ag KG9wLCBhcmcxLCBhcmcyKSkKQEAgLTE1MTgsNiArMTU1Nyw3IEBACiAgICAg Y2FzZSBCSU5PUF9SQU5HRToKICAgICAgIGFyZzEgPSBldmFsdWF0ZV9zdWJl eHAgKE5VTExfVFlQRSwgZXhwLCBwb3MsIG5vc2lkZSk7CiAgICAgICBhcmcy ID0gZXZhbHVhdGVfc3ViZXhwIChOVUxMX1RZUEUsIGV4cCwgcG9zLCBub3Np ZGUpOworCiAgICAgICBpZiAobm9zaWRlID09IEVWQUxfU0tJUCkKIAlnb3Rv IG5vc2lkZXJldDsKICAgICAgIGVycm9yIChfKCInOicgb3BlcmF0b3IgdXNl ZCBpbiBpbnZhbGlkIGNvbnRleHQiKSk7CkBAIC0xNTI1LDYgKzE1NjUsNyBA QAogICAgIGNhc2UgQklOT1BfU1VCU0NSSVBUOgogICAgICAgYXJnMSA9IGV2 YWx1YXRlX3N1YmV4cF93aXRoX2NvZXJjaW9uIChleHAsIHBvcywgbm9zaWRl KTsKICAgICAgIGFyZzIgPSBldmFsdWF0ZV9zdWJleHBfd2l0aF9jb2VyY2lv biAoZXhwLCBwb3MsIG5vc2lkZSk7CisKICAgICAgIGlmIChub3NpZGUgPT0g RVZBTF9TS0lQKQogCWdvdG8gbm9zaWRlcmV0OwogICAgICAgaWYgKGJpbm9w X3VzZXJfZGVmaW5lZF9wIChvcCwgYXJnMSwgYXJnMikpCkBAIC0xNTU2LDYg KzE1OTcsNyBAQAogICAgIGNhc2UgQklOT1BfSU46CiAgICAgICBhcmcxID0g ZXZhbHVhdGVfc3ViZXhwX3dpdGhfY29lcmNpb24gKGV4cCwgcG9zLCBub3Np ZGUpOwogICAgICAgYXJnMiA9IGV2YWx1YXRlX3N1YmV4cF93aXRoX2NvZXJj aW9uIChleHAsIHBvcywgbm9zaWRlKTsKKwogICAgICAgaWYgKG5vc2lkZSA9 PSBFVkFMX1NLSVApCiAJZ290byBub3NpZGVyZXQ7CiAgICAgICByZXR1cm4g dmFsdWVfaW4gKGFyZzEsIGFyZzIpOwpAQCAtMTc0MSwxMCArMTc4MywxMiBA QAogICAgICAgZWxzZQogCXsKIAkgIHRlbSA9IHZhbHVlX2xvZ2ljYWxfbm90 IChhcmcxKTsKLQkgIGFyZzIgPSBldmFsdWF0ZV9zdWJleHAgKE5VTExfVFlQ RSwgZXhwLCBwb3MsCisKKyAgICAgIGFyZzIgPSBldmFsdWF0ZV9zdWJleHAg KE5VTExfVFlQRSwgZXhwLCBwb3MsCiAJCQkJICAoIXRlbSA/IEVWQUxfU0tJ UCA6IG5vc2lkZSkpOworCiAJICByZXR1cm4gdmFsdWVfZnJvbV9sb25nZXN0 IChMQV9CT09MX1RZUEUsCi0JCQkgICAgIChMT05HRVNUKSAoIXRlbSB8fCAh dmFsdWVfbG9naWNhbF9ub3QgKGFyZzIpKSk7CisJCQkgICAgICAgKExPTkdF U1QpICghdGVtIHx8ICF2YWx1ZV9sb2dpY2FsX25vdCAoYXJnMikpKTsKIAl9 CiAKICAgICBjYXNlIEJJTk9QX0VRVUFMOgpAQCAtMjA4NSw3ICsyMTI5LDIw MiBAQAogbm9zaWRlcmV0OgogICByZXR1cm4gdmFsdWVfZnJvbV9sb25nZXN0 IChidWlsdGluX3R5cGVfbG9uZywgKExPTkdFU1QpIDEpOwogfQotDAorCisv KiBFdmFsdWF0ZSBhIHN1YmV4cHJlc3Npb24gdG8gc2VlIGlmIHRoZSBleHBy ZXNzaW9uCisgKiBpcyBpbiBzY29wZS4gU29tZSBzcGVjaWFsIGNhc2Ugc2Nv cGUgY2hlY2tpbmcKKyAqIHJlbWFpbnMgaW4gZXZhbHVhdGVfc3ViZXhwX3N0 YW5kYXJkKCkuICovCitzdGF0aWMgc3RydWN0IHZhbHVlICoKK2V2YWx1YXRl X3N1YmV4cF9mb3Jfc2NvcGUgKHN0cnVjdCBleHByZXNzaW9uICpleHAsIGlu dCAqcG9zKQoreworCXN0cnVjdCB2YWx1ZSAqYXJnMSA9IE5VTEw7CisJc3Ry dWN0IHZhbHVlICphcmcyID0gTlVMTDsKKwkKKwlpbnQgdGVtOworICAJaW50 IHBjID0gKCpwb3MpKys7CisgICAgZW51bSBleHBfb3Bjb2RlIG9wID0gZXhw LT5lbHRzW3BjXS5vcGNvZGU7CisKKyAgICBzd2l0Y2gob3ApCisJeworCWNh c2UgT1BfU0NPUEU6CisgICAgICB0ZW0gPSBsb25nZXN0X3RvX2ludCAoZXhw LT5lbHRzW3BjICsgMl0ubG9uZ2NvbnN0KTsKKyAgICAgICgqcG9zKSArPSA0 ICsgQllURVNfVE9fRVhQX0VMRU0gKHRlbSArIDEpOworCisJICBhcmcxID0g dmFsdWVfYWdncmVnYXRlX2VsdCAoZXhwLT5lbHRzW3BjICsgMV0udHlwZSwK KwkJCQkgICZleHAtPmVsdHNbcGMgKyAzXS5zdHJpbmcsCisJCQkJICAwLCBF VkFMX05PUk1BTCk7CisgICAgICBpZiAoYXJnMSA9PSBOVUxMKQorICAgICAg ICByZXR1cm4gdmFsdWVfZnJvbV9sb25nZXN0IChidWlsdGluX3R5cGVfaW50 LCAoTE9OR0VTVCkgMCk7CisKKyAgICBjYXNlIE9QX0xPTkc6CisgICAgY2Fz ZSBPUF9ET1VCTEU6CisJY2FzZSBPUF9ERUNGTE9BVDoKKwljYXNlIE9QX1ZB Ul9WQUxVRToKKyAgICAgICgqcG9zKSArPSAzOworCisJICAvKiBTcGVjaWFs IGNhc2UsIGlmIGEgdmFyaWFibGUgaXMgbm90IGluIHNjb3BlIHRoZSBwYXJz ZXIKKwkgICAqIHB1dHMgYW4gZXhwcmVzc2lvbiBvZiB2YWx1ZSAwLiBJZiB0 aGUgZXhwcmVzc2lvbiBpcworCSAgICogb2YgdmFsdWUgMCwgcmV0dXJuIG9u ZSBhb2YgMCwgZWxzZSByZXR1cm4gYSB2bGF1ZSBvZiAxLgorCSAgICovCisJ aWYoZXhwLT5lbHRzW3BjICsgMl0ubG9uZ2NvbnN0ID09IDApCisJICByZXR1 cm4gdmFsdWVfZnJvbV9sb25nZXN0IChidWlsdGluX3R5cGVfaW50LCAoTE9O R0VTVCkgMCk7CisJZWxzZQorCSAgcmV0dXJuIHZhbHVlX2Zyb21fbG9uZ2Vz dCAoYnVpbHRpbl90eXBlX2ludCwgKExPTkdFU1QpIDEpOworCisgICAgY2Fz ZSBPUF9MQVNUOgorCWNhc2UgT1BfSU5URVJOQUxWQVI6CisgICAgICAoKnBv cykgKz0gMjsKKyAgICAgIHJldHVybiB2YWx1ZV9mcm9tX2xvbmdlc3QgKGJ1 aWx0aW5fdHlwZV9pbnQsIChMT05HRVNUKSAxKTsKKworICAgIGNhc2UgT1Bf UkVHSVNURVI6CisJICB7CisJY29uc3QgY2hhciAqbmFtZSA9ICZleHAtPmVs dHNbcGMgKyAyXS5zdHJpbmc7CisJaW50IHJlZ25vOworCXN0cnVjdCB2YWx1 ZSAqdmFsOworCisJKCpwb3MpICs9IDMgKyBCWVRFU19UT19FWFBfRUxFTSAo ZXhwLT5lbHRzW3BjICsgMV0ubG9uZ2NvbnN0ICsgMSk7CisJcmVnbm8gPSBm cmFtZV9tYXBfbmFtZV90b19yZWdudW0gKGRlcHJlY2F0ZWRfc2FmZV9nZXRf c2VsZWN0ZWRfZnJhbWUgKCksCisJCQkJCSAgbmFtZSwgc3RybGVuIChuYW1l KSk7CisKKwlpZiAocmVnbm8gPT0gLTEpCisgICAgICByZXR1cm4gdmFsdWVf ZnJvbV9sb25nZXN0IChidWlsdGluX3R5cGVfaW50LCAoTE9OR0VTVCkgMCk7 CisKKwkgIHZhbCA9IHZhbHVlX29mX3JlZ2lzdGVyIChyZWdubywgZ2V0X3Nl bGVjdGVkX2ZyYW1lIChOVUxMKSk7CisJCisgIAlpZiAodmFsID09IE5VTEwp CisJICByZXR1cm4gdmFsdWVfZnJvbV9sb25nZXN0IChidWlsdGluX3R5cGVf aW50LCAoTE9OR0VTVCkgMCk7CisJZWxzZQorCSAgcmV0dXJuIHZhbHVlX2Zy b21fbG9uZ2VzdCAoYnVpbHRpbl90eXBlX2ludCwgKExPTkdFU1QpIDEpOwor CSAgfQorICAgIGNhc2UgT1BfU1RSSU5HOgorICAgIGNhc2UgT1BfT0JKQ19O U1NUUklORzoJCS8qIE9iamVjdGl2ZSBDIEZvdW5kYXRpb24gQ2xhc3MgTlNT dHJpbmcgY29uc3RhbnQuICAqLworICAgICAgdGVtID0gbG9uZ2VzdF90b19p bnQgKGV4cC0+ZWx0c1twYyArIDFdLmxvbmdjb25zdCk7CisgICAgICAoKnBv cykgKz0gMyArIEJZVEVTX1RPX0VYUF9FTEVNICh0ZW0gKyAxKTsKKworICAJ ICByZXR1cm4gdmFsdWVfZnJvbV9sb25nZXN0IChidWlsdGluX3R5cGVfaW50 LCAoTE9OR0VTVCkgMSk7CisKKyAgICBjYXNlIE9QX0JJVFNUUklORzoKKyAg ICAgIHRlbSA9IGxvbmdlc3RfdG9faW50IChleHAtPmVsdHNbcGMgKyAxXS5s b25nY29uc3QpOworICAgICAgKCpwb3MpCisJKz0gMyArIEJZVEVTX1RPX0VY UF9FTEVNICgodGVtICsgSE9TVF9DSEFSX0JJVCAtIDEpIC8gSE9TVF9DSEFS X0JJVCk7CisKKyAgICAgIHJldHVybiB2YWx1ZV9mcm9tX2xvbmdlc3QgKGJ1 aWx0aW5fdHlwZV9pbnQsIChMT05HRVNUKSAxKTsKKworCS8qIEZJWE1FOiBV bnN1cmUgb2YgaG93IHRvIGNoZWNrIHNjb3BlIGZvciB0aGVzZSwgc28gZGVh bCB3aWh0IHRoZW0gbm9ybWFsbHkgKi8KKyAgICBjYXNlIE9QX0FSUkFZOgor ICAgIGNhc2UgVEVSTk9QX1NMSUNFOgorICAgIGNhc2UgVEVSTk9QX1NMSUNF X0NPVU5UOgorICAgIGNhc2UgVEVSTk9QX0NPTkQ6CisgICAgY2FzZSBPUF9P QkpDX1NFTEVDVE9SOgorICAgIGNhc2UgT1BfT0JKQ19NU0dDQUxMOgorCWNh c2UgT1BfRlVOQ0FMTDoKKwljYXNlIE9QX0Y3N19VTkRFVEVSTUlORURfQVJH TElTVDoKKyAgICBjYXNlIFNUUlVDVE9QX1BUUjoKKyAgICBjYXNlIFNUUlVD VE9QX01FTUJFUjoKKyAgICBjYXNlIFNUUlVDVE9QX01QVFI6CisvKgljYXNl IFRZUEVfQ09ERV9NRVRIT0RQVFI6CisJY2FzZSBUWVBFX0NPREVfTUVNQkVS UFRSOiAqLworICAgIGNhc2UgTVVMVElfU1VCU0NSSVBUOgorICAgIGNhc2Ug VU5PUF9JTkQ6CisJICByZXR1cm4gZXZhbHVhdGVfc3ViZXhwKE5VTExfVFlQ RSwgZXhwLCBwb3MsIEVWQUxfTk9STUFMKTsKKworICAgIGNhc2UgU1RSVUNU T1BfU1RSVUNUOgorCQorICAgICAgdGVtID0gbG9uZ2VzdF90b19pbnQgKGV4 cC0+ZWx0c1twYyArIDFdLmxvbmdjb25zdCk7CisgICAgICAoKnBvcykgKz0g MyArIEJZVEVTX1RPX0VYUF9FTEVNICh0ZW0gKyAxKTsKKworICAgICAgLyog RXZhbHVhdGUgdGhlIHN1Yi1leHByZXNzaW9uIHdpdGhvdXQgc2NvcGUgc28g dGhhdCB0aGUKKwkgICAqIGNvcnJlY3QgdHlwZSBvZiB2YWx1ZSBpcyByZXR1 cm5lZCAqLworICAgICAgYXJnMSA9IGV2YWx1YXRlX3N1YmV4cCAoTlVMTF9U WVBFLCBleHAsIHBvcywgRVZBTF9OT1JNQUwpOworICAgIHsKKyAJICBzdHJ1 Y3QgdmFsdWUgKnRlbXA7CisJICB0ZW1wID0gYXJnMTsKKwkgIHJldHVybiB2 YWx1ZV9zdHJ1Y3RfZWx0ICgmdGVtcCwgTlVMTCwgJmV4cC0+ZWx0c1twYyAr IDJdLnN0cmluZywKKwkJCQkgICBOVUxMLCAic3RydWN0dXJlIik7CisJfQor CS8qIEFuIGV4cHJlc3Npb24gd2hpY2ggaW52b2x2ZXMgYSBiaW5hcnkgb3Bl cmF0b3IgaXMgaW4gc2NvcGUKKwkgKiBpZmYgaXQncyB0d28gc3ViIGV4cHJl c3Npb25zIGFyZSBpbiBzY29wZS4gT1BfQ09NUExFWAorCSAqIGlzIGFsc28g cmVnYXJlZCBhcyBhIGJpbmFyeSBvcGVyYXRvciBpbiB0aGlzIHJlc3BlY3Qu ICovCisgICAgY2FzZSBCSU5PUF9DT05DQVQ6CisgICAgY2FzZSBCSU5PUF9B U1NJR046CisgICAgY2FzZSBCSU5PUF9BU1NJR05fTU9ESUZZOgorICAgIGNh c2UgQklOT1BfQUREOgorICAgIGNhc2UgQklOT1BfU1VCOgorICAgIGNhc2Ug QklOT1BfRVhQOgorICAgIGNhc2UgQklOT1BfTVVMOgorICAgIGNhc2UgQklO T1BfRElWOgorICAgIGNhc2UgQklOT1BfUkVNOgorICAgIGNhc2UgQklOT1Bf TU9EOgorICAgIGNhc2UgQklOT1BfTFNIOgorICAgIGNhc2UgQklOT1BfUlNI OgorICAgIGNhc2UgQklOT1BfQklUV0lTRV9BTkQ6CisgICAgY2FzZSBCSU5P UF9CSVRXSVNFX0lPUjoKKyAgICBjYXNlIEJJTk9QX0JJVFdJU0VfWE9SOgor ICAgIGNhc2UgQklOT1BfUkFOR0U6CisgICAgY2FzZSBCSU5PUF9TVUJTQ1JJ UFQ6CisgICAgY2FzZSBCSU5PUF9JTjoKKyAgICBjYXNlIEJJTk9QX0xPR0lD QUxfQU5EOgorICAgIGNhc2UgQklOT1BfTE9HSUNBTF9PUjoKKyAgICBjYXNl IEJJTk9QX0VRVUFMOgorICAgIGNhc2UgQklOT1BfTk9URVFVQUw6CisgICAg Y2FzZSBCSU5PUF9MRVNTOgorICAgIGNhc2UgQklOT1BfR1RSOgorICAgIGNh c2UgQklOT1BfR0VROgorICAgIGNhc2UgQklOT1BfTEVROgorICAgIGNhc2Ug QklOT1BfUkVQRUFUOgorICAgIGNhc2UgQklOT1BfQ09NTUE6CisgICAgY2Fz ZSBPUF9DT01QTEVYOgorICAJICBhcmcxID0gZXZhbHVhdGVfc3ViZXhwX2Zv cl9zY29wZSAoZXhwLCBwb3MpOworICAgICAgYXJnMiA9IGV2YWx1YXRlX3N1 YmV4cF9mb3Jfc2NvcGUgKGV4cCwgcG9zKTsKKworCSAgcmV0dXJuIHZhbHVl X2Jpbm9wIChhcmcxLCBhcmcyLCBCSU5PUF9MT0dJQ0FMX0FORCk7CisKKyAg ICBjYXNlIFVOT1BfUExVUzoKKyAgICBjYXNlIFVOT1BfTkVHOgorICAgIGNh c2UgVU5PUF9DT01QTEVNRU5UOgorICAgIGNhc2UgVU5PUF9MT0dJQ0FMX05P VDoKKyAgICBjYXNlIFVOT1BfQUREUjoKKyAgICBjYXNlIFVOT1BfU0laRU9G OgorICAgIGNhc2UgVU5PUF9QUkVJTkNSRU1FTlQ6CisgICAgY2FzZSBVTk9Q X1BSRURFQ1JFTUVOVDoKKyAgICBjYXNlIFVOT1BfUE9TVElOQ1JFTUVOVDoK KyAgICBjYXNlIFVOT1BfUE9TVERFQ1JFTUVOVDoKKyAJICBhcmcxID0gZXZh bHVhdGVfc3ViZXhwX2Zvcl9zY29wZSAoZXhwLCBwb3MpOworCSAgcmV0dXJu IGFyZzE7CisKKyAgICBjYXNlIFVOT1BfQ0FTVDoKKyAgICBjYXNlIFVOT1Bf TUVNVkFMOgorICAgICAgKCpwb3MpICs9IDI7CisgICAgICBhcmcxID0gZXZh bHVhdGVfc3ViZXhwX2Zvcl9zY29wZSAoZXhwLCBwb3MpOworCSAgcmV0dXJu IGFyZzE7CisKKyAgICBjYXNlIFVOT1BfTUVNVkFMX1RMUzoKKyAgICAgICgq cG9zKSArPSAzOworICAgICAgYXJnMSA9IGV2YWx1YXRlX3N1YmV4cF9mb3Jf c2NvcGUgKGV4cCwgcG9zKTsKKwkgIHJldHVybiBhcmcxOworCisgIAljYXNl IE9QX1RISVM6CisgICAgICAoKnBvcykgKz0gMTsKKyAgICAgIHJldHVybiB2 YWx1ZV9mcm9tX2xvbmdlc3QgKGJ1aWx0aW5fdHlwZV9pbnQsIChMT05HRVNU KSAxKTsKKworICAgIGNhc2UgT1BfT0JKQ19TRUxGOgorICAgICAgKCpwb3Mp ICs9IDE7CisgICAgICByZXR1cm4gdmFsdWVfZnJvbV9sb25nZXN0IChidWls dGluX3R5cGVfaW50LCAoTE9OR0VTVCkgMSk7CisKKyAgICBkZWZhdWx0Ogor ICAgICAgLyogUmVtb3ZpbmcgdGhpcyBjYXNlIGFuZCBjb21waWxpbmcgd2l0 aCBnY2MgLVdhbGwgcmV2ZWFscyB0aGF0CisgICAgICAgICBhIGxvdCBvZiBj YXNlcyBhcmUgaGl0dGluZyB0aGlzIGNhc2UuICBTb21lIG9mIHRoZXNlIHNo b3VsZAorICAgICAgICAgcHJvYmFibHkgYmUgcmVtb3ZlZCBmcm9tIGV4cHJl c3Npb24uaDsgb3RoZXJzIGFyZSBsZWdpdGltYXRlCisgICAgICAgICBleHBy ZXNzaW9ucyB3aGljaCBhcmUgKGFwcGFyZW50bHkpIG5vdCBmdWxseSBpbXBs ZW1lbnRlZC4KKworICAgICAgICAgSWYgdGhlcmUgYXJlIGFueSBjYXNlcyBs YW5kaW5nIGhlcmUgd2hpY2ggbWVhbiBhIHVzZXIgZXJyb3IsCisgICAgICAg ICB0aGVuIHRoZXkgc2hvdWxkIGJlIHNlcGFyYXRlIGNhc2VzLCB3aXRoIG1v cmUgZGVzY3JpcHRpdmUKKyAgICAgICAgIGVycm9yIG1lc3NhZ2VzLiAgKi8K KworICAgICAgZXJyb3IgKF8oIlwKK0dEQiBkb2VzIG5vdCAoeWV0KSBrbm93 IGhvdyB0byBldmFsdWF0ZSB0aGF0IGtpbmQgb2YgZXhwcmVzc2lvbiBmb3Ig c2NvcGUiKSk7CisgICAgfQorfQorCiAvKiBFdmFsdWF0ZSBhIHN1YmV4cHJl c3Npb24gb2YgRVhQLCBhdCBpbmRleCAqUE9TLAogICAgYW5kIHJldHVybiB0 aGUgYWRkcmVzcyBvZiB0aGF0IHN1YmV4cHJlc3Npb24uCiAgICBBZHZhbmNl ICpQT1Mgb3ZlciB0aGUgc3ViZXhwcmVzc2lvbi4K ------=_Part_11407_3921161.1194884955000--