{"remainingRequest":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\bzzgj-fvue\\src\\components\\querySql\\DynamicView.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\src\\components\\querySql\\DynamicView.vue","mtime":1705895419329},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KDQppbXBvcnQge21hcFN0YXRlLCBtYXBBY3Rpb25zfSBmcm9tICd2dWV4Jw0KaW1wb3J0IHtNZXNzYWdlfSBmcm9tICdlbGVtZW50LXVpJw0KaW1wb3J0IHtMb2FkaW5nfSBmcm9tICdlbGVtZW50LXVpJw0KaW1wb3J0IEh0Q2hlY2tib3ggZnJvbSAnQC9jb21wb25lbnRzL2NvbnRyb2wvSHRDaGVja2JveC52dWUnDQppbXBvcnQgSHREaWFsb2cgZnJvbSAnQC9jb21wb25lbnRzL2NvbnRyb2wvSHREaWFsb2cudnVlJw0KaW1wb3J0IEh0RGlhbG9nQnRuIGZyb20gJ0AvY29tcG9uZW50cy9jb250cm9sL2h0RGlhbG9nQnRuLnZ1ZScNCmltcG9ydCB1dGlscyBmcm9tICdAL3V0aWxzLmpzJw0KaW1wb3J0IHJlcSBmcm9tICdAL3JlcXVlc3QuanMnDQppbXBvcnQge0Jhc2U2NH0gZnJvbSAnanMtYmFzZTY0Jw0KaW1wb3J0IFZ1ZSBmcm9tICd2dWUnDQoNCmV4cG9ydCBkZWZhdWx0IHsNCiAgbmFtZTogJ2R5bmFtaWMtdmlldycsDQogIHByb3BzOiB7DQogICAgc2luZ2xlOiBTdHJpbmcsDQogICAgc3FsQWxpYXM6IFN0cmluZywNCiAgICBhbGlhczogU3RyaW5nLA0KICAgIGh0bWw6IFN0cmluZywNCiAgICBxdWVyeVZpZXc6IE9iamVjdA0KICB9LA0KICBjcmVhdGVkKCkgew0KICAgIHRoaXMuaW5pdCgpDQogIH0sDQogIHdhdGNoOiB7DQogICAgaHRtbDogZnVuY3Rpb24obmV3VmFsKSB7DQogICAgICBpZiAobmV3VmFsKSB7DQogICAgICAgIHRoaXMuaW5pdCgpDQogICAgICB9DQogICAgfQ0KICB9LA0KICBtZXRob2RzOiB7DQogICAgaW5pdCgpIHsNCiAgICAgIFZ1ZS5jb21wb25lbnQoJ2h0LXJ1bnRpbWUtdGVtcGxhdGUnLCB7DQogICAgICAgIHByb3BzOiB7DQogICAgICAgICAgc2luZ2xlOiBTdHJpbmcsDQogICAgICAgICAgc3FsQWxpYXM6IFN0cmluZywNCiAgICAgICAgICBhbGlhczogU3RyaW5nLA0KICAgICAgICAgIGh0bWw6IFN0cmluZywNCiAgICAgICAgICBxdWVyeVZpZXc6IE9iamVjdA0KICAgICAgICB9LA0KICAgICAgICB0ZW1wbGF0ZTogdGhpcy5odG1sLA0KICAgICAgICBkYXRhKCkgew0KICAgICAgICAgIHJldHVybiB7DQogICAgICAgICAgICBicG1SdW5UaW1lOiB3aW5kb3cuY29udGV4dC5icG1SdW5UaW1lLA0KICAgICAgICAgICAgZmlsZUxpc3Q6IFtdLA0KICAgICAgICAgICAgdGFibGVEYXRhOiB7c2VsZWN0Um93czogW10sIHF1ZXJ5czogJyd9LA0KICAgICAgICAgICAgZGlhbG9nRXhwb3J0VmlzaWJsZTogZmFsc2UsDQogICAgICAgICAgICBleHBvcnREYXRhOiB7Z2V0VHlwZTogJ2FsbCcsIGV4cEZpZWxkOiBbXX0sDQogICAgICAgICAgICBleHBvcnRTZWxsZWN0aW9uOiBbXSwNCiAgICAgICAgICAgIHNlYXJjaEZvcm06IHt9LA0KICAgICAgICAgICAgZGlzcGxheUZpZWxkczogW10sDQogICAgICAgICAgICBhbGFybVNldHRpbmdNYXA6IHt9LA0KICAgICAgICAgICAgc3VtbWFyeVR5cGVNYXA6IHt9LA0KICAgICAgICAgICAgcXVlcnlGb3JtOiB7DQogICAgICAgICAgICAgIHF1ZXJ5RGF0YTogJycNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICB1cGxvYWRQYXJhbXM6IHtpZDogW119LA0KICAgICAgICAgICAgZm9ybVR5cGU6IGZhbHNlLA0KICAgICAgICAgICAgbGFiZWxQb3NpdGlvbjogJ2xlZnQnLA0KICAgICAgICAgICAgaW5jb25zOiAnZWwtaWNvbi1hcnJvdy1kb3duJywNCiAgICAgICAgICAgIGZvcm1hdHRlck1hcDoge30sDQogICAgICAgICAgICBvcHRpb25zOiB7DQogICAgICAgICAgICAgIGZ1bGxzY3JlZW46IHRydWUsDQogICAgICAgICAgICAgIGxvY2s6IHRydWUNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICB1cGxvYWRFcnJvcjogJy9ydW50aW1lL3Bob3RvRXJyb3JDc3YvdjEvdXBsb2FkRXJyb3JMaXN0JywNCiAgICAgICAgICAgIHVwb2FkUGRmVG9BenVyZToNCiAgICAgICAgICAgICAgd2luZG93LmNvbnRleHQuYnBtUnVuVGltZSArICcvcnVudGltZS9ibG9iL3YxL3Vwb2FkUGRmVG9BenVyZScsDQogICAgICAgICAgICB1cGxvYWRVbnByZXBhcmU6ICcvcnVudGltZS9ibG9iL3YxL3Vwb2FkVG9BenVyZScsDQogICAgICAgICAgICBzdW1tYXJ5U2V0dGluZzogW10sDQogICAgICAgICAgICBhY3RpdmVOYW1lczogWycxJ10NCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgIGNvbXB1dGVkOiBtYXBTdGF0ZSh7DQogICAgICAgICAgcm93czogc3RhdGUgPT4gc3RhdGUuZm9ybS5xdWVyeVNxbFZpZXdSb3dzLA0KICAgICAgICAgIHBhZ2luYXRpb246IHN0YXRlID0+IHN0YXRlLmZvcm0ucXVlcnlTcWxWaWV3UGFnaW5hdGlvbiwNCiAgICAgICAgICB0b3RhbDogc3RhdGUgPT4gc3RhdGUuZm9ybS5xdWVyeVNxbFZpZXdUb3RhbCwNCiAgICAgICAgICB1cGxvYWRIZWFkZXJzOiBzdGF0ZSA9PiB7DQogICAgICAgICAgICByZXR1cm4ge0F1dGhvcml6YXRpb246IGBCZWFyZXIgJHtzdGF0ZS5sb2dpbi5jdXJyZW50VXNlci50b2tlbn1gfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgdXBsb2FkRXJyb3JIdHRwKCkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnBtUnVuVGltZSArIHRoaXMudXBsb2FkRXJyb3INCiAgICAgICAgICB9LA0KICAgICAgICAgIHVwbG9hZFVucHJlcGFyZUh0dHAoKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy5icG1SdW5UaW1lICsgdGhpcy51cGxvYWRVbnByZXBhcmUNCiAgICAgICAgICB9DQogICAgICAgIH0pLA0KICAgICAgICBjb21wb25lbnRzOiB7DQogICAgICAgICAgSHRDaGVja2JveCwNCiAgICAgICAgICBIdERpYWxvZywNCiAgICAgICAgICBIdERpYWxvZ0J0bg0KICAgICAgICB9LA0KICAgICAgICB3YXRjaDogew0KICAgICAgICAgIGZvcm1LZXk6IGZ1bmN0aW9uKG5ld1ZhbCkgew0KICAgICAgICAgICAgaWYgKG5ld1ZhbCkgew0KICAgICAgICAgICAgICB0aGlzLmluaXQoKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgJ3RhYmxlRGF0YS5zZWxlY3RSb3dzJzogZnVuY3Rpb24obmV3VmFsKSB7DQogICAgICAgICAgICBpZiAobmV3VmFsLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgbGV0IG1lXyA9IHRoaXMNCiAgICAgICAgICAgICAgbWVfLnVwbG9hZFBhcmFtcy5pZCA9IFtdDQogICAgICAgICAgICAgIG5ld1ZhbC5mb3JFYWNoKGl0ZW0gPT4gew0KICAgICAgICAgICAgICAgIG1lXy51cGxvYWRQYXJhbXMuaWQucHVzaChpdGVtLklOU1RJRCkNCiAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9LA0KICAgICAgICAgICRyb3V0ZTogJ2luaXQnLA0KICAgICAgICAgIHF1ZXJ5Vmlldzogew0KICAgICAgICAgICAgaGFuZGxlcihuZXdWYWwsIG9sZFZhbCkgew0KICAgICAgICAgICAgICBpZiAobmV3VmFsLnNob3dzKSB7DQogICAgICAgICAgICAgICAgbGV0IGRpc3BsYXlGaWVsZCA9IHV0aWxzLnBhcnNlVG9Kc29uKG5ld1ZhbC5zaG93cykNCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BsYXlGaWVsZC5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgICAgaWYgKGRpc3BsYXlGaWVsZFtpXS5oaWRkZW4gPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlGaWVsZHMucHVzaChkaXNwbGF5RmllbGRbaV0pDQogICAgICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5RmllbGRbaV0uc3VtbWFyeVR5cGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1bW1hcnlUeXBlTWFwW2Rpc3BsYXlGaWVsZFtpXS5maWVsZE5hbWVdID0gZGlzcGxheUZpZWxkW2ldLnN1bW1hcnlUeXBlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5RmllbGRbaV0uZm9ybWF0ZXIpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZXJNYXBbZGlzcGxheUZpZWxkW2ldLmZpZWxkTmFtZV0gPSBkaXNwbGF5RmllbGRbaV0uZm9ybWF0ZXINCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5RmllbGRbaV0uYWxhcm1TZXR0aW5nKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuYWxhcm1TZXR0aW5nTWFwW2Rpc3BsYXlGaWVsZFtpXS5maWVsZE5hbWVdID0gZGlzcGxheUZpZWxkW2ldLmFsYXJtU2V0dGluZw0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAobmV3VmFsLnN1bW1hcnlTZXR0aW5nKSB7DQogICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5U2V0dGluZyA9IEpTT04ucGFyc2UobmV3VmFsLnN1bW1hcnlTZXR0aW5nKQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgaW1tZWRpYXRlOiB0cnVlDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIG1ldGhvZHM6IHsNCiAgICAgICAgICAvL+aJk+WNsA0KICAgICAgICAgIHByaW50TGlzdCgpIHsNCiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByaW50RGF0YScpLmlubmVySFRNTA0KICAgICAgICAgICAgd2luZG93LnByaW50KCkNCiAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpDQogICAgICAgICAgfSwNCiAgICAgICAgICAvL+eUn+aIkOS6jOe7tOeggQ0KDQogICAgICAgICAgLy/ot6/nlLHot7PovawNCiAgICAgICAgICByb3V0ZXJQdXNoKHVybCkgew0KICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2godXJsKQ0KICAgICAgICAgIH0sDQogICAgICAgICAgLy/mn6XnnIvkuI7lpITnkIbmtYHnqIvmjInpkq4NCiAgICAgICAgICBkaXNwb3NlKHJvdykgew0KICAgICAgICAgICAgbGV0IHVybA0KICAgICAgICAgICAgaWYgKHJvdy5UQVNLSUQpIHsNCiAgICAgICAgICAgICAgLy/lrqHmibnku7vliqENCiAgICAgICAgICAgICAgdXJsID0gJy90YXNrLycgKyByb3cuVEFTS0lEDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAvL+afpeeci+a1geeoi+WunuS+iw0KICAgICAgICAgICAgICB1cmwgPSAnL2luc3QvJyArIHJvdy5JTlNUSUQNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHVybCkNCiAgICAgICAgICB9LA0KDQogICAgICAgICAgaGFuZGxlU2l6ZUNoYW5nZTogZnVuY3Rpb24oc2l6ZSkgew0KICAgICAgICAgICAgLy/mr4/pobXkuIvmi4nmmL7npLrmlbDmja4NCiAgICAgICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdmb3JtL3NldFF1ZXJ5U3FsVmlld1BhZ2luYXRpb25TaXplJywgc2l6ZSkNCiAgICAgICAgICAgIHRoaXMuc2VhcmNoKCkNCiAgICAgICAgICB9LA0KICAgICAgICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2U6IGZ1bmN0aW9uKGN1cnJlbnRQYWdlKSB7DQogICAgICAgICAgICAvL+eCueWHu+esrOWHoOmhtQ0KICAgICAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goDQogICAgICAgICAgICAgICdmb3JtL3NldFF1ZXJ5U3FsVmlld1BhZ2luYXRpb25QYWdlTnVtJywNCiAgICAgICAgICAgICAgY3VycmVudFBhZ2UNCiAgICAgICAgICAgICkNCiAgICAgICAgICAgIHRoaXMuc2VhcmNoKCkNCiAgICAgICAgICB9LA0KICAgICAgICAgIC8v5Zue6L2m5p+l6K+iDQogICAgICAgICAgc2VhcmNoRW50ZXJGdW46IGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgICAgIGxldCBrZXlDb2RlID0gd2luZG93LmV2ZW50ID8gZS5rZXlDb2RlIDogZS53aGljaA0KICAgICAgICAgICAgaWYgKGtleUNvZGUgPT0gMTMpIHsNCiAgICAgICAgICAgICAgdGhpcy5zZWFyY2goJ2ZpbmQnKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgc2VhcmNoKHN0cikgew0KICAgICAgICAgICAgY29uc3QgbG9hZGluZyA9IHRoaXMuJGxvYWRpbmcodGhpcy5vcHRpb25zKQ0KICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHt9DQogICAgICAgICAgICBpZiAoc3RyID09ICdmaW5kJykgew0KICAgICAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZm9ybS9zZXRRdWVyeVNxbFZpZXdQYWdpbmF0aW9uUGFnZU51bScsIDEpDQogICAgICAgICAgICB9DQogICAgICAgICAgICAvL+WIpOaWreS4uuWQiOW5tuafpeivoui/mOaYr+WIhuW8gOafpeivog0KICAgICAgICAgICAgaWYgKHRoaXMuZm9ybVR5cGUpIHsNCiAgICAgICAgICAgICAgcGFyYW1zID0gdGhpcy5nZXRRdWVyeUZpbHRlcigpDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAvL+WIpOaWreaYr+WQpumFjee9ruS6huWQiOW5tuafpeivog0KICAgICAgICAgICAgICBpZiAoJCgnLnNlYXJjaC1xdWVyeScpLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgICBwYXJhbXMgPSB0aGlzLmdldENvbmRpdGlvblF1ZXJ5KCkNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBwYXJhbXMgPSB0aGlzLmdldFF1ZXJ5RmlsdGVyKCkNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCQuaXNFbXB0eU9iamVjdCh0aGlzLnNlYXJjaEZvcm0pKSB7DQogICAgICAgICAgICAgIHRoaXMuJHN0b3JlDQogICAgICAgICAgICAgICAgLmRpc3BhdGNoKCdmb3JtL2dldFF1ZXJ5U3FsVmlld0J5UGFnaW5hdGlvbicsIHBhcmFtcykNCiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7DQogICAgICAgICAgICAgICAgICBsb2FkaW5nLmNsb3NlKCkNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgdGhpcy4kc3RvcmUNCiAgICAgICAgICAgICAgICAuZGlzcGF0Y2goJ2Zvcm0vZ2V0UXVlcnlTcWxWaWV3QnlQYWdpbmF0aW9uJywgcGFyYW1zKQ0KICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHsNCiAgICAgICAgICAgICAgICAgIGxvYWRpbmcuY2xvc2UoKQ0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICBnZXRRdWVyeUZpbHRlcigpIHsNCiAgICAgICAgICAgIGxldCBvcGVyYXRpb25NYXAgPSB0aGlzLmdldFNlYXJjaEl0ZW1zKCkvL+afpeivouadoeS7tuexu+Weiw0KICAgICAgICAgICAgbGV0IGZpZWxkUXVlcnlNYXAgPSB0aGlzLmdldEZpZWxkUXVlcnkoKS8v5p+l6K+i5p2h5Lu25a2X5q61DQogICAgICAgICAgICBsZXQgc3BlY2lhbE1hcCA9IHRoaXMuZ2V0U3BlY2lhbE1hcCgpIC8v6I635Y+W54m55q6K5p+l6K+i5oOF5Ya177yI6Ieq5a6a5LmJ5a+56K+d5qGG77yJDQogICAgICAgICAgICBsZXQgcXVlcnlzID0gW10gLy/mn6Xor6LmnaHku7YNCiAgICAgICAgICAgIGxldCBxdWVyeUZpbHRlciA9IHt9DQogICAgICAgICAgICBsZXQgcGFnZUJlYW4gPSB7cGFnZUJlYW46IHRoaXMucGFnaW5hdGlvbn0NCiAgICAgICAgICAgIGxldCBwYXJhbXMgPSB7c3FsQWxpYXM6IHRoaXMuc3FsQWxpYXMsIGFsaWFzOiB0aGlzLmFsaWFzfQ0KICAgICAgICAgICAgcGFyYW1zLnBhZ2luYXRpb24gPSBwYWdlQmVhbg0KICAgICAgICAgICAgaWYgKCQuaXNFbXB0eU9iamVjdCh0aGlzLnNlYXJjaEZvcm0pKSB7DQogICAgICAgICAgICAgIHJldHVybiBwYXJhbXMNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnNlYXJjaEZvcm0pIHsNCiAgICAgICAgICAgICAgICBpZiAoDQogICAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWFyY2hGb3JtW2tleV0gIT0gJ3VuZGVmaW5lZCcgJiYNCiAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybVtrZXldICE9ICcnDQogICAgICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hGb3JtW2tleV0gaW5zdGFuY2VvZiBBcnJheSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW9uTWFwW2tleV0gPT09ICdCRVRXRUVOJykgew0KICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZUFycmF5ID0gW10NCiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VhcmNoRm9ybVtrZXldLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUFycmF5LnB1c2godGhpcy5zZWFyY2hGb3JtW2tleV1baV0pDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5cy5wdXNoKHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBrZXksDQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVBcnJheS5qb2luKCcsJyksDQogICAgICAgICAgICAgICAgICAgICAgICBncm91cDogJ21haW4nLA0KICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBvcGVyYXRpb25NYXBba2V5XSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uOiAnQU5EJw0KICAgICAgICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlYXJjaEZvcm1ba2V5XS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlzLnB1c2goew0KICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eToga2V5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWFyY2hGb3JtW2tleV1baV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOiAnbWFpbicsDQogICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogb3BlcmF0aW9uTWFwW2tleV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uOiAnQU5EJw0KICAgICAgICAgICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hGb3JtW2tleV0uaW5jbHVkZXMoJywnKSAmJiAhc3BlY2lhbE1hcFtrZXldKSB7DQogICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSB0aGlzLnNlYXJjaEZvcm1ba2V5XS5zcGxpdCgnLCcpDQogICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGFycltpXSA9PSAnJyB8fCBhcnJbaV0gPT0gbnVsbCB8fCB0eXBlb2YgKGFycltpXSkgPT0gJ3VuZGVmaW5lZCcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpIC0gMQ0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBhcnIuZm9yRWFjaCh2ID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICBxdWVyeXMucHVzaCh7DQogICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eToga2V5LA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHYsDQogICAgICAgICAgICAgICAgICAgICAgICBncm91cDogJ21haW4nLA0KICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBvcGVyYXRpb25NYXBba2V5XSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uOiAnQU5EJw0KICAgICAgICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBxdWVyeXMucHVzaCh7DQogICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IGtleSwNCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWFyY2hGb3JtW2tleV0sDQogICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6ICdtYWluJywNCiAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb246IG9wZXJhdGlvbk1hcFtrZXldLA0KICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uOiAnQU5EJw0KICAgICAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBxdWVyeUZpbHRlciA9IHtwYWdlQmVhbjogdGhpcy5wYWdpbmF0aW9uLCBxdWVyeXN9DQogICAgICAgICAgICAgIHBhcmFtcy5wYWdpbmF0aW9uID0gcXVlcnlGaWx0ZXINCiAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtcw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgLy/ojrflj5bmn6Xor6LmnaHku7bnsbvlnosNCiAgICAgICAgICBnZXRTZWFyY2hJdGVtcygpIHsNCiAgICAgICAgICAgIGxldCBzZWFyY2hJdGVtcyA9ICQoJy5zZWFyY2gtaXRlbScpDQogICAgICAgICAgICBsZXQgb3BlcmF0aW9uTWFwID0ge30vL+afpeivouadoeS7tuexu+Weiw0KICAgICAgICAgICAgbGV0IG9wZXJhdGlvblR5cGUgPSB7DQogICAgICAgICAgICAgIExLOiAnTElLRScsDQogICAgICAgICAgICAgIEVROiAnRVFVQUwnLA0KICAgICAgICAgICAgICBiZXR3ZWVuOiAnQkVUV0VFTicsDQogICAgICAgICAgICAgIExGSzogJ0xFRlRfTElLRScsDQogICAgICAgICAgICAgIFJISzogJ1JJR0hUX0xJS0UnLA0KICAgICAgICAgICAgICBORTogJ05PVF9FUVVBTCcsDQogICAgICAgICAgICAgIExUOiAnTEVTUycsDQogICAgICAgICAgICAgIExFOiAnTEVTU19FUVVBTCcsDQogICAgICAgICAgICAgIEdUOiAnR1JFQVQnLA0KICAgICAgICAgICAgICBHRTogJ0dSRUFUX0VRVUFMJw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHNlYXJjaEl0ZW1zKSB7DQogICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VhcmNoSXRlbXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgICB2YXIgb3BlcmF0aW9uID0gJz0nDQogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAkKHNlYXJjaEl0ZW1zW2ldKS5hdHRyKCdodC1xdWVyeScpICE9ICd1bmRlZmluZWQnKSB7DQogICAgICAgICAgICAgICAgICAvL+afpeivouadoeS7tuexu+Weiw0KICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gJChzZWFyY2hJdGVtc1tpXSkuYXR0cignb3BlcmF0aW9uJykNCiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk1hcFskKHNlYXJjaEl0ZW1zW2ldKS5hdHRyKCdodC1xdWVyeScpXSA9DQogICAgICAgICAgICAgICAgICAgIHR5cGVvZiBvcGVyYXRpb25UeXBlW29wZXJhdGlvbl0gIT0gJ3VuZGVmaW5lZCcNCiAgICAgICAgICAgICAgICAgICAgICA/IG9wZXJhdGlvblR5cGVbb3BlcmF0aW9uXQ0KICAgICAgICAgICAgICAgICAgICAgIDogb3BlcmF0aW9uDQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICgNCiAgICAgICAgICAgICAgICAgIHR5cGVvZiAkKHNlYXJjaEl0ZW1zW2ldKQ0KICAgICAgICAgICAgICAgICAgICAuY2hpbGRyZW4oKQ0KICAgICAgICAgICAgICAgICAgICAuYXR0cignaHQtcXVlcnknKSAhPSAndW5kZWZpbmVkJw0KICAgICAgICAgICAgICAgICkgew0KICAgICAgICAgICAgICAgICAgLy/mn6Xor6LmnaHku7bnsbvlnosNCiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9ICQoc2VhcmNoSXRlbXNbaV0pDQogICAgICAgICAgICAgICAgICAgIC5jaGlsZHJlbigpDQogICAgICAgICAgICAgICAgICAgIC5hdHRyKCdvcGVyYXRpb24nKQ0KICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTWFwWw0KICAgICAgICAgICAgICAgICAgICAkKHNlYXJjaEl0ZW1zW2ldKQ0KICAgICAgICAgICAgICAgICAgICAgIC5jaGlsZHJlbigpDQogICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2h0LXF1ZXJ5JykNCiAgICAgICAgICAgICAgICAgICAgXSA9DQogICAgICAgICAgICAgICAgICAgIHR5cGVvZiBvcGVyYXRpb25UeXBlW29wZXJhdGlvbl0gIT0gJ3VuZGVmaW5lZCcNCiAgICAgICAgICAgICAgICAgICAgICA/IG9wZXJhdGlvblR5cGVbb3BlcmF0aW9uXQ0KICAgICAgICAgICAgICAgICAgICAgIDogb3BlcmF0aW9uDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uTWFwDQogICAgICAgICAgfSwNCiAgICAgICAgICAvL+iOt+WPluafpeivouadoeS7tuWtl+autQ0KICAgICAgICAgIGdldEZpZWxkUXVlcnkoKSB7DQogICAgICAgICAgICBsZXQgc2VhcmNoSXRlbXMgPSAkKCcuc2VhcmNoLWl0ZW0nKQ0KICAgICAgICAgICAgbGV0IGZpZWxkUXVlcnlNYXAgPSB7fS8v5p+l6K+i5p2h5Lu25a2X5q61DQoNCiAgICAgICAgICAgIGlmIChzZWFyY2hJdGVtcykgew0KICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlYXJjaEl0ZW1zLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAkKHNlYXJjaEl0ZW1zW2ldKS5hdHRyKCdodC1xdWVyeScpICE9ICd1bmRlZmluZWQnKSB7DQogICAgICAgICAgICAgICAgICAvL+afpeivouadoeS7tuWtl+autQ0KICAgICAgICAgICAgICAgICAgZmllbGRRdWVyeU1hcFskKHNlYXJjaEl0ZW1zW2ldKS5hdHRyKCdodC1xdWVyeScpXSA9ICQoc2VhcmNoSXRlbXNbaV0pLmF0dHIoJ2ZpZWxkLXF1ZXJ5JykNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKA0KICAgICAgICAgICAgICAgICAgdHlwZW9mICQoc2VhcmNoSXRlbXNbaV0pDQogICAgICAgICAgICAgICAgICAgIC5jaGlsZHJlbigpDQogICAgICAgICAgICAgICAgICAgIC5hdHRyKCdodC1xdWVyeScpICE9ICd1bmRlZmluZWQnDQogICAgICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgICAgICAvL+afpeivouadoeS7tuWtl+autQ0KICAgICAgICAgICAgICAgICAgZmllbGRRdWVyeU1hcFskKHNlYXJjaEl0ZW1zW2ldKS5jaGlsZHJlbigpLmF0dHIoJ2h0LXF1ZXJ5JyldID0gJChzZWFyY2hJdGVtc1tpXSkuY2hpbGRyZW4oKS5hdHRyKCdmaWVsZC1xdWVyeScpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmllbGRRdWVyeU1hcA0KICAgICAgICAgIH0sDQogICAgICAgICAgLy/ojrflj5bnibnmrormn6Xor6Lmg4XlhrXvvIjoh6rlrprkuYnlr7nor53moYbvvIkNCiAgICAgICAgICBnZXRTcGVjaWFsTWFwKCkgew0KICAgICAgICAgICAgbGV0IHNlYXJjaEl0ZW1zID0gJCgnLnNlYXJjaC1pdGVtJykNCiAgICAgICAgICAgIGxldCBmaWVsZFF1ZXJ5TWFwID0ge30vL+afpeivouadoeS7tuWtl+autQ0KDQogICAgICAgICAgICBpZiAoc2VhcmNoSXRlbXMpIHsNCiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWFyY2hJdGVtcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgJChzZWFyY2hJdGVtc1tpXSkuYXR0cignaHQtcXVlcnknKSAhPSAndW5kZWZpbmVkJykgew0KICAgICAgICAgICAgICAgICAgLy/mn6Xor6LmnaHku7blrZfmrrUNCiAgICAgICAgICAgICAgICAgIGZpZWxkUXVlcnlNYXBbJChzZWFyY2hJdGVtc1tpXSkuYXR0cignaHQtcXVlcnknKV0gPQ0KICAgICAgICAgICAgICAgICAgICB0eXBlb2YgJChzZWFyY2hJdGVtc1tpXSkuYXR0cignc3BlY2lhbC1xdWVyeScpICE9ICd1bmRlZmluZWQnDQogICAgICAgICAgICAgICAgICAgICAgPyB0cnVlDQogICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZQ0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoDQogICAgICAgICAgICAgICAgICB0eXBlb2YgJChzZWFyY2hJdGVtc1tpXSkNCiAgICAgICAgICAgICAgICAgICAgLmNoaWxkcmVuKCkNCiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2h0LXF1ZXJ5JykgIT0gJ3VuZGVmaW5lZCcNCiAgICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICAgIC8v5p+l6K+i5p2h5Lu25a2X5q61DQogICAgICAgICAgICAgICAgICBmaWVsZFF1ZXJ5TWFwWyQoc2VhcmNoSXRlbXNbaV0pLmNoaWxkcmVuKCkuYXR0cignaHQtcXVlcnknKV0gPQ0KICAgICAgICAgICAgICAgICAgICB0eXBlb2YgJChzZWFyY2hJdGVtc1tpXSkuY2hpbGRyZW4oKS5hdHRyKCdzcGVjaWFsLXF1ZXJ5JykgIT0gJ3VuZGVmaW5lZCcNCiAgICAgICAgICAgICAgICAgICAgICA/IHRydWUNCiAgICAgICAgICAgICAgICAgICAgICA6IGZhbHNlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmllbGRRdWVyeU1hcA0KICAgICAgICAgIH0sDQogICAgICAgICAgZ2V0Q29uZGl0aW9uUXVlcnkoKSB7DQogICAgICAgICAgICBsZXQgc2VhcmNoQWxsID0gJCgnLnNlYXJjaC1xdWVyeScpDQogICAgICAgICAgICBsZXQgdmFsdWVzID0gJycNCiAgICAgICAgICAgIGxldCBxdWVyeXMgPSBbXSAvL+afpeivouadoeS7tg0KICAgICAgICAgICAgbGV0IHF1ZXJ5RmlsdGVyID0ge30NCiAgICAgICAgICAgIGxldCBwYWdlQmVhbiA9IHtwYWdlQmVhbjogdGhpcy5wYWdpbmF0aW9ufQ0KICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHtzcWxBbGlhczogdGhpcy5zcWxBbGlhcywgYWxpYXM6IHRoaXMuYWxpYXN9DQogICAgICAgICAgICBwYXJhbXMucGFnaW5hdGlvbiA9IHBhZ2VCZWFuDQogICAgICAgICAgICBpZiAodGhpcy5xdWVyeUZvcm0ucXVlcnlEYXRhID09ICcnKSB7DQogICAgICAgICAgICAgIHJldHVybiBwYXJhbXMNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIGlmICgNCiAgICAgICAgICAgICAgICB0eXBlb2YgJCgkKHNlYXJjaEFsbFswXSkuY2hpbGRyZW4oKVswXSkuYXR0cigNCiAgICAgICAgICAgICAgICAgICdodC1xdWljay1zZWFyY2gnDQogICAgICAgICAgICAgICAgKSAhPSAndW5kZWZpbmVkJw0KICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICB2YWx1ZXMgPSAkKCQoc2VhcmNoQWxsWzBdKS5jaGlsZHJlbigpWzBdKS5hdHRyKA0KICAgICAgICAgICAgICAgICAgJ2h0LXF1aWNrLXNlYXJjaCcNCiAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgdmFyIGFyciA9IHZhbHVlcy5zcGxpdCgnLCcpDQogICAgICAgICAgICAgICAgZm9yIChsZXQgdmFsdWUgb2YgYXJyKSB7DQogICAgICAgICAgICAgICAgICBxdWVyeXMucHVzaCh7DQogICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiB2YWx1ZSwNCiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMucXVlcnlGb3JtLnF1ZXJ5RGF0YSwNCiAgICAgICAgICAgICAgICAgICAgZ3JvdXA6ICdtYWluJywNCiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnTElLRScsDQogICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uOiAnT1InDQogICAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcXVlcnlGaWx0ZXIgPSB7cGFnZUJlYW46IHRoaXMucGFnaW5hdGlvbiwgcXVlcnlzfQ0KICAgICAgICAgICAgcGFyYW1zLnBhZ2luYXRpb24gPSBxdWVyeUZpbHRlcg0KICAgICAgICAgICAgcmV0dXJuIHBhcmFtcw0KICAgICAgICAgIH0sDQogICAgICAgICAgLy/miZPlvIDpq5jnuqfmo4DntKINCiAgICAgICAgICBhZHZhbmNlZCgpIHsNCiAgICAgICAgICAgIHRoaXMuZm9ybVR5cGUgPSAhdGhpcy5mb3JtVHlwZQ0KICAgICAgICAgICAgaWYgKHRoaXMuZm9ybVR5cGUpIHsNCiAgICAgICAgICAgICAgdGhpcy5pbmNvbnMgPSAnZWwtaWNvbi1hcnJvdy11cCcNCiAgICAgICAgICAgICAgdGhpcy5xdWVyeUZvcm0ucXVlcnlEYXRhID0gJycNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHRoaXMuaW5jb25zID0gJ2VsLWljb24tYXJyb3ctZG93bicNCiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtID0ge30NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9LA0KICAgICAgICAgIHJlc2V0KCkgew0KICAgICAgICAgICAgdGhpcy5xdWVyeUZvcm0ucXVlcnlEYXRhID0gJycNCiAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IHt9DQogICAgICAgICAgICB0aGlzLnNlYXJjaCgnZmluZCcpDQogICAgICAgICAgfSwNCiAgICAgICAgICBoYW5kbGVTZWxlY3Rpb25DaGFuZ2UodmFsKSB7DQogICAgICAgICAgICB0aGlzLnRhYmxlRGF0YS5zZWxlY3RSb3dzID0gdmFsDQogICAgICAgICAgfSwNCg0KICAgICAgICAgIHNlbGVjdGFibGUocm93LCBpbmRleCkgew0KICAgICAgICAgICAgaWYgKHJvdy5CQVRDSF9DT1ZFUl9GTEFHICE9ICdZRVMnICYmIHJvdy5OT0RFSUQgPT0gJ1VzZXJUYXNrMTcxJykgew0KICAgICAgICAgICAgICByZXR1cm4gdHJ1ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlDQogICAgICAgICAgfSwNCiAgICAgICAgICAvL+eCueWHu+WvvOWHuuaMiemSrg0KICAgICAgICAgIGV4cG9ydHMoKSB7DQogICAgICAgICAgICB0aGlzLmRpYWxvZ0V4cG9ydFZpc2libGUgPSB0cnVlDQogICAgICAgICAgfSwNCg0KICAgICAgICAgIHB1bmNoT3JkZXIoKSB7DQogICAgICAgICAgICB0aGlzLiRzdG9yZQ0KICAgICAgICAgICAgICAuZGlzcGF0Y2goJ3N0b3JlUHJvY2Vzcy9kb3duTG9hZFRvRmlsZScsICdCYXRjaGtlaWp5bycpDQogICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7DQogICAgICAgICAgICAgIH0pDQogICAgICAgICAgfSwNCg0KICAgICAgICAgIGhhbmRsZVJlbW92ZShmaWxlLCBmaWxlTGlzdCkgew0KICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZSwgZmlsZUxpc3QpDQogICAgICAgICAgfSwNCiAgICAgICAgICBiZWZvcmVBdmF0YXJVcGxvYWQoZmlsZSkgew0KICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gbmV3IEFycmF5KCkNCiAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZS5uYW1lLnNwbGl0KCcuJykNCiAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGZpbGVOYW1lW2ZpbGVOYW1lLmxlbmd0aCAtIDFdID09PSAncGRmJw0KICAgICAgICAgICAgaWYgKCFleHRlbnNpb24pIHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+S4iuS8oOaooeadv+WPquiDveaYr1BERuagvOW8jyEnLA0KICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJw0KICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICByZXR1cm4gZmFsc2UNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0aGlzLnRhYmxlRGF0YS5zZWxlY3RSb3dzLmxlbmd0aCA9PSAwKSB7DQogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywNCiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn6K+36YCJ5oup6KaB5LiK5Lyg6YCB5LuY54q255qE5qGI5Lu2Jw0KICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICByZXR1cm4gZmFsc2UNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiB0cnVlDQogICAgICAgICAgfSwNCg0KICAgICAgICAgIG9uU3VjY2Vzc1VwbG9hZChyZXNwb25zZSwgZmlsZSwgZmlsZUxpcykgew0KICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKCfpgIHku5jnirbmiJDlip8nKQ0KICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpDQogICAgICAgICAgfSwNCiAgICAgICAgICBoYW5kbGVQcmV2aWV3KGZpbGUpIHsNCiAgICAgICAgICB9LA0KICAgICAgICAgIC8v56Gu5a6a5a+85Ye6DQogICAgICAgICAgc3VibWl0RXhwb3J0KCkgew0KICAgICAgICAgICAgaWYgKCF0aGlzLmV4cG9ydERhdGEgfHwgdGhpcy5leHBvcnREYXRhLmV4cEZpZWxkLmxlbmd0aCA8IDEpIHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLA0KICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICfor7fpgInmi6nopoHlr7zlh7rnmoTlrZfmrrXvvIEnDQogICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgIHJldHVybg0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgbGV0IGV4cEZpZWxkID0gJycNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5leHBvcnREYXRhLmV4cEZpZWxkLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgIGlmIChpID4gMCkgew0KICAgICAgICAgICAgICAgIGV4cEZpZWxkICs9ICcsJw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGV4cEZpZWxkICs9IHRoaXMuZXhwb3J0RGF0YS5leHBGaWVsZFtpXS5maWVsZE5hbWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGV4cEZpZWxkID0gQmFzZTY0LmVuY29kZShleHBGaWVsZCkucmVwbGFjZSgvXCsvZywgJyUyQicpDQogICAgICAgICAgICBsZXQgcGFyYW1zID0ge3NxbEFsaWFzOiB0aGlzLnNxbEFsaWFzLCBhbGlhczogdGhpcy5hbGlhc30NCiAgICAgICAgICAgIGxldCBkYXRhID0gew0KICAgICAgICAgICAgICBzcWxBbGlhczogdGhpcy5zcWxBbGlhcywNCiAgICAgICAgICAgICAgYWxpYXM6IHRoaXMuYWxpYXMsDQogICAgICAgICAgICAgIGdldFR5cGU6IHRoaXMuZXhwb3J0RGF0YS5nZXRUeXBlLA0KICAgICAgICAgICAgICBleHBGaWVsZDogZXhwRmllbGQNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGRhdGEucXVlcnkgPSB0aGlzLmdldFF1ZXJ5RmlsdGVyKCkucGFnaW5hdGlvbg0KICAgICAgICAgICAgbGV0IGxvYWRpbmdJbnN0YW5jZSA9IExvYWRpbmcuc2VydmljZSh7ZnVsbHNjcmVlbjogdHJ1ZX0pIC8v5byA5aeLDQogICAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZm9ybS9xdWVyeVNxbFZpZXdFeHBvcnQnLCBkYXRhKS50aGVuKCgpID0+IHsNCiAgICAgICAgICAgICAgbG9hZGluZ0luc3RhbmNlLmNsb3NlKCkgLy8g57uT5p2fDQogICAgICAgICAgICAgIHRoaXMuZGlhbG9nRXhwb3J0VmlzaWJsZSA9IGZhbHNlDQogICAgICAgICAgICB9KQ0KICAgICAgICAgIH0sDQoNCiAgICAgICAgICAvL+WPlua2iOWvvOWHug0KICAgICAgICAgIGV4cG9ydENhbmNlbCgpIHsNCiAgICAgICAgICAgIHRoaXMuZGlhbG9nRXhwb3J0VmlzaWJsZSA9IGZhbHNlDQogICAgICAgICAgICB0aGlzLmV4cG9ydERhdGEuZXhwRmllbGQgPSBbXQ0KICAgICAgICAgIH0sDQoNCiAgICAgICAgICBoYW5kbGVFeHBvcnRTZWxlY3Rpb25DaGFuZ2UodmFsKSB7DQogICAgICAgICAgICB0aGlzLmV4cG9ydERhdGEuZXhwRmllbGQgPSBbXQ0KICAgICAgICAgICAgaWYgKHZhbCkgew0KICAgICAgICAgICAgICB0aGlzLmV4cG9ydERhdGEuZXhwRmllbGQgPSB2YWwNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9LA0KDQogICAgICAgICAgLy/lhajpgIkNCiAgICAgICAgICBoYW5kbGVFeHBvcnRTZWxlY3RBbGwoKSB7DQogICAgICAgICAgICB0aGlzLmV4cG9ydERhdGEuZXhwRmllbGQgPSB0aGlzLmRpc3BsYXlGaWVsZHMNCiAgICAgICAgICB9LA0KDQogICAgICAgICAgLy/mjpLluo8NCiAgICAgICAgICBzb3J0KGluZGV4LCB0eXBlKSB7DQogICAgICAgICAgICBpZiAoJ3VwJyA9PSB0eXBlKSB7DQogICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkgew0KICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+W3sue7j+aYr+WIl+ihqOS4reesrOS4gOS9jScsDQogICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gdGhpcy5kaXNwbGF5RmllbGRzW2luZGV4IC0gMV0NCiAgICAgICAgICAgICAgICBWdWUuc2V0KA0KICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5RmllbGRzLA0KICAgICAgICAgICAgICAgICAgaW5kZXggLSAxLA0KICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5RmllbGRzW2luZGV4XQ0KICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICBWdWUuc2V0KHRoaXMuZGlzcGxheUZpZWxkcywgaW5kZXgsIHRlbXApDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5kaXNwbGF5RmllbGRzLmxlbmd0aCAtIDEpIHsNCiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflt7Lnu4/mmK/liJfooajkuK3mnIDlkI7kuIDkvY0nLA0KICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnDQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0aGlzLmlzVHJhbnNpdGlvbiA9IHRydWUNCiAgICAgICAgICAgICAgICBsZXQgaSA9IHRoaXMuZGlzcGxheUZpZWxkc1tpbmRleCArIDFdDQogICAgICAgICAgICAgICAgVnVlLnNldCgNCiAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheUZpZWxkcywNCiAgICAgICAgICAgICAgICAgIGluZGV4ICsgMSwNCiAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheUZpZWxkc1tpbmRleF0NCiAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgVnVlLnNldCh0aGlzLmRpc3BsYXlGaWVsZHMsIGluZGV4LCBpKQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCg0KICAgICAgICAgIGdldFN1YkVudHNCeUZvcm1LZXkocmVmSWQpIHsNCiAgICAgICAgICAgIGxldCBfbWUgPSB0aGlzDQogICAgICAgICAgICBfbWUudGFicyA9IFtdDQogICAgICAgICAgICBpZiAoIV9tZS5lbnRzIHx8IF9tZS5lbnRzLmxlbmd0aCA8IDEpIHsNCiAgICAgICAgICAgICAgdGhpcy4kc3RvcmUNCiAgICAgICAgICAgICAgICAuZGlzcGF0Y2goJ2Zvcm0vZ2V0U3ViRW50c0J5Rm9ybUtleScsIHRoaXMudGVtcGxhdGVJbmZvLmFsaWFzKQ0KICAgICAgICAgICAgICAgIC50aGVuKGVudHMgPT4gew0KICAgICAgICAgICAgICAgICAgX21lLmVudHMgPSBlbnRzDQogICAgICAgICAgICAgICAgICB0aGlzLmdldFN1YkRhdGEoX21lLCByZWZJZCkNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgdGhpcy5nZXRTdWJEYXRhKF9tZSwgcmVmSWQpDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICBnZXRTdW1tYXJpZXMocGFyYW0pIHsNCiAgICAgICAgICAgIGxldCBfc3VtbWFyeVR5cGVNYXAgPSB0aGlzLnN1bW1hcnlUeXBlTWFwDQogICAgICAgICAgICBjb25zdCB7Y29sdW1ucywgZGF0YX0gPSBwYXJhbQ0KICAgICAgICAgICAgY29uc3Qgc3VtcyA9IFtdDQogICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHsNCiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7DQogICAgICAgICAgICAgICAgc3Vtc1tpbmRleF0gPSAn5ZCI6K6hJw0KICAgICAgICAgICAgICAgIHJldHVybg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmICgNCiAgICAgICAgICAgICAgICBfc3VtbWFyeVR5cGVNYXBbY29sdW1uLnByb3BlcnR5XSAmJg0KICAgICAgICAgICAgICAgIF9zdW1tYXJ5VHlwZU1hcFtjb2x1bW4ucHJvcGVydHldID09ICdzdW0nDQogICAgICAgICAgICAgICkgew0KICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGRhdGEubWFwKGl0ZW0gPT4gTnVtYmVyKGl0ZW1bY29sdW1uLnByb3BlcnR5XSkpDQogICAgICAgICAgICAgICAgaWYgKCF2YWx1ZXMuZXZlcnkodmFsdWUgPT4gaXNOYU4odmFsdWUpKSkgew0KICAgICAgICAgICAgICAgICAgc3Vtc1tpbmRleF0gPSB2YWx1ZXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKGN1cnIpDQogICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4odmFsdWUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgKyBjdXJyDQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXYNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfSwgMCkNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgc3Vtc1tpbmRleF0gPSAnTi9BJw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSkNCg0KICAgICAgICAgICAgcmV0dXJuIHN1bXMNCiAgICAgICAgICB9LA0KICAgICAgICAgIGNvbHVtbkZvcm1hdHRlcihyb3csIGNvbHVtbiwgY2VsbFZhbHVlKSB7DQogICAgICAgICAgICBsZXQgZm9ybWF0dGVyID0gdGhpcy5mb3JtYXR0ZXJNYXBbY29sdW1uLnByb3BlcnR5XQ0KICAgICAgICAgICAgaWYgKGZvcm1hdHRlcikgew0KICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIHZhciBzY3JpcHQgPQ0KICAgICAgICAgICAgICAgICAgJ3ZhciBmb3JtYXR0ZXJGdW5jdGlvbiA9IGZ1bmN0aW9uKHJvdyxjb2x1bW4sY2VsbFZhbHVlKXsgJyArDQogICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIgKw0KICAgICAgICAgICAgICAgICAgJ307Jw0KICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBldmFsKHNjcmlwdCArICdmb3JtYXR0ZXJGdW5jdGlvbihyb3csY29sdW1uLGNlbGxWYWx1ZSk7JykNCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0DQogICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gY2VsbFZhbHVlDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHJldHVybiBjZWxsVmFsdWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9LA0KICAgICAgICAgIGRhdGVGb3JtYXR0ZXIocm93LCBjb2x1bW4sIGNlbGxWYWx1ZSkgew0KICAgICAgICAgICAgaWYgKGNlbGxWYWx1ZSkgew0KICAgICAgICAgICAgICByZXR1cm4gY2VsbFZhbHVlLnJlcGxhY2UoJy4wJywgJycpDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICByZXR1cm4gY2VsbFZhbHVlDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICBnZXRBbGFybUNvbG9yKGZpZWxkLCBjZWxsVmFsdWUpIHsNCiAgICAgICAgICAgIGxldCBhbGFybVNldHRpbmcgPSB0aGlzLmFsYXJtU2V0dGluZ01hcFtmaWVsZF0NCiAgICAgICAgICAgIGxldCB0eXBlID0gJycNCiAgICAgICAgICAgIHRoaXMuZGlzcGxheUZpZWxkcy5mb3JFYWNoKGl0ZW0gPT4gew0KICAgICAgICAgICAgICBpZiAoaXRlbS5maWVsZE5hbWUgPT09IGZpZWxkKSB7DQogICAgICAgICAgICAgICAgdHlwZSA9IGl0ZW0uZGF0YVR5cGUNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIGlmIChhbGFybVNldHRpbmcpIHsNCiAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICBsZXQgYWxhcm1TZXR0aW5nSnNvbiA9IHV0aWxzLnBhcnNlVG9Kc29uKGFsYXJtU2V0dGluZykNCiAgICAgICAgICAgICAgICBsZXQgYWxhcm1TY3JpcHQgPSAnJw0KICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxhcm1TZXR0aW5nSnNvbi5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgICAgbGV0IGFsYXJtID0gYWxhcm1TZXR0aW5nSnNvbltpXQ0KICAgICAgICAgICAgICAgICAgbGV0IGNvbmRpdGlvbiA9IGFsYXJtLmNvbmRpdGlvbg0KICAgICAgICAgICAgICAgICAgbGV0IGNvbmRpdGlvblN0ciA9ICcnDQogICAgICAgICAgICAgICAgICBmb3IgKHZhciBtID0gMDsgbSA8IGNvbmRpdGlvbi5sZW5ndGg7IG0rKykgew0KICAgICAgICAgICAgICAgICAgICBpZiAobSA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TdHIgKz0gJyAmJiAnDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdiaWdpbnQnIHx8IHR5cGUgPT09ICdpbnQnKSB7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvblttXS5vcCA9PSAnaW5kZXhPZicgJiYgY29uZGl0aW9uW21dLnZhbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU3RyID0gY29uZGl0aW9uU3RyICsgJ1wnJyArIGNlbGxWYWx1ZSArICdcJy5pbmRleE9mKFwnJyArIGNvbmRpdGlvblttXS52YWwgKyAnXCcpIT0tMScNCiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvblttXS5vcCA9PSAnbm90SW5kZXhPZicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblN0ciA9IGNvbmRpdGlvblN0ciArICdcJycgKyBjZWxsVmFsdWUgKyAnXCcuaW5kZXhPZihcJycgKyBjb25kaXRpb25bbV0udmFsICsgJ1wnKT09LTEnDQogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblN0ciA9DQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblN0ciArDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxWYWx1ZSArDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblttXS5vcCArDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblttXS52YWwNCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvblttXS5vcCA9PSAnaW5kZXhPZicgJiYgY29uZGl0aW9uW21dLnZhbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU3RyID0gY29uZGl0aW9uU3RyICsgJ1wnJyArIGNlbGxWYWx1ZSArICdcJy5pbmRleE9mKFwnJyArIGNvbmRpdGlvblttXS52YWwgKyAnXCcpIT0tMScNCiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvblttXS5vcCA9PSAnbm90SW5kZXhPZicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblN0ciA9IGNvbmRpdGlvblN0ciArICdcJycgKyBjZWxsVmFsdWUgKyAnXCcuaW5kZXhPZihcJycgKyBjb25kaXRpb25bbV0udmFsICsgJ1wnKT09LTEnDQogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblN0ciA9DQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblN0ciArDQogICAgICAgICAgICAgICAgICAgICAgICAgICdcJycgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsVmFsdWUgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAnXCcnICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uW21dLm9wICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wnJyArDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblttXS52YWwgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAnXCcnDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIC8vY29uZGl0aW9uU3RyID0gY29uZGl0aW9uU3RyK2NlbGxWYWx1ZStjb25kaXRpb25bbV0ub3ArY29uZGl0aW9uW21dLnZhbDsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIGlmIChpID4gMCkgew0KICAgICAgICAgICAgICAgICAgICBhbGFybVNjcmlwdCArPSAnIGVsc2UgJw0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgbGV0IGNvbG9yU3RyID0gJ2NvbG9yOicgKyBhbGFybS5jb2xvciArICcnDQogICAgICAgICAgICAgICAgICBhbGFybVNjcmlwdCA9DQogICAgICAgICAgICAgICAgICAgIGFsYXJtU2NyaXB0ICsNCiAgICAgICAgICAgICAgICAgICAgJ2lmKCcgKw0KICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TdHIgKw0KICAgICAgICAgICAgICAgICAgICAnKXtyZXR1cm4gXCcnICsNCiAgICAgICAgICAgICAgICAgICAgY29sb3JTdHIgKw0KICAgICAgICAgICAgICAgICAgICAnXCc7fScNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKGFsYXJtU2NyaXB0KSB7DQogICAgICAgICAgICAgICAgICBhbGFybVNjcmlwdCArPSAnZWxzZXsgcmV0dXJuICIiO30nDQogICAgICAgICAgICAgICAgICB2YXIgc2NyaXB0ID0NCiAgICAgICAgICAgICAgICAgICAgJ3ZhciBhbGFybUZ1bmN0aW9uID0gZnVuY3Rpb24oKXsgJyArIGFsYXJtU2NyaXB0ICsgJ307Jw0KICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGV2YWwoc2NyaXB0ICsgJ2FsYXJtRnVuY3Rpb24oKTsnKQ0KICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdA0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICByZXR1cm4gJycNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gJycNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgc3VtbWFyeShtZXRob2QsIGZpZWxkLCBkZWNpbWFsKSB7DQogICAgICAgICAgICBsZXQgbGlzdCA9IHRoaXMucm93cy5maWx0ZXIoaXRlbSA9PiBpdGVtW2ZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIGl0ZW1bZmllbGRdICE9PSAnJykubWFwKGl0ZW0gPT4gbmV3IE51bWJlcihpdGVtW2ZpZWxkXSkpDQogICAgICAgICAgICBpZiAobWV0aG9kID09PSAnY291bnQnKSB7DQogICAgICAgICAgICAgIHJldHVybiBsaXN0Lmxlbmd0aA0KICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdzdW0nKSB7DQogICAgICAgICAgICAgIHJldHVybiBsaXN0LnJlZHVjZSgoYSwgYikgPT4gYSArIGIpLnRvRml4ZWQoZGVjaW1hbCkNCiAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAnbWluJykgew0KICAgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oLi4ubGlzdCkudG9GaXhlZChkZWNpbWFsKQ0KICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdtYXgnKSB7DQogICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCguLi5saXN0KS50b0ZpeGVkKGRlY2ltYWwpDQogICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ2F2ZycpIHsNCiAgICAgICAgICAgICAgcmV0dXJuIChsaXN0LnJlZHVjZSgoYSwgYikgPT4gYSArIGIpIC8gbGlzdC5sZW5ndGgpLnRvRml4ZWQoZGVjaW1hbCkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9LA0KICAgICAgICAgIHNob3dTZWFyY2hQYW5lKCkgew0KICAgICAgICAgICAgcmV0dXJuIHRydWUNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0pDQogICAgfQ0KICB9DQp9DQo="},null]}