From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17721 invoked by alias); 15 Mar 2011 01:40:20 -0000 Received: (qmail 17706 invoked by uid 22791); 15 Mar 2011 01:40:19 -0000 X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SPF_HELO_PASS,TW_BJ,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.44.51) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 15 Mar 2011 01:40:13 +0000 Received: from kpbe15.cbf.corp.google.com (kpbe15.cbf.corp.google.com [172.25.105.79]) by smtp-out.google.com with ESMTP id p2F1eBtD001069 for ; Mon, 14 Mar 2011 18:40:11 -0700 Received: from vws18 (vws18.prod.google.com [10.241.21.146]) by kpbe15.cbf.corp.google.com with ESMTP id p2F1e9wi026375 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Mon, 14 Mar 2011 18:40:10 -0700 Received: by vws18 with SMTP id 18so149409vws.41 for ; Mon, 14 Mar 2011 18:40:09 -0700 (PDT) Received: by 10.220.203.13 with SMTP id fg13mr3437638vcb.198.1300153209131; Mon, 14 Mar 2011 18:40:09 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.60.9 with HTTP; Mon, 14 Mar 2011 18:39:39 -0700 (PDT) In-Reply-To: <20110315004140.GA28560@host1.jankratochvil.net> References: <20110315004140.GA28560@host1.jankratochvil.net> From: Paul Pluzhnikov Date: Tue, 15 Mar 2011 05:26:00 -0000 Message-ID: Subject: Re: [patch] Re: Advice on fixing gdb/12528 To: Jan Kratochvil Cc: Tom Tromey , gdb-patches ml , Doug Evans Content-Type: multipart/mixed; boundary=90e6ba53a7b42f1505049e7b82c1 X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-03/txt/msg00762.txt.bz2 --90e6ba53a7b42f1505049e7b82c1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 1990 On Mon, Mar 14, 2011 at 5:41 PM, Jan Kratochvil wrote: > On Mon, 14 Mar 2011 22:01:44 +0100, Paul Pluzhnikov wrote: >> --- /dev/null 1 Jan 1970 00:00:00 -0000 >> +++ testsuite/gdb.cp/pr12528.exp =A0 =A0 =A014 Mar 2011 20:52:11 -0000 > > I would prefer any non-numeric name of the testfile. How does "break-on-linker-gcd-function.exp" sound? >> +set additional_flags {-ffunction-sections -Wl,--gc-sections} >> +if =A0{ [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" exec= utable \ >> + =A0 =A0 =A0 =A0[list debug c++ additional_flags=3D$additional_flags]] = !=3D "" } { >> + =A0 =A0untested $srcfile >> + =A0 =A0return -1 >> +} > > This testfile correctly breaks without the fix applied with: > =A0 =A0 =A0 =A0g++ (GCC) 4.4.6 20110314 (prerelease) > > but it gives false PASS even without the fix applied with: > =A0 =A0 =A0 =A0g++ (GCC) 4.5.3 20110314 (prerelease) > =A0 =A0 =A0 =A0g++ (GCC) 4.6.0 20110312 (experimental) > > as recent GCCs no longer create multiple ctors in such case. Yes: I noted that in gdb/12568. I am not sure how I can trigger the bug with newer GCC versions... Ah yes, I can. > For a real testcase it should be in gdb.dwarf2/ (and then the special > compilation options are sure no longer needed). Sorry, I didn't follow that part. Why special options wouldn't be needed? >> +if { ![runto_main] } { >> + =A0 =A0fail "Can't run to main" >> + =A0 =A0return >> +} > > It could check the `info break' output without running the testcase at al= l. Done. Thanks, --=20 Paul Pluzhnikov ChangeLog: 2011-03-14 Paul Pluzhnikov PR gdb/12528 * dwarf2read.c (noop_record_line): New function. (dwarf_decode_lines): Ignore line tables for GCd functions. testsuite/ChangeLog: 2011-03-14 Paul Pluzhnikov PR gdb/12528 * gdb.dwarf2/break-on-linker-gcd-function.exp: New test. * gdb.dwarf2/break-on-linker-gcd-function.cc: New file. --90e6ba53a7b42f1505049e7b82c1 Content-Type: text/plain; charset=US-ASCII; name="gdb-pr12528-20110314a.txt" Content-Disposition: attachment; filename="gdb-pr12528-20110314a.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gla5ltd90 Content-length: 9024 SW5kZXg6IGR3YXJmMnJlYWQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2R3YXJmMnJlYWQuYyx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS41MDgKZGlmZiAtdSAtcCAtcCAtdSAtcjEuNTA4 IGR3YXJmMnJlYWQuYwotLS0gZHdhcmYycmVhZC5jCTkgTWFyIDIwMTEgMDc6 MDc6NTUgLTAwMDAJMS41MDgKKysrIGR3YXJmMnJlYWQuYwkxNSBNYXIgMjAx MSAwMTozODoxNiAtMDAwMApAQCAtMTAzNDEsNiArMTAzNDEsMTQgQEAgcHN5 bXRhYl9pbmNsdWRlX2ZpbGVfbmFtZSAoY29uc3Qgc3RydWN0IAogICByZXR1 cm4gaW5jbHVkZV9uYW1lOwogfQogCisvKiBJZ25vcmUgdGhpcyByZWNvcmRf bGluZSByZXF1ZXN0LiAgKi8KKworc3RhdGljIHZvaWQKK25vb3BfcmVjb3Jk X2xpbmUgKHN0cnVjdCBzdWJmaWxlICpzdWJmaWxlLCBpbnQgbGluZSwgQ09S RV9BRERSIHBjKQoreworICByZXR1cm47Cit9CisKIC8qIERlY29kZSB0aGUg TGluZSBOdW1iZXIgUHJvZ3JhbSAoTE5QKSBmb3IgdGhlIGdpdmVuIGxpbmVf aGVhZGVyCiAgICBzdHJ1Y3R1cmUgYW5kIENVLiAgVGhlIGFjdHVhbCBpbmZv cm1hdGlvbiBleHRyYWN0ZWQgYW5kIHRoZSB0eXBlCiAgICBvZiBzdHJ1Y3R1 cmVzIGNyZWF0ZWQgZnJvbSB0aGUgTE5QIGRlcGVuZHMgb24gdGhlIHZhbHVl IG9mIFBTVC4KQEAgLTEwMzc2LDYgKzEwMzg0LDggQEAgZHdhcmZfZGVjb2Rl X2xpbmVzIChzdHJ1Y3QgbGluZV9oZWFkZXIgKgogICBzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaCA9IGdldF9vYmpmaWxlX2FyY2ggKG9iamZpbGUpOwogICBj b25zdCBpbnQgZGVjb2RlX2Zvcl9wc3RfcCA9IChwc3QgIT0gTlVMTCk7CiAg IHN0cnVjdCBzdWJmaWxlICpsYXN0X3N1YmZpbGUgPSBOVUxMLCAqZmlyc3Rf c3ViZmlsZSA9IGN1cnJlbnRfc3ViZmlsZTsKKyAgdm9pZCAoKnBfcmVjb3Jk X2xpbmUpIChzdHJ1Y3Qgc3ViZmlsZSAqc3ViZmlsZSwgaW50IGxpbmUsIENP UkVfQUREUiBwYykKKyAgICA9IHJlY29yZF9saW5lOwogCiAgIGJhc2VhZGRy ID0gQU5PRkZTRVQgKG9iamZpbGUtPnNlY3Rpb25fb2Zmc2V0cywgU0VDVF9P RkZfVEVYVCAob2JqZmlsZSkpOwogCkBAIC0xMDQ0NSwxMyArMTA0NTUsMTMg QEAgZHdhcmZfZGVjb2RlX2xpbmVzIChzdHJ1Y3QgbGluZV9oZWFkZXIgKgog CQkJewogCQkJICBhZGRyID0gZ2RiYXJjaF9hZGRyX2JpdHNfcmVtb3ZlIChn ZGJhcmNoLCBhZGRyZXNzKTsKIAkJCSAgaWYgKGxhc3Rfc3ViZmlsZSkKLQkJ CSAgICByZWNvcmRfbGluZSAobGFzdF9zdWJmaWxlLCAwLCBhZGRyKTsKKwkJ CSAgICAoKnBfcmVjb3JkX2xpbmUpIChsYXN0X3N1YmZpbGUsIDAsIGFkZHIp OwogCQkJICBsYXN0X3N1YmZpbGUgPSBjdXJyZW50X3N1YmZpbGU7CiAJCQl9 CiAJCSAgICAgIC8qIEFwcGVuZCByb3cgdG8gbWF0cml4IHVzaW5nIGN1cnJl bnQgdmFsdWVzLiAgKi8KIAkJICAgICAgYWRkciA9IGNoZWNrX2N1X2Z1bmN0 aW9ucyAoYWRkcmVzcywgY3UpOwogCQkgICAgICBhZGRyID0gZ2RiYXJjaF9h ZGRyX2JpdHNfcmVtb3ZlIChnZGJhcmNoLCBhZGRyKTsKLQkJICAgICAgcmVj b3JkX2xpbmUgKGN1cnJlbnRfc3ViZmlsZSwgbGluZSwgYWRkcik7CisJCSAg ICAgICgqcF9yZWNvcmRfbGluZSkgKGN1cnJlbnRfc3ViZmlsZSwgbGluZSwg YWRkcik7CiAJCSAgICB9CiAJCX0KIAkgICAgICBiYXNpY19ibG9jayA9IDA7 CkBAIC0xMDQ2OCwxMiArMTA0NzgsMTkgQEAgZHdhcmZfZGVjb2RlX2xpbmVz IChzdHJ1Y3QgbGluZV9oZWFkZXIgKgogCSAgICAgIHN3aXRjaCAoZXh0ZW5k ZWRfb3ApCiAJCXsKIAkJY2FzZSBEV19MTkVfZW5kX3NlcXVlbmNlOgorCQkg IHBfcmVjb3JkX2xpbmUgPSByZWNvcmRfbGluZTsKIAkJICBlbmRfc2VxdWVu Y2UgPSAxOwogCQkgIGJyZWFrOwogCQljYXNlIERXX0xORV9zZXRfYWRkcmVz czoKIAkJICBhZGRyZXNzID0gcmVhZF9hZGRyZXNzIChhYmZkLCBsaW5lX3B0 ciwgY3UsICZieXRlc19yZWFkKTsKIAkJICBvcF9pbmRleCA9IDA7CiAJCSAg bGluZV9wdHIgKz0gYnl0ZXNfcmVhZDsKKworCQkgIGlmIChhZGRyZXNzID09 IDAgJiYgIWR3YXJmMl9wZXJfb2JqZmlsZS0+aGFzX3NlY3Rpb25fYXRfemVy bykKKwkJICAgIC8qIFRoaXMgbGluZSB0YWJsZSBpcyBmb3IgYSBmdW5jdGlv biB3aGljaCBoYXMgYmVlbgorCQkgICAgICAgR0NkIGJ5IHRoZSBsaW5rZXIu ICBJZ25vcmUgaXQuICBQUiBnZGIvMTI1MjggKi8KKwkJICAgIHBfcmVjb3Jk X2xpbmUgPSBub29wX3JlY29yZF9saW5lOworCiAJCSAgYWRkcmVzcyArPSBi YXNlYWRkcjsKIAkJICBicmVhazsKIAkJY2FzZSBEV19MTkVfZGVmaW5lX2Zp bGU6CkBAIC0xMDUyOCwxMiArMTA1NDUsMTIgQEAgZHdhcmZfZGVjb2RlX2xp bmVzIChzdHJ1Y3QgbGluZV9oZWFkZXIgKgogCQkJewogCQkJICBhZGRyID0g Z2RiYXJjaF9hZGRyX2JpdHNfcmVtb3ZlIChnZGJhcmNoLCBhZGRyZXNzKTsK IAkJCSAgaWYgKGxhc3Rfc3ViZmlsZSkKLQkJCSAgICByZWNvcmRfbGluZSAo bGFzdF9zdWJmaWxlLCAwLCBhZGRyKTsKKwkJCSAgICAoKnBfcmVjb3JkX2xp bmUpIChsYXN0X3N1YmZpbGUsIDAsIGFkZHIpOwogCQkJICBsYXN0X3N1YmZp bGUgPSBjdXJyZW50X3N1YmZpbGU7CiAJCQl9CiAJCSAgICAgIGFkZHIgPSBj aGVja19jdV9mdW5jdGlvbnMgKGFkZHJlc3MsIGN1KTsKIAkJICAgICAgYWRk ciA9IGdkYmFyY2hfYWRkcl9iaXRzX3JlbW92ZSAoZ2RiYXJjaCwgYWRkcik7 Ci0JCSAgICAgIHJlY29yZF9saW5lIChjdXJyZW50X3N1YmZpbGUsIGxpbmUs IGFkZHIpOworCQkgICAgICAoKnBfcmVjb3JkX2xpbmUpIChjdXJyZW50X3N1 YmZpbGUsIGxpbmUsIGFkZHIpOwogCQkgICAgfQogCQl9CiAJICAgICAgYmFz aWNfYmxvY2sgPSAwOwpAQCAtMTA2MzIsNyArMTA2NDksNyBAQCBkd2FyZl9k ZWNvZGVfbGluZXMgKHN0cnVjdCBsaW5lX2hlYWRlciAqCiAgICAgICAgICAg aWYgKCFkZWNvZGVfZm9yX3BzdF9wKQogCSAgICB7CiAJICAgICAgYWRkciA9 IGdkYmFyY2hfYWRkcl9iaXRzX3JlbW92ZSAoZ2RiYXJjaCwgYWRkcmVzcyk7 Ci0JICAgICAgcmVjb3JkX2xpbmUgKGN1cnJlbnRfc3ViZmlsZSwgMCwgYWRk cik7CisJICAgICAgKCpwX3JlY29yZF9saW5lKSAoY3VycmVudF9zdWJmaWxl LCAwLCBhZGRyKTsKIAkgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDog dGVzdHN1aXRlL2dkYi5kd2FyZjIvYnJlYWstb24tbGlua2VyLWdjZC1mdW5j dGlvbi5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVz dHN1aXRlL2dkYi5kd2FyZjIvYnJlYWstb24tbGlua2VyLWdjZC1mdW5jdGlv bi5leHAKZGlmZiAtTiB0ZXN0c3VpdGUvZ2RiLmR3YXJmMi9icmVhay1vbi1s aW5rZXItZ2NkLWZ1bmN0aW9uLmV4cAotLS0gL2Rldi9udWxsCTEgSmFuIDE5 NzAgMDA6MDA6MDAgLTAwMDAKKysrIHRlc3RzdWl0ZS9nZGIuZHdhcmYyL2Jy ZWFrLW9uLWxpbmtlci1nY2QtZnVuY3Rpb24uZXhwCTE1IE1hciAyMDExIDAx OjM4OjE2IC0wMDAwCkBAIC0wLDAgKzEsNTEgQEAKKyMgQ29weXJpZ2h0IDIw MTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisj IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMK KyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGdkYiB0ZXN0 c3VpdGUKKworIyBUZXN0IGNhc3RpbmcsIGVzcGVjaWFsbHkgYmV0d2VlbiBj bGFzcyB0eXBlcyBvciBwb2ludGVyLXRvLWNsYXNzCisjIHR5cGVzLgorCisj IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBnZGIgdGVzdHN1aXRlCisKK2lm ICR0cmFjZWxldmVsIHRoZW4geworICAgIHN0cmFjZSAkdHJhY2VsZXZlbAor fQorCisjCisjIHRlc3QgcnVubmluZyBwcm9ncmFtcworIworaWYgeyBbc2tp cF9jcGx1c190ZXN0c10gfSB7IGNvbnRpbnVlIH0KKworc2V0IHRlc3RmaWxl ICJicmVhay1vbi1saW5rZXItZ2NkLWZ1bmN0aW9uIgorc2V0IHNyY2ZpbGUg JHt0ZXN0ZmlsZX0uY2MKK3NldCBiaW5maWxlICR7b2JqZGlyfS8ke3N1YmRp cn0vJHt0ZXN0ZmlsZX0KKworaWYgW2dldF9jb21waWxlcl9pbmZvICR7Ymlu ZmlsZX0gImMrKyJdIHsKKyAgICByZXR1cm4gLTE7Cit9CisKK3NldCBhZGRp dGlvbmFsX2ZsYWdzIHstZmZ1bmN0aW9uLXNlY3Rpb25zIC1XbCwtLWdjLXNl Y3Rpb25zfQoraWYgIHsgW2dkYl9jb21waWxlICIke3NyY2Rpcn0vJHtzdWJk aXJ9LyR7c3JjZmlsZX0iICIke2JpbmZpbGV9IiBleGVjdXRhYmxlIFwKKwkg ICBbbGlzdCBkZWJ1ZyBjKysgYWRkaXRpb25hbF9mbGFncz0kYWRkaXRpb25h bF9mbGFnc11dICE9ICIiIH0geworICAgIHVudGVzdGVkICRzcmNmaWxlCisg ICAgcmV0dXJuIC0xCit9CisKK2NsZWFuX3Jlc3RhcnQgJHRlc3RmaWxlCisK KyMgVGhpcyBhY2NlcHRzIGUuZy4gIkJyZWFrcG9pbnQgMSBhdCAweDQwOTY4 YSIgKGZpeGVkIEdEQikKKyMgYnV0IHJlamVjdHMgZS5nLiAiQnJlYWtwb2lu dCAxIGF0IDB4NCIgKGJyb2tlbiBHREIpLgorZ2RiX3Rlc3QgImIgW2dkYl9n ZXRfbGluZV9udW1iZXIgImdkYiBicmVhayBoZXJlIl0iICJCcmVha3BvaW50 IFxbMC05XF0gYXQgMHhcWzAtOWEtZlxdXFswLTlhLWZcXSs6IC4qIgpJbmRl eDogdGVzdHN1aXRlL2dkYi5kd2FyZjIvYnJlYWstb24tbGlua2VyLWdjZC1m dW5jdGlvbi5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiB0 ZXN0c3VpdGUvZ2RiLmR3YXJmMi9icmVhay1vbi1saW5rZXItZ2NkLWZ1bmN0 aW9uLmNjCmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5kd2FyZjIvYnJlYWstb24t bGlua2VyLWdjZC1mdW5jdGlvbi5jYwotLS0gL2Rldi9udWxsCTEgSmFuIDE5 NzAgMDA6MDA6MDAgLTAwMDAKKysrIHRlc3RzdWl0ZS9nZGIuZHdhcmYyL2Jy ZWFrLW9uLWxpbmtlci1nY2QtZnVuY3Rpb24uY2MJMTUgTWFyIDIwMTEgMDE6 Mzg6MTYgLTAwMDAKQEAgLTAsMCArMSwzMiBAQAorLyogVGhpcyB0ZXN0Y2Fz ZSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29w eXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisK KyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAgICovCisKKy8vIFRlc3QgY2Fz ZSBmb3IgUFIgZ2RiLzEyNTI4CisKK3ZvaWQKK2ZvbyAoKQoreworICAvLyBU aGlzIGZ1bmN0aW9uIGlzIG5vdCByZWZlcmVuY2VkIGFuZCBzaG91bGQgYmUg R0NkIGJ5IHRoZSBsaW5rZXIKKyAgcmV0dXJuOyAvLyBnZGIgYnJlYWsgaGVy ZQorfQorCitpbnQKK21haW4gKCkKK3sKKyAgcmV0dXJuIDA7Cit9Cg== --90e6ba53a7b42f1505049e7b82c1--