r252783 - in imsvdex/trunk/imsvdex: . tests
"Tom Gross" <svn-changes-z4DKO/[email protected]> Tue, 27 May 2014 09:48:33 +0000 (UTC)
| Newsgroups | gmane.comp.web.zope.plone.collective.cvs |
|---|---|
| Message-ID | <[email protected]> |
QXV0aG9yOiB0b21fZ3Jvc3MKRGF0ZTogVHVlIE1heSAyNyAwOTo0ODozMyAyMDE0Ck5ldyBSZXZp c2lvbjogMjUyNzgzCgpNb2RpZmllZDoKICAgaW1zdmRleC90cnVuay9pbXN2ZGV4L3Rlc3RzL3Rl c3QueG1sCiAgIGltc3ZkZXgvdHJ1bmsvaW1zdmRleC92ZGV4LnB5CkxvZzoKRU9MCgoKTW9kaWZp ZWQ6IGltc3ZkZXgvdHJ1bmsvaW1zdmRleC90ZXN0cy90ZXN0LnhtbAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGltc3ZkZXgvdHJ1bmsvaW1zdmRleC90ZXN0cy90ZXN0LnhtbAkob3JpZ2luYWwp CisrKyBpbXN2ZGV4L3RydW5rL2ltc3ZkZXgvdGVzdHMvdGVzdC54bWwJVHVlIE1heSAyNyAwOTo0 ODozMyAyMDE0CkBAIC0xLDQwICsxLDQwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n PSJ1dGYtOCI/PgotPHZkZXggeG1sbnM9Imh0dHA6Ly93d3cuaW1zZ2xvYmFsLm9yZy94c2QvaW1z dmRleF92MXAwIiB4bWxuczp6PSJuczp6dWNjYXJvLmJpYmxoZXJ0ei5pdCIgb3JkZXJTaWduaWZp Y2FudD0iZmFsc2UiPgotCTx2b2NhYk5hbWU+Ci0JCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJkZSI+ UGVyc29uPC9sYW5nc3RyaW5nPgotCQk8bGFuZ3N0cmluZyBsYW5ndWFnZT0iZW4iPlBlcnNvbjwv bGFuZ3N0cmluZz4KLQkJPGxhbmdzdHJpbmcgbGFuZ3VhZ2U9Iml0Ij5QZXJzb25hPC9sYW5nc3Ry aW5nPgotCQk8bGFuZ3N0cmluZyBsYW5ndWFnZT0iZnIiPlBlcnNvbmFnZTwvbGFuZ3N0cmluZz4K LQk8L3ZvY2FiTmFtZT4KLQk8dm9jYWJJZGVudGlmaWVyPml0LmJpYmxoZXJ0ei56dWNjYXJvLnZv Y2Ficy5wZXJzb25fcGVyc29uPC92b2NhYklkZW50aWZpZXI+Ci0JPHRlcm0+Ci0JCTx0ZXJtSWRl bnRpZmllcj5pZGVudGljYWw8L3Rlcm1JZGVudGlmaWVyPgotCQk8Y2FwdGlvbj4KLQkJCTxsYW5n c3RyaW5nIGxhbmd1YWdlPSJlbiI+aXMgaWRlbnRpY2FsIHdpdGg8L2xhbmdzdHJpbmc+Ci0JCQk8 bGFuZ3N0cmluZyBsYW5ndWFnZT0iaXQiPsOoIGlkZW50aWNvIGNvbjwvbGFuZ3N0cmluZz4KLQkJ CTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJmciI+ZXN0IGlkZW50aXF1ZSBhdmVjPC9sYW5nc3RyaW5n PgotCQk8L2NhcHRpb24+Ci0JCTxkZXNjcmlwdGlvbi8+Ci0JCTx6OnRlc3Q+U2NoYXM8L3o6dGVz dD4KLQk8L3Rlcm0+Ci0JPHRlcm0+Ci0JCTx0ZXJtSWRlbnRpZmllcj5yZWxhdGl2ZTwvdGVybUlk ZW50aWZpZXI+Ci0JCTxjYXB0aW9uPgotCQkJPGxhbmdzdHJpbmcgbGFuZ3VhZ2U9ImRlIj5pc3Qg dmVyd2FuZHQgbWl0PC9sYW5nc3RyaW5nPgotCQkJPGxhbmdzdHJpbmcgbGFuZ3VhZ2U9ImVuIj5p cyByZWxhdGl2ZSBvZjwvbGFuZ3N0cmluZz4KLQkJCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJpdCI+ w6ggcGFyZW50ZSBkaTwvbGFuZ3N0cmluZz4KLQkJCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJmciI+ ZXN0IHBhcmVudCBhdmVjPC9sYW5nc3RyaW5nPgotCQk8L2NhcHRpb24+Ci0JCTxkZXNjcmlwdGlv bi8+Ci0JCTx0ZXJtPgotCQkJPHRlcm1JZGVudGlmaWVyPmNoaWxkPC90ZXJtSWRlbnRpZmllcj4K LQkJCTxjYXB0aW9uPgotCQkJCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJkZSI+aXN0IEtpbmQgdm9u PC9sYW5nc3RyaW5nPgotCQkJCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJlbiI+aXMgY2hpbGQgb2Y8 L2xhbmdzdHJpbmc+Ci0JCQkJPGxhbmdzdHJpbmcgbGFuZ3VhZ2U9Iml0Ij7DqCBwcm9sZSBkaTwv bGFuZ3N0cmluZz4KLQkJCQk8bGFuZ3N0cmluZyBsYW5ndWFnZT0iZnIiPmVzdCBlbmZhbnQgZGU8 L2xhbmdzdHJpbmc+Ci0JCQk8L2NhcHRpb24+Ci0JCQk8ZGVzY3JpcHRpb24vPgotCQk8L3Rlcm0+ Ci0JPC90ZXJtPgotPC92ZGV4PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgi Pz4KKzx2ZGV4IHhtbG5zPSJodHRwOi8vd3d3Lmltc2dsb2JhbC5vcmcveHNkL2ltc3ZkZXhfdjFw MCIgeG1sbnM6ej0ibnM6enVjY2Fyby5iaWJsaGVydHouaXQiIG9yZGVyU2lnbmlmaWNhbnQ9ImZh bHNlIj4KKwk8dm9jYWJOYW1lPgorCQk8bGFuZ3N0cmluZyBsYW5ndWFnZT0iZGUiPlBlcnNvbjwv bGFuZ3N0cmluZz4KKwkJPGxhbmdzdHJpbmcgbGFuZ3VhZ2U9ImVuIj5QZXJzb248L2xhbmdzdHJp bmc+CisJCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJpdCI+UGVyc29uYTwvbGFuZ3N0cmluZz4KKwkJ PGxhbmdzdHJpbmcgbGFuZ3VhZ2U9ImZyIj5QZXJzb25hZ2U8L2xhbmdzdHJpbmc+CisJPC92b2Nh Yk5hbWU+CisJPHZvY2FiSWRlbnRpZmllcj5pdC5iaWJsaGVydHouenVjY2Fyby52b2NhYnMucGVy c29uX3BlcnNvbjwvdm9jYWJJZGVudGlmaWVyPgorCTx0ZXJtPgorCQk8dGVybUlkZW50aWZpZXI+ aWRlbnRpY2FsPC90ZXJtSWRlbnRpZmllcj4KKwkJPGNhcHRpb24+CisJCQk8bGFuZ3N0cmluZyBs YW5ndWFnZT0iZW4iPmlzIGlkZW50aWNhbCB3aXRoPC9sYW5nc3RyaW5nPgorCQkJPGxhbmdzdHJp bmcgbGFuZ3VhZ2U9Iml0Ij7DqCBpZGVudGljbyBjb248L2xhbmdzdHJpbmc+CisJCQk8bGFuZ3N0 cmluZyBsYW5ndWFnZT0iZnIiPmVzdCBpZGVudGlxdWUgYXZlYzwvbGFuZ3N0cmluZz4KKwkJPC9j YXB0aW9uPgorCQk8ZGVzY3JpcHRpb24vPgorCQk8ejp0ZXN0PlNjaGFzPC96OnRlc3Q+CisJPC90 ZXJtPgorCTx0ZXJtPgorCQk8dGVybUlkZW50aWZpZXI+cmVsYXRpdmU8L3Rlcm1JZGVudGlmaWVy PgorCQk8Y2FwdGlvbj4KKwkJCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJkZSI+aXN0IHZlcndhbmR0 IG1pdDwvbGFuZ3N0cmluZz4KKwkJCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJlbiI+aXMgcmVsYXRp dmUgb2Y8L2xhbmdzdHJpbmc+CisJCQk8bGFuZ3N0cmluZyBsYW5ndWFnZT0iaXQiPsOoIHBhcmVu dGUgZGk8L2xhbmdzdHJpbmc+CisJCQk8bGFuZ3N0cmluZyBsYW5ndWFnZT0iZnIiPmVzdCBwYXJl bnQgYXZlYzwvbGFuZ3N0cmluZz4KKwkJPC9jYXB0aW9uPgorCQk8ZGVzY3JpcHRpb24vPgorCQk8 dGVybT4KKwkJCTx0ZXJtSWRlbnRpZmllcj5jaGlsZDwvdGVybUlkZW50aWZpZXI+CisJCQk8Y2Fw dGlvbj4KKwkJCQk8bGFuZ3N0cmluZyBsYW5ndWFnZT0iZGUiPmlzdCBLaW5kIHZvbjwvbGFuZ3N0 cmluZz4KKwkJCQk8bGFuZ3N0cmluZyBsYW5ndWFnZT0iZW4iPmlzIGNoaWxkIG9mPC9sYW5nc3Ry aW5nPgorCQkJCTxsYW5nc3RyaW5nIGxhbmd1YWdlPSJpdCI+w6ggcHJvbGUgZGk8L2xhbmdzdHJp bmc+CisJCQkJPGxhbmdzdHJpbmcgbGFuZ3VhZ2U9ImZyIj5lc3QgZW5mYW50IGRlPC9sYW5nc3Ry aW5nPgorCQkJPC9jYXB0aW9uPgorCQkJPGRlc2NyaXB0aW9uLz4KKwkJPC90ZXJtPgorCTwvdGVy bT4KKzwvdmRleD4KCk1vZGlmaWVkOiBpbXN2ZGV4L3RydW5rL2ltc3ZkZXgvdmRleC5weQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGltc3ZkZXgvdHJ1bmsvaW1zdmRleC92ZGV4LnB5CShvcmln aW5hbCkKKysrIGltc3ZkZXgvdHJ1bmsvaW1zdmRleC92ZGV4LnB5CVR1ZSBNYXkgMjcgMDk6NDg6 MzMgMjAxNApAQCAtMSw1MTEgKzEsNTExIEBACi0jIEZpbGU6IHZkZXgucHkKLSMKLSMgQ29weXJp Z2h0IChjKSAyMDA3LTIwMDggYnkgTWFydGluIFJhc3BlCi0jIEJpYmxpb3RoZWNhIEhlcnR6aWFu YSAoTWF4LVBsYW5jay1JbnN0aXR1dGUgZm9yIEFydCBIaXN0b3J5KSwgUm9tZSwgSXRhbHkKLSMg VGhpcyBjb2RlIHdhcyB3cml0dGVuIGZvciB0aGUgWlVDQ0FSTyBQcm9qZWN0Ci0jIHNlZSBodHRw Oi8venVjY2Fyby5iaWJsaGVydHouaXQKLSMKLSMgR2VybWFuIEZyZWUgU29mdHdhcmUgTGljZW5z ZSAoRC1GU0wpCi0jCi0jIFRoaXMgUHJvZ3JhbSBtYXkgYmUgdXNlZCBieSBhbnlvbmUgaW4gYWNj b3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGUgCi0jIEdlcm1hbiBGcmVlIFNvZnR3YXJlIExp Y2Vuc2UKLSMgVGhlIExpY2Vuc2UgbWF5IGJlIG9idGFpbmVkIHVuZGVyIDxodHRwOi8vd3d3LmQt ZnNsLm9yZz4uCi0KLSMKLQotX19hdXRob3JfXyA9ICdNYXJ0aW4gUmFzcGUsIEplbnMgS2xlaW4n Ci1fX2RvY2Zvcm1hdF9fID0gJ3BsYWludGV4dCcKLQotaW1wb3J0IHN0cmluZwotZnJvbSB0eXBl cyBpbXBvcnQgU3RyaW5nVHlwZXMKLWZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCi0KLWZy b20geG1sLnBhcnNlcnMuZXhwYXQgaW1wb3J0IEV4cGF0RXJyb3IKLWZyb20gY29sbGVjdGlvbnMg aW1wb3J0IE9yZGVyZWREaWN0Ci0KLWZyb20gbHhtbCBpbXBvcnQgZXRyZWUKLQotVkRFWF9GTEFU X1BST0ZJTEVfVFlQRVMgPSAoJ3RoZXNhdXJ1cycsICdnbG9zc2FyeU9yRGljdGlvbmFyeScsICdm bGF0VG9rZW5UZXJtcycpCi1UUlVFX1ZBTFVFUyA9ICgnMScsICd0cnVlJywgJ1RydWUnLCAneWVz JywgJ1llcycpCi1GQUxTRV9WQUxVRVMgPSAoJycsICcwJywgJ2ZhbHNlJywgJ0ZhbHNlJywgJ25v JywgJ05vJykKLQotY2xhc3MgVkRFWEVycm9yKEV4Y2VwdGlvbik6Ci0gICAgIiIiCi0gICAgRGVu b3RlcyBhbiBlcnJvciB3aGlsZSBoYW5kbGluZyBhbiBJTVMtVkRFWCB2b2NhYnVsYXJ5IHdpdGgg YSBWREVYTWFuYWdlcgotICAgICIiIgotCi1jbGFzcyBWREVYTWFuYWdlcihvYmplY3QpOgotICAg ICIiIgotCVJlYWRzIGFuIElNUy1WREVYIHZvY2FidWxhcnkgYW5kIGNvbnN0cnVjdHMgYSBWb2Nh YnVsYXJ5RGljdCBmb3IgQXJjaGVUeXBlcy4KLQkgIFNlZSAiSU1TIFZvY2FidWxhcnkgRGVmaW5p dGlvbiBFeGNoYW5nZSI6IGh0dHA6Ly93d3cuaW1zZ2xvYmFsLm9yZy92ZGV4Ly4KLSAgICAgIFhN TCBiaW5kaW5nOiBodHRwOi8vd3d3Lmltc2dsb2JhbC5vcmcvdmRleC92ZGV4djFwMC9pbXN2ZGV4 X2JpbmR2MXAwLmh0bWwKLSAgICAgIE5vdCB5ZXQgc3VwcG9ydGVkOgotICAgICAgICAgIHRlcm0v bWVkaWFkZXNjcmlwdG9yIGVsZW1lbnRzCi0gICAgICAgICAgcmVsYXRpb25zaGlwIGVsZW1lbnRz Ci0KLSAgICBUd28gZGltZW5zaW9uYWwgTWF0cml4IHNwZWNpZmljYXRpb246Ci0gICAgVGhlIGZp cnN0IHJvdyBpcyBhbHdheXMgdGhlIGhlYWRlci4KLSAgICBUaGUgZmlyc3QgaGVhZGVycyBzdGFy dCB3aXRoIExldmVsIFgsIHdoZXJlYXMgZWFjaCBjb2x1bW4KLSAgICByZXByZXNlbnRzIGFuIGFk ZGl0aW9uYWwgZGVwdGggbGV2ZWwuIElmIHlvdXIgdmRleCB0cmVlIGlzIDMgbGV2ZWxzCi0gICAg ZGVlcCB5b3Ugd2lsbCBoYXZlIHRocmVlIExldmVsIGhlYWRlcnMuCi0gICAgVGhlIG5leHQgY29s dW1ucyBhcmUgZm9yIGVhY2ggbGFuZ3VhZ2UuCi0gICAgVGhlIG9yZGVyIGlzIGFscGhhYmV0aWNh bC4gRm9yIGVhY2ggbGFuZ3VhZ2UsIHR3byBjb2x1bW5zIHdpbGwgYmUKLSAgICBhZGRlZCwgb25l IG5hbWVkIENhcHRpb24gWFgsIHRoZSBvdGhlciBEZXNjcmlwdGlvbiBYWC4KLSAgICBBIHZvY2Fi dWxhcnkgd2l0aCBhIGRlcHRoIG9mIDMgbGV2ZWxzIGFuZCB0d28gbGFuZ3VhZ2VzIHdpbGwKLSAg ICB0aGVyZWZvciBoYXZlIDcgY29sdW1ucy4KLSAgICB0aGUgb3RoZXIgcm93cyByZXByZXNlbnQg YSBzaW5nbGUgdGVybSBvZiB0aGUgdm9jYWJ1bGFyeS4KLSAgICBBIGNoaWxkIGVsZW1lbnQgb2Yg b25lIG9mIHRoZSByb290IGVsZW1lbnRzIHdvdWxkIGZpbGwgaXRzCi0gICAga2V5IGluIHRoZSBD b2x1bW4gIkxldmVsIDIiIFRoZSBvdGhlciBMZXZlbCBmaWVsZHMgd291bGQgYmUgZW1wdHkuCi0g ICAgQSB0ZXJtIG9mIExldmVsIDIgd2lsbCBhbHdheXMgYmUgYmVsb3cgaXRzIExldmVsIDEgdGVy bSwgd2l0aCBubwotICAgIG90aGVyIExldmVsIDEgdGVybSBiZXR3ZWVuIHRoZW0uCi0gICAgVG8g c2VlIGFuIGV4YW1wbGUsIGNyZWF0ZSBhIFZERVhNYW5hZ2VyIGluc3RhbmNlIHdpdGggYSB2ZGV4 IGZpbGUsIGFuZAotICAgIGNhbGwgdGhlIGV4cG9ydE1hdHJpeCBtZXRob2QuCi0gICAgIiIiCi0K LSAgICB2ZGV4X25hbWVzcGFjZSA9ICdodHRwOi8vd3d3Lmltc2dsb2JhbC5vcmcveHNkL2ltc3Zk ZXhfdjFwMCcKLSAgICBkZWZhdWx0X2xhbmd1YWdlID0gJ2VuJwotICAgIHVubmFtZWRfdGVybSA9 ICcodW5uYW1lZCB0ZXJtKScKLSAgICBmYWxsYmFja190b19kZWZhdWx0X2xhbmd1YWdlID0gRmFs c2UKLSAgICBvcmRlcl9zaWduaWZpY2FudCA9IEZhbHNlCi0gICAgdGVybV9kaWN0ID0ge30KLQot ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlPU5vbmUsIG1hdHJpeD1Ob25lLCBsYW5nPU5vbmUs IG5hbWVzcGFjZT1Ob25lLCBmYWxsYmFjaz1Ob25lKToKLSAgICAgICAgIiIiCi0gICAgICAgIGNv bnN0cnVjdHMgYSBWREVYIG1hbmFnZXIgYW5kIHBhcnNlcyBhIFhNTCB2b2NhYnVsYXJ5Ci0JCWZp bGU6IGEgZmlsZSBvciBzdHJpbmcgdGhhdCBpcyBwYXJzZWQKLQkJbWF0cml4OiBhIHR3byBkaW1l bnNpb25hbCBtYXRyaXggdGhhdCBpcyBwYXJzZWQgaW50byBhIHZkZXggZmlsZQotCQlsYW5nOiBz ZXQgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgZm9yIG91dHB1dCAoJyonIGZvciBtdWx0aWxpbmd1YWwg dGVybXMpCi0gICAgICAgIG5hbWVzcGFjZTogZGVjbGFyZXMgdGhlIElNUy1WREVYIG5hbWVzcGFj ZSBpbiB0aGUgdm9jYWIgZmlsZQotCQkgICgnJyBoYW5kbGVzIFZERVggZmlsZXMgd2l0aG91dCBh bnkgZGVjbGFyZWQgbmFtZXNwYWNlKS4KLSAgICAgICAgZmFsbGJhY2s6IGlmIG5vIHRyYW5zbGF0 aW9uIGlzIGZvdW5kIGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UKLSAgICAgICAgICBzaG91bGQgdGhl IHRlcm0gYmUgcmV0dXJuZWQgaW4gdGhlIGRlZmF1bHQgbGFuZ3VhZ2UKLSAgICAgICAgICBvciBh cyBzZWxmLnVubmFtZWRfdGVybSA/Ci0gICAgICAgICIiIgotICAgICAgICBpZiBpc2luc3RhbmNl KG1hdHJpeCwgYmFzZXN0cmluZyk6Ci0gICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigi VGhpcyBpcyB0aGUgbmV3IGltc3ZkZXggdmVyc2lvbi4gWW91ICIKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJ0cmllZCB0byBwYXNzIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGFzICIK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgbWF0cml4LiBDb25zaWRlciB0 byB1c2UgbmFtZWQgYXJndW1lbnRzIikKLSAgICAgICAgaWYgbGFuZyBpcyBub3QgTm9uZToKLSAg ICAgICAgICAgIHNlbGYuZGVmYXVsdF9sYW5ndWFnZSA9IGxhbmcKLSAgICAgICAgaWYgbmFtZXNw YWNlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi52ZGV4X25hbWVzcGFjZSA9IG5hbWVz cGFjZQotICAgICAgICBpZiBmYWxsYmFjayBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYu ZmFsbGJhY2tfdG9fZGVmYXVsdF9sYW5ndWFnZSA9IGZhbGxiYWNrCi0gICAgICAgIGlmIG1hdHJp eCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYucGFyc2VNYXRyaXgobWF0cml4KQotICAg ICAgICBpZiBmaWxlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5wYXJzZShmaWxlKQot ICAgICAgICBpZiBmaWxlIGFuZCBtYXRyaXg6Ci0gICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVF cnJvcigiWW91IGdhdmUgbWUgYSBhIG1hdHJpeCBhbmQgYSBmaWxlLCBpdCBpcyAiCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGRlZmluZWQgd2hhdCB0YWtlcyBwcmVjZWRl bmNlLiBZb3UgbWF5ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbmx5IHNl dCBvbmUgb2YgdGhlIHR3byBwYXJhbWV0ZXJzIikKLQotICAgIGRlZiBpc1ZERVgoc2VsZik6Ci0g ICAgICAgICIiIgotICAgICAgICBjaGVja3MgaWYgdGhlIHBhcnNlZCBYTUwgc2VlbXMgdG8gYmUg YSB2YWxpZCBWREVYIHZvY2FidWxhcnkKLSAgICAgICAgIiIiCi0gICAgICAgICMgdGhpcyBtZXRo b2QgZG9lcyBub3QgcGVyZm9ybSBhIGNvbXBsZXRlIHNjaGVtYSB2YWxpZGF0aW9uCi0JCSMgaXQg anVzdCBjaGVja3MgZm9yIGEgcm9vdCBlbGVtZW50IG5hbWVkICd2ZGV4JyBpbiB0aGUgZXhwZWN0 ZWQgIG5hbWVzcGFjZQotICAgICAgICByZXR1cm4gc2VsZi50cmVlLmdldHJvb3QoKS50YWcgPT0g c2VsZi52ZGV4VGFnKCd2ZGV4JykKLQotICAgIGRlZiBwYXJzZShzZWxmLCBmaWxlKToKLSAgICAg ICAgIiIiCi0gICAgICAgIHBhcnNlcyBhIFZERVggdm9jYWJ1bGFyeSBmaWxlIG9yIFhNTCBzdHJp bmcKLSAgICAgICAgIiIiCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoZmlsZSwgU3RyaW5nVHlwZXMp OgotICAgICAgICAgICAgZmlsZSA9IFN0cmluZ0lPKGZpbGUpCi0gICAgICAgIHRyeToKLSAgICAg ICAgICAgIHNlbGYudHJlZSA9IGV0cmVlLnBhcnNlKGZpbGUpCi0gICAgICAgIGV4Y2VwdCAoU3lu dGF4RXJyb3IsIEV4cGF0RXJyb3IpLCBlOgotICAgICAgICAgICAgcmFpc2UgVkRFWEVycm9yLCAn UGFyc2UgZXJyb3IgaW4gdm9jYWJ1bGFyeSBYTUw6ICVzJyAlIGUKLSAgICAgICAgdHJ5OgotICAg ICAgICAgICAgZmlsZW5hbWUgPSBmaWxlLm5hbWUKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVy cm9yOgotICAgICAgICAgICAgZmlsZW5hbWUgPSAncGFyc2VkIFhNTCB0ZXh0JwotICAgICAgICBp ZiBub3Qgc2VsZi5pc1ZERVgoKToKLSAgICAgICAgICAgIHJhaXNlIFZERVhFcnJvciwgJ1ZvY2Fi dWxhcnkgZm9ybWF0IG5vdCBjb3JyZWN0IGluICVzJyAlIGZpbGVuYW1lCi0gICAgICAgIHNlbGYu b3JkZXJfc2lnbmlmaWNhbnQgPSBzZWxmLmlzT3JkZXJTaWduaWZpY2FudCgpCi0gICAgICAgIHNl bGYubWFrZVRlcm1EaWN0KCkKLSAgICAgICAgcmV0dXJuIHNlbGYudHJlZQotCi0gICAgZGVmIHNl cmlhbGl6ZShzZWxmLCBmaWxlPU5vbmUpOgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJucyB0 aGUgdm9jYWJ1bGFyeSBhcyBYTUwKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBldHJlZS50 b3N0cmluZyhzZWxmLnRyZWUsIGVuY29kaW5nPSd1dGYtOCcsIHN0YW5kYWxvbmU9VHJ1ZSkKLQot ICAgIGRlZiBnZXRWb2NhYklkZW50aWZpZXIoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBy ZXR1cm5zIHRoZSB2b2NhYnVsYXJ5IGlkZW50aWZpZXIKLSAgICAgICAgIiIiCi0gICAgICAgIHhw YXRoID0gc2VsZi52ZGV4VGFnKCd2b2NhYklkZW50aWZpZXInKQotICAgICAgICByZXR1cm4gc2Vs Zi50cmVlLmZpbmR0ZXh0KHhwYXRoKQotCi0gICAgZGVmIGdldFZvY2FiTmFtZShzZWxmLCBsYW5n PU5vbmUpOgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJucyB0aGUgdm9jYWJ1bGFyeSBuYW1l IGluIHRoZSBnaXZlbiAob3IgZGVmYXVsdCkgbGFuZ3VhZ2UuCi0gICAgICAgIElmIGxhbmcgaXMg JyonLCByZXR1cm5zIGEgZGljdCBvZiBhbGwgdHJhbnNsYXRpb25zIGtleWVkIGJ5IGxhbmd1YWdl Ci0gICAgICAgICIiIgotICAgICAgICB4cGF0aCA9ICclcy8lcycgJSAoc2VsZi52ZGV4VGFnKCd2 b2NhYk5hbWUnKSwgc2VsZi52ZGV4VGFnKCdsYW5nc3RyaW5nJykpCi0gICAgICAgIGNhcHRpb25z ID0gc2VsZi50cmVlLmZpbmRhbGwoeHBhdGgpCi0gICAgICAgIHJldHVybiBzZWxmLmdldExhbmdz dHJpbmcoY2FwdGlvbnMsIGxhbmcsIGRlZmF1bHQ9Jyh1bm5hbWVkIHZvY2FidWxhcnkpJykKLQot ICAgIGRlZiBnZXRWb2NhYk1ldGFkYXRhKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgcmV0 dXJucyB0aGUgVkRFWCBtZXRhZGF0YSBlbGVtZW50KHMpIGZvciB0aGUgVm9jYWJ1bGFyeQotICAg ICAgICAiIiIKLSAgICAgICAgeHBhdGggPSBzZWxmLnZkZXhUYWcoJ21ldGFkYXRhJykKLSAgICAg ICAgcmV0dXJuIHNlbGYudHJlZS5nZXRyb290KCkuZmluZGFsbCh4cGF0aCkKLQotICAgIGRlZiBn ZXRWb2NhYldpbGRjYXJkKHNlbGYsIGZvcmVpZ25fbnMsIHRhZ25hbWUpOgotICAgICAgICAiIiIK LSAgICAgICAgcmV0dXJucyAnd2lsZGNhcmQnIGVsZW1lbnQocykgKHdpdGggYSBmb3JlaWduIG5h bWVzcGFjZSkgZm9yIHRoZSBWb2NhYnVsYXJ5Ci0gICAgICAgICIiIgotICAgICAgICB4cGF0aCA9 IHNlbGYubnNUYWcoZm9yZWlnbl9ucywgdGFnbmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYudHJl ZS5nZXRyb290KCkuZmluZGFsbCh4cGF0aCkKLQotICAgIGRlZiBpc0ZsYXQoc2VsZik6Ci0gICAg ICAgICIiIgotICAgICAgICByZXR1cm5zIHRydWUgaWYgdGhlIFZERVggcHJvZmlsZSB0eXBlIGRl bm90ZXMgYSBmbGF0IHZvY2FidWxhcnkKLSAgICAgICAgIiIiIAotICAgICAgICB2ZGV4ID0gc2Vs Zi50cmVlLmdldHJvb3QoKQotICAgICAgICByZXR1cm4gdmRleC5nZXQoJ3Byb2ZpbGVUeXBlJykg aW4gVkRFWF9GTEFUX1BST0ZJTEVfVFlQRVMKLQotICAgIGRlZiBpc09yZGVyU2lnbmlmaWNhbnQo c2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICByZXR1cm5zIHRydWUgaWYgdGhlIG9yZGVyIG9m IHRoZSBWREVYIHZvY2FidWxhcnkgaXMgc2lnbmlmaWNhbnQKLSAgICAgICAgIiIiIAotICAgICAg ICB2ZGV4ID0gc2VsZi50cmVlLmdldHJvb3QoKQotICAgICAgICByZXR1cm4gdmRleC5nZXQoJ29y ZGVyU2lnbmlmaWNhbnQnKSBub3QgaW4gRkFMU0VfVkFMVUVTCi0KLSAgICBkZWYgc2hvd0xlYWZz T25seShzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIHRoaXMgaXMgbm90IGRlY2xhcmVkIGlu IFZERVggdm9jYWJzLCBzbyB3ZSByZXR1cm4gZmFsc2UKLSAgICAgICAgIiIiCi0gICAgICAgIHJl dHVybiBmYWxzZQotCi0gICAgZGVmIGdldFZvY2FidWxhcnlEaWN0KHNlbGYsIGxhbmc9Tm9uZSk6 Ci0gICAgICAgICIiIgotICAgICAgICByZXR1cm5zIGEgdm9jYWJ1bGFyeSBkaWN0aW9uYXJ5IChm b3IgQXJjaGVUeXBlcykgaW4gdGhlIGdpdmVuIGxhbmd1YWdlLgotICAgICAgICBJZiBsYW5nIGlz ICcqJywgcmV0dXJucyBkaWN0cyBvZiBhbGwgdHJhbnNsYXRpb25zIGtleWVkIGJ5IGxhbmd1YWdl Ci0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5nZXRUZXJtcyhzZWxmLnRyZWUuZ2V0 cm9vdCgpLCBsYW5nKQotCi0gICAgZGVmIGdldFRlcm1zKHNlbGYsIGVsZW1lbnQsIGxhbmc9Tm9u ZSk6Ci0gICAgICAgICIiIgotICAgICAgICBnZXQgYWxsIHRlcm0gZWxlbWVudHMgcmVjdXJzaXZl bHkKLSAgICAgICAgICByZXR1cm5zIGEgaGllcmFyY2hpYyBkaWN0aW9uYXJ5IHN0cnVjdHVyZSBv ZiB0aGUgdm9jYWJ1bGFyeQotICAgICAgICAiIiIKLSAgICAgICAgeHBhdGggPSBzZWxmLnZkZXhU YWcoJ3Rlcm0nKQotICAgICAgICB0ZXJtcyA9IGVsZW1lbnQuZmluZGFsbCh4cGF0aCkKLSAgICAg ICAgaWYgbGVuKHRlcm1zKSA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAg IyB3ZSBzaG91bGQgbm90IG9ubHkgdGVzdCBvcmRlciBzaWduaWZpY2FuY2UgZ2xvYmFsbHksIGJ1 dCBhbHNvIGZvciBldmVyeSB0ZXJtCi0gICAgICAgIGlmIHNlbGYub3JkZXJfc2lnbmlmaWNhbnQ6 Ci0gICAgICAgICAgICByZXN1bHQgPSBPcmRlcmVkRGljdCgpCi0gICAgICAgIGVsc2U6Ci0gICAg ICAgICAgICByZXN1bHQgPSB7fQotICAgICAgICBmb3IgdGVybSBpbiB0ZXJtczoKLSAgICAgICAg ICAgIGtleSA9IHNlbGYuZ2V0VGVybUlkZW50aWZpZXIodGVybSkKLSAgICAgICAgICAgIHZhbHVl ID0gc2VsZi5nZXRUZXJtQ2FwdGlvbih0ZXJtLCBsYW5nKQotICAgICAgICAgICAgcmVzdWx0W2tl eV0gPSAodmFsdWUsIHNlbGYuZ2V0VGVybXModGVybSwgbGFuZykpCi0gICAgICAgIHJldHVybiBy ZXN1bHQKLQotICAgIGRlZiBnZXRUZXJtSWRlbnRpZmllcihzZWxmLCB0ZXJtKToKLSAgICAgICAg IiIiCi0gICAgICAgIHJldHVybnMgdGhlIHRlcm1JZGVudGlmaWVyIGZvciBhIGdpdmVuIHRlcm0g ZWxlbWVudAotICAgICAgICAiIiIKLSAgICAgICAgeHBhdGggPSBzZWxmLnZkZXhUYWcoJ3Rlcm1J ZGVudGlmaWVyJykKLSAgICAgICAgcmV0dXJuIHRlcm0uZmluZHRleHQoeHBhdGgpCi0KLSAgICBk ZWYgZ2V0VGVybUNhcHRpb24oc2VsZiwgdGVybSwgbGFuZz1Ob25lKToKLSAgICAgICAgIiIiCi0g ICAgICAgIHJldHVybnMgdGhlIHRyYW5zbGF0ZWQgY2FwdGlvbiBmb3IgYSB0ZXJtCi0gICAgICAg ICAgZm9yIGxhbmcgPT0gIioiIHRoZSBtZXRob2QgcmV0dXJucyBhIGRpY3Rpb25hcnkgd2l0aCBh bGwgdHJhbnNsYXRpb25zIAotICAgICAgICAgIGtleWVkIGJ5IGxhbmd1YWdlCi0gICAgICAgICIi IgotICAgICAgICBpZiB0ZXJtIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAg ICAgICB4cGF0aCA9ICclcy8lcycgJSAoc2VsZi52ZGV4VGFnKCdjYXB0aW9uJyksIHNlbGYudmRl eFRhZygnbGFuZ3N0cmluZycpKQotICAgICAgICBjYXB0aW9ucyA9IHRlcm0uZmluZGFsbCh4cGF0 aCkKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0TGFuZ3N0cmluZyhjYXB0aW9ucywgbGFuZykKLQot ICAgIGRlZiBnZXRUZXJtRGVzY3JpcHRpb24oc2VsZiwgdGVybSwgbGFuZz1Ob25lKToKLSAgICAg ICAgIiIiCi0gICAgICAgIHJldHVybnMgdGhlIHRyYW5zbGF0ZWQgZGVzY3JpcHRpb24gZm9yIGEg dGVybQotICAgICAgICAgIGZvciBsYW5nID09ICIqIiB0aGUgbWV0aG9kIHJldHVybnMgYSBkaWN0 aW9uYXJ5IHdpdGggYWxsIHRyYW5zbGF0aW9ucyAKLSAgICAgICAgICBrZXllZCBieSBsYW5ndWFn ZQotICAgICAgICAiIiIKLSAgICAgICAgaWYgdGVybSBpcyBOb25lOgotICAgICAgICAgICAgcmV0 dXJuIE5vbmUKLSAgICAgICAgeHBhdGggPSAnJXMvJXMnICUgKHNlbGYudmRleFRhZygnZGVzY3Jp cHRpb24nKSwgc2VsZi52ZGV4VGFnKCdsYW5nc3RyaW5nJykpCi0gICAgICAgIGRlc2NyaXB0aW9u cyA9IHRlcm0uZmluZGFsbCh4cGF0aCkKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0TGFuZ3N0cmlu ZyhkZXNjcmlwdGlvbnMsIGxhbmcsIGRlZmF1bHQ9JycpCi0KLSAgICBkZWYgZ2V0TGFuZ3N0cmlu ZyhzZWxmLCBlbGVtZW50cywgbGFuZz1Ob25lLCBkZWZhdWx0PU5vbmUpOgotICAgICAgICAiIiIK LSAgICAgICAgcmV0dXJucyB0aGUgbGFuZ3N0cmluZyBpbiB0aGUgZ2l2ZW4gbGFuZ3VhZ2UuCi0g ICAgICAgIGZvciBsYW5nID09ICIqIiB0aGUgbWV0aG9kIHJldHVybnMgYSBkaWN0aW9uYXJ5IHdp dGggYWxsIHRyYW5zbGF0aW9ucyAKLSAgICAgICAga2V5ZWQgYnkgbGFuZ3VhZ2UKLSAgICAgICAg IiIiCi0gICAgICAgIGlmIGxhbmcgPT0gJyonOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0 QWxsTGFuZ3N0cmluZ3MoZWxlbWVudHMpCi0gICAgICAgIGlmIGxhbmcgaXMgTm9uZToKLSAgICAg ICAgICAgIGxhbmcgPSBzZWxmLmRlZmF1bHRfbGFuZ3VhZ2UKLSAgICAgICAgaWYgZGVmYXVsdCBp cyBOb25lOgotICAgICAgICAgICAgZGVmYXVsdCA9IHNlbGYudW5uYW1lZF90ZXJtCi0gICAgICAg IHJlc3VsdCA9IE5vbmUKLSAgICAgICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6Ci0gICAgICAg ICAgICBpZiBlbGVtZW50LmdldCgnbGFuZ3VhZ2UnKSA9PSBsYW5nOgotICAgICAgICAgICAgICAg IHJlc3VsdCA9IGVsZW1lbnQudGV4dAotICAgICAgICAgICAgaWYgc2VsZi5mYWxsYmFja190b19k ZWZhdWx0X2xhbmd1YWdlOgotICAgICAgICAgICAgICAgaWYgZWxlbWVudC5nZXQoJ2xhbmd1YWdl JykgPT0gc2VsZi5kZWZhdWx0X2xhbmd1YWdlOgotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0 ID0gZWxlbWVudC50ZXh0Ci0gICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgotICAgICAgICAgICAg cmVzdWx0ID0gZGVmYXVsdAotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICBkZWYgZ2V0QWxs TGFuZ3N0cmluZ3Moc2VsZiwgZWxlbWVudHMpOgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJu cyBhIGRpY3Rpb25hcnkgd2l0aCBhbGwgdHJhbnNsYXRpb25zIGtleWVkIGJ5IGxhbmd1YWdlCi0g ICAgICAgICIiIgotICAgICAgICByZXN1bHQgPSB7fQotICAgICAgICBmb3IgZWxlbWVudCBpbiBl bGVtZW50czoKLSAgICAgICAgICAgIHJlc3VsdFtlbGVtZW50LmdldCgnbGFuZ3VhZ2UnKV0gPSBl bGVtZW50LnRleHQKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgZGVmIGdldFRlcm1CeUlk KHNlbGYsIGlkZW50aWZpZXIpOgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJucyB0aGUgVkRF WCB0ZXJtIGVsZW1lbnQgZm9yIGEgZ2l2ZW4gdGVybSBpZGVudGlmaWVyCi0gICAgICAgICIiIgot ICAgICAgICByZXR1cm4gc2VsZi50ZXJtX2RpY3QuZ2V0KGlkZW50aWZpZXIsIE5vbmUpCi0KLSAg ICBkZWYgZ2V0VGVybUNhcHRpb25CeUlkKHNlbGYsIGlkZW50aWZpZXIsIGxhbmc9Tm9uZSk6Ci0g ICAgICAgICIiIgotICAgICAgICByZXR1cm5zIHRoZSBjYXB0aW9uKHMpIGZvciBhIGdpdmVuIHRl cm0gaWRlbnRpZmllcgotICAgICAgICAiIiIKLSAgICAgICAgdGVybSA9IHNlbGYuZ2V0VGVybUJ5 SWQoaWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0VGVybUNhcHRpb24odGVybSwg bGFuZykKLQotICAgIGRlZiBnZXRUZXJtRGVzY3JpcHRpb25CeUlkKHNlbGYsIGlkZW50aWZpZXIs IGxhbmc9Tm9uZSk6Ci0gICAgICAgICIiIgotICAgICAgICByZXR1cm5zIHRoZSBkZXNjcmlwdGlv bihzKSBmb3IgYSBnaXZlbiB0ZXJtIGlkZW50aWZpZXIKLSAgICAgICAgIiIiCi0gICAgICAgIHRl cm0gPSBzZWxmLmdldFRlcm1CeUlkKGlkZW50aWZpZXIpCi0gICAgICAgIHJldHVybiBzZWxmLmdl dFRlcm1EZXNjcmlwdGlvbih0ZXJtLCBsYW5nKQotCi0gICAgZGVmIGdldFRlcm1NZXRhZGF0YUJ5 SWQoc2VsZiwgaWRlbnRpZmllcik6Ci0gICAgICAgICIiIgotICAgICAgICByZXR1cm5zIHRoZSBW REVYIG1ldGFkYXRhIGVsZW1lbnQocykgaW5zaWRlIGEgdGVybQotICAgICAgICAgIGZvciBhIGdp dmVuIHRlcm0gaWRlbnRpZmllcgotICAgICAgICAiIiIKLSAgICAgICAgdGVybSA9IHNlbGYuZ2V0 VGVybUJ5SWQoaWRlbnRpZmllcikKLSAgICAgICAgeHBhdGggPSBzZWxmLnZkZXhUYWcoJ21ldGFk YXRhJykKLSAgICAgICAgcmV0dXJuIHRlcm0uZmluZGFsbCh4cGF0aCkKLQotICAgIGRlZiBnZXRU ZXJtV2lsZGNhcmRCeUlkKHNlbGYsIGlkZW50aWZpZXIsIG5hbWVzcGFjZSwgdGFnbmFtZSk6Ci0g ICAgICAgICIiIgotICAgICAgICByZXR1cm5zICd3aWxkY2FyZCcgZWxlbWVudChzKSAod2l0aCBh IGZvcmVpZ24gbmFtZXNwYWNlKQotICAgICAgICAgIGluc2lkZSBhIHRlcm0gZm9yIGEgZ2l2ZW4g dGVybSBpZGVudGlmaWVyCi0gICAgICAgICIiIgotICAgICAgICB0ZXJtID0gc2VsZi5nZXRUZXJt QnlJZChpZGVudGlmaWVyKQotICAgICAgICB4cGF0aCA9IHNlbGYubnNUYWcobmFtZXNwYWNlLCB0 YWduYW1lKQotICAgICAgICByZXR1cm4gdGVybS5maW5kYWxsKHhwYXRoKQotCi0gICAgZGVmIGdl dFRhZ25hbWUoc2VsZiwgbnNuYW1lKToKLQkgICAgIyBub3QgbmVlZGVkIGhlcmUKLSAgICAgICAg aWYgbm90IG5zbmFtZVs6MV0gPT0gInsiOgotICAgICAgICAgICAgcmV0dXJuIG5zbmFtZQotICAg ICAgICBuYW1lc3BhY2VfdXJpLCB0YWduYW1lID0gc3RyaW5nLnNwbGl0KG5hbWVbMTpdLCAifSIs IDEpCi0gICAgICAgIHJldHVybiB0YWduYW1lCi0KLSAgICBkZWYgbnNUYWcoc2VsZiwgbmFtZXNw YWNlLCB0YWduYW1lKToKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybnMgYSB0YWcgd2l0aCBh IG5hbWVzcGFjZSBvZiB0aGUgZm9ybSAne25hbWVzcGFjZV91cml9dGFnbmFtZScKLSAgICAgICAg ICBvciBqdXN0IHRoZSB0YWcgbmFtZSBpZiBhbiBlbXB0eSBuYW1lc3BhY2Ugd2FzIGdpdmVuCi0g ICAgICAgICIiIgotICAgICAgICBpZiBuYW1lc3BhY2UgPT0gJyc6Ci0gICAgICAgICAgICByZXR1 cm4gdGFnbmFtZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICd7JXN9JXMnICUg KG5hbWVzcGFjZSwgdGFnbmFtZSkKLQotICAgIGRlZiB2ZGV4VGFnKHNlbGYsIHRhZ25hbWUpOgot ICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJucyBhIHRhZyB3aXRoIHRoZSBWREVYIG5hbWVzcGFj ZSBvciBqdXN0IHRoZSB0YWcgbmFtZQotICAgICAgICAgIGlmIHRoZSBWREVYIG5hbWVzcGFjZSBp cyB0aGUgZW1wdHkgc3RyaW5nCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5uc1Rh ZyhzZWxmLnZkZXhfbmFtZXNwYWNlLCB0YWduYW1lKQotCi0gICAgZGVmIHZkZXhTZWFyY2hUZXJt KHNlbGYsICp0YWdzKToKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBhIFNlYXJjaCBwYXRo IGVsZW1lbnQgd2l0aCBlYWNoIHRhZyBvZiB0aGUgbGlzdCBvZgotICAgICAgICB0YWdzIGNvbmNh dGVuYXRlZCBieSAvCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gJy8nLmpvaW4oW3NlbGYu dmRleFRhZyh0YWcpIGZvciB0YWcgaW4gdGFnc10pCi0KLSAgICBkZWYgbWFrZVRlcm1EaWN0KHNl bGYpOgotICAgICAgICAiIiIKLSAgICAgICAgY29uc3RydWN0cyBhIGZsYXQgZGljdGlvbmFyeSBv ZiB0ZXJtIGVsZW1lbnRzLCBrZXllZCBieSB0ZXJtSWRlbnRpZmllciAKLSAgICAgICAgIiIiCi0g ICAgICAgICMgdGhlIC4vLyBwcmVmaXggZmluZHMgYWxsIGl0ZW1zIHJlY3Vyc2l2ZWx5Ci0gICAg ICAgIHhwYXRoID0gJy4vLycgKyBzZWxmLnZkZXhUYWcoJ3Rlcm0nKQotICAgICAgICB0ZXJtcyA9 IHNlbGYudHJlZS5nZXRyb290KCkuZmluZGFsbCh4cGF0aCkKLSAgICAgICAgc2VsZi50ZXJtX2Rp Y3QgPSB7fQotICAgICAgICBmb3IgdGVybSBpbiB0ZXJtczoKLSAgICAgICAgICAgIGtleSA9IHNl bGYuZ2V0VGVybUlkZW50aWZpZXIodGVybSkKLSAgICAgICAgICAgIHNlbGYudGVybV9kaWN0W2tl eV0gPSB0ZXJtCi0KLSAgICBkZWYgZXhwb3J0TWF0cml4KHNlbGYpOgotICAgICAgICAiIiIKLSAg ICAgICAgUmV0dXJuIGEgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCByZXByZXNlbnRhdGlvbiBvZiB0 aGUgdmRleCBmaWxlCi0gICAgICAgICIiIgotICAgICAgICAjIEZpcnN0IGZ1bGwgaXRlcmF0aW9u LCBnZXQgYWxsIGxhbmd1YWdlcwotICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAndHJlZScp OgotICAgICAgICAgICAgcmV0dXJuIFtdCi0gICAgICAgIGxhbmd1YWdlcyA9IGZpbHRlcihsYW1i ZGEgeDp4LHNldChbeC5hdHRyaWIuZ2V0KCdsYW5ndWFnZScsICcnKSBcCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gc2VsZi50cmVlLmZpbmRhbGwo Jy8vKicpXSkpCi0gICAgICAgIGxhbmd1YWdlcy5zb3J0KCkKLSAgICAgICAgZGVwdGggPSAwCi0g ICAgICAgIHJvd3MgPSBbXQotICAgICAgICBjaGlsZHJlbl9mYXRoZXJzX2xldmVsID0ge30KLQot ICAgICAgICAjIFNlY29uZCBmdWxsIGl0ZXJhdGlvbi4gQ29udmVydCB4bWwgdHJlZSB0byBhIGZs YXQgcHl0aG9uIHN0cnVjdHVyZQotICAgICAgICAjIERlcHRoIGlzIG1haW50YWluZWQgYnkgYW4g aW5kZXgsIGJ1dCBwYXJlbnQgcmVsYXRpb25zaGlwcyBpcyBvbmx5Ci0gICAgICAgICMgbWFpbnRh aW5lZCBieSBvcmRlcmluZy4KLSAgICAgICAgZm9yIHRlcm0gaW4gc2VsZi50cmVlLmZpbmRhbGwo Jy8vJyArIHNlbGYudmRleFNlYXJjaFRlcm0oJ3Rlcm0nKSk6Ci0gICAgICAgICAgICByb3cgPSB7 fQotICAgICAgICAgICAgcm93WydrZXknXSA9IHRlcm0uZmluZChzZWxmLnZkZXhTZWFyY2hUZXJt KCd0ZXJtSWRlbnRpZmllcicpKVwKLSAgICAgICAgICAgICAgICAudGV4dC5zdHJpcCgpCi0gICAg ICAgICAgICBjYXB0aW9ucyA9IHt9Ci0gICAgICAgICAgICBkZXNjcmlwdGlvbnMgPSB7fQotICAg ICAgICAgICAgZm9yIGxhbmcgaW4gbGFuZ3VhZ2VzOgotICAgICAgICAgICAgICAgIGNhcHRpb25z W2xhbmddID0gIiIKLSAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbnNbbGFuZ10gPSAiIgotICAg ICAgICAgICAgZm9yIGNhcHRpb24gaW4gdGVybS5maW5kYWxsKFwKLSAgICAgICAgICAgICAgICAg ICAgc2VsZi52ZGV4U2VhcmNoVGVybSgnY2FwdGlvbicsICdsYW5nc3RyaW5nJykpOgotICAgICAg ICAgICAgICAgIGlmIGNhcHRpb24uYXR0cmliLmhhc19rZXkoJ2xhbmd1YWdlJyk6Ci0gICAgICAg ICAgICAgICAgICAgIGNhcHRpb25zW2NhcHRpb24uYXR0cmliWydsYW5ndWFnZSddXSA9IGNhcHRp b24udGV4dC5zdHJpcCgpCi0gICAgICAgICAgICBmb3IgZGVzY3JpcHRpb24gaW4gdGVybS5maW5k YWxsKFwKLSAgICAgICAgICAgICAgICAgICAgc2VsZi52ZGV4U2VhcmNoVGVybSgnZGVzY3JpcHRp b24nLCAnbGFuZ3N0cmluZycpKToKLSAgICAgICAgICAgICAgICBpZiBkZXNjcmlwdGlvbi5hdHRy aWIuaGFzX2tleSgnbGFuZ3VhZ2UnKToKLSAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25z W2Rlc2NyaXB0aW9uLmF0dHJpYlsnbGFuZ3VhZ2UnXV0gPSBcCi0gICAgICAgICAgICAgICAgICAg ICAgICBkZXNjcmlwdGlvbi50ZXh0IGFuZCBkZXNjcmlwdGlvbi50ZXh0LnN0cmlwKCkgb3IgJycK LSAgICAgICAgICAgIHJvd1snY2FwdGlvbnMnXSA9IGNhcHRpb25zCi0gICAgICAgICAgICByb3db J2Rlc2NyaXB0aW9ucyddID0gZGVzY3JpcHRpb25zCi0KLSAgICAgICAgICAgICMgSWYgdGhpcyBp dGVtIGlzIGEgY2hpbGQgb2Ygc29tZXRoaW5nLCB0aGUgZmF0aGVyIG11c3QgaGF2ZQotICAgICAg ICAgICAgIyBiZWVuIHBhcnNlZCBiZWZvcmUsIGFuZCBzdG9yZWQgaXRzIGxldmVsIGluCi0gICAg ICAgICAgICAjIGNoaWxkcmVuX2ZhdGhlcnNfbGV2ZWwuIE9uY2UgZm9yIGVhY2ggY2hpbGQgd2l0 aCB0aGUgY2hpbGQKLSAgICAgICAgICAgICMgYXMgdGhlIGtleQotICAgICAgICAgICAgZmF0aGVy X2xldmVsID0gY2hpbGRyZW5fZmF0aGVyc19sZXZlbC5nZXQodGVybSwgLTEpCi0gICAgICAgICAg ICBvd25fbGV2ZWwgPSBmYXRoZXJfbGV2ZWwgKyAxCi0gICAgICAgICAgICBkZXB0aCA9IG1heChv d25fbGV2ZWwsIGRlcHRoKQotICAgICAgICAgICAgZm9yIGNoaWxkX3Rlcm0gaW4gdGVybS5maW5k YWxsKHNlbGYudmRleFNlYXJjaFRlcm0oJ3Rlcm0nKSk6Ci0gICAgICAgICAgICAgICAgY2hpbGRy ZW5fZmF0aGVyc19sZXZlbFtjaGlsZF90ZXJtXSA9IG93bl9sZXZlbAotICAgICAgICAgICAgcm93 WydsZXZlbCddID0gb3duX2xldmVsCi0gICAgICAgICAgICByb3dzLmFwcGVuZChyb3cpCi0KLSAg ICAgICAgIyBOb3cgdGhhdCB3ZSBrbm93IHRoZSBtYXhpbXVtIGRlcHRoIG9mIHRoZSB0cmVlLCB3 ZSBjYW4gYnVpbGQgdGhlIHR3bwotICAgICAgICAjIGRpbWVuc2lvbmFsIG1hdHJpeC4KLSAgICAg ICAgcmV0dmFsX3Jvd3MgPSBbXQotICAgICAgICBoZWFkZXJfcm93ID0gWyJMZXZlbCAlaSIgJSB4 IGZvciB4IGluIHJhbmdlKGRlcHRoKzEpXQotICAgICAgICBmb3IgbGFuZyBpbiBsYW5ndWFnZXM6 Ci0gICAgICAgICAgICBoZWFkZXJfcm93LmV4dGVuZChbJ0NhcHRpb24gJXMnICUgbGFuZywgJ0Rl c2NyaXB0aW9uICVzJyAlIGxhbmddKQotICAgICAgICByZXR2YWxfcm93cy5hcHBlbmQoaGVhZGVy X3JvdykKLSAgICAgICAgZm9yIHJvdyBpbiByb3dzOgotICAgICAgICAgICAgcmV0dmFsX3JvdyA9 IFsnJyBmb3IgeCBpbiByYW5nZShkZXB0aCArIDEgKyAyICogbGVuKGxhbmd1YWdlcykpXQotICAg ICAgICAgICAgcmV0dmFsX3Jvd1tyb3dbJ2xldmVsJ11dID0gcm93WydrZXknXQotICAgICAgICAg ICAgZm9yIGxhbmdfY291bnQsIGxhbmcgaW4gZW51bWVyYXRlKGxhbmd1YWdlcyk6Ci0gICAgICAg ICAgICAgICAgb2Zmc2V0ID0gZGVwdGggKyAxCi0gICAgICAgICAgICAgICAgcmV0dmFsX3Jvd1tv ZmZzZXQgKyBsYW5nX2NvdW50ICogMl0gPSByb3dbJ2NhcHRpb25zJ11bbGFuZ10KLSAgICAgICAg ICAgICAgICByZXR2YWxfcm93W29mZnNldCArIGxhbmdfY291bnQgKiAyICsgMV0gPSByb3dbJ2Rl c2NyaXB0aW9ucyddW2xhbmddCi0gICAgICAgICAgICByZXR2YWxfcm93cy5hcHBlbmQocmV0dmFs X3JvdykKLSAgICAgICAgcmV0dXJuIHJldHZhbF9yb3dzCi0KLSAgICBkZWYgcGFyc2VNYXRyaXgo c2VsZiwgbWF0cml4KToKLSAgICAgICAgIiIiCi0gICAgICAgIFNldHVwIGEgbWFuYWdlciBiYXNl ZCBvbiBhIG1hdHJpeAotICAgICAgICAiIiIKLSAgICAgICAgbGFuZ3VhZ2VzID0gW10KLSAgICAg ICAgc3RhdGUgPSAnTGV2ZWxzJwotICAgICAgICBwYXJlbnRzID0gW10KLSAgICAgICAgZm9yIGNv bHVtbiwgY2VsbCBpbiBlbnVtZXJhdGUobWF0cml4WzBdKToKLSAgICAgICAgICAgIGlmIG5vdCAo Y2VsbC5zdGFydHN3aXRoKCdMZXZlbCAnKQotICAgICAgICAgICAgICAgICBvciBjZWxsLnN0YXJ0 c3dpdGgoJ0Rlc2NyaXB0aW9uICcpCi0gICAgICAgICAgICAgICAgIG9yIGNlbGwuc3RhcnRzd2l0 aCgnQ2FwdGlvbiAnKSk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIkRh dGEgaXMgbm90IHZhbGlkLCB1bmtub3duIGhlYWRlciIpCi0gICAgICAgICAgICBpZiBzdGF0ZSA9 PSAnTGV2ZWxzJzoKLSAgICAgICAgICAgICAgICBpZiBjZWxsLnN0YXJ0c3dpdGgoJ0xldmVsICcp OgotICAgICAgICAgICAgICAgICAgICBwYXJlbnRzLmFwcGVuZChOb25lKQotICAgICAgICAgICAg ICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGVsaWYgY2VsbC5zdGFydHN3aXRoKCdD YXB0aW9uICcpOgotICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdDYXB0aW9uJwotICAgICAg ICAgICAgICAgICAgICBsYW5ndWFnZXMuYXBwZW5kKGNlbGxbODpdKQotICAgICAgICAgICAgICAg ICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg IHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJEYXRhIGlzIG5vdCB2YWxpZCwgYWZ0ZXIgTGV2ZWwgIgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVhZGVyIG11c3QgY29t ZSB0aGUgY2FwdGlvbiIpCi0gICAgICAgICAgICBlbGlmIHN0YXRlID09ICdDYXB0aW9uJzoKLSAg ICAgICAgICAgICAgICBpZiBjZWxsLnN0YXJ0c3dpdGgoJ0Rlc2NyaXB0aW9uICcpOgotICAgICAg ICAgICAgICAgICAgICBzdGF0ZSA9ICdEZXNjcmlwdGlvbicKLSAgICAgICAgICAgICAgICAgICAg Y29udGludWUKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlz ZSBBdHRyaWJ1dGVFcnJvcigiRGF0YSBpcyBub3QgdmFsaWQsIGFmdGVyIENhcHRpb24gIgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVhZGVyIG11c3QgY29tZSB0 aGUgZGVzY3JpcHRpb24iKQotICAgICAgICAgICAgZWxpZiBzdGF0ZSA9PSAnRGVzY3JpcHRpb24n OgotICAgICAgICAgICAgICAgIGlmIGNlbGwuc3RhcnRzd2l0aCgnQ2FwdGlvbiAnKToKLSAgICAg ICAgICAgICAgICAgICAgc3RhdGUgPSAnQ2FwdGlvbicKLSAgICAgICAgICAgICAgICAgICAgaWYg bm90IGhhc2F0dHIobGFuZ3VhZ2VzLCBjZWxsWzg6XSk6Ci0gICAgICAgICAgICAgICAgICAgICAg ICBsYW5ndWFnZXMuYXBwZW5kKGNlbGxbODpdKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgot ICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJybygiRGF0YSBpcyBub3Qg dmFsaWQsIGxhbmd1YWdlcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJtYXkgbm90IGFwcGVhciB0d2ljZSEiKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0g ICAgICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJEYXRhIGlzIG5vdCB2YWxp ZCwgYWZ0ZXIgRGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIiBtdXN0IGNvbWUgYSBuZXcgQ2FwdGlvbiIpCi0gICAgICAgICAgICBlbHNlOgotICAg ICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJQcm9ncmFtbWluZyBlcnJvciwgdW5r bm93biBzdGF0ZSBkdXJpbmcgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJIZWFkZXIgcGFyc2luZyBlbmNvdW50ZXJlZC4gU29ycnkhIikKLSAgICAgICAgZGVwdGggPSBs ZW4ocGFyZW50cykKLQotCi0gICAgICAgIGRlZiBhZGRTdWJFbGVtKHBhcmVudCwgZWxlbWVudE5h bWUsIHRleHQ9Tm9uZSk6Ci0gICAgICAgICAgICByZXR2YWwgPSBldHJlZS5TdWJFbGVtZW50KHBh cmVudCwgc2VsZi52ZGV4VGFnKGVsZW1lbnROYW1lKSkKLSAgICAgICAgICAgIGlmIHRleHQgIT0g Tm9uZToKLSAgICAgICAgICAgICAgICByZXR2YWwudGV4dCA9IHRleHQKLSAgICAgICAgICAgIHJl dHVybiByZXR2YWwKLSAgICAgICAgcm9vdCA9IGV0cmVlLkVsZW1lbnQoc2VsZi52ZGV4VGFnKCd2 ZGV4JyksIG5zbWFwPXtOb25lOiBzZWxmLnZkZXhfbmFtZXNwYWNlfSkKLSAgICAgICAgIyBXQVJO SU5HISEgV2UgZG8gYSBkaXJ0eSB0cmljayBoZXJlLiBXaGVuIHRoZSBmaXJzdCBlbGVtZW50cwot ICAgICAgICAjIFdhbnQgdG8gZ2V0IHRoZWlyIHJvb3QgZWxlbWVudCwgdGhleSBoYXZlIGEgZGVw dGggb2YgMAotICAgICAgICAjIFRoZXkgd2lsbCB0aGVuIGFzayBmb3IgcGFyZW50c1swLTFdLiBT byBpdCBnZXRzIHRoZSBsYXN0Ci0gICAgICAgICMgZWxlbWVudC4gQmUgYXdhcmUgb2YgdGhhdCEK LSAgICAgICAgcGFyZW50cy5hcHBlbmQocm9vdCkKLSAgICAgICAgZm9yIHJvdyBpbiBtYXRyaXhb MTpdOgotICAgICAgICAgICAgcm93X2RlcHRoID0gTm9uZQotICAgICAgICAgICAgZm9yIGkgaW4g cmFuZ2UoZGVwdGgpOgotICAgICAgICAgICAgICAgIGlmIHJvd1tpXToKLSAgICAgICAgICAgICAg ICAgICAgaWYgcm93X2RlcHRoICE9IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlz ZSBBdHRyaWJ1dGVFcnJvcigiVGhlIE1hdHJpeCBjb250YWlucyBhbiBlbGVtZW50ICIKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBkZWNpZGUgb24g b24gd2hpY2ggbGV2ZWwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIml0IHNob3VsZCBleGlzdCIpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAg ICAgICAgICAgICAgICAgICAgICByb3dfZGVwdGggPSBpCi0gICAgICAgICAgICBwYXJlbnQgPSBw YXJlbnRzW3Jvd19kZXB0aC0xXQotICAgICAgICAgICAgdGVybSA9IGFkZFN1YkVsZW0ocGFyZW50 LCAndGVybScpCi0gICAgICAgICAgICBwYXJlbnRzW3Jvd19kZXB0aF0gPSB0ZXJtCi0gICAgICAg ICAgICB0ZXJtSWRlbnRpZmllciA9IGFkZFN1YkVsZW0odGVybSwgJ3Rlcm1JZGVudGlmaWVyJywg cm93W3Jvd19kZXB0aF0pCi0gICAgICAgICAgICBjYXB0aW9ucyA9IFtyb3dbeF0gZm9yIHggaW4g cmFuZ2UobGVuKHBhcmVudHMpLTEsIGxlbihyb3cpLCAyKV0KLSAgICAgICAgICAgIGRlc2NyaXB0 aW9ucyA9IFtyb3dbeF0gZm9yIHggaW4gcmFuZ2UobGVuKHBhcmVudHMpLCBsZW4ocm93KSwgMild Ci0gICAgICAgICAgICBpZiBmaWx0ZXIobGFtYmRhIHg6eCxjYXB0aW9ucyk6Ci0gICAgICAgICAg ICAgICAgY2FwdGlvbiA9IGFkZFN1YkVsZW0odGVybSwgJ2NhcHRpb24nKQotICAgICAgICAgICAg ICAgIGZvciBpbmRleCwgdHJhbnNsYXRpb24gaW4gZmlsdGVyKGxhbWJkYSAoaSx4KTp4LFt4IGZv ciB4IGluIGVudW1lcmF0ZShjYXB0aW9ucyldKToKLSAgICAgICAgICAgICAgICAgICAgbGFuZ3N0 cmluZyA9IGFkZFN1YkVsZW0oY2FwdGlvbiwgJ2xhbmdzdHJpbmcnLCB0cmFuc2xhdGlvbikKLSAg ICAgICAgICAgICAgICAgICAgbGFuZ3N0cmluZy5hdHRyaWJbJ2xhbmd1YWdlJ10gPSBsYW5ndWFn ZXNbaW5kZXhdCi0gICAgICAgICAgICBpZiBmaWx0ZXIobGFtYmRhIHg6eCxkZXNjcmlwdGlvbnMp OgotICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gYWRkU3ViRWxlbSh0ZXJtLCAnZGVzY3Jp cHRpb24nKQotICAgICAgICAgICAgICAgIGZvciBpbmRleCwgdHJhbnNsYXRpb24gaW4gZmlsdGVy KGxhbWJkYSAoaSx4KTp4LFt4IGZvciB4IGluIGVudW1lcmF0ZShkZXNjcmlwdGlvbnMpXSk6Ci0g ICAgICAgICAgICAgICAgICAgIGxhbmdzdHJpbmcgPSBhZGRTdWJFbGVtKGRlc2NyaXB0aW9uLCAn bGFuZ3N0cmluZycsIHRyYW5zbGF0aW9uKQotICAgICAgICAgICAgICAgICAgICBsYW5nc3RyaW5n LmF0dHJpYlsnbGFuZ3VhZ2UnXSA9IGxhbmd1YWdlc1tpbmRleF0KLSAgICAgICAgc2VsZi50cmVl ID0gZXRyZWUuRWxlbWVudFRyZWUocm9vdCkKLSAgICAgICAgc2VsZi5vcmRlcl9zaWduaWZpY2Fu dCA9IHNlbGYuaXNPcmRlclNpZ25pZmljYW50KCkKLSAgICAgICAgc2VsZi5tYWtlVGVybURpY3Qo KQorIyBGaWxlOiB2ZGV4LnB5CisjCisjIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IGJ5IE1hcnRp biBSYXNwZQorIyBCaWJsaW90aGVjYSBIZXJ0emlhbmEgKE1heC1QbGFuY2stSW5zdGl0dXRlIGZv ciBBcnQgSGlzdG9yeSksIFJvbWUsIEl0YWx5CisjIFRoaXMgY29kZSB3YXMgd3JpdHRlbiBmb3Ig dGhlIFpVQ0NBUk8gUHJvamVjdAorIyBzZWUgaHR0cDovL3p1Y2Nhcm8uYmlibGhlcnR6Lml0Cisj CisjIEdlcm1hbiBGcmVlIFNvZnR3YXJlIExpY2Vuc2UgKEQtRlNMKQorIworIyBUaGlzIFByb2dy YW0gbWF5IGJlIHVzZWQgYnkgYW55b25lIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgb2Yg dGhlIAorIyBHZXJtYW4gRnJlZSBTb2Z0d2FyZSBMaWNlbnNlCisjIFRoZSBMaWNlbnNlIG1heSBi ZSBvYnRhaW5lZCB1bmRlciA8aHR0cDovL3d3dy5kLWZzbC5vcmc+LgorCisjCisKK19fYXV0aG9y X18gPSAnTWFydGluIFJhc3BlLCBKZW5zIEtsZWluJworX19kb2Nmb3JtYXRfXyA9ICdwbGFpbnRl eHQnCisKK2ltcG9ydCBzdHJpbmcKK2Zyb20gdHlwZXMgaW1wb3J0IFN0cmluZ1R5cGVzCitmcm9t IFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitmcm9tIHhtbC5wYXJzZXJzLmV4cGF0IGltcG9y dCBFeHBhdEVycm9yCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAorCitmcm9t IGx4bWwgaW1wb3J0IGV0cmVlCisKK1ZERVhfRkxBVF9QUk9GSUxFX1RZUEVTID0gKCd0aGVzYXVy dXMnLCAnZ2xvc3NhcnlPckRpY3Rpb25hcnknLCAnZmxhdFRva2VuVGVybXMnKQorVFJVRV9WQUxV RVMgPSAoJzEnLCAndHJ1ZScsICdUcnVlJywgJ3llcycsICdZZXMnKQorRkFMU0VfVkFMVUVTID0g KCcnLCAnMCcsICdmYWxzZScsICdGYWxzZScsICdubycsICdObycpCisKK2NsYXNzIFZERVhFcnJv cihFeGNlcHRpb24pOgorICAgICIiIgorICAgIERlbm90ZXMgYW4gZXJyb3Igd2hpbGUgaGFuZGxp bmcgYW4gSU1TLVZERVggdm9jYWJ1bGFyeSB3aXRoIGEgVkRFWE1hbmFnZXIKKyAgICAiIiIKKwor Y2xhc3MgVkRFWE1hbmFnZXIob2JqZWN0KToKKyAgICAiIiIKKwlSZWFkcyBhbiBJTVMtVkRFWCB2 b2NhYnVsYXJ5IGFuZCBjb25zdHJ1Y3RzIGEgVm9jYWJ1bGFyeURpY3QgZm9yIEFyY2hlVHlwZXMu CisJICBTZWUgIklNUyBWb2NhYnVsYXJ5IERlZmluaXRpb24gRXhjaGFuZ2UiOiBodHRwOi8vd3d3 Lmltc2dsb2JhbC5vcmcvdmRleC8uCisgICAgICBYTUwgYmluZGluZzogaHR0cDovL3d3dy5pbXNn bG9iYWwub3JnL3ZkZXgvdmRleHYxcDAvaW1zdmRleF9iaW5kdjFwMC5odG1sCisgICAgICBOb3Qg eWV0IHN1cHBvcnRlZDoKKyAgICAgICAgICB0ZXJtL21lZGlhZGVzY3JpcHRvciBlbGVtZW50cwor ICAgICAgICAgIHJlbGF0aW9uc2hpcCBlbGVtZW50cworCisgICAgVHdvIGRpbWVuc2lvbmFsIE1h dHJpeCBzcGVjaWZpY2F0aW9uOgorICAgIFRoZSBmaXJzdCByb3cgaXMgYWx3YXlzIHRoZSBoZWFk ZXIuCisgICAgVGhlIGZpcnN0IGhlYWRlcnMgc3RhcnQgd2l0aCBMZXZlbCBYLCB3aGVyZWFzIGVh Y2ggY29sdW1uCisgICAgcmVwcmVzZW50cyBhbiBhZGRpdGlvbmFsIGRlcHRoIGxldmVsLiBJZiB5 b3VyIHZkZXggdHJlZSBpcyAzIGxldmVscworICAgIGRlZXAgeW91IHdpbGwgaGF2ZSB0aHJlZSBM ZXZlbCBoZWFkZXJzLgorICAgIFRoZSBuZXh0IGNvbHVtbnMgYXJlIGZvciBlYWNoIGxhbmd1YWdl LgorICAgIFRoZSBvcmRlciBpcyBhbHBoYWJldGljYWwuIEZvciBlYWNoIGxhbmd1YWdlLCB0d28g Y29sdW1ucyB3aWxsIGJlCisgICAgYWRkZWQsIG9uZSBuYW1lZCBDYXB0aW9uIFhYLCB0aGUgb3Ro ZXIgRGVzY3JpcHRpb24gWFguCisgICAgQSB2b2NhYnVsYXJ5IHdpdGggYSBkZXB0aCBvZiAzIGxl dmVscyBhbmQgdHdvIGxhbmd1YWdlcyB3aWxsCisgICAgdGhlcmVmb3IgaGF2ZSA3IGNvbHVtbnMu CisgICAgdGhlIG90aGVyIHJvd3MgcmVwcmVzZW50IGEgc2luZ2xlIHRlcm0gb2YgdGhlIHZvY2Fi dWxhcnkuCisgICAgQSBjaGlsZCBlbGVtZW50IG9mIG9uZSBvZiB0aGUgcm9vdCBlbGVtZW50cyB3 b3VsZCBmaWxsIGl0cworICAgIGtleSBpbiB0aGUgQ29sdW1uICJMZXZlbCAyIiBUaGUgb3RoZXIg TGV2ZWwgZmllbGRzIHdvdWxkIGJlIGVtcHR5LgorICAgIEEgdGVybSBvZiBMZXZlbCAyIHdpbGwg YWx3YXlzIGJlIGJlbG93IGl0cyBMZXZlbCAxIHRlcm0sIHdpdGggbm8KKyAgICBvdGhlciBMZXZl bCAxIHRlcm0gYmV0d2VlbiB0aGVtLgorICAgIFRvIHNlZSBhbiBleGFtcGxlLCBjcmVhdGUgYSBW REVYTWFuYWdlciBpbnN0YW5jZSB3aXRoIGEgdmRleCBmaWxlLCBhbmQKKyAgICBjYWxsIHRoZSBl eHBvcnRNYXRyaXggbWV0aG9kLgorICAgICIiIgorCisgICAgdmRleF9uYW1lc3BhY2UgPSAnaHR0 cDovL3d3dy5pbXNnbG9iYWwub3JnL3hzZC9pbXN2ZGV4X3YxcDAnCisgICAgZGVmYXVsdF9sYW5n dWFnZSA9ICdlbicKKyAgICB1bm5hbWVkX3Rlcm0gPSAnKHVubmFtZWQgdGVybSknCisgICAgZmFs bGJhY2tfdG9fZGVmYXVsdF9sYW5ndWFnZSA9IEZhbHNlCisgICAgb3JkZXJfc2lnbmlmaWNhbnQg PSBGYWxzZQorICAgIHRlcm1fZGljdCA9IHt9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmls ZT1Ob25lLCBtYXRyaXg9Tm9uZSwgbGFuZz1Ob25lLCBuYW1lc3BhY2U9Tm9uZSwgZmFsbGJhY2s9 Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBjb25zdHJ1Y3RzIGEgVkRFWCBtYW5hZ2VyIGFu ZCBwYXJzZXMgYSBYTUwgdm9jYWJ1bGFyeQorCQlmaWxlOiBhIGZpbGUgb3Igc3RyaW5nIHRoYXQg aXMgcGFyc2VkCisJCW1hdHJpeDogYSB0d28gZGltZW5zaW9uYWwgbWF0cml4IHRoYXQgaXMgcGFy c2VkIGludG8gYSB2ZGV4IGZpbGUKKwkJbGFuZzogc2V0IHRoZSBkZWZhdWx0IGxhbmd1YWdlIGZv ciBvdXRwdXQgKCcqJyBmb3IgbXVsdGlsaW5ndWFsIHRlcm1zKQorICAgICAgICBuYW1lc3BhY2U6 IGRlY2xhcmVzIHRoZSBJTVMtVkRFWCBuYW1lc3BhY2UgaW4gdGhlIHZvY2FiIGZpbGUKKwkJICAo JycgaGFuZGxlcyBWREVYIGZpbGVzIHdpdGhvdXQgYW55IGRlY2xhcmVkIG5hbWVzcGFjZSkuCisg ICAgICAgIGZhbGxiYWNrOiBpZiBubyB0cmFuc2xhdGlvbiBpcyBmb3VuZCBmb3IgdGhlIGdpdmVu IGxhbmd1YWdlCisgICAgICAgICAgc2hvdWxkIHRoZSB0ZXJtIGJlIHJldHVybmVkIGluIHRoZSBk ZWZhdWx0IGxhbmd1YWdlCisgICAgICAgICAgb3IgYXMgc2VsZi51bm5hbWVkX3Rlcm0gPworICAg ICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXRyaXgsIGJhc2VzdHJpbmcpOgorICAg ICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIlRoaXMgaXMgdGhlIG5ldyBpbXN2ZGV4IHZl cnNpb24uIFlvdSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJpZWQgdG8g cGFzcyB0aGUgZGVmYXVsdCBsYW5ndWFnZSBhcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAidGhlIG1hdHJpeC4gQ29uc2lkZXIgdG8gdXNlIG5hbWVkIGFyZ3VtZW50cyIpCisg ICAgICAgIGlmIGxhbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRlZmF1bHRfbGFu Z3VhZ2UgPSBsYW5nCisgICAgICAgIGlmIG5hbWVzcGFjZSBpcyBub3QgTm9uZToKKyAgICAgICAg ICAgIHNlbGYudmRleF9uYW1lc3BhY2UgPSBuYW1lc3BhY2UKKyAgICAgICAgaWYgZmFsbGJhY2sg aXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmZhbGxiYWNrX3RvX2RlZmF1bHRfbGFuZ3Vh Z2UgPSBmYWxsYmFjaworICAgICAgICBpZiBtYXRyaXggaXMgbm90IE5vbmU6CisgICAgICAgICAg ICBzZWxmLnBhcnNlTWF0cml4KG1hdHJpeCkKKyAgICAgICAgaWYgZmlsZSBpcyBub3QgTm9uZToK KyAgICAgICAgICAgIHNlbGYucGFyc2UoZmlsZSkKKyAgICAgICAgaWYgZmlsZSBhbmQgbWF0cml4 OgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIllvdSBnYXZlIG1lIGEgYSBtYXRy aXggYW5kIGEgZmlsZSwgaXQgaXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Im5vdCBkZWZpbmVkIHdoYXQgdGFrZXMgcHJlY2VkZW5jZS4gWW91IG1heSAiCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAib25seSBzZXQgb25lIG9mIHRoZSB0d28gcGFyYW1ldGVy cyIpCisKKyAgICBkZWYgaXNWREVYKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgY2hlY2tz IGlmIHRoZSBwYXJzZWQgWE1MIHNlZW1zIHRvIGJlIGEgdmFsaWQgVkRFWCB2b2NhYnVsYXJ5Cisg ICAgICAgICIiIgorICAgICAgICAjIHRoaXMgbWV0aG9kIGRvZXMgbm90IHBlcmZvcm0gYSBjb21w bGV0ZSBzY2hlbWEgdmFsaWRhdGlvbgorCQkjIGl0IGp1c3QgY2hlY2tzIGZvciBhIHJvb3QgZWxl bWVudCBuYW1lZCAndmRleCcgaW4gdGhlIGV4cGVjdGVkICBuYW1lc3BhY2UKKyAgICAgICAgcmV0 dXJuIHNlbGYudHJlZS5nZXRyb290KCkudGFnID09IHNlbGYudmRleFRhZygndmRleCcpCisKKyAg ICBkZWYgcGFyc2Uoc2VsZiwgZmlsZSk6CisgICAgICAgICIiIgorICAgICAgICBwYXJzZXMgYSBW REVYIHZvY2FidWxhcnkgZmlsZSBvciBYTUwgc3RyaW5nCisgICAgICAgICIiIgorICAgICAgICBp ZiBpc2luc3RhbmNlKGZpbGUsIFN0cmluZ1R5cGVzKToKKyAgICAgICAgICAgIGZpbGUgPSBTdHJp bmdJTyhmaWxlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnRyZWUgPSBldHJlZS5w YXJzZShmaWxlKQorICAgICAgICBleGNlcHQgKFN5bnRheEVycm9yLCBFeHBhdEVycm9yKSwgZToK KyAgICAgICAgICAgIHJhaXNlIFZERVhFcnJvciwgJ1BhcnNlIGVycm9yIGluIHZvY2FidWxhcnkg WE1MOiAlcycgJSBlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZS5u YW1lCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIGZpbGVuYW1l ID0gJ3BhcnNlZCBYTUwgdGV4dCcKKyAgICAgICAgaWYgbm90IHNlbGYuaXNWREVYKCk6CisgICAg ICAgICAgICByYWlzZSBWREVYRXJyb3IsICdWb2NhYnVsYXJ5IGZvcm1hdCBub3QgY29ycmVjdCBp biAlcycgJSBmaWxlbmFtZQorICAgICAgICBzZWxmLm9yZGVyX3NpZ25pZmljYW50ID0gc2VsZi5p c09yZGVyU2lnbmlmaWNhbnQoKQorICAgICAgICBzZWxmLm1ha2VUZXJtRGljdCgpCisgICAgICAg IHJldHVybiBzZWxmLnRyZWUKKworICAgIGRlZiBzZXJpYWxpemUoc2VsZiwgZmlsZT1Ob25lKToK KyAgICAgICAgIiIiCisgICAgICAgIHJldHVybnMgdGhlIHZvY2FidWxhcnkgYXMgWE1MCisgICAg ICAgICIiIgorICAgICAgICByZXR1cm4gZXRyZWUudG9zdHJpbmcoc2VsZi50cmVlLCBlbmNvZGlu Zz0ndXRmLTgnLCBzdGFuZGFsb25lPVRydWUpCisKKyAgICBkZWYgZ2V0Vm9jYWJJZGVudGlmaWVy KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJucyB0aGUgdm9jYWJ1bGFyeSBpZGVu dGlmaWVyCisgICAgICAgICIiIgorICAgICAgICB4cGF0aCA9IHNlbGYudmRleFRhZygndm9jYWJJ ZGVudGlmaWVyJykKKyAgICAgICAgcmV0dXJuIHNlbGYudHJlZS5maW5kdGV4dCh4cGF0aCkKKwor ICAgIGRlZiBnZXRWb2NhYk5hbWUoc2VsZiwgbGFuZz1Ob25lKToKKyAgICAgICAgIiIiCisgICAg ICAgIHJldHVybnMgdGhlIHZvY2FidWxhcnkgbmFtZSBpbiB0aGUgZ2l2ZW4gKG9yIGRlZmF1bHQp IGxhbmd1YWdlLgorICAgICAgICBJZiBsYW5nIGlzICcqJywgcmV0dXJucyBhIGRpY3Qgb2YgYWxs IHRyYW5zbGF0aW9ucyBrZXllZCBieSBsYW5ndWFnZQorICAgICAgICAiIiIKKyAgICAgICAgeHBh dGggPSAnJXMvJXMnICUgKHNlbGYudmRleFRhZygndm9jYWJOYW1lJyksIHNlbGYudmRleFRhZygn bGFuZ3N0cmluZycpKQorICAgICAgICBjYXB0aW9ucyA9IHNlbGYudHJlZS5maW5kYWxsKHhwYXRo KQorICAgICAgICByZXR1cm4gc2VsZi5nZXRMYW5nc3RyaW5nKGNhcHRpb25zLCBsYW5nLCBkZWZh dWx0PScodW5uYW1lZCB2b2NhYnVsYXJ5KScpCisKKyAgICBkZWYgZ2V0Vm9jYWJNZXRhZGF0YShz ZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybnMgdGhlIFZERVggbWV0YWRhdGEgZWxl bWVudChzKSBmb3IgdGhlIFZvY2FidWxhcnkKKyAgICAgICAgIiIiCisgICAgICAgIHhwYXRoID0g c2VsZi52ZGV4VGFnKCdtZXRhZGF0YScpCisgICAgICAgIHJldHVybiBzZWxmLnRyZWUuZ2V0cm9v dCgpLmZpbmRhbGwoeHBhdGgpCisKKyAgICBkZWYgZ2V0Vm9jYWJXaWxkY2FyZChzZWxmLCBmb3Jl aWduX25zLCB0YWduYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybnMgJ3dpbGRjYXJk JyBlbGVtZW50KHMpICh3aXRoIGEgZm9yZWlnbiBuYW1lc3BhY2UpIGZvciB0aGUgVm9jYWJ1bGFy eQorICAgICAgICAiIiIKKyAgICAgICAgeHBhdGggPSBzZWxmLm5zVGFnKGZvcmVpZ25fbnMsIHRh Z25hbWUpCisgICAgICAgIHJldHVybiBzZWxmLnRyZWUuZ2V0cm9vdCgpLmZpbmRhbGwoeHBhdGgp CisKKyAgICBkZWYgaXNGbGF0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJucyB0 cnVlIGlmIHRoZSBWREVYIHByb2ZpbGUgdHlwZSBkZW5vdGVzIGEgZmxhdCB2b2NhYnVsYXJ5Cisg ICAgICAgICIiIiAKKyAgICAgICAgdmRleCA9IHNlbGYudHJlZS5nZXRyb290KCkKKyAgICAgICAg cmV0dXJuIHZkZXguZ2V0KCdwcm9maWxlVHlwZScpIGluIFZERVhfRkxBVF9QUk9GSUxFX1RZUEVT CisKKyAgICBkZWYgaXNPcmRlclNpZ25pZmljYW50KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAg ICAgcmV0dXJucyB0cnVlIGlmIHRoZSBvcmRlciBvZiB0aGUgVkRFWCB2b2NhYnVsYXJ5IGlzIHNp Z25pZmljYW50CisgICAgICAgICIiIiAKKyAgICAgICAgdmRleCA9IHNlbGYudHJlZS5nZXRyb290 KCkKKyAgICAgICAgcmV0dXJuIHZkZXguZ2V0KCdvcmRlclNpZ25pZmljYW50Jykgbm90IGluIEZB TFNFX1ZBTFVFUworCisgICAgZGVmIHNob3dMZWFmc09ubHkoc2VsZik6CisgICAgICAgICIiIgor ICAgICAgICB0aGlzIGlzIG5vdCBkZWNsYXJlZCBpbiBWREVYIHZvY2Ficywgc28gd2UgcmV0dXJu IGZhbHNlCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gZmFsc2UKKworICAgIGRlZiBnZXRW b2NhYnVsYXJ5RGljdChzZWxmLCBsYW5nPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgcmV0 dXJucyBhIHZvY2FidWxhcnkgZGljdGlvbmFyeSAoZm9yIEFyY2hlVHlwZXMpIGluIHRoZSBnaXZl biBsYW5ndWFnZS4KKyAgICAgICAgSWYgbGFuZyBpcyAnKicsIHJldHVybnMgZGljdHMgb2YgYWxs IHRyYW5zbGF0aW9ucyBrZXllZCBieSBsYW5ndWFnZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0 dXJuIHNlbGYuZ2V0VGVybXMoc2VsZi50cmVlLmdldHJvb3QoKSwgbGFuZykKKworICAgIGRlZiBn ZXRUZXJtcyhzZWxmLCBlbGVtZW50LCBsYW5nPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAg Z2V0IGFsbCB0ZXJtIGVsZW1lbnRzIHJlY3Vyc2l2ZWx5CisgICAgICAgICAgcmV0dXJucyBhIGhp ZXJhcmNoaWMgZGljdGlvbmFyeSBzdHJ1Y3R1cmUgb2YgdGhlIHZvY2FidWxhcnkKKyAgICAgICAg IiIiCisgICAgICAgIHhwYXRoID0gc2VsZi52ZGV4VGFnKCd0ZXJtJykKKyAgICAgICAgdGVybXMg PSBlbGVtZW50LmZpbmRhbGwoeHBhdGgpCisgICAgICAgIGlmIGxlbih0ZXJtcykgPT0gMDoKKyAg ICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgd2Ugc2hvdWxkIG5vdCBvbmx5IHRlc3Qg b3JkZXIgc2lnbmlmaWNhbmNlIGdsb2JhbGx5LCBidXQgYWxzbyBmb3IgZXZlcnkgdGVybQorICAg ICAgICBpZiBzZWxmLm9yZGVyX3NpZ25pZmljYW50OgorICAgICAgICAgICAgcmVzdWx0ID0gT3Jk ZXJlZERpY3QoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ID0ge30KKyAgICAg ICAgZm9yIHRlcm0gaW4gdGVybXM6CisgICAgICAgICAgICBrZXkgPSBzZWxmLmdldFRlcm1JZGVu dGlmaWVyKHRlcm0pCisgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuZ2V0VGVybUNhcHRpb24odGVy bSwgbGFuZykKKyAgICAgICAgICAgIHJlc3VsdFtrZXldID0gKHZhbHVlLCBzZWxmLmdldFRlcm1z KHRlcm0sIGxhbmcpKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgZ2V0VGVybUlk ZW50aWZpZXIoc2VsZiwgdGVybSk6CisgICAgICAgICIiIgorICAgICAgICByZXR1cm5zIHRoZSB0 ZXJtSWRlbnRpZmllciBmb3IgYSBnaXZlbiB0ZXJtIGVsZW1lbnQKKyAgICAgICAgIiIiCisgICAg ICAgIHhwYXRoID0gc2VsZi52ZGV4VGFnKCd0ZXJtSWRlbnRpZmllcicpCisgICAgICAgIHJldHVy biB0ZXJtLmZpbmR0ZXh0KHhwYXRoKQorCisgICAgZGVmIGdldFRlcm1DYXB0aW9uKHNlbGYsIHRl cm0sIGxhbmc9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICByZXR1cm5zIHRoZSB0cmFuc2xh dGVkIGNhcHRpb24gZm9yIGEgdGVybQorICAgICAgICAgIGZvciBsYW5nID09ICIqIiB0aGUgbWV0 aG9kIHJldHVybnMgYSBkaWN0aW9uYXJ5IHdpdGggYWxsIHRyYW5zbGF0aW9ucyAKKyAgICAgICAg ICBrZXllZCBieSBsYW5ndWFnZQorICAgICAgICAiIiIKKyAgICAgICAgaWYgdGVybSBpcyBOb25l OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgeHBhdGggPSAnJXMvJXMnICUgKHNl bGYudmRleFRhZygnY2FwdGlvbicpLCBzZWxmLnZkZXhUYWcoJ2xhbmdzdHJpbmcnKSkKKyAgICAg ICAgY2FwdGlvbnMgPSB0ZXJtLmZpbmRhbGwoeHBhdGgpCisgICAgICAgIHJldHVybiBzZWxmLmdl dExhbmdzdHJpbmcoY2FwdGlvbnMsIGxhbmcpCisKKyAgICBkZWYgZ2V0VGVybURlc2NyaXB0aW9u KHNlbGYsIHRlcm0sIGxhbmc9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICByZXR1cm5zIHRo ZSB0cmFuc2xhdGVkIGRlc2NyaXB0aW9uIGZvciBhIHRlcm0KKyAgICAgICAgICBmb3IgbGFuZyA9 PSAiKiIgdGhlIG1ldGhvZCByZXR1cm5zIGEgZGljdGlvbmFyeSB3aXRoIGFsbCB0cmFuc2xhdGlv bnMgCisgICAgICAgICAga2V5ZWQgYnkgbGFuZ3VhZ2UKKyAgICAgICAgIiIiCisgICAgICAgIGlm IHRlcm0gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHhwYXRoID0g JyVzLyVzJyAlIChzZWxmLnZkZXhUYWcoJ2Rlc2NyaXB0aW9uJyksIHNlbGYudmRleFRhZygnbGFu Z3N0cmluZycpKQorICAgICAgICBkZXNjcmlwdGlvbnMgPSB0ZXJtLmZpbmRhbGwoeHBhdGgpCisg ICAgICAgIHJldHVybiBzZWxmLmdldExhbmdzdHJpbmcoZGVzY3JpcHRpb25zLCBsYW5nLCBkZWZh dWx0PScnKQorCisgICAgZGVmIGdldExhbmdzdHJpbmcoc2VsZiwgZWxlbWVudHMsIGxhbmc9Tm9u ZSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybnMgdGhlIGxhbmdz dHJpbmcgaW4gdGhlIGdpdmVuIGxhbmd1YWdlLgorICAgICAgICBmb3IgbGFuZyA9PSAiKiIgdGhl IG1ldGhvZCByZXR1cm5zIGEgZGljdGlvbmFyeSB3aXRoIGFsbCB0cmFuc2xhdGlvbnMgCisgICAg ICAgIGtleWVkIGJ5IGxhbmd1YWdlCisgICAgICAgICIiIgorICAgICAgICBpZiBsYW5nID09ICcq JzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldEFsbExhbmdzdHJpbmdzKGVsZW1lbnRzKQor ICAgICAgICBpZiBsYW5nIGlzIE5vbmU6CisgICAgICAgICAgICBsYW5nID0gc2VsZi5kZWZhdWx0 X2xhbmd1YWdlCisgICAgICAgIGlmIGRlZmF1bHQgaXMgTm9uZToKKyAgICAgICAgICAgIGRlZmF1 bHQgPSBzZWxmLnVubmFtZWRfdGVybQorICAgICAgICByZXN1bHQgPSBOb25lCisgICAgICAgIGZv ciBlbGVtZW50IGluIGVsZW1lbnRzOgorICAgICAgICAgICAgaWYgZWxlbWVudC5nZXQoJ2xhbmd1 YWdlJykgPT0gbGFuZzoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBlbGVtZW50LnRleHQKKyAg ICAgICAgICAgIGlmIHNlbGYuZmFsbGJhY2tfdG9fZGVmYXVsdF9sYW5ndWFnZToKKyAgICAgICAg ICAgICAgIGlmIGVsZW1lbnQuZ2V0KCdsYW5ndWFnZScpID09IHNlbGYuZGVmYXVsdF9sYW5ndWFn ZToKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IGVsZW1lbnQudGV4dAorICAgICAgICBp ZiByZXN1bHQgaXMgTm9uZToKKyAgICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHQKKyAgICAgICAg cmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGdldEFsbExhbmdzdHJpbmdzKHNlbGYsIGVsZW1lbnRz KToKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybnMgYSBkaWN0aW9uYXJ5IHdpdGggYWxsIHRy YW5zbGF0aW9ucyBrZXllZCBieSBsYW5ndWFnZQorICAgICAgICAiIiIKKyAgICAgICAgcmVzdWx0 ID0ge30KKyAgICAgICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CisgICAgICAgICAgICByZXN1 bHRbZWxlbWVudC5nZXQoJ2xhbmd1YWdlJyldID0gZWxlbWVudC50ZXh0CisgICAgICAgIHJldHVy biByZXN1bHQKKworICAgIGRlZiBnZXRUZXJtQnlJZChzZWxmLCBpZGVudGlmaWVyKToKKyAgICAg ICAgIiIiCisgICAgICAgIHJldHVybnMgdGhlIFZERVggdGVybSBlbGVtZW50IGZvciBhIGdpdmVu IHRlcm0gaWRlbnRpZmllcgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGVybV9k aWN0LmdldChpZGVudGlmaWVyLCBOb25lKQorCisgICAgZGVmIGdldFRlcm1DYXB0aW9uQnlJZChz ZWxmLCBpZGVudGlmaWVyLCBsYW5nPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJu cyB0aGUgY2FwdGlvbihzKSBmb3IgYSBnaXZlbiB0ZXJtIGlkZW50aWZpZXIKKyAgICAgICAgIiIi CisgICAgICAgIHRlcm0gPSBzZWxmLmdldFRlcm1CeUlkKGlkZW50aWZpZXIpCisgICAgICAgIHJl dHVybiBzZWxmLmdldFRlcm1DYXB0aW9uKHRlcm0sIGxhbmcpCisKKyAgICBkZWYgZ2V0VGVybURl c2NyaXB0aW9uQnlJZChzZWxmLCBpZGVudGlmaWVyLCBsYW5nPU5vbmUpOgorICAgICAgICAiIiIK KyAgICAgICAgcmV0dXJucyB0aGUgZGVzY3JpcHRpb24ocykgZm9yIGEgZ2l2ZW4gdGVybSBpZGVu dGlmaWVyCisgICAgICAgICIiIgorICAgICAgICB0ZXJtID0gc2VsZi5nZXRUZXJtQnlJZChpZGVu dGlmaWVyKQorICAgICAgICByZXR1cm4gc2VsZi5nZXRUZXJtRGVzY3JpcHRpb24odGVybSwgbGFu ZykKKworICAgIGRlZiBnZXRUZXJtTWV0YWRhdGFCeUlkKHNlbGYsIGlkZW50aWZpZXIpOgorICAg ICAgICAiIiIKKyAgICAgICAgcmV0dXJucyB0aGUgVkRFWCBtZXRhZGF0YSBlbGVtZW50KHMpIGlu c2lkZSBhIHRlcm0KKyAgICAgICAgICBmb3IgYSBnaXZlbiB0ZXJtIGlkZW50aWZpZXIKKyAgICAg ICAgIiIiCisgICAgICAgIHRlcm0gPSBzZWxmLmdldFRlcm1CeUlkKGlkZW50aWZpZXIpCisgICAg ICAgIHhwYXRoID0gc2VsZi52ZGV4VGFnKCdtZXRhZGF0YScpCisgICAgICAgIHJldHVybiB0ZXJt LmZpbmRhbGwoeHBhdGgpCisKKyAgICBkZWYgZ2V0VGVybVdpbGRjYXJkQnlJZChzZWxmLCBpZGVu dGlmaWVyLCBuYW1lc3BhY2UsIHRhZ25hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJu cyAnd2lsZGNhcmQnIGVsZW1lbnQocykgKHdpdGggYSBmb3JlaWduIG5hbWVzcGFjZSkKKyAgICAg ICAgICBpbnNpZGUgYSB0ZXJtIGZvciBhIGdpdmVuIHRlcm0gaWRlbnRpZmllcgorICAgICAgICAi IiIKKyAgICAgICAgdGVybSA9IHNlbGYuZ2V0VGVybUJ5SWQoaWRlbnRpZmllcikKKyAgICAgICAg eHBhdGggPSBzZWxmLm5zVGFnKG5hbWVzcGFjZSwgdGFnbmFtZSkKKyAgICAgICAgcmV0dXJuIHRl cm0uZmluZGFsbCh4cGF0aCkKKworICAgIGRlZiBnZXRUYWduYW1lKHNlbGYsIG5zbmFtZSk6CisJ ICAgICMgbm90IG5lZWRlZCBoZXJlCisgICAgICAgIGlmIG5vdCBuc25hbWVbOjFdID09ICJ7IjoK KyAgICAgICAgICAgIHJldHVybiBuc25hbWUKKyAgICAgICAgbmFtZXNwYWNlX3VyaSwgdGFnbmFt ZSA9IHN0cmluZy5zcGxpdChuYW1lWzE6XSwgIn0iLCAxKQorICAgICAgICByZXR1cm4gdGFnbmFt ZQorCisgICAgZGVmIG5zVGFnKHNlbGYsIG5hbWVzcGFjZSwgdGFnbmFtZSk6CisgICAgICAgICIi IgorICAgICAgICByZXR1cm5zIGEgdGFnIHdpdGggYSBuYW1lc3BhY2Ugb2YgdGhlIGZvcm0gJ3tu YW1lc3BhY2VfdXJpfXRhZ25hbWUnCisgICAgICAgICAgb3IganVzdCB0aGUgdGFnIG5hbWUgaWYg YW4gZW1wdHkgbmFtZXNwYWNlIHdhcyBnaXZlbgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbmFt ZXNwYWNlID09ICcnOgorICAgICAgICAgICAgcmV0dXJuIHRhZ25hbWUKKyAgICAgICAgZWxzZToK KyAgICAgICAgICAgIHJldHVybiAneyVzfSVzJyAlIChuYW1lc3BhY2UsIHRhZ25hbWUpCisKKyAg ICBkZWYgdmRleFRhZyhzZWxmLCB0YWduYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVy bnMgYSB0YWcgd2l0aCB0aGUgVkRFWCBuYW1lc3BhY2Ugb3IganVzdCB0aGUgdGFnIG5hbWUKKyAg ICAgICAgICBpZiB0aGUgVkRFWCBuYW1lc3BhY2UgaXMgdGhlIGVtcHR5IHN0cmluZworICAgICAg ICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYubnNUYWcoc2VsZi52ZGV4X25hbWVzcGFjZSwgdGFn bmFtZSkKKworICAgIGRlZiB2ZGV4U2VhcmNoVGVybShzZWxmLCAqdGFncyk6CisgICAgICAgICIi IgorICAgICAgICByZXR1cm4gYSBTZWFyY2ggcGF0aCBlbGVtZW50IHdpdGggZWFjaCB0YWcgb2Yg dGhlIGxpc3Qgb2YKKyAgICAgICAgdGFncyBjb25jYXRlbmF0ZWQgYnkgLworICAgICAgICAiIiIK KyAgICAgICAgcmV0dXJuICcvJy5qb2luKFtzZWxmLnZkZXhUYWcodGFnKSBmb3IgdGFnIGluIHRh Z3NdKQorCisgICAgZGVmIG1ha2VUZXJtRGljdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAg IGNvbnN0cnVjdHMgYSBmbGF0IGRpY3Rpb25hcnkgb2YgdGVybSBlbGVtZW50cywga2V5ZWQgYnkg dGVybUlkZW50aWZpZXIgCisgICAgICAgICIiIgorICAgICAgICAjIHRoZSAuLy8gcHJlZml4IGZp bmRzIGFsbCBpdGVtcyByZWN1cnNpdmVseQorICAgICAgICB4cGF0aCA9ICcuLy8nICsgc2VsZi52 ZGV4VGFnKCd0ZXJtJykKKyAgICAgICAgdGVybXMgPSBzZWxmLnRyZWUuZ2V0cm9vdCgpLmZpbmRh bGwoeHBhdGgpCisgICAgICAgIHNlbGYudGVybV9kaWN0ID0ge30KKyAgICAgICAgZm9yIHRlcm0g aW4gdGVybXM6CisgICAgICAgICAgICBrZXkgPSBzZWxmLmdldFRlcm1JZGVudGlmaWVyKHRlcm0p CisgICAgICAgICAgICBzZWxmLnRlcm1fZGljdFtrZXldID0gdGVybQorCisgICAgZGVmIGV4cG9y dE1hdHJpeChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIHR3byBkaW1lbnNp b25hbCBtYXRyaXggcmVwcmVzZW50YXRpb24gb2YgdGhlIHZkZXggZmlsZQorICAgICAgICAiIiIK KyAgICAgICAgIyBGaXJzdCBmdWxsIGl0ZXJhdGlvbiwgZ2V0IGFsbCBsYW5ndWFnZXMKKyAgICAg ICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ3RyZWUnKToKKyAgICAgICAgICAgIHJldHVybiBbXQor ICAgICAgICBsYW5ndWFnZXMgPSBmaWx0ZXIobGFtYmRhIHg6eCxzZXQoW3guYXR0cmliLmdldCgn bGFuZ3VhZ2UnLCAnJykgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZvciB4IGluIHNlbGYudHJlZS5maW5kYWxsKCcvLyonKV0pKQorICAgICAgICBsYW5ndWFn ZXMuc29ydCgpCisgICAgICAgIGRlcHRoID0gMAorICAgICAgICByb3dzID0gW10KKyAgICAgICAg Y2hpbGRyZW5fZmF0aGVyc19sZXZlbCA9IHt9CisKKyAgICAgICAgIyBTZWNvbmQgZnVsbCBpdGVy YXRpb24uIENvbnZlcnQgeG1sIHRyZWUgdG8gYSBmbGF0IHB5dGhvbiBzdHJ1Y3R1cmUKKyAgICAg ICAgIyBEZXB0aCBpcyBtYWludGFpbmVkIGJ5IGFuIGluZGV4LCBidXQgcGFyZW50IHJlbGF0aW9u c2hpcHMgaXMgb25seQorICAgICAgICAjIG1haW50YWluZWQgYnkgb3JkZXJpbmcuCisgICAgICAg IGZvciB0ZXJtIGluIHNlbGYudHJlZS5maW5kYWxsKCcvLycgKyBzZWxmLnZkZXhTZWFyY2hUZXJt KCd0ZXJtJykpOgorICAgICAgICAgICAgcm93ID0ge30KKyAgICAgICAgICAgIHJvd1sna2V5J10g PSB0ZXJtLmZpbmQoc2VsZi52ZGV4U2VhcmNoVGVybSgndGVybUlkZW50aWZpZXInKSlcCisgICAg ICAgICAgICAgICAgLnRleHQuc3RyaXAoKQorICAgICAgICAgICAgY2FwdGlvbnMgPSB7fQorICAg ICAgICAgICAgZGVzY3JpcHRpb25zID0ge30KKyAgICAgICAgICAgIGZvciBsYW5nIGluIGxhbmd1 YWdlczoKKyAgICAgICAgICAgICAgICBjYXB0aW9uc1tsYW5nXSA9ICIiCisgICAgICAgICAgICAg ICAgZGVzY3JpcHRpb25zW2xhbmddID0gIiIKKyAgICAgICAgICAgIGZvciBjYXB0aW9uIGluIHRl cm0uZmluZGFsbChcCisgICAgICAgICAgICAgICAgICAgIHNlbGYudmRleFNlYXJjaFRlcm0oJ2Nh cHRpb24nLCAnbGFuZ3N0cmluZycpKToKKyAgICAgICAgICAgICAgICBpZiBjYXB0aW9uLmF0dHJp Yi5oYXNfa2V5KCdsYW5ndWFnZScpOgorICAgICAgICAgICAgICAgICAgICBjYXB0aW9uc1tjYXB0 aW9uLmF0dHJpYlsnbGFuZ3VhZ2UnXV0gPSBjYXB0aW9uLnRleHQuc3RyaXAoKQorICAgICAgICAg ICAgZm9yIGRlc2NyaXB0aW9uIGluIHRlcm0uZmluZGFsbChcCisgICAgICAgICAgICAgICAgICAg IHNlbGYudmRleFNlYXJjaFRlcm0oJ2Rlc2NyaXB0aW9uJywgJ2xhbmdzdHJpbmcnKSk6CisgICAg ICAgICAgICAgICAgaWYgZGVzY3JpcHRpb24uYXR0cmliLmhhc19rZXkoJ2xhbmd1YWdlJyk6Cisg ICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tkZXNjcmlwdGlvbi5hdHRyaWJbJ2xhbmd1 YWdlJ11dID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24udGV4dCBhbmQg ZGVzY3JpcHRpb24udGV4dC5zdHJpcCgpIG9yICcnCisgICAgICAgICAgICByb3dbJ2NhcHRpb25z J10gPSBjYXB0aW9ucworICAgICAgICAgICAgcm93WydkZXNjcmlwdGlvbnMnXSA9IGRlc2NyaXB0 aW9ucworCisgICAgICAgICAgICAjIElmIHRoaXMgaXRlbSBpcyBhIGNoaWxkIG9mIHNvbWV0aGlu ZywgdGhlIGZhdGhlciBtdXN0IGhhdmUKKyAgICAgICAgICAgICMgYmVlbiBwYXJzZWQgYmVmb3Jl LCBhbmQgc3RvcmVkIGl0cyBsZXZlbCBpbgorICAgICAgICAgICAgIyBjaGlsZHJlbl9mYXRoZXJz X2xldmVsLiBPbmNlIGZvciBlYWNoIGNoaWxkIHdpdGggdGhlIGNoaWxkCisgICAgICAgICAgICAj IGFzIHRoZSBrZXkKKyAgICAgICAgICAgIGZhdGhlcl9sZXZlbCA9IGNoaWxkcmVuX2ZhdGhlcnNf bGV2ZWwuZ2V0KHRlcm0sIC0xKQorICAgICAgICAgICAgb3duX2xldmVsID0gZmF0aGVyX2xldmVs ICsgMQorICAgICAgICAgICAgZGVwdGggPSBtYXgob3duX2xldmVsLCBkZXB0aCkKKyAgICAgICAg ICAgIGZvciBjaGlsZF90ZXJtIGluIHRlcm0uZmluZGFsbChzZWxmLnZkZXhTZWFyY2hUZXJtKCd0 ZXJtJykpOgorICAgICAgICAgICAgICAgIGNoaWxkcmVuX2ZhdGhlcnNfbGV2ZWxbY2hpbGRfdGVy bV0gPSBvd25fbGV2ZWwKKyAgICAgICAgICAgIHJvd1snbGV2ZWwnXSA9IG93bl9sZXZlbAorICAg ICAgICAgICAgcm93cy5hcHBlbmQocm93KQorCisgICAgICAgICMgTm93IHRoYXQgd2Uga25vdyB0 aGUgbWF4aW11bSBkZXB0aCBvZiB0aGUgdHJlZSwgd2UgY2FuIGJ1aWxkIHRoZSB0d28KKyAgICAg ICAgIyBkaW1lbnNpb25hbCBtYXRyaXguCisgICAgICAgIHJldHZhbF9yb3dzID0gW10KKyAgICAg ICAgaGVhZGVyX3JvdyA9IFsiTGV2ZWwgJWkiICUgeCBmb3IgeCBpbiByYW5nZShkZXB0aCsxKV0K KyAgICAgICAgZm9yIGxhbmcgaW4gbGFuZ3VhZ2VzOgorICAgICAgICAgICAgaGVhZGVyX3Jvdy5l eHRlbmQoWydDYXB0aW9uICVzJyAlIGxhbmcsICdEZXNjcmlwdGlvbiAlcycgJSBsYW5nXSkKKyAg ICAgICAgcmV0dmFsX3Jvd3MuYXBwZW5kKGhlYWRlcl9yb3cpCisgICAgICAgIGZvciByb3cgaW4g cm93czoKKyAgICAgICAgICAgIHJldHZhbF9yb3cgPSBbJycgZm9yIHggaW4gcmFuZ2UoZGVwdGgg KyAxICsgMiAqIGxlbihsYW5ndWFnZXMpKV0KKyAgICAgICAgICAgIHJldHZhbF9yb3dbcm93Wyds ZXZlbCddXSA9IHJvd1sna2V5J10KKyAgICAgICAgICAgIGZvciBsYW5nX2NvdW50LCBsYW5nIGlu IGVudW1lcmF0ZShsYW5ndWFnZXMpOgorICAgICAgICAgICAgICAgIG9mZnNldCA9IGRlcHRoICsg MQorICAgICAgICAgICAgICAgIHJldHZhbF9yb3dbb2Zmc2V0ICsgbGFuZ19jb3VudCAqIDJdID0g cm93WydjYXB0aW9ucyddW2xhbmddCisgICAgICAgICAgICAgICAgcmV0dmFsX3Jvd1tvZmZzZXQg KyBsYW5nX2NvdW50ICogMiArIDFdID0gcm93WydkZXNjcmlwdGlvbnMnXVtsYW5nXQorICAgICAg ICAgICAgcmV0dmFsX3Jvd3MuYXBwZW5kKHJldHZhbF9yb3cpCisgICAgICAgIHJldHVybiByZXR2 YWxfcm93cworCisgICAgZGVmIHBhcnNlTWF0cml4KHNlbGYsIG1hdHJpeCk6CisgICAgICAgICIi IgorICAgICAgICBTZXR1cCBhIG1hbmFnZXIgYmFzZWQgb24gYSBtYXRyaXgKKyAgICAgICAgIiIi CisgICAgICAgIGxhbmd1YWdlcyA9IFtdCisgICAgICAgIHN0YXRlID0gJ0xldmVscycKKyAgICAg ICAgcGFyZW50cyA9IFtdCisgICAgICAgIGZvciBjb2x1bW4sIGNlbGwgaW4gZW51bWVyYXRlKG1h dHJpeFswXSk6CisgICAgICAgICAgICBpZiBub3QgKGNlbGwuc3RhcnRzd2l0aCgnTGV2ZWwgJykK KyAgICAgICAgICAgICAgICAgb3IgY2VsbC5zdGFydHN3aXRoKCdEZXNjcmlwdGlvbiAnKQorICAg ICAgICAgICAgICAgICBvciBjZWxsLnN0YXJ0c3dpdGgoJ0NhcHRpb24gJykpOgorICAgICAgICAg ICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJEYXRhIGlzIG5vdCB2YWxpZCwgdW5rbm93biBo ZWFkZXIiKQorICAgICAgICAgICAgaWYgc3RhdGUgPT0gJ0xldmVscyc6CisgICAgICAgICAgICAg ICAgaWYgY2VsbC5zdGFydHN3aXRoKCdMZXZlbCAnKToKKyAgICAgICAgICAgICAgICAgICAgcGFy ZW50cy5hcHBlbmQoTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAg ICAgICAgICBlbGlmIGNlbGwuc3RhcnRzd2l0aCgnQ2FwdGlvbiAnKToKKyAgICAgICAgICAgICAg ICAgICAgc3RhdGUgPSAnQ2FwdGlvbicKKyAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VzLmFw cGVuZChjZWxsWzg6XSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAg ICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiRGF0 YSBpcyBub3QgdmFsaWQsIGFmdGVyIExldmVsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgImhlYWRlciBtdXN0IGNvbWUgdGhlIGNhcHRpb24iKQorICAgICAgICAg ICAgZWxpZiBzdGF0ZSA9PSAnQ2FwdGlvbic6CisgICAgICAgICAgICAgICAgaWYgY2VsbC5zdGFy dHN3aXRoKCdEZXNjcmlwdGlvbiAnKToKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnRGVz Y3JpcHRpb24nCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAg ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIkRhdGEgaXMg bm90IHZhbGlkLCBhZnRlciBDYXB0aW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgImhlYWRlciBtdXN0IGNvbWUgdGhlIGRlc2NyaXB0aW9uIikKKyAgICAgICAg ICAgIGVsaWYgc3RhdGUgPT0gJ0Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICAgICAgICBpZiBjZWxs LnN0YXJ0c3dpdGgoJ0NhcHRpb24gJyk6CisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ0Nh cHRpb24nCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGxhbmd1YWdlcywgY2Vs bFs4Ol0pOgorICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VzLmFwcGVuZChjZWxsWzg6 XSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJh aXNlIEF0dHJpYnV0ZUVycm8oIkRhdGEgaXMgbm90IHZhbGlkLCBsYW5ndWFnZXMgIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF5IG5vdCBhcHBlYXIgdHdp Y2UhIikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBB dHRyaWJ1dGVFcnJvcigiRGF0YSBpcyBub3QgdmFsaWQsIGFmdGVyIERlc2NyaXB0aW9uIgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbXVzdCBjb21lIGEgbmV3IENh cHRpb24iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1 dGVFcnJvcigiUHJvZ3JhbW1pbmcgZXJyb3IsIHVua25vd24gc3RhdGUgZHVyaW5nICIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVhZGVyIHBhcnNpbmcgZW5jb3VudGVy ZWQuIFNvcnJ5ISIpCisgICAgICAgIGRlcHRoID0gbGVuKHBhcmVudHMpCisKKworICAgICAgICBk ZWYgYWRkU3ViRWxlbShwYXJlbnQsIGVsZW1lbnROYW1lLCB0ZXh0PU5vbmUpOgorICAgICAgICAg ICAgcmV0dmFsID0gZXRyZWUuU3ViRWxlbWVudChwYXJlbnQsIHNlbGYudmRleFRhZyhlbGVtZW50 TmFtZSkpCisgICAgICAgICAgICBpZiB0ZXh0ICE9IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0 dmFsLnRleHQgPSB0ZXh0CisgICAgICAgICAgICByZXR1cm4gcmV0dmFsCisgICAgICAgIHJvb3Qg PSBldHJlZS5FbGVtZW50KHNlbGYudmRleFRhZygndmRleCcpLCBuc21hcD17Tm9uZTogc2VsZi52 ZGV4X25hbWVzcGFjZX0pCisgICAgICAgICMgV0FSTklORyEhIFdlIGRvIGEgZGlydHkgdHJpY2sg aGVyZS4gV2hlbiB0aGUgZmlyc3QgZWxlbWVudHMKKyAgICAgICAgIyBXYW50IHRvIGdldCB0aGVp ciByb290IGVsZW1lbnQsIHRoZXkgaGF2ZSBhIGRlcHRoIG9mIDAKKyAgICAgICAgIyBUaGV5IHdp bGwgdGhlbiBhc2sgZm9yIHBhcmVudHNbMC0xXS4gU28gaXQgZ2V0cyB0aGUgbGFzdAorICAgICAg ICAjIGVsZW1lbnQuIEJlIGF3YXJlIG9mIHRoYXQhCisgICAgICAgIHBhcmVudHMuYXBwZW5kKHJv b3QpCisgICAgICAgIGZvciByb3cgaW4gbWF0cml4WzE6XToKKyAgICAgICAgICAgIHJvd19kZXB0 aCA9IE5vbmUKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGRlcHRoKToKKyAgICAgICAgICAg ICAgICBpZiByb3dbaV06CisgICAgICAgICAgICAgICAgICAgIGlmIHJvd19kZXB0aCAhPSBOb25l OgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIlRoZSBNYXRy aXggY29udGFpbnMgYW4gZWxlbWVudCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiY2FuJ3QgZGVjaWRlIG9uIG9uIHdoaWNoIGxldmVsICIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpdCBzaG91bGQgZXhpc3QiKQor ICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcm93X2Rl cHRoID0gaQorICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50c1tyb3dfZGVwdGgtMV0KKyAgICAg ICAgICAgIHRlcm0gPSBhZGRTdWJFbGVtKHBhcmVudCwgJ3Rlcm0nKQorICAgICAgICAgICAgcGFy ZW50c1tyb3dfZGVwdGhdID0gdGVybQorICAgICAgICAgICAgdGVybUlkZW50aWZpZXIgPSBhZGRT dWJFbGVtKHRlcm0sICd0ZXJtSWRlbnRpZmllcicsIHJvd1tyb3dfZGVwdGhdKQorICAgICAgICAg ICAgY2FwdGlvbnMgPSBbcm93W3hdIGZvciB4IGluIHJhbmdlKGxlbihwYXJlbnRzKS0xLCBsZW4o cm93KSwgMildCisgICAgICAgICAgICBkZXNjcmlwdGlvbnMgPSBbcm93W3hdIGZvciB4IGluIHJh bmdlKGxlbihwYXJlbnRzKSwgbGVuKHJvdyksIDIpXQorICAgICAgICAgICAgaWYgZmlsdGVyKGxh bWJkYSB4OngsY2FwdGlvbnMpOgorICAgICAgICAgICAgICAgIGNhcHRpb24gPSBhZGRTdWJFbGVt KHRlcm0sICdjYXB0aW9uJykKKyAgICAgICAgICAgICAgICBmb3IgaW5kZXgsIHRyYW5zbGF0aW9u IGluIGZpbHRlcihsYW1iZGEgKGkseCk6eCxbeCBmb3IgeCBpbiBlbnVtZXJhdGUoY2FwdGlvbnMp XSk6CisgICAgICAgICAgICAgICAgICAgIGxhbmdzdHJpbmcgPSBhZGRTdWJFbGVtKGNhcHRpb24s ICdsYW5nc3RyaW5nJywgdHJhbnNsYXRpb24pCisgICAgICAgICAgICAgICAgICAgIGxhbmdzdHJp bmcuYXR0cmliWydsYW5ndWFnZSddID0gbGFuZ3VhZ2VzW2luZGV4XQorICAgICAgICAgICAgaWYg ZmlsdGVyKGxhbWJkYSB4OngsZGVzY3JpcHRpb25zKToKKyAgICAgICAgICAgICAgICBkZXNjcmlw dGlvbiA9IGFkZFN1YkVsZW0odGVybSwgJ2Rlc2NyaXB0aW9uJykKKyAgICAgICAgICAgICAgICBm b3IgaW5kZXgsIHRyYW5zbGF0aW9uIGluIGZpbHRlcihsYW1iZGEgKGkseCk6eCxbeCBmb3IgeCBp biBlbnVtZXJhdGUoZGVzY3JpcHRpb25zKV0pOgorICAgICAgICAgICAgICAgICAgICBsYW5nc3Ry aW5nID0gYWRkU3ViRWxlbShkZXNjcmlwdGlvbiwgJ2xhbmdzdHJpbmcnLCB0cmFuc2xhdGlvbikK KyAgICAgICAgICAgICAgICAgICAgbGFuZ3N0cmluZy5hdHRyaWJbJ2xhbmd1YWdlJ10gPSBsYW5n dWFnZXNbaW5kZXhdCisgICAgICAgIHNlbGYudHJlZSA9IGV0cmVlLkVsZW1lbnRUcmVlKHJvb3Qp CisgICAgICAgIHNlbGYub3JkZXJfc2lnbmlmaWNhbnQgPSBzZWxmLmlzT3JkZXJTaWduaWZpY2Fu dCgpCisgICAgICAgIHNlbGYubWFrZVRlcm1EaWN0KCkKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpU aGUgYmVzdCBwb3NzaWJsZSBzZWFyY2ggdGVjaG5vbG9naWVzIGFyZSBub3cgYWZmb3JkYWJsZSBm b3IgYWxsIGNvbXBhbmllcy4KRG93bmxvYWQgeW91ciBGUkVFIG9wZW4gc291cmNlIEVudGVycHJp c2UgU2VhcmNoIEVuZ2luZSB0b2RheSEKT3VyIGV4cGVydHMgd2lsbCBhc3Npc3QgeW91IGluIGl0 cyBpbnN0YWxsYXRpb24gZm9yICQ1OS9tbywgbm8gY29tbWl0bWVudC4KVGVzdCBpdCBmb3IgRlJF RSBvbiBvdXIgQ2xvdWQgcGxhdGZvcm0gYW55dGltZSEKaHR0cDovL3B1YmFkcy5nLmRvdWJsZWNs aWNrLm5ldC9nYW1wYWQvY2xrP2lkPTE0NTMyODE5MSZpdT0vNDE0MC9vc3RnLmNsa3RyawpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpDb2xsZWN0aXZlLWNo ZWNraW5zIG1haWxpbmcgbGlzdApDb2xsZWN0aXZlLWNoZWNraW5zQGxpc3RzLnNvdXJjZWZvcmdl Lm5ldApodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9jb2xsZWN0 aXZlLWNoZWNraW5zCg==