tnx-shared 5.3.103 → 5.3.104

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.
@@ -1183,6 +1183,9 @@ export class CommonService {
1183
1183
  if (model[field] && !this.isEmptyArrayOrNull(model[field])) {
1184
1184
  model[field] = model[field].split(splitBy);
1185
1185
  }
1186
+ else {
1187
+ model[field] = [];
1188
+ }
1186
1189
  });
1187
1190
  }
1188
1191
  parseArrayToString(data, fields, splitBy = ',') {
@@ -1193,6 +1196,9 @@ export class CommonService {
1193
1196
  if (data[field] && Array.isArray(data[field]) && !this.isEmptyArrayOrNull(data[field])) {
1194
1197
  data[field] = data[field].join(splitBy);
1195
1198
  }
1199
+ else {
1200
+ data[field] = '';
1201
+ }
1196
1202
  });
1197
1203
  }
1198
1204
  isMoreThanDaysFromNow(dt, days = 1) {
@@ -1208,4 +1214,4 @@ CommonService.decorators = [
1208
1214
  CommonService.ctorParameters = () => [
1209
1215
  { type: ModuleConfigService }
1210
1216
  ];
1211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvc2VydmljZXMvY29tbW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFHN0IsT0FBTyxLQUFLLENBQUMsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFFckQscUJBQXFCO0FBQ3JCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUV2QixJQUFLLGVBS0o7QUFMRCxXQUFLLGVBQWU7SUFDaEIseURBQU0sQ0FBQTtJQUNOLDJEQUFPLENBQUE7SUFDUCxxREFBSSxDQUFBO0lBQ0osaUVBQVUsQ0FBQTtBQUNkLENBQUMsRUFMSSxlQUFlLEtBQWYsZUFBZSxRQUtuQjtBQUtELE1BQU0sT0FBTyxhQUFhO0lBa0N0QixZQUFvQixvQkFBeUM7UUFBekMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQWpDN0QsZUFBVSxH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eEQsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFTLEVBQUUsTUFBYyxFQUFFLFVBQWtCLEdBQUc7UUFDL0QsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNwRixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMzQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHFCQUFxQixDQUFDLEVBQVEsRUFBRSxPQUFlLENBQUM7UUFDNUMsT0FBTyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQzs7OztZQWo0Q0osVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUFmUSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgc3RyaW5naWZ5IGZyb20gJ2Zhc3Qtc2FmZS1zdHJpbmdpZnknO1xuaW1wb3J0IG1vbWVudF8gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFNlbGVjdEl0ZW0gfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZGlhbG9nJztcbmltcG9ydCAqIGFzIF8gZnJvbSAndW5kZXJzY29yZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcblxuaW1wb3J0IHsgT3BlcmF0b3IgfSBmcm9tICcuLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IEZpbHRlciwgU29ydCwgU3RyaW5nQ29tcGFyZU9wdGlvbiB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcbmltcG9ydCB7IEF1dGhlblNlcnZpY2UgfSBmcm9tICcuL2F1dGhlbi5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuL25vdGlmaWVyLnNlcnZpY2UnO1xuXG4vLyBmaXggZm9yIGJ1aWxkIHByb2RcbmNvbnN0IG1vbWVudCA9IG1vbWVudF87XG5cbmVudW0gTWVudU9yaWVudGF0aW9uIHtcbiAgICBTVEFUSUMsXG4gICAgT1ZFUkxBWSxcbiAgICBTTElNLFxuICAgIEhPUklaT05UQUwsXG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENvbW1vblNlcnZpY2Uge1xuICAgIGxheW91dE1vZGU6IE1lbnVPcmllbnRhdGlvbiA9IE1lbnVPcmllbnRhdGlvbi5TVEFUSUM7XG5cbiAgICBkYXJrTWVudSA9IGZhbHNlO1xuXG4gICAgcHJvZmlsZU1vZGUgPSAndG9wJztcblxuICAgIHJvdGF0ZU1lbnVCdXR0b246IGJvb2xlYW47XG5cbiAgICB0b3BiYXJNZW51QWN0aXZlOiBib29sZWFuO1xuXG4gICAgb3ZlcmxheU1lbnVBY3RpdmU6IGJvb2xlYW47XG5cbiAgICBzdGF0aWNNZW51RGVza3RvcEluYWN0aXZlOiBib29sZWFuO1xuXG4gICAgc3RhdGljTWVudU1vYmlsZUFjdGl2ZTogYm9vbGVhbjtcblxuICAgIG1lbnVDbGljazogYm9vbGVhbjtcblxuICAgIHRvcGJhckl0ZW1DbGljazogYm9vbGVhbjtcblxuICAgIGFjdGl2ZVRvcGJhckl0ZW06IGFueTtcblxuICAgIHJlc2V0TWVudTogYm9vbGVhbjtcblxuICAgIGN1cnJlbnRBY3RpdmVJdGVtOiBhbnk7XG5cbiAgICBtZW51SG92ZXJBY3RpdmU6IGJvb2xlYW47XG4gICAgdGVzdDogYm9vbGVhbjtcblxuICAgIHRuUHJlZml4TG9nID0gJy0tLS0tLS0tLT5UTl9MT0dfQ09OU09MRS0tLS0tLS0+JztcblxuICAgIFNUT1JBR0VfS0VZID0gJ0NMSVBCT0FSRF9DT05URU5UJztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBndWlkKCkge1xuICAgICAgICByZXR1cm4gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgcmFuZG9tU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ndWlkKCk7XG4gICAgfVxuXG4gICAgcmFuZG9tU3RyaW5nV2l0aE5vdERlbGltaXRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3VpZCgpLnJlcGxhY2UoJy0nLCAnJyk7XG4gICAgfVxuXG4gICAgc3RyaW5nRm9ybWF0KGlucHV0U3RyaW5nOiBzdHJpbmcsIC4uLmFyZ3MpIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmZvcmluXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcmdzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgaW5wdXRTdHJpbmcgPSBpbnB1dFN0cmluZy5yZXBsYWNlKGB7JHtpbmRleH19YCwgYXJnc1tpbmRleF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlucHV0U3RyaW5nO1xuICAgIH1cblxuICAgIGh0bWxFbmNvZGUoc3RyKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcoc3RyKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAgICAgICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcbiAgICAgICAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csICcmcXVvdDsnKTtcbiAgICB9XG5cbiAgICAvLyBM4bqleSB24buBIGdpw6EgdHLhu4sgdGhlbyBwYXRoICcnXG4gICAgZ2V0VmFsdWVCeVBhdGgob2JqOiBhbnksIHBhdGg6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHBhdGhzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9iaiA9IG9ialtwYXRoc1tpXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgb2JqID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIC8vIHtzZWFyY2g6IHtrZXkgOiAnbmFtbmgnfX0gLiA9PiBzZWFyY2gua2V5XG4gICAgc2V0VmFsdWVCeVBhdGgob2JqOiBhbnksIHBhdGg6IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG9iajtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIG4gPSBmaWVsZHMubGVuZ3RoOyBpIDwgbiAmJiByZXN1bHQgIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgIGlmIChpID09PSBuIC0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtmaWVsZF0gPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVzdWx0W2ZpZWxkXSA9PT0gJ3VuZGVmaW5lZCcgfHwgIV8uaXNPYmplY3QocmVzdWx0W2ZpZWxkXSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ZpZWxkXSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRbZmllbGRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkRGF5cyhkYXRlOiBEYXRlIHwgc3RyaW5nLCBkYXlzOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgY2xvbmVkID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgIGNsb25lZC5zZXREYXRlKGNsb25lZC5nZXREYXRlKCkgKyBkYXlzKTtcbiAgICAgICAgcmV0dXJuIGNsb25lZDtcbiAgICB9XG5cbiAgICBhZGRIb3VycyhkYXRlOiBEYXRlLCBob3VyczogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGNsb25lZCA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgICBjbG9uZWQuc2V0VGltZShjbG9uZWQuZ2V0VGltZSgpICsgKGhvdXJzICogNjAgKiA2MCAqIDEwMDApKTtcbiAgICAgICAgcmV0dXJuIGNsb25lZDtcbiAgICB9XG5cbiAgICBhZGRTZWNvbmRzKGRhdGU6IERhdGUsIHNlY29uZHM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjbG9uZWQgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgY2xvbmVkLnNldFRpbWUoY2xvbmVkLmdldFRpbWUoKSArIChzZWNvbmRzICogMTAwMCkpO1xuICAgICAgICByZXR1cm4gY2xvbmVkO1xuICAgIH1cblxuICAgIGFkZFdvcmtEYXlzKGRhdGUsIGRheXMpIHtcbiAgICAgICAgY29uc3QgY2xvbmVkID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgIHdoaWxlIChkYXlzID4gMCkge1xuICAgICAgICAgICAgY2xvbmVkLnNldERhdGUoY2xvbmVkLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgaWYgKGNsb25lZC5nZXREYXkoKSAhPT0gMCAmJiBjbG9uZWQuZ2V0RGF5KCkgIT09IDYpIHtcbiAgICAgICAgICAgICAgICBkYXlzIC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lZDtcbiAgICB9XG5cbiAgICBleHBvcnRUb0NTVihkYXRhczogYW55W10sIGNvbHVtbnM6IGFueVtdLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGxldCBoZWFkZXJTdHJpbmcgPSAnJztcbiAgICAgICAgLy8gRHV54buHdCBj4buZdCDEkeG7gyB0aMOqbSB2w6BvIGhlYWRlclxuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgIGhlYWRlclN0cmluZyArPSBjLmhlYWRlciArICcsJztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgcm93c1N0cmluZzogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZGF0YXMuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJvd1N0cmluZyA9ICcnO1xuICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcm93U3RyaW5nICs9ICh0eXBlb2YgZFtjLmZpZWxkXSkudG9TdHJpbmcoKSArICcsJztcbiAgICAgICAgICAgICAgICBsZXQgY29sVmFsID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0YVBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sVmFsVG1wID0gdGhpcy5nZXRWYWx1ZUJ5UGF0aChkLCBjLmRhdGFQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFZhbFRtcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gY29sVmFsVG1wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRbYy5maWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZFtjLmZpZWxkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IERhdGVcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRlRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xuICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkYXRlUGlwZS50cmFuc2Zvcm0oY29sVmFsLCBjLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgbWFwcGluZ1xuICAgICAgICAgICAgICAgIGlmIChjLmRhdGFNYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGMuZGF0YU1hcHBpbmcuZm9yRWFjaCgoZG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkbS5pZCA9PT0gZFtjLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IHRoaXMucmVwbGFjZVNwZWNpYWxDaGFyYWN0ZXIoZG0ubmFtZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb2xWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9IHRoaXMucmVwbGFjZVNwZWNpYWxDaGFyYWN0ZXIoY29sVmFsLnRvU3RyaW5nKCkpICsgJywnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9ICcnICsgJywnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKHJvd1N0cmluZyk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY3N2ID0gaGVhZGVyU3RyaW5nICsgJ1xcbic7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3NTdHJpbmcpIHtcbiAgICAgICAgICAgIGNzdiArPSByb3cgKyAnXFxuJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoWydcXHVGRUZGJywgY3N2XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZU5hbWUgKyAnLmNzdicpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOyAvLyBSZXF1aXJlZCBmb3IgRkZcbiAgICAgICAgbGluay5jbGljaygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVwbGFjZVNwZWNpYWxDaGFyYWN0ZXIodmFsOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHZhbC5yZXBsYWNlKCcsJywgJy4nKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ1xcbicsICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ1xccicsICcnKTtcbiAgICB9XG5cbiAgICBleHBvcnRUb0NTVjIoZGF0YXM6IGFueVtdLCBjb2x1bW5zOiBhbnlbXSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBsZXQgaGVhZGVyU3RyaW5nID0gJyc7XG4gICAgICAgIC8vIER1eeG7h3QgY+G7mXQgxJHhu4MgdGjDqm0gdsOgbyBoZWFkZXJcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICBoZWFkZXJTdHJpbmcgKz0gYy5oZWFkZXIgKyAnLCc7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJvd3NTdHJpbmc6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGRhdGFzLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgICAgIGxldCByb3dTdHJpbmcgPSAnJztcbiAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHJvd1N0cmluZyArPSAodHlwZW9mIGRbYy5maWVsZF0pLnRvU3RyaW5nKCkgKyAnLCc7XG4gICAgICAgICAgICAgICAgbGV0IGNvbFZhbCA9ICcnO1xuICAgICAgICAgICAgICAgIGlmIChjLmRhdGFQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbFZhbFRtcCA9IHRoaXMuZ2V0VmFsdWVCeVBhdGgoZCwgYy5kYXRhUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xWYWxUbXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGNvbFZhbFRtcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChkW2MuZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRbYy5maWVsZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBEYXRlXG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0ZUZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKTtcbiAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZGF0ZVBpcGUudHJhbnNmb3JtKGNvbFZhbCwgYy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IG1hcHBpbmdcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRhTWFwcGluZykge1xuICAgICAgICAgICAgICAgICAgICBjLmRhdGFNYXBwaW5nLmZvckVhY2goKGRtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG0uaWQgPT09IGRbYy5maWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSB0aGlzLnJlcGxhY2VTcGVjaWFsQ2hhcmFjdGVyKGRtLm5hbWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29sVmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSB0aGlzLnJlcGxhY2VTcGVjaWFsQ2hhcmFjdGVyKGNvbFZhbC50b1N0cmluZygpKSArICcsJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSAnJyArICcsJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChyb3dTdHJpbmcpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGNzdiA9IGhlYWRlclN0cmluZyArICdcXG4nO1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzU3RyaW5nKSB7XG4gICAgICAgICAgICBjc3YgKz0gcm93ICsgJ1xcbic7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFsnXFx1RkVGRicsIGNzdl0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVOYW1lICsgJy5jc3YnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTsgLy8gUmVxdWlyZWQgZm9yIEZGXG4gICAgICAgIGxpbmsuY2xpY2soKTtcbiAgICB9XG5cbiAgICBleHBvcnRUb0NTVkdyb3VwKGRhdGFzOiBhbnksIGNvbHVtbnM6IGFueVtdLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGxldCBoZWFkZXJTdHJpbmcgPSAnJztcbiAgICAgICAgLy8gRHV54buHdCBj4buZdCDEkeG7gyB0aMOqbSB2w6BvIGhlYWRlclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGhlYWRlclN0cmluZyArPSBjb2x1bW5zW2ldLmhlYWRlciArICcsJztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvd3NTdHJpbmc6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGRhdGFzLmZvckVhY2goKHN1YkRhdGEpID0+IHtcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChzdWJEYXRhLmdyb3VwTmFtZSk7XG4gICAgICAgICAgICByb3dzU3RyaW5nLnB1c2goaGVhZGVyU3RyaW5nKTtcblxuICAgICAgICAgICAgc3ViRGF0YS5kYXRhLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcm93U3RyaW5nID0gJyc7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2xWYWwgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuZGF0YVBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbFZhbFRtcCA9IHRoaXMuZ2V0VmFsdWVCeVBhdGgoZCwgYy5kYXRhUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sVmFsVG1wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gY29sVmFsVG1wO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRbYy5maWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRbYy5maWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IERhdGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuZGF0ZUZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuLVVTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkYXRlUGlwZS50cmFuc2Zvcm0oY29sVmFsLCBjLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBtYXBwaW5nXG4gICAgICAgICAgICAgICAgICAgIGlmIChjLmRhdGFNYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLmRhdGFNYXBwaW5nLmZvckVhY2goKGRtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRtLmlkID09PSBkW2MuZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IHRoaXMucmVwbGFjZVNwZWNpYWxDaGFyYWN0ZXIoZG0ubmFtZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sVmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz0gdGhpcy5yZXBsYWNlU3BlY2lhbENoYXJhY3Rlcihjb2xWYWwudG9TdHJpbmcoKSkgKyAnLCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz0gJycgKyAnLCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByb3dzU3RyaW5nLnB1c2gocm93U3RyaW5nKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByb3dzU3RyaW5nLnB1c2goJ1xcbicpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBsZXQgY3N2ID0gaGVhZGVyU3RyaW5nICsgJ1xcbic7XG4gICAgICAgIGxldCBjc3YgPSAnJztcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93c1N0cmluZykge1xuICAgICAgICAgICAgY3N2ICs9IHJvdyArICdcXG4nO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbJ1xcdUZFRkYnLCBjc3ZdLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSk7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlTmFtZSArICcuY3N2Jyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7IC8vIFJlcXVpcmVkIGZvciBGRlxuICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuXG4gICAgY29udmVydFRvU2VsZWN0SXRlbShcbiAgICAgICAgZGF0YTogYW55LFxuICAgICAgICB2YWx1ZUZpZWxkOiBzdHJpbmcsXG4gICAgICAgIHRleHRGaWVsZDogc3RyaW5nID0gJycsXG4gICAgICAgIHRleHRGaWVsZDI6IHN0cmluZyA9ICcnLFxuICAgICAgICBwcmVmaXhUZXh0RmllbGQyID0gJycsXG4gICAgICAgIGFsbG93TnVsbDogYm9vbGVhbiA9IHRydWUsXG4gICAgKTogU2VsZWN0SXRlbVtdIHtcbiAgICAgICAgaWYgKCF0ZXh0RmllbGQgfHwgdGV4dEZpZWxkID09PSAnJykge1xuICAgICAgICAgICAgdGV4dEZpZWxkID0gdmFsdWVGaWVsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRlbXBBcnI6IFNlbGVjdEl0ZW1bXSA9IFtdO1xuXG4gICAgICAgIGlmIChhbGxvd051bGwpIHtcbiAgICAgICAgICAgIHRlbXBBcnIucHVzaCh7IGxhYmVsOiAnJywgdmFsdWU6ICcnIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmZvcmluXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhKSB7XG4gICAgICAgICAgICB0ZW1wQXJyLnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0RmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZDIsXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeFRleHRGaWVsZDIsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVt2YWx1ZUZpZWxkXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZW1wQXJyO1xuICAgIH1cblxuICAgIGdldExhYmVsKFxuICAgICAgICBpdGVtOiBhbnksXG4gICAgICAgIHRleHRGaWVsZDogc3RyaW5nLFxuICAgICAgICB0ZXh0RmllbGQyOiBzdHJpbmcsXG4gICAgICAgIHByZWZpeFRleHRGaWVsZDI6IHN0cmluZyxcbiAgICApIHtcbiAgICAgICAgaWYgKHRleHRGaWVsZDIpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtpdGVtW3RleHRGaWVsZF19IC0gJHtwcmVmaXhUZXh0RmllbGQyfSAke2l0ZW1bdGV4dEZpZWxkMl19YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtW3RleHRGaWVsZF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb252ZXJ0VG9TZWxlY3RJdGVtTWFzdGVyRGF0YShcbiAgICAgICAgZGF0YTogYW55LFxuICAgICAgICB2YWx1ZUZpZWxkOiBzdHJpbmcgPSAnaWQnLFxuICAgICAgICB0ZXh0RmllbGQ6IHN0cmluZyA9ICduYW1lJyxcbiAgICApOiBTZWxlY3RJdGVtW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0VG9TZWxlY3RJdGVtKGRhdGEsIHZhbHVlRmllbGQsIHRleHRGaWVsZCk7XG4gICAgfVxuXG4gICAgZ2V0VHJhY2VJZCA9ICgpID0+IHNlc3Npb25TdG9yYWdlPy5nZXRJdGVtKCd0cmFjZUlkJykgPz8gJyc7XG5cbiAgICBoYW5kbGVFcnJvcihlcnJvcjogYW55LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgbGV0IHRyYWNlSWQ6IHN0cmluZyA9IG51bGw7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlICYmIHNlc3Npb25TdG9yYWdlLmxlbmd0aCkge1xuICAgICAgICAgICAgdHJhY2VJZCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3RyYWNlSWQnKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEPDsyBs4buXaSDhu58gdXJsOiAke2Vycm9yLnVybH0sIHN0YXR1c0NvZGU6ICR7ZXJyb3Iuc3RhdHVzfSA9PT09PiBUcmFjZUlkIGNobyBlbGFzdGljOiAke3RyYWNlSWR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JjZUlmNDAxID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5pc0ZvcmNlTG9nb3V0SWY0MDE7XG4gICAgICAgICAgICBpZiAoZm9yY2VJZjQwMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9hdXRoZW5TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KEF1dGhlblNlcnZpY2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IF9ub3RpZmllclNlcnZpY2UgPSBpbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKTtcbiAgICAgICAgICAgICAgICBfbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdI4buHIHRo4buRbmcgc+G6vSB04buxIMSRxINuZyB4deG6pXQgc2F1IDVzIMSR4buDIGPhuq1wIG5o4bqtcCBwaGnDqm4gYuG6o24gbeG7m2knLCAnVGjDtG5nIGLDoW8nKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3NsZWVwIGJlZm9yZSBsb2dvdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgX2F1dGhlblNlcnZpY2UubG9nb3V0KCk7XG4gICAgICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKDxSZXNwb25zZVJlc3VsdD57XG4gICAgICAgICAgICBtZXNzYWdlOiAnQ8OzIGzhu5dpIHjhuqN5IHJhLiBIw6N5IGxpw6puIGjhu4cgcXXhuqNuIHRy4buLIHZpw6puIMSR4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90ISEhJyxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICAgIHRvdGFsUmVjb3JkOiAwLFxuICAgICAgICAgICAgbWV0YWRhdGE6IG51bGwsXG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yQ2hlY2tFeGlzdDogbnVsbCxcbiAgICAgICAgICAgIGVycm9yQ29udHJvbElkOiBudWxsLFxuICAgICAgICAgICAgZXJyb3JGb3JtSWQ6IG51bGwsXG4gICAgICAgICAgICB0cmFjZUlkOiB0cmFjZUlkLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblRvcGJhckl0ZW1DbGljayhldmVudCwgaXRlbSkge1xuICAgICAgICB0aGlzLnRvcGJhckl0ZW1DbGljayA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVG9wYmFySXRlbSA9PT0gaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUb3BiYXJJdGVtID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVG9wYmFySXRlbSA9IGl0ZW07XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGF1dG9PcGVuVG9wYmFySXRlbSgpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVUb3BiYXJJdGVtID0gMTtcbiAgICB9XG5cbiAgICBpc0hvcml6b250YWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dE1vZGUgPT09IE1lbnVPcmllbnRhdGlvbi5IT1JJWk9OVEFMO1xuICAgIH1cblxuICAgIGlzU2xpbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0TW9kZSA9PT0gTWVudU9yaWVudGF0aW9uLlNMSU07XG4gICAgfVxuXG4gICAgaGlkZU92ZXJsYXlNZW51KCkge1xuICAgICAgICB0aGlzLnJvdGF0ZU1lbnVCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vdmVybGF5TWVudUFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvbkxheW91dENsaWNrKCkge1xuICAgICAgICBpZiAoIXRoaXMudG9wYmFySXRlbUNsaWNrKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubWVudUNsaWNrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSB8fCB0aGlzLmlzU2xpbSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldE1lbnUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5TWVudUFjdGl2ZSB8fCB0aGlzLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVPdmVybGF5TWVudSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm1lbnVIb3ZlckFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvblRvcGJhck1lbnVCdXR0b25DbGljayhldnQpIHtcbiAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSB0cnVlO1xuICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSAhdGhpcy50b3BiYXJNZW51QWN0aXZlO1xuXG4gICAgICAgIHRoaXMuaGlkZU92ZXJsYXlNZW51KCk7XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5hdXRvT3BlblRvcGJhckl0ZW0oKTtcbiAgICB9XG5cbiAgICBzaG93VG9wYmFyTWVudSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRvcGJhck1lbnVBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMudG9wYmFySXRlbUNsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9wYmFySXRlbUNsaWNrID0gZmFsc2U7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaGlkZU92ZXJsYXlNZW51KCk7XG4gICAgICAgICAgICB0aGlzLmF1dG9PcGVuVG9wYmFySXRlbSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25NZW51QnV0dG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSB0cnVlO1xuICAgICAgICB0aGlzLnJvdGF0ZU1lbnVCdXR0b24gPSAhdGhpcy5yb3RhdGVNZW51QnV0dG9uO1xuICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uT1ZFUkxBWSkge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5TWVudUFjdGl2ZSA9ICF0aGlzLm92ZXJsYXlNZW51QWN0aXZlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXNrdG9wKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmUgPSAhdGhpcy5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlID0gIXRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlTGVmdE1lbnUoc2hvdykge1xuICAgICAgICB0aGlzLm1lbnVDbGljayA9ICFzaG93O1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWVudUNsaWNrID0gc2hvdztcbiAgICAgICAgfSwgMCk7XG4gICAgICAgIHRoaXMudG9wYmFyTWVudUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLmxheW91dE1vZGUgPT09IE1lbnVPcmllbnRhdGlvbi5PVkVSTEFZKSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlNZW51QWN0aXZlID0gIXNob3c7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rlc2t0b3AoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZSA9IHNob3c7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGVNZW51QnV0dG9uID0gc2hvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9ICFzaG93O1xuICAgICAgICAgICAgICAgIHRoaXMucm90YXRlTWVudUJ1dHRvbiA9ICFzaG93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25NZW51Q2xpY2soJGV2ZW50KSB7XG4gICAgICAgIHRoaXMubWVudUNsaWNrID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXNldE1lbnUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpc1RhYmxldCgpIHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgICAgcmV0dXJuIHdpZHRoIDw9IDEwMjQgJiYgd2lkdGggPiA2NDA7XG4gICAgfVxuXG4gICAgaXNEZXNrdG9wKCkge1xuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPiAxMDI0O1xuICAgIH1cblxuICAgIGlzTW9iaWxlKCkge1xuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPD0gNjQwO1xuICAgIH1cblxuICAgIGlzT3ZlcmxheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0TW9kZSA9PT0gTWVudU9yaWVudGF0aW9uLk9WRVJMQVk7XG4gICAgfVxuXG4gICAgY29tYmluZVNlcnZpY2VDb2RlQW5kU3VmZml4KHNlcnZpY2VDb2RlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5zdWZmaXhTZXJ2aWNlQ29kZVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtzZXJ2aWNlQ29kZX0ke3RoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuc3VmZml4U2VydmljZUNvZGV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZXJ2aWNlQ29kZTtcbiAgICB9XG5cbiAgICBkZWxheShtczogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICAgIH1cblxuICAgIC8qKiBCZWdpbiBkaXNhYmxlIGVkaXRvciB0YWIgKi9cbiAgICBzZXRBdXRvZm9jdXNGaXJzdENvbnRyb2woaWRFbGVtZW50KSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgdmlld1JlZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAodmlld1JlZiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB2aWV3UmVmLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LnR5cGUgIT0gJ3JhZGlvJykge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4YXRlYXJhID0gdmlld1JlZi5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXhhdGVhcmEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleGF0ZWFyYS5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCA1MDApO1xuICAgIH1cblxuICAgIGdldFRhYkRpc2FibGVkSGFuZGxlcigpIHtcbiAgICAgICAgLy8gcmV0dXJuIHtcbiAgICAgICAgLy8gICAgIGtleSAgICA6IDksXG4gICAgICAgIC8vICAgICBoYW5kbGVyOiBmdW5jdGlvbiAoYXJnMSwgYXJnMikge1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IG5leHQgPSBKUXVlcnkoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuY2xvc2VzdCgncC1lZGl0b3InKS5wYXJlbnQoKS5uZXh0KCkuZmluZCgnOnRhYmJhYmxlLCA6Zm9jdXNhYmxlJykuZmlyc3QoKTtcbiAgICAgICAgLy8gICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAvLyAgICAgICAgICAgICBuZXh0LmZvY3VzKCk7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfTtcbiAgICB9XG5cbiAgICBhZGRUYWJEaXNhYmxlZEhhbmRsZXIoZXZlbnQpIHtcbiAgICAgICAgLy8gdGhpcy5kaXNhYmxlVGFiVG9vbGJhckVkaXRvcigpO1xuICAgICAgICAvLyBldmVudC5lZGl0b3Iua2V5Ym9hcmQuYmluZGluZ3NbOV0ubGVuZ3RoID0gMDtcbiAgICAgICAgLy8gZXZlbnQuZWRpdG9yLmtleWJvYXJkLmJpbmRpbmdzWzldLnB1c2godGhpcy5nZXRUYWJEaXNhYmxlZEhhbmRsZXIoKSk7XG4gICAgfVxuXG4gICAgZGlzYWJsZVRhYlRvb2xiYXJFZGl0b3IoKSB7XG4gICAgICAgIC8vIGpRdWVyeShcIi5xbC10b29sYmFyXCIpLmZpbmQoXCI6YnV0dG9uXCIpLmF0dHIoXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgIH1cblxuICAgIC8qKiBFbmQgZGlzYWJsZSBlZGl0b3IgdGFiICovXG5cbiAgICBwcm9jZXNzRGF0ZUlucHV0KGlucHV0VmFsdWUsIHNob3dUaW1lOiBib29sZWFuLCB0aW1lT25seSA9IGZhbHNlKTogRGF0ZSB7XG4gICAgICAgIGlmICghaW5wdXRWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0ludGVnZXJTdHJpbmcoaW5wdXRWYWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IE51bWJlcihpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IGhOb3cgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XG4gICAgICAgICAgICBjb25zdCBtTm93ID0gbmV3IERhdGUoKS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICBjb25zdCBzTm93ID0gbmV3IERhdGUoKS5nZXRIb3VycygpO1xuXG4gICAgICAgICAgICBpZiAobnVtYmVyID4gOTkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0VmFsdWUubGVuZ3RoID09PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gJ0RETU1ZWVlZaGhtbSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSBtb21lbnQoaW5wdXRWYWx1ZSwgZm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5LnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0VmFsdWUubGVuZ3RoID09PSA4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIDAxMDEyMDE5XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9ICtpbnB1dFZhbHVlLnN1YnN0cigwLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSAraW5wdXRWYWx1ZS5zdWJzdHIoMiwgMik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSAraW5wdXRWYWx1ZS5zdWJzdHIoNCwgNCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vbnRoID4gMTIgfHwgbW9udGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heERheSA9IHRoaXMuZ2V0TWF4RGF5SW5Nb250aEFuZFllYXIobW9udGgsIHllYXIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF5ID4gbWF4RGF5IHx8IGRheSA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldEhvdXJzKGhOb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRNaW51dGVzKG1Ob3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRTZWNvbmRzKHNOb3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnB1dFZhbHVlLmxlbmd0aCA9PT0gNikge1xuICAgICAgICAgICAgICAgICAgICAvLyAwMTAxMTlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gK2lucHV0VmFsdWUuc3Vic3RyKDAsIDIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9ICtpbnB1dFZhbHVlLnN1YnN0cigyLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeWVhciA9ICsoJzIwJyArIGlucHV0VmFsdWUuc3Vic3RyKDQsIDIpLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aCA+IDEyIHx8IG1vbnRoIDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhEYXkgPSB0aGlzLmdldE1heERheUluTW9udGhBbmRZZWFyKG1vbnRoLCB5ZWFyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRheSA+IG1heERheSB8fCBkYXkgPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRIb3VycyhoTm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0TWludXRlcyhtTm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0U2Vjb25kcyhzTm93KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gMDEwMVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSAraW5wdXRWYWx1ZS5zdWJzdHIoMCwgMik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gK2lucHV0VmFsdWUuc3Vic3RyKDIsIDIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gdGhpcy5nZXRDdXJyZW50WWVhcigpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aCA+IDEyIHx8IG1vbnRoIDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhEYXkgPSB0aGlzLmdldE1heERheUluTW9udGhBbmRZZWFyKG1vbnRoLCB5ZWFyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRheSA+IG1heERheSB8fCBkYXkgPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRIb3VycyhoTm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0TWludXRlcyhtTm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0U2Vjb25kcyhzTm93KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG51bWJlciA+IC0xMDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCByID0gdGhpcy5hZGREYXlzKChuZXcgRGF0ZSgpKS50b0xvY2FsZURhdGVTdHJpbmcoKSwgbnVtYmVyKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgci5zZXRIb3VycyhoTm93KTtcbiAgICAgICAgICAgICAgICAgICAgci5zZXRNaW51dGVzKG1Ob3cpO1xuICAgICAgICAgICAgICAgICAgICByLnNldFNlY29uZHMoc05vdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IGlucHV0VmFsdWUucmVwbGFjZSgvLS9nLCAnLycpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUgJiYgIXRpbWVPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyeVBhcnNlRGF0ZVRpbWUgPSB0aGlzLnRyeVBhcnNlRXh0cmFjdERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0REL01NL1lZWVkgaGg6bW0nLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyc2VEYXRlVGltZSArICcnICE9ICdJbnZhbGlkIERhdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UGFyc2VEYXRlVGltZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lT25seSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cnlQYXJzZURhdGUgPSB0aGlzLnRyeVBhcnNlRXh0cmFjdERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtpbnB1dFZhbHVlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnREQvTU0vWVlZWSBoaDptbScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyc2VEYXRlICsgJycgIT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlQYXJzZURhdGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyeVBhcnNlRGF0ZSA9IHRoaXMudHJ5UGFyc2VFeHRyYWN0RGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0cnlQYXJzZURhdGUgKyAnJyAhPSAnSW52YWxpZCBEYXRlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeVBhcnNlRGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRNYXhEYXlJbk1vbnRoQW5kWWVhcihtb250aCwgeWVhcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMCk7XG4gICAgICAgIHJldHVybiBkLmdldERhdGUoKTtcbiAgICB9XG5cbiAgICBnZXREYXRhc291cmNlUmFuZ2VZZWFyKHJhbmdlWWVhciA9IDUsIHByZXZpb3VzWWVhcj86IG51bWJlciwgbmV4dFllYXI/OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZVllYXIgPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGNvbnN0IGlzUHJldmlvdXNZZWFyID0gcHJldmlvdXNZZWFyICYmIHByZXZpb3VzWWVhciA+IDA7XG4gICAgICAgIGNvbnN0IGlzTmV4dFllYXIgPSBuZXh0WWVhciAmJiBuZXh0WWVhciA+IDA7XG4gICAgICAgIGlmIChpc1ByZXZpb3VzWWVhciB8fCBpc05leHRZZWFyKSB7XG4gICAgICAgICAgICBpZiAoaXNQcmV2aW91c1llYXIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB5ZWFyID0gY3VycmVudFllYXIgLSBwcmV2aW91c1llYXI7IHllYXIgPCBjdXJyZW50WWVhcjsgeWVhcisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VZZWFyLnB1c2goeyBpZDogeWVhciwgdGVuOiB5ZWFyIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc05leHRZZWFyKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgeWVhciA9IGN1cnJlbnRZZWFyOyB5ZWFyIDw9IGN1cnJlbnRZZWFyICsgbmV4dFllYXI7IHllYXIrKykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlWWVhci5wdXNoKHsgaWQ6IHllYXIsIHRlbjogeWVhciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlWWVhci5wdXNoKHsgaWQ6IGN1cnJlbnRZZWFyLCB0ZW46IGN1cnJlbnRZZWFyIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGkgPSAxO1xuICAgICAgICAgICAgZm9yIChsZXQgeWVhciA9IGN1cnJlbnRZZWFyIC0gcmFuZ2VZZWFyOyB5ZWFyIDw9IGN1cnJlbnRZZWFyOyB5ZWFyKyspIHtcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlWWVhci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiB5ZWFyLCB0ZW46IHllYXIgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogY3VycmVudFllYXIgKyBpLCB0ZW46IGN1cnJlbnRZZWFyICsgaSB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VZZWFyLnNvcnQoKGEsIGIpID0+IGIuaWQgLSBhLmlkKTtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50WWVhcigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRNb250aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRNb250aCgpO1xuICAgIH1cblxuICAgIGdldER5bmFtaWNGb3JtSWQoc2VydmljZSwgZW50aXR5LCBhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGAke3NlcnZpY2V9XyR7ZW50aXR5fV8ke2FjdGlvbn1gLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdER5bmFtaWNGb3JtSWQoYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBgREVGQVVMVF8ke2FjdGlvbn1gLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgY2xvbmVPYmplY3Qob2JqOiBhbnkpIHtcbiAgICAgICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBzZXRQcm9wZXJ0eShwcm9wLCB2YWwsIG1vZGVsKSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gdGhpcy5jbG9uZU9iamVjdChtb2RlbCk7XG4gICAgICAgIGlmIChjbG9uZSkge1xuICAgICAgICAgICAgY2xvbmVbcHJvcF0gPSB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgc3RhbmRhcmRpemVkSnNvbihpbnB1dEpzb246IHN0cmluZykge1xuICAgICAgICBsZXQgZGF0YSA9IGlucHV0SnNvbi5yZXBsYWNlKC9PYmplY3RJZFxcKCguKj8pXFwpL2dtLCAnJDEnKTtcbiAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvSVNPRGF0ZVxcKCguKj8pXFwpL2dtLCAnJDEnKTtcbiAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvTnVtYmVyTG9uZ1xcKCguKj8pXFwpL2dtLCAnJDEnKTtcblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICB0cmlnZ2VyUmVzaXplV2luZG93KCkge1xuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Jlc2l6ZScpKTtcbiAgICB9XG5cbiAgICBhdXRvQWxpZ25EaWFsb2coZGlhbG9nOiBEaWFsb2cpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRyaWdnZXJSZXNpemVXaW5kb3coKSwgMjAwKTtcbiAgICB9XG5cbiAgICBvYmpIYXNOdWxsKG9iaikge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmpba2V5XSAhPSBudWxsICYmIG9ialtrZXldICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgYXJyYXlIYXNDaGFuZ2VkKG9sZEFycmF5LCBuZXdBcnJheSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgaSwgaXRlbSwgaiwgbGVuO1xuICAgICAgICBpZiAoKCFvbGRBcnJheSAmJiBuZXdBcnJheSkgfHwgKG9sZEFycmF5ICYmICFuZXdBcnJheSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KG9sZEFycmF5KSA9PT0gSlNPTi5zdHJpbmdpZnkobmV3QXJyYXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSBqID0gMCwgbGVuID0gbmV3QXJyYXkubGVuZ3RoOyBqIDwgbGVuOyBpID0gKytqKSB7XG4gICAgICAgICAgICBpdGVtID0gbmV3QXJyYXlbaV07XG4gICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoaXRlbSkgIT09IEpTT04uc3RyaW5naWZ5KG9sZEFycmF5W2ldKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnlQYXJzZUV4dHJhY3REYXRlKGRhdGVWYWx1ZSwgZm9ybWF0KSB7XG4gICAgICAgIGNvbnN0IGRheSA9IG1vbWVudChkYXRlVmFsdWUsIGZvcm1hdCk7XG4gICAgICAgIGlmIChkYXkpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXkudG9EYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZUZyb21UYXNrKGtleVZhbHVlLCBjdXJyZW50Vmlldywgc3RlcE1ldGFkYXRhKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICBpZiAoY3VycmVudFZpZXcua2V5VmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCB0YXNrS2V5VmFsdWUgPSBKU09OLnBhcnNlKGN1cnJlbnRWaWV3LmtleVZhbHVlcykuZmluZChcbiAgICAgICAgICAgICAgICAoeCkgPT4geC5rZXkgPT09IGtleVZhbHVlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh0YXNrS2V5VmFsdWUgIT09IG51bGwgJiYgdGFza0tleVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0YXNrS2V5VmFsdWUudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXBNZXRhZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgYXJyRXh0ZW5kRGF0YSA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgICAgICAgc3RlcE1ldGFkYXRhLmZpbmQoKHgpID0+IHgua2V5ID09PSAnZXh0ZW5kRGF0YScpLnZhbHVlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHRhc2tLZXlWYWx1ZSA9IGFyckV4dGVuZERhdGEuZmluZChcbiAgICAgICAgICAgICAgICAoeCkgPT4geC5rZXkgJiYgeC5rZXkudG9Mb3dlckNhc2UoKSA9PT0ga2V5VmFsdWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHRhc2tLZXlWYWx1ZSAhPT0gbnVsbCAmJiB0YXNrS2V5VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRhc2tLZXlWYWx1ZS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHVwcGVyRmlyc3RMZXR0ZXIoaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0ID09ICcnIHx8IGlucHV0ID09IG51bGwgfHwgaW5wdXQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG5cbiAgICAgICAgY29uc3Qgd29yZHMgPSBpbnB1dC5zcGxpdCgnICcpO1xuXG4gICAgICAgIHdvcmRzLmZvckVhY2goKHdvcmQpID0+IHtcbiAgICAgICAgICAgIGlmICh3b3JkLnRyaW0oKSAhPSAnJykge1xuICAgICAgICAgICAgICAgIGlmICh3b3JkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmQuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnN1YnN0cmluZygxKSArICcgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3b3JkLnRvVXBwZXJDYXNlKCkgKyAnICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC50cmltKCk7XG4gICAgfVxuXG4gICAgcmVwbGFjZUFsbChpbnB1dFN0ciwgc2VhcmNoLCByZXBsYWNlbWVudCkge1xuICAgICAgICBpZiAoaW5wdXRTdHIgPT09IG51bGwgfHwgaW5wdXRTdHIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0U3RyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dFN0ci5zcGxpdChzZWFyY2gpLmpvaW4ocmVwbGFjZW1lbnQpO1xuICAgIH1cblxuICAgIGlzSW1hZ2UoZmlsZU5hbWUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFmaWxlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAvXFwuKGdpZnxqcGd8anBlZ3x0aWZmfHBuZykkL2kudGVzdChmaWxlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICBjcmVhdGVJZnJhbWUodXJsKSB7XG4gICAgICAgIGNvbnN0IGlmcmFtZSA9IGA8aWZyYW1lIHN0eWxlPVwiZGlzcGxheTpub25lO1wiIHdpZHRoPVwiMFwiIGhlaWdodD1cIjBcIiBzcmM9XCIke3VybH1cIj48L2lmcmFtZT5gO1xuICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgaWZyYW1lKTtcbiAgICB9XG5cbiAgICBpc0ludGVnZXJTdHJpbmcoc3RyOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoc3RyLmluZGV4T2YoJzAnKSA9PSAwKSB7XG4gICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHIgPT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG4gPSBNYXRoLmZsb29yKE51bWJlcihzdHIpKTtcbiAgICAgICAgcmV0dXJuIG4gIT09IEluZmluaXR5ICYmIFN0cmluZyhuKSA9PT0gc3RyO1xuICAgIH1cblxuICAgIGhhc0FueU1hc2soKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoJ2RpdltjbGFzc349XCJ1aS1kaWFsb2ctbWFza1wiXScpXG4gICAgICAgICAgICB8fCBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoJ2RpdltjbGFzc349XCJ1aS1zaWRlYmFyLW1hc2tcIl0nKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNhZmVTdHJpbmdpZnkoZGF0YSkge1xuICAgICAgICBjb25zdCBpdGVtID0gc3RyaW5naWZ5LnN0YWJsZVN0cmluZ2lmeShkYXRhLCBudWxsLCAyKTtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgY29tcGFyZVN0cmluZyh2YWx1ZTEsIHZhbHVlMikge1xuICAgICAgICBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZTEgIT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZTIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUxLmxvY2FsZUNvbXBhcmUodmFsdWUyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tcGFyZURhdGUoZGF0ZTEsIGRhdGUyKSB7XG4gICAgICAgIGlmICghZGF0ZTEgfHwgIWRhdGUyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBkYXRlMSA9IHRoaXMucGFyc2VEYXRlKGRhdGUxKTtcbiAgICAgICAgZGF0ZTIgPSB0aGlzLnBhcnNlRGF0ZShkYXRlMik7XG4gICAgICAgIGlmIChkYXRlMS5nZXRUaW1lKCkgPCBkYXRlMi5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRlMS5nZXRUaW1lKCkgPT0gZGF0ZTIuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlmZkRhdGUoZGF0ZTE6IGFueSwgZGF0ZTI6IGFueSk6IG51bWJlciB7XG4gICAgICAgIC8vIGQxIDwgZDIgdGjDrCBi4bqxbmcgPSAtMVxuICAgICAgICBjb25zdCBkMSA9IG1vbWVudChkYXRlMSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgICAgIGNvbnN0IGQyID0gbW9tZW50KGRhdGUyKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICAgICAgaWYgKGQxID09IGQyKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZDEgPiBkMikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGNvbXBhcmVXaXRoTm93KGRhdGUxKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZURhdGUoZGF0ZTEsIGN1cnJlbnREYXRlKTtcbiAgICB9XG5cbiAgICBwYXJzZURhdGUoZGF0ZVN0cjogYW55KSB7XG4gICAgICAgIGlmIChkYXRlU3RyIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGVTdHI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWRhdGVTdHIgfHwgZGF0ZVN0ciA9PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGVTdHIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgYXN5bmNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBhd2FpdCBjYWxsYmFjayhhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvcmRlckJ5KG9iajogYW55W10sIHByb3A6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gXy5zb3J0Qnkob2JqLCBwcm9wKTtcbiAgICB9XG5cbiAgICBncm91cEJ5KG9iajogYW55W10sIHByb3A6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gXy5ncm91cEJ5KG9iaiwgcHJvcCk7XG4gICAgfVxuXG4gICAgZGlzdGluY3QoYXJyYXk6IG51bWJlcltdKSB7XG4gICAgICAgIGNvbnN0IGZsYWdzID0gW10sIG91dHB1dCA9IFtdLCBsID0gYXJyYXkubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZsYWdzW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmxhZ3NbYXJyYXlbaV1dID0gdHJ1ZTtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKGFycmF5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cblxuICAgIGRpc3RpbmN0QXJyYXkoYXJyYXk6IGFueVtdKSB7XG4gICAgICAgIHJldHVybiBhcnJheS5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiBhcnJheS5pbmRleE9mKGl0ZW0pID09PSBpbmRleCk7XG4gICAgfVxuXG4gICAgZGlzdGluY3RGaWVsZChhcnJheTogYW55W10sIGZpZWxkKSB7XG4gICAgICAgIGNvbnN0IGZsYWdzID0gW10sIG91dHB1dCA9IFtdLCBsID0gYXJyYXkubGVuZ3RoO1xuICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGFycmF5W2ldW2ZpZWxkXTtcbiAgICAgICAgICAgIGlmIChmbGFnc1t2YWx1ZV0pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZsYWdzW3ZhbHVlXSA9IHRydWU7XG4gICAgICAgICAgICBvdXRwdXQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG5cbiAgICBhZGREaXN0aW5jdChzb3VyY2U6IGFueVtdLCBkZXN0OiBhbnlbXSkge1xuICAgICAgICBzb3VyY2UuZm9yRWFjaChzID0+IHtcbiAgICAgICAgICAgIGlmICghZGVzdC5zb21lKHAgPT4gcCA9PSBzKSkge1xuICAgICAgICAgICAgICAgIGRlc3QucHVzaChzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIC8vIEjDoG0gZHV54buHdCBt4bqjbmcsIGzhuqV5IHJhIHBo4bqnbiB04butIHRo4buPYSBtw6NuIFtmdW5jXSB2w6AgeMOzYSBwaOG6p24gdOG7rSDEkcOzIMSRaSBraOG7j2kgbeG6o25nXG4gICAgLy8gICAgICBjYWxsQmFjazogb3B0aW9uYWwgcGjhu6VjIHbhu6Ugbmh1IGPhuqd1IGtow6FjIGtoaSBkdXnhu4d0IMSR4bq/biBpdGVtIHRo4buPYSBtw6NuXG4gICAgZ2V0QW5kUmVtb3ZlKHNvdXJjZTogYW55W10sIGZ1bmM6IEZ1bmN0aW9uLCBjYWxsQmFjaz86IEZ1bmN0aW9uKSB7XG4gICAgICAgIGlmIChjYWxsQmFjayA9PSBudWxsKSB7XG4gICAgICAgICAgICBjYWxsQmFjayA9IGkgPT4gaTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmdW5jKHNvdXJjZVtpXSkpIHtcbiAgICAgICAgICAgICAgICBjYWxsQmFjayhzb3VyY2VbaV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNvdXJjZVtpXSk7XG4gICAgICAgICAgICAgICAgc291cmNlLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b2dnbGVNZW51KCkge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVudS1idXR0b24nKS5jbGljaygpO1xuICAgIH1cblxuICAgIHN0cmluZ1RvQXJyYXlCdWZmZXIoc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzdHJpbmcubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgYnVmZmVyVmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBidWZmZXJWaWV3W2ldID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICB9XG5cbiAgICBndWlkRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBraeG7g20gdHJhIHhlbSBjaHXhu5dpIGPDsyBwaOG6o2kgbeG7mXQgZ3VpZCBraMOhYyB24bubaSBj4bqjIGd1aWRFbXB0eVxuICAgICAqIEBkYXRlIDgvMTEvMjAyMiAtIDExOjUxOjMxIEFNXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZ3VpZFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzVmFsaWRHdWlkKGd1aWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZ3VpZCAhPSBudWxsICYmIGd1aWQgIT09ICcnICYmIGd1aWQgIT09IHRoaXMuZ3VpZEVtcHR5KCk7XG4gICAgfVxuXG4gICAgZ2V0RGlzcGxheVZhbCh2YWwpIHtcbiAgICAgICAgaWYgKHZhbCA9PSB1bmRlZmluZWQgfHwgdmFsID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGltZVNwYW46IFRy4bqjIHbhu4EgdHJ1ZSBu4bq/dSBoYWkga2hv4bqjbmcgdGjhu51pIGdpYW4gKHN0YXJ0LCBlbmQpXG4gICAgICogdsOgIChjb21wYXJlU3RhcnQsIGNvbXBhcmVFbmQpIGdpYW8gbmhhdS4gS2jDtG5nIHTDrW5oXG4gICAgICogY2jhu4kgZ2lhbyBt4buZdCDEkeG6p3UgbcO6dC5cbiAgICAgKi9cbiAgICBoYXNJbnRlcnNlY3Rpb24oc3RhcnQsIGVuZCwgY29tcGFyZVN0YXJ0LCBjb21wYXJlRW5kKSB7XG4gICAgICAgIHJldHVybiAoc3RhcnQgPCBjb21wYXJlU3RhcnQgJiYgY29tcGFyZVN0YXJ0IDwgZW5kKVxuICAgICAgICAgICAgfHwgKHN0YXJ0IDwgY29tcGFyZUVuZCAmJiBjb21wYXJlRW5kIDwgZW5kKVxuICAgICAgICAgICAgfHwgKGNvbXBhcmVTdGFydCA8PSBzdGFydCAmJiBlbmQgPD0gY29tcGFyZUVuZCk7XG4gICAgfVxuXG4gICAgaGFzSW50ZXJzZWN0aW9uRGF0ZShzdGFydCwgZW5kLCBjb21wYXJlU3RhcnQsIGNvbXBhcmVFbmQsIGRhdGVGb3JtYXQgPSB0cnVlKSB7XG4gICAgICAgIGlmICghZGF0ZUZvcm1hdCkge1xuICAgICAgICAgICAgcmV0dXJuIChuZXcgRGF0ZShzdGFydCkgPCBuZXcgRGF0ZShjb21wYXJlRW5kKSAmJiBuZXcgRGF0ZShlbmQpID4gbmV3IERhdGUoY29tcGFyZVN0YXJ0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnQgPCBjb21wYXJlRW5kICYmIGVuZCA+IGNvbXBhcmVTdGFydDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldE9mZnNldEluTWludXRlKHN0ckRhdGUxLCBzdHJEYXRlMiwgcm91bmQgPSB0cnVlKSB7XG4gICAgICAgIGlmICghc3RyRGF0ZTEgfHwgIXN0ckRhdGUyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGQxID0gbmV3IERhdGUoc3RyRGF0ZTEpO1xuICAgICAgICBjb25zdCBkMiA9IG5ldyBEYXRlKHN0ckRhdGUyKTtcblxuICAgICAgICBsZXQgb2Zmc2V0ID0gKGQxLmdldFRpbWUoKSAtIGQyLmdldFRpbWUoKSkgLyAxMDAwIC8gNjA7XG4gICAgICAgIGlmIChyb3VuZCkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gTWF0aC5yb3VuZChvZmZzZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG5cbiAgICBmaW5kVGVtcGxhdGVGcm9tTGlzdCgkbGlzdDogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+LCB0ZW1wbGF0ZU5hbWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gJGxpc3RcbiAgICAgICAgICAgID8gJGxpc3QuZmluZCgodGVtcGxhdGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZS5fZGVmICYmIHRlbXBsYXRlLl9kZWYucmVmZXJlbmNlcykge1xuICAgICAgICAgICAgICAgICAgICAvLyBvbGQgdmVyc2lvbiwgbm90IGl2eVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuX2RlZi5yZWZlcmVuY2VzW3RlbXBsYXRlTmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRlbXBsYXRlLl9kZWNsYXJhdGlvblRDb250YWluZXIgJiYgdGVtcGxhdGUuX2RlY2xhcmF0aW9uVENvbnRhaW5lci5sb2NhbE5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlzIGl2eSB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuX2RlY2xhcmF0aW9uVENvbnRhaW5lci5sb2NhbE5hbWVzWzBdID09IHRlbXBsYXRlTmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBudWxsO1xuICAgIH1cblxuICAgIGlzU2FtZUFycmF5KGFycmF5MTogYW55W10sIGFycmF5MjogYW55W10pIHtcbiAgICAgICAgaWYgKGFycmF5MS5sZW5ndGggIT0gYXJyYXkyLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyYXkxKSB7XG4gICAgICAgICAgICBpZiAoIWFycmF5Mi5zb21lKHEgPT4gcSA9PSBpdGVtKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJlbG9hZFBhZ2UoKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICBpc051bGxPcldoaXRlU3BhY2UoaW5wdXQ6IHN0cmluZykge1xuICAgICAgICBpZiAoaW5wdXQgIT09IHVuZGVmaW5lZCAmJiBpbnB1dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LnRyaW0oKSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaXNFbXB0eUFycmF5T3JOdWxsKGFycmF5OiBhbnlbXSkge1xuICAgICAgICBpZiAoYXJyYXkgIT09IHVuZGVmaW5lZCAmJiBhcnJheSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyQ29udGFpbmVyKGxvZ2ljOiAnYW5kJyB8ICdvcicsIC4uLmZpbHRlcnM6IEZpbHRlcltdKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGxvZ2ljLFxuICAgICAgICAgICAgZmlsdGVyczogWy4uLmZpbHRlcnNdLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXIoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogYW55LCB2YWx1ZUlzRmllbGQ6IGJvb2xlYW4gPSBmYWxzZSwgc3RyaW5nQ29tcGFyZU9wdGlvbjogU3RyaW5nQ29tcGFyZU9wdGlvbiA9IFN0cmluZ0NvbXBhcmVPcHRpb24uTm9ybWFsKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSksXG4gICAgICAgICAgICB2YWx1ZUlzRmllbGQsXG4gICAgICAgICAgICBzdHJpbmdDb21wYXJlT3B0aW9uLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXJWNChmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQsIG9wZXJhdG9yLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsZWFyQ2xpcGJvYXJkU3RvcmFnZSgpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5TVE9SQUdFX0tFWSk7XG4gICAgfVxuXG4gICAgY29weUJ5U3RvcmFnZSh2YWw6IHN0cmluZykge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JBR0VfS0VZLCB2YWwpO1xuICAgICAgICB0aGlzLmNvcHlNZXNzYWdlKHZhbCk7XG4gICAgfVxuXG4gICAgcGFzdGVCeVN0b3JhZ2UoKSB7XG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlNUT1JBR0VfS0VZKTtcbiAgICB9XG5cbiAgICBjb3B5TWVzc2FnZSh2YWw6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzZWxCb3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgICAgICBzZWxCb3guc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgICAgICBzZWxCb3guc3R5bGUubGVmdCA9ICcwJztcbiAgICAgICAgc2VsQm94LnN0eWxlLnRvcCA9ICcwJztcbiAgICAgICAgc2VsQm94LnN0eWxlLm9wYWNpdHkgPSAnMCc7XG4gICAgICAgIHNlbEJveC52YWx1ZSA9IHZhbDtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzZWxCb3gpO1xuICAgICAgICBzZWxCb3guZm9jdXMoKTtcbiAgICAgICAgc2VsQm94LnNlbGVjdCgpO1xuICAgICAgICBzZWxCb3guc2V0U2VsZWN0aW9uUmFuZ2UoMCwgOTk5OTkpO1xuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNlbEJveCk7XG4gICAgfVxuXG4gICAgbmV3QmluZGluZ0ZpbHRlcihjb2x1bW46IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCBzb3VyY2VGaWVsZDogc3RyaW5nLCBzdWJGaWVsZD86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBmaWVsZDogY29sdW1uLFxuICAgICAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgICAgICBzb3VyY2VGaWVsZCxcbiAgICAgICAgICAgIHN1YkZpZWxkLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXdTb3J0KGZpZWxkOiBzdHJpbmcsIGRpcjogMSB8IC0xID0gMSkge1xuICAgICAgICByZXR1cm4gbmV3IFNvcnQoeyBmaWVsZCwgZGlyIH0pO1xuICAgIH1cblxuICAgIGxvZ0Vycm9yKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNcnIgU3RhcnI6ICR7dGhpcy50blByZWZpeExvZ31gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH1cblxuICAgIGxvZ0luZm8obXNnKSB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmluZm8oYE1yciBTdGFycjogJHt0aGlzLnRuUHJlZml4TG9nfWApO1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5pbmZvKG1zZyk7XG4gICAgfVxuXG4gICAgbG9nSW5mb1NpbXBsZShtc2cpIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgTXJyIFN0YXJyOiAke21zZ31gKTtcbiAgICB9O1xuXG4gICAgbWF0Y2hSdWxlU2hvcnQoc3RyLCBydWxlKSB7XG4gICAgICAgIGNvbnN0IGVzY2FwZVJlZ2V4ID0gKHN0cikgPT4gc3RyLnJlcGxhY2UoLyhbLiorP149IToke30oKXxcXFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnXicgKyBydWxlLnNwbGl0KCcqJykubWFwKGVzY2FwZVJlZ2V4KS5qb2luKCcuKicpICsgJyQnKS50ZXN0KHN0cik7XG4gICAgfVxuXG4gICAgLy8gRXhwbGFuYXRpb24gY29kZVxuICAgIG1hdGNoUnVsZUV4cGwoc3RyLCBydWxlKSB7XG4gICAgICAgIC8vIGZvciB0aGlzIHNvbHV0aW9uIHRvIHdvcmsgb24gYW55IHN0cmluZywgbm8gbWF0dGVyIHdoYXQgY2hhcmFjdGVycyBpdCBoYXNcbiAgICAgICAgY29uc3QgZXNjYXBlUmVnZXggPSAoc3RyKSA9PiBzdHIucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG5cbiAgICAgICAgLy8gXCIuXCIgID0+IEZpbmQgYSBzaW5nbGUgY2hhcmFjdGVyLCBleGNlcHQgbmV3bGluZSBvciBsaW5lIHRlcm1pbmF0b3JcbiAgICAgICAgLy8gXCIuKlwiID0+IE1hdGNoZXMgYW55IHN0cmluZyB0aGF0IGNvbnRhaW5zIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzXG4gICAgICAgIHJ1bGUgPSBydWxlLnNwbGl0KCcqJykubWFwKGVzY2FwZVJlZ2V4KS5qb2luKCcuKicpO1xuXG4gICAgICAgIC8vIFwiXlwiICA9PiBNYXRjaGVzIGFueSBzdHJpbmcgd2l0aCB0aGUgZm9sbG93aW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgaXRcbiAgICAgICAgLy8gXCIkXCIgID0+IE1hdGNoZXMgYW55IHN0cmluZyB3aXRoIHRoYXQgaW4gZnJvbnQgYXQgdGhlIGVuZCBvZiBpdFxuICAgICAgICBydWxlID0gJ14nICsgcnVsZSArICckJztcblxuICAgICAgICAvLyBDcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0IGZvciBtYXRjaGluZyBzdHJpbmdcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHJ1bGUpO1xuXG4gICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBmaW5kcyBhIG1hdGNoLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZVxuICAgICAgICByZXR1cm4gcmVnZXgudGVzdChzdHIpO1xuICAgIH1cblxuICAgIGdldFJlc3BvbnNlUmVzdWx0RnJvbUV4Y2VwdGlvbihlcnI6IGFueSk6IFJlc3BvbnNlUmVzdWx0IHtcbiAgICAgICAgcmV0dXJuIDxhbnk+e1xuICAgICAgICAgICAgZXJyb3I6ICdFWENFUFRJT04nLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0PDsyBs4buXaSB44bqjeSByYScsXG4gICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgZXJyb3JEZXRhaWw6IGVycixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpc1N0cmluZyh2YWwpIHtcbiAgICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdmFsID09PSB2YWwudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBnZXRUaW1lKHRpbWVTcGFuOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aW1lU3BhbikgcmV0dXJuIHRpbWVTcGFuO1xuICAgICAgICBjb25zdCBhcnJUaW1lSW5mbyA9IHRpbWVTcGFuLnNwbGl0KCc6Jyk7XG4gICAgICAgIHJldHVybiBgJHthcnJUaW1lSW5mb1swXX06JHthcnJUaW1lSW5mb1sxXX1gO1xuICAgIH1cblxuICAgIGFwcGVuZFN0cmluZ1dpdGhTcGFjZShvcmlnaW5hbDogc3RyaW5nLCBhcHBlbmQ6IHN0cmluZywgY29ubmVjdG9yPzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBgJHtvcmlnaW5hbH1gICsgKGFwcGVuZCAmJiBhcHBlbmQgIT09ICcnID8gKGAgJHtjb25uZWN0b3IgPyBjb25uZWN0b3IgOiAnJ30gYCkgKyBhcHBlbmQgOiAnJyk7XG4gICAgfVxuXG4gICAgZmluZExhc3RJbmRleDxUPihhcnJheTogQXJyYXk8VD4sIHByZWRpY2F0ZTogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBvYmo6IFRbXSkgPT4gYm9vbGVhbik6IG51bWJlciB7XG4gICAgICAgIGxldCBsID0gYXJyYXkubGVuZ3RoO1xuICAgICAgICB3aGlsZSAobC0tKSB7XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2xdLCBsLCBhcnJheSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgZ2V0U3RhcnREYXlFbmREYXlXZWVrKGRhdGUgPSBuZXcgRGF0ZSgpKSB7XG4gICAgICAgIGNvbnN0IGRhdGVEaWZmID0gZGF0ZS5nZXREYXRlKCkgLSBkYXRlLmdldERheSgpICsgKGRhdGUuZ2V0RGF5KCkgPT0gMCA/IC02IDogMSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKGRhdGUuc2V0RGF0ZShkYXRlRGlmZikpO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUobmV3IERhdGUoZGF0ZS5zZXREYXRlKGRhdGVEaWZmICsgNikpKTtcbiAgICAgICAgaWYgKHN0YXJ0RGF0ZS5nZXREYXRlKCkgPiBlbmREYXRlLmdldERhdGUoKSAmJiBzdGFydERhdGUuZ2V0TW9udGgoKSA9PSBlbmREYXRlLmdldE1vbnRoKCkpIHtcbiAgICAgICAgICAgIGVuZERhdGUuc2V0TW9udGgoZW5kRGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtzdGFydERhdGUsIGVuZERhdGVdO1xuICAgIH1cblxuICAgIGdldFN0YXJ0RGF5RW5kRGF5SW5Nb250aChtb250aD86IG51bWJlciwgeWVhcj86IG51bWJlcikge1xuICAgICAgICBtb250aCA9IG1vbnRoID8/IHRoaXMuZ2V0Q3VycmVudE1vbnRoKCk7XG4gICAgICAgIHllYXIgPSB5ZWFyID8/IHRoaXMuZ2V0Q3VycmVudFllYXIoKTtcbiAgICAgICAgcmV0dXJuIFtuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSksIG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCldO1xuICAgIH1cblxuICAgIGFkZEh0bWxDb250ZW50V2l0aFRhZ0Fyb3VuZChsc3RUYWc6IGFueSwgY2xhc3NOYW1lID0gJycsIHRhZ0Fyb3VuZDogc3RyaW5nID0gJ2RpdicsIGF0dHJpYnV0ZXM6IGFueSA9IHt9KSB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBsc3RUYWcpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSB0aGlzLmFkZEh0bWxDb250ZW50KGl0ZW0uY29udGVudCwgaXRlbS5jbGFzc05hbWUsIGl0ZW0udGFnTmFtZSwgaXRlbS5hdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hZGRIdG1sQ29udGVudChyZXN1bHQsIGNsYXNzTmFtZSwgdGFnQXJvdW5kLCBhdHRyaWJ1dGVzKTtcbiAgICB9XG5cbiAgICBhZGRIdG1sQ29udGVudChjb250ZW50OiBzdHJpbmcsIGNsYXNzTmFtZTogc3RyaW5nID0gJycsIHRhZ05hbWU6IHN0cmluZyA9ICdkaXYnLCBhdHRyaWJ1dGVzOiBhbnkgPSB7fSkge1xuICAgICAgICBsZXQgc3RyQXR0cmlidXRlID0gJyc7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICBzdHJBdHRyaWJ1dGUgKz0gYCAke2tleX09JyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYDwke3RhZ05hbWV9IGNsYXNzPScke2NsYXNzTmFtZX0nICR7c3RyQXR0cmlidXRlfT4ke2NvbnRlbnR9PC8ke3RhZ05hbWV9PmA7XG4gICAgfVxuXG5cbiAgICBwYXJzZVN0cmluZ1RvQXJyYXkobW9kZWw6IGFueSwgZmllbGRzOiBzdHJpbmcsIHNwbGl0Qnk6IHN0cmluZyA9ICcsJykge1xuICAgICAgICBpZiAoIW1vZGVsIHx8ICFmaWVsZHMpIHJldHVybjtcbiAgICAgICAgY29uc3QgbHN0RmllbGQgPSBmaWVsZHMuc3BsaXQoJywnKTtcbiAgICAgICAgbHN0RmllbGQuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBpZiAobW9kZWxbZmllbGRdICYmICF0aGlzLmlzRW1wdHlBcnJheU9yTnVsbChtb2RlbFtmaWVsZF0pKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbZmllbGRdID0gbW9kZWxbZmllbGRdLnNwbGl0KHNwbGl0QnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwYXJzZUFycmF5VG9TdHJpbmcoZGF0YTogYW55LCBmaWVsZHM6IHN0cmluZywgc3BsaXRCeTogc3RyaW5nID0gJywnKSB7XG4gICAgICAgIGlmICghZGF0YSB8fCAhZmllbGRzKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGxzdEZpZWxkID0gZmllbGRzLnNwbGl0KCcsJyk7XG4gICAgICAgIGxzdEZpZWxkLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGFbZmllbGRdICYmIEFycmF5LmlzQXJyYXkoZGF0YVtmaWVsZF0pICYmICF0aGlzLmlzRW1wdHlBcnJheU9yTnVsbChkYXRhW2ZpZWxkXSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhW2ZpZWxkXSA9IGRhdGFbZmllbGRdLmpvaW4oc3BsaXRCeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlzTW9yZVRoYW5EYXlzRnJvbU5vdyhkdDogRGF0ZSwgZGF5czogbnVtYmVyID0gMSkge1xuICAgICAgICByZXR1cm4gbW9tZW50KG5ldyBEYXRlKCkpLmRpZmYoZHQsICdkYXlzJykgPiAoZGF5cyAtIDEpO1xuICAgIH1cblxufVxuIl19
1217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvc2VydmljZXMvY29tbW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFHN0IsT0FBTyxLQUFLLENBQUMsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFFckQscUJBQXFCO0FBQ3JCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUV2QixJQUFLLGVBS0o7QUFMRCxXQUFLLGVBQWU7SUFDaEIseURBQU0sQ0FBQTtJQUNOLDJEQUFPLENBQUE7SUFDUCxxREFBSSxDQUFBO0lBQ0osaUVBQVUsQ0FBQTtBQUNkLENBQUMsRUFMSSxlQUFlLEtBQWYsZUFBZSxRQUtuQjtBQUtELE1BQU0sT0FBTyxhQUFhO0lBa0N0QixZQUFvQixvQkFBeUM7UUFBekMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQWpDN0QsZUFBVSxHQUFvQixlQUFlLENBQUMsTUFBTSxDQUFDO1FBRXJELGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUF5QnBCLGdCQUFXLEdBQUcsa0NBQWtDLENBQUM7UUFFakQsZ0JBQVcsR0FBRyxtQkFBbUIsQ0FBQztRQThVbEMsZUFBVSxHQUFHLEdBQUcsRUFBRSxXQUFDLE9BQUEsTUFBQSxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxtQ0FBSSxFQUFFLENBQUEsRUFBQSxDQUFDO0lBM1U1RCxDQUFDO0lBRUQsSUFBSTtRQUNBLE9BQU8sTUFBTSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELFlBQVk7UUFDUixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsNEJBQTRCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFlBQVksQ0FBQyxXQUFtQixFQUFFLEdBQUcsSUFBSTtRQUNyQyxpQ0FBaUM7UUFDakMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDOUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNoRTtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBRztRQUNWLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQzthQUNiLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO2FBQ3JCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO2FBQ3JCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELDhCQUE4QjtJQUM5QixjQUFjLENBQUMsR0FBUSxFQUFFLElBQVk7UUFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuQyxJQUFJO2dCQUNBLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdkI7WUFDRCxPQUFPLEdBQUcsRUFBRTtnQkFDUixHQUFHLEdBQUcsSUFBSSxDQUFDO2FBQ2Q7U0FDSjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELDRDQUE0QztJQUM1QyxjQUFjLENBQUMsR0FBUSxFQUFFLElBQVksRUFBRSxJQUFTO1FBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDYixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ3hCO2lCQUNJO2dCQUNELElBQ0ksT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDcEU7b0JBQ0UsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztpQkFDdEI7Z0JBQ0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMxQjtTQUNKO0lBQ0wsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFtQixFQUFFLElBQVk7UUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDeEMsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFVLEVBQUUsS0FBYTtRQUM5QixNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFVLEVBQUUsT0FBZTtRQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUk7UUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsT0FBTyxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDckMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ2hELElBQUksSUFBSSxDQUFDLENBQUM7YUFDYjtTQUNKO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFZLEVBQUUsT0FBYyxFQUFFLFFBQWdCO1FBQ3RELElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN0QiwrQkFBK0I7UUFDL0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2xCLFlBQVksSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxHQUFhLEVBQUUsQ0FBQztRQUNoQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDaEIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDbEIscURBQXFEO2dCQUNyRCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtvQkFDWixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3JELElBQUksU0FBUyxFQUFFO3dCQUNYLE1BQU0sR0FBRyxTQUFTLENBQUM7cUJBQ3RCO2lCQUNKO3FCQUNJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDakIsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3ZCO2dCQUNELGNBQWM7Z0JBQ2QsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFO29CQUNkLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN2QyxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUNyRDtnQkFDRCxpQkFBaUI7Z0JBQ2pCLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRTtvQkFDZixDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO3dCQUN6QixJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTs0QkFDdEIsTUFBTSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7eUJBQzdEO29CQUNMLENBQUMsQ0FBQyxDQUFDO2lCQUNOO2dCQUNELElBQUksTUFBTSxFQUFFO29CQUNSLFNBQVMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO2lCQUN0RTtxQkFDSTtvQkFDRCxTQUFTLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQztpQkFDekI7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLEdBQUcsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzlCLEtBQUssTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFO1lBQzFCLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM3RCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsa0JBQWtCO1FBQ25ELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sdUJBQXVCLENBQUMsR0FBVztRQUN2QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQzthQUN2QixPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQzthQUNqQixPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBWSxFQUFFLE9BQWMsRUFBRSxRQUFnQjtRQUN2RCxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdEIsK0JBQStCO1FBQy9CLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNsQixZQUFZLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsR0FBYSxFQUFFLENBQUM7UUFDaEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2hCLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNuQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xCLHFEQUFxRDtnQkFDckQsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7b0JBQ1osTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNyRCxJQUFJLFNBQVMsRUFBRTt3QkFDWCxNQUFNLEdBQUcsU0FBUyxDQUFDO3FCQUN0QjtpQkFDSjtxQkFDSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2pCLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUN2QjtnQkFDRCxjQUFjO2dCQUNkLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRTtvQkFDZCxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDdkMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDckQ7Z0JBQ0QsaUJBQWlCO2dCQUNqQixJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUU7b0JBQ2YsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTt3QkFDekIsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7NEJBQ3RCLE1BQU0sR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO3lCQUM3RDtvQkFDTCxDQUFDLENBQUMsQ0FBQztpQkFDTjtnQkFDRCxJQUFJLE1BQU0sRUFBRTtvQkFDUixTQUFTLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztpQkFDdEU7cUJBQ0k7b0JBQ0QsU0FBUyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUM7aUJBQ3pCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxHQUFHLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQztRQUM5QixLQUFLLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRTtZQUMxQixHQUFHLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztTQUNyQjtRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDN0QsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUNqRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtRQUNuRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQVUsRUFBRSxPQUFjLEVBQUUsUUFBZ0I7UUFDekQsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLCtCQUErQjtRQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxZQUFZLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7U0FDM0M7UUFFRCxNQUFNLFVBQVUsR0FBYSxFQUFFLENBQUM7UUFDaEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3RCLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ25DLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDdkIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO2dCQUNuQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ2xCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO3dCQUNaLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDckQsSUFBSSxTQUFTLEVBQUU7NEJBQ1gsTUFBTSxHQUFHLFNBQVMsQ0FBQzt5QkFDdEI7cUJBQ0o7eUJBQ0ksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUNqQixNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDdkI7b0JBQ0QsY0FBYztvQkFDZCxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUU7d0JBQ2QsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3ZDLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQ3JEO29CQUNELGlCQUFpQjtvQkFDakIsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFO3dCQUNmLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7NEJBQ3pCLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dDQUN0QixNQUFNLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQzs2QkFDN0Q7d0JBQ0wsQ0FBQyxDQUFDLENBQUM7cUJBQ047b0JBQ0QsSUFBSSxNQUFNLEVBQUU7d0JBQ1IsU0FBUyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7cUJBQ3RFO3lCQUNJO3dCQUNELFNBQVMsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDO3FCQUN6QjtnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDSCxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1lBRUgsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUVILGlDQUFpQztRQUNqQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixLQUFLLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRTtZQUMxQixHQUFHLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztTQUNyQjtRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDN0QsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUNqRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtRQUNuRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELG1CQUFtQixDQUNmLElBQVMsRUFDVCxVQUFrQixFQUNsQixZQUFvQixFQUFFLEVBQ3RCLGFBQXFCLEVBQUUsRUFDdkIsZ0JBQWdCLEdBQUcsRUFBRSxFQUNyQixZQUFxQixJQUFJO1FBRXpCLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLEVBQUUsRUFBRTtZQUNoQyxTQUFTLEdBQUcsVUFBVSxDQUFDO1NBQzFCO1FBRUQsTUFBTSxPQUFPLEdBQWlCLEVBQUUsQ0FBQztRQUVqQyxJQUFJLFNBQVMsRUFBRTtZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzFDO1FBRUQsaUNBQWlDO1FBQ2pDLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ1QsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQ2hCLElBQUksRUFDSixTQUFTLEVBQ1QsVUFBVSxFQUNWLGdCQUFnQixDQUNuQjtnQkFDRCxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUMxQixDQUFDLENBQUM7U0FDTjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRCxRQUFRLENBQ0osSUFBUyxFQUNULFNBQWlCLEVBQ2pCLFVBQWtCLEVBQ2xCLGdCQUF3QjtRQUV4QixJQUFJLFVBQVUsRUFBRTtZQUNaLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sZ0JBQWdCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7U0FDekU7YUFDSTtZQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzFCO0lBQ0wsQ0FBQztJQUVELDZCQUE2QixDQUN6QixJQUFTLEVBQ1QsYUFBcUIsSUFBSSxFQUN6QixZQUFvQixNQUFNO1FBRTFCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUlELFdBQVcsQ0FBQyxLQUFVLEVBQUUsUUFBa0I7UUFDdEMsSUFBSSxPQUFPLEdBQVcsSUFBSSxDQUFDO1FBQzNCLElBQUksS0FBSyxZQUFZLGlCQUFpQixJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUU7WUFDN0QsT0FBTyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLEdBQUcsaUJBQWlCLEtBQUssQ0FBQyxNQUFNLCtCQUErQixPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ2xIO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtZQUN0QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDO1lBQ3hGLElBQUksVUFBVSxFQUFFO2dCQUNaLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ25ELE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDdkQsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLDJEQUEyRCxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUN2RyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQkFDbkMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM1QixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDWjtTQUNKO2FBQ0k7WUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFpQjtZQUNuQyxPQUFPLEVBQUUsbUVBQW1FO1lBQzVFLEtBQUs7WUFDTCxJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRSxDQUFDO1lBQ2QsUUFBUSxFQUFFLElBQUk7WUFDZCxPQUFPLEVBQUUsS0FBSztZQUNkLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLE9BQU8sRUFBRSxPQUFPO1NBQ25CLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSTtRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUU1QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUNoQzthQUNJO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUNoQztRQUVELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsWUFBWTtRQUNSLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsVUFBVSxDQUFDO0lBQzFELENBQUM7SUFFRCxNQUFNO1FBQ0YsT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxJQUFJLENBQUM7SUFDcEQsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztJQUN4QyxDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztTQUNqQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2pCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7YUFDekI7WUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUMxQjtZQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1NBQ2hDO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELHVCQUF1QixDQUFDLEdBQUc7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBRS9DLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV2QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDakMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDN0I7SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBSztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUU5QixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUM3QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7U0FDcEQ7YUFDSTtZQUNELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMseUJBQXlCLEdBQUcsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUM7YUFDcEU7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO2FBQzlEO1NBQ0o7UUFFRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFJO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUN2QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ04sSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUU5QixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUM3QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLENBQUM7U0FDbEM7YUFDSTtZQUNELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2FBQ2hDO2lCQUNJO2dCQUNELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDO2FBQ2pDO1NBQ0o7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQU07UUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsUUFBUTtRQUNKLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDaEMsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDeEMsQ0FBQztJQUVELFNBQVM7UUFDTCxPQUFPLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxRQUFRO1FBQ0osT0FBTyxNQUFNLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQztJQUNwQyxDQUFDO0lBRUQsU0FBUztRQUNMLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsT0FBTyxDQUFDO0lBQ3ZELENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxXQUFtQjtRQUMzQyxJQUNJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQ3JFO1lBQ0UsT0FBTyxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDakc7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLEVBQVU7UUFDWixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELCtCQUErQjtJQUMvQix3QkFBd0IsQ0FBQyxTQUFTO1FBQzlCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ25ELElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtnQkFDakIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUU7b0JBQ2hDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDakI7cUJBQ0k7b0JBQ0QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFFcEQsSUFBSSxTQUFTLEVBQUU7d0JBQ1gsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO3FCQUNyQjtpQkFDSjthQUNKO1FBQ0wsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVELHFCQUFxQjtRQUNqQixXQUFXO1FBQ1gsa0JBQWtCO1FBQ2xCLHVDQUF1QztRQUN2QyxpSUFBaUk7UUFDakksc0JBQXNCO1FBQ3RCLDRCQUE0QjtRQUM1QixZQUFZO1FBQ1osd0JBQXdCO1FBQ3hCLFFBQVE7UUFDUixLQUFLO0lBQ1QsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQUs7UUFDdkIsa0NBQWtDO1FBQ2xDLGdEQUFnRDtRQUNoRCx3RUFBd0U7SUFDNUUsQ0FBQztJQUVELHVCQUF1QjtRQUNuQixnRUFBZ0U7SUFDcEUsQ0FBQztJQUVELDZCQUE2QjtJQUU3QixnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsUUFBaUIsRUFBRSxRQUFRLEdBQUcsS0FBSztRQUM1RCxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2IsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNsQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFbkMsSUFBSSxNQUFNLEdBQUcsRUFBRSxFQUFFO2dCQUNiLElBQUksUUFBUSxFQUFFO29CQUNWLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7d0JBQzFCLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQzt3QkFDOUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQzt3QkFDdkMsSUFBSSxHQUFHLEVBQUU7NEJBQ0wsT0FBTyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7eUJBQ3ZCO3FCQUNKO2lCQUNKO2dCQUVELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQ3pCLFdBQVc7b0JBQ1gsTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDckMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFFdEMsSUFBSSxLQUFLLEdBQUcsRUFBRSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7d0JBQ3pCLE9BQU8sSUFBSSxDQUFDO3FCQUNmO29CQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3pELElBQUksR0FBRyxHQUFHLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO3dCQUN6QixPQUFPLElBQUksQ0FBQztxQkFDZjtvQkFFRCxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDekMsSUFBSSxRQUFRLEVBQUU7d0JBQ1YsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDakIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDbkIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDdEI7b0JBQ0QsT0FBTyxDQUFDLENBQUM7aUJBQ1o7cUJBQ0ksSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDOUIsU0FBUztvQkFDVCxNQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNyQyxNQUFNLEtBQUssR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2QyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7b0JBRTFELElBQUksS0FBSyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO3dCQUN6QixPQUFPLElBQUksQ0FBQztxQkFDZjtvQkFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN6RCxJQUFJLEdBQUcsR0FBRyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTt3QkFDekIsT0FBTyxJQUFJLENBQUM7cUJBQ2Y7b0JBRUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3pDLElBQUksUUFBUSxFQUFFO3dCQUNWLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2pCLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ25CLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ3RCO29CQUNELE9BQU8sQ0FBQyxDQUFDO2lCQUNaO3FCQUNJLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQzlCLE9BQU87b0JBQ1AsTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDckMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUVuQyxJQUFJLEtBQUssR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTt3QkFDekIsT0FBTyxJQUFJLENBQUM7cUJBQ2Y7b0JBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDekQsSUFBSSxHQUFHLEdBQUcsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7d0JBQ3pCLE9BQU8sSUFBSSxDQUFDO3FCQUNmO29CQUVELE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUN6QyxJQUFJLFFBQVEsRUFBRTt3QkFDVixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNqQixDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNuQixDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUN0QjtvQkFDRCxPQUFPLENBQUMsQ0FBQztpQkFDWjtxQkFDSTtvQkFDRCxPQUFPLElBQUksQ0FBQztpQkFDZjthQUNKO2lCQUNJLElBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNwQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2xFLElBQUksUUFBUSxFQUFFO29CQUNWLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2pCLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ25CLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3RCO2dCQUNELE9BQU8sQ0FBQyxDQUFDO2FBQ1o7U0FDSjthQUNJO1lBQ0QsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLElBQUk7Z0JBQ0EsSUFBSSxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ3ZCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUM3QyxVQUFVLEVBQ1Ysa0JBQWtCLENBQ3JCLENBQUM7b0JBQ0YsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLElBQUksY0FBYyxFQUFFO3dCQUN6QyxPQUFPLGdCQUFnQixDQUFDO3FCQUMzQjtpQkFDSjtxQkFDSSxJQUFJLFFBQVEsRUFBRTtvQkFDZixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQ3pDLEdBQUcsVUFBVSxFQUFFLEVBQ2Ysa0JBQWtCLENBQUMsQ0FBQztvQkFDeEIsSUFBSSxZQUFZLEdBQUcsRUFBRSxJQUFJLGNBQWMsRUFBRTt3QkFDckMsT0FBTyxZQUFZLENBQUM7cUJBQ3ZCO2lCQUNKO3FCQUNJO29CQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FDekMsVUFBVSxFQUNWLFlBQVksQ0FDZixDQUFDO29CQUNGLElBQUksWUFBWSxHQUFHLEVBQUUsSUFBSSxjQUFjLEVBQUU7d0JBQ3JDLE9BQU8sWUFBWSxDQUFDO3FCQUN2QjtpQkFDSjthQUNKO1lBQ0QsV0FBTTthQUNMO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsdUJBQXVCLENBQUMsS0FBSyxFQUFFLElBQUk7UUFDL0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsc0JBQXNCLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxZQUFxQixFQUFFLFFBQWlCO1FBQzFFLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUMxQixNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdDLE1BQU0sY0FBYyxHQUFHLFlBQVksSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sVUFBVSxHQUFHLFFBQVEsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLElBQUksY0FBYyxJQUFJLFVBQVUsRUFBRTtZQUM5QixJQUFJLGNBQWMsRUFBRTtnQkFDaEIsS0FBSyxJQUFJLElBQUksR0FBRyxXQUFXLEdBQUcsWUFBWSxFQUFFLElBQUksR0FBRyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUU7b0JBQ3BFLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRDthQUNKO1lBQ0QsSUFBSSxVQUFVLEVBQUU7Z0JBQ1osS0FBSyxJQUFJLElBQUksR0FBRyxXQUFXLEVBQUUsSUFBSSxJQUFJLFdBQVcsR0FBRyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUU7b0JBQ2pFLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRDthQUNKO2lCQUNJO2dCQUNELGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO2FBQzlEO1NBQ0o7YUFDSTtZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNWLEtBQUssSUFBSSxJQUFJLEdBQUcsV0FBVyxHQUFHLFNBQVMsRUFBRSxJQUFJLElBQUksV0FBVyxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNsRSxjQUFjLENBQUMsSUFBSSxDQUNmLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQ3ZCLEVBQUUsRUFBRSxFQUFFLFdBQVcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FDaEQsQ0FBQztnQkFDRixDQUFDLEVBQUUsQ0FBQzthQUNQO1NBQ0o7UUFDRCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsY0FBYztRQUNWLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsZUFBZTtRQUNYLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNO1FBQ3BDLE9BQU8sR0FBRyxPQUFPLElBQUksTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzFELENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxNQUFNO1FBQzFCLE9BQU8sV0FBVyxNQUFNLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQVE7UUFDaEIsSUFBSSxHQUFHLEtBQUssU0FBUztZQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUQsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUs7UUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxJQUFJLEtBQUssRUFBRTtZQUNQLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDckI7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBaUI7UUFDOUIsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRCxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVuRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBYztRQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFHO1FBQ1YsS0FBSyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUU7WUFDbkIsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3BDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1NBQ0o7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsZUFBZSxDQUFDLFFBQVEsRUFBRSxRQUFRO1FBQzlCLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN2RCxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7WUFDckQsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdEQsT0FBTyxJQUFJLENBQUM7YUFDZjtTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELG1CQUFtQixDQUFDLFNBQVMsRUFBRSxNQUFNO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEMsSUFBSSxHQUFHLEVBQUU7WUFDTCxPQUFPLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUN2QjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVk7UUFDaEQsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRTtZQUN2QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQ3ZELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FDNUIsQ0FBQztZQUNGLElBQUksWUFBWSxLQUFLLElBQUksSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO2dCQUNyRCxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQzthQUMvQjtTQUNKO1FBQ0QsSUFBSSxZQUFZLEVBQUU7WUFDZCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUM1QixZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FDekQsQ0FBQztZQUNGLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQ25DLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssUUFBUSxDQUNuRCxDQUFDO1lBQ0YsSUFBSSxZQUFZLEtBQUssSUFBSSxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUU7Z0JBQ3JELE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO2FBQy9CO1NBQ0o7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBSztRQUNsQixJQUFJLEtBQUssSUFBSSxFQUFFLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksU0FBUyxFQUFFO1lBQ3BELE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFaEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUvQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNuQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNqQixNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7aUJBQzFFO3FCQUNJO29CQUNELE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDO2lCQUN0QzthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVztRQUNwQyxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUM3QyxPQUFPLFFBQVEsQ0FBQztTQUNuQjtRQUNELE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE9BQU8sQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNYLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFHO1FBQ1osTUFBTSxNQUFNLEdBQUcsMkRBQTJELEdBQUcsYUFBYSxDQUFDO1FBQzNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxlQUFlLENBQUMsR0FBVztRQUN2QixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFCLEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxHQUFHLElBQUksRUFBRSxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7SUFDL0MsQ0FBQztJQUVELFVBQVU7UUFDTixPQUFPLENBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQUM7ZUFDeEQsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsK0JBQStCLENBQUMsQ0FDbEUsQ0FBQztJQUNOLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBSTtRQUNkLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNO1FBQ3hCLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO1lBQ2xDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDYjthQUNJLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO1lBQ3ZDLE9BQU8sQ0FBQyxDQUFDO1NBQ1o7YUFDSSxJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtZQUN2QyxPQUFPLENBQUMsQ0FBQztTQUNaO2FBQ0ksSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQy9ELE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN2QzthQUNJO1lBQ0QsT0FBTyxDQUFDLENBQUM7U0FDWjtJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUs7UUFDcEIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ25DLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDYjthQUNJLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN6QyxPQUFPLENBQUMsQ0FBQztTQUNaO2FBQ0k7WUFDRCxPQUFPLENBQUMsQ0FBQztTQUNaO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFVLEVBQUUsS0FBVTtRQUMzQix3QkFBd0I7UUFDeEIsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5QyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNWLE9BQU8sQ0FBQyxDQUFDO1NBQ1o7UUFDRCxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDVCxPQUFPLENBQUMsQ0FBQztTQUNaO1FBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBSztRQUNoQixNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFZO1FBQ2xCLElBQUksT0FBTyxZQUFZLElBQUksRUFBRTtZQUN6QixPQUFPLE9BQU8sQ0FBQztTQUNsQjthQUNJO1lBQ0QsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLElBQUksRUFBRSxFQUFFO2dCQUMzQixPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1QjtJQUNMLENBQUM7SUFFSyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVE7O1lBQzlCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUMvQyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQzlDO1FBQ0wsQ0FBQztLQUFBO0lBRUQsT0FBTyxDQUFDLEdBQVUsRUFBRSxJQUFZO1FBQzVCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFVLEVBQUUsSUFBWTtRQUM1QixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBZTtRQUNwQixNQUFNLEtBQUssR0FBRyxFQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNqQixTQUFTO2FBQ1o7WUFDRCxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekI7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQVk7UUFDdEIsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQVksRUFBRSxLQUFLO1FBQzdCLE1BQU0sS0FBSyxHQUFHLEVBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ2hELElBQUksS0FBSyxDQUFDO1FBQ1YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNkLFNBQVM7YUFDWjtZQUNELEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBYSxFQUFFLElBQVc7UUFDbEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO2dCQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLDJFQUEyRTtJQUMzRSxZQUFZLENBQUMsTUFBYSxFQUFFLElBQWMsRUFBRSxRQUFtQjtRQUMzRCxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDbEIsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3JCO1FBQ0QsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNqQixRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixDQUFDLEVBQUUsQ0FBQzthQUNQO1NBQ0o7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsVUFBVTtRQUNOLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQU07UUFDdEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELFNBQVM7UUFDTCxPQUFPLHNDQUFzQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxXQUFXLENBQUMsSUFBWTtRQUNwQixPQUFPLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3BFLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBRztRQUNiLElBQUksR0FBRyxJQUFJLFNBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFVBQVU7UUFDaEQsT0FBTyxDQUFDLEtBQUssR0FBRyxZQUFZLElBQUksWUFBWSxHQUFHLEdBQUcsQ0FBQztlQUM1QyxDQUFDLEtBQUssR0FBRyxVQUFVLElBQUksVUFBVSxHQUFHLEdBQUcsQ0FBQztlQUN4QyxDQUFDLFlBQVksSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLElBQUk7UUFDdkUsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1NBQzdGO2FBQ0k7WUFDRCxPQUFPLEtBQUssR0FBRyxVQUFVLElBQUksR0FBRyxHQUFHLFlBQVksQ0FBQztTQUNuRDtJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRyxJQUFJO1FBQzlDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE1BQU0sRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTlCLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkQsSUFBSSxLQUFLLEVBQUU7WUFDUCxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUFrQyxFQUFFLFlBQW9CO1FBQ3pFLE9BQU8sS0FBSztZQUNSLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQzNCLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDM0MsdUJBQXVCO29CQUN2QixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUNqRDtxQkFDSSxJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsVUFBVSxFQUFFO29CQUNwRixrQkFBa0I7b0JBQ2xCLE9BQU8sUUFBUSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUM7aUJBQ3hFO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUMsQ0FBQztZQUNGLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDZixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWEsRUFBRSxNQUFhO1FBQ3BDLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2pELEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQztTQUNsRDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxVQUFVO1FBQ04sTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBYTtRQUM1QixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUN2QyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3JCLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBWTtRQUMzQixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUN2QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQixPQUFPLEtBQUssQ0FBQzthQUNoQjtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQW1CLEVBQUUsR0FBRyxPQUFpQjtRQUN4RCxPQUFPLElBQUksTUFBTSxDQUFDO1lBQ2QsS0FBSztZQUNMLE9BQU8sRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO1NBQ3hCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYSxFQUFFLFFBQWtCLEVBQUUsS0FBVSxFQUFFLGVBQXdCLEtBQUssRUFBRSxzQkFBMkMsbUJBQW1CLENBQUMsTUFBTTtRQUN6SixPQUFPLElBQUksTUFBTSxDQUFDO1lBQ2QsS0FBSyxFQUFFLFFBQVE7WUFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDNUIsWUFBWTtZQUNaLG1CQUFtQjtTQUN0QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWEsRUFBRSxRQUFrQixFQUFFLEtBQWE7UUFDeEQsT0FBTyxJQUFJLE1BQU0sQ0FBQztZQUNkLEtBQUssRUFBRSxRQUFRO1lBQ2YsS0FBSztTQUNSLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFXO1FBQ3JCLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxjQUFjO1FBQ1YsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQVc7UUFDbkIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDaEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUN2QixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDM0IsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDbkIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBYyxFQUFFLFFBQWtCLEVBQUUsV0FBbUIsRUFBRSxRQUFpQjtRQUN2RixPQUFPLElBQUksTUFBTSxDQUFDO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixRQUFRO1lBQ1IsV0FBVztZQUNYLFFBQVE7U0FDWCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWEsRUFBRSxNQUFjLENBQUM7UUFDbEMsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxRQUFRLENBQUMsR0FBRztRQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNoRCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRztRQUNQLHVDQUF1QztRQUN2QyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDL0MsdUNBQXVDO1FBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFHO1FBQ2IsdUNBQXVDO1FBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFBQSxDQUFDO0lBRUYsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJO1FBQ3BCLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLDZCQUE2QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUk7UUFDbkIsNEVBQTRFO1FBQzVFLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLDZCQUE2QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRWhGLHFFQUFxRTtRQUNyRSxtRUFBbUU7UUFDbkUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuRCx1RUFBdUU7UUFDdkUsaUVBQWlFO1FBQ2pFLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUV4Qix5REFBeUQ7UUFDekQsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0IsK0RBQStEO1FBQy9ELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsOEJBQThCLENBQUMsR0FBUTtRQUNuQyxPQUFZO1lBQ1IsS0FBSyxFQUFFLFdBQVc7WUFDbEIsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLElBQUk7WUFDVixXQUFXLEVBQUUsR0FBRztTQUNuQixDQUFDO0lBQ04sQ0FBQztJQUVELFFBQVEsQ0FBQyxHQUFHO1FBQ1IsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDcEQsT0FBTyxHQUFHLEtBQUssR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPLENBQUMsUUFBZ0I7UUFDcEIsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUMvQixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVELHFCQUFxQixDQUFDLFFBQWdCLEVBQUUsTUFBYyxFQUFFLFNBQWtCO1FBQ3RFLE9BQU8sR0FBRyxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU0sSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6RyxDQUFDO0lBRUQsYUFBYSxDQUFJLEtBQWUsRUFBRSxTQUF5RDtRQUN2RixJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDUixJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUMvQixPQUFPLENBQUMsQ0FBQzthQUNaO1NBQ0o7UUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtRQUNuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDdkYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxLQUFjLEVBQUUsSUFBYTtRQUNsRCxLQUFLLEdBQUcsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hDLElBQUksR0FBRyxJQUFJLGFBQUosSUFBSSxjQUFKLElBQUksR0FBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDckMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsMkJBQTJCLENBQUMsTUFBVyxFQUFFLFNBQVMsR0FBRyxFQUFFLEVBQUUsWUFBb0IsS0FBSyxFQUFFLGFBQWtCLEVBQUU7UUFDcEcsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLEtBQUssSUFBSSxJQUFJLElBQUksTUFBTSxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM5RjtRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQWUsRUFBRSxZQUFvQixFQUFFLEVBQUUsVUFBa0IsS0FBSyxFQUFFLGFBQWtCLEVBQUU7O1FBQ2pHLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLE1BQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsMENBQUUsTUFBTSxFQUFFO1lBQ2pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtnQkFDaEQsWUFBWSxJQUFJLElBQUksR0FBRyxLQUFLLEtBQUssR0FBRyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLElBQUksT0FBTyxXQUFXLFNBQVMsS0FBSyxZQUFZLElBQUksT0FBTyxLQUFLLE9BQU8sR0FBRyxDQUFDO0lBQ3RGLENBQUM7SUFHRCxrQkFBa0IsQ0FBQyxLQUFVLEVBQUUsTUFBYyxFQUFFLFVBQWtCLEdBQUc7UUFDaEUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDeEQsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUM7aUJBQ0k7Z0JBQ0QsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNyQjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVMsRUFBRSxNQUFjLEVBQUUsVUFBa0IsR0FBRztRQUMvRCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BGLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzNDO2lCQUNJO2dCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDcEI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxFQUFRLEVBQUUsT0FBZSxDQUFDO1FBQzVDLE9BQU8sTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7Ozs7WUF2NENKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBZlEsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHN0cmluZ2lmeSBmcm9tICdmYXN0LXNhZmUtc3RyaW5naWZ5JztcbmltcG9ydCBtb21lbnRfIGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2RpYWxvZyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ3VuZGVyc2NvcmUnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5cbmltcG9ydCB7IE9wZXJhdG9yIH0gZnJvbSAnLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBGaWx0ZXIsIFNvcnQsIFN0cmluZ0NvbXBhcmVPcHRpb24gfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi9hdXRoZW4uc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi9ub3RpZmllci5zZXJ2aWNlJztcblxuLy8gZml4IGZvciBidWlsZCBwcm9kXG5jb25zdCBtb21lbnQgPSBtb21lbnRfO1xuXG5lbnVtIE1lbnVPcmllbnRhdGlvbiB7XG4gICAgU1RBVElDLFxuICAgIE9WRVJMQVksXG4gICAgU0xJTSxcbiAgICBIT1JJWk9OVEFMLFxufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDb21tb25TZXJ2aWNlIHtcbiAgICBsYXlvdXRNb2RlOiBNZW51T3JpZW50YXRpb24gPSBNZW51T3JpZW50YXRpb24uU1RBVElDO1xuXG4gICAgZGFya01lbnUgPSBmYWxzZTtcblxuICAgIHByb2ZpbGVNb2RlID0gJ3RvcCc7XG5cbiAgICByb3RhdGVNZW51QnV0dG9uOiBib29sZWFuO1xuXG4gICAgdG9wYmFyTWVudUFjdGl2ZTogYm9vbGVhbjtcblxuICAgIG92ZXJsYXlNZW51QWN0aXZlOiBib29sZWFuO1xuXG4gICAgc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZTogYm9vbGVhbjtcblxuICAgIHN0YXRpY01lbnVNb2JpbGVBY3RpdmU6IGJvb2xlYW47XG5cbiAgICBtZW51Q2xpY2s6IGJvb2xlYW47XG5cbiAgICB0b3BiYXJJdGVtQ2xpY2s6IGJvb2xlYW47XG5cbiAgICBhY3RpdmVUb3BiYXJJdGVtOiBhbnk7XG5cbiAgICByZXNldE1lbnU6IGJvb2xlYW47XG5cbiAgICBjdXJyZW50QWN0aXZlSXRlbTogYW55O1xuXG4gICAgbWVudUhvdmVyQWN0aXZlOiBib29sZWFuO1xuICAgIHRlc3Q6IGJvb2xlYW47XG5cbiAgICB0blByZWZpeExvZyA9ICctLS0tLS0tLS0+VE5fTE9HX0NPTlNPTEUtLS0tLS0tPic7XG5cbiAgICBTVE9SQUdFX0tFWSA9ICdDTElQQk9BUkRfQ09OVEVOVCc7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlKSB7XG4gICAgfVxuXG4gICAgZ3VpZCgpIHtcbiAgICAgICAgcmV0dXJuIHV1aWR2NCgpO1xuICAgIH1cblxuICAgIHJhbmRvbVN0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3VpZCgpO1xuICAgIH1cblxuICAgIHJhbmRvbVN0cmluZ1dpdGhOb3REZWxpbWl0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmd1aWQoKS5yZXBsYWNlKCctJywgJycpO1xuICAgIH1cblxuICAgIHN0cmluZ0Zvcm1hdChpbnB1dFN0cmluZzogc3RyaW5nLCAuLi5hcmdzKSB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpmb3JpblxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJncy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gaW5wdXRTdHJpbmcucmVwbGFjZShgeyR7aW5kZXh9fWAsIGFyZ3NbaW5kZXhdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnB1dFN0cmluZztcbiAgICB9XG5cbiAgICBodG1sRW5jb2RlKHN0cikge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHN0cilcbiAgICAgICAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgICAgICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgICAgICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXG4gICAgICAgICAgICAucmVwbGFjZSgvJy9nLCAnJnF1b3Q7Jyk7XG4gICAgfVxuXG4gICAgLy8gTOG6pXkgduG7gSBnacOhIHRy4buLIHRoZW8gcGF0aCAnJ1xuICAgIGdldFZhbHVlQnlQYXRoKG9iajogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBjb25zdCBwYXRocyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBvYmogPSBvYmpbcGF0aHNbaV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIG9iaiA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICAvLyB7c2VhcmNoOiB7a2V5IDogJ25hbW5oJ319IC4gPT4gc2VhcmNoLmtleVxuICAgIHNldFZhbHVlQnlQYXRoKG9iajogYW55LCBwYXRoOiBzdHJpbmcsIGRhdGE6IGFueSkge1xuICAgICAgICBjb25zdCBmaWVsZHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGxldCByZXN1bHQgPSBvYmo7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBuID0gZmllbGRzLmxlbmd0aDsgaSA8IG4gJiYgcmVzdWx0ICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHNbaV07XG4gICAgICAgICAgICBpZiAoaSA9PT0gbiAtIDEpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbZmllbGRdID0gZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlc3VsdFtmaWVsZF0gPT09ICd1bmRlZmluZWQnIHx8ICFfLmlzT2JqZWN0KHJlc3VsdFtmaWVsZF0pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtmaWVsZF0gPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0W2ZpZWxkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZERheXMoZGF0ZTogRGF0ZSB8IHN0cmluZywgZGF5czogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGNsb25lZCA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgICBjbG9uZWQuc2V0RGF0ZShjbG9uZWQuZ2V0RGF0ZSgpICsgZGF5cyk7XG4gICAgICAgIHJldHVybiBjbG9uZWQ7XG4gICAgfVxuXG4gICAgYWRkSG91cnMoZGF0ZTogRGF0ZSwgaG91cnM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjbG9uZWQgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgY2xvbmVkLnNldFRpbWUoY2xvbmVkLmdldFRpbWUoKSArIChob3VycyAqIDYwICogNjAgKiAxMDAwKSk7XG4gICAgICAgIHJldHVybiBjbG9uZWQ7XG4gICAgfVxuXG4gICAgYWRkU2Vjb25kcyhkYXRlOiBEYXRlLCBzZWNvbmRzOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgY2xvbmVkID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgIGNsb25lZC5zZXRUaW1lKGNsb25lZC5nZXRUaW1lKCkgKyAoc2Vjb25kcyAqIDEwMDApKTtcbiAgICAgICAgcmV0dXJuIGNsb25lZDtcbiAgICB9XG5cbiAgICBhZGRXb3JrRGF5cyhkYXRlLCBkYXlzKSB7XG4gICAgICAgIGNvbnN0IGNsb25lZCA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgICB3aGlsZSAoZGF5cyA+IDApIHtcbiAgICAgICAgICAgIGNsb25lZC5zZXREYXRlKGNsb25lZC5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgIGlmIChjbG9uZWQuZ2V0RGF5KCkgIT09IDAgJiYgY2xvbmVkLmdldERheSgpICE9PSA2KSB7XG4gICAgICAgICAgICAgICAgZGF5cyAtPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZWQ7XG4gICAgfVxuXG4gICAgZXhwb3J0VG9DU1YoZGF0YXM6IGFueVtdLCBjb2x1bW5zOiBhbnlbXSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBsZXQgaGVhZGVyU3RyaW5nID0gJyc7XG4gICAgICAgIC8vIER1eeG7h3QgY+G7mXQgxJHhu4MgdGjDqm0gdsOgbyBoZWFkZXJcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICBoZWFkZXJTdHJpbmcgKz0gYy5oZWFkZXIgKyAnLCc7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJvd3NTdHJpbmc6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGRhdGFzLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgICAgIGxldCByb3dTdHJpbmcgPSAnJztcbiAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHJvd1N0cmluZyArPSAodHlwZW9mIGRbYy5maWVsZF0pLnRvU3RyaW5nKCkgKyAnLCc7XG4gICAgICAgICAgICAgICAgbGV0IGNvbFZhbCA9ICcnO1xuICAgICAgICAgICAgICAgIGlmIChjLmRhdGFQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbFZhbFRtcCA9IHRoaXMuZ2V0VmFsdWVCeVBhdGgoZCwgYy5kYXRhUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xWYWxUbXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGNvbFZhbFRtcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChkW2MuZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRbYy5maWVsZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBEYXRlXG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0ZUZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKTtcbiAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZGF0ZVBpcGUudHJhbnNmb3JtKGNvbFZhbCwgYy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IG1hcHBpbmdcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRhTWFwcGluZykge1xuICAgICAgICAgICAgICAgICAgICBjLmRhdGFNYXBwaW5nLmZvckVhY2goKGRtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG0uaWQgPT09IGRbYy5maWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSB0aGlzLnJlcGxhY2VTcGVjaWFsQ2hhcmFjdGVyKGRtLm5hbWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29sVmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSB0aGlzLnJlcGxhY2VTcGVjaWFsQ2hhcmFjdGVyKGNvbFZhbC50b1N0cmluZygpKSArICcsJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSAnJyArICcsJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChyb3dTdHJpbmcpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGNzdiA9IGhlYWRlclN0cmluZyArICdcXG4nO1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzU3RyaW5nKSB7XG4gICAgICAgICAgICBjc3YgKz0gcm93ICsgJ1xcbic7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFsnXFx1RkVGRicsIGNzdl0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVOYW1lICsgJy5jc3YnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTsgLy8gUmVxdWlyZWQgZm9yIEZGXG4gICAgICAgIGxpbmsuY2xpY2soKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlcGxhY2VTcGVjaWFsQ2hhcmFjdGVyKHZhbDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB2YWwucmVwbGFjZSgnLCcsICcuJylcbiAgICAgICAgICAgIC5yZXBsYWNlKCdcXG4nLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKCdcXHInLCAnJyk7XG4gICAgfVxuXG4gICAgZXhwb3J0VG9DU1YyKGRhdGFzOiBhbnlbXSwgY29sdW1uczogYW55W10sIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbGV0IGhlYWRlclN0cmluZyA9ICcnO1xuICAgICAgICAvLyBEdXnhu4d0IGPhu5l0IMSR4buDIHRow6ptIHbDoG8gaGVhZGVyXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgaGVhZGVyU3RyaW5nICs9IGMuaGVhZGVyICsgJywnO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByb3dzU3RyaW5nOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBkYXRhcy5mb3JFYWNoKChkKSA9PiB7XG4gICAgICAgICAgICBsZXQgcm93U3RyaW5nID0gJyc7XG4gICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICAvLyByb3dTdHJpbmcgKz0gKHR5cGVvZiBkW2MuZmllbGRdKS50b1N0cmluZygpICsgJywnO1xuICAgICAgICAgICAgICAgIGxldCBjb2xWYWwgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRhUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xWYWxUbXAgPSB0aGlzLmdldFZhbHVlQnlQYXRoKGQsIGMuZGF0YVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sVmFsVG1wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBjb2xWYWxUbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZFtjLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkW2MuZmllbGRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgRGF0ZVxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGVGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuLVVTJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRhdGVQaXBlLnRyYW5zZm9ybShjb2xWYWwsIGMuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBtYXBwaW5nXG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0YU1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgYy5kYXRhTWFwcGluZy5mb3JFYWNoKChkbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRtLmlkID09PSBkW2MuZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gdGhpcy5yZXBsYWNlU3BlY2lhbENoYXJhY3RlcihkbS5uYW1lLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbFZhbCkge1xuICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz0gdGhpcy5yZXBsYWNlU3BlY2lhbENoYXJhY3Rlcihjb2xWYWwudG9TdHJpbmcoKSkgKyAnLCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz0gJycgKyAnLCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByb3dzU3RyaW5nLnB1c2gocm93U3RyaW5nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBjc3YgPSBoZWFkZXJTdHJpbmcgKyAnXFxuJztcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93c1N0cmluZykge1xuICAgICAgICAgICAgY3N2ICs9IHJvdyArICdcXG4nO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbJ1xcdUZFRkYnLCBjc3ZdLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSk7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlTmFtZSArICcuY3N2Jyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7IC8vIFJlcXVpcmVkIGZvciBGRlxuICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuXG4gICAgZXhwb3J0VG9DU1ZHcm91cChkYXRhczogYW55LCBjb2x1bW5zOiBhbnlbXSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBsZXQgaGVhZGVyU3RyaW5nID0gJyc7XG4gICAgICAgIC8vIER1eeG7h3QgY+G7mXQgxJHhu4MgdGjDqm0gdsOgbyBoZWFkZXJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBoZWFkZXJTdHJpbmcgKz0gY29sdW1uc1tpXS5oZWFkZXIgKyAnLCc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3dzU3RyaW5nOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBkYXRhcy5mb3JFYWNoKChzdWJEYXRhKSA9PiB7XG4gICAgICAgICAgICByb3dzU3RyaW5nLnB1c2goc3ViRGF0YS5ncm91cE5hbWUpO1xuICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKGhlYWRlclN0cmluZyk7XG5cbiAgICAgICAgICAgIHN1YkRhdGEuZGF0YS5mb3JFYWNoKChkKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJvd1N0cmluZyA9ICcnO1xuICAgICAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29sVmFsID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjLmRhdGFQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xWYWxUbXAgPSB0aGlzLmdldFZhbHVlQnlQYXRoKGQsIGMuZGF0YVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFZhbFRtcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGNvbFZhbFRtcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkW2MuZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkW2MuZmllbGRdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBEYXRlXG4gICAgICAgICAgICAgICAgICAgIGlmIChjLmRhdGVGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZGF0ZVBpcGUudHJhbnNmb3JtKGNvbFZhbCwgYy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgbWFwcGluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoYy5kYXRhTWFwcGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYy5kYXRhTWFwcGluZy5mb3JFYWNoKChkbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkbS5pZCA9PT0gZFtjLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSB0aGlzLnJlcGxhY2VTcGVjaWFsQ2hhcmFjdGVyKGRtLm5hbWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9IHRoaXMucmVwbGFjZVNwZWNpYWxDaGFyYWN0ZXIoY29sVmFsLnRvU3RyaW5nKCkpICsgJywnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9ICcnICsgJywnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKHJvd1N0cmluZyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKCdcXG4nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gbGV0IGNzdiA9IGhlYWRlclN0cmluZyArICdcXG4nO1xuICAgICAgICBsZXQgY3N2ID0gJyc7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3NTdHJpbmcpIHtcbiAgICAgICAgICAgIGNzdiArPSByb3cgKyAnXFxuJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoWydcXHVGRUZGJywgY3N2XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZU5hbWUgKyAnLmNzdicpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOyAvLyBSZXF1aXJlZCBmb3IgRkZcbiAgICAgICAgbGluay5jbGljaygpO1xuICAgIH1cblxuICAgIGNvbnZlcnRUb1NlbGVjdEl0ZW0oXG4gICAgICAgIGRhdGE6IGFueSxcbiAgICAgICAgdmFsdWVGaWVsZDogc3RyaW5nLFxuICAgICAgICB0ZXh0RmllbGQ6IHN0cmluZyA9ICcnLFxuICAgICAgICB0ZXh0RmllbGQyOiBzdHJpbmcgPSAnJyxcbiAgICAgICAgcHJlZml4VGV4dEZpZWxkMiA9ICcnLFxuICAgICAgICBhbGxvd051bGw6IGJvb2xlYW4gPSB0cnVlLFxuICAgICk6IFNlbGVjdEl0ZW1bXSB7XG4gICAgICAgIGlmICghdGV4dEZpZWxkIHx8IHRleHRGaWVsZCA9PT0gJycpIHtcbiAgICAgICAgICAgIHRleHRGaWVsZCA9IHZhbHVlRmllbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZW1wQXJyOiBTZWxlY3RJdGVtW10gPSBbXTtcblxuICAgICAgICBpZiAoYWxsb3dOdWxsKSB7XG4gICAgICAgICAgICB0ZW1wQXJyLnB1c2goeyBsYWJlbDogJycsIHZhbHVlOiAnJyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpmb3JpblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YSkge1xuICAgICAgICAgICAgdGVtcEFyci5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0RmllbGQyLFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXhUZXh0RmllbGQyLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1bdmFsdWVGaWVsZF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVtcEFycjtcbiAgICB9XG5cbiAgICBnZXRMYWJlbChcbiAgICAgICAgaXRlbTogYW55LFxuICAgICAgICB0ZXh0RmllbGQ6IHN0cmluZyxcbiAgICAgICAgdGV4dEZpZWxkMjogc3RyaW5nLFxuICAgICAgICBwcmVmaXhUZXh0RmllbGQyOiBzdHJpbmcsXG4gICAgKSB7XG4gICAgICAgIGlmICh0ZXh0RmllbGQyKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7aXRlbVt0ZXh0RmllbGRdfSAtICR7cHJlZml4VGV4dEZpZWxkMn0gJHtpdGVtW3RleHRGaWVsZDJdfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbVt0ZXh0RmllbGRdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29udmVydFRvU2VsZWN0SXRlbU1hc3RlckRhdGEoXG4gICAgICAgIGRhdGE6IGFueSxcbiAgICAgICAgdmFsdWVGaWVsZDogc3RyaW5nID0gJ2lkJyxcbiAgICAgICAgdGV4dEZpZWxkOiBzdHJpbmcgPSAnbmFtZScsXG4gICAgKTogU2VsZWN0SXRlbVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydFRvU2VsZWN0SXRlbShkYXRhLCB2YWx1ZUZpZWxkLCB0ZXh0RmllbGQpO1xuICAgIH1cblxuICAgIGdldFRyYWNlSWQgPSAoKSA9PiBzZXNzaW9uU3RvcmFnZT8uZ2V0SXRlbSgndHJhY2VJZCcpID8/ICcnO1xuXG4gICAgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSwgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIGxldCB0cmFjZUlkOiBzdHJpbmcgPSBudWxsO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSAmJiBzZXNzaW9uU3RvcmFnZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRyYWNlSWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd0cmFjZUlkJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDw7MgbOG7l2kg4bufIHVybDogJHtlcnJvci51cmx9LCBzdGF0dXNDb2RlOiAke2Vycm9yLnN0YXR1c30gPT09PT4gVHJhY2VJZCBjaG8gZWxhc3RpYzogJHt0cmFjZUlkfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgY29uc3QgZm9yY2VJZjQwMSA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuaXNGb3JjZUxvZ291dElmNDAxO1xuICAgICAgICAgICAgaWYgKGZvcmNlSWY0MDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBfYXV0aGVuU2VydmljZSA9IGluamVjdG9yLmdldChBdXRoZW5TZXJ2aWNlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBfbm90aWZpZXJTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSk7XG4gICAgICAgICAgICAgICAgX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnSOG7hyB0aOG7kW5nIHPhur0gdOG7sSDEkcSDbmcgeHXhuqV0IHNhdSA1cyDEkeG7gyBj4bqtcCBuaOG6rXAgcGhpw6puIGLhuqNuIG3hu5tpJywgJ1Row7RuZyBiw6FvJyk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzbGVlcCBiZWZvcmUgbG9nb3V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIF9hdXRoZW5TZXJ2aWNlLmxvZ291dCgpO1xuICAgICAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSg8UmVzcG9uc2VSZXN1bHQ+e1xuICAgICAgICAgICAgbWVzc2FnZTogJ0PDsyBs4buXaSB44bqjeSByYS4gSMOjeSBsacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dCEhIScsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICB0b3RhbFJlY29yZDogMCxcbiAgICAgICAgICAgIG1ldGFkYXRhOiBudWxsLFxuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvckNoZWNrRXhpc3Q6IG51bGwsXG4gICAgICAgICAgICBlcnJvckNvbnRyb2xJZDogbnVsbCxcbiAgICAgICAgICAgIGVycm9yRm9ybUlkOiBudWxsLFxuICAgICAgICAgICAgdHJhY2VJZDogdHJhY2VJZCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Ub3BiYXJJdGVtQ2xpY2soZXZlbnQsIGl0ZW0pIHtcbiAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPT09IGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVG9wYmFySXRlbSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPSBpdGVtO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBhdXRvT3BlblRvcGJhckl0ZW0oKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlVG9wYmFySXRlbSA9IDE7XG4gICAgfVxuXG4gICAgaXNIb3Jpem9udGFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uSE9SSVpPTlRBTDtcbiAgICB9XG5cbiAgICBpc1NsaW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dE1vZGUgPT09IE1lbnVPcmllbnRhdGlvbi5TTElNO1xuICAgIH1cblxuICAgIGhpZGVPdmVybGF5TWVudSgpIHtcbiAgICAgICAgdGhpcy5yb3RhdGVNZW51QnV0dG9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMub3ZlcmxheU1lbnVBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25MYXlvdXRDbGljaygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRvcGJhckl0ZW1DbGljaykge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUb3BiYXJJdGVtID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMudG9wYmFyTWVudUFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm1lbnVDbGljaykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkgfHwgdGhpcy5pc1NsaW0oKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRNZW51ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheU1lbnVBY3RpdmUgfHwgdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlT3ZlcmxheU1lbnUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5tZW51SG92ZXJBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9wYmFySXRlbUNsaWNrID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWVudUNsaWNrID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25Ub3BiYXJNZW51QnV0dG9uQ2xpY2soZXZ0KSB7XG4gICAgICAgIHRoaXMudG9wYmFySXRlbUNsaWNrID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gIXRoaXMudG9wYmFyTWVudUFjdGl2ZTtcblxuICAgICAgICB0aGlzLmhpZGVPdmVybGF5TWVudSgpO1xuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYXV0b09wZW5Ub3BiYXJJdGVtKCk7XG4gICAgfVxuXG4gICAgc2hvd1RvcGJhck1lbnUoKSB7XG4gICAgICAgIGlmICghdGhpcy50b3BiYXJNZW51QWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLnRvcGJhckl0ZW1DbGljayA9IHRydWU7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvcGJhckl0ZW1DbGljayA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgIHRoaXMudG9wYmFyTWVudUFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmhpZGVPdmVybGF5TWVudSgpO1xuICAgICAgICAgICAgdGhpcy5hdXRvT3BlblRvcGJhckl0ZW0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTWVudUJ1dHRvbkNsaWNrKGV2ZW50KSB7XG4gICAgICAgIHRoaXMubWVudUNsaWNrID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yb3RhdGVNZW51QnV0dG9uID0gIXRoaXMucm90YXRlTWVudUJ1dHRvbjtcbiAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0TW9kZSA9PT0gTWVudU9yaWVudGF0aW9uLk9WRVJMQVkpIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheU1lbnVBY3RpdmUgPSAhdGhpcy5vdmVybGF5TWVudUFjdGl2ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVza3RvcCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlID0gIXRoaXMuc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9ICF0aGlzLnN0YXRpY01lbnVNb2JpbGVBY3RpdmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHRvZ2dsZUxlZnRNZW51KHNob3cpIHtcbiAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSAhc2hvdztcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1lbnVDbGljayA9IHNob3c7XG4gICAgICAgIH0sIDApO1xuICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uT1ZFUkxBWSkge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5TWVudUFjdGl2ZSA9ICFzaG93O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXNrdG9wKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmUgPSBzaG93O1xuICAgICAgICAgICAgICAgIHRoaXMucm90YXRlTWVudUJ1dHRvbiA9IHNob3c7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUgPSAhc2hvdztcbiAgICAgICAgICAgICAgICB0aGlzLnJvdGF0ZU1lbnVCdXR0b24gPSAhc2hvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTWVudUNsaWNrKCRldmVudCkge1xuICAgICAgICB0aGlzLm1lbnVDbGljayA9IHRydWU7XG4gICAgICAgIHRoaXMucmVzZXRNZW51ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNUYWJsZXQoKSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIHJldHVybiB3aWR0aCA8PSAxMDI0ICYmIHdpZHRoID4gNjQwO1xuICAgIH1cblxuICAgIGlzRGVza3RvcCgpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoID4gMTAyNDtcbiAgICB9XG5cbiAgICBpc01vYmlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDY0MDtcbiAgICB9XG5cbiAgICBpc092ZXJsYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dE1vZGUgPT09IE1lbnVPcmllbnRhdGlvbi5PVkVSTEFZO1xuICAgIH1cblxuICAgIGNvbWJpbmVTZXJ2aWNlQ29kZUFuZFN1ZmZpeChzZXJ2aWNlQ29kZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuc3VmZml4U2VydmljZUNvZGVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7c2VydmljZUNvZGV9JHt0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LnN1ZmZpeFNlcnZpY2VDb2RlfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VydmljZUNvZGU7XG4gICAgfVxuXG4gICAgZGVsYXkobXM6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgICB9XG5cbiAgICAvKiogQmVnaW4gZGlzYWJsZSBlZGl0b3IgdGFiICovXG4gICAgc2V0QXV0b2ZvY3VzRmlyc3RDb250cm9sKGlkRWxlbWVudCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdSZWYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHZpZXdSZWYgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdmlld1JlZi5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC50eXBlICE9ICdyYWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleGF0ZWFyYSA9IHZpZXdSZWYucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGV4YXRlYXJhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXhhdGVhcmEuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgNTAwKTtcbiAgICB9XG5cbiAgICBnZXRUYWJEaXNhYmxlZEhhbmRsZXIoKSB7XG4gICAgICAgIC8vIHJldHVybiB7XG4gICAgICAgIC8vICAgICBrZXkgICAgOiA5LFxuICAgICAgICAvLyAgICAgaGFuZGxlcjogZnVuY3Rpb24gKGFyZzEsIGFyZzIpIHtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBuZXh0ID0gSlF1ZXJ5KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoJ3AtZWRpdG9yJykucGFyZW50KCkubmV4dCgpLmZpbmQoJzp0YWJiYWJsZSwgOmZvY3VzYWJsZScpLmZpcnN0KCk7XG4gICAgICAgIC8vICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgbmV4dC5mb2N1cygpO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH07XG4gICAgfVxuXG4gICAgYWRkVGFiRGlzYWJsZWRIYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIC8vIHRoaXMuZGlzYWJsZVRhYlRvb2xiYXJFZGl0b3IoKTtcbiAgICAgICAgLy8gZXZlbnQuZWRpdG9yLmtleWJvYXJkLmJpbmRpbmdzWzldLmxlbmd0aCA9IDA7XG4gICAgICAgIC8vIGV2ZW50LmVkaXRvci5rZXlib2FyZC5iaW5kaW5nc1s5XS5wdXNoKHRoaXMuZ2V0VGFiRGlzYWJsZWRIYW5kbGVyKCkpO1xuICAgIH1cblxuICAgIGRpc2FibGVUYWJUb29sYmFyRWRpdG9yKCkge1xuICAgICAgICAvLyBqUXVlcnkoXCIucWwtdG9vbGJhclwiKS5maW5kKFwiOmJ1dHRvblwiKS5hdHRyKFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICB9XG5cbiAgICAvKiogRW5kIGRpc2FibGUgZWRpdG9yIHRhYiAqL1xuXG4gICAgcHJvY2Vzc0RhdGVJbnB1dChpbnB1dFZhbHVlLCBzaG93VGltZTogYm9vbGVhbiwgdGltZU9ubHkgPSBmYWxzZSk6IERhdGUge1xuICAgICAgICBpZiAoIWlucHV0VmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNJbnRlZ2VyU3RyaW5nKGlucHV0VmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSBOdW1iZXIoaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBoTm93ID0gbmV3IERhdGUoKS5nZXRIb3VycygpO1xuICAgICAgICAgICAgY29uc3QgbU5vdyA9IG5ldyBEYXRlKCkuZ2V0TWludXRlcygpO1xuICAgICAgICAgICAgY29uc3Qgc05vdyA9IG5ldyBEYXRlKCkuZ2V0SG91cnMoKTtcblxuICAgICAgICAgICAgaWYgKG51bWJlciA+IDk5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbHVlLmxlbmd0aCA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9ICdERE1NWVlZWWhobW0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gbW9tZW50KGlucHV0VmFsdWUsIGZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbHVlLmxlbmd0aCA9PT0gOCkge1xuICAgICAgICAgICAgICAgICAgICAvLyAwMTAxMjAxOVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSAraW5wdXRWYWx1ZS5zdWJzdHIoMCwgMik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gK2lucHV0VmFsdWUuc3Vic3RyKDIsIDIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gK2lucHV0VmFsdWUuc3Vic3RyKDQsIDQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aCA+IDEyIHx8IG1vbnRoIDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhEYXkgPSB0aGlzLmdldE1heERheUluTW9udGhBbmRZZWFyKG1vbnRoLCB5ZWFyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRheSA+IG1heERheSB8fCBkYXkgPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRIb3VycyhoTm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0TWludXRlcyhtTm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0U2Vjb25kcyhzTm93KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gMDEwMTE5XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9ICtpbnB1dFZhbHVlLnN1YnN0cigwLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSAraW5wdXRWYWx1ZS5zdWJzdHIoMiwgMik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSArKCcyMCcgKyBpbnB1dFZhbHVlLnN1YnN0cig0LCAyKS50b1N0cmluZygpKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPiAxMiB8fCBtb250aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4RGF5ID0gdGhpcy5nZXRNYXhEYXlJbk1vbnRoQW5kWWVhcihtb250aCwgeWVhcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXkgPiBtYXhEYXkgfHwgZGF5IDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0SG91cnMoaE5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldE1pbnV0ZXMobU5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldFNlY29uZHMoc05vdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0VmFsdWUubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIDAxMDFcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gK2lucHV0VmFsdWUuc3Vic3RyKDAsIDIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9ICtpbnB1dFZhbHVlLnN1YnN0cigyLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeWVhciA9IHRoaXMuZ2V0Q3VycmVudFllYXIoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPiAxMiB8fCBtb250aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4RGF5ID0gdGhpcy5nZXRNYXhEYXlJbk1vbnRoQW5kWWVhcihtb250aCwgeWVhcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXkgPiBtYXhEYXkgfHwgZGF5IDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0SG91cnMoaE5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldE1pbnV0ZXMobU5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldFNlY29uZHMoc05vdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChudW1iZXIgPiAtMTAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHRoaXMuYWRkRGF5cygobmV3IERhdGUoKSkudG9Mb2NhbGVEYXRlU3RyaW5nKCksIG51bWJlcik7XG4gICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHIuc2V0SG91cnMoaE5vdyk7XG4gICAgICAgICAgICAgICAgICAgIHIuc2V0TWludXRlcyhtTm93KTtcbiAgICAgICAgICAgICAgICAgICAgci5zZXRTZWNvbmRzKHNOb3cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0VmFsdWUgPSBpbnB1dFZhbHVlLnJlcGxhY2UoLy0vZywgJy8nKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lICYmICF0aW1lT25seSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cnlQYXJzZURhdGVUaW1lID0gdGhpcy50cnlQYXJzZUV4dHJhY3REYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdERC9NTS9ZWVlZIGhoOm1tJyxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyeVBhcnNlRGF0ZVRpbWUgKyAnJyAhPSAnSW52YWxpZCBEYXRlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeVBhcnNlRGF0ZVRpbWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGltZU9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJ5UGFyc2VEYXRlID0gdGhpcy50cnlQYXJzZUV4dHJhY3REYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7aW5wdXRWYWx1ZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0REL01NL1lZWVkgaGg6bW0nKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyeVBhcnNlRGF0ZSArICcnICE9ICdJbnZhbGlkIERhdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UGFyc2VEYXRlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cnlQYXJzZURhdGUgPSB0aGlzLnRyeVBhcnNlRXh0cmFjdERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyc2VEYXRlICsgJycgIT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlQYXJzZURhdGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZ2V0TWF4RGF5SW5Nb250aEFuZFllYXIobW9udGgsIHllYXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBkID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDApO1xuICAgICAgICByZXR1cm4gZC5nZXREYXRlKCk7XG4gICAgfVxuXG4gICAgZ2V0RGF0YXNvdXJjZVJhbmdlWWVhcihyYW5nZVllYXIgPSA1LCBwcmV2aW91c1llYXI/OiBudW1iZXIsIG5leHRZZWFyPzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2VZZWFyID0gW107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBjb25zdCBpc1ByZXZpb3VzWWVhciA9IHByZXZpb3VzWWVhciAmJiBwcmV2aW91c1llYXIgPiAwO1xuICAgICAgICBjb25zdCBpc05leHRZZWFyID0gbmV4dFllYXIgJiYgbmV4dFllYXIgPiAwO1xuICAgICAgICBpZiAoaXNQcmV2aW91c1llYXIgfHwgaXNOZXh0WWVhcikge1xuICAgICAgICAgICAgaWYgKGlzUHJldmlvdXNZZWFyKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgeWVhciA9IGN1cnJlbnRZZWFyIC0gcHJldmlvdXNZZWFyOyB5ZWFyIDwgY3VycmVudFllYXI7IHllYXIrKykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlWWVhci5wdXNoKHsgaWQ6IHllYXIsIHRlbjogeWVhciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNOZXh0WWVhcikge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHllYXIgPSBjdXJyZW50WWVhcjsgeWVhciA8PSBjdXJyZW50WWVhciArIG5leHRZZWFyOyB5ZWFyKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZVllYXIucHVzaCh7IGlkOiB5ZWFyLCB0ZW46IHllYXIgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZVllYXIucHVzaCh7IGlkOiBjdXJyZW50WWVhciwgdGVuOiBjdXJyZW50WWVhciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBpID0gMTtcbiAgICAgICAgICAgIGZvciAobGV0IHllYXIgPSBjdXJyZW50WWVhciAtIHJhbmdlWWVhcjsgeWVhciA8PSBjdXJyZW50WWVhcjsgeWVhcisrKSB7XG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZVllYXIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogeWVhciwgdGVuOiB5ZWFyIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6IGN1cnJlbnRZZWFyICsgaSwgdGVuOiBjdXJyZW50WWVhciArIGkgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhU291cmNlWWVhci5zb3J0KChhLCBiKSA9PiBiLmlkIC0gYS5pZCk7XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudFllYXIoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50TW9udGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0TW9udGgoKTtcbiAgICB9XG5cbiAgICBnZXREeW5hbWljRm9ybUlkKHNlcnZpY2UsIGVudGl0eSwgYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBgJHtzZXJ2aWNlfV8ke2VudGl0eX1fJHthY3Rpb259YC50b1VwcGVyQ2FzZSgpO1xuICAgIH1cblxuICAgIGdldERlZmF1bHREeW5hbWljRm9ybUlkKGFjdGlvbikge1xuICAgICAgICByZXR1cm4gYERFRkFVTFRfJHthY3Rpb259YC50b1VwcGVyQ2FzZSgpO1xuICAgIH1cblxuICAgIGNsb25lT2JqZWN0KG9iajogYW55KSB7XG4gICAgICAgIGlmIChvYmogIT09IHVuZGVmaW5lZCkgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgc2V0UHJvcGVydHkocHJvcCwgdmFsLCBtb2RlbCkge1xuICAgICAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmVPYmplY3QobW9kZWwpO1xuICAgICAgICBpZiAoY2xvbmUpIHtcbiAgICAgICAgICAgIGNsb25lW3Byb3BdID0gdmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHN0YW5kYXJkaXplZEpzb24oaW5wdXRKc29uOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBpbnB1dEpzb24ucmVwbGFjZSgvT2JqZWN0SWRcXCgoLio/KVxcKS9nbSwgJyQxJyk7XG4gICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoL0lTT0RhdGVcXCgoLio/KVxcKS9nbSwgJyQxJyk7XG4gICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoL051bWJlckxvbmdcXCgoLio/KVxcKS9nbSwgJyQxJyk7XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgdHJpZ2dlclJlc2l6ZVdpbmRvdygpIHtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSk7XG4gICAgfVxuXG4gICAgYXV0b0FsaWduRGlhbG9nKGRpYWxvZzogRGlhbG9nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cmlnZ2VyUmVzaXplV2luZG93KCksIDIwMCk7XG4gICAgfVxuXG4gICAgb2JqSGFzTnVsbChvYmopIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqW2tleV0gIT0gbnVsbCAmJiBvYmpba2V5XSAhPSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGFycmF5SGFzQ2hhbmdlZChvbGRBcnJheSwgbmV3QXJyYXkpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGksIGl0ZW0sIGosIGxlbjtcbiAgICAgICAgaWYgKCghb2xkQXJyYXkgJiYgbmV3QXJyYXkpIHx8IChvbGRBcnJheSAmJiAhbmV3QXJyYXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShvbGRBcnJheSkgPT09IEpTT04uc3RyaW5naWZ5KG5ld0FycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gaiA9IDAsIGxlbiA9IG5ld0FycmF5Lmxlbmd0aDsgaiA8IGxlbjsgaSA9ICsraikge1xuICAgICAgICAgICAgaXRlbSA9IG5ld0FycmF5W2ldO1xuICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGl0ZW0pICE9PSBKU09OLnN0cmluZ2lmeShvbGRBcnJheVtpXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJ5UGFyc2VFeHRyYWN0RGF0ZShkYXRlVmFsdWUsIGZvcm1hdCkge1xuICAgICAgICBjb25zdCBkYXkgPSBtb21lbnQoZGF0ZVZhbHVlLCBmb3JtYXQpO1xuICAgICAgICBpZiAoZGF5KSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5LnRvRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWVGcm9tVGFzayhrZXlWYWx1ZSwgY3VycmVudFZpZXcsIHN0ZXBNZXRhZGF0YSk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgaWYgKGN1cnJlbnRWaWV3LmtleVZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgdGFza0tleVZhbHVlID0gSlNPTi5wYXJzZShjdXJyZW50Vmlldy5rZXlWYWx1ZXMpLmZpbmQoXG4gICAgICAgICAgICAgICAgKHgpID0+IHgua2V5ID09PSBrZXlWYWx1ZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodGFza0tleVZhbHVlICE9PSBudWxsICYmIHRhc2tLZXlWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGFza0tleVZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyckV4dGVuZERhdGEgPSBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICAgIHN0ZXBNZXRhZGF0YS5maW5kKCh4KSA9PiB4LmtleSA9PT0gJ2V4dGVuZERhdGEnKS52YWx1ZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB0YXNrS2V5VmFsdWUgPSBhcnJFeHRlbmREYXRhLmZpbmQoXG4gICAgICAgICAgICAgICAgKHgpID0+IHgua2V5ICYmIHgua2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleVZhbHVlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh0YXNrS2V5VmFsdWUgIT09IG51bGwgJiYgdGFza0tleVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0YXNrS2V5VmFsdWUudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB1cHBlckZpcnN0TGV0dGVyKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dCA9PSAnJyB8fCBpbnB1dCA9PSBudWxsIHx8IGlucHV0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuXG4gICAgICAgIGNvbnN0IHdvcmRzID0gaW5wdXQuc3BsaXQoJyAnKTtcblxuICAgICAgICB3b3Jkcy5mb3JFYWNoKCh3b3JkKSA9PiB7XG4gICAgICAgICAgICBpZiAod29yZC50cmltKCkgIT0gJycpIHtcbiAgICAgICAgICAgICAgICBpZiAod29yZC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3b3JkLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zdWJzdHJpbmcoMSkgKyAnICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZC50b1VwcGVyQ2FzZSgpICsgJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQudHJpbSgpO1xuICAgIH1cblxuICAgIHJlcGxhY2VBbGwoaW5wdXRTdHIsIHNlYXJjaCwgcmVwbGFjZW1lbnQpIHtcbiAgICAgICAgaWYgKGlucHV0U3RyID09PSBudWxsIHx8IGlucHV0U3RyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dFN0cjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXRTdHIuc3BsaXQoc2VhcmNoKS5qb2luKHJlcGxhY2VtZW50KTtcbiAgICB9XG5cbiAgICBpc0ltYWdlKGZpbGVOYW1lKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghZmlsZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gL1xcLihnaWZ8anBnfGpwZWd8dGlmZnxwbmcpJC9pLnRlc3QoZmlsZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgY3JlYXRlSWZyYW1lKHVybCkge1xuICAgICAgICBjb25zdCBpZnJhbWUgPSBgPGlmcmFtZSBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIiB3aWR0aD1cIjBcIiBoZWlnaHQ9XCIwXCIgc3JjPVwiJHt1cmx9XCI+PC9pZnJhbWU+YDtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsIGlmcmFtZSk7XG4gICAgfVxuXG4gICAgaXNJbnRlZ2VyU3RyaW5nKHN0cjogc3RyaW5nKSB7XG4gICAgICAgIGlmICghc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHN0ci5pbmRleE9mKCcwJykgPT0gMCkge1xuICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyID09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuID0gTWF0aC5mbG9vcihOdW1iZXIoc3RyKSk7XG4gICAgICAgIHJldHVybiBuICE9PSBJbmZpbml0eSAmJiBTdHJpbmcobikgPT09IHN0cjtcbiAgICB9XG5cbiAgICBoYXNBbnlNYXNrKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKCdkaXZbY2xhc3N+PVwidWktZGlhbG9nLW1hc2tcIl0nKVxuICAgICAgICAgICAgfHwgZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKCdkaXZbY2xhc3N+PVwidWktc2lkZWJhci1tYXNrXCJdJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzYWZlU3RyaW5naWZ5KGRhdGEpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHN0cmluZ2lmeS5zdGFibGVTdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIGNvbXBhcmVTdHJpbmcodmFsdWUxLCB2YWx1ZTIpIHtcbiAgICAgICAgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWUxICE9IG51bGwgJiYgdmFsdWUyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUxID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlMS5sb2NhbGVDb21wYXJlKHZhbHVlMik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBhcmVEYXRlKGRhdGUxLCBkYXRlMikge1xuICAgICAgICBpZiAoIWRhdGUxIHx8ICFkYXRlMikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZTEgPSB0aGlzLnBhcnNlRGF0ZShkYXRlMSk7XG4gICAgICAgIGRhdGUyID0gdGhpcy5wYXJzZURhdGUoZGF0ZTIpO1xuICAgICAgICBpZiAoZGF0ZTEuZ2V0VGltZSgpIDwgZGF0ZTIuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0ZTEuZ2V0VGltZSgpID09IGRhdGUyLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRpZmZEYXRlKGRhdGUxOiBhbnksIGRhdGUyOiBhbnkpOiBudW1iZXIge1xuICAgICAgICAvLyBkMSA8IGQyIHRow6wgYuG6sW5nID0gLTFcbiAgICAgICAgY29uc3QgZDEgPSBtb21lbnQoZGF0ZTEpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICBjb25zdCBkMiA9IG1vbWVudChkYXRlMikuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgICAgIGlmIChkMSA9PSBkMikge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGQxID4gZDIpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBjb21wYXJlV2l0aE5vdyhkYXRlMSkge1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVEYXRlKGRhdGUxLCBjdXJyZW50RGF0ZSk7XG4gICAgfVxuXG4gICAgcGFyc2VEYXRlKGRhdGVTdHI6IGFueSkge1xuICAgICAgICBpZiAoZGF0ZVN0ciBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlU3RyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFkYXRlU3RyIHx8IGRhdGVTdHIgPT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlU3RyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGFzeW5jRm9yRWFjaChhcnJheSwgY2FsbGJhY2spIHtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgYXdhaXQgY2FsbGJhY2soYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3JkZXJCeShvYmo6IGFueVtdLCBwcm9wOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIF8uc29ydEJ5KG9iaiwgcHJvcCk7XG4gICAgfVxuXG4gICAgZ3JvdXBCeShvYmo6IGFueVtdLCBwcm9wOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIF8uZ3JvdXBCeShvYmosIHByb3ApO1xuICAgIH1cblxuICAgIGRpc3RpbmN0KGFycmF5OiBudW1iZXJbXSkge1xuICAgICAgICBjb25zdCBmbGFncyA9IFtdLCBvdXRwdXQgPSBbXSwgbCA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmbGFnc1thcnJheVtpXV0pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZsYWdzW2FycmF5W2ldXSA9IHRydWU7XG4gICAgICAgICAgICBvdXRwdXQucHVzaChhcnJheVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG5cbiAgICBkaXN0aW5jdEFycmF5KGFycmF5OiBhbnlbXSkge1xuICAgICAgICByZXR1cm4gYXJyYXkuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4gYXJyYXkuaW5kZXhPZihpdGVtKSA9PT0gaW5kZXgpO1xuICAgIH1cblxuICAgIGRpc3RpbmN0RmllbGQoYXJyYXk6IGFueVtdLCBmaWVsZCkge1xuICAgICAgICBjb25zdCBmbGFncyA9IFtdLCBvdXRwdXQgPSBbXSwgbCA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgdmFsdWUgPSBhcnJheVtpXVtmaWVsZF07XG4gICAgICAgICAgICBpZiAoZmxhZ3NbdmFsdWVdKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbGFnc1t2YWx1ZV0gPSB0cnVlO1xuICAgICAgICAgICAgb3V0cHV0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgYWRkRGlzdGluY3Qoc291cmNlOiBhbnlbXSwgZGVzdDogYW55W10pIHtcbiAgICAgICAgc291cmNlLmZvckVhY2gocyA9PiB7XG4gICAgICAgICAgICBpZiAoIWRlc3Quc29tZShwID0+IHAgPT0gcykpIHtcbiAgICAgICAgICAgICAgICBkZXN0LnB1c2gocyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICAvLyBIw6BtIGR1eeG7h3QgbeG6o25nLCBs4bqleSByYSBwaOG6p24gdOG7rSB0aOG7j2EgbcOjbiBbZnVuY10gdsOgIHjDs2EgcGjhuqduIHThu60gxJHDsyDEkWkga2jhu49pIG3huqNuZ1xuICAgIC8vICAgICAgY2FsbEJhY2s6IG9wdGlvbmFsIHBo4bulYyB24bulIG5odSBj4bqndSBraMOhYyBraGkgZHV54buHdCDEkeG6v24gaXRlbSB0aOG7j2EgbcOjblxuICAgIGdldEFuZFJlbW92ZShzb3VyY2U6IGFueVtdLCBmdW5jOiBGdW5jdGlvbiwgY2FsbEJhY2s/OiBGdW5jdGlvbikge1xuICAgICAgICBpZiAoY2FsbEJhY2sgPT0gbnVsbCkge1xuICAgICAgICAgICAgY2FsbEJhY2sgPSBpID0+IGk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZnVuYyhzb3VyY2VbaV0pKSB7XG4gICAgICAgICAgICAgICAgY2FsbEJhY2soc291cmNlW2ldKTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChzb3VyY2VbaV0pO1xuICAgICAgICAgICAgICAgIHNvdXJjZS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9nZ2xlTWVudSgpIHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lbnUtYnV0dG9uJykuY2xpY2soKTtcbiAgICB9XG5cbiAgICBzdHJpbmdUb0FycmF5QnVmZmVyKHN0cmluZykge1xuICAgICAgICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoc3RyaW5nLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlclZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYnVmZmVyVmlld1tpXSA9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuXG4gICAgZ3VpZEVtcHR5KCkge1xuICAgICAgICByZXR1cm4gJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoga2nhu4NtIHRyYSB4ZW0gY2h14buXaSBjw7MgcGjhuqNpIG3hu5l0IGd1aWQga2jDoWMgduG7m2kgY+G6oyBndWlkRW1wdHlcbiAgICAgKiBAZGF0ZSA4LzExLzIwMjIgLSAxMTo1MTozMSBBTVxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGd1aWRcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1ZhbGlkR3VpZChndWlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGd1aWQgIT0gbnVsbCAmJiBndWlkICE9PSAnJyAmJiBndWlkICE9PSB0aGlzLmd1aWRFbXB0eSgpO1xuICAgIH1cblxuICAgIGdldERpc3BsYXlWYWwodmFsKSB7XG4gICAgICAgIGlmICh2YWwgPT0gdW5kZWZpbmVkIHx8IHZhbCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRpbWVTcGFuOiBUcuG6oyB24buBIHRydWUgbuG6v3UgaGFpIGtob+G6o25nIHRo4budaSBnaWFuIChzdGFydCwgZW5kKVxuICAgICAqIHbDoCAoY29tcGFyZVN0YXJ0LCBjb21wYXJlRW5kKSBnaWFvIG5oYXUuIEtow7RuZyB0w61uaFxuICAgICAqIGNo4buJIGdpYW8gbeG7mXQgxJHhuqd1IG3DunQuXG4gICAgICovXG4gICAgaGFzSW50ZXJzZWN0aW9uKHN0YXJ0LCBlbmQsIGNvbXBhcmVTdGFydCwgY29tcGFyZUVuZCkge1xuICAgICAgICByZXR1cm4gKHN0YXJ0IDwgY29tcGFyZVN0YXJ0ICYmIGNvbXBhcmVTdGFydCA8IGVuZClcbiAgICAgICAgICAgIHx8IChzdGFydCA8IGNvbXBhcmVFbmQgJiYgY29tcGFyZUVuZCA8IGVuZClcbiAgICAgICAgICAgIHx8IChjb21wYXJlU3RhcnQgPD0gc3RhcnQgJiYgZW5kIDw9IGNvbXBhcmVFbmQpO1xuICAgIH1cblxuICAgIGhhc0ludGVyc2VjdGlvbkRhdGUoc3RhcnQsIGVuZCwgY29tcGFyZVN0YXJ0LCBjb21wYXJlRW5kLCBkYXRlRm9ybWF0ID0gdHJ1ZSkge1xuICAgICAgICBpZiAoIWRhdGVGb3JtYXQpIHtcbiAgICAgICAgICAgIHJldHVybiAobmV3IERhdGUoc3RhcnQpIDwgbmV3IERhdGUoY29tcGFyZUVuZCkgJiYgbmV3IERhdGUoZW5kKSA+IG5ldyBEYXRlKGNvbXBhcmVTdGFydCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0IDwgY29tcGFyZUVuZCAmJiBlbmQgPiBjb21wYXJlU3RhcnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRPZmZzZXRJbk1pbnV0ZShzdHJEYXRlMSwgc3RyRGF0ZTIsIHJvdW5kID0gdHJ1ZSkge1xuICAgICAgICBpZiAoIXN0ckRhdGUxIHx8ICFzdHJEYXRlMikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkMSA9IG5ldyBEYXRlKHN0ckRhdGUxKTtcbiAgICAgICAgY29uc3QgZDIgPSBuZXcgRGF0ZShzdHJEYXRlMik7XG5cbiAgICAgICAgbGV0IG9mZnNldCA9IChkMS5nZXRUaW1lKCkgLSBkMi5nZXRUaW1lKCkpIC8gMTAwMCAvIDYwO1xuICAgICAgICBpZiAocm91bmQpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IE1hdGgucm91bmQob2Zmc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfVxuXG4gICAgZmluZFRlbXBsYXRlRnJvbUxpc3QoJGxpc3Q6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PiwgdGVtcGxhdGVOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuICRsaXN0XG4gICAgICAgICAgICA/ICRsaXN0LmZpbmQoKHRlbXBsYXRlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGVtcGxhdGUuX2RlZiAmJiB0ZW1wbGF0ZS5fZGVmLnJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb2xkIHZlcnNpb24sIG5vdCBpdnlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLl9kZWYucmVmZXJlbmNlc1t0ZW1wbGF0ZU5hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZW1wbGF0ZS5fZGVjbGFyYXRpb25UQ29udGFpbmVyICYmIHRlbXBsYXRlLl9kZWNsYXJhdGlvblRDb250YWluZXIubG9jYWxOYW1lcykge1xuICAgICAgICAgICAgICAgICAgICAvLyBpcyBpdnkgdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLl9kZWNsYXJhdGlvblRDb250YWluZXIubG9jYWxOYW1lc1swXSA9PSB0ZW1wbGF0ZU5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBpc1NhbWVBcnJheShhcnJheTE6IGFueVtdLCBhcnJheTI6IGFueVtdKSB7XG4gICAgICAgIGlmIChhcnJheTEubGVuZ3RoICE9IGFycmF5Mi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFycmF5MSkge1xuICAgICAgICAgICAgaWYgKCFhcnJheTIuc29tZShxID0+IHEgPT0gaXRlbSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZWxvYWRQYWdlKCkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgaXNOdWxsT3JXaGl0ZVNwYWNlKGlucHV0OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9PSB1bmRlZmluZWQgJiYgaW5wdXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC50cmltKCkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlzRW1wdHlBcnJheU9yTnVsbChhcnJheTogYW55W10pIHtcbiAgICAgICAgaWYgKGFycmF5ICE9PSB1bmRlZmluZWQgJiYgYXJyYXkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChhcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG5ld0ZpbHRlckNvbnRhaW5lcihsb2dpYzogJ2FuZCcgfCAnb3InLCAuLi5maWx0ZXJzOiBGaWx0ZXJbXSkge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBsb2dpYyxcbiAgICAgICAgICAgIGZpbHRlcnM6IFsuLi5maWx0ZXJzXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IGFueSwgdmFsdWVJc0ZpZWxkOiBib29sZWFuID0gZmFsc2UsIHN0cmluZ0NvbXBhcmVPcHRpb246IFN0cmluZ0NvbXBhcmVPcHRpb24gPSBTdHJpbmdDb21wYXJlT3B0aW9uLk5vcm1hbCkge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBmaWVsZCwgb3BlcmF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodmFsdWUpLFxuICAgICAgICAgICAgdmFsdWVJc0ZpZWxkLFxuICAgICAgICAgICAgc3RyaW5nQ29tcGFyZU9wdGlvbixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyVjQoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGVhckNsaXBib2FyZFN0b3JhZ2UoKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuU1RPUkFHRV9LRVkpO1xuICAgIH1cblxuICAgIGNvcHlCeVN0b3JhZ2UodmFsOiBzdHJpbmcpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5TVE9SQUdFX0tFWSwgdmFsKTtcbiAgICAgICAgdGhpcy5jb3B5TWVzc2FnZSh2YWwpO1xuICAgIH1cblxuICAgIHBhc3RlQnlTdG9yYWdlKCkge1xuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9SQUdFX0tFWSk7XG4gICAgfVxuXG4gICAgY29weU1lc3NhZ2UodmFsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2VsQm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICAgICAgc2VsQm94LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgICAgc2VsQm94LnN0eWxlLmxlZnQgPSAnMCc7XG4gICAgICAgIHNlbEJveC5zdHlsZS50b3AgPSAnMCc7XG4gICAgICAgIHNlbEJveC5zdHlsZS5vcGFjaXR5ID0gJzAnO1xuICAgICAgICBzZWxCb3gudmFsdWUgPSB2YWw7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2VsQm94KTtcbiAgICAgICAgc2VsQm94LmZvY3VzKCk7XG4gICAgICAgIHNlbEJveC5zZWxlY3QoKTtcbiAgICAgICAgc2VsQm94LnNldFNlbGVjdGlvblJhbmdlKDAsIDk5OTk5KTtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzZWxCb3gpO1xuICAgIH1cblxuICAgIG5ld0JpbmRpbmdGaWx0ZXIoY29sdW1uOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgc291cmNlRmllbGQ6IHN0cmluZywgc3ViRmllbGQ/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQ6IGNvbHVtbixcbiAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICAgICAgc291cmNlRmllbGQsXG4gICAgICAgICAgICBzdWJGaWVsZCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3U29ydChmaWVsZDogc3RyaW5nLCBkaXI6IDEgfCAtMSA9IDEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTb3J0KHsgZmllbGQsIGRpciB9KTtcbiAgICB9XG5cbiAgICBsb2dFcnJvcihlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTXJyIFN0YXJyOiAke3RoaXMudG5QcmVmaXhMb2d9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9XG5cbiAgICBsb2dJbmZvKG1zZykge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5pbmZvKGBNcnIgU3RhcnI6ICR7dGhpcy50blByZWZpeExvZ31gKTtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuaW5mbyhtc2cpO1xuICAgIH1cblxuICAgIGxvZ0luZm9TaW1wbGUobXNnKSB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmluZm8oYE1yciBTdGFycjogJHttc2d9YCk7XG4gICAgfTtcblxuICAgIG1hdGNoUnVsZVNob3J0KHN0ciwgcnVsZSkge1xuICAgICAgICBjb25zdCBlc2NhcGVSZWdleCA9IChzdHIpID0+IHN0ci5yZXBsYWNlKC8oWy4qKz9ePSE6JHt9KCl8XFxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nICsgcnVsZS5zcGxpdCgnKicpLm1hcChlc2NhcGVSZWdleCkuam9pbignLionKSArICckJykudGVzdChzdHIpO1xuICAgIH1cblxuICAgIC8vIEV4cGxhbmF0aW9uIGNvZGVcbiAgICBtYXRjaFJ1bGVFeHBsKHN0ciwgcnVsZSkge1xuICAgICAgICAvLyBmb3IgdGhpcyBzb2x1dGlvbiB0byB3b3JrIG9uIGFueSBzdHJpbmcsIG5vIG1hdHRlciB3aGF0IGNoYXJhY3RlcnMgaXQgaGFzXG4gICAgICAgIGNvbnN0IGVzY2FwZVJlZ2V4ID0gKHN0cikgPT4gc3RyLnJlcGxhY2UoLyhbLiorP149IToke30oKXxcXFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xuXG4gICAgICAgIC8vIFwiLlwiICA9PiBGaW5kIGEgc2luZ2xlIGNoYXJhY3RlciwgZXhjZXB0IG5ld2xpbmUgb3IgbGluZSB0ZXJtaW5hdG9yXG4gICAgICAgIC8vIFwiLipcIiA9PiBNYXRjaGVzIGFueSBzdHJpbmcgdGhhdCBjb250YWlucyB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVyc1xuICAgICAgICBydWxlID0gcnVsZS5zcGxpdCgnKicpLm1hcChlc2NhcGVSZWdleCkuam9pbignLionKTtcblxuICAgICAgICAvLyBcIl5cIiAgPT4gTWF0Y2hlcyBhbnkgc3RyaW5nIHdpdGggdGhlIGZvbGxvd2luZyBhdCB0aGUgYmVnaW5uaW5nIG9mIGl0XG4gICAgICAgIC8vIFwiJFwiICA9PiBNYXRjaGVzIGFueSBzdHJpbmcgd2l0aCB0aGF0IGluIGZyb250IGF0IHRoZSBlbmQgb2YgaXRcbiAgICAgICAgcnVsZSA9ICdeJyArIHJ1bGUgKyAnJCc7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBmb3IgbWF0Y2hpbmcgc3RyaW5nXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChydWxlKTtcblxuICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgZmluZHMgYSBtYXRjaCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2VcbiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3Qoc3RyKTtcbiAgICB9XG5cbiAgICBnZXRSZXNwb25zZVJlc3VsdEZyb21FeGNlcHRpb24oZXJyOiBhbnkpOiBSZXNwb25zZVJlc3VsdCB7XG4gICAgICAgIHJldHVybiA8YW55PntcbiAgICAgICAgICAgIGVycm9yOiAnRVhDRVBUSU9OJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdDw7MgbOG7l2kgeOG6o3kgcmEnLFxuICAgICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICAgIGVycm9yRGV0YWlsOiBlcnIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaXNTdHJpbmcodmFsKSB7XG4gICAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gdmFsLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgZ2V0VGltZSh0aW1lU3Bhbjogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGltZVNwYW4pIHJldHVybiB0aW1lU3BhbjtcbiAgICAgICAgY29uc3QgYXJyVGltZUluZm8gPSB0aW1lU3Bhbi5zcGxpdCgnOicpO1xuICAgICAgICByZXR1cm4gYCR7YXJyVGltZUluZm9bMF19OiR7YXJyVGltZUluZm9bMV19YDtcbiAgICB9XG5cbiAgICBhcHBlbmRTdHJpbmdXaXRoU3BhY2Uob3JpZ2luYWw6IHN0cmluZywgYXBwZW5kOiBzdHJpbmcsIGNvbm5lY3Rvcj86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gYCR7b3JpZ2luYWx9YCArIChhcHBlbmQgJiYgYXBwZW5kICE9PSAnJyA/IChgICR7Y29ubmVjdG9yID8gY29ubmVjdG9yIDogJyd9IGApICsgYXBwZW5kIDogJycpO1xuICAgIH1cblxuICAgIGZpbmRMYXN0SW5kZXg8VD4oYXJyYXk6IEFycmF5PFQ+LCBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgb2JqOiBUW10pID0+IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICBsZXQgbCA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGwtLSkge1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtsXSwgbCwgYXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGdldFN0YXJ0RGF5RW5kRGF5V2VlayhkYXRlID0gbmV3IERhdGUoKSkge1xuICAgICAgICBjb25zdCBkYXRlRGlmZiA9IGRhdGUuZ2V0RGF0ZSgpIC0gZGF0ZS5nZXREYXkoKSArIChkYXRlLmdldERheSgpID09IDAgPyAtNiA6IDEpO1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShkYXRlLnNldERhdGUoZGF0ZURpZmYpKTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IG5ldyBEYXRlKG5ldyBEYXRlKGRhdGUuc2V0RGF0ZShkYXRlRGlmZiArIDYpKSk7XG4gICAgICAgIGlmIChzdGFydERhdGUuZ2V0RGF0ZSgpID4gZW5kRGF0ZS5nZXREYXRlKCkgJiYgc3RhcnREYXRlLmdldE1vbnRoKCkgPT0gZW5kRGF0ZS5nZXRNb250aCgpKSB7XG4gICAgICAgICAgICBlbmREYXRlLnNldE1vbnRoKGVuZERhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbc3RhcnREYXRlLCBlbmREYXRlXTtcbiAgICB9XG5cbiAgICBnZXRTdGFydERheUVuZERheUluTW9udGgobW9udGg/OiBudW1iZXIsIHllYXI/OiBudW1iZXIpIHtcbiAgICAgICAgbW9udGggPSBtb250aCA/PyB0aGlzLmdldEN1cnJlbnRNb250aCgpO1xuICAgICAgICB5ZWFyID0geWVhciA/PyB0aGlzLmdldEN1cnJlbnRZZWFyKCk7XG4gICAgICAgIHJldHVybiBbbmV3IERhdGUoeWVhciwgbW9udGgsIDEpLCBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApXTtcbiAgICB9XG5cbiAgICBhZGRIdG1sQ29udGVudFdpdGhUYWdBcm91bmQobHN0VGFnOiBhbnksIGNsYXNzTmFtZSA9ICcnLCB0YWdBcm91bmQ6IHN0cmluZyA9ICdkaXYnLCBhdHRyaWJ1dGVzOiBhbnkgPSB7fSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGZvciAobGV0IGl0ZW0gb2YgbHN0VGFnKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gdGhpcy5hZGRIdG1sQ29udGVudChpdGVtLmNvbnRlbnQsIGl0ZW0uY2xhc3NOYW1lLCBpdGVtLnRhZ05hbWUsIGl0ZW0uYXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkSHRtbENvbnRlbnQocmVzdWx0LCBjbGFzc05hbWUsIHRhZ0Fyb3VuZCwgYXR0cmlidXRlcyk7XG4gICAgfVxuXG4gICAgYWRkSHRtbENvbnRlbnQoY29udGVudDogc3RyaW5nLCBjbGFzc05hbWU6IHN0cmluZyA9ICcnLCB0YWdOYW1lOiBzdHJpbmcgPSAnZGl2JywgYXR0cmlidXRlczogYW55ID0ge30pIHtcbiAgICAgICAgbGV0IHN0ckF0dHJpYnV0ZSA9ICcnO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoYXR0cmlidXRlcyk/Lmxlbmd0aCkge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RyQXR0cmlidXRlICs9IGAgJHtrZXl9PScke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8JHt0YWdOYW1lfSBjbGFzcz0nJHtjbGFzc05hbWV9JyAke3N0ckF0dHJpYnV0ZX0+JHtjb250ZW50fTwvJHt0YWdOYW1lfT5gO1xuICAgIH1cblxuXG4gICAgcGFyc2VTdHJpbmdUb0FycmF5KG1vZGVsOiBhbnksIGZpZWxkczogc3RyaW5nLCBzcGxpdEJ5OiBzdHJpbmcgPSAnLCcpIHtcbiAgICAgICAgaWYgKCFtb2RlbCB8fCAhZmllbGRzKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGxzdEZpZWxkID0gZmllbGRzLnNwbGl0KCcsJyk7XG4gICAgICAgIGxzdEZpZWxkLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgaWYgKG1vZGVsW2ZpZWxkXSAmJiAhdGhpcy5pc0VtcHR5QXJyYXlPck51bGwobW9kZWxbZmllbGRdKSkge1xuICAgICAgICAgICAgICAgIG1vZGVsW2ZpZWxkXSA9IG1vZGVsW2ZpZWxkXS5zcGxpdChzcGxpdEJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1vZGVsW2ZpZWxkXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwYXJzZUFycmF5VG9TdHJpbmcoZGF0YTogYW55LCBmaWVsZHM6IHN0cmluZywgc3BsaXRCeTogc3RyaW5nID0gJywnKSB7XG4gICAgICAgIGlmICghZGF0YSB8fCAhZmllbGRzKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGxzdEZpZWxkID0gZmllbGRzLnNwbGl0KCcsJyk7XG4gICAgICAgIGxzdEZpZWxkLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGFbZmllbGRdICYmIEFycmF5LmlzQXJyYXkoZGF0YVtmaWVsZF0pICYmICF0aGlzLmlzRW1wdHlBcnJheU9yTnVsbChkYXRhW2ZpZWxkXSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhW2ZpZWxkXSA9IGRhdGFbZmllbGRdLmpvaW4oc3BsaXRCeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhW2ZpZWxkXSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc01vcmVUaGFuRGF5c0Zyb21Ob3coZHQ6IERhdGUsIGRheXM6IG51bWJlciA9IDEpIHtcbiAgICAgICAgcmV0dXJuIG1vbWVudChuZXcgRGF0ZSgpKS5kaWZmKGR0LCAnZGF5cycpID4gKGRheXMgLSAxKTtcbiAgICB9XG5cbn1cbiJdfQ==
@@ -3719,6 +3719,9 @@ class CommonService {
3719
3719
  if (model[field] && !this.isEmptyArrayOrNull(model[field])) {
3720
3720
  model[field] = model[field].split(splitBy);
3721
3721
  }
3722
+ else {
3723
+ model[field] = [];
3724
+ }
3722
3725
  });
3723
3726
  }
3724
3727
  parseArrayToString(data, fields, splitBy = ',') {
@@ -3729,6 +3732,9 @@ class CommonService {
3729
3732
  if (data[field] && Array.isArray(data[field]) && !this.isEmptyArrayOrNull(data[field])) {
3730
3733
  data[field] = data[field].join(splitBy);
3731
3734
  }
3735
+ else {
3736
+ data[field] = '';
3737
+ }
3732
3738
  });
3733
3739
  }
3734
3740
  isMoreThanDaysFromNow(dt, days = 1) {