tin-spa 2.3.2 → 2.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/classes/TinCore.mjs +3 -4
- package/esm2020/lib/components/message/messageDialog.component.mjs +5 -4
- package/esm2020/lib/components/table/detailsDialog.component.mjs +3 -3
- package/fesm2015/tin-spa.mjs +8 -9
- package/fesm2015/tin-spa.mjs.map +1 -1
- package/fesm2020/tin-spa.mjs +8 -9
- package/fesm2020/tin-spa.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -92,14 +92,13 @@ export class Core {
|
|
|
92
92
|
return '';
|
|
93
93
|
}
|
|
94
94
|
static getInitialValue(field) {
|
|
95
|
-
// if (field.defaultFirstValue && field.options){
|
|
96
|
-
// return field.options[0][field.optionValue]
|
|
97
|
-
// }
|
|
98
95
|
if (field.defaultValue) {
|
|
99
96
|
if (field.type == 'date' || field.type == 'datetime' && field.defaultValue == 'now')
|
|
100
97
|
return this.nowDate(true);
|
|
101
98
|
return field.defaultValue;
|
|
102
99
|
}
|
|
100
|
+
if (field.type == 'select' && (field.hidden || field.hideOnCreate))
|
|
101
|
+
return 0;
|
|
103
102
|
switch (field.type) {
|
|
104
103
|
case 'text':
|
|
105
104
|
return '';
|
|
@@ -398,4 +397,4 @@ export class DetailsDialogProcessor {
|
|
|
398
397
|
return { extraButtons, createButton, editButton, deleteButton };
|
|
399
398
|
}
|
|
400
399
|
}
|
|
401
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGluQ29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jbGFzc2VzL1RpbkNvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixhQUFhLEVBQXFCLE1BQU0sV0FBVyxDQUFDO0FBRWxGLE1BQU0sT0FBTyxJQUFJO0lBR1IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHO1FBQ3pCLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDM0MsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN0QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbkIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDMUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUVELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFJTSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWE7UUFDdEMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV6QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFB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LENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUM7WUFDbEQsWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQ2xFLENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERldGFpbHNEaWFsb2dDb25maWcsIERldGFpbHNTb3VyY2UsIEZpZWxkLCBGb3JtQ29uZmlnIH0gZnJvbSBcIi4vQ2xhc3Nlc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvcmUge1xyXG5cclxuXHJcbiAgcHVibGljIHN0YXRpYyBkZWVwQ2xvbmUob2JqKSB7XHJcbiAgICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XHJcbiAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xyXG4gICAgICBjb25zdCBhcnJDb3B5ID0gW107XHJcbiAgICAgIG9iai5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGFyckNvcHlbaW5kZXhdID0gdGhpcy5kZWVwQ2xvbmUoaXRlbSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gYXJyQ29weTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvYmpDb3B5ID0ge307XHJcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgb2JqQ29weVtrZXldID0gdGhpcy5kZWVwQ2xvbmUob2JqW2tleV0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gb2JqQ29weTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgcHVibGljIHN0YXRpYyBjYW1lbFRvV29yZHModmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdmFsdWU7XHJcblxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZTtcclxuXHJcbiAgICBpZiAodmFsdWUubGVuZ3RoID09IDApIHJldHVybiB2YWx1ZTtcclxuXHJcbiAgICBsZXQgdiA9IHZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc3Vic3RyaW5nKDEpXHJcbiAgICByZXR1cm4gdi5yZXBsYWNlKC8oW0EtWl0rKSooW0EtWl1bYS16XSkvZywgXCIkMSAkMlwiKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2VuZXJhdGVPYmplY3QoZmllbGRzOiBGaWVsZFtdKSB7XHJcblxyXG4gICAgbGV0IGRhdGEgPSB7fTtcclxuICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuXHJcbiAgICAgIGlmIChmaWVsZC50eXBlICE9ICdzZWN0aW9uJyAmJiBmaWVsZC50eXBlICE9ICdibGFuaycgKXtcclxuICAgICAgICBkYXRhW2ZpZWxkLm5hbWVdID0gdGhpcy5nZXRJbml0aWFsVmFsdWUoZmllbGQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlc2V0T2JqZWN0KGZpZWxkczogRmllbGRbXSwgZGF0YSkge1xyXG5cclxuICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgaWYgKGZpZWxkLnR5cGUgIT0gJ3NlY3Rpb24nICYmIGZpZWxkLnR5cGUgIT0gJ2JsYW5rJykge1xyXG4gICAgICAgIGRhdGFbZmllbGQubmFtZV0gPSB0aGlzLmdldEluaXRpYWxWYWx1ZShmaWVsZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgdGVzdFZpc2libGUoY29uZmlnIDogRm9ybUNvbmZpZywgZGF0YSwgZjogRmllbGQpOiBib29sZWFuIHtcclxuXHJcbiAgICBpZiAoZi5oaWRkZW4pIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gJ2NyZWF0ZScgJiYgZi5oaWRlT25DcmVhdGUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAoY29uZmlnLm1vZGUgIT0gJ2NyZWF0ZScgJiYgZi5oaWRlT25FeGlzdHMpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmLmhpZGRlbkNvbmRpdGlvbikge1xyXG4gICAgICByZXR1cm4gIWYuaGlkZGVuQ29uZGl0aW9uKGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyB2YWxpZGF0ZU9iamVjdChmaWVsZHM6IEZpZWxkW10sIGRhdGEpOiBzdHJpbmcge1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiVmFsaWRhdGlvbnNcIilcclxuXHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWVsZHMpIHtcclxuXHJcbiAgICAgIGlmIChmaWVsZC50eXBlID09ICdmaWxlJyB8fCBmaWVsZC50eXBlID09ICdmaWxlLXZpZXcnIHx8IGZpZWxkLnR5cGUgPT0gJ2JsYW5rJyB8fCBmaWVsZC50eXBlID09ICdzZWN0aW9uJyApIGNvbnRpbnVlXHJcblxyXG5cclxuXHJcbiAgICAgIGxldCBuYW1lID0gZmllbGQuYWxpYXMgPz8gdGhpcy5jYW1lbFRvV29yZHMoZmllbGQubmFtZSk7XHJcbiAgICAgIGxldCBkID0gZGF0YVtmaWVsZC5uYW1lXTtcclxuXHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhuYW1lICsgJyAnICsgZClcclxuXHJcbiAgICAgIGlmIChmaWVsZC5yZXF1aXJlZCl7XHJcblxyXG4gICAgICAgIGlmIChkID09IHVuZGVmaW5lZCB8fCBkID09IG51bGwpIHJldHVybiBgJHtuYW1lfSBpcyByZXF1aXJlZGA7XHJcblxyXG4gICAgICAgIGlmIChmaWVsZC50eXBlID09ICd0ZXh0Jyl7XHJcblxyXG4gICAgICAgICAgaWYgKGQgPT0gJycpIHJldHVybiBgUGxlYXNlIGVudGVyICR7bmFtZX1gO1xyXG5cclxuICAgICAgICAgIGlmIChmaWVsZC5taW4gJiYgZC5sZW5ndGggPCBmaWVsZC5taW4pIHJldHVybiBgTWluaW11bSAgJHtuYW1lfSBsZW5ndGggaXMgJHtmaWVsZC5taW59YFxyXG5cclxuICAgICAgICAgIGlmIChmaWVsZC5tYXggJiYgZC5sZW5ndGggPiBmaWVsZC5tYXgpIHJldHVybiBgTWF4aW11bSAke25hbWV9IGxlbmd0aCBpcyAke2ZpZWxkLm1heH1gXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChmaWVsZC50eXBlID09ICdudW1iZXInIHx8IGZpZWxkLnR5cGUgPT0gJ21vbmV5JyB8fCBmaWVsZC50eXBlID09ICdkYXRlJyl7XHJcblxyXG4gICAgICAgICAgaWYgKGZpZWxkLm1pbiAmJiBkIDwgZmllbGQubWluKSByZXR1cm4gYE1pbmltdW0gICR7bmFtZX0gaXMgJHtmaWVsZC5taW59YFxyXG5cclxuICAgICAgICAgIGlmIChmaWVsZC5tYXggJiYgZCA+IGZpZWxkLm1heCkgcmV0dXJuIGBNYXhpbXVtICR7bmFtZX0gaXMgJHtmaWVsZC5tYXh9YFxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZmllbGQudHlwZSA9PSAnc2VsZWN0Jykge1xyXG5cclxuICAgICAgICAgIGlmICh0eXBlb2YoZCkgPT0gJ3N0cmluZycgJiYgZCA9PSAnJykgcmV0dXJuIGBQbGVhc2Ugc2VsZWN0ICR7bmFtZX1gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGdldEluaXRpYWxWYWx1ZShmaWVsZDogRmllbGQpIHtcclxuXHJcbiAgICAvLyBpZiAoZmllbGQuZGVmYXVsdEZpcnN0VmFsdWUgJiYgZmllbGQub3B0aW9ucyl7XHJcbiAgICAvLyAgIHJldHVybiBmaWVsZC5vcHRpb25zWzBdW2ZpZWxkLm9wdGlvblZhbHVlXVxyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmIChmaWVsZC5kZWZhdWx0VmFsdWUpe1xyXG5cclxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT0gJ2RhdGUnIHx8IGZpZWxkLnR5cGUgPT0gJ2RhdGV0aW1lJyAmJiBmaWVsZC5kZWZhdWx0VmFsdWUgPT0gJ25vdycpIHJldHVybiB0aGlzLm5vd0RhdGUodHJ1ZSk7XHJcblxyXG4gICAgICByZXR1cm4gZmllbGQuZGVmYXVsdFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xyXG4gICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIGNhc2UgJ21vbmV5JzpcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgY2FzZSAnbnVtYmVyJzpcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm93RGF0ZSh0cnVlKTtcclxuICAgICAgY2FzZSAnY2hlY2tib3gnOlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgY2FzZSAnc2VsZWN0JzpcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXRDbG9uZSh4KSB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWVwQ2xvbmUoeCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldE51bWJlcih2YWx1ZTogc3RyaW5nKSB7XHJcblxyXG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT0gXCJcIikge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvbmx5TnVtYmVycyA9IHZhbHVlLnJlcGxhY2UoL1teXFxkLi1dL2csICcnKTtcclxuICAgIHJldHVybiBvbmx5TnVtYmVyc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXRGaXJzdERheU9mTW9udGgoKSB7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgMSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGVtYWlsSXNWYWxpZChlbWFpbCkge1xyXG4gICAgLy8gcmV0dXJuIC9cXFMrQFxcUytcXC5cXFMrLy50ZXN0KGVtYWlsKVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBpc1ZhbGlkVU5DUGF0aChwYXRoOiBzdHJpbmcpIHtcclxuICAgIC8vIHJldHVybiAvXFxcXFxcXFwoW2EtekEtWjAtOV8uJOKXjy1dKylcXFxcKFthLXpBLVowLTlfLiTil48tXSspLiovLnRlc3QocGF0aClcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWxpZERhdGUoZGF0ZSkge1xyXG5cclxuICAgIHZhciBwYXJzZWREYXRlID0gRGF0ZS5wYXJzZShkYXRlKTtcclxuXHJcblxyXG4gICAgaWYgKGlzTmFOKGRhdGUpICYmICFpc05hTihwYXJzZWREYXRlKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGlzVmFsaWRFbWFpbExpc3QobGlzdDogc3RyaW5nKSB7XHJcblxyXG4gICAgaWYgKGxpc3QuaW5jbHVkZXMoXCI7XCIpKSB7XHJcblxyXG4gICAgICBsZXQgZW1haWxzID0gbGlzdC5zcGxpdChcIjtcIilcclxuXHJcbiAgICAgIGZvciAodmFyIGVtYWlsIG9mIGVtYWlscykge1xyXG4gICAgICAgIGlmICh0aGlzLmVtYWlsSXNWYWxpZChlbWFpbCkgPT0gZmFsc2UpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLmVtYWlsSXNWYWxpZChsaXN0KSA9PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIG51bGxEYXRlID0gXCIwMSBKYW4gMTk2OVwiXHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaXNOdW1iZXIodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICgodmFsdWUgIT0gbnVsbCkgJiZcclxuICAgICAgKHZhbHVlICE9PSAnJykgJiZcclxuICAgICAgIWlzTmFOKE51bWJlcih2YWx1ZS50b1N0cmluZygpKSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXREaWZmKHN0YXJ0RGF0ZSwgZW5kRGF0ZSA9IERhdGUoKSkge1xyXG5cclxuICAgIHZhciBldmVudFN0YXJ0VGltZSA9IG5ldyBEYXRlKHN0YXJ0RGF0ZSk7XHJcbiAgICB2YXIgZXZlbnRFbmRUaW1lID0gbmV3IERhdGUoZW5kRGF0ZSk7XHJcbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gZXZlbnRFbmRUaW1lLnZhbHVlT2YoKSAtIGV2ZW50U3RhcnRUaW1lLnZhbHVlT2YoKTtcclxuXHJcbiAgICBmdW5jdGlvbiBudW1iZXJFbmRpbmcobnVtYmVyOiBudW1iZXIpIHtcclxuXHJcbiAgICAgIGlmIChudW1iZXIudG9GaXhlZCgpID09ICcxJykge1xyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAncyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdmFyIG1pbnV0ZXMgPSAobWlsbGlzZWNvbmRzIC8gKDEwMDAgKiA2MCkpO1xyXG5cclxuICAgIHZhciBob3VyczogbnVtYmVyID0gKG1pbGxpc2Vjb25kcyAvICgxMDAwICogNjAgKiA2MCkpO1xyXG5cclxuICAgIHZhciBkYXlzID0gKG1pbGxpc2Vjb25kcyAvICgxMDAwICogNjAgKiA2MCAqIDI0KSk7XHJcblxyXG4gICAgdmFyIHdlZWtzOiBudW1iZXIgPSAobWlsbGlzZWNvbmRzIC8gKDEwMDAgKiA2MCAqIDYwICogMjQgKiA3KSk7XHJcblxyXG4gICAgdmFyIG1vbnRocyA9IChtaWxsaXNlY29uZHMgLyAoMTAwMCAqIDYwICogNjAgKiAyNCAqIDcgKiA0KSk7XHJcblxyXG4gICAgdmFyIHllYXJzID0gKG1pbGxpc2Vjb25kcyAvICgxMDAwICogNjAgKiA2MCAqIDI0ICogMzY1KSk7XHJcblxyXG5cclxuICAgIGlmICh5ZWFycyA+PSAxKSB7XHJcblxyXG4gICAgICByZXR1cm4geWVhcnMudG9GaXhlZCgpICsgJyB5ZWFyJyArIG51bWJlckVuZGluZyh5ZWFycyk7XHJcblxyXG4gICAgfSBlbHNlIGlmIChtb250aHMgPj0gMSkge1xyXG5cclxuICAgICAgcmV0dXJuIG1vbnRocy50b0ZpeGVkKCkgKyAnIG1vbnRoJyArIG51bWJlckVuZGluZyhtb250aHMpO1xyXG5cclxuICAgIH0gZWxzZSBpZiAod2Vla3MgPj0gMSkge1xyXG5cclxuICAgICAgcmV0dXJuIHdlZWtzLnRvRml4ZWQoKSArICcgd2VlaycgKyBudW1iZXJFbmRpbmcod2Vla3MpO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoZGF5cyA+PSAxKSB7XHJcblxyXG4gICAgICByZXR1cm4gZGF5cy50b0ZpeGVkKCkgKyAnIGRheScgKyBudW1iZXJFbmRpbmcoZGF5cyk7XHJcblxyXG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxKSB7XHJcblxyXG4gICAgICByZXR1cm4gaG91cnMudG9GaXhlZCgpICsgJyBob3VyJyArIG51bWJlckVuZGluZyhob3Vycyk7XHJcblxyXG4gICAgfSBlbHNlIGlmIChtaW51dGVzID49IDEpIHtcclxuXHJcbiAgICAgIHJldHVybiBtaW51dGVzLnRvRml4ZWQoKSArICcgbWludXRlJyArIG51bWJlckVuZGluZyhtaW51dGVzKTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKG1pbGxpc2Vjb25kcyA+PSAoLTEwMDAgKiA2MCkpIHtcclxuXHJcbiAgICAgIHJldHVybiAnYSBtaW51dGUnO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICByZXR1cm4gJ04vQSc7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgbm93RGF0ZShOb1RpbWU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cclxuICAgIGlmIChOb1RpbWUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0ZWREYXRlKERhdGUoKSwgdHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXRlZERhdGUoRGF0ZSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Rm9ybWF0ZWREYXRlKGRhdGVTdHJpbmc6IHN0cmluZywgTm9UaW1lOiBib29sZWFuID0gZmFsc2UpIHtcclxuXHJcbiAgICBsZXQgZDogRGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHJpbmcpO1xyXG4gICAgZC5zZXRIb3VycyhkLmdldEhvdXJzKCkgKyAyKTtcclxuXHJcbiAgICBpZiAoTm9UaW1lID09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIGQudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGQudG9JU09TdHJpbmcoKS5zcGxpdCgnLicpWzBdO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Rm9ybWF0ZWREYXRlMihkIDogRGF0ZSwgTm9UaW1lOiBib29sZWFuID0gZmFsc2UpIHtcclxuXHJcblxyXG4gICAgZC5zZXRIb3VycyhkLmdldEhvdXJzKCkgKyAyKTtcclxuXHJcbiAgICBpZiAoTm9UaW1lID09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIGQudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGQudG9JU09TdHJpbmcoKS5zcGxpdCgnLicpWzBdO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0QnVzaW5lc3NEYXRlc0NvdW50KHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcpIHtcclxuICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICB2YXIgX3N0YXJ0RGF0ZSA9IG5ldyBEYXRlKHN0YXJ0RGF0ZSk7XHJcbiAgICB2YXIgX2VuZERhdGUgPSBuZXcgRGF0ZShlbmREYXRlKTtcclxuXHJcbiAgICB2YXIgY3VyRGF0ZSA9IF9zdGFydERhdGU7XHJcblxyXG4gICAgd2hpbGUgKGN1ckRhdGUgPCBfZW5kRGF0ZSkge1xyXG4gICAgICB2YXIgZGF5T2ZXZWVrID0gY3VyRGF0ZS5nZXREYXkoKTtcclxuICAgICAgaWYgKCEoZGF5T2ZXZWVrID09IDYgfHwgZGF5T2ZXZWVrID09IDApKSBjb3VudCsrO1xyXG4gICAgICBjdXJEYXRlLnNldERhdGUoY3VyRGF0ZS5nZXREYXRlKCkgKyAxKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY291bnQ7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBEZXRhaWxzRGlhbG9nUHJvY2Vzc29yIHtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBwcm9jZXNzRGV0YWlsc0NvbmZpZyhkZXRhaWxzQ29uZmlnOiBEZXRhaWxzRGlhbG9nQ29uZmlnLCByb3c6IGFueSk6IERldGFpbHNEaWFsb2dDb25maWcge1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZWREZXRhaWxzQ29uZmlnIDogRGV0YWlsc0RpYWxvZ0NvbmZpZyA9IENvcmUuZ2V0Q2xvbmUoZGV0YWlsc0NvbmZpZyk7XHJcbiAgICB1cGRhdGVkRGV0YWlsc0NvbmZpZy5kZXRhaWxzID0gcm93O1xyXG5cclxuICAgIHVwZGF0ZWREZXRhaWxzQ29uZmlnLmZvcm1Db25maWcubW9kZSA9IHVwZGF0ZWREZXRhaWxzQ29uZmlnLm1vZGUgPz8gXCJ2aWV3XCI7XHJcblxyXG4gICAgaWYgKHVwZGF0ZWREZXRhaWxzQ29uZmlnLmhlcm9GaWVsZCkge1xyXG4gICAgICB1cGRhdGVkRGV0YWlsc0NvbmZpZy5oZXJvVmFsdWUgPSByb3dbdXBkYXRlZERldGFpbHNDb25maWcuaGVyb0ZpZWxkXTtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZVRhYmxlQ29uZmlnKHRhYmxlQ29uZmlnKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcuaGVyb0ZpZWxkID0gdXBkYXRlZERldGFpbHNDb25maWcuaGVyb0ZpZWxkO1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLmhlcm9WYWx1ZSA9IHVwZGF0ZWREZXRhaWxzQ29uZmlnLmhlcm9WYWx1ZTtcclxuICAgICAgICAvLyB0YWJsZUNvbmZpZy5zZXRIZXJvID0gdXBkYXRlZERldGFpbHNDb25maWcuc2V0SGVybztcclxuICAgICAgICB0YWJsZUNvbmZpZy5zZWFyY2hDb25maWcgPSBudWxsO1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLnRpbGVDb25maWcgPSBudWxsO1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLnBhcmVudERhdGEgPSB1cGRhdGVkRGV0YWlsc0NvbmZpZy5kZXRhaWxzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodXBkYXRlZERldGFpbHNDb25maWcudGFibGVDb25maWcpIHtcclxuICAgICAgICB1cGRhdGVUYWJsZUNvbmZpZyh1cGRhdGVkRGV0YWlsc0NvbmZpZy50YWJsZUNvbmZpZyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh1cGRhdGVkRGV0YWlsc0NvbmZpZy50YWJsZUNvbmZpZ3MpIHtcclxuICAgICAgICB1cGRhdGVkRGV0YWlsc0NvbmZpZy50YWJsZUNvbmZpZ3MuZm9yRWFjaCh1cGRhdGVUYWJsZUNvbmZpZyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm1Mb2FkVXJsKHRhYmxlQ29uZmlnKSB7XHJcbiAgICAgIGlmICh0YWJsZUNvbmZpZy5sb2FkQWN0aW9uICYmIHRhYmxlQ29uZmlnLmxvYWRDcml0ZXJpYSAmJiB0YWJsZUNvbmZpZy5sb2FkSURGaWVsZCkge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLmxvYWRBY3Rpb24udXJsID0gYCR7dGFibGVDb25maWcubG9hZEFjdGlvbi51cmwuc3BsaXQoJy8nKVswXX0vJHt0YWJsZUNvbmZpZy5sb2FkQ3JpdGVyaWF9LyR7dXBkYXRlZERldGFpbHNDb25maWcuZGV0YWlsc1t0YWJsZUNvbmZpZy5sb2FkSURGaWVsZF19YDtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlRyYW5zZm9ybWVkXCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTk9UIFRyYW5zZm9ybWVkXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVwZGF0ZWREZXRhaWxzQ29uZmlnLnRhYmxlQ29uZmlnKSB7XHJcbiAgICAgIHRyYW5zZm9ybUxvYWRVcmwodXBkYXRlZERldGFpbHNDb25maWcudGFibGVDb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cGRhdGVkRGV0YWlsc0NvbmZpZy50YWJsZUNvbmZpZ3MpIHtcclxuICAgICAgdXBkYXRlZERldGFpbHNDb25maWcudGFibGVDb25maWdzLmZvckVhY2godHJhbnNmb3JtTG9hZFVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVwZGF0ZWREZXRhaWxzQ29uZmlnO1xyXG4gIH1cclxuXHJcblxyXG4gIHN0YXRpYyBpbml0aWFsaXplQ29uZmlncyhkZXRhaWxzQ29uZmlnOiBEZXRhaWxzRGlhbG9nQ29uZmlnKSB7XHJcbiAgICBjb25zdCB0YWJsZUNvbmZpZyA9IGRldGFpbHNDb25maWcudGFibGVDb25maWc7XHJcbiAgICBjb25zdCB0YWJsZUNvbmZpZ3MgPSBkZXRhaWxzQ29uZmlnLnRhYmxlQ29uZmlncztcclxuICAgIGNvbnN0IGZvcm1Db25maWcgPSBkZXRhaWxzQ29uZmlnLmZvcm1Db25maWc7XHJcbiAgICBjb25zdCBidXR0b25zID0gZGV0YWlsc0NvbmZpZy5idXR0b25zO1xyXG4gICAgZm9ybUNvbmZpZy5tb2RlID0gZm9ybUNvbmZpZy5tb2RlID8/IFwidmlld1wiO1xyXG4gICAgcmV0dXJuIHsgdGFibGVDb25maWcsIHRhYmxlQ29uZmlncywgZm9ybUNvbmZpZywgYnV0dG9ucyB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHNldEhlcm9WYWx1ZShkZXRhaWxzQ29uZmlnOiBEZXRhaWxzRGlhbG9nQ29uZmlnLCBkZXRhaWxzOiBhbnkpIHtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhkZXRhaWxzQ29uZmlnKVxyXG5cclxuICAgIGlmICgoZGV0YWlsc0NvbmZpZy5mb3JtQ29uZmlnLm1vZGUgPT0gXCJjcmVhdGVcIiAgKSAmJiBkZXRhaWxzQ29uZmlnLmhlcm9GaWVsZCAmJiBkZXRhaWxzQ29uZmlnLmhlcm9WYWx1ZSkge1xyXG4gICAgICBkZXRhaWxzW2RldGFpbHNDb25maWcuaGVyb0ZpZWxkXSA9IGRldGFpbHNDb25maWcuaGVyb1ZhbHVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKGRldGFpbHNDb25maWcuY29uZmlnLm1vZGUgIT0gXCJjcmVhdGVcIiAmJiBkZXRhaWxzQ29uZmlnLmhlcm9GaWVsZCkge1xyXG4gICAgLy8gICBkZXRhaWxzQ29uZmlnLmhlcm9WYWx1ZSA9IGRldGFpbHNbZGV0YWlsc0NvbmZpZy5oZXJvRmllbGRdO1xyXG4gICAgLy8gfVxyXG5cclxuXHJcbiAgICBjb25zb2xlLmxvZyhkZXRhaWxzQ29uZmlnKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGhhbmRsZUZvcm1Nb2RlKGRldGFpbHNDb25maWc6IERldGFpbHNEaWFsb2dDb25maWcsIGZvcm1Db25maWc6IEZvcm1Db25maWcsKSB7XHJcbiAgICBsZXQgZGV0YWlscztcclxuICAgIGxldCBhY3Rpb247XHJcbiAgICBsZXQgbG9hZEJ5QWN0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGZvcm1Db25maWcubW9kZSA9PT0gXCJjcmVhdGVcIikge1xyXG5cclxuICAgICAgZGV0YWlscyA9IENvcmUuZ2VuZXJhdGVPYmplY3QoZm9ybUNvbmZpZy5maWVsZHMpO1xyXG5cclxuICAgICAgLy8gdGhpcy5zZXRIZXJvVmFsdWUoZGV0YWlsc0NvbmZpZywgZGV0YWlscyk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHJlc3AgPSB0aGlzLmxvYWREZXRhaWxzRGF0YShkZXRhaWxzQ29uZmlnLCBmb3JtQ29uZmlnKTtcclxuICAgICAgZGV0YWlscyA9IHJlc3AuZGV0YWlscztcclxuXHJcbiAgICAgIGFjdGlvbiA9IHJlc3AuYWN0aW9uO1xyXG4gICAgICBsb2FkQnlBY3Rpb24gPSByZXNwLmxvYWRCeUFjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyBkZXRhaWxzLCBsb2FkQnlBY3Rpb24sIGFjdGlvbiB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgbG9hZERldGFpbHNEYXRhKGRldGFpbHNDb25maWc6IERldGFpbHNEaWFsb2dDb25maWcsIGZvcm1Db25maWc6IEZvcm1Db25maWcpIHtcclxuXHJcbiAgICBsZXQgZGV0YWlscztcclxuICAgIGxldCBhY3Rpb247XHJcbiAgICBsZXQgbG9hZEJ5QWN0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJMb2FkaW5nIERldGFpbHMgRGF0YVwiIClcclxuICAgIGNvbnNvbGUubG9nKGRldGFpbHNDb25maWcpXHJcbiAgICBjb25zb2xlLmxvZyhmb3JtQ29uZmlnKVxyXG5cclxuXHJcblxyXG4gICAgLy9DaG9vc2Ugc291cmNlXHJcbiAgICBpZiAoZGV0YWlsc0NvbmZpZy5kZXRhaWxzU291cmNlID09IERldGFpbHNTb3VyY2UuUm93KSB7XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhcIkRldGFpbHMgRGF0YSBSb3cgY29uZmlnXCIpXHJcbiAgICAgIGRldGFpbHMgPSBkZXRhaWxzQ29uZmlnLmRldGFpbHM7XHJcblxyXG4gICAgfSBlbHNlIGlmIChkZXRhaWxzQ29uZmlnLmRldGFpbHNTb3VyY2UgPT0gRGV0YWlsc1NvdXJjZS5VcmwpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJEZXRhaWxzIERhdGEgVXJsIGNvbmZpZ1wiKVxyXG4gICAgICBhY3Rpb24gPSB0aGlzLmxvYWREZXRhaWxzRnJvbVVybChkZXRhaWxzQ29uZmlnLCBmb3JtQ29uZmlnKTtcclxuICAgICAgbG9hZEJ5QWN0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkRldGFpbHMgRGF0YSBFbHNlXCIpXHJcbiAgICAgIGlmIChkZXRhaWxzQ29uZmlnLmRldGFpbHMgJiYgIWRldGFpbHNDb25maWcuaGVyb0ZpZWxkICYmICFkZXRhaWxzQ29uZmlnLmhlcm9WYWx1ZSkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhcInVzaW5nIGZvcm0gZGF0YSBmcm9tIGRldGFpbHNcIik7XHJcbiAgICAgICAgY29uc29sZS5sb2coZGV0YWlsc0NvbmZpZyk7XHJcbiAgICAgICAgZGV0YWlscyA9IGRldGFpbHNDb25maWcuZGV0YWlscztcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAoZm9ybUNvbmZpZy5sb2FkQWN0aW9uKSB7XHJcblxyXG4gICAgICAgIGFjdGlvbiA9IHRoaXMubG9hZERldGFpbHNGcm9tVXJsKGRldGFpbHNDb25maWcsIGZvcm1Db25maWcpO1xyXG4gICAgICAgIGxvYWRCeUFjdGlvbiA9IHRydWU7XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiYXV0byBkYXRhIHNvdXJjZSBmYWlsZWQgdG8gcGljaywgdHJ5aW5nIHNvdXJjZSBjb25maWdcIik7XHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIHJldHVybiB7IGRldGFpbHMsIGxvYWRCeUFjdGlvbiwgYWN0aW9uIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBsb2FkRGV0YWlsc0Zyb21VcmwoZGV0YWlsc0NvbmZpZzogRGV0YWlsc0RpYWxvZ0NvbmZpZywgZm9ybUNvbmZpZzogRm9ybUNvbmZpZykge1xyXG4gICAgbGV0IGFjdGlvbjtcclxuXHJcbiAgICBpZiAoZm9ybUNvbmZpZy5sb2FkQWN0aW9uKSB7XHJcblxyXG4gICAgICBpZiAoZGV0YWlsc0NvbmZpZy5oZXJvRmllbGQgJiYgZGV0YWlsc0NvbmZpZy5kZXRhaWxzKSB7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwidXNpbmcgZm9ybSBkYXRhIGZyb20gdXJsICsgSUQgRmllbGQgXCIgKyBkZXRhaWxzQ29uZmlnLmhlcm9GaWVsZCk7XHJcbiAgICAgICAgYWN0aW9uID0geyB1cmw6IGAke2Zvcm1Db25maWcubG9hZEFjdGlvbi51cmx9LyR7ZGV0YWlsc0NvbmZpZy5kZXRhaWxzW2RldGFpbHNDb25maWcuaGVyb0ZpZWxkXX1gIH07XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKGRldGFpbHNDb25maWcuaGVyb1ZhbHVlKSB7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwidXNpbmcgZm9ybSBkYXRhIGZyb20gdXJsICsgU29saWQgSURcIik7XHJcbiAgICAgICAgYWN0aW9uID0geyB1cmw6IGAke2Zvcm1Db25maWcubG9hZEFjdGlvbi51cmx9LyR7ZGV0YWlsc0NvbmZpZy5oZXJvVmFsdWV9YCB9O1xyXG5cclxuICAgICAgfVxyXG4gICAgICBlbHNle1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwidXJsIHNvdXJjZSBmYWlsZWQgOiBzZXR1cCBoZXJvIGZpZWxkIG9yIGhlcm8gdmFsdWVcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9ZWxzZXtcclxuICAgICAgY29uc29sZS5sb2coXCJObyBsb2FkIGFjdGlvbiBzZXRcIik7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICByZXR1cm4gYWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHNldEZpbGVGaWVsZChmb3JtQ29uZmlnOiBGb3JtQ29uZmlnKSB7XHJcbiAgICByZXR1cm4gZm9ybUNvbmZpZy5maWVsZHMuZmluZCh4ID0+IHgudHlwZSA9PT0gJ2ZpbGUnKTtcclxuICB9XHJcblxyXG5cclxuICBzdGF0aWMgc2V0dXBCdXR0b25zKGZvcm1Db25maWc6IEZvcm1Db25maWcsIGJ1dHRvbnM6IGFueSkge1xyXG4gICAgbGV0IGV4dHJhQnV0dG9ucywgY3JlYXRlQnV0dG9uLCBlZGl0QnV0dG9uLCBkZWxldGVCdXR0b247XHJcblxyXG4gICAgaWYgKGJ1dHRvbnMpIHtcclxuICAgICAgaWYgKGZvcm1Db25maWcubW9kZSAhPT0gXCJjcmVhdGVcIikge1xyXG4gICAgICAgIGV4dHJhQnV0dG9ucyA9IGJ1dHRvbnMuZmlsdGVyKHggPT4geC5uYW1lICE9PSBcImNyZWF0ZVwiICYmIHgubmFtZSAhPT0gXCJlZGl0XCIgJiYgeC5uYW1lICE9PSBcImRlbGV0ZVwiICYmIHgubmFtZSAhPT0gXCJ2aWV3XCIgJiYgeC5pbkRpYWxvZyk7XHJcbiAgICAgIH1cclxuICAgICAgY3JlYXRlQnV0dG9uID0gYnV0dG9ucy5maW5kKHggPT4geC5uYW1lID09PSBcImNyZWF0ZVwiKTtcclxuICAgICAgZWRpdEJ1dHRvbiA9IGJ1dHRvbnMuZmluZCh4ID0+IHgubmFtZSA9PT0gXCJlZGl0XCIpO1xyXG4gICAgICBkZWxldGVCdXR0b24gPSBidXR0b25zLmZpbmQoeCA9PiB4Lm5hbWUgPT09IFwiZGVsZXRlXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgZXh0cmFCdXR0b25zLCBjcmVhdGVCdXR0b24sIGVkaXRCdXR0b24sIGRlbGV0ZUJ1dHRvbiB9O1xyXG4gIH1cclxuXHJcblxyXG59XHJcblxyXG5cclxuIl19
|
|
400
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGluQ29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jbGFzc2VzL1RpbkNvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixhQUFhLEVBQXFCLE1BQU0sV0FBVyxDQUFDO0FBRWxGLE1BQU0sT0FBTyxJQUFJO0lBR1IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHO1FBQ3pCLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDM0MsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN0QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbkIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDMUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUVELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFJTSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWE7UUFDdEMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV6QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFB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Q0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7WUFDdEQsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ2xELFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztTQUN2RDtRQUNELE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXRhaWxzRGlhbG9nQ29uZmlnLCBEZXRhaWxzU291cmNlLCBGaWVsZCwgRm9ybUNvbmZpZyB9IGZyb20gXCIuL0NsYXNzZXNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3JlIHtcclxuXHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZGVlcENsb25lKG9iaikge1xyXG4gICAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcclxuICAgICAgY29uc3QgYXJyQ29weSA9IFtdO1xyXG4gICAgICBvYmouZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBhcnJDb3B5W2luZGV4XSA9IHRoaXMuZGVlcENsb25lKGl0ZW0pO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGFyckNvcHk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb2JqQ29weSA9IHt9O1xyXG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIG9iakNvcHlba2V5XSA9IHRoaXMuZGVlcENsb25lKG9ialtrZXldKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG9iakNvcHk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgY2FtZWxUb1dvcmRzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHZhbHVlO1xyXG5cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWU7XHJcblxyXG4gICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAwKSByZXR1cm4gdmFsdWU7XHJcblxyXG4gICAgbGV0IHYgPSB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbHVlLnN1YnN0cmluZygxKVxyXG4gICAgcmV0dXJuIHYucmVwbGFjZSgvKFtBLVpdKykqKFtBLVpdW2Etel0pL2csIFwiJDEgJDJcIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlT2JqZWN0KGZpZWxkczogRmllbGRbXSkge1xyXG5cclxuICAgIGxldCBkYXRhID0ge307XHJcbiAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcblxyXG4gICAgICBpZiAoZmllbGQudHlwZSAhPSAnc2VjdGlvbicgJiYgZmllbGQudHlwZSAhPSAnYmxhbmsnICl7XHJcbiAgICAgICAgZGF0YVtmaWVsZC5uYW1lXSA9IHRoaXMuZ2V0SW5pdGlhbFZhbHVlKGZpZWxkKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByZXNldE9iamVjdChmaWVsZHM6IEZpZWxkW10sIGRhdGEpIHtcclxuXHJcbiAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGlmIChmaWVsZC50eXBlICE9ICdzZWN0aW9uJyAmJiBmaWVsZC50eXBlICE9ICdibGFuaycpIHtcclxuICAgICAgICBkYXRhW2ZpZWxkLm5hbWVdID0gdGhpcy5nZXRJbml0aWFsVmFsdWUoZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHRlc3RWaXNpYmxlKGNvbmZpZyA6IEZvcm1Db25maWcsIGRhdGEsIGY6IEZpZWxkKTogYm9vbGVhbiB7XHJcblxyXG4gICAgaWYgKGYuaGlkZGVuKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGNvbmZpZy5tb2RlID09ICdjcmVhdGUnICYmIGYuaGlkZU9uQ3JlYXRlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKGNvbmZpZy5tb2RlICE9ICdjcmVhdGUnICYmIGYuaGlkZU9uRXhpc3RzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZi5oaWRkZW5Db25kaXRpb24pIHtcclxuICAgICAgcmV0dXJuICFmLmhpZGRlbkNvbmRpdGlvbihkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRhdGVPYmplY3QoZmllbGRzOiBGaWVsZFtdLCBkYXRhKTogc3RyaW5nIHtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlZhbGlkYXRpb25zXCIpXHJcblxyXG4gICAgZm9yIChsZXQgZmllbGQgb2YgZmllbGRzKSB7XHJcblxyXG4gICAgICBpZiAoZmllbGQudHlwZSA9PSAnZmlsZScgfHwgZmllbGQudHlwZSA9PSAnZmlsZS12aWV3JyB8fCBmaWVsZC50eXBlID09ICdibGFuaycgfHwgZmllbGQudHlwZSA9PSAnc2VjdGlvbicgKSBjb250aW51ZVxyXG5cclxuXHJcblxyXG4gICAgICBsZXQgbmFtZSA9IGZpZWxkLmFsaWFzID8/IHRoaXMuY2FtZWxUb1dvcmRzKGZpZWxkLm5hbWUpO1xyXG4gICAgICBsZXQgZCA9IGRhdGFbZmllbGQubmFtZV07XHJcblxyXG5cclxuICAgICAgY29uc29sZS5sb2cobmFtZSArICcgJyArIGQpXHJcblxyXG4gICAgICBpZiAoZmllbGQucmVxdWlyZWQpe1xyXG5cclxuICAgICAgICBpZiAoZCA9PSB1bmRlZmluZWQgfHwgZCA9PSBudWxsKSByZXR1cm4gYCR7bmFtZX0gaXMgcmVxdWlyZWRgO1xyXG5cclxuICAgICAgICBpZiAoZmllbGQudHlwZSA9PSAndGV4dCcpe1xyXG5cclxuICAgICAgICAgIGlmIChkID09ICcnKSByZXR1cm4gYFBsZWFzZSBlbnRlciAke25hbWV9YDtcclxuXHJcbiAgICAgICAgICBpZiAoZmllbGQubWluICYmIGQubGVuZ3RoIDwgZmllbGQubWluKSByZXR1cm4gYE1pbmltdW0gICR7bmFtZX0gbGVuZ3RoIGlzICR7ZmllbGQubWlufWBcclxuXHJcbiAgICAgICAgICBpZiAoZmllbGQubWF4ICYmIGQubGVuZ3RoID4gZmllbGQubWF4KSByZXR1cm4gYE1heGltdW0gJHtuYW1lfSBsZW5ndGggaXMgJHtmaWVsZC5tYXh9YFxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZmllbGQudHlwZSA9PSAnbnVtYmVyJyB8fCBmaWVsZC50eXBlID09ICdtb25leScgfHwgZmllbGQudHlwZSA9PSAnZGF0ZScpe1xyXG5cclxuICAgICAgICAgIGlmIChmaWVsZC5taW4gJiYgZCA8IGZpZWxkLm1pbikgcmV0dXJuIGBNaW5pbXVtICAke25hbWV9IGlzICR7ZmllbGQubWlufWBcclxuXHJcbiAgICAgICAgICBpZiAoZmllbGQubWF4ICYmIGQgPiBmaWVsZC5tYXgpIHJldHVybiBgTWF4aW11bSAke25hbWV9IGlzICR7ZmllbGQubWF4fWBcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGZpZWxkLnR5cGUgPT0gJ3NlbGVjdCcpIHtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mKGQpID09ICdzdHJpbmcnICYmIGQgPT0gJycpIHJldHVybiBgUGxlYXNlIHNlbGVjdCAke25hbWV9YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZXRJbml0aWFsVmFsdWUoZmllbGQ6IEZpZWxkKSB7XHJcblxyXG4gICAgaWYgKGZpZWxkLmRlZmF1bHRWYWx1ZSl7XHJcblxyXG4gICAgICBpZiAoZmllbGQudHlwZSA9PSAnZGF0ZScgfHwgZmllbGQudHlwZSA9PSAnZGF0ZXRpbWUnICYmIGZpZWxkLmRlZmF1bHRWYWx1ZSA9PSAnbm93JykgcmV0dXJuIHRoaXMubm93RGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgIHJldHVybiBmaWVsZC5kZWZhdWx0VmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpZWxkLnR5cGUgPT0gJ3NlbGVjdCcgJiYgKGZpZWxkLmhpZGRlbiB8fCBmaWVsZC5oaWRlT25DcmVhdGUpKSByZXR1cm4gMDtcclxuXHJcbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcclxuICAgICAgY2FzZSAndGV4dCc6XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICBjYXNlICdtb25leSc6XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLm5vd0RhdGUodHJ1ZSk7XHJcbiAgICAgIGNhc2UgJ2NoZWNrYm94JzpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGNhc2UgJ3NlbGVjdCc6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Q2xvbmUoeCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVlcENsb25lKHgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXROdW1iZXIodmFsdWU6IHN0cmluZykge1xyXG5cclxuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09IFwiXCIpIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb25seU51bWJlcnMgPSB2YWx1ZS5yZXBsYWNlKC9bXlxcZC4tXS9nLCAnJyk7XHJcbiAgICByZXR1cm4gb25seU51bWJlcnNcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Rmlyc3REYXlPZk1vbnRoKCkge1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIDEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBlbWFpbElzVmFsaWQoZW1haWwpIHtcclxuICAgIC8vIHJldHVybiAvXFxTK0BcXFMrXFwuXFxTKy8udGVzdChlbWFpbClcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWxpZFVOQ1BhdGgocGF0aDogc3RyaW5nKSB7XHJcbiAgICAvLyByZXR1cm4gL1xcXFxcXFxcKFthLXpBLVowLTlfLiTil48tXSspXFxcXChbYS16QS1aMC05Xy4k4pePLV0rKS4qLy50ZXN0KHBhdGgpXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGlzVmFsaWREYXRlKGRhdGUpIHtcclxuXHJcbiAgICB2YXIgcGFyc2VkRGF0ZSA9IERhdGUucGFyc2UoZGF0ZSk7XHJcblxyXG5cclxuICAgIGlmIChpc05hTihkYXRlKSAmJiAhaXNOYU4ocGFyc2VkRGF0ZSkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBpc1ZhbGlkRW1haWxMaXN0KGxpc3Q6IHN0cmluZykge1xyXG5cclxuICAgIGlmIChsaXN0LmluY2x1ZGVzKFwiO1wiKSkge1xyXG5cclxuICAgICAgbGV0IGVtYWlscyA9IGxpc3Quc3BsaXQoXCI7XCIpXHJcblxyXG4gICAgICBmb3IgKHZhciBlbWFpbCBvZiBlbWFpbHMpIHtcclxuICAgICAgICBpZiAodGhpcy5lbWFpbElzVmFsaWQoZW1haWwpID09IGZhbHNlKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5lbWFpbElzVmFsaWQobGlzdCkgPT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBudWxsRGF0ZSA9IFwiMDEgSmFuIDE5NjlcIlxyXG5cclxuICBwdWJsaWMgc3RhdGljIGlzTnVtYmVyKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoKHZhbHVlICE9IG51bGwpICYmXHJcbiAgICAgICh2YWx1ZSAhPT0gJycpICYmXHJcbiAgICAgICFpc05hTihOdW1iZXIodmFsdWUudG9TdHJpbmcoKSkpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RGlmZihzdGFydERhdGUsIGVuZERhdGUgPSBEYXRlKCkpIHtcclxuXHJcbiAgICB2YXIgZXZlbnRTdGFydFRpbWUgPSBuZXcgRGF0ZShzdGFydERhdGUpO1xyXG4gICAgdmFyIGV2ZW50RW5kVGltZSA9IG5ldyBEYXRlKGVuZERhdGUpO1xyXG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGV2ZW50RW5kVGltZS52YWx1ZU9mKCkgLSBldmVudFN0YXJ0VGltZS52YWx1ZU9mKCk7XHJcblxyXG4gICAgZnVuY3Rpb24gbnVtYmVyRW5kaW5nKG51bWJlcjogbnVtYmVyKSB7XHJcblxyXG4gICAgICBpZiAobnVtYmVyLnRvRml4ZWQoKSA9PSAnMScpIHtcclxuICAgICAgICByZXR1cm4gJydcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gJ3MnO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHZhciBtaW51dGVzID0gKG1pbGxpc2Vjb25kcyAvICgxMDAwICogNjApKTtcclxuXHJcbiAgICB2YXIgaG91cnM6IG51bWJlciA9IChtaWxsaXNlY29uZHMgLyAoMTAwMCAqIDYwICogNjApKTtcclxuXHJcbiAgICB2YXIgZGF5cyA9IChtaWxsaXNlY29uZHMgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkpO1xyXG5cclxuICAgIHZhciB3ZWVrczogbnVtYmVyID0gKG1pbGxpc2Vjb25kcyAvICgxMDAwICogNjAgKiA2MCAqIDI0ICogNykpO1xyXG5cclxuICAgIHZhciBtb250aHMgPSAobWlsbGlzZWNvbmRzIC8gKDEwMDAgKiA2MCAqIDYwICogMjQgKiA3ICogNCkpO1xyXG5cclxuICAgIHZhciB5ZWFycyA9IChtaWxsaXNlY29uZHMgLyAoMTAwMCAqIDYwICogNjAgKiAyNCAqIDM2NSkpO1xyXG5cclxuXHJcbiAgICBpZiAoeWVhcnMgPj0gMSkge1xyXG5cclxuICAgICAgcmV0dXJuIHllYXJzLnRvRml4ZWQoKSArICcgeWVhcicgKyBudW1iZXJFbmRpbmcoeWVhcnMpO1xyXG5cclxuICAgIH0gZWxzZSBpZiAobW9udGhzID49IDEpIHtcclxuXHJcbiAgICAgIHJldHVybiBtb250aHMudG9GaXhlZCgpICsgJyBtb250aCcgKyBudW1iZXJFbmRpbmcobW9udGhzKTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKHdlZWtzID49IDEpIHtcclxuXHJcbiAgICAgIHJldHVybiB3ZWVrcy50b0ZpeGVkKCkgKyAnIHdlZWsnICsgbnVtYmVyRW5kaW5nKHdlZWtzKTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKGRheXMgPj0gMSkge1xyXG5cclxuICAgICAgcmV0dXJuIGRheXMudG9GaXhlZCgpICsgJyBkYXknICsgbnVtYmVyRW5kaW5nKGRheXMpO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMSkge1xyXG5cclxuICAgICAgcmV0dXJuIGhvdXJzLnRvRml4ZWQoKSArICcgaG91cicgKyBudW1iZXJFbmRpbmcoaG91cnMpO1xyXG5cclxuICAgIH0gZWxzZSBpZiAobWludXRlcyA+PSAxKSB7XHJcblxyXG4gICAgICByZXR1cm4gbWludXRlcy50b0ZpeGVkKCkgKyAnIG1pbnV0ZScgKyBudW1iZXJFbmRpbmcobWludXRlcyk7XHJcblxyXG4gICAgfSBlbHNlIGlmIChtaWxsaXNlY29uZHMgPj0gKC0xMDAwICogNjApKSB7XHJcblxyXG4gICAgICByZXR1cm4gJ2EgbWludXRlJztcclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgcmV0dXJuICdOL0EnO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgc3RhdGljIG5vd0RhdGUoTm9UaW1lOiBib29sZWFuID0gZmFsc2UpIHtcclxuXHJcbiAgICBpZiAoTm9UaW1lKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdGVkRGF0ZShEYXRlKCksIHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0ZWREYXRlKERhdGUoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldEZvcm1hdGVkRGF0ZShkYXRlU3RyaW5nOiBzdHJpbmcsIE5vVGltZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcblxyXG4gICAgbGV0IGQ6IERhdGUgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKTtcclxuICAgIGQuc2V0SG91cnMoZC5nZXRIb3VycygpICsgMik7XHJcblxyXG4gICAgaWYgKE5vVGltZSA9PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiBkLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBkLnRvSVNPU3RyaW5nKCkuc3BsaXQoJy4nKVswXTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldEZvcm1hdGVkRGF0ZTIoZCA6IERhdGUsIE5vVGltZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcblxyXG5cclxuICAgIGQuc2V0SG91cnMoZC5nZXRIb3VycygpICsgMik7XHJcblxyXG4gICAgaWYgKE5vVGltZSA9PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiBkLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBkLnRvSVNPU3RyaW5nKCkuc3BsaXQoJy4nKVswXTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldEJ1c2luZXNzRGF0ZXNDb3VudChzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nKSB7XHJcbiAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgdmFyIF9zdGFydERhdGUgPSBuZXcgRGF0ZShzdGFydERhdGUpO1xyXG4gICAgdmFyIF9lbmREYXRlID0gbmV3IERhdGUoZW5kRGF0ZSk7XHJcblxyXG4gICAgdmFyIGN1ckRhdGUgPSBfc3RhcnREYXRlO1xyXG5cclxuICAgIHdoaWxlIChjdXJEYXRlIDwgX2VuZERhdGUpIHtcclxuICAgICAgdmFyIGRheU9mV2VlayA9IGN1ckRhdGUuZ2V0RGF5KCk7XHJcbiAgICAgIGlmICghKGRheU9mV2VlayA9PSA2IHx8IGRheU9mV2VlayA9PSAwKSkgY291bnQrKztcclxuICAgICAgY3VyRGF0ZS5zZXREYXRlKGN1ckRhdGUuZ2V0RGF0ZSgpICsgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvdW50O1xyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRGV0YWlsc0RpYWxvZ1Byb2Nlc3NvciB7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcHJvY2Vzc0RldGFpbHNDb25maWcoZGV0YWlsc0NvbmZpZzogRGV0YWlsc0RpYWxvZ0NvbmZpZywgcm93OiBhbnkpOiBEZXRhaWxzRGlhbG9nQ29uZmlnIHtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVkRGV0YWlsc0NvbmZpZyA6IERldGFpbHNEaWFsb2dDb25maWcgPSBDb3JlLmdldENsb25lKGRldGFpbHNDb25maWcpO1xyXG4gICAgdXBkYXRlZERldGFpbHNDb25maWcuZGV0YWlscyA9IHJvdztcclxuXHJcbiAgICB1cGRhdGVkRGV0YWlsc0NvbmZpZy5mb3JtQ29uZmlnLm1vZGUgPSB1cGRhdGVkRGV0YWlsc0NvbmZpZy5tb2RlID8/IFwidmlld1wiO1xyXG5cclxuICAgIGlmICh1cGRhdGVkRGV0YWlsc0NvbmZpZy5oZXJvRmllbGQpIHtcclxuICAgICAgdXBkYXRlZERldGFpbHNDb25maWcuaGVyb1ZhbHVlID0gcm93W3VwZGF0ZWREZXRhaWxzQ29uZmlnLmhlcm9GaWVsZF07XHJcblxyXG4gICAgICBmdW5jdGlvbiB1cGRhdGVUYWJsZUNvbmZpZyh0YWJsZUNvbmZpZykge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLmhlcm9GaWVsZCA9IHVwZGF0ZWREZXRhaWxzQ29uZmlnLmhlcm9GaWVsZDtcclxuICAgICAgICB0YWJsZUNvbmZpZy5oZXJvVmFsdWUgPSB1cGRhdGVkRGV0YWlsc0NvbmZpZy5oZXJvVmFsdWU7XHJcbiAgICAgICAgLy8gdGFibGVDb25maWcuc2V0SGVybyA9IHVwZGF0ZWREZXRhaWxzQ29uZmlnLnNldEhlcm87XHJcbiAgICAgICAgdGFibGVDb25maWcuc2VhcmNoQ29uZmlnID0gbnVsbDtcclxuICAgICAgICB0YWJsZUNvbmZpZy50aWxlQ29uZmlnID0gbnVsbDtcclxuICAgICAgICB0YWJsZUNvbmZpZy5wYXJlbnREYXRhID0gdXBkYXRlZERldGFpbHNDb25maWcuZGV0YWlscztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHVwZGF0ZWREZXRhaWxzQ29uZmlnLnRhYmxlQ29uZmlnKSB7XHJcbiAgICAgICAgdXBkYXRlVGFibGVDb25maWcodXBkYXRlZERldGFpbHNDb25maWcudGFibGVDb25maWcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodXBkYXRlZERldGFpbHNDb25maWcudGFibGVDb25maWdzKSB7XHJcbiAgICAgICAgdXBkYXRlZERldGFpbHNDb25maWcudGFibGVDb25maWdzLmZvckVhY2godXBkYXRlVGFibGVDb25maWcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtTG9hZFVybCh0YWJsZUNvbmZpZykge1xyXG4gICAgICBpZiAodGFibGVDb25maWcubG9hZEFjdGlvbiAmJiB0YWJsZUNvbmZpZy5sb2FkQ3JpdGVyaWEgJiYgdGFibGVDb25maWcubG9hZElERmllbGQpIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5sb2FkQWN0aW9uLnVybCA9IGAke3RhYmxlQ29uZmlnLmxvYWRBY3Rpb24udXJsLnNwbGl0KCcvJylbMF19LyR7dGFibGVDb25maWcubG9hZENyaXRlcmlhfS8ke3VwZGF0ZWREZXRhaWxzQ29uZmlnLmRldGFpbHNbdGFibGVDb25maWcubG9hZElERmllbGRdfWA7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJUcmFuc2Zvcm1lZFwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk5PVCBUcmFuc2Zvcm1lZFwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cGRhdGVkRGV0YWlsc0NvbmZpZy50YWJsZUNvbmZpZykge1xyXG4gICAgICB0cmFuc2Zvcm1Mb2FkVXJsKHVwZGF0ZWREZXRhaWxzQ29uZmlnLnRhYmxlQ29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodXBkYXRlZERldGFpbHNDb25maWcudGFibGVDb25maWdzKSB7XHJcbiAgICAgIHVwZGF0ZWREZXRhaWxzQ29uZmlnLnRhYmxlQ29uZmlncy5mb3JFYWNoKHRyYW5zZm9ybUxvYWRVcmwpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1cGRhdGVkRGV0YWlsc0NvbmZpZztcclxuICB9XHJcblxyXG5cclxuICBzdGF0aWMgaW5pdGlhbGl6ZUNvbmZpZ3MoZGV0YWlsc0NvbmZpZzogRGV0YWlsc0RpYWxvZ0NvbmZpZykge1xyXG4gICAgY29uc3QgdGFibGVDb25maWcgPSBkZXRhaWxzQ29uZmlnLnRhYmxlQ29uZmlnO1xyXG4gICAgY29uc3QgdGFibGVDb25maWdzID0gZGV0YWlsc0NvbmZpZy50YWJsZUNvbmZpZ3M7XHJcbiAgICBjb25zdCBmb3JtQ29uZmlnID0gZGV0YWlsc0NvbmZpZy5mb3JtQ29uZmlnO1xyXG4gICAgY29uc3QgYnV0dG9ucyA9IGRldGFpbHNDb25maWcuYnV0dG9ucztcclxuICAgIGZvcm1Db25maWcubW9kZSA9IGZvcm1Db25maWcubW9kZSA/PyBcInZpZXdcIjtcclxuICAgIHJldHVybiB7IHRhYmxlQ29uZmlnLCB0YWJsZUNvbmZpZ3MsIGZvcm1Db25maWcsIGJ1dHRvbnMgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzZXRIZXJvVmFsdWUoZGV0YWlsc0NvbmZpZzogRGV0YWlsc0RpYWxvZ0NvbmZpZywgZGV0YWlsczogYW55KSB7XHJcblxyXG4gICAgY29uc29sZS5sb2coZGV0YWlsc0NvbmZpZylcclxuXHJcbiAgICBpZiAoKGRldGFpbHNDb25maWcuZm9ybUNvbmZpZy5tb2RlID09IFwiY3JlYXRlXCIgICkgJiYgZGV0YWlsc0NvbmZpZy5oZXJvRmllbGQgJiYgZGV0YWlsc0NvbmZpZy5oZXJvVmFsdWUpIHtcclxuICAgICAgZGV0YWlsc1tkZXRhaWxzQ29uZmlnLmhlcm9GaWVsZF0gPSBkZXRhaWxzQ29uZmlnLmhlcm9WYWx1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIChkZXRhaWxzQ29uZmlnLmNvbmZpZy5tb2RlICE9IFwiY3JlYXRlXCIgJiYgZGV0YWlsc0NvbmZpZy5oZXJvRmllbGQpIHtcclxuICAgIC8vICAgZGV0YWlsc0NvbmZpZy5oZXJvVmFsdWUgPSBkZXRhaWxzW2RldGFpbHNDb25maWcuaGVyb0ZpZWxkXTtcclxuICAgIC8vIH1cclxuXHJcblxyXG4gICAgY29uc29sZS5sb2coZGV0YWlsc0NvbmZpZylcclxuICB9XHJcblxyXG4gIHN0YXRpYyBoYW5kbGVGb3JtTW9kZShkZXRhaWxzQ29uZmlnOiBEZXRhaWxzRGlhbG9nQ29uZmlnLCBmb3JtQ29uZmlnOiBGb3JtQ29uZmlnLCkge1xyXG4gICAgbGV0IGRldGFpbHM7XHJcbiAgICBsZXQgYWN0aW9uO1xyXG4gICAgbGV0IGxvYWRCeUFjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChmb3JtQ29uZmlnLm1vZGUgPT09IFwiY3JlYXRlXCIpIHtcclxuXHJcbiAgICAgIGRldGFpbHMgPSBDb3JlLmdlbmVyYXRlT2JqZWN0KGZvcm1Db25maWcuZmllbGRzKTtcclxuXHJcbiAgICAgIC8vIHRoaXMuc2V0SGVyb1ZhbHVlKGRldGFpbHNDb25maWcsIGRldGFpbHMpO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCByZXNwID0gdGhpcy5sb2FkRGV0YWlsc0RhdGEoZGV0YWlsc0NvbmZpZywgZm9ybUNvbmZpZyk7XHJcbiAgICAgIGRldGFpbHMgPSByZXNwLmRldGFpbHM7XHJcblxyXG4gICAgICBhY3Rpb24gPSByZXNwLmFjdGlvbjtcclxuICAgICAgbG9hZEJ5QWN0aW9uID0gcmVzcC5sb2FkQnlBY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgZGV0YWlscywgbG9hZEJ5QWN0aW9uLCBhY3Rpb24gfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGxvYWREZXRhaWxzRGF0YShkZXRhaWxzQ29uZmlnOiBEZXRhaWxzRGlhbG9nQ29uZmlnLCBmb3JtQ29uZmlnOiBGb3JtQ29uZmlnKSB7XHJcblxyXG4gICAgbGV0IGRldGFpbHM7XHJcbiAgICBsZXQgYWN0aW9uO1xyXG4gICAgbGV0IGxvYWRCeUFjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiTG9hZGluZyBEZXRhaWxzIERhdGFcIiApXHJcbiAgICBjb25zb2xlLmxvZyhkZXRhaWxzQ29uZmlnKVxyXG4gICAgY29uc29sZS5sb2coZm9ybUNvbmZpZylcclxuXHJcblxyXG5cclxuICAgIC8vQ2hvb3NlIHNvdXJjZVxyXG4gICAgaWYgKGRldGFpbHNDb25maWcuZGV0YWlsc1NvdXJjZSA9PSBEZXRhaWxzU291cmNlLlJvdykge1xyXG5cclxuICAgICAgY29uc29sZS5sb2coXCJEZXRhaWxzIERhdGEgUm93IGNvbmZpZ1wiKVxyXG4gICAgICBkZXRhaWxzID0gZGV0YWlsc0NvbmZpZy5kZXRhaWxzO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoZGV0YWlsc0NvbmZpZy5kZXRhaWxzU291cmNlID09IERldGFpbHNTb3VyY2UuVXJsKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiRGV0YWlscyBEYXRhIFVybCBjb25maWdcIilcclxuICAgICAgYWN0aW9uID0gdGhpcy5sb2FkRGV0YWlsc0Zyb21VcmwoZGV0YWlsc0NvbmZpZywgZm9ybUNvbmZpZyk7XHJcbiAgICAgIGxvYWRCeUFjdGlvbiA9IHRydWU7XHJcblxyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgY29uc29sZS5sb2coXCJEZXRhaWxzIERhdGEgRWxzZVwiKVxyXG4gICAgICBpZiAoZGV0YWlsc0NvbmZpZy5kZXRhaWxzICYmICFkZXRhaWxzQ29uZmlnLmhlcm9GaWVsZCAmJiAhZGV0YWlsc0NvbmZpZy5oZXJvVmFsdWUpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJ1c2luZyBmb3JtIGRhdGEgZnJvbSBkZXRhaWxzXCIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGRldGFpbHNDb25maWcpO1xyXG4gICAgICAgIGRldGFpbHMgPSBkZXRhaWxzQ29uZmlnLmRldGFpbHM7XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKGZvcm1Db25maWcubG9hZEFjdGlvbikge1xyXG5cclxuICAgICAgICBhY3Rpb24gPSB0aGlzLmxvYWREZXRhaWxzRnJvbVVybChkZXRhaWxzQ29uZmlnLCBmb3JtQ29uZmlnKTtcclxuICAgICAgICBsb2FkQnlBY3Rpb24gPSB0cnVlO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImF1dG8gZGF0YSBzb3VyY2UgZmFpbGVkIHRvIHBpY2ssIHRyeWluZyBzb3VyY2UgY29uZmlnXCIpO1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICByZXR1cm4geyBkZXRhaWxzLCBsb2FkQnlBY3Rpb24sIGFjdGlvbiB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgbG9hZERldGFpbHNGcm9tVXJsKGRldGFpbHNDb25maWc6IERldGFpbHNEaWFsb2dDb25maWcsIGZvcm1Db25maWc6IEZvcm1Db25maWcpIHtcclxuICAgIGxldCBhY3Rpb247XHJcblxyXG4gICAgaWYgKGZvcm1Db25maWcubG9hZEFjdGlvbikge1xyXG5cclxuICAgICAgaWYgKGRldGFpbHNDb25maWcuaGVyb0ZpZWxkICYmIGRldGFpbHNDb25maWcuZGV0YWlscykge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhcInVzaW5nIGZvcm0gZGF0YSBmcm9tIHVybCArIElEIEZpZWxkIFwiICsgZGV0YWlsc0NvbmZpZy5oZXJvRmllbGQpO1xyXG4gICAgICAgIGFjdGlvbiA9IHsgdXJsOiBgJHtmb3JtQ29uZmlnLmxvYWRBY3Rpb24udXJsfS8ke2RldGFpbHNDb25maWcuZGV0YWlsc1tkZXRhaWxzQ29uZmlnLmhlcm9GaWVsZF19YCB9O1xyXG5cclxuICAgICAgfSBlbHNlIGlmIChkZXRhaWxzQ29uZmlnLmhlcm9WYWx1ZSkge1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhcInVzaW5nIGZvcm0gZGF0YSBmcm9tIHVybCArIFNvbGlkIElEXCIpO1xyXG4gICAgICAgIGFjdGlvbiA9IHsgdXJsOiBgJHtmb3JtQ29uZmlnLmxvYWRBY3Rpb24udXJsfS8ke2RldGFpbHNDb25maWcuaGVyb1ZhbHVlfWAgfTtcclxuXHJcbiAgICAgIH1cclxuICAgICAgZWxzZXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInVybCBzb3VyY2UgZmFpbGVkIDogc2V0dXAgaGVybyBmaWVsZCBvciBoZXJvIHZhbHVlXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2V7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiTm8gbG9hZCBhY3Rpb24gc2V0XCIpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgcmV0dXJuIGFjdGlvbjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzZXRGaWxlRmllbGQoZm9ybUNvbmZpZzogRm9ybUNvbmZpZykge1xyXG4gICAgcmV0dXJuIGZvcm1Db25maWcuZmllbGRzLmZpbmQoeCA9PiB4LnR5cGUgPT09ICdmaWxlJyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhdGljIHNldHVwQnV0dG9ucyhmb3JtQ29uZmlnOiBGb3JtQ29uZmlnLCBidXR0b25zOiBhbnkpIHtcclxuICAgIGxldCBleHRyYUJ1dHRvbnMsIGNyZWF0ZUJ1dHRvbiwgZWRpdEJ1dHRvbiwgZGVsZXRlQnV0dG9uO1xyXG5cclxuICAgIGlmIChidXR0b25zKSB7XHJcbiAgICAgIGlmIChmb3JtQ29uZmlnLm1vZGUgIT09IFwiY3JlYXRlXCIpIHtcclxuICAgICAgICBleHRyYUJ1dHRvbnMgPSBidXR0b25zLmZpbHRlcih4ID0+IHgubmFtZSAhPT0gXCJjcmVhdGVcIiAmJiB4Lm5hbWUgIT09IFwiZWRpdFwiICYmIHgubmFtZSAhPT0gXCJkZWxldGVcIiAmJiB4Lm5hbWUgIT09IFwidmlld1wiICYmIHguaW5EaWFsb2cpO1xyXG4gICAgICB9XHJcbiAgICAgIGNyZWF0ZUJ1dHRvbiA9IGJ1dHRvbnMuZmluZCh4ID0+IHgubmFtZSA9PT0gXCJjcmVhdGVcIik7XHJcbiAgICAgIGVkaXRCdXR0b24gPSBidXR0b25zLmZpbmQoeCA9PiB4Lm5hbWUgPT09IFwiZWRpdFwiKTtcclxuICAgICAgZGVsZXRlQnV0dG9uID0gYnV0dG9ucy5maW5kKHggPT4geC5uYW1lID09PSBcImRlbGV0ZVwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IGV4dHJhQnV0dG9ucywgY3JlYXRlQnV0dG9uLCBlZGl0QnV0dG9uLCBkZWxldGVCdXR0b24gfTtcclxuICB9XHJcblxyXG5cclxufVxyXG5cclxuXHJcbiJdfQ==
|
|
@@ -4,7 +4,8 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
import * as i1 from "@angular/material/dialog";
|
|
5
5
|
import * as i2 from "@angular/common";
|
|
6
6
|
import * as i3 from "@angular/material/button";
|
|
7
|
-
import * as i4 from "@angular/material/
|
|
7
|
+
import * as i4 from "@angular/material/icon";
|
|
8
|
+
import * as i5 from "@angular/material/form-field";
|
|
8
9
|
export class messageDialog {
|
|
9
10
|
constructor(dialogRef, data) {
|
|
10
11
|
this.dialogRef = dialogRef;
|
|
@@ -20,13 +21,13 @@ export class messageDialog {
|
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
messageDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: messageDialog, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
23
|
-
messageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: messageDialog, selector: "lib-app-message", ngImport: i0, template: "\r\n <h2 mat-dialog-title>\r\n\r\n <mat-label *ngIf=\"messageType=='confirm'\">Confirm</mat-label>\r\n
|
|
24
|
+
messageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: messageDialog, selector: "lib-app-message", ngImport: i0, template: "\r\n <h2 mat-dialog-title>\r\n\r\n <div class=\"tin-between\">\r\n <mat-label *ngIf=\"messageType=='confirm'\">Confirm</mat-label>\r\n <mat-label *ngIf=\"messageType=='info'\">Information</mat-label>\r\n <mat-label *ngIf=\"messageType=='error'\">Error</mat-label>\r\n\r\n <mat-icon *ngIf=\"messageType=='confirm'\" >question_mark</mat-icon>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n </h2>\r\n\r\n <mat-dialog-content >\r\n\r\n\r\n <div *ngIf=\"messageType=='confirm'\" class=\"alert alert-secondary\" role=\"alert\">\r\n <!-- Confirm -->\r\n <p >{{_messageDetails}}</p>\r\n </div>\r\n\r\n\r\n\r\n\r\n <!-- Information -->\r\n <div *ngIf=\"messageType=='info'\">\r\n\r\n <h3 *ngIf=\"_messageSubject != ''\">{{_messageSubject}}</h3>\r\n <mat-label>{{_messageDetails}}</mat-label>\r\n\r\n </div>\r\n\r\n\r\n <!-- Error -->\r\n <div *ngIf=\"messageType=='error'\">\r\n\r\n <mat-label>{{_messageDetails}}</mat-label>\r\n\r\n </div>\r\n\r\n\r\n </mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n\r\n <button id=\"btnYes\" mat-stroked-button style=\"color: green;\" *ngIf=\"messageType=='confirm'\" (click)=\"response('yes')\" cdkFocusInitial>Yes</button>\r\n\r\n <button id=\"btnNo\" mat-stroked-button style=\"color: red;\" *ngIf=\"messageType=='confirm'\" (click)=\"response('no')\" >No</button>\r\n\r\n <button id=\"btnOK\" mat-stroked-button *ngIf=\"messageType=='info' || messageType=='error'\" (click)=\"response('ok')\" cdkFocusInitial>OK</button>\r\n\r\n</mat-dialog-actions>\r\n\r\n\r\n\r\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }] });
|
|
24
25
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: messageDialog, decorators: [{
|
|
25
26
|
type: Component,
|
|
26
|
-
args: [{ selector: 'lib-app-message', template: "\r\n <h2 mat-dialog-title>\r\n\r\n <mat-label *ngIf=\"messageType=='confirm'\">Confirm</mat-label>\r\n
|
|
27
|
+
args: [{ selector: 'lib-app-message', template: "\r\n <h2 mat-dialog-title>\r\n\r\n <div class=\"tin-between\">\r\n <mat-label *ngIf=\"messageType=='confirm'\">Confirm</mat-label>\r\n <mat-label *ngIf=\"messageType=='info'\">Information</mat-label>\r\n <mat-label *ngIf=\"messageType=='error'\">Error</mat-label>\r\n\r\n <mat-icon *ngIf=\"messageType=='confirm'\" >question_mark</mat-icon>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n </h2>\r\n\r\n <mat-dialog-content >\r\n\r\n\r\n <div *ngIf=\"messageType=='confirm'\" class=\"alert alert-secondary\" role=\"alert\">\r\n <!-- Confirm -->\r\n <p >{{_messageDetails}}</p>\r\n </div>\r\n\r\n\r\n\r\n\r\n <!-- Information -->\r\n <div *ngIf=\"messageType=='info'\">\r\n\r\n <h3 *ngIf=\"_messageSubject != ''\">{{_messageSubject}}</h3>\r\n <mat-label>{{_messageDetails}}</mat-label>\r\n\r\n </div>\r\n\r\n\r\n <!-- Error -->\r\n <div *ngIf=\"messageType=='error'\">\r\n\r\n <mat-label>{{_messageDetails}}</mat-label>\r\n\r\n </div>\r\n\r\n\r\n </mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n\r\n <button id=\"btnYes\" mat-stroked-button style=\"color: green;\" *ngIf=\"messageType=='confirm'\" (click)=\"response('yes')\" cdkFocusInitial>Yes</button>\r\n\r\n <button id=\"btnNo\" mat-stroked-button style=\"color: red;\" *ngIf=\"messageType=='confirm'\" (click)=\"response('no')\" >No</button>\r\n\r\n <button id=\"btnOK\" mat-stroked-button *ngIf=\"messageType=='info' || messageType=='error'\" (click)=\"response('ok')\" cdkFocusInitial>OK</button>\r\n\r\n</mat-dialog-actions>\r\n\r\n\r\n\r\n" }]
|
|
27
28
|
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
28
29
|
type: Inject,
|
|
29
30
|
args: [MAT_DIALOG_DATA]
|
|
30
31
|
}] }]; } });
|
|
31
32
|
;
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZURpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvY29tcG9uZW50cy9tZXNzYWdlL21lc3NhZ2VEaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvbWVzc2FnZS9tZXNzYWdlRGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBYSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7QUFTcEYsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBb0IsU0FBc0MsRUFBa0MsSUFBSTtRQUE1RSxjQUFTLEdBQVQsU0FBUyxDQUE2QjtRQUFrQyxTQUFJLEdBQUosSUFBSSxDQUFBO0lBQUksQ0FBQztJQUdyRyxRQUFRO1FBRU4sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFFM0MsQ0FBQztJQU1ELFFBQVEsQ0FBQyxJQUFZO1FBRW5CLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTdCLENBQUM7OzBHQXJCVSxhQUFhLDhDQUU0QyxlQUFlOzhGQUZ4RSxhQUFhLHVEQ1YxQiwwaURBNERBOzJGRGxEYSxhQUFhO2tCQUx6QixTQUFTOytCQUNFLGlCQUFpQjs7MEJBTWtDLE1BQU07MkJBQUMsZUFBZTs7QUFxQnBGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYXBwLW1lc3NhZ2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXNzYWdlRGlhbG9nLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIG1lc3NhZ2VEaWFsb2cgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPG1lc3NhZ2VEaWFsb2c+LCBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGEpIHsgfVxyXG5cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgdGhpcy5tZXNzYWdlVHlwZSA9IHRoaXMuZGF0YS50eXBlXHJcbiAgICB0aGlzLl9tZXNzYWdlU3ViamVjdCA9IHRoaXMuZGF0YS5zdWJqZWN0O1xyXG4gICAgdGhpcy5fbWVzc2FnZURldGFpbHMgPSB0aGlzLmRhdGEuZGV0YWlscztcclxuXHJcbiAgfVxyXG5cclxuICBtZXNzYWdlVHlwZTtcclxuICBfbWVzc2FnZVN1YmplY3Q7XHJcbiAgX21lc3NhZ2VEZXRhaWxzO1xyXG5cclxuICByZXNwb25zZShyZXNwOiBzdHJpbmcpIHtcclxuXHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShyZXNwKTtcclxuXHJcbiAgfVxyXG5cclxufTtcclxuXHJcblxyXG5cclxuIiwiXHJcbiAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInRpbi1iZXR3ZWVuXCI+XHJcbiAgICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJtZXNzYWdlVHlwZT09J2NvbmZpcm0nXCI+Q29uZmlybTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LWxhYmVsICpuZ0lmPVwibWVzc2FnZVR5cGU9PSdpbmZvJ1wiPkluZm9ybWF0aW9uPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJtZXNzYWdlVHlwZT09J2Vycm9yJ1wiPkVycm9yPC9tYXQtbGFiZWw+XHJcblxyXG4gICAgICA8bWF0LWljb24gKm5nSWY9XCJtZXNzYWdlVHlwZT09J2NvbmZpcm0nXCIgPnF1ZXN0aW9uX21hcms8L21hdC1pY29uPlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgPC9oMj5cclxuXHJcbiAgPG1hdC1kaWFsb2ctY29udGVudCA+XHJcblxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJtZXNzYWdlVHlwZT09J2NvbmZpcm0nXCIgY2xhc3M9XCJhbGVydCBhbGVydC1zZWNvbmRhcnlcIiByb2xlPVwiYWxlcnRcIj5cclxuICAgICAgPCEtLSBDb25maXJtIC0tPlxyXG4gICAgICA8cCA+e3tfbWVzc2FnZURldGFpbHN9fTwvcD5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuICAgIDwhLS0gSW5mb3JtYXRpb24gLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwibWVzc2FnZVR5cGU9PSdpbmZvJ1wiPlxyXG5cclxuICAgICAgPGgzICpuZ0lmPVwiX21lc3NhZ2VTdWJqZWN0ICE9ICcnXCI+e3tfbWVzc2FnZVN1YmplY3R9fTwvaDM+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3tfbWVzc2FnZURldGFpbHN9fTwvbWF0LWxhYmVsPlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICA8IS0tIEVycm9yIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIm1lc3NhZ2VUeXBlPT0nZXJyb3InXCI+XHJcblxyXG4gICAgICA8bWF0LWxhYmVsPnt7X21lc3NhZ2VEZXRhaWxzfX08L21hdC1sYWJlbD5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG5cclxuPG1hdC1kaWFsb2ctYWN0aW9ucz5cclxuXHJcbiAgPGJ1dHRvbiBpZD1cImJ0blllc1wiIG1hdC1zdHJva2VkLWJ1dHRvbiBzdHlsZT1cImNvbG9yOiBncmVlbjtcIiAgKm5nSWY9XCJtZXNzYWdlVHlwZT09J2NvbmZpcm0nXCIgKGNsaWNrKT1cInJlc3BvbnNlKCd5ZXMnKVwiIGNka0ZvY3VzSW5pdGlhbD5ZZXM8L2J1dHRvbj5cclxuXHJcbiAgPGJ1dHRvbiBpZD1cImJ0bk5vXCIgbWF0LXN0cm9rZWQtYnV0dG9uIHN0eWxlPVwiY29sb3I6IHJlZDtcIiAqbmdJZj1cIm1lc3NhZ2VUeXBlPT0nY29uZmlybSdcIiAoY2xpY2spPVwicmVzcG9uc2UoJ25vJylcIiA+Tm88L2J1dHRvbj5cclxuXHJcbiAgPGJ1dHRvbiBpZD1cImJ0bk9LXCIgbWF0LXN0cm9rZWQtYnV0dG9uICpuZ0lmPVwibWVzc2FnZVR5cGU9PSdpbmZvJyB8fCBtZXNzYWdlVHlwZT09J2Vycm9yJ1wiIChjbGljayk9XCJyZXNwb25zZSgnb2snKVwiIGNka0ZvY3VzSW5pdGlhbD5PSzwvYnV0dG9uPlxyXG5cclxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+XHJcblxyXG5cclxuXHJcbiJdfQ==
|
|
@@ -196,10 +196,10 @@ export class DetailsDialog {
|
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
198
|
DetailsDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DetailsDialog, deps: [{ token: i1.BreakpointObserver }, { token: i2.LoaderService }, { token: i3.DataServiceLib }, { token: i4.MessageService }, { token: i5.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i6.ButtonService }, { token: i7.DialogService }], target: i0.ɵɵFactoryTarget.Component });
|
|
199
|
-
DetailsDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DetailsDialog, selector: "app-viewModel", outputs: { inputChange: "inputChange" }, ngImport: i0, template: "<div class=\"dialog-container\">\r\n\r\n <div class=\"dialog-content\">\r\n\r\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isProcessing\"></mat-progress-bar>\r\n <div class=\"row d-flex align-items-center mt-0\">\r\n\r\n <div class=\"col\">\r\n <h2 mat-dialog-title>{{titleAction | titlecase}} {{formConfig?.title}}</h2>\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\">\r\n\r\n <div *ngIf=\"formConfig.mode=='view' && editButton && testVisible(details,editButton.name)\" class=\"col d-flex justify-content-end\">\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Edit\" color=\"primary\" (click)=\"setMode('edit')\" [disabled]=\"testDisabled(details,editButton.name)\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <button [disabled]=\"isProcessing\" *ngIf=\"loadByAction\" mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Refresh\" color=\"primary\" (click)=\"loadData(formConfig.loadAction, true)\"><mat-icon class=\"refreshIcon\">cached</mat-icon></button>\r\n </div>\r\n\r\n </div>\r\n\r\n <mat-dialog-content class=\"mat-typography dialog-scroll-content\">\r\n\r\n <div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n <p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n <spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\"></spa-form>\r\n\r\n\r\n <mat-tab-group *ngIf=\"tableConfigs\">\r\n\r\n <ng-container *ngFor=\"let tbl of tableConfigs\">\r\n\r\n <mat-tab *ngIf=\"testVisibleTab(tbl)\">\r\n <ng-template matTabLabel>\r\n <span>{{tbl.title}}</span>\r\n </ng-template>\r\n\r\n <spa-table-internal [config]=\"tbl\" [hideTitle]=\"true\" [reload]=\"tableReload\"></spa-table-internal>\r\n\r\n </mat-tab>\r\n </ng-container>\r\n\r\n\r\n </mat-tab-group>\r\n\r\n\r\n\r\n </div>\r\n\r\n </mat-dialog-content>\r\n\r\n\r\n </div>\r\n\r\n <mat-dialog-actions >\r\n\r\n <div>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" color=\"primary\" *ngIf=\"formConfig.mode=='create' && createButton\" (click)=\"create()\" cdkFocusInitial>{{createButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" color=\"primary\" *ngIf=\"formConfig.mode=='edit' && editButton\" (click)=\"edit()\" cdkFocusInitial>{{editButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"!smallScreen && testVisible(details,btn.name)\" mat-stroked-button [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon [ngStyle]=\"{'color': getButtonColor(btn, details)}\">{{btn.icon.name}}</mat-icon>{{btn.display ?? btn.name | titlecase}}\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\r\n\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\" *ngIf=\"smallScreen\">\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"testVisible(details,btn.name)\" mat-icon-button matTooltipPosition=\"above\" [matTooltip]=\"btn.tip ?? btn.name | titlecase\" [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon>{{btn.icon.name}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Delete\" [disabled]=\"isProcessing\" style=\"color: red;\" (click)=\"delete()\" *ngIf=\"formConfig.mode!='create' && deleteButton\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n\r\n\r\n </mat-dialog-actions>\r\n\r\n\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}.action-buttons-container{display:flex;justify-content:flex-end;align-items:center}.refreshIcon{font-size:22px!important;margin-top:-7px!important}.dialog-container{display:flex;flex-direction:column;height:100%}.dialog-content{flex:1;overflow:hidden;display:flex;flex-direction:column}.dialog-scroll-content{flex:1;overflow-y:auto}mat-dialog-actions{flex-shrink:0}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i9.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i5.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i5.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i5.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i11.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i11.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i11.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i13.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i14.TableInternalComponent, selector: "spa-table-internal", inputs: ["hideTitle", "data", "config", "reload"], outputs: ["dataLoad", "refreshClick", "searchClick", "createClick", "actionClick", "inputChange"] }, { kind: "component", type: i15.FormComponent, selector: "spa-form", inputs: ["files", "data", "config"], outputs: ["buttonClick", "inputChange"] }, { kind: "pipe", type: i8.TitleCasePipe, name: "titlecase" }] });
|
|
199
|
+
DetailsDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DetailsDialog, selector: "app-viewModel", outputs: { inputChange: "inputChange" }, ngImport: i0, template: "<div class=\"dialog-container\">\r\n\r\n <div class=\"dialog-content\">\r\n\r\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isProcessing\"></mat-progress-bar>\r\n <div class=\"row d-flex align-items-center mt-0\">\r\n\r\n <div class=\"col\">\r\n <h2 mat-dialog-title>{{titleAction | titlecase}} {{formConfig?.title}}</h2>\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\">\r\n\r\n <div *ngIf=\"formConfig.mode=='view' && editButton && testVisible(details,editButton.name)\" class=\"col d-flex justify-content-end\">\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Edit\" color=\"primary\" (click)=\"setMode('edit')\" [disabled]=\"testDisabled(details,editButton.name)\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <button [disabled]=\"isProcessing\" *ngIf=\"loadByAction\" mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Refresh\" color=\"primary\" (click)=\"loadData(formConfig.loadAction, true)\"><mat-icon class=\"refreshIcon\">cached</mat-icon></button>\r\n </div>\r\n\r\n </div>\r\n\r\n <mat-dialog-content class=\"mat-typography dialog-scroll-content\">\r\n\r\n <div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n <p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n <spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\"></spa-form>\r\n\r\n\r\n <mat-tab-group *ngIf=\"tableConfigs\">\r\n\r\n <ng-container *ngFor=\"let tbl of tableConfigs\">\r\n\r\n <mat-tab *ngIf=\"testVisibleTab(tbl)\">\r\n <ng-template matTabLabel>\r\n <span>{{tbl.title}}</span>\r\n </ng-template>\r\n\r\n <spa-table-internal [config]=\"tbl\" [hideTitle]=\"true\" [reload]=\"tableReload\" (dataLoad)=\"loadData(formConfig.loadAction, false)\"></spa-table-internal>\r\n\r\n </mat-tab>\r\n </ng-container>\r\n\r\n\r\n </mat-tab-group>\r\n\r\n\r\n\r\n </div>\r\n\r\n </mat-dialog-content>\r\n\r\n\r\n </div>\r\n\r\n <mat-dialog-actions >\r\n\r\n <div>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" color=\"primary\" *ngIf=\"formConfig.mode=='create' && createButton\" (click)=\"create()\" cdkFocusInitial>{{createButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" color=\"primary\" *ngIf=\"formConfig.mode=='edit' && editButton\" (click)=\"edit()\" cdkFocusInitial>{{editButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"!smallScreen && testVisible(details,btn.name)\" mat-stroked-button [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon [ngStyle]=\"{'color': getButtonColor(btn, details)}\">{{btn.icon.name}}</mat-icon>{{btn.display ?? btn.name | titlecase}}\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\r\n\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\" *ngIf=\"smallScreen\">\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"testVisible(details,btn.name)\" mat-icon-button matTooltipPosition=\"above\" [matTooltip]=\"btn.tip ?? btn.name | titlecase\" [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon>{{btn.icon.name}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Delete\" [disabled]=\"isProcessing\" style=\"color: red;\" (click)=\"delete()\" *ngIf=\"formConfig.mode!='create' && deleteButton\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n\r\n\r\n </mat-dialog-actions>\r\n\r\n\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}.action-buttons-container{display:flex;justify-content:flex-end;align-items:center}.refreshIcon{font-size:22px!important;margin-top:-7px!important}.dialog-container{display:flex;flex-direction:column;height:100%}.dialog-content{flex:1;overflow:hidden;display:flex;flex-direction:column}.dialog-scroll-content{flex:1;overflow-y:auto}mat-dialog-actions{flex-shrink:0}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i9.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i5.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i5.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i5.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i11.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i11.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i11.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i13.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i14.TableInternalComponent, selector: "spa-table-internal", inputs: ["hideTitle", "data", "config", "reload"], outputs: ["dataLoad", "refreshClick", "searchClick", "createClick", "actionClick", "inputChange"] }, { kind: "component", type: i15.FormComponent, selector: "spa-form", inputs: ["files", "data", "config"], outputs: ["buttonClick", "inputChange"] }, { kind: "pipe", type: i8.TitleCasePipe, name: "titlecase" }] });
|
|
200
200
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DetailsDialog, decorators: [{
|
|
201
201
|
type: Component,
|
|
202
|
-
args: [{ selector: 'app-viewModel', template: "<div class=\"dialog-container\">\r\n\r\n <div class=\"dialog-content\">\r\n\r\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isProcessing\"></mat-progress-bar>\r\n <div class=\"row d-flex align-items-center mt-0\">\r\n\r\n <div class=\"col\">\r\n <h2 mat-dialog-title>{{titleAction | titlecase}} {{formConfig?.title}}</h2>\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\">\r\n\r\n <div *ngIf=\"formConfig.mode=='view' && editButton && testVisible(details,editButton.name)\" class=\"col d-flex justify-content-end\">\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Edit\" color=\"primary\" (click)=\"setMode('edit')\" [disabled]=\"testDisabled(details,editButton.name)\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <button [disabled]=\"isProcessing\" *ngIf=\"loadByAction\" mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Refresh\" color=\"primary\" (click)=\"loadData(formConfig.loadAction, true)\"><mat-icon class=\"refreshIcon\">cached</mat-icon></button>\r\n </div>\r\n\r\n </div>\r\n\r\n <mat-dialog-content class=\"mat-typography dialog-scroll-content\">\r\n\r\n <div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n <p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n <spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\"></spa-form>\r\n\r\n\r\n <mat-tab-group *ngIf=\"tableConfigs\">\r\n\r\n <ng-container *ngFor=\"let tbl of tableConfigs\">\r\n\r\n <mat-tab *ngIf=\"testVisibleTab(tbl)\">\r\n <ng-template matTabLabel>\r\n <span>{{tbl.title}}</span>\r\n </ng-template>\r\n\r\n <spa-table-internal [config]=\"tbl\" [hideTitle]=\"true\" [reload]=\"tableReload\"></spa-table-internal>\r\n\r\n </mat-tab>\r\n </ng-container>\r\n\r\n\r\n </mat-tab-group>\r\n\r\n\r\n\r\n </div>\r\n\r\n </mat-dialog-content>\r\n\r\n\r\n </div>\r\n\r\n <mat-dialog-actions >\r\n\r\n <div>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" color=\"primary\" *ngIf=\"formConfig.mode=='create' && createButton\" (click)=\"create()\" cdkFocusInitial>{{createButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" color=\"primary\" *ngIf=\"formConfig.mode=='edit' && editButton\" (click)=\"edit()\" cdkFocusInitial>{{editButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"!smallScreen && testVisible(details,btn.name)\" mat-stroked-button [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon [ngStyle]=\"{'color': getButtonColor(btn, details)}\">{{btn.icon.name}}</mat-icon>{{btn.display ?? btn.name | titlecase}}\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\r\n\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\" *ngIf=\"smallScreen\">\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"testVisible(details,btn.name)\" mat-icon-button matTooltipPosition=\"above\" [matTooltip]=\"btn.tip ?? btn.name | titlecase\" [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon>{{btn.icon.name}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Delete\" [disabled]=\"isProcessing\" style=\"color: red;\" (click)=\"delete()\" *ngIf=\"formConfig.mode!='create' && deleteButton\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n\r\n\r\n </mat-dialog-actions>\r\n\r\n\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}.action-buttons-container{display:flex;justify-content:flex-end;align-items:center}.refreshIcon{font-size:22px!important;margin-top:-7px!important}.dialog-container{display:flex;flex-direction:column;height:100%}.dialog-content{flex:1;overflow:hidden;display:flex;flex-direction:column}.dialog-scroll-content{flex:1;overflow-y:auto}mat-dialog-actions{flex-shrink:0}\n"] }]
|
|
202
|
+
args: [{ selector: 'app-viewModel', template: "<div class=\"dialog-container\">\r\n\r\n <div class=\"dialog-content\">\r\n\r\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isProcessing\"></mat-progress-bar>\r\n <div class=\"row d-flex align-items-center mt-0\">\r\n\r\n <div class=\"col\">\r\n <h2 mat-dialog-title>{{titleAction | titlecase}} {{formConfig?.title}}</h2>\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\">\r\n\r\n <div *ngIf=\"formConfig.mode=='view' && editButton && testVisible(details,editButton.name)\" class=\"col d-flex justify-content-end\">\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Edit\" color=\"primary\" (click)=\"setMode('edit')\" [disabled]=\"testDisabled(details,editButton.name)\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <button [disabled]=\"isProcessing\" *ngIf=\"loadByAction\" mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Refresh\" color=\"primary\" (click)=\"loadData(formConfig.loadAction, true)\"><mat-icon class=\"refreshIcon\">cached</mat-icon></button>\r\n </div>\r\n\r\n </div>\r\n\r\n <mat-dialog-content class=\"mat-typography dialog-scroll-content\">\r\n\r\n <div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n <p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n <spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\"></spa-form>\r\n\r\n\r\n <mat-tab-group *ngIf=\"tableConfigs\">\r\n\r\n <ng-container *ngFor=\"let tbl of tableConfigs\">\r\n\r\n <mat-tab *ngIf=\"testVisibleTab(tbl)\">\r\n <ng-template matTabLabel>\r\n <span>{{tbl.title}}</span>\r\n </ng-template>\r\n\r\n <spa-table-internal [config]=\"tbl\" [hideTitle]=\"true\" [reload]=\"tableReload\" (dataLoad)=\"loadData(formConfig.loadAction, false)\"></spa-table-internal>\r\n\r\n </mat-tab>\r\n </ng-container>\r\n\r\n\r\n </mat-tab-group>\r\n\r\n\r\n\r\n </div>\r\n\r\n </mat-dialog-content>\r\n\r\n\r\n </div>\r\n\r\n <mat-dialog-actions >\r\n\r\n <div>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" color=\"primary\" *ngIf=\"formConfig.mode=='create' && createButton\" (click)=\"create()\" cdkFocusInitial>{{createButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" color=\"primary\" *ngIf=\"formConfig.mode=='edit' && editButton\" (click)=\"edit()\" cdkFocusInitial>{{editButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"!smallScreen && testVisible(details,btn.name)\" mat-stroked-button [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon [ngStyle]=\"{'color': getButtonColor(btn, details)}\">{{btn.icon.name}}</mat-icon>{{btn.display ?? btn.name | titlecase}}\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\r\n\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\" *ngIf=\"smallScreen\">\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"testVisible(details,btn.name)\" mat-icon-button matTooltipPosition=\"above\" [matTooltip]=\"btn.tip ?? btn.name | titlecase\" [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon>{{btn.icon.name}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Delete\" [disabled]=\"isProcessing\" style=\"color: red;\" (click)=\"delete()\" *ngIf=\"formConfig.mode!='create' && deleteButton\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n\r\n\r\n </mat-dialog-actions>\r\n\r\n\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}.action-buttons-container{display:flex;justify-content:flex-end;align-items:center}.refreshIcon{font-size:22px!important;margin-top:-7px!important}.dialog-container{display:flex;flex-direction:column;height:100%}.dialog-content{flex:1;overflow:hidden;display:flex;flex-direction:column}.dialog-scroll-content{flex:1;overflow-y:auto}mat-dialog-actions{flex-shrink:0}\n"] }]
|
|
203
203
|
}], ctorParameters: function () { return [{ type: i1.BreakpointObserver }, { type: i2.LoaderService }, { type: i3.DataServiceLib }, { type: i4.MessageService }, { type: i5.MatDialogRef }, { type: i16.DetailsDialogConfig, decorators: [{
|
|
204
204
|
type: Inject,
|
|
205
205
|
args: [MAT_DIALOG_DATA]
|
|
@@ -207,4 +207,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
207
207
|
type: Output
|
|
208
208
|
}] } });
|
|
209
209
|
;
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsc0RpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9kZXRhaWxzRGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2RldGFpbHNEaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBSXpFLE9BQU8sRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdyRSxPQUFPLEVBQUUsT0FBTyxFQUFVLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRdkMsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBb0Isa0JBQXNDLEVBQVMsYUFBNEIsRUFBUyxXQUEyQixFQUFTLGNBQThCLEVBQ2hLLFNBQXNDLEVBQWtDLGFBQWtDLEVBQVUsYUFBNEIsRUFDaEosYUFBNEI7UUFGbEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFTLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVMsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQVMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ2hLLGNBQVMsR0FBVCxTQUFTLENBQTZCO1FBQWtDLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ2hKLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBa0R0QyxnQkFBVyxHQUFHLE1BQU0sQ0FBQztRQUNyQixpQkFBWSxHQUFHLEtBQUssQ0FB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bmplY3QsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgRm9ybUNvbmZpZywgRmllbGQsIFRhYmxlQ29uZmlnLCBCdXR0b24sIERldGFpbHNEaWFsb2dDb25maWcsIEFjdGlvbiwgQXBpUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZSwgRGV0YWlsc0RpYWxvZ1Byb2Nlc3NvciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGluQ29yZSc7XHJcbmltcG9ydCB7IExvYWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2FkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludFN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIGNvbmZpZyB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCdXR0b25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnV0dG9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC12aWV3TW9kZWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXRhaWxzRGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIERldGFpbHNEaWFsb2cgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyLHByaXZhdGUgbG9hZGVyU2VydmljZTogTG9hZGVyU2VydmljZSxwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYixwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RGV0YWlsc0RpYWxvZz4sIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGV0YWlsc0NvbmZpZzogRGV0YWlsc0RpYWxvZ0NvbmZpZywgcHJpdmF0ZSBidXR0b25TZXJ2aWNlOiBCdXR0b25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKVxyXG4gIHtcclxuICAgIC8vIGRldGVjdCBzY3JlZW4gc2l6ZSBjaGFuZ2VzXHJcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFtcIihtYXgtd2lkdGg6IDYwMHB4KVwiXSkuc3Vic2NyaWJlKChyZXN1bHQ6IEJyZWFrcG9pbnRTdGF0ZSkgPT4ge1xyXG5cclxuICAgICAgaWYgKHJlc3VsdC5tYXRjaGVzKSB7XHJcbiAgICAgICAgdGhpcy5zbWFsbFNjcmVlbiA9IHRydWVcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIHRoaXMuc21hbGxTY3JlZW4gPSBmYWxzZVxyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICBjb25zdCB7IHRhYmxlQ29uZmlnLCB0YWJsZUNvbmZpZ3MsIGZvcm1Db25maWcsIGJ1dHRvbnMgfSA9IERldGFpbHNEaWFsb2dQcm9jZXNzb3IuaW5pdGlhbGl6ZUNvbmZpZ3ModGhpcy5kZXRhaWxzQ29uZmlnKTtcclxuICAgIHRoaXMudGFibGVDb25maWcgPSB0YWJsZUNvbmZpZztcclxuICAgIHRoaXMudGFibGVDb25maWdzID0gdGFibGVDb25maWdzO1xyXG4gICAgdGhpcy5mb3JtQ29uZmlnID0gZm9ybUNvbmZpZztcclxuICAgIHRoaXMuYnV0dG9ucyA9IGJ1dHRvbnM7XHJcblxyXG4gICAgbGV0IHJlc3AgPSBEZXRhaWxzRGlhbG9nUHJvY2Vzc29yLmhhbmRsZUZvcm1Nb2RlKHRoaXMuZGV0YWlsc0NvbmZpZywgdGhpcy5mb3JtQ29uZmlnLCk7XHJcblxyXG4gICAgaWYgKHJlc3AubG9hZEJ5QWN0aW9uKXtcclxuICAgICAgdGhpcy5sb2FkQnlBY3Rpb24gPSB0cnVlO1xyXG4gICAgICBmb3JtQ29uZmlnLmxvYWRBY3Rpb24gPSByZXNwLmFjdGlvbjtcclxuICAgICAgdGhpcy5sb2FkRGF0YShyZXNwLmFjdGlvbiwgZmFsc2UpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuZGV0YWlscyA9IHJlc3AuZGV0YWlscztcclxuICAgICAgRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5zZXRIZXJvVmFsdWUodGhpcy5kZXRhaWxzQ29uZmlnLCB0aGlzLmRldGFpbHMpO1xyXG4gICAgICB0aGlzLmxvYWRCeUFjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzTG9hZENvbXBsZXRlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbGVGaWVsZCA9IERldGFpbHNEaWFsb2dQcm9jZXNzb3Iuc2V0RmlsZUZpZWxkKHRoaXMuZm9ybUNvbmZpZyk7XHJcblxyXG4gICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmlzTG9hZGluZy5zdWJzY3JpYmUoeCA9PiB0aGlzLmlzUHJvY2Vzc2luZyA9IHgpO1xyXG5cclxuICAgIGNvbnN0IHsgZXh0cmFCdXR0b25zLCBjcmVhdGVCdXR0b24sIGVkaXRCdXR0b24sIGRlbGV0ZUJ1dHRvbiB9ID0gRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5zZXR1cEJ1dHRvbnModGhpcy5mb3JtQ29uZmlnLCB0aGlzLmJ1dHRvbnMpO1xyXG4gICAgdGhpcy5leHRyYUJ1dHRvbnMgPSBleHRyYUJ1dHRvbnM7XHJcbiAgICB0aGlzLmNyZWF0ZUJ1dHRvbiA9IGNyZWF0ZUJ1dHRvbjtcclxuICAgIHRoaXMuZWRpdEJ1dHRvbiA9IGVkaXRCdXR0b247XHJcbiAgICB0aGlzLmRlbGV0ZUJ1dHRvbiA9IGRlbGV0ZUJ1dHRvbjtcclxuXHJcbiAgICB0aGlzLnNldFRpdGxlQWN0aW9uKCk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHRpdGxlQWN0aW9uID0gXCJWaWV3XCI7XHJcbiAgbG9hZEJ5QWN0aW9uID0gZmFsc2U7XHJcblxyXG4gIGV4dHJhQnV0dG9uczogQnV0dG9uW107XHJcbiAgYnV0dG9uczogQnV0dG9uW107XHJcbiAgY3JlYXRlQnV0dG9uOiBCdXR0b247XHJcbiAgZWRpdEJ1dHRvbjogQnV0dG9uO1xyXG4gIGRlbGV0ZUJ1dHRvbjogQnV0dG9uO1xyXG5cclxuICAvLyBtb2RlQnV0dG9uIDogQnV0dG9uXHJcbiAgZmlsZUZpZWxkOiBGaWVsZDtcclxuICBmaWxlczogYW55W10gPSBbXTtcclxuXHJcbiAgdGFibGVSZWxvYWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICB0YWJsZUNvbmZpZzogVGFibGVDb25maWdcclxuICB0YWJsZUNvbmZpZ3NcclxuICBkZXRhaWxzOiBhbnlcclxuICBmb3JtQ29uZmlnOiBGb3JtQ29uZmlnO1xyXG4gIHNtYWxsU2NyZWVuID0gZmFsc2U7XHJcblxyXG4gIGlzTG9hZENvbXBsZXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNQcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBpbnB1dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcblxyXG4gIGxvYWREYXRhKGFjdGlvbjogQWN0aW9uLCByZWxvYWQpIHtcclxuICAgIGNvbnNvbGUubG9nKFwibG9hZGluZyBkZXRhaWxzXCIpXHJcblxyXG4gICAgaWYgKGFjdGlvbiAmJiB0aGlzLmxvYWRCeUFjdGlvbikge1xyXG5cclxuICAgICAgY29uc29sZS5sb2coXCJMb2FkaW5nIGFjdGlvblwiKVxyXG4gICAgICBjb25zb2xlLmxvZyhhY3Rpb24pXHJcblxyXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoYWN0aW9uKS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkgPT4ge1xyXG5cclxuICAgICAgICBpZiAoYXBpUmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5kZXRhaWxzID0gYXBpUmVzcG9uc2UuZGF0YVxyXG4gICAgICAgICAgdGhpcy5pc0xvYWRDb21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAvLyBEZXRhaWxzRGlhbG9nUHJvY2Vzc29yLnNldEhlcm9WYWx1ZSh0aGlzLmRldGFpbHNDb25maWcsIHRoaXMuZGV0YWlscyk7XHJcbiAgICAgICAgICBpZihyZWxvYWQpIHRoaXMudGFibGVSZWxvYWQubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBhcGlSZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBpbnB1dENoYW5nZWQoZXZlbnQpIHtcclxuICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdCh7IGZpZWxkOiBldmVudC5maWVsZCwgdmFsdWU6IGV2ZW50LnZhbHVlIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0TW9kZShuZXdNb2RlOiBzdHJpbmcpe1xyXG4gICAgdGhpcy5mb3JtQ29uZmlnLm1vZGUgPSBuZXdNb2RlXHJcbiAgICB0aGlzLnNldFRpdGxlQWN0aW9uKClcclxuICB9XHJcblxyXG4gIHNldFRpdGxlQWN0aW9uKCl7XHJcbiAgICB0aGlzLnRpdGxlQWN0aW9uID0gdGhpcy5idXR0b25TZXJ2aWNlLmdldFRpdGxlQWN0aW9uKHRoaXMuZm9ybUNvbmZpZy5tb2RlLCB0aGlzLmJ1dHRvbnMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uKG5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS5nZXRCdXR0b24odGhpcy5idXR0b25zLCBuYW1lKTtcclxuICB9XHJcblxyXG4gIHRlc3REaXNhYmxlZChyb3csIGJ1dHRvbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24oYnV0dG9uTmFtZSk7XHJcbiAgICByZXR1cm4gYnV0dG9uID8gdGhpcy5idXR0b25TZXJ2aWNlLmlzQnV0dG9uRGlzYWJsZWQoYnV0dG9uLCByb3cpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgdGVzdFZpc2libGUocm93LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpO1xyXG4gICAgcmV0dXJuIGJ1dHRvbiA/IHRoaXMuYnV0dG9uU2VydmljZS5pc0J1dHRvblZpc2libGUoYnV0dG9uLCByb3csIHRoaXMuaXNMb2FkQ29tcGxldGUpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0ZXN0VmlzaWJsZVRhYih0YmxDb25maWc6IFRhYmxlQ29uZmlnKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLmlzVGFiVmlzaWJsZSh0YmxDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uQ29sb3IoYnV0dG9uOiBCdXR0b24sIHJvdykge1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS5nZXRCdXR0b25Db2xvcihidXR0b24sIHJvdyk7XHJcbiAgfVxyXG5cclxuICBnZXRWaXNpYmxlRmllbGRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbmZpZy5maWVsZHM/LmZpbHRlcih4ID0+IENvcmUudGVzdFZpc2libGUodGhpcy5mb3JtQ29uZmlnLCB0aGlzLmRldGFpbHMsIHgpKVxyXG4gIH1cclxuXHJcblxyXG4gIGNyZWF0ZSgpIHtcclxuICAgIHRoaXMuaGFuZGxlQnV0dG9uQWN0aW9uKCdjcmVhdGUnKTtcclxuICB9XHJcblxyXG4gIGVkaXQoKSB7XHJcbiAgICB0aGlzLmhhbmRsZUJ1dHRvbkFjdGlvbignZWRpdCcpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlKCkge1xyXG4gICAgdGhpcy5oYW5kbGVCdXR0b25BY3Rpb24oJ2RlbGV0ZScpO1xyXG4gIH1cclxuXHJcblxyXG4gIGN1c3RvbShidXR0b246IEJ1dHRvbiApIHtcclxuICAgIHRoaXMuaGFuZGxlQnV0dG9uQWN0aW9uKGJ1dHRvbi5uYW1lKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgaGFuZGxlQnV0dG9uQWN0aW9uKGJ1dHRvbk5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24oYnV0dG9uTmFtZSk7XHJcbiAgICBpZiAoIWJ1dHRvbikgcmV0dXJuO1xyXG5cclxuICAgIGlmICghYnV0dG9uLmFjdGlvbikge1xyXG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7IG1lc3NhZ2U6ICdlbWl0JywgZGF0YTogdGhpcy5kZXRhaWxzIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVGb3JtKCkpIHtcclxuICAgICAgdGhpcy5leGVjdXRlQWN0aW9uKGJ1dHRvbiwgdGhpcy5kZXRhaWxzLCBidXR0b24uYWN0aW9uPy5zdWNjZXNzTWVzc2FnZSB8fCBcIlVwZGF0ZWRcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlRm9ybSgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBDb3JlLnZhbGlkYXRlT2JqZWN0KHRoaXMuZ2V0VmlzaWJsZUZpZWxkcygpLCB0aGlzLmRldGFpbHMpO1xyXG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQgIT09ICcnKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QodmFsaWRhdGlvblJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5maWxlcy5sZW5ndGggPCAxICYmIHRoaXMuZmlsZUZpZWxkPy5yZXF1aXJlZCAmJiB0aGlzLmZvcm1Db25maWcubW9kZSA9PT0gJ2NyZWF0ZScpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlBsZWFzZSBhdHRhY2ggZmlsZShzKVwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcmVwYXJlQWN0aW9uRGF0YShidXR0b246IEJ1dHRvbiwgZGF0YTogYW55KTogYW55IHtcclxuICAgIGlmIChidXR0b24uYWN0aW9uPy5pc0Zvcm1EYXRhKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5maWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChgdXBsb2FkRmlsZSR7aX1gLCB0aGlzLmZpbGVzW2ldLCB0aGlzLmZpbGVzW2ldLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChcImRhdGFcIiwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICByZXR1cm4gZm9ybURhdGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhlY3V0ZUFjdGlvbihidXR0b246IEJ1dHRvbiwgZGF0YTogYW55LCBkZWZhdWx0U3VjY2Vzc01lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgY29uc3QgYWN0aW9uRGF0YSA9IHRoaXMucHJlcGFyZUFjdGlvbkRhdGEoYnV0dG9uLCBkYXRhKTtcclxuXHJcbiAgICBpZiAoYnV0dG9uLmNvbmZpcm0pIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5jb25maXJtKGJ1dHRvbi5jb25maXJtLm1lc3NhZ2UpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gXCJ5ZXNcIikge1xyXG4gICAgICAgICAgdGhpcy5wZXJmb3JtQXBpQ2FsbChidXR0b24sIGFjdGlvbkRhdGEsIGRlZmF1bHRTdWNjZXNzTWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGVyZm9ybUFwaUNhbGwoYnV0dG9uLCBhY3Rpb25EYXRhLCBkZWZhdWx0U3VjY2Vzc01lc3NhZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwZXJmb3JtQXBpQ2FsbChidXR0b246IEJ1dHRvbiwgZGF0YTogYW55LCBkZWZhdWx0U3VjY2Vzc01lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgdGhpcy5kYXRhU2VydmljZS5DYWxsQXBpKGJ1dHRvbi5hY3Rpb24sIGRhdGEpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChidXR0b24uYWN0aW9uPy5zdWNjZXNzTWVzc2FnZSB8fCBkZWZhdWx0U3VjY2Vzc01lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgbWVzc2FnZTogJ3N1Y2Nlc3MnLCBkYXRhOiB0aGlzLmRldGFpbHMgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG59O1xyXG5cclxuXHJcblxyXG4iLCI8ZGl2IGNsYXNzPVwiZGlhbG9nLWNvbnRhaW5lclwiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWNvbnRlbnRcIj5cclxuXHJcbiAgICA8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiICpuZ0lmPVwiaXNQcm9jZXNzaW5nXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTBcIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8aDIgbWF0LWRpYWxvZy10aXRsZT57e3RpdGxlQWN0aW9uIHwgdGl0bGVjYXNlfX0ge3tmb3JtQ29uZmlnPy50aXRsZX19PC9oMj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJmb3JtQ29uZmlnLm1vZGU9PSd2aWV3JyAmJiBlZGl0QnV0dG9uICYmIHRlc3RWaXNpYmxlKGRldGFpbHMsZWRpdEJ1dHRvbi5uYW1lKVwiIGNsYXNzPVwiY29sIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIG1hdFRvb2x0aXA9XCJFZGl0XCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNldE1vZGUoJ2VkaXQnKVwiIFtkaXNhYmxlZF09XCJ0ZXN0RGlzYWJsZWQoZGV0YWlscyxlZGl0QnV0dG9uLm5hbWUpXCI+PG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIiAqbmdJZj1cImxvYWRCeUFjdGlvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIG1hdFRvb2x0aXA9XCJSZWZyZXNoXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImxvYWREYXRhKGZvcm1Db25maWcubG9hZEFjdGlvbiwgdHJ1ZSlcIj48bWF0LWljb24gY2xhc3M9XCJyZWZyZXNoSWNvblwiPmNhY2hlZDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeSBkaWFsb2ctc2Nyb2xsLWNvbnRlbnRcIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW4taW5wdXRcIiBzdHlsZT1cImZvbnQtc2l6ZToxNHB4XCI+XHJcblxyXG4gICAgICAgIDxwICpuZ0lmPVwiZm9ybUNvbmZpZyAmJiAhZGV0YWlsc1wiPjxlbT5Mb2FkaW5nLi4uPC9lbT48L3A+XHJcblxyXG4gICAgICAgIDxzcGEtZm9ybSAqbmdJZj1cImZvcm1Db25maWcgJiYgZGV0YWlsc1wiIFtmaWxlc109XCJmaWxlc1wiIFtkYXRhXT1cImRldGFpbHNcIiBbY29uZmlnXT1cImZvcm1Db25maWdcIiAoaW5wdXRDaGFuZ2UpPVwiaW5wdXRDaGFuZ2VkKCRldmVudClcIj48L3NwYS1mb3JtPlxyXG5cclxuXHJcbiAgICAgICAgPG1hdC10YWItZ3JvdXAgKm5nSWY9XCJ0YWJsZUNvbmZpZ3NcIj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0Ymwgb2YgdGFibGVDb25maWdzXCI+XHJcblxyXG4gICAgICAgICAgICA8bWF0LXRhYiAqbmdJZj1cInRlc3RWaXNpYmxlVGFiKHRibClcIj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57e3RibC50aXRsZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDxzcGEtdGFibGUtaW50ZXJuYWwgW2NvbmZpZ109XCJ0YmxcIiBbaGlkZVRpdGxlXT1cInRydWVcIiBbcmVsb2FkXT1cInRhYmxlUmVsb2FkXCI+PC9zcGEtdGFibGUtaW50ZXJuYWw+XHJcblxyXG4gICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgIDwvbWF0LXRhYi1ncm91cD5cclxuXHJcblxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XHJcblxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG1hdC1kaWFsb2ctYWN0aW9ucyA+XHJcblxyXG4gICAgPGRpdj5cclxuXHJcbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZ1wiIGNvbG9yPVwicHJpbWFyeVwiICpuZ0lmPVwiZm9ybUNvbmZpZy5tb2RlPT0nY3JlYXRlJyAmJiBjcmVhdGVCdXR0b25cIiAoY2xpY2spPVwiY3JlYXRlKClcIiBjZGtGb2N1c0luaXRpYWw+e3tjcmVhdGVCdXR0b24uZGlzcGxheSA/PyAnU3VibWl0J319XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgY29sb3I9XCJwcmltYXJ5XCIgKm5nSWY9XCJmb3JtQ29uZmlnLm1vZGU9PSdlZGl0JyAmJiBlZGl0QnV0dG9uXCIgKGNsaWNrKT1cImVkaXQoKVwiIGNka0ZvY3VzSW5pdGlhbD57e2VkaXRCdXR0b24uZGlzcGxheSA/PyAnU3VibWl0J319XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnRuIG9mIGV4dHJhQnV0dG9uc1wiPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhc21hbGxTY3JlZW4gJiYgdGVzdFZpc2libGUoZGV0YWlscyxidG4ubmFtZSlcIiBtYXQtc3Ryb2tlZC1idXR0b24gW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZyB8fCB0ZXN0RGlzYWJsZWQoZGV0YWlscyxidG4ubmFtZSlcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzogZ2V0QnV0dG9uQ29sb3IoYnRuLCBkZXRhaWxzKX1cIiAoY2xpY2spPVwiY3VzdG9tKGJ0bilcIiBjZGtGb2N1c0luaXRpYWw+PG1hdC1pY29uIFtuZ1N0eWxlXT1cInsnY29sb3InOiBnZXRCdXR0b25Db2xvcihidG4sIGRldGFpbHMpfVwiPnt7YnRuLmljb24ubmFtZX19PC9tYXQtaWNvbj57e2J0bi5kaXNwbGF5ID8/IGJ0bi5uYW1lIHwgdGl0bGVjYXNlfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBtYXQtZGlhbG9nLWNsb3NlPkNhbmNlbDwvYnV0dG9uPlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIiAqbmdJZj1cInNtYWxsU2NyZWVuXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBleHRyYUJ1dHRvbnNcIj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwidGVzdFZpc2libGUoZGV0YWlscyxidG4ubmFtZSlcIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBbbWF0VG9vbHRpcF09XCJidG4udGlwID8/IGJ0bi5uYW1lIHwgdGl0bGVjYXNlXCIgW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZyB8fCB0ZXN0RGlzYWJsZWQoZGV0YWlscyxidG4ubmFtZSlcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzogZ2V0QnV0dG9uQ29sb3IoYnRuLCBkZXRhaWxzKX1cIiAoY2xpY2spPVwiY3VzdG9tKGJ0bilcIiBjZGtGb2N1c0luaXRpYWw+PG1hdC1pY29uPnt7YnRuLmljb24ubmFtZX19PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIG1hdFRvb2x0aXA9XCJEZWxldGVcIiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgc3R5bGU9XCJjb2xvcjogcmVkO1wiIChjbGljayk9XCJkZWxldGUoKVwiICpuZ0lmPVwiZm9ybUNvbmZpZy5tb2RlIT0nY3JlYXRlJyAgJiYgZGVsZXRlQnV0dG9uXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxyXG5cclxuXHJcbjwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4iXX0=
|
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsc0RpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9kZXRhaWxzRGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2RldGFpbHNEaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBSXpFLE9BQU8sRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdyRSxPQUFPLEVBQUUsT0FBTyxFQUFVLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRdkMsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBb0Isa0JBQXNDLEVBQVMsYUFBNEIsRUFBUyxXQUEyQixFQUFTLGNBQThCLEVBQ2hLLFNBQXNDLEVBQWtDLGFBQWtDLEVBQVUsYUFBNEIsRUFDaEosYUFBNEI7UUFGbEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFTLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVMsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQVMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ2hLLGNBQVMsR0FBVCxTQUFTLENBQTZCO1FBQWtDLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ2hKLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBa0R0QyxnQkFBVyxHQUFHLE1BQU0sQ0FBQztRQUNyQixpQkFBWSxHQUFHLEtBQUssQ0FB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bmplY3QsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgRm9ybUNvbmZpZywgRmllbGQsIFRhYmxlQ29uZmlnLCBCdXR0b24sIERldGFpbHNEaWFsb2dDb25maWcsIEFjdGlvbiwgQXBpUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZSwgRGV0YWlsc0RpYWxvZ1Byb2Nlc3NvciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGluQ29yZSc7XHJcbmltcG9ydCB7IExvYWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2FkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludFN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIGNvbmZpZyB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCdXR0b25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnV0dG9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC12aWV3TW9kZWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXRhaWxzRGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIERldGFpbHNEaWFsb2cgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyLHByaXZhdGUgbG9hZGVyU2VydmljZTogTG9hZGVyU2VydmljZSxwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYixwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RGV0YWlsc0RpYWxvZz4sIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGV0YWlsc0NvbmZpZzogRGV0YWlsc0RpYWxvZ0NvbmZpZywgcHJpdmF0ZSBidXR0b25TZXJ2aWNlOiBCdXR0b25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKVxyXG4gIHtcclxuICAgIC8vIGRldGVjdCBzY3JlZW4gc2l6ZSBjaGFuZ2VzXHJcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFtcIihtYXgtd2lkdGg6IDYwMHB4KVwiXSkuc3Vic2NyaWJlKChyZXN1bHQ6IEJyZWFrcG9pbnRTdGF0ZSkgPT4ge1xyXG5cclxuICAgICAgaWYgKHJlc3VsdC5tYXRjaGVzKSB7XHJcbiAgICAgICAgdGhpcy5zbWFsbFNjcmVlbiA9IHRydWVcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIHRoaXMuc21hbGxTY3JlZW4gPSBmYWxzZVxyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICBjb25zdCB7IHRhYmxlQ29uZmlnLCB0YWJsZUNvbmZpZ3MsIGZvcm1Db25maWcsIGJ1dHRvbnMgfSA9IERldGFpbHNEaWFsb2dQcm9jZXNzb3IuaW5pdGlhbGl6ZUNvbmZpZ3ModGhpcy5kZXRhaWxzQ29uZmlnKTtcclxuICAgIHRoaXMudGFibGVDb25maWcgPSB0YWJsZUNvbmZpZztcclxuICAgIHRoaXMudGFibGVDb25maWdzID0gdGFibGVDb25maWdzO1xyXG4gICAgdGhpcy5mb3JtQ29uZmlnID0gZm9ybUNvbmZpZztcclxuICAgIHRoaXMuYnV0dG9ucyA9IGJ1dHRvbnM7XHJcblxyXG4gICAgbGV0IHJlc3AgPSBEZXRhaWxzRGlhbG9nUHJvY2Vzc29yLmhhbmRsZUZvcm1Nb2RlKHRoaXMuZGV0YWlsc0NvbmZpZywgdGhpcy5mb3JtQ29uZmlnLCk7XHJcblxyXG4gICAgaWYgKHJlc3AubG9hZEJ5QWN0aW9uKXtcclxuICAgICAgdGhpcy5sb2FkQnlBY3Rpb24gPSB0cnVlO1xyXG4gICAgICBmb3JtQ29uZmlnLmxvYWRBY3Rpb24gPSByZXNwLmFjdGlvbjtcclxuICAgICAgdGhpcy5sb2FkRGF0YShyZXNwLmFjdGlvbiwgZmFsc2UpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuZGV0YWlscyA9IHJlc3AuZGV0YWlscztcclxuICAgICAgRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5zZXRIZXJvVmFsdWUodGhpcy5kZXRhaWxzQ29uZmlnLCB0aGlzLmRldGFpbHMpO1xyXG4gICAgICB0aGlzLmxvYWRCeUFjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzTG9hZENvbXBsZXRlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbGVGaWVsZCA9IERldGFpbHNEaWFsb2dQcm9jZXNzb3Iuc2V0RmlsZUZpZWxkKHRoaXMuZm9ybUNvbmZpZyk7XHJcblxyXG4gICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmlzTG9hZGluZy5zdWJzY3JpYmUoeCA9PiB0aGlzLmlzUHJvY2Vzc2luZyA9IHgpO1xyXG5cclxuICAgIGNvbnN0IHsgZXh0cmFCdXR0b25zLCBjcmVhdGVCdXR0b24sIGVkaXRCdXR0b24sIGRlbGV0ZUJ1dHRvbiB9ID0gRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5zZXR1cEJ1dHRvbnModGhpcy5mb3JtQ29uZmlnLCB0aGlzLmJ1dHRvbnMpO1xyXG4gICAgdGhpcy5leHRyYUJ1dHRvbnMgPSBleHRyYUJ1dHRvbnM7XHJcbiAgICB0aGlzLmNyZWF0ZUJ1dHRvbiA9IGNyZWF0ZUJ1dHRvbjtcclxuICAgIHRoaXMuZWRpdEJ1dHRvbiA9IGVkaXRCdXR0b247XHJcbiAgICB0aGlzLmRlbGV0ZUJ1dHRvbiA9IGRlbGV0ZUJ1dHRvbjtcclxuXHJcbiAgICB0aGlzLnNldFRpdGxlQWN0aW9uKCk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHRpdGxlQWN0aW9uID0gXCJWaWV3XCI7XHJcbiAgbG9hZEJ5QWN0aW9uID0gZmFsc2U7XHJcblxyXG4gIGV4dHJhQnV0dG9uczogQnV0dG9uW107XHJcbiAgYnV0dG9uczogQnV0dG9uW107XHJcbiAgY3JlYXRlQnV0dG9uOiBCdXR0b247XHJcbiAgZWRpdEJ1dHRvbjogQnV0dG9uO1xyXG4gIGRlbGV0ZUJ1dHRvbjogQnV0dG9uO1xyXG5cclxuICAvLyBtb2RlQnV0dG9uIDogQnV0dG9uXHJcbiAgZmlsZUZpZWxkOiBGaWVsZDtcclxuICBmaWxlczogYW55W10gPSBbXTtcclxuXHJcbiAgdGFibGVSZWxvYWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICB0YWJsZUNvbmZpZzogVGFibGVDb25maWdcclxuICB0YWJsZUNvbmZpZ3NcclxuICBkZXRhaWxzOiBhbnlcclxuICBmb3JtQ29uZmlnOiBGb3JtQ29uZmlnO1xyXG4gIHNtYWxsU2NyZWVuID0gZmFsc2U7XHJcblxyXG4gIGlzTG9hZENvbXBsZXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNQcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBpbnB1dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcblxyXG4gIGxvYWREYXRhKGFjdGlvbjogQWN0aW9uLCByZWxvYWQpIHtcclxuICAgIGNvbnNvbGUubG9nKFwibG9hZGluZyBkZXRhaWxzXCIpXHJcblxyXG4gICAgaWYgKGFjdGlvbiAmJiB0aGlzLmxvYWRCeUFjdGlvbikge1xyXG5cclxuICAgICAgY29uc29sZS5sb2coXCJMb2FkaW5nIGFjdGlvblwiKVxyXG4gICAgICBjb25zb2xlLmxvZyhhY3Rpb24pXHJcblxyXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoYWN0aW9uKS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkgPT4ge1xyXG5cclxuICAgICAgICBpZiAoYXBpUmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5kZXRhaWxzID0gYXBpUmVzcG9uc2UuZGF0YVxyXG4gICAgICAgICAgdGhpcy5pc0xvYWRDb21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAvLyBEZXRhaWxzRGlhbG9nUHJvY2Vzc29yLnNldEhlcm9WYWx1ZSh0aGlzLmRldGFpbHNDb25maWcsIHRoaXMuZGV0YWlscyk7XHJcbiAgICAgICAgICBpZihyZWxvYWQpIHRoaXMudGFibGVSZWxvYWQubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBhcGlSZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBpbnB1dENoYW5nZWQoZXZlbnQpIHtcclxuICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdCh7IGZpZWxkOiBldmVudC5maWVsZCwgdmFsdWU6IGV2ZW50LnZhbHVlIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0TW9kZShuZXdNb2RlOiBzdHJpbmcpe1xyXG4gICAgdGhpcy5mb3JtQ29uZmlnLm1vZGUgPSBuZXdNb2RlXHJcbiAgICB0aGlzLnNldFRpdGxlQWN0aW9uKClcclxuICB9XHJcblxyXG4gIHNldFRpdGxlQWN0aW9uKCl7XHJcbiAgICB0aGlzLnRpdGxlQWN0aW9uID0gdGhpcy5idXR0b25TZXJ2aWNlLmdldFRpdGxlQWN0aW9uKHRoaXMuZm9ybUNvbmZpZy5tb2RlLCB0aGlzLmJ1dHRvbnMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uKG5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS5nZXRCdXR0b24odGhpcy5idXR0b25zLCBuYW1lKTtcclxuICB9XHJcblxyXG4gIHRlc3REaXNhYmxlZChyb3csIGJ1dHRvbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24oYnV0dG9uTmFtZSk7XHJcbiAgICByZXR1cm4gYnV0dG9uID8gdGhpcy5idXR0b25TZXJ2aWNlLmlzQnV0dG9uRGlzYWJsZWQoYnV0dG9uLCByb3cpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgdGVzdFZpc2libGUocm93LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpO1xyXG4gICAgcmV0dXJuIGJ1dHRvbiA/IHRoaXMuYnV0dG9uU2VydmljZS5pc0J1dHRvblZpc2libGUoYnV0dG9uLCByb3csIHRoaXMuaXNMb2FkQ29tcGxldGUpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0ZXN0VmlzaWJsZVRhYih0YmxDb25maWc6IFRhYmxlQ29uZmlnKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLmlzVGFiVmlzaWJsZSh0YmxDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uQ29sb3IoYnV0dG9uOiBCdXR0b24sIHJvdykge1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS5nZXRCdXR0b25Db2xvcihidXR0b24sIHJvdyk7XHJcbiAgfVxyXG5cclxuICBnZXRWaXNpYmxlRmllbGRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbmZpZy5maWVsZHM/LmZpbHRlcih4ID0+IENvcmUudGVzdFZpc2libGUodGhpcy5mb3JtQ29uZmlnLCB0aGlzLmRldGFpbHMsIHgpKVxyXG4gIH1cclxuXHJcblxyXG4gIGNyZWF0ZSgpIHtcclxuICAgIHRoaXMuaGFuZGxlQnV0dG9uQWN0aW9uKCdjcmVhdGUnKTtcclxuICB9XHJcblxyXG4gIGVkaXQoKSB7XHJcbiAgICB0aGlzLmhhbmRsZUJ1dHRvbkFjdGlvbignZWRpdCcpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlKCkge1xyXG4gICAgdGhpcy5oYW5kbGVCdXR0b25BY3Rpb24oJ2RlbGV0ZScpO1xyXG4gIH1cclxuXHJcblxyXG4gIGN1c3RvbShidXR0b246IEJ1dHRvbiApIHtcclxuICAgIHRoaXMuaGFuZGxlQnV0dG9uQWN0aW9uKGJ1dHRvbi5uYW1lKTtcclxuICB9XHJcblxyXG5cclxuICBoYW5kbGVCdXR0b25BY3Rpb24oYnV0dG9uTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKTtcclxuICAgIGlmICghYnV0dG9uKSByZXR1cm47XHJcblxyXG4gICAgaWYgKCFidXR0b24uYWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgbWVzc2FnZTogJ2VtaXQnLCBkYXRhOiB0aGlzLmRldGFpbHMgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZUZvcm0oKSkge1xyXG4gICAgICB0aGlzLmV4ZWN1dGVBY3Rpb24oYnV0dG9uLCB0aGlzLmRldGFpbHMsIGJ1dHRvbi5hY3Rpb24/LnN1Y2Nlc3NNZXNzYWdlIHx8IFwiVXBkYXRlZFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVGb3JtKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IENvcmUudmFsaWRhdGVPYmplY3QodGhpcy5nZXRWaXNpYmxlRmllbGRzKCksIHRoaXMuZGV0YWlscyk7XHJcbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdCAhPT0gJycpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdCh2YWxpZGF0aW9uUmVzdWx0KTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA8IDEgJiYgdGhpcy5maWxlRmllbGQ/LnJlcXVpcmVkICYmIHRoaXMuZm9ybUNvbmZpZy5tb2RlID09PSAnY3JlYXRlJykge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGxlYXNlIGF0dGFjaCBmaWxlKHMpXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVBY3Rpb25EYXRhKGJ1dHRvbjogQnV0dG9uLCBkYXRhOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKGJ1dHRvbi5hY3Rpb24/LmlzRm9ybURhdGEpIHtcclxuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGB1cGxvYWRGaWxlJHtpfWAsIHRoaXMuZmlsZXNbaV0sIHRoaXMuZmlsZXNbaV0ubmFtZSk7XHJcbiAgICAgIH1cclxuICAgICAgZm9ybURhdGEuYXBwZW5kKFwiZGF0YVwiLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgIHJldHVybiBmb3JtRGF0YTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleGVjdXRlQWN0aW9uKGJ1dHRvbjogQnV0dG9uLCBkYXRhOiBhbnksIGRlZmF1bHRTdWNjZXNzTWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBhY3Rpb25EYXRhID0gdGhpcy5wcmVwYXJlQWN0aW9uRGF0YShidXR0b24sIGRhdGEpO1xyXG5cclxuICAgIGlmIChidXR0b24uY29uZmlybSkge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNvbmZpcm0oYnV0dG9uLmNvbmZpcm0ubWVzc2FnZSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSBcInllc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnBlcmZvcm1BcGlDYWxsKGJ1dHRvbiwgYWN0aW9uRGF0YSwgZGVmYXVsdFN1Y2Nlc3NNZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wZXJmb3JtQXBpQ2FsbChidXR0b24sIGFjdGlvbkRhdGEsIGRlZmF1bHRTdWNjZXNzTWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBlcmZvcm1BcGlDYWxsKGJ1dHRvbjogQnV0dG9uLCBkYXRhOiBhbnksIGRlZmF1bHRTdWNjZXNzTWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoYnV0dG9uLmFjdGlvbiwgZGF0YSkuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKGFwaVJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KGJ1dHRvbi5hY3Rpb24/LnN1Y2Nlc3NNZXNzYWdlIHx8IGRlZmF1bHRTdWNjZXNzTWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBtZXNzYWdlOiAnc3VjY2VzcycsIGRhdGE6IHRoaXMuZGV0YWlscyB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbn07XHJcblxyXG5cclxuXHJcbiIsIjxkaXYgY2xhc3M9XCJkaWFsb2ctY29udGFpbmVyXCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkaWFsb2ctY29udGVudFwiPlxyXG5cclxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgKm5nSWY9XCJpc1Byb2Nlc3NpbmdcIj48L21hdC1wcm9ncmVzcy1iYXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMFwiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPnt7dGl0bGVBY3Rpb24gfCB0aXRsZWNhc2V9fSB7e2Zvcm1Db25maWc/LnRpdGxlfX08L2gyPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImZvcm1Db25maWcubW9kZT09J3ZpZXcnICYmIGVkaXRCdXR0b24gJiYgdGVzdFZpc2libGUoZGV0YWlscyxlZGl0QnV0dG9uLm5hbWUpXCIgY2xhc3M9XCJjb2wgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgbWF0VG9vbHRpcD1cIkVkaXRcIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2V0TW9kZSgnZWRpdCcpXCIgW2Rpc2FibGVkXT1cInRlc3REaXNhYmxlZChkZXRhaWxzLGVkaXRCdXR0b24ubmFtZSlcIj48bWF0LWljb24+ZWRpdDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZ1wiICpuZ0lmPVwibG9hZEJ5QWN0aW9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgbWF0VG9vbHRpcD1cIlJlZnJlc2hcIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwibG9hZERhdGEoZm9ybUNvbmZpZy5sb2FkQWN0aW9uLCB0cnVlKVwiPjxtYXQtaWNvbiBjbGFzcz1cInJlZnJlc2hJY29uXCI+Y2FjaGVkPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG1hdC1kaWFsb2ctY29udGVudCBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5IGRpYWxvZy1zY3JvbGwtY29udGVudFwiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInRpbi1pbnB1dFwiIHN0eWxlPVwiZm9udC1zaXplOjE0cHhcIj5cclxuXHJcbiAgICAgICAgPHAgKm5nSWY9XCJmb3JtQ29uZmlnICYmICFkZXRhaWxzXCI+PGVtPkxvYWRpbmcuLi48L2VtPjwvcD5cclxuXHJcbiAgICAgICAgPHNwYS1mb3JtICpuZ0lmPVwiZm9ybUNvbmZpZyAmJiBkZXRhaWxzXCIgW2ZpbGVzXT1cImZpbGVzXCIgW2RhdGFdPVwiZGV0YWlsc1wiIFtjb25maWddPVwiZm9ybUNvbmZpZ1wiIChpbnB1dENoYW5nZSk9XCJpbnB1dENoYW5nZWQoJGV2ZW50KVwiPjwvc3BhLWZvcm0+XHJcblxyXG5cclxuICAgICAgICA8bWF0LXRhYi1ncm91cCAqbmdJZj1cInRhYmxlQ29uZmlnc1wiPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRibCBvZiB0YWJsZUNvbmZpZ3NcIj5cclxuXHJcbiAgICAgICAgICAgIDxtYXQtdGFiICpuZ0lmPVwidGVzdFZpc2libGVUYWIodGJsKVwiPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJMYWJlbD5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7dGJsLnRpdGxlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgPHNwYS10YWJsZS1pbnRlcm5hbCBbY29uZmlnXT1cInRibFwiIFtoaWRlVGl0bGVdPVwidHJ1ZVwiIFtyZWxvYWRdPVwidGFibGVSZWxvYWRcIiAoZGF0YUxvYWQpPVwibG9hZERhdGEoZm9ybUNvbmZpZy5sb2FkQWN0aW9uLCBmYWxzZSlcIj48L3NwYS10YWJsZS1pbnRlcm5hbD5cclxuXHJcbiAgICAgICAgICAgIDwvbWF0LXRhYj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxyXG5cclxuXHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L21hdC1kaWFsb2ctY29udGVudD5cclxuXHJcblxyXG4gIDwvZGl2PlxyXG5cclxuICA8bWF0LWRpYWxvZy1hY3Rpb25zID5cclxuXHJcbiAgICA8ZGl2PlxyXG5cclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgY29sb3I9XCJwcmltYXJ5XCIgKm5nSWY9XCJmb3JtQ29uZmlnLm1vZGU9PSdjcmVhdGUnICYmIGNyZWF0ZUJ1dHRvblwiIChjbGljayk9XCJjcmVhdGUoKVwiIGNka0ZvY3VzSW5pdGlhbD57e2NyZWF0ZUJ1dHRvbi5kaXNwbGF5ID8/ICdTdWJtaXQnfX1cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIiBjb2xvcj1cInByaW1hcnlcIiAqbmdJZj1cImZvcm1Db25maWcubW9kZT09J2VkaXQnICYmIGVkaXRCdXR0b25cIiAoY2xpY2spPVwiZWRpdCgpXCIgY2RrRm9jdXNJbml0aWFsPnt7ZWRpdEJ1dHRvbi5kaXNwbGF5ID8/ICdTdWJtaXQnfX1cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidG4gb2YgZXh0cmFCdXR0b25zXCI+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFzbWFsbFNjcmVlbiAmJiB0ZXN0VmlzaWJsZShkZXRhaWxzLGJ0bi5uYW1lKVwiIG1hdC1zdHJva2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nIHx8IHRlc3REaXNhYmxlZChkZXRhaWxzLGJ0bi5uYW1lKVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOiBnZXRCdXR0b25Db2xvcihidG4sIGRldGFpbHMpfVwiIChjbGljayk9XCJjdXN0b20oYnRuKVwiIGNka0ZvY3VzSW5pdGlhbD48bWF0LWljb24gW25nU3R5bGVdPVwieydjb2xvcic6IGdldEJ1dHRvbkNvbG9yKGJ0biwgZGV0YWlscyl9XCI+e3tidG4uaWNvbi5uYW1lfX08L21hdC1pY29uPnt7YnRuLmRpc3BsYXkgPz8gYnRuLm5hbWUgfCB0aXRsZWNhc2V9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1kaWFsb2ctY2xvc2U+Q2FuY2VsPC9idXR0b24+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbCBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiICpuZ0lmPVwic21hbGxTY3JlZW5cIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnRuIG9mIGV4dHJhQnV0dG9uc1wiPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJ0ZXN0VmlzaWJsZShkZXRhaWxzLGJ0bi5uYW1lKVwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIFttYXRUb29sdGlwXT1cImJ0bi50aXAgPz8gYnRuLm5hbWUgfCB0aXRsZWNhc2VcIiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nIHx8IHRlc3REaXNhYmxlZChkZXRhaWxzLGJ0bi5uYW1lKVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOiBnZXRCdXR0b25Db2xvcihidG4sIGRldGFpbHMpfVwiIChjbGljayk9XCJjdXN0b20oYnRuKVwiIGNka0ZvY3VzSW5pdGlhbD48bWF0LWljb24+e3tidG4uaWNvbi5uYW1lfX08L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgbWF0VG9vbHRpcD1cIkRlbGV0ZVwiIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIiBzdHlsZT1cImNvbG9yOiByZWQ7XCIgKGNsaWNrKT1cImRlbGV0ZSgpXCIgKm5nSWY9XCJmb3JtQ29uZmlnLm1vZGUhPSdjcmVhdGUnICAmJiBkZWxldGVCdXR0b25cIj48bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XHJcblxyXG5cclxuPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiJdfQ==
|