@reusa/ngx-reusa-app-lib 0.0.1304 → 0.0.1307

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.
@@ -286,6 +286,9 @@ export class AppValidators {
286
286
  isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, null)
287
287
  && AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, null);
288
288
  }
289
+ else if (expression) {
290
+ isRequired = AppValidators.calculateOperandValueForRequiredIf(expression.trim(), formGroup, element, null);
291
+ }
289
292
  if (isRequired) {
290
293
  if (currentFormControl.value === " ") {
291
294
  currentFormControl.setErrors({ wcRequired: true });
@@ -574,10 +577,10 @@ export class AppValidators {
574
577
  if (valueOfCnrtrlToCheck && !Array.isArray(valueOfCnrtrlToCheck)) {
575
578
  valueOfCnrtrlToCheck = valueOfCnrtrlToCheck.trim();
576
579
  }
577
- if (operand2 === 'null' && isDoesNotEqual && valueOfCnrtrlToCheck && !valueOfActualControl) {
580
+ if (operand2 === 'null' && isDoesNotEqual && valueOfCnrtrlToCheck && !valueOfActualControl?.toString().trim()) {
578
581
  return true;
579
582
  }
580
- if (operand2 === 'null' && !isDoesNotEqual && valueOfCnrtrlToCheck && valueOfActualControl) {
583
+ if (operand2 === 'null' && !isDoesNotEqual && valueOfCnrtrlToCheck && valueOfActualControl?.toString().trim()) {
581
584
  return true;
582
585
  }
583
586
  operand2 = operand2.replace(/\'/g, ""); //null
@@ -587,10 +590,10 @@ export class AppValidators {
587
590
  if (isContains && (valueOfCnrtrlToCheck && !Array.isArray(valueOfCnrtrlToCheck) && valueOfCnrtrlToCheck.includes(operand2)) && this.isNullOrUndefined(formGroup.controls[element?.name]?.value)) {
588
591
  return true;
589
592
  }
590
- if (operand2 != 'null' && !isDoesNotEqual && valueOfCnrtrlToCheck === operand2 && !valueOfActualControl && formGroup.controls[element?.name]) {
593
+ if (operand2 != 'null' && !isDoesNotEqual && valueOfCnrtrlToCheck === operand2 && !valueOfActualControl?.toString().trim() && formGroup.controls[element?.name]) {
591
594
  return true;
592
595
  }
593
- if (operand2 != 'null' && isDoesNotEqual && valueOfCnrtrlToCheck != operand2 && !valueOfActualControl) {
596
+ if (operand2 != 'null' && isDoesNotEqual && valueOfCnrtrlToCheck != operand2 && !valueOfActualControl?.toString().trim()) {
594
597
  return true;
595
598
  }
596
599
  return false;
@@ -784,4 +787,4 @@ export class AppValidators {
784
787
  return false;
785
788
  }
786
789
  }
787
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwVmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXVzYS1hcHAtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbm5haXJlL0FwcFZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0EsTUFBTSxPQUFPLGFBQWE7SUFJdEIsV0FBVztJQUNYLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFZLEVBQUUsVUFBMkIsRUFBRSxTQUFpQjtRQUNoRixJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsb0JBQW9CLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUEyQixFQUFFLEVBQUU7WUFDekMsSUFBSSxjQUFjLEtBQUssMEJBQTBCLEVBQUU7Z0JBQy9DLElBQUksR0FBNkIsQ0FBQztnQkFDbEMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtvQkFDN0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDN0MsSUFBSSxHQUFHLEVBQUU7d0JBQ0wsSUFBSSxTQUF5QyxDQUFDO3dCQUM5QyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQzt3QkFDMUI7Ozs7OzsyQkFNRzt3QkFDSCxLQUFLLElBQUksS0FBSyxJQUFJLFNBQVMsRUFBRTs0QkFDekIsSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLEdBQUc7bUNBQ3JELENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsRUFBRTtnQ0FDN0YsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEVB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Q0FBQyxFQUFFO1lBQ3pILE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxvQkFBb0IsS0FBSyxRQUFRLENBQUMsRUFBRTtZQUN0RyxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxRQUFRLElBQUksTUFBTSxJQUFJLGNBQWMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLG9CQUFvQixDQUFDLElBQUksRUFBRSxJQUFJLFFBQVEsQ0FBQyxFQUFFO1lBQzNHLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBZGRyZXNzQ29tcG9uZW50TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvQWRkcmVzc0NvbXBvbmVudE1vZGVsJztcclxuaW1wb3J0IHsgQmFua0RldGFpbHNDb21wb25lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9CYW5rRGV0YWlsc0NvbXBvbmVudE1vZGVsJztcclxuaW1wb3J0IHsgQ2xhaW1BcHBFbXBsb3llckRldGFpbHNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0NsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWwnO1xyXG5pbXBvcnQgeyBDbGFpbUFwcEVtcFJlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9DbGFpbUFwcEVtcFJlc3BvbnNlTW9kZWwnO1xyXG5pbXBvcnQgeyBFbGVtZW50c01vZGVsLCBWYWxpZGF0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9FbGVtZW50c01vZGVsJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWVzdGlvbm5haXJlL3ZhbGlkYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEVtcGxveWVySW5mb01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0VtcGxveWVyRGV0YWlsU2VhcmNoUmVzdWx0JztcclxuaW1wb3J0IHsgRGVwZW5kZW50TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGVwZW5kZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgRW1wbG95ZXJQYXlJbmZvTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvRW1wbG95ZXJQYXlJbmZvTW9kZWwnO1xyXG5pbXBvcnQgeyBQYXltZW50Q29tcG9uZW50TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvUGF5bWVudENvbXBvbmVudE1vZGVsJztcclxuaW1wb3J0IHsgQXV0b2NvZGVyTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9BdXRvY29kZXJNb2RlbCc7XHJcbmltcG9ydCB7IEdyb3NzRWFybmluZ3NNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9Hcm9zc0Vhcm5pbmdzTW9kZWwnO1xyXG5leHBvcnQgY2xhc3MgQXBwVmFsaWRhdG9ycyB7XHJcblxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIGN1c3RvbVZhbGlkYXRpb24oZWxlbWVudDogYW55LCB2YWxpZGF0aW9uOiBWYWxpZGF0aW9uTW9kZWwsIHN0YXRlTmFtZTogc3RyaW5nLCk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBsZXQgdmFsaWRhdGlvbk5hbWUgPSB2YWxpZGF0aW9uLmN1c3RvbVZhbGlkYXRpb25OYW1lO1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJiYXNlUGVyaW9kRW1wbFZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbDogQ2xhaW1BcHBFbXBSZXNwb25zZU1vZGVsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubmFtZSA9PT0gJ3ByZXZ3b3JrJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJwRW1wTGlzdDogQ2xhaW1BcHBFbXBsb3llckRldGFpbHNNb2RlbFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicEVtcExpc3QgPSB2YWwuYnBFbXBMaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvKmlmIChmb3JtR3JvdXAuY29udHJvbHNbJ3Bhc3RlbXAnXSAvLyYmIGZvcm1Hcm91cC5jb250cm9sc1snd29ya2ZvcmVtcCddLnZhbHVlID09PSAnWSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGJwRW1wTGlzdC5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBicEVtcGxyTGVuZ3RoRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGJwRW1wbHJMZW5ndGhGbGFnOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBicEVtcCBvZiBicEVtcExpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicEVtcC5icEVtcGxveWVyRmxhZyA9PT0gJzEnICYmIGJwRW1wLmVtcERlbGV0ZWQgPT09ICdOJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChicEVtcC5zdGFydERhdGUgPT09IG51bGwgJiYgYnBFbXAuc3RhcnREYXRlRmVkID09PSBudWxsICYmIGJwRW1wLnN0YXJ0RGF0ZU1pbCA9PT0gbnVsbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBicEVtcGxyRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBicEVtcGxyRmxhZzogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwic2ltcGxlQ2hlY2tCb3hWYWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgc2ltcGxlQ2hlY2tCb3hWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcImNwYXRjaHZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBjcGF0Y2h2YWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcInVwbG9hZHZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSB8fCAoQXJyYXkuaXNBcnJheShmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkgJiYgIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgdXBsb2FkdmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJhZGRyZXNzVmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYWRkcmVzc0NvbXBWYWx1ZTogQWRkcmVzc0NvbXBvbmVudE1vZGVsO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnJlcXVpcmVkSWYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBlbGVtZW50LnJlcXVpcmVkSWY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzcGxpdEFycmF5ID0gZXhwcmVzc2lvbi5zcGxpdCgnPT0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRvbE5hbWU6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF0ucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlOiBzdHJpbmcgPSBzcGxpdEFycmF5WzFdLnJlcGxhY2UoLycvZywgJycpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0gJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0udmFsdWUudHJpbSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ1knICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID09PSAnTicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RXJyb3JzID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uZXJyb3JzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50RXJyb3JzWydhZGRyZXNzVmFsaWRhdGlvbkZsYWcnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGN1cnJlbnRFcnJvcnMpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKGN1cnJlbnRFcnJvcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3NDb21wVmFsdWUgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzc0NvbXBWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFkZHJlc3NDb21wVmFsdWUuY2l0eSB8fCAhYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWFkZHJlc3NDb21wVmFsdWVbJ3ppcCddIHx8ICFhZGRyZXNzQ29tcFZhbHVlLmNvdW50cnkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFhZGRyZXNzQ29tcFZhbHVlWydzdHJlZXRBZGRyZXNzJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChhZGRyZXNzQ29tcFZhbHVlWyduZWlnaGJvclN0YXRlQ2hlY2tSZXF1aXJlZCddPT09J1knICYmICFhZGRyZXNzQ29tcFZhbHVlWyduZWlnaGJvdXJGbGFnJ10pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5uYW1lID09PSAnbWFpbEFkZHJlc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzQ29tcFZhbHVlLnN0YXRlICYmIGFkZHJlc3NDb21wVmFsdWUuc3RhdGUudmFsdWUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZS52YWx1ZSA9PT0gJ01TJyAmJiBzdGF0ZU5hbWUgPT09ICdNUycpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUudmFsdWUgPT09ICdDVCcgJiYgc3RhdGVOYW1lID09PSAnQ1QnKSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY291bnR5UmVxdWlyZWQgPT09IHRydWUgJiYgIWFkZHJlc3NDb21wVmFsdWVbJ2NvdW50eSddKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYWRkcmVzc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZSAmJiBhZGRyZXNzQ29tcFZhbHVlLnN0YXRlLnZhbHVlID09PSAnTUUnICYmIHN0YXRlTmFtZSA9PT0gJ01FJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb3VudHlSZXF1aXJlZCA9PT0gdHJ1ZSAmJiAhYWRkcmVzc0NvbXBWYWx1ZVsndG93biddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBlbGVtZW50LnJlcXVpcmVkSWY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udG9sTmFtZTogc3RyaW5nID0gc3BsaXRBcnJheVswXS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlOiBzdHJpbmcgPSBzcGxpdEFycmF5WzFdLnJlcGxhY2UoLycvZywgJycpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdICYmIGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXS52YWx1ZS50cmltKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ1knICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID09PSAnTicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVycm9ycyA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLmVycm9ycztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRFcnJvcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50RXJyb3JzWydhZGRyZXNzVmFsaWRhdGlvbkZsYWcnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhjdXJyZW50RXJyb3JzKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhjdXJyZW50RXJyb3JzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVPZkNucnRybFRvQ2hlY2sgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGFkZHJlc3NWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiYmFua0RldGFpbHNWYWxpZGF0aW9uRmxhZ1wiKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGJhbmtEZXRhaWxzQ29tcG9uZW50VmFsOiBCYW5rRGV0YWlsc0NvbXBvbmVudE1vZGVsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFua0RldGFpbHNDb21wb25lbnRWYWwgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250b2xOYW1lOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWU6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRvbE5hbWUgPSBjb250b2xOYW1lLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnXFwnJywgJycpLnJlcGxhY2UoJ1xcJycsICcnKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0gJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0udmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYW5rRGV0YWlsc0NvbXBvbmVudFZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLmFjY291bnROdW1iZXIgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLmFjY291bnRUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhYmFua0RldGFpbHNDb21wb25lbnRWYWwubmFtZU9uQWNjb3VudCB8fCAhYmFua0RldGFpbHNDb21wb25lbnRWYWwucmVFbnRlckFjY291bnROdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFiYW5rRGV0YWlsc0NvbXBvbmVudFZhbC5yb3V0aW5nTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBiYW5rRGV0YWlsc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJqb2JUaWxlVmFsaWRhdGlvbkZsYWdcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGpvYlRpdGxlRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJhdExlYXN0T25lXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50Rm9ybUNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnJiYnKSAmJiAhZXhwcmVzc2lvbi5pbmNsdWRlcygnfHwnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHI6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdCgnJiYnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsxXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByOiBzdHJpbmdbXSA9IGV4cHJlc3Npb24uc3BsaXQoJ3x8Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZHM6IHN0cmluZ1tdID0gdmFsaWRhdGlvbi5leHByZXNzaW9uLnNwbGl0KFwiLFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0Rm9ybUNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZmllbGRzWzBdLnRyaW0oKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWNvbmRGb3JtQ09udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1tmaWVsZHNbMV0udHJpbSgpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRGb3JtQ29udHJvbC52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKGZpcnN0Rm9ybUNvbnRyb2wudmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc051bGxPclVuZGVmaW5lZChzZWNvbmRGb3JtQ09udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKHsgYXRMZWFzdE9uZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEZvcm1Db250cm9sLnNldEVycm9ycyh7IGF0TGVhc3RPbmU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kRm9ybUNPbnRyb2wuc2V0RXJyb3JzKHsgYXRMZWFzdE9uZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm1Db250cm9sLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEZvcm1Db250cm9sLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRGb3JtQ09udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRGb3JtQ29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm1Db250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc051bGxPclVuZGVmaW5lZChmaXJzdEZvcm1Db250cm9sLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEZvcm1Db250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc051bGxPclVuZGVmaW5lZChzZWNvbmRGb3JtQ09udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kRm9ybUNPbnRyb2wuc2V0VmFsdWUoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGb3JtQ29udHJvbC52YWx1ZSA9PT0gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGZpcnN0Rm9ybUNvbnRyb2wudmFsdWUgPT09IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzZWNvbmRGb3JtQ09udHJvbC52YWx1ZSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtQ29udHJvbC5zZXRFcnJvcnMoeyBhdExlYXN0T25lOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKHsgYXRMZWFzdE9uZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRGb3JtQ09udHJvbC5zZXRFcnJvcnMoeyBhdExlYXN0T25lOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcImlzR3JlYXRlckRhdGVcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyaXNvbiB3aXRoIHJlZmVyZW5jZURhdGUgd2UgY2FuIGFkZCBjb250cm9scyBsaWtlIElmIEJsb2NrIDI1MyBTZXQgVmFsdWVzLCBhcHBlYWxDb25zaWRlcmVkTGF0ZURhdGUgdXNlZCBpbiBRRV9GSUxFX0FQUEVBTCBmb3IgTUVcclxuICAgICAgICAgICAgICAgIGlmKGZvcm1Hcm91cC5jb250cm9sc1snYXBwZWFsQ29uc2lkZXJlZExhdGVEYXRlJ10udmFsdWUgIT0gbnVsbCAmJiBmb3JtR3JvdXAuY29udHJvbHNbJ2N1cnJlbnREYXRlJ10udmFsdWUgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcHBlYWxMYXRlRGF0ZSA9IGZvcm1Hcm91cC5jb250cm9sc1snYXBwZWFsQ29uc2lkZXJlZExhdGVEYXRlJ10udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50RGF0ZSA9IGZvcm1Hcm91cC5jb250cm9sc1snY3VycmVudERhdGUnXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYobmV3IERhdGUoY3VycmVudERhdGUucmVwbGFjZSggLyhcXGR7Mn0pLShcXGR7Mn0pLShcXGR7NH0pLywgXCIkMi8kMS8kM1wiKSkgPj0gbmV3IERhdGUoYXBwZWFsTGF0ZURhdGUucmVwbGFjZSggLyhcXGR7Mn0pLShcXGR7Mn0pLShcXGR7NH0pLywgXCIkMi8kMS8kM1wiKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ2xhdGVBcHBlYWwnKS5zZXRWYWx1ZSgnWScsIHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcIm5vdEVxdWFsc1wiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkczogc3RyaW5nW10gPSB2YWxpZGF0aW9uLmV4cHJlc3Npb24uc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbCA9IGN1cnJlbnRGb3JtQ29udHJvbC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3RoZXJGaWVsZEZvcm1Db250cm9sTmFtZSA9IGZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC50cmltKCldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3RoZXJGaWVsZFZhbHVlID0gb3RoZXJGaWVsZEZvcm1Db250cm9sTmFtZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCAmJiBvdGhlckZpZWxkVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgodmFsLnZhbHVlICYmIG90aGVyRmllbGRWYWx1ZS52YWx1ZSAmJiB2YWwudmFsdWUgPT09IG90aGVyRmllbGRWYWx1ZS52YWx1ZSkgfHwgdmFsID09PSBvdGhlckZpZWxkVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlckZpZWxkRm9ybUNvbnRyb2xOYW1lLnNldEVycm9ycyh7IG5vdEVxdWFsczogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudEZvcm1Db250cm9sLmVycm9ycyAmJiB2YWwgJiYgb3RoZXJGaWVsZFZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCh2YWwudmFsdWUgJiYgb3RoZXJGaWVsZFZhbHVlLnZhbHVlICYmIHZhbC52YWx1ZSAhPSBvdGhlckZpZWxkVmFsdWUudmFsdWUpIHx8IHZhbCAhPSBvdGhlckZpZWxkVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlczogU2V0PGFueT4gPSB0aGlzLmdldE90aGVyRm9ybUZpZWxkc1ZhbHVlcyhmaWVsZHMsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlcy5zaXplID09IGZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJGaWVsZEZvcm1Db250cm9sTmFtZS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQ3VzdG9tIFZhbGlkYXRpb24gZm9yIHdlZWtsaWVzIFBhZ2Ugc2luY2UgdGhlcmUgYXJlIGVtcHR5IHN0cmluZ3MgcGFzc2VkXHJcbiAgICAgICAgICAgIC8vIHdoaWxlIGxvYWRpbmcgdGhlIG1vZGVsIHRvIHByZXZlbnQgbnVsbCBwb2ludGVyIGV4Y2VwdGlvbiBpbiBEVUEgXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcIndjQ29tbW9uVmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZWxlbWVudC5uYW1lPT09J3dvcmtQZXJmb3JtZWQnIHx8IGVsZW1lbnQubmFtZT09PSdhdmFpbGFibGUnKXsgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihlbGVtZW50LnJlcXVpcmVkSWYpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBlbGVtZW50LnJlcXVpcmVkSWY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcjogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KCcmJicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvcm1Db250cm9sLnZhbHVlID09PSBcIiBcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKHsgd2NSZXF1aXJlZDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYoZWxlbWVudC5uYW1lIT0nd29ya1BlcmZvcm1lZCcgfHwgZWxlbWVudC5uYW1lICE9J2F2YWlsYWJsZScpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvcm1Db250cm9sLnZhbHVlID09PSBcIiBcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtQ29udHJvbC5zZXRFcnJvcnMoeyB3Y1JlcXVpcmVkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJ3Y0VtcGxveWVyVmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW1wTW9kZWxzOiBFbXBsb3llckluZm9Nb2RlbFtdID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVtcE1vZGVscykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBub25Db21wbGV0ZWRFbXBzID0gZW1wTW9kZWxzLmZpbHRlcihlID0+ICFlLmlzUGFydFRpbWVFbXBsb3llckVkaXRlZCAmJiBlLmlzUGFydFRpbWVFbXBsb3llcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vbkNvbXBsZXRlZEVtcHMgJiYgbm9uQ29tcGxldGVkRW1wcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHdjRW1wbG95ZXJWYWxpZGF0aW9uOiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzUGFydGlhbENsYWltRW1wbG95bWVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByOiBzdHJpbmdbXSA9IGV4cHJlc3Npb24uc3BsaXQoJyYmJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHI6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdCgnfHwnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRhcmdldCA9IFwiaGlkUGFydGlhbENsYWltRW1wbG95bWVudEZsYWdcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gZXhwci5maW5kSW5kZXgoZSA9PiBlLmluY2x1ZGVzKHRhcmdldCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQYXJ0aWFsQ2xhaW1FbXBsb3ltZW50ID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbaW5kZXhdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGlzUGFydGlhbENsYWltRW1wbG95bWVudCA9PSBmYWxzZSkgfHwgKGluZGV4IDwgMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsxXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID49IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsyXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHByLmxlbmd0aCA+PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbM10udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPT0gNSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzRdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID4gNSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFwiQXBwVmFsaWRhdG9ycyA6IE1vcmUgdGhhbiA1ICcmJicgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGFydGlhbENsYWltRW1wbG95bWVudCAmJiAhZW1wTW9kZWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbJ2hpZENzckZpcnN0UGFzcyddLnZhbHVlID09ICdZJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgd2NQYXJ0aWFsQ2xhaW1FbXBsb3ltZW50OiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVxdWlyZWQgJiYgIWVtcE1vZGVscykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyB3Y0VtcGxveWVyUmVxdWlyZWQ6IHRydWUgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwid2NEZXBlbmRlbnRSZXF1aXJlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGVwZW5kZW50TW9kZWxzOiBEZXBlbmRlbnRNb2RlbFtdID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHI6IHN0cmluZyA9IGV4cHJlc3Npb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwciwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVxdWlyZWQgJiYgIWRlcGVuZGVudE1vZGVscykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyB3Y0RlcGVuZGVudFJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcInJlbXVuZXJhdGlvblBheW1lbnRJbmZvUmVxdWlyZWRcIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBheW1lbnRDb21wb25lbnRNb2RlbHM6IFBheW1lbnRDb21wb25lbnRNb2RlbFtdID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWU/LnBheUZvcm1FbGVtZW50cztcclxuICAgICAgICAgICAgICAgIGlmIChwYXltZW50Q29tcG9uZW50TW9kZWxzICE9IG51bGwgJiYgcGF5bWVudENvbXBvbmVudE1vZGVscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXltZW50Q29tcG9uZW50TW9kZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IHBheW1lbnRDb21wb25lbnRNb2RlbHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlbC5hbW91bnQgJiYgbW9kZWwuZGF0ZSAmJiBtb2RlbC53YWdlVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgcmVtdW5lcmF0aW9uUGF5bWVudEluZm9SZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyByZW11bmVyYXRpb25QYXltZW50SW5mb1JlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiZ3Jvc3NFYXJuaW5nc0luZm9SZXF1aXJlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZ3Jvc3NFYXJuaW5nc0NvbXBvbmVudE1vZGVsczogR3Jvc3NFYXJuaW5nc01vZGVsW10gPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZT8ucGF5Rm9ybUVsZW1lbnRzO1xyXG4gICAgICAgICAgICAgICAgaWYgKGdyb3NzRWFybmluZ3NDb21wb25lbnRNb2RlbHMgIT0gbnVsbCAmJiBncm9zc0Vhcm5pbmdzQ29tcG9uZW50TW9kZWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdyb3NzRWFybmluZ3NDb21wb25lbnRNb2RlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3NzRWFybmluZ01vZGVsID0gZ3Jvc3NFYXJuaW5nc0NvbXBvbmVudE1vZGVsc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3NzRWFybmluZ01vZGVsLmhvdXJzV29ya2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBncm9zc0Vhcm5pbmdzSW5mb1JlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGdyb3NzRWFybmluZ3NJbmZvUmVxdWlyZWQ6IHRydWUgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJ3Y0VtcGxveWVyUGF5bWVudEluZm9SZXF1aXJlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW1wbG95ZXJQYXltZW50SW5mb01vZGVsczogRW1wbG95ZXJQYXlJbmZvTW9kZWxbXSA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdPy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnJlcXVpcmVkSWYpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IGVsZW1lbnQucmVxdWlyZWRJZjtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaXNSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByOiBzdHJpbmdbXSA9IGV4cHJlc3Npb24uc3BsaXQoJyYmJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHI6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdCgnfHwnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXF1aXJlZCAmJiAoIWVtcGxveWVyUGF5bWVudEluZm9Nb2RlbHMgfHwgZW1wbG95ZXJQYXltZW50SW5mb01vZGVscy5sZW5ndGggPCAxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyB3Y0VtcGxveWVyUGF5bWVudEluZm9SZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZ2V0T3RoZXJGb3JtRmllbGRzVmFsdWVzKGZpZWxkczogc3RyaW5nW10sIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCk6IFNldDxhbnk+IHtcclxuICAgICAgICBsZXQgc2V0OiBTZXQ8YW55PiA9IG5ldyBTZXQoKTtcclxuICAgICAgICBmaWVsZHMuZm9yRWFjaChmID0+IHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBmb3JtR3JvdXAuY29udHJvbHNbZl0/LnZhbHVlO1xyXG4gICAgICAgICAgICB2YWx1ZSAmJiB0eXBlb2YgKHZhbHVlKSA9PSAnb2JqZWN0JyA/IHNldC5hZGQodmFsdWUudmFsdWUpIDogc2V0LmFkZCh2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHNldDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gQGR5bmFtaWNcclxuICAgIHN0YXRpYyBjcmVhdGVWYWxpZGF0b3IodmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLCBlbGVtZW50OiBhbnkpOiBBc3luY1ZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBmdW5jID0gKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCk6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycz4gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV07XHJcbiAgICAgICAgICAgIGxldCBmaWVsZFZhbHVlOiBzdHJpbmcgPSBjb250cm9sLnZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoIWZpZWxkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgc2VydmljZU5hbWU6IHN0cmluZyA9IGVsZW1lbnQuc2VydmljZU5hbWU7XHJcbiAgICAgICAgICAgIGxldCBzZXJ2aWNlQ2FsbFR5cGUgPSBlbGVtZW50LnNlcnZpY2VDYWxsVHlwZTtcclxuICAgICAgICAgICAgbGV0IHNlcnZpY2VUeXBlID0gZWxlbWVudC5zZXJ2aWNlVHlwZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlQ2FsbFR5cGUgPT09ICdHRVQnKSB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9uU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgIC5nZXQoYCR7c2VydmljZU5hbWV9JHtmaWVsZFZhbHVlfWApXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3JlcyAnLCByZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VydmljZVR5cGUgPT09ICdWQUxJREFURScpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VydmljZVR5cGUgPT09ICdWQUxJREFURScpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VydmljZVR5cGUgPT09ICdVUERBVEUnKSB7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIHNldFJlcXVpcmVkSWZWYWxpZGF0aW9uKGVsZW1lbnQ6IEVsZW1lbnRzTW9kZWwsIHNoYXJlZERhdGE6IGFueSk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBmdW5jID0gKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkgPT4ge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdzZXRSZXF1aXJlZElmVmFsaWRhdGlvbiAtLScsZWxlbWVudCk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdmb3JtR3JvdXAgLS0nLGZvcm1Hcm91cCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IGVsZW1lbnQucmVxdWlyZWRJZjtcclxuXHJcblxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5jdXN0b21UYWcgJiYgZWxlbWVudC5jdXN0b21UYWcgPT09ICdPcHRpb25hbCcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnJiYnKSAmJiAhZXhwcmVzc2lvbi5pbmNsdWRlcygnfHwnKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGV4cHI6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdCgnJiYnKTtcclxuICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgICAgICAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsxXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID49IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsyXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChleHByLmxlbmd0aCA+PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbM10udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPT0gNSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzRdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID4gNSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFwiQXBwVmFsaWRhdG9ycyA6IE1vcmUgdGhhbiA1ICcmJicgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXhwcjogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KCd8fCcpO1xyXG4gICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID49IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsyXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChleHByLmxlbmd0aCA+PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbM10udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPT0gNSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzRdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID4gNSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFwiQXBwVmFsaWRhdG9ycyA6IE1vcmUgdGhhbiA1ICd8fCcgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbi5pbmNsdWRlcygnfHwnKSAmJiAhZXhwcmVzc2lvbi5pbmNsdWRlcygnJiYnKSkge1xyXG4gICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByZXNzaW9uLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHJlcXVpcmVkSWY6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlZElmOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXT8uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJlc3Npb246IHN0cmluZywgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLCBlbGVtZW50OiBFbGVtZW50c01vZGVsLCBzaGFyZWREYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgc3BsaXRBcnJheTtcclxuICAgICAgICBsZXQgaXNEb2VzTm90RXF1YWw6IGJvb2xlYW47XHJcbiAgICAgICAgbGV0IGlzQ29udGFpbnM6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCc9PScpKSB7XHJcbiAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCc9PScpO1xyXG4gICAgICAgICAgICBpc0RvZXNOb3RFcXVhbCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnIT0nKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gZXhwcmVzc2lvbi5zcGxpdCgnIT0nKTtcclxuICAgICAgICAgICAgaXNEb2VzTm90RXF1YWwgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnY29udGFpbnMnKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gZXhwcmVzc2lvbi5zcGxpdCgnY29udGFpbnMnKTtcclxuICAgICAgICAgICAgaXNDb250YWlucyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBvcGVyYW5kMTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICBsZXQgb3BlcmFuZDI6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcbiAgICAgICAgb3BlcmFuZDEgPSBvcGVyYW5kMS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykudHJpbSgpO1xyXG4gICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udHJvbDEgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdO1xyXG4gICAgICAgIHZhciB2YWx1ZU9mQWN0dWFsQ29udHJvbDtcclxuICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgICAgICAgdmFsdWVPZkFjdHVhbENvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgdmFsdWVPZkFjdHVhbENvbnRyb2wgPSB0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlT2ZBY3R1YWxDb250cm9sKSA/IHZhbHVlT2ZBY3R1YWxDb250cm9sIDogdmFsdWVPZkFjdHVhbENvbnRyb2wgKyAnJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzaGFyZWREYXRhLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RySW50b09iajogW10gPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0ckludG9PYmpbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlT2ZBY3R1YWxDb250cm9sID0gc3RySW50b09ialtlbGVtZW50Lm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2YWx1ZU9mQ25ydHJsVG9DaGVjaztcclxuXHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0gJiYgIXRoaXMuaXNOdWxsT3JVbmRlZmluZWQoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZSkgJiYgdHlwZW9mIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdKS52YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlLnRyaW0oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdICYmICF0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWUpICYmIHR5cGVvZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXSkudmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbJ3ZhbHVlJ10pIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVsndmFsdWUnXS50cmltKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVswXSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmFsdWVPZkNucnRybFRvQ2hlY2spIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgIUFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spKSB7XHJcbiAgICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gdmFsdWVPZkNucnRybFRvQ2hlY2sudHJpbSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wZXJhbmQyID09PSAnbnVsbCcgJiYgaXNEb2VzTm90RXF1YWwgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgIXZhbHVlT2ZBY3R1YWxDb250cm9sKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wZXJhbmQyID09PSAnbnVsbCcgJiYgIWlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIHZhbHVlT2ZBY3R1YWxDb250cm9sKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgb3BlcmFuZDIgPSBvcGVyYW5kMi5yZXBsYWNlKC9cXCcvZywgXCJcIik7IC8vbnVsbFxyXG5cclxuICAgICAgICBpZiAoaXNDb250YWlucyAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZU9mQ25ydHJsVG9DaGVjaykgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2suaW5jbHVkZXMob3BlcmFuZDIpKSAmJiB0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Py5uYW1lXT8udmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzQ29udGFpbnMgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmICFBcnJheS5pc0FycmF5KHZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjay5pbmNsdWRlcyhvcGVyYW5kMikpICYmIHRoaXMuaXNOdWxsT3JVbmRlZmluZWQoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQ/Lm5hbWVdPy52YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3BlcmFuZDIgIT0gJ251bGwnICYmICFpc0RvZXNOb3RFcXVhbCAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9PT0gb3BlcmFuZDIgJiYgIXZhbHVlT2ZBY3R1YWxDb250cm9sICYmIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Py5uYW1lXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAob3BlcmFuZDIgIT0gJ251bGwnICYmIGlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICE9IG9wZXJhbmQyICYmICF2YWx1ZU9mQWN0dWFsQ29udHJvbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc051bGxPclVuZGVmaW5lZCh2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIHNldEVxdWFsc1ZhbGlkYXRpb24oZWxlbWVudDogYW55LCBzaGFyZWREYXRhOiBhbnkpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApID0+IHtcclxuICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgc2V0UGFzc3dvcmRWYWxpZGF0aW9uKGVsZW1lbnQ6IGFueSwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBlbGVtZW50LnZhbGlkYXRvcnM7XHJcbiAgICAgICAgICAgIHZhciBzcGxpdEFycmF5O1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JMaXN0LmZvckVhY2godmFsaWRhdG9yID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2V4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHZhbGlkYXRvci5leHByZXNzaW9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcblxyXG5cclxuICAgICAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSBleHByZXNzaW9uLmluZGV4T2YoJz09PScpO1xyXG4gICAgICAgICAgICBsZXQgaXNFcXVhbE9wZXJhbmQ6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCc+Jyk7XHJcbiAgICAgICAgICAgICAgICBpc0VxdWFsT3BlcmFuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09PScpO1xyXG4gICAgICAgICAgICAgICAgaXNFcXVhbE9wZXJhbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgb3BlcmFuZDE6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF07XHJcbiAgICAgICAgICAgIGxldCBvcGVyYW5kMjogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICAgICAgLy8gIGNvbnNvbGUubG9nKCdzZXREYXRlVmFsaWRhdGlvbiBzaGFyZWREYXRhJywgc2hhcmVkRGF0YSk7XHJcblxyXG5cclxuICAgICAgICAgICAgb3BlcmFuZDEgPSBvcGVyYW5kMS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICAgICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdjb250cm9sLnBhcmVudCcsIGNvbnRyb2wucGFyZW50KVxyXG4gICAgICAgICAgICBsZXQgY29udHJvbDEgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdO1xyXG4gICAgICAgICAgICBsZXQgY29udHJvbDIgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDJdO1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbDEudmFsdWUgIT0gY29udHJvbDIudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHBhc3N3b3JkQ29tcGFyaXNpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBwYXNzd29yZENvbXBhcmlzaW9uOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIHNldERhdGVWYWxpZGF0aW9uKGVsZW1lbnQ6IGFueSwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBlbGVtZW50LnZhbGlkYXRvcnM7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCB2YWxpZGF0b3Igb2YgdmFsaWRhdG9yTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnZXhwcmVzc2lvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gdmFsaWRhdG9yLmV4cHJlc3Npb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcGVyYXRvciA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCc+PScpIHx8IGV4cHJlc3Npb24uaW5jbHVkZXMoJzw9JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmluY2x1ZGVzKCc+PScpID8gJz49JyA6ICc8PSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmluY2x1ZGVzKCc+JykgPyAnPicgOiAnPCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXRBcnJheTogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KG9wZXJhdG9yKS5tYXAoc3RyID0+IHN0ci50cmltKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcGVyYW5kMTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3BlcmFuZDI6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhbmQxID0gb3BlcmFuZDEucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udHJvbDEgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250cm9sMiA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMl07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRlMTogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRlMjogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTEgPSBuZXcgRGF0ZShjb250cm9sMS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkRGF0YS5mb3JFYWNoKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHJJbnRvT2JqID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJJbnRvT2JqW29wZXJhbmQxXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUxID0gbmV3IERhdGUoc3RySW50b09ialtvcGVyYW5kMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUyID0gbmV3IERhdGUoY29udHJvbDIudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZERhdGEuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RySW50b09iaiA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RySW50b09ialtvcGVyYW5kMl0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlMiA9IG5ldyBEYXRlKHN0ckludG9PYmpbb3BlcmFuZDJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZTEgJiYgZGF0ZTIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09PSAnPj0nICYmIGRhdGUxID49IGRhdGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gJzw9JyAmJiBkYXRlMSA8PSBkYXRlMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgPT09ICc+JyAmJiBkYXRlMSA+IGRhdGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gJzwnICYmIGRhdGUxIDwgZGF0ZTIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgZGF0ZUNvbXBhcmlzaW9uOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0ZUNvbXBhcmlzaW9uOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzRXF1YWwodmFsdWUpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICE9IGNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IG5vdEVxdWFsOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjYWxjdWxhdGVPcGVyYW5kVmFsdWUoc3RyRXhwOiBzdHJpbmcsIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xyXG4gICAgICAgIHZhciBzcGxpdEFycmF5OiBzdHJpbmdbXTtcclxuICAgICAgICBsZXQgaXNEb2VzTm90RXF1YWw6IGJvb2xlYW47XHJcbiAgICAgICAgbGV0IGlzQ29udGFpbnM6IGJvb2xlYW47XHJcbiAgICAgICAgaWYgKHN0ckV4cC5pbmNsdWRlcygnPT0nKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gc3RyRXhwLnNwbGl0KCc9PScpO1xyXG4gICAgICAgICAgICBpc0RvZXNOb3RFcXVhbCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc3RyRXhwLmluY2x1ZGVzKCchPScpKSB7XHJcbiAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBzdHJFeHAuc3BsaXQoJyE9Jyk7XHJcbiAgICAgICAgICAgIGlzRG9lc05vdEVxdWFsID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHN0ckV4cC5pbmNsdWRlcygnY29udGFpbnMnKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gc3RyRXhwLnNwbGl0KCdjb250YWlucycpO1xyXG4gICAgICAgICAgICBpc0NvbnRhaW5zID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG9wZXJhbmQxOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdO1xyXG4gICAgICAgIGxldCBvcGVyYW5kMjogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICBvcGVyYW5kMSA9IG9wZXJhbmQxLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7IC8vY2xhaW1hbnRQcmlvclBheTEwMlxyXG4gICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTsgLy9udWxsXHJcbiAgICAgICAgdmFyIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ29wZXJhbmQxJyxvcGVyYW5kMSk7XHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0gJiYgZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZSAmJiB0eXBlb2YgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0pLnZhbHVlID09PSAnc3RyaW5nJykge1xyXG5cclxuICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlLnRyaW0oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdICYmIGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWUgJiYgdHlwZW9mIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdKS52YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdvcGVyYW5mb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlW3ZhbHVlXScsZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVswXSk7XHJcbiAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlWyd2YWx1ZSddKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbJ3ZhbHVlJ10udHJpbSgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbMF0pIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChvcGVyYW5kMiA9PT0gJ251bGwnICYmIGlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3BlcmFuZDIgPT09ICdudWxsJyAmJiAhaXNEb2VzTm90RXF1YWwgJiYgIXZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvcGVyYW5kMiA9IG9wZXJhbmQyLnJlcGxhY2UoJ1xcJycsICcnKS5yZXBsYWNlKCdcXCcnLCAnJykudHJpbSgpOyAvL251bGxcclxuXHJcbiAgICAgICAgaWYgKGlzQ29udGFpbnMgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIEFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNDb250YWlucyAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgIUFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3BlcmFuZDIgIT0gJ251bGwnICYmICFpc0RvZXNOb3RFcXVhbCAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2sgPT09IG9wZXJhbmQyKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcGVyYW5kMiAhPSAnbnVsbCcgJiYgaXNEb2VzTm90RXF1YWwgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLnRyaW0oKSAhPSBvcGVyYW5kMikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG59Il19
790
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwVmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXVzYS1hcHAtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbm5haXJlL0FwcFZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0EsTUFBTSxPQUFPLGFBQWE7SUFJdEIsV0FBVztJQUNYLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFZLEVBQUUsVUFBMkIsRUFBRSxTQUFpQjtRQUNoRixJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsb0JBQW9CLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUEyQixFQUFFLEVBQUU7WUFDekMsSUFBSSxjQUFjLEtBQUssMEJBQTBCLEVBQUU7Z0JBQy9DLElBQUksR0FBNkIsQ0FBQztnQkFDbEMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtvQkFDN0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDN0MsSUFBSSxHQUFHLEVBQUU7d0JBQ0wsSUFBSSxTQUF5QyxDQUFDO3dCQUM5QyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQzt3QkFDMUI7Ozs7OzsyQkFNRzt3QkFDSCxLQUFLLElBQUksS0FBSyxJQUFJLFNBQVMsRUFBRTs0QkFDekIsSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLEdBQUc7bUNBQ3JELENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsRUFBRTtnQ0FDN0YsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEVB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QUFJLFVBQVUsSUFBSSxDQUFDLG9CQUFvQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtZQUN4SCxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxVQUFVLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtZQUN6SCxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxRQUFRLElBQUksTUFBTSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsb0JBQW9CLElBQUksb0JBQW9CLEtBQUssUUFBUSxDQUFDLEVBQUU7WUFDdEcsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksUUFBUSxJQUFJLE1BQU0sSUFBSSxjQUFjLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxRQUFRLENBQUMsRUFBRTtZQUMzRyxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUVKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQWRkcmVzc0NvbXBvbmVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0FkZHJlc3NDb21wb25lbnRNb2RlbCc7XHJcbmltcG9ydCB7IEJhbmtEZXRhaWxzQ29tcG9uZW50TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvQmFua0RldGFpbHNDb21wb25lbnRNb2RlbCc7XHJcbmltcG9ydCB7IENsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9DbGFpbUFwcEVtcGxveWVyRGV0YWlsc01vZGVsJztcclxuaW1wb3J0IHsgQ2xhaW1BcHBFbXBSZXNwb25zZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvQ2xhaW1BcHBFbXBSZXNwb25zZU1vZGVsJztcclxuaW1wb3J0IHsgRWxlbWVudHNNb2RlbCwgVmFsaWRhdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvRWxlbWVudHNNb2RlbCc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcXVlc3Rpb25uYWlyZS92YWxpZGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbXBsb3llckluZm9Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9FbXBsb3llckRldGFpbFNlYXJjaFJlc3VsdCc7XHJcbmltcG9ydCB7IERlcGVuZGVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RlcGVuZGVudC5tb2RlbCc7XHJcbmltcG9ydCB7IEVtcGxveWVyUGF5SW5mb01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0VtcGxveWVyUGF5SW5mb01vZGVsJztcclxuaW1wb3J0IHsgUGF5bWVudENvbXBvbmVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1BheW1lbnRDb21wb25lbnRNb2RlbCc7XHJcbmltcG9ydCB7IEF1dG9jb2Rlck1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvQXV0b2NvZGVyTW9kZWwnO1xyXG5pbXBvcnQgeyBHcm9zc0Vhcm5pbmdzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvR3Jvc3NFYXJuaW5nc01vZGVsJztcclxuZXhwb3J0IGNsYXNzIEFwcFZhbGlkYXRvcnMge1xyXG5cclxuXHJcblxyXG4gICAgLy8gQGR5bmFtaWNcclxuICAgIHN0YXRpYyBjdXN0b21WYWxpZGF0aW9uKGVsZW1lbnQ6IGFueSwgdmFsaWRhdGlvbjogVmFsaWRhdGlvbk1vZGVsLCBzdGF0ZU5hbWU6IHN0cmluZywpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgbGV0IHZhbGlkYXRpb25OYW1lID0gdmFsaWRhdGlvbi5jdXN0b21WYWxpZGF0aW9uTmFtZTtcclxuICAgICAgICBjb25zdCBmdW5jID0gKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiYmFzZVBlcmlvZEVtcGxWYWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWw6IENsYWltQXBwRW1wUmVzcG9uc2VNb2RlbDtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUgPT09ICdwcmV2d29yaycpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBicEVtcExpc3Q6IENsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWxbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnBFbXBMaXN0ID0gdmFsLmJwRW1wTGlzdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAoZm9ybUdyb3VwLmNvbnRyb2xzWydwYXN0ZW1wJ10gLy8mJiBmb3JtR3JvdXAuY29udHJvbHNbJ3dvcmtmb3JlbXAnXS52YWx1ZSA9PT0gJ1knXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicEVtcExpc3QubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYnBFbXBsckxlbmd0aEZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBicEVtcGxyTGVuZ3RoRmxhZzogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9Ki9cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYnBFbXAgb2YgYnBFbXBMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnBFbXAuYnBFbXBsb3llckZsYWcgPT09ICcxJyAmJiBicEVtcC5lbXBEZWxldGVkID09PSAnTidcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYnBFbXAuc3RhcnREYXRlID09PSBudWxsICYmIGJwRW1wLnN0YXJ0RGF0ZUZlZCA9PT0gbnVsbCAmJiBicEVtcC5zdGFydERhdGVNaWwgPT09IG51bGwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYnBFbXBsckZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgYnBFbXBsckZsYWc6IHRydWUgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcInNpbXBsZUNoZWNrQm94VmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHNpbXBsZUNoZWNrQm94VmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJjcGF0Y2h2YWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgY3BhdGNodmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJ1cGxvYWR2YWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUgfHwgKEFycmF5LmlzQXJyYXkoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpICYmICFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZS5sZW5ndGgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHVwbG9hZHZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiYWRkcmVzc1ZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGFkZHJlc3NDb21wVmFsdWU6IEFkZHJlc3NDb21wb25lbnRNb2RlbDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250b2xOYW1lOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZTogc3RyaW5nID0gc3BsaXRBcnJheVsxXS5yZXBsYWNlKC8nL2csICcnKS50cmltKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdICYmIGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdLnZhbHVlLnRyaW0oKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICdZJyAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9PT0gJ04nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVycm9ycyA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLmVycm9ycztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY3VycmVudEVycm9yc1snYWRkcmVzc1ZhbGlkYXRpb25GbGFnJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhjdXJyZW50RXJyb3JzKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhjdXJyZW50RXJyb3JzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzQ29tcFZhbHVlID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3NDb21wVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhZGRyZXNzQ29tcFZhbHVlLmNpdHkgfHwgIWFkZHJlc3NDb21wVmFsdWUuc3RhdGUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFhZGRyZXNzQ29tcFZhbHVlWyd6aXAnXSB8fCAhYWRkcmVzc0NvbXBWYWx1ZS5jb3VudHJ5IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYWRkcmVzc0NvbXBWYWx1ZVsnc3RyZWV0QWRkcmVzcyddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoYWRkcmVzc0NvbXBWYWx1ZVsnbmVpZ2hib3JTdGF0ZUNoZWNrUmVxdWlyZWQnXT09PSdZJyAmJiAhYWRkcmVzc0NvbXBWYWx1ZVsnbmVpZ2hib3VyRmxhZyddKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubmFtZSA9PT0gJ21haWxBZGRyZXNzJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYWRkcmVzc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZSAmJiBhZGRyZXNzQ29tcFZhbHVlLnN0YXRlLnZhbHVlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUudmFsdWUgPT09ICdNUycgJiYgc3RhdGVOYW1lID09PSAnTVMnKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGRyZXNzQ29tcFZhbHVlLnN0YXRlLnZhbHVlID09PSAnQ1QnICYmIHN0YXRlTmFtZSA9PT0gJ0NUJykpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNvdW50eVJlcXVpcmVkID09PSB0cnVlICYmICFhZGRyZXNzQ29tcFZhbHVlWydjb3VudHknXSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGFkZHJlc3NWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUgJiYgYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZS52YWx1ZSA9PT0gJ01FJyAmJiBzdGF0ZU5hbWUgPT09ICdNRScgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY291bnR5UmVxdWlyZWQgPT09IHRydWUgJiYgIWFkZHJlc3NDb21wVmFsdWVbJ3Rvd24nXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYWRkcmVzc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnJlcXVpcmVkSWYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCc9PScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRvbE5hbWU6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF0ucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZTogc3RyaW5nID0gc3BsaXRBcnJheVsxXS5yZXBsYWNlKC8nL2csICcnKS50cmltKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXSAmJiBmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0udmFsdWUudHJpbSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICdZJyAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9PT0gJ04nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFcnJvcnMgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5lcnJvcnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY3VycmVudEVycm9yc1snYWRkcmVzc1ZhbGlkYXRpb25GbGFnJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoY3VycmVudEVycm9ycykubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoY3VycmVudEVycm9ycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYWRkcmVzc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcImJhbmtEZXRhaWxzVmFsaWRhdGlvbkZsYWdcIikge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBiYW5rRGV0YWlsc0NvbXBvbmVudFZhbDogQmFua0RldGFpbHNDb21wb25lbnRNb2RlbDtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhbmtEZXRhaWxzQ29tcG9uZW50VmFsID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IGVsZW1lbnQucmVxdWlyZWRJZjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCc9PScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udG9sTmFtZTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlOiBzdHJpbmcgPSBzcGxpdEFycmF5WzFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250b2xOYW1lID0gY29udG9sTmFtZS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJ1xcJycsICcnKS5yZXBsYWNlKCdcXCcnLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdICYmIGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdLnZhbHVlLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFua0RldGFpbHNDb21wb25lbnRWYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFiYW5rRGV0YWlsc0NvbXBvbmVudFZhbC5hY2NvdW50TnVtYmVyIHx8ICFiYW5rRGV0YWlsc0NvbXBvbmVudFZhbC5hY2NvdW50VHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLm5hbWVPbkFjY291bnQgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLnJlRW50ZXJBY2NvdW50TnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhYmFua0RldGFpbHNDb21wb25lbnRWYWwucm91dGluZ051bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYmFua0RldGFpbHNWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiam9iVGlsZVZhbGlkYXRpb25GbGFnXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBqb2JUaXRsZUZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiYXRMZWFzdE9uZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IGVsZW1lbnQucmVxdWlyZWRJZjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByOiBzdHJpbmdbXSA9IGV4cHJlc3Npb24uc3BsaXQoJyYmJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcjogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KCd8fCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGRzOiBzdHJpbmdbXSA9IHZhbGlkYXRpb24uZXhwcmVzc2lvbi5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaXJzdEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkc1swXS50cmltKCldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2Vjb25kRm9ybUNPbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZmllbGRzWzFdLnRyaW0oKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc051bGxPclVuZGVmaW5lZChjdXJyZW50Rm9ybUNvbnRyb2wudmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc051bGxPclVuZGVmaW5lZChmaXJzdEZvcm1Db250cm9sLnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMuaXNOdWxsT3JVbmRlZmluZWQoc2Vjb25kRm9ybUNPbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm1Db250cm9sLnNldEVycm9ycyh7IGF0TGVhc3RPbmU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3JtQ29udHJvbC5zZXRFcnJvcnMoeyBhdExlYXN0T25lOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZEZvcm1DT250cm9sLnNldEVycm9ycyh7IGF0TGVhc3RPbmU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3JtQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kRm9ybUNPbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc051bGxPclVuZGVmaW5lZChjdXJyZW50Rm9ybUNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtQ29udHJvbC5zZXRWYWx1ZSgwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNOdWxsT3JVbmRlZmluZWQoZmlyc3RGb3JtQ29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3JtQ29udHJvbC5zZXRWYWx1ZSgwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNOdWxsT3JVbmRlZmluZWQoc2Vjb25kRm9ybUNPbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZEZvcm1DT250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9ybUNvbnRyb2wudmFsdWUgPT09IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBmaXJzdEZvcm1Db250cm9sLnZhbHVlID09PSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2Vjb25kRm9ybUNPbnRyb2wudmFsdWUgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKHsgYXRMZWFzdE9uZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEZvcm1Db250cm9sLnNldEVycm9ycyh7IGF0TGVhc3RPbmU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kRm9ybUNPbnRyb2wuc2V0RXJyb3JzKHsgYXRMZWFzdE9uZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJpc0dyZWF0ZXJEYXRlXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmlzb24gd2l0aCByZWZlcmVuY2VEYXRlIHdlIGNhbiBhZGQgY29udHJvbHMgbGlrZSBJZiBCbG9jayAyNTMgU2V0IFZhbHVlcywgYXBwZWFsQ29uc2lkZXJlZExhdGVEYXRlIHVzZWQgaW4gUUVfRklMRV9BUFBFQUwgZm9yIE1FXHJcbiAgICAgICAgICAgICAgICBpZihmb3JtR3JvdXAuY29udHJvbHNbJ2FwcGVhbENvbnNpZGVyZWRMYXRlRGF0ZSddLnZhbHVlICE9IG51bGwgJiYgZm9ybUdyb3VwLmNvbnRyb2xzWydjdXJyZW50RGF0ZSddLnZhbHVlICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXBwZWFsTGF0ZURhdGUgPSBmb3JtR3JvdXAuY29udHJvbHNbJ2FwcGVhbENvbnNpZGVyZWRMYXRlRGF0ZSddLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudERhdGUgPSBmb3JtR3JvdXAuY29udHJvbHNbJ2N1cnJlbnREYXRlJ10udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5ldyBEYXRlKGN1cnJlbnREYXRlLnJlcGxhY2UoIC8oXFxkezJ9KS0oXFxkezJ9KS0oXFxkezR9KS8sIFwiJDIvJDEvJDNcIikpID49IG5ldyBEYXRlKGFwcGVhbExhdGVEYXRlLnJlcGxhY2UoIC8oXFxkezJ9KS0oXFxkezJ9KS0oXFxkezR9KS8sIFwiJDIvJDEvJDNcIikpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdsYXRlQXBwZWFsJykuc2V0VmFsdWUoJ1knLCB7b25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJub3RFcXVhbHNcIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRGb3JtQ29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGb3JtQ29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZHM6IHN0cmluZ1tdID0gdmFsaWRhdGlvbi5leHByZXNzaW9uLnNwbGl0KFwiLFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSBjdXJyZW50Rm9ybUNvbnRyb2wudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG90aGVyRmllbGRGb3JtQ29udHJvbE5hbWUgPSBmb3JtR3JvdXAuY29udHJvbHNbZmllbGQudHJpbSgpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG90aGVyRmllbGRWYWx1ZSA9IG90aGVyRmllbGRGb3JtQ29udHJvbE5hbWUudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwgJiYgb3RoZXJGaWVsZFZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHZhbC52YWx1ZSAmJiBvdGhlckZpZWxkVmFsdWUudmFsdWUgJiYgdmFsLnZhbHVlID09PSBvdGhlckZpZWxkVmFsdWUudmFsdWUpIHx8IHZhbCA9PT0gb3RoZXJGaWVsZFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJGaWVsZEZvcm1Db250cm9sTmFtZS5zZXRFcnJvcnMoeyBub3RFcXVhbHM6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRGb3JtQ29udHJvbC5lcnJvcnMgJiYgdmFsICYmIG90aGVyRmllbGRWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgodmFsLnZhbHVlICYmIG90aGVyRmllbGRWYWx1ZS52YWx1ZSAmJiB2YWwudmFsdWUgIT0gb3RoZXJGaWVsZFZhbHVlLnZhbHVlKSB8fCB2YWwgIT0gb3RoZXJGaWVsZFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZXM6IFNldDxhbnk+ID0gdGhpcy5nZXRPdGhlckZvcm1GaWVsZHNWYWx1ZXMoZmllbGRzLCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMuc2l6ZSA9PSBmaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyRmllbGRGb3JtQ29udHJvbE5hbWUuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEN1c3RvbSBWYWxpZGF0aW9uIGZvciB3ZWVrbGllcyBQYWdlIHNpbmNlIHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIHBhc3NlZFxyXG4gICAgICAgICAgICAvLyB3aGlsZSBsb2FkaW5nIHRoZSBtb2RlbCB0byBwcmV2ZW50IG51bGwgcG9pbnRlciBleGNlcHRpb24gaW4gRFVBIFxyXG4gICAgICAgICAgICBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJ3Y0NvbW1vblZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRGb3JtQ29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGb3JtQ29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGVsZW1lbnQubmFtZT09PSd3b3JrUGVyZm9ybWVkJyB8fCBlbGVtZW50Lm5hbWU9PT0nYXZhaWxhYmxlJyl7ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZWxlbWVudC5yZXF1aXJlZElmKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHI6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdCgnJiYnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZihleHByZXNzaW9uKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJlc3Npb24udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9ybUNvbnRyb2wudmFsdWUgPT09IFwiIFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtQ29udHJvbC5zZXRFcnJvcnMoeyB3Y1JlcXVpcmVkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZihlbGVtZW50Lm5hbWUhPSd3b3JrUGVyZm9ybWVkJyB8fCBlbGVtZW50Lm5hbWUgIT0nYXZhaWxhYmxlJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9ybUNvbnRyb2wudmFsdWUgPT09IFwiIFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm1Db250cm9sLnNldEVycm9ycyh7IHdjUmVxdWlyZWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcIndjRW1wbG95ZXJWYWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBlbXBNb2RlbHM6IEVtcGxveWVySW5mb01vZGVsW10gPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXT8udmFsdWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoZW1wTW9kZWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5vbkNvbXBsZXRlZEVtcHMgPSBlbXBNb2RlbHMuZmlsdGVyKGUgPT4gIWUuaXNQYXJ0VGltZUVtcGxveWVyRWRpdGVkICYmIGUuaXNQYXJ0VGltZUVtcGxveWVyKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobm9uQ29tcGxldGVkRW1wcyAmJiBub25Db21wbGV0ZWRFbXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgd2NFbXBsb3llclZhbGlkYXRpb246IHRydWUgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBlbGVtZW50LnJlcXVpcmVkSWY7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaXNQYXJ0aWFsQ2xhaW1FbXBsb3ltZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHI6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdCgnJiYnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnfHwnKSAmJiAhZXhwcmVzc2lvbi5pbmNsdWRlcygnJiYnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcjogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KCd8fCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gXCJoaWRQYXJ0aWFsQ2xhaW1FbXBsb3ltZW50RmxhZ1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBleHByLmZpbmRJbmRleChlID0+IGUuaW5jbHVkZXModGFyZ2V0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BhcnRpYWxDbGFpbUVtcGxveW1lbnQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwcltpbmRleF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaXNQYXJ0aWFsQ2xhaW1FbXBsb3ltZW50ID09IGZhbHNlKSB8fCAoaW5kZXggPCAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPj0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzJdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID49IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclszXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHByLmxlbmd0aCA9PSA1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbNF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPiA1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgXCJBcHBWYWxpZGF0b3JzIDogTW9yZSB0aGFuIDUgJyYmJyBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZC5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNQYXJ0aWFsQ2xhaW1FbXBsb3ltZW50ICYmICFlbXBNb2RlbHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1snaGlkQ3NyRmlyc3RQYXNzJ10udmFsdWUgPT0gJ1knKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyB3Y1BhcnRpYWxDbGFpbUVtcGxveW1lbnQ6IHRydWUgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXF1aXJlZCAmJiAhZW1wTW9kZWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHdjRW1wbG95ZXJSZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJ3Y0RlcGVuZGVudFJlcXVpcmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBkZXBlbmRlbnRNb2RlbHM6IERlcGVuZGVudE1vZGVsW10gPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXT8udmFsdWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBlbGVtZW50LnJlcXVpcmVkSWY7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcjogc3RyaW5nID0gZXhwcmVzc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXF1aXJlZCAmJiAhZGVwZW5kZW50TW9kZWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHdjRGVwZW5kZW50UmVxdWlyZWQ6IHRydWUgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwicmVtdW5lcmF0aW9uUGF5bWVudEluZm9SZXF1aXJlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGF5bWVudENvbXBvbmVudE1vZGVsczogUGF5bWVudENvbXBvbmVudE1vZGVsW10gPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZT8ucGF5Rm9ybUVsZW1lbnRzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBheW1lbnRDb21wb25lbnRNb2RlbHMgIT0gbnVsbCAmJiBwYXltZW50Q29tcG9uZW50TW9kZWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBheW1lbnRDb21wb25lbnRNb2RlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGVsID0gcGF5bWVudENvbXBvbmVudE1vZGVsc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsLmFtb3VudCAmJiBtb2RlbC5kYXRlICYmIG1vZGVsLndhZ2VUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyByZW11bmVyYXRpb25QYXltZW50SW5mb1JlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHJlbXVuZXJhdGlvblBheW1lbnRJbmZvUmVxdWlyZWQ6IHRydWUgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJncm9zc0Vhcm5pbmdzSW5mb1JlcXVpcmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBncm9zc0Vhcm5pbmdzQ29tcG9uZW50TW9kZWxzOiBHcm9zc0Vhcm5pbmdzTW9kZWxbXSA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlPy5wYXlGb3JtRWxlbWVudHM7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ3Jvc3NFYXJuaW5nc0NvbXBvbmVudE1vZGVscyAhPSBudWxsICYmIGdyb3NzRWFybmluZ3NDb21wb25lbnRNb2RlbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3Jvc3NFYXJuaW5nc0NvbXBvbmVudE1vZGVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3Jvc3NFYXJuaW5nTW9kZWwgPSBncm9zc0Vhcm5pbmdzQ29tcG9uZW50TW9kZWxzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3Jvc3NFYXJuaW5nTW9kZWwuaG91cnNXb3JrZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGdyb3NzRWFybmluZ3NJbmZvUmVxdWlyZWQ6IHRydWUgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgZ3Jvc3NFYXJuaW5nc0luZm9SZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcIndjRW1wbG95ZXJQYXltZW50SW5mb1JlcXVpcmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBlbXBsb3llclBheW1lbnRJbmZvTW9kZWxzOiBFbXBsb3llclBheUluZm9Nb2RlbFtdID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHI6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdCgnJiYnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnfHwnKSAmJiAhZXhwcmVzc2lvbi5pbmNsdWRlcygnJiYnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcjogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KCd8fCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsxXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1JlcXVpcmVkICYmICghZW1wbG95ZXJQYXltZW50SW5mb01vZGVscyB8fCBlbXBsb3llclBheW1lbnRJbmZvTW9kZWxzLmxlbmd0aCA8IDEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHdjRW1wbG95ZXJQYXltZW50SW5mb1JlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuICAgIHN0YXRpYyBnZXRPdGhlckZvcm1GaWVsZHNWYWx1ZXMoZmllbGRzOiBzdHJpbmdbXSwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogU2V0PGFueT4ge1xyXG4gICAgICAgIGxldCBzZXQ6IFNldDxhbnk+ID0gbmV3IFNldCgpO1xyXG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKGYgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdmFsdWU6IGFueSA9IGZvcm1Hcm91cC5jb250cm9sc1tmXT8udmFsdWU7XHJcbiAgICAgICAgICAgIHZhbHVlICYmIHR5cGVvZiAodmFsdWUpID09ICdvYmplY3QnID8gc2V0LmFkZCh2YWx1ZS52YWx1ZSkgOiBzZXQuYWRkKHZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gc2V0O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIGNyZWF0ZVZhbGlkYXRvcih2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsIGVsZW1lbnQ6IGFueSk6IEFzeW5jVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzPiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXTtcclxuICAgICAgICAgICAgbGV0IGZpZWxkVmFsdWU6IHN0cmluZyA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgICAgIGlmICghZmllbGRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBzZXJ2aWNlTmFtZTogc3RyaW5nID0gZWxlbWVudC5zZXJ2aWNlTmFtZTtcclxuICAgICAgICAgICAgbGV0IHNlcnZpY2VDYWxsVHlwZSA9IGVsZW1lbnQuc2VydmljZUNhbGxUeXBlO1xyXG4gICAgICAgICAgICBsZXQgc2VydmljZVR5cGUgPSBlbGVtZW50LnNlcnZpY2VUeXBlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNlcnZpY2VDYWxsVHlwZSA9PT0gJ0dFVCcpIHtcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25TZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLmdldChgJHtzZXJ2aWNlTmFtZX0ke2ZpZWxkVmFsdWV9YClcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygncmVzICcsIHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlVHlwZSA9PT0gJ1ZBTElEQVRFJykge1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlVHlwZSA9PT0gJ1ZBTElEQVRFJykge1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlVHlwZSA9PT0gJ1VQREFURScpIHtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgc2V0UmVxdWlyZWRJZlZhbGlkYXRpb24oZWxlbWVudDogRWxlbWVudHNNb2RlbCwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3NldFJlcXVpcmVkSWZWYWxpZGF0aW9uIC0tJyxlbGVtZW50KTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2Zvcm1Hcm91cCAtLScsZm9ybUdyb3VwKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG5cclxuXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmN1c3RvbVRhZyAmJiBlbGVtZW50LmN1c3RvbVRhZyA9PT0gJ09wdGlvbmFsJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpc1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXhwcjogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KCcmJicpO1xyXG4gICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPj0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzJdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID49IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclszXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChleHByLmxlbmd0aCA9PSA1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbNF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPiA1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgXCJBcHBWYWxpZGF0b3JzIDogTW9yZSB0aGFuIDUgJyYmJyBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZC5cIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykpIHtcclxuICAgICAgICAgICAgICAgIGxldCBleHByOiBzdHJpbmdbXSA9IGV4cHJlc3Npb24uc3BsaXQoJ3x8Jyk7XHJcbiAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPj0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzJdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID49IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclszXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChleHByLmxlbmd0aCA9PSA1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbNF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPiA1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgXCJBcHBWYWxpZGF0b3JzIDogTW9yZSB0aGFuIDUgJ3x8JyBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZC5cIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpKSB7XHJcbiAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJlc3Npb24udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xyXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgcmVxdWlyZWRJZjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkSWY6IHRydWUgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdPy5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwcmVzc2lvbjogc3RyaW5nLCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsIGVsZW1lbnQ6IEVsZW1lbnRzTW9kZWwsIHNoYXJlZERhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBzcGxpdEFycmF5O1xyXG4gICAgICAgIGxldCBpc0RvZXNOb3RFcXVhbDogYm9vbGVhbjtcclxuICAgICAgICBsZXQgaXNDb250YWluczogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJz09JykpIHtcclxuICAgICAgICAgICAgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09Jyk7XHJcbiAgICAgICAgICAgIGlzRG9lc05vdEVxdWFsID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCchPScpKSB7XHJcbiAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCchPScpO1xyXG4gICAgICAgICAgICBpc0RvZXNOb3RFcXVhbCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCdjb250YWlucycpKSB7XHJcbiAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCdjb250YWlucycpO1xyXG4gICAgICAgICAgICBpc0NvbnRhaW5zID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG9wZXJhbmQxOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdO1xyXG4gICAgICAgIGxldCBvcGVyYW5kMjogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICBvcGVyYW5kMSA9IG9wZXJhbmQxLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7XHJcbiAgICAgICAgb3BlcmFuZDIgPSBvcGVyYW5kMi5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykudHJpbSgpO1xyXG5cclxuICAgICAgICBjb25zdCBjb250cm9sMSA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV07XHJcbiAgICAgICAgdmFyIHZhbHVlT2ZBY3R1YWxDb250cm9sO1xyXG4gICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICB2YWx1ZU9mQWN0dWFsQ29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICB2YWx1ZU9mQWN0dWFsQ29udHJvbCA9IHRoaXMuaXNOdWxsT3JVbmRlZmluZWQodmFsdWVPZkFjdHVhbENvbnRyb2wpID8gdmFsdWVPZkFjdHVhbENvbnRyb2wgOiB2YWx1ZU9mQWN0dWFsQ29udHJvbCArICcnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNoYXJlZERhdGEuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBzdHJJbnRvT2JqOiBbXSA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RySW50b09ialtlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVPZkFjdHVhbENvbnRyb2wgPSBzdHJJbnRvT2JqW2VsZW1lbnQubmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrO1xyXG5cclxuICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXSAmJiAhdGhpcy5pc051bGxPclVuZGVmaW5lZChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlKSAmJiB0eXBlb2YgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0pLnZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWUudHJpbSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0gJiYgIXRoaXMuaXNOdWxsT3JVbmRlZmluZWQoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZSkgJiYgdHlwZW9mIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdKS52YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVsndmFsdWUnXSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlWyd2YWx1ZSddLnRyaW0oKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlWzBdKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF2YWx1ZU9mQ25ydHJsVG9DaGVjaykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZU9mQ25ydHJsVG9DaGVjaykpIHtcclxuICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSB2YWx1ZU9mQ25ydHJsVG9DaGVjay50cmltKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3BlcmFuZDIgPT09ICdudWxsJyAmJiBpc0RvZXNOb3RFcXVhbCAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjayAmJiAhdmFsdWVPZkFjdHVhbENvbnRyb2w/LnRvU3RyaW5nKCkudHJpbSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wZXJhbmQyID09PSAnbnVsbCcgJiYgIWlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIHZhbHVlT2ZBY3R1YWxDb250cm9sPy50b1N0cmluZygpLnRyaW0oKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgvXFwnL2csIFwiXCIpOyAvL251bGxcclxuXHJcbiAgICAgICAgaWYgKGlzQ29udGFpbnMgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIEFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkgJiYgdGhpcy5pc051bGxPclVuZGVmaW5lZChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudD8ubmFtZV0/LnZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc0NvbnRhaW5zICYmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZU9mQ25ydHJsVG9DaGVjaykgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2suaW5jbHVkZXMob3BlcmFuZDIpKSAmJiB0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Py5uYW1lXT8udmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wZXJhbmQyICE9ICdudWxsJyAmJiAhaXNEb2VzTm90RXF1YWwgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2sgPT09IG9wZXJhbmQyICYmICF2YWx1ZU9mQWN0dWFsQ29udHJvbD8udG9TdHJpbmcoKS50cmltKCkgJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQ/Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChvcGVyYW5kMiAhPSAnbnVsbCcgJiYgaXNEb2VzTm90RXF1YWwgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2sgIT0gb3BlcmFuZDIgJiYgIXZhbHVlT2ZBY3R1YWxDb250cm9sPy50b1N0cmluZygpLnRyaW0oKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc051bGxPclVuZGVmaW5lZCh2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIHNldEVxdWFsc1ZhbGlkYXRpb24oZWxlbWVudDogYW55LCBzaGFyZWREYXRhOiBhbnkpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApID0+IHtcclxuICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgc2V0UGFzc3dvcmRWYWxpZGF0aW9uKGVsZW1lbnQ6IGFueSwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBlbGVtZW50LnZhbGlkYXRvcnM7XHJcbiAgICAgICAgICAgIHZhciBzcGxpdEFycmF5O1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JMaXN0LmZvckVhY2godmFsaWRhdG9yID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2V4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHZhbGlkYXRvci5leHByZXNzaW9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcblxyXG5cclxuICAgICAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSBleHByZXNzaW9uLmluZGV4T2YoJz09PScpO1xyXG4gICAgICAgICAgICBsZXQgaXNFcXVhbE9wZXJhbmQ6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCc+Jyk7XHJcbiAgICAgICAgICAgICAgICBpc0VxdWFsT3BlcmFuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09PScpO1xyXG4gICAgICAgICAgICAgICAgaXNFcXVhbE9wZXJhbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgb3BlcmFuZDE6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF07XHJcbiAgICAgICAgICAgIGxldCBvcGVyYW5kMjogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICAgICAgLy8gIGNvbnNvbGUubG9nKCdzZXREYXRlVmFsaWRhdGlvbiBzaGFyZWREYXRhJywgc2hhcmVkRGF0YSk7XHJcblxyXG5cclxuICAgICAgICAgICAgb3BlcmFuZDEgPSBvcGVyYW5kMS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICAgICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdjb250cm9sLnBhcmVudCcsIGNvbnRyb2wucGFyZW50KVxyXG4gICAgICAgICAgICBsZXQgY29udHJvbDEgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdO1xyXG4gICAgICAgICAgICBsZXQgY29udHJvbDIgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDJdO1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbDEudmFsdWUgIT0gY29udHJvbDIudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHBhc3N3b3JkQ29tcGFyaXNpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBwYXNzd29yZENvbXBhcmlzaW9uOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIHNldERhdGVWYWxpZGF0aW9uKGVsZW1lbnQ6IGFueSwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBlbGVtZW50LnZhbGlkYXRvcnM7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCB2YWxpZGF0b3Igb2YgdmFsaWRhdG9yTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnZXhwcmVzc2lvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gdmFsaWRhdG9yLmV4cHJlc3Npb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcGVyYXRvciA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCc+PScpIHx8IGV4cHJlc3Npb24uaW5jbHVkZXMoJzw9JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmluY2x1ZGVzKCc+PScpID8gJz49JyA6ICc8PSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmluY2x1ZGVzKCc+JykgPyAnPicgOiAnPCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXRBcnJheTogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KG9wZXJhdG9yKS5tYXAoc3RyID0+IHN0ci50cmltKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcGVyYW5kMTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3BlcmFuZDI6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhbmQxID0gb3BlcmFuZDEucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udHJvbDEgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250cm9sMiA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMl07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRlMTogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRlMjogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTEgPSBuZXcgRGF0ZShjb250cm9sMS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkRGF0YS5mb3JFYWNoKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHJJbnRvT2JqID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJJbnRvT2JqW29wZXJhbmQxXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUxID0gbmV3IERhdGUoc3RySW50b09ialtvcGVyYW5kMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUyID0gbmV3IERhdGUoY29udHJvbDIudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZERhdGEuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RySW50b09iaiA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RySW50b09ialtvcGVyYW5kMl0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlMiA9IG5ldyBEYXRlKHN0ckludG9PYmpbb3BlcmFuZDJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZTEgJiYgZGF0ZTIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09PSAnPj0nICYmIGRhdGUxID49IGRhdGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gJzw9JyAmJiBkYXRlMSA8PSBkYXRlMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgPT09ICc+JyAmJiBkYXRlMSA+IGRhdGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gJzwnICYmIGRhdGUxIDwgZGF0ZTIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgZGF0ZUNvbXBhcmlzaW9uOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0ZUNvbXBhcmlzaW9uOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzRXF1YWwodmFsdWUpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICE9IGNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IG5vdEVxdWFsOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjYWxjdWxhdGVPcGVyYW5kVmFsdWUoc3RyRXhwOiBzdHJpbmcsIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xyXG4gICAgICAgIHZhciBzcGxpdEFycmF5OiBzdHJpbmdbXTtcclxuICAgICAgICBsZXQgaXNEb2VzTm90RXF1YWw6IGJvb2xlYW47XHJcbiAgICAgICAgbGV0IGlzQ29udGFpbnM6IGJvb2xlYW47XHJcbiAgICAgICAgaWYgKHN0ckV4cC5pbmNsdWRlcygnPT0nKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gc3RyRXhwLnNwbGl0KCc9PScpO1xyXG4gICAgICAgICAgICBpc0RvZXNOb3RFcXVhbCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc3RyRXhwLmluY2x1ZGVzKCchPScpKSB7XHJcbiAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBzdHJFeHAuc3BsaXQoJyE9Jyk7XHJcbiAgICAgICAgICAgIGlzRG9lc05vdEVxdWFsID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHN0ckV4cC5pbmNsdWRlcygnY29udGFpbnMnKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gc3RyRXhwLnNwbGl0KCdjb250YWlucycpO1xyXG4gICAgICAgICAgICBpc0NvbnRhaW5zID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG9wZXJhbmQxOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdO1xyXG4gICAgICAgIGxldCBvcGVyYW5kMjogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICBvcGVyYW5kMSA9IG9wZXJhbmQxLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7IC8vY2xhaW1hbnRQcmlvclBheTEwMlxyXG4gICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTsgLy9udWxsXHJcbiAgICAgICAgdmFyIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ29wZXJhbmQxJyxvcGVyYW5kMSk7XHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0gJiYgZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZSAmJiB0eXBlb2YgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0pLnZhbHVlID09PSAnc3RyaW5nJykge1xyXG5cclxuICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlLnRyaW0oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdICYmIGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWUgJiYgdHlwZW9mIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdKS52YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdvcGVyYW5mb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlW3ZhbHVlXScsZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVswXSk7XHJcbiAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlWyd2YWx1ZSddKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbJ3ZhbHVlJ10udHJpbSgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbMF0pIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChvcGVyYW5kMiA9PT0gJ251bGwnICYmIGlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3BlcmFuZDIgPT09ICdudWxsJyAmJiAhaXNEb2VzTm90RXF1YWwgJiYgIXZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvcGVyYW5kMiA9IG9wZXJhbmQyLnJlcGxhY2UoJ1xcJycsICcnKS5yZXBsYWNlKCdcXCcnLCAnJykudHJpbSgpOyAvL251bGxcclxuXHJcbiAgICAgICAgaWYgKGlzQ29udGFpbnMgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIEFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNDb250YWlucyAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgIUFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3BlcmFuZDIgIT0gJ251bGwnICYmICFpc0RvZXNOb3RFcXVhbCAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2sgPT09IG9wZXJhbmQyKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcGVyYW5kMiAhPSAnbnVsbCcgJiYgaXNEb2VzTm90RXF1YWwgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLnRyaW0oKSAhPSBvcGVyYW5kMikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG59Il19
@@ -13971,6 +13971,9 @@ class AppValidators {
13971
13971
  isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, null)
13972
13972
  && AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, null);
13973
13973
  }
13974
+ else if (expression) {
13975
+ isRequired = AppValidators.calculateOperandValueForRequiredIf(expression.trim(), formGroup, element, null);
13976
+ }
13974
13977
  if (isRequired) {
13975
13978
  if (currentFormControl.value === " ") {
13976
13979
  currentFormControl.setErrors({ wcRequired: true });
@@ -14259,10 +14262,10 @@ class AppValidators {
14259
14262
  if (valueOfCnrtrlToCheck && !Array.isArray(valueOfCnrtrlToCheck)) {
14260
14263
  valueOfCnrtrlToCheck = valueOfCnrtrlToCheck.trim();
14261
14264
  }
14262
- if (operand2 === 'null' && isDoesNotEqual && valueOfCnrtrlToCheck && !valueOfActualControl) {
14265
+ if (operand2 === 'null' && isDoesNotEqual && valueOfCnrtrlToCheck && !valueOfActualControl?.toString().trim()) {
14263
14266
  return true;
14264
14267
  }
14265
- if (operand2 === 'null' && !isDoesNotEqual && valueOfCnrtrlToCheck && valueOfActualControl) {
14268
+ if (operand2 === 'null' && !isDoesNotEqual && valueOfCnrtrlToCheck && valueOfActualControl?.toString().trim()) {
14266
14269
  return true;
14267
14270
  }
14268
14271
  operand2 = operand2.replace(/\'/g, ""); //null
@@ -14272,10 +14275,10 @@ class AppValidators {
14272
14275
  if (isContains && (valueOfCnrtrlToCheck && !Array.isArray(valueOfCnrtrlToCheck) && valueOfCnrtrlToCheck.includes(operand2)) && this.isNullOrUndefined(formGroup.controls[element?.name]?.value)) {
14273
14276
  return true;
14274
14277
  }
14275
- if (operand2 != 'null' && !isDoesNotEqual && valueOfCnrtrlToCheck === operand2 && !valueOfActualControl && formGroup.controls[element?.name]) {
14278
+ if (operand2 != 'null' && !isDoesNotEqual && valueOfCnrtrlToCheck === operand2 && !valueOfActualControl?.toString().trim() && formGroup.controls[element?.name]) {
14276
14279
  return true;
14277
14280
  }
14278
- if (operand2 != 'null' && isDoesNotEqual && valueOfCnrtrlToCheck != operand2 && !valueOfActualControl) {
14281
+ if (operand2 != 'null' && isDoesNotEqual && valueOfCnrtrlToCheck != operand2 && !valueOfActualControl?.toString().trim()) {
14279
14282
  return true;
14280
14283
  }
14281
14284
  return false;
@@ -44691,9 +44694,9 @@ class HistoryPageComponent {
44691
44694
  this.es
44692
44695
  .disableHistoryButton(this.selectedModel.transactionId, this.selectedModel.historyKey)
44693
44696
  .subscribe(res => {
44694
- timer(2000).subscribe(() => {
44695
- this.loadHistory();
44696
- });
44697
+ setTimeout(() => {
44698
+ window.location.reload();
44699
+ }, 1000);
44697
44700
  }, err => {
44698
44701
  this.logger.error("Error while deactivating the event.", err);
44699
44702
  });