From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 65276 invoked by alias); 21 Aug 2017 23:05:35 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 65226 invoked by uid 89); 21 Aug 2017 23:05:33 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.0 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy=1809 X-HELO: mail-oi0-f52.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=DMKCpRQWTDSUJvG9f9LVJ2XGiGgZ8y/J80inQawW/Jg=; b=JC+Kbre0247LOmELMe2msBjUErnIFJI4QuO+ads9L7qCUscqUJ3dOmP60O5x2ZxAn4 dlg/irpF9NfO6bctdPS0x+Jk5hC0n7ZfC7z6MfbyVJPlFggY75bMF+/scrGRYFncFamj Y5ShSfPVKVD7aw/r58dsPLbjvs3cYW+F+G2NPrUMlMgQ8pUGg/MJKOq8GwQAzs6gb5oS 6ZAmKB+DC/Mxf/Hkn2YohyjfkSc0JMcAignVpChm3lWGeun4Dgf0k6O2m+1A2CCx3+GN FO9C/MVs+XJzGKkRRHYbq8nh9c0+dK1xR1PcVmP0388AI4VJ1kgV54DmQtMh1OpDGmld iS5Q== X-Gm-Message-State: AHYfb5iFA25rbOOEgutHZ3coYu+loYqswFM6gKff7ZsXzQ17Ya4xGd8+ itYu323OQfYcI7nO8Gfygi+nCir+aQ== X-Received: by 10.202.82.151 with SMTP id g145mr7581704oib.301.1503356729179; Mon, 21 Aug 2017 16:05:29 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: References: <20170820171713.GA19531@gmail.com> <25604b34-7afb-7007-4ea8-3add9963d4b4@linux.vnet.ibm.com> From: "H.J. Lu" Date: Mon, 21 Aug 2017 23:05:00 -0000 Message-ID: Subject: Re: [PATCH] string/stratcliff.c: Replace int with size_t [BZ #21982] To: Stefan Liebler Cc: GNU C Library Content-Type: multipart/mixed; boundary="001a113ded36d0685805574b8363" X-SW-Source: 2017-08/txt/msg01031.txt.bz2 --001a113ded36d0685805574b8363 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Content-length: 3516 On Mon, Aug 21, 2017 at 8:41 AM, Stefan Liebler w= rote: > On 08/21/2017 04:53 PM, H.J. Lu wrote: >> >> On Mon, Aug 21, 2017 at 6:48 AM, Stefan Liebler >> wrote: >>> >>> On 08/20/2017 07:17 PM, H.J. Lu wrote: >>>> >>>> >>>> Fix GCC 7 errors when string/stratcliff.c is compiled with -O3: >>>> >>>> stratcliff.c: In function =E2=80=98do_test=E2=80=99: >>>> cc1: error: assuming signed overflow does not occur when assuming that >>>> (X >>>> - c) <=3D X is always true [-Werror=3Dstrict-overflow] >>>> >>>> OK for master? >>>> >>>> H.J. >>>> --- >>>> [BZ #21982] >>>> * string/stratcliff.c (do_test): Declare size, nchars, inner, >>>> middle and outer with size_t instead of int. Repleace %d with >>>> %Zd in printf. >>>> --- >>>> string/stratcliff.c | 72 >>>> ++++++++++++++++++++++++++--------------------------- >>>> 1 file changed, 36 insertions(+), 36 deletions(-) >>>> >>>> diff --git a/string/stratcliff.c b/string/stratcliff.c >>>> index e28b0c5058..ae780379cb 100644 >>>> --- a/string/stratcliff.c >>>> +++ b/string/stratcliff.c >>>> @@ -58,8 +58,8 @@ >>>> int >>>> do_test (void) >>>> { >>>> - int size =3D sysconf (_SC_PAGESIZE); >>>> - int nchars =3D size / sizeof (CHAR); >>>> + size_t size =3D sysconf (_SC_PAGESIZE); >>>> + size_t nchars =3D size / sizeof (CHAR); >>>> CHAR *adr; >>>> CHAR *dest; >>>> int result =3D 0; >>>> @@ -80,7 +80,7 @@ do_test (void) >>>> } >>>> else >>>> { >>>> - int inner, middle, outer; >>>> + size_t inner, middle, outer; >>>> >>>> mprotect (adr, size, PROT_NONE); >>>> mprotect (adr + 2 * nchars, size, PROT_NONE); >>>> @@ -101,7 +101,7 @@ do_test (void) >>>> >>>> if (STRLEN (&adr[outer]) !=3D (size_t) (inner - outer)) >>>> { >>>> - printf ("%s flunked for outer =3D %d, inner =3D %d\n= ", >>>> + printf ("%s flunked for outer =3D %Zd, inner =3D %Zd= \n", >>>> STRINGIFY (STRLEN), outer, inner); >>>> result =3D 1; >>>> } >>>> { >>>> - printf ("%s flunked for outer =3D %d, middle =3D %d\= n", >>>> + printf ("%s flunked for outer =3D %Zd, middle =3D %Z= d\n", >>>> STRINGIFY (rawmemchr), outer, middle); >>>> result =3D 1; >>>> } >>>> Hi H.J. Lu, >>> >>> >>> >>> I've applied your patch and the warnings does not occur anymore on s390. >> >> >> Great. >> >>> The outer loops of the string tests are all using the following: >>> size_t nchars, outer; >>> for (outer =3D nchars - 1; outer >=3D MAX (0, nchars - 128); --outer) >>> >>> I think we can assume, that nchars is always > 128 as it is derived by >>> the >>> pagesize. >>> But if nchars would be equal to 128, this would result in an infinite >>> loop >>> (outer >=3D 0)? >>> If nchars would be less than 128, the tests would be skipped. >>> >>> Should we add a check that nchars > 128 at the beginning and replace the >>> "MAX (0, nchars - 128)" with only "nchars - 128"? >> >> >> This is a separate issue beyond BZ #21982. >> >> > Your patch is introducing this behaviour. > Before your patch, nchars and outer was an int and the for-loop-condition > "outer >=3D MAX (0, nchars - 128)" does not lead to an infinite loop or to > skipping the test if nchars <=3D 128. > How about this patch? --=20 H.J. --001a113ded36d0685805574b8363 Content-Type: text/x-patch; charset="UTF-8"; name="0001-string-stratcliff.c-Replace-int-with-size_t-BZ-21982.patch" Content-Disposition: attachment; filename="0001-string-stratcliff.c-Replace-int-with-size_t-BZ-21982.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j6mrrrk10 Content-length: 22697 RnJvbSAxMzM5NDM1NmViYjc0OTdhNjJmYTc1NmVhYzRkMWEyMzdmY2JkOTIx IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhq bC50b29sc0BnbWFpbC5jb20+CkRhdGU6IFN1biwgMjAgQXVnIDIwMTcgMTA6 MTE6MzggLTA3MDAKU3ViamVjdDogW1BBVENIXSBzdHJpbmcvc3RyYXRjbGlm Zi5jOiBSZXBsYWNlIGludCB3aXRoIHNpemVfdCBbQlogIzIxOTgyXQpNSU1F LVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJz ZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoKRml4 IEdDQyA3IGVycm9ycyB3aGVuIHN0cmluZy9zdHJhdGNsaWZmLmMgaXMgY29t cGlsZWQgd2l0aCAtTzM6CgpzdHJhdGNsaWZmLmM6IEluIGZ1bmN0aW9uIOKA mGRvX3Rlc3TigJk6CmNjMTogZXJyb3I6IGFzc3VtaW5nIHNpZ25lZCBvdmVy ZmxvdyBkb2VzIG5vdCBvY2N1ciB3aGVuIGFzc3VtaW5nIHRoYXQgKFggLSBj KSA8PSBYIGlzIGFsd2F5cyB0cnVlIFstV2Vycm9yPXN0cmljdC1vdmVyZmxv d10KCglbQlogIzIxOTgyXQoJKiBzdHJpbmcvc3RyYXRjbGlmZi5jIChkb190 ZXN0KTogRGVjbGFyZSBzaXplLCBuY2hhcnMsIGlubmVyLAoJbWlkZGxlIGFu ZCBvdXRlciB3aXRoIHNpemVfdCBpbnN0ZWFkIG9mIGludC4gIFJlcGxlYWNl ICVkIGFuZAoJJVpkIHdpdGggJXp1IGluIHByaW50Zi4gIFVwZGF0ZSAiTUFY ICgwLCBuY2hhcnMgLSAxMjgpIiBhbmQKCSJNQVggKG91dGVyLCBuY2hhcnMg LSA2NCkiIHRvIHN1cHBvcnQgdW5zaWduZWQgb3V0ZXIgYW5kCgluY2hhcnMu Ci0tLQogc3RyaW5nL3N0cmF0Y2xpZmYuYyB8IDE1MCArKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZp bGUgY2hhbmdlZCwgODAgaW5zZXJ0aW9ucygrKSwgNzAgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3RyaW5nL3N0cmF0Y2xpZmYuYyBiL3N0cmluZy9z dHJhdGNsaWZmLmMKaW5kZXggZTI4YjBjNTA1OC4uYTFlZjE4YTFmZCAxMDA2 NDQKLS0tIGEvc3RyaW5nL3N0cmF0Y2xpZmYuYworKysgYi9zdHJpbmcvc3Ry YXRjbGlmZi5jCkBAIC01OCw4ICs1OCw4IEBACiBpbnQKIGRvX3Rlc3QgKHZv aWQpCiB7Ci0gIGludCBzaXplID0gc3lzY29uZiAoX1NDX1BBR0VTSVpFKTsK LSAgaW50IG5jaGFycyA9IHNpemUgLyBzaXplb2YgKENIQVIpOworICBzaXpl X3Qgc2l6ZSA9IHN5c2NvbmYgKF9TQ19QQUdFU0laRSk7CisgIHNpemVfdCBu Y2hhcnMgPSBzaXplIC8gc2l6ZW9mIChDSEFSKTsKICAgQ0hBUiAqYWRyOwog ICBDSEFSICpkZXN0OwogICBpbnQgcmVzdWx0ID0gMDsKQEAgLTgwLDcgKzgw LDE3IEBAIGRvX3Rlc3QgKHZvaWQpCiAgICAgfQogICBlbHNlCiAgICAgewot ICAgICAgaW50IGlubmVyLCBtaWRkbGUsIG91dGVyOworICAgICAgc2l6ZV90 IGlubmVyLCBtaWRkbGUsIG91dGVyLCBuY2hhcnM2NCwgbWF4MTI4OworCisg ICAgICBpZiAobmNoYXJzID4gNjQpCisJbmNoYXJzNjQgPSBuY2hhcnMgLSA2 NDsKKyAgICAgIGVsc2UKKwluY2hhcnM2NCA9IDA7CisKKyAgICAgIGlmIChu Y2hhcnMgPiAxMjgpCisJbWF4MTI4ID0gbmNoYXJzIC0gMTI4OworICAgICAg ZWxzZQorCW1heDEyOCA9IDA7CiAKICAgICAgIG1wcm90ZWN0IChhZHIsIHNp emUsIFBST1RfTk9ORSk7CiAgICAgICBtcHJvdGVjdCAoYWRyICsgMiAqIG5j aGFycywgc2l6ZSwgUFJPVF9OT05FKTsKQEAgLTkzLDE1ICsxMDMsMTUgQEAg ZG9fdGVzdCAodm9pZCkKICAgICAgIE1FTVNFVCAoYWRyLCBMKCdUJyksIG5j aGFycyk7CiAKICAgICAgIC8qIHN0cmxlbi93Y3NsZW4gdGVzdCAqLwotICAg ICAgZm9yIChvdXRlciA9IG5jaGFycyAtIDE7IG91dGVyID49IE1BWCAoMCwg bmNoYXJzIC0gMTI4KTsgLS1vdXRlcikKKyAgICAgIGZvciAob3V0ZXIgPSBu Y2hhcnMgLSAxOyBvdXRlciA+PSBtYXgxMjg7IC0tb3V0ZXIpCiAJewotCSAg Zm9yIChpbm5lciA9IE1BWCAob3V0ZXIsIG5jaGFycyAtIDY0KTsgaW5uZXIg PCBuY2hhcnM7ICsraW5uZXIpCisJICBmb3IgKGlubmVyID0gTUFYIChvdXRl ciwgbmNoYXJzNjQpOyBpbm5lciA8IG5jaGFyczsgKytpbm5lcikKIAkgICAg ewogCSAgICAgIGFkcltpbm5lcl0gPSBMKCdcMCcpOwogCiAJICAgICAgaWYg KFNUUkxFTiAoJmFkcltvdXRlcl0pICE9IChzaXplX3QpIChpbm5lciAtIG91 dGVyKSkKIAkJewotCQkgIHByaW50ZiAoIiVzIGZsdW5rZWQgZm9yIG91dGVy ID0gJWQsIGlubmVyID0gJWRcbiIsCisJCSAgcHJpbnRmICgiJXMgZmx1bmtl ZCBmb3Igb3V0ZXIgPSAlenUsIGlubmVyID0gJXp1XG4iLAogCQkJICBTVFJJ TkdJRlkgKFNUUkxFTiksIG91dGVyLCBpbm5lcik7CiAJCSAgcmVzdWx0ID0g MTsKIAkJfQpAQCAtMTExLDE2ICsxMjEsMTYgQEAgZG9fdGVzdCAodm9pZCkK IAl9CiAKICAgICAgIC8qIHN0cm5sZW4vd2NzbmxlbiB0ZXN0ICovCi0gICAg ICBmb3IgKG91dGVyID0gbmNoYXJzOyBvdXRlciA+PSBNQVggKDAsIG5jaGFy cyAtIDEyOCk7IC0tb3V0ZXIpCisgICAgICBmb3IgKG91dGVyID0gbmNoYXJz OyBvdXRlciA+PSBtYXgxMjg7IC0tb3V0ZXIpCiAJewotCSAgZm9yIChpbm5l ciA9IE1BWCAob3V0ZXIsIG5jaGFycyAtIDY0KTsgaW5uZXIgPCBuY2hhcnM7 ICsraW5uZXIpCisJICBmb3IgKGlubmVyID0gTUFYIChvdXRlciwgbmNoYXJz NjQpOyBpbm5lciA8IG5jaGFyczsgKytpbm5lcikKIAkgICAgewogCSAgICAg IGFkcltpbm5lcl0gPSBMKCdcMCcpOwogCiAJICAgICAgaWYgKFNUUk5MRU4g KCZhZHJbb3V0ZXJdLCBpbm5lciAtIG91dGVyICsgMSkKIAkJICAhPSAoc2l6 ZV90KSAoaW5uZXIgLSBvdXRlcikpCiAJCXsKLQkJICBwcmludGYgKCIlcyBm bHVua2VkIGZvciBvdXRlciA9ICVkLCBpbm5lciA9ICVkXG4iLAorCQkgIHBy aW50ZiAoIiVzIGZsdW5rZWQgZm9yIG91dGVyID0gJXp1LCBpbm5lciA9ICV6 dVxuIiwKIAkJCSAgU1RSSU5HSUZZIChTVFJOTEVOKSwgb3V0ZXIsIGlubmVy KTsKIAkJICByZXN1bHQgPSAxOwogCQl9CkBAIC0xMjgsMTQgKzEzOCwxNCBA QCBkb190ZXN0ICh2b2lkKQogCSAgICAgIGFkcltpbm5lcl0gPSBMKCdUJyk7 CiAJICAgIH0KIAl9Ci0gICAgICBmb3IgKG91dGVyID0gbmNoYXJzOyBvdXRl ciA+PSBNQVggKDAsIG5jaGFycyAtIDEyOCk7IC0tb3V0ZXIpCisgICAgICBm b3IgKG91dGVyID0gbmNoYXJzOyBvdXRlciA+PSBtYXgxMjg7IC0tb3V0ZXIp CiAJewotCSAgZm9yIChpbm5lciA9IE1BWCAob3V0ZXIsIG5jaGFycyAtIDY0 KTsgaW5uZXIgPD0gbmNoYXJzOyArK2lubmVyKQorCSAgZm9yIChpbm5lciA9 IE1BWCAob3V0ZXIsIG5jaGFyczY0KTsgaW5uZXIgPD0gbmNoYXJzOyArK2lu bmVyKQogCSAgICB7CiAJICAgICAgaWYgKFNUUk5MRU4gKCZhZHJbb3V0ZXJd LCBpbm5lciAtIG91dGVyKQogCQkgICE9IChzaXplX3QpIChpbm5lciAtIG91 dGVyKSkKIAkJewotCQkgIHByaW50ZiAoIiVzIGZsdW5rZWQgYm91bmRlZCBm b3Igb3V0ZXIgPSAlZCwgaW5uZXIgPSAlZFxuIiwKKwkJICBwcmludGYgKCIl cyBmbHVua2VkIGJvdW5kZWQgZm9yIG91dGVyID0gJXp1LCBpbm5lciA9ICV6 dVxuIiwKIAkJCSAgU1RSSU5HSUZZIChTVFJOTEVOKSwgb3V0ZXIsIGlubmVy KTsKIAkJICByZXN1bHQgPSAxOwogCQl9CkBAIC0xNDMsOSArMTUzLDkgQEAg ZG9fdGVzdCAodm9pZCkKIAl9CiAKICAgICAgIC8qIHN0cmNoci93Y3NjaHIg dGVzdCAqLwotICAgICAgZm9yIChvdXRlciA9IG5jaGFycyAtIDE7IG91dGVy ID49IE1BWCAoMCwgbmNoYXJzIC0gMTI4KTsgLS1vdXRlcikKKyAgICAgIGZv ciAob3V0ZXIgPSBuY2hhcnMgLSAxOyBvdXRlciA+PSBtYXgxMjg7IC0tb3V0 ZXIpCiAJewotCSAgZm9yIChtaWRkbGUgPSBNQVggKG91dGVyLCBuY2hhcnMg LSA2NCk7IG1pZGRsZSA8IG5jaGFyczsgKyttaWRkbGUpCisJICBmb3IgKG1p ZGRsZSA9IE1BWCAob3V0ZXIsIG5jaGFyczY0KTsgbWlkZGxlIDwgbmNoYXJz OyArK21pZGRsZSkKIAkgICAgewogCSAgICAgIGZvciAoaW5uZXIgPSBtaWRk bGU7IGlubmVyIDwgbmNoYXJzOyArK2lubmVyKQogCQl7CkBAIC0xNTgsOCAr MTY4LDggQEAgZG9fdGVzdCAodm9pZCkKIAkJICAgICAgfHwgKGlubmVyICE9 IG1pZGRsZQogCQkJICAmJiAoY3AgLSAmYWRyW291dGVyXSkgIT0gbWlkZGxl IC0gb3V0ZXIpKQogCQkgICAgewotCQkgICAgICBwcmludGYgKCIlcyBmbHVu a2VkIGZvciBvdXRlciA9ICVkLCBtaWRkbGUgPSAlZCwgIgotCQkJICAgICAg ImlubmVyID0gJWRcbiIsCisJCSAgICAgIHByaW50ZiAoIiVzIGZsdW5rZWQg Zm9yIG91dGVyID0gJXp1LCBtaWRkbGUgPSAlenUsICIKKwkJCSAgICAgICJp bm5lciA9ICV6dVxuIiwKIAkJCSAgICAgIFNUUklOR0lGWSAoU1RSQ0hSKSwg b3V0ZXIsIG1pZGRsZSwgaW5uZXIpOwogCQkgICAgICByZXN1bHQgPSAxOwog CQkgICAgfQpAQCAtMTgwLDkgKzE5MCw5IEBAIGRvX3Rlc3QgKHZvaWQpCiAJ fQogCiAgICAgICAvKiBzdHJyY2hyL3djc3JjaHIgdGVzdCAqLwotICAgICAg Zm9yIChvdXRlciA9IG5jaGFycyAtIDE7IG91dGVyID49IE1BWCAoMCwgbmNo YXJzIC0gMTI4KTsgLS1vdXRlcikKKyAgICAgIGZvciAob3V0ZXIgPSBuY2hh cnMgLSAxOyBvdXRlciA+PSBtYXgxMjg7IC0tb3V0ZXIpCiAJewotCSAgZm9y IChtaWRkbGUgPSBNQVggKG91dGVyLCBuY2hhcnMgLSA2NCk7IG1pZGRsZSA8 IG5jaGFyczsgKyttaWRkbGUpCisJICBmb3IgKG1pZGRsZSA9IE1BWCAob3V0 ZXIsIG5jaGFyczY0KTsgbWlkZGxlIDwgbmNoYXJzOyArK21pZGRsZSkKIAkg ICAgewogCSAgICAgIGZvciAoaW5uZXIgPSBtaWRkbGU7IGlubmVyIDwgbmNo YXJzOyArK2lubmVyKQogCQl7CkBAIC0xOTUsOCArMjA1LDggQEAgZG9fdGVz dCAodm9pZCkKIAkJICAgICAgfHwgKGlubmVyICE9IG1pZGRsZQogCQkJICAm JiAoY3AgLSAmYWRyW291dGVyXSkgIT0gbWlkZGxlIC0gb3V0ZXIpKQogCQkg ICAgewotCQkgICAgICBwcmludGYgKCIlcyBmbHVua2VkIGZvciBvdXRlciA9 ICVkLCBtaWRkbGUgPSAlZCwgIgotCQkJICAgICAgImlubmVyID0gJWRcbiIs CisJCSAgICAgIHByaW50ZiAoIiVzIGZsdW5rZWQgZm9yIG91dGVyID0gJXp1 LCBtaWRkbGUgPSAlenUsICIKKwkJCSAgICAgICJpbm5lciA9ICV6dVxuIiwK IAkJCSAgICAgIFNUUklOR0lGWSAoU1RSUkNIUiksIG91dGVyLCBtaWRkbGUs IGlubmVyKTsKIAkJICAgICAgcmVzdWx0ID0gMTsKIAkJICAgIH0KQEAgLTIw OCw5ICsyMTgsOSBAQCBkb190ZXN0ICh2b2lkKQogCX0KIAogICAgICAgLyog bWVtY2hyIHRlc3QgKi8KLSAgICAgIGZvciAob3V0ZXIgPSBuY2hhcnMgLSAx OyBvdXRlciA+PSBNQVggKDAsIG5jaGFycyAtIDEyOCk7IC0tb3V0ZXIpCisg ICAgICBmb3IgKG91dGVyID0gbmNoYXJzIC0gMTsgb3V0ZXIgPj0gbWF4MTI4 OyAtLW91dGVyKQogCXsKLQkgIGZvciAobWlkZGxlID0gTUFYIChvdXRlciwg bmNoYXJzIC0gNjQpOyBtaWRkbGUgPCBuY2hhcnM7ICsrbWlkZGxlKQorCSAg Zm9yIChtaWRkbGUgPSBNQVggKG91dGVyLCBuY2hhcnM2NCk7IG1pZGRsZSA8 IG5jaGFyczsgKyttaWRkbGUpCiAJICAgIHsKIAkgICAgICBhZHJbbWlkZGxl XSA9IEwoJ1YnKTsKIApAQCAtMjE4LDcgKzIyOCw3IEBAIGRvX3Rlc3QgKHZv aWQpCiAKIAkgICAgICBpZiAoY3AgLSAmYWRyW291dGVyXSAhPSBtaWRkbGUg LSBvdXRlcikKIAkJewotCQkgIHByaW50ZiAoIiVzIGZsdW5rZWQgZm9yIG91 dGVyID0gJWQsIG1pZGRsZSA9ICVkXG4iLAorCQkgIHByaW50ZiAoIiVzIGZs dW5rZWQgZm9yIG91dGVyID0gJXp1LCBtaWRkbGUgPSAlenVcbiIsCiAJCQkg IFNUUklOR0lGWSAoTUVNQ0hSKSwgb3V0ZXIsIG1pZGRsZSk7CiAJCSAgcmVz dWx0ID0gMTsKIAkJfQpAQCAtMjI2LDEzICsyMzYsMTMgQEAgZG9fdGVzdCAo dm9pZCkKIAkgICAgICBhZHJbbWlkZGxlXSA9IEwoJ1QnKTsKIAkgICAgfQog CX0KLSAgICAgIGZvciAob3V0ZXIgPSBuY2hhcnM7IG91dGVyID49IE1BWCAo MCwgbmNoYXJzIC0gMTI4KTsgLS1vdXRlcikKKyAgICAgIGZvciAob3V0ZXIg PSBuY2hhcnM7IG91dGVyID49IG1heDEyODsgLS1vdXRlcikKIAl7CiAJICBD SEFSICpjcCA9IE1FTUNIUiAoJmFkcltvdXRlcl0sIEwoJ1YnKSwgbmNoYXJz IC0gb3V0ZXIpOwogCiAJICBpZiAoY3AgIT0gTlVMTCkKIAkgICAgewotCSAg ICAgIHByaW50ZiAoIiVzIGZsdW5rZWQgZm9yIG91dGVyID0gJWRcbiIsCisJ ICAgICAgcHJpbnRmICgiJXMgZmx1bmtlZCBmb3Igb3V0ZXIgPSAlenVcbiIs CiAJCSAgICAgIFNUUklOR0lGWSAoTUVNQ0hSKSwgb3V0ZXIpOwogCSAgICAg IHJlc3VsdCA9IDE7CiAJICAgIH0KQEAgLTI0MSw5ICsyNTEsOSBAQCBkb190 ZXN0ICh2b2lkKQogICAgICAgLyogVGhlc2UgZnVuY3Rpb25zIG9ubHkgZXhp c3QgZm9yIHNpbmdsZS1ieXRlIGNoYXJhY3RlcnMuICAqLwogI2lmbmRlZiBX Q1NURVNUCiAgICAgICAvKiByYXdtZW1jaHIgdGVzdCAqLwotICAgICAgZm9y IChvdXRlciA9IG5jaGFycyAtIDE7IG91dGVyID49IE1BWCAoMCwgbmNoYXJz IC0gMTI4KTsgLS1vdXRlcikKKyAgICAgIGZvciAob3V0ZXIgPSBuY2hhcnMg LSAxOyBvdXRlciA+PSBtYXgxMjg7IC0tb3V0ZXIpCiAJewotCSAgZm9yICht aWRkbGUgPSBNQVggKG91dGVyLCBuY2hhcnMgLSA2NCk7IG1pZGRsZSA8IG5j aGFyczsgKyttaWRkbGUpCisJICBmb3IgKG1pZGRsZSA9IE1BWCAob3V0ZXIs IG5jaGFyczY0KTsgbWlkZGxlIDwgbmNoYXJzOyArK21pZGRsZSkKIAkgICAg ewogCSAgICAgIGFkclttaWRkbGVdID0gTCgnVicpOwogCkBAIC0yNTEsNyAr MjYxLDcgQEAgZG9fdGVzdCAodm9pZCkKIAogCSAgICAgIGlmIChjcCAtICZh ZHJbb3V0ZXJdICE9IG1pZGRsZSAtIG91dGVyKQogCQl7Ci0JCSAgcHJpbnRm ICgiJXMgZmx1bmtlZCBmb3Igb3V0ZXIgPSAlZCwgbWlkZGxlID0gJWRcbiIs CisJCSAgcHJpbnRmICgiJXMgZmx1bmtlZCBmb3Igb3V0ZXIgPSAlenUsIG1p ZGRsZSA9ICV6dVxuIiwKIAkJCSAgU1RSSU5HSUZZIChyYXdtZW1jaHIpLCBv dXRlciwgbWlkZGxlKTsKIAkJICByZXN1bHQgPSAxOwogCQl9CkBAIC0yNjEs OSArMjcxLDkgQEAgZG9fdGVzdCAodm9pZCkKIAl9CiAKICAgICAgIC8qIG1l bXJjaHIgdGVzdCAqLwotICAgICAgZm9yIChvdXRlciA9IG5jaGFycyAtIDE7 IG91dGVyID49IE1BWCAoMCwgbmNoYXJzIC0gMTI4KTsgLS1vdXRlcikKKyAg ICAgIGZvciAob3V0ZXIgPSBuY2hhcnMgLSAxOyBvdXRlciA+PSBtYXgxMjg7 IC0tb3V0ZXIpCiAJewotCSAgZm9yIChtaWRkbGUgPSBNQVggKG91dGVyLCBu Y2hhcnMgLSA2NCk7IG1pZGRsZSA8IG5jaGFyczsgKyttaWRkbGUpCisJICBm b3IgKG1pZGRsZSA9IE1BWCAob3V0ZXIsIG5jaGFyczY0KTsgbWlkZGxlIDwg bmNoYXJzOyArK21pZGRsZSkKIAkgICAgewogCSAgICAgIGFkclttaWRkbGVd ID0gTCgnVicpOwogCkBAIC0yNzEsNyArMjgxLDcgQEAgZG9fdGVzdCAodm9p ZCkKIAogCSAgICAgIGlmIChjcCAtICZhZHJbb3V0ZXJdICE9IG1pZGRsZSAt IG91dGVyKQogCQl7Ci0JCSAgcHJpbnRmICgiJXMgZmx1bmtlZCBmb3Igb3V0 ZXIgPSAlZCwgbWlkZGxlID0gJWRcbiIsCisJCSAgcHJpbnRmICgiJXMgZmx1 bmtlZCBmb3Igb3V0ZXIgPSAlenUsIG1pZGRsZSA9ICV6dVxuIiwKIAkJCSAg U1RSSU5HSUZZIChtZW1yY2hyKSwgb3V0ZXIsIG1pZGRsZSk7CiAJCSAgcmVz dWx0ID0gMTsKIAkJfQpAQCAtMjc5LDEzICsyODksMTMgQEAgZG9fdGVzdCAo dm9pZCkKIAkgICAgICBhZHJbbWlkZGxlXSA9IEwoJ1QnKTsKIAkgICAgfQog CX0KLSAgICAgIGZvciAob3V0ZXIgPSBuY2hhcnM7IG91dGVyID49IE1BWCAo MCwgbmNoYXJzIC0gMTI4KTsgLS1vdXRlcikKKyAgICAgIGZvciAob3V0ZXIg PSBuY2hhcnM7IG91dGVyID49IG1heDEyODsgLS1vdXRlcikKIAl7CiAJICBD SEFSICpjcCA9IG1lbXJjaHIgKCZhZHJbb3V0ZXJdLCBMKCdWJyksIG5jaGFy cyAtIG91dGVyKTsKIAogCSAgaWYgKGNwICE9IE5VTEwpCiAJICAgIHsKLQkg ICAgICBwcmludGYgKCIlcyBmbHVua2VkIGZvciBvdXRlciA9ICVkXG4iLAor CSAgICAgIHByaW50ZiAoIiVzIGZsdW5rZWQgZm9yIG91dGVyID0gJXp1XG4i LAogCQkgICAgICBTVFJJTkdJRlkgKG1lbXJjaHIpLCBvdXRlcik7CiAJICAg ICAgcmVzdWx0ID0gMTsKIAkgICAgfQpAQCAtMjkzLDE2ICszMDMsMTYgQEAg ZG9fdGVzdCAodm9pZCkKICNlbmRpZgogCiAgICAgICAvKiBzdHJjcHkvd2Nz Y3B5IHRlc3QgKi8KLSAgICAgIGZvciAob3V0ZXIgPSBuY2hhcnMgLSAxOyBv dXRlciA+PSBNQVggKDAsIG5jaGFycyAtIDEyOCk7IC0tb3V0ZXIpCisgICAg ICBmb3IgKG91dGVyID0gbmNoYXJzIC0gMTsgb3V0ZXIgPj0gbWF4MTI4OyAt LW91dGVyKQogCXsKLQkgIGZvciAoaW5uZXIgPSBNQVggKG91dGVyLCBuY2hh cnMgLSA2NCk7IGlubmVyIDwgbmNoYXJzOyArK2lubmVyKQorCSAgZm9yIChp bm5lciA9IE1BWCAob3V0ZXIsIG5jaGFyczY0KTsgaW5uZXIgPCBuY2hhcnM7 ICsraW5uZXIpCiAJICAgIHsKIAkgICAgICBhZHJbaW5uZXJdID0gTCgnXDAn KTsKIAogCSAgICAgIGlmIChTVFJDUFkgKGRlc3QsICZhZHJbb3V0ZXJdKSAh PSBkZXN0CiAJCSAgfHwgU1RSTEVOIChkZXN0KSAhPSAoc2l6ZV90KSAoaW5u ZXIgLSBvdXRlcikpCiAJCXsKLQkJICBwcmludGYgKCIlcyBmbHVua2VkIGZv ciBvdXRlciA9ICVkLCBpbm5lciA9ICVkXG4iLAorCQkgIHByaW50ZiAoIiVz IGZsdW5rZWQgZm9yIG91dGVyID0gJXp1LCBpbm5lciA9ICV6dVxuIiwKIAkJ CSAgU1RSSU5HSUZZIChTVFJDUFkpLCBvdXRlciwgaW5uZXIpOwogCQkgIHJl c3VsdCA9IDE7CiAJCX0KQEAgLTMyMiwxNCArMzMyLDE0IEBAIGRvX3Rlc3Qg KHZvaWQpCiAKIAkgICAgaWYgKFNUUkNNUCAoYWRyICsgbWlkZGxlLCBkZXN0 ICsgbmNoYXJzIC0gb3V0ZXIpIDw9IDApCiAJICAgICAgewotCQlwcmludGYg KCIlcyAxIGZsdW5rZWQgZm9yIG91dGVyID0gJWQsIG1pZGRsZSA9ICVkXG4i LAorCQlwcmludGYgKCIlcyAxIGZsdW5rZWQgZm9yIG91dGVyID0gJXp1LCBt aWRkbGUgPSAlenVcbiIsCiAJCQlTVFJJTkdJRlkgKFNUUkNNUCksIG91dGVy LCBtaWRkbGUpOwogCQlyZXN1bHQgPSAxOwogCSAgICAgIH0KIAogCSAgICBp ZiAoU1RSQ01QIChkZXN0ICsgbmNoYXJzIC0gb3V0ZXIsIGFkciArIG1pZGRs ZSkgPj0gMCkKIAkgICAgICB7Ci0JCXByaW50ZiAoIiVzIDIgZmx1bmtlZCBm b3Igb3V0ZXIgPSAlZCwgbWlkZGxlID0gJWRcbiIsCisJCXByaW50ZiAoIiVz IDIgZmx1bmtlZCBmb3Igb3V0ZXIgPSAlenUsIG1pZGRsZSA9ICV6dVxuIiwK IAkJCVNUUklOR0lGWSAoU1RSQ01QKSwgb3V0ZXIsIG1pZGRsZSk7CiAJCXJl c3VsdCA9IDE7CiAJICAgICAgfQpAQCAtMzQ4LDE2ICszNTgsMTYgQEAgZG9f dGVzdCAodm9pZCkKIAkgICAgICB7CiAJCWlmIChTVFJOQ01QIChhZHIgKyBt aWRkbGUsIGRlc3QgKyBuY2hhcnMgLSBvdXRlciwgaW5uZXIpICE9IDApCiAJ CSAgewotCQkgICAgcHJpbnRmICgiJXMgMSBmbHVua2VkIGZvciBvdXRlciA9 ICVkLCBtaWRkbGUgPSAlZCwgIgotCQkJICAgICJpbm5lciA9ICVkXG4iLAor CQkgICAgcHJpbnRmICgiJXMgMSBmbHVua2VkIGZvciBvdXRlciA9ICV6dSwg bWlkZGxlID0gJXp1LCAiCisJCQkgICAgImlubmVyID0gJXp1XG4iLAogCQkJ ICAgIFNUUklOR0lGWSAoU1RSTkNNUCksIG91dGVyLCBtaWRkbGUsIGlubmVy KTsKIAkJICAgIHJlc3VsdCA9IDE7CiAJCSAgfQogCiAJCWlmIChTVFJOQ01Q IChkZXN0ICsgbmNoYXJzIC0gb3V0ZXIsIGFkciArIG1pZGRsZSwgaW5uZXIp ICE9IDApCiAJCSAgewotCQkgICAgcHJpbnRmICgiJXMgMiBmbHVua2VkIGZv ciBvdXRlciA9ICVkLCBtaWRkbGUgPSAlZCwgIgotCQkJICAgICJpbm5lciA9 ICVkXG4iLAorCQkgICAgcHJpbnRmICgiJXMgMiBmbHVua2VkIGZvciBvdXRl ciA9ICV6dSwgbWlkZGxlID0gJXp1LCAiCisJCQkgICAgImlubmVyID0gJXp1 XG4iLAogCQkJICAgIFNUUklOR0lGWSAoU1RSTkNNUCksIG91dGVyLCBtaWRk bGUsIGlubmVyKTsKIAkJICAgIHJlc3VsdCA9IDE7CiAJCSAgfQpAQCAtMzY1 LDE0ICszNzUsMTQgQEAgZG9fdGVzdCAodm9pZCkKIAogCSAgICBpZiAoU1RS TkNNUCAoYWRyICsgbWlkZGxlLCBkZXN0ICsgbmNoYXJzIC0gb3V0ZXIsIG91 dGVyKSA+PSAwKQogCSAgICAgIHsKLQkJcHJpbnRmICgiJXMgMSBmbHVua2Vk IGZvciBvdXRlciA9ICVkLCBtaWRkbGUgPSAlZCwgZnVsbFxuIiwKKwkJcHJp bnRmICgiJXMgMSBmbHVua2VkIGZvciBvdXRlciA9ICV6dSwgbWlkZGxlID0g JXp1LCBmdWxsXG4iLAogCQkJU1RSSU5HSUZZIChTVFJOQ01QKSwgb3V0ZXIs IG1pZGRsZSk7CiAJCXJlc3VsdCA9IDE7CiAJICAgICAgfQogCiAJICAgIGlm IChTVFJOQ01QIChkZXN0ICsgbmNoYXJzIC0gb3V0ZXIsIGFkciArIG1pZGRs ZSwgb3V0ZXIpIDw9IDApCiAJICAgICAgewotCQlwcmludGYgKCIlcyAyIGZs dW5rZWQgZm9yIG91dGVyID0gJWQsIG1pZGRsZSA9ICVkLCBmdWxsXG4iLAor CQlwcmludGYgKCIlcyAyIGZsdW5rZWQgZm9yIG91dGVyID0gJXp1LCBtaWRk bGUgPSAlenUsIGZ1bGxcbiIsCiAJCQlTVFJJTkdJRlkgKFNUUk5DTVApLCBv dXRlciwgbWlkZGxlKTsKIAkJcmVzdWx0ID0gMTsKIAkgICAgICB9CkBAIC0z ODAsNyArMzkwLDcgQEAgZG9fdGVzdCAodm9pZCkKIAogICAgICAgLyogc3Ry bmNweS93Y3NuY3B5IHRlc3RzICovCiAgICAgICBhZHJbbmNoYXJzIC0gMV0g PSBMKCdUJyk7Ci0gICAgICBmb3IgKG91dGVyID0gbmNoYXJzOyBvdXRlciA+ PSBNQVggKDAsIG5jaGFycyAtIDEyOCk7IC0tb3V0ZXIpCisgICAgICBmb3Ig KG91dGVyID0gbmNoYXJzOyBvdXRlciA+PSBtYXgxMjg7IC0tb3V0ZXIpCiAJ ewogCSAgc2l6ZV90IGxlbjsKIApAQCAtMzg5LDcgKzM5OSw3IEBAIGRvX3Rl c3QgKHZvaWQpCiAJICAgICAgaWYgKFNUUk5DUFkgKGRlc3QsICZhZHJbb3V0 ZXJdLCBsZW4pICE9IGRlc3QKIAkJICB8fCBNRU1DTVAgKGRlc3QsICZhZHJb b3V0ZXJdLCBsZW4pICE9IDApCiAJCXsKLQkJICBwcmludGYgKCJvdXRlciAl cyBmbHVua2VkIGZvciBvdXRlciA9ICVkLCBsZW4gPSAlWmRcbiIsCisJCSAg cHJpbnRmICgib3V0ZXIgJXMgZmx1bmtlZCBmb3Igb3V0ZXIgPSAlenUsIGxl biA9ICV6dVxuIiwKIAkJCSAgU1RSSU5HSUZZIChTVFJOQ1BZKSwgb3V0ZXIs IGxlbik7CiAJCSAgcmVzdWx0ID0gMTsKIAkJfQpAQCAtMzk3LDkgKzQwNyw5 IEBAIGRvX3Rlc3QgKHZvaWQpCiAJfQogICAgICAgYWRyW25jaGFycyAtIDFd ID0gTCgnXDAnKTsKIAotICAgICAgZm9yIChvdXRlciA9IG5jaGFycyAtIDE7 IG91dGVyID49IE1BWCAoMCwgbmNoYXJzIC0gMTI4KTsgLS1vdXRlcikKKyAg ICAgIGZvciAob3V0ZXIgPSBuY2hhcnMgLSAxOyBvdXRlciA+PSBtYXgxMjg7 IC0tb3V0ZXIpCiAJewotCSAgZm9yIChpbm5lciA9IE1BWCAob3V0ZXIsIG5j aGFycyAtIDY0KTsgaW5uZXIgPCBuY2hhcnM7ICsraW5uZXIpCisJICBmb3Ig KGlubmVyID0gTUFYIChvdXRlciwgbmNoYXJzNjQpOyBpbm5lciA8IG5jaGFy czsgKytpbm5lcikKIAkgICAgewogCSAgICAgIHNpemVfdCBsZW47CiAKQEAg LTQxMyw4ICs0MjMsOCBAQCBkb190ZXN0ICh2b2lkKQogCQkgICAgICB8fCAo aW5uZXIgLSBvdXRlciA8IGxlbgogCQkJICAmJiBTVFJMRU4gKGRlc3QpICE9 IChpbm5lciAtIG91dGVyKSkpCiAJCSAgICB7Ci0JCSAgICAgIHByaW50ZiAo IiVzIGZsdW5rZWQgZm9yIG91dGVyID0gJWQsIGlubmVyID0gJWQsICIKLQkJ CSAgICAgICJsZW4gPSAlWmRcbiIsCisJCSAgICAgIHByaW50ZiAoIiVzIGZs dW5rZWQgZm9yIG91dGVyID0gJXp1LCBpbm5lciA9ICV6dSwgIgorCQkJICAg ICAgImxlbiA9ICV6dVxuIiwKIAkJCSAgICAgIFNUUklOR0lGWSAoU1RSTkNQ WSksIG91dGVyLCBpbm5lciwgbGVuKTsKIAkJICAgICAgcmVzdWx0ID0gMTsK IAkJICAgIH0KQEAgLTQyNCw4ICs0MzQsOCBAQCBkb190ZXN0ICh2b2lkKQog CQkgICAgICB8fCAoaW5uZXIgLSBvdXRlciA8IGxlbgogCQkJICAmJiBTVFJM RU4gKGRlc3QgKyAxKSAhPSAoaW5uZXIgLSBvdXRlcikpKQogCQkgICAgewot CQkgICAgICBwcmludGYgKCIlcysxIGZsdW5rZWQgZm9yIG91dGVyID0gJWQs IGlubmVyID0gJWQsICIKLQkJCSAgICAgICJsZW4gPSAlWmRcbiIsCisJCSAg ICAgIHByaW50ZiAoIiVzKzEgZmx1bmtlZCBmb3Igb3V0ZXIgPSAlenUsIGlu bmVyID0gJXp1LCAiCisJCQkgICAgICAibGVuID0gJXp1XG4iLAogCQkJICAg ICAgU1RSSU5HSUZZIChTVFJOQ1BZKSwgb3V0ZXIsIGlubmVyLCBsZW4pOwog CQkgICAgICByZXN1bHQgPSAxOwogCQkgICAgfQpAQCAtNDM2LDE1ICs0NDYs MTUgQEAgZG9fdGVzdCAodm9pZCkKIAl9CiAKICAgICAgIC8qIHN0cGNweS93 Y3BjcHkgdGVzdCAqLwotICAgICAgZm9yIChvdXRlciA9IG5jaGFycyAtIDE7 IG91dGVyID49IE1BWCAoMCwgbmNoYXJzIC0gMTI4KTsgLS1vdXRlcikKKyAg ICAgIGZvciAob3V0ZXIgPSBuY2hhcnMgLSAxOyBvdXRlciA+PSBtYXgxMjg7 IC0tb3V0ZXIpCiAJewotCSAgZm9yIChpbm5lciA9IE1BWCAob3V0ZXIsIG5j aGFycyAtIDY0KTsgaW5uZXIgPCBuY2hhcnM7ICsraW5uZXIpCisJICBmb3Ig KGlubmVyID0gTUFYIChvdXRlciwgbmNoYXJzNjQpOyBpbm5lciA8IG5jaGFy czsgKytpbm5lcikKIAkgICAgewogCSAgICAgIGFkcltpbm5lcl0gPSBMKCdc MCcpOwogCiAJICAgICAgaWYgKChTVFBDUFkgKGRlc3QsICZhZHJbb3V0ZXJd KSAtIGRlc3QpICE9IGlubmVyIC0gb3V0ZXIpCiAJCXsKLQkJICBwcmludGYg KCIlcyBmbHVua2VkIGZvciBvdXRlciA9ICVkLCBpbm5lciA9ICVkXG4iLAor CQkgIHByaW50ZiAoIiVzIGZsdW5rZWQgZm9yIG91dGVyID0gJXp1LCBpbm5l ciA9ICV6dVxuIiwKIAkJCSAgU1RSSU5HSUZZIChTVFBDUFkpLCBvdXRlciwg aW5uZXIpOwogCQkgIHJlc3VsdCA9IDE7CiAJCX0KQEAgLTQ1NSw3ICs0NjUs NyBAQCBkb190ZXN0ICh2b2lkKQogCiAgICAgICAvKiBzdHBuY3B5L3djcG5j cHkgdGVzdCAqLwogICAgICAgYWRyW25jaGFycyAtIDFdID0gTCgnVCcpOwot ICAgICAgZm9yIChvdXRlciA9IG5jaGFyczsgb3V0ZXIgPj0gTUFYICgwLCBu Y2hhcnMgLSAxMjgpOyAtLW91dGVyKQorICAgICAgZm9yIChvdXRlciA9IG5j aGFyczsgb3V0ZXIgPj0gbWF4MTI4OyAtLW91dGVyKQogCXsKIAkgIHNpemVf dCBsZW47CiAKQEAgLTQ2NCw3ICs0NzQsNyBAQCBkb190ZXN0ICh2b2lkKQog CSAgICAgIGlmIChTVFBOQ1BZIChkZXN0LCAmYWRyW291dGVyXSwgbGVuKSAh PSBkZXN0ICsgbGVuCiAJCSAgfHwgTUVNQ01QIChkZXN0LCAmYWRyW291dGVy XSwgbGVuKSAhPSAwKQogCQl7Ci0JCSAgcHJpbnRmICgib3V0ZXIgJXMgZmx1 bmtlZCBmb3Igb3V0ZXIgPSAlZCwgbGVuID0gJVpkXG4iLAorCQkgIHByaW50 ZiAoIm91dGVyICVzIGZsdW5rZWQgZm9yIG91dGVyID0gJXp1LCBsZW4gPSAl enVcbiIsCiAJCQkgIFNUUklOR0lGWSAoU1RQTkNQWSksIG91dGVyLCBsZW4p OwogCQkgIHJlc3VsdCA9IDE7CiAJCX0KQEAgLTQ3Miw5ICs0ODIsOSBAQCBk b190ZXN0ICh2b2lkKQogCX0KICAgICAgIGFkcltuY2hhcnMgLSAxXSA9IEwo J1wwJyk7CiAKLSAgICAgIGZvciAob3V0ZXIgPSBuY2hhcnMgLSAxOyBvdXRl ciA+PSBNQVggKDAsIG5jaGFycyAtIDEyOCk7IC0tb3V0ZXIpCisgICAgICBm b3IgKG91dGVyID0gbmNoYXJzIC0gMTsgb3V0ZXIgPj0gbWF4MTI4OyAtLW91 dGVyKQogCXsKLQkgIGZvciAobWlkZGxlID0gTUFYIChvdXRlciwgbmNoYXJz IC0gNjQpOyBtaWRkbGUgPCBuY2hhcnM7ICsrbWlkZGxlKQorCSAgZm9yICht aWRkbGUgPSBNQVggKG91dGVyLCBuY2hhcnM2NCk7IG1pZGRsZSA8IG5jaGFy czsgKyttaWRkbGUpCiAJICAgIHsKIAkgICAgICBhZHJbbWlkZGxlXSA9IEwo J1wwJyk7CiAKQEAgLTQ4Myw4ICs0OTMsOCBAQCBkb190ZXN0ICh2b2lkKQog CQkgIGlmICgoU1RQTkNQWSAoZGVzdCwgJmFkcltvdXRlcl0sIGlubmVyKSAt IGRlc3QpCiAJCSAgICAgICE9IE1JTiAoaW5uZXIsIG1pZGRsZSAtIG91dGVy KSkKIAkJICAgIHsKLQkJICAgICAgcHJpbnRmICgiJXMgZmx1bmtlZCBmb3Ig b3V0ZXIgPSAlZCwgbWlkZGxlID0gJWQsICIKLQkJCSAgICAgICJpbm5lciA9 ICVkXG4iLAorCQkgICAgICBwcmludGYgKCIlcyBmbHVua2VkIGZvciBvdXRl ciA9ICV6dSwgbWlkZGxlID0gJXp1LCAiCisJCQkgICAgICAiaW5uZXIgPSAl enVcbiIsCiAJCQkgICAgICBTVFJJTkdJRlkgKFNUUE5DUFkpLCBvdXRlciwg bWlkZGxlLCBpbm5lcik7CiAJCSAgICAgIHJlc3VsdCA9IDE7CiAJCSAgICB9 CkBAIC00OTUsMjEgKzUwNSwyMSBAQCBkb190ZXN0ICh2b2lkKQogCX0KIAog ICAgICAgLyogbWVtY3B5L3dtZW1jcHkgdGVzdCAqLwotICAgICAgZm9yIChv dXRlciA9IG5jaGFyczsgb3V0ZXIgPj0gTUFYICgwLCBuY2hhcnMgLSAxMjgp OyAtLW91dGVyKQorICAgICAgZm9yIChvdXRlciA9IG5jaGFyczsgb3V0ZXIg Pj0gbWF4MTI4OyAtLW91dGVyKQogCWZvciAoaW5uZXIgPSAwOyBpbm5lciA8 IG5jaGFycyAtIG91dGVyOyArK2lubmVyKQogCSAgaWYgKE1FTUNQWSAoZGVz dCwgJmFkcltvdXRlcl0sIGlubmVyKSAhPSAgZGVzdCkKIAkgICAgewotCSAg ICAgIHByaW50ZiAoIiVzIGZsdW5rZWQgZm9yIG91dGVyID0gJWQsIGlubmVy ID0gJWRcbiIsCisJICAgICAgcHJpbnRmICgiJXMgZmx1bmtlZCBmb3Igb3V0 ZXIgPSAlenUsIGlubmVyID0gJXp1XG4iLAogCQkgICAgICBTVFJJTkdJRlkg KE1FTUNQWSksIG91dGVyLCBpbm5lcik7CiAJICAgICAgcmVzdWx0ID0gMTsK IAkgICAgfQogCiAgICAgICAvKiBtZW1wY3B5L3dtZW1wY3B5IHRlc3QgKi8K LSAgICAgIGZvciAob3V0ZXIgPSBuY2hhcnM7IG91dGVyID49IE1BWCAoMCwg bmNoYXJzIC0gMTI4KTsgLS1vdXRlcikKKyAgICAgIGZvciAob3V0ZXIgPSBu Y2hhcnM7IG91dGVyID49IG1heDEyODsgLS1vdXRlcikKIAlmb3IgKGlubmVy ID0gMDsgaW5uZXIgPCBuY2hhcnMgLSBvdXRlcjsgKytpbm5lcikKIAkgIGlm IChNRU1QQ1BZIChkZXN0LCAmYWRyW291dGVyXSwgaW5uZXIpICE9ICBkZXN0 ICsgaW5uZXIpCiAJICAgIHsKLQkgICAgICBwcmludGYgKCIlcyBmbHVua2Vk IGZvciBvdXRlciA9ICVkLCBpbm5lciA9ICVkXG4iLAorCSAgICAgIHByaW50 ZiAoIiVzIGZsdW5rZWQgZm9yIG91dGVyID0gJXp1LCBpbm5lciA9ICV6dVxu IiwKIAkJICAgICAgU1RSSU5HSUZZIChNRU1QQ1BZKSwgb3V0ZXIsIGlubmVy KTsKIAkgICAgICByZXN1bHQgPSAxOwogCSAgICB9CkBAIC01MTgsMTUgKzUy OCwxNSBAQCBkb190ZXN0ICh2b2lkKQogI2lmbmRlZiBXQ1NURVNUCiAgICAg ICAvKiBtZW1jY3B5IHRlc3QgKi8KICAgICAgIG1lbXNldCAoYWRyLCAnXDAn LCBuY2hhcnMpOwotICAgICAgZm9yIChvdXRlciA9IG5jaGFyczsgb3V0ZXIg Pj0gTUFYICgwLCBuY2hhcnMgLSAxMjgpOyAtLW91dGVyKQorICAgICAgZm9y IChvdXRlciA9IG5jaGFyczsgb3V0ZXIgPj0gbWF4MTI4OyAtLW91dGVyKQog CWZvciAoaW5uZXIgPSAwOyBpbm5lciA8IG5jaGFycyAtIG91dGVyOyArK2lu bmVyKQogCSAgaWYgKG1lbWNjcHkgKGRlc3QsICZhZHJbb3V0ZXJdLCBMKCdc MScpLCBpbm5lcikgIT0gTlVMTCkKIAkgICAgewotCSAgICAgIHByaW50ZiAo Im1lbWNjcHkgZmx1bmtlZCBmdWxsIGNvcHkgZm9yIG91dGVyID0gJWQsIGlu bmVyID0gJWRcbiIsCisJICAgICAgcHJpbnRmICgibWVtY2NweSBmbHVua2Vk IGZ1bGwgY29weSBmb3Igb3V0ZXIgPSAlenUsIGlubmVyID0gJXp1XG4iLAog CQkgICAgICBvdXRlciwgaW5uZXIpOwogCSAgICAgIHJlc3VsdCA9IDE7CiAJ ICAgIH0KLSAgICAgIGZvciAob3V0ZXIgPSBuY2hhcnMgLSAxOyBvdXRlciA+ PSBNQVggKDAsIG5jaGFycyAtIDEyOCk7IC0tb3V0ZXIpCisgICAgICBmb3Ig KG91dGVyID0gbmNoYXJzIC0gMTsgb3V0ZXIgPj0gbWF4MTI4OyAtLW91dGVy KQogCWZvciAobWlkZGxlID0gMDsgbWlkZGxlIDwgbmNoYXJzIC0gb3V0ZXI7 ICsrbWlkZGxlKQogCSAgewogCSAgICBtZW1zZXQgKGRlc3QsIEwoJ1wyJyks IG1pZGRsZSArIDEpOwpAQCAtNTM4LDE0ICs1NDgsMTQgQEAgZG9fdGVzdCAo dm9pZCkKIAkJICAgICE9ICBkZXN0ICsgaW5uZXIgKyAxKQogCQkgIHsKIAkJ ICAgIHByaW50ZiAoIlwKLW1lbWNjcHkgZmx1bmtlZCBwYXJ0aWFsIGNvcHkg Zm9yIG91dGVyID0gJWQsIG1pZGRsZSA9ICVkLCBpbm5lciA9ICVkXG4iLAor bWVtY2NweSBmbHVua2VkIHBhcnRpYWwgY29weSBmb3Igb3V0ZXIgPSAlenUs IG1pZGRsZSA9ICV6dSwgaW5uZXIgPSAlenVcbiIsCiAJCQkgICAgb3V0ZXIs IG1pZGRsZSwgaW5uZXIpOwogCQkgICAgcmVzdWx0ID0gMTsKIAkJICB9CiAJ CWVsc2UgaWYgKGRlc3RbaW5uZXIgKyAxXSAhPSBMKCdcMicpKQogCQkgIHsK IAkJICAgIHByaW50ZiAoIlwKLW1lbWNjcHkgY29waWVkIHRvbyBtdWNoIGZv ciBvdXRlciA9ICVkLCBtaWRkbGUgPSAlZCwgaW5uZXIgPSAlZFxuIiwKK21l bWNjcHkgY29waWVkIHRvbyBtdWNoIGZvciBvdXRlciA9ICV6dSwgbWlkZGxl ID0gJXp1LCBpbm5lciA9ICV6dVxuIiwKIAkJCSAgICBvdXRlciwgbWlkZGxl LCBpbm5lcik7CiAJCSAgICByZXN1bHQgPSAxOwogCQkgIH0KLS0gCjIuMTMu NQoK --001a113ded36d0685805574b8363--