tnx-shared 5.3.162 → 5.3.164

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 (62) hide show
  1. package/app-context/component-context.service.d.ts +0 -4
  2. package/app-context/component-context.service.d.ts.map +1 -1
  3. package/bundles/tnx-shared.umd.js +954 -512
  4. package/bundles/tnx-shared.umd.js.map +1 -1
  5. package/bundles/tnx-shared.umd.min.js +1 -1
  6. package/bundles/tnx-shared.umd.min.js.map +1 -1
  7. package/classes/base/component-base.d.ts.map +1 -1
  8. package/classes/base/i-list-component.d.ts +3 -0
  9. package/classes/base/i-list-component.d.ts.map +1 -1
  10. package/classes/base/list-base.d.ts +5 -2
  11. package/classes/base/list-base.d.ts.map +1 -1
  12. package/classes/base/list-component-base.d.ts +21 -5
  13. package/classes/base/list-component-base.d.ts.map +1 -1
  14. package/classes/form-schema.d.ts +10 -0
  15. package/classes/form-schema.d.ts.map +1 -1
  16. package/components/report-queue/report-queue.component.d.ts.map +1 -1
  17. package/components/settings/settings-authorize-button/settings-authorize-button.component.d.ts +20 -0
  18. package/components/settings/settings-authorize-button/settings-authorize-button.component.d.ts.map +1 -0
  19. package/components/settings/settings-authorize-button/settings-authorize-button.component.ngfactory.d.ts.map +1 -0
  20. package/components/settings/settings-authorize-button/settings-authorize-button.component.scss.shim.ngstyle.d.ts.map +1 -0
  21. package/configs/component-context.constant.d.ts +8 -0
  22. package/configs/component-context.constant.d.ts.map +1 -1
  23. package/const/common.d.ts +2 -2
  24. package/const/common.d.ts.map +1 -1
  25. package/directives/authorize.directive.d.ts +8 -3
  26. package/directives/authorize.directive.d.ts.map +1 -1
  27. package/enums/common.d.ts +16 -0
  28. package/enums/common.d.ts.map +1 -1
  29. package/esm2015/app-context/component-context.service.js +4 -6
  30. package/esm2015/classes/base/component-base.js +5 -1
  31. package/esm2015/classes/base/i-list-component.js +1 -1
  32. package/esm2015/classes/base/list-base.js +20 -6
  33. package/esm2015/classes/base/list-component-base.js +121 -11
  34. package/esm2015/classes/form-schema.js +12 -1
  35. package/esm2015/components/crud/crud-list/crud-list.component.js +2 -2
  36. package/esm2015/components/report-queue/report-queue.component.js +1 -1
  37. package/esm2015/components/settings/settings-authorize-button/settings-authorize-button.component.js +142 -0
  38. package/esm2015/configs/component-context.constant.js +10 -2
  39. package/esm2015/const/common.js +5 -5
  40. package/esm2015/directives/authorize.directive.js +37 -6
  41. package/esm2015/enums/common.js +19 -1
  42. package/esm2015/services/authen.service.js +3 -1
  43. package/esm2015/services/basepermission.service.js +28 -0
  44. package/esm2015/services/common.service.js +1 -1
  45. package/esm2015/services/module-config.service.js +12 -2
  46. package/esm2015/tnx-shared.js +4 -2
  47. package/esm2015/tnx-shared.module.js +3 -1
  48. package/fesm2015/tnx-shared.js +630 -269
  49. package/fesm2015/tnx-shared.js.map +1 -1
  50. package/package.json +2 -2
  51. package/services/authen.service.d.ts.map +1 -1
  52. package/services/basepermission.service.d.ts +11 -0
  53. package/services/basepermission.service.d.ts.map +1 -0
  54. package/services/basepermission.service.ngfactory.d.ts.map +1 -0
  55. package/services/common.service.d.ts.map +1 -1
  56. package/services/module-config.service.d.ts.map +1 -1
  57. package/tnx-shared.d.ts +3 -1
  58. package/tnx-shared.d.ts.map +1 -1
  59. package/tnx-shared.metadata.json +1 -1
  60. package/tnx-shared.module.d.ts +2 -1
  61. package/tnx-shared.module.d.ts.map +1 -1
  62. package/tnx-shared.module.ngfactory.d.ts.map +1 -1
@@ -1,6 +1,8 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { ReplaySubject, Subject } from 'rxjs';
3
3
  import { takeUntil } from 'rxjs/operators';
4
+ // import { ExportJob } from '../components/report-queue/base-job/job-item';
5
+ // import { ReportQueueComponent } from '../components/report-queue/report-queue.component';
4
6
  import { ComCtxConstants } from '../configs/component-context.constant';
5
7
  import { CommonService } from '../services/common.service';
6
8
  import * as i0 from "@angular/core";
@@ -9,6 +11,7 @@ export class ComponentContextService {
9
11
  constructor(_commonService) {
10
12
  this._commonService = _commonService;
11
13
  this.data = {};
14
+ // reportQueue: ReportQueueComponent;
12
15
  this._unSubscribeAll = new Subject();
13
16
  this.promises = {};
14
17
  this.subjects = {};
@@ -218,11 +221,6 @@ export class ComponentContextService {
218
221
  this.data = {};
219
222
  this.root.fireEvent(ComCtxConstants.ROOT.DESTROY_COMPONENT, this);
220
223
  }
221
- addExportJob(job) {
222
- if (this.root.reportQueue) {
223
- this.root.reportQueue.addJob(job);
224
- }
225
- }
226
224
  }
227
225
  ComponentContextService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ComponentContextService_Factory() { return new ComponentContextService(i0.ɵɵinject(i1.CommonService)); }, token: ComponentContextService, providedIn: "root" });
228
226
  ComponentContextService.decorators = [
@@ -233,4 +231,4 @@ ComponentContextService.decorators = [
233
231
  ComponentContextService.ctorParameters = () => [
234
232
  { type: CommonService }
235
233
  ];
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWNvbnRleHQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQUszRCxNQUFNLE9BQU8sdUJBQXVCO0lBZ0JoQyxZQUNZLGNBQTZCO1FBQTdCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBWHpDLFNBQUksR0FBUSxFQUFFLENBQUM7UUFHZixvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDckMsYUFBUSxHQUFzQyxFQUFFLENBQUM7UUFDakQsYUFBUSxHQUFzQyxFQUFFLENBQUM7UUFDakQsbUJBQWMsR0FBNEMsRUFBRSxDQUFDO0lBUTdELENBQUM7SUFFTyxVQUFVLENBQUMsSUFBWSxFQUFFLE9BQXNCO1FBQ25ELE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFO1lBQ3RELElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ1YsT0FBTyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7YUFDaEM7WUFDRCxJQUFJ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QUM7SUFFRCxlQUFlLENBQUMsR0FBRyxFQUFFLE9BQWUsRUFBRSxJQUFTO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELGNBQWM7UUFDVixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3QjtRQUVELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbkM7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQWM7UUFDdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDckM7SUFDTCxDQUFDOzs7O1lBN1FKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBSlEsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRXhwb3J0Sm9iIH0gZnJvbSAnLi4vY29tcG9uZW50cy9yZXBvcnQtcXVldWUvYmFzZS1qb2Ivam9iLWl0ZW0nO1xuaW1wb3J0IHsgUmVwb3J0UXVldWVDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3JlcG9ydC1xdWV1ZS9yZXBvcnQtcXVldWUuY29tcG9uZW50JztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9iYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSkgXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50Q29udGV4dFNlcnZpY2Uge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHBhdGhUb1Jvb3Q6IHN0cmluZztcbiAgICBwYXJlbnQ6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlO1xuICAgIHJvb3Q6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlO1xuICAgIGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZTtcbiAgICBkYXRhID0gPGFueT57fTtcbiAgICByZXBvcnRRdWV1ZTogUmVwb3J0UXVldWVDb21wb25lbnQ7XG5cbiAgICBfdW5TdWJzY3JpYmVBbGwgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgcHJvbWlzZXM6IHsgW25hbWU6IHN0cmluZ106IFByb21pc2U8YW55PjsgfSA9IHt9O1xuICAgIHN1YmplY3RzOiB7IFtuYW1lOiBzdHJpbmddOiBTdWJqZWN0PGFueT47IH0gPSB7fTtcbiAgICByZXBsYXlTdWJqZWN0czogeyBbbmFtZTogc3RyaW5nXTogUmVwbGF5U3ViamVjdDxhbnk+OyB9ID0ge307XG5cbiAgICBzdWI6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlXG4gICAgKSB7XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFN1YmplY3QobmFtZTogc3RyaW5nLCBzdWJqZWN0PzogU3ViamVjdDxhbnk+KTogU3ViamVjdDxhbnk+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7dGhpcy5rZXl9LiR7bmFtZX1gO1xuICAgICAgICBpZiAoIXRoaXMuc3ViamVjdHNba2V5XSB8fCAhdGhpcy5zdWJqZWN0c1trZXldLm9ic2VydmVycykge1xuICAgICAgICAgICAgaWYgKCFzdWJqZWN0KSB7XG4gICAgICAgICAgICAgICAgc3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3ViamVjdHNba2V5XSA9IHN1YmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zdWJqZWN0c1trZXldO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkUmVwbGF5U3ViamVjdChuYW1lOiBzdHJpbmcsIHN1YmplY3Q/OiBSZXBsYXlTdWJqZWN0PGFueT4pOiBSZXBsYXlTdWJqZWN0PGFueT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBgJHt0aGlzLmtleX0uJHtuYW1lfWA7XG4gICAgICAgIGlmICghdGhpcy5yZXBsYXlTdWJqZWN0c1trZXldIHx8ICF0aGlzLnJlcGxheVN1YmplY3RzW2tleV0ub2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICBpZiAoIXN1YmplY3QpIHtcbiAgICAgICAgICAgICAgICBzdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8YW55PigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZXBsYXlTdWJqZWN0c1trZXldID0gc3ViamVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnJlcGxheVN1YmplY3RzW2tleV07XG4gICAgfVxuXG4gICAgZmlyZUV2ZW50Rm9yV2FpdChuYW1lOiBzdHJpbmcsIGRhdGE/OiBhbnksIGNhbmNlbEJ1YmJsZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLmFkZFN1YmplY3QobmFtZSk7XG4gICAgICAgIHN1YmplY3QubmV4dChkYXRhKTtcbiAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH1cblxuXG4gICAgZmlyZUV2ZW50KG5hbWU6IHN0cmluZywgZGF0YT86IGFueSwgY2FuY2VsQnViYmxlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgc3ViamVjdCA9IHRoaXMuYWRkU3ViamVjdChuYW1lKTtcbiAgICAgICAgc3ViamVjdC5uZXh0KGRhdGEpO1xuICAgICAgICBpZiAoIWNhbmNlbEJ1YmJsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50ICE9PSB0aGlzLnJvb3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5maXJlRXZlbnQobmFtZSwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghdGhpcy5wYXJlbnQgJiYgdGhpcy5yb290ICYmIHRoaXMgIT09IHRoaXMucm9vdCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm9vdC5maXJlRXZlbnQobmFtZSwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmaXJlUmVwbGF5RXZlbnQobmFtZTogc3RyaW5nLCBkYXRhPzogYW55LCBjYW5jZWxCdWJibGU6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5hZGRSZXBsYXlTdWJqZWN0KG5hbWUpO1xuICAgICAgICBzdWJqZWN0Lm5leHQoZGF0YSk7XG4gICAgICAgIGlmICghY2FuY2VsQnViYmxlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQgIT09IHRoaXMucm9vdCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LmZpcmVSZXBsYXlFdmVudChuYW1lLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLnBhcmVudCAmJiB0aGlzLnJvb3QgJiYgdGhpcyAhPT0gdGhpcy5yb290KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb290LmZpcmVSZXBsYXlFdmVudChuYW1lLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBsZXRlRXZlbnQobmFtZSkge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5hZGRTdWJqZWN0KG5hbWUpO1xuICAgICAgICBzdWJqZWN0Lm5leHQoMSk7XG4gICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBjb21wbGV0ZVJlcGxheUV2ZW50KG5hbWUpIHtcbiAgICAgICAgY29uc3Qgc3ViamVjdCA9IHRoaXMuYWRkUmVwbGF5U3ViamVjdChuYW1lKTtcbiAgICAgICAgc3ViamVjdC5uZXh0KDEpO1xuICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wbGV0ZVN1YmplY3QobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGAke3RoaXMua2V5fS4ke25hbWV9YDtcbiAgICAgICAgaWYgKHRoaXMuc3ViamVjdHNba2V5XSkge1xuICAgICAgICAgICAgdGhpcy5zdWJqZWN0c1trZXldLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zdWJqZWN0c1trZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wbGV0ZVJlcGxheVN1YmplY3QobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGAke3RoaXMua2V5fS4ke25hbWV9YDtcbiAgICAgICAgaWYgKHRoaXMucmVwbGF5U3ViamVjdHNba2V5XSkge1xuICAgICAgICAgICAgdGhpcy5yZXBsYXlTdWJqZWN0c1trZXldLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5yZXBsYXlTdWJqZWN0c1trZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdWJqZWN0KG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBrZXkgPSBgJHt0aGlzLmtleX0uJHtuYW1lfWA7XG5cbiAgICAgICAgaWYgKCF0aGlzLnN1YmplY3RzW2tleV0gfHwgIXRoaXMuc3ViamVjdHNba2V5XS5vYnNlcnZlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuc3ViamVjdHNba2V5XSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnN1YmplY3RzW2tleV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVTdWJqZWN0KG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBrZXkgPSBgJHt0aGlzLmtleX0uJHtuYW1lfWA7XG5cbiAgICAgICAgaWYgKHRoaXMuc3ViamVjdHNba2V5XSkge1xuICAgICAgICAgICAgdGhpcy5zdWJqZWN0c1trZXldLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlcGxheVN1YmplY3QobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGAke3RoaXMua2V5fS4ke25hbWV9YDtcblxuICAgICAgICBpZiAoIXRoaXMucmVwbGF5U3ViamVjdHNba2V5XSB8fCAhdGhpcy5yZXBsYXlTdWJqZWN0c1trZXldLm9ic2VydmVycykge1xuICAgICAgICAgICAgdGhpcy5yZXBsYXlTdWJqZWN0c1trZXldID0gbmV3IFJlcGxheVN1YmplY3Q8YW55PigpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmVwbGF5U3ViamVjdHNba2V5XTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVJlcGxheVN1YmplY3QobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGAke3RoaXMua2V5fS4ke25hbWV9YDtcblxuICAgICAgICBpZiAodGhpcy5yZXBsYXlTdWJqZWN0c1trZXldKSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxheVN1YmplY3RzW2tleV0udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlcGxheVN1YnNjcmliZShuYW1lOiBzdHJpbmcsIGNhbGxCYWNrOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVwbGF5U3ViamVjdChuYW1lKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3VuU3Vic2NyaWJlQWxsKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJzKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbEJhY2socnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCB7fTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlcGxheVN1YnNjcmliZU9uY2UobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XG4gICAgICAgIHRoaXMuc3ViID0gdGhpcy5nZXRSZXBsYXlTdWJqZWN0KG5hbWUpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5TdWJzY3JpYmVBbGwpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocnMpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsQmFjayhycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIHt9O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN1Yikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5zdWI7XG4gICAgfVxuXG4gICAgd2FpdChuYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdWJqZWN0KG5hbWUpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5TdWJzY3JpYmVBbGwpKTtcbiAgICB9XG5cbiAgICBzdWJzY3JpYmUobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN1YmplY3QobmFtZSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl91blN1YnNjcmliZUFsbCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChycykgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxCYWNrKHJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2gge307XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdWJzY3JpYmVPbmNlKG5hbWU6IHN0cmluZywgY2FsbEJhY2s6IGFueSkge1xuICAgICAgICB0aGlzLnN1YiA9IHRoaXMuZ2V0U3ViamVjdChuYW1lKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3VuU3Vic2NyaWJlQWxsKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJzKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbEJhY2socnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCB7fTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViO1xuICAgIH1cblxuICAgIHVuU3Vic2NyaWJlKG5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5zdWJqZWN0c1tgJHt0aGlzLmtleX0uJHtuYW1lfWBdKSB7XG4gICAgICAgICAgICB0aGlzLnN1YmplY3RzW2Ake3RoaXMua2V5fS4ke25hbWV9YF0udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN1YmplY3RzW2Ake3RoaXMua2V5fS4ke25hbWV9YF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1blN1YnNjcmlibGVSZXBsYXkobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnJlcGxheVN1YmplY3RzW2Ake3RoaXMua2V5fS4ke25hbWV9YF0pIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGF5U3ViamVjdHNbYCR7dGhpcy5rZXl9LiR7bmFtZX1gXS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVwbGF5U3ViamVjdHNbYCR7dGhpcy5rZXl9LiR7bmFtZX1gXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFJvb3REYXRhKGtleVBhdGg/OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZUlmTnVsbD86IGFueSk6IGFueSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3QgfHwgdGhpcztcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YUludGVybmFsKHJvb3QuZGF0YSwga2V5UGF0aCwgZGVmYXVsdFZhbHVlSWZOdWxsKTtcbiAgICB9XG5cbiAgICBnZXREYXRhKGtleVBhdGg6IHN0cmluZywgZGVmYXVsdFZhbHVlSWZOdWxsPzogYW55KTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YUludGVybmFsKHRoaXMuZGF0YSwga2V5UGF0aCwgZGVmYXVsdFZhbHVlSWZOdWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGFJbnRlcm5hbChvYmosIGtleVBhdGg6IHN0cmluZywgZGVmYXVsdFZhbHVlSWZOdWxsPzogYW55KTogYW55IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ2V0VmFsdWVCeVBhdGgob2JqLCBrZXlQYXRoKTtcblxuICAgICAgICBpZiAoZGVmYXVsdFZhbHVlSWZOdWxsICYmICFkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLnNldFZhbHVlQnlQYXRoKG9iaiwga2V5UGF0aCwgZGVmYXVsdFZhbHVlSWZOdWxsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY29tbW9uU2VydmljZS5nZXRWYWx1ZUJ5UGF0aChvYmosIGtleVBhdGgpO1xuICAgIH1cblxuICAgIHNldFJvb3REYXRhKGtleVBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICBjb25zdCByb290ID0gdGhpcy5yb290IHx8IHRoaXM7XG4gICAgICAgIHJldHVybiB0aGlzLnNldERhdGFJbnRlcm5hbChyb290LmRhdGEsIGtleVBhdGgsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBzZXREYXRhKGtleVBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXREYXRhSW50ZXJuYWwodGhpcy5kYXRhLCBrZXlQYXRoLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0RGF0YUludGVybmFsKG9iaiwga2V5UGF0aDogc3RyaW5nLCBkYXRhOiBhbnkpOiBhbnkge1xuICAgICAgICBjb25zdCByb290ID0gdGhpcy5yb290IHx8IHRoaXM7XG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2Uuc2V0VmFsdWVCeVBhdGgob2JqLCBrZXlQYXRoLCBkYXRhKTtcbiAgICB9XG5cbiAgICBkZXN0cm95Q29udGV4dCgpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5zdWJqZWN0cykge1xuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZVN1YmplY3Qoa2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucmVwbGF5U3ViamVjdHMpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVSZXBsYXlTdWJqZWN0KGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91blN1YnNjcmliZUFsbC5uZXh0KDEpO1xuICAgICAgICB0aGlzLl91blN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xuXG4gICAgICAgIHRoaXMuZGF0YSA9IHt9O1xuICAgICAgICB0aGlzLnJvb3QuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULkRFU1RST1lfQ09NUE9ORU5ULCB0aGlzKTtcbiAgICB9XG5cbiAgICBhZGRFeHBvcnRKb2Ioam9iOiBFeHBvcnRKb2IpIHtcbiAgICAgICAgaWYgKHRoaXMucm9vdC5yZXBvcnRRdWV1ZSkge1xuICAgICAgICAgICAgdGhpcy5yb290LnJlcG9ydFF1ZXVlLmFkZEpvYihqb2IpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWNvbnRleHQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLDRFQUE0RTtBQUM1RSw0RkFBNEY7QUFDNUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBSzNELE1BQU0sT0FBTyx1QkFBdUI7SUFnQmhDLFlBQ1ksY0FBNkI7UUFBN0IsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFYekMsU0FBSSxHQUFRLEVBQUUsQ0FBQztRQUNmLHFDQUFxQztRQUVyQyxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDckMsYUFBUSxHQUFzQyxFQUFFLENBQUM7UUFDakQsYUFBUSxHQUFzQyxFQUFFLENBQUM7UUFDakQsbUJBQWMsR0FBNEMsRUFBRSxDQUFDO0lBUTdELENBQUM7SUFFTyxVQUFVLENBQUMsSUFBWSxFQUFFLE9BQXNCO1FBQ25ELE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFO1lBQ3RELElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ1YsT0FBTyxH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LEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxlQUFlLENBQUMsR0FBRyxFQUFFLE9BQWUsRUFBRSxJQUFTO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELGNBQWM7UUFDVixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3QjtRQUVELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbkM7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RSxDQUFDOzs7O1lBdlFKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBSlEsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbi8vIGltcG9ydCB7IEV4cG9ydEpvYiB9IGZyb20gJy4uL2NvbXBvbmVudHMvcmVwb3J0LXF1ZXVlL2Jhc2Utam9iL2pvYi1pdGVtJztcbi8vIGltcG9ydCB7IFJlcG9ydFF1ZXVlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9yZXBvcnQtcXVldWUvcmVwb3J0LXF1ZXVlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pIFxuZXhwb3J0IGNsYXNzIENvbXBvbmVudENvbnRleHRTZXJ2aWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICBwYXRoVG9Sb290OiBzdHJpbmc7XG4gICAgcGFyZW50OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcbiAgICByb290OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcbiAgICBiYXNlU2VydmljZTogQmFzZVNlcnZpY2U7XG4gICAgZGF0YSA9IDxhbnk+e307XG4gICAgLy8gcmVwb3J0UXVldWU6IFJlcG9ydFF1ZXVlQ29tcG9uZW50O1xuXG4gICAgX3VuU3Vic2NyaWJlQWxsID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHByb21pc2VzOiB7IFtuYW1lOiBzdHJpbmddOiBQcm9taXNlPGFueT47IH0gPSB7fTtcbiAgICBzdWJqZWN0czogeyBbbmFtZTogc3RyaW5nXTogU3ViamVjdDxhbnk+OyB9ID0ge307XG4gICAgcmVwbGF5U3ViamVjdHM6IHsgW25hbWU6IHN0cmluZ106IFJlcGxheVN1YmplY3Q8YW55PjsgfSA9IHt9O1xuXG4gICAgc3ViOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZVxuICAgICkge1xuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRTdWJqZWN0KG5hbWU6IHN0cmluZywgc3ViamVjdD86IFN1YmplY3Q8YW55Pik6IFN1YmplY3Q8YW55PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IGAke3RoaXMua2V5fS4ke25hbWV9YDtcbiAgICAgICAgaWYgKCF0aGlzLnN1YmplY3RzW2tleV0gfHwgIXRoaXMuc3ViamVjdHNba2V5XS5vYnNlcnZlcnMpIHtcbiAgICAgICAgICAgIGlmICghc3ViamVjdCkge1xuICAgICAgICAgICAgICAgIHN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN1YmplY3RzW2tleV0gPSBzdWJqZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViamVjdHNba2V5XTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFJlcGxheVN1YmplY3QobmFtZTogc3RyaW5nLCBzdWJqZWN0PzogUmVwbGF5U3ViamVjdDxhbnk+KTogUmVwbGF5U3ViamVjdDxhbnk+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7dGhpcy5rZXl9LiR7bmFtZX1gO1xuICAgICAgICBpZiAoIXRoaXMucmVwbGF5U3ViamVjdHNba2V5XSB8fCAhdGhpcy5yZXBsYXlTdWJqZWN0c1trZXldLm9ic2VydmVycykge1xuICAgICAgICAgICAgaWYgKCFzdWJqZWN0KSB7XG4gICAgICAgICAgICAgICAgc3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGFueT4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVwbGF5U3ViamVjdHNba2V5XSA9IHN1YmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5yZXBsYXlTdWJqZWN0c1trZXldO1xuICAgIH1cblxuICAgIGZpcmVFdmVudEZvcldhaXQobmFtZTogc3RyaW5nLCBkYXRhPzogYW55LCBjYW5jZWxCdWJibGU6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5hZGRTdWJqZWN0KG5hbWUpO1xuICAgICAgICBzdWJqZWN0Lm5leHQoZGF0YSk7XG4gICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICB9XG5cblxuICAgIGZpcmVFdmVudChuYW1lOiBzdHJpbmcsIGRhdGE/OiBhbnksIGNhbmNlbEJ1YmJsZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLmFkZFN1YmplY3QobmFtZSk7XG4gICAgICAgIHN1YmplY3QubmV4dChkYXRhKTtcbiAgICAgICAgaWYgKCFjYW5jZWxCdWJibGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudCAhPT0gdGhpcy5yb290KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuZmlyZUV2ZW50KG5hbWUsIGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMucGFyZW50ICYmIHRoaXMucm9vdCAmJiB0aGlzICE9PSB0aGlzLnJvb3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3QuZmlyZUV2ZW50KG5hbWUsIGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmlyZVJlcGxheUV2ZW50KG5hbWU6IHN0cmluZywgZGF0YT86IGFueSwgY2FuY2VsQnViYmxlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgc3ViamVjdCA9IHRoaXMuYWRkUmVwbGF5U3ViamVjdChuYW1lKTtcbiAgICAgICAgc3ViamVjdC5uZXh0KGRhdGEpO1xuICAgICAgICBpZiAoIWNhbmNlbEJ1YmJsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50ICE9PSB0aGlzLnJvb3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5maXJlUmVwbGF5RXZlbnQobmFtZSwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghdGhpcy5wYXJlbnQgJiYgdGhpcy5yb290ICYmIHRoaXMgIT09IHRoaXMucm9vdCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm9vdC5maXJlUmVwbGF5RXZlbnQobmFtZSwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wbGV0ZUV2ZW50KG5hbWUpIHtcbiAgICAgICAgY29uc3Qgc3ViamVjdCA9IHRoaXMuYWRkU3ViamVjdChuYW1lKTtcbiAgICAgICAgc3ViamVjdC5uZXh0KDEpO1xuICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgY29tcGxldGVSZXBsYXlFdmVudChuYW1lKSB7XG4gICAgICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLmFkZFJlcGxheVN1YmplY3QobmFtZSk7XG4gICAgICAgIHN1YmplY3QubmV4dCgxKTtcbiAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcGxldGVTdWJqZWN0KG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBrZXkgPSBgJHt0aGlzLmtleX0uJHtuYW1lfWA7XG4gICAgICAgIGlmICh0aGlzLnN1YmplY3RzW2tleV0pIHtcbiAgICAgICAgICAgIHRoaXMuc3ViamVjdHNba2V5XS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3ViamVjdHNba2V5XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY29tcGxldGVSZXBsYXlTdWJqZWN0KG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBrZXkgPSBgJHt0aGlzLmtleX0uJHtuYW1lfWA7XG4gICAgICAgIGlmICh0aGlzLnJlcGxheVN1YmplY3RzW2tleV0pIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGF5U3ViamVjdHNba2V5XS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVwbGF5U3ViamVjdHNba2V5XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3ViamVjdChuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7dGhpcy5rZXl9LiR7bmFtZX1gO1xuXG4gICAgICAgIGlmICghdGhpcy5zdWJqZWN0c1trZXldIHx8ICF0aGlzLnN1YmplY3RzW2tleV0ub2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICB0aGlzLnN1YmplY3RzW2tleV0gPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zdWJqZWN0c1trZXldO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlU3ViamVjdChuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7dGhpcy5rZXl9LiR7bmFtZX1gO1xuXG4gICAgICAgIGlmICh0aGlzLnN1YmplY3RzW2tleV0pIHtcbiAgICAgICAgICAgIHRoaXMuc3ViamVjdHNba2V5XS51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSZXBsYXlTdWJqZWN0KG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBrZXkgPSBgJHt0aGlzLmtleX0uJHtuYW1lfWA7XG5cbiAgICAgICAgaWYgKCF0aGlzLnJlcGxheVN1YmplY3RzW2tleV0gfHwgIXRoaXMucmVwbGF5U3ViamVjdHNba2V5XS5vYnNlcnZlcnMpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGF5U3ViamVjdHNba2V5XSA9IG5ldyBSZXBsYXlTdWJqZWN0PGFueT4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnJlcGxheVN1YmplY3RzW2tleV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVSZXBsYXlTdWJqZWN0KG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBrZXkgPSBgJHt0aGlzLmtleX0uJHtuYW1lfWA7XG5cbiAgICAgICAgaWYgKHRoaXMucmVwbGF5U3ViamVjdHNba2V5XSkge1xuICAgICAgICAgICAgdGhpcy5yZXBsYXlTdWJqZWN0c1trZXldLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXBsYXlTdWJzY3JpYmUobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFJlcGxheVN1YmplY3QobmFtZSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl91blN1YnNjcmliZUFsbCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChycykgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxCYWNrKHJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2gge307XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXBsYXlTdWJzY3JpYmVPbmNlKG5hbWU6IHN0cmluZywgY2FsbEJhY2s6IGFueSkge1xuICAgICAgICB0aGlzLnN1YiA9IHRoaXMuZ2V0UmVwbGF5U3ViamVjdChuYW1lKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3VuU3Vic2NyaWJlQWxsKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJzKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbEJhY2socnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCB7fTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViO1xuICAgIH1cblxuICAgIHdhaXQobmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3ViamVjdChuYW1lKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3VuU3Vic2NyaWJlQWxsKSk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlKG5hbWU6IHN0cmluZywgY2FsbEJhY2s6IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdWJqZWN0KG5hbWUpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5TdWJzY3JpYmVBbGwpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocnMpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsQmFjayhycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIHt9O1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlT25jZShuYW1lOiBzdHJpbmcsIGNhbGxCYWNrOiBhbnkpIHtcbiAgICAgICAgdGhpcy5zdWIgPSB0aGlzLmdldFN1YmplY3QobmFtZSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl91blN1YnNjcmliZUFsbCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChycykgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxCYWNrKHJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2gge307XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YjtcbiAgICB9XG5cbiAgICB1blN1YnNjcmliZShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuc3ViamVjdHNbYCR7dGhpcy5rZXl9LiR7bmFtZX1gXSkge1xuICAgICAgICAgICAgdGhpcy5zdWJqZWN0c1tgJHt0aGlzLmtleX0uJHtuYW1lfWBdLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zdWJqZWN0c1tgJHt0aGlzLmtleX0uJHtuYW1lfWBdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5TdWJzY3JpYmxlUmVwbGF5KG5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5yZXBsYXlTdWJqZWN0c1tgJHt0aGlzLmtleX0uJHtuYW1lfWBdKSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxheVN1YmplY3RzW2Ake3RoaXMua2V5fS4ke25hbWV9YF0udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlcGxheVN1YmplY3RzW2Ake3RoaXMua2V5fS4ke25hbWV9YF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSb290RGF0YShrZXlQYXRoPzogc3RyaW5nLCBkZWZhdWx0VmFsdWVJZk51bGw/OiBhbnkpOiBhbnkge1xuICAgICAgICBjb25zdCByb290ID0gdGhpcy5yb290IHx8IHRoaXM7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGFJbnRlcm5hbChyb290LmRhdGEsIGtleVBhdGgsIGRlZmF1bHRWYWx1ZUlmTnVsbCk7XG4gICAgfVxuXG4gICAgZ2V0RGF0YShrZXlQYXRoOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZUlmTnVsbD86IGFueSk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGFJbnRlcm5hbCh0aGlzLmRhdGEsIGtleVBhdGgsIGRlZmF1bHRWYWx1ZUlmTnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRhSW50ZXJuYWwob2JqLCBrZXlQYXRoOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZUlmTnVsbD86IGFueSk6IGFueSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFZhbHVlQnlQYXRoKG9iaiwga2V5UGF0aCk7XG5cbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZUlmTnVsbCAmJiAhZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5zZXRWYWx1ZUJ5UGF0aChvYmosIGtleVBhdGgsIGRlZmF1bHRWYWx1ZUlmTnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbW1vblNlcnZpY2UuZ2V0VmFsdWVCeVBhdGgob2JqLCBrZXlQYXRoKTtcbiAgICB9XG5cbiAgICBzZXRSb290RGF0YShrZXlQYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdCB8fCB0aGlzO1xuICAgICAgICByZXR1cm4gdGhpcy5zZXREYXRhSW50ZXJuYWwocm9vdC5kYXRhLCBrZXlQYXRoLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0RGF0YShrZXlQYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RGF0YUludGVybmFsKHRoaXMuZGF0YSwga2V5UGF0aCwgdmFsdWUpO1xuICAgIH1cblxuICAgIHNldERhdGFJbnRlcm5hbChvYmosIGtleVBhdGg6IHN0cmluZywgZGF0YTogYW55KTogYW55IHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdCB8fCB0aGlzO1xuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLnNldFZhbHVlQnlQYXRoKG9iaiwga2V5UGF0aCwgZGF0YSk7XG4gICAgfVxuXG4gICAgZGVzdHJveUNvbnRleHQoKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuc3ViamVjdHMpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVTdWJqZWN0KGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnJlcGxheVN1YmplY3RzKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBsZXRlUmVwbGF5U3ViamVjdChrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdW5TdWJzY3JpYmVBbGwubmV4dCgxKTtcbiAgICAgICAgdGhpcy5fdW5TdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcblxuICAgICAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5yb290LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5ERVNUUk9ZX0NPTVBPTkVOVCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLy8gYWRkRXhwb3J0Sm9iKGpvYjogRXhwb3J0Sm9iKSB7XG4gICAgLy8gICAgIGlmICh0aGlzLnJvb3QucmVwb3J0UXVldWUpIHtcbiAgICAvLyAgICAgICAgIHRoaXMucm9vdC5yZXBvcnRRdWV1ZS5hZGRKb2Ioam9iKTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbn1cbiJdfQ==
@@ -44,6 +44,10 @@ export class ComponentBase {
44
44
  this._crudService = injector.get(CrudService);
45
45
  this._commonService = injector.get(CommonService);
46
46
  this._datePipe = injector.get(DatePipe);
47
+ const root = this._appContext.getRootContext();
48
+ if (!root) {
49
+ this._appContext.addRootContext(this._componentContext, this._activatedRoute);
50
+ }
47
51
  this._componentContext = this._appContext.addComponentContext(this._componentContext, this._activatedRoute, this.getComponentId());
48
52
  if (this._componentContext) {
49
53
  this.model = this._componentContext.data;
@@ -598,4 +602,4 @@ ComponentBase.propDecorators = {
598
602
  parentModel: [{ type: Input }],
599
603
  parentContext: [{ type: Input }]
600
604
  };
601
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsK0JBQStCLEVBQy9CLHFCQUFxQixFQUNyQix3QkFBd0IsRUFDeEIsOEJBQThCLEVBRTlCLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUl2QixTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLFdBQVcsRUFDZCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUNuQyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFHbkMsTUFBTSxPQUFnQixhQUFhO0lBNkIvQixZQUFZLFFBQWtCLEVBQUUsYUFBc0I7UUFmdEQsZ0JBQVcsR0FBa0IsRUFBRSxDQUFDO1FBS2hDLGNBQVMsR0FBRyxzQ0FBc0MsQ0FBQztRQWlObkQsb0JBQWUsR0FBRyxHQUFHLENBQUMsRUFBRTtZQUNwQixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQ2YsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1lBQy9CLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztZQUMxQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5QixFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQztRQWhORSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFeEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDbkksSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQ3RDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztZQUUvQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztTQUNqQztJQUNMLENBQUM7SUE3Q0QsSUFBYSxhQUFhLENBQUMsS0FBOEI7UUFDckQsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDL0I7SUFDTCxDQUFDO0lBQUEsQ0FBQztJQUVGLElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDL0IsQ0FBQztJQXVDRDs7T0FFRztJQUNILFdBQVc7UUFDUCxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVoQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQzFCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUU7Z0JBQ3hDLElBQUksR0FBRztvQkFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDOUI7U0FDSjtRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBRUQsY0FBYztRQUNWLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVksRUFBRSxRQUFhO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVksRUFBRSxRQUFhO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVksRUFBRSxRQUFhO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQVksRUFBRSxRQUFhO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUk7UUFDMUIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSTtRQUNyQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFtQixFQUFFLE9BQWdCLEVBQUUsUUFBbUIsRUFBRSxhQUF3QjtRQUMvRixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxHQUFtQixFQUFFLE9BQWdCLEVBQUUsUUFBbUIsRUFBRSxhQUF3QjtRQUMxRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7WUFDZCxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRTtnQkFDckMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO2FBQ2xIO2lCQUNJO2dCQUNELElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUU7b0JBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ2hFO3FCQUNJO29CQUNELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQzlEO2FBQ0o7WUFDRCxJQUFJLGFBQWE7Z0JBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RDLE9BQU87U0FDVjtRQUNELElBQUksT0FBTyxFQUFFO1lBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxRQUFRO1lBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBRztRQUNkLE9BQU8sR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDckIsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsc0NBQXNDO0lBQ3RDLElBQUk7SUFFSixNQUFNLENBQUMsSUFBZ0IsRUFBRSxPQUFPLEdBQUcsaUJBQWlCO1FBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDMUMsUUFBUSxPQUFPLEVBQUU7WUFDYixLQUFLLGlCQUFpQjtnQkFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLEtBQUssaUJBQWlCO2dCQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0I7Z0JBQ0ksT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsT0FBTyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUM5RCxPQUFPO1NBQ2Q7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVMsRUFBRSxZQUFvQixFQUFFLFFBQWdCO1FBQzNELE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDO1lBQ3pCLElBQUksRUFBRSxjQUFjLENBQUMsVUFBVTtZQUMvQixZQUFZO1lBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQzFCLElBQUksRUFBRSxRQUFRO1NBQ2pCLENBQUMsQ0FBQztRQUVILE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDO1lBQ3hCLElBQUksRUFBRSxjQUFjLENBQUMsU0FBUztZQUM5QixJQUFJLEVBQUUsUUFBUTtTQUNqQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxRQUFRLENBQUMsSUFBZ0I7UUFDckIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8saUJBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxRQUFRLENBQUMsSUFBZ0I7UUFDckIsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sdUJBQXVCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFtQixFQUFFLEdBQUcsT0FBaUI7UUFDeEQsT0FBTyxJQUFJLE1BQU0sQ0FBQztZQUNkLEtBQUs7WUFDTCxPQUFPLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztTQUN4QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWEsRUFBRSxRQUFrQixFQUFFLEtBQVUsRUFBRSxlQUF3QixLQUFLLEVBQUUsc0JBQTJDLG1CQUFtQixDQUFDLE1BQU07UUFDekosT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWEsRUFBRSxRQUFrQixFQUFFLEtBQWE7UUFDeEQsT0FBTyxJQUFJLE1BQU0sQ0FBQztZQUNkLEtBQUssRUFBRSxRQUFRO1lBQ2YsS0FBSztTQUNSLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFjLEVBQUUsUUFBa0IsRUFBRSxXQUFtQixFQUFFLFFBQWlCO1FBQ3ZGLE9BQU8sSUFBSSxNQUFNLENBQUM7WUFDZCxLQUFLLEVBQUUsTUFBTTtZQUNiLFFBQVE7WUFDUixXQUFXO1lBQ1gsUUFBUTtTQUNYLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBYSxFQUFFLE1BQWMsQ0FBQztRQUNsQyxPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFFLFFBQVEsR0FBRyxLQUFLO1FBQ3hELE9BQU8sSUFBSSxTQUFTLENBQUM7WUFDakIsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRO1NBQzFCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBZ0I7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDM0QsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPO1NBQ1YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMzRCxJQUFJLEVBQUUsS0FBSztTQUNkLENBQUMsQ0FBQztJQUNQLENBQUM7SUFjRCxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUs7UUFDbEIsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQzFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbkI7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQUcsRUFBRSxRQUFRO1FBQ3pCLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDMUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQzFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbkI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7Ozs7TUFLRTtJQUNGLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDakIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDN0IsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1QjtpQkFDSTtnQkFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQixTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3pCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2YsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDL0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM3QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVLLFNBQVMsQ0FBQyxXQUF3QixFQUFFLEVBQVUsRUFBRSxPQUFZOztZQUM5RCxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMxRCxNQUFNLElBQUksR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ25FLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JELENBQUM7S0FBQTtJQUVLLGlCQUFpQixDQUFDLFdBQXdCLEVBQUUsS0FBVSxFQUFFLE9BQXlCOztZQUNuRixNQUFNLFFBQVEscUJBQVEsS0FBSyxDQUFFLENBQUM7WUFDOUIsT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQzVCLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDckQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNELENBQUM7S0FBQTtJQUVhLGFBQWEsQ0FBQyxXQUF3QixFQUFFLEVBQVUsRUFBRSxJQUFXOztZQUN6RSxJQUFJO2dCQUNBLE9BQU8sV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDOUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxVQUFVO29CQUM5QixJQUFJO2lCQUNQLENBQUMsQ0FBQyxDQUFDO2FBQ1A7WUFDRCxPQUFPLEdBQUcsRUFBRTtnQkFDUixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixPQUF1QjtvQkFDbkIsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsT0FBTyxFQUFFLGVBQWU7aUJBQzNCLENBQUM7YUFDTDtRQUNMLENBQUM7S0FBQTtJQUVPLFFBQVEsQ0FBQyxNQUFjLEVBQUUsS0FBYTtRQUMxQyxPQUFPLEdBQUcsTUFBTSxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxZQUFpQixFQUFFLFVBQW1CLEVBQUUsWUFBOEI7UUFDbEcsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksVUFBVSxFQUFFO1lBQ1osSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3pDLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuRTtTQUNKO2FBQ0k7WUFDRCxJQUFJLFlBQVksRUFBRTtnQkFDZCxLQUFLLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM1QztTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVLLFlBQVksQ0FBQyxNQUFhLEVBQUUsTUFBYyxFQUFFLE9BQXlCLEVBQUUsS0FBVTs7WUFDbkYsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTt1QkFDWCxNQUFNLENBQUMsS0FBSyxJQUFJLGFBQWE7dUJBQzdCLE1BQU0sQ0FBQyxLQUFLO3VCQUNaLENBQUMsQ0FBQyxNQUFNLFlBQVksdUJBQXVCLENBQUM7dUJBQzVDLENBQUMsQ0FBQyxNQUFNLFlBQVksd0JBQXdCLENBQUMsRUFDbEQ7b0JBQ0UsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDaEMsSUFBSSxLQUFLLEtBQUssU0FBUzt3QkFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUN0QyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7d0JBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQzs0QkFDUixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQzs0QkFDMUMsS0FBSzt5QkFDUixDQUFDLENBQUM7cUJBQ047eUJBQ0ksSUFBSSxNQUFNLFlBQVksV0FBVyxFQUFFO3dCQUNwQyxNQUFNLFNBQVMsR0FBZ0IsTUFBTSxDQUFDO3dCQUN0QyxJQUFJLEtBQUssSUFBSSxJQUFJOzRCQUFFLEtBQUssR0FBRyxFQUFFLENBQUM7d0JBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUM7NEJBQ1IsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7NEJBQzFDLEtBQUssRUFBRSxJQUFJO3lCQUNkLENBQUMsQ0FBQzt3QkFDSCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUNsQixLQUFLLE1BQU0sT0FBTyxJQUFJLEtBQUssRUFBRTtnQ0FDekIsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0NBQy9FLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0NBQ1IsS0FBSyxFQUFFLEVBQUU7b0NBQ1QsS0FBSyxFQUFFLElBQUk7aUNBQ2QsQ0FBQyxDQUFDOzZCQUNOOzRCQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7eUJBQ3ZDO3FCQUNKO3lCQUNJLElBQUksTUFBTSxZQUFZLG9CQUFvQixFQUFFO3dCQUM3QyxNQUFNLFNBQVMsR0FBeUIsTUFBTSxDQUFDO3dCQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDOzRCQUNSLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDOzRCQUMxQyxLQUFLLEVBQUUsSUFBSTt5QkFDZCxDQUFDLENBQUM7d0JBQ0gsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDOUY7eUJBQ0k7d0JBQ0QsSUFBSSxNQUFNLFlBQVkscUJBQXFCLEVBQUU7NEJBQ3pDLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxJQUFJLENBQUMsRUFBRTtnQ0FDMUIsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOzZCQUMzQjs0QkFDRCxLQUFLLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUNsQzs2QkFDSSxJQUFJLE1BQU0sWUFBWSw4QkFBOEIsRUFBRTs0QkFDdkQsTUFBTSxZQUFZLEdBQUcsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ2xHLE1BQU0sU0FBUyxHQUFtQyxNQUFNLENBQUM7NEJBQ3pELElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7NEJBQzFDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0NBQ2YsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFO29DQUNsQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dDQUM5QyxDQUFDLENBQUM7NkJBQ0w7NEJBQ0QsS0FBSyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFFdEYsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO2dDQUNqQixJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29DQUN6QixJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7d0NBQ3JCLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7cUNBQzdFO3lDQUNJO3dDQUNELEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7cUNBQzdFO2lDQUVKO3FDQUNJO29DQUNELEtBQUssR0FBRyxJQUFJLENBQUM7aUNBQ2hCOzZCQUNKO2lDQUNJO2dDQUNELElBQUksWUFBWSxFQUFFO29DQUNkLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTt3Q0FDckIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FDQUNuRDt5Q0FDSTt3Q0FDRCxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7cUNBQ25EO2lDQUNKOzZCQUNKO3lCQUNKOzZCQUNJLElBQUksTUFBTSxZQUFZLCtCQUErQixFQUFFOzRCQUN4RCxNQUFNLFlBQVksR0FBRyxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ3pFLE1BQU0sU0FBUyxHQUFvQyxNQUFNLENBQUM7NEJBQzFELElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7NEJBQzFDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0NBQ2YsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFO29DQUNsQixJQUFJLElBQUksRUFBRTt3Q0FDTixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7cUNBQ3ZDO3lDQUNJO3dDQUNELE9BQU8sSUFBSSxDQUFDO3FDQUNmO2dDQUNMLENBQUMsQ0FBQzs2QkFDTDs0QkFDRCxLQUFLLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO3lCQUNyRjs2QkFDSSxJQUFJLE1BQU0sWUFBWSx3QkFBd0IsRUFBRTs0QkFDakQsTUFBTSxTQUFTLEdBQTZCLE1BQU0sQ0FBQzs0QkFDbkQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDOzRCQUN4QyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7NEJBQ3RCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQzs0QkFDeEIsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRTtnQ0FDbEMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztnQ0FDdkQsWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0NBQzlFLEtBQUssRUFBRSxDQUFDO2lDQUNYLENBQUMsQ0FBQyxDQUFDOzZCQUNQO2lDQUNJO2dDQUNELFVBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0NBQ3BELFlBQVksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQztnQ0FDdEQsSUFBSSxZQUFZLEVBQUU7b0NBQ2QsWUFBWSxHQUFHO3dDQUNYLEtBQUssRUFBRSxZQUFZO3FDQUN0QixDQUFDO2lDQUNMOzZCQUNKOzRCQUNELEtBQUssR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7eUJBQ3JGOzZCQUNJLElBQUksTUFBTSxZQUFZLHFCQUFxQixFQUFFOzRCQUM5QyxNQUFNLFNBQVMsR0FBMEIsTUFBTSxDQUFDOzRCQUNoRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7NEJBQ3hCLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtnQ0FDakIsWUFBWSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUM3SDtpQ0FDSTtnQ0FDRCxZQUFZLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7NkJBQzNHOzRCQUNELEtBQUssR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO3lCQUMvRjs2QkFDSSxJQUFJLE1BQU0sWUFBWSxxQkFBcUIsSUFBSSxNQUFNLFlBQVksbUJBQW1CLEVBQUU7NEJBQ3ZGLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0NBQ1IsS0FBSyxHQUFHLE9BQU8sQ0FBQzs2QkFDbkI7aUNBQ0k7Z0NBQ0QsS0FBSyxHQUFHLElBQUksQ0FBQzs2QkFDaEI7eUJBQ0o7d0JBQ0QscURBQXFEO3dCQUNyRCxJQUFJLEtBQUssS0FBSyxTQUFTOzRCQUFFLEtBQUssR0FBRyxJQUFJLENBQUM7d0JBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUM7NEJBQ1IsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7NEJBQzFDLEtBQUs7eUJBQ1IsQ0FBQyxDQUFDO3FCQUNOO2lCQUNKO2FBQ0o7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDO0tBQUE7SUFFRCxhQUFhLENBQUMsS0FBSztRQUNmLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDdEIsSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELG9MQUFvTDtJQUNwTCxlQUFlLENBQUMsT0FBTztRQUNuQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNkLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUIsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDaEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO29CQUMvRCxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDckIsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDbEI7cUJBQ0k7b0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksbUJBQW1CLENBQUMsQ0FBQztpQkFDakQ7YUFDSjtTQUNKO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBYTtRQUNsQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNmLEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ1QsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzlDO2lCQUNJO2dCQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDdkI7U0FDSjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVLLFdBQVcsQ0FBQyxPQUF3QixFQUFFLE9BQVksRUFBRSxhQUE2QixjQUFjLENBQUMsSUFBSTs7WUFDdEcsTUFBTSxVQUFVLEdBQStCLElBQUksMEJBQTBCLEVBQUUsQ0FBQztZQUNoRixVQUFVLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6RSxVQUFVLENBQUMsVUFBVSxHQUFHLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ25FLFVBQVUsQ0FBQyxVQUFVLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNwRSxVQUFVLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMzRSxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxPQUFPLENBQUMsc0JBQXNCLEVBQUU7Z0JBQ2hDLFlBQVksR0FBRyxJQUFJLENBQUM7YUFDdkI7aUJBQ0k7Z0JBQ0QsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFO29CQUN0QixZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBRSxPQUFPLENBQUMsWUFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDckk7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRTtvQkFDZixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDMUQsSUFBSSxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFO3dCQUNyQyxZQUFZLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztxQkFDbkM7aUJBQ0o7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRTtvQkFDZixZQUFZLEdBQUcsSUFBSSxDQUFDO2lCQUN2QjthQUNKO1lBQ0QsVUFBVSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7WUFDdkMsVUFBVSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDNUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9DLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUN4QixNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ2xCLFVBQVU7Z0JBQ1YsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEtBQUssQ0FBQzthQUNuQyxDQUFDLENBQUM7WUFDSCxNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbEYsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsV0FBVyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7YUFDekY7WUFDRCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7WUFDZCxVQUFVLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDdEMsSUFBSSxJQUFJLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3BELENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztLQUFBO0lBRUssWUFBWSxDQUFDLE9BQVk7O1lBQzNCLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztLQUFBO0lBRUQsa0JBQWtCO1FBQ2QsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEYsSUFBSSxTQUFTLElBQUksSUFBSSxJQUFJLFNBQVMsSUFBSSxFQUFFLEVBQUU7WUFDdEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVM7UUFDbEIsSUFBSTtZQUNBLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDbkQ7UUFDRCxPQUFPLENBQUMsRUFBRTtZQUNOLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztTQUN0QztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBWSxFQUFFLFlBQVksR0FBRyxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNmLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQztTQUNoRDtRQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTyxDQUFDLENBQVM7UUFDYixPQUFPLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7OztZQWxtQkosU0FBUzs7O1lBMUNVLFFBQVE7Ozs7MEJBNEN2QixLQUFLOzRCQUVMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBNb2RlbFNoYXJlTGlua0J5UGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2hhcmUtbGluay1ieS1wZXJtaXNzaW9uL21vZGVscy9zaGFyZS1saW5rLWJ5LXBlcm1pc3Npb24nO1xuaW1wb3J0IHsgVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRhbnRzJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgUGVybWlzc2lvbkJhc2UgfSBmcm9tICcuLi8uLi9lbnVtcy9jb21tb24nO1xuaW1wb3J0IHsgRXhwb3J0SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9leHBvcnQtaXRlbSc7XG5pbXBvcnQgeyBGaWx0ZXIsIFNvcnQsIFN0cmluZ0NvbXBhcmVPcHRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVY0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RlbXBsYXRlLXY0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90ZW1wbGF0ZWluc3RhbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0U3RyaW5nRGF0ZVZOIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGF0ZSc7XG5pbXBvcnQgeyBFeHBvcnRJdGVtVHlwZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIEFkZHJlc3NDb250cm9sU2NoZW1hLFxuICAgIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEsXG4gICAgQ2hlY2tib3hDb250cm9sU2NoZW1hLFxuICAgIENvQ2F1VG9DaHVjQ29udHJvbFNjaGVtYSxcbiAgICBDb0NhdVRvQ2h1Y1BpY2tlckNvbnRyb2xTY2hlbWEsXG4gICAgQ3J1ZExpc3RTZXR0aW5nLFxuICAgIERhdGVUaW1lQ29udHJvbFNjaGVtYSxcbiAgICBEcm9wZG93bkNvbnRyb2xTY2hlbWEsXG4gICAgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hLFxuICAgIEZpbGVVcGxvYWRDb250cm9sU2NoZW1hLFxuICAgIEZvcm1TY2hlbWFCYXNlLFxuICAgIE1vZGVsU2NoZW1hLFxuICAgIE9wZXJhdG9yLFxuICAgIFBvcHVwU2l6ZSxcbiAgICBTd2l0Y2hDb250cm9sU2NoZW1hLFxuICAgIFRhYmxlU2NoZW1hXG59IGZyb20gJy4uL2Zvcm0tc2NoZW1hJztcblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9WRVJTSU9OX1Y0ID0gNDtcbmV4cG9ydCBjb25zdCBFWFBPUlRfVkVSU0lPTl9WNSA9IDU7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIHBhcmVudE1vZGVsOiBhbnk7XG5cbiAgICBASW5wdXQoKSBzZXQgcGFyZW50Q29udGV4dCh2YWx1ZTogQ29tcG9uZW50Q29udGV4dFNlcnZpY2UpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucGFyZW50ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZ2V0IHBhcmVudENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQucGFyZW50O1xuICAgIH1cblxuICAgIG1vZGVsOiBhbnk7XG4gICAgbW9kZWxTY2hlbWE6IE1vZGVsU2NoZW1hW10gPSBbXTtcbiAgICBjb250ZXh0OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcbiAgICByb290TW9kZWw6IGFueTtcbiAgICByb290Q29udGV4dDogQ29tcG9uZW50Q29udGV4dFNlcnZpY2U7XG5cbiAgICBndWlkRW1wdHkgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbiAgICBwdWJsaWMgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT47XG4gICAgcHJvdGVjdGVkIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfYXBwQ29udGV4dDogQXBwbGljYXRpb25Db250ZXh0U2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX2NvbXBvbmVudENvbnRleHQ6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yO1xuICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlO1xuICAgIHByb3RlY3RlZCBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfZGF0ZVBpcGU6IERhdGVQaXBlO1xuXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yLCBjb21wb25lbnROYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5faW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICAgICAgdGhpcy5fYXBwQ29udGV4dCA9IGluamVjdG9yLmdldChBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dCA9IGluamVjdG9yLmdldChDb21wb25lbnRDb250ZXh0U2VydmljZSk7XG4gICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQ3J1ZFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9kYXRlUGlwZSA9IGluamVjdG9yLmdldChEYXRlUGlwZSk7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dCA9IHRoaXMuX2FwcENvbnRleHQuYWRkQ29tcG9uZW50Q29udGV4dCh0aGlzLl9jb21wb25lbnRDb250ZXh0LCB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSwgdGhpcy5nZXRDb21wb25lbnRJZCgpKTtcbiAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudENvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLl9jb21wb25lbnRDb250ZXh0LmRhdGE7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSB0aGlzLl9jb21wb25lbnRDb250ZXh0O1xuICAgICAgICAgICAgdGhpcy5yb290Q29udGV4dCA9IHRoaXMuX2NvbXBvbmVudENvbnRleHQucm9vdDtcblxuICAgICAgICAgICAgdGhpcy5yb290TW9kZWwgPSB0aGlzLnJvb3RDb250ZXh0LmRhdGE7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmNvbXBvbmVudFN1YnMgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIGRlc3Ryb3lcbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KDEpO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmNvbXBvbmVudFN1YnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViIG9mIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicykge1xuICAgICAgICAgICAgICAgIGlmIChzdWIpIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRlc3Ryb3lDb250ZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDb21wb25lbnRJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29tbW9uU2VydmljZS5yYW5kb21TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBzdWJzY3JpYmVSb290KG5hbWU6IHN0cmluZywgY2FsbEJhY2s6IGFueSkge1xuICAgICAgICB0aGlzLm1vZGVsLmNvbXBvbmVudFN1YnMucHVzaCh0aGlzLnJvb3RDb250ZXh0LnN1YnNjcmliZShuYW1lLCBjYWxsQmFjaykpO1xuICAgIH1cblxuICAgIHN1YnNjcmliZShuYW1lOiBzdHJpbmcsIGNhbGxCYWNrOiBhbnkpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5jb21wb25lbnRTdWJzLnB1c2godGhpcy5jb250ZXh0LnN1YnNjcmliZShuYW1lLCBjYWxsQmFjaykpO1xuICAgIH1cblxuICAgIHN1YnNjcmliZU9uY2UobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XG4gICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicy5wdXNoKHRoaXMuY29udGV4dC5zdWJzY3JpYmVPbmNlKG5hbWUsIGNhbGxCYWNrKSk7XG4gICAgfVxuXG4gICAgcmVwbGF5U3Vic2NyaWJlKG5hbWU6IHN0cmluZywgY2FsbEJhY2s6IGFueSkge1xuICAgICAgICB0aGlzLm1vZGVsLmNvbXBvbmVudFN1YnMucHVzaCh0aGlzLmNvbnRleHQucmVwbGF5U3Vic2NyaWJlKG5hbWUsIGNhbGxCYWNrKSk7XG4gICAgfVxuXG4gICAgdHJhY2tCeUZ1bmNEZWZhdWx0KGluZGV4LCBpdGVtKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICB0cmFja0J5RnVuY0lkKGluZGV4LCBpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgIH1cblxuICAgIGhhbmRsZVJlc3BvbnNlKHJlczogUmVzcG9uc2VSZXN1bHQsIG1lc3NhZ2U/OiBzdHJpbmcsIGNhbGxCYWNrPzogRnVuY3Rpb24sIGNhbGxCYWNrRXJyb3I/OiBGdW5jdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3J1ZFNlcnZpY2UuaGFuZGxlUmVzcG9uc2UocmVzLCBtZXNzYWdlLCBjYWxsQmFjaywgY2FsbEJhY2tFcnJvcik7XG4gICAgfVxuXG4gICAgaGFuZGxlUmVzcG9uc2VXaXRoV2FpdEJveChyZXM6IFJlc3BvbnNlUmVzdWx0LCBtZXNzYWdlPzogc3RyaW5nLCBjYWxsQmFjaz86IEZ1bmN0aW9uLCBjYWxsQmFja0Vycm9yPzogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5oaWRlV2FpdEJveCgpO1xuICAgICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7XG4gICAgICAgICAgICBpZiAocmVzLmVycm9yID09IFZhbGlkYXRpb24uRVJSX1NZU19ERVYpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlcy5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhLiBMacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChyZXMubWVzc2FnZSAhPSBudWxsICYmIHJlcy5tZXNzYWdlICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKHJlcy5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKHJlcy5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhbGxCYWNrRXJyb3IpIGNhbGxCYWNrRXJyb3IocmVzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1N1Y2Nlc3MobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxCYWNrKSBjYWxsQmFjayhyZXMpO1xuICAgIH1cblxuICAgIGlzTm90TnVsbEFycmF5KGFycikge1xuICAgICAgICByZXR1cm4gYXJyICE9IG51bGwgJiYgYXJyLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgZnVuY1NvcnREZWZhdWx0KGEsIGIpIHtcbiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPT0gYikgcmV0dXJuIDA7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICAvLyBhZGRFeHBvcnRKb2Ioam9iOiBFeHBvcnRKb2IpIHtcbiAgICAvLyAgICAgdGhpcy5jb250ZXh0LmFkZEV4cG9ydEpvYihqb2IpO1xuICAgIC8vIH1cblxuICAgIGV4cG9ydChkYXRhOiBFeHBvcnRJdGVtLCB2ZXJzaW9uID0gRVhQT1JUX1ZFUlNJT05fVjQpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdleHBvcnQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICAgICAgICBzd2l0Y2ggKHZlcnNpb24pIHtcbiAgICAgICAgICAgIGNhc2UgRVhQT1JUX1ZFUlNJT05fVjQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0VjQoZGF0YSk7XG4gICAgICAgICAgICBjYXNlIEVYUE9SVF9WRVJTSU9OX1Y1OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cG9ydFY1KGRhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFeHBvcnQgdmVyc2lvbjogJHt2ZXJzaW9ufSBpcyBub3Qgc3VwcG9ydGVkIWApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cG9ydEV4Y2VsVjUoZGF0YTogYW55LCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3Qgc2hlZXQgPSBuZXcgRXhwb3J0SXRlbSh7XG4gICAgICAgICAgICB0eXBlOiBFeHBvcnRJdGVtVHlwZS5FeGNlbFNoZWV0LFxuICAgICAgICAgICAgdGVtcGxhdGVDb2RlLFxuICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoZGF0YSksXG4gICAgICAgICAgICBuYW1lOiAnU2hlZXQxJ1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBmaWxlID0gbmV3IEV4cG9ydEl0ZW0oe1xuICAgICAgICAgICAgdHlwZTogRXhwb3J0SXRlbVR5cGUuRXhjZWxGaWxlLFxuICAgICAgICAgICAgbmFtZTogZmlsZU5hbWVcbiAgICAgICAgfSk7XG4gICAgICAgIGZpbGUuY2hpbGRyZW4gPSBbc2hlZXRdO1xuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnQoZmlsZSwgRVhQT1JUX1ZFUlNJT05fVjUpO1xuICAgIH1cblxuICAgIGV4cG9ydFY0KGRhdGE6IEV4cG9ydEl0ZW0pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlVjRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRlbXBsYXRlVjRTZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlVjRTZXJ2aWNlLmV4cG9ydE5vcm1hbChkYXRhKTtcbiAgICB9XG5cbiAgICBleHBvcnRWNShkYXRhOiBFeHBvcnRJdGVtKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZUluc3RhbmNlU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChUZW1wbGF0ZUluc3RhbmNlU2VydmljZSk7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZUluc3RhbmNlU2VydmljZS5leHBvcnROb3JtYWwoZGF0YSk7XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyQ29udGFpbmVyKGxvZ2ljOiAnYW5kJyB8ICdvcicsIC4uLmZpbHRlcnM6IEZpbHRlcltdKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGxvZ2ljLFxuICAgICAgICAgICAgZmlsdGVyczogWy4uLmZpbHRlcnNdXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld0ZpbHRlcihmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBhbnksIHZhbHVlSXNGaWVsZDogYm9vbGVhbiA9IGZhbHNlLCBzdHJpbmdDb21wYXJlT3B0aW9uOiBTdHJpbmdDb21wYXJlT3B0aW9uID0gU3RyaW5nQ29tcGFyZU9wdGlvbi5Ob3JtYWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbW1vblNlcnZpY2UubmV3RmlsdGVyKGZpZWxkLCBvcGVyYXRvciwgdmFsdWUsIHZhbHVlSXNGaWVsZCwgc3RyaW5nQ29tcGFyZU9wdGlvbik7XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyVjQoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld0JpbmRpbmdGaWx0ZXIoY29sdW1uOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgc291cmNlRmllbGQ6IHN0cmluZywgc3ViRmllbGQ/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQ6IGNvbHVtbixcbiAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICAgICAgc291cmNlRmllbGQsXG4gICAgICAgICAgICBzdWJGaWVsZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXdTb3J0KGZpZWxkOiBzdHJpbmcsIGRpcjogMSB8IC0xID0gMSkge1xuICAgICAgICByZXR1cm4gbmV3IFNvcnQoeyBmaWVsZCwgZGlyIH0pO1xuICAgIH1cblxuICAgIG5ld1BvcHVwU2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgbWF4aW1pemUgPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbmV3IFBvcHVwU2l6ZSh7XG4gICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBtYXhpbWl6ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaG93V2FpdEJveChtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULlNIT1dfV0FJVF9CT1gsIHtcbiAgICAgICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGhpZGVXYWl0Qm94KCkge1xuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5TSE9XX1dBSVRfQk9YLCB7XG4gICAgICAgICAgICBzaG93OiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb3B5VG9DbGlwYm9hcmQgPSBzdHIgPT4ge1xuICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICAgIGVsLnZhbHVlID0gc3RyO1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JywgJycpO1xuICAgICAgICBlbC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgIGVsLnN0eWxlLmxlZnQgPSAnLTk5OTlweCc7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpO1xuICAgICAgICBlbC5zZWxlY3QoKTtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbCk7XG4gICAgfTtcblxuICAgIGFkZERpc3RpbmN0KGxzdCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGxzdC5pbmRleE9mKHZhbHVlKSA9PSAtMSkge1xuICAgICAgICAgICAgbHN0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkRGlzdGluY3RMaXN0KGxzdCwgbHN0VmFsdWUpIHtcbiAgICAgICAgaWYgKCFsc3RWYWx1ZSB8fCAhbHN0VmFsdWUubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGxzdFZhbHVlLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgaWYgKGxzdC5pbmRleE9mKHZhbHVlKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgIGxzdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBDb252ZXJ0IDEgYXJyYXkgPT4gTiBhcnJheVxuICAgICogQHBhcmFtIGxzdCBN4bqjbmcgcGjhuqduIHThu61cbiAgICAqIEBwYXJhbSBmaWVsZHMgTeG6o25nIGPDoWMgZmllbGQsIG7hur91IGZpZWxkIGzDoCBraeG7g3UgYXJyYXkgdGjDrCBuZ2jEqWEgbMOgIG3Dum4gbWFwIGRpc3RpbmN0XG4gICAgKiBAcmV0dXJucyBOIEFycmF5XG4gICAgKi9cbiAgICBtdWx0aXBsZU1hcChsc3QsIC4uLmZpZWxkcykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgY29uc3QgZnVuY3MgPSBbXTtcbiAgICAgICAgY29uc3QgcmF3RmllbGRzID0gW107XG4gICAgICAgIGNvbnN0IF9wdXNoID0gKGxzdCwgdmFsdWUpID0+IGxzdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goW10pO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgZnVuY3MucHVzaCh0aGlzLmFkZERpc3RpbmN0KTtcbiAgICAgICAgICAgICAgICByYXdGaWVsZHMucHVzaChmaWVsZFswXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmdW5jcy5wdXNoKF9wdXNoKTtcbiAgICAgICAgICAgICAgICByYXdGaWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIHJhd0ZpZWxkcy5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBmdW5jc1tpbmRleF0ocmVzdWx0W2luZGV4XSwgaXRlbVtmaWVsZF0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFzeW5jIF9wcmludFBkZihiYXNlU2VydmljZTogQmFzZVNlcnZpY2UsIGlkOiBzdHJpbmcsIHJvd0RhdGE6IGFueSkge1xuICAgICAgICBjb25zdCBpdGVtRGV0YWlsID0gKGF3YWl0IGJhc2VTZXJ2aWNlLmdldERldGFpbChpZCkpLmRhdGE7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBiYXNlU2VydmljZS5nZXREYXRhVHJpbmhLeShpdGVtRGV0YWlsLCByb3dEYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByaW50UGRmQmFzZShiYXNlU2VydmljZSwgaWQsIGRhdGEpO1xuICAgIH1cblxuICAgIGFzeW5jIF9wcmludFBkZkJ5U2NoZW1hKGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZSwgbW9kZWw6IGFueSwgc2NoZW1hczogRm9ybVNjaGVtYUJhc2VbXSkge1xuICAgICAgICBjb25zdCB0bXBNb2RlbCA9IHsgLi4ubW9kZWwgfTtcbiAgICAgICAgZGVsZXRlIHRtcE1vZGVsLnByaW50RmlsZUlkO1xuICAgICAgICBjb25zdCBkYXRhID0gW107XG4gICAgICAgIGF3YWl0IHRoaXMuX2dldEtleVZhbHVlKGRhdGEsICcnLCBzY2hlbWFzLCB0bXBNb2RlbCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmludFBkZkJhc2UoYmFzZVNlcnZpY2UsIG1vZGVsLmlkLCBkYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9wcmludFBkZkJhc2UoYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlLCBpZDogc3RyaW5nLCBkYXRhOiBhbnlbXSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGJhc2VTZXJ2aWNlLmV4cG9ydFRvUGRmKGlkLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgdGlldURlOiBiYXNlU2VydmljZS5vYmplY3ROYW1lLFxuICAgICAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm4gPFJlc3BvbnNlUmVzdWx0PntcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ8OzIGzhu5dpIHjhuqN5IHJhJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TGFiZWwocHJlZml4OiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke2xhYmVsfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0VmFsdWVGcm9tRGF0YXNvdXJjZShpdGVtU2VsZWN0ZWQ6IGFueSwgaXNNdWx0aXBsZTogYm9vbGVhbiwgZnVuY0dldExhYmVsOiAoaXRlbSkgPT4gc3RyaW5nKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgIGlmIChpc011bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAoaXRlbVNlbGVjdGVkICYmIGl0ZW1TZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBpdGVtU2VsZWN0ZWQubWFwKHEgPT4gZnVuY0dldExhYmVsKHEudmFsdWUpKS5qb2luKCcsICcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGl0ZW1TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZnVuY0dldExhYmVsKGl0ZW1TZWxlY3RlZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGFzeW5jIF9nZXRLZXlWYWx1ZShyZXN1bHQ6IGFueVtdLCBwcmVmaXg6IHN0cmluZywgc2NoZW1hczogRm9ybVNjaGVtYUJhc2VbXSwgbW9kZWw6IGFueSkge1xuICAgICAgICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgICAgICAgICBpZiAoIXNjaGVtYS5oaWRkZW5cbiAgICAgICAgICAgICAgICAmJiBzY2hlbWEuZmllbGQgIT0gJ3ByaW50RmlsZUlkJ1xuICAgICAgICAgICAgICAgICYmIHNjaGVtYS5sYWJlbFxuICAgICAgICAgICAgICAgICYmICEoc2NoZW1hIGluc3RhbmNlb2YgRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEpXG4gICAgICAgICAgICAgICAgJiYgIShzY2hlbWEgaW5zdGFuY2VvZiBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBtb2RlbFtzY2hlbWEuZmllbGRdO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWwocHJlZml4LCBzY2hlbWEubGFiZWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcFNjaGVtYSA9IDxUYWJsZVNjaGVtYT5zY2hlbWE7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB2YWx1ZSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRMYWJlbChwcmVmaXgsIHNjaGVtYS5sYWJlbCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgcm93RGF0YSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2dldEtleVZhbHVlKHJlc3VsdCwgYCR7cHJlZml4fVxcdGAsIHRtcFNjaGVtYS5yb3dUZW1wbGF0ZSwgcm93RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3BsaWNlKHJlc3VsdC5sZW5ndGggLSAxLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBBZGRyZXNzQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0bXBTY2hlbWEgPSA8QWRkcmVzc0NvbnRyb2xTY2hlbWE+c2NoZW1hO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRMYWJlbChwcmVmaXgsIHNjaGVtYS5sYWJlbCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZ2V0S2V5VmFsdWUocmVzdWx0LCBgJHtwcmVmaXh9XFx0YCwgdG1wU2NoZW1hLl9jb21wb25lbnQuc2V0dGluZy5zY2hlbWEsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBEYXRlVGltZUNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0U3RyaW5nRGF0ZVZOKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBDb0NhdVRvQ2h1Y1BpY2tlckNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TZWxlY3RlZCA9IGF3YWl0IHNjaGVtYS5fY29tcG9uZW50LmNvbnRyb2xQaWNrZXIuX2NvbXBvbmVudC5nZXREYXRhU2VsZWN0ZWRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0bXBTY2hlbWEgPSA8Q29DYXVUb0NodWNQaWNrZXJDb250cm9sU2NoZW1hPnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSB0bXBTY2hlbWEuZnVuY0dldExhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmdW5jR2V0TGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWVbdG1wU2NoZW1hLmRpc3BsYXlGaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZ2V0VmFsdWVGcm9tRGF0YXNvdXJjZShpdGVtU2VsZWN0ZWQsIHNjaGVtYS5tdWx0aXBsZSwgaXRlbSA9PiBpdGVtLnRlbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0TGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXRlbVNlbGVjdGVkLm1hcChxID0+IHRtcFNjaGVtYS5mdW5jR2V0TGFiZWwocS52YWx1ZSkpLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW1TZWxlY3RlZC5tYXAocSA9PiBxLnZhbHVlW3RtcFNjaGVtYS5kaXNwbGF5RmllbGRdKS5qb2luKCcsICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNjaGVtYS5mdW5jR2V0TGFiZWwoaXRlbVNlbGVjdGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXRlbVNlbGVjdGVkLnZhbHVlW3NjaGVtYS5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TZWxlY3RlZCA9IGF3YWl0IHNjaGVtYS5fY29tcG9uZW50LmdldERhdGFTZWxlY3RlZFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcFNjaGVtYSA9IDxBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hPnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSB0bXBTY2hlbWEuZnVuY0dldExhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmdW5jR2V0TGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW3RtcFNjaGVtYS5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZUZyb21EYXRhc291cmNlKGl0ZW1TZWxlY3RlZCwgc2NoZW1hLm11bHRpcGxlLCBmdW5jR2V0TGFiZWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIENvQ2F1VG9DaHVjQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wU2NoZW1hID0gPENvQ2F1VG9DaHVjQ29udHJvbFNjaGVtYT5zY2hlbWE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW0ubGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbVNlbGVjdGVkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBTY2hlbWEuX2NvbXBvbmVudC5tdWx0aVNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSB0bXBTY2hlbWEuX2NvbXBvbmVudC5tdWx0aVNlbGVjdC5fb3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0ZWQgPSBkYXRhU291cmNlLmZpbHRlcihxID0+IHZhbHVlLmluZGV4T2YoeCA9PiB4ID09IHEudmFsdWUpKS5tYXAocSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSB0bXBTY2hlbWEuX2NvbXBvbmVudC5kcm9wZG93bi5fb3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0ZWQgPSBkYXRhU291cmNlLmZpbmQocSA9PiBxLnZhbHVlID09IHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlRnJvbURhdGFzb3VyY2UoaXRlbVNlbGVjdGVkLCBzY2hlbWEubXVsdGlwbGUsIGZ1bmNHZXRMYWJlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgRHJvcGRvd25Db250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0bXBTY2hlbWEgPSA8RHJvcGRvd25Db250cm9sU2NoZW1hPnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpdGVtU2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IHNjaGVtYS5fY29tcG9uZW50LmRhdGFTb3VyY2VJbnRlcm5hbC5maWx0ZXIocSA9PiB2YWx1ZS5pbmRleE9mKHggPT4geCA9PSBxLnZhbHVlW3EudmFsdWUuX2Ryb3Bkb3dudmFsdWVdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0ZWQgPSBzY2hlbWEuX2NvbXBvbmVudC5kYXRhU291cmNlSW50ZXJuYWwuZmluZChxID0+IHEudmFsdWVbcS52YWx1ZS5fZHJvcGRvd252YWx1ZV0gPT0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZUZyb21EYXRhc291cmNlKGl0ZW1TZWxlY3RlZCwgc2NoZW1hLm11bHRpcGxlLCB0bXBTY2hlbWEuZnVuY0dldExhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBDaGVja2JveENvbnRyb2xTY2hlbWEgfHwgc2NoZW1hIGluc3RhbmNlb2YgU3dpdGNoQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gJ0tow7RuZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICdDw7MnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFZhbHVlID0gdW5kZWZpbmVkIHRow6wga2hpIHNlcmlhbGl6ZSBz4bq9IGLhu4sgbeG6pXQgcHJvcFxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRMYWJlbChwcmVmaXgsIHNjaGVtYS5sYWJlbCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBnZXRTdHJpbmdEYXRlKHZhbHVlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnZGQvTU0veXl5eScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ2RkL01NL3l5eXknKTtcbiAgICB9XG5cbiAgICAvLyBodHRwOi8vbG9jYWxob3N0OjI3MjMwL3VuaXZlcnNhbC1saW5rP3NlcnZpY2VDb2RlPWNvbmd2aWVjJmVudGl0eT1ETV9Qcmlvcml0eSZlbnRpdHlLZXk9MDkxMWYzZTctM2RiMC00YjY4LTg3Y2QtMDdkNDI1NzQxZTllJnN0YXRlPSZzb3VyY2VQYXRoPWh0dHA6Ly9sb2NhbGhvc3Q6MjcyMzAvZG0tcHJpb3JpdHlcbiAgICBwYXJzZUF0dGFjaExpbmsoY29udGVudCkge1xuICAgICAgICBjb25zdCBsaW5rcyA9IGNvbnRlbnQuc3BsaXQoJ1xcclxcbicpO1xuICAgICAgICBjb25zdCBvcCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IGxpbmsuc3BsaXQoJz8nKTtcbiAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBhcnJbMV07XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnBhcnNlUXVlcnlTdHJpbmcodGVtcCk7XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5LnNlcnZpY2VDb2RlICYmIHF1ZXJ5LmVudGl0eSAmJiBxdWVyeS5lbnRpdHlLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkucmF3TGluayA9IGxpbms7XG4gICAgICAgICAgICAgICAgICAgIG9wLnB1c2gocXVlcnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBsaW5rICR7bGlua30gaW52YWxpZCB0byBwYXJzZWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3A7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZVF1ZXJ5U3RyaW5nKHF1ZXJ5OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBpZiAoIXF1ZXJ5KSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKHF1ZXJ5LnN0YXJ0c1dpdGgoJz8nKSkgcXVlcnkgPSBxdWVyeS5zdWJzdHJpbmcoMSk7XG4gICAgICAgIGNvbnN0IGFyciA9IHF1ZXJ5LnNwbGl0KCcmJyk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKSB7XG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gaXRlbS5zcGxpdCgnPScpO1xuICAgICAgICAgICAgaWYgKHRlbXBbMV0pIHtcbiAgICAgICAgICAgICAgICBvYmpbdGVtcFswXV0gPSBkZWNvZGVVUklDb21wb25lbnQodGVtcFsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBvYmpbdGVtcFswXV0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q29weVBhdGgoc2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhOiBhbnksIHBlcm1pc3Npb246IFBlcm1pc3Npb25CYXNlID0gUGVybWlzc2lvbkJhc2UuUkVBRCkge1xuICAgICAgICBjb25zdCBpdGVtU2hhcmVzOiBNb2RlbFNoYXJlTGlua0J5UGVybWlzc2lvbiA9IG5ldyBNb2RlbFNoYXJlTGlua0J5UGVybWlzc2lvbigpO1xuICAgICAgICBpdGVtU2hhcmVzLmxpbmtUb01lbnUgPSBgJHt0b3AubG9jYXRpb24ub3JpZ2lufSR7dG9wLmxvY2F0aW9uLnBhdGhuYW1lfWA7XG4gICAgICAgIGl0ZW1TaGFyZXMuc291cmNlUGF0aCA9IGAke2VuY29kZVVSSUNvbXBvbmVudCh0b3AubG9jYXRpb24uaHJlZil9YDtcbiAgICAgICAgaXRlbVNoYXJlcy50YXJnZXRQYXRoID0gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHNldHRpbmcudGFyZ2V0UGF0aCl9YDtcbiAgICAgICAgaXRlbVNoYXJlcy5vYmplY3REaXNwbGF5TmFtZSA9IGAke2VuY29kZVVSSUNvbXBvbmVudChzZXR0aW5nLm9iamVjdE5hbWUpfWA7XG4gICAgICAgIGxldCBkaXNwbGF5RmllbGQgPSAnJztcbiAgICAgICAgaWYgKHNldHRpbmcuZ2V0RGlzcGxheU5hbWVJblNlcnZlcikge1xuICAgICAgICAgICAgZGlzcGxheUZpZWxkID0gJ2lkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuaXNTdHJpbmcoc2V0dGluZy5kaXNwbGF5RmllbGQpID8gc2V0dGluZy5kaXNwbGF5RmllbGQgOiAoc2V0dGluZy5kaXNwbGF5RmllbGQgYXMgYW55KShyb3dEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlua0NvbHVtbiA9IHNldHRpbmcuY29scy5maW5kKHggPT4geC5zaG93RWRpdExpbmspO1xuICAgICAgICAgICAgICAgIGlmIChsaW5rQ29sdW1uICYmICFsaW5rQ29sdW1uLnJhd0NvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQgPSBsaW5rQ29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkID0gJ2lkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpdGVtU2hhcmVzLmRpc3BsYXlGaWVsZCA9IGRpc3BsYXlGaWVsZDtcbiAgICAgICAgaXRlbVNoYXJlcy5sc3RJdGVtRGF0YSA9IFtdO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0TGlua1N0YXRlKHJvd0RhdGEpO1xuICAgICAgICBpdGVtU2hhcmVzLmxzdEl0ZW1EYXRhLnB1c2goe1xuICAgICAgICAgICAgaXRlbUlkOiByb3dEYXRhLmlkLFxuICAgICAgICAgICAgcGVybWlzc2lvbixcbiAgICAgICAgICAgIHN0YXRlOiBlbmNvZGVVUklDb21wb25lbnQoc3RhdGUpXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkaWNQZXJtaXNzaW9uSWQgPSAoYXdhaXQgc2V0dGluZy5iYXNlU2VydmljZS5nZXRTaGFyZWRLZXkoaXRlbVNoYXJlcykpLmRhdGE7XG4gICAgICAgIGlmICghZGljUGVybWlzc2lvbklkKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZygnQuG6oW4ga2jDtG5nIGPDsyBxdXnhu4FuIGNoaWEgc+G6uyBi4bqjbiBnaGknKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGF0aCA9ICcnO1xuICAgICAgICBpdGVtU2hhcmVzLmxzdEl0ZW1EYXRhLmZvckVhY2goaXRlbURhdGEgPT4ge1xuICAgICAgICAgICAgcGF0aCArPSBgJHtkaWNQZXJtaXNzaW9uSWRbaXRlbURhdGEuaXRlbUlkXX1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0TGlua1N0YXRlKHJvd0RhdGE6IGFueSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFNldHRpbmdzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgICAgICBjb25zdCBsb2NhbERhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5ERUZBVUxUX0RBVEEpO1xuICAgICAgICBpZiAobG9jYWxEYXRhICE9IG51bGwgJiYgbG9jYWxEYXRhICE9ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICB0cnlQYXJzZUpzb24oZGF0YTogYW55KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWU6IEpTT04ucGFyc2UoZGF0YSkgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogW10gfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRyeVBhcnNlTnVtYmVyKGRhdGE6IHN0cmluZywgZGVmYXVsdFZhbHVlID0gMCkge1xuICAgICAgICBjb25zdCBudW1iZXIgPSBwYXJzZUludChkYXRhKTtcbiAgICAgICAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWU6IGRlZmF1bHRWYWx1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogbnVtYmVyIH07XG4gICAgfVxuXG4gICAgY291bnRlcihpOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcnJheShpKTtcbiAgICB9XG59XG4iXX0=
605
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFD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QUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDbkQ7UUFDRCxPQUFPLENBQUMsRUFBRTtZQUNOLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztTQUN0QztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBWSxFQUFFLFlBQVksR0FBRyxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNmLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQztTQUNoRDtRQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTyxDQUFDLENBQVM7UUFDYixPQUFPLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7OztZQXhtQkosU0FBUzs7O1lBMUNVLFFBQVE7Ozs7MEJBNEN2QixLQUFLOzRCQUVMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBNb2RlbFNoYXJlTGlua0J5UGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2hhcmUtbGluay1ieS1wZXJtaXNzaW9uL21vZGVscy9zaGFyZS1saW5rLWJ5LXBlcm1pc3Npb24nO1xuaW1wb3J0IHsgVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRhbnRzJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgUGVybWlzc2lvbkJhc2UgfSBmcm9tICcuLi8uLi9lbnVtcy9jb21tb24nO1xuaW1wb3J0IHsgRXhwb3J0SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9leHBvcnQtaXRlbSc7XG5pbXBvcnQgeyBGaWx0ZXIsIFNvcnQsIFN0cmluZ0NvbXBhcmVPcHRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVY0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RlbXBsYXRlLXY0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90ZW1wbGF0ZWluc3RhbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0U3RyaW5nRGF0ZVZOIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGF0ZSc7XG5pbXBvcnQgeyBFeHBvcnRJdGVtVHlwZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIEFkZHJlc3NDb250cm9sU2NoZW1hLFxuICAgIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEsXG4gICAgQ2hlY2tib3hDb250cm9sU2NoZW1hLFxuICAgIENvQ2F1VG9DaHVjQ29udHJvbFNjaGVtYSxcbiAgICBDb0NhdVRvQ2h1Y1BpY2tlckNvbnRyb2xTY2hlbWEsXG4gICAgQ3J1ZExpc3RTZXR0aW5nLFxuICAgIERhdGVUaW1lQ29udHJvbFNjaGVtYSxcbiAgICBEcm9wZG93bkNvbnRyb2xTY2hlbWEsXG4gICAgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hLFxuICAgIEZpbGVVcGxvYWRDb250cm9sU2NoZW1hLFxuICAgIEZvcm1TY2hlbWFCYXNlLFxuICAgIE1vZGVsU2NoZW1hLFxuICAgIE9wZXJhdG9yLFxuICAgIFBvcHVwU2l6ZSxcbiAgICBTd2l0Y2hDb250cm9sU2NoZW1hLFxuICAgIFRhYmxlU2NoZW1hXG59IGZyb20gJy4uL2Zvcm0tc2NoZW1hJztcblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9WRVJTSU9OX1Y0ID0gNDtcbmV4cG9ydCBjb25zdCBFWFBPUlRfVkVSU0lPTl9WNSA9IDU7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIHBhcmVudE1vZGVsOiBhbnk7XG5cbiAgICBASW5wdXQoKSBzZXQgcGFyZW50Q29udGV4dCh2YWx1ZTogQ29tcG9uZW50Q29udGV4dFNlcnZpY2UpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucGFyZW50ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZ2V0IHBhcmVudENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQucGFyZW50O1xuICAgIH1cblxuICAgIG1vZGVsOiBhbnk7XG4gICAgbW9kZWxTY2hlbWE6IE1vZGVsU2NoZW1hW10gPSBbXTtcbiAgICBjb250ZXh0OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcbiAgICByb290TW9kZWw6IGFueTtcbiAgICByb290Q29udGV4dDogQ29tcG9uZW50Q29udGV4dFNlcnZpY2U7XG5cbiAgICBndWlkRW1wdHkgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbiAgICBwdWJsaWMgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT47XG4gICAgcHJvdGVjdGVkIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfYXBwQ29udGV4dDogQXBwbGljYXRpb25Db250ZXh0U2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX2NvbXBvbmVudENvbnRleHQ6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yO1xuICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlO1xuICAgIHByb3RlY3RlZCBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfZGF0ZVBpcGU6IERhdGVQaXBlO1xuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3RvciwgY29tcG9uZW50TmFtZT86IHN0cmluZykge1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG4gICAgICAgIHRoaXMuX2FwcENvbnRleHQgPSBpbmplY3Rvci5nZXQoQXBwbGljYXRpb25Db250ZXh0U2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHQgPSBpbmplY3Rvci5nZXQoQ29tcG9uZW50Q29udGV4dFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSA9IGluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KENydWRTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZSA9IGluamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fZGF0ZVBpcGUgPSBpbmplY3Rvci5nZXQoRGF0ZVBpcGUpO1xuXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9hcHBDb250ZXh0LmdldFJvb3RDb250ZXh0KCk7XG4gICAgICAgIGlmICghcm9vdCkge1xuICAgICAgICAgICAgdGhpcy5fYXBwQ29udGV4dC5hZGRSb290Q29udGV4dChcbiAgICAgICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0LFxuICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHQgPSB0aGlzLl9hcHBDb250ZXh0LmFkZENvbXBvbmVudENvbnRleHQodGhpcy5fY29tcG9uZW50Q29udGV4dCwgdGhpcy5fYWN0aXZhdGVkUm91dGUsIHRoaXMuZ2V0Q29tcG9uZW50SWQoKSk7XG4gICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5fY29tcG9uZW50Q29udGV4dC5kYXRhO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gdGhpcy5fY29tcG9uZW50Q29udGV4dDtcbiAgICAgICAgICAgIHRoaXMucm9vdENvbnRleHQgPSB0aGlzLl9jb21wb25lbnRDb250ZXh0LnJvb3Q7XG4gICAgICAgICAgICB0aGlzLnJvb3RNb2RlbCA9IHRoaXMucm9vdENvbnRleHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3VicyA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gZGVzdHJveVxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvLyBVbnN1YnNjcmliZSBmcm9tIGFsbCBzdWJzY3JpcHRpb25zXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQoMSk7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuY29tcG9uZW50U3Vicykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdWIgb2YgdGhpcy5tb2RlbC5jb21wb25lbnRTdWJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1Yikgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGVzdHJveUNvbnRleHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbXBvbmVudElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb21tb25TZXJ2aWNlLnJhbmRvbVN0cmluZygpO1xuICAgIH1cblxuICAgIHN1YnNjcmliZVJvb3QobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XG4gICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicy5wdXNoKHRoaXMucm9vdENvbnRleHQuc3Vic2NyaWJlKG5hbWUsIGNhbGxCYWNrKSk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlKG5hbWU6IHN0cmluZywgY2FsbEJhY2s6IGFueSkge1xuICAgICAgICB0aGlzLm1vZGVsLmNvbXBvbmVudFN1YnMucHVzaCh0aGlzLmNvbnRleHQuc3Vic2NyaWJlKG5hbWUsIGNhbGxCYWNrKSk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlT25jZShuYW1lOiBzdHJpbmcsIGNhbGxCYWNrOiBhbnkpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5jb21wb25lbnRTdWJzLnB1c2godGhpcy5jb250ZXh0LnN1YnNjcmliZU9uY2UobmFtZSwgY2FsbEJhY2spKTtcbiAgICB9XG5cbiAgICByZXBsYXlTdWJzY3JpYmUobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XG4gICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicy5wdXNoKHRoaXMuY29udGV4dC5yZXBsYXlTdWJzY3JpYmUobmFtZSwgY2FsbEJhY2spKTtcbiAgICB9XG5cbiAgICB0cmFja0J5RnVuY0RlZmF1bHQoaW5kZXgsIGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHRyYWNrQnlGdW5jSWQoaW5kZXgsIGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgaGFuZGxlUmVzcG9uc2UocmVzOiBSZXNwb25zZVJlc3VsdCwgbWVzc2FnZT86IHN0cmluZywgY2FsbEJhY2s/OiBGdW5jdGlvbiwgY2FsbEJhY2tFcnJvcj86IEZ1bmN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jcnVkU2VydmljZS5oYW5kbGVSZXNwb25zZShyZXMsIG1lc3NhZ2UsIGNhbGxCYWNrLCBjYWxsQmFja0Vycm9yKTtcbiAgICB9XG5cbiAgICBoYW5kbGVSZXNwb25zZVdpdGhXYWl0Qm94KHJlczogUmVzcG9uc2VSZXN1bHQsIG1lc3NhZ2U/OiBzdHJpbmcsIGNhbGxCYWNrPzogRnVuY3Rpb24sIGNhbGxCYWNrRXJyb3I/OiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLmhpZGVXYWl0Qm94KCk7XG4gICAgICAgIGlmICghcmVzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGlmIChyZXMuZXJyb3IgPT0gVmFsaWRhdGlvbi5FUlJfU1lTX0RFVikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgeOG6o3kgcmEuIExpw6puIGjhu4cgcXXhuqNuIHRy4buLIHZpw6puIMSR4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5tZXNzYWdlICE9IG51bGwgJiYgcmVzLm1lc3NhZ2UgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcocmVzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcocmVzLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2FsbEJhY2tFcnJvcikgY2FsbEJhY2tFcnJvcihyZXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93U3VjY2VzcyhtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbEJhY2spIGNhbGxCYWNrKHJlcyk7XG4gICAgfVxuXG4gICAgaXNOb3ROdWxsQXJyYXkoYXJyKSB7XG4gICAgICAgIHJldHVybiBhcnIgIT0gbnVsbCAmJiBhcnIubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBmdW5jU29ydERlZmF1bHQoYSwgYikge1xuICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA9PSBiKSByZXR1cm4gMDtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8vIGFkZEV4cG9ydEpvYihqb2I6IEV4cG9ydEpvYikge1xuICAgIC8vICAgICB0aGlzLmNvbnRleHQuYWRkRXhwb3J0Sm9iKGpvYik7XG4gICAgLy8gfVxuXG4gICAgZXhwb3J0KGRhdGE6IEV4cG9ydEl0ZW0sIHZlcnNpb24gPSBFWFBPUlRfVkVSU0lPTl9WNCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ2V4cG9ydCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gICAgICAgIHN3aXRjaCAodmVyc2lvbikge1xuICAgICAgICAgICAgY2FzZSBFWFBPUlRfVkVSU0lPTl9WNDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRWNChkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRVhQT1JUX1ZFUlNJT05fVjU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0VjUoZGF0YSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEV4cG9ydCB2ZXJzaW9uOiAke3ZlcnNpb259IGlzIG5vdCBzdXBwb3J0ZWQhYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0RXhjZWxWNShkYXRhOiBhbnksIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBzaGVldCA9IG5ldyBFeHBvcnRJdGVtKHtcbiAgICAgICAgICAgIHR5cGU6IEV4cG9ydEl0ZW1UeXBlLkV4Y2VsU2hlZXQsXG4gICAgICAgICAgICB0ZW1wbGF0ZUNvZGUsXG4gICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShkYXRhKSxcbiAgICAgICAgICAgIG5hbWU6ICdTaGVldDEnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRXhwb3J0SXRlbSh7XG4gICAgICAgICAgICB0eXBlOiBFeHBvcnRJdGVtVHlwZS5FeGNlbEZpbGUsXG4gICAgICAgICAgICBuYW1lOiBmaWxlTmFtZVxuICAgICAgICB9KTtcbiAgICAgICAgZmlsZS5jaGlsZHJlbiA9IFtzaGVldF07XG4gICAgICAgIHJldHVybiB0aGlzLmV4cG9ydChmaWxlLCBFWFBPUlRfVkVSU0lPTl9WNSk7XG4gICAgfVxuXG4gICAgZXhwb3J0VjQoZGF0YTogRXhwb3J0SXRlbSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVWNFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVGVtcGxhdGVWNFNlcnZpY2UpO1xuICAgICAgICByZXR1cm4gdGVtcGxhdGVWNFNlcnZpY2UuZXhwb3J0Tm9ybWFsKGRhdGEpO1xuICAgIH1cblxuICAgIGV4cG9ydFY1KGRhdGE6IEV4cG9ydEl0ZW0pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlLmV4cG9ydE5vcm1hbChkYXRhKTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXJDb250YWluZXIobG9naWM6ICdhbmQnIHwgJ29yJywgLi4uZmlsdGVyczogRmlsdGVyW10pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgbG9naWMsXG4gICAgICAgICAgICBmaWx0ZXJzOiBbLi4uZmlsdGVyc11cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IGFueSwgdmFsdWVJc0ZpZWxkOiBib29sZWFuID0gZmFsc2UsIHN0cmluZ0NvbXBhcmVPcHRpb246IFN0cmluZ0NvbXBhcmVPcHRpb24gPSBTdHJpbmdDb21wYXJlT3B0aW9uLk5vcm1hbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29tbW9uU2VydmljZS5uZXdGaWx0ZXIoZmllbGQsIG9wZXJhdG9yLCB2YWx1ZSwgdmFsdWVJc0ZpZWxkLCBzdHJpbmdDb21wYXJlT3B0aW9uKTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXJWNChmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQsIG9wZXJhdG9yLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3QmluZGluZ0ZpbHRlcihjb2x1bW46IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCBzb3VyY2VGaWVsZDogc3RyaW5nLCBzdWJGaWVsZD86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBmaWVsZDogY29sdW1uLFxuICAgICAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgICAgICBzb3VyY2VGaWVsZCxcbiAgICAgICAgICAgIHN1YkZpZWxkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld1NvcnQoZmllbGQ6IHN0cmluZywgZGlyOiAxIHwgLTEgPSAxKSB7XG4gICAgICAgIHJldHVybiBuZXcgU29ydCh7IGZpZWxkLCBkaXIgfSk7XG4gICAgfVxuXG4gICAgbmV3UG9wdXBTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBtYXhpbWl6ZSA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUG9wdXBTaXplKHtcbiAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIG1heGltaXplXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNob3dXYWl0Qm94KG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuU0hPV19XQUlUX0JPWCwge1xuICAgICAgICAgICAgc2hvdzogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2VcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGlkZVdhaXRCb3goKSB7XG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULlNIT1dfV0FJVF9CT1gsIHtcbiAgICAgICAgICAgIHNob3c6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvcHlUb0NsaXBib2FyZCA9IHN0ciA9PiB7XG4gICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICAgICAgZWwudmFsdWUgPSBzdHI7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAnJyk7XG4gICAgICAgIGVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgZWwuc3R5bGUubGVmdCA9ICctOTk5OXB4JztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7XG4gICAgICAgIGVsLnNlbGVjdCgpO1xuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsKTtcbiAgICB9O1xuXG4gICAgYWRkRGlzdGluY3QobHN0LCB2YWx1ZSkge1xuICAgICAgICBpZiAobHN0LmluZGV4T2YodmFsdWUpID09IC0xKSB7XG4gICAgICAgICAgICBsc3QucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGREaXN0aW5jdExpc3QobHN0LCBsc3RWYWx1ZSkge1xuICAgICAgICBpZiAoIWxzdFZhbHVlIHx8ICFsc3RWYWx1ZS5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgbHN0VmFsdWUuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAobHN0LmluZGV4T2YodmFsdWUpID09IC0xKSB7XG4gICAgICAgICAgICAgICAgbHN0LnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIENvbnZlcnQgMSBhcnJheSA9PiBOIGFycmF5XG4gICAgKiBAcGFyYW0gbHN0IE3huqNuZyBwaOG6p24gdOG7rVxuICAgICogQHBhcmFtIGZpZWxkcyBN4bqjbmcgY8OhYyBmaWVsZCwgbuG6v3UgZmllbGQgbMOgIGtp4buDdSBhcnJheSB0aMOsIG5naMSpYSBsw6AgbcO6biBtYXAgZGlzdGluY3RcbiAgICAqIEByZXR1cm5zIE4gQXJyYXlcbiAgICAqL1xuICAgIG11bHRpcGxlTWFwKGxzdCwgLi4uZmllbGRzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBjb25zdCBmdW5jcyA9IFtdO1xuICAgICAgICBjb25zdCByYXdGaWVsZHMgPSBbXTtcbiAgICAgICAgY29uc3QgX3B1c2ggPSAobHN0LCB2YWx1ZSkgPT4gbHN0LnB1c2godmFsdWUpO1xuICAgICAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChbXSk7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBmdW5jcy5wdXNoKHRoaXMuYWRkRGlzdGluY3QpO1xuICAgICAgICAgICAgICAgIHJhd0ZpZWxkcy5wdXNoKGZpZWxkWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZ1bmNzLnB1c2goX3B1c2gpO1xuICAgICAgICAgICAgICAgIHJhd0ZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmF3RmllbGRzLmZvckVhY2goKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGZ1bmNzW2luZGV4XShyZXN1bHRbaW5kZXhdLCBpdGVtW2ZpZWxkXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYXN5bmMgX3ByaW50UGRmKGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZSwgaWQ6IHN0cmluZywgcm93RGF0YTogYW55KSB7XG4gICAgICAgIGNvbnN0IGl0ZW1EZXRhaWwgPSAoYXdhaXQgYmFzZVNlcnZpY2UuZ2V0RGV0YWlsKGlkKSkuZGF0YTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGJhc2VTZXJ2aWNlLmdldERhdGFUcmluaEt5KGl0ZW1EZXRhaWwsIHJvd0RhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJpbnRQZGZCYXNlKGJhc2VTZXJ2aWNlLCBpZCwgZGF0YSk7XG4gICAgfVxuXG4gICAgYXN5bmMgX3ByaW50UGRmQnlTY2hlbWEoYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlLCBtb2RlbDogYW55LCBzY2hlbWFzOiBGb3JtU2NoZW1hQmFzZVtdKSB7XG4gICAgICAgIGNvbnN0IHRtcE1vZGVsID0geyAuLi5tb2RlbCB9O1xuICAgICAgICBkZWxldGUgdG1wTW9kZWwucHJpbnRGaWxlSWQ7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBbXTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZ2V0S2V5VmFsdWUoZGF0YSwgJycsIHNjaGVtYXMsIHRtcE1vZGVsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByaW50UGRmQmFzZShiYXNlU2VydmljZSwgbW9kZWwuaWQsIGRhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3ByaW50UGRmQmFzZShiYXNlU2VydmljZTogQmFzZVNlcnZpY2UsIGlkOiBzdHJpbmcsIGRhdGE6IGFueVtdKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYmFzZVNlcnZpY2UuZXhwb3J0VG9QZGYoaWQsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICB0aWV1RGU6IGJhc2VTZXJ2aWNlLm9iamVjdE5hbWUsXG4gICAgICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJldHVybiA8UmVzcG9uc2VSZXN1bHQ+e1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDw7MgbOG7l2kgeOG6o3kgcmEnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRMYWJlbChwcmVmaXg6IHN0cmluZywgbGFiZWw6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7bGFiZWx9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRWYWx1ZUZyb21EYXRhc291cmNlKGl0ZW1TZWxlY3RlZDogYW55LCBpc011bHRpcGxlOiBib29sZWFuLCBmdW5jR2V0TGFiZWw6IChpdGVtKSA9PiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmIChpdGVtU2VsZWN0ZWQgJiYgaXRlbVNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW1TZWxlY3RlZC5tYXAocSA9PiBmdW5jR2V0TGFiZWwocS52YWx1ZSkpLmpvaW4oJywgJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXRlbVNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBmdW5jR2V0TGFiZWwoaXRlbVNlbGVjdGVkLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgYXN5bmMgX2dldEtleVZhbHVlKHJlc3VsdDogYW55W10sIHByZWZpeDogc3RyaW5nLCBzY2hlbWFzOiBGb3JtU2NoZW1hQmFzZVtdLCBtb2RlbDogYW55KSB7XG4gICAgICAgIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICAgICAgICAgIGlmICghc2NoZW1hLmhpZGRlblxuICAgICAgICAgICAgICAgICYmIHNjaGVtYS5maWVsZCAhPSAncHJpbnRGaWxlSWQnXG4gICAgICAgICAgICAgICAgJiYgc2NoZW1hLmxhYmVsXG4gICAgICAgICAgICAgICAgJiYgIShzY2hlbWEgaW5zdGFuY2VvZiBGaWxlVXBsb2FkQ29udHJvbFNjaGVtYSlcbiAgICAgICAgICAgICAgICAmJiAhKHNjaGVtYSBpbnN0YW5jZW9mIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG1vZGVsW3NjaGVtYS5maWVsZF07XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRMYWJlbChwcmVmaXgsIHNjaGVtYS5sYWJlbCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wU2NoZW1hID0gPFRhYmxlU2NoZW1hPnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHZhbHVlID0gW107XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsKHByZWZpeCwgc2NoZW1hLmxhYmVsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByb3dEYXRhIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZ2V0S2V5VmFsdWUocmVzdWx0LCBgJHtwcmVmaXh9XFx0YCwgdG1wU2NoZW1hLnJvd1RlbXBsYXRlLCByb3dEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zcGxpY2UocmVzdWx0Lmxlbmd0aCAtIDEsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIEFkZHJlc3NDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcFNjaGVtYSA9IDxBZGRyZXNzQ29udHJvbFNjaGVtYT5zY2hlbWE7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsKHByZWZpeCwgc2NoZW1hLmxhYmVsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9nZXRLZXlWYWx1ZShyZXN1bHQsIGAke3ByZWZpeH1cXHRgLCB0bXBTY2hlbWEuX2NvbXBvbmVudC5zZXR0aW5nLnNjaGVtYSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIERhdGVUaW1lQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRTdHJpbmdEYXRlVk4odmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIENvQ2F1VG9DaHVjUGlja2VyQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVNlbGVjdGVkID0gYXdhaXQgc2NoZW1hLl9jb21wb25lbnQuY29udHJvbFBpY2tlci5fY29tcG9uZW50LmdldERhdGFTZWxlY3RlZFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcFNjaGVtYSA9IDxDb0NhdVRvQ2h1Y1BpY2tlckNvbnRyb2xTY2hlbWE+c2NoZW1hO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1bmNHZXRMYWJlbCA9IHRtcFNjaGVtYS5mdW5jR2V0TGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZVt0bXBTY2hlbWEuZGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZUZyb21EYXRhc291cmNlKGl0ZW1TZWxlY3RlZCwgc2NoZW1hLm11bHRpcGxlLCBpdGVtID0+IGl0ZW0udGVuKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpdGVtU2VsZWN0ZWQubWFwKHEgPT4gdG1wU2NoZW1hLmZ1bmNHZXRMYWJlbChxLnZhbHVlKSkuam9pbignLCAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXRlbVNlbGVjdGVkLm1hcChxID0+IHEudmFsdWVbdG1wU2NoZW1hLmRpc3BsYXlGaWVsZF0pLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0TGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2NoZW1hLmZ1bmNHZXRMYWJlbChpdGVtU2VsZWN0ZWQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpdGVtU2VsZWN0ZWQudmFsdWVbc2NoZW1hLmRpc3BsYXlGaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVNlbGVjdGVkID0gYXdhaXQgc2NoZW1hLl9jb21wb25lbnQuZ2V0RGF0YVNlbGVjdGVkVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wU2NoZW1hID0gPEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWE+c2NoZW1hO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1bmNHZXRMYWJlbCA9IHRtcFNjaGVtYS5mdW5jR2V0TGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdG1wU2NoZW1hLmRpc3BsYXlGaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlRnJvbURhdGFzb3VyY2UoaXRlbVNlbGVjdGVkLCBzY2hlbWEubXVsdGlwbGUsIGZ1bmNHZXRMYWJlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQ29DYXVUb0NodWNDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0bXBTY2hlbWEgPSA8Q29DYXVUb0NodWNDb250cm9sU2NoZW1hPnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4gaXRlbS5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhU291cmNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpdGVtU2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcFNjaGVtYS5fY29tcG9uZW50Lm11bHRpU2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHRtcFNjaGVtYS5fY29tcG9uZW50Lm11bHRpU2VsZWN0Ll9vcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IGRhdGFTb3VyY2UuZmlsdGVyKHEgPT4gdmFsdWUuaW5kZXhPZih4ID0+IHggPT0gcS52YWx1ZSkpLm1hcChxID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHRtcFNjaGVtYS5fY29tcG9uZW50LmRyb3Bkb3duLl9vcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IGRhdGFTb3VyY2UuZmluZChxID0+IHEudmFsdWUgPT0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdGVkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1TZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZ2V0VmFsdWVGcm9tRGF0YXNvdXJjZShpdGVtU2VsZWN0ZWQsIHNjaGVtYS5tdWx0aXBsZSwgZnVuY0dldExhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcFNjaGVtYSA9IDxEcm9wZG93bkNvbnRyb2xTY2hlbWE+c2NoZW1hO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW1TZWxlY3RlZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdGVkID0gc2NoZW1hLl9jb21wb25lbnQuZGF0YVNvdXJjZUludGVybmFsLmZpbHRlcihxID0+IHZhbHVlLmluZGV4T2YoeCA9PiB4ID09IHEudmFsdWVbcS52YWx1ZS5fZHJvcGRvd252YWx1ZV0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IHNjaGVtYS5fY29tcG9uZW50LmRhdGFTb3VyY2VJbnRlcm5hbC5maW5kKHEgPT4gcS52YWx1ZVtxLnZhbHVlLl9kcm9wZG93bnZhbHVlXSA9PSB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlRnJvbURhdGFzb3VyY2UoaXRlbVNlbGVjdGVkLCBzY2hlbWEubXVsdGlwbGUsIHRtcFNjaGVtYS5mdW5jR2V0TGFiZWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIENoZWNrYm94Q29udHJvbFNjaGVtYSB8fCBzY2hlbWEgaW5zdGFuY2VvZiBTd2l0Y2hDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAnS2jDtG5nJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gJ0PDsyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gVmFsdWUgPSB1bmRlZmluZWQgdGjDrCBraGkgc2VyaWFsaXplIHPhur0gYuG7iyBt4bqldCBwcm9wXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsKHByZWZpeCwgc2NoZW1hLmxhYmVsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldFN0cmluZ0RhdGUodmFsdWUpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdkZC9NTS95eXl5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnZGQvTU0veXl5eScpO1xuICAgIH1cblxuICAgIC8vIGh0dHA6Ly9sb2NhbGhvc3Q6MjcyMzAvdW5pdmVyc2FsLWxpbms/c2VydmljZUNvZGU9Y29uZ3ZpZWMmZW50aXR5PURNX1ByaW9yaXR5JmVudGl0eUtleT0wOTExZjNlNy0zZGIwLTRiNjgtODdjZC0wN2Q0MjU3NDFlOWUmc3RhdGU9JnNvdXJjZVBhdGg9aHR0cDovL2xvY2FsaG9zdDoyNzIzMC9kbS1wcmlvcml0eVxuICAgIHBhcnNlQXR0YWNoTGluayhjb250ZW50KSB7XG4gICAgICAgIGNvbnN0IGxpbmtzID0gY29udGVudC5zcGxpdCgnXFxyXFxuJyk7XG4gICAgICAgIGNvbnN0IG9wID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgICAgICAgY29uc3QgYXJyID0gbGluay5zcGxpdCgnPycpO1xuICAgICAgICAgICAgaWYgKGFyci5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcCA9IGFyclsxXTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMucGFyc2VRdWVyeVN0cmluZyh0ZW1wKTtcbiAgICAgICAgICAgICAgICBpZiAocXVlcnkgJiYgcXVlcnkuc2VydmljZUNvZGUgJiYgcXVlcnkuZW50aXR5ICYmIHF1ZXJ5LmVudGl0eUtleSkge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeS5yYXdMaW5rID0gbGluaztcbiAgICAgICAgICAgICAgICAgICAgb3AucHVzaChxdWVyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYGxpbmsgJHtsaW5rfSBpbnZhbGlkIHRvIHBhcnNlYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlUXVlcnlTdHJpbmcocXVlcnk6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGlmICghcXVlcnkpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAocXVlcnkuc3RhcnRzV2l0aCgnPycpKSBxdWVyeSA9IHF1ZXJ5LnN1YnN0cmluZygxKTtcbiAgICAgICAgY29uc3QgYXJyID0gcXVlcnkuc3BsaXQoJyYnKTtcbiAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBpdGVtLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgICBpZiAodGVtcFsxXSkge1xuICAgICAgICAgICAgICAgIG9ialt0ZW1wWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudCh0ZW1wWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9ialt0ZW1wWzBdXSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRDb3B5UGF0aChzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIHJvd0RhdGE6IGFueSwgcGVybWlzc2lvbjogUGVybWlzc2lvbkJhc2UgPSBQZXJtaXNzaW9uQmFzZS5SRUFEKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1TaGFyZXM6IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uID0gbmV3IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uKCk7XG4gICAgICAgIGl0ZW1TaGFyZXMubGlua1RvTWVudSA9IGAke3RvcC5sb2NhdGlvbi5vcmlnaW59JHt0b3AubG9jYXRpb24ucGF0aG5hbWV9YDtcbiAgICAgICAgaXRlbVNoYXJlcy5zb3VyY2VQYXRoID0gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHRvcC5sb2NhdGlvbi5ocmVmKX1gO1xuICAgICAgICBpdGVtU2hhcmVzLnRhcmdldFBhdGggPSBgJHtlbmNvZGVVUklDb21wb25lbnQoc2V0dGluZy50YXJnZXRQYXRoKX1gO1xuICAgICAgICBpdGVtU2hhcmVzLm9iamVjdERpc3BsYXlOYW1lID0gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHNldHRpbmcub2JqZWN0TmFtZSl9YDtcbiAgICAgICAgbGV0IGRpc3BsYXlGaWVsZCA9ICcnO1xuICAgICAgICBpZiAoc2V0dGluZy5nZXREaXNwbGF5TmFtZUluU2VydmVyKSB7XG4gICAgICAgICAgICBkaXNwbGF5RmllbGQgPSAnaWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNldHRpbmcuZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkID0gdGhpcy5fY29tbW9uU2VydmljZS5pc1N0cmluZyhzZXR0aW5nLmRpc3BsYXlGaWVsZCkgPyBzZXR0aW5nLmRpc3BsYXlGaWVsZCA6IChzZXR0aW5nLmRpc3BsYXlGaWVsZCBhcyBhbnkpKHJvd0RhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFkaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rQ29sdW1uID0gc2V0dGluZy5jb2xzLmZpbmQoeCA9PiB4LnNob3dFZGl0TGluayk7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmtDb2x1bW4gJiYgIWxpbmtDb2x1bW4ucmF3Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZCA9IGxpbmtDb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFkaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQgPSAnaWQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGl0ZW1TaGFyZXMuZGlzcGxheUZpZWxkID0gZGlzcGxheUZpZWxkO1xuICAgICAgICBpdGVtU2hhcmVzLmxzdEl0ZW1EYXRhID0gW107XG4gICAgICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgdGhpcy5nZXRMaW5rU3RhdGUocm93RGF0YSk7XG4gICAgICAgIGl0ZW1TaGFyZXMubHN0SXRlbURhdGEucHVzaCh7XG4gICAgICAgICAgICBpdGVtSWQ6IHJvd0RhdGEuaWQsXG4gICAgICAgICAgICBwZXJtaXNzaW9uLFxuICAgICAgICAgICAgc3RhdGU6IGVuY29kZVVSSUNvbXBvbmVudChzdGF0ZSlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRpY1Blcm1pc3Npb25JZCA9IChhd2FpdCBzZXR0aW5nLmJhc2VTZXJ2aWNlLmdldFNoYXJlZEtleShpdGVtU2hhcmVzKSkuZGF0YTtcbiAgICAgICAgaWYgKCFkaWNQZXJtaXNzaW9uSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKCdC4bqhbiBraMO0bmcgY8OzIHF1eeG7gW4gY2hpYSBz4bq7IGLhuqNuIGdoaScpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwYXRoID0gJyc7XG4gICAgICAgIGl0ZW1TaGFyZXMubHN0SXRlbURhdGEuZm9yRWFjaChpdGVtRGF0YSA9PiB7XG4gICAgICAgICAgICBwYXRoICs9IGAke2RpY1Blcm1pc3Npb25JZFtpdGVtRGF0YS5pdGVtSWRdfVxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRMaW5rU3RhdGUocm93RGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0U2V0dGluZ3MoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgICAgIGNvbnN0IGxvY2FsRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkRFRkFVTFRfREFUQSk7XG4gICAgICAgIGlmIChsb2NhbERhdGEgIT0gbnVsbCAmJiBsb2NhbERhdGEgIT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHRyeVBhcnNlSnNvbihkYXRhOiBhbnkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogSlNPTi5wYXJzZShkYXRhKSB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlOiBbXSB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJ5UGFyc2VOdW1iZXIoZGF0YTogc3RyaW5nLCBkZWZhdWx0VmFsdWUgPSAwKSB7XG4gICAgICAgIGNvbnN0IG51bWJlciA9IHBhcnNlSW50KGRhdGEpO1xuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdFZhbHVlIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlOiBudW1iZXIgfTtcbiAgICB9XG5cbiAgICBjb3VudGVyKGk6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IEFycmF5KGkpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1saXN0LWNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jbGFzc2VzL2Jhc2UvaS1saXN0LWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JpZEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IENvbHVtblNjaGVtYUJhc2UgfSBmcm9tICcuLi9mb3JtLXNjaGVtYSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpc3RDb21wb25lbnQge1xuICAgIHByb2Nlc3NCYXNlRGF0YTogRnVuY3Rpb247XG4gICAgZm9ybWF0Q29sdW1uczogKGNvbHM6IENvbHVtblNjaGVtYUJhc2VbXSkgPT4gdm9pZDtcbiAgICBidWlsZEZpbHRlckNvbHVtbjogKGNvbHM6IENvbHVtblNjaGVtYUJhc2VbXSkgPT4gdm9pZDtcbiAgICBnZXRHcmlkSW5mbzogKCkgPT4gR3JpZEluZm87XG4gICAgYWRqdXN0UG9zaXRpb25Mb2FkaW5nTWFzazogKCkgPT4gdm9pZDtcbiAgICByZWxvYWQ6ICgpID0+IHZvaWQ7XG4gICAgY2hlY2tJc0luc2lkZURpYWxvZzogKCkgPT4gYm9vbGVhbjtcbiAgICBnZXRCdXR0b25Db250ZXh0OiAocm93RGF0YTogYW55KSA9PiBQcm9taXNlPGFueVtdPjtcblxuICAgIHNldEluaXRGaWx0ZXIoZmlsdGVyRGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk7XG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1saXN0LWNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jbGFzc2VzL2Jhc2UvaS1saXN0LWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JpZEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IENvbHVtblNjaGVtYUJhc2UgfSBmcm9tICcuLi9mb3JtLXNjaGVtYSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpc3RDb21wb25lbnQge1xuICAgIHByb2Nlc3NCYXNlRGF0YTogRnVuY3Rpb247XG4gICAgc2V0QnRuUmVhZHk6IChpc1JlYWR5OiBib29sZWFuKSA9PiB2b2lkO1xuICAgIGZvcm1hdENvbHVtbnM6IChjb2xzOiBDb2x1bW5TY2hlbWFCYXNlW10pID0+IHZvaWQ7XG4gICAgc2V0QXV0aG9yaXplQnV0dG9uOiAobHN0QnV0dG9uVGVtcGxhdGU6IEVsZW1lbnRSZWZbXSkgPT4gdm9pZDtcbiAgICBidWlsZEZpbHRlckNvbHVtbjogKGNvbHM6IENvbHVtblNjaGVtYUJhc2VbXSkgPT4gdm9pZDtcbiAgICBnZXRHcmlkSW5mbzogKCkgPT4gR3JpZEluZm87XG4gICAgYWRqdXN0UG9zaXRpb25Mb2FkaW5nTWFzazogKCkgPT4gdm9pZDtcbiAgICByZWxvYWQ6ICgpID0+IHZvaWQ7XG4gICAgY2hlY2tJc0luc2lkZURpYWxvZzogKCkgPT4gYm9vbGVhbjtcbiAgICBnZXRCdXR0b25Db250ZXh0OiAocm93RGF0YTogYW55KSA9PiBQcm9taXNlPGFueVtdPjtcblxuICAgIHNldEluaXRGaWx0ZXIoZmlsdGVyRGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk7XG59XG4iXX0=