From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32447 invoked by alias); 11 Jul 2014 09:01:35 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 32430 invoked by uid 89); 11 Jul 2014 09:01:35 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.2 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-pd0-f176.google.com Received: from mail-pd0-f176.google.com (HELO mail-pd0-f176.google.com) (209.85.192.176) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Fri, 11 Jul 2014 09:01:29 +0000 Received: by mail-pd0-f176.google.com with SMTP id ft15so1057445pdb.7 for ; Fri, 11 Jul 2014 02:01:27 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.70.88.136 with SMTP id bg8mr22600382pdb.50.1405069287519; Fri, 11 Jul 2014 02:01:27 -0700 (PDT) Received: by 10.70.128.74 with HTTP; Fri, 11 Jul 2014 02:01:27 -0700 (PDT) In-Reply-To: <53BBEFB8.2070308@grosser.es> References: <53BA804B.7050704@grosser.es> <53BBEFB8.2070308@grosser.es> Date: Fri, 11 Jul 2014 09:01:00 -0000 Message-ID: Subject: Re: [GSoC] generation of Gimple loops with empty bodies From: Roman Gareev To: Tobias Grosser Cc: Mircea Namolaru , gcc-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary=001a11c24fa6c4953004fde72fd5 X-SW-Source: 2014-07/txt/msg00767.txt.bz2 --001a11c24fa6c4953004fde72fd5 Content-Type: text/plain; charset=UTF-8 Content-length: 2154 > I would use -x to see the headers. This should tell you if it is defined > or only used there. It gives the following output: roman@roman-System-Product-Name:~/isl-0.12.2/lib$ objdump -x libisl.so.10.2.2 | grep isl_ast_expr_get_val 0000000000060380 g F .text 0000000000000053 isl_ast_expr_get_val > Sorry, but this still needs to be debugged. :-( I am too busy to do it > myself, so i am afraid you may just need to dig into it yourself. :-( I've found the reason of this error. Somehow cc1 used an older version of isl provided by the package from the standard repository in spite of manually selected paths to isl 0.12.2. I think it is better to move on and not to concentrate on this. >> +#include "graphite-htab.h" > > Is this still needed? No, this is redundant. >> +/* IVS_PARAMS_MAP maps ISL's scattering and parameter identifiers >> + to corresponding trees. */ >> +typedef struct ivs_params { >> + std::map ivs_params_map; > > What about calling it isl_id_to_tree? Maybe it would be better to call it tree_from_isl_id (because it would help to avoid confusion with definitions from isl)? >> + sese region; > > Is this region needed? No, this is redundant. >> + We create a new if region protecting the loop to be executed, if >> + the execution count is zero (lower bound > upper bound). In this case, >> + it is subsequently removed by dead code elimination. */ > > > The last sentence is unclear. Are you saying the loop will be removed or > that the condition will be removed in case it is always true. Also, what > about cases where the condition remains? I wanted to say that the loop will be removed. Maybe it would be better to remove the last sentence at all (because the previous sentence already explains the motivation)? > Those changes are unrelated and are part of the other patch, right? Yes, these changes were made in the revision under No. 212361. >> + ip.region = region; > > Is this needed? ip.region seems unused. Yes, this is redundant. I tried to incorporate all your comments in the attached patch. -- Cheers, Roman Gareev. --001a11c24fa6c4953004fde72fd5 Content-Type: text/plain; charset=US-ASCII; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hxh9x4ya0 Content-length: 27182 SW5kZXg6IGdjYy9ncmFwaGl0ZS1pc2wtYXN0LXRvLWdpbXBsZS5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9ncmFwaGl0ZS1pc2wtYXN0LXRv LWdpbXBsZS5jCShyZXZpc2lvbiAyMTIzNjEpCisrKyBnY2MvZ3JhcGhpdGUt aXNsLWFzdC10by1naW1wbGUuYwkod29ya2luZyBjb3B5KQpAQCAtMjUsNyAr MjUsMTQgQEAKICNpbmNsdWRlIDxpc2wvbWFwLmg+CiAjaW5jbHVkZSA8aXNs L3VuaW9uX21hcC5oPgogI2luY2x1ZGUgPGlzbC9hc3RfYnVpbGQuaD4KKyNp ZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CiAjZW5kaWYK KyNpbmNsdWRlIDxpc2wvdmFsX2dtcC5oPgorI2lmIGRlZmluZWQoX19jcGx1 c3BsdXMpCit9CisjZW5kaWYKKyNlbmRpZgogCiAjaW5jbHVkZSAic3lzdGVt LmgiCiAjaW5jbHVkZSAiY29yZXR5cGVzLmgiCkBAIC00Miw2ICs0OSw5IEBA CiAjaW5jbHVkZSAiY2ZnbG9vcC5oIgogI2luY2x1ZGUgInRyZWUtZGF0YS1y ZWYuaCIKICNpbmNsdWRlICJzZXNlLmgiCisjaW5jbHVkZSAidHJlZS1zc2Et bG9vcC1tYW5pcC5oIgorI2luY2x1ZGUgInRyZWUtc2NhbGFyLWV2b2x1dGlv bi5oIgorI2luY2x1ZGUgPG1hcD4KIAogI2lmZGVmIEhBVkVfY2xvb2cKICNp bmNsdWRlICJncmFwaGl0ZS1wb2x5LmgiCkBAIC01Miw2ICs2Miw1MTcgQEAK IAogc3RhdGljIGJvb2wgZ3JhcGhpdGVfcmVnZW5lcmF0ZV9lcnJvcjsKIAor LyogV2UgYWx3YXlzIHVzZSBzaWduZWQgMTI4LCB1bnRpbCBpc2wgaXMgYWJs ZSB0byBnaXZlIGluZm9ybWF0aW9uIGFib3V0Cit0eXBlcyAgKi8KKworc3Rh dGljIHRyZWUgKmdyYXBoaXRlX2V4cHJlc3Npb25fc2l6ZV90eXBlID0gJmlu dDEyOF9pbnRlZ2VyX3R5cGVfbm9kZTsKKworLyogQ29udmVydHMgYSBHTVAg Y29uc3RhbnQgVkFMIHRvIGEgdHJlZSBhbmQgcmV0dXJucyBpdC4gICovCisK K3N0YXRpYyB0cmVlCitnbXBfY3N0X3RvX3RyZWUgKHRyZWUgdHlwZSwgbXB6 X3QgdmFsKQoreworICB0cmVlIHQgPSB0eXBlID8gdHlwZSA6IGludGVnZXJf dHlwZV9ub2RlOworICBtcHpfdCB0bXA7CisKKyAgbXB6X2luaXQgKHRtcCk7 CisgIG1wel9zZXQgKHRtcCwgdmFsKTsKKyAgd2lkZV9pbnQgd2kgPSB3aTo6 ZnJvbV9tcHogKHQsIHRtcCwgdHJ1ZSk7CisgIG1wel9jbGVhciAodG1wKTsK KworICByZXR1cm4gd2lkZV9pbnRfdG9fdHJlZSAodCwgd2kpOworfQorCisv KiBWZXJpZmllcyBwcm9wZXJ0aWVzIHRoYXQgR1JBUEhJVEUgc2hvdWxkIG1h aW50YWluIGR1cmluZyB0cmFuc2xhdGlvbi4gICovCisKK3N0YXRpYyBpbmxp bmUgdm9pZAorZ3JhcGhpdGVfdmVyaWZ5ICh2b2lkKQoreworI2lmZGVmIEVO QUJMRV9DSEVDS0lORworICB2ZXJpZnlfbG9vcF9zdHJ1Y3R1cmUgKCk7Cisg IHZlcmlmeV9sb29wX2Nsb3NlZF9zc2EgKHRydWUpOworI2VuZGlmCit9CisK Ky8qIFRSRUVfRlJPTV9JU0xfSUQgbWFwcyBJU0wncyBzY2F0dGVyaW5nIGFu ZCBwYXJhbWV0ZXIgaWRlbnRpZmllcnMKKyAgIHRvIGNvcnJlc3BvbmRpbmcg dHJlZXMuICAqLworCit0eXBlZGVmIHN0cnVjdCBpdnNfcGFyYW1zIHsKKyAg c3RkOjptYXA8aXNsX2lkICosIHRyZWU+IHRyZWVfZnJvbV9pc2xfaWQ7Cit9 ICppdnNfcGFyYW1zX3A7CisKKy8qIEZyZWUgYWxsIG1lbW9yeSBhbGxvY2F0 ZWQgZm9yIElTTCdzIGlkZW50aWZpZXJzLiAgKi8KKwordm9pZCBpdnNfcGFy YW1zX2NsZWFyIChpdnNfcGFyYW1zX3AgaXApCit7CisgIHN0ZDo6bWFwPGlz bF9pZCAqLCB0cmVlPjo6aXRlcmF0b3IgaXQ7CisgIGZvciAoaXQgPSBpcC0+ dHJlZV9mcm9tX2lzbF9pZC5iZWdpbiAoKTsKKyAgICAgICBpdCAhPSBpcC0+ dHJlZV9mcm9tX2lzbF9pZC5lbmQgKCk7IGl0KyspCisgICAgeworICAgICAg aXNsX2lkX2ZyZWUgKGl0LT5maXJzdCk7CisgICAgfQorfQorCitzdGF0aWMg dHJlZQorZ2NjX2V4cHJlc3Npb25fZnJvbV9pc2xfZXhwcmVzc2lvbiAodHJl ZSB0eXBlLCBfX2lzbF90YWtlIGlzbF9hc3RfZXhwciAqLAorCQkJCSAgICBp dnNfcGFyYW1zX3AgaXApOworCisvKiBSZXR1cm4gdGhlIHRyZWUgdmFyaWFi bGUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4gaXNsIGFzdCBpZGVu dGlmaWVyCisgZXhwcmVzc2lvbiAoYW4gaXNsX2FzdF9leHByIG9mIHR5cGUg aXNsX2FzdF9leHByX2lkKS4gICovCisKK3N0YXRpYyB0cmVlCitnY2NfZXhw cmVzc2lvbl9mcm9tX2lzbF9hc3RfZXhwcl9pZCAoX19pc2xfa2VlcCBpc2xf YXN0X2V4cHIgKmV4cHJfaWQsCisJCQkJICAgICBpdnNfcGFyYW1zX3AgaXAp Cit7CisgIGdjY19hc3NlcnQgKGlzbF9hc3RfZXhwcl9nZXRfdHlwZSAoZXhw cl9pZCkgPT0gaXNsX2FzdF9leHByX2lkKTsKKyAgaXNsX2lkICp0bXBfaXNs X2lkID0gaXNsX2FzdF9leHByX2dldF9pZCAoZXhwcl9pZCk7CisgIHN0ZDo6 bWFwPGlzbF9pZCAqLCB0cmVlPjo6aXRlcmF0b3IgcmVzOworICByZXMgPSBp cC0+dHJlZV9mcm9tX2lzbF9pZC5maW5kICh0bXBfaXNsX2lkKTsKKyAgaXNs X2lkX2ZyZWUgKHRtcF9pc2xfaWQpOworICBnY2NfYXNzZXJ0IChyZXMgIT0g aXAtPnRyZWVfZnJvbV9pc2xfaWQuZW5kICgpICYmCisgICAgICAgICAgICAg ICJDb3VsZCBub3QgbWFwIGlzbF9pZCB0byB0cmVlIGV4cHJlc3Npb24iKTsK KyAgaXNsX2FzdF9leHByX2ZyZWUgKGV4cHJfaWQpOworICByZXR1cm4gcmVz LT5zZWNvbmQ7Cit9CisKKy8qIENvbnZlcnRzIGFuIGlzbF9hc3RfZXhwcl9p bnQgZXhwcmVzc2lvbiBFIHRvIGEgR0NDIGV4cHJlc3Npb24gdHJlZSBvZgor ICAgdHlwZSBUWVBFLiAgKi8KKworc3RhdGljIHRyZWUKK2djY19leHByZXNz aW9uX2Zyb21faXNsX2V4cHJfaW50ICh0cmVlIHR5cGUsIF9faXNsX3Rha2Ug aXNsX2FzdF9leHByICpleHByKQoreworICBnY2NfYXNzZXJ0IChpc2xfYXN0 X2V4cHJfZ2V0X3R5cGUgKGV4cHIpID09IGlzbF9hc3RfZXhwcl9pbnQpOwor ICBpc2xfdmFsICp2YWwgPSBpc2xfYXN0X2V4cHJfZ2V0X3ZhbCAoZXhwcik7 CisgIG1wel90IHZhbF9tcHpfdDsKKyAgbXB6X2luaXQgKHZhbF9tcHpfdCk7 CisgIHRyZWUgcmVzOworICBpZiAoaXNsX3ZhbF9nZXRfbnVtX2dtcCAodmFs LCB2YWxfbXB6X3QpID09IC0xKQorICAgIHJlcyA9IE5VTExfVFJFRTsKKyAg ZWxzZQorICAgIHJlcyA9IGdtcF9jc3RfdG9fdHJlZSAodHlwZSwgdmFsX21w el90KTsKKyAgaXNsX3ZhbF9mcmVlICh2YWwpOworICBpc2xfYXN0X2V4cHJf ZnJlZSAoZXhwcik7CisgIG1wel9jbGVhciAodmFsX21wel90KTsKKyAgcmV0 dXJuIHJlczsKK30KKworLyogQ29udmVydHMgYSBiaW5hcnkgaXNsX2FzdF9l eHByX29wIGV4cHJlc3Npb24gRSB0byBhIEdDQyBleHByZXNzaW9uIHRyZWUg b2YKKyAgIHR5cGUgVFlQRS4gICovCisKK3N0YXRpYyB0cmVlCitiaW5hcnlf b3BfdG9fdHJlZSAodHJlZSB0eXBlLCBfX2lzbF90YWtlIGlzbF9hc3RfZXhw ciAqZXhwciwgaXZzX3BhcmFtc19wIGlwKQoreworICBpc2xfYXN0X2V4cHIg KmFyZ19leHByID0gaXNsX2FzdF9leHByX2dldF9vcF9hcmcgKGV4cHIsIDAp OworICB0cmVlIHRyZWVfbGhzX2V4cHIgPSBnY2NfZXhwcmVzc2lvbl9mcm9t X2lzbF9leHByZXNzaW9uICh0eXBlLCBhcmdfZXhwciwgaXApOworICBhcmdf ZXhwciA9IGlzbF9hc3RfZXhwcl9nZXRfb3BfYXJnIChleHByLCAxKTsKKyAg dHJlZSB0cmVlX3Joc19leHByID0gZ2NjX2V4cHJlc3Npb25fZnJvbV9pc2xf ZXhwcmVzc2lvbiAodHlwZSwgYXJnX2V4cHIsIGlwKTsKKyAgZW51bSBpc2xf YXN0X29wX3R5cGUgZXhwcl90eXBlID0gaXNsX2FzdF9leHByX2dldF9vcF90 eXBlIChleHByKTsKKyAgaXNsX2FzdF9leHByX2ZyZWUgKGV4cHIpOworICBz d2l0Y2ggKGV4cHJfdHlwZSkKKyAgICB7CisgICAgY2FzZSBpc2xfYXN0X29w X2FkZDoKKyAgICAgIHJldHVybiBmb2xkX2J1aWxkMiAoUExVU19FWFBSLCB0 eXBlLCB0cmVlX2xoc19leHByLCB0cmVlX3Joc19leHByKTsKKworICAgIGNh c2UgaXNsX2FzdF9vcF9zdWI6CisgICAgICByZXR1cm4gZm9sZF9idWlsZDIg KE1JTlVTX0VYUFIsIHR5cGUsIHRyZWVfbGhzX2V4cHIsIHRyZWVfcmhzX2V4 cHIpOworCisgICAgY2FzZSBpc2xfYXN0X29wX211bDoKKyAgICAgIHJldHVy biBmb2xkX2J1aWxkMiAoTVVMVF9FWFBSLCB0eXBlLCB0cmVlX2xoc19leHBy LCB0cmVlX3Joc19leHByKTsKKworICAgIGNhc2UgaXNsX2FzdF9vcF9kaXY6 CisgICAgICByZXR1cm4gZm9sZF9idWlsZDIgKEVYQUNUX0RJVl9FWFBSLCB0 eXBlLCB0cmVlX2xoc19leHByLCB0cmVlX3Joc19leHByKTsKKworICAgIGNh c2UgaXNsX2FzdF9vcF9mZGl2X3E6CisgICAgICByZXR1cm4gZm9sZF9idWls ZDIgKEZMT09SX0RJVl9FWFBSLCB0eXBlLCB0cmVlX2xoc19leHByLCB0cmVl X3Joc19leHByKTsKKworICAgIGNhc2UgaXNsX2FzdF9vcF9hbmQ6CisgICAg ICByZXR1cm4gZm9sZF9idWlsZDIgKFRSVVRIX0FORElGX0VYUFIsIHR5cGUs CisJCQkgIHRyZWVfbGhzX2V4cHIsIHRyZWVfcmhzX2V4cHIpOworCisgICAg Y2FzZSBpc2xfYXN0X29wX29yOgorICAgICAgcmV0dXJuIGZvbGRfYnVpbGQy IChUUlVUSF9PUklGX0VYUFIsIHR5cGUsIHRyZWVfbGhzX2V4cHIsIHRyZWVf cmhzX2V4cHIpOworCisgICAgY2FzZSBpc2xfYXN0X29wX2VxOgorICAgICAg cmV0dXJuIGZvbGRfYnVpbGQyIChFUV9FWFBSLCB0eXBlLCB0cmVlX2xoc19l eHByLCB0cmVlX3Joc19leHByKTsKKworICAgIGNhc2UgaXNsX2FzdF9vcF9s ZToKKyAgICAgIHJldHVybiBmb2xkX2J1aWxkMiAoTEVfRVhQUiwgdHlwZSwg dHJlZV9saHNfZXhwciwgdHJlZV9yaHNfZXhwcik7CisKKyAgICBjYXNlIGlz bF9hc3Rfb3BfbHQ6CisgICAgICByZXR1cm4gZm9sZF9idWlsZDIgKExUX0VY UFIsIHR5cGUsIHRyZWVfbGhzX2V4cHIsIHRyZWVfcmhzX2V4cHIpOworCisg ICAgY2FzZSBpc2xfYXN0X29wX2dlOgorICAgICAgcmV0dXJuIGZvbGRfYnVp bGQyIChHRV9FWFBSLCB0eXBlLCB0cmVlX2xoc19leHByLCB0cmVlX3Joc19l eHByKTsKKworICAgIGNhc2UgaXNsX2FzdF9vcF9ndDoKKyAgICAgIHJldHVy biBmb2xkX2J1aWxkMiAoR1RfRVhQUiwgdHlwZSwgdHJlZV9saHNfZXhwciwg dHJlZV9yaHNfZXhwcik7CisKKyAgICBkZWZhdWx0OgorICAgICAgZ2NjX3Vu cmVhY2hhYmxlICgpOworICAgIH0KK30KKworLyogQ29udmVydHMgYSB0ZXJu YXJ5IGlzbF9hc3RfZXhwcl9vcCBleHByZXNzaW9uIEUgdG8gYSBHQ0MgZXhw cmVzc2lvbiB0cmVlIG9mCisgICB0eXBlIFRZUEUuICAqLworCitzdGF0aWMg dHJlZQordGVybmFyeV9vcF90b190cmVlICh0cmVlIHR5cGUsIF9faXNsX3Rh a2UgaXNsX2FzdF9leHByICpleHByLCBpdnNfcGFyYW1zX3AgaXApCit7Cisg IGdjY19hc3NlcnQgKGlzbF9hc3RfZXhwcl9nZXRfb3BfdHlwZSAoZXhwcikg PT0gaXNsX2FzdF9vcF9taW51cyk7CisgIGlzbF9hc3RfZXhwciAqYXJnX2V4 cHIgPSBpc2xfYXN0X2V4cHJfZ2V0X29wX2FyZyAoZXhwciwgMCk7CisgIHRy ZWUgdHJlZV9maXJzdF9leHByCisgICAgPSBnY2NfZXhwcmVzc2lvbl9mcm9t X2lzbF9leHByZXNzaW9uICh0eXBlLCBhcmdfZXhwciwgaXApOworICBhcmdf ZXhwciA9IGlzbF9hc3RfZXhwcl9nZXRfb3BfYXJnIChleHByLCAxKTsKKyAg dHJlZSB0cmVlX3NlY29uZF9leHByCisgICAgPSBnY2NfZXhwcmVzc2lvbl9m cm9tX2lzbF9leHByZXNzaW9uICh0eXBlLCBhcmdfZXhwciwgaXApOworICBh cmdfZXhwciA9IGlzbF9hc3RfZXhwcl9nZXRfb3BfYXJnIChleHByLCAyKTsK KyAgdHJlZSB0cmVlX3RoaXJkX2V4cHIKKyAgICA9IGdjY19leHByZXNzaW9u X2Zyb21faXNsX2V4cHJlc3Npb24gKHR5cGUsIGFyZ19leHByLCBpcCk7Cisg IGlzbF9hc3RfZXhwcl9mcmVlIChleHByKTsKKyAgcmV0dXJuIGZvbGRfYnVp bGQzIChDT05EX0VYUFIsIHR5cGUsIHRyZWVfZmlyc3RfZXhwciwKKwkJICAg ICAgdHJlZV9zZWNvbmRfZXhwciwgdHJlZV90aGlyZF9leHByKTsKK30KKwor LyogQ29udmVydHMgYSB1bmFyeSBpc2xfYXN0X2V4cHJfb3AgZXhwcmVzc2lv biBFIHRvIGEgR0NDIGV4cHJlc3Npb24gdHJlZSBvZgorICAgdHlwZSBUWVBF LiAgKi8KKworc3RhdGljIHRyZWUKK3VuYXJ5X29wX3RvX3RyZWUgKHRyZWUg dHlwZSwgX19pc2xfdGFrZSBpc2xfYXN0X2V4cHIgKmV4cHIsIGl2c19wYXJh bXNfcCBpcCkKK3sKKyAgZ2NjX2Fzc2VydCAoaXNsX2FzdF9leHByX2dldF9v cF90eXBlIChleHByKSA9PSBpc2xfYXN0X29wX21pbnVzKTsKKyAgaXNsX2Fz dF9leHByICphcmdfZXhwciA9IGlzbF9hc3RfZXhwcl9nZXRfb3BfYXJnIChl eHByLCAwKTsKKyAgdHJlZSB0cmVlX2V4cHIgPSBnY2NfZXhwcmVzc2lvbl9m cm9tX2lzbF9leHByZXNzaW9uICh0eXBlLCBhcmdfZXhwciwgaXApOworICBp c2xfYXN0X2V4cHJfZnJlZSAoZXhwcik7CisgIHJldHVybiBmb2xkX2J1aWxk MSAoTkVHQVRFX0VYUFIsIHR5cGUsIHRyZWVfZXhwcik7Cit9CisKKy8qIENv bnZlcnRzIGFuIGlzbF9hc3RfZXhwcl9vcCBleHByZXNzaW9uIEUgd2l0aCB1 bmtub3duIG51bWJlciBvZiBhcmd1bWVudHMKKyAgIHRvIGEgR0NDIGV4cHJl c3Npb24gdHJlZSBvZiB0eXBlIFRZUEUuICAqLworCitzdGF0aWMgdHJlZQor bmFyeV9vcF90b190cmVlICh0cmVlIHR5cGUsIF9faXNsX3Rha2UgaXNsX2Fz dF9leHByICpleHByLCBpdnNfcGFyYW1zX3AgaXApCit7CisgIGVudW0gdHJl ZV9jb2RlIG9wX2NvZGU7CisgIHN3aXRjaCAoaXNsX2FzdF9leHByX2dldF9v cF90eXBlIChleHByKSkKKyAgICB7CisgICAgY2FzZSBpc2xfYXN0X29wX21h eDoKKyAgICAgIG9wX2NvZGUgPSBNQVhfRVhQUjsKKyAgICAgIGJyZWFrOwor CisgICAgY2FzZSBpc2xfYXN0X29wX21pbjoKKyAgICAgIG9wX2NvZGUgPSBN SU5fRVhQUjsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAg IGdjY191bnJlYWNoYWJsZSAoKTsgICAgCisgICAgfQorICBpc2xfYXN0X2V4 cHIgKmFyZ19leHByID0gaXNsX2FzdF9leHByX2dldF9vcF9hcmcgKGV4cHIs IDApOworICB0cmVlIHJlcyA9IGdjY19leHByZXNzaW9uX2Zyb21faXNsX2V4 cHJlc3Npb24gKHR5cGUsIGFyZ19leHByLCBpcCk7CisgIGludCBpOworICBm b3IgKGkgPSAxOyBpIDwgaXNsX2FzdF9leHByX2dldF9vcF9uX2FyZyAoZXhw cik7IGkrKykKKyAgICB7CisgICAgICBhcmdfZXhwciA9IGlzbF9hc3RfZXhw cl9nZXRfb3BfYXJnIChleHByLCBpKTsKKyAgICAgIHRyZWUgdCA9IGdjY19l eHByZXNzaW9uX2Zyb21faXNsX2V4cHJlc3Npb24gKHR5cGUsIGFyZ19leHBy LCBpcCk7CisgICAgICByZXMgPSBmb2xkX2J1aWxkMiAob3BfY29kZSwgdHlw ZSwgcmVzLCB0KTsKKyAgICB9CisgIGlzbF9hc3RfZXhwcl9mcmVlIChleHBy KTsKKyAgcmV0dXJuIHJlczsKK30KKworCisvKiBDb252ZXJ0cyBhbiBpc2xf YXN0X2V4cHJfb3AgZXhwcmVzc2lvbiBFIHRvIGEgR0NDIGV4cHJlc3Npb24g dHJlZSBvZgorICAgdHlwZSBUWVBFLiAgKi8KKworc3RhdGljIHRyZWUKK2dj Y19leHByZXNzaW9uX2Zyb21faXNsX2V4cHJfb3AgKHRyZWUgdHlwZSwgX19p c2xfdGFrZSBpc2xfYXN0X2V4cHIgKmV4cHIsCisJCQkJIGl2c19wYXJhbXNf cCBpcCkKK3sKKyAgZ2NjX2Fzc2VydCAoaXNsX2FzdF9leHByX2dldF90eXBl IChleHByKSA9PSBpc2xfYXN0X2V4cHJfb3ApOworICBzd2l0Y2ggKGlzbF9h c3RfZXhwcl9nZXRfb3BfdHlwZSAoZXhwcikpCisgICAgeworICAgIC8qIFRo ZXNlIGlzbCBhc3QgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0 LiAgKi8KKyAgICBjYXNlIGlzbF9hc3Rfb3BfZXJyb3I6CisgICAgY2FzZSBp c2xfYXN0X29wX2NhbGw6CisgICAgY2FzZSBpc2xfYXN0X29wX2FuZF90aGVu OgorICAgIGNhc2UgaXNsX2FzdF9vcF9vcl9lbHNlOgorICAgIGNhc2UgaXNs X2FzdF9vcF9wZGl2X3E6CisgICAgY2FzZSBpc2xfYXN0X29wX3BkaXZfcjoK KyAgICBjYXNlIGlzbF9hc3Rfb3Bfc2VsZWN0OgorICAgICAgZ2NjX3VucmVh Y2hhYmxlICgpOworCisgICAgY2FzZSBpc2xfYXN0X29wX21heDoKKyAgICBj YXNlIGlzbF9hc3Rfb3BfbWluOgorICAgICAgcmV0dXJuIG5hcnlfb3BfdG9f dHJlZSAodHlwZSwgZXhwciwgaXApOworCisgICAgY2FzZSBpc2xfYXN0X29w X2FkZDoKKyAgICBjYXNlIGlzbF9hc3Rfb3Bfc3ViOgorICAgIGNhc2UgaXNs X2FzdF9vcF9tdWw6CisgICAgY2FzZSBpc2xfYXN0X29wX2RpdjoKKyAgICBj YXNlIGlzbF9hc3Rfb3BfZmRpdl9xOgorICAgIGNhc2UgaXNsX2FzdF9vcF9h bmQ6CisgICAgY2FzZSBpc2xfYXN0X29wX29yOgorICAgIGNhc2UgaXNsX2Fz dF9vcF9lcToKKyAgICBjYXNlIGlzbF9hc3Rfb3BfbGU6CisgICAgY2FzZSBp c2xfYXN0X29wX2x0OgorICAgIGNhc2UgaXNsX2FzdF9vcF9nZToKKyAgICBj YXNlIGlzbF9hc3Rfb3BfZ3Q6CisgICAgICByZXR1cm4gYmluYXJ5X29wX3Rv X3RyZWUgKHR5cGUsIGV4cHIsIGlwKTsKKworICAgIGNhc2UgaXNsX2FzdF9v cF9taW51czoKKyAgICAgIHJldHVybiB1bmFyeV9vcF90b190cmVlICh0eXBl LCBleHByLCBpcCk7CisKKyAgICBjYXNlIGlzbF9hc3Rfb3BfY29uZDoKKyAg ICAgIHJldHVybiB0ZXJuYXJ5X29wX3RvX3RyZWUgKHR5cGUsIGV4cHIsIGlw KTsKKworICAgIGRlZmF1bHQ6CisgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7 CisgICAgfQorCisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKKy8qIENvbnZl cnRzIGFuIElTTCBBU1QgZXhwcmVzc2lvbiBFIGJhY2sgdG8gYSBHQ0MgZXhw cmVzc2lvbiB0cmVlIG9mCisgICB0eXBlIFRZUEUuICAqLworCitzdGF0aWMg dHJlZQorZ2NjX2V4cHJlc3Npb25fZnJvbV9pc2xfZXhwcmVzc2lvbiAodHJl ZSB0eXBlLCBfX2lzbF90YWtlIGlzbF9hc3RfZXhwciAqZXhwciwKKwkJCQkg ICAgaXZzX3BhcmFtc19wIGlwKQoreworICBzd2l0Y2ggKGlzbF9hc3RfZXhw cl9nZXRfdHlwZSAoZXhwcikpCisgICAgeworICAgIGNhc2UgaXNsX2FzdF9l eHByX2lkOgorICAgICAgcmV0dXJuIGdjY19leHByZXNzaW9uX2Zyb21faXNs X2FzdF9leHByX2lkIChleHByLCBpcCk7CisKKyAgICBjYXNlIGlzbF9hc3Rf ZXhwcl9pbnQ6CisgICAgICByZXR1cm4gZ2NjX2V4cHJlc3Npb25fZnJvbV9p c2xfZXhwcl9pbnQgKHR5cGUsIGV4cHIpOworCisgICAgY2FzZSBpc2xfYXN0 X2V4cHJfb3A6CisgICAgICByZXR1cm4gZ2NjX2V4cHJlc3Npb25fZnJvbV9p c2xfZXhwcl9vcCAodHlwZSwgZXhwciwgaXApOworCisgICAgZGVmYXVsdDoK KyAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgICB9CisKKyAgcmV0dXJu IE5VTExfVFJFRTsKK30KKworLyogQ3JlYXRlcyBhIG5ldyBMT09QIGNvcnJl c3BvbmRpbmcgdG8gaXNsX2FzdF9ub2RlX2Zvci4gIEluc2VydHMgYW4KKyAg IGluZHVjdGlvbiB2YXJpYWJsZSBmb3IgdGhlIG5ldyBMT09QLiAgTmV3IExP T1AgaXMgYXR0YWNoZWQgdG8gQ0ZHCisgICBzdGFydGluZyBhdCBFTlRSWV9F REdFLiAgTE9PUCBpcyBpbnNlcnRlZCBpbnRvIHRoZSBsb29wIHRyZWUgYW5k CisgICBiZWNvbWVzIHRoZSBjaGlsZCBsb29wIG9mIHRoZSBPVVRFUl9MT09Q LiAgTkVXSVZTX0lOREVYIGJpbmRzCisgICBJU0wncyBzY2F0dGVyaW5nIG5h bWUgdG8gdGhlIGluZHVjdGlvbiB2YXJpYWJsZSBjcmVhdGVkIGZvciB0aGUK KyAgIGxvb3Agb2YgU1RNVC4gIFRoZSBuZXcgaW5kdWN0aW9uIHZhcmlhYmxl IGlzIGluc2VydGVkIGluIHRoZSBORVdJVlMKKyAgIHZlY3RvciBhbmQgaXMg b2YgdHlwZSBUWVBFLiAgKi8KKworc3RhdGljIHN0cnVjdCBsb29wICoKK2dy YXBoaXRlX2NyZWF0ZV9uZXdfbG9vcCAoZWRnZSBlbnRyeV9lZGdlLCBfX2lz bF9rZWVwIGlzbF9hc3Rfbm9kZSAqbm9kZV9mb3IsCisJCQkgIGxvb3BfcCBv dXRlciwgdHJlZSB0eXBlLCB0cmVlIGxiLCB0cmVlIHViLAorCQkJICBpdnNf cGFyYW1zX3AgaXApCit7CisgIGlzbF9hc3RfZXhwciAqZm9yX2luYyA9IGlz bF9hc3Rfbm9kZV9mb3JfZ2V0X2luYyAobm9kZV9mb3IpOworICB0cmVlIHN0 cmlkZSA9IGdjY19leHByZXNzaW9uX2Zyb21faXNsX2V4cHJlc3Npb24gKHR5 cGUsIGZvcl9pbmMsIGlwKTsKKyAgdHJlZSBpdnZhciA9IGNyZWF0ZV90bXBf dmFyICh0eXBlLCAiZ3JhcGhpdGVfSVYiKTsKKyAgdHJlZSBpdiwgaXZfYWZ0 ZXJfaW5jcmVtZW50OworICBsb29wX3AgbG9vcCA9IGNyZWF0ZV9lbXB0eV9s b29wX29uX2VkZ2UKKyAgICAoZW50cnlfZWRnZSwgbGIsIHN0cmlkZSwgdWIs IGl2dmFyLCAmaXYsICZpdl9hZnRlcl9pbmNyZW1lbnQsCisgICAgIG91dGVy ID8gb3V0ZXIgOiBlbnRyeV9lZGdlLT5zcmMtPmxvb3BfZmF0aGVyKTsKKwor ICBpc2xfYXN0X2V4cHIgKmZvcl9pdGVyYXRvciA9IGlzbF9hc3Rfbm9kZV9m b3JfZ2V0X2l0ZXJhdG9yIChub2RlX2Zvcik7CisgIGlzbF9pZCAqaWQgPSBp c2xfYXN0X2V4cHJfZ2V0X2lkIChmb3JfaXRlcmF0b3IpOworICBpcC0+dHJl ZV9mcm9tX2lzbF9pZFtpZF0gPSBpdjsKKyAgaXNsX2FzdF9leHByX2ZyZWUg KGZvcl9pdGVyYXRvcik7CisgIHJldHVybiBsb29wOworfQorCitzdGF0aWMg ZWRnZQordHJhbnNsYXRlX2lzbF9hc3QgKGxvb3BfcCBjb250ZXh0X2xvb3As IF9faXNsX2tlZXAgaXNsX2FzdF9ub2RlICpub2RlLAorCQkgICBlZGdlIG5l eHRfZSwgaXZzX3BhcmFtc19wIGlwKTsKKworLyogQ3JlYXRlIHRoZSBsb29w IGZvciBhIGlzbF9hc3Rfbm9kZV9mb3IuCisKKyAgIC0gTkVYVF9FIGlzIHRo ZSBlZGdlIHdoZXJlIG5ldyBnZW5lcmF0ZWQgY29kZSBzaG91bGQgYmUgYXR0 YWNoZWQuICAqLworCitzdGF0aWMgZWRnZQordHJhbnNsYXRlX2lzbF9hc3Rf Zm9yX2xvb3AgKGxvb3BfcCBjb250ZXh0X2xvb3AsCisJCQkgICAgX19pc2xf a2VlcCBpc2xfYXN0X25vZGUgKm5vZGVfZm9yLCBlZGdlIG5leHRfZSwKKwkJ CSAgICB0cmVlIHR5cGUsIHRyZWUgbGIsIHRyZWUgdWIsCisJCQkgICAgaXZz X3BhcmFtc19wIGlwKQoreworICBnY2NfYXNzZXJ0IChpc2xfYXN0X25vZGVf Z2V0X3R5cGUgKG5vZGVfZm9yKSA9PSBpc2xfYXN0X25vZGVfZm9yKTsKKyAg c3RydWN0IGxvb3AgKmxvb3AgPSBncmFwaGl0ZV9jcmVhdGVfbmV3X2xvb3Ag KG5leHRfZSwgbm9kZV9mb3IsIGNvbnRleHRfbG9vcCwKKwkJCQkJCXR5cGUs IGxiLCB1YiwgaXApOworICBlZGdlIGxhc3RfZSA9IHNpbmdsZV9leGl0IChs b29wKTsKKyAgZWRnZSB0b19ib2R5ID0gc2luZ2xlX3N1Y2NfZWRnZSAobG9v cC0+aGVhZGVyKTsKKyAgYmFzaWNfYmxvY2sgYWZ0ZXIgPSB0b19ib2R5LT5k ZXN0OworCisgIC8qIENyZWF0ZSBhIGJhc2ljIGJsb2NrIGZvciBsb29wIGNs b3NlIHBoaSBub2Rlcy4gICovCisgIGxhc3RfZSA9IHNpbmdsZV9zdWNjX2Vk Z2UgKHNwbGl0X2VkZ2UgKGxhc3RfZSkpOworCisgIC8qIFRyYW5zbGF0ZSB0 aGUgYm9keSBvZiB0aGUgbG9vcC4gICovCisgIGlzbF9hc3Rfbm9kZSAqZm9y X2JvZHkgPSBpc2xfYXN0X25vZGVfZm9yX2dldF9ib2R5IChub2RlX2Zvcik7 CisgIG5leHRfZSA9IHRyYW5zbGF0ZV9pc2xfYXN0IChsb29wLCBmb3JfYm9k eSwgdG9fYm9keSwgaXApOworICBpc2xfYXN0X25vZGVfZnJlZSAoZm9yX2Jv ZHkpOworICByZWRpcmVjdF9lZGdlX3N1Y2Nfbm9kdXAgKG5leHRfZSwgYWZ0 ZXIpOworICBzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlOQVRP UlMsIG5leHRfZS0+ZGVzdCwgbmV4dF9lLT5zcmMpOworCisgIC8qIFRPRE86 IEFkZCBjaGVja2luZyBmb3IgdGhlIGxvb3AgcGFyYWxsZWxpc20uICAqLwor CisgIHJldHVybiBsYXN0X2U7Cit9CisKKy8qIFdlIHVzZSB0aGlzIGZ1bmN0 aW9uIHRvIGdldCB0aGUgdXBwZXIgYm91bmQgYmVjYXVzZSBvZiB0aGUgZm9y bSwKKyAgIHdoaWNoIGlzIHVzZWQgYnkgaXNsIHRvIHJlcHJlc2VudCBsb29w czoKKworICAgZm9yIChpdGVyYXRvciA9IGluaXQ7IGNvbmQ7IGl0ZXJhdG9y ICs9IGluYykKKworICAgeworCisgICAgIC4uLgorCisgICB9CisKKyAgIFRo ZSBsb29wIGNvbmRpdGlvbiBpcyBhbiBhcmJpdHJhcnkgZXhwcmVzc2lvbiwg d2hpY2ggY29udGFpbnMgdGhlCisgICBjdXJyZW50IGxvb3AgaXRlcmF0b3Iu CisKKyAgIChlLmcuIGl0ZXJhdG9yICsgMyA8IEIgJiYgQyA+IGl0ZXJhdG9y ICsgQSkKKworICAgV2UgaGF2ZSB0byBrbm93IHRoZSB1cHBlciBib3VuZCBv ZiB0aGUgaXRlcmF0b3IgdG8gZ2VuZXJhdGUgYSBsb29wCisgICBpbiBHaW1w bGUgZm9ybS4gSXQgY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIHNwZWNpYWwg cmVwcmVzZW50YXRpb24KKyAgIG9mIHRoZSBsb29wIGNvbmRpdGlvbiwgd2hp Y2ggaXMgZ2VuZXJhdGVkIGJ5IGlzbCwKKyAgIGlmIHRoZSBhc3RfYnVpbGRf YXRvbWljX3VwcGVyX2JvdW5kIG9wdGlvbiBpcyBzZXQuIEluIHRoaXMgY2Fz ZSwKKyAgIGlzbCBnZW5lcmF0ZXMgYSBsb29wIGNvbmRpdGlvbiB0aGF0IGNv bnNpc3RzIG9mIHRoZSBjdXJyZW50IGxvb3AKKyAgIGl0ZXJhdG9yLCArIGFu IG9wZXJhdG9yICg8IG9yIDw9KSBhbmQgYW4gZXhwcmVzc2lvbiBub3QgaW52 b2x2aW5nCisgICB0aGUgaXRlcmF0b3IsIHdoaWNoIGlzIHByb2Nlc3NlZCBh bmQgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi4KKworICAgKGUuZyBpdGVy YXRvciA8PSB1cHBlci1ib3VuZC1leHByZXNzaW9uLXdpdGhvdXQtaXRlcmF0 b3IpICAqLworCitzdGF0aWMgX19pc2xfZ2l2ZSBpc2xfYXN0X2V4cHIgKgor Z2V0X3VwcGVyX2JvdW5kIChfX2lzbF9rZWVwIGlzbF9hc3Rfbm9kZSAqbm9k ZV9mb3IpCit7CisgIGdjY19hc3NlcnQgKGlzbF9hc3Rfbm9kZV9nZXRfdHlw ZSAobm9kZV9mb3IpID09IGlzbF9hc3Rfbm9kZV9mb3IpOworICBpc2xfYXN0 X2V4cHIgKmZvcl9jb25kID0gaXNsX2FzdF9ub2RlX2Zvcl9nZXRfY29uZCAo bm9kZV9mb3IpOworICBnY2NfYXNzZXJ0IChpc2xfYXN0X2V4cHJfZ2V0X3R5 cGUgKGZvcl9jb25kKSA9PSBpc2xfYXN0X2V4cHJfb3ApOworICBpc2xfYXN0 X2V4cHIgKnJlczsKKyAgc3dpdGNoIChpc2xfYXN0X2V4cHJfZ2V0X29wX3R5 cGUgKGZvcl9jb25kKSkKKyAgICB7CisgICAgY2FzZSBpc2xfYXN0X29wX2xl OgorICAgICAgcmVzID0gaXNsX2FzdF9leHByX2dldF9vcF9hcmcgKGZvcl9j b25kLCAxKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBpc2xfYXN0X29w X2x0OgorICAgICAgeworICAgICAgICAvLyAoaXRlcmF0b3IgPCB1YikgPT4g KGl0ZXJhdG9yIDw9IHViIC0gMSkKKyAgICAgICAgaXNsX3ZhbCAqb25lID0g aXNsX3ZhbF9pbnRfZnJvbV9zaSAoaXNsX2FzdF9leHByX2dldF9jdHggKGZv cl9jb25kKSwgMSk7CisgICAgICAgIGlzbF9hc3RfZXhwciAqdWIgPSBpc2xf YXN0X2V4cHJfZ2V0X29wX2FyZyAoZm9yX2NvbmQsIDEpOworICAgICAgICBy ZXMgPSBpc2xfYXN0X2V4cHJfc3ViICh1YiwgaXNsX2FzdF9leHByX2Zyb21f dmFsIChvbmUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICBk ZWZhdWx0OgorICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOworICAgIH0KKyAg aXNsX2FzdF9leHByX2ZyZWUgKGZvcl9jb25kKTsKKyAgcmV0dXJuIHJlczsK K30KKworLyogQWxsIGxvb3BzIGdlbmVyYXRlZCBieSBjcmVhdGVfZW1wdHlf bG9vcF9vbl9lZGdlIGhhdmUgdGhlIGZvcm0gb2YKKyAgIGEgcG9zdC10ZXN0 IGxvb3A6CisKKyAgIGRvCisKKyAgIHsKKyAgICAgYm9keSBvZiB0aGUgbG9v cDsKKyAgIH0gd2hpbGUgKGxvd2VyIGJvdW5kIDwgdXBwZXIgYm91bmQpOwor CisgICBXZSBjcmVhdGUgYSBuZXcgaWYgcmVnaW9uIHByb3RlY3RpbmcgdGhl IGxvb3AgdG8gYmUgZXhlY3V0ZWQsIGlmCisgICB0aGUgZXhlY3V0aW9uIGNv dW50IGlzIHplcm8gKGxvd2VyIGJvdW5kID4gdXBwZXIgYm91bmQpLiAgKi8K Kworc3RhdGljIGVkZ2UKK2dyYXBoaXRlX2NyZWF0ZV9uZXdfbG9vcF9ndWFy ZCAoZWRnZSBlbnRyeV9lZGdlLAorCQkJCV9faXNsX2tlZXAgaXNsX2FzdF9u b2RlICpub2RlX2ZvciwgdHJlZSAqdHlwZSwKKwkJCQl0cmVlICpsYiwgdHJl ZSAqdWIsIGl2c19wYXJhbXNfcCBpcCkKK3sKKyAgZ2NjX2Fzc2VydCAoaXNs X2FzdF9ub2RlX2dldF90eXBlIChub2RlX2ZvcikgPT0gaXNsX2FzdF9ub2Rl X2Zvcik7CisgIHRyZWUgY29uZF9leHByOworICBlZGdlIGV4aXRfZWRnZTsK KworICAqdHlwZSA9ICpncmFwaGl0ZV9leHByZXNzaW9uX3NpemVfdHlwZTsK KyAgaXNsX2FzdF9leHByICpmb3JfaW5pdCA9IGlzbF9hc3Rfbm9kZV9mb3Jf Z2V0X2luaXQgKG5vZGVfZm9yKTsKKyAgKmxiID0gZ2NjX2V4cHJlc3Npb25f ZnJvbV9pc2xfZXhwcmVzc2lvbiAoKnR5cGUsIGZvcl9pbml0LCBpcCk7Cisg IGlzbF9hc3RfZXhwciAqdXBwZXJfYm91bmQgPSBnZXRfdXBwZXJfYm91bmQg KG5vZGVfZm9yKTsKKyAgKnViID0gZ2NjX2V4cHJlc3Npb25fZnJvbV9pc2xf ZXhwcmVzc2lvbiAoKnR5cGUsIHVwcGVyX2JvdW5kLCBpcCk7CisgIAorICAv KiBXaGVuIHViIGlzIHNpbXBseSBhIGNvbnN0YW50IG9yIGEgcGFyYW1ldGVy LCB1c2UgbGIgPD0gdWIuICAqLworICBpZiAoVFJFRV9DT0RFICgqdWIpID09 IElOVEVHRVJfQ1NUIHx8IFRSRUVfQ09ERSAoKnViKSA9PSBTU0FfTkFNRSkK KyAgICBjb25kX2V4cHIgPSBmb2xkX2J1aWxkMiAoTEVfRVhQUiwgYm9vbGVh bl90eXBlX25vZGUsICpsYiwgKnViKTsKKyAgZWxzZQorICAgIHsKKyAgICAg IHRyZWUgb25lID0gKFBPSU5URVJfVFlQRV9QICgqdHlwZSkKKwkJICA/IGNv bnZlcnRfdG9fcHRyb2ZmdHlwZSAoaW50ZWdlcl9vbmVfbm9kZSkKKwkJICA6 IGZvbGRfY29udmVydCAoKnR5cGUsIGludGVnZXJfb25lX25vZGUpKTsKKyAg ICAgIC8qIEFkZGluZyArMSBhbmQgdXNpbmcgTFRfRVhQUiBoZWxwcyB3aXRo IGxvb3AgbGF0Y2hlcyB0aGF0IGhhdmUgYQorCSBsb29wIGl0ZXJhdGlvbiBj b3VudCBvZiAiUEFSQU1FVEVSIC0gMSIuICBGb3IgUEFSQU1FVEVSID09IDAg dGhpcworCSBiZWNvbWVzIDJeay0xIGR1ZSB0byBpbnRlZ2VyIG92ZXJmbG93 LCBhbmQgdGhlIGNvbmRpdGlvbiBsYiA8PSB1YgorCSBpcyB0cnVlLCBldmVu IGlmIHdlIGRvIG5vdCB3YW50IHRoaXMuICBIb3dldmVyIGxiIDwgdWIgKyAx IGlzIGZhbHNlLAorCSBhcyBleHBlY3RlZC4gICovCisgICAgICB0cmVlIHVi X29uZSA9IGZvbGRfYnVpbGQyIChQT0lOVEVSX1RZUEVfUCAoKnR5cGUpID8g UE9JTlRFUl9QTFVTX0VYUFIKKwkJCQkgOiBQTFVTX0VYUFIsICp0eXBlLCAq dWIsIG9uZSk7CisKKyAgICAgIGNvbmRfZXhwciA9IGZvbGRfYnVpbGQyIChM VF9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwgKmxiLCB1Yl9vbmUpOworICAg IH0KKworICBleGl0X2VkZ2UgPSBjcmVhdGVfZW1wdHlfaWZfcmVnaW9uX29u X2VkZ2UgKGVudHJ5X2VkZ2UsIGNvbmRfZXhwcik7CisKKyAgcmV0dXJuIGV4 aXRfZWRnZTsKK30KKworLyogVHJhbnNsYXRlcyBhbiBpc2xfYXN0X25vZGVf Zm9yIHRvIEdpbXBsZS4gKi8KKworc3RhdGljIGVkZ2UKK3RyYW5zbGF0ZV9p c2xfYXN0X25vZGVfZm9yIChsb29wX3AgY29udGV4dF9sb29wLCBfX2lzbF9r ZWVwIGlzbF9hc3Rfbm9kZSAqbm9kZSwKKwkJCSAgICBlZGdlIG5leHRfZSwg aXZzX3BhcmFtc19wIGlwKQoreworICBnY2NfYXNzZXJ0IChpc2xfYXN0X25v ZGVfZ2V0X3R5cGUgKG5vZGUpID09IGlzbF9hc3Rfbm9kZV9mb3IpOworICB0 cmVlIHR5cGUsIGxiLCB1YjsKKyAgZWRnZSBsYXN0X2UgPSBncmFwaGl0ZV9j cmVhdGVfbmV3X2xvb3BfZ3VhcmQgKG5leHRfZSwgbm9kZSwgJnR5cGUsCisJ CQkJCQkmbGIsICZ1YiwgaXApOworICBlZGdlIHRydWVfZSA9IGdldF90cnVl X2VkZ2VfZnJvbV9ndWFyZF9iYiAobmV4dF9lLT5kZXN0KTsKKworICB0cmFu c2xhdGVfaXNsX2FzdF9mb3JfbG9vcCAoY29udGV4dF9sb29wLCBub2RlLCB0 cnVlX2UsCisJCQkgICAgICB0eXBlLCBsYiwgdWIsIGlwKTsKKyAgcmV0dXJu IGxhc3RfZTsKK30KKworLyogVHJhbnNsYXRlcyBhbiBJU0wgQVNUIG5vZGUg Tk9ERSB0byBHQ0MgcmVwcmVzZW50YXRpb24gaW4gdGhlCisgICBjb250ZXh0 IG9mIGEgU0VTRS4gICovCisKK3N0YXRpYyBlZGdlCit0cmFuc2xhdGVfaXNs X2FzdCAobG9vcF9wIGNvbnRleHRfbG9vcCwgX19pc2xfa2VlcCBpc2xfYXN0 X25vZGUgKm5vZGUsCisJCSAgIGVkZ2UgbmV4dF9lLCBpdnNfcGFyYW1zX3Ag aXApCit7CisgIHN3aXRjaCAoaXNsX2FzdF9ub2RlX2dldF90eXBlIChub2Rl KSkKKyAgICB7CisgICAgY2FzZSBpc2xfYXN0X25vZGVfZXJyb3I6CisgICAg ICBnY2NfdW5yZWFjaGFibGUgKCk7CisKKyAgICBjYXNlIGlzbF9hc3Rfbm9k ZV9mb3I6CisgICAgICByZXR1cm4gdHJhbnNsYXRlX2lzbF9hc3Rfbm9kZV9m b3IgKGNvbnRleHRfbG9vcCwgbm9kZSwKKwkJCQkJIG5leHRfZSwgaXApOwor CisgICAgY2FzZSBpc2xfYXN0X25vZGVfaWY6CisgICAgICByZXR1cm4gbmV4 dF9lOworCisgICAgY2FzZSBpc2xfYXN0X25vZGVfdXNlcjoKKyAgICAgIHJl dHVybiBuZXh0X2U7CisKKyAgICBjYXNlIGlzbF9hc3Rfbm9kZV9ibG9jazoK KyAgICAgIHJldHVybiBuZXh0X2U7CisKKyAgICBkZWZhdWx0OgorICAgICAg Z2NjX3VucmVhY2hhYmxlICgpOworICAgIH0KK30KKwogLyogUHJpbnRzIE5P REUgdG8gRklMRS4gICovCiAKIHZvaWQKQEAgLTY1LDYgKzU4NiwyMyBAQAog ICBpc2xfcHJpbnRlcl9mcmVlIChwcm4pOwogfQogCisvKiBBZGQgSVNMJ3Mg cGFyYW1ldGVyIGlkZW50aWZpZXJzIGFuZCBjb3JyZXNwb25kaW5nLnRyZWVz IHRvIGl2c19wYXJhbXMgICovCisKK3N0YXRpYyB2b2lkCithZGRfcGFyYW1l dGVyc190b19pdnNfcGFyYW1zIChzY29wX3Agc2NvcCwgaXZzX3BhcmFtc19w IGlwKQoreworICBzZXNlIHJlZ2lvbiA9IFNDT1BfUkVHSU9OIChzY29wKTsK KyAgdW5zaWduZWQgbmJfcGFyYW1ldGVycyA9IGlzbF9zZXRfZGltIChzY29w LT5jb250ZXh0LCBpc2xfZGltX3BhcmFtKTsKKyAgZ2NjX2Fzc2VydCAobmJf cGFyYW1ldGVycyA9PSBTRVNFX1BBUkFNUyAocmVnaW9uKS5sZW5ndGggKCkp OworICB1bnNpZ25lZCBpOworICBmb3IgKGkgPSAwOyBpIDwgbmJfcGFyYW1l dGVyczsgaSsrKQorICAgIHsKKyAgICAgIGlzbF9pZCAqdG1wX2lkID0gaXNs X3NldF9nZXRfZGltX2lkIChzY29wLT5jb250ZXh0LCBpc2xfZGltX3BhcmFt LCBpKTsKKyAgICAgIGlwLT50cmVlX2Zyb21faXNsX2lkW3RtcF9pZF0gPSBT RVNFX1BBUkFNUyAocmVnaW9uKVtpXTsKKyAgICB9Cit9CisKKwogLyogR2Vu ZXJhdGVzIGEgYnVpbGQsIHdoaWNoIHNwZWNpZmllcyB0aGUgY29uc3RyYWlu dHMgb24gdGhlIHBhcmFtZXRlcnMuICAqLwogCiBzdGF0aWMgX19pc2xfZ2l2 ZSBpc2xfYXN0X2J1aWxkICoKQEAgLTEwMyw4ICs2NDEsMTUgQEAKIH0KIAog c3RhdGljIF9faXNsX2dpdmUgaXNsX2FzdF9ub2RlICoKLXNjb3BfdG9faXNs X2FzdCAoc2NvcF9wIHNjb3ApCitzY29wX3RvX2lzbF9hc3QgKHNjb3BfcCBz Y29wLCBpdnNfcGFyYW1zX3AgaXApCiB7CisgIC8qIEdlbmVyYXRlIGxvb3Ag dXBwZXIgYm91bmRzIHRoYXQgY29uc2lzdCBvZiB0aGUgY3VycmVudCBsb29w IGl0ZXJhdG9yLAorICBhbiBvcGVyYXRvciAoPCBvciA8PSkgYW5kIGFuIGV4 cHJlc3Npb24gbm90IGludm9sdmluZyB0aGUgaXRlcmF0b3IuCisgIElmIHRo aXMgb3B0aW9uIGlzIG5vdCBzZXQsIHRoZW4gdGhlIGN1cnJlbnQgbG9vcCBp dGVyYXRvciBtYXkgYXBwZWFyIHNldmVyYWwKKyAgdGltZXMgaW4gdGhlIHVw cGVyIGJvdW5kLiBTZWUgdGhlIGlzbCBtYW51YWwgZm9yIG1vcmUgZGV0YWls cy4gICovCisgIGlzbF9vcHRpb25zX3NldF9hc3RfYnVpbGRfYXRvbWljX3Vw cGVyX2JvdW5kIChzY29wLT5jdHgsIHRydWUpOworCisgIGFkZF9wYXJhbWV0 ZXJzX3RvX2l2c19wYXJhbXMgKHNjb3AsIGlwKTsKICAgaXNsX3VuaW9uX21h cCAqc2NoZWR1bGVfaXNsID0gZ2VuZXJhdGVfaXNsX3NjaGVkdWxlIChzY29w KTsKICAgaXNsX2FzdF9idWlsZCAqY29udGV4dF9pc2wgPSBnZW5lcmF0ZV9p c2xfY29udGV4dCAoc2NvcCk7CiAgIGlzbF9hc3Rfbm9kZSAqYXN0X2lzbCA9 IGlzbF9hc3RfYnVpbGRfYXN0X2Zyb21fc2NoZWR1bGUgKGNvbnRleHRfaXNs LApAQCAtMTE3LDIxICs2NjIsNTkgQEAKICAgIHRoZSBnaXZlbiBTQ09QLiAg UmV0dXJuIHRydWUgaWYgY29kZSBnZW5lcmF0aW9uIHN1Y2NlZWRlZC4KIAog ICAgRklYTUU6IFRoaXMgaXMgbm90IHlldCBhIGZ1bGwgaW1wbGVtZW50YXRp b24gb2YgdGhlIGNvZGUgZ2VuZXJhdG9yCi0gICAgICAgICAgd2l0aCBJU0wg QVNUcy4gR2VuZXJhdGlvbiBvZiBHSU1QTEUgY29kZSBpcyBoYXZlIHRvIGJl IGFkZGVkLiAgKi8KKyAgICAgICAgICB3aXRoIElTTCBBU1RzLiBHZW5lcmF0 aW9uIG9mIEdJTVBMRSBjb2RlIGhhcyB0byBiZSBjb21wbGV0ZWQuICAqLwog CiBib29sCiBncmFwaGl0ZV9yZWdlbmVyYXRlX2FzdF9pc2wgKHNjb3BfcCBz Y29wKQogeworICBsb29wX3AgY29udGV4dF9sb29wOworICBzZXNlIHJlZ2lv biA9IFNDT1BfUkVHSU9OIChzY29wKTsKKyAgaWZzZXNlIGlmX3JlZ2lvbiA9 IE5VTEw7CisgIGlzbF9hc3Rfbm9kZSAqcm9vdF9ub2RlOworICBzdHJ1Y3Qg aXZzX3BhcmFtcyBpcDsKKwogICB0aW1ldmFyX3B1c2ggKFRWX0dSQVBISVRF X0NPREVfR0VOKTsKICAgZ3JhcGhpdGVfcmVnZW5lcmF0ZV9lcnJvciA9IGZh bHNlOwotICBpc2xfYXN0X25vZGUgKnJvb3Rfbm9kZSA9IHNjb3BfdG9faXNs X2FzdCAoc2NvcCk7CisgIHJvb3Rfbm9kZSA9IHNjb3BfdG9faXNsX2FzdCAo c2NvcCwgJmlwKTsKKwogICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdz ICYgVERGX0RFVEFJTFMpKQogICAgIHsKICAgICAgIGZwcmludGYgKGR1bXBf ZmlsZSwgIlxuSVNMIEFTVCBnZW5lcmF0ZWQgYnkgSVNMOiBcbiIpOwogICAg ICAgcHJpbnRfaXNsX2FzdF9ub2RlIChkdW1wX2ZpbGUsIHJvb3Rfbm9kZSwg c2NvcC0+Y3R4KTsKKyAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIlxuIik7 CiAgICAgfQorCisgIHJlY29tcHV0ZV9hbGxfZG9taW5hdG9ycyAoKTsKKyAg Z3JhcGhpdGVfdmVyaWZ5ICgpOworCisgIGlmX3JlZ2lvbiA9IG1vdmVfc2Vz ZV9pbl9jb25kaXRpb24gKHJlZ2lvbik7CisgIHNlc2VfaW5zZXJ0X3BoaXNf Zm9yX2xpdmVvdXRzIChyZWdpb24sCisJCQkJIGlmX3JlZ2lvbi0+cmVnaW9u LT5leGl0LT5zcmMsCisJCQkJIGlmX3JlZ2lvbi0+ZmFsc2VfcmVnaW9uLT5l eGl0LAorCQkJCSBpZl9yZWdpb24tPnRydWVfcmVnaW9uLT5leGl0KTsKKyAg cmVjb21wdXRlX2FsbF9kb21pbmF0b3JzICgpOworICBncmFwaGl0ZV92ZXJp ZnkgKCk7CisKKyAgY29udGV4dF9sb29wID0gU0VTRV9FTlRSWSAocmVnaW9u KS0+c3JjLT5sb29wX2ZhdGhlcjsKKworICB0cmFuc2xhdGVfaXNsX2FzdCAo Y29udGV4dF9sb29wLCByb290X25vZGUsIGlmX3JlZ2lvbi0+dHJ1ZV9yZWdp b24tPmVudHJ5LAorCQkgICAgICZpcCk7CisgIGdyYXBoaXRlX3ZlcmlmeSAo KTsKKyAgc2Nldl9yZXNldCAoKTsKKyAgcmVjb21wdXRlX2FsbF9kb21pbmF0 b3JzICgpOworICBncmFwaGl0ZV92ZXJpZnkgKCk7CisKKyAgaWYgKGdyYXBo aXRlX3JlZ2VuZXJhdGVfZXJyb3IpCisgICAgc2V0X2lmc2VzZV9jb25kaXRp b24gKGlmX3JlZ2lvbiwgaW50ZWdlcl96ZXJvX25vZGUpOworCisgIGZyZWUg KGlmX3JlZ2lvbi0+dHJ1ZV9yZWdpb24pOworICBmcmVlIChpZl9yZWdpb24t PnJlZ2lvbik7CisgIGZyZWUgKGlmX3JlZ2lvbik7CisKKyAgaXZzX3BhcmFt c19jbGVhciAoJmlwKTsKICAgaXNsX2FzdF9ub2RlX2ZyZWUgKHJvb3Rfbm9k ZSk7CiAgIHRpbWV2YXJfcG9wIChUVl9HUkFQSElURV9DT0RFX0dFTik7Cisg IC8qIFRPRE86IEFkZCBkdW1wICAqLwogICByZXR1cm4gIWdyYXBoaXRlX3Jl Z2VuZXJhdGVfZXJyb3I7CiB9CiAjZW5kaWYK --001a11c24fa6c4953004fde72fd5--