From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-il1-x12d.google.com (mail-il1-x12d.google.com [IPv6:2607:f8b0:4864:20::12d]) by sourceware.org (Postfix) with ESMTPS id 8FA0E3858D20 for ; Tue, 18 Jul 2023 06:02:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8FA0E3858D20 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com Received: by mail-il1-x12d.google.com with SMTP id e9e14a558f8ab-345d6dc271dso28348855ab.0 for ; Mon, 17 Jul 2023 23:02:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1689660178; x=1692252178; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=bFUXbKAmQ+S2L1gVA9U/bFT9DB/smhgz7pMyU4V5J/g=; b=EXEQnJt0ZePargxfugkpk/wQQt0mwJIyI9kgVgIoRgVM99z3Ppave4LNOIwQQZus5n hXQAIU2BtmEltNqZ6nqWycOtfkGspQTh2a2vxPdS6EMu/wija7jODjs93091AzCWmCno T0zD/b3xmvo1BdQYBPsbt0qIkEGaE0XH0xR15btr/5OKUoi2zfjQJH4To7PniV4g1bRf 3XXm41bSsJWWhLbdJ1Y9LV/xnQqNXzodoe1PMk6I9pGSuAsoZZBA8IpPoQts0+7ZPAp7 SMkEj2lqQ1VxaouTas5klDrCnwe6T5I4WXDXh+hbvW9vTv9mVTa3FOhafHmsId4rUDsw d8Ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689660178; x=1692252178; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=bFUXbKAmQ+S2L1gVA9U/bFT9DB/smhgz7pMyU4V5J/g=; b=KoBqWBFDCHfNpdf378xQtY9ixPHQOFEyWuRqJFPgJxrFY0qYyvRzkLodcKTDmgweGx MfkVauI+RfS5prxRJMtWFVfUn6HP/GyUlOyuPoAMfvzv6ohW9K88Z7u/EWJVtRMIjJBU XVxrn4Avf8bICeqr27LAIM8L+LO7/GKmSeQf0Jn1g52LyRz/ugS+9h98U0CQ2lY7rQZ8 d90EewnSMkm6UzFecEiLJrWOtSFfqRxGhft2Ug2fgD+wARkBsKCTUiratAf9Iv4ZE7YP oRHIaCAEyWrHYEnBKitoUeXDgUJuCJpkvhtFVd2EujmJCAxMX4r1qEYgySJzEPOtovlm FQ+g== X-Gm-Message-State: ABy/qLYU1/jDabE81YKBU4LffR5G4+ypZux71BMlwKNJJjU0zEEJy6uf FMXf0scDT8tyt1JKjHHNcUeC816B9uVsxPRPCvFX9UVOa015IwavqtI= X-Google-Smtp-Source: APBJJlFTPtS7LFyak4dZdF8yz3f6XYTY2Hv4i+EDj53n60MCZ2vRly0X/i7gghiX28502NpqoJEP+u3GYgY7NAB+gQ4= X-Received: by 2002:a05:6e02:1aa1:b0:347:733c:a55a with SMTP id l1-20020a056e021aa100b00347733ca55amr1788411ilv.18.1689660177717; Mon, 17 Jul 2023 23:02:57 -0700 (PDT) MIME-Version: 1.0 From: Joern Rennecke Date: Tue, 18 Jul 2023 07:02:46 +0100 Message-ID: Subject: RISCV test infrastructure for d / v / zfh extensions To: GCC Patches Content-Type: multipart/mixed; boundary="000000000000afdf160600bcaa07" X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --000000000000afdf160600bcaa07 Content-Type: text/plain; charset="UTF-8" This makes it easier to write tests that safely test features needing d, v and/or zfh extensions. check_effective_target_riscv_v checks if the current target allows to use vector instructions. add_options_for_riscv_v ask to add an -arch option to change the target to one like the current one, but with the 'v' extension enabled, if it is not already is. That is generally safe for compile-only tests, e.g. using scan-assembler* stanzas. If you have an execution test that you want to force usin the extension if the actual execution target supports that, you can use check_effective_target_riscv_v_ok to check if that's ok, and then add_options_for_riscv_v to add the appropriate -march option. Examples how this can be used can be found athttps://github.com/embecosm/rvv-gcc/tree/rvv-12/gcc/testsuite --000000000000afdf160600bcaa07 Content-Type: text/plain; charset="US-ASCII"; name="t-supp-diff-20230718.txt" Content-Disposition: attachment; filename="t-supp-diff-20230718.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lk7vqfm20 MjAyMy0wNC0xNyAgSm9lcm4gUmVubmVja2UgIDxqb2Vybi5yZW5uZWNrZUBlbWJlY29zbS5jb20+ CgpnY2MvdGVzdHN1aXRlLwoJKiBsaWIvdGFyZ2V0LXN1cHBvcnRzLmV4cCAoY2hlY2tfZWZmZWN0 aXZlX3RhcmdldF9ydl9mbG9hdF9hYmlfc29mdCk6CglOZXcgcHJvYy4KCShjaGVja19lZmZlY3Rp dmVfdGFyZ2V0X3Jpc2N2X2QpOiBMaWtld2lzZS4KCShjaGVja19lZmZlY3RpdmVfdGFyZ2V0X3Jp c2N2X3YpOiBMaWtld2lzZS4KCShjaGVja19lZmZlY3RpdmVfdGFyZ2V0X3Jpc2N2X3pmaCk6IExp a2V3aXNlLgoJKGNoZWNrX2VmZmVjdGl2ZV90YXJnZXRfcmlzY3Zfdl9vayk6IGxpa2V3aXNlLgoJ KGNoZWNrX2VmZmVjdGl2ZV90YXJnZXRfcmlzY3ZfemZoX29rKTogTGlrZXdpc2UuCgkocmlzY3Zf Z2V0X2FyY2gsIGFkZF9vcHRpb25zX2Zvcl9yaXNjdl92KTogTGlrZXdpc2UuCgkoYWRkX29wdGlv bnNfZm9yX3Jpc2N2X3pmaCk6IExpa2V3aXNlLgoJKGFkZF9vcHRpb25zX2Zvcl9yaXNjdl9kKTog TGlrZXdpc2UuCgpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0LXN1cHBvcnRz LmV4cCBiL2djYy90ZXN0c3VpdGUvbGliL3RhcmdldC1zdXBwb3J0cy5leHAKaW5kZXggOGVhMGQ5 ZmViMWMuLmRlZWIwZWY4ODY1IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2xpYi90YXJnZXQt c3VwcG9ydHMuZXhwCisrKyBiL2djYy90ZXN0c3VpdGUvbGliL3RhcmdldC1zdXBwb3J0cy5leHAK QEAgLTE4ODQsNiArMTg4NCwxNzMgQEAgcHJvYyBjaGVja19lZmZlY3RpdmVfdGFyZ2V0X3J2NjQg eyB9IHsKICAgICB9XQogfQogCisjIFJldHVybiAxIGlmIHRoZSB0YXJnZXQgYWJpIGlzIF9fcmlz Y3ZfZmxvYXRfYWJpX3NvZnQsIDAgb3RoZXJ3aXNlLgorIyBDYWNoZSB0aGUgcmVzdWx0LgorCitw cm9jIGNoZWNrX2VmZmVjdGl2ZV90YXJnZXRfcnZfZmxvYXRfYWJpX3NvZnQgeyB9IHsKKyAgICAj IENoZWNrIHRoYXQgd2UgYXJlIGNvbXBpbGluZyBmb3IgUlY2NCBieSBjaGVja2luZyB0aGUgeGxl biBzaXplLgorICAgIHJldHVybiBbY2hlY2tfbm9fY29tcGlsZXJfbWVzc2FnZXMgcmlzY3Zfcmlz Y3ZfZmxvYXRfYWJpX3NvZnQgYXNzZW1ibHkgeworICAgICAgICNpZm5kZWYgX19yaXNjdl9mbG9h dF9hYmlfc29mdAorICAgICAgICNlcnJvciAiTm90IF9fcmlzY3ZfZmxvYXRfYWJpX3NvZnQiCisg ICAgICAgI2VuZGlmCisgICAgfV0KK30KKworIyBSZXR1cm4gMSBpZiB0aGUgdGFyZ2V0IGFyY2gg c3VwcG9ydHMgdGhlIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQKKyMgZXh0ZW5zaW9u LCAwIG90aGVyd2lzZS4gIENhY2hlIHRoZSByZXN1bHQuCisKK3Byb2MgY2hlY2tfZWZmZWN0aXZl X3RhcmdldF9yaXNjdl9kIHsgfSB7CisgICAgcmV0dXJuIFtjaGVja19ub19jb21waWxlcl9tZXNz YWdlcyByaXNjdl9leHRfZCBhc3NlbWJseSB7CisgICAgICAgI2lmbmRlZiBfX3Jpc2N2X2QKKyAg ICAgICAjZXJyb3IgIk5vdCBfX3Jpc2N2X2QiCisgICAgICAgI2VuZGlmCisgICAgfV0KK30KKwor IyBSZXR1cm4gMSBpZiB0aGUgdGFyZ2V0IGFyY2ggc3VwcG9ydHMgdGhlIHZlY3RvciBleHRlbnNp b24sIDAgb3RoZXJ3aXNlLgorIyBDYWNoZSB0aGUgcmVzdWx0LgorCitwcm9jIGNoZWNrX2VmZmVj dGl2ZV90YXJnZXRfcmlzY3ZfdiB7IH0geworICAgIHJldHVybiBbY2hlY2tfbm9fY29tcGlsZXJf bWVzc2FnZXMgcmlzY3ZfZXh0X3YgYXNzZW1ibHkgeworICAgICAgICNpZm5kZWYgX19yaXNjdl92 CisgICAgICAgI2Vycm9yICJOb3QgX19yaXNjdl92IgorICAgICAgICNlbmRpZgorICAgIH1dCit9 CisKKyMgUmV0dXJuIDEgaWYgdGhlIHRhcmdldCBhcmNoIHN1cHBvcnRzIGhhbGYgZmxvYXQsIDAg b3RoZXJ3aXNlLgorIyBOb3RlLCB0aGlzIGRpZmZlcnMgZnJvbSB0aGUgdGVzdCBwZXJmb3JtZWQg YnkKKyMgLyogZGctc2tpcC1pZiAiIiB7ICotKi0qIH0geyAiKiIgfSB7ICItbWFyY2g9cnYqemZo KiIgfSAqLworIyBpbiB0aGF0IGl0IHRha2VzIGRlZmF1bHQgYmVoYXZpb3VyIGludG8gYWNjb3Vu dC4KKyMgQ2FjaGUgdGhlIHJlc3VsdC4KKworcHJvYyBjaGVja19lZmZlY3RpdmVfdGFyZ2V0X3Jp c2N2X3pmaCB7IH0geworICAgIHJldHVybiBbY2hlY2tfbm9fY29tcGlsZXJfbWVzc2FnZXMgcmlz Y3ZfZXh0X3pmaCBhc3NlbWJseSB7CisgICAgICAgI2lmbmRlZiBfX3Jpc2N2X3pmaAorICAgICAg ICNlcnJvciAiTm90IF9fcmlzY3ZfemZoIgorICAgICAgICNlbmRpZgorICAgIH1dCit9CisKKyMg UmV0dXJuIDEgaWYgd2UgY2FuIGV4ZWN1dGUgY29kZSB3aGVuIHVzaW5nIGRnLWFkZC1vcHRpb25z IHJpc2N2X3YKKworcHJvYyBjaGVja19lZmZlY3RpdmVfdGFyZ2V0X3Jpc2N2X3Zfb2sgeyB9IHsK KyAgICAjIElmIHRoZSB0YXJnZXQgYWxyZWFkeSBzdXBwb3J0cyB2IHdpdGhvdXQgYW55IGFkZGVk IG9wdGlvbnMsCisgICAgIyB3ZSBtYXkgYXNzdW1lIHdlIGNhbiBleGVjdXRlIGp1c3QgZmluZS4K KyAgICBpZiB7IFtjaGVja19lZmZlY3RpdmVfdGFyZ2V0X3Jpc2N2X3ZdIH0geworCXJldHVybiAx CisgICAgfQorCisgICAgIyBjaGVjayBpZiB3ZSBjYW4gZXhlY3V0ZSB2ZWN0b3IgaW5zbnMgd2l0 aCB0aGUgZ2l2ZW4gaGFyZHdhcmUgb3IKKyAgICAjIHNpbXVsYXRvcgorICAgIHNldCBnY2NfbWFy Y2ggW3JlZ3N1YiB7W1s6YWxudW06XV0qfSBbcmlzY3ZfZ2V0X2FyY2hdICZ2XQorICAgIGlmIHsg W2NoZWNrX3J1bnRpbWUgJHtnY2NfbWFyY2h9X2V4ZWMgeworCSAgaW50IG1haW4oKSB7ICBhc20o InZzZXRpdmxpIHQwLCA5LCBlOCwgbTEsIHR1LCBtYSIpOyByZXR1cm4gMDsgfSB9ICItbWFyY2g9 JHtnY2NfbWFyY2h9Il0gfSB7CisJcmV0dXJuIDEKKyAgICB9CisKKyAgICAjIFBvc3NpYmxlIGZ1 dHVyZSBleHRlbnNpb25zOiBJZiB0aGUgdGFyZ2V0IGlzIGEgc2ltdWxhdG9yLCBkZy1hZGQtb3B0 aW9ucworICAgICMgbWlnaHQgY2hhbmdlIGl0cyBjb25maWcgdG8gbWFrZSBpdCBhbGxvdyB2ZWN0 b3IgaW5zbnMsIG9yIHdlIG1pZ2h0IHVzZQorICAgICMgb3B0aW9ucyB0byBzZXQgc3BlY2lhbCBl bGYgZmxhZ3MgLyBzZWN0aW9ucyB0byBlZmZlY3QgdGhhdC4KKworICAgIHJldHVybiAwCit9CisK KyMgUmV0dXJuIDEgaWYgd2UgY2FuIGV4ZWN1dGUgY29kZSB3aGVuIHVzaW5nIGRnLWFkZC1vcHRp b25zIHJpc2N2X3pmaAorCitwcm9jIGNoZWNrX2VmZmVjdGl2ZV90YXJnZXRfcmlzY3ZfemZoX29r IHsgfSB7CisgICAgIyBJZiB0aGUgdGFyZ2V0IGFscmVhZHkgc3VwcG9ydHMgemZoIHdpdGhvdXQg YW55IGFkZGVkIG9wdGlvbnMsCisgICAgIyB3ZSBtYXkgYXNzdW1lIHdlIGNhbiBleGVjdXRlIGp1 c3QgZmluZS4KKyAgICAjID8/PyBPdGhlciBjYXNlcyB3ZSBzaG91bGQgY29uc2lkZXI6IAorICAg ICMgLSB0YXJnZXQgLyBzaW11bGF0b3IgYWxyZWFkeSBzdXBwb3J0cyB6ZmggZXh0ZW5zaW9uIC0g dGVzdCBmb3IgdGhhdC4KKyAgICAjIC0gdGFyZ2V0IGlzIGEgc2ltdWxhdG9yLCBhbmQgZGctYWRk LW9wdGlvbnMga25vd3MgaG93IHRvIGVuYWJsZSB6Zmggc3VwcG9ydCBpbiB0aGF0IHNpbXVsYXRv cgorICAgIGlmIHsgW2NoZWNrX2VmZmVjdGl2ZV90YXJnZXRfcmlzY3ZfemZoXSB9IHsKKwlyZXR1 cm4gMQorICAgIH0KKworICAgICMgY2hlY2sgaWYgd2UgY2FuIGV4ZWN1dGUgdmVjdG9yIGluc25z IHdpdGggdGhlIGdpdmVuIGhhcmR3YXJlIG9yCisgICAgIyBzaW11bGF0b3IKKyAgICBzZXQgZ2Nj X21hcmNoIFtyaXNjdl9nZXRfYXJjaF0KKyAgICBpZiB7IFtjaGVja19ydW50aW1lICR7Z2NjX21h cmNofV96ZmhfZXhlYyB7CisJICBpbnQgbWFpbigpIHsgIGFzbSgiZmVxLmggYTMsZmE1LGZhNCIp OyByZXR1cm4gMDsgfSB9ICItbWFyY2g9JHtnY2NfbWFyY2h9X3pmaCJdIH0geworCXJldHVybiAx CisgICAgfQorCisgICAgIyBQb3NzaWJsZSBmdXR1cmUgZXh0ZW5zaW9uczogSWYgdGhlIHRhcmdl dCBpcyBhIHNpbXVsYXRvciwgZGctYWRkLW9wdGlvbnMKKyAgICAjIG1pZ2h0IGNoYW5nZSBpdHMg Y29uZmlnIHRvIG1ha2UgaXQgYWxsb3cgaGFsZiBmbG9hdCBpbnNucywgb3Igd2UgbWlnaHQKKyAg ICAjIHVzZSBvcHRpb25zIHRvIHNldCBzcGVjaWFsIGVsZiBmbGFncyAvIHNlY3Rpb25zIHRvIGVm ZmVjdCB0aGF0LgorCisgICAgcmV0dXJuIDAKK30KKworcHJvYyByaXNjdl9nZXRfYXJjaCB7IH0g eworICAgIHNldCBnY2NfbWFyY2ggIiIKKyAgICAjID8/PyBkbyB3ZSBuZWVlZCB0byBhZGQgbW9y ZSBleHRlbnNpb25zIHRvIHRoZSBsaXN0IGJlbG93PworICAgIGZvcmVhY2ggZXh0IHsgaSBtIGEg ZiBkIHEgYyB2IHppY3NyIHppZmVuY2VpIHpmaCB6YmEgemJiIHpiYyB6YnMgfSB7CisJaWYgeyBb Y2hlY2tfbm9fY29tcGlsZXJfbWVzc2FnZXMgIHJpc2N2X2V4dF8kZXh0IGFzc2VtYmx5IFtzdHJp bmcgbWFwIFtsaXN0IERFRiBfX3Jpc2N2XyRleHRdIHsKKwkJI2lmbmRlZiBERUYKKwkJI2Vycm9y ICJOb3QgREVGIgorCQkjZW5kaWYKKyAgICB9XV0gfSB7CisJaWYgeyBbc3RyaW5nIGxlbmd0aCAk ZXh0XSA+IDEgfSB7CisJICAgIHNldCBleHQgXyR7ZXh0fQorCX0KKwlzZXQgZ2NjX21hcmNoICRn Y2NfbWFyY2gkZXh0CisgICAgfQorICAgIGlmIHsgW3N0cmluZyBlcXVhbCAkZ2NjX21hcmNoICJp bWFmZCJdIH0geworCXNldCBnY2NfbWFyY2ggImciCisgICAgfQorICB9CisgICAgaWYgeyBbY2hl Y2tfZWZmZWN0aXZlX3RhcmdldF9ydjMyXSB9IHsKKwlzZXQgZ2NjX21hcmNoIHJ2MzIkZ2NjX21h cmNoCisgICAgfSBlbHNlaWYgeyBbY2hlY2tfZWZmZWN0aXZlX3RhcmdldF9ydjY0XSB9IHsKKwlz ZXQgZ2NjX21hcmNoIHJ2NjQkZ2NjX21hcmNoCisgICAgfSBlbHNlIHsKKwlzZXQgZ2NjX21hcmNo ICIiCisgICAgfQorICAgIHJldHVybiAiJGdjY19tYXJjaCIKK30KKworcHJvYyBhZGRfb3B0aW9u c19mb3JfcmlzY3ZfZCB7IGZsYWdzIH0geworICAgIGlmIHsgW2xzZWFyY2ggJGZsYWdzIC1tYXJj aD0qXSA+PSAwIH0geworCSMgSWYgdGhlcmUgYXJlIG11bHRpcGxlIC1tYXJjaCBmbGFncywgd2Ug aGF2ZSB0byBhZGp1c3QgYWxsIG9mIHRoZW0uCisJIyA/Pz8gSXMgdGhlcmUgYSB3YXkgdG8gbWFr ZSB0aGUgbWF0Y2ggc3BlY2lmaWMgdG8gYSBmdWxsIGxpc3QgZWxlbWVudD8KKwkjICAgICBhcyBp dCBpcywgd2UgbWlnaHQgbWF0Y2ggc29tZXRoaW5nIGluc2lkZSBhIHN0cmluZy4KKwlyZXR1cm4g W3JlZ3N1YiAtYWxsIC0tIHsoLW1hcmNoPXJ2W1s6ZGlnaXQ6XV0qW2EtY2UtcnQtd3ldKilkKn0g JGZsYWdzIFxcMWQgXQorICAgIH0KKyAgICBpZiB7IFtjaGVja19lZmZlY3RpdmVfdGFyZ2V0X3Jp c2N2X2RdIH0geworCXJldHVybiAiJGZsYWdzIgorICAgIH0KKyAgICByZXR1cm4gIiRmbGFncyAt bWFyY2g9W3JlZ3N1YiB7W1s6YWxudW06XV0qfSBbcmlzY3ZfZ2V0X2FyY2hdICZkXSIKK30KKwor cHJvYyBhZGRfb3B0aW9uc19mb3JfcmlzY3ZfdiB7IGZsYWdzIH0geworICAgIGlmIHsgW2xzZWFy Y2ggJGZsYWdzIC1tYXJjaD0qXSA+PSAwIH0geworCSMgSWYgdGhlcmUgYXJlIG11bHRpcGxlIC1t YXJjaCBmbGFncywgd2UgaGF2ZSB0byBhZGp1c3QgYWxsIG9mIHRoZW0uCisJIyA/Pz8gSXMgdGhl cmUgYSB3YXkgdG8gbWFrZSB0aGUgbWF0Y2ggc3BlY2lmaWMgdG8gYSBmdWxsIGxpc3QgZWxlbWVu dD8KKwkjICAgICBhcyBpdCBpcywgd2UgbWlnaHQgbWF0Y2ggc29tZXRoaW5nIGluc2lkZSBhIHN0 cmluZy4KKwlyZXR1cm4gW3JlZ3N1YiAtYWxsIC0tIHsoLW1hcmNoPXJ2W1s6ZGlnaXQ6XV0qW2Et cnQtdXd5XSopdip9ICRmbGFncyBcXDF2IF0KKyAgICB9CisgICAgaWYgeyBbY2hlY2tfZWZmZWN0 aXZlX3RhcmdldF9yaXNjdl92XSB9IHsKKwlyZXR1cm4gIiRmbGFncyIKKyAgICB9CisgICAgcmV0 dXJuICIkZmxhZ3MgLW1hcmNoPVtyZWdzdWIge1tbOmFsbnVtOl1dKn0gW3Jpc2N2X2dldF9hcmNo XSAmdl0iCit9CisKK3Byb2MgYWRkX29wdGlvbnNfZm9yX3Jpc2N2X3pmaCB7IGZsYWdzIH0gewor ICAgIGlmIHsgW2xzZWFyY2ggJGZsYWdzIC1tYXJjaD0qXSA+PSAwIH0geworCSMgSWYgdGhlcmUg YXJlIG11bHRpcGxlIC1tYXJjaCBmbGFncywgd2UgaGF2ZSB0byBhZGp1c3QgYWxsIG9mIHRoZW0u CisJIyA/Pz8gSXMgdGhlcmUgYSB3YXkgdG8gbWFrZSB0aGUgbWF0Y2ggc3BlY2lmaWMgdG8gYSBm dWxsIGxpc3QgZWxlbWVudD8KKwkjICAgICBhcyBpdCBpcywgd2UgbWlnaHQgbWF0Y2ggc29tZXRo aW5nIGluc2lkZSBhIHN0cmluZy4KKwlzZXQgZmxhZ3MgW3JlZ3N1YiAtYWxsIC0tIHstbWFyY2g9 W1s6YWxudW06XV8uXSp9ICRmbGFncyAmX3pmaCBdCisJcmV0dXJuIFtyZWdzdWIgLWFsbCAtLSB7 KC1tYXJjaD1bWzphbG51bTpdXy5dKl96ZmhbWzphbG51bTpdXy5dKilfemZofSAkZmxhZ3MgXFwx IF0KKyAgICB9CisgICAgaWYgeyBbY2hlY2tfZWZmZWN0aXZlX3RhcmdldF9yaXNjdl96ZmhdIH0g eworCXJldHVybiAiJGZsYWdzIgorICAgIH0KKyAgICByZXR1cm4gIiRmbGFncyAtbWFyY2g9W3Jp c2N2X2dldF9hcmNoXV96ZmgiCit9CisKICMgUmV0dXJuIDEgaWYgdGhlIHRhcmdldCBPUyBzdXBw b3J0cyBydW5uaW5nIFNTRSBleGVjdXRhYmxlcywgMAogIyBvdGhlcndpc2UuICBDYWNoZSB0aGUg cmVzdWx0LgogCg== --000000000000afdf160600bcaa07--