@glowgreen/gg-questionnaire-v2 0.0.96 → 0.0.98

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.
@@ -216,11 +216,9 @@ export class QuestionnaireService {
216
216
  const regexp = /(\{\{([^\}]+)\}\})/gi;
217
217
  let placeholdersFound = null;
218
218
  while ((placeholdersFound = regexp.exec(data.title)) !== null) {
219
- console.log(placeholdersFound[1]);
220
- const replacementValue = this.filterService.getValueForString(placeholdersFound[1], this.currentQuestionnaireForm, this.additionalData);
221
- console.log('replace with ' + replacementValue);
222
- console.log('b4 title: ' + data.title.replace(placeholdersFound[1], replacementValue));
223
- data.title = data.title.replace('/\{\{' + placeholdersFound[2] + '\}\}/gi', replacementValue);
219
+ const replacementValue = this.filterService.getValueForString(placeholdersFound[2], this.currentQuestionnaireForm, this.additionalData);
220
+ const replace_re = new RegExp('\{\{' + placeholdersFound[1] + '\}\}', 'g');
221
+ data.title = data.title.replace(replace_re, replacementValue);
224
222
  console.log('title: ' + data.title);
225
223
  }
226
224
  const formControl = this.currentSection.formGroup.get(data.name);
@@ -486,4 +484,4 @@ QuestionnaireService.ctorParameters = () => [
486
484
  { type: FilterService },
487
485
  { type: undefined, decorators: [{ type: Inject, args: ['options',] }] }
488
486
  ];
489
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2ctcXVlc3Rpb25uYWlyZS12Mi9zcmMvbGliL3NlcnZpY2VzL3F1ZXN0aW9ubmFpcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFcEUsT0FBTyxFQUE4QixTQUFTLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlwRixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7O0FBS2pELE1BQU0sT0FBTyxvQkFBb0I7SUFtQi9CLFlBQ1UsY0FBc0MsRUFDdEMsYUFBNEIsRUFDVCxPQUE2QjtRQUZoRCxtQkFBYyxHQUFkLGNBQWMsQ0FBd0I7UUFDdEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDVCxZQUFPLEdBQVAsT0FBTyxDQUFzQjtRQXJCbkQscUJBQWdCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDOUQseUJBQW9CLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFlakUsY0FBUyxHQUFHLElBQUksQ0FBQztJQU1yQixDQUFDO0lBRUw7Ozs7OztPQU1HO0lBQ0ksaUJBQWlCLENBQUMsYUFBNEIsRUFBRSxVQUFtQixFQUFFLGNBQXVCO1FBQ2pHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FB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QztRQUV0RSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUMvRCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTFDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN4QixLQUFLLE1BQU0sWUFBWSxJQUFJLGFBQWEsRUFBRTtZQUN4QyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ2pDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEQsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMxQjtpQkFBTTtnQkFDTCxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2pDO1NBQ0Y7UUFFRCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Ozs7WUF6a0JGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBZFEsc0JBQXNCO1lBVXRCLGFBQWE7NENBMkJqQixNQUFNLFNBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29uc3RydWN0b3JTZXJ2aWNlIH0gZnJvbSAnLi9mb3JtLWNvbnN0cnVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgUXVlc3Rpb25uYWlyZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlc3Rpb25uYWlyZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNlY3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlY3Rpb24nO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3F1ZXN0aW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUXVlc3Rpb25uYWlyZU9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3F1ZXN0aW9ubmFpcmUtb3B0aW9ucyc7XG5pbXBvcnQgeyBRdWVzdGlvblR5cGUgfSBmcm9tICcuLi9lbnVtcy9xdWVzdGlvbi10eXBlLmVudW0nO1xuXG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9maWx0ZXIuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9ubmFpcmVTZXJ2aWNlIHtcbiAgcHVibGljIGRhdGFDaGFuZ2VkRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHB1YmxpYyBzZWN0aW9uRmluaXNoZWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBwcml2YXRlIG9yaWdpbmFsUXVlc3Rpb25uYWlyZTogUXVlc3Rpb25uYWlyZTtcblxuICBwcml2YXRlIGN1cnJlbnRRdWVzdGlvbm5haXJlOiBRdWVzdGlvbm5haXJlO1xuICBwcml2YXRlIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwO1xuXG4gIHByaXZhdGUgY3VycmVudFNlY3Rpb25OYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgY3VycmVudFF1ZXN0aW9uTmFtZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcXVlc3Rpb25uYWlyZVZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcXVlc3Rpb25WYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHB1YmxpYyBhZGRpdGlvbmFsRGF0YTogT2JqZWN0O1xuXG4gIHByaXZhdGUgc2tpcHBhYmxlID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1Db25zdHVjdG9yOiBGb3JtQ29uc3RydWN0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZSxcbiAgICBASW5qZWN0KCdvcHRpb25zJykgcHJpdmF0ZSBvcHRpb25zOiBRdWVzdGlvbm5haXJlT3B0aW9uc1xuICApIHsgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhIHF1ZXN0aW9ubmFpcmUgZnJvbSBkYXRhLlxuICAgKiBAcGFyYW0gcXVlc3Rpb25uYWlyZSBUaGUgcXVlc3Rpb25uYWlyZSBkYXRhIHRvIGxvYWQsIG9mdGVuIHBhcnNlZCBKU09OIGZyb20gdGhlIGVkaXRvci5cbiAgICogQHBhcmFtIHNhdmVkU3RhdGUgVGhlIHNhdmVkIHN0YXRlIG9mIHRoZSBxdWVzdGlvbm5haXJlLCBvZnRlbiBmcm9tIGxvY2Fsc3RvcmFnZS5cbiAgICogQHJldHVybnMgbnVsbFxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGxvYWRRdWVzdGlvbm5haXJlKHF1ZXN0aW9ubmFpcmU6IFF1ZXN0aW9ubmFpcmUsIHNhdmVkU3RhdGU/OiBPYmplY3QsIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0KSB7XG4gICAgdGhpcy5vcmlnaW5hbFF1ZXN0aW9ubmFpcmUgPSBfLmNsb25lRGVlcChxdWVzdGlvbm5haXJlKTtcbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlID0gXy5jbG9uZURlZXAocXVlc3Rpb25uYWlyZSk7XG5cbiAgICB0aGlzLmFkZGl0aW9uYWxEYXRhID0gYWRkaXRpb25hbERhdGE7XG5cbiAgICBpZiAoc2F2ZWRTdGF0ZSAmJiBPYmplY3Qua2V5cyhzYXZlZFN0YXRlKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBuZXdEYXRhID0gdGhpcy5mb3JtQ29uc3R1Y3Rvci5nZW5lcmF0ZUZvcm1zRm9yUXVlc3Rpb25uYWlyZShcbiAgICAgICAgXy5jbG9uZURlZXAodGhpcy5vcmlnaW5hbFF1ZXN0aW9ubmFpcmUpLFxuICAgICAgICBfLmNsb25lRGVlcCh0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlKSxcbiAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbERhdGEsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG5cbiAgICAgIGlmIChuZXdEYXRhKSB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnN0dWN0b3IuY29uc3RydWN0UmVwZWF0ZXJGcm9tc0Zyb21TdGF0ZShzYXZlZFN0YXRlLCBuZXdEYXRhLnNlY3Rpb25zLCBuZXdEYXRhLmZvcm1zKTtcbiAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gPSBuZXdEYXRhLmZvcm1zO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5wYXRjaFZhbHVlKHNhdmVkU3RhdGUpO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVRdWVzdGlvbm5haXJlKHNhdmVkU3RhdGUpO1xuXG5cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2tpcFRvRmlyc3RTZWN0aW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTZWN0aW9uTmFtZSA9IE9iamVjdC5rZXlzKHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmNvbnRyb2xzKVswXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNraXBUb0ZpcnN0UXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uTmFtZSA9IE9iamVjdC5rZXlzKHRoaXMuY3VycmVudFNlY3Rpb24uZm9ybUdyb3VwLmNvbnRyb2xzKVswXTtcbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjdXJyZW50IHF1ZXN0aW9ubmFpcmUsIHVzZWQgd2hlbiBhIHZhbHVlIGlzIHVwZGF0ZWQgdG8gY2hlY2sgY29uZGl0aW9ucy5cbiAgICogQHBhcmFtIHNhdmVkU3RhdGUgVGhlIHNhdmVkIHN0YXRlIG9mIHRoZSBxdWVzdGlvbm5haXJlLCBvZnRlbiBmcm9tIGxvY2Fsc3RvcmFnZS5cbiAgICogQHJldHVybnMgbnVsbFxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIHVwZGF0ZVF1ZXN0aW9ubmFpcmUoc2F2ZWRTdGF0ZT86IE9iamVjdCkge1xuICAgIGNvbnN0IG9sZExlbmd0aCA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMubWFwKHggPT4geC5xdWVzdGlvbnMubGVuZ3RoKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcblxuICAgIGNvbnN0IG5ld0RhdGEgPSB0aGlzLmZvcm1Db25zdHVjdG9yLmdlbmVyYXRlRm9ybXNGb3JRdWVzdGlvbm5haXJlKFxuICAgICAgXy5jbG9uZURlZXAodGhpcy5vcmlnaW5hbFF1ZXN0aW9ubmFpcmUpLFxuICAgICAgXy5jbG9uZURlZXAodGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZSksXG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSxcbiAgICAgIHRoaXMuYWRkaXRpb25hbERhdGFcbiAgICApO1xuXG4gICAgaWYgKG5ld0RhdGEpIHtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtID0gbmV3RGF0YS5mb3JtcztcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMgPSBuZXdEYXRhLnNlY3Rpb25zO1xuICAgIH1cblxuICAgIGlmIChzYXZlZFN0YXRlICYmIE9iamVjdC5rZXlzKHNhdmVkU3RhdGUpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLnBhdGNoVmFsdWUoc2F2ZWRTdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucXVlc3Rpb25uYWlyZVZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnF1ZXN0aW9uVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucXVlc3Rpb25WYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMucXVlc3Rpb25uYWlyZVZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmRhdGFDaGFuZ2VkRXZlbnQuZW1pdCgpO1xuICAgICAgdGhpcy51cGRhdGVRdWVzdGlvbm5haXJlKHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFF1ZXN0aW9uICYmIHRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jbGVhckZpZWxkcyh0aGlzLmN1cnJlbnRRdWVzdGlvbi5kYXRhLmNsZWFyZmllbGRzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0xlbmd0aCA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMubWFwKHggPT4geC5xdWVzdGlvbnMubGVuZ3RoKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcblxuICAgIGlmIChvbGRMZW5ndGggIT09IG5ld0xlbmd0aCkge1xuICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBxdWVzdGlvbiBvZiBzZWN0aW9uLnF1ZXN0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5nZXQoW3NlY3Rpb24ubmFtZSwgcXVlc3Rpb24ubmFtZV0pO1xuICAgICAgICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wudmFsdWUgPT09IG51bGwgJiYgcXVlc3Rpb24uZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHF1ZXN0aW9uLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUFkZGl0aW9uYWxEYXRhKHBheWxvYWQ6IGFueSkge1xuICAgIHRoaXMuYWRkaXRpb25hbERhdGEgPSBPYmplY3QuYXNzaWduKHRoaXMuYWRkaXRpb25hbERhdGEsIHBheWxvYWQpO1xuICAgIHRoaXMudXBkYXRlUXVlc3Rpb25uYWlyZSh0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhckFkZGl0aW9uYWxEYXRhKCkge1xuICAgIHRoaXMuYWRkaXRpb25hbERhdGEgPSB7fTtcbiAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9ubmFpcmUodGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLnZhbGlkO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0ZpcnN0UXVlc3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRTZWN0aW9uIHx8ICF0aGlzLmN1cnJlbnRRdWVzdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmN1cnJlbnRTZWN0aW9uLmRhdGEucXVlc3Rpb25zLmluZGV4T2YodGhpcy5jdXJyZW50UXVlc3Rpb24uZGF0YSk7XG4gICAgcmV0dXJuIGN1cnJlbnRJbmRleCA9PT0gMDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNMYXN0UXVlc3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRTZWN0aW9uIHx8ICF0aGlzLmN1cnJlbnRRdWVzdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmN1cnJlbnRTZWN0aW9uLmRhdGEucXVlc3Rpb25zLmluZGV4T2YodGhpcy5jdXJyZW50UXVlc3Rpb24uZGF0YSk7XG4gICAgY29uc3QgbWF4SW5kZXggPSAgdGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhLnF1ZXN0aW9ucy5sZW5ndGggLSAxO1xuICAgIHJldHVybiBjdXJyZW50SW5kZXggPT09IG1heEluZGV4O1xuICB9XG5cbiAgcHVibGljIGdldCBpc0ZpcnN0U2VjdGlvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFNlY3Rpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zLmluZGV4T2YodGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhKTtcbiAgICByZXR1cm4gY3VycmVudEluZGV4ID09PSAwO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0xhc3RTZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jdXJyZW50U2VjdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMuaW5kZXhPZih0aGlzLmN1cnJlbnRTZWN0aW9uLmRhdGEpO1xuICAgIGNvbnN0IG1heEluZGV4ID0gIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gY3VycmVudEluZGV4ID09PSBtYXhJbmRleDtcbiAgfVxuXG4gIHB1YmxpYyBzZWN0aW9uVmFsaWQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChuYW1lKS52YWxpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIHRoZSBmaWVsZHMgcGFyc2VkXG4gICAqIEBwYXJhbSBjbGVhcmZpZWxkcyBBbiBhcnJheSBvZiBzdHJpbmdzLCBwYXRocyB0byBjbGVhci5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgY2xlYXJGaWVsZHMoY2xlYXJmaWVsZHM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBpZiAoIWNsZWFyZmllbGRzIHx8IGNsZWFyZmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2xlYXJmaWVsZCBvZiBjbGVhcmZpZWxkcykge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChjbGVhcmZpZWxkKTtcblxuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgY29udHJvbC5yZXNldCh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbmxvYWRzIHRoZSBjdXJyZW50IHF1ZXN0aW9ubmFpcmUuXG4gICAqIFVzZWZ1bCB3aGVuIGV4aXRpbmcgYSBxdWVzdGlvbm5haXJlIHBhZ2Ugb3IgY29tcGxldGluZyBhIHF1ZXN0aW9ubmFpcmUuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgdW5sb2FkUXVlc3Rpb25uYWlyZSgpIHtcbiAgICB0aGlzLm9yaWdpbmFsUXVlc3Rpb25uYWlyZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY3VycmVudFNlY3Rpb25OYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uTmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFkZGl0aW9uYWxEYXRhID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgc2VjdGlvbi5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNlY3Rpb24gZGF0YSBhbmQgdGhlIHJlbGF0ZWQgZm9ybSBncm91cC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudFNlY3Rpb24oKTogeyBkYXRhOiBTZWN0aW9uOyBmb3JtR3JvdXA6IEZvcm1Hcm91cDsgfSB8IG51bGwge1xuICAgIGlmICghdGhpcy5jdXJyZW50U2VjdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zLmZpbmQoKHgpID0+IHtcbiAgICAgIHJldHVybiB4Lm5hbWUgPT09IHRoaXMuY3VycmVudFNlY3Rpb25OYW1lO1xuICAgIH0pO1xuXG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGZvcm1Hcm91cDogdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0KGRhdGEubmFtZSkgYXMgRm9ybUdyb3VwXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFsbCB0aGUgYXZhaWFsYmxlIHNlY3Rpb25zLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhbGwgYXZhaWFsYmxlIHNlY3Rpb25zLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGdldCBhdmFpbGFibGVTZWN0aW9ucygpOiBBcnJheTxTZWN0aW9uPiB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlIHx8ICF0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgZGF0YSBmb3IgdGhlIGVudGlyZSBxdWVzdGlvbm5haXJlLlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3Qgb2YgZGF0YS5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudERhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtID8gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0UmF3VmFsdWUoKSA6IHt9O1xuICB9XG5cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBzZWxlY3RlZCBxdWVzdGlvbi5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHF1ZXN0aW9uIGRhdGEgYW5kIHRoZSByZWxhdGVkIGZvcm0gY29udHJvbC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudFF1ZXN0aW9uKCk6IHsgZGF0YTogUXVlc3Rpb247IGZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsOyB9IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRRdWVzdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmN1cnJlbnRTZWN0aW9uLmRhdGEucXVlc3Rpb25zLmZpbmQoKHgpID0+IHtcbiAgICAgIHJldHVybiB4Lm5hbWUgPT09IHRoaXMuY3VycmVudFF1ZXN0aW9uTmFtZTtcbiAgICB9KTtcblxuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVnZXhwOiBSZWdFeHAgPSAvKFxce1xceyhbXlxcfV0rKVxcfVxcfSkvZ2k7XG4gICAgbGV0IHBsYWNlaG9sZGVyc0ZvdW5kID0gbnVsbDtcblxuICAgIHdoaWxlICgocGxhY2Vob2xkZXJzRm91bmQgPSByZWdleHAuZXhlYyhkYXRhLnRpdGxlKSkgIT09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUubG9nKHBsYWNlaG9sZGVyc0ZvdW5kWzFdKTtcbiAgICAgIGNvbnN0IHJlcGxhY2VtZW50VmFsdWUgPSB0aGlzLmZpbHRlclNlcnZpY2UuZ2V0VmFsdWVGb3JTdHJpbmcoXG4gICAgICAgIHBsYWNlaG9sZGVyc0ZvdW5kWzFdLFxuICAgICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSxcbiAgICAgICAgdGhpcy5hZGRpdGlvbmFsRGF0YSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKCdyZXBsYWNlIHdpdGggJyArIHJlcGxhY2VtZW50VmFsdWUpO1xuICAgICAgY29uc29sZS5sb2coJ2I0IHRpdGxlOiAnICsgZGF0YS50aXRsZS5yZXBsYWNlKHBsYWNlaG9sZGVyc0ZvdW5kWzFdLCByZXBsYWNlbWVudFZhbHVlKSApO1xuICAgICAgZGF0YS50aXRsZSA9IGRhdGEudGl0bGUucmVwbGFjZSgnL1xce1xceycgKyAgcGxhY2Vob2xkZXJzRm91bmRbMl0gKyAnXFx9XFx9L2dpJywgcmVwbGFjZW1lbnRWYWx1ZSk7XG4gICAgICBjb25zb2xlLmxvZygndGl0bGU6ICcgKyBkYXRhLnRpdGxlKTtcbiAgICB9XG5cblxuICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5jdXJyZW50U2VjdGlvbi5mb3JtR3JvdXAuZ2V0KGRhdGEubmFtZSkgYXMgQWJzdHJhY3RDb250cm9sO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBmb3JtQ29udHJvbDogZm9ybUNvbnRyb2xcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgbmV4dCBxdWVzdGlvbi5cbiAgICogSWYgdGhlcmUgaXMgbm8gcXVlc3Rpb24gdG8gbmF2aWdhdGUgdG8gaXQgd2lsbCByZWplY3Qgd2l0aCBhIG91dCBvZiBib3VuZHMgZXhjZXB0aW9uLlxuICAgKiBJZiBhbGxvd1NraXBSZXF1aXJlZEZpZWxkIGlzIGZhbHNlIHRoZW4gaXQgd2lsbCByZWplY3QgaWYgdGhlIGN1cnJlbnQgcXVlc3Rpb24gaXMgaW52YWxpZC5cbiAgICogSWYgZW1pdFNlY3Rpb25GaW5pc2hFdmVudCBpcyB0cnVlIHRoZW4gaXQgd2lsbCBlbWl0IGFuIGV2ZW50IGlmIGl0J3MgbmF2aWdhdGluZyBwYXN0IHRoZSBsZW5ndGggb2YgcXVlc3Rpb25zLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHdoZW4gdGhlIHF1ZXN0aW9uIGhhcyBiZWVuIG5hdmlnYXRlZCB0by5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBuZXh0UXVlc3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmFsbG93U2tpcFJlcXVpcmVkRmllbGQpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sICYmICF0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbC52YWxpZCkge1xuICAgICAgICAgIHJldHVybiByZWplY3QoJ0N1cnJlbnQgcXVlc3Rpb24gaXMgaW52YWxpZCcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZ2V0Q3VycmVudFF1ZXN0aW9uSW5kZXgoKS50aGVuKChjdXJyZW50SW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbGFzdFF1ZXN0aW9uSW5kZXggPSB0aGlzLmN1cnJlbnRTZWN0aW9uLmRhdGEucXVlc3Rpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IGlzTGFzdFF1ZXN0aW9uID0gbGFzdFF1ZXN0aW9uSW5kZXggPT09IGN1cnJlbnRJbmRleDtcblxuICAgICAgICBpZiAoaXNMYXN0UXVlc3Rpb24pIHtcbiAgICAgICAgICB0aGlzLnNlY3Rpb25GaW5pc2hlZEV2ZW50LmVtaXQoKTtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBjdXJyZW50SW5kZXggKyAxO1xuXG4gICAgICAgIHRoaXMubmF2aWdhdGVUb1F1ZXN0aW9uKG5ld0luZGV4KS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHByZXZpb3VzIHF1ZXN0aW9uLlxuICAgKiBJZiB0aGVyZSBpcyBubyBxdWVzdGlvbiB0byBuYXZpZ2F0ZSB0byBpdCB3aWxsIHJlamVjdCB3aXRoIGEgb3V0IG9mIGJvdW5kcyBleGNlcHRpb24uXG4gICAqIElmIGFsbG93TmF2aWdhdGVCYWNrd2FyZHMgaXMgZmFsc2UgdGhlbiBpdCB3aWxsIHJlamVjdC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHdpbGwgcmVzb2x2ZSB3aGVuIHRoZSBxdWVzdGlvbiBoYXMgYmVlbiBuYXZpZ2F0ZWQgdG8uXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgcHJldlF1ZXN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5hbGxvd05hdmlnYXRlQmFja3dhcmRzKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoJ1RoaXMgcXVlc3Rpb25uYWlyZSBkb2VzIG5vdCBhbGxvdyBmb3IgYmFja3dhcmRzIG5hdmlnYXRpb24nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5nZXRDdXJyZW50UXVlc3Rpb25JbmRleCgpLnRoZW4oKGN1cnJlbnRJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IGN1cnJlbnRJbmRleCAtIDE7XG5cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvUXVlc3Rpb24obmV3SW5kZXgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgcXVlc3Rpb25zIGluZGV4LlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgYSBudW1iZXIuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGdldEN1cnJlbnRRdWVzdGlvbkluZGV4KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuY3VycmVudFNlY3Rpb24uZGF0YS5xdWVzdGlvbnMuaW5kZXhPZih0aGlzLmN1cnJlbnRRdWVzdGlvbi5kYXRhKTtcblxuICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCgnQ291bGQgbm90IGZpbmQgY3VycmVudCBxdWVzdGlvbicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzb2x2ZShjdXJyZW50SW5kZXgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBhIHF1ZXN0aW9uIGlzIGluIGJvdW5kcyB0aGVuIG5hdmlnYXRlcyB0byBpdC5cbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB0byBuYXZpZ2F0ZSB0by5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHdpbGwgcmVzb2x2ZSB3aGVuIHRoZSBxdWVzdGlvbiBoYXMgYmVlbiBuYXZpZ2F0ZWQgdG8uXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgbmF2aWdhdGVUb1F1ZXN0aW9uKGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY3VycmVudFNlY3Rpb24uZGF0YS5xdWVzdGlvbnMubGVuZ3RoIC0gMSA8IGluZGV4IHx8IGluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KCdPdXQgb2YgYm91bmRzIGV4Y2VwdGlvbicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbk5hbWUgPSB0aGlzLmN1cnJlbnRTZWN0aW9uLmRhdGEucXVlc3Rpb25zW2luZGV4XS5uYW1lO1xuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIG5leHQgc2VjdGlvbi5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHdpbGwgcmVzb2x2ZSB3aGVuIHRoZSBzZWN0aW9uIGhhcyBiZWVuIG5hdmlnYXRlZCB0by5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBuZXh0U2VjdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5nZXRDdXJyZW50U2VjdGlvbkluZGV4KCkudGhlbigoY3VycmVudEluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gY3VycmVudEluZGV4ICsgMTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvU2VjdGlvbihuZXdJbmRleCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIHRoZSBwcmV2aW91cyBzZWN0aW9uLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHdoZW4gdGhlIHNlY3Rpb24gaGFzIGJlZW4gbmF2aWdhdGVkIHRvLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIHByZXZTZWN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmdldEN1cnJlbnRTZWN0aW9uSW5kZXgoKS50aGVuKChjdXJyZW50SW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBjdXJyZW50SW5kZXggLSAxO1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG9TZWN0aW9uKG5ld0luZGV4KS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHNlY3Rpb24gaW5kZXguXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyBhIG51bWJlci5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgZ2V0Q3VycmVudFNlY3Rpb25JbmRleCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zLmluZGV4T2YodGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhKTtcblxuICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCgnQ291bGQgbm90IGZpbmQgY3VycmVudCBzZWN0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvbHZlKGN1cnJlbnRJbmRleCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGEgc2VjdGlvbiBpcyBpbiBib3VuZHMgdGhlbiBuYXZpZ2F0ZXMgdG8gaXQuXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggdG8gbmF2aWdhdGUgdG8uXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgd2hlbiB0aGUgc2VjdGlvbiBoYXMgYmVlbiBuYXZpZ2F0ZWQgdG8uXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgbmF2aWdhdGVUb1NlY3Rpb24oaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9ucy5sZW5ndGggLSAxIDwgaW5kZXggfHwgaW5kZXggPCAwKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoJ091dCBvZiBib3VuZHMgZXhjZXB0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY3VycmVudFNlY3Rpb25OYW1lID0gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9uc1tpbmRleF0ubmFtZTtcbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQW5zd2VycyB0aGUgY3VycmVudCBxdWVzdGlvbiB3aXRoIHRoZSBwYXJzZWQgdmFsdWUuXG4gICAqIEBwYXJhbSBhbnN3ZXIgVGhlIHZhbHVlIHRvIGFuc3dlciB0aGUgcXVlc3Rpb24gd2l0aC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBhbnN3ZXJDdXJyZW50UXVlc3Rpb24oYW5zd2VyOiBhbnksIHNlbmRUb05leHRRdWVzdGlvbj86IGJvb2xlYW4pIHtcbiAgICBpZiAoIXNlbmRUb05leHRRdWVzdGlvbikge1xuICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wuc2V0VmFsdWUoYW5zd2VyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5za2lwcGFibGUpIHsgLy8gVGltZW91dCB0byBwcmV2ZW50IHNraXBwaW5nIGdsaXRjaC5cbiAgICAgIHRoaXMuc2tpcHBhYmxlID0gZmFsc2U7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wuc2V0VmFsdWUoYW5zd2VyKTtcbiAgICAgICAgdGhpcy5uZXh0UXVlc3Rpb24oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNraXBwYWJsZSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfSwgMTUwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlcGVhdGVyIGl0ZW0gdG8gdGhlIGN1cnJlbnQgcXVlc3Rpb24uXG4gICAqIEN1cnJlbnQgcXVlc3Rpb24gbXVzdCBiZSBvZiB0eXBlIFJlcGVhdGVyLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2hlbiB0aGUgcmVwZWF0ZXIgaXRlbSBoYXMgYmVlbiBhZGRlZC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBhZGRSZXBlYXRlckl0ZW0oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbi5kYXRhLnR5cGUgIT09IFF1ZXN0aW9uVHlwZS5SZXBlYXRlcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGBDdXJyZW50IHF1ZXN0aW9uIGlzbid0IGEgcmVwZWF0ZXJgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVwZWF0ZXJGb3JtID0gdGhpcy5mb3JtQ29uc3R1Y3Rvci5nZW5lcmF0ZUZvcm1zRm9yUmVwZWF0ZXIodGhpcy5jdXJyZW50UXVlc3Rpb24uZGF0YSk7XG5cbiAgICAgIGlmICghcmVwZWF0ZXJGb3JtKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoYFJlcGVhdGVyIHRlbXBsYXRlIGZhaWxlZCB0byBnZW5lcmF0ZS4gTWF5IGJlIGR1ZSB0byB0aGUgcmVwZWF0ZXIgaGF2aW5nIG5vIGl0ZW1zIGluIHRoZSBlZGl0b3IuYCk7XG4gICAgICB9XG5cblxuICAgICAgaWYgKCEodGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoYFRoZSBjdXJyZW50IHF1ZXN0aW9ucyBjb250cm9sIGlzbid0IG9mIHR5cGUgRm9ybUFycmF5YCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sLnB1c2gocmVwZWF0ZXJGb3JtKTtcbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHJlcGVhdGVyIGl0ZW0gb24gdGhlIGN1cnJlbnQgcXVlc3Rpb24uXG4gICAqIEN1cnJlbnQgcXVlc3Rpb24gbXVzdCBiZSBvZiB0eXBlIFJlcGVhdGVyLlxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IGF0IHdoaWNoIHRvIHJlbW92ZS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdoZW4gdGhlIHJlcGVhdGVyIGl0ZW0gaGFzIGJlZW4gcmVtb3ZlZC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyByZW1vdmVSZXBlYXRlckl0ZW0oaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50UXVlc3Rpb24uZGF0YS50eXBlICE9PSBRdWVzdGlvblR5cGUuUmVwZWF0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChgQ3VycmVudCBxdWVzdGlvbiBpc24ndCBhIHJlcGVhdGVyYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKHRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGBUaGUgY3VycmVudCBxdWVzdGlvbnMgY29udHJvbCBpc24ndCBvZiB0eXBlIEZvcm1BcnJheWApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbC5yZW1vdmVBdChpbmRleCk7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRpc3BsYXkgdGV4dCBmb3IgYSBnaXZlbiByZXBlYXRlciBpdGVtXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggYXQgd2hpY2ggdG8gZ2V0IHRoZSBsYWJlbCBmb3IuXG4gICAqIEByZXR1cm5zIEEgc3RyaW5nIHdoaWNoIGlzIHRoZSBkaXNwbGF5IHRleHQuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgZ2V0UmVwZWF0ZXJJdGVtTGFiZWwoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbCB8fCAhKHRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcGVhdGVySXRlbSA9IHRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sLmNvbnRyb2xzW2luZGV4XTtcblxuICAgIGlmICghcmVwZWF0ZXJJdGVtKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLmN1cnJlbnRRdWVzdGlvbi5kYXRhLnJlcGVhdGVyRGlzcGxheU5hbWU7XG4gICAgY29uc3Qgc3BsaXRUZW1wbGF0ZSA9IHRlbXBsYXRlLnNwbGl0KCcgJyk7XG5cbiAgICBjb25zdCBkaXNwbGF5QXJyYXkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHRlbXBsYXRlSXRlbSBvZiBzcGxpdFRlbXBsYXRlKSB7XG4gICAgICBpZiAodGVtcGxhdGVJdGVtLm1hdGNoKC9cXFsuKj9cXF0vKSkge1xuICAgICAgICBjb25zdCBwYXRoID0gdGVtcGxhdGVJdGVtLnJlcGxhY2UoL1tcXFtcXF0nXSsvZywgJycpO1xuICAgICAgICBjb25zdCBpdGVtID0gcmVwZWF0ZXJJdGVtLmdldChwYXRoKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoaXRlbSAmJiBpdGVtLnZhbHVlID8gaXRlbS52YWx1ZSA6ICc/Jyk7XG4gICAgICAgIGRpc3BsYXlBcnJheS5wdXNoKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BsYXlBcnJheS5wdXNoKHRlbXBsYXRlSXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGlzcGxheSA9IGRpc3BsYXlBcnJheS5qb2luKCcgJyk7XG4gICAgcmV0dXJuIGRpc3BsYXk7XG4gIH1cbn1cbiJdfQ==
487
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2ctcXVlc3Rpb25uYWlyZS12Mi9zcmMvbGliL3NlcnZpY2VzL3F1ZXN0aW9ubmFpcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFcEUsT0FBTyxFQUE4QixTQUFTLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlwRixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7O0FBS2pELE1BQU0sT0FBTyxvQkFBb0I7SUFtQi9CLFlBQ1UsY0FBc0MsRUFDdEMsYUFBNEIsRUFDVCxPQUE2QjtRQUZoRCxtQkFBYyxHQUFkLGNBQWMsQ0FBd0I7UUFDdEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDVCxZQUFPLEdBQVAsT0FBTyxDQUFzQjtRQXJCbkQscUJBQWdCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDOUQseUJBQW9CLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFlakUsY0FBUyxHQUFHLElBQUksQ0FBQztJQU1yQixDQUFDO0lBRUw7Ozs7OztPQU1HO0lBQ0ksaUJBQWlCLENBQUMsYUFBNEIsRUFBRSxVQUFtQixFQUFFLGNBQXVCO1FBQ2pHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FB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QyxDQUFDO1FBRTFDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN4QixLQUFLLE1BQU0sWUFBWSxJQUFJLGFBQWEsRUFBRTtZQUN4QyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ2pDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEQsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMxQjtpQkFBTTtnQkFDTCxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2pDO1NBQ0Y7UUFFRCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Ozs7WUF4a0JGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBZFEsc0JBQXNCO1lBVXRCLGFBQWE7NENBMkJqQixNQUFNLFNBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29uc3RydWN0b3JTZXJ2aWNlIH0gZnJvbSAnLi9mb3JtLWNvbnN0cnVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgUXVlc3Rpb25uYWlyZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlc3Rpb25uYWlyZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNlY3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlY3Rpb24nO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3F1ZXN0aW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUXVlc3Rpb25uYWlyZU9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3F1ZXN0aW9ubmFpcmUtb3B0aW9ucyc7XG5pbXBvcnQgeyBRdWVzdGlvblR5cGUgfSBmcm9tICcuLi9lbnVtcy9xdWVzdGlvbi10eXBlLmVudW0nO1xuXG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9maWx0ZXIuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9ubmFpcmVTZXJ2aWNlIHtcbiAgcHVibGljIGRhdGFDaGFuZ2VkRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHB1YmxpYyBzZWN0aW9uRmluaXNoZWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBwcml2YXRlIG9yaWdpbmFsUXVlc3Rpb25uYWlyZTogUXVlc3Rpb25uYWlyZTtcblxuICBwcml2YXRlIGN1cnJlbnRRdWVzdGlvbm5haXJlOiBRdWVzdGlvbm5haXJlO1xuICBwcml2YXRlIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwO1xuXG4gIHByaXZhdGUgY3VycmVudFNlY3Rpb25OYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgY3VycmVudFF1ZXN0aW9uTmFtZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcXVlc3Rpb25uYWlyZVZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcXVlc3Rpb25WYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHB1YmxpYyBhZGRpdGlvbmFsRGF0YTogT2JqZWN0O1xuXG4gIHByaXZhdGUgc2tpcHBhYmxlID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1Db25zdHVjdG9yOiBGb3JtQ29uc3RydWN0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZSxcbiAgICBASW5qZWN0KCdvcHRpb25zJykgcHJpdmF0ZSBvcHRpb25zOiBRdWVzdGlvbm5haXJlT3B0aW9uc1xuICApIHsgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhIHF1ZXN0aW9ubmFpcmUgZnJvbSBkYXRhLlxuICAgKiBAcGFyYW0gcXVlc3Rpb25uYWlyZSBUaGUgcXVlc3Rpb25uYWlyZSBkYXRhIHRvIGxvYWQsIG9mdGVuIHBhcnNlZCBKU09OIGZyb20gdGhlIGVkaXRvci5cbiAgICogQHBhcmFtIHNhdmVkU3RhdGUgVGhlIHNhdmVkIHN0YXRlIG9mIHRoZSBxdWVzdGlvbm5haXJlLCBvZnRlbiBmcm9tIGxvY2Fsc3RvcmFnZS5cbiAgICogQHJldHVybnMgbnVsbFxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGxvYWRRdWVzdGlvbm5haXJlKHF1ZXN0aW9ubmFpcmU6IFF1ZXN0aW9ubmFpcmUsIHNhdmVkU3RhdGU/OiBPYmplY3QsIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0KSB7XG4gICAgdGhpcy5vcmlnaW5hbFF1ZXN0aW9ubmFpcmUgPSBfLmNsb25lRGVlcChxdWVzdGlvbm5haXJlKTtcbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlID0gXy5jbG9uZURlZXAocXVlc3Rpb25uYWlyZSk7XG5cbiAgICB0aGlzLmFkZGl0aW9uYWxEYXRhID0gYWRkaXRpb25hbERhdGE7XG5cbiAgICBpZiAoc2F2ZWRTdGF0ZSAmJiBPYmplY3Qua2V5cyhzYXZlZFN0YXRlKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBuZXdEYXRhID0gdGhpcy5mb3JtQ29uc3R1Y3Rvci5nZW5lcmF0ZUZvcm1zRm9yUXVlc3Rpb25uYWlyZShcbiAgICAgICAgXy5jbG9uZURlZXAodGhpcy5vcmlnaW5hbFF1ZXN0aW9ubmFpcmUpLFxuICAgICAgICBfLmNsb25lRGVlcCh0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlKSxcbiAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbERhdGEsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG5cbiAgICAgIGlmIChuZXdEYXRhKSB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnN0dWN0b3IuY29uc3RydWN0UmVwZWF0ZXJGcm9tc0Zyb21TdGF0ZShzYXZlZFN0YXRlLCBuZXdEYXRhLnNlY3Rpb25zLCBuZXdEYXRhLmZvcm1zKTtcbiAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gPSBuZXdEYXRhLmZvcm1zO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5wYXRjaFZhbHVlKHNhdmVkU3RhdGUpO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVRdWVzdGlvbm5haXJlKHNhdmVkU3RhdGUpO1xuXG5cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2tpcFRvRmlyc3RTZWN0aW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTZWN0aW9uTmFtZSA9IE9iamVjdC5rZXlzKHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmNvbnRyb2xzKVswXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNraXBUb0ZpcnN0UXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uTmFtZSA9IE9iamVjdC5rZXlzKHRoaXMuY3VycmVudFNlY3Rpb24uZm9ybUdyb3VwLmNvbnRyb2xzKVswXTtcbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjdXJyZW50IHF1ZXN0aW9ubmFpcmUsIHVzZWQgd2hlbiBhIHZhbHVlIGlzIHVwZGF0ZWQgdG8gY2hlY2sgY29uZGl0aW9ucy5cbiAgICogQHBhcmFtIHNhdmVkU3RhdGUgVGhlIHNhdmVkIHN0YXRlIG9mIHRoZSBxdWVzdGlvbm5haXJlLCBvZnRlbiBmcm9tIGxvY2Fsc3RvcmFnZS5cbiAgICogQHJldHVybnMgbnVsbFxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIHVwZGF0ZVF1ZXN0aW9ubmFpcmUoc2F2ZWRTdGF0ZT86IE9iamVjdCkge1xuICAgIGNvbnN0IG9sZExlbmd0aCA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMubWFwKHggPT4geC5xdWVzdGlvbnMubGVuZ3RoKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcblxuICAgIGNvbnN0IG5ld0RhdGEgPSB0aGlzLmZvcm1Db25zdHVjdG9yLmdlbmVyYXRlRm9ybXNGb3JRdWVzdGlvbm5haXJlKFxuICAgICAgXy5jbG9uZURlZXAodGhpcy5vcmlnaW5hbFF1ZXN0aW9ubmFpcmUpLFxuICAgICAgXy5jbG9uZURlZXAodGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZSksXG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSxcbiAgICAgIHRoaXMuYWRkaXRpb25hbERhdGFcbiAgICApO1xuXG4gICAgaWYgKG5ld0RhdGEpIHtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtID0gbmV3RGF0YS5mb3JtcztcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMgPSBuZXdEYXRhLnNlY3Rpb25zO1xuICAgIH1cblxuICAgIGlmIChzYXZlZFN0YXRlICYmIE9iamVjdC5rZXlzKHNhdmVkU3RhdGUpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLnBhdGNoVmFsdWUoc2F2ZWRTdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucXVlc3Rpb25uYWlyZVZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnF1ZXN0aW9uVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucXVlc3Rpb25WYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMucXVlc3Rpb25uYWlyZVZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmRhdGFDaGFuZ2VkRXZlbnQuZW1pdCgpO1xuICAgICAgdGhpcy51cGRhdGVRdWVzdGlvbm5haXJlKHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFF1ZXN0aW9uICYmIHRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jbGVhckZpZWxkcyh0aGlzLmN1cnJlbnRRdWVzdGlvbi5kYXRhLmNsZWFyZmllbGRzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0xlbmd0aCA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMubWFwKHggPT4geC5xdWVzdGlvbnMubGVuZ3RoKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcblxuICAgIGlmIChvbGRMZW5ndGggIT09IG5ld0xlbmd0aCkge1xuICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBxdWVzdGlvbiBvZiBzZWN0aW9uLnF1ZXN0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5nZXQoW3NlY3Rpb24ubmFtZSwgcXVlc3Rpb24ubmFtZV0pO1xuICAgICAgICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wudmFsdWUgPT09IG51bGwgJiYgcXVlc3Rpb24uZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHF1ZXN0aW9uLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUFkZGl0aW9uYWxEYXRhKHBheWxvYWQ6IGFueSkge1xuICAgIHRoaXMuYWRkaXRpb25hbERhdGEgPSBPYmplY3QuYXNzaWduKHRoaXMuYWRkaXRpb25hbERhdGEsIHBheWxvYWQpO1xuICAgIHRoaXMudXBkYXRlUXVlc3Rpb25uYWlyZSh0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhckFkZGl0aW9uYWxEYXRhKCkge1xuICAgIHRoaXMuYWRkaXRpb25hbERhdGEgPSB7fTtcbiAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9ubmFpcmUodGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLnZhbGlkO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0ZpcnN0UXVlc3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRTZWN0aW9uIHx8ICF0aGlzLmN1cnJlbnRRdWVzdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmN1cnJlbnRTZWN0aW9uLmRhdGEucXVlc3Rpb25zLmluZGV4T2YodGhpcy5jdXJyZW50UXVlc3Rpb24uZGF0YSk7XG4gICAgcmV0dXJuIGN1cnJlbnRJbmRleCA9PT0gMDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNMYXN0UXVlc3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRTZWN0aW9uIHx8ICF0aGlzLmN1cnJlbnRRdWVzdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmN1cnJlbnRTZWN0aW9uLmRhdGEucXVlc3Rpb25zLmluZGV4T2YodGhpcy5jdXJyZW50UXVlc3Rpb24uZGF0YSk7XG4gICAgY29uc3QgbWF4SW5kZXggPSAgdGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhLnF1ZXN0aW9ucy5sZW5ndGggLSAxO1xuICAgIHJldHVybiBjdXJyZW50SW5kZXggPT09IG1heEluZGV4O1xuICB9XG5cbiAgcHVibGljIGdldCBpc0ZpcnN0U2VjdGlvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFNlY3Rpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zLmluZGV4T2YodGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhKTtcbiAgICByZXR1cm4gY3VycmVudEluZGV4ID09PSAwO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0xhc3RTZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jdXJyZW50U2VjdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMuaW5kZXhPZih0aGlzLmN1cnJlbnRTZWN0aW9uLmRhdGEpO1xuICAgIGNvbnN0IG1heEluZGV4ID0gIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gY3VycmVudEluZGV4ID09PSBtYXhJbmRleDtcbiAgfVxuXG4gIHB1YmxpYyBzZWN0aW9uVmFsaWQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChuYW1lKS52YWxpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIHRoZSBmaWVsZHMgcGFyc2VkXG4gICAqIEBwYXJhbSBjbGVhcmZpZWxkcyBBbiBhcnJheSBvZiBzdHJpbmdzLCBwYXRocyB0byBjbGVhci5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgY2xlYXJGaWVsZHMoY2xlYXJmaWVsZHM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBpZiAoIWNsZWFyZmllbGRzIHx8IGNsZWFyZmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2xlYXJmaWVsZCBvZiBjbGVhcmZpZWxkcykge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChjbGVhcmZpZWxkKTtcblxuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgY29udHJvbC5yZXNldCh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbmxvYWRzIHRoZSBjdXJyZW50IHF1ZXN0aW9ubmFpcmUuXG4gICAqIFVzZWZ1bCB3aGVuIGV4aXRpbmcgYSBxdWVzdGlvbm5haXJlIHBhZ2Ugb3IgY29tcGxldGluZyBhIHF1ZXN0aW9ubmFpcmUuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgdW5sb2FkUXVlc3Rpb25uYWlyZSgpIHtcbiAgICB0aGlzLm9yaWdpbmFsUXVlc3Rpb25uYWlyZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY3VycmVudFNlY3Rpb25OYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uTmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFkZGl0aW9uYWxEYXRhID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgc2VjdGlvbi5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNlY3Rpb24gZGF0YSBhbmQgdGhlIHJlbGF0ZWQgZm9ybSBncm91cC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudFNlY3Rpb24oKTogeyBkYXRhOiBTZWN0aW9uOyBmb3JtR3JvdXA6IEZvcm1Hcm91cDsgfSB8IG51bGwge1xuICAgIGlmICghdGhpcy5jdXJyZW50U2VjdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zLmZpbmQoKHgpID0+IHtcbiAgICAgIHJldHVybiB4Lm5hbWUgPT09IHRoaXMuY3VycmVudFNlY3Rpb25OYW1lO1xuICAgIH0pO1xuXG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGZvcm1Hcm91cDogdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0KGRhdGEubmFtZSkgYXMgRm9ybUdyb3VwXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFsbCB0aGUgYXZhaWFsYmxlIHNlY3Rpb25zLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhbGwgYXZhaWFsYmxlIHNlY3Rpb25zLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGdldCBhdmFpbGFibGVTZWN0aW9ucygpOiBBcnJheTxTZWN0aW9uPiB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlIHx8ICF0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgZGF0YSBmb3IgdGhlIGVudGlyZSBxdWVzdGlvbm5haXJlLlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3Qgb2YgZGF0YS5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudERhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtID8gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0UmF3VmFsdWUoKSA6IHt9O1xuICB9XG5cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBzZWxlY3RlZCBxdWVzdGlvbi5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHF1ZXN0aW9uIGRhdGEgYW5kIHRoZSByZWxhdGVkIGZvcm0gY29udHJvbC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudFF1ZXN0aW9uKCk6IHsgZGF0YTogUXVlc3Rpb247IGZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsOyB9IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRRdWVzdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmN1cnJlbnRTZWN0aW9uLmRhdGEucXVlc3Rpb25zLmZpbmQoKHgpID0+IHtcbiAgICAgIHJldHVybiB4Lm5hbWUgPT09IHRoaXMuY3VycmVudFF1ZXN0aW9uTmFtZTtcbiAgICB9KTtcblxuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVnZXhwOiBSZWdFeHAgPSAvKFxce1xceyhbXlxcfV0rKVxcfVxcfSkvZ2k7XG4gICAgbGV0IHBsYWNlaG9sZGVyc0ZvdW5kID0gbnVsbDtcblxuICAgIHdoaWxlICgocGxhY2Vob2xkZXJzRm91bmQgPSByZWdleHAuZXhlYyhkYXRhLnRpdGxlKSkgIT09IG51bGwpIHtcblxuICAgICAgY29uc3QgcmVwbGFjZW1lbnRWYWx1ZSA9IHRoaXMuZmlsdGVyU2VydmljZS5nZXRWYWx1ZUZvclN0cmluZyhcbiAgICAgICAgcGxhY2Vob2xkZXJzRm91bmRbMl0sXG4gICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLFxuICAgICAgICB0aGlzLmFkZGl0aW9uYWxEYXRhKTtcblxuICAgICAgY29uc3QgcmVwbGFjZV9yZSA9IG5ldyBSZWdFeHAoJ1xce1xceycgKyBwbGFjZWhvbGRlcnNGb3VuZFsxXSArICdcXH1cXH0nLCAnZycpO1xuICAgICAgZGF0YS50aXRsZSA9IGRhdGEudGl0bGUucmVwbGFjZShyZXBsYWNlX3JlLCByZXBsYWNlbWVudFZhbHVlKTtcbiAgICAgIGNvbnNvbGUubG9nKCd0aXRsZTogJyArIGRhdGEudGl0bGUpO1xuICAgIH1cblxuXG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmN1cnJlbnRTZWN0aW9uLmZvcm1Hcm91cC5nZXQoZGF0YS5uYW1lKSBhcyBBYnN0cmFjdENvbnRyb2w7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGZvcm1Db250cm9sOiBmb3JtQ29udHJvbFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIHRoZSBuZXh0IHF1ZXN0aW9uLlxuICAgKiBJZiB0aGVyZSBpcyBubyBxdWVzdGlvbiB0byBuYXZpZ2F0ZSB0byBpdCB3aWxsIHJlamVjdCB3aXRoIGEgb3V0IG9mIGJvdW5kcyBleGNlcHRpb24uXG4gICAqIElmIGFsbG93U2tpcFJlcXVpcmVkRmllbGQgaXMgZmFsc2UgdGhlbiBpdCB3aWxsIHJlamVjdCBpZiB0aGUgY3VycmVudCBxdWVzdGlvbiBpcyBpbnZhbGlkLlxuICAgKiBJZiBlbWl0U2VjdGlvbkZpbmlzaEV2ZW50IGlzIHRydWUgdGhlbiBpdCB3aWxsIGVtaXQgYW4gZXZlbnQgaWYgaXQncyBuYXZpZ2F0aW5nIHBhc3QgdGhlIGxlbmd0aCBvZiBxdWVzdGlvbnMuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgd2hlbiB0aGUgcXVlc3Rpb24gaGFzIGJlZW4gbmF2aWdhdGVkIHRvLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIG5leHRRdWVzdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuYWxsb3dTa2lwUmVxdWlyZWRGaWVsZCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wgJiYgIXRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sLnZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdCgnQ3VycmVudCBxdWVzdGlvbiBpcyBpbnZhbGlkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5nZXRDdXJyZW50UXVlc3Rpb25JbmRleCgpLnRoZW4oKGN1cnJlbnRJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBsYXN0UXVlc3Rpb25JbmRleCA9IHRoaXMuY3VycmVudFNlY3Rpb24uZGF0YS5xdWVzdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgaXNMYXN0UXVlc3Rpb24gPSBsYXN0UXVlc3Rpb25JbmRleCA9PT0gY3VycmVudEluZGV4O1xuXG4gICAgICAgIGlmIChpc0xhc3RRdWVzdGlvbikge1xuICAgICAgICAgIHRoaXMuc2VjdGlvbkZpbmlzaGVkRXZlbnQuZW1pdCgpO1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdJbmRleCA9IGN1cnJlbnRJbmRleCArIDE7XG5cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvUXVlc3Rpb24obmV3SW5kZXgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgcHJldmlvdXMgcXVlc3Rpb24uXG4gICAqIElmIHRoZXJlIGlzIG5vIHF1ZXN0aW9uIHRvIG5hdmlnYXRlIHRvIGl0IHdpbGwgcmVqZWN0IHdpdGggYSBvdXQgb2YgYm91bmRzIGV4Y2VwdGlvbi5cbiAgICogSWYgYWxsb3dOYXZpZ2F0ZUJhY2t3YXJkcyBpcyBmYWxzZSB0aGVuIGl0IHdpbGwgcmVqZWN0LlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHdoZW4gdGhlIHF1ZXN0aW9uIGhhcyBiZWVuIG5hdmlnYXRlZCB0by5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBwcmV2UXVlc3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmFsbG93TmF2aWdhdGVCYWNrd2FyZHMpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCgnVGhpcyBxdWVzdGlvbm5haXJlIGRvZXMgbm90IGFsbG93IGZvciBiYWNrd2FyZHMgbmF2aWdhdGlvbicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmdldEN1cnJlbnRRdWVzdGlvbkluZGV4KCkudGhlbigoY3VycmVudEluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gY3VycmVudEluZGV4IC0gMTtcblxuICAgICAgICB0aGlzLm5hdmlnYXRlVG9RdWVzdGlvbihuZXdJbmRleCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBxdWVzdGlvbnMgaW5kZXguXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyBhIG51bWJlci5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgZ2V0Q3VycmVudFF1ZXN0aW9uSW5kZXgoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhLnF1ZXN0aW9ucy5pbmRleE9mKHRoaXMuY3VycmVudFF1ZXN0aW9uLmRhdGEpO1xuXG4gICAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KCdDb3VsZCBub3QgZmluZCBjdXJyZW50IHF1ZXN0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvbHZlKGN1cnJlbnRJbmRleCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGEgcXVlc3Rpb24gaXMgaW4gYm91bmRzIHRoZW4gbmF2aWdhdGVzIHRvIGl0LlxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IHRvIG5hdmlnYXRlIHRvLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHdoZW4gdGhlIHF1ZXN0aW9uIGhhcyBiZWVuIG5hdmlnYXRlZCB0by5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBuYXZpZ2F0ZVRvUXVlc3Rpb24oaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhLnF1ZXN0aW9ucy5sZW5ndGggLSAxIDwgaW5kZXggfHwgaW5kZXggPCAwKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoJ091dCBvZiBib3VuZHMgZXhjZXB0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uTmFtZSA9IHRoaXMuY3VycmVudFNlY3Rpb24uZGF0YS5xdWVzdGlvbnNbaW5kZXhdLm5hbWU7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgbmV4dCBzZWN0aW9uLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHdoZW4gdGhlIHNlY3Rpb24gaGFzIGJlZW4gbmF2aWdhdGVkIHRvLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIG5leHRTZWN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmdldEN1cnJlbnRTZWN0aW9uSW5kZXgoKS50aGVuKChjdXJyZW50SW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBjdXJyZW50SW5kZXggKyAxO1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG9TZWN0aW9uKG5ld0luZGV4KS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHByZXZpb3VzIHNlY3Rpb24uXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgd2hlbiB0aGUgc2VjdGlvbiBoYXMgYmVlbiBuYXZpZ2F0ZWQgdG8uXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgcHJldlNlY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZ2V0Q3VycmVudFNlY3Rpb25JbmRleCgpLnRoZW4oKGN1cnJlbnRJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IGN1cnJlbnRJbmRleCAtIDE7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUb1NlY3Rpb24obmV3SW5kZXgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2VjdGlvbiBpbmRleC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIGEgbnVtYmVyLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDdXJyZW50U2VjdGlvbkluZGV4KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMuaW5kZXhPZih0aGlzLmN1cnJlbnRTZWN0aW9uLmRhdGEpO1xuXG4gICAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KCdDb3VsZCBub3QgZmluZCBjdXJyZW50IHNlY3Rpb24nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc29sdmUoY3VycmVudEluZGV4KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgYSBzZWN0aW9uIGlzIGluIGJvdW5kcyB0aGVuIG5hdmlnYXRlcyB0byBpdC5cbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB0byBuYXZpZ2F0ZSB0by5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHdpbGwgcmVzb2x2ZSB3aGVuIHRoZSBzZWN0aW9uIGhhcyBiZWVuIG5hdmlnYXRlZCB0by5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBuYXZpZ2F0ZVRvU2VjdGlvbihpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zLmxlbmd0aCAtIDEgPCBpbmRleCB8fCBpbmRleCA8IDApIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCgnT3V0IG9mIGJvdW5kcyBleGNlcHRpb24nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdXJyZW50U2VjdGlvbk5hbWUgPSB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zW2luZGV4XS5uYW1lO1xuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbnN3ZXJzIHRoZSBjdXJyZW50IHF1ZXN0aW9uIHdpdGggdGhlIHBhcnNlZCB2YWx1ZS5cbiAgICogQHBhcmFtIGFuc3dlciBUaGUgdmFsdWUgdG8gYW5zd2VyIHRoZSBxdWVzdGlvbiB3aXRoLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGFuc3dlckN1cnJlbnRRdWVzdGlvbihhbnN3ZXI6IGFueSwgc2VuZFRvTmV4dFF1ZXN0aW9uPzogYm9vbGVhbikge1xuICAgIGlmICghc2VuZFRvTmV4dFF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbC5zZXRWYWx1ZShhbnN3ZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNraXBwYWJsZSkgeyAvLyBUaW1lb3V0IHRvIHByZXZlbnQgc2tpcHBpbmcgZ2xpdGNoLlxuICAgICAgdGhpcy5za2lwcGFibGUgPSBmYWxzZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbC5zZXRWYWx1ZShhbnN3ZXIpO1xuICAgICAgICB0aGlzLm5leHRRdWVzdGlvbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2tpcHBhYmxlID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9LCAxNTApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVwZWF0ZXIgaXRlbSB0byB0aGUgY3VycmVudCBxdWVzdGlvbi5cbiAgICogQ3VycmVudCBxdWVzdGlvbiBtdXN0IGJlIG9mIHR5cGUgUmVwZWF0ZXIuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aGVuIHRoZSByZXBlYXRlciBpdGVtIGhhcyBiZWVuIGFkZGVkLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGFkZFJlcGVhdGVySXRlbSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY3VycmVudFF1ZXN0aW9uLmRhdGEudHlwZSAhPT0gUXVlc3Rpb25UeXBlLlJlcGVhdGVyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoYEN1cnJlbnQgcXVlc3Rpb24gaXNuJ3QgYSByZXBlYXRlcmApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXBlYXRlckZvcm0gPSB0aGlzLmZvcm1Db25zdHVjdG9yLmdlbmVyYXRlRm9ybXNGb3JSZXBlYXRlcih0aGlzLmN1cnJlbnRRdWVzdGlvbi5kYXRhKTtcblxuICAgICAgaWYgKCFyZXBlYXRlckZvcm0pIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChgUmVwZWF0ZXIgdGVtcGxhdGUgZmFpbGVkIHRvIGdlbmVyYXRlLiBNYXkgYmUgZHVlIHRvIHRoZSByZXBlYXRlciBoYXZpbmcgbm8gaXRlbXMgaW4gdGhlIGVkaXRvci5gKTtcbiAgICAgIH1cblxuXG4gICAgICBpZiAoISh0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChgVGhlIGN1cnJlbnQgcXVlc3Rpb25zIGNvbnRyb2wgaXNuJ3Qgb2YgdHlwZSBGb3JtQXJyYXlgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wucHVzaChyZXBlYXRlckZvcm0pO1xuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcmVwZWF0ZXIgaXRlbSBvbiB0aGUgY3VycmVudCBxdWVzdGlvbi5cbiAgICogQ3VycmVudCBxdWVzdGlvbiBtdXN0IGJlIG9mIHR5cGUgUmVwZWF0ZXIuXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggYXQgd2hpY2ggdG8gcmVtb3ZlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2hlbiB0aGUgcmVwZWF0ZXIgaXRlbSBoYXMgYmVlbiByZW1vdmVkLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIHJlbW92ZVJlcGVhdGVySXRlbShpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbi5kYXRhLnR5cGUgIT09IFF1ZXN0aW9uVHlwZS5SZXBlYXRlcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGBDdXJyZW50IHF1ZXN0aW9uIGlzbid0IGEgcmVwZWF0ZXJgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEodGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoYFRoZSBjdXJyZW50IHF1ZXN0aW9ucyBjb250cm9sIGlzbid0IG9mIHR5cGUgRm9ybUFycmF5YCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sLnJlbW92ZUF0KGluZGV4KTtcbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZGlzcGxheSB0ZXh0IGZvciBhIGdpdmVuIHJlcGVhdGVyIGl0ZW1cbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBhdCB3aGljaCB0byBnZXQgdGhlIGxhYmVsIGZvci5cbiAgICogQHJldHVybnMgQSBzdHJpbmcgd2hpY2ggaXMgdGhlIGRpc3BsYXkgdGV4dC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZXRSZXBlYXRlckl0ZW1MYWJlbChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sIHx8ICEodGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgcmVwZWF0ZXJJdGVtID0gdGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wuY29udHJvbHNbaW5kZXhdO1xuXG4gICAgaWYgKCFyZXBlYXRlckl0ZW0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuY3VycmVudFF1ZXN0aW9uLmRhdGEucmVwZWF0ZXJEaXNwbGF5TmFtZTtcbiAgICBjb25zdCBzcGxpdFRlbXBsYXRlID0gdGVtcGxhdGUuc3BsaXQoJyAnKTtcblxuICAgIGNvbnN0IGRpc3BsYXlBcnJheSA9IFtdO1xuICAgIGZvciAoY29uc3QgdGVtcGxhdGVJdGVtIG9mIHNwbGl0VGVtcGxhdGUpIHtcbiAgICAgIGlmICh0ZW1wbGF0ZUl0ZW0ubWF0Y2goL1xcWy4qP1xcXS8pKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSB0ZW1wbGF0ZUl0ZW0ucmVwbGFjZSgvW1xcW1xcXSddKy9nLCAnJyk7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSByZXBlYXRlckl0ZW0uZ2V0KHBhdGgpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChpdGVtICYmIGl0ZW0udmFsdWUgPyBpdGVtLnZhbHVlIDogJz8nKTtcbiAgICAgICAgZGlzcGxheUFycmF5LnB1c2godmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGxheUFycmF5LnB1c2godGVtcGxhdGVJdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkaXNwbGF5ID0gZGlzcGxheUFycmF5LmpvaW4oJyAnKTtcbiAgICByZXR1cm4gZGlzcGxheTtcbiAgfVxufVxuIl19
@@ -749,11 +749,9 @@ class QuestionnaireService {
749
749
  const regexp = /(\{\{([^\}]+)\}\})/gi;
750
750
  let placeholdersFound = null;
751
751
  while ((placeholdersFound = regexp.exec(data.title)) !== null) {
752
- console.log(placeholdersFound[1]);
753
- const replacementValue = this.filterService.getValueForString(placeholdersFound[1], this.currentQuestionnaireForm, this.additionalData);
754
- console.log('replace with ' + replacementValue);
755
- console.log('b4 title: ' + data.title.replace(placeholdersFound[1], replacementValue));
756
- data.title = data.title.replace('/\{\{' + placeholdersFound[2] + '\}\}/gi', replacementValue);
752
+ const replacementValue = this.filterService.getValueForString(placeholdersFound[2], this.currentQuestionnaireForm, this.additionalData);
753
+ const replace_re = new RegExp('\{\{' + placeholdersFound[1] + '\}\}', 'g');
754
+ data.title = data.title.replace(replace_re, replacementValue);
757
755
  console.log('title: ' + data.title);
758
756
  }
759
757
  const formControl = this.currentSection.formGroup.get(data.name);