# cnk_versioning 0.1.0 # # Christian Nowak # http://www.cnowak.de # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTQ6ImNua192ZXJzaW9uaW5nIjtzOjY6ImF1dGhvciI7czoxNToiQ2hyaXN0aWFuIE5vd2FrIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIwOiJodHRwOi8vd3d3LmNub3dhay5kZSI7czo3OiJ2ZXJzaW9uIjtzOjU6IjAuMS4wIjtzOjExOiJkZXNjcmlwdGlvbiI7czowOiIiO3M6NDoiaGVscCI7czowOiIiO3M6NDoiY29kZSI7czo4MTg1OiJpZihAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIA0Kew0KCWFkZF9wcml2cygnY25rX3ZlcnNpb25pbmcnLCcxLDInKTsNCglyZWdpc3Rlcl90YWIoJ3ByZXNlbnRhdGlvbicsICdjbmtfdmVyc2lvbmluZycsICJWZXJzaW9uaW5nIik7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ2Nua192ZXJfaGFuZGxlcicsICdjbmtfdmVyc2lvbmluZycpOw0KfQ0KZWxzZSBpZiAoQHR4cGludGVyZmFjZSA9PSAncHVibGljJykNCnsNCglyZWdpc3Rlcl9jYWxsYmFjaygnY25rX3Zlcl90ZXh0cGF0dGVybicsICd0ZXh0cGF0dGVybicpOw0KfQ0KDQpmdW5jdGlvbiBjbmtfdmVyX3RleHRwYXR0ZXJuKCkNCnsNCglnbG9iYWwgJHByb2R1Y3Rpb25fc3RhdHVzOw0KCQ0KCWlmICgkcHJvZHVjdGlvbl9zdGF0dXMgIT0gJ2xpdmUnKQ0KCXsNCgkJJGVycm9yID0gZmFsc2U7DQoJCQ0KCQkvLyByZWFkIGFsbCBmaWxlcw0KCQkkZm9ybXMgPSBnbG9iKCdmb3Jtcy8qLnR4cCcpOw0KCQkkcGFnZXMgPSBnbG9iKCdwYWdlcy8qLnR4cCcpOw0KCQkNCgkJaWYgKCRmb3JtcyAhPT0gZmFsc2UpICRlcnJvciA9ICFjbmtfdmVyX3B1c2hfZm9ybXMoJGZvcm1zKTsNCgkJaWYgKCRwYWdlcyAhPT0gZmFsc2UpICRlcnJvciA9ICFjbmtfdmVyX3B1c2hfcGFnZXMoJHBhZ2VzKTsNCgkJDQoJCWlmICgkZXJyb3IpIGVjaG8gJ0Vycm9ycyB3aGlsZSBzeW5jaHJvbmlzaW5nIGRhdGFiYXNlIGFuZCBmaWxlcyc7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBjbmtfdmVyX3B1c2hfZm9ybXMoJGZvcm1fZmlsZXMpDQp7DQoJJGZvcm1zID0gYXJyYXkoKTsNCg0KCSRycyA9IHNhZmVfcm93c19zdGFydCgnbmFtZSx0eXBlLElGTlVMTCh1bml4X3RpbWVzdGFtcChmaWxlX21vZF90aW1lKSwgMCkgYXMgbW9kX3RpbWUnLCAndHhwX2Zvcm0nLCAnKDE9MSknKTsNCgkNCgl3aGlsZSAoJHJzICYmICRyID0gbmV4dFJvdygkcnMpKQ0KCXsNCgkJJGZvcm1zWydmb3Jtcy8nLiRyWyduYW1lJ10uJy4nLiRyWyd0eXBlJ10uJy50eHAnXSA9ICRyWydtb2RfdGltZSddOw0KCX0NCgkNCglmb3IgKCRpPTA7ICRpIDwgY291bnQoJGZvcm1fZmlsZXMpOyAkaSsrKQ0KCXsNCgkJaWYgKGlzc2V0KCRmb3Jtc1skZm9ybV9maWxlc1skaV1dKSAmJiAkZm9ybXNbJGZvcm1fZmlsZXNbJGldXSA8IGZpbGVtdGltZSgkZm9ybV9maWxlc1skaV0pKQ0KCQl7DQoJCQljbmtfdmVyX3VwZGF0ZV9mb3JtKCRmb3JtX2ZpbGVzWyRpXSk7DQoJCX0NCgkJZWxzZSBpZiAoIWlzc2V0KCRmb3Jtc1skZm9ybV9maWxlc1skaV1dKSkNCgkJew0KCQkJY25rX3Zlcl91cGRhdGVfZm9ybSgkZm9ybV9maWxlc1skaV0sIHRydWUpOw0KCQl9DQoJCSRmb3Jtc1skZm9ybV9maWxlc1skaV1dID0gJ3Byb2Nlc3NlZCc7DQoJfQ0KCQkNCgkvLyBkZWxldGUgcmVtb3ZlZCBmb3Jtcw0KCWZvcmVhY2ggKCRmb3JtcyBhcyAka2V5ID0+ICR2YWx1ZSkNCgl7DQoJCWlmICgkdmFsdWUgIT0gJ3Byb2Nlc3NlZCcpDQoJCXsNCgkJCSRjb2xzID0gZXhwbG9kZSgnLicsIGJhc2VuYW1lKCRrZXksICcudHhwJykpOw0KCQkJJG5hbWUgPSAkY29sc1swXTsNCgkJCSR0eXBlID0gJGNvbHNbMV07DQoJCQkNCgkJCXNhZmVfZGVsZXRlKCd0eHBfZm9ybScsICJuYW1lID0gJyRuYW1lJyBBTkQgdHlwZSA9ICckdHlwZSciKTsNCgkJfQ0KCX0NCg0KCXJldHVybiB0cnVlOw0KfQ0KDQpmdW5jdGlvbiBjbmtfdmVyX3VwZGF0ZV9mb3JtKCRmaWxlbmFtZSwgJGNyZWF0ZSA9IGZhbHNlKQ0Kew0KCSRjb2xzID0gZXhwbG9kZSgnLicsIGJhc2VuYW1lKCRmaWxlbmFtZSwgJy50eHAnKSk7DQoNCgkkbmFtZSA9ICRjb2xzWzBdOw0KCSR0eXBlID0gJGNvbHNbMV07DQoJJGZvcm0gPSBkb1NsYXNoKGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlbmFtZSkpOw0KCQ0KCWlmICgkY3JlYXRlKQ0KCXsNCgkJc2FmZV9pbnNlcnQoJ3R4cF9mb3JtJywgIm5hbWUgPSAnJG5hbWUnLCB0eXBlID0gJyR0eXBlJywgZm9ybSA9ICckZm9ybScsIGZpbGVfbW9kX3RpbWUgPSBub3coKSIpOw0KCX0NCgllbHNlDQoJew0KCQlzYWZlX3VwZGF0ZSgndHhwX2Zvcm0nLCAiZm9ybSA9ICckZm9ybScsIGZpbGVfbW9kX3RpbWUgPSBub3coKSIsICJuYW1lID0gJyRuYW1lJyBBTkQgdHlwZSA9ICckdHlwZSciKTsNCgl9DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJfcHVzaF9wYWdlcygkcGFnZV9maWxlcykNCnsNCgkkcGFnZXMgPSBhcnJheSgpOw0KDQoJJHJzID0gc2FmZV9yb3dzX3N0YXJ0KCduYW1lLElGTlVMTCh1bml4X3RpbWVzdGFtcChmaWxlX21vZF90aW1lKSwgMCkgYXMgbW9kX3RpbWUnLCAndHhwX3BhZ2UnLCAnKDE9MSknKTsNCgkNCgl3aGlsZSAoJHJzICYmICRyID0gbmV4dFJvdygkcnMpKQ0KCXsNCgkJJHBhZ2VzWydwYWdlcy8nLiRyWyduYW1lJ10uJy50eHAnXSA9ICRyWydtb2RfdGltZSddOw0KCX0NCgkNCglmb3IgKCRpPTA7ICRpIDwgY291bnQoJHBhZ2VfZmlsZXMpOyAkaSsrKQ0KCXsNCgkJaWYgKGlzc2V0KCRwYWdlc1skcGFnZV9maWxlc1skaV1dKSAmJiAkcGFnZXNbJHBhZ2VfZmlsZXNbJGldXSA8IGZpbGVtdGltZSgkcGFnZV9maWxlc1skaV0pKQ0KCQl7DQoJCQljbmtfdmVyX3VwZGF0ZV9wYWdlKCRwYWdlX2ZpbGVzWyRpXSk7DQoJCX0NCgkJZWxzZSBpZiAoIWlzc2V0KCRwYWdlc1skcGFnZV9maWxlc1skaV1dKSkNCgkJew0KCQkJY25rX3Zlcl91cGRhdGVfcGFnZSgkcGFnZV9maWxlc1skaV0sIHRydWUpOw0KCQl9DQoJCSRwYWdlc1skcGFnZV9maWxlc1skaV1dID0gJ3Byb2Nlc3NlZCc7DQoJfQ0KCQkNCgkvLyBkZWxldGUgcmVtb3ZlZCBwYWdlcw0KCWZvcmVhY2ggKCRwYWdlcyBhcyAka2V5ID0+ICR2YWx1ZSkNCgl7DQoJCWlmICgkdmFsdWUgIT0gJ3Byb2Nlc3NlZCcpDQoJCXsNCgkJCSRuYW1lID0gYmFzZW5hbWUoJGtleSwgJy50eHAnKTsNCgkJCQ0KCQkJc2FmZV9kZWxldGUoJ3R4cF9wYWdlJywgIm5hbWUgPSAnJG5hbWUnIik7DQoJCX0NCgl9DQoNCglyZXR1cm4gdHJ1ZTsNCn0NCg0KZnVuY3Rpb24gY25rX3Zlcl91cGRhdGVfcGFnZSgkZmlsZW5hbWUsICRjcmVhdGUgPSBmYWxzZSkNCnsNCgkkbmFtZSA9IGJhc2VuYW1lKCRmaWxlbmFtZSwgJy50eHAnKTsNCgkkdXNlcl9odG1sID0gZG9TbGFzaChmaWxlX2dldF9jb250ZW50cygkZmlsZW5hbWUpKTsNCgkNCglpZiAoJGNyZWF0ZSkNCgl7DQoJCXNhZmVfaW5zZXJ0KCd0eHBfcGFnZScsICJuYW1lID0gJyRuYW1lJywgdXNlcl9odG1sID0gJyR1c2VyX2h0bWwnLCBmaWxlX21vZF90aW1lID0gbm93KCkiKTsNCgl9DQoJZWxzZQ0KCXsNCgkJc2FmZV91cGRhdGUoJ3R4cF9wYWdlJywgInVzZXJfaHRtbCA9ICckdXNlcl9odG1sJywgZmlsZV9tb2RfdGltZSA9IG5vdygpIiwgIm5hbWUgPSAnJG5hbWUnIik7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBjbmtfdmVyX2hhbmRsZXIoJGV2ZW50LCAkc3RlcCkNCnsNCglpZighJHN0ZXAgb3IgIWluX2FycmF5KCRzdGVwLCBhcnJheSgnY25rX3Zlcl9tZW51JywNCgkJCQkJCQkJCQknY25rX3Zlcl9wdWxsX2FsbCcsDQoJCQkJCQkJCQkJJ2Nua192ZXJfaW5zdGFsbCcsDQoJCQkJCQkJCQkJJ2Nua192ZXJfZGVpbnN0YWxsJykpKQ0KCXsNCgkJY25rX3Zlcl9tZW51KCk7DQoJfSANCgllbHNlDQoJew0KCQkkc3RlcCgpOw0KCX0NCn0NCg0KZnVuY3Rpb24gY25rX3Zlcl9tZW51KCRtZXNzYWdlID0gJycpDQp7DQoJcGFnZXRvcCgnVmVyc2lvbmluZycsICRtZXNzYWdlKTsNCgkNCgllY2hvICc8ZGl2IHN0eWxlPSJtYXJnaW46IGF1dG87IHRleHQtYWxpZ246IGNlbnRlciI+PHVsPic7DQoJDQoJZWNobyAnPGxpPjxhIGhyZWY9Ij9ldmVudD1jbmtfdmVyc2lvbmluZycuYS4nc3RlcD1jbmtfdmVyX3B1bGxfYWxsIj5Xcml0ZSBwYWdlcyAmIGZvcm1zIHRvIGZpbGVzPC9hPjwvbGk+JzsNCgkNCgllY2hvICc8L3VsPic7DQoJDQoJZWNobyAnPHVsIHN0eWxlPSJtYXJnaW4tdG9wOiAxMDBweCI+JzsJDQoJDQoJZWNobyAnPGxpPjxhIGhyZWY9Ij9ldmVudD1jbmtfdmVyc2lvbmluZycuYS4nc3RlcD1jbmtfdmVyX2luc3RhbGwiPkluc3RhbGw8L2E+PC9saT4nOw0KCQ0KCWVjaG8gJzxsaT48YSBocmVmPSI/ZXZlbnQ9Y25rX3ZlcnNpb25pbmcnLmEuJ3N0ZXA9Y25rX3Zlcl9kZWluc3RhbGwiPkRlaW5zdGFsbDwvYT48L2xpPic7DQoNCgllY2hvICc8L3VsPic7DQoJDQoJZWNobyAnPC9kaXY+JzsNCn0NCg0KZnVuY3Rpb24gY25rX3Zlcl9wdWxsX2FsbCgpDQp7DQoJcGFnZXRvcCgnV3JpdGUgdG8gZmlsZXMnLCAnJyk7DQoJDQoJZWNobyAnPGRpdiBzdHlsZT0ibWFyZ2luOiBhdXRvOyB0ZXh0LWFsaWduOiBjZW50ZXIiPic7DQoJCQkJDQoJaWYgKGdwcygnZG9fcHVsbCcpIHx8IChnbG9iKCcuLi9wYWdlcy8qLnR4cCcpID09PSBmYWxzZSAmJiBnbG9iKCcuLi9mb3Jtcy8qLnR4cCcpID09PSBmYWxzZSkpDQoJew0KCQkkZXJyb3IgPSBmYWxzZTsNCgkJDQoJCS8vIHRlc3QgaWYgZm9sZGVycyBleGlzdCBhbmQgaGF2ZSB3cml0ZSBwZXJtaXNzaW9ucw0KCQlpZiAoQGlzX3dyaXRhYmxlKCcuLi9mb3Jtcy8nKSA9PT0gZmFsc2UpDQoJCXsNCgkJCSRlcnJvciA9IHRydWU7DQoJCQllY2hvICdGb2xkZXIgIi9mb3Jtcy8iIGlzIG5vdCB3cml0YWJsZS48YnIgLz48YnIgLz4nOw0KCQl9DQoJCQ0KCQlpZiAoQGlzX3dyaXRhYmxlKCcuLi9wYWdlcy8nKSA9PT0gZmFsc2UpDQoJCXsNCgkJCSRlcnJvciA9IHRydWU7DQoJCQllY2hvICdGb2xkZXIgIi9wYWdlcy8iIGlzIG5vdCB3cml0YWJsZS4nOw0KCQl9DQoJCQ0KCQlpZiAoISRlcnJvcikNCgkJew0KCQkJCWlmIChjbmtfdmVyX3B1bGxfZm9ybXMoKSkNCgkJCQl7DQoJCQkJCWVjaG8gJ0Zvcm1zIHdlcmUgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8gdGhlICIvZm9ybXMvIiBkaXJlY3RvcnkuPGJyIC8+PGJyIC8+JzsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJZWNobyAnVGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHByb2Nlc3NpbmcgZm9ybXMuPGJyIC8+PGJyIC8+JzsNCgkJCQl9DQoJCQkJDQoJCQkJaWYgKGNua192ZXJfcHVsbF9wYWdlcygpKQ0KCQkJCXsNCgkJCQkJZWNobyAnUGFnZXMgd2VyZSBzdWNjZXNzZnVsbHkgd3JpdHRlbiB0byB0aGUgIi9wYWdlcy8iIGRpcmVjdG9yeS4nOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQllY2hvICdUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBwYWdlcy4nOw0KCQkJCX0NCgkJfQ0KCQkNCgkJZWNobyAnPGJyIC8+PGJyIC8+PGEgaHJlZj0iP2V2ZW50PWNua192ZXJzaW9uaW5nIj5CYWNrIHRvIG1lbnUuLi48L2E+JzsNCgl9DQoJZWxzZQ0KCXsNCgkJZWNobyAnVGhlcmUgYXJlIGFscmVhZHkgc29tZSAiLnR4cCIgZmlsZXMgaW4gdGhlIHBhZ2VzIG9yIGZvcm1zIGRpcmVjdG9yeSwgd2hpY2ggd2lsbCBiZSBvdmVycmlkZW4uIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlPzxiciAvPjxiciAvPicuDQoJCQ0KCQknPGEgaHJlZj0iP2V2ZW50PWNua192ZXJzaW9uaW5nJy5hLidzdGVwPWNua192ZXJfcHVsbF9hbGwnLmEuJ2RvX3B1bGw9MSI+WWVzLCBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXMuLi48L2E+PGJyIC8+PGJyIC8+Jy4NCgkJDQoJCSc8YSBocmVmPSI/ZXZlbnQ9Y25rX3ZlcnNpb25pbmciPk5vLCBicmluZyBtZSBiYWNrIHRvIHRoZSBtZW51Li4uPC9hPic7DQoJfQ0KCQ0KCWVjaG8gJzwvZGl2Pic7DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJfcHVsbF9mb3JtcygpDQp7DQoJJHJzID0gc2FmZV9yb3dzX3N0YXJ0KCduYW1lLCB0eXBlLCBmb3JtJywgJ3R4cF9mb3JtJywgJygxPTEpJyk7DQoJDQoJd2hpbGUgKCRycyAmJiAkciA9IG5leHRSb3coJHJzKSkNCgl7DQoJCWlmIChAZmlsZV9wdXRfY29udGVudHMoJy4uL2Zvcm1zLycuJHJbJ25hbWUnXS4nLicuJHJbJ3R5cGUnXS4nLnR4cCcsICRyWydmb3JtJ10pID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglzYWZlX3VwZGF0ZSgndHhwX2Zvcm0nLCAnZmlsZV9tb2RfdGltZT1ub3coKScsICcoMT0xKScpOw0KCQ0KCXJldHVybiB0cnVlOw0KfQ0KDQpmdW5jdGlvbiBjbmtfdmVyX3B1bGxfcGFnZXMoKQ0Kew0KCSRycyA9IHNhZmVfcm93c19zdGFydCgnbmFtZSwgdXNlcl9odG1sJywgJ3R4cF9wYWdlJywgJygxPTEpJyk7DQoJDQoJd2hpbGUgKCRycyAmJiAkciA9IG5leHRSb3coJHJzKSkNCgl7DQoJCWlmIChAZmlsZV9wdXRfY29udGVudHMoJy4uL3BhZ2VzLycuJHJbJ25hbWUnXS4nLnR4cCcsICRyWyd1c2VyX2h0bWwnXSkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXNhZmVfdXBkYXRlKCd0eHBfcGFnZScsICdmaWxlX21vZF90aW1lPW5vdygpJywgJygxPTEpJyk7DQoJDQoJcmV0dXJuIHRydWU7DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJfaW5zdGFsbCgpDQp7DQoJcGFnZXRvcCgnVmVyc2lvbmluZyBQbHVnaW4gSW5zdGFsbGF0aW9uJywgJycpOw0KCQ0KCWVjaG8gJzxkaXYgc3R5bGU9Im1hcmdpbjphdXRvOyB0ZXh0LWFsaWduOmNlbnRlciI+JzsNCgkNCglpZiAoY25rX3Zlcl9kb19pbnN0YWxsKCkpDQoJew0KCQllY2hvICc8cD5JbnN0YWxsYXRpb24gd2FzIHN1Y2Nlc3NmdWw8L3A+JzsNCgl9DQoJZWxzZQ0KCXsNCgkJZWNobyAnPHA+SW5zdGFsbGF0aW9uIGFib3J0ZWQ8L3A+JzsNCgl9DQoNCgllY2hvICc8L2Rpdj4nOw0KfQ0KDQpmdW5jdGlvbiBjbmtfdmVyX2RvX2luc3RhbGwoKQ0Kew0KCSRzcWwgPSAiQUxURVIgVEFCTEUgIi5zYWZlX3BmeCgndHhwX2Zvcm0nKS4iIEFERCBgZmlsZV9tb2RfdGltZWAgREFURVRJTUUgTlVMTDtBTFRFUiBUQUJMRSAiLnNhZmVfcGZ4KCd0eHBfcGFnZScpLiIgQUREIGBmaWxlX21vZF90aW1lYCBEQVRFVElNRSBOVUxMIDsiOw0KCQ0KCWlmICghY25rX3Zlcl9iYXRjaF9xdWVyeSgkc3FsKSkNCgl7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJZWxzZQ0KCXsJDQoJCXJldHVybiB0cnVlOw0KCX0NCn0NCg0KZnVuY3Rpb24gY25rX3Zlcl9kZWluc3RhbGwoKQ0Kew0KCXBhZ2V0b3AoJ1ZlcnNpb25pbmcgUGx1Z2luIERlaW5zdGFsbGF0aW9uJywgJycpOw0KCQ0KCWVjaG8gJzxkaXYgc3R5bGU9Im1hcmdpbjphdXRvOyB0ZXh0LWFsaWduOmNlbnRlciI+JzsNCgkNCglpZiAoZ3BzKCdkb19kZWluc3RhbGwnKSkNCgl7DQoJCWlmIChjbmtfdmVyX2RvX2RlaW5zdGFsbCgpKQ0KCQl7DQoJCQllY2hvICc8cD5EZWluc3RhbGxhdGlvbiB3YXMgc3VjY2Vzc2Z1bDwvcD4nOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJZWNobyAnPHA+RGVpbnN0YWxsYXRpb24gYWJvcnRlZDwvcD4nOw0KCQl9DQoJfQ0KCWVsc2UNCgl7DQoJCWVjaG8gJzxhIGhyZWY9Ij9ldmVudD1jbmtfdmVyc2lvbmluZycuYS4nc3RlcD1jbmtfdmVyX2RlaW5zdGFsbCcuYS4nZG9fZGVpbnN0YWxsPTEiPlllcywgSSByZWFsbHkgd2FudCB0byBkZWluc3RhbGw8L2E+JzsNCgl9DQoJDQoJZWNobyAnPC9kaXY+JzsNCn0NCg0KZnVuY3Rpb24gY25rX3Zlcl9kb19kZWluc3RhbGwoKQ0Kew0KCSRzcWwgPSAiQUxURVIgVEFCTEUgIi5zYWZlX3BmeCgndHhwX2Zvcm0nKS4iIERST1AgYGZpbGVfbW9kX3RpbWVgO0FMVEVSIFRBQkxFICIuc2FmZV9wZngoJ3R4cF9wYWdlJykuIiBEUk9QIGBmaWxlX21vZF90aW1lYDsiOw0KCQ0KCWlmICghY25rX3Zlcl9iYXRjaF9xdWVyeSgkc3FsKSkNCgl7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJZWxzZQ0KCXsJDQoJCXJldHVybiB0cnVlOw0KCX0NCn0NCg0KZnVuY3Rpb24gY25rX3Zlcl9iYXRjaF9xdWVyeSAoJHBfcXVlcnksICRwX3RyYW5zYWN0aW9uX3NhZmUgPSB0cnVlKSANCnsNCglpZiAoJHBfdHJhbnNhY3Rpb25fc2FmZSkgDQoJew0KCQkkcF9xdWVyeSA9ICdTVEFSVCBUUkFOU0FDVElPTjsnIC4gJHBfcXVlcnkgLiAnOyBDT01NSVQ7JzsNCgl9DQoJICANCgkkcXVlcnlfc3BsaXQgPSBwcmVnX3NwbGl0ICgiL1s7XSsvIiwgJHBfcXVlcnkpOw0KCQ0KCWZvcmVhY2ggKCRxdWVyeV9zcGxpdCBhcyAkY29tbWFuZF9saW5lKSANCgl7DQoJCSRjb21tYW5kX2xpbmUgPSB0cmltKCRjb21tYW5kX2xpbmUpOw0KCQ0KCQlpZiAoJGNvbW1hbmRfbGluZSAhPSAnJykgDQoJCXsNCgkJCSRxdWVyeV9yZXN1bHQgPSBzYWZlX3F1ZXJ5KCRjb21tYW5kX2xpbmUpOw0KCQkNCgkJCWlmICgkcXVlcnlfcmVzdWx0ID09PSBmYWxzZSkgDQoJCQl7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgl9DQoJDQoJcmV0dXJuICRxdWVyeV9yZXN1bHQ7DQp9IjtzOjQ6InR5cGUiO3M6MToiMSI7czozOiJtZDUiO3M6MzI6IjJjMGE3MGRjNTQ0NjQzOTEzMzNjYjE0YjQ1ZjUwMTY5Ijt9