{"remainingRequest":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\roadWatch\\InspectionPlan\\components\\EditAddPage\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\roadWatch\\InspectionPlan\\components\\EditAddPage\\index.vue","mtime":1756152506094},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgUHViU3ViIGZyb20gJ3B1YnN1Yi1qcycNCmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50Jw0KaW1wb3J0ICdtb21lbnQtZHVyYXRpb24tZm9ybWF0Jw0KaW1wb3J0IHtyZWZpbmVSZXF1ZXN0Qm9keX0gZnJvbSAnQC91dGlscy9yZXF1ZXN0V3JhcHBlcnMnDQppbXBvcnQge2RpY3Rpb25hcnlFc2NhcGUsIGdldERpY3Rpb25hcnlCeUNvZGV9IGZyb20gJ0AvdXRpbHMvZGljdGlvbmFyeScNCmltcG9ydCB7dGFibGVBZGRFZGl0LCB0YWJsZURldGFpbH0gZnJvbSAnQC9hcGkvcGF0cm9sQW5kUmVzY3VlL3JvYWRXYXRjaC9pbnNwZWN0aW9uUGxhbicNCmltcG9ydCB7dGFibGVEYXRhIGFzIGFsb25nUm91dGVJbmZvSW50ZXJ9IGZyb20gJ0AvYXBpL3BhdHJvbEFuZFJlc2N1ZS9pbmZvTWdtdFBhdHJvbHNSZXNjdWVzL2Fsb25nUm91dGVJbmZvJw0KaW1wb3J0IHt0YWJsZURhdGEgYXMgdGVhbURhdGF9IGZyb20gJ0AvYXBpL3BhdHJvbEFuZFJlc2N1ZS9pbmZvTWdtdFBhdHJvbHNSZXNjdWVzL3BhdHJvbEFuZFJlc2N1ZVRlYW1zTWdtdCcNCmltcG9ydCB7cG9pbnRUcmVlRGF0YX0gZnJvbSAnQC9hcGkvcGF0cm9sQW5kUmVzY3VlL2luZm9NZ210UGF0cm9sc1Jlc2N1ZXMvaW5zcGVjdGlvblBvaW50TWdtdCcNCmltcG9ydCB7b3JnVHJlZX0gZnJvbSAnQC9hcGkvc3lzdGVtSW50ZXJmYWNlJw0KDQpleHBvcnQgZGVmYXVsdCB7DQogIG5hbWU6ICdFZGl0QWRkUGFnZScsDQogIHByb3BzOiB7DQogICAgY29tcG9uZW50TmFtZTogew0KICAgICAgZGVmYXVsdDogJ1RhYmxlUGFnZScsDQogICAgICB0eXBlOiBTdHJpbmcNCiAgICB9DQogIH0sDQogIGRhdGEoKSB7DQogICAgY29uc3QgdmFsaWRhdGVQbGFuRGV0YWlscyA9IChfLCB2YWx1ZSwgY2FsbGJhY2spID0+IHsNCiAgICAgIGNvbnN0IGFyciA9IHRoaXMuJHJlZnMuYWRkRWRpdFRyZWU/LmdldENoZWNrZWRLZXlzKCkgfHwgW10NCiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycikgJiYgYXJyLmxlbmd0aCkgew0KICAgICAgICBjYWxsYmFjaygpDQogICAgICB9IGVsc2Ugew0KICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ+W3oeajgOWGheWuueS4jeiDveS4uuepuicpKQ0KICAgICAgfQ0KICAgIH0NCg0KICAgIHJldHVybiB7DQogICAgICAvLyBkYXlPcHRpb25zOiBbXSwgLy8g5aSp5pWw6YCJ6aG577yI56ys5LiA5aSp44CB56ys5LqM5aSpLi4u77yJDQogICAgICAvLyBzZWxlY3RlZERheTogJycsIC8vIOW9k+WJjemAieS4reeahOWkqeaVsA0KICAgICAgLy8gY3VycmVudEluc3BlY3Rpb25DeWNsZTogJycsIC8vIOW9k+WJjemAieS4reeahOW3oeajgOWRqOacnw0KICAgICAgLy8gcG9pbnRMZXZlbDogJycsIC8vIOW9k+WJjemAieS4reeahOeCueS9jee6p+WIqw0KICAgICAgYWRkRWRpdEZvcm06IHsNCiAgICAgICAgd29ya2NsYXNzOiAnMScsDQogICAgICAgIGZyZXF1ZW5jeTogJycsDQogICAgICAgIHJvYWRJZDogJycsDQogICAgICAgIHN0YXJ0UGF0cm9sSWQ6ICcnLA0KICAgICAgICBlbmRQYXRyb2xJZDogJycsDQogICAgICAgIHBsYW5EZXRhaWxzOiBbXSwNCiAgICAgICAgcGxhblR5cGU6ICcxJywNCiAgICAgICAgaW5zcGVjdFR5cGU6ICcxJywNCiAgICAgICAgcGxhbkNsYXNzOiAnY29tLmFydGZlc3MucmVzY3VlLnBhdHJvbC5qb2IuSW5zcGVjdGlvblBsYW5Kb2InLA0KICAgICAgICBwbGFuSW50ZXJ2YWw6ICcwMTowMDowMCcsDQogICAgICAgIHRpbWU6IFtdDQogICAgICB9LA0KICAgICAgYWRkRWRpdFJ1bGVzOiB7DQogICAgICAgIHdvcmtjbGFzczogWw0KICAgICAgICAgIHtyZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+ePreasoeS4jeiDveS4uuepuicsIHRyaWdnZXI6ICdjaGFuZ2UnfQ0KICAgICAgICBdLA0KICAgICAgICBwbGFuVHlwZTogWw0KICAgICAgICAgIHtyZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+W3oeajgOexu+Wei+S4jeiDveS4uuepuicsIHRyaWdnZXI6ICdjaGFuZ2UnfQ0KICAgICAgICBdLA0KICAgICAgICBpbnNwZWN0VHlwZTogWw0KICAgICAgICAgIHtyZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+W+gOi/lOexu+Wei+S4jeiDveS4uuepuicsIHRyaWdnZXI6ICdjaGFuZ2UnfQ0KICAgICAgICBdLA0KICAgICAgICByb2FkSWQ6IFsNCiAgICAgICAgICB7cmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICfmiYDlsZ7ot6/mrrXkuI3og73kuLrnqbonLCB0cmlnZ2VyOiAnY2hhbmdlJ30NCiAgICAgICAgXSwNCiAgICAgICAgc3RhcnRQYXRyb2xJZDogWw0KICAgICAgICAgIHtyZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+W8gOWni+W3oeajgOermeS4jeiDveS4uuepuicsIHRyaWdnZXI6ICdjaGFuZ2UnfQ0KICAgICAgICBdLA0KICAgICAgICBlbmRQYXRyb2xJZDogWw0KICAgICAgICAgIHtyZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+e7k+adn+W3oeajgOermeS4jeiDveS4uuepuicsIHRyaWdnZXI6ICdjaGFuZ2UnfQ0KICAgICAgICBdLA0KICAgICAgICB0ZWFtSWQ6IFsNCiAgICAgICAgICB7cmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICflt6Hmo4DpmJ/kvI3kuI3og73kuLrnqbonLCB0cmlnZ2VyOiAnY2hhbmdlJ30NCiAgICAgICAgXSwNCiAgICAgICAgcGxhbkRldGFpbHM6IFsNCiAgICAgICAgICB7cmVxdWlyZWQ6IHRydWUsIHZhbGlkYXRvcjogdmFsaWRhdGVQbGFuRGV0YWlscywgdHJpZ2dlcjogJ2NoYW5nZSd9DQogICAgICAgIF0sDQogICAgICAgIGZyZXF1ZW5jeTogWw0KICAgICAgICAgIHtyZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+S7u+WKoemikeeOh+S4jeiDveS4uuepuicsIHRyaWdnZXI6ICdjaGFuZ2UnfQ0KICAgICAgICBdLA0KICAgICAgICBwbGFuU3RhcnRFbmREYXRlOiBbDQogICAgICAgICAge3JlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAn55Sf5oiQ5Lu75Yqh5pe26Ze05q615LiN6IO95Li656m6JywgdHJpZ2dlcjogJ2NoYW5nZSd9DQogICAgICAgIF0sDQogICAgICAgIHBsYW5DbGFzczogWw0KICAgICAgICAgIHtyZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+WumuaXtuS7u+WKoeaJp+ihjOexu+S4jeiDveS4uuepuicsIHRyaWdnZXI6ICdjaGFuZ2UnfQ0KICAgICAgICBdDQogICAgICB9LA0KICAgICAgcGlja2VyT3B0aW9uczogew0KICAgICAgICAvLyDml7bpl7TpgInmi6nlmajml7bpl7TojIPlm7QNCiAgICAgICAgZGlzYWJsZWREYXRlOiB0aW1lID0+IG1vbWVudCh0aW1lKS5pc0JlZm9yZShtb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5cycpKQ0KICAgICAgfSwNCiAgICAgIHNhdmVMb2FkaW5nOiBmYWxzZSwgLy8g5LiK5LygbG9hZGluZw0KICAgICAgZm9ybUxvYWRpbmc6IHRydWUsIC8vIOS4iuS8oGxvYWRpbmcNCiAgICAgIHJvYWRDaG9pY2VEaWFsb2c6IGZhbHNlLCAvLyDmmK/lkKblsZXnpLrpgInmi6not6/mrrXlvLnlsYINCiAgICAgIHRyZWVEYXRhOiBbXSwgLy8g57uE57uH5qCRDQogICAgICByb2FkRGF0YTogW10sIC8vIOi3r+auteaVsOaNrg0KICAgICAgYWxvbmdSb3V0ZUluZm9EYXRhOiBbXSwgLy8g5rK/57q/6K6+5aSH5pWw5o2uDQogICAgICBpbnNwZWN0aW9uUG9pbnRzRGF0YTogW10sIC8vIOW3oeafpeWGheWuue+8iOagkeW9oueCueS9je+8ieaVsOaNrg0KICAgICAgYWRkRWRpdFRyZWVQcm9wczogew0KICAgICAgICBjaGlsZHJlbjogJ2NoaWxkcmVuJywNCiAgICAgICAgbGFiZWw6ICduYW1lJywNCiAgICAgICAgZGlzYWJsZWQ6IGRhdGEgPT4gZGF0YS5sZXZlbCAhPT0gJzQnDQogICAgICB9LA0KICAgICAgaWQ6ICcnLCAvLyBpZOagh+ivhuespg0KICAgICAgcHViU3ViOiBudWxsLA0KICAgICAgdHJlZUxvYWRpbmc6IGZhbHNlDQogICAgfQ0KICB9LA0KICB3YXRjaDogew0KICAgIC8vIOebkeWQrOmikeeOh+WPmOWMlg0KICAgIC8vICdhZGRFZGl0Rm9ybS5mcmVxdWVuY3knOiB7DQogICAgLy8gICBoYW5kbGVyKG5ld1ZhbCkgew0KICAgIC8vICAgICB0aGlzLmN1cnJlbnRJbnNwZWN0aW9uQ3ljbGUgPSBuZXdWYWwNCiAgICAvLyAgICAgLy8g5aaC5p6ccm9hZElk5a2Y5Zyo77yM5YiZ6YeN5paw6I635Y+W5beh5qOA54K55pWw5o2uDQogICAgLy8gICAgIGlmICh0aGlzLmFkZEVkaXRGb3JtLnJvYWRJZCkgew0KICAgIC8vICAgICAgIHRoaXMuZ2V0SW5zcGVjdGlvblBvaW50c0RhdGEodGhpcy5hZGRFZGl0Rm9ybS5yb2FkSWQpDQogICAgLy8gICAgIH0NCiAgICAvLyAgICAgLy8g6YeN572u5aSp5pWw6YCJ5oupDQogICAgLy8gICAgIC8vIHRoaXMuc2VsZWN0ZWREYXkgPSAnJw0KICAgIC8vICAgICAvLyB0aGlzLmRheU9wdGlvbnMgPSBbXQ0KICAgIC8vICAgfSwNCiAgICAvLyAgIGltbWVkaWF0ZTogdHJ1ZQ0KICAgIC8vIH0sDQogICAgLy9wb2ludExldmVs55qE55uR5ZCsDQogICAgLy8gcG9pbnRMZXZlbChuZXdWYWwpIHsNCiAgICAvLyAgIC8vIOWmguaenHJvYWRJZOWtmOWcqO+8jOWImemHjeaWsOiOt+WPluW3oeajgOeCueaVsOaNrg0KICAgIC8vICAgaWYgKHRoaXMuYWRkRWRpdEZvcm0ucm9hZElkKSB7DQogICAgLy8gICAgIHRoaXMuZ2V0SW5zcGVjdGlvblBvaW50c0RhdGEodGhpcy5hZGRFZGl0Rm9ybS5yb2FkSWQpDQogICAgLy8gICB9DQogICAgLy8gfSwNCiAgICBjb21wb25lbnROYW1lOiB7DQogICAgICBoYW5kbGVyKG5ld1ZhbCkgew0KICAgICAgICBpZiAobmV3VmFsID09PSB0aGlzLiRvcHRpb25zLm5hbWUpIHsNCiAgICAgICAgICB0aGlzLm9wZW5QYWdlKCkNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLmNsb3NlUGFnZSgpDQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogIH0sDQogIGNyZWF0ZWQoKSB7DQogICAgLy8gdGhpcy5nZXRPcmdUcmVlRGF0YSgpDQogICAgLy8gdGhpcy5nZXRSb2FkRGF0YSgpDQoNCiAgfSwNCiAgbW91bnRlZCgpIHsNCiAgICB0aGlzLnB1YlN1YiA9IFB1YlN1Yi5zdWJzY3JpYmUoJ0VkaXRBZGRQYWdlJywgKF8sIGRhdGEpID0+IHsNCiAgICAgIGlmIChkYXRhLm9yZ05hbWUpIHsNCiAgICAgICAgdGhpcy5hZGRFZGl0Rm9ybS5yb2FkTmFtZSA9IGRhdGEub3JnTmFtZQ0KICAgICAgICB0aGlzLmFkZEVkaXRGb3JtLnJvYWRJZCA9IGRhdGEuY2F0YWxvZ0lkDQogICAgICAgIHRoaXMuYWRkRWRpdEZvcm0ucm9hZENvZGUgPSBkYXRhLmNvZGUNCiAgICAgICAgdGhpcy5yb2FkQ2hhbmdlKGRhdGEuY2F0YWxvZ0lkKQ0KICAgICAgfQ0KICAgICAgLy8g5paw5aKe5oiW5L+u5pS5DQogICAgICBpZiAoZGF0YS5pZCkgew0KICAgICAgICB0aGlzLmlkID0gZGF0YS5pZA0KICAgICAgICB0aGlzLmdldERldGFpbChkYXRhLmlkKQ0KICAgICAgfQ0KICAgICAgLy8gdGhpcy5nZXRSb2FkRGF0YSgpDQogICAgfSkNCiAgfSwNCiAgbWV0aG9kczogew0KICAgIC8vIOeCueS9jee6p+WIq+WPmOWMluWkhOeQhg0KICAgIC8vIGhhbmRsZVBvaW50TGV2ZWxDaGFuZ2UodmFsdWUpIHsNCiAgICAvLyAgIHRoaXMucG9pbnRMZXZlbCA9IHZhbHVlDQogICAgLy8gICAvLyDmuIXnqbrlt7LpgInlhoXlrrkNCiAgICAvLyAgIHRoaXMuY2xlYXJUcmVlU2VsZWN0KCkNCiAgICAvLyB9LA0KICAgIHRlYW1DaGFuZ2UodmFsdWUpIHsNCiAgICAgIHRoaXMuYWRkRWRpdEZvcm0udGVhbU5hbWUgPSB0aGlzLnRyZWVEYXRhLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgPT09IHZhbHVlKVswXS5uYW1lDQogICAgfSwNCg0KICAgIC8vIOiOt+WPluivpuaDhQ0KICAgIGFzeW5jIGdldERldGFpbChpZCkgew0KICAgICAgdHJ5IHsNCiAgICAgICAgbGV0IHsNCiAgICAgICAgICAgIHJvYWRJZCA9ICcnLA0KICAgICAgICAgICAgZnJlcXVlbmN5ID0gJycsDQogICAgICAgICAgICBwbGFuUGF0cm9sRGV0YWlscyA9IFtdLA0KICAgICAgICAgICAgcGxhblN0YXJ0RGF0ZSA9ICcnLA0KICAgICAgICAgICAgcGxhbkVuZERhdGUgPSAnJywNCiAgICAgICAgICAgIHBsYW5JbnRlcnZhbCA9ICcnLA0KICAgICAgICAgICAgLi4uYWRkRWRpdEZvcm0NCiAgICAgICAgICB9ID0gYXdhaXQgdGFibGVEZXRhaWwoaWQpLA0KICAgICAgICAgIHBsYW5JbnRlcnZhbEFyciA9IHBsYW5JbnRlcnZhbC5zcGxpdCgnfCcpLmZpbHRlcihpID0+IGkpLA0KICAgICAgICAgIHRpbWUgPSAnJywNCiAgICAgICAgICBwbGFuRGV0YWlscyA9IHBsYW5QYXRyb2xEZXRhaWxzLmZsYXRNYXAoaSA9PiBpLmlkID8gaS5pZCA6IFtdKQ0KDQogICAgICAgIHJvYWRJZCA9IHJvYWRJZCB8fCAnJw0KDQogICAgICAgIGlmIChwbGFuSW50ZXJ2YWxBcnIubGVuZ3RoID09PSAyKSB7DQogICAgICAgICAgaWYgKGZyZXF1ZW5jeSA9PT0gJzUnKSB7DQogICAgICAgICAgICB0aW1lID0gcGxhbkludGVydmFsQXJyWzBdLnNwbGl0KCcsJykgfHwgW10NCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGltZSA9IHBsYW5JbnRlcnZhbEFyclswXSB8fCAnJw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHRoaXMuYWRkRWRpdEZvcm0gPSB7DQogICAgICAgICAgLi4uYWRkRWRpdEZvcm0sDQogICAgICAgICAgcm9hZElkLA0KICAgICAgICAgIHBsYW5EZXRhaWxzLA0KICAgICAgICAgIHBsYW5TdGFydEVuZERhdGU6IHBsYW5TdGFydERhdGUgJiYgcGxhbkVuZERhdGUgPyBbcGxhblN0YXJ0RGF0ZSwgcGxhbkVuZERhdGVdIDogW10sDQogICAgICAgICAgdGltZSwNCiAgICAgICAgICBwbGFuSW50ZXJ2YWw6IHBsYW5JbnRlcnZhbEFycltwbGFuSW50ZXJ2YWxBcnIubGVuZ3RoIC0gMV0gfHwgJycsDQogICAgICAgICAgZnJlcXVlbmN5DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5yb2FkQ2hhbmdlKHJvYWRJZCkNCg0KICAgICAgICAvLyAg6YCa6L+H6Lev5q615L+h5oGv6I635Y+W5qCR5b2i54K55L2N44CB5Yid5aeL5YyW5qCR5Yu+6YCJDQogICAgICAgIGF3YWl0IHRoaXMuZ2V0SW5zcGVjdGlvblBvaW50c0RhdGEocm9hZElkLCAoKSA9PiB7DQogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRpYWxpemVUcmVlKHBsYW5EZXRhaWxzKSwgMCkNCiAgICAgICAgfSkNCiAgICAgIH0gZmluYWxseSB7DQogICAgICAgIHRoaXMuZm9ybUxvYWRpbmcgPSBmYWxzZQ0KICAgICAgfQ0KICAgIH0sDQovLyDmoLnmja7lt7Lli77pgInnmoTmlbDmja7ov5vooYzliIbnu4QNCi8vICAgICBncm91cFNlbGVjdGVkUG9pbnRzKHNlbGVjdGVkQ29kZXMpIHsNCi8vICAgICAgIGNvbnN0IGZyZXF1ZW5jeSA9IE51bWJlcih0aGlzLmFkZEVkaXRGb3JtLmZyZXF1ZW5jeSkgfHwgMQ0KLy8gICAgICAgbGV0IGdyb3VwQ291bnQgPSBmcmVxdWVuY3kNCi8vDQovLyAgICAgICAvLyDnibnmrorlpITnkIbmr4/lkajlkozmr4/mnIjnmoTmg4XlhrUNCi8vICAgICAgIGlmICh0aGlzLmFkZEVkaXRGb3JtLmZyZXF1ZW5jeSA9PT0gJzYnKSB7IC8vIOavj+WRqOS4gOasoQ0KLy8gICAgICAgICBncm91cENvdW50ID0gNw0KLy8gICAgICAgfSBlbHNlIGlmICh0aGlzLmFkZEVkaXRGb3JtLmZyZXF1ZW5jeSA9PT0gJzcnKSB7IC8vIOavj+aciOS4gOasoQ0KLy8gICAgICAgICBncm91cENvdW50ID0gMzANCi8vICAgICAgIH0NCi8vDQovLyAgICAgICAvLyDph43nva7liIbnu4TmlbDmja4NCi8vICAgICAgIHRoaXMuZ3JvdXBlZEluc3BlY3Rpb25Qb2ludHMgPSBbXQ0KLy8gICAgICAgdGhpcy5kYXlPcHRpb25zID0gW10NCi8vDQovLyAgICAgICBpZiAoZ3JvdXBDb3VudCA8PSAxKSB7DQovLyAgICAgICAgIC8vIOmikeeOh+S4ujHlpKnmiJbkuI3liIbnu4QNCi8vICAgICAgICAgdGhpcy5ncm91cGVkSW5zcGVjdGlvblBvaW50cyA9IFtzZWxlY3RlZENvZGVzXSAvLyDnoa7kv53ljbPkvb/kuI3liIbnu4TkuZ/kv53nlZnmlbDmja4NCi8vICAgICAgICAgcmV0dXJuDQovLyAgICAgICB9DQovLw0KLy8gICAgICAgLy8g5Yib5bu65YiG57uEDQovLyAgICAgICBjb25zdCBncm91cFNpemUgPSBNYXRoLmNlaWwoc2VsZWN0ZWRDb2Rlcy5sZW5ndGggLyBncm91cENvdW50KQ0KLy8NCi8vICAgICAgIC8vIOWwhuW3suWLvumAieeahOiKgueCueWIhue7hA0KLy8gICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncm91cENvdW50OyBpKyspIHsNCi8vICAgICAgICAgY29uc3Qgc3RhcnQgPSBpICogZ3JvdXBTaXplDQovLyAgICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgZ3JvdXBTaXplDQovLyAgICAgICAgIGNvbnN0IGdyb3VwTm9kZXMgPSBzZWxlY3RlZENvZGVzLnNsaWNlKHN0YXJ0LCBlbmQpDQovLyAgICAgICAgIHRoaXMuZ3JvdXBlZEluc3BlY3Rpb25Qb2ludHMucHVzaChncm91cE5vZGVzKQ0KLy8NCi8vICAgICAgICAgLy8g5re75Yqg5aSp5pWw6YCJ6aG5DQovLyAgICAgICAgIHRoaXMuZGF5T3B0aW9ucy5wdXNoKHsNCi8vICAgICAgICAgICB2YWx1ZTogaSArIDEsDQovLyAgICAgICAgICAgbGFiZWw6IGDnrKwke2kgKyAxfeWkqWANCi8vICAgICAgICAgfSkNCi8vICAgICAgIH0NCi8vDQovLyAgICAgICAvLyDpu5jorqTpgInkuK3nrKzkuIDlpKkNCi8vICAgICAgIHRoaXMuc2VsZWN0ZWREYXkgPSB0aGlzLmRheU9wdGlvbnNbMF0/LnZhbHVlIHx8ICcnDQovLyAgICAgfSwNCiAgICAvLyDojrflj5blhazlj7jmoJENCiAgICBhc3luYyBnZXRPcmdUcmVlRGF0YSgpIHsNCiAgICAgIHRoaXMudHJlZURhdGEgPSBhd2FpdCBvcmdUcmVlKCkNCiAgICB9LA0KDQogICAgLy/ojrflj5bmiYDlnKjot6/mrrXliJfooajmlbDmja4NCiAgICAvLyBhc3luYyBnZXRSb2FkRGF0YSgpIHsNCiAgICAvLyAgIGNvbnN0IHsgcm93cyA9IFtdIH0gPSBhd2FpdCByb2FkU2VjdGlvbkluZm9JbnRlcih7IHBhZ2VCZWFuOiB7IHBhZ2VTaXplOiAtMSB9IH0pDQogICAgLy8gICB0aGlzLnJvYWREYXRhID0gcm93cy5tYXAoaXRlbSA9PiB7DQogICAgLy8gICAgIGl0ZW0ucm9hZE5hbWUgPSBpdGVtLm5hbWUgKyAnICcgKyBpdGVtLmNvZGUNCiAgICAvLyAgICAgcmV0dXJuIGl0ZW0NCiAgICAvLyAgIH0pDQogICAgLy8gICBpZiAoIXRoaXMuaWQpIHsNCiAgICAvLyAgICAgdGhpcy5hZGRFZGl0Rm9ybS5yb2FkSWQgPSB0aGlzLnJvYWREYXRhWzBdLmlkDQogICAgLy8gICAgIHRoaXMucm9hZENoYW5nZSh0aGlzLnJvYWREYXRhWzBdLmlkKQ0KICAgIC8vICAgfQ0KICAgIC8vIH0sDQoNCiAgICAvLyDojrflj5bngrnkvY3moJHmlbDmja4NCiAgICBhc3luYyBnZXRJbnNwZWN0aW9uUG9pbnRzRGF0YShyb2FkSWQgPSAnJywgY2FsbGJhY2spIHsNCiAgICAgIHRyeSB7DQogICAgICAgIHRoaXMudHJlZUxvYWRpbmcgPSB0cnVlDQogICAgICAgIGNvbnN0IHt2YWx1ZSA9IFtdfSA9IGF3YWl0IHBvaW50VHJlZURhdGEoew0KICAgICAgICAgIHJvYWRJZA0KICAgICAgICAgIC8vIGluc3BlY3Rpb25DeWNsZTogdGhpcy5jdXJyZW50SW5zcGVjdGlvbkN5Y2xlLCAvLyDmt7vliqDlt6Hmo4DlkajmnJ/lj4LmlbANCiAgICAgICAgICAvLyBwb2ludExldmVsOiB0aGlzLnBvaW50TGV2ZWwgLy8g54K55L2N57qn5Yir5Y+C5pWwDQogICAgICAgIH0sICdhZGRFZGl0JykNCiAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2sodmFsdWUpDQogICAgICAgIGNvbnNvbGUubG9nKHZhbHVlLCAnOTk5OTk5ODg4ODg4JykNCiAgICAgICAgdGhpcy5pbnNwZWN0aW9uUG9pbnRzRGF0YSA9IHZhbHVlDQogICAgICAgIC8vIOaVsOaNruWKoOi9veWujOaIkOWQjum7mOiupOmAieS4reaJgOaciWxldmVsPTTnmoToioLngrkNCiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gew0KICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICBjb25zdCBhbGxMZWFmTm9kZXMgPSB0aGlzLmdldEFsbExlYWZOb2Rlcyh2YWx1ZSkNCiAgICAgICAgICAgIHRoaXMuJHJlZnMuYWRkRWRpdFRyZWUuc2V0Q2hlY2tlZEtleXMoYWxsTGVhZk5vZGVzLm1hcChub2RlID0+IG5vZGUuY29kZSkpDQogICAgICAgICAgICB0aGlzLmFkZEVkaXRGb3JtLnBsYW5EZXRhaWxzID0gYWxsTGVhZk5vZGVzLm1hcChub2RlID0+IG5vZGUuY29kZSkNCiAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgICB9IGNhdGNoIChlcnJvcikgew0KICAgICAgICAvLyDkuI3kuLror7fmsYLov4flv6vnu5PmnZ/nmoTmg4XlhrXkuIvvvIzph43nva4NCiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgIT09ICdjYW5jZWxlZCcpIGNhbGxiYWNrICYmIGNhbGxiYWNrKFtdKQ0KICAgICAgfSBmaW5hbGx5IHsNCiAgICAgICAgdGhpcy50cmVlTG9hZGluZyA9IGZhbHNlDQogICAgICB9DQogICAgfSwNCiAgICAvLyDmoLnmja7popHnjofliIbnu4Tlt6Hmo4DngrnmlbDmja4NCiAgICAvLyBncm91cEluc3BlY3Rpb25Qb2ludHMoZGF0YSkgew0KICAgIC8vICAgbGV0IGZyZXF1ZW5jeSA9IE51bWJlcih0aGlzLmFkZEVkaXRGb3JtLmZyZXF1ZW5jeSkgfHwgMQ0KICAgIC8vICAgLy8g54m55q6K5aSE55CG5q+P5ZGo5ZKM5q+P5pyI55qE5oOF5Ya1DQogICAgLy8gICBpZiAodGhpcy5hZGRFZGl0Rm9ybS5mcmVxdWVuY3kgPT09ICc2JykgeyAvLyDmr4/lkajkuIDmrKENCiAgICAvLyAgICAgZnJlcXVlbmN5ID0gNyAvLyDliIbmiJA357uEDQogICAgLy8gICB9IGVsc2UgaWYgKHRoaXMuYWRkRWRpdEZvcm0uZnJlcXVlbmN5ID09PSAnNycpIHsgLy8g5q+P5pyI5LiA5qyhDQogICAgLy8gICAgIGZyZXF1ZW5jeSA9IDMwIC8vIOWIhuaIkDMw57uEDQogICAgLy8gICB9DQogICAgLy8gICAvLyDph43nva7liIbnu4TmlbDmja4NCiAgICAvLyAgIHRoaXMuZ3JvdXBlZEluc3BlY3Rpb25Qb2ludHMgPSBbXQ0KICAgIC8vICAgdGhpcy5kYXlPcHRpb25zID0gW10NCiAgICAvLw0KICAgIC8vICAgaWYgKGZyZXF1ZW5jeSA8PSAxKSB7DQogICAgLy8gICAgIC8vIOmikeeOh+S4ujHlpKnmiJbkuI3liIbnu4QNCiAgICAvLyAgICAgdGhpcy5pbnNwZWN0aW9uUG9pbnRzRGF0YSA9IGRhdGENCiAgICAvLyAgICAgcmV0dXJuDQogICAgLy8gICB9DQogICAgLy8NCiAgICAvLyAgIC8vIOWIm+W7uuWIhue7hA0KICAgIC8vICAgY29uc3QgbGVhZk5vZGVzID0gdGhpcy5nZXRBbGxMZWFmTm9kZXMoZGF0YSkNCiAgICAvLyAgIGNvbnN0IGdyb3VwU2l6ZSA9IE1hdGguY2VpbChsZWFmTm9kZXMubGVuZ3RoIC8gZnJlcXVlbmN5KQ0KICAgIC8vDQogICAgLy8gICAvLyDlsIblj7blrZDoioLngrnliIbnu4QNCiAgICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJlcXVlbmN5OyBpKyspIHsNCiAgICAvLyAgICAgY29uc3Qgc3RhcnQgPSBpICogZ3JvdXBTaXplDQogICAgLy8gICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgZ3JvdXBTaXplDQogICAgLy8gICAgIGNvbnN0IGdyb3VwTm9kZXMgPSBsZWFmTm9kZXMuc2xpY2Uoc3RhcnQsIGVuZCkNCiAgICAvLyAgICAgdGhpcy5ncm91cGVkSW5zcGVjdGlvblBvaW50cy5wdXNoKGdyb3VwTm9kZXMubWFwKG5vZGUgPT4gbm9kZS5jb2RlKSkNCiAgICAvLw0KICAgIC8vICAgICAvLyDmt7vliqDlpKnmlbDpgInpobkNCiAgICAvLyAgICAgdGhpcy5kYXlPcHRpb25zLnB1c2goew0KICAgIC8vICAgICAgIHZhbHVlOiBpICsgMSwNCiAgICAvLyAgICAgICBsYWJlbDogYOesrCR7aSArIDF95aSpYA0KICAgIC8vICAgICB9KQ0KICAgIC8vICAgfQ0KICAgIC8vDQogICAgLy8gICAvLyDpu5jorqTpgInkuK3nrKzkuIDlpKkNCiAgICAvLyAgIHRoaXMuc2VsZWN0ZWREYXkgPSB0aGlzLmRheU9wdGlvbnNbMF0/LnZhbHVlIHx8ICcnDQogICAgLy8gICB0aGlzLmZpbHRlckluc3BlY3Rpb25Qb2ludHNCeURheSgpDQogICAgLy8gfSwNCiAgICAvLyDmoLnmja7pgInmi6nnmoTlpKnmlbDov4fmu6Tlt6Hmo4DngrkNCiAgICAvLyBmaWx0ZXJJbnNwZWN0aW9uUG9pbnRzQnlEYXkoKSB7DQogICAgLy8gICBpZiAoIXRoaXMuc2VsZWN0ZWREYXkgfHwgdGhpcy5ncm91cGVkSW5zcGVjdGlvblBvaW50cy5sZW5ndGggPT09IDApIHsNCiAgICAvLyAgICAgLy8g57yW6L6R5qih5byP5LiL5Y+q5pi+56S65bey5Yu+6YCJ55qE6IqC54K5DQogICAgLy8gICAgIGlmICh0aGlzLmlkICYmIHRoaXMuYWRkRWRpdEZvcm0ucGxhbkRldGFpbHMgJiYgdGhpcy5hZGRFZGl0Rm9ybS5wbGFuRGV0YWlscy5sZW5ndGggPiAwKSB7DQogICAgLy8gICAgICAgdGhpcy5maWx0ZXJPbmx5U2VsZWN0ZWROb2RlcygpDQogICAgLy8gICAgIH0gZWxzZSB7DQogICAgLy8gICAgICAgdGhpcy5pbnNwZWN0aW9uUG9pbnRzRGF0YSA9IHRoaXMub3JpZ2luYWxJbnNwZWN0aW9uUG9pbnRzDQogICAgLy8gICAgIH0NCiAgICAvLyAgICAgcmV0dXJuDQogICAgLy8gICB9DQogICAgLy8NCiAgICAvLyAgIGNvbnN0IGRheUluZGV4ID0gTnVtYmVyKHRoaXMuc2VsZWN0ZWREYXkpIC0gMQ0KICAgIC8vICAgY29uc3QgY2hlY2tlZENvZGVzID0gdGhpcy5ncm91cGVkSW5zcGVjdGlvblBvaW50c1tkYXlJbmRleF0gfHwgW10NCiAgICAvLw0KICAgIC8vICAgLy8g57yW6L6R5qih5byP5LiL5Y+q5pi+56S65bey5Yu+6YCJ55qE6IqC54K5DQogICAgLy8gICBpZiAodGhpcy5pZCAmJiB0aGlzLmFkZEVkaXRGb3JtLnBsYW5EZXRhaWxzICYmIHRoaXMuYWRkRWRpdEZvcm0ucGxhbkRldGFpbHMubGVuZ3RoID4gMCkgew0KICAgIC8vICAgICB0aGlzLmZpbHRlck9ubHlTZWxlY3RlZE5vZGVzKGNoZWNrZWRDb2RlcykNCiAgICAvLyAgIH0gZWxzZSB7DQogICAgLy8gICAgIC8vIOaWsOWinuaooeW8j+S4i+aMieato+W4uOmAu+i+kei/h+a7pA0KICAgIC8vICAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3JpZ2luYWxJbnNwZWN0aW9uUG9pbnRzKSkNCiAgICAvLyAgICAgdGhpcy5tYXJrQW5kRmlsdGVyTm9kZXMoZmlsdGVyZWREYXRhLCBjaGVja2VkQ29kZXMpDQogICAgLy8gICAgIHRoaXMuaW5zcGVjdGlvblBvaW50c0RhdGEgPSB0aGlzLmZpbHRlck5vZGVzKGZpbHRlcmVkRGF0YSkNCiAgICAvLyAgIH0NCiAgICAvLw0KICAgIC8vICAgdGhpcy51cGRhdGVUcmVlU2VsZWN0aW9uKGNoZWNrZWRDb2RlcykNCiAgICAvLyAgIC8vIOa3seW6puWkjeWItuWOn+Wni+aVsOaNrg0KICAgIC8vICAgY29uc3QgZmlsdGVyZWREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm9yaWdpbmFsSW5zcGVjdGlvblBvaW50cykpDQogICAgLy8NCiAgICAvLyAgIC8vIOagh+iusOWTquS6m+iKgueCueW6lOivpeaYvuekug0KICAgIC8vICAgY29uc3QgbWFya1Zpc2libGVOb2RlcyA9IChub2RlcykgPT4gew0KICAgIC8vICAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4gew0KICAgIC8vICAgICAgIGlmIChub2RlLmxldmVsID09PSAnNCcpIHsNCiAgICAvLyAgICAgICAgIC8vIOWPtuWtkOiKgueCuSAtIOagueaNruaYr+WQpuWcqOmAieS4reWIhue7hOS4reWGs+WumuaYr+WQpuaYvuekug0KICAgIC8vICAgICAgICAgbm9kZS52aXNpYmxlID0gY2hlY2tlZENvZGVzLmluY2x1ZGVzKG5vZGUuY29kZSkNCiAgICAvLyAgICAgICB9IGVsc2Ugew0KICAgIC8vICAgICAgICAgLy8g6Z2e5Y+25a2Q6IqC54K5IC0g6YCS5b2S5aSE55CG5a2Q6IqC54K5DQogICAgLy8gICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikgew0KICAgIC8vICAgICAgICAgICBtYXJrVmlzaWJsZU5vZGVzKG5vZGUuY2hpbGRyZW4pDQogICAgLy8gICAgICAgICAgIC8vIOWmguaenOWtkOiKgueCueacieWPr+ingeeahO+8jOWImeW9k+WJjeiKgueCueS5n+WPr+ingQ0KICAgIC8vICAgICAgICAgICBub2RlLnZpc2libGUgPSBub2RlLmNoaWxkcmVuLnNvbWUoY2hpbGQgPT4gY2hpbGQudmlzaWJsZSkNCiAgICAvLyAgICAgICAgIH0gZWxzZSB7DQogICAgLy8gICAgICAgICAgIG5vZGUudmlzaWJsZSA9IGZhbHNlDQogICAgLy8gICAgICAgICB9DQogICAgLy8gICAgICAgfQ0KICAgIC8vICAgICB9KQ0KICAgIC8vICAgfQ0KICAgIC8vDQogICAgLy8gICBtYXJrVmlzaWJsZU5vZGVzKGZpbHRlcmVkRGF0YSkNCiAgICAvLw0KICAgIC8vICAgLy8g6L+H5ruk5o6J5LiN5Y+v6KeB55qE6IqC54K5DQogICAgLy8gICBjb25zdCBmaWx0ZXJOb2RlcyA9IChub2RlcykgPT4gew0KICAgIC8vICAgICByZXR1cm4gbm9kZXMuZmlsdGVyKG5vZGUgPT4gew0KICAgIC8vICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7DQogICAgLy8gICAgICAgICBub2RlLmNoaWxkcmVuID0gZmlsdGVyTm9kZXMobm9kZS5jaGlsZHJlbikNCiAgICAvLyAgICAgICAgIHJldHVybiBub2RlLnZpc2libGUgJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwDQogICAgLy8gICAgICAgfQ0KICAgIC8vICAgICAgIHJldHVybiBub2RlLnZpc2libGUNCiAgICAvLyAgICAgfSkNCiAgICAvLyAgIH0NCiAgICAvLw0KICAgIC8vICAgdGhpcy5pbnNwZWN0aW9uUG9pbnRzRGF0YSA9IGZpbHRlck5vZGVzKGZpbHRlcmVkRGF0YSkNCiAgICAvLw0KICAgIC8vICAgLy8g5pu05paw5qCR57uE5Lu2DQogICAgLy8gICB0aGlzLiRuZXh0VGljaygoKSA9PiB7DQogICAgLy8gICAgIGlmICh0aGlzLiRyZWZzLmFkZEVkaXRUcmVlKSB7DQogICAgLy8gICAgICAgLy8g6buY6K6k6YCJ5Lit5b2T5YmN5YiG57uE55qE6IqC54K5DQogICAgLy8gICAgICAgdGhpcy4kcmVmcy5hZGRFZGl0VHJlZS5zZXRDaGVja2VkS2V5cyhjaGVja2VkQ29kZXMpDQogICAgLy8gICAgICAgdGhpcy5hZGRFZGl0Rm9ybS5wbGFuRGV0YWlscyA9IGNoZWNrZWRDb2Rlcw0KICAgIC8vDQogICAgLy8gICAgICAgLy8g5bGV5byA5omA5pyJ5Y+v6KeB6IqC54K5DQogICAgLy8gICAgICAgY29uc3QgYWxsTm9kZXMgPSB0aGlzLiRyZWZzLmFkZEVkaXRUcmVlLnN0b3JlLl9nZXRBbGxOb2RlcygpDQogICAgLy8gICAgICAgYWxsTm9kZXMuZm9yRWFjaChub2RlID0+IHsNCiAgICAvLyAgICAgICAgIGlmIChub2RlLmRhdGEudmlzaWJsZSkgew0KICAgIC8vICAgICAgICAgICBub2RlLmV4cGFuZGVkID0gdHJ1ZQ0KICAgIC8vICAgICAgICAgfQ0KICAgIC8vICAgICAgIH0pDQogICAgLy8gICAgIH0NCiAgICAvLyAgIH0pDQogICAgLy8gfSwNCiAgICAvLyDlj6rov4fmu6Tlt7LpgInkuK3nmoToioLngrkNCiAgICAvLyBmaWx0ZXJPbmx5U2VsZWN0ZWROb2RlcyhjaGVja2VkQ29kZXMgPSBbXSkgew0KICAgIC8vICAgaWYgKCF0aGlzLm9yaWdpbmFsSW5zcGVjdGlvblBvaW50cykgcmV0dXJuDQogICAgLy8NCiAgICAvLyAgIC8vIOa3seW6puWkjeWItuWOn+Wni+aVsOaNrg0KICAgIC8vICAgY29uc3QgZmlsdGVyZWREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm9yaWdpbmFsSW5zcGVjdGlvblBvaW50cykpDQogICAgLy8NCiAgICAvLyAgIC8vIOagh+iusOWTquS6m+iKgueCueW6lOivpeaYvuekuu+8iOWPquaYvuekuuW3suWLvumAieeahOiKgueCue+8iQ0KICAgIC8vICAgY29uc3QgbWFya1Zpc2libGVOb2RlcyA9IChub2RlcykgPT4gew0KICAgIC8vICAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4gew0KICAgIC8vICAgICAgIGlmIChub2RlLmxldmVsID09PSAnNCcpIHsNCiAgICAvLyAgICAgICAgIC8vIOWPtuWtkOiKgueCuSAtIOWPquaYvuekuuWcqHBsYW5EZXRhaWxz5Lit55qE6IqC54K5DQogICAgLy8gICAgICAgICBub2RlLnZpc2libGUgPSB0aGlzLmFkZEVkaXRGb3JtLnBsYW5EZXRhaWxzLmluY2x1ZGVzKG5vZGUuY29kZSkgJiYNCiAgICAvLyAgICAgICAgICAgKGNoZWNrZWRDb2Rlcy5sZW5ndGggPT09IDAgfHwgY2hlY2tlZENvZGVzLmluY2x1ZGVzKG5vZGUuY29kZSkpDQogICAgLy8gICAgICAgfSBlbHNlIHsNCiAgICAvLyAgICAgICAgIC8vIOmdnuWPtuWtkOiKgueCuSAtIOmAkuW9kuWkhOeQhuWtkOiKgueCuQ0KICAgIC8vICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHsNCiAgICAvLyAgICAgICAgICAgbWFya1Zpc2libGVOb2Rlcyhub2RlLmNoaWxkcmVuKQ0KICAgIC8vICAgICAgICAgICAvLyDlpoLmnpzlrZDoioLngrnmnInlj6/op4HnmoTvvIzliJnlvZPliY3oioLngrnkuZ/lj6/op4ENCiAgICAvLyAgICAgICAgICAgbm9kZS52aXNpYmxlID0gbm9kZS5jaGlsZHJlbi5zb21lKGNoaWxkID0+IGNoaWxkLnZpc2libGUpDQogICAgLy8gICAgICAgICB9IGVsc2Ugew0KICAgIC8vICAgICAgICAgICBub2RlLnZpc2libGUgPSBmYWxzZQ0KICAgIC8vICAgICAgICAgfQ0KICAgIC8vICAgICAgIH0NCiAgICAvLyAgICAgfSkNCiAgICAvLyAgIH0NCiAgICAvLw0KICAgIC8vICAgbWFya1Zpc2libGVOb2RlcyhmaWx0ZXJlZERhdGEpDQogICAgLy8gICB0aGlzLmluc3BlY3Rpb25Qb2ludHNEYXRhID0gdGhpcy5maWx0ZXJOb2RlcyhmaWx0ZXJlZERhdGEpDQogICAgLy8gfSwNCg0KLy8g5qCH6K6w5ZKM6L+H5ruk6IqC54K5DQovLyAgICAgbWFya0FuZEZpbHRlck5vZGVzKGRhdGEsIGNoZWNrZWRDb2Rlcykgew0KLy8gICAgICAgY29uc3QgbWFya1Zpc2libGVOb2RlcyA9IChub2RlcykgPT4gew0KLy8gICAgICAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4gew0KLy8gICAgICAgICAgIGlmIChub2RlLmxldmVsID09PSAnNCcpIHsNCi8vICAgICAgICAgICAgIG5vZGUudmlzaWJsZSA9IGNoZWNrZWRDb2Rlcy5pbmNsdWRlcyhub2RlLmNvZGUpDQovLyAgICAgICAgICAgfSBlbHNlIHsNCi8vICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7DQovLyAgICAgICAgICAgICAgIG1hcmtWaXNpYmxlTm9kZXMobm9kZS5jaGlsZHJlbikNCi8vICAgICAgICAgICAgICAgbm9kZS52aXNpYmxlID0gbm9kZS5jaGlsZHJlbi5zb21lKGNoaWxkID0+IGNoaWxkLnZpc2libGUpDQovLyAgICAgICAgICAgICB9IGVsc2Ugew0KLy8gICAgICAgICAgICAgICBub2RlLnZpc2libGUgPSBmYWxzZQ0KLy8gICAgICAgICAgICAgfQ0KLy8gICAgICAgICAgIH0NCi8vICAgICAgICAgfSkNCi8vICAgICAgIH0NCi8vICAgICAgIG1hcmtWaXNpYmxlTm9kZXMoZGF0YSkNCi8vICAgICB9LA0KDQovLyDov4fmu6ToioLngrkNCi8vICAgICBmaWx0ZXJOb2Rlcyhub2Rlcykgew0KLy8gICAgICAgcmV0dXJuIG5vZGVzLmZpbHRlcihub2RlID0+IHsNCi8vICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHsNCi8vICAgICAgICAgICBub2RlLmNoaWxkcmVuID0gdGhpcy5maWx0ZXJOb2Rlcyhub2RlLmNoaWxkcmVuKQ0KLy8gICAgICAgICAgIHJldHVybiBub2RlLnZpc2libGUgJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwDQovLyAgICAgICAgIH0NCi8vICAgICAgICAgcmV0dXJuIG5vZGUudmlzaWJsZQ0KLy8gICAgICAgfSkNCi8vICAgICB9LA0KDQovLyDmm7TmlrDmoJHpgInmi6nnirbmgIENCi8vICAgICB1cGRhdGVUcmVlU2VsZWN0aW9uKGNoZWNrZWRDb2Rlcykgew0KLy8gICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gew0KLy8gICAgICAgICBpZiAodGhpcy4kcmVmcy5hZGRFZGl0VHJlZSkgew0KLy8gICAgICAgICAgIC8vIOiuvue9ruWLvumAieeKtuaAgQ0KLy8gICAgICAgICAgIHRoaXMuJHJlZnMuYWRkRWRpdFRyZWUuc2V0Q2hlY2tlZEtleXMoY2hlY2tlZENvZGVzKQ0KLy8gICAgICAgICAgIHRoaXMuYWRkRWRpdEZvcm0ucGxhbkRldGFpbHMgPSBjaGVja2VkQ29kZXMNCi8vDQovLyAgICAgICAgICAgLy8g5bGV5byA5Y+v6KeB6IqC54K5DQovLyAgICAgICAgICAgY29uc3QgYWxsTm9kZXMgPSB0aGlzLiRyZWZzLmFkZEVkaXRUcmVlLnN0b3JlLl9nZXRBbGxOb2RlcygpDQovLyAgICAgICAgICAgYWxsTm9kZXMuZm9yRWFjaChub2RlID0+IHsNCi8vICAgICAgICAgICAgIGlmIChub2RlLmRhdGEudmlzaWJsZSkgew0KLy8gICAgICAgICAgICAgICBub2RlLmV4cGFuZGVkID0gdHJ1ZQ0KLy8gICAgICAgICAgICAgfQ0KLy8gICAgICAgICAgIH0pDQovLyAgICAgICAgIH0NCi8vICAgICAgIH0pDQovLyAgICAgfSwNCiAgICAvLyDojrflj5bmiYDmnIlsZXZlbD0055qE5Y+25a2Q6IqC54K5LS0t6buY6K6k6YCJ5LitDQogICAgLy8gZ2V0QWxsTGVhZk5vZGVzKHRyZWVEYXRhKSB7DQogICAgLy8gICBjb25zdCByZXN1bHQgPSBbXQ0KICAgIC8vICAgY29uc3QgdHJhdmVyc2UgPSAobm9kZXMpID0+IHsNCiAgICAvLyAgICAgbm9kZXMuZm9yRWFjaChub2RlID0+IHsNCiAgICAvLyAgICAgICBpZiAobm9kZS5sZXZlbCA9PT0gJzQnKSB7DQogICAgLy8gICAgICAgICByZXN1bHQucHVzaChub2RlKQ0KICAgIC8vICAgICAgIH0NCiAgICAvLyAgICAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCkgew0KICAgIC8vICAgICAgICAgdHJhdmVyc2Uobm9kZS5jaGlsZHJlbikNCiAgICAvLyAgICAgICB9DQogICAgLy8gICAgIH0pDQogICAgLy8gICB9DQogICAgLy8gICB0cmF2ZXJzZSh0cmVlRGF0YSkNCiAgICAvLyAgIHJldHVybiByZXN1bHQNCiAgICAvLyB9LA0KICAgIC8vIOmAmui/h+i3r+auteS/oeaBr+iOt+WPluayv+e6v+iuvuWkh+S/oeaBrw0KICAgIGFzeW5jIGdldEFsb25nUm91dGVJbmZvKHZhbHVlLCBjYWxsYmFjaykgew0KICAgICAgY29uc3QgX3dpcGVEYXRhID0gKCkgPT4gew0KICAgICAgICB0aGlzLmFsb25nUm91dGVJbmZvRGF0YSA9IFtdDQogICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHRoaXMuYWxvbmdSb3V0ZUluZm9EYXRhKQ0KICAgICAgfQ0KDQogICAgICB0cnkgew0KICAgICAgICAvLyDojrflj5bmsr/nur/orr7mlr0NCiAgICAgICAgY29uc3Qge3Jvd3MgPSBbXX0gPSBhd2FpdCBhbG9uZ1JvdXRlSW5mb0ludGVyKHJlZmluZVJlcXVlc3RCb2R5KHsNCiAgICAgICAgICBxdWVyeXM6IFt7b3BlcmF0aW9uOiAnSU4nLCBwcm9wZXJ0eTogJ3JvYWRfc2VnbWVudF9pZF8nLCB2YWx1ZX1dDQogICAgICAgIH0pLCAnYWRkRWRpdCcpDQoNCiAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2socm93cykNCiAgICAgICAgdGhpcy5hbG9uZ1JvdXRlSW5mb0RhdGEgPSByb3dzDQoNCiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgICAgIC8vIOS4jeS4uuivt+axgui/h+W/q+e7k+adn+eahOaDheWGteS4i++8jOmHjee9rg0KICAgICAgICBpZiAoZXJyb3IubWVzc2FnZSAhPT0gJ2NhbmNlbGVkJykgX3dpcGVEYXRhKCkNCiAgICAgIH0NCg0KICAgIH0sDQoNCiAgICAvLyDmiZPlvIDpobXpnaLmiafooYwNCiAgICBvcGVuUGFnZSgpIHsNCiAgICB9LA0KDQogICAgLy8g5YWz6Zet6aG16Z2i5omn6KGMDQogICAgY2xvc2VQYWdlKCkgew0KICAgICAgY29uc3Qge2FkZEVkaXRSdWxlcywgcHViU3ViLCB0cmVlRGF0YSwgcm9hZERhdGF9ID0gdGhpcw0KICAgICAgdGhpcy5yZXNldFRyZWUoKQ0KDQogICAgICAvLyDph43nva7nu4Tku7bmlbDmja4NCiAgICAgIE9iamVjdC5hc3NpZ24oDQogICAgICAgIHRoaXMuJGRhdGEsDQogICAgICAgIHRoaXMuJG9wdGlvbnMuZGF0YS5jYWxsKHRoaXMpLA0KICAgICAgICB7YWRkRWRpdFJ1bGVzLCBwdWJTdWIsIHRyZWVEYXRhLCByb2FkRGF0YX0NCiAgICAgICkNCg0KICAgICAgdGhpcy4kbmV4dFRpY2soXyA9PiB7DQogICAgICAgIHRoaXMuJHJlZnMuYWRkRWRpdEZvcm0uJGVsLnNjcm9sbFRvcCA9IDANCiAgICAgICAgdGhpcy4kcmVmcy5hZGRFZGl0Rm9ybS5jbGVhclZhbGlkYXRlKCkNCiAgICAgIH0pDQogICAgfSwNCg0KICAgIC8vIOmAmui/h0pTT07lr7nosaHojrflj5blsZ7mgKflgLwNCiAgICBnZXRWYWxCeUpzb24oanNvbiwga2V5KSB7DQogICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKT8uW2tleV0NCiAgICB9LA0KDQogICAgLy8g6Lev5q615pS55Y+Y5ZCO6Kem5Y+RDQogICAgYXN5bmMgcm9hZENoYW5nZSh2YWx1ZSkgew0KICAgICAgdHJ5IHsNCiAgICAgICAgLy8g5qC55o2uaWTmn6Xor6LmlbDmja7ntKLlvJUNCiAgICAgICAgY29uc3QgX2ZpbmRJbmRleCA9IChhcnIgPSBbXSwgaWQpID0+IGFycj8uZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gaWQpDQogICAgICAgIC8vIOabtOaWsOaOkuW6jw0KICAgICAgICAvLyB2YWx1ZS5zb3J0KChhLCBiKSA9PiBfZmluZEluZGV4KHRoaXMucm9hZERhdGEsIGEpIC0gX2ZpbmRJbmRleCh0aGlzLnJvYWREYXRhLCBiKSkNCg0KICAgICAgICAvLyDpgJrov4fot6/mrrXkv6Hmga/ojrflj5blt6Hmn6XpmJ/kvI3kv6Hmga8NCiAgICAgICAgdGhpcy5nZXRUZWFtRGF0YSh2YWx1ZSkNCg0KICAgICAgICAvLyDpgJrov4fot6/mrrXkv6Hmga/ojrflj5bmsr/nur/orr7lpIfkv6Hmga8NCiAgICAgICAgdGhpcy5nZXRBbG9uZ1JvdXRlSW5mbyh2YWx1ZSwgZGF0YSA9PiB7DQogICAgICAgICAgY29uc3Qge3N0YXJ0UGF0cm9sSWQsIGVuZFBhdHJvbElkfSA9IHRoaXMuYWRkRWRpdEZvcm0NCg0KICAgICAgICAgIC8qDQogICAgICAgICAgKiDlt6Hmo4DlvIDlp4vvvIznu5PmnZ/nq5kNCiAgICAgICAgICAqICovDQogICAgICAgICAgaWYgKHN0YXJ0UGF0cm9sSWQpIHsNCiAgICAgICAgICAgIGlmICghZGF0YS5zb21lKGkgPT4gaS5pZCA9PT0gc3RhcnRQYXRyb2xJZCkpIHsNCiAgICAgICAgICAgICAgdGhpcy5hZGRFZGl0Rm9ybS5zdGFydFBhdHJvbElkID0gJycNCiAgICAgICAgICAgICAgc2V0VGltZW91dChfID0+IHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+36YeN5paw6YCJ5oup5beh5qOA5byA5aeL56uZLi4nKSkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQoNCiAgICAgICAgICBpZiAoZW5kUGF0cm9sSWQpIHsNCiAgICAgICAgICAgIGlmICghZGF0YS5zb21lKGkgPT4gaS5pZCA9PT0gZW5kUGF0cm9sSWQpKSB7DQogICAgICAgICAgICAgIHRoaXMuYWRkRWRpdEZvcm0uZW5kUGF0cm9sSWQgPSAnJw0KICAgICAgICAgICAgICBzZXRUaW1lb3V0KF8gPT4gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7fph43mlrDpgInmi6nlt6Hmo4Dnu5PmnZ/nq5kuLicpKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfSkNCg0KICAgICAgICAvLyDpgJrov4fot6/mrrXkv6Hmga/ojrflj5blt6Hmo4DlhoXlrrnngrnkvY0NCiAgICAgICAgdGhpcy5nZXRJbnNwZWN0aW9uUG9pbnRzRGF0YSh2YWx1ZSwgKCkgPT4gew0KICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLmFkZEVkaXRGb3JtLnBsYW5EZXRhaWxzID0gW10NCiAgICAgICAgICBjb25zdCB7cGxhbkRldGFpbHMgPSBbXX0gPSB0aGlzLmFkZEVkaXRGb3JtDQoNCiAgICAgICAgICAvLyDpgb/lhY3liIfmjaLot6/mrrXlr7zoh7TnmoTngrnkvY3mlbDmja7kuI3lkIjms5UNCiAgICAgICAgICBzZXRUaW1lb3V0KF8gPT4gew0KICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplVHJlZShwbGFuRGV0YWlscykNCiAgICAgICAgICAgIGNvbnN0IGNoZWNrTm9kZSA9IHRoaXMuJHJlZnMuYWRkRWRpdFRyZWU/LmdldENoZWNrZWROb2RlcygpIHx8IFtdDQogICAgICAgICAgICB0aGlzLmFkZEVkaXRGb3JtLnBsYW5EZXRhaWxzID0gcGxhbkRldGFpbHMuZmlsdGVyKHBhdHJvbElkID0+IHsNCiAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrTm9kZS5maW5kKGkgPT4gaS5jb2RlID09PSBwYXRyb2xJZCkNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgfSwgMCkNCiAgICAgICAgfSkNCiAgICAgIH0gZmluYWxseSB7DQogICAgICAgIHRoaXMuZm9ybUxvYWRpbmcgPSBmYWxzZQ0KICAgICAgfQ0KICAgIH0sDQoNCiAgICAvLyDpgJrov4fot6/mrrXkv6Hmga/ojrflj5blt6Hmn6XpmJ/kvI3kv6Hmga8NCiAgICBhc3luYyBnZXRUZWFtRGF0YSh2YWx1ZSkgew0KICAgICAgY29uc3Qge3Jvd3MgPSBbXX0gPSBhd2FpdCB0ZWFtRGF0YShyZWZpbmVSZXF1ZXN0Qm9keSh7DQogICAgICAgIHF1ZXJ5czogW3tvcGVyYXRpb246ICdJTicsIHByb3BlcnR5OiAnci5pZF8nLCB2YWx1ZX0sIHtvcGVyYXRpb246ICdFUVVBTCcsIHByb3BlcnR5OiAndC50eXBlXycsIHZhbHVlOiAnMSd9XQ0KICAgICAgfSksICdhZGRFZGl0JykNCiAgICAgIHRoaXMudHJlZURhdGEgPSByb3dzDQogICAgfSwNCg0KICAgIC8vIOagkeiKgueCuemAieS4rQ0KICAgIGNoZWNrQ2hhbmdlKCkgew0KICAgICAgdGhpcy5hZGRFZGl0Rm9ybS5wbGFuRGV0YWlscyA9IHRoaXMuJHJlZnMuYWRkRWRpdFRyZWU/LmdldENoZWNrZWRLZXlzKCkgfHwgW10NCiAgICB9LA0KDQogICAgLy8g5riF56m65qCR6YCJ5LitDQogICAgY2xlYXJUcmVlU2VsZWN0KCkgew0KICAgICAgdGhpcy4kcmVmcy5hZGRFZGl0VHJlZS5zZXRDaGVja2VkS2V5cyhbXSkNCiAgICAgIHRoaXMuYWRkRWRpdEZvcm0ucGxhbkRldGFpbHMgPSBbXQ0KICAgIH0sDQoNCiAgICAvLyDph43nva7moJHnirbmgIENCiAgICByZXNldFRyZWUoKSB7DQogICAgICB0aGlzLmNsZWFyVHJlZVNlbGVjdCgpDQogICAgICB0aGlzLmNvbGxhcHNlQWxsTm9kZXMoZmFsc2UpDQogICAgfSwNCg0KICAgIC8vIOaUtui1t+aIluWxleW8gOagkeaJgOacieWxgue6pw0KICAgIGNvbGxhcHNlQWxsTm9kZXMoc3RhdGUgPSB0cnVlKSB7DQogICAgICBjb25zdCBub2RlcyA9IHRoaXMuJHJlZnMuYWRkRWRpdFRyZWUuc3RvcmUuX2dldEFsbE5vZGVzKCkNCiAgICAgIG5vZGVzLmZvckVhY2goaXRlbSA9PiBpdGVtLmV4cGFuZGVkID0gc3RhdGUpDQogICAgfSwNCg0KICAgIC8vIOWxleW8gOWLvumAieWxgue6p+eCueS9jQ0KICAgIGluaXRpYWxpemVUcmVlKHNlbGVjdCA9IFtdKSB7DQogICAgICBpZiAoIShBcnJheS5pc0FycmF5KHNlbGVjdCkgJiYgc2VsZWN0Lmxlbmd0aCkpIHJldHVybg0KDQogICAgICBjb25zdCB0cmVlID0gdGhpcy4kcmVmcy5hZGRFZGl0VHJlZQ0KICAgICAgLy8g6K6+572u5Yu+6YCJ55qE6IqC54K5DQogICAgICB0cmVlLnNldENoZWNrZWRLZXlzKHNlbGVjdCkNCg0KICAgICAgLy8g6I635Y+W5omA5pyJ5Yu+6YCJ55qE6IqC54K55bm25bGV5byA5YW254i26IqC54K5DQogICAgICBzZWxlY3QuZm9yRWFjaChrZXkgPT4gew0KICAgICAgICBjb25zdCBub2RlID0gdHJlZT8uZ2V0Tm9kZShrZXkpDQogICAgICAgIGlmIChub2RlKSB7DQogICAgICAgICAgbGV0IHBhcmVudCA9IG5vZGUucGFyZW50DQogICAgICAgICAgd2hpbGUgKHBhcmVudCkgew0KICAgICAgICAgICAgcGFyZW50LmV4cGFuZCgpDQogICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9KQ0KICAgIH0sDQoNCiAgICAvLyDku7vliqHnsbvlnovliIfmjaINCiAgICBmcmVxdWVuY3lDaGFuZ2UoKSB7DQogICAgICB0aGlzLmFkZEVkaXRGb3JtLnBsYW5JbnRlcnZhbCA9ICcnDQogICAgICB0aGlzLmFkZEVkaXRGb3JtLnRpbWUgPSBbXQ0KICAgICAgdGhpcy4kbmV4dFRpY2soXyA9PiB7DQogICAgICAgIHRoaXMuJHJlZnMuYWRkRWRpdEZvcm0uY2xlYXJWYWxpZGF0ZShbJ3BsYW5JbnRlcnZhbCcsICd0aW1lJywgJ3Rhc2tUeXBlJ10pDQogICAgICB9KQ0KICAgIH0sDQoNCiAgICAvLyDkv53lrZgNCiAgICBoYW5kbGVTYXZlKCkgew0KICAgICAgLy8g6I635Y+W5omA5pyJ5YiG57uE55qE6YCJ5Lit6IqC54K5DQogICAgICAvLyBsZXQgYWxsQ2hlY2tlZE5vZGVzID0gW10NCiAgICAgIC8vIGxldCBncm91cGVkRGV0YWlscyA9IFtdDQogICAgICAvLw0KICAgICAgLy8gLy8g5aaC5p6c5piv5aSa5aSp5beh5qOA6aKR546H77yI5q+P5Lik5aSp44CB5q+P5ZGo44CB5q+P5pyI562J77yJDQogICAgICAvLyBpZiAoWycyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNyddLmluY2x1ZGVzKHRoaXMuYWRkRWRpdEZvcm0uZnJlcXVlbmN5KSkgew0KICAgICAgLy8gICAvLyDpgY3ljobliIbnu4TmlbDmja7vvIzkuLrmr4/kuKrliIbnu4Tmt7vliqBwYXRyb2xCYXRjaA0KICAgICAgLy8gICB0aGlzLmdyb3VwZWRJbnNwZWN0aW9uUG9pbnRzLmZvckVhY2goKGdyb3VwLCBpbmRleCkgPT4gew0KICAgICAgLy8gICAgIGdyb3VwLmZvckVhY2gocGF0cm9sSWQgPT4gew0KICAgICAgLy8gICAgICAgZ3JvdXBlZERldGFpbHMucHVzaCh7DQogICAgICAvLyAgICAgICAgIHBhdHJvbElkLA0KICAgICAgLy8gICAgICAgICBwYXRyb2xCYXRjaDogaW5kZXggKyAxIC8vIOaJueasoeS7jjHlvIDlp4sNCiAgICAgIC8vICAgICAgIH0pDQogICAgICAvLyAgICAgfSkNCiAgICAgIC8vICAgfSkNCiAgICAgIC8vICAgYWxsQ2hlY2tlZE5vZGVzID0gZ3JvdXBlZERldGFpbHMubWFwKGl0ZW0gPT4gaXRlbS5wYXRyb2xJZCkNCiAgICAgIC8vIH0gZWxzZSB7DQogICAgICAvLyAgIC8vIOWNleWkqemikeeOh++8jOaJueasoeS4ujENCiAgICAgIC8vICAgY29uc3QgY2hlY2tlZEtleXMgPSB0aGlzLiRyZWZzLmFkZEVkaXRUcmVlPy5nZXRDaGVja2VkS2V5cygpIHx8IFtdDQogICAgICAvLyAgIGdyb3VwZWREZXRhaWxzID0gY2hlY2tlZEtleXMubWFwKHBhdHJvbElkID0+ICh7DQogICAgICAvLyAgICAgcGF0cm9sSWQsDQogICAgICAvLyAgICAgcGF0cm9sQmF0Y2g6IDENCiAgICAgIC8vICAgfSkpDQogICAgICAvLyAgIGFsbENoZWNrZWROb2RlcyA9IGNoZWNrZWRLZXlzDQogICAgICAvLyB9DQogICAgICAvLyAvLyDlpoLmnpzmmK/mr4/lkajmiJbmr4/mnIjvvIzpnIDopoHlkIjlubbmiYDmnInliIbnu4TnmoTpgInkuK3oioLngrkNCiAgICAgIC8vIC8vIGlmIChbJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3J10uaW5jbHVkZXModGhpcy5hZGRFZGl0Rm9ybS5mcmVxdWVuY3kpKSB7DQogICAgICAvLyAvLyAgIGFsbENoZWNrZWROb2RlcyA9IHRoaXMuZ3JvdXBlZEluc3BlY3Rpb25Qb2ludHMuZmxhdCgpDQogICAgICAvLyAvLyB9IGVsc2Ugew0KICAgICAgLy8gLy8gICBhbGxDaGVja2VkTm9kZXMgPSB0aGlzLiRyZWZzLmFkZEVkaXRUcmVlPy5nZXRDaGVja2VkS2V5cygpIHx8IFtdDQogICAgICAvLyAvLyB9DQogICAgICAvLyAvLyDojrflj5bmiYDmnInliIbnu4TnmoTpgInkuK3oioLngrkNCiAgICAgIC8vIC8vIGNvbnN0IGFsbENoZWNrZWROb2RlID0gdGhpcy5ncm91cGVkSW5zcGVjdGlvblBvaW50cy5mbGF0KCkgfHwgdGhpcy4kcmVmcy5hZGRFZGl0VHJlZT8uZ2V0Q2hlY2tlZEtleXMoKSB8fCBbXQ0KICAgICAgLy8NCiAgICAgIC8vIC8vIOWcqOmqjOivgeWJjeabtOaWsHBsYW5EZXRhaWxzDQogICAgICAvLyB0aGlzLmFkZEVkaXRGb3JtLnBsYW5EZXRhaWxzID0gYWxsQ2hlY2tlZE5vZGVzDQogICAgICB0aGlzLiRyZWZzLmFkZEVkaXRGb3JtLnZhbGlkYXRlKGFzeW5jICh2YWxpZCwgb2JqZWN0KSA9PiB7DQogICAgICAgIGlmICghdmFsaWQpIHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoYOaciSR7T2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGh95Liq5a2X5q615pyq6YCa6L+H5qCh6aqM77yM6K+35q2j56Gu5aGr5YaZ6KGo5Y2V5YaF5a6544CCYCkNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLnNhdmVMb2FkaW5nID0gdHJ1ZQ0KDQogICAgICAgICAgbGV0IHsNCiAgICAgICAgICAgIHN0YXJ0UGF0cm9sSWQgPSAnJywNCiAgICAgICAgICAgIGVuZFBhdHJvbElkID0gJycsDQogICAgICAgICAgICByb2FkSWQgPSAnJywNCiAgICAgICAgICAgIHN0YXJ0UGF0cm9sTmFtZSA9ICcnLA0KICAgICAgICAgICAgZW5kUGF0cm9sTmFtZSA9ICcnLA0KICAgICAgICAgICAgcGxhbkRldGFpbHMgPSBbXSwNCiAgICAgICAgICAgIHBsYW5TdGFydEVuZERhdGU6IFtwbGFuU3RhcnREYXRlID0gJycsIHBsYW5FbmREYXRlID0gJyddID0gW10sDQogICAgICAgICAgICB0aW1lID0gW10sDQogICAgICAgICAgICBwbGFuSW50ZXJ2YWwgPSAnJywNCiAgICAgICAgICAgIC4uLmFkZEVkaXRGb3JtDQogICAgICAgICAgfSA9IHRoaXMuYWRkRWRpdEZvcm0NCg0KICAgICAgICAgIC8vIOe7k+aehOWHuui3r+auteWPiuayv+i3r+iuvuaWveaVsOaNrg0KICAgICAgICAgIGNvbnN0IHtyb2FkRGF0YSwgYWxvbmdSb3V0ZUluZm9EYXRhfSA9IHRoaXMNCiAgICAgICAgICAvKg0KICAgICAgICAgICog5aSE55CG5pWw5o2uDQogICAgICAgICAgKiBkaWN0aW9uYXJ5RXNjYXBl5Li66L2s5LmJ5Ye95pWwDQogICAgICAgICAgKiAqLw0KICAgICAgICAgIGxldCBlbmRQbGFuRGV0YWlscyA9IFtdDQogICAgICAgICAgcGxhbkRldGFpbHMuZm9yRWFjaChpdGVtID0+IHsNCiAgICAgICAgICAgIGVuZFBsYW5EZXRhaWxzLnB1c2godGhpcy5maW5kSW5MZXZlbDNDaGlsZHJlbih0aGlzLmluc3BlY3Rpb25Qb2ludHNEYXRhLCBpdGVtKSkNCiAgICAgICAgICB9KQ0KICAgICAgICAgIGVuZFBsYW5EZXRhaWxzID0gZW5kUGxhbkRldGFpbHMubWFwKGl0ZW0gPT4gew0KICAgICAgICAgICAgcmV0dXJuIHsNCiAgICAgICAgICAgICAgLi4uaXRlbSwNCiAgICAgICAgICAgICAgcGF0cm9sSWQ6IGl0ZW0uY29kZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pDQogICAgICAgICAgY29uc29sZS5sb2coZW5kUGxhbkRldGFpbHMsICdlbmRQbGFuRGV0YWlscycpDQoNCiAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgLy8gbGV0IHJvYWRJbmZvID0gdGhpcy5yb2FkRGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkID09PSByb2FkSWQpWzBdDQogICAgICAgICAgICBsZXQge3N0YXRlLCBtZXNzYWdlfSA9IGF3YWl0IHRhYmxlQWRkRWRpdCh7DQogICAgICAgICAgICAgIC4uLmFkZEVkaXRGb3JtLA0KICAgICAgICAgICAgICBzdGFydFBhdHJvbElkLA0KICAgICAgICAgICAgICBlbmRQYXRyb2xJZCwNCiAgICAgICAgICAgICAgcm9hZElkLA0KICAgICAgICAgICAgICAvLyByb2FkTmFtZTogcm9hZEluZm8ubmFtZSwNCiAgICAgICAgICAgICAgLy8gcm9hZENvZGU6IHJvYWRJbmZvLmNvZGUsDQogICAgICAgICAgICAgIHN0YXJ0UGF0cm9sTmFtZTogZGljdGlvbmFyeUVzY2FwZShhbG9uZ1JvdXRlSW5mb0RhdGEsIHN0YXJ0UGF0cm9sSWQsIHt2YWx1ZUtleTogJ2lkJ30pLA0KICAgICAgICAgICAgICBlbmRQYXRyb2xOYW1lOiBkaWN0aW9uYXJ5RXNjYXBlKGFsb25nUm91dGVJbmZvRGF0YSwgZW5kUGF0cm9sSWQsIHt2YWx1ZUtleTogJ2lkJ30pLA0KICAgICAgICAgICAgICAvLyB0ZWFtRnVsbElkLA0KICAgICAgICAgICAgICAvLyB0ZWFtTmFtZSwNCiAgICAgICAgICAgICAgLy8gcGxhbkRldGFpbHM6IHBsYW5EZXRhaWxzLm1hcChwYXRyb2xJZCA9PiAoe3BhdHJvbElkfSkpLA0KICAgICAgICAgICAgICBwbGFuRGV0YWlsczogZW5kUGxhbkRldGFpbHMsDQogICAgICAgICAgICAgIHBsYW5TdGFydERhdGUsDQogICAgICAgICAgICAgIHBsYW5FbmREYXRlLA0KICAgICAgICAgICAgICBwbGFuSW50ZXJ2YWw6IHRpbWUubGVuZ3RoID8gYCR7dGltZX18JHtwbGFuSW50ZXJ2YWx9YCA6IHBsYW5JbnRlcnZhbA0KICAgICAgICAgICAgfSkNCg0KICAgICAgICAgICAgaWYgKHN0YXRlKSB7DQogICAgICAgICAgICAgIG1lc3NhZ2UgPSB0aGlzLmlkID8gJ+e8lui+kScgOiAn5paw5aKeJw0KICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoYOW3oeajgOiuoeWIkiR7bWVzc2FnZX3miJDlip9gKQ0KICAgICAgICAgICAgICB0aGlzLmNoYW5nZVBhZ2UoJ1RhYmxlUGFnZScsIHRoaXMuaWQgPyAnZWRpdCcgOiAnYWRkJykNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9IGZpbmFsbHkgew0KICAgICAgICAgICAgdGhpcy5zYXZlTG9hZGluZyA9IGZhbHNlDQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9KQ0KICAgIH0sDQoNCg0KICAgIGZpbmRJbkxldmVsM0NoaWxkcmVuKGFycmF5LCB0YXJnZXRDb2RlKSB7DQogICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyYXkpIHsNCiAgICAgICAgLy8g5aaC5p6c5b2T5YmN5a+56LGh5pivIGxldmVsPTMg5LiU5pyJIGNoaWxkcmVu77yM5ZyoIGNoaWxkcmVuIOS4reafpeaJvg0KICAgICAgICBpZiAoaXRlbS5sZXZlbCA9PT0gJzMnICYmIGl0ZW0uY2hpbGRyZW4pIHsNCiAgICAgICAgICBjb25zdCBmb3VuZCA9IGl0ZW0uY2hpbGRyZW4uZmluZChjaGlsZCA9PiBjaGlsZC5jb2RlID09PSB0YXJnZXRDb2RlKQ0KICAgICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kDQogICAgICAgIH0NCg0KICAgICAgICAvLyDnu6fnu63pgJLlvZLmkJzntKLlrZDnuqcNCiAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7DQogICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kSW5MZXZlbDNDaGlsZHJlbihpdGVtLmNoaWxkcmVuLCB0YXJnZXRDb2RlKQ0KICAgICAgICAgIGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgcmV0dXJuIG51bGwNCiAgICB9LA0KDQogICAgLy8g5bGV56S65by55bGCDQogICAgc2hvd0RpYWxvZyhkaWFsb2dOYW1lKSB7DQogICAgICBpZiAoIWRpYWxvZ05hbWUpIHJldHVybg0KICAgICAgdGhpc1tkaWFsb2dOYW1lICsgJ0RpYWxvZyddID0gdHJ1ZQ0KICAgIH0sDQoNCiAgICAvLyDmlLnlj5jpobXpnaINCiAgICBjaGFuZ2VQYWdlKHBhZ2VOYW1lID0gJycsIHR5cGUgPSAnJykgew0KICAgICAgaWYgKCFwYWdlTmFtZSkgcmV0dXJuDQogICAgICB0aGlzLiRlbWl0KCdjaGFuZ2VQYWdlJywgcGFnZU5hbWUsIF8gPT4gew0KICAgICAgICBQdWJTdWIucHVibGlzaChwYWdlTmFtZSwge3R5cGV9KQ0KICAgICAgfSkNCiAgICB9LA0KDQogICAgbW9tZW50LA0KICAgIGdldERpY3Rpb25hcnlCeUNvZGUNCiAgfSwNCiAgYmVmb3JlRGVzdHJveSgpIHsNCiAgICAvLyDlnKjnu4Tku7bplIDmr4HkuYvliY0g5riF6Zmk6K6i6ZiF5raI5oGvDQogICAgUHViU3ViLnVuc3Vic2NyaWJlKHRoaXMucHViU3ViKQ0KICB9DQp9DQo="},null]}