From owner-freebsd-standards@FreeBSD.ORG Mon Jul 4 10:48:45 2011 Return-Path: Delivered-To: freebsd-standards@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 29161106566C; Mon, 4 Jul 2011 10:48:45 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail04.syd.optusnet.com.au (mail04.syd.optusnet.com.au [211.29.132.185]) by mx1.freebsd.org (Postfix) with ESMTP id 8CAFD8FC13; Mon, 4 Jul 2011 10:48:44 +0000 (UTC) Received: from c122-106-165-191.carlnfd1.nsw.optusnet.com.au (c122-106-165-191.carlnfd1.nsw.optusnet.com.au [122.106.165.191]) by mail04.syd.optusnet.com.au (8.13.1/8.13.1) with ESMTP id p64AmSFP030917 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 4 Jul 2011 20:48:29 +1000 Date: Mon, 4 Jul 2011 20:48:28 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Stefan Esser In-Reply-To: <4E0E2535.1060204@freebsd.org> Message-ID: <20110704195515.A1938@besplex.bde.org> References: <4E09AF8E.5010509@freebsd.org> <4E0B860E.50504@freebsd.org> <20110630164653.GA82980@zim.MIT.EDU> <4E0CACFB.8040906@freebsd.org> <19980.47094.184089.398324@khavrinen.csail.mit.edu> <20110701092909.F1164@besplex.bde.org> <4E0E2535.1060204@freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: Garrett Wollman , freebsd-standards@FreeBSD.org Subject: Re: New patches for expr (was: Re: Fwd: [RFC] Consistent numeric range for "expr" on all architectures) X-BeenThere: freebsd-standards@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Standards compliance List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Jul 2011 10:48:45 -0000 On Fri, 1 Jul 2011, Stefan Esser wrote: > On 01.07.2011 01:58, Bruce Evans wrote: > [...] >> The part about recognizing different syntaxes is an extension and >> requires explicit permission. The part about "using" a rank larger >> than that of signed long requires no explicit permission, since it >> only affects the result if there is overflow, but then the behaviour >> is undefined. So any utility can do the latter. > > I have attached a new patch which does the following for overflow: > > 1) Numeric range is extended to intmax_t > 2) Overflow is caught in all arithmetic operations > 3) Integers not used in arithmetic operations are treated like strings >> ... > 4) Leading whitespace in numbers is only accepted in compat mode > ("expr -e" or EXPR_COMPAT defined in the process environment or > check_utility_compat("expr") == true). > > <<<<<< Aside: Is check_utility_compat() still used at all? > > It provides compatibility with FreeBSD-4 if the environment variable > _COMPAT_FreeBSD_4 exists and contains "expr" as member of a comma > separated list, or if the following symlink exists in /etc: > > compat-FreeBSD-4-util -> expr > > In fact, the symlink is also parsed as comma separated list, but expr is > the only program in FreeBSD that calls check_utility_compat() ... > > Since expr is the only user of check_utility_compat() and the same > effect can be had by specifying EXPR_COMPAT, the check_utility_compat > function should be considered deprecated and only be kept in libc for > backwards compatibility of old binaries, IMHO. This function adds one > unnecessary call of getenv() and one of readlink() per invocation of > expr and adds complexity to the man-page for expr. I'd like to remove the symlink. The symlink for malloc() annoys me too. It pessimizes and bloats malloc() a little, and on FreeBSD cluster machines, it breaks support for old binaries by being misconfigured to contain flags that are incompatible with ones recognized by old versions of malloc(). And there is no way to prevent even current malloc() from examining the symlink. It examines the symlink first and spams stderr with messages about any invalid flags in the symlink. Then it examines the environment variable, and the environment variable can be used to cancel any unportable or otherwise unwanted flags in the symlink, but the messages cannot be canceled, and more bogus messages may be printed to defeat the next stage. Then it examines the compile-time variable, and this can't completely cancel the previous stages, due to the messages. > I have prepared a number of patches, which I attach to this message. All > patches are relative to the current SVN version of expr.y (i.e. do *not* > try to apply the higher numbered ones on a patched source file). > > The first file (expr.y.diff1) contains a "diff -w -u3" of the functional > changes that I suggest. It is only meant to show the actual code changes > (applying this diff results in mis-indented code). > > The second file (expr.y.diff2) has been created with the same command > and contains some refactoring of functions. It is functionally identical > to the first version. > > The third file (expr.y.diff3) contains the diff with whitespace and > style changes that I suggest as final version. I plan to commit the > changes in sequence (with correct indentation of each step, of course), > in order to keep the change history separate for each intended purpose. The patches seem OK, except: - I don't like reversing the semantics of the -e option from "extension" to "compatible" - '+' is now not accepted even in compatibility mode. Accepting '+' wasn't documented, but was a side effect of using strto*() for parsing - the changes to the man page aren't in the patches. > I also include a SHAR of regression tests meant to be committed to > /usr/src/tools/regression/bin/expr. All tests pass with the current > patched version of expr (while the currently shipped version dumps core > in one test case). I ran the regression tests on a 2005 version of NetBSD expr and a 2002 version of Linux expr. There were the following failures: NetBSD: % not ok 10 - - (got 0, expected 2) % not ok 11 -1 - (got 0, expected 2) % not ok 12 -1 + 1 - (got 1, expected 2) % not ok 14 " 1" + 1 - (got 0, expected 2) % not ok 15 -e " 1" + 1 - (got 2, expected 0) % not ok 29 -- -9223372036854775808 / -1 - (got 0, expected 2) NetBSD does sloppy parsing using strtoll(), and does all numeric operations in type int64_t, and does primitive range checking. Most of the failures are from the sloppy parsing. #29 is from the range checking being too primitive for the delicate case INTMAX_MIN / -1. Linux: % not ok 10 - - (got 0, expected 2) % not ok 11 -1 - (got 0, expected 2) % not ok 12 -1 + 1 - (got 1, expected 2) I don't understand these 3. Linux expr gives the error when run directly. Now I'm confused by the results of NetBSD expr for these tests too. % not ok 15 -e " 1" + 1 - (got 2, expected 0) No -e in Linux. % not ok 16 "" + 1 - (got 2, expected 0) The test seems to be wrong here. The empty string should only be accepted in compat mode, but this test seems to use the default mode. % not ok 18 9223372036854775807 + 1 - (got 0, expected 2) % not ok 21 -- -9223372036854775808 \* -1 - (got 0, expected 2) % not ok 24 10000000000000000000 + 0 - (got 0, expected 2) % not ok 29 -- -9223372036854775808 / -1 - (got 0, expected 2) % not ok 32 4611686018427387904 \* 2 - (got 0, expected 2) % not ok 35 4611686018427387905 \* -2 - (got 0, expected 2) Since Linux does no range checking. % not ok 55 " 1" + 1 - (got 2, expected 0) Since Linux doesn't support EXPR_COMPAT=1 (to allow leading spaces and no digits). This shows an evil of environment variables -- it is not obvious what is tested since the environment variable has a critical effect but is not mentioned in the test output. Bruce From owner-freebsd-standards@FreeBSD.ORG Mon Jul 4 11:07:11 2011 Return-Path: Delivered-To: freebsd-standards@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B48811065676 for ; Mon, 4 Jul 2011 11:07:11 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 992208FC17 for ; Mon, 4 Jul 2011 11:07:11 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id p64B7B5G040566 for ; Mon, 4 Jul 2011 11:07:11 GMT (envelope-from owner-bugmaster@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id p64B7BkK040564 for freebsd-standards@FreeBSD.org; Mon, 4 Jul 2011 11:07:11 GMT (envelope-from owner-bugmaster@FreeBSD.org) Date: Mon, 4 Jul 2011 11:07:11 GMT Message-Id: <201107041107.p64B7BkK040564@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: gnats set sender to owner-bugmaster@FreeBSD.org using -f From: FreeBSD bugmaster To: freebsd-standards@FreeBSD.org Cc: Subject: Current problem reports assigned to freebsd-standards@FreeBSD.org X-BeenThere: freebsd-standards@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Standards compliance List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Jul 2011 11:07:11 -0000 Note: to view an individual PR, use: http://www.freebsd.org/cgi/query-pr.cgi?pr=(number). The following is a listing of current problems submitted by FreeBSD users. These represent problem reports covering all versions including experimental development code and obsolete releases. S Tracker Resp. Description -------------------------------------------------------------------------------- o stand/157050 standards OSS implementation lacks AFMT_FLOAT o stand/154842 standards invalid request authenticator in the second and subseq o stand/150093 standards C++ std::locale support is broken a stand/149980 standards [libc] [patch] negative value integer to nanosleep(2) o stand/147210 standards xmmintrin.h and cstdlib conflicts with each other with o docs/143472 standards gethostname(3) references undefined value: HOST_NAME_M s stand/141705 standards [libc] [request] libc lacks cexp (and friends) o stand/130067 standards Wrong numeric limits in system headers? o stand/124860 standards flockfile(3) doesn't work when the memory has been exh o stand/121921 standards [patch] Add leap second support to at(1), atrun(8) o stand/116477 standards rm(1): rm behaves unexpectedly when using -r and relat o bin/116413 standards incorrect getconf(1) handling of unsigned constants gi o stand/116081 standards make does not work with the directive sinclude p stand/107561 standards [libc] [patch] [request] Missing SUS function tcgetsid o stand/100017 standards [Patch] Add fuser(1) functionality to fstat(1) o stand/96236 standards [patch] [posix] sed(1) incorrectly describes a functio o stand/94729 standards [libc] fcntl() throws undocumented ENOTTY a stand/86484 standards [patch] mkfifo(1) uses wrong permissions o stand/82654 standards C99 long double math functions are missing o stand/81287 standards [patch] fingerd(8) might send a line not ending in CRL a stand/80293 standards sysconf() does not support well-defined unistd values o stand/79056 standards [feature request] [atch] regex(3) regression tests o stand/70813 standards [patch] ls(1) not Posix compliant o stand/66357 standards make POSIX conformance problem ('sh -e' & '+' command- s kern/64875 standards [libc] [patch] [request] add a system call: fdatasync( o stand/56476 standards [patch] cd9660 unicode support simple hack o stand/54410 standards one-true-awk not POSIX compliant (no extended REs) o stand/46119 standards Priority problems for SCHED_OTHER using pthreads o stand/44365 standards [headers] [patch] [request] introduce ulong and unchar a stand/41576 standards ln(1): replacing old dir-symlinks o stand/39256 standards snprintf/vsnprintf aren't POSIX-conformant for strings a docs/26003 standards getgroups(2) lists NGROUPS_MAX but not syslimits.h s stand/24590 standards timezone function not compatible witn Single Unix Spec o stand/21519 standards sys/dir.h should be deprecated some more s bin/14925 standards getsubopt isn't poisonous enough 35 problems total. From owner-freebsd-standards@FreeBSD.ORG Mon Jul 4 20:39:08 2011 Return-Path: Delivered-To: freebsd-standards@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 94222106564A for ; Mon, 4 Jul 2011 20:39:08 +0000 (UTC) (envelope-from se@freebsd.org) Received: from nm23-vm0.bullet.mail.ne1.yahoo.com (nm23-vm0.bullet.mail.ne1.yahoo.com [98.138.91.57]) by mx1.freebsd.org (Postfix) with SMTP id 513F68FC30 for ; Mon, 4 Jul 2011 20:39:08 +0000 (UTC) Received: from [98.138.90.48] by nm23.bullet.mail.ne1.yahoo.com with NNFMP; 04 Jul 2011 20:39:08 -0000 Received: from [98.138.226.130] by tm1.bullet.mail.ne1.yahoo.com with NNFMP; 04 Jul 2011 20:39:08 -0000 Received: from [127.0.0.1] by smtp217.mail.ne1.yahoo.com with NNFMP; 04 Jul 2011 20:39:07 -0000 X-Yahoo-Newman-Id: 980000.61767.bm@smtp217.mail.ne1.yahoo.com Received: from [192.168.119.20] (se@81.173.150.35 with plain) by smtp217.mail.ne1.yahoo.com with SMTP; 04 Jul 2011 13:39:06 -0700 PDT X-Yahoo-SMTP: iDf2N9.swBDAhYEh7VHfpgq0lnq. X-YMail-OSG: n3m5GIMVM1n4HxPU8yFH1hEsHRtB_QLQJCttfVTaOp91Ozc KoDH9dHTlfGhvKh38OgfR5Wvw3l2U.U.JZhpOzanLjfG48liDjeSEMlACmLv hr22xOXlWZX_8p4rKWvML_lfvOTE.4YqnxDzonnTv_RrOIw16IFpCNMQ6Ps1 1D1rOqeDBUhtXGJBw7fz81KncDKVF64swAWz5hcPr1BOrt2GvtuNkgv7x1qi cQPnQUyH2wQE1qYan7DH1dTzxFgmBFS_0eUT28nh5scxEUmCZ6zz994tc0Fi sKnohNVRpqhcXf.ddmVJmvyy9c23K0HrNSVIwfu1Hp9eT.tp.2dInjxWVvQJ LZ1ucY2PpJizrnSBfNtJQ2gFYBSfPQEYJ7QyK56wPHtQIjmmO6akRpA8y9If H2pikSEuupH_gz6Yot3BxnHrVwnfLZSqjifHJfB8cVYafyWUDXRg- X-Yahoo-Newman-Property: ymail-3 Message-ID: <4E1224E9.1050600@freebsd.org> Date: Mon, 04 Jul 2011 22:39:05 +0200 From: Stefan Esser User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20110624 Thunderbird/5.0 MIME-Version: 1.0 To: Bruce Evans References: <4E09AF8E.5010509@freebsd.org> <4E0B860E.50504@freebsd.org> <20110630164653.GA82980@zim.MIT.EDU> <4E0CACFB.8040906@freebsd.org> <19980.47094.184089.398324@khavrinen.csail.mit.edu> <20110701092909.F1164@besplex.bde.org> <4E0E2535.1060204@freebsd.org> <20110704195515.A1938@besplex.bde.org> In-Reply-To: <20110704195515.A1938@besplex.bde.org> Content-Type: multipart/mixed; boundary="------------000109010508020704090904" Cc: Garrett Wollman , freebsd-standards@FreeBSD.org Subject: Re: New patches for expr X-BeenThere: freebsd-standards@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Standards compliance List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Jul 2011 20:39:08 -0000 This is a multi-part message in MIME format. --------------000109010508020704090904 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Am 04.07.2011 12:48, schrieb Bruce Evans: > On Fri, 1 Jul 2011, Stefan Esser wrote: >> On 01.07.2011 01:58, Bruce Evans wrote: >> <<<<<< Aside: Is check_utility_compat() still used at all? >> >> It provides compatibility with FreeBSD-4 if the environment variable >> _COMPAT_FreeBSD_4 exists and contains "expr" as member of a comma >> separated list, or if the following symlink exists in /etc: >> >> compat-FreeBSD-4-util -> expr >> >> In fact, the symlink is also parsed as comma separated list, but expr is >> the only program in FreeBSD that calls check_utility_compat() ... >> >> Since expr is the only user of check_utility_compat() and the same >> effect can be had by specifying EXPR_COMPAT, the check_utility_compat >> function should be considered deprecated and only be kept in libc for >> backwards compatibility of old binaries, IMHO. This function adds one >> unnecessary call of getenv() and one of readlink() per invocation of >> expr and adds complexity to the man-page for expr. > > I'd like to remove the symlink. The symlink for malloc() annoys me > too. It pessimizes and bloats malloc() a little, and on FreeBSD cluster > machines, it breaks support for old binaries by being misconfigured > to contain flags that are incompatible with ones recognized by old > versions of malloc(). And there is no way to prevent even current > malloc() from examining the symlink. It examines the symlink first > and spams stderr with messages about any invalid flags in the symlink. > Then it examines the environment variable, and the environment variable > can be used to cancel any unportable or otherwise unwanted flags in > the symlink, but the messages cannot be canceled, and more bogus > messages may be printed to defeat the next stage. Then it examines > the compile-time variable, and this can't completely cancel the previous > stages, due to the messages. If there is no opposition to this change, I'd like to remove the call of check_utility_compat() from expr in a separate patch (to the source file and the man page), which would make this function obsolete except to support binaries from older releases that contain the call to this function (but it could just return 0 without checking for the symlink or environment variable and it should be made invisible for new code). If the symlinks exists for "expr" compatibility, then any script using "expr -e" or "expr --" will break, since there is no way to override the effect of that symlink (neither a command line option nor an environment setting will help). The man page of check_utility_compat() describes the function as a temporary work-around to enforce backwards compatibility with FreeBSD-4 (but as I said, that function appears to be unused, except for the one case of "expr"). > The patches seem OK, except: > - I don't like reversing the semantics of the -e option from "extension" > to "compatible" Hmmm, yes, I can understand your reasoning. But EXPR_COMPAT is meant to make "expr" backwards compatible with pre-POSIX versions, which did not accept options and had less strict number syntax rules. Now, the word compat could be understood to indicate compatibility with POSIX, not with the old version that was not compliant with POSIX ... I do consider the non-conflicting extension of the numeric range (in the sense of making "POSIX undefined" situations return sensible and defined results in FreeBSD) an "extension", but the backwards compatible mode is just that (and in conflict with POSIX, when enabled). Is there some other wording that might be acceptable for the backwards compatible mode of operation enabled by "EXPR_COMPAT" or the "-e" option? I thought about "backward-compatible" or "old mode operation", but both do not really appeal ... I have renamed the variable "eflag" to "nonposix" to better describe its meaning. > - '+' is now not accepted even in compatibility mode. Accepting > '+' wasn't documented, but was a side effect of using strto*() > for parsing Well, "+" is accepted in my local version, which has evolved a little beyond the files attached to my previous mail. > - the changes to the man page aren't in the patches. Yes, I already wrote, that I'd like to have consensus at the functionality before I submit patches to the man-page. >> I also include a SHAR of regression tests meant to be committed to >> /usr/src/tools/regression/bin/expr. All tests pass with the current >> patched version of expr (while the currently shipped version dumps core >> in one test case). > > I ran the regression tests on a 2005 version of NetBSD expr and a 2002 > version of Linux expr. There were the following failures: > > NetBSD: > % not ok 10 - - (got 0, expected 2) NetBSD seems to accept "-" as string; POSIX declares the behaviour undefined if a string argument is identical to one of the operators. We flag this as "syntax error". > % not ok 11 -1 - (got 0, expected 2) NetBSD expr does not support command line options and thus just accepts the decimal number as valid operand. We enable POSIX option processing by default (unless EXPR_COMPAT is set in the environment). This leads to "-1" being treated as unsupported option. This command line processing is only needed to support the "-e" option introduced to return from 64bit arithmetic with overflow checks to 32bit arithmetic with silent overflow. But we cannot easily go back and unsupport "-e", since it has been used in scripts that needed the extended numeric range. Too bad!!! BTW: NetBSD does support POSIX "option end" specified with "--" in a special way, which is meant to be backwards compatible: If after removal of a first argument of "--" the rest still parses, then "--" is considered as POSIX end of options marker. Else, "--" is the first string argument of the expression to evaluate. > % not ok 12 -1 + 1 - (got 1, expected 2) Same as above. NetBSD just adds -1 to 1 and returns with "0" and an exit code of 1. > % not ok 14 " 1" + 1 - (got 0, expected 2) NetBSD skips leading white space. They do not try to enforce POSIX compatible arguments (even without the equivalent of EXPR_COMPAT or the "-e" option). I checked the latest sources, this is still the case, although there had been an attempt to add POSIX options parsing in 2009 (which was immediatly backed-out again). > % not ok 15 -e " 1" + 1 - (got 2, expected 0) NetBSD does not support "-e" and considers it a valid string argument, but then the expression does not parse. > % not ok 29 -- -9223372036854775808 / -1 - (got 0, expected 2) > > NetBSD does sloppy parsing using strtoll(), and does all numeric operations > in type int64_t, and does primitive range checking. Most of the failures > are from the sloppy parsing. #29 is from the range checking being too > primitive for the delicate case INTMAX_MIN / -1. Yes, I special cased division of INTMAX_MIN / -1, since this is the only case of overflow in division (besides the div 0 case). The NetBSD range checks are incomplete for the sole reason, that they use one wrong comparison operator (i.e. "a < 0 && b < 0 && r > 0", while the final test should be "r >= 0" to catch "INTMAX_MIN + INTMAX_MIN). > Linux: > % not ok 10 - - (got 0, expected 2) > % not ok 11 -1 - (got 0, expected 2) > % not ok 12 -1 + 1 - (got 1, expected 2) > > I don't understand these 3. Linux expr gives the error when run directly. > Now I'm confused by the results of NetBSD expr for these tests too. I just remember that have Linux emulation installed ... The version I have identifies itself as "expr (GNU coreutils) 6.12" with Copyright 2008. Linux expr seems to be as forgiving with regard to strings that look like command options as NetBSD. "-" is just a string, "-1" a valid first argument (not an unsupported option) and the expression also just works. > % not ok 15 -e " 1" + 1 - (got 2, expected 0) > > No -e in Linux. Same as in NetBSD and about every other POSIX system in the world ;-) > % not ok 16 "" + 1 - (got 2, expected 0) > > The test seems to be wrong here. The empty string should only be accepted > in compat mode, but this test seems to use the default mode. This was with an earlier version of my patches. I have made the program and the test case reject interpretation of "" as zero (unless EXPR_COMPAT or "-e" are given). > % not ok 18 9223372036854775807 + 1 - (got 0, expected 2) > % not ok 21 -- -9223372036854775808 \* -1 - (got 0, expected 2) > % not ok 24 10000000000000000000 + 0 - (got 0, expected 2) > % not ok 29 -- -9223372036854775808 / -1 - (got 0, expected 2) > % not ok 32 4611686018427387904 \* 2 - (got 0, expected 2) > % not ok 35 4611686018427387905 \* -2 - (got 0, expected 2) > > Since Linux does no range checking. Obviously ... BTW: Linux "expr" does give "match", "substr", "index" and "length" special meaning (these are no valid string arguments). And they use "+" as an escape mechanism to support string these values, anyway. Thus the token "+" is a valid prefix for any string operand, and considered an identity operator. This does not lead to ambiguities, since "+" is not defined as operator on strings. But I do not think that we should follow that precedent, of course. > % not ok 55 " 1" + 1 - (got 2, expected 0) > > Since Linux doesn't support EXPR_COMPAT=1 (to allow leading spaces and > no digits). This shows an evil of environment variables -- it is not > obvious what is tested since the environment variable has a critical > effect but is not mentioned in the test output. Hmmm, I'll add a marker to the output of the regression test script to indicate whether EXPR_COMPAT had been set in the environment. New versions (3 diffs for expr.y, as planned to be committed one after the other - all relative to the latest version currently in SVN, a patch for the man page, and the regression tests expr/regress.sh) are attached. Please let me know, if there is anything else that needs to be changed before the commit. Best regards, STefan --------------000109010508020704090904 Content-Type: text/plain; name="expr.1.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="expr.1.diff" LS0tIGV4cHIuMQkyMDExLTA3LTAxIDIwOjIyOjI5LjIxMzEzMzUyMSArMDIwMAorKysgZXhw ci4xLkZJTkFMCTIwMTEtMDctMDIgMTg6NTc6MjcuMTYxOTk4NTYzICswMjAwCkBAIC01MCwy NSArNTAsMjAgQEAKIEFsbCBvcGVyYXRvcnMgYW5kIG9wZXJhbmRzIG11c3QgYmUgcGFzc2Vk IGFzIHNlcGFyYXRlIGFyZ3VtZW50cy4KIFNldmVyYWwgb2YgdGhlIG9wZXJhdG9ycyBoYXZl IHNwZWNpYWwgbWVhbmluZyB0byBjb21tYW5kIGludGVycHJldGVycwogYW5kIG11c3QgdGhl cmVmb3JlIGJlIHF1b3RlZCBhcHByb3ByaWF0ZWx5LgotQWxsIGludGVnZXIgb3BlcmFuZHMg YXJlIGludGVycHJldGVkIGluIGJhc2UgMTAuCitBbGwgaW50ZWdlciBvcGVyYW5kcyBhcmUg aW50ZXJwcmV0ZWQgaW4gYmFzZSAxMCBhbmQgbXVzdCBjb25zaXN0IG9mIG9ubHkKK2FuIG9w dGlvbmFsIGxlYWRpbmcgbWludXMgc2lnbiBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBkaWdp dHMuCiAuUHAKLUFyaXRobWV0aWMgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIHVzaW5nIHNp Z25lZCBpbnRlZ2VyIG1hdGguCi1JZiB0aGUKLS5GbCBlCi1mbGFnIGlzIHNwZWNpZmllZCwg YXJpdGhtZXRpYyB1c2VzIHRoZSBDCitBcml0aG1ldGljIG9wZXJhdGlvbnMgYXJlIHBlcmZv cm1lZCB1c2luZyBzaWduZWQgaW50ZWdlciBtYXRoIHdpdGggYQorcmFuZ2UgYWNjb3JkaW5n IHRvIHRoZSBDCiAuVnQgaW50bWF4X3QKLWRhdGEgdHlwZSAodGhlIGxhcmdlc3QgaW50ZWdy YWwgdHlwZSBhdmFpbGFibGUpLCBhbmQKLS5ObQotd2lsbCBkZXRlY3QgYXJpdGhtZXRpYyBv dmVyZmxvdyBhbmQgcmV0dXJuIGFuIGVycm9yIGluZGljYXRpb24uCi1JZiBhIG51bWVyaWMg b3BlcmFuZCBpcyBzcGVjaWZpZWQgd2hpY2ggaXMgc28gbGFyZ2UgYXMgdG8gb3ZlcmZsb3cK LWNvbnZlcnNpb24gdG8gYW4gaW50ZWdlciwgaXQgaXMgcGFyc2VkIGFzIGEgc3RyaW5nIGlu c3RlYWQuCi1JZgorZGF0YSB0eXBlICh0aGUgbGFyZ2VzdCBzaWduZWQgaW50ZWdyYWwgdHlw ZSBhdmFpbGFibGUpLgorQWxsIGNvbnZlcnNpb25zIGFuZCBvcGVyYXRpb25zIGFyZSBjaGVj a2VkIGZvciBvdmVyZmxvdy4KK092ZXJmbG93IHJlc3VsdHMgaW4gcHJvZ3JhbSB0ZXJtaW5h dGlvbiB3aXRoIGFuIGVycm9yIG1lc3NhZ2Ugb24gc3Rkb3V0CithbmQgd2l0aCBhbiBlcnJv ciBzdGF0dXMuCisuUHAKK1RoZQogLkZsIGUKLWlzIG5vdCBzcGVjaWZpZWQsIGFyaXRobWV0 aWMgb3BlcmF0aW9ucyBhbmQgcGFyc2luZyBvZiBpbnRlZ2VyCi1hcmd1bWVudHMgd2lsbCBv dmVyZmxvdyBzaWxlbnRseSBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIHRoZSBDCi1zdGFu ZGFyZCwgdXNpbmcgdGhlCi0uVnQgbG9uZwotZGF0YSB0eXBlLgorb3B0aW9uIGlzIGFjY2Vw dGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBidXQgaGFzIG5vIGVmZmVjdC4KIC5Q cAogT3BlcmF0b3JzIGFyZSBsaXN0ZWQgYmVsb3cgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyBw cmVjZWRlbmNlOyBhbGwKIGFyZSBsZWZ0LWFzc29jaWF0aXZlLgpAQCAtODIsNyArNzcsOSBA QAogLkFyIGV4cHIxCiBpZiBpdCBpcyBuZWl0aGVyIGFuIGVtcHR5IHN0cmluZyBub3IgemVy bzsKIG90aGVyd2lzZSwgcmV0dXJucyB0aGUgZXZhbHVhdGlvbiBvZgotLkFyIGV4cHIyIC4K Ky5BciBleHByMgoraWYgaXQgaXMgbm90IGFuIGVtcHR5IHN0cmluZzsKK290aGVyd2lzZSwg cmV0dXJucyB6ZXJvLgogLkl0IEFyIGV4cHIxIExpICYgQXIgZXhwcjIKIFJldHVybiB0aGUg ZXZhbHVhdGlvbiBvZgogLkFyIGV4cHIxCkBAIC0yNzAsOCArMjY3LDM1IEBACiBUaGUKIC5O bQogdXRpbGl0eSBjb25mb3JtcyB0bwotLlN0IC1wMTAwMy4xLTIwMDEgLAorLlN0IC1wMTAw My4xICwKIHByb3ZpZGVkIHRoYXQgY29tcGF0aWJpbGl0eSBtb2RlIGlzIG5vdCBlbmFibGVk LgorLlBwCitDb21wYXRpYmlsaXR5IG1vZGUgcGVyZm9ybXMgbGVzcyBzdHJpY3QgY2hlY2tz IG9mIG51bWVyaWMgYXJndW1lbnRzOgorLkJsIC1idWxsZXQKKy5JdAorQW4gZW1wdHkgb3Bl cmFuZCBzdHJpbmcgaXMgaW50ZXJwcmV0ZWQgYXMgMC4KKy5FbAorLkJsIC1idWxsZXQKKy5J dAorTGVhZGluZyB3aGl0ZSBzcGFjZSBhbmQvb3IgYSBwbHVzIHNpZ24gYmVmb3JlIGFuIG90 aGVyd2lzZSB2YWxpZCBwb3NpdGl2ZQorbnVtYmVyaWMgb3BlcmFuZCBhcmUgYWxsb3dlZCBh bmQgd2lsbCBiZSBpZ25vcmVkLgorLkVsCisuUHAKK1RoZSBleHRlbmRlZCBhcml0aG1ldGlj IHJhbmdlIGFuZCBvdmVyZmxvdyBjaGVja3MgZG8gbm90IGNvbmZsaWN0IHdpdGgKK1BPU0lY J3MgcmVxdWlyZW1lbnQgdGhhdCBhcml0aG1ldGljIGJlIGRvbmUgdXNpbmcgc2lnbmVkIGxv bmdzLCBzaW5jZQordGhleSBvbmx5IG1ha2UgYSBkaWZmZXJlbmNlIHRvIHRoZSByZXN1bHQg aW4gY2FzZXMgd2hlcmUgdXNpbmcgc2lnbmVkCitsb25ncyB3b3VsZCBnaXZlIHVuZGVmaW5l ZCBiZWhhdmlvci4KKy5QcAorQWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZCwgdGhlIHVzZSBv ZiBzdHJpbmcgYXJndW1lbnRzCisuVmEgbGVuZ3RoICwKKy5WYSBzdWJzdHIgLAorLlZhIGlu ZGV4ICwKK29yCisuVmEgbWF0Y2gKK3Byb2R1Y2VzIHVuc3BlY2lmaWVkIHJlc3VsdHMuIElu IHRoaXMgdmVyc2lvbiBvZgorLk5tICwKK3RoZXNlIGFyZ3VtZW50cyBhcmUgdHJlYXRlZCBq dXN0IGFzIHRoZWlyIHJlc3BlY3RpdmUgc3RyaW5nIHZhbHVlcy4KKy5QcAogVGhlCiAuRmwg ZQogZmxhZyBpcyBhbiBleHRlbnNpb24uCg== --------------000109010508020704090904 Content-Type: text/plain; name="expr.y.diff1" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="expr.y.diff1" LS0tIGV4cHIueS5PUklHCTIwMTEtMDctMDEgMjA6MjI6MjkuMTE5NjA3MjY5ICswMjAwCisr KyBleHByLnkuTkVXMQkyMDExLTA3LTA0IDE3OjA0OjM2LjEyMDk2NzUyNyArMDIwMApAQCAt NDIsMTMgKzQyLDE1IEBACiAKIHN0cnVjdCB2YWwgKnJlc3VsdDsKIAordm9pZAkJYXNzZXJ0 X3RvX2ludGVnZXIoc3RydWN0IHZhbCAqKTsKIGludAkJY2hrX2RpdihpbnRtYXhfdCwgaW50 bWF4X3QpOwogaW50CQljaGtfbWludXMoaW50bWF4X3QsIGludG1heF90LCBpbnRtYXhfdCk7 CiBpbnQJCWNoa19wbHVzKGludG1heF90LCBpbnRtYXhfdCwgaW50bWF4X3QpOwogaW50CQlj aGtfdGltZXMoaW50bWF4X3QsIGludG1heF90LCBpbnRtYXhfdCk7CiB2b2lkCQlmcmVlX3Zh bHVlKHN0cnVjdCB2YWwgKik7Ci1pbnQJCWlzX3plcm9fb3JfbnVsbChzdHJ1Y3QgdmFsICop OworaW50CQlpc19pbnRlZ2VyKGNvbnN0IGNoYXIgKik7CiBpbnQJCWlzc3RyaW5nKHN0cnVj dCB2YWwgKik7CitpbnQJCWlzX3plcm9fb3JfbnVsbChzdHJ1Y3QgdmFsICopOwogc3RydWN0 IHZhbAkqbWFrZV9pbnRlZ2VyKGludG1heF90KTsKIHN0cnVjdCB2YWwJKm1ha2Vfc3RyKGNv bnN0IGNoYXIgKik7CiBzdHJ1Y3QgdmFsCSpvcF9hbmQoc3RydWN0IHZhbCAqLCBzdHJ1Y3Qg dmFsICopOwpAQCAtNjUsMTMgKzY3LDEzIEBACiBzdHJ1Y3QgdmFsCSpvcF9wbHVzKHN0cnVj dCB2YWwgKiwgc3RydWN0IHZhbCAqKTsKIHN0cnVjdCB2YWwJKm9wX3JlbShzdHJ1Y3QgdmFs ICosIHN0cnVjdCB2YWwgKik7CiBzdHJ1Y3QgdmFsCSpvcF90aW1lcyhzdHJ1Y3QgdmFsICos IHN0cnVjdCB2YWwgKik7Ci1pbnRtYXhfdAl0b19pbnRlZ2VyKHN0cnVjdCB2YWwgKik7Citp bnQJCXRvX2ludGVnZXIoc3RydWN0IHZhbCAqKTsKIHZvaWQJCXRvX3N0cmluZyhzdHJ1Y3Qg dmFsICopOwogaW50CQl5eWVycm9yKGNvbnN0IGNoYXIgKik7CiBpbnQJCXl5bGV4KHZvaWQp OwogaW50CQl5eXBhcnNlKHZvaWQpOwogCi1zdGF0aWMgaW50CWVmbGFnOworc3RhdGljIGlu dAlub25wb3NpeDsKIGNoYXIgKiphdjsKICV9CiAKQEAgLTEzNCwzNyArMTM2LDE2IEBACiBt YWtlX3N0cihjb25zdCBjaGFyICpzKQogewogCXN0cnVjdCB2YWwgKnZwOwotCWNoYXIgKmVw OwogCiAJdnAgPSAoc3RydWN0IHZhbCAqKSBtYWxsb2MgKHNpemVvZiAoKnZwKSk7CiAJaWYg KHZwID09IE5VTEwgfHwgKCh2cC0+dS5zID0gc3RyZHVwIChzKSkgPT0gTlVMTCkpIHsKIAkJ ZXJyeChFUlJfRVhJVCwgIm1hbGxvYygpIGZhaWxlZCIpOwogCX0KIAotCS8qCi0JICogUHJl dmlvdXNseSB3ZSB0cmllZCB0byBzY2FuIHRoZSBzdHJpbmcgdG8gc2VlIGlmIGl0IGBgbG9v a2VkIGxpa2UnJwotCSAqIGFuIGludGVnZXIgKGVycm9uZW91c2x5LCBhcyBpdCBoYXBwZW5l ZCkuICBMZXQgc3RydG9pbWF4KCkgZG8gdGhlCi0JICogZGlydHkgd29yay4gIFdlIGNvdWxk IGNhY2hlIHRoZSB2YWx1ZSwgZXhjZXB0IHRoYXQgd2UgYXJlIHVzaW5nCi0JICogYSB1bmlv biBhbmQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgc3RyaW5nIGZvcm0gdW50aWwg d2UKLQkgKiBhcmUgY2VydGFpbiB0aGF0IGl0IGlzIG5vdCBuZWVkZWQuCi0JICoKLQkgKiBJ RUVFIFN0ZC4xMDAzLjEtMjAwMSBzYXlzOgotCSAqIC9pbnRlZ2VyLyBBbiBhcmd1bWVudCBj b25zaXN0aW5nIG9ubHkgb2YgYW4gKG9wdGlvbmFsKSB1bmFyeSBtaW51cyAgCi0JICoJICAg ICBmb2xsb3dlZCBieSBkaWdpdHMuICAgICAgICAgIAotCSAqCi0JICogVGhpcyBtZWFucyB0 aGF0IGFyZ3VtZW50cyB3aGljaCBjb25zaXN0IG9mIGRpZ2l0cyBmb2xsb3dlZCBieQotCSAq IG5vbi1kaWdpdHMgTVVTVCBOT1QgYmUgY29uc2lkZXJlZCBpbnRlZ2Vycy4gIHN0cnRvaW1h eCgpIHdpbGwKLQkgKiBmaWd1cmUgdGhpcyBvdXQgZm9yIHVzLgotCSAqLwotCWlmIChlZmxh ZykKLQkJKHZvaWQpc3RydG9pbWF4KHMsICZlcCwgMTApOworCWlmIChpc19pbnRlZ2VyKHMp KQorCQl2cC0+dHlwZSA9IG51bWVyaWNfc3RyaW5nOwogCWVsc2UKLQkJKHZvaWQpc3RydG9s KHMsICZlcCwgMTApOwotCi0JaWYgKCplcCAhPSAnXDAnKQogCQl2cC0+dHlwZSA9IHN0cmlu ZzsKLQllbHNlCQotCQl2cC0+dHlwZSA9IG51bWVyaWNfc3RyaW5nOwogCiAJcmV0dXJuIHZw OwogfQpAQCAtMTc4LDMxICsxNTksMzMgQEAKIH0KIAogCi1pbnRtYXhfdAoraW50CiB0b19p bnRlZ2VyKHN0cnVjdCB2YWwgKnZwKQogewogCWludG1heF90IGk7CiAKLQlpZiAodnAtPnR5 cGUgPT0gaW50ZWdlcikKLQkJcmV0dXJuIDE7Ci0KLQlpZiAodnAtPnR5cGUgPT0gc3RyaW5n KQotCQlyZXR1cm4gMDsKLQotCS8qIHZwLT50eXBlID09IG51bWVyaWNfc3RyaW5nLCBtYWtl IGl0IG51bWVyaWMgKi8KLQllcnJubyA9IDA7Ci0JaWYgKGVmbGFnKSB7CisJLyogd2UgY2Fu IG9ubHkgY29udmVydCBudW1lcmljX3N0cmluZyB0byBpbnRlZ2VyLCBoZXJlICovCisJaWYg KHZwLT50eXBlID09IG51bWVyaWNfc3RyaW5nKSB7CisJCWVycm5vID0gMDsKIAkJaSAgPSBz dHJ0b2ltYXgodnAtPnUucywgKGNoYXIgKiopTlVMTCwgMTApOwotCQlpZiAoZXJybm8gPT0g RVJBTkdFKQotCQkJZXJyKEVSUl9FWElULCBOVUxMKTsKLQl9IGVsc2UgewotCQlpID0gc3Ry dG9sKHZwLT51LnMsIChjaGFyICoqKU5VTEwsIDEwKTsKKwkJLyoganVzdCBrZWVwIGFzIG51 bWVyaWNfc3RyaW5nLCBpZiB0aGUgY29udmVyc2lvbiBmYWlscyAqLworCQlpZiAoZXJybm8g IT0gRVJBTkdFKSB7CisJCQlmcmVlICh2cC0+dS5zKTsKKwkJCXZwLT51LmkgPSBpOworCQkJ dnAtPnR5cGUgPSBpbnRlZ2VyOworCQl9CiAJfQorCXJldHVybiAodnAtPnR5cGUgPT0gaW50 ZWdlcik7Cit9CiAKLQlmcmVlICh2cC0+dS5zKTsKLQl2cC0+dS5pID0gaTsKLQl2cC0+dHlw ZSA9IGludGVnZXI7Ci0JcmV0dXJuIDE7CisKK3ZvaWQKK2Fzc2VydF90b19pbnRlZ2VyKHN0 cnVjdCB2YWwgKnZwKQoreworCWlmICh2cC0+dHlwZSA9PSBzdHJpbmcpCisJCWVycngoRVJS X0VYSVQsICJub3QgYSBkZWNpbWFsIG51bWJlcjogJyVzJyIsIHZwLT51LnMpOworCWlmICgh dG9faW50ZWdlcih2cCkpCisJCWVycngoRVJSX0VYSVQsICJvcGVyYW5kIHRvbyBsYXJnZTog JyVzJyIsIHZwLT51LnMpOwogfQogCiB2b2lkCkBAIC0yMzAsNiArMjEzLDI1IEBACiAKIAog aW50Citpc19pbnRlZ2VyKGNvbnN0IGNoYXIgKnMpCit7CisJaWYgKG5vbnBvc2l4KSB7CisJ CWlmICgqcyA9PSAnXDAnKQorCQkJcmV0dXJuICgxKTsKKwkJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKnMpKQorCQkJcysrOworCX0KKwlpZiAoKnMgPT0gJy0nIHx8IChub25w b3NpeCAmJiAqcyA9PSAnKycpKQorCQlzKys7CisJaWYgKCpzID09ICdcMCcpCisJCXJldHVy biAoMCk7CisJd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKnMpKQorCQlzKys7CisJ cmV0dXJuICgqcyA9PSAnXDAnKTsKK30KKworCitpbnQKIGlzc3RyaW5nKHN0cnVjdCB2YWwg KnZwKQogewogCS8qIG9ubHkgVFJVRSBpZiB0aGlzIHN0cmluZyBpcyBub3QgYSB2YWxpZCBp bnRlZ2VyICovCkBAIC0yODIsMTIgKzI4NCwxMiBAQAogCWlmIChnZXRlbnYoIkVYUFJfQ09N UEFUIikgIT0gTlVMTAogCSAgICB8fCBjaGVja191dGlsaXR5X2NvbXBhdCgiZXhwciIpKSB7 CiAJCWF2ID0gYXJndiArIDE7Ci0JCWVmbGFnID0gMTsKKwkJbm9ucG9zaXggPSAxOwogCX0g ZWxzZSB7CiAJCXdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiZSIpKSAhPSAtMSkK IAkJCXN3aXRjaCAoYykgewogCQkJY2FzZSAnZSc6Ci0JCQkJZWZsYWcgPSAxOworCQkJCW5v bnBvc2l4ID0gMTsKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKQEAgLTMxOCwxNSArMzIw LDE3IEBACiBzdHJ1Y3QgdmFsICoKIG9wX29yKHN0cnVjdCB2YWwgKmEsIHN0cnVjdCB2YWwg KmIpCiB7Ci0JaWYgKGlzX3plcm9fb3JfbnVsbCAoYSkpIHsKLQkJZnJlZV92YWx1ZSAoYSk7 Ci0JCXJldHVybiAoYik7Ci0JfSBlbHNlIHsKLQkJZnJlZV92YWx1ZSAoYik7CisJaWYgKCFp c196ZXJvX29yX251bGwoYSkpIHsKKwkJZnJlZV92YWx1ZShiKTsKIAkJcmV0dXJuIChhKTsK IAl9CisJZnJlZV92YWx1ZShhKTsKKwlpZiAoIWlzX3plcm9fb3JfbnVsbChiKSkKKwkJcmV0 dXJuIChiKTsKKwlmcmVlX3ZhbHVlKGIpOworCXJldHVybiAobWFrZV9pbnRlZ2VyKChpbnRt YXhfdCkwKSk7CiB9Ci0JCQorCiBzdHJ1Y3QgdmFsICoKIG9wX2FuZChzdHJ1Y3QgdmFsICph LCBzdHJ1Y3QgdmFsICpiKQogewpAQCAtMzUwLDggKzM1NCw4IEBACiAJCXRvX3N0cmluZyAo Yik7CQogCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUucywg Yi0+dS5zKSA9PSAwKSk7CiAJfSBlbHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsKLQkJ KHZvaWQpdG9faW50ZWdlcihiKTsKKwkJYXNzZXJ0X3RvX2ludGVnZXIoYSk7CisJCWFzc2Vy dF90b19pbnRlZ2VyKGIpOwogCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKGEtPnUu aSA9PSBiLT51LmkpKTsKIAl9CiAKQEAgLTM3MCw4ICszNzQsOCBAQAogCQl0b19zdHJpbmcg KGIpOwogCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUucywg Yi0+dS5zKSA+IDApKTsKIAl9IGVsc2UgewotCQkodm9pZCl0b19pbnRlZ2VyKGEpOwotCQko dm9pZCl0b19pbnRlZ2VyKGIpOworCQlhc3NlcnRfdG9faW50ZWdlcihhKTsKKwkJYXNzZXJ0 X3RvX2ludGVnZXIoYik7CiAJCXIgPSBtYWtlX2ludGVnZXIgKChpbnRtYXhfdCkoYS0+dS5p ID4gYi0+dS5pKSk7CiAJfQogCkBAIC0zOTAsOCArMzk0LDggQEAKIAkJdG9fc3RyaW5nIChi KTsKIAkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90KShzdHJjb2xsIChhLT51LnMsIGIt PnUucykgPCAwKSk7CiAJfSBlbHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsKLQkJKHZv aWQpdG9faW50ZWdlcihiKTsKKwkJYXNzZXJ0X3RvX2ludGVnZXIoYSk7CisJCWFzc2VydF90 b19pbnRlZ2VyKGIpOwogCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKGEtPnUuaSA8 IGItPnUuaSkpOwogCX0KIApAQCAtNDEwLDggKzQxNCw4IEBACiAJCXRvX3N0cmluZyAoYik7 CiAJCXIgPSBtYWtlX2ludGVnZXIgKChpbnRtYXhfdCkoc3RyY29sbCAoYS0+dS5zLCBiLT51 LnMpID49IDApKTsKIAl9IGVsc2UgewotCQkodm9pZCl0b19pbnRlZ2VyKGEpOwotCQkodm9p ZCl0b19pbnRlZ2VyKGIpOworCQlhc3NlcnRfdG9faW50ZWdlcihhKTsKKwkJYXNzZXJ0X3Rv X2ludGVnZXIoYik7CiAJCXIgPSBtYWtlX2ludGVnZXIgKChpbnRtYXhfdCkoYS0+dS5pID49 IGItPnUuaSkpOwogCX0KIApAQCAtNDMwLDggKzQzNCw4IEBACiAJCXRvX3N0cmluZyAoYik7 CiAJCXIgPSBtYWtlX2ludGVnZXIgKChpbnRtYXhfdCkoc3RyY29sbCAoYS0+dS5zLCBiLT51 LnMpIDw9IDApKTsKIAl9IGVsc2UgewotCQkodm9pZCl0b19pbnRlZ2VyKGEpOwotCQkodm9p ZCl0b19pbnRlZ2VyKGIpOworCQlhc3NlcnRfdG9faW50ZWdlcihhKTsKKwkJYXNzZXJ0X3Rv X2ludGVnZXIoYik7CiAJCXIgPSBtYWtlX2ludGVnZXIgKChpbnRtYXhfdCkoYS0+dS5pIDw9 IGItPnUuaSkpOwogCX0KIApAQCAtNDUwLDggKzQ1NCw4IEBACiAJCXRvX3N0cmluZyAoYik7 CiAJCXIgPSBtYWtlX2ludGVnZXIgKChpbnRtYXhfdCkoc3RyY29sbCAoYS0+dS5zLCBiLT51 LnMpICE9IDApKTsKIAl9IGVsc2UgewotCQkodm9pZCl0b19pbnRlZ2VyKGEpOwotCQkodm9p ZCl0b19pbnRlZ2VyKGIpOworCQlhc3NlcnRfdG9faW50ZWdlcihhKTsKKwkJYXNzZXJ0X3Rv X2ludGVnZXIoYik7CiAJCXIgPSBtYWtlX2ludGVnZXIgKChpbnRtYXhfdCkoYS0+dS5pICE9 IGItPnUuaSkpOwogCX0KIApAQCAtNDc5LDE3ICs0ODMsMTMgQEAKIHsKIAlzdHJ1Y3QgdmFs ICpyOwogCi0JaWYgKCF0b19pbnRlZ2VyKGEpIHx8ICF0b19pbnRlZ2VyKGIpKSB7Ci0JCWVy cngoRVJSX0VYSVQsICJub24tbnVtZXJpYyBhcmd1bWVudCIpOwotCX0KKwlhc3NlcnRfdG9f aW50ZWdlcihhKTsKKwlhc3NlcnRfdG9faW50ZWdlcihiKTsKIAotCWlmIChlZmxhZykgewot CQlyID0gbWFrZV9pbnRlZ2VyKGEtPnUuaSArIGItPnUuaSk7Ci0JCWlmIChjaGtfcGx1cyhh LT51LmksIGItPnUuaSwgci0+dS5pKSkgewotCQkJZXJyeChFUlJfRVhJVCwgIm92ZXJmbG93 Iik7Ci0JCX0KLQl9IGVsc2UKLQkJciA9IG1ha2VfaW50ZWdlcigobG9uZylhLT51LmkgKyAo bG9uZyliLT51LmkpOworCXIgPSBtYWtlX2ludGVnZXIoYS0+dS5pICsgYi0+dS5pKTsKKwlp ZiAoY2hrX3BsdXMoYS0+dS5pLCBiLT51LmksIHItPnUuaSkpIHsKKwkJZXJyeChFUlJfRVhJ VCwgIm92ZXJmbG93Iik7CisJfQogCiAJZnJlZV92YWx1ZSAoYSk7CiAJZnJlZV92YWx1ZSAo Yik7CkBAIC01MTYsMTcgKzUxNiwxMyBAQAogewogCXN0cnVjdCB2YWwgKnI7CiAKLQlpZiAo IXRvX2ludGVnZXIoYSkgfHwgIXRvX2ludGVnZXIoYikpIHsKLQkJZXJyeChFUlJfRVhJVCwg Im5vbi1udW1lcmljIGFyZ3VtZW50Iik7Ci0JfQorCWFzc2VydF90b19pbnRlZ2VyKGEpOwor CWFzc2VydF90b19pbnRlZ2VyKGIpOwogCi0JaWYgKGVmbGFnKSB7Ci0JCXIgPSBtYWtlX2lu dGVnZXIoYS0+dS5pIC0gYi0+dS5pKTsKLQkJaWYgKGNoa19taW51cyhhLT51LmksIGItPnUu aSwgci0+dS5pKSkgewotCQkJZXJyeChFUlJfRVhJVCwgIm92ZXJmbG93Iik7Ci0JCX0KLQl9 IGVsc2UKLQkJciA9IG1ha2VfaW50ZWdlcigobG9uZylhLT51LmkgLSAobG9uZyliLT51Lmkp OworCXIgPSBtYWtlX2ludGVnZXIoYS0+dS5pIC0gYi0+dS5pKTsKKwlpZiAoY2hrX21pbnVz KGEtPnUuaSwgYi0+dS5pLCByLT51LmkpKSB7CisJCWVycngoRVJSX0VYSVQsICJvdmVyZmxv dyIpOworCX0KIAogCWZyZWVfdmFsdWUgKGEpOwogCWZyZWVfdmFsdWUgKGIpOwpAQCAtNTUw LDE3ICs1NDYsMTMgQEAKIHsKIAlzdHJ1Y3QgdmFsICpyOwogCi0JaWYgKCF0b19pbnRlZ2Vy KGEpIHx8ICF0b19pbnRlZ2VyKGIpKSB7Ci0JCWVycngoRVJSX0VYSVQsICJub24tbnVtZXJp YyBhcmd1bWVudCIpOwotCX0KKwlhc3NlcnRfdG9faW50ZWdlcihhKTsKKwlhc3NlcnRfdG9f aW50ZWdlcihiKTsKIAotCWlmIChlZmxhZykgewotCQlyID0gbWFrZV9pbnRlZ2VyKGEtPnUu aSAqIGItPnUuaSk7Ci0JCWlmIChjaGtfdGltZXMoYS0+dS5pLCBiLT51LmksIHItPnUuaSkp IHsKLQkJCWVycngoRVJSX0VYSVQsICJvdmVyZmxvdyIpOwotCQl9Ci0JfSBlbHNlCi0JCXIg PSBtYWtlX2ludGVnZXIoKGxvbmcpYS0+dS5pICogKGxvbmcpYi0+dS5pKTsKKwlyID0gbWFr ZV9pbnRlZ2VyKGEtPnUuaSAqIGItPnUuaSk7CisJaWYgKGNoa190aW1lcyhhLT51LmksIGIt PnUuaSwgci0+dS5pKSkgeworCQllcnJ4KEVSUl9FWElULCAib3ZlcmZsb3ciKTsKKwl9CiAK IAlmcmVlX3ZhbHVlIChhKTsKIAlmcmVlX3ZhbHVlIChiKTsKQEAgLTU4MywyMSArNTc1LDE2 IEBACiB7CiAJc3RydWN0IHZhbCAqcjsKIAotCWlmICghdG9faW50ZWdlcihhKSB8fCAhdG9f aW50ZWdlcihiKSkgewotCQllcnJ4KEVSUl9FWElULCAibm9uLW51bWVyaWMgYXJndW1lbnQi KTsKLQl9CisJYXNzZXJ0X3RvX2ludGVnZXIoYSk7CisJYXNzZXJ0X3RvX2ludGVnZXIoYik7 CiAKIAlpZiAoYi0+dS5pID09IDApIHsKIAkJZXJyeChFUlJfRVhJVCwgImRpdmlzaW9uIGJ5 IHplcm8iKTsKIAl9Ci0KLQlpZiAoZWZsYWcpIHsKLQkJciA9IG1ha2VfaW50ZWdlcihhLT51 LmkgLyBiLT51LmkpOwotCQlpZiAoY2hrX2RpdihhLT51LmksIGItPnUuaSkpIHsKLQkJCWVy cngoRVJSX0VYSVQsICJvdmVyZmxvdyIpOwotCQl9Ci0JfSBlbHNlCi0JCXIgPSBtYWtlX2lu dGVnZXIoKGxvbmcpYS0+dS5pIC8gKGxvbmcpYi0+dS5pKTsKKwlpZiAoY2hrX2RpdihhLT51 LmksIGItPnUuaSkpIHsKKwkJZXJyeChFUlJfRVhJVCwgIm92ZXJmbG93Iik7CisJfQorCXIg PSBtYWtlX2ludGVnZXIoYS0+dS5pIC8gYi0+dS5pKTsKIAogCWZyZWVfdmFsdWUgKGEpOwog CWZyZWVfdmFsdWUgKGIpOwpAQCAtNjA5LDE5ICs1OTYsMTIgQEAKIHsKIAlzdHJ1Y3QgdmFs ICpyOwogCi0JaWYgKCF0b19pbnRlZ2VyKGEpIHx8ICF0b19pbnRlZ2VyKGIpKSB7Ci0JCWVy cngoRVJSX0VYSVQsICJub24tbnVtZXJpYyBhcmd1bWVudCIpOwotCX0KLQorCWFzc2VydF90 b19pbnRlZ2VyKGEpOworCWFzc2VydF90b19pbnRlZ2VyKGIpOwogCWlmIChiLT51LmkgPT0g MCkgewogCQllcnJ4KEVSUl9FWElULCAiZGl2aXNpb24gYnkgemVybyIpOwogCX0KLQotCWlm IChlZmxhZykKLQkJciA9IG1ha2VfaW50ZWdlcihhLT51LmkgJSBiLT51LmkpOwotCSAgICAg ICAgLyogY2hrX3JlbSBuZWNlc3NhcnkgPz8/ICovCi0JZWxzZQotCQlyID0gbWFrZV9pbnRl Z2VyKChsb25nKWEtPnUuaSAlIChsb25nKWItPnUuaSk7CisJciA9IG1ha2VfaW50ZWdlcihh LT51LmkgJSBiLT51LmkpOwogCiAJZnJlZV92YWx1ZSAoYSk7CiAJZnJlZV92YWx1ZSAoYik7 Cg== --------------000109010508020704090904 Content-Type: text/plain; name="expr.y.diff2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="expr.y.diff2" LS0tIGV4cHIueS5PUklHCTIwMTEtMDctMDEgMjA6MjI6MjkuMTE5NjA3MjY5ICswMjAwCisr KyBleHByLnkuTkVXMgkyMDExLTA3LTA0IDE3OjA0OjU0Ljc0OTk2ODI1MCArMDIwMApAQCAt NDAsMTUgKzQwLDIwIEBACiAJfSB1OwogfSA7CiAKK2NoYXIJCSoqYXY7CitpbnQJCW5vbnBv c2l4Owogc3RydWN0IHZhbCAqcmVzdWx0OwogCi1pbnQJCWNoa19kaXYoaW50bWF4X3QsIGlu dG1heF90KTsKLWludAkJY2hrX21pbnVzKGludG1heF90LCBpbnRtYXhfdCwgaW50bWF4X3Qp OwotaW50CQljaGtfcGx1cyhpbnRtYXhfdCwgaW50bWF4X3QsIGludG1heF90KTsKLWludAkJ Y2hrX3RpbWVzKGludG1heF90LCBpbnRtYXhfdCwgaW50bWF4X3QpOwordm9pZAkJYXNzZXJ0 X3RvX2ludGVnZXIoc3RydWN0IHZhbCAqKTsKK3ZvaWQJCWFzc2VydF9kaXYoaW50bWF4X3Qs IGludG1heF90KTsKK3ZvaWQJCWFzc2VydF9taW51cyhpbnRtYXhfdCwgaW50bWF4X3QsIGlu dG1heF90KTsKK3ZvaWQJCWFzc2VydF9wbHVzKGludG1heF90LCBpbnRtYXhfdCwgaW50bWF4 X3QpOwordm9pZAkJYXNzZXJ0X3RpbWVzKGludG1heF90LCBpbnRtYXhfdCwgaW50bWF4X3Qp OworaW50CQljb21wYXJlX3ZhbHMoc3RydWN0IHZhbCAqLCBzdHJ1Y3QgdmFsICopOwogdm9p ZAkJZnJlZV92YWx1ZShzdHJ1Y3QgdmFsICopOwotaW50CQlpc196ZXJvX29yX251bGwoc3Ry dWN0IHZhbCAqKTsKK2ludAkJaXNfaW50ZWdlcihjb25zdCBjaGFyICopOwogaW50CQlpc3N0 cmluZyhzdHJ1Y3QgdmFsICopOworaW50CQlpc196ZXJvX29yX251bGwoc3RydWN0IHZhbCAq KTsKIHN0cnVjdCB2YWwJKm1ha2VfaW50ZWdlcihpbnRtYXhfdCk7CiBzdHJ1Y3QgdmFsCSpt YWtlX3N0cihjb25zdCBjaGFyICopOwogc3RydWN0IHZhbAkqb3BfYW5kKHN0cnVjdCB2YWwg Kiwgc3RydWN0IHZhbCAqKTsKQEAgLTY1LDE0ICs3MCwxMiBAQAogc3RydWN0IHZhbAkqb3Bf cGx1cyhzdHJ1Y3QgdmFsICosIHN0cnVjdCB2YWwgKik7CiBzdHJ1Y3QgdmFsCSpvcF9yZW0o c3RydWN0IHZhbCAqLCBzdHJ1Y3QgdmFsICopOwogc3RydWN0IHZhbAkqb3BfdGltZXMoc3Ry dWN0IHZhbCAqLCBzdHJ1Y3QgdmFsICopOwotaW50bWF4X3QJdG9faW50ZWdlcihzdHJ1Y3Qg dmFsICopOworaW50CQl0b19pbnRlZ2VyKHN0cnVjdCB2YWwgKik7CiB2b2lkCQl0b19zdHJp bmcoc3RydWN0IHZhbCAqKTsKIGludAkJeXllcnJvcihjb25zdCBjaGFyICopOwogaW50CQl5 eWxleCh2b2lkKTsKIGludAkJeXlwYXJzZSh2b2lkKTsKIAotc3RhdGljIGludAllZmxhZzsK LWNoYXIgKiphdjsKICV9CiAKICV1bmlvbgpAQCAtMTM0LDM3ICsxMzcsMTYgQEAKIG1ha2Vf c3RyKGNvbnN0IGNoYXIgKnMpCiB7CiAJc3RydWN0IHZhbCAqdnA7Ci0JY2hhciAqZXA7CiAK IAl2cCA9IChzdHJ1Y3QgdmFsICopIG1hbGxvYyAoc2l6ZW9mICgqdnApKTsKIAlpZiAodnAg PT0gTlVMTCB8fCAoKHZwLT51LnMgPSBzdHJkdXAgKHMpKSA9PSBOVUxMKSkgewogCQllcnJ4 KEVSUl9FWElULCAibWFsbG9jKCkgZmFpbGVkIik7CiAJfQogCi0JLyoKLQkgKiBQcmV2aW91 c2x5IHdlIHRyaWVkIHRvIHNjYW4gdGhlIHN0cmluZyB0byBzZWUgaWYgaXQgYGBsb29rZWQg bGlrZScnCi0JICogYW4gaW50ZWdlciAoZXJyb25lb3VzbHksIGFzIGl0IGhhcHBlbmVkKS4g IExldCBzdHJ0b2ltYXgoKSBkbyB0aGUKLQkgKiBkaXJ0eSB3b3JrLiAgV2UgY291bGQgY2Fj aGUgdGhlIHZhbHVlLCBleGNlcHQgdGhhdCB3ZSBhcmUgdXNpbmcKLQkgKiBhIHVuaW9uIGFu ZCBuZWVkIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBzdHJpbmcgZm9ybSB1bnRpbCB3ZQot CSAqIGFyZSBjZXJ0YWluIHRoYXQgaXQgaXMgbm90IG5lZWRlZC4KLQkgKgotCSAqIElFRUUg U3RkLjEwMDMuMS0yMDAxIHNheXM6Ci0JICogL2ludGVnZXIvIEFuIGFyZ3VtZW50IGNvbnNp c3Rpbmcgb25seSBvZiBhbiAob3B0aW9uYWwpIHVuYXJ5IG1pbnVzICAKLQkgKgkgICAgIGZv bGxvd2VkIGJ5IGRpZ2l0cy4gICAgICAgICAgCi0JICoKLQkgKiBUaGlzIG1lYW5zIHRoYXQg YXJndW1lbnRzIHdoaWNoIGNvbnNpc3Qgb2YgZGlnaXRzIGZvbGxvd2VkIGJ5Ci0JICogbm9u LWRpZ2l0cyBNVVNUIE5PVCBiZSBjb25zaWRlcmVkIGludGVnZXJzLiAgc3RydG9pbWF4KCkg d2lsbAotCSAqIGZpZ3VyZSB0aGlzIG91dCBmb3IgdXMuCi0JICovCi0JaWYgKGVmbGFnKQot CQkodm9pZClzdHJ0b2ltYXgocywgJmVwLCAxMCk7CisJaWYgKGlzX2ludGVnZXIocykpCisJ CXZwLT50eXBlID0gbnVtZXJpY19zdHJpbmc7CiAJZWxzZQotCQkodm9pZClzdHJ0b2wocywg JmVwLCAxMCk7Ci0KLQlpZiAoKmVwICE9ICdcMCcpCiAJCXZwLT50eXBlID0gc3RyaW5nOwot CWVsc2UJCi0JCXZwLT50eXBlID0gbnVtZXJpY19zdHJpbmc7CiAKIAlyZXR1cm4gdnA7CiB9 CkBAIC0xNzgsMzEgKzE2MCwzMyBAQAogfQogCiAKLWludG1heF90CitpbnQKIHRvX2ludGVn ZXIoc3RydWN0IHZhbCAqdnApCiB7CiAJaW50bWF4X3QgaTsKIAotCWlmICh2cC0+dHlwZSA9 PSBpbnRlZ2VyKQotCQlyZXR1cm4gMTsKLQotCWlmICh2cC0+dHlwZSA9PSBzdHJpbmcpCi0J CXJldHVybiAwOwotCi0JLyogdnAtPnR5cGUgPT0gbnVtZXJpY19zdHJpbmcsIG1ha2UgaXQg bnVtZXJpYyAqLwotCWVycm5vID0gMDsKLQlpZiAoZWZsYWcpIHsKKwkvKiB3ZSBjYW4gb25s eSBjb252ZXJ0IG51bWVyaWNfc3RyaW5nIHRvIGludGVnZXIsIGhlcmUgKi8KKwlpZiAodnAt PnR5cGUgPT0gbnVtZXJpY19zdHJpbmcpIHsKKwkJZXJybm8gPSAwOwogCQlpICA9IHN0cnRv aW1heCh2cC0+dS5zLCAoY2hhciAqKilOVUxMLCAxMCk7Ci0JCWlmIChlcnJubyA9PSBFUkFO R0UpCi0JCQllcnIoRVJSX0VYSVQsIE5VTEwpOwotCX0gZWxzZSB7Ci0JCWkgPSBzdHJ0b2wo dnAtPnUucywgKGNoYXIgKiopTlVMTCwgMTApOworCQkvKiBqdXN0IGtlZXAgYXMgbnVtZXJp Y19zdHJpbmcsIGlmIHRoZSBjb252ZXJzaW9uIGZhaWxzICovCisJCWlmIChlcnJubyAhPSBF UkFOR0UpIHsKKwkJCWZyZWUgKHZwLT51LnMpOworCQkJdnAtPnUuaSA9IGk7CisJCQl2cC0+ dHlwZSA9IGludGVnZXI7CisJCX0KIAl9CisJcmV0dXJuICh2cC0+dHlwZSA9PSBpbnRlZ2Vy KTsKK30KIAotCWZyZWUgKHZwLT51LnMpOwotCXZwLT51LmkgPSBpOwotCXZwLT50eXBlID0g aW50ZWdlcjsKLQlyZXR1cm4gMTsKKwordm9pZAorYXNzZXJ0X3RvX2ludGVnZXIoc3RydWN0 IHZhbCAqdnApCit7CisJaWYgKHZwLT50eXBlID09IHN0cmluZykKKwkJZXJyeChFUlJfRVhJ VCwgIm5vdCBhIGRlY2ltYWwgbnVtYmVyOiAnJXMnIiwgdnAtPnUucyk7CisJaWYgKCF0b19p bnRlZ2VyKHZwKSkKKwkJZXJyeChFUlJfRVhJVCwgIm9wZXJhbmQgdG9vIGxhcmdlOiAnJXMn IiwgdnAtPnUucyk7CiB9CiAKIHZvaWQKQEAgLTIzMCw2ICsyMTQsMjUgQEAKIAogCiBpbnQK K2lzX2ludGVnZXIoY29uc3QgY2hhciAqcykKK3sKKwlpZiAobm9ucG9zaXgpIHsKKwkJaWYg KCpzID09ICdcMCcpCisJCQlyZXR1cm4gKDEpOworCQl3aGlsZSAoaXNzcGFjZSgodW5zaWdu ZWQgY2hhcikqcykpCisJCQlzKys7CisJfQorCWlmICgqcyA9PSAnLScgfHwgKG5vbnBvc2l4 ICYmICpzID09ICcrJykpCisJCXMrKzsKKwlpZiAoKnMgPT0gJ1wwJykKKwkJcmV0dXJuICgw KTsKKwl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqcykpCisJCXMrKzsKKwlyZXR1 cm4gKCpzID09ICdcMCcpOworfQorCisKK2ludAogaXNzdHJpbmcoc3RydWN0IHZhbCAqdnAp CiB7CiAJLyogb25seSBUUlVFIGlmIHRoaXMgc3RyaW5nIGlzIG5vdCBhIHZhbGlkIGludGVn ZXIgKi8KQEAgLTI4MiwxMiArMjg1LDEyIEBACiAJaWYgKGdldGVudigiRVhQUl9DT01QQVQi KSAhPSBOVUxMCiAJICAgIHx8IGNoZWNrX3V0aWxpdHlfY29tcGF0KCJleHByIikpIHsKIAkJ YXYgPSBhcmd2ICsgMTsKLQkJZWZsYWcgPSAxOworCQlub25wb3NpeCA9IDE7CiAJfSBlbHNl IHsKIAkJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJlIikpICE9IC0xKQogCQkJ c3dpdGNoIChjKSB7CiAJCQljYXNlICdlJzoKLQkJCQllZmxhZyA9IDE7CisJCQkJbm9ucG9z aXggPSAxOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgpAQCAtMzE4LDE1ICszMjEsMTcg QEAKIHN0cnVjdCB2YWwgKgogb3Bfb3Ioc3RydWN0IHZhbCAqYSwgc3RydWN0IHZhbCAqYikK IHsKLQlpZiAoaXNfemVyb19vcl9udWxsIChhKSkgewotCQlmcmVlX3ZhbHVlIChhKTsKLQkJ cmV0dXJuIChiKTsKLQl9IGVsc2UgewotCQlmcmVlX3ZhbHVlIChiKTsKKwlpZiAoIWlzX3pl cm9fb3JfbnVsbChhKSkgeworCQlmcmVlX3ZhbHVlKGIpOwogCQlyZXR1cm4gKGEpOwogCX0K KwlmcmVlX3ZhbHVlKGEpOworCWlmICghaXNfemVyb19vcl9udWxsKGIpKQorCQlyZXR1cm4g KGIpOworCWZyZWVfdmFsdWUoYik7CisJcmV0dXJuIChtYWtlX2ludGVnZXIoKGludG1heF90 KTApKTsKIH0KLQkJCisKIHN0cnVjdCB2YWwgKgogb3BfYW5kKHN0cnVjdCB2YWwgKmEsIHN0 cnVjdCB2YWwgKmIpCiB7CkBAIC0zNDAsMTM4ICszNDUsNzcgQEAKIAl9CiB9CiAKLXN0cnVj dCB2YWwgKgotb3BfZXEoc3RydWN0IHZhbCAqYSwgc3RydWN0IHZhbCAqYikKK2ludAorY29t cGFyZV92YWxzKHN0cnVjdCB2YWwgKmEsIHN0cnVjdCB2YWwgKmIpCiB7Ci0Jc3RydWN0IHZh bCAqcjsKKwlpbnQgcjsKIAotCWlmIChpc3N0cmluZyAoYSkgfHwgaXNzdHJpbmcgKGIpKSB7 Ci0JCXRvX3N0cmluZyAoYSk7Ci0JCXRvX3N0cmluZyAoYik7CQotCQlyID0gbWFrZV9pbnRl Z2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUucywgYi0+dS5zKSA9PSAwKSk7Ci0JfSBl bHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsKLQkJKHZvaWQpdG9faW50ZWdlcihiKTsK LQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90KShhLT51LmkgPT0gYi0+dS5pKSk7CisJ aWYgKGlzX3N0cmluZyhhKSB8fCBpc19zdHJpbmcoYikpIHsKKwkJdG9fc3RyaW5nKGEpOwor CQl0b19zdHJpbmcoYik7CisJCXIgPSBzdHJjb2xsKGEtPnUucywgYi0+dS5zKTsKKwl9IGVs c2UgeworCQlhc3NlcnRfdG9faW50ZWdlcihhKTsKKwkJYXNzZXJ0X3RvX2ludGVnZXIoYik7 CisJCWlmIChhLT51LmkgPiBiLT51LmkpCisJCQlyID0gMTsKKwkJZWxzZSBpZiAoYS0+dS5p IDwgYi0+dS5pKQorCQkJciA9IC0xOworCQllbHNlCisJCQlyID0gMDsKIAl9CiAKLQlmcmVl X3ZhbHVlIChhKTsKLQlmcmVlX3ZhbHVlIChiKTsKLQlyZXR1cm4gcjsKKwlmcmVlX3ZhbHVl KGEpOworCWZyZWVfdmFsdWUoYik7CisJcmV0dXJuIChyKTsKIH0KIAogc3RydWN0IHZhbCAq Ci1vcF9ndChzdHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpiKQorb3BfZXEoc3RydWN0IHZh bCAqYSwgc3RydWN0IHZhbCAqYikKIHsKLQlzdHJ1Y3QgdmFsICpyOwotCi0JaWYgKGlzc3Ry aW5nIChhKSB8fCBpc3N0cmluZyAoYikpIHsKLQkJdG9fc3RyaW5nIChhKTsKLQkJdG9fc3Ry aW5nIChiKTsKLQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90KShzdHJjb2xsIChhLT51 LnMsIGItPnUucykgPiAwKSk7Ci0JfSBlbHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsK LQkJKHZvaWQpdG9faW50ZWdlcihiKTsKLQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90 KShhLT51LmkgPiBiLT51LmkpKTsKLQl9CisJcmV0dXJuIChtYWtlX2ludGVnZXIoKGludG1h eF90KShjb21wYXJlX3ZhbHMoYSwgYikgPT0gMCkpKTsKK30KIAotCWZyZWVfdmFsdWUgKGEp OwotCWZyZWVfdmFsdWUgKGIpOwotCXJldHVybiByOworc3RydWN0IHZhbCAqCitvcF9ndChz dHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpiKQoreworCXJldHVybiAobWFrZV9pbnRlZ2Vy KChpbnRtYXhfdCkoY29tcGFyZV92YWxzKGEsIGIpID4gMCkpKTsKIH0KIAogc3RydWN0IHZh bCAqCiBvcF9sdChzdHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpiKQogewotCXN0cnVjdCB2 YWwgKnI7Ci0KLQlpZiAoaXNzdHJpbmcgKGEpIHx8IGlzc3RyaW5nIChiKSkgewotCQl0b19z dHJpbmcgKGEpOwotCQl0b19zdHJpbmcgKGIpOwotCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50 bWF4X3QpKHN0cmNvbGwgKGEtPnUucywgYi0+dS5zKSA8IDApKTsKLQl9IGVsc2UgewotCQko dm9pZCl0b19pbnRlZ2VyKGEpOwotCQkodm9pZCl0b19pbnRlZ2VyKGIpOwotCQlyID0gbWFr ZV9pbnRlZ2VyICgoaW50bWF4X3QpKGEtPnUuaSA8IGItPnUuaSkpOwotCX0KLQotCWZyZWVf dmFsdWUgKGEpOwotCWZyZWVfdmFsdWUgKGIpOwotCXJldHVybiByOworCXJldHVybiAobWFr ZV9pbnRlZ2VyKChpbnRtYXhfdCkoY29tcGFyZV92YWxzKGEsIGIpIDwgMCkpKTsKIH0KIAog c3RydWN0IHZhbCAqCiBvcF9nZShzdHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpiKQogewot CXN0cnVjdCB2YWwgKnI7Ci0KLQlpZiAoaXNzdHJpbmcgKGEpIHx8IGlzc3RyaW5nIChiKSkg ewotCQl0b19zdHJpbmcgKGEpOwotCQl0b19zdHJpbmcgKGIpOwotCQlyID0gbWFrZV9pbnRl Z2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUucywgYi0+dS5zKSA+PSAwKSk7Ci0JfSBl bHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsKLQkJKHZvaWQpdG9faW50ZWdlcihiKTsK LQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90KShhLT51LmkgPj0gYi0+dS5pKSk7Ci0J fQotCi0JZnJlZV92YWx1ZSAoYSk7Ci0JZnJlZV92YWx1ZSAoYik7Ci0JcmV0dXJuIHI7CisJ cmV0dXJuIChtYWtlX2ludGVnZXIoKGludG1heF90KShjb21wYXJlX3ZhbHMoYSwgYikgPj0g MCkpKTsKIH0KIAogc3RydWN0IHZhbCAqCiBvcF9sZShzdHJ1Y3QgdmFsICphLCBzdHJ1Y3Qg dmFsICpiKQogewotCXN0cnVjdCB2YWwgKnI7Ci0KLQlpZiAoaXNzdHJpbmcgKGEpIHx8IGlz c3RyaW5nIChiKSkgewotCQl0b19zdHJpbmcgKGEpOwotCQl0b19zdHJpbmcgKGIpOwotCQly ID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUucywgYi0+dS5zKSA8 PSAwKSk7Ci0JfSBlbHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsKLQkJKHZvaWQpdG9f aW50ZWdlcihiKTsKLQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90KShhLT51LmkgPD0g Yi0+dS5pKSk7Ci0JfQotCi0JZnJlZV92YWx1ZSAoYSk7Ci0JZnJlZV92YWx1ZSAoYik7Ci0J cmV0dXJuIHI7CisJcmV0dXJuIChtYWtlX2ludGVnZXIoKGludG1heF90KShjb21wYXJlX3Zh bHMoYSwgYikgPD0gMCkpKTsKIH0KIAogc3RydWN0IHZhbCAqCiBvcF9uZShzdHJ1Y3QgdmFs ICphLCBzdHJ1Y3QgdmFsICpiKQogewotCXN0cnVjdCB2YWwgKnI7Ci0KLQlpZiAoaXNzdHJp bmcgKGEpIHx8IGlzc3RyaW5nIChiKSkgewotCQl0b19zdHJpbmcgKGEpOwotCQl0b19zdHJp bmcgKGIpOwotCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUu cywgYi0+dS5zKSAhPSAwKSk7Ci0JfSBlbHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsK LQkJKHZvaWQpdG9faW50ZWdlcihiKTsKLQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90 KShhLT51LmkgIT0gYi0+dS5pKSk7Ci0JfQotCi0JZnJlZV92YWx1ZSAoYSk7Ci0JZnJlZV92 YWx1ZSAoYik7Ci0JcmV0dXJuIHI7CisJcmV0dXJuIChtYWtlX2ludGVnZXIoKGludG1heF90 KShjb21wYXJlX3ZhbHMoYSwgYikgIT0gMCkpKTsKIH0KIAotaW50Ci1jaGtfcGx1cyhpbnRt YXhfdCBhLCBpbnRtYXhfdCBiLCBpbnRtYXhfdCByKQordm9pZAorYXNzZXJ0X3BsdXMoaW50 bWF4X3QgYSwgaW50bWF4X3QgYiwgaW50bWF4X3QgcikKIHsKLQotCS8qIHN1bSBvZiB0d28g cG9zaXRpdmUgbnVtYmVycyBtdXN0IGJlIHBvc2l0aXZlICovCi0JaWYgKGEgPiAwICYmIGIg PiAwICYmIHIgPD0gMCkKLQkJcmV0dXJuIDE7Ci0JLyogc3VtIG9mIHR3byBuZWdhdGl2ZSBu dW1iZXJzIG11c3QgYmUgbmVnYXRpdmUgKi8KLQlpZiAoYSA8IDAgJiYgYiA8IDAgJiYgciA+ PSAwKQotCQlyZXR1cm4gMTsKLQkvKiBhbGwgb3RoZXIgY2FzZXMgYXJlIE9LICovCi0JcmV0 dXJuIDA7CisJLyoKKwkgKiBzdW0gb2YgdHdvIHBvc2l0aXZlIG51bWJlcnMgbXVzdCBiZSBw b3NpdGl2ZSwKKwkgKiBzdW0gb2YgdHdvIG5lZ2F0aXZlIG51bWJlcnMgbXVzdCBiZSBuZWdh dGl2ZQorCSAqLworCWlmICgoYSA+IDAgJiYgYiA+IDAgJiYgciA8PSAwKSB8fAorCSAgICAo YSA8IDAgJiYgYiA8IDAgJiYgciA+PSAwKSkKKwkJZXJyeChFUlJfRVhJVCwgIm92ZXJmbG93 Iik7CiB9CiAKIHN0cnVjdCB2YWwgKgpAQCAtNDc5LDM2ICs0MjMsMjYgQEAKIHsKIAlzdHJ1 Y3QgdmFsICpyOwogCi0JaWYgKCF0b19pbnRlZ2VyKGEpIHx8ICF0b19pbnRlZ2VyKGIpKSB7 Ci0JCWVycngoRVJSX0VYSVQsICJub24tbnVtZXJpYyBhcmd1bWVudCIpOwotCX0KKwlhc3Nl cnRfdG9faW50ZWdlcihhKTsKKwlhc3NlcnRfdG9faW50ZWdlcihiKTsKIAotCWlmIChlZmxh ZykgewotCQlyID0gbWFrZV9pbnRlZ2VyKGEtPnUuaSArIGItPnUuaSk7Ci0JCWlmIChjaGtf cGx1cyhhLT51LmksIGItPnUuaSwgci0+dS5pKSkgewotCQkJZXJyeChFUlJfRVhJVCwgIm92 ZXJmbG93Iik7Ci0JCX0KLQl9IGVsc2UKLQkJciA9IG1ha2VfaW50ZWdlcigobG9uZylhLT51 LmkgKyAobG9uZyliLT51LmkpOworCXIgPSBtYWtlX2ludGVnZXIoYS0+dS5pICsgYi0+dS5p KTsKKwlhc3NlcnRfcGx1cyhhLT51LmksIGItPnUuaSwgci0+dS5pKTsKIAogCWZyZWVfdmFs dWUgKGEpOwogCWZyZWVfdmFsdWUgKGIpOwogCXJldHVybiByOwogfQogCi1pbnQKLWNoa19t aW51cyhpbnRtYXhfdCBhLCBpbnRtYXhfdCBiLCBpbnRtYXhfdCByKQordm9pZAorYXNzZXJ0 X21pbnVzKGludG1heF90IGEsIGludG1heF90IGIsIGludG1heF90IHIpCiB7CiAKIAkvKiBz cGVjaWFsIGNhc2Ugc3VidHJhY3Rpb24gb2YgSU5UTUFYX01JTiAqLwotCWlmIChiID09IElO VE1BWF9NSU4pIHsKLQkJaWYgKGEgPj0gMCkKLQkJCXJldHVybiAxOwotCQllbHNlCi0JCQly ZXR1cm4gMDsKLQl9Ci0JLyogdGhpcyBpcyBhbGxvd2VkIGZvciBiICE9IElOVE1BWF9NSU4g Ki8KLQlyZXR1cm4gY2hrX3BsdXMgKGEsIC1iLCByKTsKKwlpZiAoYiA9PSBJTlRNQVhfTUlO ICYmIGEgPCAwKQorCQllcnJ4KEVSUl9FWElULCAib3ZlcmZsb3ciKTsKKwkvKiBjaGVjayBh ZGRpdGlvbiBvZiBuZWdhdGl2ZSBzdWJ0cmFoZW5kICovCisJYXNzZXJ0X3BsdXMoYSwgLWIs IHIpOwogfQogCiBzdHJ1Y3QgdmFsICoKQEAgLTUxNiwzMyArNDUwLDI2IEBACiB7CiAJc3Ry dWN0IHZhbCAqcjsKIAotCWlmICghdG9faW50ZWdlcihhKSB8fCAhdG9faW50ZWdlcihiKSkg ewotCQllcnJ4KEVSUl9FWElULCAibm9uLW51bWVyaWMgYXJndW1lbnQiKTsKLQl9CisJYXNz ZXJ0X3RvX2ludGVnZXIoYSk7CisJYXNzZXJ0X3RvX2ludGVnZXIoYik7CiAKLQlpZiAoZWZs YWcpIHsKLQkJciA9IG1ha2VfaW50ZWdlcihhLT51LmkgLSBiLT51LmkpOwotCQlpZiAoY2hr X21pbnVzKGEtPnUuaSwgYi0+dS5pLCByLT51LmkpKSB7Ci0JCQllcnJ4KEVSUl9FWElULCAi b3ZlcmZsb3ciKTsKLQkJfQotCX0gZWxzZQotCQlyID0gbWFrZV9pbnRlZ2VyKChsb25nKWEt PnUuaSAtIChsb25nKWItPnUuaSk7CisJciA9IG1ha2VfaW50ZWdlcihhLT51LmkgLSBiLT51 LmkpOworCWFzc2VydF9taW51cyhhLT51LmksIGItPnUuaSwgci0+dS5pKTsKIAogCWZyZWVf dmFsdWUgKGEpOwogCWZyZWVfdmFsdWUgKGIpOwogCXJldHVybiByOwogfQogCi1pbnQKLWNo a190aW1lcyhpbnRtYXhfdCBhLCBpbnRtYXhfdCBiLCBpbnRtYXhfdCByKQordm9pZAorYXNz ZXJ0X3RpbWVzKGludG1heF90IGEsIGludG1heF90IGIsIGludG1heF90IHIpCiB7Ci0JLyog c3BlY2lhbCBjYXNlOiBmaXJzdCBvcGVyYW5kIGlzIDAsIG5vIG92ZXJmbG93IHBvc3NpYmxl ICovCi0JaWYgKGEgPT0gMCkKLQkJcmV0dXJuIDA7Ci0JLyogdmVyaWZ5IHRoYXQgcmVzdWx0 IG9mIGRpdmlzaW9uIG1hdGNoZXMgc2Vjb25kIG9wZXJhbmQgKi8KLQlpZiAociAvIGEgIT0g YikKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7CisJLyoKKwkgKiBpZiBmaXJzdCBvcGVyYW5k IGlzIDAsIG5vIG92ZXJmbG93IGlzIHBvc3NpYmxlLAorCSAqIGVsc2UgcmVzdWx0IG9mIGRp dmlzaW9uIHRlc3QgbXVzdCBtYXRjaCBzZWNvbmQgb3BlcmFuZAorCSAqLworCWlmIChhICE9 IDAgJiYgciAvIGEgIT0gYikKKwkJZXJyeChFUlJfRVhJVCwgIm92ZXJmbG93Iik7CiB9CiAK IHN0cnVjdCB2YWwgKgpAQCAtNTUwLDMyICs0NzcsMjUgQEAKIHsKIAlzdHJ1Y3QgdmFsICpy OwogCi0JaWYgKCF0b19pbnRlZ2VyKGEpIHx8ICF0b19pbnRlZ2VyKGIpKSB7Ci0JCWVycngo RVJSX0VYSVQsICJub24tbnVtZXJpYyBhcmd1bWVudCIpOwotCX0KKwlhc3NlcnRfdG9faW50 ZWdlcihhKTsKKwlhc3NlcnRfdG9faW50ZWdlcihiKTsKIAotCWlmIChlZmxhZykgewotCQly ID0gbWFrZV9pbnRlZ2VyKGEtPnUuaSAqIGItPnUuaSk7Ci0JCWlmIChjaGtfdGltZXMoYS0+ dS5pLCBiLT51LmksIHItPnUuaSkpIHsKLQkJCWVycngoRVJSX0VYSVQsICJvdmVyZmxvdyIp OwotCQl9Ci0JfSBlbHNlCi0JCXIgPSBtYWtlX2ludGVnZXIoKGxvbmcpYS0+dS5pICogKGxv bmcpYi0+dS5pKTsKKwlyID0gbWFrZV9pbnRlZ2VyKGEtPnUuaSAqIGItPnUuaSk7CisJYXNz ZXJ0X3RpbWVzKGEtPnUuaSwgYi0+dS5pLCByLT51LmkpOwogCiAJZnJlZV92YWx1ZSAoYSk7 CiAJZnJlZV92YWx1ZSAoYik7CiAJcmV0dXJuIChyKTsKIH0KIAotaW50Ci1jaGtfZGl2KGlu dG1heF90IGEsIGludG1heF90IGIpCit2b2lkCithc3NlcnRfZGl2KGludG1heF90IGEsIGlu dG1heF90IGIpCiB7Ci0JLyogZGl2IGJ5IHplcm8gaGFzIGJlZW4gdGFrZW4gY2FyZSBvZiBi ZWZvcmUgKi8KKwlpZiAoYiA9PSAwKQorCQllcnJ4KEVSUl9FWElULCAiZGl2aXNpb24gYnkg emVybyIpOwogCS8qIG9ubHkgSU5UTUFYX01JTiAvIC0xIGNhdXNlcyBvdmVyZmxvdyAqLwog CWlmIChhID09IElOVE1BWF9NSU4gJiYgYiA9PSAtMSkKLQkJcmV0dXJuIDE7Ci0JLyogZXZl cnl0aGluZyBlbHNlIGlzIE9LICovCi0JcmV0dXJuIDA7CisJCWVycngoRVJSX0VYSVQsICJv dmVyZmxvdyIpOwogfQogCiBzdHJ1Y3QgdmFsICoKQEAgLTU4MywyMSArNTAzLDEyIEBACiB7 CiAJc3RydWN0IHZhbCAqcjsKIAotCWlmICghdG9faW50ZWdlcihhKSB8fCAhdG9faW50ZWdl cihiKSkgewotCQllcnJ4KEVSUl9FWElULCAibm9uLW51bWVyaWMgYXJndW1lbnQiKTsKLQl9 Ci0KLQlpZiAoYi0+dS5pID09IDApIHsKLQkJZXJyeChFUlJfRVhJVCwgImRpdmlzaW9uIGJ5 IHplcm8iKTsKLQl9CisJYXNzZXJ0X3RvX2ludGVnZXIoYSk7CisJYXNzZXJ0X3RvX2ludGVn ZXIoYik7CiAKLQlpZiAoZWZsYWcpIHsKLQkJciA9IG1ha2VfaW50ZWdlcihhLT51LmkgLyBi LT51LmkpOwotCQlpZiAoY2hrX2RpdihhLT51LmksIGItPnUuaSkpIHsKLQkJCWVycngoRVJS X0VYSVQsICJvdmVyZmxvdyIpOwotCQl9Ci0JfSBlbHNlCi0JCXIgPSBtYWtlX2ludGVnZXIo KGxvbmcpYS0+dS5pIC8gKGxvbmcpYi0+dS5pKTsKKwkvKiBhc3NlcnQgYmFzZWQgb24gb3Bl cmFuZHMgb25seSwgbm90IG9uIHJlc3VsdCAqLworCWFzc2VydF9kaXYoYS0+dS5pLCBiLT51 LmkpOworCXIgPSBtYWtlX2ludGVnZXIoYS0+dS5pIC8gYi0+dS5pKTsKIAogCWZyZWVfdmFs dWUgKGEpOwogCWZyZWVfdmFsdWUgKGIpOwpAQCAtNjA5LDE5ICs1MjAsMTEgQEAKIHsKIAlz dHJ1Y3QgdmFsICpyOwogCi0JaWYgKCF0b19pbnRlZ2VyKGEpIHx8ICF0b19pbnRlZ2VyKGIp KSB7Ci0JCWVycngoRVJSX0VYSVQsICJub24tbnVtZXJpYyBhcmd1bWVudCIpOwotCX0KLQot CWlmIChiLT51LmkgPT0gMCkgewotCQllcnJ4KEVSUl9FWElULCAiZGl2aXNpb24gYnkgemVy byIpOwotCX0KLQotCWlmIChlZmxhZykKLQkJciA9IG1ha2VfaW50ZWdlcihhLT51LmkgJSBi LT51LmkpOwotCSAgICAgICAgLyogY2hrX3JlbSBuZWNlc3NhcnkgPz8/ICovCi0JZWxzZQot CQlyID0gbWFrZV9pbnRlZ2VyKChsb25nKWEtPnUuaSAlIChsb25nKWItPnUuaSk7CisJYXNz ZXJ0X3RvX2ludGVnZXIoYSk7CisJYXNzZXJ0X3RvX2ludGVnZXIoYik7CisJLyogcGFzcyBh PTEgdG8gb25seSBjaGVjayBmb3IgZGl2IGJ5IHplcm8gKi8KKwlhc3NlcnRfZGl2KDEsIGIt PnUuaSk7CisJciA9IG1ha2VfaW50ZWdlcihhLT51LmkgJSBiLT51LmkpOwogCiAJZnJlZV92 YWx1ZSAoYSk7CiAJZnJlZV92YWx1ZSAoYik7Cg== --------------000109010508020704090904 Content-Type: text/plain; name="expr.y.diff3" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="expr.y.diff3" LS0tIGV4cHIueS5PUklHCTIwMTEtMDctMDEgMjA6MjI6MjkuMTE5NjA3MjY5ICswMjAwCisr KyBleHByLnkuRklOQUwJMjAxMS0wNy0wNCAxNzowNDowOC42Nzc5NjgwNjYgKzAyMDAKQEAg LTEsNiArMSw2IEBACiAlewogLyotCi0gKiBXcml0dGVuIGJ5IFBhY2UgV2lsbGlzc29uIChw YWNlQGJsaXR6LmNvbSkgCisgKiBXcml0dGVuIGJ5IFBhY2UgV2lsbGlzc29uIChwYWNlQGJs aXR6LmNvbSkKICAqIGFuZCBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uCiAgKgogICog TGFyZ2VseSByZXdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIChqdGNAd2ltc2V5LmNvbSkKQEAg LTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxyZWdleC5o PgogI2luY2x1ZGUgPHVuaXN0ZC5oPgotICAKKwogLyoKICAqIFBPU0lYIHNwZWNpZmllcyBh IHNwZWNpZmljIGVycm9yIGNvZGUgZm9yIHN5bnRheCBlcnJvcnMuICBXZSBleGl0CiAgKiB3 aXRoIHRoaXMgY29kZSBmb3IgYWxsIGVycm9ycy4KQEAgLTQwLDE1ICs0MCwyMCBAQAogCX0g dTsKIH0gOwogCi1zdHJ1Y3QgdmFsICpyZXN1bHQ7Ci0KLWludAkJY2hrX2RpdihpbnRtYXhf dCwgaW50bWF4X3QpOwotaW50CQljaGtfbWludXMoaW50bWF4X3QsIGludG1heF90LCBpbnRt YXhfdCk7Ci1pbnQJCWNoa19wbHVzKGludG1heF90LCBpbnRtYXhfdCwgaW50bWF4X3QpOwot aW50CQljaGtfdGltZXMoaW50bWF4X3QsIGludG1heF90LCBpbnRtYXhfdCk7CitjaGFyCQkq KmF2OworaW50CQlub25wb3NpeDsKK3N0cnVjdCB2YWwJKnJlc3VsdDsKKwordm9pZAkJYXNz ZXJ0X3RvX2ludGVnZXIoc3RydWN0IHZhbCAqKTsKK3ZvaWQJCWFzc2VydF9kaXYoaW50bWF4 X3QsIGludG1heF90KTsKK3ZvaWQJCWFzc2VydF9taW51cyhpbnRtYXhfdCwgaW50bWF4X3Qs IGludG1heF90KTsKK3ZvaWQJCWFzc2VydF9wbHVzKGludG1heF90LCBpbnRtYXhfdCwgaW50 bWF4X3QpOwordm9pZAkJYXNzZXJ0X3RpbWVzKGludG1heF90LCBpbnRtYXhfdCwgaW50bWF4 X3QpOworaW50CQljb21wYXJlX3ZhbHMoc3RydWN0IHZhbCAqLCBzdHJ1Y3QgdmFsICopOwog dm9pZAkJZnJlZV92YWx1ZShzdHJ1Y3QgdmFsICopOworaW50CQlpc19pbnRlZ2VyKGNvbnN0 IGNoYXIgKik7CitpbnQJCWlzX3N0cmluZyhzdHJ1Y3QgdmFsICopOwogaW50CQlpc196ZXJv X29yX251bGwoc3RydWN0IHZhbCAqKTsKLWludAkJaXNzdHJpbmcoc3RydWN0IHZhbCAqKTsK IHN0cnVjdCB2YWwJKm1ha2VfaW50ZWdlcihpbnRtYXhfdCk7CiBzdHJ1Y3QgdmFsCSptYWtl X3N0cihjb25zdCBjaGFyICopOwogc3RydWN0IHZhbAkqb3BfYW5kKHN0cnVjdCB2YWwgKiwg c3RydWN0IHZhbCAqKTsKQEAgLTY1LDE0ICs3MCwxMiBAQAogc3RydWN0IHZhbAkqb3BfcGx1 cyhzdHJ1Y3QgdmFsICosIHN0cnVjdCB2YWwgKik7CiBzdHJ1Y3QgdmFsCSpvcF9yZW0oc3Ry dWN0IHZhbCAqLCBzdHJ1Y3QgdmFsICopOwogc3RydWN0IHZhbAkqb3BfdGltZXMoc3RydWN0 IHZhbCAqLCBzdHJ1Y3QgdmFsICopOwotaW50bWF4X3QJdG9faW50ZWdlcihzdHJ1Y3QgdmFs ICopOworaW50CQl0b19pbnRlZ2VyKHN0cnVjdCB2YWwgKik7CiB2b2lkCQl0b19zdHJpbmco c3RydWN0IHZhbCAqKTsKIGludAkJeXllcnJvcihjb25zdCBjaGFyICopOwogaW50CQl5eWxl eCh2b2lkKTsKIGludAkJeXlwYXJzZSh2b2lkKTsKIAotc3RhdGljIGludAllZmxhZzsKLWNo YXIgKiphdjsKICV9CiAKICV1bmlvbgpAQCAtOTYsMjMgKzk5LDIyIEBACiAKIGV4cHI6CVRP S0VOCiAJfCAnKCcgZXhwciAnKScgeyAkJCA9ICQyOyB9Ci0JfCBleHByICd8JyBleHByIHsg JCQgPSBvcF9vciAoJDEsICQzKTsgfQotCXwgZXhwciAnJicgZXhwciB7ICQkID0gb3BfYW5k ICgkMSwgJDMpOyB9Ci0JfCBleHByICc9JyBleHByIHsgJCQgPSBvcF9lcSAoJDEsICQzKTsg fQotCXwgZXhwciAnPicgZXhwciB7ICQkID0gb3BfZ3QgKCQxLCAkMyk7IH0KLQl8IGV4cHIg JzwnIGV4cHIgeyAkJCA9IG9wX2x0ICgkMSwgJDMpOyB9Ci0JfCBleHByIEdFIGV4cHIgIHsg JCQgPSBvcF9nZSAoJDEsICQzKTsgfQotCXwgZXhwciBMRSBleHByICB7ICQkID0gb3BfbGUg KCQxLCAkMyk7IH0KLQl8IGV4cHIgTkUgZXhwciAgeyAkJCA9IG9wX25lICgkMSwgJDMpOyB9 Ci0JfCBleHByICcrJyBleHByIHsgJCQgPSBvcF9wbHVzICgkMSwgJDMpOyB9Ci0JfCBleHBy ICctJyBleHByIHsgJCQgPSBvcF9taW51cyAoJDEsICQzKTsgfQotCXwgZXhwciAnKicgZXhw ciB7ICQkID0gb3BfdGltZXMgKCQxLCAkMyk7IH0KLQl8IGV4cHIgJy8nIGV4cHIgeyAkJCA9 IG9wX2RpdiAoJDEsICQzKTsgfQotCXwgZXhwciAnJScgZXhwciB7ICQkID0gb3BfcmVtICgk MSwgJDMpOyB9Ci0JfCBleHByICc6JyBleHByIHsgJCQgPSBvcF9jb2xvbiAoJDEsICQzKTsg fQorCXwgZXhwciAnfCcgZXhwciB7ICQkID0gb3Bfb3IoJDEsICQzKTsgfQorCXwgZXhwciAn JicgZXhwciB7ICQkID0gb3BfYW5kKCQxLCAkMyk7IH0KKwl8IGV4cHIgJz0nIGV4cHIgeyAk JCA9IG9wX2VxKCQxLCAkMyk7IH0KKwl8IGV4cHIgJz4nIGV4cHIgeyAkJCA9IG9wX2d0KCQx LCAkMyk7IH0KKwl8IGV4cHIgJzwnIGV4cHIgeyAkJCA9IG9wX2x0KCQxLCAkMyk7IH0KKwl8 IGV4cHIgR0UgZXhwciAgeyAkJCA9IG9wX2dlKCQxLCAkMyk7IH0KKwl8IGV4cHIgTEUgZXhw ciAgeyAkJCA9IG9wX2xlKCQxLCAkMyk7IH0KKwl8IGV4cHIgTkUgZXhwciAgeyAkJCA9IG9w X25lKCQxLCAkMyk7IH0KKwl8IGV4cHIgJysnIGV4cHIgeyAkJCA9IG9wX3BsdXMoJDEsICQz KTsgfQorCXwgZXhwciAnLScgZXhwciB7ICQkID0gb3BfbWludXMoJDEsICQzKTsgfQorCXwg ZXhwciAnKicgZXhwciB7ICQkID0gb3BfdGltZXMoJDEsICQzKTsgfQorCXwgZXhwciAnLycg ZXhwciB7ICQkID0gb3BfZGl2KCQxLCAkMyk7IH0KKwl8IGV4cHIgJyUnIGV4cHIgeyAkJCA9 IG9wX3JlbSgkMSwgJDMpOyB9CisJfCBleHByICc6JyBleHByIHsgJCQgPSBvcF9jb2xvbigk MSwgJDMpOyB9CiAJOwogCi0KICUlCiAKIHN0cnVjdCB2YWwgKgpAQCAtMTIwLDg5ICsxMjIs NjUgQEAKIHsKIAlzdHJ1Y3QgdmFsICp2cDsKIAotCXZwID0gKHN0cnVjdCB2YWwgKikgbWFs bG9jIChzaXplb2YgKCp2cCkpOwotCWlmICh2cCA9PSBOVUxMKSB7CisJdnAgPSAoc3RydWN0 IHZhbCAqKW1hbGxvYyhzaXplb2YoKnZwKSk7CisJaWYgKHZwID09IE5VTEwpCiAJCWVycngo RVJSX0VYSVQsICJtYWxsb2MoKSBmYWlsZWQiKTsKLQl9CiAKIAl2cC0+dHlwZSA9IGludGVn ZXI7CiAJdnAtPnUuaSAgPSBpOwotCXJldHVybiB2cDsgCisJcmV0dXJuICh2cCk7CiB9CiAK IHN0cnVjdCB2YWwgKgogbWFrZV9zdHIoY29uc3QgY2hhciAqcykKIHsKIAlzdHJ1Y3QgdmFs ICp2cDsKLQljaGFyICplcDsKIAotCXZwID0gKHN0cnVjdCB2YWwgKikgbWFsbG9jIChzaXpl b2YgKCp2cCkpOwotCWlmICh2cCA9PSBOVUxMIHx8ICgodnAtPnUucyA9IHN0cmR1cCAocykp ID09IE5VTEwpKSB7CisJdnAgPSAoc3RydWN0IHZhbCAqKW1hbGxvYyhzaXplb2YoKnZwKSk7 CisJaWYgKHZwID09IE5VTEwgfHwgKCh2cC0+dS5zID0gc3RyZHVwKHMpKSA9PSBOVUxMKSkK IAkJZXJyeChFUlJfRVhJVCwgIm1hbGxvYygpIGZhaWxlZCIpOwotCX0KIAotCS8qCi0JICog UHJldmlvdXNseSB3ZSB0cmllZCB0byBzY2FuIHRoZSBzdHJpbmcgdG8gc2VlIGlmIGl0IGBg bG9va2VkIGxpa2UnJwotCSAqIGFuIGludGVnZXIgKGVycm9uZW91c2x5LCBhcyBpdCBoYXBw ZW5lZCkuICBMZXQgc3RydG9pbWF4KCkgZG8gdGhlCi0JICogZGlydHkgd29yay4gIFdlIGNv dWxkIGNhY2hlIHRoZSB2YWx1ZSwgZXhjZXB0IHRoYXQgd2UgYXJlIHVzaW5nCi0JICogYSB1 bmlvbiBhbmQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgc3RyaW5nIGZvcm0gdW50 aWwgd2UKLQkgKiBhcmUgY2VydGFpbiB0aGF0IGl0IGlzIG5vdCBuZWVkZWQuCi0JICoKLQkg KiBJRUVFIFN0ZC4xMDAzLjEtMjAwMSBzYXlzOgotCSAqIC9pbnRlZ2VyLyBBbiBhcmd1bWVu dCBjb25zaXN0aW5nIG9ubHkgb2YgYW4gKG9wdGlvbmFsKSB1bmFyeSBtaW51cyAgCi0JICoJ ICAgICBmb2xsb3dlZCBieSBkaWdpdHMuICAgICAgICAgIAotCSAqCi0JICogVGhpcyBtZWFu cyB0aGF0IGFyZ3VtZW50cyB3aGljaCBjb25zaXN0IG9mIGRpZ2l0cyBmb2xsb3dlZCBieQot CSAqIG5vbi1kaWdpdHMgTVVTVCBOT1QgYmUgY29uc2lkZXJlZCBpbnRlZ2Vycy4gIHN0cnRv aW1heCgpIHdpbGwKLQkgKiBmaWd1cmUgdGhpcyBvdXQgZm9yIHVzLgotCSAqLwotCWlmIChl ZmxhZykKLQkJKHZvaWQpc3RydG9pbWF4KHMsICZlcCwgMTApOworCWlmIChpc19pbnRlZ2Vy KHMpKQorCQl2cC0+dHlwZSA9IG51bWVyaWNfc3RyaW5nOwogCWVsc2UKLQkJKHZvaWQpc3Ry dG9sKHMsICZlcCwgMTApOwotCi0JaWYgKCplcCAhPSAnXDAnKQogCQl2cC0+dHlwZSA9IHN0 cmluZzsKLQllbHNlCQotCQl2cC0+dHlwZSA9IG51bWVyaWNfc3RyaW5nOwogCi0JcmV0dXJu IHZwOworCXJldHVybiAodnApOwogfQogCi0KIHZvaWQKIGZyZWVfdmFsdWUoc3RydWN0IHZh bCAqdnApCiB7CiAJaWYgKHZwLT50eXBlID09IHN0cmluZyB8fCB2cC0+dHlwZSA9PSBudW1l cmljX3N0cmluZykKLQkJZnJlZSAodnAtPnUucyk7CQorCQlmcmVlKHZwLT51LnMpOwogfQog Ci0KLWludG1heF90CitpbnQKIHRvX2ludGVnZXIoc3RydWN0IHZhbCAqdnApCiB7CiAJaW50 bWF4X3QgaTsKIAotCWlmICh2cC0+dHlwZSA9PSBpbnRlZ2VyKQotCQlyZXR1cm4gMTsKLQot CWlmICh2cC0+dHlwZSA9PSBzdHJpbmcpCi0JCXJldHVybiAwOwotCi0JLyogdnAtPnR5cGUg PT0gbnVtZXJpY19zdHJpbmcsIG1ha2UgaXQgbnVtZXJpYyAqLwotCWVycm5vID0gMDsKLQlp ZiAoZWZsYWcpIHsKKwkvKiB3ZSBjYW4gb25seSBjb252ZXJ0IG51bWVyaWNfc3RyaW5nIHRv IGludGVnZXIsIGhlcmUgKi8KKwlpZiAodnAtPnR5cGUgPT0gbnVtZXJpY19zdHJpbmcpIHsK KwkJZXJybm8gPSAwOwogCQlpICA9IHN0cnRvaW1heCh2cC0+dS5zLCAoY2hhciAqKilOVUxM LCAxMCk7Ci0JCWlmIChlcnJubyA9PSBFUkFOR0UpCi0JCQllcnIoRVJSX0VYSVQsIE5VTEwp OwotCX0gZWxzZSB7Ci0JCWkgPSBzdHJ0b2wodnAtPnUucywgKGNoYXIgKiopTlVMTCwgMTAp OworCQkvKiBqdXN0IGtlZXAgYXMgbnVtZXJpY19zdHJpbmcsIGlmIHRoZSBjb252ZXJzaW9u IGZhaWxzICovCisJCWlmIChlcnJubyAhPSBFUkFOR0UpIHsKKwkJCWZyZWUodnAtPnUucyk7 CisJCQl2cC0+dS5pID0gaTsKKwkJCXZwLT50eXBlID0gaW50ZWdlcjsKKwkJfQogCX0KKwly ZXR1cm4gKHZwLT50eXBlID09IGludGVnZXIpOworfQogCi0JZnJlZSAodnAtPnUucyk7Ci0J dnAtPnUuaSA9IGk7Ci0JdnAtPnR5cGUgPSBpbnRlZ2VyOwotCXJldHVybiAxOwordm9pZAor YXNzZXJ0X3RvX2ludGVnZXIoc3RydWN0IHZhbCAqdnApCit7CisJaWYgKHZwLT50eXBlID09 IHN0cmluZykKKwkJZXJyeChFUlJfRVhJVCwgIm5vdCBhIGRlY2ltYWwgbnVtYmVyOiAnJXMn IiwgdnAtPnUucyk7CisJaWYgKCF0b19pbnRlZ2VyKHZwKSkKKwkJZXJyeChFUlJfRVhJVCwg Im9wZXJhbmQgdG9vIGxhcmdlOiAnJXMnIiwgdnAtPnUucyk7CiB9CiAKIHZvaWQKQEAgLTIy OCwxNSArMjA2LDMxIEBACiAJdnAtPnUucyAgPSB0bXA7CiB9CiAKK2ludAoraXNfaW50ZWdl cihjb25zdCBjaGFyICpzKQoreworCWlmIChub25wb3NpeCkgeworCQlpZiAoKnMgPT0gJ1ww JykKKwkJCXJldHVybiAoMSk7CisJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpz KSkKKwkJCXMrKzsKKwl9CisJaWYgKCpzID09ICctJyB8fCAobm9ucG9zaXggJiYgKnMgPT0g JysnKSkKKwkJcysrOworCWlmICgqcyA9PSAnXDAnKQorCQlyZXR1cm4gKDApOworCXdoaWxl IChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpzKSkKKwkJcysrOworCXJldHVybiAoKnMgPT0g J1wwJyk7Cit9CiAKIGludAotaXNzdHJpbmcoc3RydWN0IHZhbCAqdnApCitpc19zdHJpbmco c3RydWN0IHZhbCAqdnApCiB7CiAJLyogb25seSBUUlVFIGlmIHRoaXMgc3RyaW5nIGlzIG5v dCBhIHZhbGlkIGludGVnZXIgKi8KIAlyZXR1cm4gKHZwLT50eXBlID09IHN0cmluZyk7CiB9 CiAKLQogaW50CiB5eWxleCh2b2lkKQogewpAQCAtMjQ3LDEwICsyNDEsMTAgQEAKIAogCXAg PSAqYXYrKzsKIAotCWlmIChzdHJsZW4gKHApID09IDEpIHsKLQkJaWYgKHN0cmNociAoInwm PTw+Ky0qLyU6KCkiLCAqcCkpCisJaWYgKHN0cmxlbihwKSA9PSAxKSB7CisJCWlmIChzdHJj aHIoInwmPTw+Ky0qLyU6KCkiLCAqcCkpCiAJCQlyZXR1cm4gKCpwKTsKLQl9IGVsc2UgaWYg KHN0cmxlbiAocCkgPT0gMiAmJiBwWzFdID09ICc9JykgeworCX0gZWxzZSBpZiAoc3RybGVu KHApID09IDIgJiYgcFsxXSA9PSAnPScpIHsKIAkJc3dpdGNoICgqcCkgewogCQljYXNlICc+ JzogcmV0dXJuIChHRSk7CiAJCWNhc2UgJzwnOiByZXR1cm4gKExFKTsKQEAgLTI1OCwxOSAr MjUyLDE3IEBACiAJCX0KIAl9CiAKLQl5eWx2YWwudmFsID0gbWFrZV9zdHIgKHApOworCXl5 bHZhbC52YWwgPSBtYWtlX3N0cihwKTsKIAlyZXR1cm4gKFRPS0VOKTsKIH0KIAogaW50CiBp c196ZXJvX29yX251bGwoc3RydWN0IHZhbCAqdnApCiB7Ci0JaWYgKHZwLT50eXBlID09IGlu dGVnZXIpIHsKKwlpZiAodnAtPnR5cGUgPT0gaW50ZWdlcikKIAkJcmV0dXJuICh2cC0+dS5p ID09IDApOwotCX0gZWxzZSB7Ci0JCXJldHVybiAoKnZwLT51LnMgPT0gMCB8fCAodG9faW50 ZWdlciAodnApICYmIHZwLT51LmkgPT0gMCkpOwotCX0KLQkvKiBOT1RSRUFDSEVEICovCisK KwlyZXR1cm4gKCp2cC0+dS5zID09IDAgfHwgKHRvX2ludGVnZXIodnApICYmIHZwLT51Lmkg PT0gMCkpOwogfQogCiBpbnQKQEAgLTI3OCwyMyArMjcwLDIyIEBACiB7CiAJaW50IGM7CiAK LQlzZXRsb2NhbGUgKExDX0FMTCwgIiIpOworCXNldGxvY2FsZShMQ19BTEwsICIiKTsKIAlp ZiAoZ2V0ZW52KCJFWFBSX0NPTVBBVCIpICE9IE5VTEwKIAkgICAgfHwgY2hlY2tfdXRpbGl0 eV9jb21wYXQoImV4cHIiKSkgewogCQlhdiA9IGFyZ3YgKyAxOwotCQllZmxhZyA9IDE7CisJ CW5vbnBvc2l4ID0gMTsKIAl9IGVsc2UgewotCQl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywg YXJndiwgImUiKSkgIT0gLTEpCisJCXdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAi ZSIpKSAhPSAtMSkgewogCQkJc3dpdGNoIChjKSB7CiAJCQljYXNlICdlJzoKLQkJCQllZmxh ZyA9IDE7CisJCQkJbm9ucG9zaXggPSAxOwogCQkJCWJyZWFrOwotCiAJCQlkZWZhdWx0Ogot CQkJCWZwcmludGYoc3RkZXJyLAorCQkJCWVycngoRVJSX0VYSVQsCiAJCQkJICAgICJ1c2Fn ZTogZXhwciBbLWVdIGV4cHJlc3Npb25cbiIpOwotCQkJCWV4aXQoRVJSX0VYSVQpOwogCQkJ fQorCQl9CiAJCWF2ID0gYXJndiArIG9wdGluZDsKIAl9CiAKQEAgLTMxNCwxNjQgKzMwNSwx MDQgQEAKIAllcnJ4KEVSUl9FWElULCAic3ludGF4IGVycm9yIik7CiB9CiAKLQogc3RydWN0 IHZhbCAqCiBvcF9vcihzdHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpiKQogewotCWlmIChp c196ZXJvX29yX251bGwgKGEpKSB7Ci0JCWZyZWVfdmFsdWUgKGEpOwotCQlyZXR1cm4gKGIp OwotCX0gZWxzZSB7Ci0JCWZyZWVfdmFsdWUgKGIpOworCWlmICghaXNfemVyb19vcl9udWxs KGEpKSB7CisJCWZyZWVfdmFsdWUoYik7CiAJCXJldHVybiAoYSk7CiAJfQorCWZyZWVfdmFs dWUoYSk7CisJaWYgKCFpc196ZXJvX29yX251bGwoYikpCisJCXJldHVybiAoYik7CisJZnJl ZV92YWx1ZShiKTsKKwlyZXR1cm4gKG1ha2VfaW50ZWdlcigoaW50bWF4X3QpMCkpOwogfQot CQkKKwogc3RydWN0IHZhbCAqCiBvcF9hbmQoc3RydWN0IHZhbCAqYSwgc3RydWN0IHZhbCAq YikKIHsKLQlpZiAoaXNfemVyb19vcl9udWxsIChhKSB8fCBpc196ZXJvX29yX251bGwgKGIp KSB7Ci0JCWZyZWVfdmFsdWUgKGEpOwotCQlmcmVlX3ZhbHVlIChiKTsKLQkJcmV0dXJuICht YWtlX2ludGVnZXIgKChpbnRtYXhfdCkwKSk7CisJaWYgKGlzX3plcm9fb3JfbnVsbChhKSB8 fCBpc196ZXJvX29yX251bGwoYikpIHsKKwkJZnJlZV92YWx1ZShhKTsKKwkJZnJlZV92YWx1 ZShiKTsKKwkJcmV0dXJuIChtYWtlX2ludGVnZXIoKGludG1heF90KTApKTsKIAl9IGVsc2Ug ewotCQlmcmVlX3ZhbHVlIChiKTsKKwkJZnJlZV92YWx1ZShiKTsKIAkJcmV0dXJuIChhKTsK IAl9CiB9CiAKLXN0cnVjdCB2YWwgKgotb3BfZXEoc3RydWN0IHZhbCAqYSwgc3RydWN0IHZh bCAqYikKK2ludAorY29tcGFyZV92YWxzKHN0cnVjdCB2YWwgKmEsIHN0cnVjdCB2YWwgKmIp CiB7Ci0Jc3RydWN0IHZhbCAqcjsKKwlpbnQgcjsKIAotCWlmIChpc3N0cmluZyAoYSkgfHwg aXNzdHJpbmcgKGIpKSB7Ci0JCXRvX3N0cmluZyAoYSk7Ci0JCXRvX3N0cmluZyAoYik7CQot CQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUucywgYi0+dS5z KSA9PSAwKSk7Ci0JfSBlbHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsKLQkJKHZvaWQp dG9faW50ZWdlcihiKTsKLQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90KShhLT51Lmkg PT0gYi0+dS5pKSk7CisJaWYgKGlzX3N0cmluZyhhKSB8fCBpc19zdHJpbmcoYikpIHsKKwkJ dG9fc3RyaW5nKGEpOworCQl0b19zdHJpbmcoYik7CisJCXIgPSBzdHJjb2xsKGEtPnUucywg Yi0+dS5zKTsKKwl9IGVsc2UgeworCQlhc3NlcnRfdG9faW50ZWdlcihhKTsKKwkJYXNzZXJ0 X3RvX2ludGVnZXIoYik7CisJCWlmIChhLT51LmkgPiBiLT51LmkpCisJCQlyID0gMTsKKwkJ ZWxzZSBpZiAoYS0+dS5pIDwgYi0+dS5pKQorCQkJciA9IC0xOworCQllbHNlCisJCQlyID0g MDsKIAl9CiAKLQlmcmVlX3ZhbHVlIChhKTsKLQlmcmVlX3ZhbHVlIChiKTsKLQlyZXR1cm4g cjsKKwlmcmVlX3ZhbHVlKGEpOworCWZyZWVfdmFsdWUoYik7CisJcmV0dXJuIChyKTsKIH0K IAogc3RydWN0IHZhbCAqCi1vcF9ndChzdHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpiKQor b3BfZXEoc3RydWN0IHZhbCAqYSwgc3RydWN0IHZhbCAqYikKIHsKLQlzdHJ1Y3QgdmFsICpy OwotCi0JaWYgKGlzc3RyaW5nIChhKSB8fCBpc3N0cmluZyAoYikpIHsKLQkJdG9fc3RyaW5n IChhKTsKLQkJdG9fc3RyaW5nIChiKTsKLQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90 KShzdHJjb2xsIChhLT51LnMsIGItPnUucykgPiAwKSk7Ci0JfSBlbHNlIHsKLQkJKHZvaWQp dG9faW50ZWdlcihhKTsKLQkJKHZvaWQpdG9faW50ZWdlcihiKTsKLQkJciA9IG1ha2VfaW50 ZWdlciAoKGludG1heF90KShhLT51LmkgPiBiLT51LmkpKTsKLQl9CisJcmV0dXJuIChtYWtl X2ludGVnZXIoKGludG1heF90KShjb21wYXJlX3ZhbHMoYSwgYikgPT0gMCkpKTsKK30KIAot CWZyZWVfdmFsdWUgKGEpOwotCWZyZWVfdmFsdWUgKGIpOwotCXJldHVybiByOworc3RydWN0 IHZhbCAqCitvcF9ndChzdHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpiKQoreworCXJldHVy biAobWFrZV9pbnRlZ2VyKChpbnRtYXhfdCkoY29tcGFyZV92YWxzKGEsIGIpID4gMCkpKTsK IH0KIAogc3RydWN0IHZhbCAqCiBvcF9sdChzdHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpi KQogewotCXN0cnVjdCB2YWwgKnI7Ci0KLQlpZiAoaXNzdHJpbmcgKGEpIHx8IGlzc3RyaW5n IChiKSkgewotCQl0b19zdHJpbmcgKGEpOwotCQl0b19zdHJpbmcgKGIpOwotCQlyID0gbWFr ZV9pbnRlZ2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUucywgYi0+dS5zKSA8IDApKTsK LQl9IGVsc2UgewotCQkodm9pZCl0b19pbnRlZ2VyKGEpOwotCQkodm9pZCl0b19pbnRlZ2Vy KGIpOwotCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKGEtPnUuaSA8IGItPnUuaSkp OwotCX0KLQotCWZyZWVfdmFsdWUgKGEpOwotCWZyZWVfdmFsdWUgKGIpOwotCXJldHVybiBy OworCXJldHVybiAobWFrZV9pbnRlZ2VyKChpbnRtYXhfdCkoY29tcGFyZV92YWxzKGEsIGIp IDwgMCkpKTsKIH0KIAogc3RydWN0IHZhbCAqCiBvcF9nZShzdHJ1Y3QgdmFsICphLCBzdHJ1 Y3QgdmFsICpiKQogewotCXN0cnVjdCB2YWwgKnI7Ci0KLQlpZiAoaXNzdHJpbmcgKGEpIHx8 IGlzc3RyaW5nIChiKSkgewotCQl0b19zdHJpbmcgKGEpOwotCQl0b19zdHJpbmcgKGIpOwot CQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUucywgYi0+dS5z KSA+PSAwKSk7Ci0JfSBlbHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsKLQkJKHZvaWQp dG9faW50ZWdlcihiKTsKLQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90KShhLT51Lmkg Pj0gYi0+dS5pKSk7Ci0JfQotCi0JZnJlZV92YWx1ZSAoYSk7Ci0JZnJlZV92YWx1ZSAoYik7 Ci0JcmV0dXJuIHI7CisJcmV0dXJuIChtYWtlX2ludGVnZXIoKGludG1heF90KShjb21wYXJl X3ZhbHMoYSwgYikgPj0gMCkpKTsKIH0KIAogc3RydWN0IHZhbCAqCiBvcF9sZShzdHJ1Y3Qg dmFsICphLCBzdHJ1Y3QgdmFsICpiKQogewotCXN0cnVjdCB2YWwgKnI7Ci0KLQlpZiAoaXNz dHJpbmcgKGEpIHx8IGlzc3RyaW5nIChiKSkgewotCQl0b19zdHJpbmcgKGEpOwotCQl0b19z dHJpbmcgKGIpOwotCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEt PnUucywgYi0+dS5zKSA8PSAwKSk7Ci0JfSBlbHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihh KTsKLQkJKHZvaWQpdG9faW50ZWdlcihiKTsKLQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1h eF90KShhLT51LmkgPD0gYi0+dS5pKSk7Ci0JfQotCi0JZnJlZV92YWx1ZSAoYSk7Ci0JZnJl ZV92YWx1ZSAoYik7Ci0JcmV0dXJuIHI7CisJcmV0dXJuIChtYWtlX2ludGVnZXIoKGludG1h eF90KShjb21wYXJlX3ZhbHMoYSwgYikgPD0gMCkpKTsKIH0KIAogc3RydWN0IHZhbCAqCiBv cF9uZShzdHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpiKQogewotCXN0cnVjdCB2YWwgKnI7 Ci0KLQlpZiAoaXNzdHJpbmcgKGEpIHx8IGlzc3RyaW5nIChiKSkgewotCQl0b19zdHJpbmcg KGEpOwotCQl0b19zdHJpbmcgKGIpOwotCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3Qp KHN0cmNvbGwgKGEtPnUucywgYi0+dS5zKSAhPSAwKSk7Ci0JfSBlbHNlIHsKLQkJKHZvaWQp dG9faW50ZWdlcihhKTsKLQkJKHZvaWQpdG9faW50ZWdlcihiKTsKLQkJciA9IG1ha2VfaW50 ZWdlciAoKGludG1heF90KShhLT51LmkgIT0gYi0+dS5pKSk7Ci0JfQotCi0JZnJlZV92YWx1 ZSAoYSk7Ci0JZnJlZV92YWx1ZSAoYik7Ci0JcmV0dXJuIHI7CisJcmV0dXJuIChtYWtlX2lu dGVnZXIoKGludG1heF90KShjb21wYXJlX3ZhbHMoYSwgYikgIT0gMCkpKTsKIH0KIAotaW50 Ci1jaGtfcGx1cyhpbnRtYXhfdCBhLCBpbnRtYXhfdCBiLCBpbnRtYXhfdCByKQordm9pZAor YXNzZXJ0X3BsdXMoaW50bWF4X3QgYSwgaW50bWF4X3QgYiwgaW50bWF4X3QgcikKIHsKLQot CS8qIHN1bSBvZiB0d28gcG9zaXRpdmUgbnVtYmVycyBtdXN0IGJlIHBvc2l0aXZlICovCi0J aWYgKGEgPiAwICYmIGIgPiAwICYmIHIgPD0gMCkKLQkJcmV0dXJuIDE7Ci0JLyogc3VtIG9m IHR3byBuZWdhdGl2ZSBudW1iZXJzIG11c3QgYmUgbmVnYXRpdmUgKi8KLQlpZiAoYSA8IDAg JiYgYiA8IDAgJiYgciA+PSAwKQotCQlyZXR1cm4gMTsKLQkvKiBhbGwgb3RoZXIgY2FzZXMg YXJlIE9LICovCi0JcmV0dXJuIDA7CisJLyoKKwkgKiBzdW0gb2YgdHdvIHBvc2l0aXZlIG51 bWJlcnMgbXVzdCBiZSBwb3NpdGl2ZSwKKwkgKiBzdW0gb2YgdHdvIG5lZ2F0aXZlIG51bWJl cnMgbXVzdCBiZSBuZWdhdGl2ZQorCSAqLworCWlmICgoYSA+IDAgJiYgYiA+IDAgJiYgciA8 PSAwKSB8fAorCSAgICAoYSA8IDAgJiYgYiA8IDAgJiYgciA+PSAwKSkKKwkJZXJyeChFUlJf RVhJVCwgIm92ZXJmbG93Iik7CiB9CiAKIHN0cnVjdCB2YWwgKgpAQCAtNDc5LDM2ICs0MTAs MjQgQEAKIHsKIAlzdHJ1Y3QgdmFsICpyOwogCi0JaWYgKCF0b19pbnRlZ2VyKGEpIHx8ICF0 b19pbnRlZ2VyKGIpKSB7Ci0JCWVycngoRVJSX0VYSVQsICJub24tbnVtZXJpYyBhcmd1bWVu dCIpOwotCX0KLQotCWlmIChlZmxhZykgewotCQlyID0gbWFrZV9pbnRlZ2VyKGEtPnUuaSAr IGItPnUuaSk7Ci0JCWlmIChjaGtfcGx1cyhhLT51LmksIGItPnUuaSwgci0+dS5pKSkgewot CQkJZXJyeChFUlJfRVhJVCwgIm92ZXJmbG93Iik7Ci0JCX0KLQl9IGVsc2UKLQkJciA9IG1h a2VfaW50ZWdlcigobG9uZylhLT51LmkgKyAobG9uZyliLT51LmkpOworCWFzc2VydF90b19p bnRlZ2VyKGEpOworCWFzc2VydF90b19pbnRlZ2VyKGIpOworCXIgPSBtYWtlX2ludGVnZXIo YS0+dS5pICsgYi0+dS5pKTsKKwlhc3NlcnRfcGx1cyhhLT51LmksIGItPnUuaSwgci0+dS5p KTsKIAotCWZyZWVfdmFsdWUgKGEpOwotCWZyZWVfdmFsdWUgKGIpOwotCXJldHVybiByOwor CWZyZWVfdmFsdWUoYSk7CisJZnJlZV92YWx1ZShiKTsKKwlyZXR1cm4gKHIpOwogfQogCi1p bnQKLWNoa19taW51cyhpbnRtYXhfdCBhLCBpbnRtYXhfdCBiLCBpbnRtYXhfdCByKQordm9p ZAorYXNzZXJ0X21pbnVzKGludG1heF90IGEsIGludG1heF90IGIsIGludG1heF90IHIpCiB7 Ci0KIAkvKiBzcGVjaWFsIGNhc2Ugc3VidHJhY3Rpb24gb2YgSU5UTUFYX01JTiAqLwotCWlm IChiID09IElOVE1BWF9NSU4pIHsKLQkJaWYgKGEgPj0gMCkKLQkJCXJldHVybiAxOwotCQll bHNlCi0JCQlyZXR1cm4gMDsKLQl9Ci0JLyogdGhpcyBpcyBhbGxvd2VkIGZvciBiICE9IElO VE1BWF9NSU4gKi8KLQlyZXR1cm4gY2hrX3BsdXMgKGEsIC1iLCByKTsKKwlpZiAoYiA9PSBJ TlRNQVhfTUlOICYmIGEgPCAwKQorCQllcnJ4KEVSUl9FWElULCAib3ZlcmZsb3ciKTsKKwkv KiBjaGVjayBhZGRpdGlvbiBvZiBuZWdhdGl2ZSBzdWJ0cmFoZW5kICovCisJYXNzZXJ0X3Bs dXMoYSwgLWIsIHIpOwogfQogCiBzdHJ1Y3QgdmFsICoKQEAgLTUxNiwzMyArNDM1LDI1IEBA CiB7CiAJc3RydWN0IHZhbCAqcjsKIAotCWlmICghdG9faW50ZWdlcihhKSB8fCAhdG9faW50 ZWdlcihiKSkgewotCQllcnJ4KEVSUl9FWElULCAibm9uLW51bWVyaWMgYXJndW1lbnQiKTsK LQl9Ci0KLQlpZiAoZWZsYWcpIHsKLQkJciA9IG1ha2VfaW50ZWdlcihhLT51LmkgLSBiLT51 LmkpOwotCQlpZiAoY2hrX21pbnVzKGEtPnUuaSwgYi0+dS5pLCByLT51LmkpKSB7Ci0JCQll cnJ4KEVSUl9FWElULCAib3ZlcmZsb3ciKTsKLQkJfQotCX0gZWxzZQotCQlyID0gbWFrZV9p bnRlZ2VyKChsb25nKWEtPnUuaSAtIChsb25nKWItPnUuaSk7CisJYXNzZXJ0X3RvX2ludGVn ZXIoYSk7CisJYXNzZXJ0X3RvX2ludGVnZXIoYik7CisJciA9IG1ha2VfaW50ZWdlcihhLT51 LmkgLSBiLT51LmkpOworCWFzc2VydF9taW51cyhhLT51LmksIGItPnUuaSwgci0+dS5pKTsK IAotCWZyZWVfdmFsdWUgKGEpOwotCWZyZWVfdmFsdWUgKGIpOwotCXJldHVybiByOworCWZy ZWVfdmFsdWUoYSk7CisJZnJlZV92YWx1ZShiKTsKKwlyZXR1cm4gKHIpOwogfQogCi1pbnQK LWNoa190aW1lcyhpbnRtYXhfdCBhLCBpbnRtYXhfdCBiLCBpbnRtYXhfdCByKQordm9pZAor YXNzZXJ0X3RpbWVzKGludG1heF90IGEsIGludG1heF90IGIsIGludG1heF90IHIpCiB7Ci0J Lyogc3BlY2lhbCBjYXNlOiBmaXJzdCBvcGVyYW5kIGlzIDAsIG5vIG92ZXJmbG93IHBvc3Np YmxlICovCi0JaWYgKGEgPT0gMCkKLQkJcmV0dXJuIDA7Ci0JLyogdmVyaWZ5IHRoYXQgcmVz dWx0IG9mIGRpdmlzaW9uIG1hdGNoZXMgc2Vjb25kIG9wZXJhbmQgKi8KLQlpZiAociAvIGEg IT0gYikKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7CisJLyoKKwkgKiBpZiBmaXJzdCBvcGVy YW5kIGlzIDAsIG5vIG92ZXJmbG93IGlzIHBvc3NpYmxlLAorCSAqIGVsc2UgcmVzdWx0IG9m IGRpdmlzaW9uIHRlc3QgbXVzdCBtYXRjaCBzZWNvbmQgb3BlcmFuZAorCSAqLworCWlmIChh ICE9IDAgJiYgciAvIGEgIT0gYikKKwkJZXJyeChFUlJfRVhJVCwgIm92ZXJmbG93Iik7CiB9 CiAKIHN0cnVjdCB2YWwgKgpAQCAtNTUwLDMyICs0NjEsMjQgQEAKIHsKIAlzdHJ1Y3QgdmFs ICpyOwogCi0JaWYgKCF0b19pbnRlZ2VyKGEpIHx8ICF0b19pbnRlZ2VyKGIpKSB7Ci0JCWVy cngoRVJSX0VYSVQsICJub24tbnVtZXJpYyBhcmd1bWVudCIpOwotCX0KLQotCWlmIChlZmxh ZykgewotCQlyID0gbWFrZV9pbnRlZ2VyKGEtPnUuaSAqIGItPnUuaSk7Ci0JCWlmIChjaGtf dGltZXMoYS0+dS5pLCBiLT51LmksIHItPnUuaSkpIHsKLQkJCWVycngoRVJSX0VYSVQsICJv dmVyZmxvdyIpOwotCQl9Ci0JfSBlbHNlCi0JCXIgPSBtYWtlX2ludGVnZXIoKGxvbmcpYS0+ dS5pICogKGxvbmcpYi0+dS5pKTsKKwlhc3NlcnRfdG9faW50ZWdlcihhKTsKKwlhc3NlcnRf dG9faW50ZWdlcihiKTsKKwlyID0gbWFrZV9pbnRlZ2VyKGEtPnUuaSAqIGItPnUuaSk7CisJ YXNzZXJ0X3RpbWVzKGEtPnUuaSwgYi0+dS5pLCByLT51LmkpOwogCi0JZnJlZV92YWx1ZSAo YSk7Ci0JZnJlZV92YWx1ZSAoYik7CisJZnJlZV92YWx1ZShhKTsKKwlmcmVlX3ZhbHVlKGIp OwogCXJldHVybiAocik7CiB9CiAKLWludAotY2hrX2RpdihpbnRtYXhfdCBhLCBpbnRtYXhf dCBiKQordm9pZAorYXNzZXJ0X2RpdihpbnRtYXhfdCBhLCBpbnRtYXhfdCBiKQogewotCS8q IGRpdiBieSB6ZXJvIGhhcyBiZWVuIHRha2VuIGNhcmUgb2YgYmVmb3JlICovCisJaWYgKGIg PT0gMCkKKwkJZXJyeChFUlJfRVhJVCwgImRpdmlzaW9uIGJ5IHplcm8iKTsKIAkvKiBvbmx5 IElOVE1BWF9NSU4gLyAtMSBjYXVzZXMgb3ZlcmZsb3cgKi8KIAlpZiAoYSA9PSBJTlRNQVhf TUlOICYmIGIgPT0gLTEpCi0JCXJldHVybiAxOwotCS8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyBP SyAqLwotCXJldHVybiAwOworCQllcnJ4KEVSUl9FWElULCAib3ZlcmZsb3ciKTsKIH0KIAog c3RydWN0IHZhbCAqCkBAIC01ODMsNTEgKzQ4NiwzMyBAQAogewogCXN0cnVjdCB2YWwgKnI7 CiAKLQlpZiAoIXRvX2ludGVnZXIoYSkgfHwgIXRvX2ludGVnZXIoYikpIHsKLQkJZXJyeChF UlJfRVhJVCwgIm5vbi1udW1lcmljIGFyZ3VtZW50Iik7Ci0JfQotCi0JaWYgKGItPnUuaSA9 PSAwKSB7Ci0JCWVycngoRVJSX0VYSVQsICJkaXZpc2lvbiBieSB6ZXJvIik7Ci0JfQotCi0J aWYgKGVmbGFnKSB7Ci0JCXIgPSBtYWtlX2ludGVnZXIoYS0+dS5pIC8gYi0+dS5pKTsKLQkJ aWYgKGNoa19kaXYoYS0+dS5pLCBiLT51LmkpKSB7Ci0JCQllcnJ4KEVSUl9FWElULCAib3Zl cmZsb3ciKTsKLQkJfQotCX0gZWxzZQotCQlyID0gbWFrZV9pbnRlZ2VyKChsb25nKWEtPnUu aSAvIChsb25nKWItPnUuaSk7CisJYXNzZXJ0X3RvX2ludGVnZXIoYSk7CisJYXNzZXJ0X3Rv X2ludGVnZXIoYik7CisJLyogYXNzZXJ0IGJhc2VkIG9uIG9wZXJhbmRzIG9ubHksIG5vdCBv biByZXN1bHQgKi8KKwlhc3NlcnRfZGl2KGEtPnUuaSwgYi0+dS5pKTsKKwlyID0gbWFrZV9p bnRlZ2VyKGEtPnUuaSAvIGItPnUuaSk7CiAKLQlmcmVlX3ZhbHVlIChhKTsKLQlmcmVlX3Zh bHVlIChiKTsKLQlyZXR1cm4gcjsKKwlmcmVlX3ZhbHVlKGEpOworCWZyZWVfdmFsdWUoYik7 CisJcmV0dXJuIChyKTsKIH0KLQkKKwogc3RydWN0IHZhbCAqCiBvcF9yZW0oc3RydWN0IHZh bCAqYSwgc3RydWN0IHZhbCAqYikKIHsKIAlzdHJ1Y3QgdmFsICpyOwogCi0JaWYgKCF0b19p bnRlZ2VyKGEpIHx8ICF0b19pbnRlZ2VyKGIpKSB7Ci0JCWVycngoRVJSX0VYSVQsICJub24t bnVtZXJpYyBhcmd1bWVudCIpOwotCX0KLQotCWlmIChiLT51LmkgPT0gMCkgewotCQllcnJ4 KEVSUl9FWElULCAiZGl2aXNpb24gYnkgemVybyIpOwotCX0KLQotCWlmIChlZmxhZykKLQkJ ciA9IG1ha2VfaW50ZWdlcihhLT51LmkgJSBiLT51LmkpOwotCSAgICAgICAgLyogY2hrX3Jl bSBuZWNlc3NhcnkgPz8/ICovCi0JZWxzZQotCQlyID0gbWFrZV9pbnRlZ2VyKChsb25nKWEt PnUuaSAlIChsb25nKWItPnUuaSk7CisJYXNzZXJ0X3RvX2ludGVnZXIoYSk7CisJYXNzZXJ0 X3RvX2ludGVnZXIoYik7CisJLyogcGFzcyBhPTEgdG8gb25seSBjaGVjayBmb3IgZGl2IGJ5 IHplcm8gKi8KKwlhc3NlcnRfZGl2KDEsIGItPnUuaSk7CisJciA9IG1ha2VfaW50ZWdlcihh LT51LmkgJSBiLT51LmkpOwogCi0JZnJlZV92YWx1ZSAoYSk7Ci0JZnJlZV92YWx1ZSAoYik7 Ci0JcmV0dXJuIHI7CisJZnJlZV92YWx1ZShhKTsKKwlmcmVlX3ZhbHVlKGIpOworCXJldHVy biAocik7CiB9Ci0JCisKIHN0cnVjdCB2YWwgKgogb3BfY29sb24oc3RydWN0IHZhbCAqYSwg c3RydWN0IHZhbCAqYikKIHsKQEAgLTY0MiwzMyArNTI3LDMwIEBACiAJdG9fc3RyaW5nKGIp OwogCiAJLyogY29tcGlsZSByZWd1bGFyIGV4cHJlc3Npb24gKi8KLQlpZiAoKGV2YWwgPSBy ZWdjb21wICgmcnAsIGItPnUucywgMCkpICE9IDApIHsKLQkJcmVnZXJyb3IgKGV2YWwsICZy cCwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7CisJaWYgKChldmFsID0gcmVnY29tcCgmcnAs IGItPnUucywgMCkpICE9IDApIHsKKwkJcmVnZXJyb3IoZXZhbCwgJnJwLCBlcnJidWYsIHNp emVvZihlcnJidWYpKTsKIAkJZXJyeChFUlJfRVhJVCwgIiVzIiwgZXJyYnVmKTsKIAl9CiAK IAkvKiBjb21wYXJlIHN0cmluZyBhZ2FpbnN0IHBhdHRlcm4gKi8KIAkvKiByZW1lbWJlciB0 aGF0IHBhdHRlcm5zIGFyZSBhbmNob3JlZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5l ICovCi0JaWYgKHJlZ2V4ZWMoJnJwLCBhLT51LnMsIChzaXplX3QpMiwgcm0sIDApID09IDAg JiYgcm1bMF0ucm1fc28gPT0gMCkgeworCWlmIChyZWdleGVjKCZycCwgYS0+dS5zLCAoc2l6 ZV90KTIsIHJtLCAwKSA9PSAwICYmIHJtWzBdLnJtX3NvID09IDApCiAJCWlmIChybVsxXS5y bV9zbyA+PSAwKSB7CiAJCQkqKGEtPnUucyArIHJtWzFdLnJtX2VvKSA9ICdcMCc7Ci0JCQl2 ID0gbWFrZV9zdHIgKGEtPnUucyArIHJtWzFdLnJtX3NvKTsKKwkJCXYgPSBtYWtlX3N0cihh LT51LnMgKyBybVsxXS5ybV9zbyk7CiAKLQkJfSBlbHNlIHsKLQkJCXYgPSBtYWtlX2ludGVn ZXIgKChpbnRtYXhfdCkocm1bMF0ucm1fZW8gLSBybVswXS5ybV9zbykpOwotCQl9Ci0JfSBl bHNlIHsKLQkJaWYgKHJwLnJlX25zdWIgPT0gMCkgewotCQkJdiA9IG1ha2VfaW50ZWdlciAo KGludG1heF90KTApOwotCQl9IGVsc2UgewotCQkJdiA9IG1ha2Vfc3RyICgiIik7Ci0JCX0K LQl9CisJCX0gZWxzZQorCQkJdiA9IG1ha2VfaW50ZWdlcigoaW50bWF4X3QpKHJtWzBdLnJt X2VvIC0gcm1bMF0ucm1fc28pKTsKKwllbHNlCisJCWlmIChycC5yZV9uc3ViID09IDApCisJ CQl2ID0gbWFrZV9pbnRlZ2VyKChpbnRtYXhfdCkwKTsKKwkJZWxzZQorCQkJdiA9IG1ha2Vf c3RyKCIiKTsKIAogCS8qIGZyZWUgYXJndW1lbnRzIGFuZCBwYXR0ZXJuIGJ1ZmZlciAqLwot CWZyZWVfdmFsdWUgKGEpOwotCWZyZWVfdmFsdWUgKGIpOwotCXJlZ2ZyZWUgKCZycCk7CisJ ZnJlZV92YWx1ZShhKTsKKwlmcmVlX3ZhbHVlKGIpOworCXJlZ2ZyZWUoJnJwKTsKIAotCXJl dHVybiB2OworCXJldHVybiAodik7CiB9Cg== --------------000109010508020704090904 Content-Type: text/plain; name="regress.sh" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="regress.sh" IyEvYmluL3NoCgojLQojIENvcHlyaWdodCAoYykgMjAxMSBTdGVmYW4gRXNzZXIgPHNlQGZy ZWVic2Qub3JnPgojIEFsbCByaWdodHMgcmVzZXJ2ZWQuIAojCiMgUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiMg bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCiMgYXJlIG1ldDoKIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAojICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIyAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAojICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKIyAgICBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgoj CiMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklC VVRPUlMgYGBBUyBJUycnIEFORAojIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQojIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFCiMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAojIERB TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTCiMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCiMgSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ Q1QKIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCiMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgojIFNVQ0ggREFN QUdFLgoKIwojIGV4cHIuc2ggLSBjaGVjayBpZiB0ZXN0KDEpIG9yIGJ1aWx0aW4gdGVzdCB3 b3JrcwojCiMgJEZyZWVCU0Q6JAoKIyBmb3JjZSBhIHNwZWNpZmllZCB0ZXN0IHByb2dyYW0s IGUuZy4gYGVudiB0ZXN0PS9iaW4vZXhwciBzaCByZWdyZXNzLnNoJwo6ICR7dGVzdD1leHBy fQoKdCAoKQp7CgkjICQxIC0+IGV4aXQgY29kZQoJIyAkMiAtPiByZXN1bHQgd3JpdHRlbiB0 byBzdGRvdXQKCSMgJDMgLT4gJHRlc3QgZXhwcmVzc2lvbgoKCWNvdW50PSQoKGNvdW50KzEp KQoJY29tcGF0PSR7RVhQUl9DT01QQVQ6KyAoQ09NUEFUKX0KCSMgY2hlY2sgZm9yIHN5bnRh eCBlcnJvcnMKCW91dHB1dD0iYGV2YWwgJHRlc3QgJDMgMj4vZGV2L251bGxgIgoJcmV0PSQ/ CglpZiBbICIkcmV0IiAtbmUgIiQxIiBdOyB0aGVuCgkJcHJpbnRmICJub3Qgb2sgJWQgJXMg JXMgIC0gKGdvdCAlcywgZXhwZWN0ZWQgJXMpJXNcbiIgXAoJCQkiJGNvdW50IiAiJHRlc3Qi ICIkMyIgIiRyZXQiICIkMSIgIiRjb21wYXQiCgllbGlmIFsgIiRvdXRwdXQiICE9ICIkMiIg XTsgdGhlbgoJCXByaW50ZiAibm90IG9rICVkICVzICVzICAtICh1bmV4cGVjdGVkIG91dHB1 dCwgZ290ICclcycsIGV4cGVjdGVkICclcycpJXNcbiIgXAoJCQkiJGNvdW50IiAiJHRlc3Qi ICIkMyIgIiRvdXRwdXQiICIkMiIgIiRjb21wYXQiCgllbGlmIFsgIiRyZXQiIC1nZSAyIF07 IHRoZW4KCQlwcmludGYgIm9rICVkICVzICVzICAtIGlzIGNvcnJlY3RseSBkZXRlY3RlZCBh cyBlcnJvciVzXG4iIFwKCQkJIiRjb3VudCIgIiR0ZXN0IiAiJDMiICIkY29tcGF0IgoJZWxz ZQoJCXByaW50ZiAib2sgJWQgJXMgJXMgIC0gaXMgY29ycmVjdCByZXN1bHQlc1xuIiBcCgkJ CSIkY291bnQiICIkdGVzdCIgIiQzID0gJyRvdXRwdXQnIiAiJGNvbXBhdCIKCWZpCn0KCiMg ZGVjaW1hbCBjb25zdGFudHMgKGFzc3VtaW5nIHR5cGUgb2YgImludG1heF90IiBpcyAic2ln bmVkIDY0IGJpdCBpbnRlZ2VyIikKTUFYSU5UX1BMVVMxPTkyMjMzNzIwMzY4NTQ3NzU4MDgK TUFYSU5UPTkyMjMzNzIwMzY4NTQ3NzU4MDcKTUFYSU5UX01JTlVTMT05MjIzMzcyMDM2ODU0 Nzc1ODA2Ck1BWElOVF9IQUxGPTQ2MTE2ODYwMTg0MjczODc5MDMKTUlOSU5UX0hBTEY9LTQ2 MTE2ODYwMTg0MjczODc5MDQKTUlOSU5UX1BMVVMyPS05MjIzMzcyMDM2ODU0Nzc1ODA2Ck1J TklOVF9QTFVTMT0tOTIyMzM3MjAzNjg1NDc3NTgwNwpNSU5JTlQ9LTkyMjMzNzIwMzY4NTQ3 NzU4MDgKTUlOSU5UX01JTlVTMT0tOTIyMzM3MjAzNjg1NDc3NTgwOQoKY291bnQ9MAplY2hv ICIxLi4xNTUiCgojIEVYUFJfQ09NUEFUIGlzIGVxdWl2YWxlbnQgdG8gIi1lIiBhbmQgIi0t IiBiZWluZyBwYXNzZWQgYXMgZmlyc3QgYXJndW1lbnRzLgojIElmIEVYUFJfQ09NUEFUIHdh cyBzcGVjaWZpZWQgaW4gdGhlIGVudmlyb25tZW50LCAiLWUiIHByb2Nlc3Npbmcgd291bGQK IyBicmVhayBpbiB0aGUgZm9sbG93aW5nIHRlc3RzLgp1bnNldCBFWFBSX0NPTVBBVAoKIyBC YXNpYyB0ZXN0cyBmb3Igc3RyaW5nIG9wZXJhbmRzCnQgMCAnICcJCQkJJyIgIicKdCAwIDAw MDEwMDAwMAkJCScwMDAxMDAwMDAnCnQgMCAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMAknMDAw MTAwMDAwMDAwMDAwMDAwMDAwMDAnCnQgMCB4eXp6eQkJCSdcKCB4eXp6eSBcKScKdCAyICcn CQkJCSd4eXp6eSArIDAnCnQgMiAnJwkJCQknLScJCSMgc3ludGF4IGVycm9yIChzdHJpbmcg PT0gb3ApCnQgMiAnJwkJCQknLS0nCQkjIG5vIGV4cHJlc3Npb24gYXJndW1lbnRzCnQgMiAn JwkJCQknLWUnCQkjIG5vIGV4cHJlc3Npb24gYXJndW1lbnRzCnQgMiAnJwkJCQknLWUgLS0n CQkjIG5vIGV4cHJlc3Npb24gYXJndW1lbnRzCnQgMCAnLS0nCQkJJy0tIC0tJwp0IDAgJy0t JwkJCSctZSAtLSAtLScKCiMgU2ltcGxlIGFyaXRobWV0aWMgb3BlcmF0aW9ucwp0IDAgMQkJ JzAgKyAxJwp0IDEgMAkJJzAgKyAwJwp0IDAgMgkJJzEgKyAxJwp0IDAgLTIJCSctLSAtMSAr IC0xJwp0IDEgMAkJJy0tIC0xICsgMScKdCAyICcnCQknLScJCSMgc3ludGF4IGVycm9yCnQg MiAnJwkJJy0xJwkJIyBzeW50YXggZXJyb3IKdCAyICcnCQknLTEgKyAxJwkjIHN5bnRheCBl cnJvcgp0IDEgMAkJJy0tIC0xICsgMScKdCAyICcnCQknIiAxIiArIDEnCSMgc3ludGF4IGVy cm9yCnQgMiAnJwkJJyIJMSIgKyAxJwkjIHN5bnRheCBlcnJvcgp0IDIgJycJCSciMSAiICsg MScJIyBzeW50YXggZXJyb3IKdCAyICcnCQknIjEJIiArIDEnCSMgc3ludGF4IGVycm9yCnQg MiAnJwkJJyIxIDEiICsgMScJIyBzeW50YXggZXJyb3IKdCAyICcnCQknIjEJMSIgKyAxJwkj IHN5bnRheCBlcnJvcgp0IDAgJzEgMScJJyIxIDEiJwkJIyBzeW50YXggZXJyb3IKdCAyICcn CQknLSA6IC0nCQkjICItIiBpcyBhbiBvcGVyYXRvciBhbmQgbm90IGEgdmFsaWQgInN0cmlu ZyIhCnQgMiAnJwkJJy0tIC0gOiAtJwkjICItIiBpcyBhbiBvcGVyYXRvciBhbmQgbm90IGEg dmFsaWQgInN0cmluZyIhCnQgMCAyCQknLS0gLS0gOiAtLScJIyBwZXJmZWN0bHkgbGVnYWws IHJldHVybnMgbGVuZ3RoIG9mICItLSIKCiMgU29tZSB0ZXN0cyBmb3IgbW9yZSBsZW5pZW50 IG51bWJlciBzeW50YXggaW4gY29tcGF0IG1vZGUgKC1lIG9wdGlvbikKdCAyICcnCQknLWUn CQkjIG5vIGV4cHJlc3Npb24gZ2l2ZW4KdCAwIDIJCSctZSAiIDEiICsgMScJIyBhbGxvdyBs ZWFkaW5nIHdoaXRlIHNwYWNlIHdpdGggLWUKdCAwIDIJCSctZSAiCTEiICsgMScgIyBhbGxv dyBsZWFkaW5nIHdoaXRlIHNwYWNlIHdpdGggLWUKdCAwIDEJCSctZSAiIiArIDEnCSMgZW1w dHkgc3RyaW5nIGlzIGludGVycHJldGVkIGFzIDAKdCAyICcnCQknLWUgIiAiICsgMScJIyB3 aGl0ZSBzcGFjZSB3aXRob3V0IGRpZ2l0cyBpcyBub3QgYSBudW1iZXIKCiMgVGhlIGZvbGxv d2luZyBhcmUgYWxsb3dlZCB0byBmYWlsIGJ5IFBPU0lYLjEsIGJ1dCB3ZSBkb24ndCB0cmVh dCB0aGVtIHNwZWNpYWwKdCAwIDEJJ3N1YnN0ciA9IHN1YnN0cicJIyB3ZSBkbyBub3Qgc3Bl Y2lhbCBjYXNlICJzdWJzdHIiCnQgMCAxCSdsZW5ndGggPSBsZW5ndGgnCSMgd2UgZG8gbm90 IHNwZWNpYWwgY2FzZSAibGVuZ3RoIgp0IDAgMQknbWF0Y2ggPSBtYXRjaCcJCSMgd2UgZG8g bm90IHNwZWNpYWwgY2FzZSAibWF0Y2giCnQgMCAxCSdpbmRleCA9IGluZGV4JwkJIyB3ZSBk byBub3Qgc3BlY2lhbCBjYXNlICJpbmRleCIKCiMgQ2hlY2sgbnVtZXJpYyByYW5nZSBhbmQg b3ZlcmZsb3cgZGV0ZWN0aW9uCnQgMCAkTUFYSU5UCQknJE1BWElOVCArIDAnCnQgMiAnJwkJ CSckTUFYSU5UICsgMScKdCAwICRNSU5JTlQJCSctLSAkTUlOSU5UX1BMVVMxIC0gMScKdCAw ICRNSU5JTlQJCSctLSAkTUlOSU5UIFwqIDEnCnQgMiAnJwkJCSctLSAkTUlOSU5UIFwqIC0x Jwp0IDAgJE1BWElOVAkJJy0tICRNSU5JTlRfUExVUzEgXCogLTEnCnQgMCAkTUFYSU5UX1BM VVMxCSckTUFYSU5UX1BMVVMxJwp0IDIgJycJCQknJE1BWElOVF9QTFVTMSArIDAnCnQgMCAx MDAwMDEJCScwMDAxMDAwMDAgKyAxJwp0IDAgJE1BWElOVAkJJy0tICRNSU5JTlRfSEFMRiBc KiAtMSAtIDEgLSAkTUlOSU5UX0hBTEYnCnQgMCAkTUlOSU5UCQknLS0gJE1JTklOVF9IQUxG ICsgJE1JTklOVF9IQUxGJwp0IDAgJE1JTklOVAkJJy0tICRNSU5JTlQgLyAxJwp0IDIgJycJ CQknLS0gJE1JTklOVCAvIC0xJwp0IDAgJE1JTklOVF9QTFVTMQknJE1BWElOVCAvIC0xJwp0 IDAgJE1BWElOVF9NSU5VUzEJJyRNQVhJTlRfSEFMRiBcKiAyJwp0IDIgJycJCQknXCggJE1B WElOVF9IQUxGICsgMSBcKSBcKiAyJwp0IDAgJE1JTklOVF9QTFVTMgknJE1BWElOVF9IQUxG IFwqIC0yJwp0IDAgJE1JTklOVAkJJ1woICRNQVhJTlRfSEFMRiArIDEgXCkgXCogLTInCnQg MiAnJwkJCSdcKCAkTUFYSU5UX0hBTEYgKyAyIFwpIFwqIC0yJwp0IDAgLTcJCQknLS0gJE1J TklOVF9QTFVTMSAlIDEwJwp0IDAgLTcJCQknLS0gJE1JTklOVF9QTFVTMSAlIC0xMCcKdCAw IDcJCQknJE1BWElOVCAlIDEwJwp0IDAgNwkJCSckTUFYSU5UICUgLTEwJwp0IDIgJycJCQkn JE1JTklOVCArICRNSU5JTlQnCgojIFNpbXBsZSBjb21wYXJpc29uIGV4cHJlc3Npb25zCnQg MSAwCQkJJzIgKyAwICI8IiAxJwp0IDAgMQkJCScwICI8IiAxICsgMicKdCAwIDMJCQknXCgg MCAiPCIgMSBcKSArIDInCgojIENvbXBhcmlzb24gb3BlcmF0b3JzIGFwcGxpZWQgdG8gYm91 bmRhcnkgdmFsdWVzCnQgMCAxCQkJJy0tICRNSU5JTlQgIjwiICRNQVhJTlQnCnQgMiAnJwkJ CSctLSAkTUlOSU5UICI8IiAkTUFYSU5UICsgMScKdCAwIDEJCQknLS0gJE1JTklOVCAiPD0i ICRNQVhJTlQnCnQgMiAnJwkJCSctLSAkTUlOSU5UICI8PSIgJE1BWElOVCArIDEnCnQgMSAw CQkJJy0tICRNSU5JTlQgIj4iICRNQVhJTlQnCnQgMiAnJwkJCSctLSAkTUlOSU5UICI+IiAk TUFYSU5UICsgMScKdCAxIDAJCQknLS0gJE1JTklOVCAiPj0iICRNQVhJTlQnCnQgMiAnJwkJ CSctLSAkTUlOSU5UICI+PSIgJE1BWElOVCArIDEnCnQgMSAwCQkJJy0tICRNSU5JTlQgIj0i ICRNQVhJTlQnCnQgMiAnJwkJCSctLSAkTUlOSU5UICI9IiAkTUFYSU5UICsgMScKdCAwIDEJ CQknLS0gJE1JTklOVCAiIT0iICRNQVhJTlQnCnQgMiAnJwkJCSctLSAkTUlOSU5UICIhPSIg JE1BWElOVCArIDEnCgojIFBhdHRlcm4gbWF0Y2ggb3BlcmF0b3IKdCAwIGFiYwkJCScxMjNh YmMxMjMgOiAiLipcKGFbXjAtOV0qXCkiJwp0IDAgMTI0CQkJJzEyM2FiYzEyMyA6ICIuKmFb XjAtOV0qXCguKlwpIiArIDEnCnQgMCAxCQkJJzEyM2FiYzEyMyA6ICIuKmFbXjAtOV0qXCgu KlwpIiA9IDEyMycKdCAwIDcJCQknMTIzYWJjMTIzIDogIi4qYVteMC05XSoiICsgMScKdCAx IDAJCQknMTIzQWJjMTIzIDogIi4qYVteMC05XSoiJwp0IDAgMQkJCScxMjNBYmMxMjMgOiAi LiphW14wLTldKiIgKyAxJwp0IDAgMQkJCScxMjNBYmMxMjMgOiAiLiphW14wLTldKiIgPSAw JwoKIyBMb2dpY2FsIG9wZXJhdG9ycwp0IDAgYQkJCSdhICImIiBiJwp0IDEgMAkJCSdhICIm IiAiIicKdCAxIDAJCQknIiIgIiYiIGInCnQgMSAwCQkJJyIiICImIiAiIicKdCAxIDAJCQkn YSAiJiIgMCcKdCAxIDAJCQknMCAiJiIgYicKdCAxIDAJCQknMCAiJiIgMCcKCgp0IDAgYQkJ CSdhICJ8IiBiJwp0IDAgYQkJCSdhICJ8IiAiIicKdCAwIGIJCQknIiIgInwiIGInCnQgMSAw CQkJJyIiICJ8IiAiIicKdCAwIGEJCQknYSAifCIgMCcKdCAwIGIJCQknMCAifCIgYicKdCAx IDAJCQknMCAifCIgMCcKdCAwIC0xCQkJJzAgInwiIC0xJwoKdCAxIDAJCQknIigiIDAgInwi IDEgIikiICI8IiAiKCIgMCAiJiIgMSAiKSInCnQgMCAxCQkJJyIoIiBhICJ8IiBiICIpIiAi PSIgIigiIGEgIiYiIGIgIikiJwoKIyBDb21wYXJpc29uIHJlc3VsdHMgZGVwZW5kIG9uIGFy Z3VtZW50cyBiZWluZyBhY2NlcHRlZCBhcyBkZWNpbWFsIG51bWJlcnMKdCAwIDEJCQknIiAy IiAiPCIgIjIiJwp0IDAgMQkJCSciMiIgIjwiICIxMSInCnQgMSAwCQkJJy0tICItMiIgIjwi ICItMTEiJwp0IDEgMAkJCSciIDIiICI8IiAiIDExIicKdCAxIDAJCQknIiAtMiIgIjwiICIg LTExIicKdCAxIDAJCQknIjIgIiAiPCIgIjExICInCnQgMSAwCQkJJy0tICItMiAiICI8IiAi LTExICInCnQgMSAwCQkJJyIgMiAiICI8IiAiIDExICInCnQgMSAwCQkJJyIgLTIgIiAiPCIg IiAtMTEgIicKdCAxIDAJCQknIisyIiAiPCIgIisxMSInCnQgMSAwCQkJJyIgKzIiICI8IiAi ICsxMSInCgojIE9wZXJhdG9yIHByZWNlZGVuY2U6ICB8ICAmICA9ICA+ICA+PSAgPCAgPD0g ICE9ICArICAtICAqICAvICAlICA6ICggKQp0IDAgJ3RydWUnCQkndHJ1ZSAifCIgMCAiJiIg MScKdCAwICd0cnVlJwkJJ3RydWUgInwiIDAgKyAxJwp0IDIgJycJCQknIigiIHRydWUgInwi IDAgIikiICsgMScKdCAwIDEJCQkndHJ1ZSAiPiIgMCArIDEnCnQgMCAyCQkJJyIoIiB0cnVl ICI+IiAwICIpIiArIDEnCnQgMSAwCQkJJzAgInwiIDEgPSAwICImIiAxJwp0IDEgMAkJCScy IC0gMSAiKiIgMicKdCAwIDQJCQknMiArIDEgIioiIDInCnQgMSAwCQkJJzIgLSA0ICIvIiAy Jwp0IDAgMQkJCSc0IC0gNSArIDInCnQgMCAxCQkJJzIgXCogNCAvIDcnCnQgMCAxCQkJJzIg XCogNCAlIDcnCnQgMCA4CQkJJ3RydWUgOiAuXCogXCogMicKdCAwIDIwCQkJJ1woIDIgXCog MiBcKSArIFwoIDIgXCogMiBcKSBcKiBcKCAyIFwqIDIgXCknCnQgMCAxMAkJCSc1IFwqIDcg LSA1IFwqIDUnCnQgMCA1MAkJCSc1IFwqIFwoIDcgLSA1IFwpIFwqIDUnCgojIFNvbWUgdGVz dHMgZm9yIGNvbXBhdCBtb2RlLCBleHBlY3RpbmcgaXQgb25seSBjaGFuZ2VzIHRoZQojIHN1 cHBvcnRlZCBzeW50YXggb2YgbnVtZXJpYyBhcmd1bWVudHMgYW5kIHRoZSBvcHRpb24gcHJv Y2Vzc2luZwpFWFBSX0NPTVBBVD0xOyBleHBvcnQgRVhQUl9DT01QQVQKCiMgQXJndW1lbnRz IHByb2Nlc3NpbmcKdCAwICctZScJCSctZScKdCAwICctLScJCSctLScKdCAyICcnCQkJJy1l IC0tJwp0IDIgJycJCQknLS0gLS0nCnQgMiAnJwkJCSctZSAtLSAtLScKdCAwIDEJCQknLWUg IT0gLS0nCnQgMSAwCQkJJy1lICE9IC1lJwp0IDAgLTEJCQknLTEnCgojIE1vcmUgbGVuaWVu dCBudW1iZXIgcGFyc2luZyBsZWFkcyB0byBtb3JlIGNvbXBhcmlzb25zIGJ5IG51bWVyaWMg dmFsdWUKdCAwIC0yCQkJJy0xICsgLTEnCnQgMSAwCQkJJy0xICsgMScKdCAwIDIJCQknIiAx IiArIDEnCnQgMCAyCQkJJysxICsgMScKdCAwIDIJCQknIiArMSIgKyAxJwp0IDIgJycJCQkn IiAtIiArIDEnCnQgMiAnJwkJCSciICsiICsgMScKdCAxIDAJCQknIiAyIiAiPCIgIjIiJwp0 IDAgMQkJCSciMiIgIjwiICIxMSInCnQgMSAwCQkJJyItMiIgIjwiICItMTEiJwp0IDAgMQkJ CSciIDIiICI8IiAiIDExIicKdCAxIDAJCQknIiAtMiIgIjwiICIgLTExIicKdCAxIDAJCQkn IjIgIiAiPCIgIjExICInCnQgMSAwCQkJJyItMiAiICI8IiAiLTExICInCnQgMSAwCQkJJyIg MiAiICI8IiAiIDExICInCnQgMSAwCQkJJyIgLTIgIiAiPCIgIiAtMTEgIicKdCAwIDEJCQkn IisyIiAiPCIgIisxMSInCnQgMCAxCQkJJyIgKzIiICI8IiAiICsxMSInCg== --------------000109010508020704090904-- From owner-freebsd-standards@FreeBSD.ORG Mon Jul 4 21:49:19 2011 Return-Path: Delivered-To: freebsd-standards@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1A64A106564A; Mon, 4 Jul 2011 21:49:19 +0000 (UTC) (envelope-from jilles@stack.nl) Received: from mx1.stack.nl (relay04.stack.nl [IPv6:2001:610:1108:5010::107]) by mx1.freebsd.org (Postfix) with ESMTP id A60AF8FC0C; Mon, 4 Jul 2011 21:49:18 +0000 (UTC) Received: from turtle.stack.nl (turtle.stack.nl [IPv6:2001:610:1108:5010::132]) by mx1.stack.nl (Postfix) with ESMTP id 8A5861DD646; Mon, 4 Jul 2011 23:49:17 +0200 (CEST) Received: by turtle.stack.nl (Postfix, from userid 1677) id 725F71742A; Mon, 4 Jul 2011 23:49:17 +0200 (CEST) Date: Mon, 4 Jul 2011 23:49:17 +0200 From: Jilles Tjoelker To: Stefan Esser Message-ID: <20110704214917.GA77218@stack.nl> References: <4E09AF8E.5010509@freebsd.org> <4E0B860E.50504@freebsd.org> <20110630164653.GA82980@zim.MIT.EDU> <4E0CACFB.8040906@freebsd.org> <19980.47094.184089.398324@khavrinen.csail.mit.edu> <20110701092909.F1164@besplex.bde.org> <4E0E2535.1060204@freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4E0E2535.1060204@freebsd.org> User-Agent: Mutt/1.5.21 (2010-09-15) Cc: Garrett Wollman , freebsd-standards@freebsd.org Subject: Re: New patches for expr (was: Re: Fwd: [RFC] Consistent numeric range for "expr" on all architectures) X-BeenThere: freebsd-standards@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Standards compliance List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Jul 2011 21:49:19 -0000 On Fri, Jul 01, 2011 at 09:51:17PM +0200, Stefan Esser wrote: > The first file (expr.y.diff1) contains a "diff -w -u3" of the functional > changes that I suggest. It is only meant to show the actual code changes > (applying this diff results in mis-indented code). On amd64, INT_MIN % -1 also causes a divide error SIGFPE. Therefore, this check should not be skipped, but perhaps the result 0 should be manually put in (in recent sh(1) both $((INT_MIN / -1)) and $((INT_MIN % -1)) are errors). The overflow checks assert_plus, assert_minus and assert_times are not standard-compliant because they first let the overflow occur and then attempt to check for it. The C standard permits an optimizing compiler to remove the checks (or anything else, as the meaning of the entire program is destroyed if there is overflow, but given that the program must still work if there is no overflow, it is pretty hard to avoid generating the proper add, subtract or multiply instructions). Note that the checks were already wrong, so as long as you verify you do not trigger new unexpected "optimizations", it should be OK to commit regardless. Sadly, C makes it really hard to check this correctly, while the CPU (amd64 at least) provides a simple flag bit. > I also include a SHAR of regression tests meant to be committed to > /usr/src/tools/regression/bin/expr. All tests pass with the current > patched version of expr (while the currently shipped version dumps core > in one test case). The tests still have "test" instead of "expr" at some places, see below. > # This is a shell archive. Save it in a file, remove anything before > # this line, and then unpack it by entering "sh file". Note, it may > # create directories; files and directories will be owned by you and > # have default permissions. > # > # This archive contains: > # > # expr/Makefile > # expr/regress.sh > # expr/regress.t > # > echo x - expr/Makefile > sed 's/^X//' >expr/Makefile << 'f9600fcce6c6ed7d48045c253fb4f463' > X# $FreeBSD: head/tools/regression/bin/test/Makefile 215022 2010-11-08 23:15:10Z jilles $ > X > Xall: > X sh regress.sh > f9600fcce6c6ed7d48045c253fb4f463 > echo x - expr/regress.sh > sed 's/^X//' >expr/regress.sh << '78ebeeef8ff008d708ef3dfc31f2d4b1' > X#!/bin/sh > X > [snip] > X > X# > X# expr.sh - check if test(1) or builtin test works test -> expr > X# > X# $FreeBSD:$ > X > X# force a specified test program, e.g. `env test=/bin/expr sh regress.sh' > X: ${test=expr} test -> expr > X > Xt () > X{ > X # $1 -> exit code > X # $2 -> result written to stdout > X # $3 -> $test expression > X > X count=$((count+1)) > X # check for syntax errors Does this comment still mean something? > X output="`eval $test $3 2>/dev/null`" > X ret=$? > X if [ "$ret" -ne "$1" ]; then > X printf "not ok %s - (got $ret, expected $1)\n" "$count $3" > X elif [ "$output" != "$2" ]; then > X printf "not ok %s - (unexpected output)\n" "$count $3" > X else > X printf "ok %s\n" "$count $3" > X fi > X} > X > [snip] -- Jilles Tjoelker From owner-freebsd-standards@FreeBSD.ORG Tue Jul 5 07:34:39 2011 Return-Path: Delivered-To: freebsd-standards@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CDDA5106566B for ; Tue, 5 Jul 2011 07:34:39 +0000 (UTC) (envelope-from se@freebsd.org) Received: from nm16.bullet.mail.bf1.yahoo.com (nm16.bullet.mail.bf1.yahoo.com [98.139.212.175]) by mx1.freebsd.org (Postfix) with SMTP id 7197A8FC15 for ; Tue, 5 Jul 2011 07:34:39 +0000 (UTC) Received: from [98.139.212.144] by nm16.bullet.mail.bf1.yahoo.com with NNFMP; 05 Jul 2011 07:34:38 -0000 Received: from [98.139.211.206] by tm1.bullet.mail.bf1.yahoo.com with NNFMP; 05 Jul 2011 07:34:38 -0000 Received: from [127.0.0.1] by smtp215.mail.bf1.yahoo.com with NNFMP; 05 Jul 2011 07:34:38 -0000 X-Yahoo-Newman-Id: 620941.90213.bm@smtp215.mail.bf1.yahoo.com Received: from [192.168.119.20] (se@81.173.151.210 with plain) by smtp215.mail.bf1.yahoo.com with SMTP; 05 Jul 2011 00:34:38 -0700 PDT X-Yahoo-SMTP: iDf2N9.swBDAhYEh7VHfpgq0lnq. X-YMail-OSG: 6g3fqdsVM1m90MDylx6Fh9iq.hQx.MgD8FjFPqABp_WJyaX Ji1gtw6R0lDv3OAHscd9RYjUkQm0tOkrGkqif4cThS5rnG_I.dshBFN.MGaN W7QulUhkcbMBruBqlQGrZjkxaV0qUyviOtYMVwvl0QsKXSai6t1rPwvzavmy hPiHczltFEMf1JskeJYIEEHshmsoQund.L.aroqK9H82Pii04U4AoSeqjCGG pAANpiClQgA.cDqmCzrtvMb0apiB5XyQh3ql0lHFxMswQle0XWIk2sRFHbcJ C2mLPbwx94HjUOCVN.ZLQRvL6TbQFDIn4RFPo0QNsDe7.EHunuFvdLHZ4B1H xucSzPHJWVCAVsyQSvRxKheKlatagvc34T5eGPLZFUMjoaFgdQ09CRKjjRcl .3GJbKduzTPRcEWZBrJRDV3rKuQlvHMgOmSi6 X-Yahoo-Newman-Property: ymail-3 Message-ID: <4E12BE8D.7090206@freebsd.org> Date: Tue, 05 Jul 2011 09:34:37 +0200 From: Stefan Esser User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20110624 Thunderbird/5.0 MIME-Version: 1.0 To: Jilles Tjoelker References: <4E09AF8E.5010509@freebsd.org> <4E0B860E.50504@freebsd.org> <20110630164653.GA82980@zim.MIT.EDU> <4E0CACFB.8040906@freebsd.org> <19980.47094.184089.398324@khavrinen.csail.mit.edu> <20110701092909.F1164@besplex.bde.org> <4E0E2535.1060204@freebsd.org> <20110704214917.GA77218@stack.nl> In-Reply-To: <20110704214917.GA77218@stack.nl> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: Garrett Wollman , freebsd-standards@freebsd.org Subject: Re: New patches for expr X-BeenThere: freebsd-standards@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Standards compliance List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Jul 2011 07:34:39 -0000 Am 04.07.2011 23:49, schrieb Jilles Tjoelker: > On Fri, Jul 01, 2011 at 09:51:17PM +0200, Stefan Esser wrote: >> The first file (expr.y.diff1) contains a "diff -w -u3" of the functional >> changes that I suggest. It is only meant to show the actual code changes >> (applying this diff results in mis-indented code). Hi Jilles, thank you for your comments! > On amd64, INT_MIN % -1 also causes a divide error SIGFPE. Therefore, > this check should not be skipped, but perhaps the result 0 should be > manually put in (in recent sh(1) both $((INT_MIN / -1)) and $((INT_MIN % > -1)) are errors). Guess, you are replying to a version of the diffs, which have evolved due to other comments I had received. The first patch will move the test for INT_MIN / -1 up a line to be performed before the division (for both / and %). > The overflow checks assert_plus, assert_minus and assert_times are not > standard-compliant because they first let the overflow occur and then > attempt to check for it. The C standard permits an optimizing compiler > to remove the checks (or anything else, as the meaning of the entire > program is destroyed if there is overflow, but given that the program > must still work if there is no overflow, it is pretty hard to avoid > generating the proper add, subtract or multiply instructions). Ah, I see your point: A conforming compiler could know, that the overflow check could only be triggered in the case of prior overflow (and indeed, that's just the intended purpose), and the compiler could then declare the outcome of the operation either undefined (in which case no overflow check instructions need to be generated) or valid (i.e. no overflow has occurred). In either case, the overflow check is formally not be required to be in the generated code. Well, if a compiler is free to not emit code for the overflow case, then it will still not hurt to add that code for all those compilers, that do not bother and just generate the comparisons and branch. And, as you say, it is not a common thing to do for compilers. Adding checks that do not rely on a previous arithmetic overflow might be possible, but as long as all relevant compilers generate the expected code, I really don't care. > Note that the checks were already wrong, so as long as you verify you do > not trigger new unexpected "optimizations", it should be OK to commit > regardless. Ok. Similar (but not as stricts) have been in the NetBSD version since 2001. IIRC, they were added after I initially made FreeBSD expr suppport 64bit and range checks, but I'd have to check in the NetBSD repository to be sure. Anyway, they don't seem to have hurt the NetBSD project in the past 10 years or they had been removed from their code. > Sadly, C makes it really hard to check this correctly, while the CPU > (amd64 at least) provides a simple flag bit. Yes, but as you know, other CPUs do not offer such a flag (e.g. MIPS, to simplify the design and minimize operation latency) and C cannot assume such a feature exists. >> I also include a SHAR of regression tests meant to be committed to >> /usr/src/tools/regression/bin/expr. All tests pass with the current >> patched version of expr (while the currently shipped version dumps core >> in one test case). > > The tests still have "test" instead of "expr" at some places, see below. Thanks. I used the regression test for /bin/test as a template. I'll fix them in the committed version. >> # This is a shell archive. Save it in a file, remove anything before >> # this line, and then unpack it by entering "sh file". Note, it may >> # create directories; files and directories will be owned by you and >> # have default permissions. >> # >> # This archive contains: >> # >> # expr/Makefile >> # expr/regress.sh >> # expr/regress.t >> # >> echo x - expr/Makefile >> sed 's/^X//' >expr/Makefile << 'f9600fcce6c6ed7d48045c253fb4f463' >> X# $FreeBSD: head/tools/regression/bin/test/Makefile 215022 2010-11-08 23:15:10Z jilles $ >> X >> Xall: >> X sh regress.sh >> f9600fcce6c6ed7d48045c253fb4f463 >> echo x - expr/regress.sh >> sed 's/^X//' >expr/regress.sh << '78ebeeef8ff008d708ef3dfc31f2d4b1' >> X#!/bin/sh >> X >> [snip] >> X >> X# >> X# expr.sh - check if test(1) or builtin test works Ok. > test -> expr > >> X# >> X# $FreeBSD:$ >> X >> X# force a specified test program, e.g. `env test=/bin/expr sh regress.sh' >> X: ${test=expr} > > test -> expr Well, I read this in the way, that the program to test (i.e. DOT) was expr. But I can change this, since I already wondered whether that interpretation was right. >> X >> Xt () >> X{ >> X # $1 -> exit code >> X # $2 -> result written to stdout >> X # $3 -> $test expression >> X >> X count=$((count+1)) >> X # check for syntax errors > > Does this comment still mean something? This comment is not in the version I sent to the list, yesterday. >> X output="`eval $test $3 2>/dev/null`" >> X ret=$? >> X if [ "$ret" -ne "$1" ]; then >> X printf "not ok %s - (got $ret, expected $1)\n" "$count $3" >> X elif [ "$output" != "$2" ]; then >> X printf "not ok %s - (unexpected output)\n" "$count $3" >> X else >> X printf "ok %s\n" "$count $3" >> X fi >> X} >> X >> [snip] > BTW: I intend to add a few more test cases, some for too large decimal arguments in comparison operators (to test whether string or numeric comparison is done) and some for left-/right-association of operators. But else (with the changes you point out fixed), I think the latest version is ready to be committed. It might make sense to have a similar regression test script for shell arithmetic, BTW. If you are not interested in converting the relevant test cases that might be moved over from expr/regress.sh, then I might do this for a start. Operations and operand types not covered could then be added in a second step. Best regards, STefan