{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\querySql\\DynamicView.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\querySql\\DynamicView.vue","mtime":1733309212345},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KDQppbXBvcnQgeyBtYXBTdGF0ZSwgbWFwQWN0aW9ucyB9IGZyb20gInZ1ZXgiOw0KaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gImVsZW1lbnQtdWkiOw0KaW1wb3J0IHsgTG9hZGluZyB9IGZyb20gImVsZW1lbnQtdWkiOw0KaW1wb3J0IEh0Q2hlY2tib3ggZnJvbSAiQC9jb21wb25lbnRzL2NvbnRyb2wvSHRDaGVja2JveC52dWUiOw0KaW1wb3J0IEh0RGlhbG9nIGZyb20gIkAvY29tcG9uZW50cy9jb250cm9sL0h0RGlhbG9nLnZ1ZSI7DQppbXBvcnQgSHREaWFsb2dCdG4gZnJvbSAiQC9jb21wb25lbnRzL2NvbnRyb2wvaHREaWFsb2dCdG4udnVlIjsNCmltcG9ydCB1dGlscyBmcm9tICJAL3V0aWxzLmpzIjsNCmltcG9ydCByZXEgZnJvbSAiQC9yZXF1ZXN0LmpzIjsNCmltcG9ydCB7IEJhc2U2NCB9IGZyb20gImpzLWJhc2U2NCI7DQppbXBvcnQgVnVlIGZyb20gInZ1ZSI7DQoNCmV4cG9ydCBkZWZhdWx0IHsNCiAgbmFtZTogImR5bmFtaWMtdmlldyIsDQogIHByb3BzOiB7DQogICAgc2luZ2xlOiBTdHJpbmcsDQogICAgc3FsQWxpYXM6IFN0cmluZywNCiAgICBhbGlhczogU3RyaW5nLA0KICAgIGh0bWw6IFN0cmluZywNCiAgICBxdWVyeVZpZXc6T2JqZWN0DQogIH0sDQogIGNyZWF0ZWQoKSB7DQogICAgdGhpcy5pbml0KCk7DQogIH0sDQogIHdhdGNoOiB7DQogICAgaHRtbDogZnVuY3Rpb24obmV3VmFsKSB7DQogICAgICBpZiAobmV3VmFsKSB7DQogICAgICAgIHRoaXMuaW5pdCgpOw0KICAgICAgfQ0KICAgIH0NCiAgfSwNCiAgbWV0aG9kczogew0KICAgIGluaXQoKSB7DQogICAgICBWdWUuY29tcG9uZW50KCJodC1ydW50aW1lLXRlbXBsYXRlIiwgew0KICAgICAgICBwcm9wczogew0KICAgICAgICAgIHNpbmdsZTogU3RyaW5nLA0KICAgICAgICAgIHNxbEFsaWFzOiBTdHJpbmcsDQogICAgICAgICAgYWxpYXM6IFN0cmluZywNCiAgICAgICAgICBodG1sOiBTdHJpbmcsDQogICAgICAgICAgcXVlcnlWaWV3OiBPYmplY3QNCiAgICAgICAgfSwNCiAgICAgICAgdGVtcGxhdGU6IHRoaXMuaHRtbCwNCiAgICAgICAgZGF0YSgpIHsNCiAgICAgICAgICByZXR1cm4gew0KICAgICAgICAgICAgYnBtUnVuVGltZTogd2luZG93LmNvbnRleHQuYnBtUnVuVGltZSwNCiAgICAgICAgICAgIGZpbGVMaXN0OiBbXSwNCiAgICAgICAgICAgIHRhYmxlRGF0YTogeyBzZWxlY3RSb3dzOiBbXSwgcXVlcnlzOiAiIiB9LA0KICAgICAgICAgICAgZGlhbG9nRXhwb3J0VmlzaWJsZTogZmFsc2UsDQogICAgICAgICAgICBleHBvcnREYXRhOiB7IGdldFR5cGU6ICJhbGwiLCBleHBGaWVsZDogW10gfSwNCiAgICAgICAgICAgIGV4cG9ydFNlbGxlY3Rpb246IFtdLA0KICAgICAgICAgICAgc2VhcmNoRm9ybToge30sDQogICAgICAgICAgICBkaXNwbGF5RmllbGRzOiBbXSwNCiAgICAgICAgICAgIGFsYXJtU2V0dGluZ01hcDoge30sDQogICAgICAgICAgICBzdW1tYXJ5VHlwZU1hcDoge30sDQogICAgICAgICAgICBxdWVyeUZvcm06IHsNCiAgICAgICAgICAgICAgcXVlcnlEYXRhOiAiIg0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIHVwbG9hZFBhcmFtczogeyBpZDogW10gfSwNCiAgICAgICAgICAgIGZvcm1UeXBlOiBmYWxzZSwNCiAgICAgICAgICAgIGxhYmVsUG9zaXRpb246ICJsZWZ0IiwNCiAgICAgICAgICAgIGluY29uczogImVsLWljb24tYXJyb3ctZG93biIsDQogICAgICAgICAgICBmb3JtYXR0ZXJNYXA6IHt9LA0KICAgICAgICAgICAgb3B0aW9uczogew0KICAgICAgICAgICAgICBmdWxsc2NyZWVuOiB0cnVlLA0KICAgICAgICAgICAgICBsb2NrOiB0cnVlDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgdXBsb2FkRXJyb3I6ICIvcnVudGltZS9waG90b0Vycm9yQ3N2L3YxL3VwbG9hZEVycm9yTGlzdCIsDQogICAgICAgICAgICB1cG9hZFBkZlRvQXp1cmU6DQogICAgICAgICAgICAgIHdpbmRvdy5jb250ZXh0LmJwbVJ1blRpbWUgKyAiL3J1bnRpbWUvYmxvYi92MS91cG9hZFBkZlRvQXp1cmUiLA0KICAgICAgICAgICAgdXBsb2FkVW5wcmVwYXJlOiAiL3J1bnRpbWUvYmxvYi92MS91cG9hZFRvQXp1cmUiLA0KICAgICAgICAgICAgc3VtbWFyeVNldHRpbmc6W10sDQogICAgICAgICAgICBhY3RpdmVOYW1lczogWycxJ10NCiAgICAgICAgICB9Ow0KICAgICAgICB9LA0KICAgICAgICBjb21wdXRlZDogbWFwU3RhdGUoew0KICAgICAgICAgIHJvd3M6IHN0YXRlID0+IHN0YXRlLmZvcm0ucXVlcnlTcWxWaWV3Um93cywNCiAgICAgICAgICBwYWdpbmF0aW9uOiBzdGF0ZSA9PiBzdGF0ZS5mb3JtLnF1ZXJ5U3FsVmlld1BhZ2luYXRpb24sDQogICAgICAgICAgdG90YWw6IHN0YXRlID0+IHN0YXRlLmZvcm0ucXVlcnlTcWxWaWV3VG90YWwsDQogICAgICAgICAgdXBsb2FkSGVhZGVyczogc3RhdGUgPT4gew0KICAgICAgICAgICAgcmV0dXJuIHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3N0YXRlLmxvZ2luLmN1cnJlbnRVc2VyLnRva2VufWAgfTsNCiAgICAgICAgICB9LA0KICAgICAgICAgIHVwbG9hZEVycm9ySHR0cCgpIHsNCiAgICAgICAgICAgIHJldHVybiB0aGlzLmJwbVJ1blRpbWUgKyB0aGlzLnVwbG9hZEVycm9yOw0KICAgICAgICAgIH0sDQogICAgICAgICAgdXBsb2FkVW5wcmVwYXJlSHR0cCgpIHsNCiAgICAgICAgICAgIHJldHVybiB0aGlzLmJwbVJ1blRpbWUgKyB0aGlzLnVwbG9hZFVucHJlcGFyZTsNCiAgICAgICAgICB9DQogICAgICAgIH0pLA0KICAgICAgICBjb21wb25lbnRzOiB7DQogICAgICAgICAgSHRDaGVja2JveCwNCiAgICAgICAgICBIdERpYWxvZywNCiAgICAgICAgICBIdERpYWxvZ0J0bg0KICAgICAgICB9LA0KICAgICAgICB3YXRjaDogew0KICAgICAgICAgIGZvcm1LZXk6IGZ1bmN0aW9uKG5ld1ZhbCkgew0KICAgICAgICAgICAgaWYgKG5ld1ZhbCkgew0KICAgICAgICAgICAgICB0aGlzLmluaXQoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9LA0KICAgICAgICAgICJ0YWJsZURhdGEuc2VsZWN0Um93cyI6IGZ1bmN0aW9uKG5ld1ZhbCkgew0KICAgICAgICAgICAgaWYgKG5ld1ZhbC5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICAgIGxldCBtZV8gPSB0aGlzOw0KICAgICAgICAgICAgICBtZV8udXBsb2FkUGFyYW1zLmlkID0gW107DQogICAgICAgICAgICAgIG5ld1ZhbC5mb3JFYWNoKGl0ZW0gPT4gew0KICAgICAgICAgICAgICAgIG1lXy51cGxvYWRQYXJhbXMuaWQucHVzaChpdGVtLklOU1RJRCk7DQogICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgJHJvdXRlOiAiaW5pdCIsDQogICAgICAgICAgcXVlcnlWaWV3OiB7DQogICAgICAgICAgICBoYW5kbGVyKG5ld1ZhbCwgb2xkVmFsKSB7DQogICAgICAgICAgICAgIGlmIChuZXdWYWwuc2hvd3Mpew0KICAgICAgICAgICAgICAgIGxldCBkaXNwbGF5RmllbGQgPSB1dGlscy5wYXJzZVRvSnNvbihuZXdWYWwuc2hvd3MpOw0KICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGxheUZpZWxkLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgICBpZiAoZGlzcGxheUZpZWxkW2ldLmhpZGRlbiA9PSAwKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheUZpZWxkcy5wdXNoKGRpc3BsYXlGaWVsZFtpXSk7DQogICAgICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5RmllbGRbaV0uc3VtbWFyeVR5cGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1bW1hcnlUeXBlTWFwW2Rpc3BsYXlGaWVsZFtpXS5maWVsZE5hbWVdID0gZGlzcGxheUZpZWxkW2ldLnN1bW1hcnlUeXBlOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICBpZiAoZGlzcGxheUZpZWxkW2ldLmZvcm1hdGVyKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVyTWFwW2Rpc3BsYXlGaWVsZFtpXS5maWVsZE5hbWVdID0gZGlzcGxheUZpZWxkW2ldLmZvcm1hdGVyOw0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgaWYgKGRpc3BsYXlGaWVsZFtpXS5hbGFybVNldHRpbmcpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGFybVNldHRpbmdNYXBbZGlzcGxheUZpZWxkW2ldLmZpZWxkTmFtZV0gPSBkaXNwbGF5RmllbGRbaV0uYWxhcm1TZXR0aW5nOw0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAobmV3VmFsLnN1bW1hcnlTZXR0aW5nKXsNCiAgICAgICAgICAgICAgICB0aGlzLnN1bW1hcnlTZXR0aW5nID0gSlNPTi5wYXJzZShuZXdWYWwuc3VtbWFyeVNldHRpbmcpOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgaW1tZWRpYXRlOiB0cnVlDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIG1ldGhvZHM6IHsNCiAgICAgICAgICAvL+aJk+WNsA0KICAgICAgICAgIHByaW50TGlzdCgpew0KICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJpbnREYXRhIikuaW5uZXJIVE1MOw0KICAgICAgICAgICAgd2luZG93LnByaW50KCk7DQogICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICB9LA0KICAgICAgICAgIC8v55Sf5oiQ5LqM57u056CBDQoNCiAgICAgICAgICAvL+i3r+eUsei3s+i9rA0KICAgICAgICAgIHJvdXRlclB1c2godXJsKSB7DQogICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh1cmwpOw0KICAgICAgICAgIH0sDQogICAgICAgICAgLy/mn6XnnIvkuI7lpITnkIbmtYHnqIvmjInpkq4NCiAgICAgICAgICBkaXNwb3NlKHJvdykgew0KICAgICAgICAgICAgbGV0IHVybDsNCiAgICAgICAgICAgIGlmIChyb3cuVEFTS0lEKSB7DQogICAgICAgICAgICAgIC8v5a6h5om55Lu75YqhDQogICAgICAgICAgICAgIHVybCA9ICIvdGFzay8iICsgcm93LlRBU0tJRDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIC8v5p+l55yL5rWB56iL5a6e5L6LDQogICAgICAgICAgICAgIHVybCA9ICIvaW5zdC8iICsgcm93LklOU1RJRDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHVybCk7DQogICAgICAgICAgfSwNCg0KICAgICAgICAgIGhhbmRsZVNpemVDaGFuZ2U6IGZ1bmN0aW9uKHNpemUpIHsNCiAgICAgICAgICAgIC8v5q+P6aG15LiL5ouJ5pi+56S65pWw5o2uDQogICAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZm9ybS9zZXRRdWVyeVNxbFZpZXdQYWdpbmF0aW9uU2l6ZSIsIHNpemUpOw0KICAgICAgICAgICAgdGhpcy5zZWFyY2goKTsNCiAgICAgICAgICB9LA0KICAgICAgICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2U6IGZ1bmN0aW9uKGN1cnJlbnRQYWdlKSB7DQogICAgICAgICAgICAvL+eCueWHu+esrOWHoOmhtQ0KICAgICAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goDQogICAgICAgICAgICAgICJmb3JtL3NldFF1ZXJ5U3FsVmlld1BhZ2luYXRpb25QYWdlTnVtIiwNCiAgICAgICAgICAgICAgY3VycmVudFBhZ2UNCiAgICAgICAgICAgICk7DQogICAgICAgICAgICB0aGlzLnNlYXJjaCgpOw0KICAgICAgICAgIH0sDQogICAgICAgICAgLy/lm57ovabmn6Xor6INCiAgICAgICAgICBzZWFyY2hFbnRlckZ1bjogZnVuY3Rpb24oZSkgew0KICAgICAgICAgICAgbGV0IGtleUNvZGUgPSB3aW5kb3cuZXZlbnQgPyBlLmtleUNvZGUgOiBlLndoaWNoDQogICAgICAgICAgICBpZiAoa2V5Q29kZSA9PSAxMykgew0KICAgICAgICAgICAgICB0aGlzLnNlYXJjaCgnZmluZCcpDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICBzZWFyY2goc3RyKSB7DQogICAgICAgICAgICBjb25zdCBsb2FkaW5nID0gdGhpcy4kbG9hZGluZyh0aGlzLm9wdGlvbnMpOw0KICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHt9Ow0KICAgICAgICAgICAgaWYgKHN0ciA9PSAiZmluZCIpIHsNCiAgICAgICAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImZvcm0vc2V0UXVlcnlTcWxWaWV3UGFnaW5hdGlvblBhZ2VOdW0iLCAxKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8v5Yik5pat5Li65ZCI5bm25p+l6K+i6L+Y5piv5YiG5byA5p+l6K+iDQogICAgICAgICAgICBpZiAodGhpcy5mb3JtVHlwZSkgew0KICAgICAgICAgICAgICBwYXJhbXMgPSB0aGlzLmdldFF1ZXJ5RmlsdGVyKCk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAvL+WIpOaWreaYr+WQpumFjee9ruS6huWQiOW5tuafpeivog0KICAgICAgICAgICAgICBpZiAoJCgiLnNlYXJjaC1xdWVyeSIpLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgICBwYXJhbXMgPSB0aGlzLmdldENvbmRpdGlvblF1ZXJ5KCk7DQogICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgcGFyYW1zID0gdGhpcy5nZXRRdWVyeUZpbHRlcigpOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJC5pc0VtcHR5T2JqZWN0KHRoaXMuc2VhcmNoRm9ybSkpIHsNCiAgICAgICAgICAgICAgdGhpcy4kc3RvcmUNCiAgICAgICAgICAgICAgICAuZGlzcGF0Y2goImZvcm0vZ2V0UXVlcnlTcWxWaWV3QnlQYWdpbmF0aW9uIiwgcGFyYW1zKQ0KICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHsNCiAgICAgICAgICAgICAgICAgIGxvYWRpbmcuY2xvc2UoKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHRoaXMuJHN0b3JlDQogICAgICAgICAgICAgICAgLmRpc3BhdGNoKCJmb3JtL2dldFF1ZXJ5U3FsVmlld0J5UGFnaW5hdGlvbiIsIHBhcmFtcykNCiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7DQogICAgICAgICAgICAgICAgICBsb2FkaW5nLmNsb3NlKCk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICBnZXRRdWVyeUZpbHRlcigpIHsNCiAgICAgICAgICAgIGxldCBvcGVyYXRpb25NYXAgPSB0aGlzLmdldFNlYXJjaEl0ZW1zKCk7Ly/mn6Xor6LmnaHku7bnsbvlnosNCiAgICAgICAgICAgIGxldCBmaWVsZFF1ZXJ5TWFwID0gdGhpcy5nZXRGaWVsZFF1ZXJ5KCk7Ly/mn6Xor6LmnaHku7blrZfmrrUNCiAgICAgICAgICAgIGxldCBzcGVjaWFsTWFwID0gdGhpcy5nZXRTcGVjaWFsTWFwKCk7IC8v6I635Y+W54m55q6K5p+l6K+i5oOF5Ya177yI6Ieq5a6a5LmJ5a+56K+d5qGG77yJDQogICAgICAgICAgICBsZXQgcXVlcnlzID0gW107IC8v5p+l6K+i5p2h5Lu2DQogICAgICAgICAgICBsZXQgcXVlcnlGaWx0ZXIgPSB7fTsNCiAgICAgICAgICAgIGxldCBwYWdlQmVhbiA9IHsgcGFnZUJlYW46IHRoaXMucGFnaW5hdGlvbiB9Ow0KICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHsgc3FsQWxpYXM6IHRoaXMuc3FsQWxpYXMsIGFsaWFzOiB0aGlzLmFsaWFzIH07DQogICAgICAgICAgICBwYXJhbXMucGFnaW5hdGlvbiA9IHBhZ2VCZWFuOw0KICAgICAgICAgICAgaWYgKCQuaXNFbXB0eU9iamVjdCh0aGlzLnNlYXJjaEZvcm0pKSB7DQogICAgICAgICAgICAgIHJldHVybiBwYXJhbXM7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5zZWFyY2hGb3JtKSB7DQogICAgICAgICAgICAgICAgaWYgKA0KICAgICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VhcmNoRm9ybVtrZXldICE9ICJ1bmRlZmluZWQiICYmDQogICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm1ba2V5XSAhPSAiIg0KICAgICAgICAgICAgICAgICkgew0KICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybVtrZXldIGluc3RhbmNlb2YgQXJyYXkpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvbk1hcFtrZXldPT09IkJFVFdFRU4iKXsNCiAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWVBcnJheSA9IFtdOw0KICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGk9MDtpPHRoaXMuc2VhcmNoRm9ybVtrZXldLmxlbmd0aDtpKyspew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVBcnJheS5wdXNoKHRoaXMuc2VhcmNoRm9ybVtrZXldW2ldKTsNCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgcXVlcnlzLnB1c2goew0KICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IGtleSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZUFycmF5LmpvaW4oIiwiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOiAibWFpbiIsDQogICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb246IG9wZXJhdGlvbk1hcFtrZXldLA0KICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpb246ICJBTkQiDQogICAgICAgICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlYXJjaEZvcm1ba2V5XS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlzLnB1c2goew0KICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eToga2V5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWFyY2hGb3JtW2tleV1baV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOiAibWFpbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogb3BlcmF0aW9uTWFwW2tleV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uOiAiQU5EIg0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYodGhpcy5zZWFyY2hGb3JtW2tleV0uaW5jbHVkZXMoIiwiKSAmJiAhc3BlY2lhbE1hcFtrZXldKXsNCiAgICAgICAgICAgICAgICAgICAgbGV0IGFyciA9IHRoaXMuc2VhcmNoRm9ybVtrZXldLnNwbGl0KCIsIik7DQogICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPGFyci5sZW5ndGg7IGkrKyl7DQogICAgICAgICAgICAgICAgICAgICAgaWYoYXJyW2ldID09ICIiIHx8IGFycltpXSA9PSBudWxsIHx8IHR5cGVvZihhcnJbaV0pID09ICJ1bmRlZmluZWQiKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGk9IGktMTsNCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYXJyLmZvckVhY2godiA9PnsNCiAgICAgICAgICAgICAgICAgICAgICBxdWVyeXMucHVzaCh7DQogICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eToga2V5LA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHYsDQogICAgICAgICAgICAgICAgICAgICAgICBncm91cDogIm1haW4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBvcGVyYXRpb25NYXBba2V5XSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uOiAiQU5EIg0KICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgcXVlcnlzLnB1c2goew0KICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBrZXksDQogICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VhcmNoRm9ybVtrZXldLA0KICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOiAibWFpbiIsDQogICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBvcGVyYXRpb25NYXBba2V5XSwNCiAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvbjogIkFORCINCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIHF1ZXJ5RmlsdGVyID0geyBwYWdlQmVhbjogdGhpcy5wYWdpbmF0aW9uLCBxdWVyeXMgfTsNCiAgICAgICAgICAgICAgcGFyYW1zLnBhZ2luYXRpb24gPSBxdWVyeUZpbHRlcjsNCiAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtczsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9LA0KICAgICAgICAgIC8v6I635Y+W5p+l6K+i5p2h5Lu257G75Z6LDQogICAgICAgICAgZ2V0U2VhcmNoSXRlbXMoKSB7DQogICAgICAgICAgICBsZXQgc2VhcmNoSXRlbXMgPSAkKCIuc2VhcmNoLWl0ZW0iKTsNCiAgICAgICAgICAgIGxldCBvcGVyYXRpb25NYXAgPSB7fTsvL+afpeivouadoeS7tuexu+Weiw0KICAgICAgICAgICAgbGV0IG9wZXJhdGlvblR5cGUgPSB7DQogICAgICAgICAgICAgIExLOiAiTElLRSIsDQogICAgICAgICAgICAgIEVROiAiRVFVQUwiLA0KICAgICAgICAgICAgICBiZXR3ZWVuOiAiQkVUV0VFTiIsDQogICAgICAgICAgICAgIExGSzogIkxFRlRfTElLRSIsDQogICAgICAgICAgICAgIFJISzogIlJJR0hUX0xJS0UiLA0KICAgICAgICAgICAgICBORTogIk5PVF9FUVVBTCIsDQogICAgICAgICAgICAgIExUOiAiTEVTUyIsDQogICAgICAgICAgICAgIExFOiAiTEVTU19FUVVBTCIsDQogICAgICAgICAgICAgIEdUOiAiR1JFQVQiLA0KICAgICAgICAgICAgICBHRTogIkdSRUFUX0VRVUFMIg0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGlmIChzZWFyY2hJdGVtcykgew0KICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlYXJjaEl0ZW1zLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgdmFyIG9wZXJhdGlvbiA9ICI9IjsNCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mICQoc2VhcmNoSXRlbXNbaV0pLmF0dHIoImh0LXF1ZXJ5IikgIT0gInVuZGVmaW5lZCIpIHsNCiAgICAgICAgICAgICAgICAgIC8v5p+l6K+i5p2h5Lu257G75Z6LDQogICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSAkKHNlYXJjaEl0ZW1zW2ldKS5hdHRyKCJvcGVyYXRpb24iKTsNCiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk1hcFskKHNlYXJjaEl0ZW1zW2ldKS5hdHRyKCJodC1xdWVyeSIpXSA9DQogICAgICAgICAgICAgICAgICAgIHR5cGVvZiBvcGVyYXRpb25UeXBlW29wZXJhdGlvbl0gIT0gInVuZGVmaW5lZCINCiAgICAgICAgICAgICAgICAgICAgICA/IG9wZXJhdGlvblR5cGVbb3BlcmF0aW9uXQ0KICAgICAgICAgICAgICAgICAgICAgIDogb3BlcmF0aW9uOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoDQogICAgICAgICAgICAgICAgICB0eXBlb2YgJChzZWFyY2hJdGVtc1tpXSkNCiAgICAgICAgICAgICAgICAgICAgLmNoaWxkcmVuKCkNCiAgICAgICAgICAgICAgICAgICAgLmF0dHIoImh0LXF1ZXJ5IikgIT0gInVuZGVmaW5lZCINCiAgICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICAgIC8v5p+l6K+i5p2h5Lu257G75Z6LDQogICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSAkKHNlYXJjaEl0ZW1zW2ldKQ0KICAgICAgICAgICAgICAgICAgICAuY2hpbGRyZW4oKQ0KICAgICAgICAgICAgICAgICAgICAuYXR0cigib3BlcmF0aW9uIik7DQogICAgICAgICAgICAgICAgICBvcGVyYXRpb25NYXBbDQogICAgICAgICAgICAgICAgICAgICQoc2VhcmNoSXRlbXNbaV0pDQogICAgICAgICAgICAgICAgICAgICAgLmNoaWxkcmVuKCkNCiAgICAgICAgICAgICAgICAgICAgICAuYXR0cigiaHQtcXVlcnkiKQ0KICAgICAgICAgICAgICAgICAgXSA9DQogICAgICAgICAgICAgICAgICAgIHR5cGVvZiBvcGVyYXRpb25UeXBlW29wZXJhdGlvbl0gIT0gInVuZGVmaW5lZCINCiAgICAgICAgICAgICAgICAgICAgICA/IG9wZXJhdGlvblR5cGVbb3BlcmF0aW9uXQ0KICAgICAgICAgICAgICAgICAgICAgIDogb3BlcmF0aW9uOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk1hcDsNCiAgICAgICAgICB9LA0KICAgICAgICAgIC8v6I635Y+W5p+l6K+i5p2h5Lu25a2X5q61DQogICAgICAgICAgZ2V0RmllbGRRdWVyeSgpIHsNCiAgICAgICAgICAgIGxldCBzZWFyY2hJdGVtcyA9ICQoIi5zZWFyY2gtaXRlbSIpOw0KICAgICAgICAgICAgbGV0IGZpZWxkUXVlcnlNYXAgPSB7fTsvL+afpeivouadoeS7tuWtl+autQ0KDQogICAgICAgICAgICBpZiAoc2VhcmNoSXRlbXMpIHsNCiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWFyY2hJdGVtcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgJChzZWFyY2hJdGVtc1tpXSkuYXR0cigiaHQtcXVlcnkiKSAhPSAidW5kZWZpbmVkIikgew0KICAgICAgICAgICAgICAgICAgLy/mn6Xor6LmnaHku7blrZfmrrUNCiAgICAgICAgICAgICAgICAgIGZpZWxkUXVlcnlNYXBbJChzZWFyY2hJdGVtc1tpXSkuYXR0cigiaHQtcXVlcnkiKV0gPSAkKHNlYXJjaEl0ZW1zW2ldKS5hdHRyKCJmaWVsZC1xdWVyeSIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoDQogICAgICAgICAgICAgICAgICB0eXBlb2YgJChzZWFyY2hJdGVtc1tpXSkNCiAgICAgICAgICAgICAgICAgICAgLmNoaWxkcmVuKCkNCiAgICAgICAgICAgICAgICAgICAgLmF0dHIoImh0LXF1ZXJ5IikgIT0gInVuZGVmaW5lZCINCiAgICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICAgIC8v5p+l6K+i5p2h5Lu25a2X5q61DQogICAgICAgICAgICAgICAgICBmaWVsZFF1ZXJ5TWFwWyQoc2VhcmNoSXRlbXNbaV0pLmNoaWxkcmVuKCkuYXR0cigiaHQtcXVlcnkiKV0gPSAkKHNlYXJjaEl0ZW1zW2ldKS5jaGlsZHJlbigpLmF0dHIoImZpZWxkLXF1ZXJ5Iik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmllbGRRdWVyeU1hcDsNCiAgICAgICAgICB9LA0KICAgICAgICAgIC8v6I635Y+W54m55q6K5p+l6K+i5oOF5Ya177yI6Ieq5a6a5LmJ5a+56K+d5qGG77yJDQogICAgICAgICAgZ2V0U3BlY2lhbE1hcCgpIHsNCiAgICAgICAgICAgIGxldCBzZWFyY2hJdGVtcyA9ICQoIi5zZWFyY2gtaXRlbSIpOw0KICAgICAgICAgICAgbGV0IGZpZWxkUXVlcnlNYXAgPSB7fTsvL+afpeivouadoeS7tuWtl+autQ0KDQogICAgICAgICAgICBpZiAoc2VhcmNoSXRlbXMpIHsNCiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWFyY2hJdGVtcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgJChzZWFyY2hJdGVtc1tpXSkuYXR0cigiaHQtcXVlcnkiKSAhPSAidW5kZWZpbmVkIikgew0KICAgICAgICAgICAgICAgICAgLy/mn6Xor6LmnaHku7blrZfmrrUNCiAgICAgICAgICAgICAgICAgIGZpZWxkUXVlcnlNYXBbJChzZWFyY2hJdGVtc1tpXSkuYXR0cigiaHQtcXVlcnkiKV0gPQ0KICAgICAgICAgICAgICAgICAgICB0eXBlb2YgJChzZWFyY2hJdGVtc1tpXSkuYXR0cigic3BlY2lhbC1xdWVyeSIpICE9ICJ1bmRlZmluZWQiDQogICAgICAgICAgICAgICAgICAgICAgPyB0cnVlDQogICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKA0KICAgICAgICAgICAgICAgICAgdHlwZW9mICQoc2VhcmNoSXRlbXNbaV0pDQogICAgICAgICAgICAgICAgICAgIC5jaGlsZHJlbigpDQogICAgICAgICAgICAgICAgICAgIC5hdHRyKCJodC1xdWVyeSIpICE9ICJ1bmRlZmluZWQiDQogICAgICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgICAgICAvL+afpeivouadoeS7tuWtl+autQ0KICAgICAgICAgICAgICAgICAgZmllbGRRdWVyeU1hcFskKHNlYXJjaEl0ZW1zW2ldKS5jaGlsZHJlbigpLmF0dHIoImh0LXF1ZXJ5IildID0NCiAgICAgICAgICAgICAgICAgICAgdHlwZW9mICQoc2VhcmNoSXRlbXNbaV0pLmNoaWxkcmVuKCkuYXR0cigic3BlY2lhbC1xdWVyeSIpICE9ICJ1bmRlZmluZWQiDQogICAgICAgICAgICAgICAgICAgICAgPyB0cnVlDQogICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmaWVsZFF1ZXJ5TWFwOw0KICAgICAgICAgIH0sDQogICAgICAgICAgZ2V0Q29uZGl0aW9uUXVlcnkoKSB7DQogICAgICAgICAgICBsZXQgc2VhcmNoQWxsID0gJCgiLnNlYXJjaC1xdWVyeSIpOw0KICAgICAgICAgICAgbGV0IHZhbHVlcyA9ICIiOw0KICAgICAgICAgICAgbGV0IHF1ZXJ5cyA9IFtdOyAvL+afpeivouadoeS7tg0KICAgICAgICAgICAgbGV0IHF1ZXJ5RmlsdGVyID0ge307DQogICAgICAgICAgICBsZXQgcGFnZUJlYW4gPSB7IHBhZ2VCZWFuOiB0aGlzLnBhZ2luYXRpb24gfTsNCiAgICAgICAgICAgIGxldCBwYXJhbXMgPSB7IHNxbEFsaWFzOiB0aGlzLnNxbEFsaWFzLCBhbGlhczogdGhpcy5hbGlhcyB9Ow0KICAgICAgICAgICAgcGFyYW1zLnBhZ2luYXRpb24gPSBwYWdlQmVhbjsNCiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5Rm9ybS5xdWVyeURhdGEgPT0gIiIpIHsNCiAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtczsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIGlmICgNCiAgICAgICAgICAgICAgICB0eXBlb2YgJCgkKHNlYXJjaEFsbFswXSkuY2hpbGRyZW4oKVswXSkuYXR0cigNCiAgICAgICAgICAgICAgICAgICJodC1xdWljay1zZWFyY2giDQogICAgICAgICAgICAgICAgKSAhPSAidW5kZWZpbmVkIg0KICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICB2YWx1ZXMgPSAkKCQoc2VhcmNoQWxsWzBdKS5jaGlsZHJlbigpWzBdKS5hdHRyKA0KICAgICAgICAgICAgICAgICAgImh0LXF1aWNrLXNlYXJjaCINCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgIHZhciBhcnIgPSB2YWx1ZXMuc3BsaXQoIiwiKTsNCiAgICAgICAgICAgICAgICBmb3IgKGxldCB2YWx1ZSBvZiBhcnIpIHsNCiAgICAgICAgICAgICAgICAgIHF1ZXJ5cy5wdXNoKHsNCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IHZhbHVlLA0KICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5xdWVyeUZvcm0ucXVlcnlEYXRhLA0KICAgICAgICAgICAgICAgICAgICBncm91cDogIm1haW4iLA0KICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb246ICJMSUtFIiwNCiAgICAgICAgICAgICAgICAgICAgcmVsYXRpb246ICJPUiINCiAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcXVlcnlGaWx0ZXIgPSB7IHBhZ2VCZWFuOiB0aGlzLnBhZ2luYXRpb24sIHF1ZXJ5cyB9Ow0KICAgICAgICAgICAgcGFyYW1zLnBhZ2luYXRpb24gPSBxdWVyeUZpbHRlcjsNCiAgICAgICAgICAgIHJldHVybiBwYXJhbXM7DQogICAgICAgICAgfSwNCiAgICAgICAgICAvL+aJk+W8gOmrmOe6p+ajgOe0og0KICAgICAgICAgIGFkdmFuY2VkKCkgew0KICAgICAgICAgICAgdGhpcy5mb3JtVHlwZSA9ICF0aGlzLmZvcm1UeXBlOw0KICAgICAgICAgICAgaWYgKHRoaXMuZm9ybVR5cGUpIHsNCiAgICAgICAgICAgICAgdGhpcy5pbmNvbnMgPSAiZWwtaWNvbi1hcnJvdy11cCI7DQogICAgICAgICAgICAgIHRoaXMucXVlcnlGb3JtLnF1ZXJ5RGF0YSA9ICIiOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgdGhpcy5pbmNvbnMgPSAiZWwtaWNvbi1hcnJvdy1kb3duIjsNCiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtID0ge307DQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICByZXNldCgpIHsNCiAgICAgICAgICAgIHRoaXMucXVlcnlGb3JtLnF1ZXJ5RGF0YSA9ICIiOw0KICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtID0ge307DQogICAgICAgICAgICB0aGlzLnNlYXJjaCgnZmluZCcpDQogICAgICAgICAgfSwNCiAgICAgICAgICBoYW5kbGVTZWxlY3Rpb25DaGFuZ2UodmFsKSB7DQogICAgICAgICAgICB0aGlzLnRhYmxlRGF0YS5zZWxlY3RSb3dzID0gdmFsOw0KICAgICAgICAgIH0sDQoNCiAgICAgICAgICBzZWxlY3RhYmxlKHJvdywgaW5kZXgpIHsNCiAgICAgICAgICAgIGlmIChyb3cuQkFUQ0hfQ09WRVJfRkxBRyAhPSAiWUVTIiAmJiByb3cuTk9ERUlEID09ICJVc2VyVGFzazE3MSIpIHsNCiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgfSwNCiAgICAgICAgICAvL+eCueWHu+WvvOWHuuaMiemSrg0KICAgICAgICAgIGV4cG9ydHMoKSB7DQogICAgICAgICAgICB0aGlzLmRpYWxvZ0V4cG9ydFZpc2libGUgPSB0cnVlOw0KICAgICAgICAgIH0sDQoNCiAgICAgICAgICBwdW5jaE9yZGVyKCkgew0KICAgICAgICAgICAgdGhpcy4kc3RvcmUNCiAgICAgICAgICAgICAgLmRpc3BhdGNoKCJzdG9yZVByb2Nlc3MvZG93bkxvYWRUb0ZpbGUiLCAiQmF0Y2hrZWlqeW8iKQ0KICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge30pOw0KICAgICAgICAgIH0sDQoNCiAgICAgICAgICBoYW5kbGVSZW1vdmUoZmlsZSwgZmlsZUxpc3QpIHsNCiAgICAgICAgICAgIGNvbnNvbGUubG9nKGZpbGUsIGZpbGVMaXN0KTsNCiAgICAgICAgICB9LA0KICAgICAgICAgIGJlZm9yZUF2YXRhclVwbG9hZChmaWxlKSB7DQogICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBuZXcgQXJyYXkoKTsNCiAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZS5uYW1lLnNwbGl0KCIuIik7DQogICAgICAgICAgICBjb25zdCBleHRlbnNpb24gPSBmaWxlTmFtZVtmaWxlTmFtZS5sZW5ndGggLSAxXSA9PT0gInBkZiI7DQogICAgICAgICAgICBpZiAoIWV4dGVuc2lvbikgew0KICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICBtZXNzYWdlOiAi5LiK5Lyg5qih5p2/5Y+q6IO95pivUERG5qC85byPISIsDQogICAgICAgICAgICAgICAgdHlwZTogIndhcm5pbmciDQogICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAodGhpcy50YWJsZURhdGEuc2VsZWN0Um93cy5sZW5ndGggPT0gMCkgew0KICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICB0eXBlOiAid2FybmluZyIsDQogICAgICAgICAgICAgICAgbWVzc2FnZTogIuivt+mAieaLqeimgeS4iuS8oOmAgeS7mOeKtueahOahiOS7tiINCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgIH0sDQoNCiAgICAgICAgICBvblN1Y2Nlc3NVcGxvYWQocmVzcG9uc2UsIGZpbGUsIGZpbGVMaXMpIHsNCiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygi6YCB5LuY54q25oiQ5YqfIik7DQogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7DQogICAgICAgICAgfSwNCiAgICAgICAgICBoYW5kbGVQcmV2aWV3KGZpbGUpIHsNCiAgICAgICAgICB9LA0KICAgICAgICAgIC8v56Gu5a6a5a+85Ye6DQogICAgICAgICAgc3VibWl0RXhwb3J0KCkgew0KICAgICAgICAgICAgaWYgKCF0aGlzLmV4cG9ydERhdGEgfHwgdGhpcy5leHBvcnREYXRhLmV4cEZpZWxkLmxlbmd0aCA8IDEpIHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgdHlwZTogImluZm8iLA0KICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICLor7fpgInmi6nopoHlr7zlh7rnmoTlrZfmrrXvvIEiDQogICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICBsZXQgZXhwRmllbGQgPSAiIjsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5leHBvcnREYXRhLmV4cEZpZWxkLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgIGlmIChpID4gMCkgew0KICAgICAgICAgICAgICAgIGV4cEZpZWxkICs9ICIsIjsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBleHBGaWVsZCArPSB0aGlzLmV4cG9ydERhdGEuZXhwRmllbGRbaV0uZmllbGROYW1lOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZXhwRmllbGQgPSBCYXNlNjQuZW5jb2RlKGV4cEZpZWxkKS5yZXBsYWNlKC9cKy9nLCIlMkIiKTsNCiAgICAgICAgICAgIGxldCBwYXJhbXMgPSB7IHNxbEFsaWFzOiB0aGlzLnNxbEFsaWFzLCBhbGlhczogdGhpcy5hbGlhcyB9Ow0KICAgICAgICAgICAgbGV0IGRhdGEgPSB7DQogICAgICAgICAgICAgIHNxbEFsaWFzOiB0aGlzLnNxbEFsaWFzLA0KICAgICAgICAgICAgICBhbGlhczogdGhpcy5hbGlhcywNCiAgICAgICAgICAgICAgZ2V0VHlwZTogdGhpcy5leHBvcnREYXRhLmdldFR5cGUsDQogICAgICAgICAgICAgIGV4cEZpZWxkOiBleHBGaWVsZA0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGRhdGEucXVlcnkgPSB0aGlzLmdldFF1ZXJ5RmlsdGVyKCkucGFnaW5hdGlvbjsNCiAgICAgICAgICAgIGxldCBsb2FkaW5nSW5zdGFuY2UgPSBMb2FkaW5nLnNlcnZpY2UoeyBmdWxsc2NyZWVuOiB0cnVlIH0pOyAvL+W8gOWniw0KICAgICAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImZvcm0vcXVlcnlTcWxWaWV3RXhwb3J0IiwgZGF0YSkudGhlbigoKSA9PiB7DQogICAgICAgICAgICAgIGxvYWRpbmdJbnN0YW5jZS5jbG9zZSgpOyAvLyDnu5PmnZ8NCiAgICAgICAgICAgICAgdGhpcy5kaWFsb2dFeHBvcnRWaXNpYmxlID0gZmFsc2U7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9LA0KDQogICAgICAgICAgLy/lj5bmtojlr7zlh7oNCiAgICAgICAgICBleHBvcnRDYW5jZWwoKSB7DQogICAgICAgICAgICB0aGlzLmRpYWxvZ0V4cG9ydFZpc2libGUgPSBmYWxzZTsNCiAgICAgICAgICAgIHRoaXMuZXhwb3J0RGF0YS5leHBGaWVsZCA9IFtdOw0KICAgICAgICAgIH0sDQoNCiAgICAgICAgICBoYW5kbGVFeHBvcnRTZWxlY3Rpb25DaGFuZ2UodmFsKSB7DQogICAgICAgICAgICB0aGlzLmV4cG9ydERhdGEuZXhwRmllbGQgPSBbXTsNCiAgICAgICAgICAgIGlmICh2YWwpIHsNCiAgICAgICAgICAgICAgdGhpcy5leHBvcnREYXRhLmV4cEZpZWxkID0gdmFsOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQoNCiAgICAgICAgICAvL+WFqOmAiQ0KICAgICAgICAgIGhhbmRsZUV4cG9ydFNlbGVjdEFsbCgpIHsNCiAgICAgICAgICAgIHRoaXMuZXhwb3J0RGF0YS5leHBGaWVsZCA9IHRoaXMuZGlzcGxheUZpZWxkczsNCiAgICAgICAgICB9LA0KDQogICAgICAgICAgLy/mjpLluo8NCiAgICAgICAgICBzb3J0KGluZGV4LCB0eXBlKSB7DQogICAgICAgICAgICBpZiAoInVwIiA9PSB0eXBlKSB7DQogICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkgew0KICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICAgICAgbWVzc2FnZTogIuW3sue7j+aYr+WIl+ihqOS4reesrOS4gOS9jSIsDQogICAgICAgICAgICAgICAgICB0eXBlOiAid2FybmluZyINCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBsZXQgdGVtcCA9IHRoaXMuZGlzcGxheUZpZWxkc1tpbmRleCAtIDFdOw0KICAgICAgICAgICAgICAgIFZ1ZS5zZXQoDQogICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlGaWVsZHMsDQogICAgICAgICAgICAgICAgICBpbmRleCAtIDEsDQogICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlGaWVsZHNbaW5kZXhdDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICBWdWUuc2V0KHRoaXMuZGlzcGxheUZpZWxkcywgaW5kZXgsIHRlbXApOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuZGlzcGxheUZpZWxkcy5sZW5ndGggLSAxKSB7DQogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAi5bey57uP5piv5YiX6KGo5Lit5pyA5ZCO5LiA5L2NIiwNCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJ3YXJuaW5nIg0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRoaXMuaXNUcmFuc2l0aW9uID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICBsZXQgaSA9IHRoaXMuZGlzcGxheUZpZWxkc1tpbmRleCArIDFdOw0KICAgICAgICAgICAgICAgIFZ1ZS5zZXQoDQogICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlGaWVsZHMsDQogICAgICAgICAgICAgICAgICBpbmRleCArIDEsDQogICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlGaWVsZHNbaW5kZXhdDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICBWdWUuc2V0KHRoaXMuZGlzcGxheUZpZWxkcywgaW5kZXgsIGkpOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCg0KICAgICAgICAgIGdldFN1YkVudHNCeUZvcm1LZXkocmVmSWQpIHsNCiAgICAgICAgICAgIGxldCBfbWUgPSB0aGlzOw0KICAgICAgICAgICAgX21lLnRhYnMgPSBbXTsNCiAgICAgICAgICAgIGlmICghX21lLmVudHMgfHwgX21lLmVudHMubGVuZ3RoIDwgMSkgew0KICAgICAgICAgICAgICB0aGlzLiRzdG9yZQ0KICAgICAgICAgICAgICAgIC5kaXNwYXRjaCgiZm9ybS9nZXRTdWJFbnRzQnlGb3JtS2V5IiwgdGhpcy50ZW1wbGF0ZUluZm8uYWxpYXMpDQogICAgICAgICAgICAgICAgLnRoZW4oZW50cyA9PiB7DQogICAgICAgICAgICAgICAgICBfbWUuZW50cyA9IGVudHM7DQogICAgICAgICAgICAgICAgICB0aGlzLmdldFN1YkRhdGEoX21lLCByZWZJZCk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICB0aGlzLmdldFN1YkRhdGEoX21lLCByZWZJZCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICBnZXRTdW1tYXJpZXMocGFyYW0pIHsNCiAgICAgICAgICAgIGxldCBfc3VtbWFyeVR5cGVNYXAgPSB0aGlzLnN1bW1hcnlUeXBlTWFwOw0KICAgICAgICAgICAgY29uc3QgeyBjb2x1bW5zLCBkYXRhIH0gPSBwYXJhbTsNCiAgICAgICAgICAgIGNvbnN0IHN1bXMgPSBbXTsNCiAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4gew0KICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHsNCiAgICAgICAgICAgICAgICBzdW1zW2luZGV4XSA9ICLlkIjorqEiOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAoDQogICAgICAgICAgICAgICAgX3N1bW1hcnlUeXBlTWFwW2NvbHVtbi5wcm9wZXJ0eV0gJiYNCiAgICAgICAgICAgICAgICBfc3VtbWFyeVR5cGVNYXBbY29sdW1uLnByb3BlcnR5XSA9PSAic3VtIg0KICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBkYXRhLm1hcChpdGVtID0+IE51bWJlcihpdGVtW2NvbHVtbi5wcm9wZXJ0eV0pKTsNCiAgICAgICAgICAgICAgICBpZiAoIXZhbHVlcy5ldmVyeSh2YWx1ZSA9PiBpc05hTih2YWx1ZSkpKSB7DQogICAgICAgICAgICAgICAgICBzdW1zW2luZGV4XSA9IHZhbHVlcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBOdW1iZXIoY3Vycik7DQogICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4odmFsdWUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgKyBjdXJyOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9LCAwKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgc3Vtc1tpbmRleF0gPSAiTi9BIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICByZXR1cm4gc3VtczsNCiAgICAgICAgICB9LA0KICAgICAgICAgIGNvbHVtbkZvcm1hdHRlcihyb3csIGNvbHVtbiwgY2VsbFZhbHVlKSB7DQogICAgICAgICAgICBsZXQgZm9ybWF0dGVyID0gdGhpcy5mb3JtYXR0ZXJNYXBbY29sdW1uLnByb3BlcnR5XTsNCiAgICAgICAgICAgIGlmIChmb3JtYXR0ZXIpIHsNCiAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICB2YXIgc2NyaXB0ID0NCiAgICAgICAgICAgICAgICAgICJ2YXIgZm9ybWF0dGVyRnVuY3Rpb24gPSBmdW5jdGlvbihyb3csY29sdW1uLGNlbGxWYWx1ZSl7ICIgKw0KICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyICsNCiAgICAgICAgICAgICAgICAgICJ9OyI7DQogICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGV2YWwoc2NyaXB0ICsgImZvcm1hdHRlckZ1bmN0aW9uKHJvdyxjb2x1bW4sY2VsbFZhbHVlKTsiKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGNlbGxWYWx1ZTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgcmV0dXJuIGNlbGxWYWx1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9LA0KICAgICAgICAgIGRhdGVGb3JtYXR0ZXIocm93LGNvbHVtbixjZWxsVmFsdWUpew0KICAgICAgICAgICAgICBpZihjZWxsVmFsdWUpew0KICAgICAgICAgICAgICAgIHJldHVybiBjZWxsVmFsdWUucmVwbGFjZSgiLjAiLCIiKTsNCiAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgcmV0dXJuIGNlbGxWYWx1ZTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgZ2V0QWxhcm1Db2xvcihmaWVsZCwgY2VsbFZhbHVlKSB7DQogICAgICAgICAgICBsZXQgYWxhcm1TZXR0aW5nID0gdGhpcy5hbGFybVNldHRpbmdNYXBbZmllbGRdOw0KICAgICAgICAgICAgbGV0IHR5cGUgPSAiIjsNCiAgICAgICAgICAgIHRoaXMuZGlzcGxheUZpZWxkcy5mb3JFYWNoKGl0ZW0gPT4gew0KICAgICAgICAgICAgICBpZiAoaXRlbS5maWVsZE5hbWUgPT09IGZpZWxkKXsNCiAgICAgICAgICAgICAgICB0eXBlID0gaXRlbS5kYXRhVHlwZTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIGlmIChhbGFybVNldHRpbmcpIHsNCiAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICBsZXQgYWxhcm1TZXR0aW5nSnNvbiA9IHV0aWxzLnBhcnNlVG9Kc29uKGFsYXJtU2V0dGluZyk7DQogICAgICAgICAgICAgICAgbGV0IGFsYXJtU2NyaXB0ID0gIiI7DQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGFybVNldHRpbmdKc29uLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgICBsZXQgYWxhcm0gPSBhbGFybVNldHRpbmdKc29uW2ldOw0KICAgICAgICAgICAgICAgICAgbGV0IGNvbmRpdGlvbiA9IGFsYXJtLmNvbmRpdGlvbjsNCiAgICAgICAgICAgICAgICAgIGxldCBjb25kaXRpb25TdHIgPSAiIjsNCiAgICAgICAgICAgICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgY29uZGl0aW9uLmxlbmd0aDsgbSsrKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChtID4gMCkgew0KICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblN0ciArPSAiICYmICI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGU9PT0nbnVtYmVyJyB8fCB0eXBlID09PSdiaWdpbnQnIHx8IHR5cGUgPT09ICdpbnQnKSB7DQogICAgICAgICAgICAgICAgICAgICAgaWYoY29uZGl0aW9uW21dLm9wPT0naW5kZXhPZicgJiYgY29uZGl0aW9uW21dLnZhbCl7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TdHIgPSBjb25kaXRpb25TdHIgKyAiJyIgKyBjZWxsVmFsdWUgKyAiJy5pbmRleE9mKCciICsgY29uZGl0aW9uW21dLnZhbCArICInKSE9LTEiOw0KICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGNvbmRpdGlvblttXS5vcD09J25vdEluZGV4T2YnKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TdHIgPSBjb25kaXRpb25TdHIgKyAiJyIgKyBjZWxsVmFsdWUgKyAiJy5pbmRleE9mKCciICsgY29uZGl0aW9uW21dLnZhbCArICInKT09LTEiOw0KICAgICAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU3RyID0NCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblN0ciArDQogICAgICAgICAgICAgICAgICAgICAgICBjZWxsVmFsdWUgKw0KICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uW21dLm9wICsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblttXS52YWw7DQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbmRpdGlvblttXS5vcD09J2luZGV4T2YnICYmIGNvbmRpdGlvblttXS52YWwpew0KICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU3RyID0gY29uZGl0aW9uU3RyICsgIiciICsgY2VsbFZhbHVlICsgIicuaW5kZXhPZignIiArIGNvbmRpdGlvblttXS52YWwgKyAiJykhPS0xIjsNCiAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihjb25kaXRpb25bbV0ub3A9PSdub3RJbmRleE9mJyl7DQogICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU3RyID0gY29uZGl0aW9uU3RyICsgIiciICsgY2VsbFZhbHVlICsgIicuaW5kZXhPZignIiArIGNvbmRpdGlvblttXS52YWwgKyAiJyk9PS0xIjsNCiAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TdHIgPQ0KICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU3RyICsNCiAgICAgICAgICAgICAgICAgICAgICAgICInIiArDQogICAgICAgICAgICAgICAgICAgICAgICBjZWxsVmFsdWUgKw0KICAgICAgICAgICAgICAgICAgICAgICAgIiciICsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblttXS5vcCArDQogICAgICAgICAgICAgICAgICAgICAgICAiJyIgKw0KICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uW21dLnZhbCArDQogICAgICAgICAgICAgICAgICAgICAgICAiJyI7DQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIC8vY29uZGl0aW9uU3RyID0gY29uZGl0aW9uU3RyK2NlbGxWYWx1ZStjb25kaXRpb25bbV0ub3ArY29uZGl0aW9uW21dLnZhbDsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIGlmIChpID4gMCkgew0KICAgICAgICAgICAgICAgICAgICBhbGFybVNjcmlwdCArPSAiIGVsc2UgIjsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIGxldCBjb2xvclN0ciA9ICJjb2xvcjoiICsgYWxhcm0uY29sb3IgKyAiIjsNCiAgICAgICAgICAgICAgICAgIGFsYXJtU2NyaXB0ID0NCiAgICAgICAgICAgICAgICAgICAgYWxhcm1TY3JpcHQgKw0KICAgICAgICAgICAgICAgICAgICAiaWYoIiArDQogICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblN0ciArDQogICAgICAgICAgICAgICAgICAgICIpe3JldHVybiAnIiArDQogICAgICAgICAgICAgICAgICAgIGNvbG9yU3RyICsNCiAgICAgICAgICAgICAgICAgICAgIic7fSI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChhbGFybVNjcmlwdCkgew0KICAgICAgICAgICAgICAgICAgYWxhcm1TY3JpcHQgKz0gJ2Vsc2V7IHJldHVybiAiIjt9JzsNCiAgICAgICAgICAgICAgICAgIHZhciBzY3JpcHQgPQ0KICAgICAgICAgICAgICAgICAgICAidmFyIGFsYXJtRnVuY3Rpb24gPSBmdW5jdGlvbigpeyAiICsgYWxhcm1TY3JpcHQgKyAifTsiOw0KICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGV2YWwoc2NyaXB0ICsgImFsYXJtRnVuY3Rpb24oKTsiKTsNCiAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgIHJldHVybiAiIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9LA0KICAgICAgICAgIHN1bW1hcnkobWV0aG9kLGZpZWxkLGRlY2ltYWwpew0KICAgICAgICAgICAgbGV0IGxpc3QgPSB0aGlzLnJvd3MuZmlsdGVyKGl0ZW0gPT4gaXRlbVtmaWVsZF0hPT11bmRlZmluZWQgJiYgaXRlbVtmaWVsZF0hPT0iIikubWFwKGl0ZW0gPT4gbmV3IE51bWJlcihpdGVtW2ZpZWxkXSkpOw0KICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gImNvdW50Iil7DQogICAgICAgICAgICAgIHJldHVybiBsaXN0Lmxlbmd0aDsNCiAgICAgICAgICAgIH1lbHNlIGlmIChtZXRob2QgPT09ICJzdW0iKXsNCiAgICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVkdWNlKChhLGIpID0+IGEgKyBiKS50b0ZpeGVkKGRlY2ltYWwpOw0KICAgICAgICAgICAgfWVsc2UgaWYgKG1ldGhvZCA9PT0gIm1pbiIpew0KICAgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oLi4ubGlzdCkudG9GaXhlZChkZWNpbWFsKTsNCiAgICAgICAgICAgIH1lbHNlIGlmIChtZXRob2QgPT09ICJtYXgiKXsNCiAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLmxpc3QpLnRvRml4ZWQoZGVjaW1hbCk7DQogICAgICAgICAgICB9ZWxzZSBpZiAobWV0aG9kID09PSAiYXZnIil7DQogICAgICAgICAgICAgIHJldHVybiAobGlzdC5yZWR1Y2UoKGEsYikgPT4gYSArIGIpIC8gbGlzdC5sZW5ndGgpLnRvRml4ZWQoZGVjaW1hbCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICBzaG93U2VhcmNoUGFuZSgpIHsNCiAgICAgICAgICAgIHJldHVybiB0cnVlDQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9KTsNCiAgICB9DQogIH0NCn07DQo="},null]}