From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([69.77.167.62] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1KPeBD-0007KZ-HA for garchives@archives.gentoo.org; Sun, 03 Aug 2008 14:03:28 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 71D2BE03D3; Sun, 3 Aug 2008 14:03:26 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id DA00DE03E0 for ; Sun, 3 Aug 2008 14:03:25 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp.gentoo.org (Postfix) with ESMTP id 74E90678A4 for ; Sun, 3 Aug 2008 14:03:25 +0000 (UTC) X-Virus-Scanned: amavisd-new at gentoo.org X-Spam-Score: -1.422 X-Spam-Level: X-Spam-Status: No, score=-1.422 required=5.5 tests=[AWL=1.177, BAYES_00=-2.599] Received: from smtp.gentoo.org ([127.0.0.1]) by localhost (smtp.gentoo.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 3FGJyuvCndy1 for ; Sun, 3 Aug 2008 14:03:19 +0000 (UTC) Received: from an-out-0708.google.com (an-out-0708.google.com [209.85.132.241]) by smtp.gentoo.org (Postfix) with ESMTP id 2668C6788B for ; Sun, 3 Aug 2008 14:03:19 +0000 (UTC) Received: by an-out-0708.google.com with SMTP id c3so313756ana.43 for ; Sun, 03 Aug 2008 07:03:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:sender :to:subject:mime-version:content-type:x-google-sender-auth; bh=v9Q+u+f944v+uKyFHbRMLGKf6rKLQ9lM3blc0hMfQBE=; b=a48Jha45POJfpJEW3bpk1i05bxZhYRIn1DfxcPSiftlowF+U29TSuCjx8QxdacjjXK i+Ywc6syZlaDDZe1llG2Hyj70Nx08TUuhep7D3/QLKQCx++3oVCDIpWxpxABCaT72RFd 8xeNWkZGgiRoFABU8Cievf6HA1m2a4awCB8Nc= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:sender:to:subject:mime-version:content-type :x-google-sender-auth; b=vNms47LsMvBR/KM5Q7iti2lu48gJEnNGP/XaINQpDjn80PzzHzNr5Fxx1lAH2mDpwx 0WCbJj8OhoTTdA8SqW/JrXZmBk7r8on5gZyMYHyCsauNu+EQn5wBTD12124UKye6NHv0 KgctfwoV9Cfob09JFDeu5fTAwXJ5yh1qk9qGg= Received: by 10.100.33.9 with SMTP id g9mr18617242ang.57.1217772198082; Sun, 03 Aug 2008 07:03:18 -0700 (PDT) Received: by 10.100.171.5 with HTTP; Sun, 3 Aug 2008 07:03:17 -0700 (PDT) Message-ID: Date: Sun, 3 Aug 2008 09:03:17 -0500 From: "Lucian Poston" Sender: lucian.poston@gmail.com To: gentoo-portage-dev@lists.gentoo.org Subject: [gentoo-portage-dev] [PATCH] missing-rebuild package set Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-portage-dev@lists.gentoo.org Reply-to: gentoo-portage-dev@lists.gentoo.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_27950_25445809.1217772197912" X-Google-Sender-Auth: 48159bd6e2a93839 X-Archives-Salt: 1369b7db-8e7d-4158-8fb1-1d09dc5d4b70 X-Archives-Hash: 2875530ef20b06a6a09d537d24ad95a3 ------=_Part_27950_25445809.1217772197912 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline The following patchs add a library dependency rebuilder as a package set, @missing-rebuild, to portage-2.2_rc6. Similar to the --library flag in revdep-rebuild, the user can additionally emerge the set of packages containing consumers of libraries matched by a (python) regular expression; however, until a better solution is found, the regexp must be passed through the LIBRARY environment variable to enable that feature. Known issues: I expect some false positives. I've inserted hard coded directory/library masks for those I've found. I noticed a situation that required a second emerge due to a provider package satisfying 3 conditions: 1) the package is installed and an updated version is available in its slot, 2) the updated version is in the set due to a dependency of another package (or it may contains a broken binary), and 3) a consumer package of a library within the updated package is emerged before the updated dependency is emerged, causing a package to be compiled against the old library before the library version changes. I guess that if a package is already installed, it is not necessarily placed before its consumer packages in the merge order. Attached are patches for pym/portage/dbapi/vartree.py, pym/portage/sets/libs.py and /usr/share/portage/config/sets.conf. These can also be found in the project's repository: http://repo.or.cz/w/revdep-rebuild-reimplementation.git?a=tree;h=refs/heads/rc1;hb=refs/heads/rc1 I warmly welcome all feedback, in particular any suggestions to remove the necessity of directory and library masks in /etc/revdep-rebuild/*, which I've been unable to entirely avoid. Lucian ------=_Part_27950_25445809.1217772197912 Content-Type: text/x-patch; name=sets.conf.2.2_rc6.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fjfl7yx52 Content-Disposition: attachment; filename=sets.conf.2.2_rc6.patch LS0tIC91c3Ivc2hhcmUvcG9ydGFnZS9jb25maWcvc2V0cy5jb25mCTIwMDgtMDgtMDEgMTU6Mzc6 MTguMDAwMDAwMDAwIC0wNTAwCisrKyBzZXRzLmNvbmYJMjAwOC0wOC0wMyAwNjozODo0MS4wMDAw MDAwMDAgLTA1MDAKQEAgLTU5LDMgKzU5LDggQEAKIFtkb3duZ3JhZGVdCiBjbGFzcyA9IHBvcnRh Z2Uuc2V0cy5kYmFwaS5Eb3duZ3JhZGVTZXQKIHdvcmxkLWNhbmRpZGF0ZSA9IEZhbHNlCisKKyMg UGFja2FnZXMgdG8gcmVidWlsZCBicm9rZW4gbGlicmFyeSBkZXBlbmRlbmNpZXMuCitbbWlzc2lu Zy1yZWJ1aWxkXQorY2xhc3MgPSBwb3J0YWdlLnNldHMubGlicy5NaXNzaW5nTGlicmFyeUNvbnN1 bWVyU2V0CitkZWJ1ZyA9IEZhbHNlCg== ------=_Part_27950_25445809.1217772197912 Content-Type: text/x-patch; name=libs.py.2.2_rc6.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fjfmeakj3 Content-Disposition: attachment; filename=libs.py.2.2_rc6.patch LS0tIGxpYnMucHkuMi4yX3JjNgkyMDA4LTA4LTAxIDE1OjQxOjE0LjAwMDAwMDAwMCAtMDUwMAor KysgcHltL3BvcnRhZ2Uvc2V0cy9saWJzLnB5CTIwMDgtMDgtMDMgMDc6MTY6MDAuMDAwMDAwMDAw IC0wNTAwCkBAIC0yLDEwICsyLDE4IEBACiAjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIKICMgJElkOiBsaWJzLnB5IDEwNzU5 IDIwMDgtMDYtMjIgMDQ6MDQ6NTBaIHptZWRpY28gJAogCitpbXBvcnQgb3MKK2ltcG9ydCByZQor aW1wb3J0IHRpbWUKK2Zyb20gcG9ydGFnZS5kYmFwaS52YXJ0cmVlIGltcG9ydCBkYmxpbmsKK2Zy b20gcG9ydGFnZS52ZXJzaW9ucyBpbXBvcnQgY2F0c3BsaXQKIGZyb20gcG9ydGFnZS5zZXRzLmJh c2UgaW1wb3J0IFBhY2thZ2VTZXQKIGZyb20gcG9ydGFnZS5zZXRzIGltcG9ydCBnZXRfYm9vbGVh bgogZnJvbSBwb3J0YWdlLnZlcnNpb25zIGltcG9ydCBjYXRwa2dzcGxpdAogCitfX2FsbF9fID0g WyJMaWJyYXJ5Q29uc3VtZXJTZXQiLCAiUHJlc2VydmVkTGlicmFyeUNvbnN1bWVyU2V0IiwKKwkJ Ik1pc3NpbmdMaWJyYXJ5Q29uc3VtZXJTZXQiXQorCiBjbGFzcyBMaWJyYXJ5Q29uc3VtZXJTZXQo UGFja2FnZVNldCk6CiAJX29wZXJhdGlvbnMgPSBbIm1lcmdlIiwgInVubWVyZ2UiXQogCkBAIC00 NSwzICs1MywzMTAgQEAKIAkJZGVidWcgPSBnZXRfYm9vbGVhbihvcHRpb25zLCAiZGVidWciLCBG YWxzZSkKIAkJcmV0dXJuIFByZXNlcnZlZExpYnJhcnlDb25zdW1lclNldCh0cmVlc1sidmFydHJl ZSJdLmRiYXBpLCBkZWJ1ZykKIAlzaW5nbGVCdWlsZGVyID0gY2xhc3NtZXRob2Qoc2luZ2xlQnVp bGRlcikKKworCitjbGFzcyBNaXNzaW5nTGlicmFyeUNvbnN1bWVyU2V0KExpYnJhcnlDb25zdW1l clNldCk6CisKKwkiIiIKKwlUaGlzIGNsYXNzIGlzIHRoZSBzZXQgb2YgcGFja2FnZXMgdG8gZW1l cmdlIGR1ZSB0byBtaXNzaW5nIGxpYnJhcmllcy4KKworCVRoaXMgY2xhc3Mgc2NhbnMgYmluYXJp ZXMgZm9yIG1pc3NpbmcgYW5kIGJyb2tlbiBzaGFyZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMKKwlh bmQgZml4ZXMgdGhlbSBieSBlbWVyZ2luZyB0aGUgcGFja2FnZXMgY29udGFpbmluZyB0aGUgYnJv a2VuIGJpbmFyaWVzLgorCisJVGhlIHVzZXIgbWF5IGFsc28gZW1lcmdlIHBhY2thZ2VzIGNvbnRh aW5pbmcgY29uc3VtZXJzIG9mIHNwZWNpZmllZAorCWxpYnJhcmllcyBieSBwYXNzaW5nIHRoZSBu YW1lIG9yIGEgcHl0aG9uIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aHJvdWdoIHRoZQorCWVudmlyb25t ZW50IHZhcmlhYmxlLCBMSUJSQVJZLiAgRHVlIHRvIGEgbGltaXRhdGlvbiBpbiBwYXNzaW5nIGZs YWdzIHRvCisJcGFja2FnZSBzZXRzIHRocm91Z2ggdGhlIHBvcnRhZ2UgY2xpLCB0aGUgdXNlciBt dXN0IHNldCBlbnZpcm9ubWVudAorCXZhcmlhYmxlcyB0byBtb2RpZnkgdGhlIGJlaGF2aW91ciBv ZiB0aGlzIHBhY2thZ2Ugc2V0LiAgU28gaWYgdGhlCisJZW52aXJvbm1lbnQgdmFyaWFibGUgTElC UkFSWSBpcyBzZXQsIHRoZSBiZWhhdmlvdXIgb2YgdGhpcyBzZXQgY2hhbmdlcy4KKworCSIiIgor CisJZGVzY3JpcHRpb24gPSAiVGhlIHNldCBvZiBwYWNrYWdlcyB0byBlbWVyZ2UgZHVlIHRvIG1p c3NpbmcgbGlicmFyaWVzLiIKKwlfb3BlcmF0aW9ucyA9IFsibWVyZ2UiXQorCisJZGVmIF9faW5p dF9fKHNlbGYsIHZhcmRiYXBpLCBkZWJ1Zz1GYWxzZSk6CisJCXN1cGVyKE1pc3NpbmdMaWJyYXJ5 Q29uc3VtZXJTZXQsIHNlbGYpLl9faW5pdF9fKHZhcmRiYXBpLCBkZWJ1ZykKKwkJIyBGSVhNRSBT aW5jZSB3ZSBjYW4ndCBnZXQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmcm9tIHRoZSB1c2VyLCB0 aGUKKwkJIyBzb25hbWUgY2FuIGJlIHBhc3NlZCB0aHJvdWdoIGFuIGVudmlyb25tZW50IHZhcmlh YmxlIGZvciBub3cuCisJCXNlbGYubGlicmFyeVJlZ2V4cCA9IG9zLmdldGVudigiTElCUkFSWSIp CisJCXNlbGYucm9vdCA9IHNlbGYuZGJhcGkucm9vdAorCQlzZWxmLmxpbmttYXAgPSBzZWxmLmRi YXBpLmxpbmttYXAKKworCWRlZiBsb2FkKHNlbGYpOgorCQkjIGJyb2tlbkRlcGVuZGVuY2llczog b2JqZWN0IC0+IHNldC1vZi11bnNhdGlzZmllZC1kZXBlbmRlbmNpZXMsIHdoZXJlCisJCSMgb2Jq ZWN0IGlzIGFuIGluc3RhbGxlZCBiaW5hcnkvbGlicmFyeSBhbmQKKwkJIyBzZXQtb2YtdW5zYXRp c2ZpZWQtZGVwZW5kZW5jaWVzIGFyZSBzb25hbWVzIG9yIGxpYnJhcmllcyByZXF1aXJlZCBieQor CQkjIHRoZSBvYmplY3QgYnV0IGhhdmUgbm8gY29ycmVzcG9uZGluZyBsaWJyYXJpZXMgdG8gZnVs ZmlsbCB0aGUKKwkJIyBkZXBlbmRlbmN5LgorCQlicm9rZW5EZXBlbmRlbmNpZXMgPSB7fQorCQlh dG9tcyA9IHNldCgpCisKKwkJIyBJZiB0aGUgTElCUkFSWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBp cyBzZXQsIHRoZSByZXN1bHRpbmcgcGFja2FnZSBzZXQKKwkJIyB3aWxsIGJlIHBhY2thZ2VzIGNv bnRhaW5pbmcgY29uc3VtZXJzIG9mIHRoZSBsaWJyYXJpZXMgbWF0Y2hlZCBieSB0aGUKKwkJIyB2 YXJpYWJsZS4KKwkJaWYgc2VsZi5saWJyYXJ5UmVnZXhwOgorCQkJYXRvbXMgPSBzZWxmLmZpbmRB dG9tc09mTGlicmFyeUNvbnN1bWVycyhzZWxmLmxpYnJhcnlSZWdleHApCisJCQlzZWxmLl9zZXRB dG9tcyhhdG9tcykKKwkJCWlmIHNlbGYuZGVidWc6CisJCQkJcHJpbnQKKwkJCQlwcmludCAiYXRv bXMgdG8gYmUgZW1lcmdlZDoiCisJCQkJZm9yIHggaW4gc29ydGVkKGF0b21zKToKKwkJCQkJcHJp bnQgeAorCQkJcmV0dXJuCisKKwkJIyBHZXQgdGhlIGxpc3Qgb2YgYnJva2VuIGRlcGVuZGVuY2ll cyBmcm9tIExpbmthZ2VNYXAuCisJCWlmIHNlbGYuZGVidWc6CisJCQl0aW1lU3RhcnQgPSB0aW1l LnRpbWUoKQorCQlicm9rZW5EZXBlbmRlbmNpZXMgPSBzZWxmLmxpbmttYXAubGlzdEJyb2tlbkJp bmFyaWVzKCkKKwkJaWYgc2VsZi5kZWJ1ZzoKKwkJCXRpbWVMaXN0QnJva2VuQmluYXJpZXMgPSB0 aW1lLnRpbWUoKSAtIHRpbWVTdGFydAorCisJCSMgQWRkIGJyb2tlbiBsaWJ0b29sIGxpYnJhcmll cyBpbnRvIHRoZSBicm9rZW5EZXBlbmRlbmNpZXMgZGljdC4KKwkJaWYgc2VsZi5kZWJ1ZzoKKwkJ CXRpbWVTdGFydCA9IHRpbWUudGltZSgpCisJCWJyb2tlbkRlcGVuZGVuY2llcy51cGRhdGUoc2Vs Zi5saXN0QnJva2VuTGlidG9vbExpYnJhcmllcygpKQorCQlpZiBzZWxmLmRlYnVnOgorCQkJdGlt ZUxpYnRvb2wgPSB0aW1lLnRpbWUoKSAtIHRpbWVTdGFydAorCisJCSMgRklYTUUgVG9vIG1hbnkg YXRvbXMgbWF5IGJlIGVtZXJnZWQgYmVjYXVzZSBsaWJyYXJpZXMgaW4gYmluYXJ5CisJCSMgcGFj a2FnZXMgYXJlIG5vdCBiZWluZyBoYW5kbGVkIHByb3Blcmx5IGVnIG9wZW5vZmZpY2UsIG52aWRp YS1kcml2ZXJzLAorCQkjIHN1bi1qZGsuICBDZXJ0YWluIGJpbmFyaWVzIGFyZSBydW4gaW4gYW4g ZW52aXJvbm1lbnQgd2hlcmUgYWRkaXRpb25hbAorCQkjIGxpYnJhcnkgcGF0aHMgYXJlIGFkZGVk IHZpYSBMRF9MSUJSQVJZX1BBVEguICBTaW5jZSB0aGVzZSBwYXRocyBhcmVuJ3QKKwkJIyByZWdp c3RlcmVkIGluIF9vYmpfcHJvcGVydGllcywgdGhleSBhcHBlYXIgYnJva2VuIChhbmQgYXJlIGlm IG5vdCBydW4KKwkJIyBpbiB0aGUgY29ycmVjdCBlbnZpcm9ubWVudCkuICBJIGhhdmUgdG8gZGV0 ZXJtaW5lIGlmIGxpYnJhcmllcyBhbmQgbGliCisJCSMgcGF0aHMgc2hvdWxkIGJlIG1hc2tlZCB1 c2luZyAvZXRjL3JldmRlcC1yZWJ1aWxkLyogYXMgZG9uZSBpbgorCQkjIHJldmRlcC1yZWJ1aWxk IG9yIGlmIHRoZXJlIGlzIGEgYmV0dGVyIHdheSB0byBpZGVudGlmeSBhbmQgZGVhbCB3aXRoCisJ CSMgdGhlc2UgcHJvYmxlbWF0aWMgcGFja2FnZXMgKG9yIGlmIHNvbWV0aGluZyBlbnRpcmVseSBk aWZmZXJlbnQgc2hvdWxkCisJCSMgYmUgZG9uZSkuICBGb3Igbm93IGRpcmVjdG9yeSBhbmQgbGli cmFyeSBtYXNrcyBhcmUgdXNlZC4KKworCQkjIFJlbW92ZSBtYXNrZWQgZGlyZWN0b3JpZXMgYW5k IGxpYnJhcmllcy4KKwkJaWYgc2VsZi5kZWJ1ZzoKKwkJCXRpbWVTdGFydCA9IHRpbWUudGltZSgp CisJCWlmIGJyb2tlbkRlcGVuZGVuY2llczoKKwkJCWJyb2tlbkRlcGVuZGVuY2llcyA9IHNlbGYu cmVtb3ZlTWFza2VkRGVwZW5kZW5jaWVzKGJyb2tlbkRlcGVuZGVuY2llcykKKwkJaWYgc2VsZi5k ZWJ1ZzoKKwkJCXRpbWVNYXNrID0gdGltZS50aW1lKCkgLSB0aW1lU3RhcnQKKworCQkjIERldGVy bWluZSBhdG9tcyB0byBlbWVyZ2UgYmFzZWQgb24gYnJva2VuIG9iamVjdHMgaW4KKwkJIyBicm9r ZW5EZXBlbmRlbmNpZXMuCisJCWlmIHNlbGYuZGVidWc6CisJCQl0aW1lU3RhcnQgPSB0aW1lLnRp bWUoKQorCQlpZiBicm9rZW5EZXBlbmRlbmNpZXM6CisJCQlhdG9tcyA9IHNlbGYubWFwUGF0aHNU b0F0b21zKHNldChicm9rZW5EZXBlbmRlbmNpZXMua2V5cygpKSkKKwkJaWYgc2VsZi5kZWJ1ZzoK KwkJCXRpbWVBdG9tcyA9IHRpbWUudGltZSgpIC0gdGltZVN0YXJ0CisKKwkJIyBEZWJ1ZyBvdXRw dXQKKwkJaWYgc2VsZi5kZWJ1ZzoKKwkJCXByaW50CisJCQlwcmludCBsZW4oYnJva2VuRGVwZW5k ZW5jaWVzKSwgImJyb2tlbkRlcGVuZGVuY2llczoiCisJCQlmb3IgeCBpbiBzb3J0ZWQoYnJva2Vu RGVwZW5kZW5jaWVzLmtleXMoKSk6CisJCQkJcHJpbnQKKwkJCQlwcmludCB4LCAiLT4iCisJCQkJ cHJpbnQgJ1x0JywgYnJva2VuRGVwZW5kZW5jaWVzW3hdCisJCQlwcmludAorCQkJcHJpbnQgImF0 b21zIHRvIGJlIGVtZXJnZWQ6IgorCQkJZm9yIHggaW4gc29ydGVkKGF0b21zKToKKwkJCQlwcmlu dCB4CisJCQlwcmludAorCQkJcHJpbnQgIkJyb2tlbiBiaW5hcmllcyB0aW1lOiIsIHRpbWVMaXN0 QnJva2VuQmluYXJpZXMKKwkJCXByaW50ICJCcm9rZW4gbGlidG9vbCB0aW1lOiIsIHRpbWVMaWJ0 b29sCisJCQlwcmludCAiUmVtb3ZlIG1hc2sgdGltZToiLCB0aW1lTWFzaworCQkJcHJpbnQgIm1h cFBhdGhzVG9BdG9tcyB0aW1lOiIsIHRpbWVBdG9tcworCQkJcHJpbnQKKworCQlzZWxmLl9zZXRB dG9tcyhhdG9tcykKKworCWRlZiByZW1vdmVNYXNrZWREZXBlbmRlbmNpZXMoc2VsZiwgZGVwZW5k ZW5jaWVzKToKKwkJIiIiCisJCVJlbW92ZSBhbGwgbWFza2VkIGRlcGVuZGVuY2llcyBhbmQgcmV0 dXJuIHRoZSB1cGRhdGVkIG1hcHBpbmcuCisKKwkJQHBhcmFtIGRlcGVuZGVuY2llczogZGVwZW5k ZW5jaWVzIGZyb20gd2hpY2ggdG8gcmVtb3ZlZCBtYXNrZWQKKwkJCWRlcGVuZGVuY2llcworCQlA dHlwZSBkZXBlbmRlbmNpZXM6IGRpY3QgKGV4YW1wbGU6IHsnL3Vzci9iaW4vZm9vJzogc2V0KFsn bGliZm9vLnNvJ10pfSkKKwkJQHJ0eXBlOiBkaWN0CisJCUByZXR1cm46IHNoYWxsb3cgY29weSBv ZiBkZXBlbmRlbmNpZXMgd2l0aCBtYXNrZWQgaXRlbXMgcmVtb3ZlZAorCisJCSIiIgorCQlyVmFs dWUgPSBkZXBlbmRlbmNpZXMuY29weSgpCisJCWRpck1hc2ssIGxpYk1hc2sgPSBzZWxmLmdldERl cGVuZGVuY3lNYXNrcygpCisKKwkJIyBSZW1vdmUgZW50cmllcyB0aGF0IGFyZSBtYXNrZWQuCisJ CWlmIGRpck1hc2sgb3IgbGliTWFzazoKKwkJCWlmIHNlbGYuZGVidWc6CisJCQkJcHJpbnQgIlRo ZSBmb2xsb3dpbmcgYXJlIG1hc2tlZDoiCisJCQlmb3IgYmluYXJ5LCBsaWJTZXQgaW4gclZhbHVl Lml0ZW1zKCk6CisJCQkJZm9yIGRpciBpbiBkaXJNYXNrOgorCQkJCQkjIENoZWNrIGlmIHRoZSBi cm9rZW4gYmluYXJ5IGxpZXMgd2l0aGluIHRoZSBtYXNrZWQgZGlyZWN0b3J5IG9yCisJCQkJCSMg aXRzIHN1YmRpcmVjdG9yaWVzLgorCQkJCQkjIFhYWCBQZXJoYXBzIHdlIHNob3VsZCBhbGxvdyBy ZWdleHBzIGFzIG1hc2tzLgorCQkJCQlpZiBiaW5hcnkuc3RhcnRzd2l0aChkaXIpOgorCQkJCQkJ ZGVsIHJWYWx1ZVtiaW5hcnldCisJCQkJCQlpZiBzZWxmLmRlYnVnOgorCQkJCQkJCXByaW50ICJk aXJNYXNrOiIsYmluYXJ5CisJCQkJCQlicmVhaworCQkJCSMgQ2hlY2sgaWYgYWxsIHRoZSByZXF1 aXJlZCBsaWJyYXJpZXMgYXJlIG1hc2tlZC4KKwkJCQlpZiBiaW5hcnkgaW4gclZhbHVlIGFuZCBs aWJTZXQuaXNzdWJzZXQobGliTWFzayk6CisJCQkJCWRlbCByVmFsdWVbYmluYXJ5XQorCQkJCQlp ZiBzZWxmLmRlYnVnOgorCQkJCQkJcHJpbnQgImxpYk1hc2s6IiwgYmluYXJ5LCBsaWJTZXQgJiBs aWJNYXNrCisKKwkJaWYgc2VsZi5kZWJ1ZzoKKwkJCXByaW50CisJCQlwcmludCAiRGlyZWN0b3J5 IG1hc2s6IiwgZGlyTWFzaworCQkJcHJpbnQKKwkJCXByaW50ICJMaWJyYXJ5IG1hc2s6IiwgbGli TWFzaworCisJCXJldHVybiByVmFsdWUKKworCWRlZiBnZXREZXBlbmRlbmN5TWFza3Moc2VsZik6 CisJCSIiIgorCQlSZXR1cm4gYWxsIGRlcGVuZGVuY3kgbWFza3MgYXMgYSB0dXBsZS4KKworCQlA cnR5cGU6IDItdHVwbGUgb2Ygc2V0cyBvZiBzdHJpbmdzCisJCUByZXR1cm46IDItdHVwbGUgaW4g d2hpY2ggdGhlIGZpcnN0IGNvbXBvbmVudCBpcyBhIHNldCBvZiBkaXJlY3RvcnkKKwkJCW1hc2tz IGFuZCB0aGUgc2Vjb25kIGNvbXBvbmVudCBpcyBhIHNldCBvZiBsaWJyYXJ5IG1hc2tzCisKKwkJ IiIiCisJCWRpck1hc2sgPSBzZXQoKQorCQlsaWJNYXNrID0gc2V0KCkKKwkJX2Rpck1hc2tfcmUg PSByZS5jb21waWxlKHInU0VBUkNIX0RJUlNfTUFTS1xzKj1ccyoiKFteIl0qKSInKQorCQlfbGli TWFza19yZSA9IHJlLmNvbXBpbGUocidMRF9MSUJSQVJZX01BU0tccyo9XHMqIihbXiJdKikiJykK KwkJbGluZXMgPSBbXQorCisJCSMgUmVhZHMgdGhlIGNvbnRlbnRzIG9mIC9ldGMvcmV2ZGVwLXJl YnVpbGQvKgorCQlsaWJNYXNrRGlyID0gb3MucGF0aC5qb2luKHNlbGYucm9vdCwgImV0YyIsICJy ZXZkZXAtcmVidWlsZCIpCisJCWlmIG9zLnBhdGguZXhpc3RzKGxpYk1hc2tEaXIpOgorCQkJZm9y IGZpbGUgaW4gb3MubGlzdGRpcihsaWJNYXNrRGlyKToKKwkJCQl0cnk6CisJCQkJCWYgPSBvcGVu KG9zLnBhdGguam9pbihsaWJNYXNrRGlyLCBmaWxlKSwgInIiKQorCQkJCQl0cnk6CisJCQkJCQls aW5lcy5leHRlbmQoZi5yZWFkbGluZXMoKSkKKwkJCQkJZmluYWxseToKKwkJCQkJCWYuY2xvc2Uo KQorCQkJCWV4Y2VwdCBJT0Vycm9yOiAjIE9TRXJyb3I/CisJCQkJCWNvbnRpbnVlCisJCQkjIFRo ZSBmb2xsb3dpbmcgcGFyc2VzIFNFQVJDSF9ESVJTX01BU0sgYW5kIExEX0xJQlJBUllfTUFTSyB2 YXJpYWJsZXMKKwkJCSMgZnJvbSAvZXRjL3JldmRlcC1yZWJ1aWxkLyoKKwkJCWZvciBsaW5lIGlu IGxpbmVzOgorCQkJCW1hdGNoRGlyID0gX2Rpck1hc2tfcmUubWF0Y2gobGluZSkKKwkJCQltYXRj aExpYiA9IF9saWJNYXNrX3JlLm1hdGNoKGxpbmUpCisJCQkJaWYgbWF0Y2hEaXI6CisJCQkJCWRp ck1hc2sudXBkYXRlKHNldChtYXRjaERpci5ncm91cCgxKS5zcGxpdCgpKSkKKwkJCQlpZiBtYXRj aExpYjoKKwkJCQkJbGliTWFzay51cGRhdGUoc2V0KG1hdGNoTGliLmdyb3VwKDEpLnNwbGl0KCkp KQorCisJCSMgVGhlc2UgZGlyZWN0b3JpZXMgY29udGFpbiBzcGVjaWFsbHkgZXZhbHVhdGVkIGxp YnJhcmllcy4KKwkJIyBhcHAtZW11bGF0aW9uL3Ztd2FyZS13b3Jrc3RhdGlvbi02LjAuMS41NTAx NworCQlkaXJNYXNrLmFkZCgnL29wdC92bXdhcmUvd29ya3N0YXRpb24vbGliJykKKwkJIyBhcHAt ZW11bGF0aW9uL3Ztd2FyZS1zZXJ2ZXItY29uc29sZS0xLjAuNi45MTg5MQorCQlkaXJNYXNrLmFk ZCgnL29wdC92bXdhcmUvc2VydmVyL2NvbnNvbGUvbGliJykKKwkJIyB3d3ctY2xpZW50L21vemls bGEtZmlyZWZveC0yLjAuMC4xNQorCQlkaXJNYXNrLmFkZCgnL3Vzci9saWIvbW96aWxsYS1maXJl Zm94L3BsdWdpbnMnKQorCQlkaXJNYXNrLmFkZCgnL3Vzci9saWI2NC9tb3ppbGxhLWZpcmVmb3gv cGx1Z2lucycpCisJCSMgYXBwLW9mZmljZS9vcGVub2ZmaWNlLTIuNC4xCisJCWRpck1hc2suYWRk KCcvb3B0L09wZW5PZmZpY2UnKQorCQlkaXJNYXNrLmFkZCgnL3Vzci9saWIvb3Blbm9mZmljZScp CisJCSMgZGV2LWxpYnMvbGlibWl4LTIuMDUgIGxpYm1peC5zbyBpcyBtaXNzaW5nIHNvbmFtZSBl bnRyeQorCQlsaWJNYXNrLmFkZCgnbGlibWl4LnNvJykKKworCQlyZXR1cm4gKGRpck1hc2ssIGxp Yk1hc2spCisKKwlkZWYgZmluZEF0b21zT2ZMaWJyYXJ5Q29uc3VtZXJzKHNlbGYsIHNlYXJjaFN0 cmluZyk6CisJCSIiIgorCQlSZXR1cm4gYXRvbXMgY29udGFpbmluZyBjb25zdW1lcnMgb2YgbGli cmFyaWVzIG1hdGNoaW5nIHRoZSBhcmd1bWVudC4KKworCQlAcGFyYW0gc2VhcmNoU3RyaW5nOiBh IHN0cmluZyB1c2VkIHRvIHNlYXJjaCBmb3IgbGlicmFyaWVzCisJCUB0eXBlIHNlYXJjaFN0cmlu Zzogc3RyaW5nIHRvIGJlIGNvbXBpbGVkIGFzIGEgcmVndWxhciBleHByZXNzaW9uCisJCQkoZXhh bXBsZTogJ2xpYmZvby4qJykKKwkJQHJ0eXBlOiBzZXQgb2Ygc3RyaW5ncworCQlAcmV0dXJuOiB0 aGUgcmV0dXJuZWQgc2V0IG9mIGF0b21zIGFyZSB2YWxpZCB0byBiZSB1c2VkIGJ5IHBhY2thZ2Ug c2V0cworCisJCSIiIgorCQlhdG9tcyA9IHNldCgpCisJCWNvbnN1bWVycyA9IHNldCgpCisJCW1h dGNoZWRMaWJyYXJpZXMgPSBzZXQoKQorCQlsaWJyYXJ5T2JqZWN0cyA9IFtdCisJCV9saWJyYXJ5 U2VhcmNoX3JlID0gcmUuY29tcGlsZShzZWFyY2hTdHJpbmcpCisKKwkJIyBGaW5kIGxpYnJhcmll cyBtYXRjaGluZyBzZWFyY2hTdHJpbmcuCisJCWxpYnJhcnlPYmplY3RzID0gc2VsZi5saW5rbWFw Lmxpc3RMaWJyYXJ5T2JqZWN0cygpCisJCWZvciBsaWJyYXJ5IGluIGxpYnJhcnlPYmplY3RzOgor CQkJbSA9IF9saWJyYXJ5U2VhcmNoX3JlLnNlYXJjaChsaWJyYXJ5KQorCQkJaWYgbToKKwkJCQlt YXRjaGVkTGlicmFyaWVzLmFkZChsaWJyYXJ5KQorCQkJCWNvbnN1bWVycy51cGRhdGUoc2VsZi5s aW5rbWFwLmZpbmRDb25zdW1lcnMobGlicmFyeSkpCisKKwkJcHJpbnQKKwkJcHJpbnQgIkNvbnN1 bWVycyBvZiB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyB3aWxsIGJlIGVtZXJnZWQ6IgorCQlmb3Ig eCBpbiBtYXRjaGVkTGlicmFyaWVzOgorCQkJcHJpbnQgeAorCisJCWlmIGNvbnN1bWVyczoKKwkJ CSMgVGhlIGZvbGxvd2luZyBwcmV2ZW50cyBlbWVyZ2luZyB0aGUgcGFja2FnZXMgdGhhdCBvd24g dGhlIG1hdGNoZWQKKwkJCSMgbGlicmFyaWVzLiAgTm90ZSB0aGF0IHRoaXMgd2lsbCBwcmV2ZW50 IHVwZGF0aW5nIHRoZSBwYWNrYWdlcyBvd25pbmcKKwkJCSMgdGhlIGxpYnJhcmllcyBpZiB0aGVy ZSBhcmUgbmV3ZXIgdmVyc2lvbnMgYXZhaWxhYmxlIGluIHRoZSBpbnN0YWxsZWQKKwkJCSMgc2xv dC4gIFNlZSBidWcgIzMwMDk1CisJCQlhdG9tcyA9IHNlbGYubWFwUGF0aHNUb0F0b21zKGNvbnN1 bWVycykKKwkJCWxpYnJhcnlPd25lcnMgPSBzZWxmLm1hcFBhdGhzVG9BdG9tcyhtYXRjaGVkTGli cmFyaWVzKQorCQkJYXRvbXMuZGlmZmVyZW5jZV91cGRhdGUobGlicmFyeU93bmVycykKKworCQly ZXR1cm4gYXRvbXMKKworCWRlZiBsaXN0QnJva2VuTGlidG9vbExpYnJhcmllcyhzZWxmKToKKwkJ IiIiCisJCUZpbmQgYnJva2VuIGxpYnRvb2wgbGlicmFyaWVzIGFuZCB0aGVpciBtaXNzaW5nIGRl cGVuZGVuY2llcy4KKworCQlAcnR5cGU6IGRpY3QgKGV4YW1wbGU6IHsnL2xpYi9saWJmb28ubGEn OiBzZXQoWycvbGliL2xpYmJhci5sYSddKX0pCisJCUByZXR1cm46IFRoZSByZXR1cm4gdmFsdWUg aXMgYSBsaWJyYXJ5IC0+IHNldC1vZi1saWJyYXJpZXMgbWFwcGluZywgd2hlcmUKKwkJCWxpYnJh cnkgaXMgYSBicm9rZW4gbGlicmFyeSBhbmQgdGhlIHNldCBjb25zaXN0cyBvZiBkZXBlbmRlbmNp ZXMKKwkJCW5lZWRlZCBieSBsaWJyYXJ5IHRoYXQgZG8gbm90IGV4aXN0IG9uIHRoZSBmaWxlc3lz dGVtLgorCisJCSIiIgorCQlyVmFsdWUgPSB7fQorCQlsaW5lcyA9IFtdCisJCWRlcGVuZGVuY2ll cyA9IFtdCisJCV9sYV9yZSA9IHJlLmNvbXBpbGUociIuKlwubGEkIikKKwkJX2RlcGVuZGVuY3lf bGlic19yZSA9IHJlLmNvbXBpbGUociJeZGVwZW5kZW5jeV9saWJzXHMqPVxzKicoLiopJyIpCisK KwkJIyBMb29wIG92ZXIgdGhlIGNvbnRlbnRzIG9mIGFsbCBwYWNrYWdlcy4KKwkJZm9yIGNwdiBp biBzZWxmLmRiYXBpLmNwdl9hbGwoKToKKwkJCW15c3BsaXQgPSBjYXRzcGxpdChjcHYpCisJCQls aW5rID0gZGJsaW5rKG15c3BsaXRbMF0sIG15c3BsaXRbMV0sIG15cm9vdD1zZWxmLmRiYXBpLnJv b3QsIFwKKwkJCQkJbXlzZXR0aW5ncz1zZWxmLmRiYXBpLnNldHRpbmdzLCB0cmVldHlwZT0ndmFy dHJlZScsIFwKKwkJCQkJdmFydHJlZT1zZWxmLmRiYXBpLnZhcnRyZWUpCisJCQlmb3IgZmlsZSBp biBsaW5rLmdldGNvbnRlbnRzKCk6CisJCQkJIyBDaGVjayBpZiB0aGUgZmlsZSBlbmRzIHdpdGgg Jy5sYScuCisJCQkJbWF0Y2hMaWIgPSBfbGFfcmUubWF0Y2goZmlsZSkKKwkJCQlpZiBtYXRjaExp YjoKKwkJCQkJIyBSZWFkIHRoZSBsaW5lcyBmcm9tIHRoZSBsaWJyYXJ5LgorCQkJCQlsaW5lcyA9 IFtdCisJCQkJCXRyeToKKwkJCQkJCWYgPSBvcGVuKGZpbGUsICJyIikKKwkJCQkJCXRyeToKKwkJ CQkJCQlsaW5lcy5leHRlbmQoZi5yZWFkbGluZXMoKSkKKwkJCQkJCWZpbmFsbHk6CisJCQkJCQkJ Zi5jbG9zZSgpCisJCQkJCWV4Y2VwdCBJT0Vycm9yOgorCQkJCQkJY29udGludWUKKwkJCQkJIyBG aW5kIHRoZSBsaW5lIGxpc3RpbmcgdGhlIGRlcGVuZGVuY2llcy4KKwkJCQkJZm9yIGxpbmUgaW4g bGluZXM6CisJCQkJCQltYXRjaExpbmUgPSBfZGVwZW5kZW5jeV9saWJzX3JlLm1hdGNoKGxpbmUp CisJCQkJCQlpZiBtYXRjaExpbmU6CisJCQkJCQkJZGVwZW5kZW5jaWVzID0gbWF0Y2hMaW5lLmdy b3VwKDEpLnNwbGl0KCkKKwkJCQkJCQkjIEZvciBlYWNoIGRlcGVuZGVuY3kgdGhhdCBpcyBhIHBh dGhuYW1lIChiZWdpbnMgd2l0aAorCQkJCQkJCSMgb3Muc2VwKSwgY2hlY2sgdGhhdCBpdCBleGlz dHMgb24gdGhlIGZpbGVzeXN0ZW0uICBJZiBpdAorCQkJCQkJCSMgZG9lcyBub3QgZXhpc3QsIHRo ZW4gYWRkIHRoZSBsaWJyYXJ5IGFuZCB0aGUgbWlzc2luZworCQkJCQkJCSMgZGVwZW5kZW5jeSB0 byByVmFsdWUuCisJCQkJCQkJZm9yIGRlcGVuZGVuY3kgaW4gZGVwZW5kZW5jaWVzOgorCQkJCQkJ CQlpZiBkZXBlbmRlbmN5WzBdID09IG9zLnNlcCBhbmQgXAorCQkJCQkJCQkJCW5vdCBvcy5wYXRo LmlzZmlsZShkZXBlbmRlbmN5KToKKwkJCQkJCQkJCXJWYWx1ZS5zZXRkZWZhdWx0KGZpbGUsIHNl dCgpKS5hZGQoZGVwZW5kZW5jeSkKKworCQlyZXR1cm4gclZhbHVlCisKKwlkZWYgc2luZ2xlQnVp bGRlcihzZWxmLCBvcHRpb25zLCBzZXR0aW5ncywgdHJlZXMpOgorCQlkZWJ1ZyA9IGdldF9ib29s ZWFuKG9wdGlvbnMsICJkZWJ1ZyIsIEZhbHNlKQorCQlyZXR1cm4gTWlzc2luZ0xpYnJhcnlDb25z dW1lclNldCh0cmVlc1sidmFydHJlZSJdLmRiYXBpLCBkZWJ1ZykKKwlzaW5nbGVCdWlsZGVyID0g Y2xhc3NtZXRob2Qoc2luZ2xlQnVpbGRlcikK ------=_Part_27950_25445809.1217772197912 Content-Type: text/x-patch; name=vartree.py.2.2_rc6.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fjfmeoji2 Content-Disposition: attachment; filename=vartree.py.2.2_rc6.patch LS0tIHZhcnRyZWUucHkuMi4yX3JjNgkyMDA4LTA4LTAxIDE1OjQxOjAzLjAwMDAwMDAwMCAtMDUw MAorKysgcHltL3BvcnRhZ2UvZGJhcGkvdmFydHJlZS5weQkyMDA4LTA4LTAzIDA2OjExOjU1LjAw MDAwMDAwMCAtMDUwMApAQCAtMTczLDggKzE3MywxOCBAQAogCQkJYXJjaCA9IGZpZWxkc1swXQog CQkJb2JqID0gb3MucGF0aC5yZWFscGF0aChmaWVsZHNbMV0pCiAJCQlzb25hbWUgPSBmaWVsZHNb Ml0KLQkJCXBhdGggPSBmaWVsZHNbM10ucmVwbGFjZSgiJHtPUklHSU59Iiwgb3MucGF0aC5kaXJu YW1lKG9iaikpLnJlcGxhY2UoIiRPUklHSU4iLCBvcy5wYXRoLmRpcm5hbWUob2JqKSkuc3BsaXQo IjoiKQotCQkJbmVlZGVkID0gZmllbGRzWzRdLnNwbGl0KCIsIikKKwkJCSMgV2hlbiBmaWVsZHNb M109PSIiLCB0aGlzIHByZXZlbnRzIHRoZSBlbXB0eSBzdHJpbmcgZnJvbSBiZWluZworCQkJIyBp bnNlcnRlZCBpbiBwYXRocy4KKwkJCWlmIGZpZWxkc1szXToKKwkJCQlwYXRoID0gZmllbGRzWzNd LnJlcGxhY2UoIiR7T1JJR0lOfSIsIG9zLnBhdGguZGlybmFtZShvYmopKS5yZXBsYWNlKCIkT1JJ R0lOIiwgb3MucGF0aC5kaXJuYW1lKG9iaikpLnNwbGl0KCI6IikKKwkJCWVsc2U6CisJCQkJcGF0 aCA9IFtdCisJCQkjIFdoZW4gZmllbGRzWzRdPT0iIiwgdGhpcyBwcmV2ZW50cyB0aGUgZW1wdHkg c3RyaW5nIGZyb20gYmVpbmcKKwkJCSMgaW5zZXJ0ZWQgYXMgYSBrZXkgaW50byBsaWJzLgorCQkJ aWYgZmllbGRzWzRdOgorCQkJCW5lZWRlZCA9IGZpZWxkc1s0XS5zcGxpdCgiLCIpCisJCQllbHNl OgorCQkJCW5lZWRlZCA9IFtdCiAJCQlpZiBzb25hbWU6CiAJCQkJbGlicy5zZXRkZWZhdWx0KHNv bmFtZSwge2FyY2g6IHsicHJvdmlkZXJzIjogW10sICJjb25zdW1lcnMiOiBbXX19KQogCQkJCWxp YnNbc29uYW1lXS5zZXRkZWZhdWx0KGFyY2gsIHsicHJvdmlkZXJzIjogW10sICJjb25zdW1lcnMi OiBbXX0pCkBAIC0xODgsNiArMTk4LDE1OSBAQAogCQlzZWxmLl9saWJzID0gbGlicwogCQlzZWxm Ll9vYmpfcHJvcGVydGllcyA9IG9ial9wcm9wZXJ0aWVzCiAKKwlkZWYgbGlzdEJyb2tlbkJpbmFy aWVzKHNlbGYpOgorCQkiIiIKKwkJRmluZCBiaW5hcmllcyBhbmQgdGhlaXIgbmVlZGVkIHNvbmFt ZXMsIHdoaWNoIGhhdmUgbm8gcHJvdmlkZXJzLgorCisJCUBydHlwZTogZGljdCAoZXhhbXBsZTog eycvdXNyL2Jpbi9mb28nOiBzZXQoWydsaWJiYXIuc28nXSl9KQorCQlAcmV0dXJuOiBUaGUgcmV0 dXJuIHZhbHVlIGlzIGFuIG9iamVjdCAtPiBzZXQtb2Ytc29uYW1lcyBtYXBwaW5nLCB3aGVyZQor CQkJb2JqZWN0IGlzIGEgYnJva2VuIGJpbmFyeSBhbmQgdGhlIHNldCBjb25zaXN0cyBvZiBzb25h bWVzIG5lZWRlZCBieQorCQkJb2JqZWN0IHRoYXQgaGF2ZSBubyBjb3JyZXNwb25kaW5nIGxpYnJh cmllcyB0byBmdWxmaWxsIHRoZSBkZXBlbmRlbmN5LgorCisJCSIiIgorCQljbGFzcyBMaWJyYXJ5 Q2FjaGUob2JqZWN0KToKKworCQkJIiIiCisJCQlDYWNoZXMgc29uYW1lcyBhbmQgcmVhbHBhdGhz IGFzc29jaWF0ZWQgd2l0aCBwYXRocy4KKworCQkJVGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBp cyB0byBwcmV2ZW50IG11bHRpcGxlIGNhbGxzIG9mCisJCQlvcy5wYXRoLnJlYWxwYXRoIGFuZCBv cy5wYXRoLmlzZmlsZSBvbiB0aGUgc2FtZSBwYXRocy4KKworCQkJIiIiCisKKwkJCWRlZiBfX2lu aXRfXyhjYWNoZV9zZWxmKToKKwkJCQljYWNoZV9zZWxmLmNhY2hlID0ge30KKworCQkJZGVmIGdl dChjYWNoZV9zZWxmLCBwYXRoKToKKwkJCQkiIiIKKwkJCQlDYWNoZXMgYW5kIHJldHVybnMgdGhl IHNvbmFtZSBhbmQgcmVhbHBhdGggZm9yIGEgcGF0aC4KKworCQkJCUBwYXJhbSBwYXRoOiBhYnNv bHV0ZSBwYXRoIChjYW4gYmUgc3ltbGluaykKKwkJCQlAdHlwZSBwYXRoOiBzdHJpbmcgKGV4YW1w bGU6ICcvdXNyL2xpYi9saWJmb28uc28nKQorCQkJCUBydHlwZTogMy10dXBsZSB3aXRoIHR5cGVz IChzdHJpbmcgb3IgTm9uZSwgc3RyaW5nLCBib29sZWFuKQorCQkJCUByZXR1cm46IDMtdHVwbGUg d2l0aCB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6CisJCQkJCTEuIHNvbmFtZSBhcyBhIHN0cmlu ZyBvciBOb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0LAorCQkJCQkyLiByZWFscGF0aCBhcyBhIHN0 cmluZywKKwkJCQkJMy4gdGhlIHJlc3VsdCBvZiBvcy5wYXRoLmlzZmlsZShyZWFscGF0aCkKKwkJ CQkJKGV4YW1wbGU6ICgnbGliZm9vLnNvLjEnLCAnL3Vzci9saWIvbGliZm9vLnNvLjEuNS4xJywg VHJ1ZSkpCisKKwkJCQkiIiIKKwkJCQlpZiBwYXRoIGluIGNhY2hlX3NlbGYuY2FjaGU6CisJCQkJ CXJldHVybiBjYWNoZV9zZWxmLmNhY2hlW3BhdGhdCisJCQkJZWxzZToKKwkJCQkJcmVhbHBhdGgg PSBvcy5wYXRoLnJlYWxwYXRoKHBhdGgpCisJCQkJCSMgQ2hlY2sgdGhhdCB0aGUgbGlicmFyeSBl eGlzdHMgb24gdGhlIGZpbGVzeXN0ZW0uCisJCQkJCWlmIG9zLnBhdGguaXNmaWxlKHJlYWxwYXRo KToKKwkJCQkJCSMgR2V0IHRoZSBzb25hbWUgZnJvbSBMaW5rYWdlTWFwLl9vYmpfcHJvcGVydGll cyBpZiBpdAorCQkJCQkJIyBleGlzdHMuIE90aGVyd2lzZSwgTm9uZS4KKwkJCQkJCXNvbmFtZSA9 IHNlbGYuX29ial9wcm9wZXJ0aWVzLmdldChyZWFscGF0aCwgKE5vbmUsKSozKVszXQorCQkJCQkJ IyBCb3RoIHBhdGggYW5kIHJlYWxwYXRoIGFyZSBjYWNoZWQgYW5kIHRoZSByZXN1bHQgaXMKKwkJ CQkJCSMgcmV0dXJuZWQuCisJCQkJCQljYWNoZV9zZWxmLmNhY2hlLnNldGRlZmF1bHQocmVhbHBh dGgsIFwKKwkJCQkJCQkJKHNvbmFtZSwgcmVhbHBhdGgsIFRydWUpKQorCQkJCQkJcmV0dXJuIGNh Y2hlX3NlbGYuY2FjaGUuc2V0ZGVmYXVsdChwYXRoLCBcCisJCQkJCQkJCShzb25hbWUsIHJlYWxw YXRoLCBUcnVlKSkKKwkJCQkJZWxzZToKKwkJCQkJCSMgcmVhbHBhdGggaXMgbm90IGNhY2hlZCBo ZXJlLCBiZWNhdXNlIHRoZSBtYWpvcml0eSBvZiBjYXNlcworCQkJCQkJIyB3aGVyZSByZWFscGF0 aCBpcyBub3QgYSBmaWxlLCBwYXRoIGlzIHRoZSBzYW1lIGFzIHJlYWxwYXRoLgorCQkJCQkJIyBU aHVzIHN0b3JpbmcgdHdpY2Ugc2xvd3MgZG93biB0aGUgY2FjaGUgcGVyZm9ybWFuY2UuCisJCQkJ CQlyZXR1cm4gY2FjaGVfc2VsZi5jYWNoZS5zZXRkZWZhdWx0KHBhdGgsIFwKKwkJCQkJCQkJKE5v bmUsIHJlYWxwYXRoLCBGYWxzZSkpCisKKwkJZGVidWcgPSBGYWxzZQorCQlyVmFsdWUgPSB7fQor CQljYWNoZSA9IExpYnJhcnlDYWNoZSgpCisJCXByb3ZpZGVycyA9IHNlbGYubGlzdFByb3ZpZGVy cygpCisjCQlwcm92aWRlcnMgPSBzZWxmLmxpc3RQcm92aWRlcnNGb3JSZWFjaGFibGVCaW5hcmll cyhzZWxmLmdldEJpbmFyaWVzKCkpCisKKwkJIyBJdGVyYXRlIG92ZXIgYWxsIGJpbmFyaWVzIGFu ZCB0aGVpciBwcm92aWRlcnMuCisJCWZvciBvYmosIHNvbmFtZXMgaW4gcHJvdmlkZXJzLml0ZW1z KCk6CisJCQkjIEl0ZXJhdGUgb3ZlciBlYWNoIG5lZWRlZCBzb25hbWUgYW5kIHRoZSBzZXQgb2Yg bGlicmFyeSBwYXRocyB0aGF0CisJCQkjIGZ1bGZpbGwgdGhlIHNvbmFtZSB0byBkZXRlcm1pbmUg aWYgdGhlIGRlcGVuZGVuY3kgaXMgYnJva2VuLgorCQkJZm9yIHNvbmFtZSwgbGlicmFyaWVzIGlu IHNvbmFtZXMuaXRlbXMoKToKKwkJCQkjIHZhbGlkTGlicmFyaWVzIGlzIHVzZWQgdG8gc3RvcmUg bGlicmFyaWVzLCB3aGljaCBzYXRpc2Z5IHNvbmFtZSwKKwkJCQkjIHNvIGlmIG5vIHZhbGlkIGxp YnJhcmllcyBhcmUgZm91bmQsIHRoZSBzb25hbWUgaXMgbm90IHNhdGlzZmllZAorCQkJCSMgZm9y IG9iai4gIFRodXMgb2JqIG11c3QgYmUgZW1lcmdlZC4KKwkJCQl2YWxpZExpYnJhcmllcyA9IHNl dCgpCisJCQkJIyBJdCBjb3VsZCBiZSB0aGUgY2FzZSB0aGF0IHRoZSBsaWJyYXJ5IHRvIHNhdGlz ZnkgdGhlIHNvbmFtZSBpcworCQkJCSMgbm90IGluIHRoZSBvYmoncyBydW5wYXRoLCBidXQgYSBz eW1saW5rIHRvIHRoZSBsaWJyYXJ5IGlzIChlZworCQkJCSMgbGlibnZpZGlhLXRscy5zby4xIGlu IG52aWRpYS1kcml2ZXJzKS4gIEFsc28sIHNpbmNlIExpbmthZ2VNYXAKKwkJCQkjIGRvZXMgbm90 IGNhdGFsb2cgc3ltbGlua3MsIGJyb2tlbiBvciBtaXNzaW5nIHN5bWxpbmtzIG1heSBnbworCQkJ CSMgdW5ub3RpY2VkLiAgQXMgYSByZXN1bHQgb2YgdGhlc2UgY2FzZXMsIGNoZWNrIHRoYXQgYSBm aWxlIHdpdGgKKwkJCQkjIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHNvbmFtZSBleGlzdHMgaW4gb2Jq J3MgcnVucGF0aC4KKwkJCQlwYXRoID0gc2VsZi5fb2JqX3Byb3BlcnRpZXNbb2JqXVsyXSArIHNl bGYuX2RlZnBhdGgKKwkJCQlmb3IgZGlyIGluIHBhdGg6CisJCQkJCWNhY2hlZFNvbmFtZSwgY2Fj aGVkUmVhbHBhdGgsIGNhY2hlZEV4aXN0cyA9IFwKKwkJCQkJCQljYWNoZS5nZXQob3MucGF0aC5q b2luKGRpciwgc29uYW1lKSkKKwkJCQkJIyBDaGVjayB0aGF0IHRoZSB0aGlzIGxpYnJhcnkgcHJv dmlkZXMgdGhlIG5lZWRlZCBzb25hbWUuICBEb2luZworCQkJCQkjIHRoaXMsIGhvd2V2ZXIsIHdp bGwgY2F1c2UgY29uc3VtZXJzIG9mIGxpYnJhcmllcyBtaXNzaW5nCisJCQkJCSMgc29uYW1lcyB0 byBiZSB1bm5lY2Vzc2FyaWx5IGVtZXJnZWQuIChlZyBsaWJtaXguc28pCisJCQkJCWlmIGNhY2hl ZFNvbmFtZSA9PSBzb25hbWU6CisJCQkJCQl2YWxpZExpYnJhcmllcy5hZGQoY2FjaGVkUmVhbHBh dGgpCisJCQkJCQlpZiBkZWJ1ZyBhbmQgY2FjaGVkUmVhbHBhdGggbm90IGluIGxpYnJhcmllczoK KwkJCQkJCQlwcmludCAiRm91bmQgcHJvdmlkZXIgb3V0c2lkZSBvZiBmaW5kUHJvdmlkZXJzOiIs IFwKKwkJCQkJCQkJCW9zLnBhdGguam9pbihkaXIsIHNvbmFtZSksICItPiIsIGNhY2hlZFJlYWxw YXRoCisJCQkJCQkjIEEgdmFsaWQgbGlicmFyeSBoYXMgYmVlbiBmb3VuZCwgc28gdGhlcmUgaXMg bm8gbmVlZCB0bworCQkJCQkJIyBjb250aW51ZS4KKwkJCQkJCWJyZWFrCisJCQkJCWlmIGRlYnVn IGFuZCBjYWNoZWRSZWFscGF0aCBpbiBzZWxmLl9vYmpfcHJvcGVydGllczoKKwkJCQkJCXByaW50 ICJCcm9rZW4gc3ltbGluayBvciBtaXNzaW5nL2JhZCBzb25hbWU6IiwgXAorCQkJCQkJCQlvcy5w YXRoLmpvaW4oZGlyLCBzb25hbWUpLCAnLT4nLCBjYWNoZWRSZWFscGF0aCwgXAorCQkJCQkJCQki d2l0aCBzb25hbWUiLCBjYWNoZWRTb25hbWUsICJidXQgZXhwZWN0aW5nIiwgc29uYW1lCisJCQkJ IyBUaGlzIGNvbmRpdGlvbmFsIGNoZWNrcyBpZiB0aGVyZSBhcmUgbm8gbGlicmFyaWVzIHRvIHNh dGlzZnkgdGhlCisJCQkJIyBzb25hbWUgKGVtcHR5IHNldCkuCisJCQkJaWYgbm90IHZhbGlkTGli cmFyaWVzOgorCQkJCQlyVmFsdWUuc2V0ZGVmYXVsdChvYmosIHNldCgpKS5hZGQoc29uYW1lKQor CQkJCQkjIElmIG5vIHZhbGlkIGxpYnJhcmllcyBoYXZlIGJlZW4gZm91bmQgYnkgdGhpcyBwb2lu dCwgdGhlbgorCQkJCQkjIHRoZXJlIGFyZSBubyBmaWxlcyBuYW1lZCB3aXRoIHRoZSBzb25hbWUg d2l0aGluIG9iaidzIHJ1bnBhdGgsCisJCQkJCSMgYnV0IGlmIHRoZXJlIGFyZSBsaWJyYXJpZXMg KGZyb20gdGhlIHByb3ZpZGVycyBtYXBwaW5nKSwgaXQgaXMKKwkJCQkJIyBsaWtlbHkgdGhhdCBz eW1saW5rcyBvciB0aGUgYWN0dWFsIGxpYnJhcmllcyBhcmUgbWlzc2luZy4KKwkJCQkJIyBUaHVz IHBvc3NpYmxlIHN5bWxpbmtzIGFuZCBtaXNzaW5nIGxpYnJhcmllcyBhcmUgYWRkZWQgdG8KKwkJ CQkJIyByVmFsdWUgaW4gb3JkZXIgdG8gZW1lcmdlIGNvcnJ1cHQgbGlicmFyeSBwYWNrYWdlcy4K KwkJCQkJZm9yIGxpYiBpbiBsaWJyYXJpZXM6CisJCQkJCQljYWNoZWRTb25hbWUsIGNhY2hlZFJl YWxwYXRoLCBjYWNoZWRFeGlzdHMgPSBjYWNoZS5nZXQobGliKQorCQkJCQkJaWYgbm90IGNhY2hl ZEV4aXN0czoKKwkJCQkJCQkjIFRoZSBsaWJyYXJ5J3MgcGFja2FnZSBuZWVkcyB0byBiZSBlbWVy Z2VkIHRvIHJlcGFpciB0aGUKKwkJCQkJCQkjIG1pc3NpbmcgbGlicmFyeS4KKwkJCQkJCQlyVmFs dWUuc2V0ZGVmYXVsdChsaWIsIHNldCgpKS5hZGQoc29uYW1lKQorCQkJCQkJZWxzZToKKwkJCQkJ CQkjIEEgbGlicmFyeSBwcm92aWRpbmcgdGhlIHNvbmFtZSBleGlzdHMgaW4gdGhlIG9iaidzCisJ CQkJCQkJIyBydW5wYXRoLCBidXQgbm8gZmlsZSBuYW1lZCBhcyB0aGUgc29uYW1lIGV4aXN0cywg c28gYWRkCisJCQkJCQkJIyB0aGUgcGF0aCBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBsaWIncyBkaXJl Y3RvcnkgYW5kIHRoZQorCQkJCQkJCSMgc29uYW1lIHRvIHJWYWx1ZSB0byBmaXggY2FzZXMgb2Yg dmFuaXNoaW5nIChvciBtb2RpZmllZCkKKwkJCQkJCQkjIHN5bWxpbmtzLiAgVGhpcyBwYXRoIGlz IG5vdCBndWFyYW50ZWVkIHRvIGV4aXN0LCBidXQgaXQKKwkJCQkJCQkjIGZvbGxvd3MgdGhlIHN5 bWxpbmsgY29udmVudGlvbiBmb3VuZCBpbiB0aGUgbWFqb3JpdHkgb2YKKwkJCQkJCQkjIHBhY2th Z2VzLgorCQkJCQkJCXJWYWx1ZS5zZXRkZWZhdWx0KG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5h bWUobGliKSwgXAorCQkJCQkJCQkJc29uYW1lKSwgc2V0KCkpLmFkZChzb25hbWUpCisJCQkJCQlp ZiBkZWJ1ZzoKKwkJCQkJCQlpZiBub3QgY2FjaGVkRXhpc3RzOgorCQkJCQkJCQlwcmludCAiTWlz c2luZyBsaWJyYXJ5OiIsIGxpYgorCQkJCQkJCWVsc2U6CisJCQkJCQkJCXByaW50ICJQb3NzaWJs eSBtaXNzaW5nIHN5bWxpbms6IiwgXAorCQkJCQkJCQkJCW9zLnBhdGguam9pbihvcy5wYXRoLmRp cm5hbWUobGliKSwgc29uYW1lKQorCisJCXJldHVybiByVmFsdWUKKworCWRlZiBsaXN0UHJvdmlk ZXJzKHNlbGYpOgorCQkiIiIKKwkJRmluZCB0aGUgcHJvdmlkZXJzIGZvciBhbGwgYmluYXJpZXMu CisKKwkJQHJ0eXBlOiBkaWN0IChleGFtcGxlOgorCQkJeycvdXNyL2Jpbi9mb28nOiB7J2xpYmJh ci5zbyc6IHNldChbJy9saWIvbGliYmFyLnNvLjEuNSddKX19KQorCQlAcmV0dXJuOiBUaGUgcmV0 dXJuIHZhbHVlIGlzIGFuIG9iamVjdCAtPiBwcm92aWRlcnMgbWFwcGluZywgd2hlcmUKKwkJCXBy b3ZpZGVycyBpcyBhIG1hcHBpbmcgb2Ygc29uYW1lIC0+IHNldC1vZi1saWJyYXJ5LXBhdGhzIHJl dHVybmVkCisJCQlmcm9tIHRoZSBmaW5kUHJvdmlkZXJzIG1ldGhvZC4KKworCQkiIiIKKwkJclZh bHVlID0ge30KKwkJaWYgbm90IHNlbGYuX2xpYnM6CisJCQlzZWxmLnJlYnVpbGQoKQorCQkjIEl0 ZXJhdGUgb3ZlciBhbGwgYmluYXJpZXMgd2l0aGluIExpbmthZ2VNYXAuCisJCWZvciBvYmogaW4g c2VsZi5fb2JqX3Byb3BlcnRpZXMua2V5cygpOgorCQkJclZhbHVlLnNldGRlZmF1bHQob2JqLCBz ZWxmLmZpbmRQcm92aWRlcnMob2JqKSkKKwkJcmV0dXJuIHJWYWx1ZQorCiAJZGVmIGlzTWFzdGVy TGluayhzZWxmLCBvYmopOgogCQliYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUob2JqKQogCQlp ZiBvYmogbm90IGluIHNlbGYuX29ial9wcm9wZXJ0aWVzOgo= ------=_Part_27950_25445809.1217772197912--