@sbcore/ng-absolute-validator 14.0.1 → 14.1.0

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.
Files changed (41) hide show
  1. package/README.md +243 -257
  2. package/esm2020/i18n/ar.mjs +68 -0
  3. package/esm2020/i18n/index.mjs +12 -0
  4. package/esm2020/lib/common.utils.mjs +12 -1
  5. package/esm2020/lib/config-interface.mjs +1 -1
  6. package/esm2020/lib/constant.mjs +2 -2
  7. package/esm2020/lib/directive/error-trigger/error-trigger-on.directive.mjs +1 -1
  8. package/esm2020/lib/interface.mjs +2 -14
  9. package/esm2020/lib/lang.config.mjs +26 -0
  10. package/esm2020/lib/ng-absolute-validator.component.mjs +5 -3
  11. package/esm2020/lib/ng-absolute-validator.module.mjs +10 -22
  12. package/esm2020/lib/ng-absolute-validator.service.mjs +14 -6
  13. package/esm2020/lib/pipe/index.mjs +2 -0
  14. package/esm2020/lib/pipe/replaceWith/replace-with.pipe.mjs +17 -0
  15. package/esm2020/lib/services/http.request.service.mjs +4 -3
  16. package/esm2020/lib/services/messages-builder.service.mjs +30 -33
  17. package/esm2020/lib/services/reactive.validate.mjs +4 -3
  18. package/esm2020/lib/services/utils.service.mjs +4 -3
  19. package/esm2020/lib/services/validate-rule.service.mjs +15 -10
  20. package/esm2020/lib/transator.loader.mjs +35 -24
  21. package/esm2020/public-api.mjs +2 -1
  22. package/fesm2015/sbcore-ng-absolute-validator.mjs +213 -97
  23. package/fesm2015/sbcore-ng-absolute-validator.mjs.map +1 -1
  24. package/fesm2020/sbcore-ng-absolute-validator.mjs +212 -99
  25. package/fesm2020/sbcore-ng-absolute-validator.mjs.map +1 -1
  26. package/i18n/ar.d.ts +68 -0
  27. package/i18n/index.d.ts +11 -0
  28. package/lib/common.utils.d.ts +4 -0
  29. package/lib/config-interface.d.ts +1 -2
  30. package/lib/constant.d.ts +1 -1
  31. package/lib/interface.d.ts +7 -3
  32. package/lib/lang.config.d.ts +1 -0
  33. package/lib/ng-absolute-validator.module.d.ts +6 -9
  34. package/lib/ng-absolute-validator.service.d.ts +8 -3
  35. package/lib/pipe/index.d.ts +1 -0
  36. package/lib/pipe/replaceWith/replace-with.pipe.d.ts +7 -0
  37. package/lib/services/messages-builder.service.d.ts +5 -3
  38. package/lib/services/validate-rule.service.d.ts +4 -2
  39. package/lib/transator.loader.d.ts +5 -3
  40. package/package.json +2 -2
  41. package/public-api.d.ts +1 -0
@@ -49,19 +49,27 @@ export class NgAbsoluteValidatorService {
49
49
  return this.VLIDATOR_CONFIG.delayLoader || 0;
50
50
  }
51
51
  /**
52
- * @description This method state of triger validation
53
- * @returns boolean
54
- **/
52
+ * @description This method state of triger validation
53
+ * @returns boolean
54
+ **/
55
55
  get showErrorOn() {
56
56
  return (this.VLIDATOR_CONFIG.showErrorOn || DEFAULT_TRIGGER_STATE);
57
57
  }
58
+ /**
59
+ * @description Display all validation error instande of latest one
60
+ * @returns boolean
61
+ **/
62
+ get showAllErrors() {
63
+ return this.VLIDATOR_CONFIG.showAllErrors ?? false;
64
+ }
58
65
  }
59
66
  NgAbsoluteValidatorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgAbsoluteValidatorService, deps: [{ token: LIB_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
60
- NgAbsoluteValidatorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgAbsoluteValidatorService });
67
+ NgAbsoluteValidatorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgAbsoluteValidatorService, providedIn: 'root' });
61
68
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgAbsoluteValidatorService, decorators: [{
62
- type: Injectable
69
+ type: Injectable,
70
+ args: [{ providedIn: 'root' }]
63
71
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
64
72
  type: Inject,
65
73
  args: [LIB_CONFIG]
66
74
  }] }]; } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctYWJzb2x1dGUtdmFsaWRhdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1hYnNvbHV0ZS12YWxpZGF0b3Ivc3JjL2xpYi9uZy1hYnNvbHV0ZS12YWxpZGF0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWtCLFVBQVUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBSW5FLE1BQU0sT0FBTywwQkFBMEI7SUFJbkMsWUFDZ0MsTUFBc0I7UUFBdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFIL0Msb0JBQWUsR0FBdUIsRUFBRSxDQUFDO1FBSTlDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUFBLENBQUM7SUFFZCxJQUFJO1FBQ0EsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLFlBQVk7UUFDWixPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztJQUNqSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxXQUFXO1FBQ1gsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7SUFDL0csQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksYUFBYTtRQUNiLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFBO1FBQ2pELE9BQU8sQ0FBQyxPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFBO0lBQ3BGLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLGFBQWE7UUFDYixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7UUFDckQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFQTs7O01BR0U7SUFDSCxJQUFJLFdBQVc7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLElBQUkscUJBQXFCLENBQXdCLENBQUE7SUFDN0YsQ0FBQzs7dUhBNURRLDBCQUEwQixrQkFLdkIsVUFBVTsySEFMYiwwQkFBMEI7MkZBQTFCLDBCQUEwQjtrQkFEdEMsVUFBVTs7MEJBTUYsTUFBTTsyQkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbmZpZ0ludGVyZmFjZSxMSUJfQ09ORklHfSBmcm9tICcuL2NvbmZpZy1pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBERUZBVUxUX1RSSUdHRVJfU1RBVEUsIEdsb2JhbENvbnN0YW50IH0gZnJvbSAnLi9jb25zdGFudCc7XHJcbmltcG9ydCB7IEVycm9yVHJpZ2dlclN0YXRlIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTmdBYnNvbHV0ZVZhbGlkYXRvclNlcnZpY2Uge1xyXG5cclxuICAgIHB1YmxpYyBWTElEQVRPUl9DT05GSUcgICA6IENvbmZpZ0ludGVyZmFjZSA9IHt9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoTElCX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6Q29uZmlnSW50ZXJmYWNlXHJcbiAgICApe3RoaXMuaW5pdCgpfVxyXG5cclxuICAgIGluaXQoKXtcclxuICAgICAgICB0aGlzLlZMSURBVE9SX0NPTkZJRyA9IHRoaXMuY29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoaXMgbWV0aG9kIGdpdmUgaXMgcmVtb3RlIGxvY2FkZXIgaXMgZW5hYmxlIG9yIG5vdFxyXG4gICAgICogQHJldHVybnMgQm9vbGVhblxyXG4gICAgKiovXHJcbiAgICBnZXQgcmVtb3RlTG9hZGVyKCl7XHJcbiAgICAgICAgcmV0dXJuICh0eXBlb2YgdGhpcy5WTElEQVRPUl9DT05GSUcucmVtb3RlTG9hZGVyID09PSAndW5kZWZpbmVkJykgPyB0cnVlIDogdGhpcy5WTElEQVRPUl9DT05GSUcucmVtb3RlTG9hZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoaXMgbWV0aG9kIGdpdmUgaXMgcmVtb3RlIGxvY2FkZXIgaXMgZW5hYmxlIG9yIG5vdFxyXG4gICAgICogQHJldHVybnMgQm9vbGVhblxyXG4gICAgKiovXHJcbiAgICBnZXQgc3RyZW5ndGhCYXIoKXtcclxuICAgICAgICByZXR1cm4gKHR5cGVvZiB0aGlzLlZMSURBVE9SX0NPTkZJRy5zdHJlbmd0aEJhciA9PT0gJ3VuZGVmaW5lZCcpID8gdHJ1ZSA6IHRoaXMuVkxJREFUT1JfQ09ORklHLnN0cmVuZ3RoQmFyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoaXMgbWV0aG9kIHJldHVybiB0aGUgY29sb3Igb2YgdGhlIGJhciBiYXNlZCBvbiBjb25maWdcclxuICAgICAqIEByZXR1cm5zIE9iamVjdFxyXG4gICAgKiovXHJcbiAgICBnZXQgc3RyZW5ndGhDb2xvcigpe1xyXG4gICAgICAgIGxldCBzdHJDb2xvciA9IHRoaXMuVkxJREFUT1JfQ09ORklHLnN0cmVuZ3RoQ29sb3JcclxuICAgICAgICByZXR1cm4gKHR5cGVvZiBzdHJDb2xvciA9PT0gJ29iamVjdCcpID8gc3RyQ29sb3IgOiBHbG9iYWxDb25zdGFudC5zdHJlbmd0aF9jb2xvclxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoaXMgbWV0aG9kIHJldHVybiB0aGUgbGlzdCBvZiByZWdleCBjb25maWcgdG8gdmxpZGF0ZVxyXG4gICAgICogQHJldHVybnMgT2JqZWN0XHJcbiAgICAqKi9cclxuICAgIGdldCBzdHJlbmd0aExldmVsKCl7XHJcbiAgICAgICAgbGV0IGxldmVsID0gdGhpcy5WTElEQVRPUl9DT05GSUcuc3RyZW5ndGhMZXZlbCB8fCB7fTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihHbG9iYWxDb25zdGFudC5zdHJlbmd0aF9sZXZlbCxsZXZlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhpcyBtZXRob2QgY2hlY2sgaXMgdGhlIGxvYWRlciBzaG91bGQgZGlzcGxheSBvciBub3RcclxuICAgICAqIEByZXR1cm5zIGJvb2xlYW5cclxuICAgICoqL1xyXG4gICAgZ2V0IGRlbGF5TG9hZGVyKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuVkxJREFUT1JfQ09ORklHLmRlbGF5TG9hZGVyIHx8IDA7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoaXMgbWV0aG9kIHN0YXRlIG9mIHRyaWdlciB2YWxpZGF0aW9uXHJcbiAgICAgKiBAcmV0dXJucyBib29sZWFuXHJcbiAgICAqKi9cclxuICAgIGdldCBzaG93RXJyb3JPbigpOiBFcnJvclRyaWdnZXJTdGF0ZVtdIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuVkxJREFUT1JfQ09ORklHLnNob3dFcnJvck9uIHx8IERFRkFVTFRfVFJJR0dFUl9TVEFURSkgYXMgRXJyb3JUcmlnZ2VyU3RhdGVbXVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctYWJzb2x1dGUtdmFsaWRhdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1hYnNvbHV0ZS12YWxpZGF0b3Ivc3JjL2xpYi9uZy1hYnNvbHV0ZS12YWxpZGF0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWtCLFVBQVUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBSW5FLE1BQU0sT0FBTywwQkFBMEI7SUFJbkMsWUFDZ0MsTUFBc0I7UUFBdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFIL0Msb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBSTVDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUFBLENBQUM7SUFFZCxJQUFJO1FBQ0EsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLFlBQVk7UUFDWixPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztJQUNqSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxXQUFXO1FBQ1gsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7SUFDL0csQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksYUFBYTtRQUNiLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFBO1FBQ2pELE9BQU8sQ0FBQyxPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFBO0lBQ3BGLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLGFBQWE7UUFDYixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7UUFDckQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLFdBQVc7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLElBQUkscUJBQXFCLENBQXdCLENBQUE7SUFDN0YsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFBO0lBQ3RELENBQUM7O3VIQXBFUSwwQkFBMEIsa0JBS3ZCLFVBQVU7MkhBTGIsMEJBQTBCLGNBRGIsTUFBTTsyRkFDbkIsMEJBQTBCO2tCQUR0QyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBTXpCLE1BQU07MkJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25maWdJbnRlcmZhY2UsTElCX0NPTkZJR30gZnJvbSAnLi9jb25maWctaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgREVGQVVMVF9UUklHR0VSX1NUQVRFLCBHbG9iYWxDb25zdGFudCB9IGZyb20gJy4vY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBFcnJvclRyaWdnZXJTdGF0ZSB9IGZyb20gJy4vaW50ZXJmYWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBOZ0Fic29sdXRlVmFsaWRhdG9yU2VydmljZSB7XHJcblxyXG4gICAgcHVibGljIFZMSURBVE9SX0NPTkZJRyA6IENvbmZpZ0ludGVyZmFjZSA9IHt9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoTElCX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6Q29uZmlnSW50ZXJmYWNlXHJcbiAgICApe3RoaXMuaW5pdCgpfVxyXG5cclxuICAgIGluaXQoKXtcclxuICAgICAgICB0aGlzLlZMSURBVE9SX0NPTkZJRyA9IHRoaXMuY29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoaXMgbWV0aG9kIGdpdmUgaXMgcmVtb3RlIGxvY2FkZXIgaXMgZW5hYmxlIG9yIG5vdFxyXG4gICAgICogQHJldHVybnMgQm9vbGVhblxyXG4gICAgKiovXHJcbiAgICBnZXQgcmVtb3RlTG9hZGVyKCl7XHJcbiAgICAgICAgcmV0dXJuICh0eXBlb2YgdGhpcy5WTElEQVRPUl9DT05GSUcucmVtb3RlTG9hZGVyID09PSAndW5kZWZpbmVkJykgPyB0cnVlIDogdGhpcy5WTElEQVRPUl9DT05GSUcucmVtb3RlTG9hZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoaXMgbWV0aG9kIGdpdmUgaXMgcmVtb3RlIGxvY2FkZXIgaXMgZW5hYmxlIG9yIG5vdFxyXG4gICAgICogQHJldHVybnMgQm9vbGVhblxyXG4gICAgKiovXHJcbiAgICBnZXQgc3RyZW5ndGhCYXIoKXtcclxuICAgICAgICByZXR1cm4gKHR5cGVvZiB0aGlzLlZMSURBVE9SX0NPTkZJRy5zdHJlbmd0aEJhciA9PT0gJ3VuZGVmaW5lZCcpID8gdHJ1ZSA6IHRoaXMuVkxJREFUT1JfQ09ORklHLnN0cmVuZ3RoQmFyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoaXMgbWV0aG9kIHJldHVybiB0aGUgY29sb3Igb2YgdGhlIGJhciBiYXNlZCBvbiBjb25maWdcclxuICAgICAqIEByZXR1cm5zIE9iamVjdFxyXG4gICAgKiovXHJcbiAgICBnZXQgc3RyZW5ndGhDb2xvcigpe1xyXG4gICAgICAgIGxldCBzdHJDb2xvciA9IHRoaXMuVkxJREFUT1JfQ09ORklHLnN0cmVuZ3RoQ29sb3JcclxuICAgICAgICByZXR1cm4gKHR5cGVvZiBzdHJDb2xvciA9PT0gJ29iamVjdCcpID8gc3RyQ29sb3IgOiBHbG9iYWxDb25zdGFudC5zdHJlbmd0aF9jb2xvclxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoaXMgbWV0aG9kIHJldHVybiB0aGUgbGlzdCBvZiByZWdleCBjb25maWcgdG8gdmxpZGF0ZVxyXG4gICAgICogQHJldHVybnMgT2JqZWN0XHJcbiAgICAqKi9cclxuICAgIGdldCBzdHJlbmd0aExldmVsKCl7XHJcbiAgICAgICAgbGV0IGxldmVsID0gdGhpcy5WTElEQVRPUl9DT05GSUcuc3RyZW5ndGhMZXZlbCB8fCB7fTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihHbG9iYWxDb25zdGFudC5zdHJlbmd0aF9sZXZlbCxsZXZlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhpcyBtZXRob2QgY2hlY2sgaXMgdGhlIGxvYWRlciBzaG91bGQgZGlzcGxheSBvciBub3RcclxuICAgICAqIEByZXR1cm5zIGJvb2xlYW5cclxuICAgICoqL1xyXG4gICAgZ2V0IGRlbGF5TG9hZGVyKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuVkxJREFUT1JfQ09ORklHLmRlbGF5TG9hZGVyIHx8IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhpcyBtZXRob2Qgc3RhdGUgb2YgdHJpZ2VyIHZhbGlkYXRpb25cclxuICAgICAqIEByZXR1cm5zIGJvb2xlYW5cclxuICAgICoqL1xyXG4gICAgZ2V0IHNob3dFcnJvck9uKCk6IEVycm9yVHJpZ2dlclN0YXRlW10ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5WTElEQVRPUl9DT05GSUcuc2hvd0Vycm9yT24gfHwgREVGQVVMVF9UUklHR0VSX1NUQVRFKSBhcyBFcnJvclRyaWdnZXJTdGF0ZVtdXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRGlzcGxheSBhbGwgdmFsaWRhdGlvbiBlcnJvciBpbnN0YW5kZSBvZiBsYXRlc3Qgb25lXHJcbiAgICAgKiBAcmV0dXJucyBib29sZWFuXHJcbiAgICAqKi9cclxuICAgIGdldCBzaG93QWxsRXJyb3JzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLlZMSURBVE9SX0NPTkZJRy5zaG93QWxsRXJyb3JzID8/IGZhbHNlXHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,2 @@
1
+ export * from './replaceWith/replace-with.pipe';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1hYnNvbHV0ZS12YWxpZGF0b3Ivc3JjL2xpYi9waXBlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUNBQWlDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3JlcGxhY2VXaXRoL3JlcGxhY2Utd2l0aC5waXBlJ1xyXG4iXX0=
@@ -0,0 +1,17 @@
1
+ import { Pipe } from '@angular/core';
2
+ import { formatMessage } from '../../common.utils';
3
+ import * as i0 from "@angular/core";
4
+ export class ReplaceWithPipe {
5
+ transform(value, data) {
6
+ return formatMessage(value, { attr: data.attr, args: data.args });
7
+ }
8
+ }
9
+ ReplaceWithPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReplaceWithPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
10
+ ReplaceWithPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: ReplaceWithPipe, name: "replaceWith" });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReplaceWithPipe, decorators: [{
12
+ type: Pipe,
13
+ args: [{
14
+ name: 'replaceWith'
15
+ }]
16
+ }] });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGFjZS13aXRoLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1hYnNvbHV0ZS12YWxpZGF0b3Ivc3JjL2xpYi9waXBlL3JlcGxhY2VXaXRoL3JlcGxhY2Utd2l0aC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLGVBQWU7SUFFeEIsU0FBUyxDQUFDLEtBQWEsRUFBRSxJQUFTO1FBQzlCLE9BQU8sYUFBYSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUNyRSxDQUFDOzs0R0FKUSxlQUFlOzBHQUFmLGVBQWU7MkZBQWYsZUFBZTtrQkFIM0IsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsYUFBYTtpQkFDdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3JtYXRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vY29tbW9uLnV0aWxzJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdyZXBsYWNlV2l0aCdcbn0pXG5leHBvcnQgY2xhc3MgUmVwbGFjZVdpdGhQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZywgZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdE1lc3NhZ2UodmFsdWUsIHsgYXR0cjogZGF0YS5hdHRyLCBhcmdzOiBkYXRhLmFyZ3MgfSlcbiAgICB9XG59XG4iXX0=
@@ -13,8 +13,9 @@ export class HttpRequestService {
13
13
  }
14
14
  }
15
15
  HttpRequestService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HttpRequestService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
16
- HttpRequestService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HttpRequestService });
16
+ HttpRequestService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HttpRequestService, providedIn: 'root' });
17
17
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HttpRequestService, decorators: [{
18
- type: Injectable
18
+ type: Injectable,
19
+ args: [{ providedIn: 'root' }]
19
20
  }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5yZXF1ZXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1hYnNvbHV0ZS12YWxpZGF0b3Ivc3JjL2xpYi9zZXJ2aWNlcy9odHRwLnJlcXVlc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFLM0MsTUFBTSxPQUFPLGtCQUFrQjtJQUUzQixZQUNjLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7SUFDMUIsQ0FBQztJQUVMLEdBQUcsQ0FBQyxVQUFrQixFQUFFLE1BQU0sR0FBRyxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVEsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsSUFBSSxDQUFDLFVBQWtCLEVBQUUsT0FBWSxFQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUU7UUFDaEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBUSxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDOzsrR0FaUSxrQkFBa0I7bUhBQWxCLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgSHR0cFJlcXVlc3RTZXJ2aWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBnZXQoYWN0aW9uX3VybDogc3RyaW5nLCBwYXJhbXMgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KGFjdGlvbl91cmwsIHsgcGFyYW1zIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3QoYWN0aW9uX3VybDogc3RyaW5nLCBkYXRhOiBhbnkgPSB7fSwgcGFyYW1zID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnlbXT4oYWN0aW9uX3VybCwgZGF0YSwgeyBwYXJhbXMgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5yZXF1ZXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1hYnNvbHV0ZS12YWxpZGF0b3Ivc3JjL2xpYi9zZXJ2aWNlcy9odHRwLnJlcXVlc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFLM0MsTUFBTSxPQUFPLGtCQUFrQjtJQUUzQixZQUNjLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7SUFDMUIsQ0FBQztJQUVMLEdBQUcsQ0FBQyxVQUFrQixFQUFFLE1BQU0sR0FBRyxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVEsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsSUFBSSxDQUFDLFVBQWtCLEVBQUUsT0FBWSxFQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUU7UUFDaEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBUSxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDOzsrR0FaUSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQURMLE1BQU07MkZBQ25CLGtCQUFrQjtrQkFEOUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBIdHRwUmVxdWVzdFNlcnZpY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50XHJcbiAgICApIHsgfVxyXG5cclxuICAgIGdldChhY3Rpb25fdXJsOiBzdHJpbmcsIHBhcmFtcyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4oYWN0aW9uX3VybCwgeyBwYXJhbXMgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdChhY3Rpb25fdXJsOiBzdHJpbmcsIGRhdGE6IGFueSA9IHt9LCBwYXJhbXMgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueVtdPihhY3Rpb25fdXJsLCBkYXRhLCB7IHBhcmFtcyB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,46 +1,43 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { toArray } from '../common.utils';
2
+ import { I18N_LANG_PREFIX } from '../constant';
3
+ import { formatMessage } from '../common.utils';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "@ngx-translate/core";
5
6
  export class MessageBuilderService {
6
- constructor(ts) {
7
- this.ts = ts;
7
+ constructor(translate) {
8
+ this.translate = translate;
8
9
  }
9
10
  call(langAttr, attribute, ...args) {
10
- let message = '';
11
- let [lastElement] = args.slice(-1);
12
- let template = this.ts.instant(langAttr) || '';
13
- let hasCustomTemplate = typeof lastElement === 'object' && Object.keys(lastElement).length > 0;
14
- if (hasCustomTemplate && lastElement[langAttr] && lastElement[langAttr][this.ts.currentLang]) {
15
- template = lastElement[langAttr][this.ts.currentLang];
11
+ const [lastElement] = args.slice(-1);
12
+ const inputArgs = args.filter((arg) => typeof arg !== 'object');
13
+ const i18nKey = `${I18N_LANG_PREFIX}.${langAttr}`;
14
+ const translate = this.translate;
15
+ if (typeof lastElement === 'object' && Object.keys(lastElement).length > 0) {
16
+ this.injectToTranslation(langAttr, lastElement);
17
+ this.translate.onLangChange.subscribe(() => this.injectToTranslation(langAttr, lastElement));
16
18
  }
17
- if (hasCustomTemplate && lastElement[this.ts.currentLang]) {
18
- template = lastElement[this.ts.currentLang];
19
- }
20
- if (attribute && template) {
21
- message = template.replace(':attribute', attribute);
22
- }
23
- if (args.length === 0) {
24
- return message;
25
- }
26
- args.forEach((v, index) => {
27
- let replaceWithOne = `:arg${index}`;
28
- let replaceWithMulti = `:arg${index}:`;
29
- if (message.includes(replaceWithMulti)) {
30
- args = args.splice(index);
31
- let argString = toArray(args) ? toArray(args).join(',') : args;
32
- message = message.replace(replaceWithMulti, argString);
19
+ return {
20
+ args: inputArgs,
21
+ attr: attribute,
22
+ i18nKey: i18nKey,
23
+ get lang() {
24
+ return translate.currentLang;
25
+ },
26
+ get message() {
27
+ return formatMessage(translate.instant(i18nKey), { attr: attribute, args: inputArgs });
33
28
  }
34
- if (message.includes(replaceWithOne)) {
35
- message = message.replace(replaceWithOne, v);
36
- }
37
- });
38
- return message;
29
+ };
30
+ }
31
+ injectToTranslation(langAttr, translation = {}) {
32
+ for (let lang of Object.keys(translation)) {
33
+ this.translate.setTranslation(lang, { [I18N_LANG_PREFIX]: { [langAttr]: translation[lang] } }, true);
34
+ }
39
35
  }
40
36
  }
41
37
  MessageBuilderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MessageBuilderService, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
42
- MessageBuilderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MessageBuilderService });
38
+ MessageBuilderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MessageBuilderService, providedIn: 'root' });
43
39
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MessageBuilderService, decorators: [{
44
- type: Injectable
40
+ type: Injectable,
41
+ args: [{ providedIn: 'root' }]
45
42
  }], ctorParameters: function () { return [{ type: i1.TranslateService }]; } });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMtYnVpbGRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYWJzb2x1dGUtdmFsaWRhdG9yL3NyYy9saWIvc2VydmljZXMvbWVzc2FnZXMtYnVpbGRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFJMUMsTUFBTSxPQUFPLHFCQUFxQjtJQUU5QixZQUNZLEVBQXFCO1FBQXJCLE9BQUUsR0FBRixFQUFFLENBQW1CO0lBQy9CLENBQUM7SUFFSCxJQUFJLENBQUMsUUFBZ0IsRUFBRSxTQUFpQixFQUFFLEdBQUcsSUFBUztRQUNsRCxJQUFJLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxJQUFJLFFBQVEsR0FBWSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDdkQsSUFBSSxpQkFBaUIsR0FBRyxPQUFPLFdBQVcsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRS9GLElBQUcsaUJBQWlCLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFDO1lBQ3hGLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQTtTQUN4RDtRQUNELElBQUcsaUJBQWlCLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUM7WUFDckQsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1NBQzlDO1FBQ0QsSUFBSSxTQUFTLElBQUksUUFBUSxFQUFFO1lBQ3ZCLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN2RDtRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFBRSxPQUFPLE9BQU8sQ0FBQztTQUFFO1FBRTFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFRLEVBQUUsS0FBWSxFQUFFLEVBQUU7WUFDcEMsSUFBSSxjQUFjLEdBQUssT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxJQUFJLGdCQUFnQixHQUFHLE9BQU8sS0FBSyxHQUFHLENBQUM7WUFFdkMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7Z0JBQ3BDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMxQixJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDL0QsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsU0FBbUIsQ0FBQyxDQUFBO2FBQ25FO1lBRUQsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUNsQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUE7YUFDL0M7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7O2tIQXhDUSxxQkFBcUI7c0hBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnLi4vY29tbW9uLnV0aWxzJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTWVzc2FnZUJ1aWxkZXJTZXJ2aWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHRzIDogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICl7fVxyXG5cclxuICAgIGNhbGwobGFuZ0F0dHI6IHN0cmluZywgYXR0cmlidXRlOiBzdHJpbmcsIC4uLmFyZ3M6IGFueSkgOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBtZXNzYWdlICAgICAgICAgICA9ICcnO1xyXG4gICAgICAgIGxldCBbbGFzdEVsZW1lbnRdICAgICA9IGFyZ3Muc2xpY2UoLTEpO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZSAgICAgICAgICA9IHRoaXMudHMuaW5zdGFudChsYW5nQXR0cikgfHwgJydcclxuICAgICAgICBsZXQgaGFzQ3VzdG9tVGVtcGxhdGUgPSB0eXBlb2YgbGFzdEVsZW1lbnQgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKGxhc3RFbGVtZW50KS5sZW5ndGggPiAwO1xyXG5cclxuICAgICAgICBpZihoYXNDdXN0b21UZW1wbGF0ZSAmJiBsYXN0RWxlbWVudFtsYW5nQXR0cl0gJiYgbGFzdEVsZW1lbnRbbGFuZ0F0dHJdW3RoaXMudHMuY3VycmVudExhbmddKXtcclxuICAgICAgICAgICAgdGVtcGxhdGUgPSBsYXN0RWxlbWVudFtsYW5nQXR0cl1bdGhpcy50cy5jdXJyZW50TGFuZ11cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoaGFzQ3VzdG9tVGVtcGxhdGUgJiYgbGFzdEVsZW1lbnRbdGhpcy50cy5jdXJyZW50TGFuZ10pe1xyXG4gICAgICAgICAgICB0ZW1wbGF0ZSA9IGxhc3RFbGVtZW50W3RoaXMudHMuY3VycmVudExhbmddXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhdHRyaWJ1dGUgJiYgdGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgbWVzc2FnZSA9IHRlbXBsYXRlLnJlcGxhY2UoJzphdHRyaWJ1dGUnLCBhdHRyaWJ1dGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7IHJldHVybiBtZXNzYWdlOyB9XHJcblxyXG4gICAgICAgIGFyZ3MuZm9yRWFjaCgodjpzdHJpbmcsIGluZGV4Om51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVwbGFjZVdpdGhPbmUgICA9IGA6YXJnJHtpbmRleH1gO1xyXG4gICAgICAgICAgICBsZXQgcmVwbGFjZVdpdGhNdWx0aSA9IGA6YXJnJHtpbmRleH06YDtcclxuXHJcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKHJlcGxhY2VXaXRoTXVsdGkpKSB7XHJcbiAgICAgICAgICAgICAgICBhcmdzID0gYXJncy5zcGxpY2UoaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGFyZ1N0cmluZyA9IHRvQXJyYXkoYXJncykgPyB0b0FycmF5KGFyZ3MpLmpvaW4oJywnKSA6IGFyZ3M7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKHJlcGxhY2VXaXRoTXVsdGksIGFyZ1N0cmluZyBhcyBzdHJpbmcpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKHJlcGxhY2VXaXRoT25lKSkge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShyZXBsYWNlV2l0aE9uZSwgdilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgIH1cclxufVxyXG4iXX0=
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMtYnVpbGRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYWJzb2x1dGUtdmFsaWRhdG9yL3NyYy9saWIvc2VydmljZXMvbWVzc2FnZXMtYnVpbGRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBR2hELE1BQU0sT0FBTyxxQkFBcUI7SUFFOUIsWUFDWSxTQUEyQjtRQUEzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtJQUNuQyxDQUFDO0lBRUwsSUFBSSxDQUFDLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxHQUFHLElBQVM7UUFDbEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxNQUFNLFNBQVMsR0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQTtRQUN4RSxNQUFNLE9BQU8sR0FBUyxHQUFHLGdCQUFnQixJQUFJLFFBQVEsRUFBRSxDQUFBO1FBQ3ZELE1BQU0sU0FBUyxHQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFFckMsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUE7WUFDL0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUNoRztRQUVELE9BQU87WUFDSCxJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxTQUFTO1lBQ2YsT0FBTyxFQUFFLE9BQU87WUFDaEIsSUFBSSxJQUFJO2dCQUNKLE9BQU8sU0FBUyxDQUFDLFdBQVcsQ0FBQTtZQUNoQyxDQUFDO1lBQ0QsSUFBSSxPQUFPO2dCQUNQLE9BQU8sYUFBYSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQzNGLENBQUM7U0FDSixDQUFBO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFFBQWdCLEVBQUUsY0FBbUIsRUFBRTtRQUMvRCxLQUFLLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFBO1NBQ3ZHO0lBQ0wsQ0FBQzs7a0hBbENRLHFCQUFxQjtzSEFBckIscUJBQXFCLGNBRFIsTUFBTTsyRkFDbkIscUJBQXFCO2tCQURqQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBNZXNzYWdlQnVpbGRlciB9IGZyb20gJy4uL2ludGVyZmFjZSc7XHJcbmltcG9ydCB7IEkxOE5fTEFOR19QUkVGSVggfSBmcm9tICcuLi9jb25zdGFudCc7XHJcbmltcG9ydCB7IGZvcm1hdE1lc3NhZ2UgfSBmcm9tICcuLi9jb21tb24udXRpbHMnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VCdWlsZGVyU2VydmljZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICApIHsgfVxyXG5cclxuICAgIGNhbGwobGFuZ0F0dHI6IHN0cmluZywgYXR0cmlidXRlOiBzdHJpbmcsIC4uLmFyZ3M6IGFueSk6IE1lc3NhZ2VCdWlsZGVyIHtcclxuICAgICAgICBjb25zdCBbbGFzdEVsZW1lbnRdID0gYXJncy5zbGljZSgtMSk7XHJcbiAgICAgICAgY29uc3QgaW5wdXRBcmdzICAgICA9IGFyZ3MuZmlsdGVyKChhcmc6IGFueSkgPT4gdHlwZW9mIGFyZyAhPT0gJ29iamVjdCcpXHJcbiAgICAgICAgY29uc3QgaTE4bktleSAgICAgICA9IGAke0kxOE5fTEFOR19QUkVGSVh9LiR7bGFuZ0F0dHJ9YFxyXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZSAgICAgPSB0aGlzLnRyYW5zbGF0ZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBsYXN0RWxlbWVudCA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMobGFzdEVsZW1lbnQpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pbmplY3RUb1RyYW5zbGF0aW9uKGxhbmdBdHRyLCBsYXN0RWxlbWVudClcclxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB0aGlzLmluamVjdFRvVHJhbnNsYXRpb24obGFuZ0F0dHIsIGxhc3RFbGVtZW50KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhcmdzOiBpbnB1dEFyZ3MsXHJcbiAgICAgICAgICAgIGF0dHI6IGF0dHJpYnV0ZSxcclxuICAgICAgICAgICAgaTE4bktleTogaTE4bktleSxcclxuICAgICAgICAgICAgZ2V0IGxhbmcoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlLmN1cnJlbnRMYW5nXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdldCBtZXNzYWdlKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE1lc3NhZ2UodHJhbnNsYXRlLmluc3RhbnQoaTE4bktleSksIHsgYXR0cjogYXR0cmlidXRlLCBhcmdzOiBpbnB1dEFyZ3MgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbmplY3RUb1RyYW5zbGF0aW9uKGxhbmdBdHRyOiBzdHJpbmcsIHRyYW5zbGF0aW9uOiBhbnkgPSB7fSk6IHZvaWQge1xyXG4gICAgICAgIGZvciAobGV0IGxhbmcgb2YgT2JqZWN0LmtleXModHJhbnNsYXRpb24pKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLnNldFRyYW5zbGF0aW9uKGxhbmcsIHsgW0kxOE5fTEFOR19QUkVGSVhdOiB7IFtsYW5nQXR0cl06IHRyYW5zbGF0aW9uW2xhbmddIH0gfSwgdHJ1ZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -62,8 +62,9 @@ export class ReactiveValidator {
62
62
  }
63
63
  }
64
64
  ReactiveValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReactiveValidator, deps: [{ token: i1.ValidateRuleService }, { token: i2.UtilService }, { token: i3.MessageBuilderService }], target: i0.ɵɵFactoryTarget.Injectable });
65
- ReactiveValidator.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReactiveValidator });
65
+ ReactiveValidator.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReactiveValidator, providedIn: 'root' });
66
66
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReactiveValidator, decorators: [{
67
- type: Injectable
67
+ type: Injectable,
68
+ args: [{ providedIn: 'root' }]
68
69
  }], ctorParameters: function () { return [{ type: i1.ValidateRuleService }, { type: i2.UtilService }, { type: i3.MessageBuilderService }]; } });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RpdmUudmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1hYnNvbHV0ZS12YWxpZGF0b3Ivc3JjL2xpYi9zZXJ2aWNlcy9yZWFjdGl2ZS52YWxpZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBTTNDLE1BQU0sT0FBTyxpQkFBaUI7SUFLMUIsWUFDWSxJQUF5QixFQUN6QixHQUFpQixFQUNqQixFQUEyQjtRQUYzQixTQUFJLEdBQUosSUFBSSxDQUFxQjtRQUN6QixRQUFHLEdBQUgsR0FBRyxDQUFjO1FBQ2pCLE9BQUUsR0FBRixFQUFFLENBQXlCO1FBTmhDLHlCQUFvQixHQUFHLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQztRQUMzRCxvQkFBZSxHQUFRLGNBQWMsQ0FBQyxlQUFlLENBQUM7SUFNekQsQ0FBQztJQUVFLEdBQUcsQ0FBQyxJQUF1QixFQUFFLFVBQWUsRUFBRTtRQUNqRCxPQUFPLENBQUMsT0FBeUIsRUFBcUMsRUFBRTtZQUNwRSxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDL0csT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNqRyxDQUFDLENBQUM7SUFD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QyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7WUFDakcsQ0FBQyxDQUFDLENBQ0wsQ0FBQTtRQUNMLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxjQUFjLENBQUMsT0FBd0I7UUFDM0MsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXpCLE1BQU0sUUFBUSxHQUFJLE1BQW9CLENBQUMsUUFBUSxDQUFDO1FBQ2hELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQzFFLE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQztJQUN4QixDQUFDOzs4R0FoRVEsaUJBQWlCO2tIQUFqQixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRpb25FcnJvcnMsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0ZVJ1bGVTZXJ2aWNlIH0gZnJvbSAnLi92YWxpZGF0ZS1ydWxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHbG9iYWxDb25zdGFudCB9IGZyb20gJy4uL2NvbnN0YW50JztcclxuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wyLCBIdHRwUmVxdWVzdEFyZ3MgfSBmcm9tICcuLi9pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBVdGlsU2VydmljZSB9IGZyb20gJy4vdXRpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lc3NhZ2VCdWlsZGVyU2VydmljZSB9IGZyb20gJy4vbWVzc2FnZXMtYnVpbGRlci5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFJlYWN0aXZlVmFsaWRhdG9yIHtcclxuXHJcbiAgICBwdWJsaWMgZmllbGREZWZhdWx0TmFtZVJ1bGUgPSBHbG9iYWxDb25zdGFudC5maWVsZERlZmF1bHROYW1lUnVsZTtcclxuICAgIHB1YmxpYyBjdXN0b21GaWVsZE5hbWUgICAgICA9IEdsb2JhbENvbnN0YW50LmN1c3RvbUZpZWxkTmFtZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJ1bGU6IFZhbGlkYXRlUnVsZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1dGwgOiBVdGlsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1iICA6IE1lc3NhZ2VCdWlsZGVyU2VydmljZVxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBwdWJsaWMgbWFwKHJ1bGU6IHN0cmluZyB8IHN0cmluZ1tdLCBtZXNzYWdlOiBhbnkgPSB7fSk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDIpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY3RybE5hbWUgPSBjb250cm9sW3RoaXMuY3VzdG9tRmllbGROYW1lXSA/PyAoY29udHJvbFt0aGlzLmN1c3RvbUZpZWxkTmFtZV0gPSB0aGlzLmdldENvbnRyb2xOYW1lKGNvbnRyb2wpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGN0cmxOYW1lID8gdGhpcy5ydWxlLmdlcmVyYXRlUnVsZUFuZFZhbGlkYXRlKGN0cmxOYW1lLCBjb250cm9sLCBydWxlLCBtZXNzYWdlKSA6IG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdW5pcXVlKGV4aXN0czogSHR0cFJlcXVlc3RBcmdzLCBtZXNzYWdlID0ge30pOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wyKTogUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gfCBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPiA9PiB7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzIHx8ICF0aGlzLmN1c3RvbUZpZWxkTmFtZSkgcmV0dXJuIG9mKG51bGwpXHJcbiAgICAgICAgICAgIGxldCBmaWVsZE5hbWUgPSBjb250cm9sW3RoaXMuY3VzdG9tRmllbGROYW1lXSB8fCBudWxsXHJcbiAgICAgICAgICAgIGV4aXN0c1sncmVxdWVzdCddID0geyAuLi57IFtleGlzdHMuZmllbGQgfHwgZmllbGROYW1lXTogY29udHJvbC52YWx1ZSB9LCAuLi5leGlzdHNbJ3JlcXVlc3QnXSB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnV0bC5leGlzdHMoZXhpc3RzKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChpc1ZhbGlkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc1ZhbGlkID8geyAndW5pcXVlJzogdGhpcy5tYi5jYWxsKCd1bmlxdWUnLCBmaWVsZE5hbWUsIG1lc3NhZ2UpIH0gOiBudWxsXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGV4aXN0cyhleGlzdHM6IEh0dHBSZXF1ZXN0QXJncywgbWVzc2FnZSA9IHt9KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sMik6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHwgT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gPT4ge1xyXG4gICAgICAgICAgICBpZighdGhpcyB8fCAhdGhpcy5jdXN0b21GaWVsZE5hbWUpIHJldHVybiBvZihudWxsKVxyXG4gICAgICAgICAgICBsZXQgZmllbGROYW1lID0gY29udHJvbFt0aGlzLmN1c3RvbUZpZWxkTmFtZV0gfHwgbnVsbFxyXG4gICAgICAgICAgICBleGlzdHNbJ3JlcXVlc3QnXSA9IHsgLi4ueyBbZXhpc3RzLmZpZWxkIHx8IGZpZWxkTmFtZV06IGNvbnRyb2wudmFsdWUgfSwgLi4uZXhpc3RzWydyZXF1ZXN0J10gfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51dGwuZXhpc3RzKGV4aXN0cykucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgoaXNWYWxpZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNWYWxpZCA/IHsgJ2V4aXN0cyc6IHRoaXMubWIuY2FsbCgnZXhpc3RzJywgZmllbGROYW1lLCBtZXNzYWdlKSB9IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkaW1lbnNpb24oYXJnczogYW55LCBtZXNzYWdlID0ge30pOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wyKTogUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gfCBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPiA9PiB7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzIHx8ICF0aGlzLmN1c3RvbUZpZWxkTmFtZSkgcmV0dXJuIG9mKG51bGwpXHJcbiAgICAgICAgICAgIGxldCBmaWxlSW5zdGFuY2UgPSBjb250cm9sWyduYXRpdmVFbGVtZW50J10gPyBjb250cm9sWyduYXRpdmVFbGVtZW50J10uZmlsZXMgOiBudWxsO1xyXG4gICAgICAgICAgICBsZXQgZmllbGROYW1lID0gY29udHJvbFt0aGlzLmN1c3RvbUZpZWxkTmFtZV0gfHwgbnVsbFxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51dGwuZGltZW5zaW9uKGZpbGVJbnN0YW5jZSwgYXJncykucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgoaXNWYWxpZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNWYWxpZCA/IHsgJ2RpbWVuc2lvbic6IHRoaXMubWIuY2FsbCgnZGltZW5zaW9uJywgZmllbGROYW1lLCBhcmdzLCBtZXNzYWdlKSB9IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDb250cm9sTmFtZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sLnBhcmVudDtcclxuICAgICAgICBpZiAoIXBhcmVudCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRyb2xzID0gKHBhcmVudCBhcyBGb3JtR3JvdXApLmNvbnRyb2xzO1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSBPYmplY3Qua2V5cyhjb250cm9scykuZmluZChrZXkgPT4gY29udHJvbHNba2V5XSA9PT0gY29udHJvbCk7XHJcbiAgICAgICAgcmV0dXJuIG5hbWUgPz8gbnVsbDtcclxuICAgIH1cclxufVxyXG4iXX0=
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RpdmUudmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1hYnNvbHV0ZS12YWxpZGF0b3Ivc3JjL2xpYi9zZXJ2aWNlcy9yZWFjdGl2ZS52YWxpZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBTTNDLE1BQU0sT0FBTyxpQkFBaUI7SUFLMUIsWUFDWSxJQUF5QixFQUN6QixHQUFpQixFQUNqQixFQUEyQjtRQUYzQixTQUFJLEdBQUosSUFBSSxDQUFxQjtRQUN6QixRQUFHLEdBQUgsR0FBRyxDQUFjO1FBQ2pCLE9BQUUsR0FBRixFQUFFLENBQXlCO1FBTmhDLHlCQUFvQixHQUFHLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQztRQUMzRCxvQkFBZSxHQUFRLGNBQWMsQ0FBQyxlQUFlLENBQUM7SUFNekQsQ0FBQztJQUVFLEdBQUcsQ0FBQyxJQUF1QixFQUFFLFVBQWUsRUFBRTtRQUNqRCxPQUFPLENBQUMsT0FBeUIsRUFBcUMsRUFBRTtZQUNwRSxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDL0csT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNqRyxDQUFDLENBQUM7SUFD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QyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7WUFDakcsQ0FBQyxDQUFDLENBQ0wsQ0FBQTtRQUNMLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxjQUFjLENBQUMsT0FBd0I7UUFDM0MsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXpCLE1BQU0sUUFBUSxHQUFJLE1BQW9CLENBQUMsUUFBUSxDQUFDO1FBQ2hELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQzFFLE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQztJQUN4QixDQUFDOzs4R0FoRVEsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FESixNQUFNOzJGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdGlvbkVycm9ycywgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFZhbGlkYXRlUnVsZVNlcnZpY2UgfSBmcm9tICcuL3ZhbGlkYXRlLXJ1bGUuc2VydmljZSc7XHJcbmltcG9ydCB7IEdsb2JhbENvbnN0YW50IH0gZnJvbSAnLi4vY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbDIsIEh0dHBSZXF1ZXN0QXJncyB9IGZyb20gJy4uL2ludGVyZmFjZSc7XHJcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAnLi91dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVzc2FnZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi9tZXNzYWdlcy1idWlsZGVyLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFJlYWN0aXZlVmFsaWRhdG9yIHtcclxuXHJcbiAgICBwdWJsaWMgZmllbGREZWZhdWx0TmFtZVJ1bGUgPSBHbG9iYWxDb25zdGFudC5maWVsZERlZmF1bHROYW1lUnVsZTtcclxuICAgIHB1YmxpYyBjdXN0b21GaWVsZE5hbWUgICAgICA9IEdsb2JhbENvbnN0YW50LmN1c3RvbUZpZWxkTmFtZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJ1bGU6IFZhbGlkYXRlUnVsZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1dGwgOiBVdGlsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1iICA6IE1lc3NhZ2VCdWlsZGVyU2VydmljZVxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBwdWJsaWMgbWFwKHJ1bGU6IHN0cmluZyB8IHN0cmluZ1tdLCBtZXNzYWdlOiBhbnkgPSB7fSk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDIpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY3RybE5hbWUgPSBjb250cm9sW3RoaXMuY3VzdG9tRmllbGROYW1lXSA/PyAoY29udHJvbFt0aGlzLmN1c3RvbUZpZWxkTmFtZV0gPSB0aGlzLmdldENvbnRyb2xOYW1lKGNvbnRyb2wpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGN0cmxOYW1lID8gdGhpcy5ydWxlLmdlcmVyYXRlUnVsZUFuZFZhbGlkYXRlKGN0cmxOYW1lLCBjb250cm9sLCBydWxlLCBtZXNzYWdlKSA6IG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdW5pcXVlKGV4aXN0czogSHR0cFJlcXVlc3RBcmdzLCBtZXNzYWdlID0ge30pOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wyKTogUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gfCBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPiA9PiB7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzIHx8ICF0aGlzLmN1c3RvbUZpZWxkTmFtZSkgcmV0dXJuIG9mKG51bGwpXHJcbiAgICAgICAgICAgIGxldCBmaWVsZE5hbWUgPSBjb250cm9sW3RoaXMuY3VzdG9tRmllbGROYW1lXSB8fCBudWxsXHJcbiAgICAgICAgICAgIGV4aXN0c1sncmVxdWVzdCddID0geyAuLi57IFtleGlzdHMuZmllbGQgfHwgZmllbGROYW1lXTogY29udHJvbC52YWx1ZSB9LCAuLi5leGlzdHNbJ3JlcXVlc3QnXSB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnV0bC5leGlzdHMoZXhpc3RzKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChpc1ZhbGlkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc1ZhbGlkID8geyAndW5pcXVlJzogdGhpcy5tYi5jYWxsKCd1bmlxdWUnLCBmaWVsZE5hbWUsIG1lc3NhZ2UpIH0gOiBudWxsXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGV4aXN0cyhleGlzdHM6IEh0dHBSZXF1ZXN0QXJncywgbWVzc2FnZSA9IHt9KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sMik6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHwgT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gPT4ge1xyXG4gICAgICAgICAgICBpZighdGhpcyB8fCAhdGhpcy5jdXN0b21GaWVsZE5hbWUpIHJldHVybiBvZihudWxsKVxyXG4gICAgICAgICAgICBsZXQgZmllbGROYW1lID0gY29udHJvbFt0aGlzLmN1c3RvbUZpZWxkTmFtZV0gfHwgbnVsbFxyXG4gICAgICAgICAgICBleGlzdHNbJ3JlcXVlc3QnXSA9IHsgLi4ueyBbZXhpc3RzLmZpZWxkIHx8IGZpZWxkTmFtZV06IGNvbnRyb2wudmFsdWUgfSwgLi4uZXhpc3RzWydyZXF1ZXN0J10gfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51dGwuZXhpc3RzKGV4aXN0cykucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgoaXNWYWxpZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNWYWxpZCA/IHsgJ2V4aXN0cyc6IHRoaXMubWIuY2FsbCgnZXhpc3RzJywgZmllbGROYW1lLCBtZXNzYWdlKSB9IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkaW1lbnNpb24oYXJnczogYW55LCBtZXNzYWdlID0ge30pOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wyKTogUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gfCBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPiA9PiB7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzIHx8ICF0aGlzLmN1c3RvbUZpZWxkTmFtZSkgcmV0dXJuIG9mKG51bGwpXHJcbiAgICAgICAgICAgIGxldCBmaWxlSW5zdGFuY2UgPSBjb250cm9sWyduYXRpdmVFbGVtZW50J10gPyBjb250cm9sWyduYXRpdmVFbGVtZW50J10uZmlsZXMgOiBudWxsO1xyXG4gICAgICAgICAgICBsZXQgZmllbGROYW1lID0gY29udHJvbFt0aGlzLmN1c3RvbUZpZWxkTmFtZV0gfHwgbnVsbFxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51dGwuZGltZW5zaW9uKGZpbGVJbnN0YW5jZSwgYXJncykucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgoaXNWYWxpZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNWYWxpZCA/IHsgJ2RpbWVuc2lvbic6IHRoaXMubWIuY2FsbCgnZGltZW5zaW9uJywgZmllbGROYW1lLCBhcmdzLCBtZXNzYWdlKSB9IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDb250cm9sTmFtZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sLnBhcmVudDtcclxuICAgICAgICBpZiAoIXBhcmVudCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRyb2xzID0gKHBhcmVudCBhcyBGb3JtR3JvdXApLmNvbnRyb2xzO1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSBPYmplY3Qua2V5cyhjb250cm9scykuZmluZChrZXkgPT4gY29udHJvbHNba2V5XSA9PT0gY29udHJvbCk7XHJcbiAgICAgICAgcmV0dXJuIG5hbWUgPz8gbnVsbDtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -469,8 +469,9 @@ export class UtilService {
469
469
  }
470
470
  }
471
471
  UtilService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UtilService, deps: [{ token: i1.HttpRequestService }, { token: i2.NgAbsoluteValidatorService }], target: i0.ɵɵFactoryTarget.Injectable });
472
- UtilService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UtilService });
472
+ UtilService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UtilService, providedIn: 'root' });
473
473
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UtilService, decorators: [{
474
- type: Injectable
474
+ type: Injectable,
475
+ args: [{ providedIn: 'root' }]
475
476
  }], ctorParameters: function () { return [{ type: i1.HttpRequestService }, { type: i2.NgAbsoluteValidatorService }]; } });
476
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWFic29sdXRlLXZhbGlkYXRvci9zcmMvbGliL3NlcnZpY2VzL3V0aWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRSxPQUFPLEVBQWMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc1QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQzs7OztBQUk3RCxNQUFNLE9BQU8sV0FBVztJQVNwQixZQUNZLElBQXdCLEVBQ3hCLEdBQWdDO1FBRGhDLFNBQUksR0FBSixJQUFJLENBQW9CO1FBQ3hCLFFBQUcsR0FBSCxHQUFHLENBQTZCO1FBVHJDLG9CQUFlLEdBQWEsWUFBWSxDQUFDO1FBQ3pDLHNCQUFpQixHQUFRLGNBQWMsQ0FBQyxXQUFXLENBQUM7UUFDcEQscUJBQWdCLEdBQVMsY0FBYyxDQUFDLFVBQVUsQ0FBQztRQUNuRCxxQkFBZ0IsR0FBUyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7UUFDekQsb0JBQWUsR0FBVSxjQUFjLENBQUMsZUFBZSxDQUFBO1FBQ3ZELG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBS2pDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUFBLENBQUM7SUFHZCxJQUFJO1FBQ0EsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztJQUNqRCxD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LE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7O3dHQWxpQlEsV0FBVzs0R0FBWCxXQUFXOzJGQUFYLFdBQVc7a0JBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4vaHR0cC5yZXF1ZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ0Fic29sdXRlVmFsaWRhdG9yU2VydmljZSB9IGZyb20gJy4vLi4vbmctYWJzb2x1dGUtdmFsaWRhdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IERFRkFVTFRfREFURV9GT1JNQVQsIEdsb2JhbENvbnN0YW50IH0gZnJvbSAnLi4vY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wyLCBIdHRwUmVxdWVzdEFyZ3MgfSBmcm9tICcuLi9pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4uL2NvbW1vbi51dGlscyc7XHJcbmltcG9ydCB7IGlzQWZ0ZXIsIGlzQmVmb3JlLCBpc1ZhbGlkLCBwYXJzZSB9IGZyb20gJ2RhdGUtZm5zJztcclxuXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBVdGlsU2VydmljZSB7XHJcblxyXG4gICAgcHVibGljIGRlZmF1bHRUaW1lWm9uZSAgIDpzdHJpbmcgPSAnREQtTU0tWVlZWSc7XHJcbiAgICBwdWJsaWMgY3JlZGl0Q2FyZElzc3VlcnMgOmFueSA9IEdsb2JhbENvbnN0YW50LmNyZWRpdF9jYXJkO1xyXG4gICAgcHVibGljIGRlYml0Q2FyZElzc3VlcnMgIDphbnkgPSBHbG9iYWxDb25zdGFudC5kZWJpdF9jYXJkO1xyXG4gICAgcHVibGljIGN1c3RvbU9iamVjdE5hbWUgIDphbnkgPSBHbG9iYWxDb25zdGFudC5jdXN0b21PYmplY3ROYW1lO1xyXG4gICAgcHVibGljIGN1c3RvbVJ1bGVzTmFtZSAgIDphbnkgPSBHbG9iYWxDb25zdGFudC5jdXN0b21SdWxlc05hbWVcclxuICAgIHB1YmxpYyBzdHJpbmdTdHJlbmd0aCAgICA6YW55ID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBodHRwOiBIdHRwUmVxdWVzdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBhYnMgOiBOZ0Fic29sdXRlVmFsaWRhdG9yU2VydmljZVxyXG4gICAgKXt0aGlzLmluaXQoKX1cclxuXHJcblxyXG4gICAgaW5pdCgpe1xyXG4gICAgICAgIHRoaXMuc3RyaW5nU3RyZW5ndGggPSB0aGlzLmFicy5zdHJlbmd0aExldmVsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWYWxpZGF0aW9uUnVsZXMoY29udHJvbDpBYnN0cmFjdENvbnRyb2wyLHJ1bGVzOnN0cmluZyB8IHN0cmluZ1tdLGFwcGVuZHMgPSB7fSl7XHJcbiAgICAgICAgbGV0IGN1c3RvbU9iamVjdE5hbWUgPSB0aGlzLmN1c3RvbU9iamVjdE5hbWU7XHJcbiAgICAgICAgbGV0IGN1c3RvbVJ1bGVzTmFtZSAgPSB0aGlzLmN1c3RvbVJ1bGVzTmFtZTtcclxuICAgICAgICBsZXQgcnVsZUFycmF5ICAgICAgICA9IEFycmF5LmlzQXJyYXkocnVsZXMpID8gcnVsZXMgOiBbcnVsZXNdO1xyXG4gICAgICAgIGxldCBhY3RpdmVSdWxlcyAgICAgID0gISFjb250cm9sW2N1c3RvbU9iamVjdE5hbWVdICYmICEhY29udHJvbFtjdXN0b21PYmplY3ROYW1lXVtjdXN0b21SdWxlc05hbWVdID8gY29udHJvbFtjdXN0b21PYmplY3ROYW1lXVtjdXN0b21SdWxlc05hbWVdIDogW107XHJcbiAgICAgICAgbGV0IGZpbmFsT2JqZWN0ICAgICAgPSBPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycyA6ICBBcnJheS5mcm9tKG5ldyBTZXQoYWN0aXZlUnVsZXMuY29uY2F0KHJ1bGVBcnJheSkpKVxyXG4gICAgICAgIH0sYXBwZW5kcyk7XHJcblxyXG4gICAgICAgIGNvbnRyb2xbY3VzdG9tT2JqZWN0TmFtZV0gPSBmaW5hbE9iamVjdFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBqc29uKHN0cmluZzpzdHJpbmcpOmJvb2xlYW4ge1xyXG4gICAgICAgIGlmKCFzdHJpbmcpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBKU09OLnBhcnNlKHN0cmluZyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb25maXJtZWQoY29udHJvbDogQWJzdHJhY3RDb250cm9sMiwgYXJnczpzdHJpbmcsIGZpZWxkTmFtZSA9IG51bGwpOiBib29sZWFuIHwgdm9pZCB7XHJcbiAgICAgICAgZmllbGROYW1lID0gZmllbGROYW1lIHx8IGNvbnRyb2xbJ2ZpZWxkX25hbWUnXSB8fCBudWxsO1xyXG4gICAgICAgIGxldCBjb21wYXJlZF9maWVsZF9uYW1lID0gYXJncyB8fCAoYCR7ZmllbGROYW1lfV9jb25maXJtYXRpb25gKTtcclxuICAgICAgICBsZXQgdG9Db21wYXJlV2l0aCA9IGNvbnRyb2wucm9vdC5nZXQoY29tcGFyZWRfZmllbGRfbmFtZSkgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgICAgcmV0dXJuIChjb250cm9sLnZhbHVlID09PSB0b0NvbXBhcmVXaXRoPy52YWx1ZSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2FtZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wyLCBhcmdzOnN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCB0b0NvbXBhcmVXaXRoID0gY29udHJvbC5yb290LmdldChhcmdzKSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgICByZXR1cm4gKGNvbnRyb2wudmFsdWUgPT09IHRvQ29tcGFyZVdpdGg/LnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGlmZmVyZW50KGNvbnRyb2w6QWJzdHJhY3RDb250cm9sMiwgYXJnczpzdHJpbmcpOiBib29sZWFue1xyXG4gICAgICAgIGxldCB0b0NvbXBhcmVXaXRoID0gY29udHJvbC5yb290LmdldChhcmdzKSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgICByZXR1cm4gKGNvbnRyb2wudmFsdWUgIT09IHRvQ29tcGFyZVdpdGg/LnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVxdWlyZWQoYWN0dWFsRGF0YTpzdHJpbmcpOmJvb2xlYW57XHJcbiAgICAgICAgcmV0dXJuICEhYWN0dWFsRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVxdWlyZWRJZihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wyLCBhcmdzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBbZGVwZW5kZW50LG1hdGNoV2l0aF0gPSB0b0FycmF5KGFyZ3MpXHJcbiAgICAgICAgaWYoIWRlcGVuZGVudCB8fCAhbWF0Y2hXaXRoKXtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0b0NvbXBhcmVXaXRoID0gY29udHJvbC5yb290LmdldChkZXBlbmRlbnQpIGFzIEZvcm1Db250cm9sXHJcbiAgICAgICAgcmV0dXJuICh0b0NvbXBhcmVXaXRoLnZhbHVlID09PSBtYXRjaFdpdGgpID8gdGhpcy5yZXF1aXJlZChjb250cm9sLnZhbHVlKSA6IHRydWVcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVxdWlyZWRVbmxlc3MoY29udHJvbDogQWJzdHJhY3RDb250cm9sMiwgYXJnczogc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgW2RlcGVuZGVudCwuLi5tYXRjaFdpdGhdID0gdG9BcnJheShhcmdzKTtcclxuICAgICAgICBpZighZGVwZW5kZW50ICYmIG1hdGNoV2l0aC5sZW5ndGggPT09IDApe1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB0b0NvbXBhcmVXaXRoID0gY29udHJvbC5yb290LmdldChkZXBlbmRlbnQpIGFzIEZvcm1Db250cm9sO1xyXG4gICAgICAgIHJldHVybiBtYXRjaFdpdGguc29tZShpdGVtID0+IGl0ZW0gPT09IHRvQ29tcGFyZVdpdGgudmFsdWUpID8gdGhpcy5yZXF1aXJlZChjb250cm9sLnZhbHVlKSA6IHRydWVcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVxdWlyZWRXaXRoKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDIsIGFyZ3M6IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IG5hbWVzID0gdG9BcnJheShhcmdzKTtcclxuICAgICAgICBsZXQgYW55SGFzVmFsdWUgPSBuYW1lcy5zb21lKG5hbWUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjID0gY29udHJvbC5yb290LmdldChuYW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIGMgJiYgYy52YWx1ZSAhPT0gbnVsbCAmJiBjLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgYy52YWx1ZSAhPT0gJyc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFueUhhc1ZhbHVlID8gdGhpcy5yZXF1aXJlZChjb250cm9sLnZhbHVlKSA6IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlcXVpcmVkV2l0aEFsbChjb250cm9sOkFic3RyYWN0Q29udHJvbDIsIGFyZ3M6c3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFue1xyXG4gICAgICAgIGxldCBtYXRjaFdpdGggXHQgICAgID0gdG9BcnJheShhcmdzKTtcclxuICAgICAgICBsZXQgY29tcGFyZVdpdGhWYWx1ZSA9IG1hdGNoV2l0aC5tYXAobmFtZSA9PiAoY29udHJvbC5yb290LmdldChuYW1lKSBhcyBGb3JtQ29udHJvbCkudmFsdWUpXHJcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVXaXRoVmFsdWUuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aCA9PT0gbWF0Y2hXaXRoLmxlbmd0aCA/IHRoaXMucmVxdWlyZWQoY29udHJvbC52YWx1ZSkgOiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlcXVpcmVkV2l0aG91dChjb250cm9sOkFic3RyYWN0Q29udHJvbDIsIGFyZ3M6c3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFue1xyXG4gICAgICAgIGxldCBtYXRjaFdpdGggXHQgICAgID0gdG9BcnJheShhcmdzKTtcclxuICAgICAgICBsZXQgY29tcGFyZVdpdGhWYWx1ZSA9IG1hdGNoV2l0aC5tYXAobmFtZSA9PiAoY29udHJvbC5yb290LmdldChuYW1lKSBhcyBGb3JtQ29udHJvbCkudmFsdWUpXHJcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVXaXRoVmFsdWUuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aCA9PT0gMCA/IHRoaXMucmVxdWlyZWQoY29udHJvbC52YWx1ZSkgOiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlcXVpcmVkV2l0aG91dEFsbChjb250cm9sOkFic3RyYWN0Q29udHJvbDIsIGFyZ3M6c3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFue1xyXG4gICAgICAgIGxldCBtYXRjaFdpdGggXHRcdCA9IHRvQXJyYXkoYXJncyk7XHJcbiAgICAgICAgbGV0IGNvbXBhcmVXaXRoVmFsdWUgPSBtYXRjaFdpdGgubWFwKG5hbWUgPT4gKGNvbnRyb2wucm9vdC5nZXQobmFtZSkgYXMgRm9ybUNvbnRyb2wpLnZhbHVlKVxyXG4gICAgICAgIGxldCBlbXB0eUZpZWxkQ291bnQgID0gY29tcGFyZVdpdGhWYWx1ZS5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICByZXR1cm4gZW1wdHlGaWVsZENvdW50Lmxlbmd0aCA+IDAgPyB0aGlzLnJlcXVpcmVkKGNvbnRyb2wudmFsdWUpIDogdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbWFpbChhY3R1YWxEYXRhOnN0cmluZyk6IGJvb2xlYW57XHJcbiAgICAgICAgcmV0dXJuICgvXlxcdysoW1xcLi1dP1xcdyspKkBcXHcrKFtcXC4tXT9cXHcrKSooXFwuXFx3ezIsM30pKyQvLnRlc3QoYWN0dWFsRGF0YSkpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFib3ZlKGFjdHVhbERhdGE6bnVtYmVyLHRvQmVEYXRhOm51bWJlcik6IGJvb2xlYW57XHJcbiAgICAgICAgcmV0dXJuIChOdW1iZXIodG9CZURhdGEpIDwgTnVtYmVyKGFjdHVhbERhdGEpKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY2NlcHRlZChhY3R1YWxEYXRhOmFueSk6IGJvb2xlYW57XHJcbiAgICAgICAgcmV0dXJuIChhY3R1YWxEYXRhIHx8IGFjdHVhbERhdGEgIT09IGZhbHNlIHx8IGFjdHVhbERhdGEgIT09IDApXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRhdGUoYWN0dWFsRGF0YTpzdHJpbmcsZm9ybWF0OnN0cmluZyA9IERFRkFVTFRfREFURV9GT1JNQVQpOiBib29sZWFue1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWxEYXRhID8gaXNWYWxpZChwYXJzZShhY3R1YWxEYXRhLCBmb3JtYXQgfHwgREVGQVVMVF9EQVRFX0ZPUk1BVCwgbmV3IERhdGUoKSkpIDogdHJ1ZVxyXG4gICAgICAgIH1jYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkYXRlRm9ybWF0KGFjdHVhbERhdGE6YW55LCBmb3JtYXQ6c3RyaW5nID0gREVGQVVMVF9EQVRFX0ZPUk1BVCk6IGJvb2xlYW57XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGFjdHVhbERhdGEgPyBpc1ZhbGlkKHBhcnNlKGFjdHVhbERhdGEsIGZvcm1hdCB8fCBERUZBVUxUX0RBVEVfRk9STUFULCBuZXcgRGF0ZSgpKSkgOiB0cnVlXHJcbiAgICAgICAgfWNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFmdGVyKGFjdHVhbERhdGE6c3RyaW5nLCB0b0JlRGF0YTpzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW57XHJcbiAgICAgICAgaWYoISEhYWN0dWFsRGF0YSB8fCAhISF0b0JlRGF0YSl7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBbbWF0Y2hXaXRoRGF0ZSxtYXRjaFdpdGhEYXRlRm9ybWF0ID0gREVGQVVMVF9EQVRFX0ZPUk1BVF0gPSBBcnJheS5pc0FycmF5KHRvQmVEYXRhKSA/IHRvQmVEYXRhIDogdG9CZURhdGEuc3BsaXQoJywnKVxyXG4gICAgICAgIGlmKCF0aGlzLmRhdGVGb3JtYXQoYWN0dWFsRGF0YSxtYXRjaFdpdGhEYXRlRm9ybWF0KSB8fCAhdGhpcy5kYXRlRm9ybWF0KG1hdGNoV2l0aERhdGUsbWF0Y2hXaXRoRGF0ZUZvcm1hdCkpe1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpc0FmdGVyKFxyXG4gICAgICAgICAgICBwYXJzZShhY3R1YWxEYXRhLCBtYXRjaFdpdGhEYXRlRm9ybWF0LCBuZXcgRGF0ZSgpKSxcclxuICAgICAgICAgICAgcGFyc2UobWF0Y2hXaXRoRGF0ZSwgbWF0Y2hXaXRoRGF0ZUZvcm1hdCwgbmV3IERhdGUoKSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBiZWZvcmUoYWN0dWFsRGF0YTpzdHJpbmcsIHRvQmVEYXRhOnN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbntcclxuICAgICAgICBpZighISFhY3R1YWxEYXRhIHx8ICEhIXRvQmVEYXRhKXtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IFttYXRjaFdpdGhEYXRlLG1hdGNoV2l0aERhdGVGb3JtYXQgPSBERUZBVUxUX0RBVEVfRk9STUFUXSA9IEFycmF5LmlzQXJyYXkodG9CZURhdGEpID8gdG9CZURhdGEgOiB0b0JlRGF0YS5zcGxpdCgnLCcpXHJcbiAgICAgICAgaWYoIXRoaXMuZGF0ZUZvcm1hdChhY3R1YWxEYXRhLG1hdGNoV2l0aERhdGVGb3JtYXQpIHx8ICF0aGlzLmRhdGVGb3JtYXQobWF0Y2hXaXRoRGF0ZSxtYXRjaFdpdGhEYXRlRm9ybWF0KSl7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGlzQmVmb3JlKFxyXG4gICAgICAgICAgICBwYXJzZShhY3R1YWxEYXRhLCBtYXRjaFdpdGhEYXRlRm9ybWF0LCBuZXcgRGF0ZSgpKSxcclxuICAgICAgICAgICAgcGFyc2UobWF0Y2hXaXRoRGF0ZSwgbWF0Y2hXaXRoRGF0ZUZvcm1hdCwgbmV3IERhdGUoKSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhbHBoYShhY3R1YWxEYXRhOnN0cmluZykgOmJvb2xlYW57XHJcbiAgICAgICAgcmV0dXJuICgvXlthLXpdKyQvaS50ZXN0KGFjdHVhbERhdGEpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWxwaGFOdW1lcmljKGFjdHVhbERhdGE6c3RyaW5nKTogYm9vbGVhbntcclxuICAgICAgICByZXR1cm4gKC9eW2EtejAtOV0rJC9pLnRlc3QoYWN0dWFsRGF0YSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhbHBoYURhc2goYWN0dWFsRGF0YTpzdHJpbmcpOiBib29sZWFue1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2V4KGFjdHVhbERhdGEsJ15bYS16QS1aMC05LV9dKyQnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXJyYXkoYWN0dWFsRGF0YTpzdHJpbmcpOiBib29sZWFue1xyXG4gICAgICAgIGlmKHR5cGVvZiBhY3R1YWxEYXRhID09PSAnc3RyaW5nJyAmJiB0aGlzLmpzb24oYWN0dWFsRGF0YSkpe1xyXG4gICAgICAgICAgICBhY3R1YWxEYXRhID0gSlNPTi5wYXJzZShhY3R1YWxEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYWN0dWFsRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGJvb2xlYW4oYWN0dWFsRGF0YTpzdHJpbmcpOmJvb2xlYW57XHJcbiAgICAgICAgbGV0IGJvb2xlYW5BY2NlcHRlZCA9IFtcclxuICAgICAgICAgICAgMSwnMScsMCwnMCcsJ3RydWUnLHRydWUsJ2ZhbHNlJywnZmFsc2UnXHJcbiAgICAgICAgXTtcclxuICAgICAgICByZXR1cm4gYm9vbGVhbkFjY2VwdGVkLmluY2x1ZGVzKGFjdHVhbERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlcXVhbHMoYWN0dWFsRGF0YTpzdHJpbmcsY29tcGFyZWRfdG9fdmFsdWU6c3RyaW5nKTogYm9vbGVhbntcclxuICAgICAgICByZXR1cm4gKGFjdHVhbERhdGEgPT0gY29tcGFyZWRfdG9fdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbmRzV2l0aChhY3R1YWxEYXRhOnN0cmluZywgZW5kX3dpdGg6IGFueSk6IGJvb2xlYW57XHJcbiAgICAgICAgbGV0IF9lbmRfd2l0aCA9IHRvQXJyYXkoZW5kX3dpdGgpO1xyXG4gICAgICAgIHJldHVybiAhX2VuZF93aXRoLmZpbmQoKHYpID0+IGFjdHVhbERhdGEgJiYgYWN0dWFsRGF0YS5lbmRzV2l0aCh2KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0c1dpdGgoYWN0dWFsRGF0YTpzdHJpbmcsIHN0YXJ0X3dpdGg6c3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFue1xyXG4gICAgICAgIHJldHVybiB0b0FycmF5KHN0YXJ0X3dpdGgpLnNvbWUoKHYpID0+IGFjdHVhbERhdGEgJiYgYWN0dWFsRGF0YS5zdGFydHNXaXRoKHYpKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbihhY3R1YWxEYXRhOiBzdHJpbmcsIGNvbXBhcmU6IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHRvQ29tcGFyZSA9IG5ldyBTZXQodG9BcnJheShjb21wYXJlKS5tYXAodiA9PiB2LnRvU3RyaW5nKCkpKVxyXG4gICAgICAgIHJldHVybiB0b0NvbXBhcmUuaGFzKGFjdHVhbERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBub3RJbihhY3R1YWxEYXRhOnN0cmluZywgY29tcGFyZTpzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW57XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmluKGFjdHVhbERhdGEsY29tcGFyZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluY2x1ZGVzKGFjdHVhbERhdGE6IHN0cmluZywgY29tcGFyZTogc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWFjdHVhbERhdGEpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdG9BcnJheShjb21wYXJlKS5ldmVyeSh2ID0+IGFjdHVhbERhdGEuaW5jbHVkZXModi50b1N0cmluZygpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG51bWJlcihhY3R1YWxEYXRhOmFueSk6IGJvb2xlYW57XHJcbiAgICAgICAgcmV0dXJuICFpc05hTihhY3R1YWxEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RyaW5nKGFjdHVhbERhdGE6YW55KTogYm9vbGVhbntcclxuICAgICAgICByZXR1cm4gaXNOYU4oYWN0dWFsRGF0YSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW50ZWdlcihhY3R1YWxEYXRhOmFueSk6IGJvb2xlYW57XHJcbiAgICAgICAgaWYoIXRoaXMubnVtYmVyKGFjdHVhbERhdGEpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoTnVtYmVyKGFjdHVhbERhdGEpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXAoYWN0dWFsRGF0YTpzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVnZXhFeHAgPSBbXHJcbiAgICAgICAgICAgICdeKDI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPyknLFxyXG4gICAgICAgICAgICAnKDI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPyknLFxyXG4gICAgICAgICAgICAnKDI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPyknLFxyXG4gICAgICAgICAgICAnKDI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPykkJ1xyXG4gICAgICAgIF0uam9pbihcIlxcXFwuXCIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5yZWdleChhY3R1YWxEYXRhLHJlZ2V4RXhwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXB2NChhY3R1YWxEYXRhOnN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCByZWdleEV4cCA9IG5ldyBSZWdFeHAoJ14oPzooPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXFxcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KSQnKTtcclxuICAgICAgICByZXR1cm4gcmVnZXhFeHAudGVzdChhY3R1YWxEYXRhKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpcHY2KGFjdHVhbERhdGE6c3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlZ2V4RXhwID0gbmV3IFJlZ0V4cCgnXihbMC05QS1GYS1mXXsxLDR9Oil7N31bMC05QS1GYS1mXXsxLDR9JCcpO1xyXG4gICAgICAgIHJldHVybiByZWdleEV4cC50ZXN0KGFjdHVhbERhdGEpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1heChhY3R1YWxEYXRhOmFueSwgbWF4Om51bWJlcik6IGJvb2xlYW57XHJcbiAgICAgICAgaWYoIWFjdHVhbERhdGEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5pbnRlZ2VyKGFjdHVhbERhdGEpKXtcclxuICAgICAgICAgICAgcmV0dXJuIGFjdHVhbERhdGEgPD0gbWF4XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJldHVybiAoYWN0dWFsRGF0YS5sZW5ndGggPD0gbWF4KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbWluKGFjdHVhbERhdGE6YW55LCBtaW46c3RyaW5nIHwgbnVtYmVyKTogYm9vbGVhbntcclxuICAgICAgICBpZighISFhY3R1YWxEYXRhIHx8ICEhIW1pbikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmKHRoaXMuaW50ZWdlcihhY3R1YWxEYXRhKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIoYWN0dWFsRGF0YSkgPj0gTnVtYmVyKG1pbilcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcmV0dXJuIChhY3R1YWxEYXRhLmxlbmd0aCA+PSBtaW4pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBub3RFcXVhbHMoYWN0dWFsRGF0YTphbnksY29tcGFyZV90bzphbnkpOiBib29sZWFue1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5lcXVhbHMoYWN0dWFsRGF0YSxjb21wYXJlX3RvKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmFuZ2UoYWN0dWFsRGF0YTogc3RyaW5nLCByYW5nZTogc3RyaW5nIHwgc3RyaW5nW10gfCBudW1iZXJbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBbbWluLCBtYXhdID0gdG9BcnJheShyYW5nZSk7XHJcbiAgICAgICAgcmV0dXJuIChOdW1iZXIobWluKSA8PSBOdW1iZXIoYWN0dWFsRGF0YSkpICYmIChOdW1iZXIoYWN0dWFsRGF0YSkgPD0gTnVtYmVyKG1heCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBiZXR3ZWVuKGFjdHVhbERhdGE6IHN0cmluZywgcmFuZ2U6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVtYmVyW10pOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgW21pbiwgbWF4XSA9IHRvQXJyYXkocmFuZ2UpO1xyXG4gICAgICAgIHJldHVybiAoTnVtYmVyKG1pbikgPCBOdW1iZXIoYWN0dWFsRGF0YSkpICYmIChOdW1iZXIoYWN0dWFsRGF0YSkgPCBOdW1iZXIobWF4KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVuZGVyKGFjdHVhbERhdGE6c3RyaW5nLCB1bmRlcjpzdHJpbmcpOiBib29sZWFue1xyXG4gICAgICAgIGlmKCF0aGlzLm51bWJlcihhY3R1YWxEYXRhKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBOdW1iZXIoYWN0dWFsRGF0YSkgPCBOdW1iZXIodW5kZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cmwoYWN0dWFsRGF0YTpzdHJpbmcpOiBib29sZWFue1xyXG4gICAgICAgIGxldCByZWdleEV4cCA9IFtcclxuICAgICAgICAgICAgJ14oPzooPzpodHRwKD86cyk/fGZ0cCk6Ly8pKD86XFxcXFMrKD86Oig/OlxcXFxTKSopP0ApPyg/Oig/OlthLXowLTlcXHUwMGExLVxcdWZmZmZdKD86LSkqKScsXHJcbiAgICAgICAgICAgICcoPzpbYS16MC05XFx1MDBhMS1cXHVmZmZmXSkrKSg/OlxcXFwuKD86W2EtejAtOVxcdTAwYTEtXFx1ZmZmZl0oPzotKSopJyxcclxuICAgICAgICAgICAgJyg/OlthLXowLTlcXHUwMGExLVxcdWZmZmZdKSspJyxcclxuICAgICAgICAgICAgJyg/OlxcXFwuKD86W2EtejAtOVxcdTAwYTEtXFx1ZmZmZl0pezIsfSkoPzo6KD86XFxcXGQpezIsNX0pPyg/Oi8oPzpcXFxcUykqKT8kJ1xyXG4gICAgICAgIF0uam9pbignKicpXHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2V4KGFjdHVhbERhdGEscmVnZXhFeHApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWdleChhY3R1YWxEYXRhOnN0cmluZywgZXhwcmVzc2lvbjpzdHJpbmcpOiBib29sZWFue1xyXG4gICAgICAgIGxldCByZWdleEV4cCA9IG5ldyBSZWdFeHAoZXhwcmVzc2lvbik7XHJcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXhwLnRlc3QoYWN0dWFsRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5vdFJlZ2V4KGFjdHVhbERhdGE6c3RyaW5nLCBleHByZXNzaW9uOnN0cmluZyk6IGJvb2xlYW57XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLnJlZ2V4KGFjdHVhbERhdGEsZXhwcmVzc2lvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHV1aWQoYWN0dWFsRGF0YTpzdHJpbmcpOiBib29sZWFue1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2V4KGFjdHVhbERhdGEsJ1thLWYwLTldezh9LVthLWYwLTldezR9LTRbYS1mMC05XXszfS1bODlhQWJCXVthLWYwLTldezN9LVthLWYwLTldezEyfScpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1bmlxdWUoYXJnczpIdHRwUmVxdWVzdEFyZ3MpOiBPYnNlcnZhYmxlPGJvb2xlYW4+e1xyXG4gICAgICAgIGxldCBodHRwICAgIDpPYnNlcnZhYmxlPGFueT47XHJcbiAgICAgICAgbGV0IGFjdGlvbiAgID0gYXJncy51cmxcclxuICAgICAgICBsZXQgbWV0aG9kICAgPSBhcmdzLm1ldGhvZCB8fCAnR0VUJ1xyXG4gICAgICAgIGxldCByZXF1ZXN0ICA9IGFyZ3MucmVxdWVzdHx8IHt9XHJcbiAgICAgICAgbGV0IHBhcmFtcyAgID0gYXJncy5wYXJhbXMgfHwge31cclxuXHJcbiAgICAgICAgaWYoYWN0aW9uIHx8IE9iamVjdC5rZXlzKHJlcXVlc3QpLmxlbmd0aCA9PT0gMCl7XHJcbiAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaChtZXRob2Qpe1xyXG4gICAgICAgICAgICBjYXNlICdQT1NUJzpcclxuICAgICAgICAgICAgICAgIGh0dHAgPSB0aGlzLmh0dHAucG9zdChhY3Rpb24scmVxdWVzdCxwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBodHRwID0gdGhpcy5odHRwLmdldChhY3Rpb24sey4uLnJlcXVlc3QsLi4ucGFyYW1zfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaHR0cC5waXBlKG1hcCgoZGF0YTphbnkpPT4gKGRhdGEgJiYgZGF0YS5sZW5ndGggPT09IDApKSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZXhpc3RzKGFyZ3M6SHR0cFJlcXVlc3RBcmdzKTogT2JzZXJ2YWJsZTxib29sZWFuPntcclxuICAgICAgICBsZXQgaHR0cCAgICA6T2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgICAgIGxldCBhY3Rpb24gICA9IGFyZ3MudXJsXHJcbiAgICAgICAgbGV0IG1ldGhvZCAgID0gYXJncy5tZXRob2QgfHwgJ0dFVCdcclxuICAgICAgICBsZXQgcmVxdWVzdCAgPSBhcmdzLnJlcXVlc3R8fCB7fVxyXG4gICAgICAgIGxldCBwYXJhbXMgICA9IGFyZ3MucGFyYW1zIHx8IHt9XHJcblxyXG4gICAgICAgIGlmKCFhY3Rpb24gfHwgT2JqZWN0LmtleXMocmVxdWVzdCkubGVuZ3RoID09PSAwKXtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoKG1ldGhvZCl7XHJcbiAgICAgICAgICAgIGNhc2UgJ1BPU1QnOlxyXG4gICAgICAgICAgICAgICAgaHR0cCA9IHRoaXMuaHR0cC5wb3N0KGFjdGlvbixyZXF1ZXN0LHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGh0dHAgPSB0aGlzLmh0dHAuZ2V0KGFjdGlvbix7Li4ucmVxdWVzdCwuLi5wYXJhbXN9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBodHRwLnBpcGUobWFwKChkYXRhOmFueSk9PiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApKSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q3JlZGl0Q2FyZERhdGEobnVtYmVyOnN0cmluZyk6IGFueXtcclxuICAgICAgICBpZighbnVtYmVyKSByZXR1cm47XHJcbiAgICAgICAgbnVtYmVyID0gbnVtYmVyLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgIGxldCBjYXJkX2lzc3VlciA9IHRoaXMuY3JlZGl0Q2FyZElzc3VlcnMuZmluZCgoY2FyZDphbnkpID0+IHRoaXMucmVnZXgobnVtYmVyLGNhcmQucmVnZXgpKTtcclxuICAgICAgICByZXR1cm4ge2lzc3VlciA6IChjYXJkX2lzc3VlciA/IGNhcmRfaXNzdWVyLm5hbWUgOiBudWxsKX1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlZGl0Q2FyZChhY3R1YWxEYXRhOnN0cmluZyk6IGJvb2xlYW57XHJcbiAgICAgICAgbGV0IGNhcmRJbmZvID0gdGhpcy5nZXRDcmVkaXRDYXJkRGF0YShhY3R1YWxEYXRhKSBhcyBhbnlcclxuICAgICAgICByZXR1cm4gY2FyZEluZm8gPyAhIWNhcmRJbmZvLmlzc3VlciA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RGViaXRDYXJkRGF0YShudW1iZXI6bnVtYmVyKTogYW55e1xyXG4gICAgICAgIGlmKCFudW1iZXIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBsZXQgX251bWJlciA9IG51bWJlci50b1N0cmluZygpO1xyXG5cclxuICAgICAgICBsZXQgY2FyZF9pc3N1ZXIgPSB0aGlzLmRlYml0Q2FyZElzc3VlcnMuZmluZCgoY2FyZDphbnkpID0+IHRoaXMucmVnZXgoX251bWJlcixjYXJkLnJlZ2V4KSk7XHJcbiAgICAgICAgcmV0dXJuIHtpc3N1ZXIgOiAoY2FyZF9pc3N1ZXIgPyBjYXJkX2lzc3Vlci5uYW1lIDogbnVsbCl9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYml0Q2FyZChhY3R1YWxEYXRhOm51bWJlcil7XHJcbiAgICAgICAgbGV0IGNhcmRJbmZvID0gdGhpcy5nZXREZWJpdENhcmREYXRhKGFjdHVhbERhdGEpXHJcbiAgICAgICAgcmV0dXJuIGNhcmRJbmZvID8gISFjYXJkSW5mby5pc3N1ZXIgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3Z2KGFjdHVhbERhdGE6c3RyaW5nKTpib29sZWFue1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2V4KGFjdHVhbERhdGEsJ15bMC05XXszLDR9JCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTdHJlbmd0aERhdGEoYWN0dWFsRGF0YTpzdHJpbmcsIGNvbXBhcmU6c3RyaW5nIHwgc3RyaW5nW10pOiBhbnl7XHJcblxyXG4gICAgICAgIGlmKCEhIWFjdHVhbERhdGEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IHRvQ29tcGFyZSAgICAgICAgID0gdG9BcnJheShjb21wYXJlKTtcclxuICAgICAgICBsZXQgYWxsb3dlZFN0cmVuZ3RoICA9IFtdIGFzIGFueTtcclxuICAgICAgICBsZXQgYWN0aXZlU3RyZW5ndGggICA9IFtdIGFzIGFueTtcclxuICAgICAgICBsZXQgaW5BY3RpdmVTdHJlbmd0aCA9IFtdIGFzIGFueTtcclxuICAgICAgICBsZXQgc3RyZW5ndGhTY29yZSAgICA9IDAgIGFzIG51bWJlcjtcclxuICAgICAgICBsZXQgc3RyZW5ndGhfY29sb3IgICA9IHRoaXMuYWJzLnN0cmVuZ3RoQ29sb3I7XHJcbiAgICAgICAgbGV0IHZhbGlkU3RyZW5ndGggICAgPSBzdHJlbmd0aF9jb2xvcltzdHJlbmd0aF9jb2xvci5sZW5ndGggLSAxXTtcclxuICAgICAgICBsZXQgYWxsb3dPbk1heFNjcm9yZSA9IHRoaXMubnVtYmVyKHRvQ29tcGFyZVt0b0NvbXBhcmUubGVuZ3RoIC0xXSkgPyB0b0NvbXBhcmVbdG9Db21wYXJlLmxlbmd0aCAtMV0gOiB2YWxpZFN0cmVuZ3RoLm1pbiB8fCAtOTk5OTtcclxuICAgICAgICBsZXQgc3BlY2lhbENoYXJzICAgICA9IFwiQCUrXFwvJyEjJF4/Oi4oKXt9W11+LV9cIjtcclxuXHJcbiAgICAgICAgdmFyIGxldHRlcnMgPSBuZXcgT2JqZWN0KCkgYXMgYW55O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0dWFsRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgYXNzaWduU2NvcmUgPSBzcGVjaWFsQ2hhcnMuaW5jbHVkZXMoYWN0dWFsRGF0YVtpXSkgPyA4LjAgOiA1LjA7XHJcbiAgICAgICAgICAgIGxldHRlcnNbYWN0dWFsRGF0YVtpXV0gPSAobGV0dGVyc1thY3R1YWxEYXRhW2ldXSB8fCAwKSArIDE7XHJcbiAgICAgICAgICAgIHN0cmVuZ3RoU2NvcmUgKz0gYXNzaWduU2NvcmUgLyBsZXR0ZXJzW2FjdHVhbERhdGFbaV1dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHZhcmlhdGlvbkNvdW50ID0gMDtcclxuICAgICAgICB0aGlzLnN0cmluZ1N0cmVuZ3RoLmZvckVhY2goKHY6YW55KT0+e1xyXG4gICAgICAgICAgICBpZih0b0NvbXBhcmUuaW5kZXhPZih2LmlkKSA+PSAwIHx8IHRvQ29tcGFyZS5sZW5ndGggPT0gMCl7XHJcbiAgICAgICAgICAgICAgICBhbGxvd2VkU3RyZW5ndGgucHVzaCh2LmlkKVxyXG4gICAgICAgICAgICAgICAgbGV0IGlzVmFsaWQgPSB0aGlzLnJlZ2V4KGFjdHVhbERhdGEsdi5yZWdleCk7XHJcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID8gYWN0aXZlU3RyZW5ndGgucHVzaCh2LmlkKSA6IGluQWN0aXZlU3RyZW5ndGgucHVzaCh2LmlkKVxyXG4gICAgICAgICAgICAgICAgdmFyaWF0aW9uQ291bnQgKz0gIGlzVmFsaWQgPyAxIDogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc3RyZW5ndGhTY29yZSArPSAodmFyaWF0aW9uQ291bnQgLSAxKSAqIDEwO1xyXG4gICAgICAgIHN0cmVuZ3RoU2NvcmUgPSBNYXRoLnJvdW5kKHN0cmVuZ3RoU2NvcmUpO1xyXG5cclxuICAgICAgICBpZihpbkFjdGl2ZVN0cmVuZ3RoLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICBzdHJlbmd0aFNjb3JlID0gKHN0cmVuZ3RoU2NvcmUgPj0gYWxsb3dPbk1heFNjcm9yZSkgPyBhbGxvd09uTWF4U2Nyb3JlIC0gKGluQWN0aXZlU3RyZW5ndGgubGVuZ3RoICogNSkgOiBzdHJlbmd0aFNjb3JlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNlbmRPYmplY3QgPSB7XHJcbiAgICAgICAgICAgIHNjb3JlICAgICAgICAgICAgOnN0cmVuZ3RoU2NvcmUsXHJcbiAgICAgICAgICAgIGFsbG93ZWRTdHJlbmd0aCAgOmFsbG93ZWRTdHJlbmd0aCxcclxuICAgICAgICAgICAgdmFsaWRGb3IgICAgICAgICA6YWN0aXZlU3RyZW5ndGgsXHJcbiAgICAgICAgICAgIHZhbGlkRXhjZXB0ICAgICAgOmluQWN0aXZlU3RyZW5ndGgsXHJcbiAgICAgICAgICAgIGFsbG93T25NYXhTY29yZSAgOmFsbG93T25NYXhTY3JvcmVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gc2VuZE9iamVjdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RyZW5ndGgoYWN0dWFsRGF0YTpzdHJpbmcsY29tcGFyZTpzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW57XHJcbiAgICAgICAgbGV0IHN0cmVuZ3RoID0gdGhpcy5nZXRTdHJlbmd0aERhdGEoYWN0dWFsRGF0YSxjb21wYXJlKTtcclxuICAgICAgICByZXR1cm4gKHN0cmVuZ3RoICYmIHN0cmVuZ3RoLnNjb3JlID49IHN0cmVuZ3RoLmFsbG93T25NYXhTY29yZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHBob25lTm8oYWN0dWFsRGF0YTpzdHJpbmcsZXhwcmVzc2lvbjpzdHJpbmcgfCBudWxsID0gbnVsbCk6IGJvb2xlYW57XHJcbiAgICAgICAgbGV0IHJlZ2V4OmFueSA9IC9cXHMqKD86XFwrPyhcXGR7MSwzfSkpP1tcXFdcXERcXHNdXnwoKSooXFxkW1xcV1xcRFxcc10qP1xcZFtcXERcXFdcXHNdKj9cXGQpW1xcV1xcRFxcc10qKFxcZFtcXFdcXERcXHNdKj9cXGRbXFxEXFxXXFxzXSo/XFxkKVtcXFdcXERcXHNdKihcXGRbXFxXXFxEXFxzXSo/XFxkW1xcRFxcV1xcc10qP1xcZFtcXFdcXERcXHNdKj9cXGQpKD86ICp4KFxcZCspKT9cXHMqJC9nO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2V4KGFjdHVhbERhdGEsIGV4cHJlc3Npb24gfHwgcmVnZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbWFnZShmaWxlSW5zdGFuY2U6RmlsZVtdKTogYm9vbGVhbntcclxuICAgICAgICBpZighISFmaWxlSW5zdGFuY2UgfHwgZmlsZUluc3RhbmNlLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGxldCBmaWxlID0gZmlsZUluc3RhbmNlWzBdIGFzIEZpbGU7XHJcbiAgICAgICAgcmV0dXJuIGZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmlkZW8oZmlsZUluc3RhbmNlOkZpbGVbXSk6IGJvb2xlYW57XHJcbiAgICAgICAgaWYoISEhZmlsZUluc3RhbmNlIHx8IGZpbGVJbnN0YW5jZS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGZpbGUgPSBmaWxlSW5zdGFuY2VbMF0gYXMgRmlsZTtcclxuICAgICAgICByZXR1cm4gZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ3ZpZGVvLycpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtaW1lcyhmaWxlSW5zdGFuY2U6RmlsZVtdLGNvbXBhcmU6c3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFue1xyXG4gICAgICAgIGlmKCEhIWZpbGVJbnN0YW5jZSB8fCBmaWxlSW5zdGFuY2UubGVuZ3RoID09PSAwIHx8ICEhIWNvbXBhcmUpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGZpbGUgICAgICAgID0gZmlsZUluc3RhbmNlWzBdO1xyXG4gICAgICAgIGxldCBleHQgICAgICAgICA9IGZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpO1xyXG4gICAgICAgIGxldCBhY2NlcHRUeXBlICA9IHRvQXJyYXkoY29tcGFyZSk7XHJcbiAgICAgICAgbGV0IGhhc01pbWUgICAgID0gYWNjZXB0VHlwZS5pbmNsdWRlcyhleHQpO1xyXG4gICAgICAgIHJldHVybiAhIWhhc01pbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNpemUoZmlsZUluc3RhbmNlOkZpbGVbXSxjb21wYXJlOm51bWJlcik6IGJvb2xlYW57XHJcbiAgICAgICAgaWYoISEhZmlsZUluc3RhbmNlIHx8IGZpbGVJbnN0YW5jZS5sZW5ndGggPT0gMCB8fCAhISFjb21wYXJlKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBmaWxlID0gZmlsZUluc3RhbmNlWzBdO1xyXG4gICAgICAgIHJldHVybiBmaWxlLnNpemUgPD0gY29tcGFyZSAqIDEwMjQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpbWVuc2lvbihmaWxlSW5zdGFuY2U6RmlsZVtdLCBjb21wYXJlOnN0cmluZyB8IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxhbnk+e1xyXG4gICAgICAgIGlmKCEhIWZpbGVJbnN0YW5jZSB8fCBmaWxlSW5zdGFuY2UubGVuZ3RoID09IDAgfHwgY29tcGFyZS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcblxyXG4gICAgICAgIGxldCBmaWxlICAgICAgICA9IGZpbGVJbnN0YW5jZVswXTtcclxuICAgICAgICBsZXQgdHlwZSAgICAgICAgPSBmaWxlLnR5cGU7XHJcblxyXG4gICAgICAgIGlmKCF0eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKVxyXG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG5cclxuICAgICAgICBsZXQgZGltZW5zaW9uICAgPSB0b0FycmF5KGNvbXBhcmUpO1xyXG4gICAgICAgIGxldCBpbWFnZSAgICAgICA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICAgIGxldCBoZWlnaHQgICAgICA9IDA7XHJcbiAgICAgICAgbGV0IHdpZHRoICAgICAgID0gMDtcclxuICAgICAgICBsZXQgcmF0aW8gICAgICAgPSAwO1xyXG4gICAgICAgIGxldCBoZWlnaHRNYXRjaCA9ICdlcXVhbCc7XHJcbiAgICAgICAgbGV0IHdpZHRoTWF0Y2ggID0gJ2VxdWFsJztcclxuXHJcbiAgICAgICAgLy9tYXhfaGVpZ2h0PTIwMCB8IG1heF9oZWlnaHQ9MjAwIHwgaGVpZ2h0ID0gMjAwXHJcbiAgICAgICAgLy9taW5fd2lkdGg9MjAwICB8IG1pbl93aWR0aD0yMDAgIHwgd2lkdGggPSAyMDBcclxuICAgICAgICAvL3JhdGlvPTEuMlxyXG5cclxuICAgICAgICBkaW1lbnNpb24uZm9yRWFjaChlbCA9PiB7XHJcbiAgICAgICAgICAgIGlmKGVsLmluY2x1ZGVzKCdfaGVpZ2h0PScpIHx8IGVsLnN0YXJ0c1dpdGgoJ2hlaWdodD0nKSl7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgICAgICA9IHBhcnNlSW50KGVsLnNwbGl0KCc9JylbMV0gfHwgMClcclxuICAgICAgICAgICAgICAgIGhlaWdodE1hdGNoID0gWydtYXgnLCdtaW4nXS5pbmNsdWRlcygoZWwuc3BsaXQoJz0nKVswXSkuc3BsaXQoJ18nKVswXSkgID8gIChlbC5zcGxpdCgnPScpWzBdKS5zcGxpdCgnXycpWzBdIDogJ2VxdWFsJ1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZihlbC5pbmNsdWRlcygnX3dpZHRoPScpIHx8IGVsLnN0YXJ0c1dpdGgoJ3dpZHRoPScpKXtcclxuICAgICAgICAgICAgICAgIHdpZHRoICAgICAgID0gcGFyc2VJbnQoZWwuc3BsaXQoJz0nKVsxXSB8fCAwIClcclxuICAgICAgICAgICAgICAgIHdpZHRoTWF0Y2ggID0gWydtYXgnLCdtaW4nXS5pbmNsdWRlcygoZWwuc3BsaXQoJz0nKVswXSkuc3BsaXQoJ18nKVswXSkgID8gIChlbC5zcGxpdCgnPScpWzBdKS5zcGxpdCgnXycpWzBdIDogJ2VxdWFsJ1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZihlbC5pbmNsdWRlcygncmF0aW89Jykpe1xyXG4gICAgICAgICAgICAgICAgcmF0aW8gPSBwYXJzZUZsb2F0KGVsLnNwbGl0KCc9JylbMV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaW1hZ2Uuc3JjID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBmcm9tKG5ldyBQcm9taXNlKChyZXNvbHZlKT0+e1xyXG4gICAgICAgICAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PntcclxuICAgICAgICAgICAgICAgIGxldCBpc1ZhbGlkID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIGlmKHJhdGlvKXtcclxuICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gKChpbWFnZS53aWR0aC9pbWFnZS5oZWlnaHQpLnRvRml4ZWQoMSkgPT09IHJhdGlvLnRvRml4ZWQoMSkpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzVmFsaWRXaWR0aCAgPSB3aWR0aCAgPyB0aGlzLmRvQ29tcGFyaXNvbihpbWFnZS53aWR0aCx3aWR0aCx3aWR0aE1hdGNoKSA6IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzVmFsaWRIZWlnaHQgPSBoZWlnaHQgPyB0aGlzLmRvQ29tcGFyaXNvbihpbWFnZS5oZWlnaHQsaGVpZ2h0LGhlaWdodE1hdGNoKSA6IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IChpc1ZhbGlkV2lkdGggJiYgaXNWYWxpZEhlaWdodCkgYXMgYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShpc1ZhbGlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBkb0NvbXBhcmlzb24obWF0Y2hXaXRoOiBudW1iZXIsIG1hdGNoVG86IG51bWJlciwgb3BlcmF0b3IgPSAnZXF1YWwnKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IGNvbXBhcmVTdGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChvcGVyYXRvciA9PSAnZXF1YWwnKSB7IGNvbXBhcmVTdGF0ZSA9IG1hdGNoV2l0aCA9PSBtYXRjaFRvIH1cclxuICAgICAgICBpZiAob3BlcmF0b3IgPT0gJ21pbicpIHsgY29tcGFyZVN0YXRlID0gbWF0Y2hXaXRoID49IG1hdGNoVG8gfVxyXG4gICAgICAgIGlmIChvcGVyYXRvciA9PSAnbWF4JykgeyBjb21wYXJlU3RhdGUgPSBtYXRjaFdpdGggPD0gbWF0Y2hUbyB9XHJcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVTdGF0ZTtcclxuICAgIH1cclxufVxyXG4iXX0=
477
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWFic29sdXRlLXZhbGlkYXRvci9zcmMvbGliL3NlcnZpY2VzL3V0aWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRSxPQUFPLEVBQWMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc1QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQzs7OztBQUk3RCxNQUFNLE9BQU8sV0FBVztJQVNwQixZQUNZLElBQXdCLEVBQ3hCLEdBQWdDO1FBRGhDLFNBQUksR0FBSixJQUFJLENBQW9CO1FBQ3hCLFFBQUcsR0FBSCxHQUFHLENBQTZCO1FBVHJDLG9CQUFlLEdBQWEsWUFBWSxDQUFDO1FBQ3pDLHNCQUFpQixHQUFRLGNBQWMsQ0FBQyxXQUFXLENBQUM7UUFDcEQscUJBQWdCLEdBQVMsY0FBYyxDQUFDLFVBQVUsQ0FBQztRQUNuRCxxQkFBZ0IsR0FBUyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7UUFDekQsb0JBQWUsR0FBVSxjQUFjLENBQUMsZUFBZSxDQUFBO1FBQ3ZELG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBS2pDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUFBLENBQUM7SUFHZCxJQUFJO1FBQ0EsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztJQUNqRCxD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LE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7O3dHQWxpQlEsV0FBVzs0R0FBWCxXQUFXLGNBREUsTUFBTTsyRkFDbkIsV0FBVztrQkFEdkIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4vaHR0cC5yZXF1ZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ0Fic29sdXRlVmFsaWRhdG9yU2VydmljZSB9IGZyb20gJy4vLi4vbmctYWJzb2x1dGUtdmFsaWRhdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IERFRkFVTFRfREFURV9GT1JNQVQsIEdsb2JhbENvbnN0YW50IH0gZnJvbSAnLi4vY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wyLCBIdHRwUmVxdWVzdEFyZ3MgfSBmcm9tICcuLi9pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4uL2NvbW1vbi51dGlscyc7XHJcbmltcG9ydCB7IGlzQWZ0ZXIsIGlzQmVmb3JlLCBpc1ZhbGlkLCBwYXJzZSB9IGZyb20gJ2RhdGUtZm5zJztcclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgVXRpbFNlcnZpY2Uge1xyXG5cclxuICAgIHB1YmxpYyBkZWZhdWx0VGltZVpvbmUgICA6c3RyaW5nID0gJ0RELU1NLVlZWVknO1xyXG4gICAgcHVibGljIGNyZWRpdENhcmRJc3N1ZXJzIDphbnkgPSBHbG9iYWxDb25zdGFudC5jcmVkaXRfY2FyZDtcclxuICAgIHB1YmxpYyBkZWJpdENhcmRJc3N1ZXJzICA6YW55ID0gR2xvYmFsQ29uc3RhbnQuZGViaXRfY2FyZDtcclxuICAgIHB1YmxpYyBjdXN0b21PYmplY3ROYW1lICA6YW55ID0gR2xvYmFsQ29uc3RhbnQuY3VzdG9tT2JqZWN0TmFtZTtcclxuICAgIHB1YmxpYyBjdXN0b21SdWxlc05hbWUgICA6YW55ID0gR2xvYmFsQ29uc3RhbnQuY3VzdG9tUnVsZXNOYW1lXHJcbiAgICBwdWJsaWMgc3RyaW5nU3RyZW5ndGggICAgOmFueSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cFJlcXVlc3RTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYWJzIDogTmdBYnNvbHV0ZVZhbGlkYXRvclNlcnZpY2VcclxuICAgICl7dGhpcy5pbml0KCl9XHJcblxyXG5cclxuICAgIGluaXQoKXtcclxuICAgICAgICB0aGlzLnN0cmluZ1N0cmVuZ3RoID0gdGhpcy5hYnMuc3RyZW5ndGhMZXZlbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0VmFsaWRhdGlvblJ1bGVzKGNvbnRyb2w6QWJzdHJhY3RDb250cm9sMixydWxlczpzdHJpbmcgfCBzdHJpbmdbXSxhcHBlbmRzID0ge30pe1xyXG4gICAgICAgIGxldCBjdXN0b21PYmplY3ROYW1lID0gdGhpcy5jdXN0b21PYmplY3ROYW1lO1xyXG4gICAgICAgIGxldCBjdXN0b21SdWxlc05hbWUgID0gdGhpcy5jdXN0b21SdWxlc05hbWU7XHJcbiAgICAgICAgbGV0IHJ1bGVBcnJheSAgICAgICAgPSBBcnJheS5pc0FycmF5KHJ1bGVzKSA/IHJ1bGVzIDogW3J1bGVzXTtcclxuICAgICAgICBsZXQgYWN0aXZlUnVsZXMgICAgICA9ICEhY29udHJvbFtjdXN0b21PYmplY3ROYW1lXSAmJiAhIWNvbnRyb2xbY3VzdG9tT2JqZWN0TmFtZV1bY3VzdG9tUnVsZXNOYW1lXSA/IGNvbnRyb2xbY3VzdG9tT2JqZWN0TmFtZV1bY3VzdG9tUnVsZXNOYW1lXSA6IFtdO1xyXG4gICAgICAgIGxldCBmaW5hbE9iamVjdCAgICAgID0gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMgOiAgQXJyYXkuZnJvbShuZXcgU2V0KGFjdGl2ZVJ1bGVzLmNvbmNhdChydWxlQXJyYXkpKSlcclxuICAgICAgICB9LGFwcGVuZHMpO1xyXG5cclxuICAgICAgICBjb250cm9sW2N1c3RvbU9iamVjdE5hbWVdID0gZmluYWxPYmplY3RcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMganNvbihzdHJpbmc6c3RyaW5nKTpib29sZWFuIHtcclxuICAgICAgICBpZighc3RyaW5nKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgSlNPTi5wYXJzZShzdHJpbmcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29uZmlybWVkKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDIsIGFyZ3M6c3RyaW5nLCBmaWVsZE5hbWUgPSBudWxsKTogYm9vbGVhbiB8IHZvaWQge1xyXG4gICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZSB8fCBjb250cm9sWydmaWVsZF9uYW1lJ10gfHwgbnVsbDtcclxuICAgICAgICBsZXQgY29tcGFyZWRfZmllbGRfbmFtZSA9IGFyZ3MgfHwgKGAke2ZpZWxkTmFtZX1fY29uZmlybWF0aW9uYCk7XHJcbiAgICAgICAgbGV0IHRvQ29tcGFyZVdpdGggPSBjb250cm9sLnJvb3QuZ2V0KGNvbXBhcmVkX2ZpZWxkX25hbWUpIGFzIEZvcm1Db250cm9sO1xyXG4gICAgICAgIHJldHVybiAoY29udHJvbC52YWx1ZSA9PT0gdG9Db21wYXJlV2l0aD8udmFsdWUpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhbWUoY29udHJvbDogQWJzdHJhY3RDb250cm9sMiwgYXJnczpzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgdG9Db21wYXJlV2l0aCA9IGNvbnRyb2wucm9vdC5nZXQoYXJncykgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgICAgcmV0dXJuIChjb250cm9sLnZhbHVlID09PSB0b0NvbXBhcmVXaXRoPy52YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpZmZlcmVudChjb250cm9sOkFic3RyYWN0Q29udHJvbDIsIGFyZ3M6c3RyaW5nKTogYm9vbGVhbntcclxuICAgICAgICBsZXQgdG9Db21wYXJlV2l0aCA9IGNvbnRyb2wucm9vdC5nZXQoYXJncykgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgICAgcmV0dXJuIChjb250cm9sLnZhbHVlICE9PSB0b0NvbXBhcmVXaXRoPy52YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlcXVpcmVkKGFjdHVhbERhdGE6c3RyaW5nKTpib29sZWFue1xyXG4gICAgICAgIHJldHVybiAhIWFjdHVhbERhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlcXVpcmVkSWYoY29udHJvbDogQWJzdHJhY3RDb250cm9sMiwgYXJnczogc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgW2RlcGVuZGVudCxtYXRjaFdpdGhdID0gdG9BcnJheShhcmdzKVxyXG4gICAgICAgIGlmKCFkZXBlbmRlbnQgfHwgIW1hdGNoV2l0aCl7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdG9Db21wYXJlV2l0aCA9IGNvbnRyb2wucm9vdC5nZXQoZGVwZW5kZW50KSBhcyBGb3JtQ29udHJvbFxyXG4gICAgICAgIHJldHVybiAodG9Db21wYXJlV2l0aC52YWx1ZSA9PT0gbWF0Y2hXaXRoKSA/IHRoaXMucmVxdWlyZWQoY29udHJvbC52YWx1ZSkgOiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlcXVpcmVkVW5sZXNzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDIsIGFyZ3M6IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IFtkZXBlbmRlbnQsLi4ubWF0Y2hXaXRoXSA9IHRvQXJyYXkoYXJncyk7XHJcbiAgICAgICAgaWYoIWRlcGVuZGVudCAmJiBtYXRjaFdpdGgubGVuZ3RoID09PSAwKXtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdG9Db21wYXJlV2l0aCA9IGNvbnRyb2wucm9vdC5nZXQoZGVwZW5kZW50KSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgICByZXR1cm4gbWF0Y2hXaXRoLnNvbWUoaXRlbSA9PiBpdGVtID09PSB0b0NvbXBhcmVXaXRoLnZhbHVlKSA/IHRoaXMucmVxdWlyZWQoY29udHJvbC52YWx1ZSkgOiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlcXVpcmVkV2l0aChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wyLCBhcmdzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBuYW1lcyA9IHRvQXJyYXkoYXJncyk7XHJcbiAgICAgICAgbGV0IGFueUhhc1ZhbHVlID0gbmFtZXMuc29tZShuYW1lID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYyA9IGNvbnRyb2wucm9vdC5nZXQobmFtZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBjICYmIGMudmFsdWUgIT09IG51bGwgJiYgYy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGMudmFsdWUgIT09ICcnO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhbnlIYXNWYWx1ZSA/IHRoaXMucmVxdWlyZWQoY29udHJvbC52YWx1ZSkgOiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXF1aXJlZFdpdGhBbGwoY29udHJvbDpBYnN0cmFjdENvbnRyb2wyLCBhcmdzOnN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbntcclxuICAgICAgICBsZXQgbWF0Y2hXaXRoIFx0ICAgICA9IHRvQXJyYXkoYXJncyk7XHJcbiAgICAgICAgbGV0IGNvbXBhcmVXaXRoVmFsdWUgPSBtYXRjaFdpdGgubWFwKG5hbWUgPT4gKGNvbnRyb2wucm9vdC5nZXQobmFtZSkgYXMgRm9ybUNvbnRyb2wpLnZhbHVlKVxyXG4gICAgICAgIHJldHVybiBjb21wYXJlV2l0aFZhbHVlLmZpbHRlcihCb29sZWFuKS5sZW5ndGggPT09IG1hdGNoV2l0aC5sZW5ndGggPyB0aGlzLnJlcXVpcmVkKGNvbnRyb2wudmFsdWUpIDogdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXF1aXJlZFdpdGhvdXQoY29udHJvbDpBYnN0cmFjdENvbnRyb2wyLCBhcmdzOnN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbntcclxuICAgICAgICBsZXQgbWF0Y2hXaXRoIFx0ICAgICA9IHRvQXJyYXkoYXJncyk7XHJcbiAgICAgICAgbGV0IGNvbXBhcmVXaXRoVmFsdWUgPSBtYXRjaFdpdGgubWFwKG5hbWUgPT4gKGNvbnRyb2wucm9vdC5nZXQobmFtZSkgYXMgRm9ybUNvbnRyb2wpLnZhbHVlKVxyXG4gICAgICAgIHJldHVybiBjb21wYXJlV2l0aFZhbHVlLmZpbHRlcihCb29sZWFuKS5sZW5ndGggPT09IDAgPyB0aGlzLnJlcXVpcmVkKGNvbnRyb2wudmFsdWUpIDogdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXF1aXJlZFdpdGhvdXRBbGwoY29udHJvbDpBYnN0cmFjdENvbnRyb2wyLCBhcmdzOnN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbntcclxuICAgICAgICBsZXQgbWF0Y2hXaXRoIFx0XHQgPSB0b0FycmF5KGFyZ3MpO1xyXG4gICAgICAgIGxldCBjb21wYXJlV2l0aFZhbHVlID0gbWF0Y2hXaXRoLm1hcChuYW1lID0+IChjb250cm9sLnJvb3QuZ2V0KG5hbWUpIGFzIEZvcm1Db250cm9sKS52YWx1ZSlcclxuICAgICAgICBsZXQgZW1wdHlGaWVsZENvdW50ICA9IGNvbXBhcmVXaXRoVmFsdWUuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgcmV0dXJuIGVtcHR5RmllbGRDb3VudC5sZW5ndGggPiAwID8gdGhpcy5yZXF1aXJlZChjb250cm9sLnZhbHVlKSA6IHRydWVcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW1haWwoYWN0dWFsRGF0YTpzdHJpbmcpOiBib29sZWFue1xyXG4gICAgICAgIHJldHVybiAoL15cXHcrKFtcXC4tXT9cXHcrKSpAXFx3KyhbXFwuLV0/XFx3KykqKFxcLlxcd3syLDN9KSskLy50ZXN0KGFjdHVhbERhdGEpKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhYm92ZShhY3R1YWxEYXRhOm51bWJlcix0b0JlRGF0YTpudW1iZXIpOiBib29sZWFue1xyXG4gICAgICAgIHJldHVybiAoTnVtYmVyKHRvQmVEYXRhKSA8IE51bWJlcihhY3R1YWxEYXRhKSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWNjZXB0ZWQoYWN0dWFsRGF0YTphbnkpOiBib29sZWFue1xyXG4gICAgICAgIHJldHVybiAoYWN0dWFsRGF0YSB8fCBhY3R1YWxEYXRhICE9PSBmYWxzZSB8fCBhY3R1YWxEYXRhICE9PSAwKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkYXRlKGFjdHVhbERhdGE6c3RyaW5nLGZvcm1hdDpzdHJpbmcgPSBERUZBVUxUX0RBVEVfRk9STUFUKTogYm9vbGVhbntcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYWN0dWFsRGF0YSA/IGlzVmFsaWQocGFyc2UoYWN0dWFsRGF0YSwgZm9ybWF0IHx8IERFRkFVTFRfREFURV9GT1JNQVQsIG5ldyBEYXRlKCkpKSA6IHRydWVcclxuICAgICAgICB9Y2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGF0ZUZvcm1hdChhY3R1YWxEYXRhOmFueSwgZm9ybWF0OnN0cmluZyA9IERFRkFVTFRfREFURV9GT1JNQVQpOiBib29sZWFue1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWxEYXRhID8gaXNWYWxpZChwYXJzZShhY3R1YWxEYXRhLCBmb3JtYXQgfHwgREVGQVVMVF9EQVRFX0ZPUk1BVCwgbmV3IERhdGUoKSkpIDogdHJ1ZVxyXG4gICAgICAgIH1jYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZnRlcihhY3R1YWxEYXRhOnN0cmluZywgdG9CZURhdGE6c3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFue1xyXG4gICAgICAgIGlmKCEhIWFjdHVhbERhdGEgfHwgISEhdG9CZURhdGEpe1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgW21hdGNoV2l0aERhdGUsbWF0Y2hXaXRoRGF0ZUZvcm1hdCA9IERFRkFVTFRfREFURV9GT1JNQVRdID0gQXJyYXkuaXNBcnJheSh0b0JlRGF0YSkgPyB0b0JlRGF0YSA6IHRvQmVEYXRhLnNwbGl0KCcsJylcclxuICAgICAgICBpZighdGhpcy5kYXRlRm9ybWF0KGFjdHVhbERhdGEsbWF0Y2hXaXRoRGF0ZUZvcm1hdCkgfHwgIXRoaXMuZGF0ZUZvcm1hdChtYXRjaFdpdGhEYXRlLG1hdGNoV2l0aERhdGVGb3JtYXQpKXtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaXNBZnRlcihcclxuICAgICAgICAgICAgcGFyc2UoYWN0dWFsRGF0YSwgbWF0Y2hXaXRoRGF0ZUZvcm1hdCwgbmV3IERhdGUoKSksXHJcbiAgICAgICAgICAgIHBhcnNlKG1hdGNoV2l0aERhdGUsIG1hdGNoV2l0aERhdGVGb3JtYXQsIG5ldyBEYXRlKCkpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYmVmb3JlKGFjdHVhbERhdGE6c3RyaW5nLCB0b0JlRGF0YTpzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW57XHJcbiAgICAgICAgaWYoISEhYWN0dWFsRGF0YSB8fCAhISF0b0JlRGF0YSl7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBbbWF0Y2hXaXRoRGF0ZSxtYXRjaFdpdGhEYXRlRm9ybWF0ID0gREVGQVVMVF9EQVRFX0ZPUk1BVF0gPSBBcnJheS5pc0FycmF5KHRvQmVEYXRhKSA/IHRvQmVEYXRhIDogdG9CZURhdGEuc3BsaXQoJywnKVxyXG4gICAgICAgIGlmKCF0aGlzLmRhdGVGb3JtYXQoYWN0dWFsRGF0YSxtYXRjaFdpdGhEYXRlRm9ybWF0KSB8fCAhdGhpcy5kYXRlRm9ybWF0KG1hdGNoV2l0aERhdGUsbWF0Y2hXaXRoRGF0ZUZvcm1hdCkpe1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpc0JlZm9yZShcclxuICAgICAgICAgICAgcGFyc2UoYWN0dWFsRGF0YSwgbWF0Y2hXaXRoRGF0ZUZvcm1hdCwgbmV3IERhdGUoKSksXHJcbiAgICAgICAgICAgIHBhcnNlKG1hdGNoV2l0aERhdGUsIG1hdGNoV2l0aERhdGVGb3JtYXQsIG5ldyBEYXRlKCkpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWxwaGEoYWN0dWFsRGF0YTpzdHJpbmcpIDpib29sZWFue1xyXG4gICAgICAgIHJldHVybiAoL15bYS16XSskL2kudGVzdChhY3R1YWxEYXRhKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFscGhhTnVtZXJpYyhhY3R1YWxEYXRhOnN0cmluZyk6IGJvb2xlYW57XHJcbiAgICAgICAgcmV0dXJuICgvXlthLXowLTldKyQvaS50ZXN0KGFjdHVhbERhdGEpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWxwaGFEYXNoKGFjdHVhbERhdGE6c3RyaW5nKTogYm9vbGVhbntcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWdleChhY3R1YWxEYXRhLCdeW2EtekEtWjAtOS1fXSskJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFycmF5KGFjdHVhbERhdGE6c3RyaW5nKTogYm9vbGVhbntcclxuICAgICAgICBpZih0eXBlb2YgYWN0dWFsRGF0YSA9PT0gJ3N0cmluZycgJiYgdGhpcy5qc29uKGFjdHVhbERhdGEpKXtcclxuICAgICAgICAgICAgYWN0dWFsRGF0YSA9IEpTT04ucGFyc2UoYWN0dWFsRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFjdHVhbERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBib29sZWFuKGFjdHVhbERhdGE6c3RyaW5nKTpib29sZWFue1xyXG4gICAgICAgIGxldCBib29sZWFuQWNjZXB0ZWQgPSBbXHJcbiAgICAgICAgICAgIDEsJzEnLDAsJzAnLCd0cnVlJyx0cnVlLCdmYWxzZScsJ2ZhbHNlJ1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgcmV0dXJuIGJvb2xlYW5BY2NlcHRlZC5pbmNsdWRlcyhhY3R1YWxEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZXF1YWxzKGFjdHVhbERhdGE6c3RyaW5nLGNvbXBhcmVkX3RvX3ZhbHVlOnN0cmluZyk6IGJvb2xlYW57XHJcbiAgICAgICAgcmV0dXJuIChhY3R1YWxEYXRhID09IGNvbXBhcmVkX3RvX3ZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW5kc1dpdGgoYWN0dWFsRGF0YTpzdHJpbmcsIGVuZF93aXRoOiBhbnkpOiBib29sZWFue1xyXG4gICAgICAgIGxldCBfZW5kX3dpdGggPSB0b0FycmF5KGVuZF93aXRoKTtcclxuICAgICAgICByZXR1cm4gIV9lbmRfd2l0aC5maW5kKCh2KSA9PiBhY3R1YWxEYXRhICYmIGFjdHVhbERhdGEuZW5kc1dpdGgodikpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydHNXaXRoKGFjdHVhbERhdGE6c3RyaW5nLCBzdGFydF93aXRoOnN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbntcclxuICAgICAgICByZXR1cm4gdG9BcnJheShzdGFydF93aXRoKS5zb21lKCh2KSA9PiBhY3R1YWxEYXRhICYmIGFjdHVhbERhdGEuc3RhcnRzV2l0aCh2KSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW4oYWN0dWFsRGF0YTogc3RyaW5nLCBjb21wYXJlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCB0b0NvbXBhcmUgPSBuZXcgU2V0KHRvQXJyYXkoY29tcGFyZSkubWFwKHYgPT4gdi50b1N0cmluZygpKSlcclxuICAgICAgICByZXR1cm4gdG9Db21wYXJlLmhhcyhhY3R1YWxEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbm90SW4oYWN0dWFsRGF0YTpzdHJpbmcsIGNvbXBhcmU6c3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFue1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5pbihhY3R1YWxEYXRhLGNvbXBhcmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbmNsdWRlcyhhY3R1YWxEYXRhOiBzdHJpbmcsIGNvbXBhcmU6IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFhY3R1YWxEYXRhKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRvQXJyYXkoY29tcGFyZSkuZXZlcnkodiA9PiBhY3R1YWxEYXRhLmluY2x1ZGVzKHYudG9TdHJpbmcoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBudW1iZXIoYWN0dWFsRGF0YTphbnkpOiBib29sZWFue1xyXG4gICAgICAgIHJldHVybiAhaXNOYU4oYWN0dWFsRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0cmluZyhhY3R1YWxEYXRhOmFueSk6IGJvb2xlYW57XHJcbiAgICAgICAgcmV0dXJuIGlzTmFOKGFjdHVhbERhdGEpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGludGVnZXIoYWN0dWFsRGF0YTphbnkpOiBib29sZWFue1xyXG4gICAgICAgIGlmKCF0aGlzLm51bWJlcihhY3R1YWxEYXRhKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKE51bWJlcihhY3R1YWxEYXRhKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlwKGFjdHVhbERhdGE6c3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlZ2V4RXhwID0gW1xyXG4gICAgICAgICAgICAnXigyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pJyxcclxuICAgICAgICAgICAgJygyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pJyxcclxuICAgICAgICAgICAgJygyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pJyxcclxuICAgICAgICAgICAgJygyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pJCdcclxuICAgICAgICBdLmpvaW4oXCJcXFxcLlwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnZXgoYWN0dWFsRGF0YSxyZWdleEV4cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlwdjQoYWN0dWFsRGF0YTpzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVnZXhFeHAgPSBuZXcgUmVnRXhwKCdeKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVxcXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPykkJyk7XHJcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXhwLnRlc3QoYWN0dWFsRGF0YSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXB2NihhY3R1YWxEYXRhOnN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCByZWdleEV4cCA9IG5ldyBSZWdFeHAoJ14oWzAtOUEtRmEtZl17MSw0fTopezd9WzAtOUEtRmEtZl17MSw0fSQnKTtcclxuICAgICAgICByZXR1cm4gcmVnZXhFeHAudGVzdChhY3R1YWxEYXRhKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYXgoYWN0dWFsRGF0YTphbnksIG1heDpudW1iZXIpOiBib29sZWFue1xyXG4gICAgICAgIGlmKCFhY3R1YWxEYXRhKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuaW50ZWdlcihhY3R1YWxEYXRhKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWxEYXRhIDw9IG1heFxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICByZXR1cm4gKGFjdHVhbERhdGEubGVuZ3RoIDw9IG1heClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1pbihhY3R1YWxEYXRhOmFueSwgbWluOnN0cmluZyB8IG51bWJlcik6IGJvb2xlYW57XHJcbiAgICAgICAgaWYoISEhYWN0dWFsRGF0YSB8fCAhISFtaW4pIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZih0aGlzLmludGVnZXIoYWN0dWFsRGF0YSkpe1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKGFjdHVhbERhdGEpID49IE51bWJlcihtaW4pXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJldHVybiAoYWN0dWFsRGF0YS5sZW5ndGggPj0gbWluKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbm90RXF1YWxzKGFjdHVhbERhdGE6YW55LGNvbXBhcmVfdG86YW55KTogYm9vbGVhbntcclxuICAgICAgICByZXR1cm4gIXRoaXMuZXF1YWxzKGFjdHVhbERhdGEsY29tcGFyZV90byk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJhbmdlKGFjdHVhbERhdGE6IHN0cmluZywgcmFuZ2U6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVtYmVyW10pOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgW21pbiwgbWF4XSA9IHRvQXJyYXkocmFuZ2UpO1xyXG4gICAgICAgIHJldHVybiAoTnVtYmVyKG1pbikgPD0gTnVtYmVyKGFjdHVhbERhdGEpKSAmJiAoTnVtYmVyKGFjdHVhbERhdGEpIDw9IE51bWJlcihtYXgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYmV0d2VlbihhY3R1YWxEYXRhOiBzdHJpbmcsIHJhbmdlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bWJlcltdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IFttaW4sIG1heF0gPSB0b0FycmF5KHJhbmdlKTtcclxuICAgICAgICByZXR1cm4gKE51bWJlcihtaW4pIDwgTnVtYmVyKGFjdHVhbERhdGEpKSAmJiAoTnVtYmVyKGFjdHVhbERhdGEpIDwgTnVtYmVyKG1heCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1bmRlcihhY3R1YWxEYXRhOnN0cmluZywgdW5kZXI6c3RyaW5nKTogYm9vbGVhbntcclxuICAgICAgICBpZighdGhpcy5udW1iZXIoYWN0dWFsRGF0YSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gTnVtYmVyKGFjdHVhbERhdGEpIDwgTnVtYmVyKHVuZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXJsKGFjdHVhbERhdGE6c3RyaW5nKTogYm9vbGVhbntcclxuICAgICAgICBsZXQgcmVnZXhFeHAgPSBbXHJcbiAgICAgICAgICAgICdeKD86KD86aHR0cCg/OnMpP3xmdHApOi8vKSg/OlxcXFxTKyg/OjooPzpcXFxcUykqKT9AKT8oPzooPzpbYS16MC05XFx1MDBhMS1cXHVmZmZmXSg/Oi0pKiknLFxyXG4gICAgICAgICAgICAnKD86W2EtejAtOVxcdTAwYTEtXFx1ZmZmZl0pKykoPzpcXFxcLig/OlthLXowLTlcXHUwMGExLVxcdWZmZmZdKD86LSkqKScsXHJcbiAgICAgICAgICAgICcoPzpbYS16MC05XFx1MDBhMS1cXHVmZmZmXSkrKScsXHJcbiAgICAgICAgICAgICcoPzpcXFxcLig/OlthLXowLTlcXHUwMGExLVxcdWZmZmZdKXsyLH0pKD86Oig/OlxcXFxkKXsyLDV9KT8oPzovKD86XFxcXFMpKik/JCdcclxuICAgICAgICBdLmpvaW4oJyonKVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5yZWdleChhY3R1YWxEYXRhLHJlZ2V4RXhwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnZXgoYWN0dWFsRGF0YTpzdHJpbmcsIGV4cHJlc3Npb246c3RyaW5nKTogYm9vbGVhbntcclxuICAgICAgICBsZXQgcmVnZXhFeHAgPSBuZXcgUmVnRXhwKGV4cHJlc3Npb24pO1xyXG4gICAgICAgIHJldHVybiByZWdleEV4cC50ZXN0KGFjdHVhbERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBub3RSZWdleChhY3R1YWxEYXRhOnN0cmluZywgZXhwcmVzc2lvbjpzdHJpbmcpOiBib29sZWFue1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5yZWdleChhY3R1YWxEYXRhLGV4cHJlc3Npb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1dWlkKGFjdHVhbERhdGE6c3RyaW5nKTogYm9vbGVhbntcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWdleChhY3R1YWxEYXRhLCdbYS1mMC05XXs4fS1bYS1mMC05XXs0fS00W2EtZjAtOV17M30tWzg5YUFiQl1bYS1mMC05XXszfS1bYS1mMC05XXsxMn0nKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdW5pcXVlKGFyZ3M6SHR0cFJlcXVlc3RBcmdzKTogT2JzZXJ2YWJsZTxib29sZWFuPntcclxuICAgICAgICBsZXQgaHR0cCAgICA6T2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgICAgIGxldCBhY3Rpb24gICA9IGFyZ3MudXJsXHJcbiAgICAgICAgbGV0IG1ldGhvZCAgID0gYXJncy5tZXRob2QgfHwgJ0dFVCdcclxuICAgICAgICBsZXQgcmVxdWVzdCAgPSBhcmdzLnJlcXVlc3R8fCB7fVxyXG4gICAgICAgIGxldCBwYXJhbXMgICA9IGFyZ3MucGFyYW1zIHx8IHt9XHJcblxyXG4gICAgICAgIGlmKGFjdGlvbiB8fCBPYmplY3Qua2V5cyhyZXF1ZXN0KS5sZW5ndGggPT09IDApe1xyXG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2gobWV0aG9kKXtcclxuICAgICAgICAgICAgY2FzZSAnUE9TVCc6XHJcbiAgICAgICAgICAgICAgICBodHRwID0gdGhpcy5odHRwLnBvc3QoYWN0aW9uLHJlcXVlc3QscGFyYW1zKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgaHR0cCA9IHRoaXMuaHR0cC5nZXQoYWN0aW9uLHsuLi5yZXF1ZXN0LC4uLnBhcmFtc30pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGh0dHAucGlwZShtYXAoKGRhdGE6YW55KT0+IChkYXRhICYmIGRhdGEubGVuZ3RoID09PSAwKSkpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGV4aXN0cyhhcmdzOkh0dHBSZXF1ZXN0QXJncyk6IE9ic2VydmFibGU8Ym9vbGVhbj57XHJcbiAgICAgICAgbGV0IGh0dHAgICAgOk9ic2VydmFibGU8YW55PjtcclxuICAgICAgICBsZXQgYWN0aW9uICAgPSBhcmdzLnVybFxyXG4gICAgICAgIGxldCBtZXRob2QgICA9IGFyZ3MubWV0aG9kIHx8ICdHRVQnXHJcbiAgICAgICAgbGV0IHJlcXVlc3QgID0gYXJncy5yZXF1ZXN0fHwge31cclxuICAgICAgICBsZXQgcGFyYW1zICAgPSBhcmdzLnBhcmFtcyB8fCB7fVxyXG5cclxuICAgICAgICBpZighYWN0aW9uIHx8IE9iamVjdC5rZXlzKHJlcXVlc3QpLmxlbmd0aCA9PT0gMCl7XHJcbiAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaChtZXRob2Qpe1xyXG4gICAgICAgICAgICBjYXNlICdQT1NUJzpcclxuICAgICAgICAgICAgICAgIGh0dHAgPSB0aGlzLmh0dHAucG9zdChhY3Rpb24scmVxdWVzdCxwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBodHRwID0gdGhpcy5odHRwLmdldChhY3Rpb24sey4uLnJlcXVlc3QsLi4ucGFyYW1zfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaHR0cC5waXBlKG1hcCgoZGF0YTphbnkpPT4gKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwKSkpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENyZWRpdENhcmREYXRhKG51bWJlcjpzdHJpbmcpOiBhbnl7XHJcbiAgICAgICAgaWYoIW51bWJlcikgcmV0dXJuO1xyXG4gICAgICAgIG51bWJlciA9IG51bWJlci50b1N0cmluZygpO1xyXG5cclxuICAgICAgICBsZXQgY2FyZF9pc3N1ZXIgPSB0aGlzLmNyZWRpdENhcmRJc3N1ZXJzLmZpbmQoKGNhcmQ6YW55KSA9PiB0aGlzLnJlZ2V4KG51bWJlcixjYXJkLnJlZ2V4KSk7XHJcbiAgICAgICAgcmV0dXJuIHtpc3N1ZXIgOiAoY2FyZF9pc3N1ZXIgPyBjYXJkX2lzc3Vlci5uYW1lIDogbnVsbCl9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWRpdENhcmQoYWN0dWFsRGF0YTpzdHJpbmcpOiBib29sZWFue1xyXG4gICAgICAgIGxldCBjYXJkSW5mbyA9IHRoaXMuZ2V0Q3JlZGl0Q2FyZERhdGEoYWN0dWFsRGF0YSkgYXMgYW55XHJcbiAgICAgICAgcmV0dXJuIGNhcmRJbmZvID8gISFjYXJkSW5mby5pc3N1ZXIgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldERlYml0Q2FyZERhdGEobnVtYmVyOm51bWJlcik6IGFueXtcclxuICAgICAgICBpZighbnVtYmVyKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgbGV0IF9udW1iZXIgPSBudW1iZXIudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgbGV0IGNhcmRfaXNzdWVyID0gdGhpcy5kZWJpdENhcmRJc3N1ZXJzLmZpbmQoKGNhcmQ6YW55KSA9PiB0aGlzLnJlZ2V4KF9udW1iZXIsY2FyZC5yZWdleCkpO1xyXG4gICAgICAgIHJldHVybiB7aXNzdWVyIDogKGNhcmRfaXNzdWVyID8gY2FyZF9pc3N1ZXIubmFtZSA6IG51bGwpfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWJpdENhcmQoYWN0dWFsRGF0YTpudW1iZXIpe1xyXG4gICAgICAgIGxldCBjYXJkSW5mbyA9IHRoaXMuZ2V0RGViaXRDYXJkRGF0YShhY3R1YWxEYXRhKVxyXG4gICAgICAgIHJldHVybiBjYXJkSW5mbyA/ICEhY2FyZEluZm8uaXNzdWVyIDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGN2dihhY3R1YWxEYXRhOnN0cmluZyk6Ym9vbGVhbntcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWdleChhY3R1YWxEYXRhLCdeWzAtOV17Myw0fSQnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3RyZW5ndGhEYXRhKGFjdHVhbERhdGE6c3RyaW5nLCBjb21wYXJlOnN0cmluZyB8IHN0cmluZ1tdKTogYW55e1xyXG5cclxuICAgICAgICBpZighISFhY3R1YWxEYXRhKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCB0b0NvbXBhcmUgICAgICAgICA9IHRvQXJyYXkoY29tcGFyZSk7XHJcbiAgICAgICAgbGV0IGFsbG93ZWRTdHJlbmd0aCAgPSBbXSBhcyBhbnk7XHJcbiAgICAgICAgbGV0IGFjdGl2ZVN0cmVuZ3RoICAgPSBbXSBhcyBhbnk7XHJcbiAgICAgICAgbGV0IGluQWN0aXZlU3RyZW5ndGggPSBbXSBhcyBhbnk7XHJcbiAgICAgICAgbGV0IHN0cmVuZ3RoU2NvcmUgICAgPSAwICBhcyBudW1iZXI7XHJcbiAgICAgICAgbGV0IHN0cmVuZ3RoX2NvbG9yICAgPSB0aGlzLmFicy5zdHJlbmd0aENvbG9yO1xyXG4gICAgICAgIGxldCB2YWxpZFN0cmVuZ3RoICAgID0gc3RyZW5ndGhfY29sb3Jbc3RyZW5ndGhfY29sb3IubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgbGV0IGFsbG93T25NYXhTY3JvcmUgPSB0aGlzLm51bWJlcih0b0NvbXBhcmVbdG9Db21wYXJlLmxlbmd0aCAtMV0pID8gdG9Db21wYXJlW3RvQ29tcGFyZS5sZW5ndGggLTFdIDogdmFsaWRTdHJlbmd0aC5taW4gfHwgLTk5OTk7XHJcbiAgICAgICAgbGV0IHNwZWNpYWxDaGFycyAgICAgPSBcIkAlK1xcLychIyRePzouKCl7fVtdfi1fXCI7XHJcblxyXG4gICAgICAgIHZhciBsZXR0ZXJzID0gbmV3IE9iamVjdCgpIGFzIGFueTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdHVhbERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGFzc2lnblNjb3JlID0gc3BlY2lhbENoYXJzLmluY2x1ZGVzKGFjdHVhbERhdGFbaV0pID8gOC4wIDogNS4wO1xyXG4gICAgICAgICAgICBsZXR0ZXJzW2FjdHVhbERhdGFbaV1dID0gKGxldHRlcnNbYWN0dWFsRGF0YVtpXV0gfHwgMCkgKyAxO1xyXG4gICAgICAgICAgICBzdHJlbmd0aFNjb3JlICs9IGFzc2lnblNjb3JlIC8gbGV0dGVyc1thY3R1YWxEYXRhW2ldXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB2YXJpYXRpb25Db3VudCA9IDA7XHJcbiAgICAgICAgdGhpcy5zdHJpbmdTdHJlbmd0aC5mb3JFYWNoKCh2OmFueSk9PntcclxuICAgICAgICAgICAgaWYodG9Db21wYXJlLmluZGV4T2Yodi5pZCkgPj0gMCB8fCB0b0NvbXBhcmUubGVuZ3RoID09IDApe1xyXG4gICAgICAgICAgICAgICAgYWxsb3dlZFN0cmVuZ3RoLnB1c2godi5pZClcclxuICAgICAgICAgICAgICAgIGxldCBpc1ZhbGlkID0gdGhpcy5yZWdleChhY3R1YWxEYXRhLHYucmVnZXgpO1xyXG4gICAgICAgICAgICAgICAgaXNWYWxpZCA/IGFjdGl2ZVN0cmVuZ3RoLnB1c2godi5pZCkgOiBpbkFjdGl2ZVN0cmVuZ3RoLnB1c2godi5pZClcclxuICAgICAgICAgICAgICAgIHZhcmlhdGlvbkNvdW50ICs9ICBpc1ZhbGlkID8gMSA6IDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHN0cmVuZ3RoU2NvcmUgKz0gKHZhcmlhdGlvbkNvdW50IC0gMSkgKiAxMDtcclxuICAgICAgICBzdHJlbmd0aFNjb3JlID0gTWF0aC5yb3VuZChzdHJlbmd0aFNjb3JlKTtcclxuXHJcbiAgICAgICAgaWYoaW5BY3RpdmVTdHJlbmd0aC5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgc3RyZW5ndGhTY29yZSA9IChzdHJlbmd0aFNjb3JlID49IGFsbG93T25NYXhTY3JvcmUpID8gYWxsb3dPbk1heFNjcm9yZSAtIChpbkFjdGl2ZVN0cmVuZ3RoLmxlbmd0aCAqIDUpIDogc3RyZW5ndGhTY29yZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzZW5kT2JqZWN0ID0ge1xyXG4gICAgICAgICAgICBzY29yZSAgICAgICAgICAgIDpzdHJlbmd0aFNjb3JlLFxyXG4gICAgICAgICAgICBhbGxvd2VkU3RyZW5ndGggIDphbGxvd2VkU3RyZW5ndGgsXHJcbiAgICAgICAgICAgIHZhbGlkRm9yICAgICAgICAgOmFjdGl2ZVN0cmVuZ3RoLFxyXG4gICAgICAgICAgICB2YWxpZEV4Y2VwdCAgICAgIDppbkFjdGl2ZVN0cmVuZ3RoLFxyXG4gICAgICAgICAgICBhbGxvd09uTWF4U2NvcmUgIDphbGxvd09uTWF4U2Nyb3JlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHNlbmRPYmplY3Q7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0cmVuZ3RoKGFjdHVhbERhdGE6c3RyaW5nLGNvbXBhcmU6c3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFue1xyXG4gICAgICAgIGxldCBzdHJlbmd0aCA9IHRoaXMuZ2V0U3RyZW5ndGhEYXRhKGFjdHVhbERhdGEsY29tcGFyZSk7XHJcbiAgICAgICAgcmV0dXJuIChzdHJlbmd0aCAmJiBzdHJlbmd0aC5zY29yZSA+PSBzdHJlbmd0aC5hbGxvd09uTWF4U2NvcmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwaG9uZU5vKGFjdHVhbERhdGE6c3RyaW5nLGV4cHJlc3Npb246c3RyaW5nIHwgbnVsbCA9IG51bGwpOiBib29sZWFue1xyXG4gICAgICAgIGxldCByZWdleDphbnkgPSAvXFxzKig/OlxcKz8oXFxkezEsM30pKT9bXFxXXFxEXFxzXV58KCkqKFxcZFtcXFdcXERcXHNdKj9cXGRbXFxEXFxXXFxzXSo/XFxkKVtcXFdcXERcXHNdKihcXGRbXFxXXFxEXFxzXSo/XFxkW1xcRFxcV1xcc10qP1xcZClbXFxXXFxEXFxzXSooXFxkW1xcV1xcRFxcc10qP1xcZFtcXERcXFdcXHNdKj9cXGRbXFxXXFxEXFxzXSo/XFxkKSg/OiAqeChcXGQrKSk/XFxzKiQvZztcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWdleChhY3R1YWxEYXRhLCBleHByZXNzaW9uIHx8IHJlZ2V4KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW1hZ2UoZmlsZUluc3RhbmNlOkZpbGVbXSk6IGJvb2xlYW57XHJcbiAgICAgICAgaWYoISEhZmlsZUluc3RhbmNlIHx8IGZpbGVJbnN0YW5jZS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICBsZXQgZmlsZSA9IGZpbGVJbnN0YW5jZVswXSBhcyBGaWxlO1xyXG4gICAgICAgIHJldHVybiBmaWxlLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZpZGVvKGZpbGVJbnN0YW5jZTpGaWxlW10pOiBib29sZWFue1xyXG4gICAgICAgIGlmKCEhIWZpbGVJbnN0YW5jZSB8fCBmaWxlSW5zdGFuY2UubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBmaWxlID0gZmlsZUluc3RhbmNlWzBdIGFzIEZpbGU7XHJcbiAgICAgICAgcmV0dXJuIGZpbGUudHlwZS5zdGFydHNXaXRoKCd2aWRlby8nKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbWltZXMoZmlsZUluc3RhbmNlOkZpbGVbXSxjb21wYXJlOnN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbntcclxuICAgICAgICBpZighISFmaWxlSW5zdGFuY2UgfHwgZmlsZUluc3RhbmNlLmxlbmd0aCA9PT0gMCB8fCAhISFjb21wYXJlKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBmaWxlICAgICAgICA9IGZpbGVJbnN0YW5jZVswXTtcclxuICAgICAgICBsZXQgZXh0ICAgICAgICAgPSBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKTtcclxuICAgICAgICBsZXQgYWNjZXB0VHlwZSAgPSB0b0FycmF5KGNvbXBhcmUpO1xyXG4gICAgICAgIGxldCBoYXNNaW1lICAgICA9IGFjY2VwdFR5cGUuaW5jbHVkZXMoZXh0KTtcclxuICAgICAgICByZXR1cm4gISFoYXNNaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaXplKGZpbGVJbnN0YW5jZTpGaWxlW10sY29tcGFyZTpudW1iZXIpOiBib29sZWFue1xyXG4gICAgICAgIGlmKCEhIWZpbGVJbnN0YW5jZSB8fCBmaWxlSW5zdGFuY2UubGVuZ3RoID09IDAgfHwgISEhY29tcGFyZSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgZmlsZSA9IGZpbGVJbnN0YW5jZVswXTtcclxuICAgICAgICByZXR1cm4gZmlsZS5zaXplIDw9IGNvbXBhcmUgKiAxMDI0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkaW1lbnNpb24oZmlsZUluc3RhbmNlOkZpbGVbXSwgY29tcGFyZTpzdHJpbmcgfCBzdHJpbmdbXSk6IE9ic2VydmFibGU8YW55PntcclxuICAgICAgICBpZighISFmaWxlSW5zdGFuY2UgfHwgZmlsZUluc3RhbmNlLmxlbmd0aCA9PSAwIHx8IGNvbXBhcmUubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG5cclxuICAgICAgICBsZXQgZmlsZSAgICAgICAgPSBmaWxlSW5zdGFuY2VbMF07XHJcbiAgICAgICAgbGV0IHR5cGUgICAgICAgID0gZmlsZS50eXBlO1xyXG5cclxuICAgICAgICBpZighdHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSlcclxuICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuXHJcbiAgICAgICAgbGV0IGRpbWVuc2lvbiAgID0gdG9BcnJheShjb21wYXJlKTtcclxuICAgICAgICBsZXQgaW1hZ2UgICAgICAgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICBsZXQgaGVpZ2h0ICAgICAgPSAwO1xyXG4gICAgICAgIGxldCB3aWR0aCAgICAgICA9IDA7XHJcbiAgICAgICAgbGV0IHJhdGlvICAgICAgID0gMDtcclxuICAgICAgICBsZXQgaGVpZ2h0TWF0Y2ggPSAnZXF1YWwnO1xyXG4gICAgICAgIGxldCB3aWR0aE1hdGNoICA9ICdlcXVhbCc7XHJcblxyXG4gICAgICAgIC8vbWF4X2hlaWdodD0yMDAgfCBtYXhfaGVpZ2h0PTIwMCB8IGhlaWdodCA9IDIwMFxyXG4gICAgICAgIC8vbWluX3dpZHRoPTIwMCAgfCBtaW5fd2lkdGg9MjAwICB8IHdpZHRoID0gMjAwXHJcbiAgICAgICAgLy9yYXRpbz0xLjJcclxuXHJcbiAgICAgICAgZGltZW5zaW9uLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgICAgICBpZihlbC5pbmNsdWRlcygnX2hlaWdodD0nKSB8fCBlbC5zdGFydHNXaXRoKCdoZWlnaHQ9Jykpe1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICAgICAgPSBwYXJzZUludChlbC5zcGxpdCgnPScpWzFdIHx8IDApXHJcbiAgICAgICAgICAgICAgICBoZWlnaHRNYXRjaCA9IFsnbWF4JywnbWluJ10uaW5jbHVkZXMoKGVsLnNwbGl0KCc9JylbMF0pLnNwbGl0KCdfJylbMF0pICA/ICAoZWwuc3BsaXQoJz0nKVswXSkuc3BsaXQoJ18nKVswXSA6ICdlcXVhbCdcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoZWwuaW5jbHVkZXMoJ193aWR0aD0nKSB8fCBlbC5zdGFydHNXaXRoKCd3aWR0aD0nKSl7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCAgICAgICA9IHBhcnNlSW50KGVsLnNwbGl0KCc9JylbMV0gfHwgMCApXHJcbiAgICAgICAgICAgICAgICB3aWR0aE1hdGNoICA9IFsnbWF4JywnbWluJ10uaW5jbHVkZXMoKGVsLnNwbGl0KCc9JylbMF0pLnNwbGl0KCdfJylbMF0pICA/ICAoZWwuc3BsaXQoJz0nKVswXSkuc3BsaXQoJ18nKVswXSA6ICdlcXVhbCdcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoZWwuaW5jbHVkZXMoJ3JhdGlvPScpKXtcclxuICAgICAgICAgICAgICAgIHJhdGlvID0gcGFyc2VGbG9hdChlbC5zcGxpdCgnPScpWzFdKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGltYWdlLnNyYyA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnJvbShuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PntcclxuICAgICAgICAgICAgaW1hZ2Uub25sb2FkID0gKCkgPT57XHJcbiAgICAgICAgICAgICAgICBsZXQgaXNWYWxpZCA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICBpZihyYXRpbyl7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9ICgoaW1hZ2Uud2lkdGgvaW1hZ2UuaGVpZ2h0KS50b0ZpeGVkKDEpID09PSByYXRpby50b0ZpeGVkKDEpKTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpc1ZhbGlkV2lkdGggID0gd2lkdGggID8gdGhpcy5kb0NvbXBhcmlzb24oaW1hZ2Uud2lkdGgsd2lkdGgsd2lkdGhNYXRjaCkgOiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpc1ZhbGlkSGVpZ2h0ID0gaGVpZ2h0ID8gdGhpcy5kb0NvbXBhcmlzb24oaW1hZ2UuaGVpZ2h0LGhlaWdodCxoZWlnaHRNYXRjaCkgOiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSAoaXNWYWxpZFdpZHRoICYmIGlzVmFsaWRIZWlnaHQpIGFzIGJvb2xlYW5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc29sdmUoaXNWYWxpZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgZG9Db21wYXJpc29uKG1hdGNoV2l0aDogbnVtYmVyLCBtYXRjaFRvOiBudW1iZXIsIG9wZXJhdG9yID0gJ2VxdWFsJyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBjb21wYXJlU3RhdGUgPSBmYWxzZTtcclxuICAgICAgICBpZiAob3BlcmF0b3IgPT0gJ2VxdWFsJykgeyBjb21wYXJlU3RhdGUgPSBtYXRjaFdpdGggPT0gbWF0Y2hUbyB9XHJcbiAgICAgICAgaWYgKG9wZXJhdG9yID09ICdtaW4nKSB7IGNvbXBhcmVTdGF0ZSA9IG1hdGNoV2l0aCA+PSBtYXRjaFRvIH1cclxuICAgICAgICBpZiAob3BlcmF0b3IgPT0gJ21heCcpIHsgY29tcGFyZVN0YXRlID0gbWF0Y2hXaXRoIDw9IG1hdGNoVG8gfVxyXG4gICAgICAgIHJldHVybiBjb21wYXJlU3RhdGU7XHJcbiAgICB9XHJcbn1cclxuIl19