Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:42437 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 16889 invoked from network); 1 Jan 2009 16:09:19 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 1 Jan 2009 16:09:19 -0000 Authentication-Results: pb1.pair.com header.from=helly@php.net; sender-id=unknown Authentication-Results: pb1.pair.com smtp.mail=helly@php.net; spf=unknown; sender-id=unknown Received-SPF: unknown (pb1.pair.com: domain php.net does not designate 85.214.94.56 as permitted sender) X-PHP-List-Original-Sender: helly@php.net X-Host-Fingerprint: 85.214.94.56 aixcept.net Linux 2.6 Received: from [85.214.94.56] ([85.214.94.56:44998] helo=h1149922.serverkompetenz.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 22/F9-62500-CAAEC594 for ; Thu, 01 Jan 2009 11:09:19 -0500 Received: from MBOERGER-ZRH.corp.google.com (229-122.107-92.cust.bluewin.ch [92.107.122.229]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by h1149922.serverkompetenz.net (Postfix) with ESMTP id EC3CC11F5AB; Thu, 1 Jan 2009 17:09:12 +0100 (CET) Date: Thu, 1 Jan 2009 17:06:23 +0100 Reply-To: Marcus Boerger X-Priority: 3 (Normal) Message-ID: <533383914.20090101170623@marcus-boerger.de> To: "Hannes Magnusson" CC: "Lars Strojny" , =?iso-8859-1?Q?David_Z=FClke?= , "PHP Internals" In-Reply-To: <18322421.20090101160939@marcus-boerger.de> References: <08AA10DA-2704-415C-8A8C-893C89990DC1@bitextender.com> <868073456.20081231173818@marcus-boerger.de> <1230746348.25966.3.camel@localhost> <8710064882.20081231201259@marcus-boerger.de> <7f3ed2c30812311133m708bcab1s746f9ca7c3129542@mail.gmail.com> <18322421.20090101160939@marcus-boerger.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------3517F4D7D696C6" Subject: Re: [PHP-DEV] [RFC] Re: [PHP-DEV] __invoke() weirdness From: helly@php.net (Marcus Boerger) ------------3517F4D7D696C6 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Hello Hannes, as discussed online. At the moment we should not have any __get() calls during method resolution. The newly updated patch does that now. And I think we are now safe to submit. In the future we could think of adding __getClosure() which would be called to resolve a dynamic closure. But for the moment we do not need it badly and the patch with the increased consistency is good enough. marcus Thursday, January 1, 2009, 4:09:39 PM, you wrote: > Hello Hannes, > Wednesday, December 31, 2008, 8:33:43 PM, you wrote: >> On Wed, Dec 31, 2008 at 20:12, Marcus Boerger wrote: >>> Hello Lars, >>> >>> Wednesday, December 31, 2008, 6:59:08 PM, you wrote: >>> >>>> Hi Markus, >>> >>>> have you measured the performance impact in a class with - say - ten >>>> methods? And what to do with __get() and __call()? How are the >>>> prioritized in the method resolve order? >>> >>> Translated into user code we now have: >>> >>> public function __zend_call($name, $args) { >>> // Added property lookup >>> if (isset($this->$name)) { // may call __isset >>> $callable = $this->$name; // may call __get >> Uhmm. I hope I got this wrong as: > Well yes, there are no __isset() calls unless you call isset() of course. > I have updated the patch and added a test to demonstrate it better > (closure_036.phpt). I also added debug information to closures which makes > development much easier. The next step is to fix an issue in the engine and > then submit unless there is a bigger issue with this. >> class foo { >> function __isset() { >> return true; >> } >> function __get() { >> return "hello world"; >> } >> function __call() { >> } >> } >> $foo = new foo; >> $foo->foobar(); >> will first execute __isset(), then __get() and then __call()? That is >> a major backwards compatibility break, and increases the inconsistency >> and decreases readability 10times >> -Hannes > Best regards, > Marcus Best regards, Marcus ------------3517F4D7D696C6 Content-Type: text/plain; name="ze2-callable-properties-5.3-20090101-b.diff.txt" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="ze2-callable-properties-5.3-20090101-b.diff.txt" SW5kZXg6IFplbmQvemVuZF9jbG9zdXJlcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9y ZXBvc2l0b3J5L1plbmRFbmdpbmUyL3plbmRfY2xvc3VyZXMuYyx2CnJldHJpZXZpbmcgcmV2 aXNpb24gMS4zLjIuMTcKZGlmZiAtdSAtcCAtZCAtcjEuMy4yLjE3IHplbmRfY2xvc3VyZXMu YwotLS0gWmVuZC96ZW5kX2Nsb3N1cmVzLmMJMzEgRGVjIDIwMDggMTE6MTU6MzEgLTAwMDAJ MS4zLjIuMTcKKysrIFplbmQvemVuZF9jbG9zdXJlcy5jCTEgSmFuIDIwMDkgMTY6MDI6MTQg LTAwMDAKQEAgLTE0LDYgKzE0LDcgQEAKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCBB dXRob3JzOiBDaHJpc3RpYW4gU2VpbGVyIDxjaHJpc19zZUBnbXgubmV0PiAgICAgICAgICAg ICAgICAgICAgICAgICB8CiAgICB8ICAgICAgICAgIERtaXRyeSBTdG9nb3YgPGRtaXRyeUB6 ZW5kLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAg TWFyY3VzIEJvZXJnZXIgPGhlbGx5QHBocC5uZXQ+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAqLwogCkBAIC0yMiw2ICsyMyw3IEBA CiAjaW5jbHVkZSAiemVuZC5oIgogI2luY2x1ZGUgInplbmRfQVBJLmgiCiAjaW5jbHVkZSAi emVuZF9jbG9zdXJlcy5oIgorI2luY2x1ZGUgInplbmRfZXhjZXB0aW9ucy5oIgogI2luY2x1 ZGUgInplbmRfaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInplbmRfb2JqZWN0cy5oIgogI2lu Y2x1ZGUgInplbmRfb2JqZWN0c19BUEkuaCIKQEAgLTIyMiw2ICsyMjQsNTkgQEAgaW50IHpl bmRfY2xvc3VyZV9nZXRfY2xvc3VyZSh6dmFsICpvYmosIAogfQogLyogfX19ICovCiAKK1pF TkRfQVBJIEhhc2hUYWJsZSAqemVuZF9jbG9zdXJlX2dldF9kZWJ1Z19pbmZvKHp2YWwgKm9i amVjdCwgaW50ICppc190ZW1wIFRTUk1MU19EQykgLyoge3t7ICovCit7CisJemVuZF9jbG9z dXJlICpjbG9zdXJlID0gKHplbmRfY2xvc3VyZSAqKXplbmRfb2JqZWN0X3N0b3JlX2dldF9v YmplY3Qob2JqZWN0IFRTUk1MU19DQyk7CisJSGFzaFRhYmxlICpydjsKKwl6dmFsICp2YWw7 CisJc3RydWN0IF96ZW5kX2FyZ19pbmZvICphcmdfaW5mbyA9IGNsb3N1cmUtPmZ1bmMuY29t bW9uLmFyZ19pbmZvOworCisJKmlzX3RlbXAgPSAxOworCUFMTE9DX0hBU0hUQUJMRShydik7 CisJemVuZF9oYXNoX2luaXQocnYsIDEsIE5VTEwsIFpWQUxfUFRSX0RUT1IsIDApOworCXZh bCA9IGNsb3N1cmUtPnRoaXNfcHRyOworCWlmICghdmFsKSB7CisJCUFMTE9DX0lOSVRfWlZB TCh2YWwpOworCX0gZWxzZSB7CisJCVpfQUREUkVGX1AodmFsKTsKKwl9CisJemVuZF9zeW10 YWJsZV91cGRhdGUocnYsICJ0aGlzIiwgc2l6ZW9mKCJ0aGlzIiksICh2b2lkICopICZ2YWws IHNpemVvZih6dmFsICopLCBOVUxMKTsKKwlpZiAoY2xvc3VyZS0+ZnVuYy50eXBlID09IFpF TkRfVVNFUl9GVU5DVElPTiAmJiBjbG9zdXJlLT5mdW5jLm9wX2FycmF5LnN0YXRpY192YXJp YWJsZXMpIHsKKwkJSGFzaFRhYmxlICpzdGF0aWNfdmFyaWFibGVzID0gY2xvc3VyZS0+ZnVu Yy5vcF9hcnJheS5zdGF0aWNfdmFyaWFibGVzOworCQlNQUtFX1NURF9aVkFMKHZhbCk7CisJ CWFycmF5X2luaXQodmFsKTsKKwkJemVuZF9oYXNoX2NvcHkoWl9BUlJWQUxfUCh2YWwpLCBz dGF0aWNfdmFyaWFibGVzLCAoY29weV9jdG9yX2Z1bmNfdCl6dmFsX2FkZF9yZWYsIE5VTEws IHNpemVvZih6dmFsKikpOworCQl6ZW5kX3N5bXRhYmxlX3VwZGF0ZShydiwgInN0YXRpYyIs IHNpemVvZigic3RhdGljIiksICh2b2lkICopICZ2YWwsIHNpemVvZih6dmFsICopLCBOVUxM KTsKKwl9CisKKwlpZiAoYXJnX2luZm8pIHsKKwkJTUFLRV9TVERfWlZBTCh2YWwpOworCQlh cnJheV9pbml0KHZhbCk7CisJCXplbmRfdWludCBpLCByZXF1aXJlZCA9IGNsb3N1cmUtPmZ1 bmMuY29tbW9uLnJlcXVpcmVkX251bV9hcmdzOworCQlmb3IgKGkgPSAwOyBpIDwgY2xvc3Vy ZS0+ZnVuYy5jb21tb24ubnVtX2FyZ3M7IGkrKykgeworCQkJY2hhciAqbmFtZSwgKmluZm87 CisJCQlpbnQgbmFtZV9sZW4sIGluZm9fbGVuOworCQkJaWYgKGFyZ19pbmZvLT5uYW1lKSB7 CisJCQkJbmFtZV9sZW4gPSB6ZW5kX3NwcHJpbnRmKCZuYW1lLCAwLCAiJXMkJXMiLAorCQkJ CQkJCQlhcmdfaW5mby0+cGFzc19ieV9yZWZlcmVuY2UgPyAiJiIgOiAiIiwKKwkJCQkJCQkJ YXJnX2luZm8tPm5hbWUpOworCQkJfSBlbHNlIHsKKwkJCQluYW1lX2xlbiA9IHplbmRfc3Bw cmludGYoJm5hbWUsIDAsICIlcyRwYXJhbSVkIiwKKwkJCQkJCQkJYXJnX2luZm8tPnBhc3Nf YnlfcmVmZXJlbmNlID8gIiYiIDogIiIsCisJCQkJCQkJCWkgKyAxKTsKKwkJCX0KKwkJCWlu Zm9fbGVuID0gemVuZF9zcHByaW50ZigmaW5mbywgMCwgIiVzIiwKKwkJCQkJCQlpID49IHJl cXVpcmVkID8gIjxvcHRpb25hbD4iIDogIjxyZXF1aXJlZD4iKTsKKwkJCWFkZF9hc3NvY19z dHJpbmdsX2V4KHZhbCwgbmFtZSwgbmFtZV9sZW4gKyAxLCBpbmZvLCBpbmZvX2xlbiwgMCk7 CisJCQllZnJlZShuYW1lKTsKKwkJCWFyZ19pbmZvKys7CisJCX0KKwkJemVuZF9zeW10YWJs ZV91cGRhdGUocnYsICJwYXJhbWV0ZXIiLCBzaXplb2YoInBhcmFtZXRlciIpLCAodm9pZCAq KSAmdmFsLCBzaXplb2YoenZhbCAqKSwgTlVMTCk7CisJfQorCXJldHVybiBydjsKK30KKy8q IH19fSAqLworCiB2b2lkIHplbmRfcmVnaXN0ZXJfY2xvc3VyZV9jZShUU1JNTFNfRCkgLyog e3t7ICovCiB7CiAJemVuZF9jbGFzc19lbnRyeSBjZTsKQEAgLTI0Myw2ICsyOTgsNyBAQCB2 b2lkIHplbmRfcmVnaXN0ZXJfY2xvc3VyZV9jZShUU1JNTFNfRCkgCiAJY2xvc3VyZV9oYW5k bGVycy51bnNldF9wcm9wZXJ0eSA9IHplbmRfY2xvc3VyZV91bnNldF9wcm9wZXJ0eTsKIAlj bG9zdXJlX2hhbmRsZXJzLmNvbXBhcmVfb2JqZWN0cyA9IHplbmRfY2xvc3VyZV9jb21wYXJl X29iamVjdHM7CiAJY2xvc3VyZV9oYW5kbGVycy5jbG9uZV9vYmogPSBOVUxMOworCWNsb3N1 cmVfaGFuZGxlcnMuZ2V0X2RlYnVnX2luZm8gPSB6ZW5kX2Nsb3N1cmVfZ2V0X2RlYnVnX2lu Zm87CiAJY2xvc3VyZV9oYW5kbGVycy5nZXRfY2xvc3VyZSA9IHplbmRfY2xvc3VyZV9nZXRf Y2xvc3VyZTsKIH0KIC8qIH19fSAqLwpJbmRleDogWmVuZC96ZW5kX29iamVjdF9oYW5kbGVy cy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L1plbmRFbmdpbmUyL3pl bmRfb2JqZWN0X2hhbmRsZXJzLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTM1LjIuNi4y LjIyLjIuMjMKZGlmZiAtdSAtcCAtZCAtcjEuMTM1LjIuNi4yLjIyLjIuMjMgemVuZF9vYmpl Y3RfaGFuZGxlcnMuYwotLS0gWmVuZC96ZW5kX29iamVjdF9oYW5kbGVycy5jCTMxIERlYyAy MDA4IDExOjE1OjMyIC0wMDAwCTEuMTM1LjIuNi4yLjIyLjIuMjMKKysrIFplbmQvemVuZF9v YmplY3RfaGFuZGxlcnMuYwkxIEphbiAyMDA5IDE2OjAyOjE0IC0wMDAwCkBAIC03OTEsNiAr NzkxLDI0IEBAIHN0YXRpYyB1bmlvbiBfemVuZF9mdW5jdGlvbiAqemVuZF9zdGRfZ2UKIAog CXpvYmogPSBaX09CSl9QKG9iamVjdCk7CiAJaWYgKHplbmRfaGFzaF9maW5kKCZ6b2JqLT5j ZS0+ZnVuY3Rpb25fdGFibGUsIGxjX21ldGhvZF9uYW1lLCBtZXRob2RfbGVuKzEsICh2b2lk ICoqKSZmYmMpID09IEZBSUxVUkUpIHsKKwkJenZhbCAqKmNhbGxhYmxlLCBtZW1iZXI7CisJ CXplbmRfcHJvcGVydHlfaW5mbyAqcHJvcGVydHlfaW5mbzsKKworCQlaVkFMX1NUUklOR0wo Jm1lbWJlciwgbWV0aG9kX25hbWUsIG1ldGhvZF9sZW4sIDApOworCQlwcm9wZXJ0eV9pbmZv ID0gemVuZF9nZXRfcHJvcGVydHlfaW5mbyh6b2JqLT5jZSwgJm1lbWJlciwgMSBUU1JNTFNf Q0MpOworCisJCWlmIChwcm9wZXJ0eV9pbmZvICYmIHplbmRfaGFzaF9xdWlja19maW5kKHpv YmotPnByb3BlcnRpZXMsIHByb3BlcnR5X2luZm8tPm5hbWUsIHByb3BlcnR5X2luZm8tPm5h bWVfbGVuZ3RoKzEsIHByb3BlcnR5X2luZm8tPmgsICh2b2lkICoqKSAmY2FsbGFibGUpID09 IFNVQ0NFU1MpIHsKKwkJCXp2YWwgKmNhbGxhYmxlX29iajsKKwkJCXplbmRfY2xhc3NfZW50 cnkgKmNlX3B0cjsKKworCQkJaWYgKFpfVFlQRV9QUChjYWxsYWJsZSkgPT0gSVNfT0JKRUNU CisJCQkmJiBaX09CSl9IQU5ETEVSX1BQKGNhbGxhYmxlLCBnZXRfY2xvc3VyZSkKKwkJCSYm IFpfT0JKX0hBTkRMRVJfUFAoY2FsbGFibGUsIGdldF9jbG9zdXJlKSgqY2FsbGFibGUsICZj ZV9wdHIsICZmYmMsICZjYWxsYWJsZV9vYmogVFNSTUxTX0NDKSA9PSBTVUNDRVNTKSB7CisJ CQkJKm9iamVjdF9wdHIgPSBjYWxsYWJsZV9vYmo7CisJCQkJZnJlZV9hbGxvY2EobGNfbWV0 aG9kX25hbWUsIHVzZV9oZWFwKTsKKwkJCQlyZXR1cm4gZmJjOworCQkJfQorCQl9IAogCQlm cmVlX2FsbG9jYShsY19tZXRob2RfbmFtZSwgdXNlX2hlYXApOwogCQlpZiAoem9iai0+Y2Ut Pl9fY2FsbCkgewogCQkJemVuZF9pbnRlcm5hbF9mdW5jdGlvbiAqY2FsbF91c2VyX2NhbGwg PSBlbWFsbG9jKHNpemVvZih6ZW5kX2ludGVybmFsX2Z1bmN0aW9uKSk7CkluZGV4OiBaZW5k L3Rlc3RzL2Nsb3N1cmVfMDIwLnBocHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9z aXRvcnkvWmVuZEVuZ2luZTIvdGVzdHMvY2xvc3VyZV8wMjAucGhwdCx2CnJldHJpZXZpbmcg cmV2aXNpb24gMS4xLjIuMQpkaWZmIC11IC1wIC1kIC1yMS4xLjIuMSBjbG9zdXJlXzAyMC5w aHB0Ci0tLSBaZW5kL3Rlc3RzL2Nsb3N1cmVfMDIwLnBocHQJMTQgSnVsIDIwMDggMTM6MzY6 NDAgLTAwMDAJMS4xLjIuMQorKysgWmVuZC90ZXN0cy9jbG9zdXJlXzAyMC5waHB0CTEgSmFu IDIwMDkgMTY6MDI6MTUgLTAwMDAKQEAgLTI3LDcgKzI3LDQwIEBAIG9iamVjdChmb28pIyVk ICglZCkgewogICBbInRlc3QiOiJmb28iOnByaXZhdGVdPT4KICAgaW50KDMpCiAgIFsiYSJd PT4KLSAgb2JqZWN0KENsb3N1cmUpIyVkICgwKSB7CisgIG9iamVjdChDbG9zdXJlKSMlZCAo MikgeworICAgIFsidGhpcyJdPT4KKyAgICBvYmplY3QoZm9vKSMlZCAoMikgeworICAgICAg WyJ0ZXN0IjoiZm9vIjpwcml2YXRlXT0+CisgICAgICBpbnQoMykKKyAgICAgIFsiYSJdPT4K KyAgICAgIG9iamVjdChDbG9zdXJlKSMlZCAoMikgeworICAgICAgICBbInRoaXMiXT0+Cisg ICAgICAgICpSRUNVUlNJT04qCisgICAgICAgIFsic3RhdGljIl09PgorICAgICAgICBhcnJh eSgxKSB7CisgICAgICAgICAgWyJhIl09PgorICAgICAgICAgICpSRUNVUlNJT04qCisgICAg ICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgWyJzdGF0aWMiXT0+CisgICAgYXJyYXkoMSkg eworICAgICAgWyJhIl09PgorICAgICAgJm9iamVjdChmb28pIyVkICgyKSB7CisgICAgICAg IFsidGVzdCI6ImZvbyI6cHJpdmF0ZV09PgorICAgICAgICBpbnQoMykKKyAgICAgICAgWyJh Il09PgorICAgICAgICBvYmplY3QoQ2xvc3VyZSkjJWQgKDIpIHsKKyAgICAgICAgICBbInRo aXMiXT0+CisgICAgICAgICAgKlJFQ1VSU0lPTioKKyAgICAgICAgICBbInN0YXRpYyJdPT4K KyAgICAgICAgICBhcnJheSgxKSB7CisgICAgICAgICAgICBbImEiXT0+CisgICAgICAgICAg ICAqUkVDVVJTSU9OKgorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0K ICAgfQogfQogYm9vbCh0cnVlKQpJbmRleDogWmVuZC90ZXN0cy9jbG9zdXJlXzAyNi5waHB0 Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L1plbmRFbmdpbmUyL3Rlc3Rz L2Nsb3N1cmVfMDI2LnBocHQsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4yLjIKZGlmZiAt dSAtcCAtZCAtcjEuMS4yLjIgY2xvc3VyZV8wMjYucGhwdAotLS0gWmVuZC90ZXN0cy9jbG9z dXJlXzAyNi5waHB0CTI4IEp1bCAyMDA4IDE0OjEwOjAwIC0wMDAwCTEuMS4yLjIKKysrIFpl bmQvdGVzdHMvY2xvc3VyZV8wMjYucGhwdAkxIEphbiAyMDA5IDE2OjAyOjE1IC0wMDAwCkBA IC0zMiw3ICszMiwxOCBAQCBvYmplY3QoZm9vKSMlZCAoMSkgewogICBbImEiXT0+CiAgIGFy cmF5KDEpIHsKICAgICBbMF09PgotICAgIG9iamVjdChDbG9zdXJlKSMlZCAoMCkgeworICAg IG9iamVjdChDbG9zdXJlKSMlZCAoMSkgeworICAgICAgWyJ0aGlzIl09PgorICAgICAgb2Jq ZWN0KGZvbykjJWQgKDEpIHsKKyAgICAgICAgWyJhIl09PgorICAgICAgICBhcnJheSgxKSB7 CisgICAgICAgICAgWzBdPT4KKyAgICAgICAgICBvYmplY3QoQ2xvc3VyZSkjJWQgKDEpIHsK KyAgICAgICAgICAgIFsidGhpcyJdPT4KKyAgICAgICAgICAgICpSRUNVUlNJT04qCisgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICB9CiAgICAgfQogICB9CiB9CkBAIC00MSw3ICs1 MiwyMSBAQCBpbnQoMSkKIHN0cmluZygxKSAiYSIKIGFycmF5KDEpIHsKICAgWzBdPT4KLSAg b2JqZWN0KENsb3N1cmUpIyVkICgwKSB7CisgIG9iamVjdChDbG9zdXJlKSMlZCAoMSkgewor ICAgIFsidGhpcyJdPT4KKyAgICBvYmplY3QoZm9vKSMlZCAoMSkgeworICAgICAgWyJhIl09 PgorICAgICAgYXJyYXkoMSkgeworICAgICAgICBbMF09PgorICAgICAgICBvYmplY3QoQ2xv c3VyZSkjJWQgKDEpIHsKKyAgICAgICAgICBbInRoaXMiXT0+CisgICAgICAgICAgb2JqZWN0 KGZvbykjJWQgKDEpIHsKKyAgICAgICAgICAgIFsiYSJdPT4KKyAgICAgICAgICAgICpSRUNV UlNJT04qCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQogICB9CiB9 CiBpbnQoMSkKSW5kZXg6IFplbmQvdGVzdHMvY2xvc3VyZV8wMzIucGhwdAo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvcmVwb3NpdG9yeS9aZW5kRW5naW5lMi90ZXN0cy9jbG9zdXJlXzAz Mi5waHB0LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMi4yCmRpZmYgLXUgLXAgLWQgLXIx LjEuMi4yIGNsb3N1cmVfMDMyLnBocHQKLS0tIFplbmQvdGVzdHMvY2xvc3VyZV8wMzIucGhw dAkzIE5vdiAyMDA4IDE5OjI4OjMyIC0wMDAwCTEuMS4yLjIKKysrIFplbmQvdGVzdHMvY2xv c3VyZV8wMzIucGhwdAkxIEphbiAyMDA5IDE2OjAyOjE1IC0wMDAwCkBAIC01Myw2ICs1Mywx MiBAQCBBcnJheQogICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgWzBd ID0+IENsb3N1cmUgT2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAoCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgW3RoaXNdID0+IAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFtwYXJhbWV0ZXJdID0+IEFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFskcGFyYW1d ID0+IDxyZXF1aXJlZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCiAg ICAgICAgICAgICAgICAgICAgICAgICApCiAKICAgICAgICAgICAgICAgICApCkluZGV4OiBa ZW5kL3Rlc3RzL2Nsb3N1cmVfMDMzLnBocHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogWmVu ZC90ZXN0cy9jbG9zdXJlXzAzMy5waHB0CmRpZmYgLU4gWmVuZC90ZXN0cy9jbG9zdXJlXzAz My5waHB0Ci0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgWmVu ZC90ZXN0cy9jbG9zdXJlXzAzMy5waHB0CTEgSmFuIDIwMDkgMTY6MDI6MTUgLTAwMDAKQEAg LTAsMCArMSwxMjIgQEAKKy0tVEVTVC0tCitDbG9zdXJlIDAzMzogdmFyX2R1bXAoKSBvZiBh IENsb3N1cmUKKy0tRklMRS0tCis8P3BocAorCiskb3V0ZXIgPSAyNTsKKworY2xhc3MgVGVz dCB7CisJcHVibGljICRmdW5jMTsKKwlwdWJsaWMgJHZhciA9IDQyOworCWZ1bmN0aW9uIF9f Y29uc3RydWN0KCkgeworCQlnbG9iYWwgJG91dGVyOworCQkkdGhpcy0+ZnVuYzEgPSBmdW5j dGlvbigkcGFyYW0sICRvdGhlciA9ICJkZWZhdWx0IikgdXNlICgkb3V0ZXIpIHsKKwkJfTsK Kwl9Cit9CisKKyRvID0gbmV3IFRlc3Q7Cit2YXJfZHVtcCgkby0+ZnVuYzEpOworCiskby0+ ZnVuYzIgPSBmdW5jdGlvbigkcGFyYW0sICRvdGhlciA9ICJkZWZhdWx0IikgdXNlICgkb3V0 ZXIpIHsKK307CisKK3Zhcl9kdW1wKCRvLT5mdW5jMik7CisKKyRmdW5jMyA9IGZ1bmN0aW9u KCRwYXJhbSwgJG90aGVyID0gImRlZmF1bHQiKSB1c2UgKCRvdXRlcikgeworfTsKKwordmFy X2R1bXAoJGZ1bmMzKTsKKworPz4KKz09PURPTkU9PT0KKy0tRVhQRUNURi0tCitvYmplY3Qo Q2xvc3VyZSkjJWQgKDMpIHsKKyAgWyJ0aGlzIl09PgorICBvYmplY3QoVGVzdCkjJWQgKDIp IHsKKyAgICBbImZ1bmMxIl09PgorICAgIG9iamVjdChDbG9zdXJlKSMlZCAoMykgeworICAg ICAgWyJ0aGlzIl09PgorICAgICAgb2JqZWN0KFRlc3QpIyVkICgyKSB7CisgICAgICAgIFsi ZnVuYzEiXT0+CisgICAgICAgIG9iamVjdChDbG9zdXJlKSMlZCAoMykgeworICAgICAgICAg IFsidGhpcyJdPT4KKyAgICAgICAgICAqUkVDVVJTSU9OKgorICAgICAgICAgIFsic3RhdGlj Il09PgorICAgICAgICAgIGFycmF5KDEpIHsKKyAgICAgICAgICAgIFsib3V0ZXIiXT0+Cisg ICAgICAgICAgICBpbnQoMjUpCisgICAgICAgICAgfQorICAgICAgICAgIFsicGFyYW1ldGVy Il09PgorICAgICAgICAgIGFycmF5KDIpIHsKKyAgICAgICAgICAgIFsiJHBhcmFtIl09Pgor ICAgICAgICAgICAgc3RyaW5nKDEwKSAiPHJlcXVpcmVkPiIKKyAgICAgICAgICAgIFsiJG90 aGVyIl09PgorICAgICAgICAgICAgc3RyaW5nKDEwKSAiPG9wdGlvbmFsPiIKKyAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICAgICAgWyJ2YXIiXT0+CisgICAgICAgIGludCg0MikKKyAg ICAgIH0KKyAgICAgIFsic3RhdGljIl09PgorICAgICAgYXJyYXkoMSkgeworICAgICAgICBb Im91dGVyIl09PgorICAgICAgICBpbnQoMjUpCisgICAgICB9CisgICAgICBbInBhcmFtZXRl ciJdPT4KKyAgICAgIGFycmF5KDIpIHsKKyAgICAgICAgWyIkcGFyYW0iXT0+CisgICAgICAg IHN0cmluZygxMCkgIjxyZXF1aXJlZD4iCisgICAgICAgIFsiJG90aGVyIl09PgorICAgICAg ICBzdHJpbmcoMTApICI8b3B0aW9uYWw+IgorICAgICAgfQorICAgIH0KKyAgICBbInZhciJd PT4KKyAgICBpbnQoNDIpCisgIH0KKyAgWyJzdGF0aWMiXT0+CisgIGFycmF5KDEpIHsKKyAg ICBbIm91dGVyIl09PgorICAgIGludCgyNSkKKyAgfQorICBbInBhcmFtZXRlciJdPT4KKyAg YXJyYXkoMikgeworICAgIFsiJHBhcmFtIl09PgorICAgIHN0cmluZygxMCkgIjxyZXF1aXJl ZD4iCisgICAgWyIkb3RoZXIiXT0+CisgICAgc3RyaW5nKDEwKSAiPG9wdGlvbmFsPiIKKyAg fQorfQorb2JqZWN0KENsb3N1cmUpIyVkICgzKSB7CisgIFsidGhpcyJdPT4KKyAgTlVMTAor ICBbInN0YXRpYyJdPT4KKyAgYXJyYXkoMSkgeworICAgIFsib3V0ZXIiXT0+CisgICAgJmlu dCgyNSkKKyAgfQorICBbInBhcmFtZXRlciJdPT4KKyAgYXJyYXkoMikgeworICAgIFsiJHBh cmFtIl09PgorICAgIHN0cmluZygxMCkgIjxyZXF1aXJlZD4iCisgICAgWyIkb3RoZXIiXT0+ CisgICAgc3RyaW5nKDEwKSAiPG9wdGlvbmFsPiIKKyAgfQorfQorb2JqZWN0KENsb3N1cmUp IyVkICgzKSB7CisgIFsidGhpcyJdPT4KKyAgTlVMTAorICBbInN0YXRpYyJdPT4KKyAgYXJy YXkoMSkgeworICAgIFsib3V0ZXIiXT0+CisgICAgaW50KDI1KQorICB9CisgIFsicGFyYW1l dGVyIl09PgorICBhcnJheSgyKSB7CisgICAgWyIkcGFyYW0iXT0+CisgICAgc3RyaW5nKDEw KSAiPHJlcXVpcmVkPiIKKyAgICBbIiRvdGhlciJdPT4KKyAgICBzdHJpbmcoMTApICI8b3B0 aW9uYWw+IgorICB9Cit9Cis9PT1ET05FPT09CkluZGV4OiBaZW5kL3Rlc3RzL2Nsb3N1cmVf MDM0LnBocHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogWmVuZC90ZXN0cy9jbG9zdXJlXzAz NC5waHB0CmRpZmYgLU4gWmVuZC90ZXN0cy9jbG9zdXJlXzAzNC5waHB0Ci0tLSAvZGV2L251 bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgWmVuZC90ZXN0cy9jbG9zdXJlXzAz NC5waHB0CTEgSmFuIDIwMDkgMTY6MDI6MTUgLTAwMDAKQEAgLTAsMCArMSw0NSBAQAorLS1U RVNULS0KK0Nsb3N1cmUgMDM0OiBDYWxsaW5nIHByb3BlcnR5IENsb3N1cmUKKy0tRklMRS0t Cis8P3BocAorCitjbGFzcyBUZXN0IHsKKwlwdWJsaWMgJGZ1bmM7CisJZnVuY3Rpb24gX19j b25zdHJ1Y3QoKSB7CisJCSR0aGlzLT5mdW5jID0gZnVuY3Rpb24oKSB7CisJCQllY2hvIF9f TUVUSE9EX18gLiAiKClcbiI7CisJCX07CisJfQorfQorCiskbyA9IG5ldyBUZXN0OworUmVm bGVjdGlvblByb3BlcnR5OjpleHBvcnQoJG8sICdmdW5jJyk7Cit2YXJfZHVtcCgkby0+ZnVu Yyk7CiskZiA9ICRvLT5mdW5jOworJGYoKTsKKyRvLT5mdW5jKCk7CisKKz8+Cis9PT1ET05F PT09CistLUVYUEVDVEYtLQorUHJvcGVydHkgWyA8ZGVmYXVsdD4gcHVibGljICRmdW5jIF0K Kworb2JqZWN0KENsb3N1cmUpIyVkICgxKSB7CisgIFsidGhpcyJdPT4KKyAgb2JqZWN0KFRl c3QpIyVkICgxKSB7CisgICAgWyJmdW5jIl09PgorICAgIG9iamVjdChDbG9zdXJlKSMlZCAo MSkgeworICAgICAgWyJ0aGlzIl09PgorICAgICAgb2JqZWN0KFRlc3QpIyVkICgxKSB7Cisg ICAgICAgIFsiZnVuYyJdPT4KKyAgICAgICAgb2JqZWN0KENsb3N1cmUpIyVkICgxKSB7Cisg ICAgICAgICAgWyJ0aGlzIl09PgorICAgICAgICAgICpSRUNVUlNJT04qCisgICAgICAgIH0K KyAgICAgIH0KKyAgICB9CisgIH0KK30KK1Rlc3Q6OntjbG9zdXJlfSgpCitUZXN0Ojp7Y2xv c3VyZX0oKQorPT09RE9ORT09PQpJbmRleDogWmVuZC90ZXN0cy9jbG9zdXJlXzAzNS5waHB0 Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IFplbmQvdGVzdHMvY2xvc3VyZV8wMzUucGhwdApk aWZmIC1OIFplbmQvdGVzdHMvY2xvc3VyZV8wMzUucGhwdAotLS0gL2Rldi9udWxsCTEgSmFu IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFplbmQvdGVzdHMvY2xvc3VyZV8wMzUucGhwdAkx IEphbiAyMDA5IDE2OjAyOjE1IC0wMDAwCkBAIC0wLDAgKzEsNDYgQEAKKy0tVEVTVC0tCitD bG9zdXJlIDAzNTogQ2FsbGluZyBwcm9wZXJ0eSBzdXBwb3J0aW5nIF9faW52b2tlCistLUZJ TEUtLQorPD9waHAKKworY2xhc3MgQ3VycnkKK3sKKyAgcHJvdGVjdGVkICRjYWxsYWJsZTsK KyAgcHJvdGVjdGVkICRhcmdzOworCisgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRl KCRjYWxsYWJsZSkKKyAgeworICAgICRjdXJyeSA9IG5ldyBzZWxmKCRjYWxsYWJsZSwgYXJy YXlfc2xpY2UoZnVuY19nZXRfYXJncygpLCAxKSk7CisgICAgcmV0dXJuICRjdXJyeTsKKyAg fQorCisgIHByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY2FsbGFibGUsICRhcmdz KQorICB7CisgICAgJHRoaXMtPmNhbGxhYmxlID0gJGNhbGxhYmxlOworICAgICR0aGlzLT5h cmdzID0gJGFyZ3M7CisgIH0KKworICBwdWJsaWMgZnVuY3Rpb24gX19pbnZva2UoKQorICB7 CisgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KCR0aGlzLT5jYWxsYWJsZSwgYXJy YXlfbWVyZ2UoJHRoaXMtPmFyZ3MsIGZ1bmNfZ2V0X2FyZ3MoKSkpOworICB9Cit9CisKKyRk ID0gbmV3IERhdGVUaW1lKCk7CiskZ2V0QXRvbSA9IEN1cnJ5OjpjcmVhdGUoYXJyYXkoJGQs ICdmb3JtYXQnKSwgREFURV9BVE9NKTsKK3Zhcl9kdW1wKGlzX0NhbGxhYmxlKCRnZXRBdG9t KSk7Cit2YXJfZHVtcCgkZ2V0QXRvbSgpKTsKKworJGQgPSBuZXcgRGF0ZVRpbWUoKTsKKyRk LT5nZXRBdG9tID0gQ3Vycnk6OmNyZWF0ZShhcnJheSgkZCwgJ2Zvcm1hdCcpLCBEQVRFX0FU T00pOwordmFyX2R1bXAoaXNfQ2FsbGFibGUoJGQtPmdldEF0b20pKTsKK3Zhcl9kdW1wKCRk LT5nZXRBdG9tKCkpOworCis/PgorPT09RE9ORT09PQorLS1FWFBFQ1RGLS0KK2Jvb2wodHJ1 ZSkKK3N0cmluZyglZCkgIjIlZC0lZC0lZFQlZDolZDolZCVzIgorYm9vbCh0cnVlKQorc3Ry aW5nKCVkKSAiMiVkLSVkLSVkVCVkOiVkOiVkJXMiCis9PT1ET05FPT09CkluZGV4OiBaZW5k L3Rlc3RzL2Nsb3N1cmVfMDM2LnBocHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogWmVuZC90 ZXN0cy9jbG9zdXJlXzAzNi5waHB0CmRpZmYgLU4gWmVuZC90ZXN0cy9jbG9zdXJlXzAzNi5w aHB0Ci0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgWmVuZC90 ZXN0cy9jbG9zdXJlXzAzNi5waHB0CTEgSmFuIDIwMDkgMTY6MDI6MTUgLTAwMDAKQEAgLTAs MCArMSw0MyBAQAorLS1URVNULS0KK0Nsb3N1cmUgMDM2OiBDYWxsaW5nIGR5bmFtaWMgcHJv cGVydHkgQ2xvc3VyZSAobm90IHN1cHBvcnRlZCkKKy0tRklMRS0tCis8P3BocAorCitjbGFz cyBUZXN0IHsKKwlwdWJsaWMgJG1ldGhvZHMgPSBhcnJheSgpOworCWZ1bmN0aW9uIF9faXNz ZXQoJG5hbWUpIHsKKwkJZWNobyBfX01FVEhPRF9fIC4gIigkbmFtZSlcbiI7CisJCXJldHVy biBpc3NldCgkdGhpcy0+bWV0aG9kc1skbmFtZV0pOworCX0KKwlmdW5jdGlvbiBfX2dldCgk bmFtZSkgeworCQllY2hvIF9fTUVUSE9EX18gLiAiKCRuYW1lKVxuIjsKKwkJcmV0dXJuICR0 aGlzLT5tZXRob2RzWyRuYW1lXTsKKwl9CisJZnVuY3Rpb24gX19zZXQoJG5hbWUsICRkYXRh KSB7CisJCWVjaG8gX19NRVRIT0RfXyAuICIoJG5hbWUpXG4iOworCQkkdGhpcy0+bWV0aG9k c1skbmFtZV0gPSAkZGF0YTsKKwl9CisJZnVuY3Rpb24gX190b1N0cmluZygpIHsKKwkJcmV0 dXJuIF9fQ0xBU1NfXzsKKwl9Cit9CisKKyRvID0gbmV3IFRlc3Q7Cit2YXJfZHVtcChpc3Nl dCgkby0+ZnVuYykpOworJG8tPmZ1bmMgPSBmdW5jdGlvbigpIHsKKwllY2hvIF9fTUVUSE9E X18gLiAiKCIgLiB2YXJfZXhwb3J0KCR0aGlzLCB0cnVlKSAuICIpXG4iOworfTsKK3Zhcl9k dW1wKGlzc2V0KCRvLT5mdW5jKSk7Ciskby0+ZnVuYygpOwordmFyX2R1bXAoJG8tPmZ1bmMp OworCis/PgorPT09RE9ORT09PQorLS1FWFBFQ1RGLS0KK1Rlc3Q6Ol9faXNzZXQoZnVuYykK K2Jvb2woZmFsc2UpCitUZXN0OjpfX3NldChmdW5jKQorVGVzdDo6X19pc3NldChmdW5jKQor Ym9vbCh0cnVlKQorCitGYXRhbCBlcnJvcjogQ2FsbCB0byB1bmRlZmluZWQgbWV0aG9kIFRl c3Q6OmZ1bmMoKSBpbiAlc2Nsb3N1cmVfMDM2LnBocCBvbiBsaW5lICVkCg== ------------3517F4D7D696C6--