From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 70890 invoked by alias); 20 Sep 2017 16:45:40 -0000 Mailing-List: contact fortran-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: fortran-owner@gcc.gnu.org Received: (qmail 70867 invoked by uid 89); 20 Sep 2017 16:45:40 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-5.2 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_2,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy=marco, pp, Marco, lying X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-yw0-f177.google.com Received: from mail-yw0-f177.google.com (HELO mail-yw0-f177.google.com) (209.85.161.177) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 20 Sep 2017 16:45:37 +0000 Received: by mail-yw0-f177.google.com with SMTP id o143so2302796ywd.12; Wed, 20 Sep 2017 09:45:36 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=UyXwk1ILloVZsTUZ0BlGt7YjRYKWzzwt+p77bJzCy9E=; b=ePFjV28mr00GGepVIVIbKPZx3G6g4Aj8NXgxhTBqFKE97ZlAsFX6Kj5bZsoL5ti+4T /zJpLoz9vaHYLJrT/wFclsvlzBwYjgoW0XAiSHMCk1clKJY+PaB6Bw00KVgwjtervmvV 4Tjz3zOswdtxMDVRCr7Ul4TdAmtlQrK7pNiYz+NhxknA3h3HHUCTx3bp81Z1IlM0aFuH fMMeGD4yDi9aCZwjqC7CLpUYUNnDs08qPJUymc+N/3fVn6BznVzka/0Gt7uSpc3YTNxQ VVo4CUYfEx8EMrg5hs4kilNgRuIVtNCqC7jiMfYLydOLqpqjAAj0vto8B4YHXLUlxz5N OUtg== X-Gm-Message-State: AHPjjUjE5RJG3gA89621/YPWLuaONLKB+se4/lZmpi58ivI/YP/nfH0M kbOrwsBZOCgSB6FdOfb1vW7/hftUd3U212gjJwXM3A== X-Google-Smtp-Source: AOwi7QAcyyic1PB7pfa82CoMo4YRS6SsMNsxrjBu6n/Pu3otp6GlE9rNuCrcHXLmlEkKIjEm+bYDUXHAprWhvI7ssS4= X-Received: by 10.37.36.3 with SMTP id k3mr4128959ybk.263.1505925934991; Wed, 20 Sep 2017 09:45:34 -0700 (PDT) MIME-Version: 1.0 Received: by 10.129.145.147 with HTTP; Wed, 20 Sep 2017 09:45:32 -0700 (PDT) From: Paul Richard Thomas Date: Wed, 20 Sep 2017 16:45:00 -0000 Message-ID: Subject: [Patch, fortran] Bug fixes, including regressions, for the associate construct To: "fortran@gcc.gnu.org" , gcc-patches Content-Type: multipart/mixed; boundary="001a113cd39c6a26030559a1b4bc" X-IsSubscribed: yes X-SW-Source: 2017-09/txt/msg00069.txt.bz2 --001a113cd39c6a26030559a1b4bc Content-Type: text/plain; charset="UTF-8" Content-length: 2775 In the last update to the Parameterized Derived Types implementation, I fixed PR60483 as a side effect. I then checked all the ASSOCIATE bugs and noted that I was responsible for a number of regressions due to a patch that I applied last year. I determined to fix them and found that I couldn't stop. The PRs in the ChangeLogs are the low(ish) lying fruit and the changes are fairly obvious or are described in the ChangeLog or the comments. Bootstrapped and regtested on FC23/x86_64 - OK for trunk and later on 7-branch? Remaining, in increasing order, of difficulty are: PR77296 and PR60458: The deferred string length is getting mangled by the associate construct. A bit of work in trans-stmt.c is needed. Note that the chunk in resolve.c(deferred_requirements) gets these PRs through the front end. PR68546: The non-contiguous selector needs packing and unpacking. PR56386 - here, a contained function is used as the selector. It cannot be resolved in primary.c because it forces the function symbol to be marked as external. In consequence, the selector name does not get a type. I have no idea, at present, how to fix this without blowing subsequent parsing within the associate block out of the water. Cheers Paul 2017-09-20 Paul Thomas PR fortran/52832 * match.c (gfc_match_associate): Before failing the association try again, allowing a proc pointer selector. PR fortran/80120 PR fortran/81903 PR fortran/82121 * primary.c (gfc_match_varspec): Introduce 'tgt_expr', which points to the associate selector, if any. Go through selector references, after resolution for variables, to catch any full or section array references. If a class associate name does not have the same declared type as the selector, resolve the selector and copy the declared type to the associate name. Before throwing a no implicit type error, resolve all allowed selector expressions, and copy the resulting typespec. PR fortran/67543 * resolve.c (resolve_assoc_var): Selector must cannot be the NULL expression and it must have a type. PR fortran/78152 * resolve.c (resolve_symbol): Allow associate names to be coarrays. 2017-09-20 Paul Thomas PR fortran/78512 * gfortran.dg/associate_26.f90 : New test. PR fortran/80120 * gfortran.dg/associate_27.f90 : New test. PR fortran/81903 * gfortran.dg/associate_28.f90 : New test. PR fortran/82121 * gfortran.dg/associate_29.f90 : New test. PR fortran/67543 * gfortran.dg/associate_30.f90 : New test. PR fortran/52832 * gfortran.dg/associate_31.f90 : New test. -- "If you can't explain it simply, you don't understand it well enough" - Albert Einstein --001a113cd39c6a26030559a1b4bc Content-Type: text/plain; charset="US-ASCII"; name="submit.diff" Content-Disposition: attachment; filename="submit.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j7t9eywj0 Content-length: 18390 SW5kZXg6IGdjYy9mb3J0cmFuL21hdGNoLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQoqKiogZ2NjL2ZvcnRyYW4vbWF0Y2guYwkocmV2aXNpb24gMjUyODkz KQotLS0gZ2NjL2ZvcnRyYW4vbWF0Y2guYwkod29ya2luZyBjb3B5KQoqKioq KioqKioqKioqKiogZ2ZjX21hdGNoX2Fzc29jaWF0ZSAodm9pZCkKKioqIDE4 ODUsMTg5MiAqKioqCiAgICAgICAgaWYgKGdmY19tYXRjaCAoIiAlbiA9PiAl ZSIsIG5ld0Fzc29jLT5uYW1lLCAmbmV3QXNzb2MtPnRhcmdldCkKICAJICAg ICE9IE1BVENIX1lFUykKICAJewohIAkgIGdmY19lcnJvciAoIkV4cGVjdGVk IGFzc29jaWF0aW9uIGF0ICVDIik7CiEgCSAgZ290byBhc3NvY0xpc3RFcnJv cjsKICAJfQogICAgICAgIG5ld0Fzc29jLT53aGVyZSA9IGdmY19jdXJyZW50 X2xvY3VzOwogIAotLS0gMTg4NSwxODk5IC0tLS0KICAgICAgICBpZiAoZ2Zj X21hdGNoICgiICVuID0+ICVlIiwgbmV3QXNzb2MtPm5hbWUsICZuZXdBc3Nv Yy0+dGFyZ2V0KQogIAkgICAgIT0gTUFUQ0hfWUVTKQogIAl7CiEgCSAgLyog SGF2ZSBhbm90aGVyIGdvLCBhbGxvd2luZyBmb3IgcHJvY2VkdXJlIHBvaW50 ZXIgc2VsZWN0b3JzLiAgKi8KISAJICBnZmNfbWF0Y2hpbmdfcHJvY3B0cl9h c3NpZ25tZW50ID0gMTsKISAJICBpZiAoZ2ZjX21hdGNoICgiICVuID0+ICVl IiwgbmV3QXNzb2MtPm5hbWUsICZuZXdBc3NvYy0+dGFyZ2V0KQohICAJICAg ICAgIT0gTUFUQ0hfWUVTKQohICAJICAgIHsKISAgCSAgICAgIGdmY19lcnJv ciAoIkV4cGVjdGVkIGFzc29jaWF0aW9uIGF0ICVDIik7CiEgIAkgICAgICBn b3RvIGFzc29jTGlzdEVycm9yOwohICAJICAgIH0KISAJICBnZmNfbWF0Y2hp bmdfcHJvY3B0cl9hc3NpZ25tZW50ID0gMDsKICAJfQogICAgICAgIG5ld0Fz c29jLT53aGVyZSA9IGdmY19jdXJyZW50X2xvY3VzOwogIApJbmRleDogZ2Nj L2ZvcnRyYW4vcHJpbWFyeS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioq IGdjYy9mb3J0cmFuL3ByaW1hcnkuYwkocmV2aXNpb24gMjUyODk0KQotLS0g Z2NjL2ZvcnRyYW4vcHJpbWFyeS5jCSh3b3JraW5nIGNvcHkpCioqKioqKioq KioqKioqKiBnZmNfbWF0Y2hfdmFyc3BlYyAoZ2ZjX2V4cHIgKnByaW1hcnks IGluCioqKiAxOTM3LDE5NDIgKioqKgotLS0gMTkzNywxOTQzIC0tLS0KICAg IGdmY19yZWYgKnN1YnN0cmluZywgKnRhaWwsICp0bXA7CiAgICBnZmNfY29t cG9uZW50ICpjb21wb25lbnQ7CiAgICBnZmNfc3ltYm9sICpzeW0gPSBwcmlt YXJ5LT5zeW10cmVlLT5uLnN5bTsKKyAgIGdmY19leHByICp0Z3RfZXhwciA9 IE5VTEw7CiAgICBtYXRjaCBtOwogICAgYm9vbCB1bmtub3duOwogICAgY2hh ciBzZXA7CioqKioqKioqKioqKioqKiBnZmNfbWF0Y2hfdmFyc3BlYyAoZ2Zj X2V4cHIgKnByaW1hcnksIGluCioqKiAxOTY1LDE5NzAgKioqKgotLS0gMTk2 NiwxOTc0IC0tLS0KICAJfQogICAgICB9CiAgCisgICBpZiAoc3ltLT5hc3Nv YyAmJiBzeW0tPmFzc29jLT50YXJnZXQpCisgICAgIHRndF9leHByID0gc3lt LT5hc3NvYy0+dGFyZ2V0OworIAogICAgLyogRm9yIGFzc29jaWF0ZSBuYW1l cywgd2UgbWF5IG5vdCB5ZXQga25vdyB3aGV0aGVyIHRoZXkgYXJlIGFycmF5 cyBvciBub3QuCiAgICAgICBJZiB0aGUgc2VsZWN0b3IgZXhwcmVzc2lvbiBp cyB1bmFtYmlndW91c2x5IGFuIGFycmF5OyBlZy4gYSBmdWxsIGFycmF5CiAg ICAgICBvciBhbiBhcnJheSBzZWN0aW9uLCB0aGVuIHRoZSBhc3NvY2lhdGUg bmFtZSBtdXN0IGJlIGFuIGFycmF5IGFuZCB3ZSBjYW4KKioqKioqKioqKioq KioqIGdmY19tYXRjaF92YXJzcGVjIChnZmNfZXhwciAqcHJpbWFyeSwgaW4K KioqIDE5NzYsMjAwMSAqKioqCiAgICAgICAgJiYgc3ltLT50cy50eXBlICE9 IEJUX0NMQVNTCiAgICAgICAgJiYgIXN5bS0+YXR0ci5kaW1lbnNpb24pCiAg ICAgIHsKISAgICAgICBpZiAoKCFzeW0tPmFzc29jLT5kYW5nbGluZwohIAkg ICAmJiBzeW0tPmFzc29jLT50YXJnZXQKISAJICAgJiYgc3ltLT5hc3NvYy0+ dGFyZ2V0LT5yZWYKISAJICAgJiYgc3ltLT5hc3NvYy0+dGFyZ2V0LT5yZWYt PnR5cGUgPT0gUkVGX0FSUkFZCiEgCSAgICYmIChzeW0tPmFzc29jLT50YXJn ZXQtPnJlZi0+dS5hci50eXBlID09IEFSX0ZVTEwKISAJICAgICAgIHx8IHN5 bS0+YXNzb2MtPnRhcmdldC0+cmVmLT51LmFyLnR5cGUgPT0gQVJfU0VDVElP TikpCiEgCSAgfHwKISAJICAgKCEoc3ltLT5hc3NvYy0+ZGFuZ2xpbmcgfHwg c3ltLT50cy50eXBlID09IEJUX0NIQVJBQ1RFUikKISAJICAgICYmIHN5bS0+ YXNzb2MtPnN0CiEgCSAgICYmIHN5bS0+YXNzb2MtPnN0LT5uLnN5bQohIAkg ICAgJiYgc3ltLT5hc3NvYy0+c3QtPm4uc3ltLT5hdHRyLmRpbWVuc2lvbiA9 PSAwKSkKICAJewohICAgICBzeW0tPmF0dHIuZGltZW5zaW9uID0gMTsKISAJ ICBpZiAoc3ltLT5hcyA9PSBOVUxMICYmIHN5bS0+YXNzb2MKICAJICAgICAg JiYgc3ltLT5hc3NvYy0+c3QKICAJICAgICAgJiYgc3ltLT5hc3NvYy0+c3Qt Pm4uc3ltCiAgCSAgICAgICYmIHN5bS0+YXNzb2MtPnN0LT5uLnN5bS0+YXMp CiAgCSAgICBzeW0tPmFzID0gZ2ZjX2NvcHlfYXJyYXlfc3BlYyAoc3ltLT5h c3NvYy0+c3QtPm4uc3ltLT5hcyk7CiAgCX0KICAgICAgfQogIAogICAgaWYg KChlcXVpdl9mbGFnICYmIGdmY19wZWVrX2FzY2lpX2NoYXIgKCkgPT0gJygn KQogICAgICAgIHx8IGdmY19wZWVrX2FzY2lpX2NoYXIgKCkgPT0gJ1snIHx8 IHN5bS0+YXR0ci5jb2RpbWVuc2lvbgotLS0gMTk4MCwyMDIyIC0tLS0KICAg ICAgICAmJiBzeW0tPnRzLnR5cGUgIT0gQlRfQ0xBU1MKICAgICAgICAmJiAh c3ltLT5hdHRyLmRpbWVuc2lvbikKICAgICAgewohICAgICAgIGdmY19yZWYg KnJlZiA9IE5VTEw7CiEgCiEgICAgICAgaWYgKCFzeW0tPmFzc29jLT5kYW5n bGluZyAmJiB0Z3RfZXhwcikKISAJewohIAkgICBpZiAodGd0X2V4cHItPmV4 cHJfdHlwZSA9PSBFWFBSX1ZBUklBQkxFKQohIAkgICAgIGdmY19yZXNvbHZl X2V4cHIgKHRndF9leHByKTsKISAKISAJICAgcmVmID0gdGd0X2V4cHItPnJl ZjsKISAJICAgZm9yICg7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQohIAkgICAg ICBpZiAocmVmLT50eXBlID09IFJFRl9BUlJBWQohIAkJICAmJiAocmVmLT51 LmFyLnR5cGUgPT0gQVJfRlVMTAohIAkJICAgICAgfHwgcmVmLT51LmFyLnR5 cGUgPT0gQVJfU0VDVElPTikpCiEgCQlicmVhazsKISAJfQohIAohICAgICAg IGlmIChyZWYgfHwgKCEoc3ltLT5hc3NvYy0+ZGFuZ2xpbmcgfHwgc3ltLT50 cy50eXBlID09IEJUX0NIQVJBQ1RFUikKISAJCSAgJiYgc3ltLT5hc3NvYy0+ c3QKISAJCSAgJiYgc3ltLT5hc3NvYy0+c3QtPm4uc3ltCiEgCQkgICYmIHN5 bS0+YXNzb2MtPnN0LT5uLnN5bS0+YXR0ci5kaW1lbnNpb24gPT0gMCkpCiAg CXsKISAJICBzeW0tPmF0dHIuZGltZW5zaW9uID0gMTsKISAJICBpZiAoc3lt LT5hcyA9PSBOVUxMCiAgCSAgICAgICYmIHN5bS0+YXNzb2MtPnN0CiAgCSAg ICAgICYmIHN5bS0+YXNzb2MtPnN0LT5uLnN5bQogIAkgICAgICAmJiBzeW0t PmFzc29jLT5zdC0+bi5zeW0tPmFzKQogIAkgICAgc3ltLT5hcyA9IGdmY19j b3B5X2FycmF5X3NwZWMgKHN5bS0+YXNzb2MtPnN0LT5uLnN5bS0+YXMpOwog IAl9CiAgICAgIH0KKyAgIGVsc2UgaWYgKHN5bS0+dHMudHlwZSA9PSBCVF9D TEFTUworIAkgICAmJiB0Z3RfZXhwcgorIAkgICAmJiB0Z3RfZXhwci0+ZXhw cl90eXBlID09IEVYUFJfVkFSSUFCTEUKKyAJICAgJiYgc3ltLT50cy51LmRl cml2ZWQgIT0gdGd0X2V4cHItPnRzLnUuZGVyaXZlZCkKKyAgICAgeworICAg ICAgIGdmY19yZXNvbHZlX2V4cHIgKHRndF9leHByKTsKKyAgICAgICBpZiAo dGd0X2V4cHItPnJhbmspCisgCXN5bS0+dHMudS5kZXJpdmVkID0gdGd0X2V4 cHItPnRzLnUuZGVyaXZlZDsKKyAgICAgfQogIAogICAgaWYgKChlcXVpdl9m bGFnICYmIGdmY19wZWVrX2FzY2lpX2NoYXIgKCkgPT0gJygnKQogICAgICAg IHx8IGdmY19wZWVrX2FzY2lpX2NoYXIgKCkgPT0gJ1snIHx8IHN5bS0+YXR0 ci5jb2RpbWVuc2lvbgoqKioqKioqKioqKioqKiogZ2ZjX21hdGNoX3ZhcnNw ZWMgKGdmY19leHByICpwcmltYXJ5LCBpbgoqKiogMjA1NSwyMDY4ICoqKioK ICAgICAgICAmJiBnZmNfZ2V0X2RlZmF1bHRfdHlwZSAoc3ltLT5uYW1lLCBz eW0tPm5zKS0+dHlwZSA9PSBCVF9ERVJJVkVEKQogICAgICBnZmNfc2V0X2Rl ZmF1bHRfdHlwZSAoc3ltLCAwLCBzeW0tPm5zKTsKICAKISAgIC8qIEJlZm9y ZSB0aHJvd2luZyBhbiBlcnJvciB0cnkgcmVzb2x2aW5nIHRoZSB0YXJnZXQg ZXhwcmVzc2lvbiBvZgohICAgICAgYXNzb2NpYXRlIG5hbWVzLiBUaGlzIHNo b3VsZCByZXNvbHZlIGZ1bmN0aW9uIGNhbGxzLCBmb3IgZXhhbXBsZS4gICov CiAgICBpZiAoc3ltLT50cy50eXBlID09IEJUX1VOS05PV04gJiYgbSA9PSBN QVRDSF9ZRVMpCiAgICAgIHsKISAgICAgICBpZiAoc3ltLT5hc3NvYyAmJiBz eW0tPmFzc29jLT50YXJnZXQpCiAgCXsKISAJICBnZmNfcmVzb2x2ZV9leHBy IChzeW0tPmFzc29jLT50YXJnZXQpOwohIAkgIHN5bS0+dHMgPSBzeW0tPmFz c29jLT50YXJnZXQtPnRzOwogIAl9CiAgCiAgICAgICAgaWYgKHN5bS0+dHMu dHlwZSA9PSBCVF9VTktOT1dOKQotLS0gMjA3NiwyMDk5IC0tLS0KICAgICAg ICAmJiBnZmNfZ2V0X2RlZmF1bHRfdHlwZSAoc3ltLT5uYW1lLCBzeW0tPm5z KS0+dHlwZSA9PSBCVF9ERVJJVkVEKQogICAgICBnZmNfc2V0X2RlZmF1bHRf dHlwZSAoc3ltLCAwLCBzeW0tPm5zKTsKICAKISAgIC8qIFNlZSBpZiB0aGVy ZSBpcyBhIHVzYWJsZSB0eXBlc3BlYyBpbiB0aGUgIm5vIElNUExJQ0lUIHR5 cGUiIGVycm9yLiAgKi8KICAgIGlmIChzeW0tPnRzLnR5cGUgPT0gQlRfVU5L Tk9XTiAmJiBtID09IE1BVENIX1lFUykKICAgICAgewohICAgICAgIGJvb2wg cGVybWlzc2libGU7CiEgCiEgICAgICAgLyogVGhlc2UgdGFyZ2V0IGV4cHJl c3Npb25zIGNhbiBnZSByZXNvbHZlZCBhdCBhbnkgdGltZS4gICovCiEgICAg ICAgcGVybWlzc2libGUgPSB0Z3RfZXhwciAmJiB0Z3RfZXhwci0+c3ltdHJl ZSAmJiB0Z3RfZXhwci0+c3ltdHJlZS0+bi5zeW0KISAJCSAgICAmJiAodGd0 X2V4cHItPnN5bXRyZWUtPm4uc3ltLT5hdHRyLnVzZV9hc3NvYwohIAkJCXx8 IHRndF9leHByLT5zeW10cmVlLT5uLnN5bS0+YXR0ci5ob3N0X2Fzc29jCiEg CQkJfHwgdGd0X2V4cHItPnN5bXRyZWUtPm4uc3ltLT5hdHRyLmlmX3NvdXJj ZQohIAkJCQkJCQkJPT0gSUZTUkNfREVDTCk7CiEgICAgICAgcGVybWlzc2li bGUgPSBwZXJtaXNzaWJsZQohIAkJICAgIHx8ICh0Z3RfZXhwciAmJiB0Z3Rf ZXhwci0+ZXhwcl90eXBlID09IEVYUFJfT1ApOwohIAohICAgICAgIGlmIChw ZXJtaXNzaWJsZSkKICAJewohIAkgIGdmY19yZXNvbHZlX2V4cHIgKHRndF9l eHByKTsKISAJICBzeW0tPnRzID0gdGd0X2V4cHItPnRzOwogIAl9CiAgCiAg ICAgICAgaWYgKHN5bS0+dHMudHlwZSA9PSBCVF9VTktOT1dOKQpJbmRleDog Z2NjL2ZvcnRyYW4vcmVzb2x2ZS5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KioqIGdjYy9mb3J0cmFuL3Jlc29sdmUuYwkocmV2aXNpb24gMjUyODk0KQot LS0gZ2NjL2ZvcnRyYW4vcmVzb2x2ZS5jCSh3b3JraW5nIGNvcHkpCioqKioq KioqKioqKioqKiByZXNvbHZlX2Fzc29jX3ZhciAoZ2ZjX3N5bWJvbCogc3lt LCBib29sCioqKiA4Mzk2LDg0MDYgKioqKgotLS0gODM5Niw4NDE4IC0tLS0K ICAJc3ltLT5hdHRyLnN1YnJlZl9hcnJheV9wb2ludGVyID0gMTsKICAgICAg fQogIAorICAgaWYgKHRhcmdldC0+ZXhwcl90eXBlID09IEVYUFJfTlVMTCkK KyAgICAgeworICAgICAgIGdmY19lcnJvciAoIlNlbGVjdG9yIGF0ICVMIGNh bm5vdCBiZSBOVUxMKCkiLCAmdGFyZ2V0LT53aGVyZSk7CisgICAgICAgcmV0 dXJuOworICAgICB9CisgICBlbHNlIGlmICh0YXJnZXQtPnRzLnR5cGUgPT0g QlRfVU5LTk9XTikKKyAgICAgeworICAgICAgIGdmY19lcnJvciAoIlNlbGVj dG9yIGF0ICVMIGhhcyBubyB0eXBlIiwgJnRhcmdldC0+d2hlcmUpOworICAg ICAgIHJldHVybjsKKyAgICAgfQorIAogICAgLyogR2V0IHR5cGUgaWYgdGhp cyB3YXMgbm90IGFscmVhZHkgc2V0LiAgTm90ZSB0aGF0IGl0IGNhbiBiZQog ICAgICAgc29tZSBvdGhlciB0eXBlIHRoYW4gdGhlIHRhcmdldCBpbiBjYXNl IHRoaXMgaXMgYSBTRUxFQ1QgVFlQRQogICAgICAgc2VsZWN0b3IhICBTbyB3 ZSBtdXN0IG5vdCB1cGRhdGUgd2hlbiB0aGUgdHlwZSBpcyBhbHJlYWR5IHRo ZXJlLiAgKi8KICAgIGlmIChzeW0tPnRzLnR5cGUgPT0gQlRfVU5LTk9XTikK ICAgICAgc3ltLT50cyA9IHRhcmdldC0+dHM7CisgCiAgICBnY2NfYXNzZXJ0 IChzeW0tPnRzLnR5cGUgIT0gQlRfVU5LTk9XTik7CiAgCiAgICAvKiBTZWUg aWYgdGhpcyBpcyBhIHZhbGlkIGFzc29jaWF0aW9uLXRvLXZhcmlhYmxlLiAg Ki8KKioqKioqKioqKioqKioqIGRlZmVycmVkX3JlcXVpcmVtZW50cyAoZ2Zj X3N5bWJvbCAqc3ltKQoqKiogMTE5MjYsMTE5MzEgKioqKgotLS0gMTE5Mzgs MTE5NDQgLS0tLQogICAgaWYgKHN5bS0+dHMuZGVmZXJyZWQKICAgICAgICAm JiAhKHN5bS0+YXR0ci5wb2ludGVyCiAgCSAgIHx8IHN5bS0+YXR0ci5hbGxv Y2F0YWJsZQorIAkgICB8fCBzeW0tPmF0dHIuYXNzb2NpYXRlX3ZhcgogIAkg ICB8fCBzeW0tPmF0dHIub21wX3Vkcl9hcnRpZmljaWFsX3ZhcikpCiAgICAg IHsKICAgICAgICBnZmNfZXJyb3IgKCJFbnRpdHkgJXFzIGF0ICVMIGhhcyBh IGRlZmVycmVkIHR5cGUgcGFyYW1ldGVyIGFuZCAiCioqKioqKioqKioqKioq KiByZXNvbHZlX3N5bWJvbCAoZ2ZjX3N5bWJvbCAqc3ltKQoqKiogMTQ3NjMs MTQ3NjggKioqKgotLS0gMTQ3NzYsMTQ3ODIgLS0tLQogICAgaWYgKGNsYXNz X2F0dHIuY29kaW1lbnNpb24KICAgICAgICAmJiAhKGNsYXNzX2F0dHIuYWxs b2NhdGFibGUgfHwgc3ltLT5hdHRyLmR1bW15IHx8IHN5bS0+YXR0ci5zYXZl CiAgCSAgIHx8IHN5bS0+YXR0ci5zZWxlY3RfdHlwZV90ZW1wb3JhcnkKKyAJ ICAgfHwgc3ltLT5hdHRyLmFzc29jaWF0ZV92YXIKICAJICAgfHwgKHN5bS0+ bnMtPnNhdmVfYWxsICYmICFzeW0tPmF0dHIuYXV0b21hdGljKQogIAkgICB8 fCBzeW0tPm5zLT5wcm9jX25hbWUtPmF0dHIuZmxhdm9yID09IEZMX01PRFVM RQogIAkgICB8fCBzeW0tPm5zLT5wcm9jX25hbWUtPmF0dHIuaXNfbWFpbl9w cm9ncmFtCkluZGV4OiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2Fzc29j aWF0ZV8yNi5mOTAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL3Rl c3RzdWl0ZS9nZm9ydHJhbi5kZy9hc3NvY2lhdGVfMjYuZjkwCShub25leGlz dGVudCkKLS0tIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvYXNzb2NpYXRl XzI2LmY5MAkod29ya2luZyBjb3B5KQoqKioqKioqKioqKioqKioKKioqIDAg KioqKgotLS0gMSwxNSAtLS0tCisgISB7IGRnLWRvIGNvbXBpbGUgfQorICEg eyBkZy1vcHRpb25zICItZmNvYXJyYXk9c2luZ2xlIiB9CisgIQorICEgVGVz dCB0aGUgZml4IGZvciBQUjc4MTUyCisgIQorICEgQ29udHJpYnV0ZWQgYnkg PHBoeXNpa2VyQHRvYXN0Mi5uZXQ+CisgIQorIHByb2dyYW0gY29fYXNzb2MK KyAgIGltcGxpY2l0IG5vbmUKKyAgIGludGVnZXIsIHBhcmFtZXRlciA6OiBw ID0gNQorICAgcmVhbCwgYWxsb2NhdGFibGUgOjogYSg6LDopWzosOl0KKyAg IGFsbG9jYXRlIChhKHAscClbMiwqXSkKKyAgICAgYXNzb2NpYXRlIChpID0+ IGEoMTpwLCAxOnApKQorICAgZW5kIGFzc29jaWF0ZQorIGVuZCBwcm9ncmFt IGNvX2Fzc29jCkluZGV4OiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2Fz c29jaWF0ZV8yNy5mOTAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2Nj L3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9hc3NvY2lhdGVfMjcuZjkwCShub25l eGlzdGVudCkKLS0tIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvYXNzb2Np YXRlXzI3LmY5MAkod29ya2luZyBjb3B5KQoqKioqKioqKioqKioqKioKKioq IDAgKioqKgotLS0gMSwyMyAtLS0tCisgISB7IGRnLWRvIHJ1biB9CisgIQor ICEgVGVzdCB0aGUgZml4IGZvciBQUjgwMTIwCisgIQorICEgQ29udHJpYnV0 ZWQgYnkgTWFyY28gUmVzdGVsbGkgIDxtcmVzdGVsbGlAZ21haWwuY29tPgor ICEKKyBwcm9ncmFtIHAKKyAgaW1wbGljaXQgbm9uZQorIAorICB0eXBlIDo6 IHQKKyAgIGNoYXJhY3RlcihsZW49MjUpIDo6IHRleHQoMikKKyAgZW5kIHR5 cGUgdAorICB0eXBlKHQpIDo6IHgKKyAKKyAgeCV0ZXh0KDEpID0gIkFCQyIK KyAgeCV0ZXh0KDIpID0gImRlZmdoIgorIAorICBhc3NvY2lhdGUoIGMgPT4g eCV0ZXh0ICkKKyAgICBpZiAoYygxKSg6bWF4dmFsKGxlbl90cmltKGMpKSkg Lm5lLiB0cmltICh4JXRleHQoMSkpKSBjYWxsIGFib3J0CisgICAgaWYgKGMo MikoOm1heHZhbChsZW5fdHJpbShjKSkpIC5uZS4gdHJpbSAoeCV0ZXh0KDIp KSkgY2FsbCBhYm9ydAorICBlbmQgYXNzb2NpYXRlCisgCisgZW5kIHByb2dy YW0gcApJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9hc3NvY2lh dGVfMjguZjkwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy90ZXN0 c3VpdGUvZ2ZvcnRyYW4uZGcvYXNzb2NpYXRlXzI4LmY5MAkobm9uZXhpc3Rl bnQpCi0tLSBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2Fzc29jaWF0ZV8y OC5mOTAJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqCioqKiAwICoq KioKLS0tIDEsNjQgLS0tLQorICEgeyBkZy1kbyBydW4gfQorICEKKyAhIFRl c3QgdGhlIGZpeCBmb3IgUFI4MTkwMworICEKKyAhIENvbnRyaWJ1dGVkIGJ5 IEthcmwgTWF5ICA8a2FybC5tYXkwQGZyZWVuZXQuZGU+CisgIQorIE1vZHVs ZSBUZXN0TW9kX0EKKyAgIFR5cGUgOjogVGVzdFR5cGVfQQorICAgICBSZWFs LCBBbGxvY2F0YWJsZSA6OiBhKDosOikKKyAgIEVuZCB0eXBlIFRlc3RUeXBl X0EKKyBFbmQgTW9kdWxlIFRlc3RNb2RfQQorIE1vZHVsZSBUZXN0TW9kX0IK KyAgIFR5cGUgOjogVGVzdFR5cGVfQgorICAgIFJlYWwsIFBvaW50ZXIsIGNv bnRpZ3VvdXMgOjogYSg6LDopCisgICBFbmQgdHlwZSBUZXN0VHlwZV9CCisg RW5kIE1vZHVsZSBUZXN0TW9kX0IKKyBNb2R1bGUgVGVzdE1vZF9DCisgICB1 c2UgVGVzdE1vZF9BCisgICB1c2UgVGVzdE1vZF9CCisgICBJbXBsaWNpdCBO b25lCisgICBUeXBlIDo6IFRlc3RUeXBlX0MKKyAgICAgQ2xhc3MoVGVzdFR5 cGVfQSksIFBvaW50ZXIgOjogVFRfQSg6KQorICAgICBUeXBlKFRlc3RUeXBl X0IpLCBBbGxvY2F0YWJsZSA6OiBUVF9CKDopCisgICBjb250YWlucworICAg ICBQcm9jZWR1cmUsIFBhc3MgOjogU2V0UHQgPT4gU3ViU2V0UHQKKyAgIEVu ZCB0eXBlIFRlc3RUeXBlX0MKKyAgIEludGVyZmFjZQorICAgICBNb2R1bGUg U3Vicm91dGluZSBTdWJTZXRQdCh0aGlzKQorICAgICAgIGNsYXNzKFRlc3RU eXBlX0MpLCBJbnRlbnQoSW5PdXQpLCBUYXJnZXQgOjogdGhpcworICAgICBF bmQgU3Vicm91dGluZQorICAgRW5kIEludGVyZmFjZQorIEVuZCBNb2R1bGUg VGVzdE1vZF9DCisgU3VibW9kdWxlKFRlc3RNb2RfQykgU2V0UHQKKyBjb250 YWlucworICAgTW9kdWxlIFByb2NlZHVyZSBTdWJTZXRQdAorICAgICBJbXBs aWNpdCBOb25lCisgICAgIGludGVnZXIgOjogaQorICAgICBpbnRlZ2VyIDo6 IHN1bV9hID0gMAorICAgICBvdXRlcjpibG9jaworICAgICAgIGFzc29jaWF0 ZSh4PT50aGlzJVRUX0IseT0+dGhpcyVUVF9BKQorICAgICAgICAgRG8gaT0x LHNpemUoeCkKKyAgICAgICAgICAgeChpKSVhPT55KGkpJWEKKyAgICAgICAg ICAgc3VtX2EgPSBzdW1fYSArIHN1bSAoaW50ICh4KGkpJWEpKQorICAgICAg ICAgRW5kIERvCisgICAgICAgZW5kIGFzc29jaWF0ZQorICAgICBFbmQgYmxv Y2sgb3V0ZXIKKyAgICAgaWYgKHN1bV9hIC5uZS4gMzApIGNhbGwgYWJvcnQK KyAgIEVuZCBQcm9jZWR1cmUKKyBFbmQgU3VibW9kdWxlIFNldFB0CisgUHJv Z3JhbSBUZXN0CisgICB1c2UgVGVzdE1vZF9DCisgICB1c2UgVGVzdE1vZF9B CisgICBJbXBsaWNpdCBOb25lCisgICBUeXBlKFRlc3RUeXBlX0MpIDo6IHRi CisgICBUeXBlKFRlc3RUeXBlX0EpLCBhbGxvY2F0YWJsZSwgVGFyZ2V0IDo6 IHRhKDopCisgICBpbnRlZ2VyIDo6IGkKKyAgIHJlYWwgOjogc3JjKDIsMikg PSByZXNoYXBlIChbKHJlYWwoaSksIGkgPSAxLDQpXSxbMiwyXSkKKyAgIGFs bG9jYXRlKHRhKDIpLHRiJXR0X2IoMikpCisgICBkbyBpPTEsc2l6ZSh0YSkK KyAgICAgYWxsb2NhdGUodGEoaSklYSgyLDIpLCBzb3VyY2UgPSBzcmMqcmVh bChpKSkKKyAgIEVuZCBkbworICAgdGIlVFRfQT0+dGEKKyAgIGNhbGwgdGIl c2V0cHQoKQorIEVuZCBQcm9ncmFtIFRlc3QKSW5kZXg6IGdjYy90ZXN0c3Vp dGUvZ2ZvcnRyYW4uZGcvYXNzb2NpYXRlXzI5LmY5MAo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CioqKiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2Fzc29j aWF0ZV8yOS5mOTAJKG5vbmV4aXN0ZW50KQotLS0gZ2NjL3Rlc3RzdWl0ZS9n Zm9ydHJhbi5kZy9hc3NvY2lhdGVfMjkuZjkwCSh3b3JraW5nIGNvcHkpCioq KioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDMwIC0tLS0KKyAhIHsg ZGctZG8gY29tcGlsZSB9CisgIQorICEgVGVzdCB0aGUgZml4IGZvciBQUjgy MTIxCisgIQorICEgQ29udHJpYnV0ZWQgYnkgSWFpbiBNaWxsZXIgIDxpYWlu Lm1pbGxlckBlY213Zi5pbnQ+CisgIQorIE1PRFVMRSBZT01DRERICisgICBJ TVBMSUNJVCBOT05FCisgICBTQVZFCisgICBUWVBFIDo6IFRDRERICisgICAg IENIQVJBQ1RFUihsZW49MTIpLEFMTE9DQVRBQkxFIDo6IENBREhUTFMoOikK KyAgIEVORCBUWVBFIFRDRERICisgICBDSEFSQUNURVIobGVuPTEyKSxBTExP Q0FUQUJMRSA6OiBDQURIVFRTKDopCisgICBUWVBFKFRDRERIKSwgUE9JTlRF UiA6OiBZUkNEREggPT4gTlVMTCgpCisgRU5EIE1PRFVMRSBZT01DRERICisg CisgCisgU1VCUk9VVElORSBTVUNEREgoKQorICAgVVNFIFlPTUNEREggICwg T05MWSA6IFlSQ0RESCxDQURIVFRTCisgICBJTVBMSUNJVCBOT05FCisgICBB TExPQ0FURSAoWVJDRERIJUNBREhUTFMoMjApKQorICAgQUxMT0NBVEUgKENB REhUVFMoMjApKQorICAgQVNTT0NJQVRFKENBREhUTFM9PllSQ0RESCVDQURI VExTLCBOT1JNQ0hBUj0+Q0FESFRUUykKKyAhIERpcmVjdCByZWZlcmVuY2Ug dG8gY2hhcmFjdGVyIGFycmF5IGNvbXBpbGVkIGNvcnJlY3RseQorICEgICAg WVJDRERIJUNBREhUTFMoMSk9J1NWR1RMRicKKyAhIFJlZmVyZW5jZSB0byBh c3NvY2lhdGVkIHZhcmlhYmxlIG5hbWUgZmFpbGVkIHRvIGNvbXBpbGUKKyAg ICAgQ0FESFRMUygyKT0nU1ZHVExUJworICAgICBOT1JNQ0hBUigxKT0nU1ZM VFRDJworICAgRU5EIEFTU09DSUFURQorIEVORCBTVUJST1VUSU5FIFNVQ0RE SApJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9hc3NvY2lhdGVf MzAuZjkwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy90ZXN0c3Vp dGUvZ2ZvcnRyYW4uZGcvYXNzb2NpYXRlXzMwLmY5MAkobm9uZXhpc3RlbnQp Ci0tLSBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2Fzc29jaWF0ZV8zMC5m OTAJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqCioqKiAwICoqKioK LS0tIDEsMTUgLS0tLQorICEgeyBkZy1kbyBjb21waWxlIH0KKyAhCisgISBU ZXN0IHRoZSBmaXggZm9yIFBSNjc1NDMKKyAhCisgISBDb250cmlidXRlZCBi eSBHZXJoYXJkIFN0ZWlubWV0eiAgPGdlcmhhcmQuc3RlaW5tZXR6LmZvcnRy YW5AdC1vbmxpbmUuZGU+CisgIQorICAgIHN1YnJvdXRpbmUgczEKKyAgICAg ICBhc3NvY2lhdGUgKHggPT4gbnVsbCgpKSAgICEgeyBkZy1lcnJvciAiY2Fu bm90IGJlIE5VTEwoKSIgfQorICAgICAgIGVuZCBhc3NvY2lhdGUKKyAgICBl bmQgc3Vicm91dGluZQorIAorICAgIHN1YnJvdXRpbmUgczIKKyAgICAgICBh c3NvY2lhdGUgKHggPT4gW251bGwoKV0pICEgeyBkZy1lcnJvciAiaGFzIG5v IHR5cGUiIH0KKyAgICAgICBlbmQgYXNzb2NpYXRlCisgICAgZW5kIHN1YnJv dXRpbmUKSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvYXNzb2Np YXRlXzMxLmY5MAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2MvdGVz dHN1aXRlL2dmb3J0cmFuLmRnL2Fzc29jaWF0ZV8zMS5mOTAJKG5vbmV4aXN0 ZW50KQotLS0gZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9hc3NvY2lhdGVf MzEuZjkwCSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKgoqKiogMCAq KioqCi0tLSAxLDM5IC0tLS0KKyAhIHsgZGctZG8gcnVuIH0KKyAhCisgISBU ZXN0IHRoZSBmaXggZm9yIFBSNTI4MzIKKyAhCisgISBDb250cmlidXRlZCBi eSBUb2JpYXMgQnVybnVzICA8YnVybnVzQGdjYy5nbnUub3JnPgorICEKKyAg IHN1YnJvdXRpbmUgdGVzdFN1YigpCisgICAgIGludGVyZmFjZQorICAgICAg IGludGVnZXIgZnVuY3Rpb24gZmNuMSAoYXJnKQorICAgICAgICAgaW50ZWdl ciA6OiBhcmcKKyAgICAgICBlbmQgZnVuY3Rpb24KKyAgICAgICBpbnRlZ2Vy IGZ1bmN0aW9uIGZjbjIgKGFyZykKKyAgICAgICAgIGludGVnZXIgOjogYXJn CisgICAgICAgZW5kIGZ1bmN0aW9uCisgICAgIGVuZCBpbnRlcmZhY2UKKyAK KyAgICAgcHJvY2VkdXJlKGZjbjEpLCBwb2ludGVyIDo6IHIKKyAgICAgciA9 PiBmY24yCisgICAgIGFzc29jaWF0ZSAoayA9PiByKQorICAgICAgIGlmIChy KDQyKSAubmUuIDg0KSBjYWxsIGFib3J0CisgICAgIGVuZCBhc3NvY2lhdGUK KyAgICAgciA9PiBmY24xCisgICAgIGFzc29jaWF0ZSAoayA9PiByKQorICAg ICAgIGlmIChyKDQyKSAubmUuIDQyKSBjYWxsIGFib3J0CisgICAgIGVuZCBh c3NvY2lhdGUKKyAgIGVuZCBzdWJyb3V0aW5lIHRlc3RTdWIKKyAKKyAgIGlu dGVnZXIgZnVuY3Rpb24gZmNuMSAoYXJnKQorICAgICBpbnRlZ2VyIDo6IGFy ZzsKKyAgICAgZmNuMiA9IGFyZworICAgZW5kIGZ1bmN0aW9uCisgCisgICBp bnRlZ2VyIGZ1bmN0aW9uIGZjbjIgKGFyZykKKyAgICAgaW50ZWdlciA6OiBh cmc7CisgICAgIGZjbjIgPSBhcmcqMgorICAgZW5kIGZ1bmN0aW9uCisgCisg ICBjYWxsIHRlc3RTdWIKKyBlbmQK --001a113cd39c6a26030559a1b4bc--