From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12116 invoked by alias); 19 Apr 2003 00:36:00 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 12097 invoked by uid 71); 19 Apr 2003 00:36:00 -0000 Resent-Date: 19 Apr 2003 00:36:00 -0000 Resent-Message-ID: <20030419003600.12096.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, dean@foster.net Received: (qmail 11934 invoked by uid 48); 19 Apr 2003 00:34:09 -0000 Message-Id: <20030419003409.11933.qmail@sources.redhat.com> Date: Sat, 19 Apr 2003 00:36:00 -0000 From: dean@foster.net Reply-To: dean@foster.net To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/10437: "using namespace" at global scope creates incorrect code X-SW-Source: 2003-04/txt/msg00853.txt.bz2 List-Id: >Number: 10437 >Category: c++ >Synopsis: "using namespace" at global scope creates incorrect code >Confidential: no >Severity: non-critical >Priority: medium >Responsible: unassigned >State: open >Class: rejects-legal >Submitter-Id: net >Arrival-Date: Sat Apr 19 00:36:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: dean@foster.net >Release: g++ 3.2.2 >Organization: >Environment: linux >Description: Code compiles differently if it looks like: using namespace foo; main() { /* ... */ } VS: main() { using namespace foo; /* ... */ } My guess is that templates in the namespace foo are instantiated incorrectly. I'm not totally possitive this is an error, but it seems like either an error in g++, or an error in the definition of how templates should be instantiated. I cut the file down from several 1000 lines of code to under 400 lines. I'm sorry that I haven't been able to reproduce it with fewer lines of code. But if you look at the last 20 lines of code, I have flagged the troublesome statement. >How-To-Repeat: uncomment the line marked that is near the end of the file. >Fix: Not a clue! >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="namespace_error.cc" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="namespace_error.cc" Ly8gJElkOiBuYW1lc3BhY2VfZXJyb3IuY2MsdiA0LjEgMjAwMy8wNC8xOSAwMDoxODoxOCBmb3N0 ZXIgRXhwICQgIAoKCiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1 ZGUgPGl0ZXJhdG9yPgoKLy8gIEVYVEVOU0lCTEVfQklOQVJZX0lURVJBVE9SICBFWFRFTlNJQkxF X0JJTkFSWV9JVEVSQVRPUiAgRVhURU5TSUJMRV9CSU5BUllfSVRFUkFUT1IKbmFtZXNwYWNlIHsK ICB0ZW1wbGF0ZTxjbGFzcyBDMSwgY2xhc3MgQzI+CiAgY2xhc3MgQmFzZV9JdGVyYXRvcl9DYXRl Z29yeTsKICAKICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KICBjbGFzcyBCYXNlX0l0ZXJhdG9yX0NhdGVn b3J5PEMsQz4KICB7CiAgICB0eXBlZGVmIEMgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgfTsKfQoKdGVt cGxhdGU8Y2xhc3MgSTEsIGNsYXNzIEkyPgpjbGFzcyB0d29faXRlcmF0b3JfdHJhaXRzCnsKICB0 eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEkxPjo6aXRlcmF0b3JfY2F0ZWdv cnkgaXRlcmF0b3IxX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90 cmFpdHM8STI+OjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcjJfY2F0ZWdvcnk7CiAgdHlwZWRl ZiB0eXBlbmFtZSBCYXNlX0l0ZXJhdG9yX0NhdGVnb3J5PGl0ZXJhdG9yMV9jYXRlZ29yeSxpdGVy YXRvcjJfY2F0ZWdvcnk+OjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKfTsK CgovKgogIEV4dGVuc2libGUgYmluYXJ5IGl0ZXJhdG9ycyBhcmUgYW5hbG9nb3VzIHRvIHVuYXJ5 IHZlcnNpb25zLCBidXQKICBzdXBwb3J0IHR3byBpdGVyYXRvcnMgcmF0aGVyIHRoYW4ganVzdCBv bmUuCgogIE5vdGU6IGFsbCBsZW5ndGhzIGFuZCBlbmQgY29uZGl0aW9ucyBkZXRlcm1pbmVkIGJ5 IEkxLgoqLwoKdGVtcGxhdGU8Y2xhc3MgSG9zdCwgY2xhc3MgSTEsIGNsYXNzIEkyLCBjbGFzcyBD YXRlZ29yeT4KY2xhc3MgZXh0ZW5zaWJsZV9iaW5hcnlfaXRlcmF0b3I7Cgp0ZW1wbGF0ZTxjbGFz cyBIb3N0LCBjbGFzcyBJMSwgY2xhc3MgSTI+CmNsYXNzIGV4dGVuc2libGVfYmluYXJ5X2l0ZXJh dG9yPEhvc3QsSTEsSTIsc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZz4Kewpwcm90ZWN0ZWQ6CiAg STEgbUl0ZXIxOwogIEkyIG1JdGVyMjsKcHVibGljOgogIHR5cGVkZWYgZXh0ZW5zaWJsZV9iaW5h cnlfaXRlcmF0b3I8SG9zdCxJMSxJMixjbGFzcyBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnPiB0 eXBlX29mX3RoaXM7CiAgCiAgZXh0ZW5zaWJsZV9iaW5hcnlfaXRlcmF0b3IoY29uc3QgSTEmIGl0 MSwgY29uc3QgSTImIGl0MikKICAgIDogbUl0ZXIxKGl0MSksIG1JdGVyMihpdDIpICB7ICB9Cgog IEhvc3QmIG9wZXJhdG9yKysoKSB7ICsrbUl0ZXIxOyArK21JdGVyMjsgcmV0dXJuIHN0YXRpY19j YXN0PEhvc3QmPigqdGhpcyk7IH0KCiAgSG9zdCBvcGVyYXRvcisrKGludCkgewogICAgSG9zdCBy ZXN1bHQoc3RhdGljX2Nhc3Q8SG9zdCY+KCp0aGlzKSk7CiAgICArK21JdGVyMTsgKyttSXRlcjI7 CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHR5cGVfb2Zf dGhpcyYgaXQpIGNvbnN0IHsgcmV0dXJuIG1JdGVyMSAhPSBpdC5tSXRlcjE7IH0KICBib29sIG9w ZXJhdG9yPT0oY29uc3QgdHlwZV9vZl90aGlzJiBpdCkgY29uc3QgeyByZXR1cm4gbUl0ZXIxID09 IGl0Lm1JdGVyMTsgfQoKIHByb3RlY3RlZDoKICAKICB0eXBlbmFtZSBzdGQ6OnBhaXI8dHlwZW5h bWUgc3RkOjppdGVyYXRvcl90cmFpdHM8STE+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBzdGQ6Oml0 ZXJhdG9yX3RyYWl0czxJMj46OnZhbHVlX3R5cGU+CiAgICB2YWx1ZSgpIGNvbnN0CiAgICB7IHJl dHVybiBzdGQ6Om1ha2VfcGFpcigqbUl0ZXIxLCptSXRlcjIpOyB9CiAgCiAgdHlwZW5hbWUgc3Rk OjppdGVyYXRvcl90cmFpdHM8STE+Ojp2YWx1ZV90eXBlCiAgICBmaXJzdCgpIGNvbnN0CiAgICB7 IHJldHVybiAqbUl0ZXIxOyB9CgogIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEkyPjo6 dmFsdWVfdHlwZQogICAgc2Vjb25kKCkgY29uc3QKICAgIHsgcmV0dXJuICptSXRlcjI7IH0KCiAg CiAgdHlwZW5hbWUgc3RkOjpwYWlyPHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEkxPjo6 dmFsdWVfdHlwZSwgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8STI+Ojp2YWx1ZV90eXBl PgogICAgdmFsdWUoKSAKICAgIHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCptSXRlcjEsKm1JdGVy Mik7IH0KICAKICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxJMT46OnZhbHVlX3R5cGUK ICAgIGZpcnN0KCkgCiAgICB7IHJldHVybiAqbUl0ZXIxOyB9CgogIHR5cGVuYW1lIHN0ZDo6aXRl cmF0b3JfdHJhaXRzPEkyPjo6dmFsdWVfdHlwZQogICAgc2Vjb25kKCkKICAgIHsgcmV0dXJuICpt SXRlcjI7IH0KCn07Cgp0ZW1wbGF0ZTxjbGFzcyBIb3N0LCBjbGFzcyBJMSwgY2xhc3MgSTI+CmNs YXNzIGV4dGVuc2libGVfYmluYXJ5X2l0ZXJhdG9yPEhvc3QsSTEsSTIsc3RkOjpiaWRpcmVjdGlv bmFsX2l0ZXJhdG9yX3RhZz4KIDogcHVibGljIGV4dGVuc2libGVfYmluYXJ5X2l0ZXJhdG9yPEhv c3QsSTEsSTIsc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZz4KewogcHVibGljOgoKICBleHRlbnNp YmxlX2JpbmFyeV9pdGVyYXRvcihjb25zdCBJMSYgaXQxLCBjb25zdCBJMiYgaXQyKQogICAgOiBl eHRlbnNpYmxlX2JpbmFyeV9pdGVyYXRvcjxIb3N0LEkxLEkyLHN0ZDo6Zm9yd2FyZF9pdGVyYXRv cl90YWc+KGl0MSwgaXQyKSB7IH0KCiAgSG9zdCYgb3BlcmF0b3ItLSgpIHsgLS1tSXRlcjE7IC0t bUl0ZXIyOyByZXR1cm4gc3RhdGljX2Nhc3Q8SG9zdCY+KCp0aGlzKTsgfQoKICBIb3N0IG9wZXJh dG9yLS0oaW50KSB7CiAgICBIb3N0IHJlc3VsdChzdGF0aWNfY2FzdDxIb3N0Jj4oKnRoaXMpKTsK ICAgIC0tbUl0ZXIxOyAtLW1JdGVyMjsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKfTsKCnRlbXBs YXRlPGNsYXNzIEhvc3QsIGNsYXNzIEkxLCBjbGFzcyBJMj4KY2xhc3MgZXh0ZW5zaWJsZV9iaW5h cnlfaXRlcmF0b3I8SG9zdCxJMSxJMixzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnPgog IDogcHVibGljIGV4dGVuc2libGVfYmluYXJ5X2l0ZXJhdG9yPEhvc3QsSTEsSTIsc3RkOjpiaWRp cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZz4KewogcHVibGljOgogIHR5cGVkZWYgZXh0ZW5zaWJsZV9i aW5hcnlfaXRlcmF0b3I8SG9zdCxJMSxJMixzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn PiB0eXBlX29mX3RoaXM7CgogIGV4dGVuc2libGVfYmluYXJ5X2l0ZXJhdG9yKGNvbnN0IEkxJiBp dDEsIGNvbnN0IEkyJiBpdDIpCiAgICA6IGV4dGVuc2libGVfYmluYXJ5X2l0ZXJhdG9yPEhvc3Qs STEsSTIsc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZz4oaXQxLGl0MikgeyB9CgogIEhv c3QKICBvcGVyYXRvcisoaW50IG4pICBjb25zdCAgewogICAgSG9zdCByZXN1bHQoc3RhdGljX2Nh c3Q8Y29uc3QgSG9zdCY+KCp0aGlzKSk7CiAgICByZXN1bHQgKz0gbjsKICAgIHJldHVybiByZXN1 bHQ7CiAgfQogIAogIEhvc3QKICBvcGVyYXRvci0oaW50IG4pICBjb25zdCAgewogICAgSG9zdCBy ZXN1bHQoc3RhdGljX2Nhc3Q8Y29uc3QgSG9zdCY+KCp0aGlzKSk7CiAgICByZXN1bHQgLT0gbjsK ICAgIHJldHVybiByZXN1bHQ7CiAgfQogIAogIEhvc3QmCiAgb3BlcmF0b3IrPShpbnQgbikgeyBt SXRlcjEgKz0gbjsgbUl0ZXIyICs9IG47IHJldHVybiBzdGF0aWNfY2FzdDxIb3N0Jj4oKnRoaXMp O30KIAogIEhvc3QmCiAgb3BlcmF0b3ItPShpbnQgbikgeyBtSXRlcjEgLT0gbjsgbUl0ZXIyICs9 IG47IHJldHVybiBzdGF0aWNfY2FzdDxIb3N0Jj4oKnRoaXMpO30KCiAgdHlwZW5hbWUgc3RkOjpp dGVyYXRvcl90cmFpdHM8STE+OjpkaWZmZXJlbmNlX3R5cGUKICAgIG9wZXJhdG9yLShjb25zdCB0 eXBlX29mX3RoaXMmIGl0KSB7IHJldHVybiBtSXRlcjEgLSBpdC5tSXRlcjE7IH0KCiAgYm9vbAog ICAgb3BlcmF0b3I8KGNvbnN0IHR5cGVfb2ZfdGhpcyYgaXQpIGNvbnN0IHsgcmV0dXJuIG1JdGVy MSA8IGl0Lm1JdGVyMTsgfQogIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCB0eXBlX29mX3RoaXMm IGl0KSBjb25zdCB7IHJldHVybiBtSXRlcjEgPiBpdC5tSXRlcjE7IH0KCn07CgoKLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICBCaW5hcnkgSXRlcmF0b3IgIC8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCnRlbXBsYXRlIDxjbGFzcyBGLCBjbGFz cyBCYXNlSXRlcjEsIGNsYXNzIEJhc2VJdGVyMj4KY2xhc3MgYmluYXJ5X2l0ZXJhdG9yIDogcHJv dGVjdGVkIEYsCiAgICAgICAgcHVibGljIGV4dGVuc2libGVfYmluYXJ5X2l0ZXJhdG9yPGJpbmFy eV9pdGVyYXRvcjxGLEJhc2VJdGVyMSxCYXNlSXRlcjI+LAoJCQkJCSAgQmFzZUl0ZXIxLCBCYXNl SXRlcjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1l IHR3b19pdGVyYXRvcl90cmFpdHM8QmFzZUl0ZXIxLEJhc2VJdGVyMj46Oml0ZXJhdG9yX2NhdGVn b3J5PiwKICAgICAgICBwdWJsaWMgc3RkOjppdGVyYXRvcjx0eXBlbmFtZSB0d29faXRlcmF0b3Jf dHJhaXRzPEJhc2VJdGVyMSxCYXNlSXRlcjI+OjppdGVyYXRvcl9jYXRlZ29yeSwgdHlwZW5hbWUg Rjo6cmVzdWx0X3R5cGU+CnsKcHVibGljOgogIHR5cGVkZWYgICAgICAgICAgYmluYXJ5X2l0ZXJh dG9yPEYsQmFzZUl0ZXIxLEJhc2VJdGVyMj4gSG9zdDsKICB0eXBlZGVmIHR5cGVuYW1lIHR3b19p dGVyYXRvcl90cmFpdHM8QmFzZUl0ZXIxLEJhc2VJdGVyMj46Oml0ZXJhdG9yX2NhdGVnb3J5IGl0 ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgICAgICAgICAgZXh0ZW5zaWJsZV9iaW5hcnlfaXRl cmF0b3I8SG9zdCxCYXNlSXRlcjEsQmFzZUl0ZXIyLGl0ZXJhdG9yX2NhdGVnb3J5PiBleHRlbnNp YmxlX2l0ZXJhdG9yOwogIAogIGJpbmFyeV9pdGVyYXRvcihjb25zdCBGJiBmLCBjb25zdCBCYXNl SXRlcjEmIGl0MSwgY29uc3QgQmFzZUl0ZXIyJiBpdDIpCiAgICA6IEYoZiksIGV4dGVuc2libGVf aXRlcmF0b3IoaXQxLCBpdDIpIHsgfQoKICB0eXBlbmFtZSBGOjpyZXN1bHRfdHlwZQogIG9wZXJh dG9yKigpCiAgeyByZXR1cm4gb3BlcmF0b3IoKShmaXJzdCgpLCBzZWNvbmQoKSk7IH0KCiAgdHlw ZW5hbWUgRjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvciooKSBjb25zdAogIHsgcmV0dXJuIG9wZXJh dG9yKCkoZmlyc3QoKSwgc2Vjb25kKCkpOyB9CgogIGV4dGVuc2libGVfaXRlcmF0b3I6Om9wZXJh dG9yPT07CiAgZXh0ZW5zaWJsZV9pdGVyYXRvcjo6b3BlcmF0b3IhPTsKCn07CgoKLy8gUkFOR0Ug UkFOR0UgUkFOR0UgUkFOR0UgUkFOR0UgUkFOR0UgUkFOR0UgUkFOR0UgUkFOR0UgUkFOR0UgUkFO R0UgUkFOR0UgUkFOR0UgUkFOR0UgUkFOR0UKCnRlbXBsYXRlIDxjbGFzcyBJdGVyPgpjbGFzcyBy YW5nZQp7CnB1YmxpYzoKCiAgY29uc3QgSXRlciBmaXJzdDsKICBjb25zdCBJdGVyIHNlY29uZDsK CiAgcmFuZ2UgKEl0ZXIgYmVnaW4sIEl0ZXIgZW5kKQogICAgOiBmaXJzdChiZWdpbiksIHNlY29u ZChlbmQpIHsgfQogIAogIHJhbmdlICggY29uc3QgcmFuZ2U8SXRlcj4mIHIgKQogICAgOiBmaXJz dChyLmZpcnN0KSwgc2Vjb25kKHIuc2Vjb25kKSB7IH0KfTsKCgovLyBCRUdJTiBCRUdJTiBCRUdJ TiBCRUdJTiBCRUdJTiBCRUdJTiBCRUdJTiBCRUdJTiBCRUdJTiBCRUdJTiBCRUdJTiBCRUdJTiBC RUdJTiBCRUdJTiBCRUdJTiBCRUdJTgoKdGVtcGxhdGU8Y2xhc3MgQ29udGFpbmVyPgppbmxpbmUK dHlwZW5hbWUgQ29udGFpbmVyOjpjb25zdF9pdGVyYXRvcgpiZWdpbihjb25zdCBDb250YWluZXIm IGNvbnRhaW5lcikKewogIC8vIHN0ZDo6Y291dCA8PCAiYmVnaW4gZm9yIGNvbnRhaW5lciBvZiBz aXplICIgPDwgY29udGFpbmVyLnNpemUoKSA8PCBzdGQ6OmVuZGw7CiAgcmV0dXJuIGNvbnRhaW5l ci5iZWdpbigpOwp9CgoKdGVtcGxhdGU8Y2xhc3MgSXRlcj4KaW5saW5lCkl0ZXIKYmVnaW4ocmFu Z2U8SXRlcj4gcikKewogIHJldHVybiByLmZpcnN0Owp9CgoKLy8gRU5EICBFTkQgIEVORCAgRU5E ICBFTkQgIEVORCAgRU5EICBFTkQgIEVORCAgRU5EICBFTkQgIEVORCAgRU5EICBFTkQgIEVORCAg RU5EICBFTkQgIEVORCAgRU5EIAoKdGVtcGxhdGU8Y2xhc3MgQ29udGFpbmVyPgppbmxpbmUKdHlw ZW5hbWUgQ29udGFpbmVyOjpjb25zdF9pdGVyYXRvcgplbmQoY29uc3QgQ29udGFpbmVyJiBjb250 YWluZXIpCnsKICAvLyBzdGQ6OmNvdXQgPDwgImVuZCBmb3IgY29udGFpbmVyIG9mIHNpemUgIiA8 PCBjb250YWluZXIuc2l6ZSgpIDw8IHN0ZDo6ZW5kbDsKICByZXR1cm4gY29udGFpbmVyLmVuZCgp Owp9CiAgCgp0ZW1wbGF0ZTxjbGFzcyBJdGVyPgppbmxpbmUKSXRlcgplbmQocmFuZ2U8SXRlcj4g cikKewogIHJldHVybiByLnNlY29uZDsKfQoKCgovLyAgT1VUUFVUIE9VVFBVVCBPVVRQVVQgT1VU UFVUIE9VVFBVVCBPVVRQVVQgT1VUUFVUIE9VVFBVVCBPVVRQVVQgT1VUUFVUIE9VVFBVVCBPVVRQ VVQgT1VUUFVUCgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcj4KaW5saW5lIHN0ZDo6b3N0cmVhbSYKb3Bl cmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCByYW5nZTxJdGVyPiYgcikKewogIHR5cGVk ZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SXRlcj46OnZhbHVlX3R5cGUgbG9jYWxf dHlwZTsKICBzdGQ6OmNvcHkoIGJlZ2luKHIpLCBlbmQociksICBzdGQ6Om9zdHJlYW1faXRlcmF0 b3I8bG9jYWxfdHlwZT4ob3MsICIgIikpOwogIG9zIDw8IHN0ZDo6ZW5kbDsKICByZXR1cm4gb3M7 Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVyPgpjbGFzcyByYW5nZV90cmFpdHMgOiBwdWJs aWMgc3RkOjppdGVyYXRvcl90cmFpdHM8dHlwZW5hbWUgQ29udGFpbmVyOjpjb25zdF9pdGVyYXRv cj4KewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OmNvbnN0X2l0ZXJhdG9y IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgcmFuZ2U8Y29uc3RfaXRlcmF0b3I+ICAgICAgICAg ICAgICByYW5nZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIEl0ZXI+CmNsYXNzIHJhbmdlX3RyYWl0 czxyYW5nZTwgSXRlciA+ID4gOiBwdWJsaWMgc3RkOjppdGVyYXRvcl90cmFpdHM8SXRlcj4Kewpw dWJsaWM6CiAgdHlwZWRlZiBJdGVyICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CiAg dHlwZWRlZiByYW5nZTxjb25zdF9pdGVyYXRvcj4gcmFuZ2U7Cn07CgoKCgovLyBCSU5BUllfUkFO R0VfVFJBSVRTICAgQklOQVJZX1JBTkdFX1RSQUlUUyAgIEJJTkFSWV9SQU5HRV9UUkFJVFMgICBC SU5BUllfUkFOR0VfVFJBSVRTCgp0ZW1wbGF0ZTxjbGFzcyBGLCBjbGFzcyBJMSwgY2xhc3MgSTI+ CmNsYXNzIGJpbmFyeV9pdGVyYXRvcjsKCnRlbXBsYXRlIDxjbGFzcyBGLCBjbGFzcyBSYW5nZTEs IGNsYXNzIFJhbmdlMj4KY2xhc3MgYmluYXJ5X3JhbmdlX3RyYWl0cyAKewpwcml2YXRlOgogIHR5 cGVkZWYgICAgICAgICAgcmFuZ2VfdHJhaXRzPFJhbmdlMT4gYmFzZV90cmFpdHMxOwogIHR5cGVk ZWYgICAgICAgICAgcmFuZ2VfdHJhaXRzPFJhbmdlMj4gYmFzZV90cmFpdHMyOwogIHR5cGVkZWYg dHlwZW5hbWUgYmFzZV90cmFpdHMxOjpjb25zdF9pdGVyYXRvciBiYXNlX2l0ZXJhdG9yMTsKICB0 eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHJhaXRzMjo6Y29uc3RfaXRlcmF0b3IgYmFzZV9pdGVyYXRv cjI7CiAgdHlwZWRlZiB0eXBlbmFtZSB0d29faXRlcmF0b3JfdHJhaXRzPGJhc2VfaXRlcmF0b3Ix LCBiYXNlX2l0ZXJhdG9yMj46Oml0ZXJhdG9yX2NhdGVnb3J5IGJhc2VfY2F0ZWdvcnk7CgpwdWJs aWM6CiAgdHlwZWRlZiAgICAgICAgICBiaW5hcnlfaXRlcmF0b3I8RiwgYmFzZV9pdGVyYXRvcjEs IGJhc2VfaXRlcmF0b3IyPiBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmICAgICAgICAgIHJhbmdl PGNvbnN0X2l0ZXJhdG9yPiByYW5nZTsKfTsKCgoKCi8vIE1BS0VfUkFOR0UgIE1BS0VfUkFOR0Ug IE1BS0VfUkFOR0UgIE1BS0VfUkFOR0UgIE1BS0VfUkFOR0UgIE1BS0VfUkFOR0UgIE1BS0VfUkFO R0UgIE1BS0VfUkFOR0UgIAoKCnRlbXBsYXRlIDx0eXBlbmFtZSBDb250YWluZXI+CnJhbmdlPHR5 cGVuYW1lIHJhbmdlX3RyYWl0czxDb250YWluZXI+Ojpjb25zdF9pdGVyYXRvcj4KbWFrZV9yYW5n ZShjb25zdCBDb250YWluZXImIGMpCnsKICAvLyBzdGQ6OmNvdXQgPDwgIm1ha2luZyBhIGNvbnRh aW5lciByYW5nZS4iIDw8IHN0ZDo6ZW5kbDsKICByZXR1cm4gcmFuZ2U8dHlwZW5hbWUgcmFuZ2Vf dHJhaXRzPENvbnRhaW5lcj46OmNvbnN0X2l0ZXJhdG9yPihiZWdpbihjKSwgZW5kKGMpKTsKfQoK Ci8vIE1BS0VfQklOQVJZX1JBTkdFICBNQUtFX0JJTkFSWV9SQU5HRSAgTUFLRV9CSU5BUllfUkFO R0UgIE1BS0VfQklOQVJZX1JBTkdFICBNQUtFX0JJTkFSWV9SQU5HRSAgCgoKdGVtcGxhdGUgPGNs YXNzIEYsIGNsYXNzIFJhbmdlMSwgY2xhc3MgUmFuZ2UyPgp0eXBlbmFtZSBiaW5hcnlfcmFuZ2Vf dHJhaXRzPEYsUmFuZ2UxLFJhbmdlMj46OnJhbmdlCm1ha2VfYmluYXJ5X3JhbmdlIChjb25zdCBG JiBmLCBjb25zdCBSYW5nZTEmIHJhbmdlMSwgY29uc3QgUmFuZ2UyJiByYW5nZTIpCnsKICB0eXBl ZGVmIGJpbmFyeV9yYW5nZV90cmFpdHM8RixSYW5nZTEsUmFuZ2UyPiB0cmFpdHM7CiAgdHlwZWRl ZiB0eXBlbmFtZSB0cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHJldHVy biB0eXBlbmFtZSB0cmFpdHM6OnJhbmdlKGNvbnN0X2l0ZXJhdG9yKGYsIGJlZ2luKHJhbmdlMSks IGJlZ2luKHJhbmdlMikpLAoJCQkJY29uc3RfaXRlcmF0b3IoZiwgZW5kKHJhbmdlMSksIGVuZChy YW5nZTIpKSApOwp9CgoKCm5hbWVzcGFjZSBhcGwKeyAgCiAgCiAgCiAgLy8gKy0qLyAgKy0qLyAg Ky0qLyAgKy0qLyAgKy0qLyAgKy0qLyAgKy0qLyAgKy0qLyAgKy0qLyAgKy0qLyAgKy0qLyAgKy0q LyAgKy0qLyAgKy0qLyAgKy0qLyAgKy0qLyAgKy0qLyAgCiAgCiAgdGVtcGxhdGUgPGNsYXNzIFJh bmdlMSwgY2xhc3MgUmFuZ2UyPgogICAgaW5saW5lCiAgICB0eXBlbmFtZSBiaW5hcnlfcmFuZ2Vf dHJhaXRzPHN0ZDo6bXVsdGlwbGllczx0eXBlbmFtZSByYW5nZV90cmFpdHM8UmFuZ2UxPjo6dmFs dWVfdHlwZT4sICBSYW5nZTEsICBSYW5nZTI+OjpyYW5nZQogICAgb3BlcmF0b3IqKGNvbnN0IFJh bmdlMSYgcmFuZ2UxLCAgY29uc3QgUmFuZ2UyJiByYW5nZTIpCiAgICB7CiAgICAgIHJldHVybiBt YWtlX2JpbmFyeV9yYW5nZShzdGQ6Om11bHRpcGxpZXM8dHlwZW5hbWUgcmFuZ2VfdHJhaXRzPFJh bmdlMT46OnZhbHVlX3R5cGU+KCksCgkJCSAgICAgICBtYWtlX3JhbmdlKHJhbmdlMSksICAgIC8v IG1ha2UgcmFuZ2UgbmVlZGVkPwoJCQkgICAgICAgbWFrZV9yYW5nZShyYW5nZTIpKTsKICAgIH0K CiAgdGVtcGxhdGUgPGNsYXNzIFJhbmdlMSxjbGFzcyBSYW5nZTI+CiAgICBpbmxpbmUKICAgIHR5 cGVuYW1lIGJpbmFyeV9yYW5nZV90cmFpdHM8c3RkOjptaW51czx0eXBlbmFtZSByYW5nZV90cmFp dHM8UmFuZ2UxPjo6dmFsdWVfdHlwZT4sICBSYW5nZTEsICBSYW5nZTI+OjpyYW5nZQogICAgb3Bl cmF0b3ItKGNvbnN0IFJhbmdlMSYgcmFuZ2UxLCAgY29uc3QgUmFuZ2UyJiByYW5nZTIpCiAgICB7 CiAgICAgIHJldHVybiBtYWtlX2JpbmFyeV9yYW5nZShzdGQ6Om1pbnVzPHR5cGVuYW1lIHJhbmdl X3RyYWl0czxSYW5nZTE+Ojp2YWx1ZV90eXBlPigpLCByYW5nZTEsIHJhbmdlMik7CiAgICB9Cgp9 IAoKCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K Ly8KLy8KLy8KLy8gIFVOQ09NTUVOVElORyBUSElTIEZPTExPV0lORyBMSU5FIENBVVNFUyBHKysg My4yLjIgdG8gY29tcGxhaW4gCi8vCi8vICB1c2luZyBuYW1lc3BhY2UgYXBsOwovLwovLwovLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCgppbnQgbWFp bigpCnsKICBzdGQ6OnZlY3Rvcjxkb3VibGU+IFg7CgogIHN0ZDo6Y291dCA8PCAiICBzcXVhcmVk IHZpYSAqOiAgICAgICAgICAiIDw8IGFwbDo6b3BlcmF0b3IqKFgsWCk7Cn0KCg==