@quadrel-enterprise-ui/framework 18.31.4 → 18.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/esm2022/lib/comments/add-comment/add-comment-dialog.component.mjs +3 -4
  2. package/esm2022/lib/forms/checkbox-chips/checkbox-chips.component.mjs +3 -3
  3. package/esm2022/lib/forms/checkboxes/checkboxes.component.mjs +3 -3
  4. package/esm2022/lib/forms/datepicker/datepicker.component.mjs +3 -3
  5. package/esm2022/lib/forms/dropdown/dropdown.component.mjs +3 -3
  6. package/esm2022/lib/forms/file-upload/file-upload.component.mjs +3 -3
  7. package/esm2022/lib/forms/input/input.component.mjs +3 -3
  8. package/esm2022/lib/forms/multi-input/multi-input.component.mjs +3 -3
  9. package/esm2022/lib/forms/pin-code/pin-code.component.mjs +3 -3
  10. package/esm2022/lib/forms/radio-buttons/radio-buttons.component.mjs +3 -3
  11. package/esm2022/lib/forms/richtext/richtext.component.mjs +3 -3
  12. package/esm2022/lib/forms/switches/switches.component.mjs +3 -3
  13. package/esm2022/lib/forms/textarea/textarea.component.mjs +3 -3
  14. package/esm2022/lib/page/object-header/page-object-header.component.mjs +8 -4
  15. package/esm2022/lib/page/page.component.mjs +8 -2
  16. package/esm2022/lib/page/shared/services/form-group-manager.service.mjs +59 -14
  17. package/esm2022/lib/page/shared/services/page-submit-action.service.mjs +4 -2
  18. package/esm2022/lib/quick-edit/quick-edit.component.mjs +2 -2
  19. package/esm2022/lib/table/store/table.reducer.mjs +1 -1
  20. package/fesm2022/quadrel-enterprise-ui-framework.mjs +103 -47
  21. package/fesm2022/quadrel-enterprise-ui-framework.mjs.map +1 -1
  22. package/lib/comments/add-comment/add-comment-dialog.component.d.ts +0 -4
  23. package/lib/comments/add-comment/add-comment-dialog.component.d.ts.map +1 -1
  24. package/lib/page/object-header/page-object-header.component.d.ts.map +1 -1
  25. package/lib/page/page.component.d.ts +1 -0
  26. package/lib/page/page.component.d.ts.map +1 -1
  27. package/lib/page/shared/services/form-group-manager.service.d.ts +10 -0
  28. package/lib/page/shared/services/form-group-manager.service.d.ts.map +1 -1
  29. package/lib/page/shared/services/page-submit-action.service.d.ts +1 -0
  30. package/lib/page/shared/services/page-submit-action.service.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/esm2022/index.mjs +0 -74
  33. package/esm2022/lib/table/__mocks__/mock-secondary-actions.service.mjs +0 -26
  34. package/index.d.ts.map +0 -1
  35. package/lib/table/__mocks__/mock-secondary-actions.service.d.ts +0 -14
  36. package/lib/table/__mocks__/mock-secondary-actions.service.d.ts.map +0 -1
@@ -444,6 +444,7 @@ export class QdPageComponent {
444
444
  projectionGuardMessage = 'QD-UI | QdPage - This content is not supported. Please use QdSectionAdapterDirective for custom content projection.';
445
445
  _isInitialized = false;
446
446
  _destroyed$ = new Subject();
447
+ _cancelSubmitValidation$ = new Subject();
447
448
  get isControlPanelVisible() {
448
449
  return this.controlPanel !== undefined && this.controlPanel.config?.isHidden !== true;
449
450
  }
@@ -563,6 +564,10 @@ export class QdPageComponent {
563
564
  ]);
564
565
  }
565
566
  updateInspectPageOperationMode(pageTypeConfig, mode) {
567
+ if (mode === 'view') {
568
+ this.formGroupManagerService.cancelPendingAsyncValidation();
569
+ setTimeout(() => this.formGroupManagerService.cancelPendingAsyncValidation());
570
+ }
566
571
  this.submitActionService.setSubmitActionForInspect(pageTypeConfig, mode === 'view');
567
572
  this.footerService.updateActions([
568
573
  { actionKey: 'submit', partialAction: { isVisible: mode === 'view' && !pageTypeConfig?.submit?.isHidden } }
@@ -589,9 +594,10 @@ export class QdPageComponent {
589
594
  .subscribe();
590
595
  }
591
596
  initSubmitValidation() {
597
+ this._cancelSubmitValidation$.next();
592
598
  this.formGroupManagerService
593
599
  .$areFormGroupsValid()
594
- .pipe(takeUntil(this._destroyed$), tap(isValid => {
600
+ .pipe(takeUntil(this._cancelSubmitValidation$), takeUntil(this._destroyed$), tap(isValid => {
595
601
  const submitDisabledInfoText = this.config.pageType === 'inspect' ? this.config.pageTypeConfig?.submit?.disabledInfo : undefined;
596
602
  this.footerService.updateActions([
597
603
  {
@@ -670,4 +676,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
670
676
  type: HostBinding,
671
677
  args: ['class.has-info-banners']
672
678
  }] } });
673
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3FkLXVpL3NyYy9saWIvcGFnZS9wYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9wYWdlL3BhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDeEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDL0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDakksT0FBTyxFQUFFLDJCQUEyQixF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QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFJbEUsb0JBQW9CO3NCQURuQixZQUFZO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFJL0QsV0FBVztzQkFEVixlQUFlO3VCQUFDLHlCQUF5QjtnQkF3QnRDLGFBQWE7c0JBRGhCLFdBQVc7dUJBQUMsa0JBQWtCO2dCQU0zQixjQUFjO3NCQURqQixXQUFXO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kaWFsb2cnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtYXAsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBRRF9TQUZFX0JPVFRPTV9PRkZTRVQgfSBmcm9tICcuLi9jb3JlL2NvcmUubW9kdWxlJztcbmltcG9ydCB7IFFkRGlhbG9nU2VydmljZSwgUWREaWFsb2dTaXplIH0gZnJvbSAnLi4vZGlhbG9nL2RpYWxvZy5tb2R1bGUnO1xuaW1wb3J0IHsgUWRQYWdlU3RlcHBlckFkYXB0ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9wYWdlLXN0ZXBwZXIvYWRhcHRvcnMvcGFnZS1zdGVwcGVyLWFkYXB0ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IFFkUGFnZVN0ZXBwZXJDb21wb25lbnQgfSBmcm9tICcuLi9wYWdlLXN0ZXBwZXIvcGFnZS1zdGVwcGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRZFBhZ2VUYWJzQWRhcHRlckRpcmVjdGl2ZSB9IGZyb20gJy4uL3BhZ2UtdGFicy9hZGFwdG9ycy9wYWdlLXRhYnMtYWRhcHRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUWRQYWdlVGFic0NvbXBvbmVudCB9IGZyb20gJy4uL3BhZ2UtdGFicy9wYWdlLXRhYnMuY29tcG9uZW50JztcbmltcG9ydCB7IFFkU2VjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL3NlY3Rpb24vc2VjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgUWRQYWdlQ2FuY2VsQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jYW5jZWwtY29uZmlybWF0aW9uLWRpYWxvZy9wYWdlLWNhbmNlbC1jb25maXJtYXRpb24tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRZFBhZ2VDb250cm9sUGFuZWxDb21wb25lbnQgfSBmcm9tICcuL2NvbnRyb2wtcGFuZWwvcGFnZS1jb250cm9sLXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRZFBhZ2VJbmZvQmFubmVyQ29tcG9uZW50IH0gZnJvbSAnLi9pbmZvLWJhbm5lci9wYWdlLWluZm8tYmFubmVyLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBRZEluc3BlY3RPcGVyYXRpb25Nb2RlLFxuICBRZFBhZ2VDb25maWcsXG4gIFFkUGFnZVR5cGVDcmVhdGVDb25maWcsXG4gIFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnXG59IGZyb20gJy4vbW9kZWwvcGFnZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFFkQ3JlYXRlRm9vdGVyQWN0aW9uS2V5LCBRZEZvb3RlckFjdGlvblR5cGUsIFFkUGFnZUZvb3RlckFjdGlvbiB9IGZyb20gJy4vbW9kZWwvcGFnZS1mb290ZXItYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBRZEZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvc2VydmljZXMvZm9ybS1ncm91cC1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRQYWdlRm9vdGVyU2VydmljZSB9IGZyb20gJy4vc2hhcmVkL3NlcnZpY2VzL3BhZ2UtZm9vdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRQYWdlU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvc2VydmljZXMvcGFnZS1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFFkUGFnZVN1Ym1pdEFjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcy9wYWdlLXN1Ym1pdC1hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBRZFJlc29sdmVyVHJpZ2dlclNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcy9yZXNvbHZlci10cmlnZ2VyLnNlcnZpY2UnO1xuXG50eXBlIFBhcnRpYWxGb290ZXJBY3Rpb24gPSB7IGFjdGlvbktleTogUWRDcmVhdGVGb290ZXJBY3Rpb25LZXk7IHBhcnRpYWxBY3Rpb246IFBhcnRpYWw8UWRQYWdlRm9vdGVyQWN0aW9uPiB9O1xuXG4vLyBGb290ZXIgb2Zmc2V0IChweCkuIEtlZXAgaW4gc3luYyB3aXRoIFNDU1MgJHBhZ2UtZm9vdGVyLWhlaWdodCFcbmNvbnN0IFNBRkVfQk9UVE9NX09GRlNFVF9QWCA9IDY0O1xuXG4vKipcbiAqICoqUWRQYWdlKiogc2VydmVzIGFzIHRoZSBjZW50cmFsIHN0cnVjdHVyYWwgZWxlbWVudCB3aXRoaW4gdGhlIGhpZXJhcmNoeSB1bmRlciB0aGUgKipRZFNoZWxsKiouXG4gKiBJbnRlZ3JhdGlvbiBpcyBkb25lIHRocm91Z2ggdGhlIEFuZ3VsYXIgUm91dGluZyBNb2R1bGUsIGFuZCBRZFBhZ2UgaXMgZGVzaWduZWQgdG8gYmUgcmVzcG9uc2l2ZSBhY3Jvc3MgdmFyaW91cyBzY3JlZW4gc2l6ZXMgcmlnaHQgb3V0IG9mIHRoZSBib3guXG4gKlxuICogIyMjIyAqKlBhZ2UgVHlwZXMqKlxuICpcbiAqIFFkUGFnZSB1c2VzIHBhZ2UgdHlwZXMgdG8gZGVjaWRlIGhvdyB0aGUgcGFnZSBsb29rcyBhbmQgd29ya3MuIEVhY2ggcGFnZSB0eXBlIGhhcyBpdHMgb3duIHNldHRpbmdzIGFuZCBhY3Rpb25zLlxuICpcbiAqIC0gKipvdmVydmlldyoqOiBEaXNwbGF5cyBhIHN1bW1hcnkgb3IgYSBsaXN0IG9mIG9iamVjdHMsIHByb3ZpZGluZyBhbiBvdmVydmlldyBvZiBtdWx0aXBsZSBidXNpbmVzcyBjYXNlcy5cbiAqIC0gKipjcmVhdGUqKjogQWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBvYmplY3QsIHJlcHJlc2VudGluZyBhIGJ1c2luZXNzIGNhc2UuXG4gKiAtICoqaW5zcGVjdCoqOiBFbmFibGVzIHZpZXdpbmcsIGVkaXRpbmcsIGFuZCBleGVjdXRpbmcgYWRkaXRpb25hbCBhY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIG9iamVjdCwgd2hpY2ggYWxzbyByZXByZXNlbnRzIGEgYnVzaW5lc3MgY2FzZS5cbiAqIC0gKipjdXN0b20qKjogUHJvdmlkZXMgYSB3YXkgdG8gaW1wbGVtZW50IHVuaXF1ZSBmdW5jdGlvbmFsaXR5IHRoYXQgZG9lc27igJl0IGZpdCB0aGUgb3RoZXIgcHJlZGVmaW5lZCBwYWdlIHR5cGVzLlxuICpcbiAqICoqTm90ZSB0aGF0IHRoZSAnY3VzdG9tJyBwYWdlIHR5cGUgc2hvdWxkIGJlIHVzZWQgb25seSBhcyBhIGZhbGxiYWNrIGZvciB2ZXJ5IHNwZWNpZmljIGNhc2VzLiBJZiB5b3UgZW5jb3VudGVyIHN1Y2ggYSBzaXR1YXRpb24sIHBsZWFzZSBjb250YWN0IHRoZSBRdWFkcmVsIHRlYW0uKipcbiAqXG4gKiAjIyMjICoqRmFjZXRzKipcbiAqXG4gKiBUaGVzZSBhcmUgZXh0cmEgcGllY2VzIG9mIGluZm9ybWF0aW9uIHNob3duIGluIHRoZSBwYWdlIGhlYWRlci4gVGhleSBnaXZlIGNvbnRleHQgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgb2JqZWN0IG1vZGVsIGJlaW5nIHZpZXdlZCBvciBlZGl0ZWQuIFRoZXJlIGFyZSBzZXZlcmFsIHR5cGVzIG9mIGZhY2V0cywgaW5jbHVkaW5nIGBzdGF0dXNgLCBgdmFsdWVgLCBgY3JpdGljYWxpdHlgLCBgcmVmZXJlbmNlc2AsIGBwcm9ncmVzc2AsIGBkYXRlYCwgYHNpbmdsZVNlbGVjdGAsIGFuZCBgbXVsdGlTZWxlY3RgLiBFYWNoIHR5cGUgaGFzIGl0cyBvd24gb3B0aW9ucy4gRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBgUWRQYWdlSGVhZGVyRmFjZXRgIGludGVyZmFjZS5cbiAqXG4gKiAjIyMjICoqQ29udGV4dCoqXG4gKlxuICogVGhlIGBjb250ZXh0YCBhY3RzIGFzIGEgZmlsdGVyIHRoYXQgY2FuIGJlIHNlbGVjdGVkIG9uIHRoZSBvdmVydmlldyBwYWdlIGFuZCBwcm92aWRlcyB0aGUgYnVzaW5lc3MgY29udGV4dCwgd2hpY2ggcmVtYWlucyBjb25zaXN0ZW50IHRocm91Z2hvdXQgdGhlIGVudGlyZSBhcHBsaWNhdGlvbi4gT24gY3JlYXRlIGFuZCBpbnNwZWN0IHBhZ2VzLCB0aGUgY29udGV4dCBpcyBkaXNwbGF5ZWQgYXMgcmVhZC1vbmx5LiBGb3IgbW9yZSBkZXRhaWxzLCBjaGVjayB0aGUgZGVkaWNhdGVkIGNoYXB0ZXIgaW4gU3Rvcnlib29rLlxuICpcbiAqXG4gKiAjIyMjICoqUGFnZSBJbmZvIEJhbm5lcnMqKlxuICpcbiAqIFRvIGluc2VydCBhIHBhZ2UgaW5mbyBiYW5uZXIgdW5kZXIgdGhlIHBhZ2UgaGVhZGVyLCBqdXN0IHB1dCBhIGBxZC1wYWdlLWluZm8tYmFubmVyYCBjb21wb25lbnQgaW5zaWRlIHRoZSBgcWQtcGFnZWAuIE11bHRpcGxlIGNvbnNlY3V0aXZlIGluZm8gYmFubmVycyBvZiB0aGUgc2FtZSB0eXBlIHdpbGwgYmUgbWVyZ2VkIGludG8gb25lIGJhbm5lciBjb250YWluZXIuIFBhZ2UgaW5mbyBiYW5uZXJzIGhhdmUgdGhlIHNhbWUgYXBwZWFyYW5jZSBsaWtlIG5vdGlmaWNhdGlvbnMuXG4gKlxuICogIyMjIyAqKkNvbnRyb2wgUGFuZWwqKlxuICpcbiAqIFRoZSBjb250cm9sIHBhbmVsIGlzIGxvY2F0ZWQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIHBhZ2UgYW5kIGlzIHVzZWQgdG8gZGlzcGxheSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFuZCBmdW5jdGlvbnMgcmVsZXZhbnQgdG8gYSBzcGVjaWZpYyBidXNpbmVzcyBjYXNlLCB3aGljaCBpcyBsaW5rZWQgdG8gYSBzcGVjaWZpYyBvYmplY3QgbW9kZWwuIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCB0aGUgZGVkaWNhdGVkIGNoYXB0ZXIgaW4gU3Rvcnlib29rLlxuICpcbiAqICMjIyMgKipBY3Rpb25zKipcbiAqXG4gKiBUaGVzZSBhcmUgaW50ZXJhY3RpdmUgZWxlbWVudHMgdGhhdCBwZXJmb3JtIHNwZWNpZmljIGZ1bmN0aW9ucy4gRnVuY3Rpb25zIGZvciB0aGVzZSBhY3Rpb25zIGNhbiBiZSBzZXQgdXAgdGhyb3VnaCBjb25maWd1cmF0aW9ucy4gQ3VzdG9tIGFjdGlvbnMgY2FuIGJlIGFkZGVkIHRvIGFueSBwYWdlIHR5cGUuIEFkZGl0aW9uYWxseSwgYWxsIGFjdGlvbnMgY2FuIGJlIGNvbmZpZ3VyZWQgYW5kIGN1c3RvbWl6ZWQgd2l0aCB5b3VyIG93biB0ZXh0LCB3aGljaCB3aWxsIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHRleHRzLlxuICpcbiAqIFBsZWFzZSBjaGVjayB0aGUgcmVsZXZhbnQgaW50ZXJmYWNlcyBmb3IgZWFjaCBwYWdlIHR5cGU6IGBRZFBhZ2VDb25maWdPdmVydmlld2AsIGBRZFBhZ2VDb25maWdDcmVhdGVgLCBgUWRQYWdlQ29uZmlnSW5zcGVjdGAsIGFuZCBgUWRQYWdlQ29uZmlnQ3VzdG9tYC5cbiAqXG4gKiAjIyMjICoqVmFsaWRhdGlvbi9QYXJhbWV0ZXJpemF0aW9uKipcbiAqXG4gKiBWYWxpZGF0aW9uIGFuZCBwYXJhbWV0ZXJpemF0aW9uIGFyZSBjb3ZlcmVkIGluIGEgZGVkaWNhdGVkIGNoYXB0ZXIgaW4gdGhlIFN0b3J5Ym9vay4gUGxlYXNlIGNoZWNrIHRoZSBcIlZhbGlkYXRpb25cIiBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqICMjIyMgKipSZXNvbHZlcioqXG4gKlxuICogVXNpbmcgYSByZXNvbHZlciB0byBmZXRjaCBwYWdlIG9iamVjdCBkYXRhIGlzIGVzc2VudGlhbCB0byB0aGUgcGFnZSBjb25jZXB0LiBBZGQgdGhlIHJlc29sdmVyIHRvIHRoZSBjb21wb25lbnQncyBwcm92aWRlcnMgYW5kIHVzZSB0aGUgYFFEX1BBR0VfT0JKRUNUX1JFU09MVkVSX1RPS0VOYCB0b2tlbi4gVGhpcyBhcHByb2FjaCBlbmFibGVzIHR5cGUgc2FmZXR5IGFuZCB1c2VyIGZlZWRiYWNrIGJ5IGVmZmVjdGl2ZWx5IG1hbmFnaW5nIHRoZSBuZWNlc3NhcnkgZGF0YSBmb3IgdGhlIHBhZ2UuXG4gKlxuICogYGBgdHNcbiAqIGludGVyZmFjZSBNeU9iamVjdE1vZGVsIHtcbiAqICAgLy8gTWV0YWRhdGEgZGlzcGxheWVkIGluIHRoZSBPYmplY3RIZWFkZXJcbiAqICAgc3RhdGU6IE15U3RhdGU7XG4gKiAgIGNvdW50cnlPZkRlc3RpbmF0aW9uOiBNeUNvdW50cnlPZkRlc3RpbmF0aW9uO1xuICogICAvLyBBcHBlYXJzIG5vdCBpbiB0aGUgT2JqZWN0SGVhZGVyXG4gKiAgIHBheWxvYWQ6IE15UGF5bG9hZDtcbiAqIH1cbiAqXG4gKiB0eXBlIE15T2JqZWN0TWV0YWRhdGEgPSAnc3RhdGUnIHwgJ2NvdW50cnlPZkRlc3RpbmF0aW9uJztcbiAqXG4gKiBASW5qZWN0YWJsZSgpXG4gKiBjbGFzcyBNeU9iamVjdE1vZGVsUmVzb2x2ZXIgaW1wbGVtZW50cyBRZFBhZ2VPYmplY3RSZXNvbHZlcjxNeU9iamVjdE1vZGVsPiB7XG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cbiAqXG4gKiAgIHJlc29sdmUoKTogT2JzZXJ2YWJsZTxNeU9iamVjdE1vZGVsPiB7XG4gKiAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICogICAgICAgLmdldDxNeU9iamVjdE1vZGVsPignbXktYXBpJylcbiAqICAgICAgIC5waXBlKHRhcCgoZGF0YTogTXlPYmplY3RNb2RlbCkgPT4gZG9Tb21ldGhpbmdXaXRoKGRhdGEpKSk7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgc2VsZWN0b3I6ICdteS1wYWdlJyxcbiAqICAgdGVtcGxhdGVVcmw6ICcuL215LXBhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICogICBwcm92aWRlcnM6IFtcbiAqICAgICB7XG4gKiAgICAgICBwcm92aWRlOiBRRF9QQUdFX09CSkVDVF9SRVNPTFZFUl9UT0tFTixcbiAqICAgICAgIHVzZUNsYXNzOiBNeU9iamVjdE1vZGVsUmVzb2x2ZXJcbiAqICAgICB9XG4gKiAgIF1cbiAqIH0pXG4gKiBjbGFzcyBNeVBhZ2VDb21wb25lbnQge1xuICogICBwYWdlQ29uZmlnOiBRZFBhZ2VDb25maWc8UGljazxNeU9iamVjdE1vZGVsLCBNeU9iamVjdE1ldGFkYXRhPj4gPSB7XG4gKiAgICAgdGl0bGU6IHsgaTE4bjogJ2kxOG4ucGFnZS50aXRsZScgfSxcbiAqICAgICBwYWdlVHlwZTogJ2luc3BlY3QnLFxuICogICAgIGhlYWRlckZhY2V0czogW1xuICogICAgICAge1xuICogICAgICAgICBuYW1lOiAnc3RhdHVzJyxcbiAqICAgICAgICAgbGFiZWw6IHtcbiAqICAgICAgICAgICBpMThuOiAnaTE4bi5zdGF0dXMubGFiZWwnXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICAgIG9wdGlvbnM6IHtcbiAqICAgICAgICAgICB0eXBlOiAnc3RhdHVzJ1xuICogICAgICAgICB9XG4gKiAgICAgICB9LFxuICogICAgICAge1xuICogICAgICAgICBuYW1lOiAnY291bnRyeU9mRGVzdGluYXRpb24nLFxuICogICAgICAgICBsYWJlbDoge1xuICogICAgICAgICAgIGkxOG46ICdpMThuLmNvdW50cnlPZkRlc3RpbmF0aW9uLmxhYmVsJ1xuICogICAgICAgICB9LFxuICogICAgICAgICBvcHRpb25zOiB7XG4gKiAgICAgICAgICAgdHlwZTogJ3ZhbHVlJ1xuICogICAgICAgICB9XG4gKiAgICAgICB9XG4gKiAgICAgXSxcbiAqICAgICBwYWdlVHlwZUNvbmZpZzoge1xuICogICAgICAgY2FuY2VsOiB7XG4gKiAgICAgICAgIGhhbmRsZXI6ICgpID0+IGhhbmRsZUNhbmNlbCgpXG4gKiAgICAgICB9LFxuICogICAgICAgc2F2ZToge1xuICogICAgICAgICBoYW5kbGVyOiAoZm9ybVZhbHVlcykgPT4gaGFuZGxlU2F2ZShmb3JtVmFsdWVzKVxuICogICAgICAgfVxuICogICAgIH1cbiAqICAgfTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIyMgKipVcGRhdGluZyBGYWNldHMqKlxuICpcbiAqIFR5cGljYWxseSwgdGhlIHZhbHVlcyBvZiB0aGUgZmFjZXRzIG9uIGEgY3JlYXRlIG9yIGluc3BlY3QgcGFnZSBhcmUgc2V0IHRvIHJlYWQtb25seS4gSG93ZXZlciwgdGhlcmUgbWF5IGJlIGNhc2VzIHdoZXJlLCBmb3IgZXhhbXBsZSwgYSBzdGF0dXMgY2hhbmdlIGlzIG5lZWRlZCwgc3VjaCBhcyB0aHJvdWdoIGEgZGlhbG9nLiBGb3IgdGhpcyBwdXJwb3NlLCB3ZSBoYXZlIHByb3ZpZGVkIGFuIHVwZGF0ZSBtZXRob2QuIEluIHRoZSByZXNvbHZlciBzZXJ2aWNlLCBkZWZpbmUgYW4gZW1wdHkgbWV0aG9kIGNhbGxlZCBgdXBkYXRlTWV0YWRhdGFgLiBJbmplY3QgdGhpcyBzZXJ2aWNlIHVzaW5nIGl0cyB0eXBlLCBhbmQgdGhlbiBjYWxsIHRoZSBgdXBkYXRlTWV0YWRhdGFgIG1ldGhvZCB3aXRoIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXIuXG4gKlxuICogKipQbGVhc2Ugbm90ZTogVGhlc2UgdmFsdWVzIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgZGlyZWN0bHkgd2l0aGluIGEgUWRQYWdlLioqXG4gKlxuICogYGBgdHNcbiAqIEBJbmplY3RhYmxlKClcbiAqIGNsYXNzIE15T2JqZWN0TW9kZWxSZXNvbHZlciBpbXBsZW1lbnRzIFFkUGFnZU9iamVjdFJlc29sdmVyPE15T2JqZWN0TW9kZWw+IHtcbiAqICAgY29uZmlnOiBRZFBhZ2VPYmplY3RSZXNvbHZlckNvbmZpZyA9IHtcbiAqICAgICAvLyB5b3VyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlXG4gKiAgIH1cbiAqXG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cbiAqXG4gKiAgIHJlc29sdmUoKTogT2JzZXJ2YWJsZTxNeU9iamVjdE1vZGVsPiB7XG4gKiAgICAgLy8geW91ciBpbXBsZW1lbnRhdGlvbiBoZXJlXG4gKiAgIH1cbiAqXG4gKiAgIHVwZGF0ZU1ldGFkYXRhKG1ldGFkYXRhOiBQYXJ0aWFsPE15T2JqZWN0TW9kZWw+KSB7XG4gKiAgICAgLy8gbGVhdmUgZW1wdHkgaGVyZSAmIGNhbGwgaW4geW91ciBjb21wb25lbnRcbiAqICAgfVxuICogfVxuICpcbiAqIEBDb21wb25lbnQoe1xuICogICAvLyAuLi5cbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAge1xuICogICAgICAgcHJvdmlkZTogUURfUEFHRV9PQkpFQ1RfUkVTT0xWRVJfVE9LRU4sXG4gKiAgICAgICB1c2VDbGFzczogTXlPYmplY3RNb2RlbFJlc29sdmVyXG4gKiAgICAgfVxuICogICBdXG4gKiB9KVxuICogY2xhc3MgTXlQYWdlQ29tcG9uZW50IHtcbiAqICAgY29uc3RydWN0b3IoQEluamVjdChRRF9QQUdFX09CSkVDVF9SRVNPTFZFUl9UT0tFTikgcHJpdmF0ZSBvYmplY3RSZXNvbHZlcjogTXlPYmplY3RNb2RlbFJlc29sdmVyKSB7fVxuICpcbiAqICAgdXBkYXRlU3RhdHVzKCkge1xuICogICAgIHRoaXMub2JqZWN0UmVzb2x2ZXIudXBkYXRlTWV0YWRhdGEoeyBzdGF0ZTogJ1VwZGF0ZWQnIH0pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyMjICoqT3ZlcnZpZXcgUGFnZSoqXG4gKlxuICogT24gYW4gb3ZlcnZpZXcgcGFnZSwgYSBsaXN0IG9mIGJ1c2luZXNzIGNhc2VzIGNhbiBiZSBkaXNwbGF5ZWQuIFR5cGljYWxseSwgdGhpcyBpcyBkb25lIGluIGEgKipRZFRhYmxlKiosIGluY2x1ZGluZyBmaWx0ZXJzIGFuZC9vciBzZWFyY2ggb3B0aW9ucy4gVGhlcmUgYXJlIGFjdGlvbnMgdGhhdCBoYW5kbGUgcm91dGluZyB0byB0aGUgcmVsYXRlZCBkZXRhaWwgcGFnZXMsIHdoZXJlIHRoZSBidXNpbmVzcyBjYXNlcywgcmVwcmVzZW50ZWQgYnkgYSBidXNpbmVzcyBvYmplY3QgbW9kZWwsIGNhbiBiZSB2aWV3ZWQsIGVkaXRlZCwgb3IgbmV3bHkgY3JlYXRlZC5cbiAqXG4gKiBgYGB0c1xuICogY29uc3Qgb3ZlcnZpZXdQYWdlQ29uZmlnOiBRZFBhZ2VDb25maWc8TXlPYmplY3RUeXBlPiA9IHtcbiAqICAgdGl0bGU6IHsgaTE4bjogJ2kxOG4ubXktcGFnZS50aXRsZScgfSxcbiAqICAgcGFnZVR5cGU6ICdvdmVydmlldycsXG4gKiAgIHBhZ2VUeXBlQ29uZmlnOiB7XG4gKiAgICAgY3VzdG9tQWN0aW9uczogW1xuICogICAgICAge1xuICogICAgICAgICBpMThuOiAnaTE4bi5jdXN0b20uYWN0aW9uJyxcbiAqICAgICAgICAgaGFuZGxlcjogKCkgPT4gZG9Tb21ldGhpbmcoKVxuICogICAgICAgfVxuICogICAgIF1cbiAqICAgfVxuICogfTtcbiAqIGBgYFxuICpcbiAqIGBgYGh0bWxcbiAqIDxxZC1wYWdlIFtjb25maWddPVwicGFnZUNvbmZpZ1wiPlxuICogICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICA8cWQtdGFibGUgW2NvbmZpZ109XCJ0YWJsZUNvbmZpZ1wiPjwvcWQtdGFibGU+XG4gKiAgIDwvcWQtc2VjdGlvbj5cbiAqIDwvcWQtcGFnZT5cbiAqIGBgYFxuICpcbiAqIFRvIGNvbmZpZ3VyZSBjb250ZXh0cyBmb3IgYSBwYWdlLCB5b3UgY2FuIGVhc2lseSBzZXQgY29udGV4dHMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBvdmVydmlldyBwYWdlLiBUaGV5IGFyZSB0aGVuIHNlbGVjdGFibGUgb24gdGhlIG92ZXJ2aWV3IHBhZ2U6XG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IG92ZXJ2aWV3UGFnZUNvbmZpZzogUWRQYWdlQ29uZmlnPE15T2JqZWN0VHlwZT4gPSB7XG4gKiAgIC8vIC4uLlxuICogICBjb250ZXh0czogW1xuICogICAgIHtcbiAqICAgICAgIGlkOiAndHlwZU9mVHJhZmZpYycsXG4gKiAgICAgICBsYWJlbDogeyBpMThuOiAnVmVya2VocnNhcnQnIH0sXG4gKiAgICAgICB0eXBlOiAnc2luZ2xlJyxcbiAqICAgICAgIHNlbGVjdGVkOiB7XG4gKiAgICAgICAgIGxhYmVsOiB7IGkxOG46ICdTY2hpZW5lJyB9LFxuICogICAgICAgICB2YWx1ZTogJ3JhaWwnXG4gKiAgICAgICB9LFxuICogICAgICAgb3B0aW9uczogW1xuICogICAgICAgICB7XG4gKiAgICAgICAgICAgdmFsdWU6ICdyYWlsJyxcbiAqICAgICAgICAgICBsYWJlbDogeyBpMThuOiAnU2NoaWVuZScgfVxuICogICAgICAgICB9LFxuICogICAgICAgICB7XG4gKiAgICAgICAgICAgdmFsdWU6ICdhaXInLFxuICogICAgICAgICAgIGxhYmVsOiB7IGkxOG46ICdMdWZ0JyB9XG4gKiAgICAgICAgIH1cbiAqICAgICAgIF1cbiAqICAgICB9XG4gKiAgIF1cbiAqICAgLy8gLi4uXG4gKiB9O1xuICogYGBgXG4gKlxuICogIyMjIyAqKkNyZWF0ZSBQYWdlKipcbiAqXG4gKiBPbiB0aGUgY3JlYXRlIHBhZ2UsIGEgbmV3IGJ1c2luZXNzIGNhc2UgY2FuIGJlIGNyZWF0ZWQuIFRoaXMgcGFnZSB0eXBpY2FsbHkgaW5jbHVkZXMgZm9ybXMgZm9yIGVudGVyaW5nIGRhdGEuIFRoZSBzdWJtaXQgYnV0dG9uIGlzIHBhcmFtZXRlcml6ZWQgd2l0aCB0aGUgZm9ybSBkYXRhIGFuZCBpcyB2YWxpZGF0ZWQgdGhyb3VnaCB0aGUgUWRQYWdlU3RlcHBlci5cbiAqIFRoZSBjbGljayBvbiB0aGUgc3VibWl0IGJ1dHRvbiBzaG91bGQgc3VibWl0IHRoZSBjcmVhdGlvbiBvZiB0aGUgYnVzaW5lc3MgY2FzZSBvciBvYmplY3QuIFlvdSBjYW4gZGVmaW5lIGEgc3BlY2lmaWMgaGFuZGxlciBpbiB0aGUgc3VibWl0IGJ1dHRvbidzIGNvbmZpZ3VyYXRpb24gdG8gY3JlYXRlIHRoZSBvYmplY3QuXG4gKiBJZiBvbmx5IG9uZSBzdGVwIGlzIG5lZWRlZCwgdGhlIHNpbmdsZS1zdGVwIG1vZGUgY2FuIGJlIHVzZWQuIEluIHNpbmdsZS1zdGVwIG1vZGUsIHRoZSBzdGVwcGVyIGlzIHZpc3VhbGx5IGhpZGRlbiBhbmQgYmVoYXZlcyBsaWtlIGEgKipRZFNlY3Rpb24qKi5cbiAqXG4gKiBgYGB0c1xuICogY29uc3QgY3JlYXRlUGFnZUNvbmZpZzogUWRQYWdlQ29uZmlnPE15T2JqZWN0VHlwZT4gPSB7XG4gKiAgIHRpdGxlOiB7IGkxOG46ICdpMThuLnBhZ2UudGl0bGUnIH0sXG4gKiAgIHBhZ2VUeXBlOiAnY3JlYXRlJyxcbiAqICAgcGFnZVR5cGVDb25maWc6IHtcbiAqICAgICBzdWJtaXQ6IHtcbiAqICAgICAgIGhhbmRsZXI6IChmb3JtVmFsdWVzKSA9PiBoYW5kbGVTdWJtaXQoZm9ybVZhbHVlcylcbiAqICAgICB9XG4gKiAgIH1cbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBgYGBodG1sXG4gKiA8IS0tIEZvciBcIlF1aWNrIEFkZFwiIHVzZSBQYWdlU3RlcHBlciBpbiBzaW5nbGUtc3RlcCBtb2RlIC0tPlxuICogPHFkLXBhZ2UgW2NvbmZpZ109XCJwYWdlQ29uZmlnXCI+XG4gKiAgIDxxZC1wYWdlLXN0ZXBwZXIgW2NvbmZpZ109XCJzdGVwcGVyQ29uZmlnXCI+XG4gKiAgICAgPHFkLXBhZ2Utc3RlcCBbY29uZmlnXT1cInN0ZXBDb25maWdPbmVcIj5cbiAqICAgICAgIDxxZC1zZWN0aW9uIFtjb25maWddPVwic2VjdGlvbkNvbmZpZ1wiPlxuICogICAgICAgICA8cWQtZ3JpZCBbY29uZmlnXT1cImdyaWRDb25maWdcIiBbZm9ybUdyb3VwXT1cIm15Rm9ybXNcIiBxZENvbm5lY3RGb3JtU3RhdGVUb1BhZ2U9XCJteUZvcm1zXCI+XG4gKiAgICAgICAgICAgPCEtLSB5b3VyIHFkLWZvcm0tY29tcG9uZW50cyBoZXJlIC0tPlxuICogICAgICAgICA8L3FkLWdyaWQ+XG4gKiAgICAgICA8L3FkLXNlY3Rpb24+XG4gKiAgICAgPC9xZC1wYWdlLXN0ZXA+XG4gKiAgIDwvcWQtcGFnZS1zdGVwcGVyPlxuICogPC9xZC1wYWdlPlxuICpcbiAqIDwhLS0gV2l0aCBQYWdlU3RlcHBlciB1c2luZyBtdWx0aXBsZSBzdGVwcyAtLT5cbiAqIDxxZC1wYWdlIFtjb25maWddPVwicGFnZUNvbmZpZ1wiPlxuICogICA8cWQtcGFnZS1zdGVwcGVyIFtjb25maWddPVwic3RlcHBlckNvbmZpZ1wiPlxuICogICAgIDxxZC1wYWdlLXN0ZXAgW2NvbmZpZ109XCJzdGVwQ29uZmlnT25lXCI+XG4gKiAgICAgICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICAgICAgPHFkLWdyaWQgW2NvbmZpZ109XCJncmlkQ29uZmlnXCIgW2Zvcm1Hcm91cF09XCJteUZvcm1zT25lXCIgcWRDb25uZWN0Rm9ybVN0YXRlVG9QYWdlPVwibXlGb3Jtc09uZVwiPlxuICogICAgICAgICAgIDwhLS0geW91ciBxZC1mb3JtLWNvbXBvbmVudHMgaGVyZSAtLT5cbiAqICAgICAgICAgPC9xZC1ncmlkPlxuICogICAgICAgPC9xZC1zZWN0aW9uPlxuICogICAgIDwvcWQtcGFnZS1zdGVwPlxuICogICAgIDxxZC1wYWdlLXN0ZXAgW2NvbmZpZ109XCJzdGVwQ29uZmlnVHdvXCI+XG4gKiAgICAgICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICAgICAgPHFkLWdyaWQgW2NvbmZpZ109XCJncmlkQ29uZmlnXCIgW2Zvcm1Hcm91cF09XCJteUZvcm1zVHdvXCIgcWRDb25uZWN0Rm9ybVN0YXRlVG9QYWdlPVwibXlGb3Jtc1R3b1wiPlxuICogICAgICAgICAgIDwhLS0geW91ciBxZC1mb3JtLWNvbXBvbmVudHMgaGVyZSAtLT5cbiAqICAgICAgICAgPC9xZC1ncmlkPlxuICogICAgICAgPC9xZC1zZWN0aW9uPlxuICogICAgIDwvcWQtcGFnZS1zdGVwPlxuICogICA8L3FkLXBhZ2Utc3RlcHBlcj5cbiAqIDwvcWQtcGFnZT5cbiAqIGBgYFxuICpcbiAqIFRvIGFsbG93IHJlc29sdmluZyBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyB3aGVuIGdvaW5nIHRvIG5leHQgc3RlcCwgeW91IGNhbiBwcm92aWRlIGEgcmVzb2x2ZXIgb2YgdHlwZSBRZFBhZ2VTdGVwUmVzb2x2ZXI6XG4gKlxuICogYGBgdHNcbiAqIGNsYXNzIE15UmVzb2x2ZXIgaW1wbGVtZW50cyBRZFBhZ2VTdGVwUmVzb2x2ZXIge1xuICogICAuLi5cbiAqXG4gKiAgIHJlc29sdmUoaW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICogICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcIm5leHQtc3RlcC5jb21cIik7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgc2VsZWN0b3I6ICdxZC11aS1wYWdlLWNyZWF0ZScsXG4gKiAgIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUuY29tcG9uZW50Lmh0bWwnLFxuICogICBwcm92aWRlcnM6IFtcbiAqICAgICB7XG4gKiAgICAgICBwcm92aWRlOiBRRF9QQUdFX1NURVBfUkVTT0xWRVJfVE9LRU4sXG4gKiAgICAgICB1c2VDbGFzczogUGFnZVN0ZXBSZXNvbHZlclxuICogICAgIH1cbiAqICAgXVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBDcmVhdGVDb21wb25lbnQge1xuICogYGBgXG4gKlxuICogIyMjIyAqKkluc3BlY3QgUGFnZSoqXG4gKlxuICogT24gYW4gaW5zcGVjdCBwYWdlLCBhIHNwZWNpZmljIGJ1c2luZXNzIGNhc2UgaXMgZGlzcGxheWVkIGFuZCBtYXkgYmUgZWRpdGVkIG9yIHN1Ym1pdHRlZC4gRGVwZW5kaW5nIG9uIHlvdXIgbmVlZHMgeW91IGNhbiBoaWRlIHRoZSBzdWJtaXQgYnV0dG9uLlxuICogSW4gY29udHJhc3QgdG8gYSBjcmVhdGUgcGFnZSwgYW4gZXhpc3Rpbmcgb2JqZWN0IGlzIHNob3duIGFuZCBwb3RlbnRpYWxseSB1cGRhdGVkLlxuICpcbiAqIFRoZSBwYWdlIG9wZXJhdGVzIGluIG9uZSBvZiB0d28gbW9kZXMgLSBgdmlld2Agb3IgYGVkaXRgIC0gYXMgZGVmaW5lZCBieSB0aGUgYG9wZXJhdGlvbk1vZGVgIGNvbmZpZ3VyYXRpb24ga2V5LlxuICpcbiAqIFRoZSBgdmlld29ubHlgIGJlaGF2aW9yIGRlZmluZWQgYnkgdGhlIG9wZXJhdGlvbiBtb2RlIGlzIGF1dG9tYXRpY2FsbHkgcHJvcGFnYXRlZCB0byBhbGwgbmVzdGVkIFFkU2VjdGlvbiBjb21wb25lbnRzIHRoYXQgYXJlIHBhcnQgb2YgYSBRTFMsXG4gKiBhcyB3ZWxsIGFzIHRvIGZ1bmN0aW9uYWwgcGF0dGVybnMgc3VjaCBhcyBRZFRhYmxlLCBRZFRyZWUsIFFkRmlsZUNvbGxlY3RvciwgYW5kIFFkUXVpY2tFZGl0LlxuICogQWxsIGZvcm1zIGFyZSByZW5kZXJlZCBlaXRoZXIgaW4gdmlld29ubHkgb3IgZWRpdGFibGUgbW9kZSBhY2NvcmRpbmdseS5cbiAqXG4gKiBUaGlzIGJlaGF2aW9yIGNhbiBiZSBleHBsaWNpdGx5IG92ZXJyaWRkZW4gaW4gZWFjaCBjb21wb25lbnTigJlzIGNvbmZpZ3VyYXRpb24gLSBmb3IgZXhhbXBsZSwgdG8gYWxsb3cgY2VydGFpbiBmaWVsZHMgdG8gcmVtYWluIGVkaXRhYmxlLlxuICpcbiAqIC0gKip2aWV3Kio6IEEgc3VibWl0IGFjdGlvbiBjYW4gb3B0aW9uYWxseSBiZSBhZGRlZCBmb3IgcHJvY2Vzcy1yZWxhdGVkIG9wZXJhdGlvbnMgc3VjaCBhcyBzdGF0dXMgdXBkYXRlcy5cbiAqICAgVGhlIGFjdGlvbiByZWNlaXZlcyB0aGUgY3VycmVudCBmb3JtIHZhbHVlcyBhbmQgc3VwcG9ydHMgdmFsaWRhdGlvbiBhbmQgcGFyYW1ldGVyaXphdGlvbi5cbiAqXG4gKiAtICoqZWRpdCoqOiBUeXBpY2FsbHkgaW5jbHVkZXMgYSBzYXZlIGJ1dHRvbiB0byBwZXJzaXN0IGNoYW5nZXMgbWFkZSBpbiBlZGl0YWJsZSBmaWVsZHMuXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IGluc3BlY3RQYWdlQ29uZmlnOiBRZFBhZ2VDb25maWc8TXlPYmplY3RUeXBlPiA9IHtcbiAqICAgdGl0bGU6IHsgaTE4bjogJ2kxOG4ucGFnZS50aXRsZScgfSxcbiAqICAgcGFnZVR5cGU6ICdpbnNwZWN0JyxcbiAqICAgcGFnZVR5cGVDb25maWc6IHtcbiAqICAgICBvcGVyYXRpb25Nb2RlOiAnZWRpdCcsXG4gKiAgICAgY2FuY2VsOiB7XG4gKiAgICAgICBoYW5kbGVyOiAoKSA9PiBoYW5kbGVDYW5jZWwoKVxuICogICAgIH0sXG4gKiAgICAgc2F2ZToge1xuICogICAgICAgaGFuZGxlcjogKGZvcm1WYWx1ZXMpID0+IGhhbmRsZVNhdmUoZm9ybVZhbHVlcylcbiAqICAgICB9XG4gKiAgIH1cbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBgYGBodG1sXG4gKiA8IS0tIHdpdGggU2VjdGlvbiAtLT5cbiAqIDxxZC1wYWdlIFtjb25maWddPVwicGFnZUNvbmZpZ1wiPlxuICogICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICA8cWQtZ3JpZCBbY29uZmlnXT1cImdyaWRDb25maWdcIiBbZm9ybUdyb3VwXT1cIm15Rm9ybXNcIiBxZENvbm5lY3RGb3JtU3RhdGVUb1BhZ2U9XCJteUZvcm1zXCI+XG4gKiAgICAgICA8IS0tIHlvdXIgcWQtZm9ybS1jb21wb25lbnRzIGhlcmUgLS0+XG4gKiAgICAgPC9xZC1ncmlkPlxuICogICA8L3FkLXNlY3Rpb24+XG4gKiA8L3FkLXBhZ2U+XG4gKlxuICogPCEtLSB3aXRoIFBhZ2VUYWJzIC0tPlxuICogPHFkLXBhZ2UgW2NvbmZpZ109XCJwYWdlQ29uZmlnXCI+XG4gKiAgIDxxZC1wYWdlLXRhYnMgW2NvbmZpZ109XCJzdGVwcGVyQ29uZmlnXCI+XG4gKiAgICAgPHFkLXBhZ2UtdGFiIFtjb25maWddPVwidGFiQ29uZmlnT25lXCI+XG4gKiAgICAgICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICAgICAgPHFkLWdyaWQgW2NvbmZpZ109XCJncmlkQ29uZmlnXCIgW2Zvcm1Hcm91cF09XCJteUZvcm1zT25lXCIgcWRDb25uZWN0Rm9ybVN0YXRlVG9QYWdlPVwibXlGb3Jtc09uZVwiPlxuICogICAgICAgICAgIDwhLS0geW91ciBxZC1mb3JtLWNvbXBvbmVudHMgaGVyZSAtLT5cbiAqICAgICAgICAgPC9xZC1ncmlkPlxuICogICAgICAgPC9xZC1zZWN0aW9uPlxuICogICAgIDwvcWQtcGFnZS10YWI+XG4gKiAgICAgPHFkLXBhZ2UtdGFiIFtjb25maWddPVwidGFiQ29uZmlnVHdvXCI+XG4gKiAgICAgICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICAgICAgPHFkLWdyaWQgW2NvbmZpZ109XCJncmlkQ29uZmlnXCIgW2Zvcm1Hcm91cF09XCJteUZvcm1zVHdvXCIgcWRDb25uZWN0Rm9ybVN0YXRlVG9QYWdlPVwibXlGb3Jtc1R3b1wiPlxuICogICAgICAgICAgIDwhLS0geW91ciBxZC1mb3JtLWNvbXBvbmVudHMgaGVyZSAtLT5cbiAqICAgICAgICAgPC9xZC1ncmlkPlxuICogICAgICAgPC9xZC1zZWN0aW9uPlxuICogICAgIDwvcWQtcGFnZS10YWI+XG4gKiAgIDwvcWQtcGFnZS10YWJzPlxuICogPC9xZC1wYWdlPlxuICogYGBgXG4gKlxuICogIyMjIyAqKkN1c3RvbSBQYWdlKipcbiAqXG4gKiBgYGB0c1xuICogY29uc3QgY3VzdG9tUGFnZUNvbmZpZzogUWRQYWdlQ29uZmlnPE15T2JqZWN0VHlwZT4gPSB7XG4gKiAgIHRpdGxlOiB7IGkxOG46ICdpMThuLnBhZ2UudGl0bGUnIH0sXG4gKiAgIHBhZ2VUeXBlOiAnY3VzdG9tJyxcbiAqICAgcGFnZVR5cGVDb25maWc6IHtcbiAqICAgICBjdXN0b21BY3Rpb25zOiBbXG4gKiAgICAgICB7XG4gKiAgICAgICAgIGkxOG46ICdpMThuLmN1c3RvbS5hY3Rpb24nLFxuICogICAgICAgICBoYW5kbGVyOiAoKSA9PiBkb1NvbWV0aGluZygpXG4gKiAgICAgICB9XG4gKiAgICAgXVxuICogICB9XG4gKiB9O1xuICogYGBgXG4gKlxuICogYGBgaHRtbFxuICogPHFkLXBhZ2UgW2NvbmZpZ109XCJwYWdlQ29uZmlnXCI+XG4gKiAgIDwhLS0gUGxhY2UgY29udGVudCBoZXJlIHRoYXQgZG9lc27igJl0IGZpdCB0aGUgb3RoZXIgcGFnZSB0eXBlcyAtLT5cbiAqIDwvcWQtcGFnZT5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxZC1wYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wYWdlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1FkUGFnZUZvb3RlclNlcnZpY2UsIFFkRm9ybUdyb3VwTWFuYWdlclNlcnZpY2UsIFFkUGFnZVN1Ym1pdEFjdGlvblNlcnZpY2UsIFFkUmVzb2x2ZXJUcmlnZ2VyU2VydmljZV0sXG4gIGhvc3Q6IHsgJ1tjbGFzcy5oYXMtY29udHJvbC1wYW5lbF0nOiAnaXNDb250cm9sUGFuZWxWaXNpYmxlJywgJ1tjbGFzcy5jb250cm9sLXBhbmVsLWJyb2FkXSc6ICdpc0NvbnRyb2xQYW5lbEJyb2FkJyB9XG59KVxuZXhwb3J0IGNsYXNzIFFkUGFnZUNvbXBvbmVudDxUIGV4dGVuZHMgb2JqZWN0PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgUWRQYWdlIGNvbXBvbmVudCwgaW5jbHVkaW5nIHRoZSBwYWdlIHR5cGUsXG4gICAqIHRpdGxlLCBhbmQgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIGVhY2ggdHlwZSBvZiBwYWdlLlxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgY29uZmlnITogUWRQYWdlQ29uZmlnPFQ+O1xuXG4gIC8qKlxuICAgKiBBIHN0YXRpYyB0ZXN0IElEIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cyBjYW4gYmUgc2V0LiA8YnIgLz5cbiAgICogVGhlIHZhbHVlIGZvciB0aGUgSFRNTCBhdHRyaWJ1dGUgW2RhdGEtdGVzdC1pZF0uXG4gICAqL1xuICBASW5wdXQoJ2RhdGEtdGVzdC1pZCcpIHRlc3RJZD8gPSAncGFnZSc7XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZW1pdHRlZCB3aGVuIHRoZSBvcGVyYXRpb24gbW9kZSBvZiB0aGUgaW5zcGVjdCBwYWdlIGlzIGNoYW5nZWQuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgb3BlcmF0aW9uTW9kZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFFkSW5zcGVjdE9wZXJhdGlvbk1vZGU+KCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihRZFNlY3Rpb25Db21wb25lbnQpXG4gIHNlY3Rpb25zITogUXVlcnlMaXN0PFFkU2VjdGlvbkNvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZChRZFBhZ2VDb250cm9sUGFuZWxDb21wb25lbnQpXG4gIGNvbnRyb2xQYW5lbCE6IFFkUGFnZUNvbnRyb2xQYW5lbENvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkKFFkUGFnZVN0ZXBwZXJDb21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgc3RlcHBlckNvbXBvbmVudD86IFFkUGFnZVN0ZXBwZXJDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZChRZFBhZ2VUYWJzQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHRhYnNDb21wb25lbnQ/OiBRZFBhZ2VUYWJzQ29tcG9uZW50O1xuXG4gIEBDb250ZW50Q2hpbGQoUWRQYWdlU3RlcHBlckFkYXB0ZXJEaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgc3RlcHBlckFkYXB0ZXJEaXJlY3RpdmU/OiBRZFBhZ2VTdGVwcGVyQWRhcHRlckRpcmVjdGl2ZTtcblxuICBAQ29udGVudENoaWxkKFFkUGFnZVRhYnNBZGFwdGVyRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHRhYnNBZGFwdGVyRGlyZWN0aXZlPzogUWRQYWdlVGFic0FkYXB0ZXJEaXJlY3RpdmU7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihRZFBhZ2VJbmZvQmFubmVyQ29tcG9uZW50KVxuICBpbmZvQmFubmVycyE6IFF1ZXJ5TGlzdDxRZFBhZ2VJbmZvQmFubmVyQ29tcG9uZW50PjtcblxuICBmb290ZXJIYXNDb250ZW50JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgaXNGb290ZXJWaXNpYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBwcm9qZWN0aW9uR3VhcmRNZXNzYWdlID1cbiAgICAnUUQtVUkgfCBRZFBhZ2UgLSBUaGlzIGNvbnRlbnQgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHVzZSBRZFNlY3Rpb25BZGFwdGVyRGlyZWN0aXZlIGZvciBjdXN0b20gY29udGVudCBwcm9qZWN0aW9uLic7XG5cbiAgcHJpdmF0ZSBfaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcml2YXRlIF9kZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBnZXQgaXNDb250cm9sUGFuZWxWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xQYW5lbCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29udHJvbFBhbmVsLmNvbmZpZz8uaXNIaWRkZW4gIT09IHRydWU7XG4gIH1cblxuICBnZXQgaXNDb250cm9sUGFuZWxCcm9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sUGFuZWw/LmNvbmZpZz8ud2lkdGggPT09ICdicm9hZCc7XG4gIH1cblxuICBnZXQgaGFzTmF2aWdhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5zdGVwcGVyQ29tcG9uZW50IHx8IHRoaXMudGFic0NvbXBvbmVudCB8fCB0aGlzLnN0ZXBwZXJBZGFwdGVyRGlyZWN0aXZlIHx8IHRoaXMudGFic0FkYXB0ZXJEaXJlY3RpdmUpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5oYXMtZm9vdGVyJylcbiAgZ2V0IGZvb3RlclZpc2libGUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNGb290ZXJWaXNpYmxlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5oYXMtaW5mby1iYW5uZXJzJylcbiAgZ2V0IGhhc0luZm9CYW5uZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmluZm9CYW5uZXJzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2VTdG9yZVNlcnZpY2U6IFFkUGFnZVN0b3JlU2VydmljZTxUPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvb3RlclNlcnZpY2U6IFFkUGFnZUZvb3RlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtR3JvdXBNYW5hZ2VyU2VydmljZTogUWRGb3JtR3JvdXBNYW5hZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN1Ym1pdEFjdGlvblNlcnZpY2U6IFFkUGFnZVN1Ym1pdEFjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IFFkRGlhbG9nU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFFEX1NBRkVfQk9UVE9NX09GRlNFVCkgcHJpdmF0ZSBib3R0b21PZmZzZXQkPzogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4sXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dSZWY/OiBEaWFsb2dSZWY8dW5rbm93bj5cbiAgKSB7XG4gICAgdGhpcy5mb290ZXJIYXNDb250ZW50JCA9IHRoaXMuZm9vdGVyU2VydmljZS5mb290ZXJIYXNDb250ZW50JDtcbiAgICB0aGlzLmZvb3Rlckhhc0NvbnRlbnQkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpKS5zdWJzY3JpYmUoaXNWaXNpYmxlID0+IHtcbiAgICAgIHRoaXMuaXNGb290ZXJWaXNpYmxlID0gaXNWaXNpYmxlO1xuICAgICAgdGhpcy5ib3R0b21PZmZzZXQkPy5uZXh0KGlzVmlzaWJsZSA/IFNBRkVfQk9UVE9NX09GRlNFVF9QWCA6IDApO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja0NvbmZpZ1ZhbGlkaXR5KCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcpIHRoaXMucGFnZVN0b3JlU2VydmljZS5pbml0UGFnZVN0YXRlKHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWdDaGFuZ2UgPSBjaGFuZ2VzWydjb25maWcnXTtcblxuICAgIGlmICghY29uZmlnQ2hhbmdlKSByZXR1cm47XG5cbiAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZTogY3VyciwgcHJldmlvdXNWYWx1ZTogcHJldiB9ID0gY29uZmlnQ2hhbmdlO1xuXG4gICAgaWYgKGN1cnI/LnBhZ2VUeXBlQ29uZmlnPy5zdWJtaXQ/LmlzSGlkZGVuICE9PSBwcmV2Py5wYWdlVHlwZUNvbmZpZz8uc3VibWl0Py5pc0hpZGRlbilcbiAgICAgIHRoaXMuZm9vdGVyU2VydmljZS51cGRhdGVBY3Rpb25zKFtcbiAgICAgICAgeyBhY3Rpb25LZXk6ICdzdWJtaXQnLCBwYXJ0aWFsQWN0aW9uOiB7IGlzVmlzaWJsZTogIWN1cnI/LnBhZ2VUeXBlQ29uZmlnPy5zdWJtaXQ/LmlzSGlkZGVuIH0gfVxuICAgICAgXSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLnBhZ2VUeXBlID09PSAnY3JlYXRlJykgdGhpcy5zZXR1cENyZWF0ZVBhZ2VGb290ZXJBY3Rpb25zKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcucGFnZVR5cGUgPT09ICdjcmVhdGUnICYmIHRoaXMuY29uZmlnPy5wYWdlVHlwZUNvbmZpZz8uY2FuY2VsICE9PSB1bmRlZmluZWQpXG4gICAgICB0aGlzLmhhbmRsZUNhbmNlbEFjdGlvbldpdGhGb3JtQ2hhbmdlcygpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLnBhZ2VUeXBlID09PSAnY3JlYXRlJyAmJiB0aGlzLmNvbmZpZz8ucGFnZVR5cGVDb25maWc/LnNhdmVEcmFmdCAhPT0gdW5kZWZpbmVkKVxuICAgICAgdGhpcy5pbml0U2F2ZURyYWZ0Rm9vdGVyQWN0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcucGFnZVR5cGUgPT09ICdpbnNwZWN0JylcbiAgICAgIHRoaXMucGFnZVN0b3JlU2VydmljZS5pc1ZpZXdvbmx5JFxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJCkpXG4gICAgICAgIC5zdWJzY3JpYmUoaXNWaWV3b25seSA9PlxuICAgICAgICAgIHRoaXMudXBkYXRlSW5zcGVjdFBhZ2VPcGVyYXRpb25Nb2RlKFxuICAgICAgICAgICAgdGhpcy5jb25maWcucGFnZVR5cGVDb25maWcgYXMgUWRQYWdlVHlwZUluc3BlY3RDb25maWcsXG4gICAgICAgICAgICBpc1ZpZXdvbmx5ID8gJ3ZpZXcnIDogJ2VkaXQnXG4gICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgdGhpcy5zZXR1cFBhZ2VEaWFsb2dDbG9zZUNvbnRyYWN0KCk7XG4gICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ1JlZiAmJiB0aGlzLmRpYWxvZy5jbGVhclBhZ2VEaWFsb2dDYW5DbG9zZSh0aGlzLmRpYWxvZ1JlZik7XG4gICAgdGhpcy5ib3R0b21PZmZzZXQkPy5uZXh0KDApO1xuICAgIHRoaXMuX2Rlc3Ryb3llZCQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tDb25maWdWYWxpZGl0eSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnKSBjb25zb2xlLndhcm4oJ1FkVWkgfCBRZFBhZ2VDb21wb25lbnQgLSBUbyBjb25maWd1cmUgdGhlIHBhZ2UgeW91IHNob3VsZCBwcm92aWRlIGEgdmFsaWQgY29uZmlnLicpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cENyZWF0ZVBhZ2VGb290ZXJBY3Rpb25zKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhZ2VUeXBlQ29uZmlnID0gdGhpcy5jb25maWc/LnBhZ2VUeXBlQ29uZmlnIGFzIFFkUGFnZVR5cGVDcmVhdGVDb25maWc7XG4gICAgY29uc3QgYWN0aW9uS2V5czogUWRDcmVhdGVGb290ZXJBY3Rpb25LZXlbXSA9IFsnc2F2ZURyYWZ0JywgJ2NhbmNlbCcsICdzdWJtaXQnXTtcbiAgICBjb25zdCBhY3Rpb25zOiBQYXJ0aWFsRm9vdGVyQWN0aW9uW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgYWN0aW9uS2V5IG9mIGFjdGlvbktleXMpIHtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IHBhZ2VUeXBlQ29uZmlnW2FjdGlvbktleV07XG5cbiAgICAgIGlmICghYWN0aW9uKSBjb250aW51ZTtcblxuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgYWN0aW9uS2V5LFxuICAgICAgICBwYXJ0aWFsQWN0aW9uOiB7XG4gICAgICAgICAgLi4uKGFjdGlvbj8ubGFiZWw/LmkxOG4gPyB7IHRpdGxlSTE4bjogYWN0aW9uLmxhYmVsLmkxOG4gfSA6IHt9KSxcbiAgICAgICAgICBoYW5kbGVyOiB0aGlzLmdlbmVyYXRlRm9vdGVyQWN0aW9uSGFuZGxlcihhY3Rpb24/LmhhbmRsZXIpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZm9vdGVyU2VydmljZS51cGRhdGVBY3Rpb25zKGFjdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDYW5jZWxBY3Rpb25XaXRoRm9ybUNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZVxuICAgICAgLiRoYXNWYWx1ZXNDaGFuZ2VkKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSlcbiAgICAgIC5zdWJzY3JpYmUoaGFzQ2hhbmdlZCA9PiB7XG4gICAgICAgIHRoaXMuZm9vdGVyU2VydmljZS51cGRhdGVBY3Rpb25zKFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb25LZXk6ICdjYW5jZWwnLFxuICAgICAgICAgICAgcGFydGlhbEFjdGlvbjoge1xuICAgICAgICAgICAgICBoYW5kbGVyOiBoYXNDaGFuZ2VkXG4gICAgICAgICAgICAgICAgPyAoKTogdm9pZCA9PiB0aGlzLnNldHVwU3VibWl0QWN0aW9uVmFsaWRhdGlvbigpXG4gICAgICAgICAgICAgICAgOiAoKTogdm9pZCA9PiAodGhpcy5jb25maWc/LnBhZ2VUeXBlQ29uZmlnIGFzIFFkUGFnZVR5cGVDcmVhdGVDb25maWcpPy5jYW5jZWw/LmhhbmRsZXIoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFNhdmVEcmFmdEZvb3RlckFjdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBwYWdlVHlwZUNvbmZpZyA9IHRoaXMuY29uZmlnLnBhZ2VUeXBlQ29uZmlnIGFzIFFkUGFnZVR5cGVDcmVhdGVDb25maWc7XG5cbiAgICB0aGlzLmZvb3RlclNlcnZpY2Uuc2V0QWN0aW9ucyhbXG4gICAgICB7XG4gICAgICAgIGtleTogJ3NhdmVEcmFmdCcsXG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIHRpdGxlSTE4bjogcGFnZVR5cGVDb25maWcuc2F2ZURyYWZ0Py5sYWJlbD8uaTE4biA/PyAnaTE4bi5xZC5wYWdlLmZvb3Rlci5zYXZlRHJhZnQnLFxuICAgICAgICAgIHR5cGU6IFFkRm9vdGVyQWN0aW9uVHlwZS5TZWNvbmRhcnksXG4gICAgICAgICAgaGFuZGxlcjogKCk6IHZvaWQgPT4gcGFnZVR5cGVDb25maWc/LnNhdmVEcmFmdD8uaGFuZGxlcigpLFxuICAgICAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICBpc0Rpc2FibGVkOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUluc3BlY3RQYWdlT3BlcmF0aW9uTW9kZShwYWdlVHlwZUNvbmZpZzogUWRQYWdlVHlwZUluc3BlY3RDb25maWcsIG1vZGU6IFFkSW5zcGVjdE9wZXJhdGlvbk1vZGUpOiB2b2lkIHtcbiAgICB0aGlzLnN1Ym1pdEFjdGlvblNlcnZpY2Uuc2V0U3VibWl0QWN0aW9uRm9ySW5zcGVjdChwYWdlVHlwZUNvbmZpZywgbW9kZSA9PT0gJ3ZpZXcnKTtcblxuICAgIHRoaXMuZm9vdGVyU2VydmljZS51cGRhdGVBY3Rpb25zKFtcbiAgICAgIHsgYWN0aW9uS2V5OiAnc3VibWl0JywgcGFydGlhbEFjdGlvbjogeyBpc1Zpc2libGU6IG1vZGUgPT09ICd2aWV3JyAmJiAhcGFnZVR5cGVDb25maWc/LnN1Ym1pdD8uaXNIaWRkZW4gfSB9XG4gICAgXSk7XG5cbiAgICB0aGlzLmluaXRTdWJtaXRWYWxpZGF0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5faXNJbml0aWFsaXplZCkgdGhpcy5vcGVyYXRpb25Nb2RlQ2hhbmdlZC5lbWl0KG1vZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvb3RlckFjdGlvbkhhbmRsZXIoaGFuZGxlcj86ICh2YWx1ZXM6IHVua25vd24pID0+IHZvaWQpOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgIGlmICghaGFuZGxlcikgcmV0dXJuO1xuXG4gICAgICBoYW5kbGVyKHRoaXMuZm9ybUdyb3VwTWFuYWdlclNlcnZpY2UuaGFzRm9ybUdyb3VwcygpID8gdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZS5nZXRBbGxWYWx1ZXMoKSA6IGFyZ3MpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNldHVwU3VibWl0QWN0aW9uVmFsaWRhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ1xuICAgICAgLm9wZW4oUWRQYWdlQ2FuY2VsQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgIHRpdGxlOiB7IGkxOG46ICdpMThuLnFkLnBhZ2UuY2FuY2VsLmNvbmZpcm1hdGlvbi5kaWFsb2cudGl0bGUnIH0sXG4gICAgICAgIGRpYWxvZ1NpemU6IFFkRGlhbG9nU2l6ZS5TbWFsbCxcbiAgICAgICAgZGF0YTogdGhpcy5jb25maWcucGFnZVR5cGVDb25maWdcbiAgICAgIH0pXG4gICAgICAuY2xvc2VkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U3VibWl0VmFsaWRhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlXG4gICAgICAuJGFyZUZvcm1Hcm91cHNWYWxpZCgpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpLFxuICAgICAgICB0YXAoaXNWYWxpZCA9PiB7XG4gICAgICAgICAgY29uc3Qgc3VibWl0RGlzYWJsZWRJbmZvVGV4dCA9XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5wYWdlVHlwZSA9PT0gJ2luc3BlY3QnID8gdGhpcy5jb25maWcucGFnZVR5cGVDb25maWc/LnN1Ym1pdD8uZGlzYWJsZWRJbmZvIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgdGhpcy5mb290ZXJTZXJ2aWNlLnVwZGF0ZUFjdGlvbnMoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3Rpb25LZXk6ICdzdWJtaXQnLFxuICAgICAgICAgICAgICBwYXJ0aWFsQWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbEluZm86IGlzVmFsaWRcbiAgICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgICBpbmZvVHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHN1Ym1pdERpc2FibGVkSW5mb1RleHQgPz8geyBpMThuOiAnaTE4bi5xZC5wYWdlLnN1Ym1pdC5pbnZhbGlkRm9ybScgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBQYWdlRGlhbG9nQ2xvc2VDb250cmFjdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlhbG9nUmVmKSByZXR1cm47XG5cbiAgICBjb25zdCBkaWFsb2dTaXplID0gKHRoaXMuZGlhbG9nUmVmLmNvbmZpZyBhcyB1bmtub3duIGFzIHsgZGlhbG9nU2l6ZT86IFFkRGlhbG9nU2l6ZSB9KS5kaWFsb2dTaXplO1xuICAgIGlmIChkaWFsb2dTaXplICE9PSBRZERpYWxvZ1NpemUuRnVsbFdpZHRoKSByZXR1cm47XG5cbiAgICB0aGlzLmRpYWxvZy5zZXRQYWdlRGlhbG9nQ2FuQ2xvc2UoXG4gICAgICAoKSA9PlxuICAgICAgICB0aGlzLmZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlLiRoYXNWYWx1ZXNDaGFuZ2VkKCkucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIG1hcChoYXNDaGFuZ2VzID0+ICh7XG4gICAgICAgICAgICBjYW5DbG9zZTogIWhhc0NoYW5nZXMsXG4gICAgICAgICAgICBoYXNDaGFuZ2VzLFxuICAgICAgICAgICAgY2F1c2U6IGhhc0NoYW5nZXMgPyAnVU5TQVZFRF9DSEFOR0VTJyA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0pKVxuICAgICAgICApLFxuICAgICAgdGhpcy5kaWFsb2dSZWZcbiAgICApO1xuICB9XG59XG4iLCI8bWFpbiBxZFNuYWNrYmFyTGlzdGVuZXI+XG4gIDxxZC1wYWdlLW9iamVjdC1oZWFkZXJcbiAgICBbZGF0YS10ZXN0LWlkXT1cInRlc3RJZFwiXG4gICAgW2F0dHIuZGF0YS10ZXN0LWlkXT1cInRlc3RJZCArICdvYmplY3QtaGVhZGVyJ1wiXG4gICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgIFtoYXNOYXZpZ2F0aW9uXT1cImhhc05hdmlnYXRpb25cIlxuICA+PC9xZC1wYWdlLW9iamVjdC1oZWFkZXI+XG5cbiAgPGRpdiBjbGFzcz1cInBhZ2UtaW5mby1iYW5uZXJzXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwicWQtcGFnZS1pbmZvLWJhbm5lclwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZy5wYWdlVHlwZSA9PT0gJ2NyZWF0ZScgfHwgY29uZmlnLnBhZ2VUeXBlID09PSAnY3VzdG9tJ1wiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInFkLXBhZ2Utc3RlcHBlclwiPjwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcWRQYWdlU3RlcHBlckFkYXB0ZXJdXCI+PC9uZy1jb250ZW50PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLnBhZ2VUeXBlID09PSAnb3ZlcnZpZXcnIHx8IGNvbmZpZy5wYWdlVHlwZSA9PT0gJ2luc3BlY3QnIHx8IGNvbmZpZy5wYWdlVHlwZSA9PT0gJ2N1c3RvbSdcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJxZC1wYWdlLXRhYnNcIj48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3FkUGFnZVRhYnNBZGFwdGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJxZC1zZWN0aW9uXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltxZFNlY3Rpb25BZGFwdGVyXVwiPjwvbmctY29udGVudD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZy5wYWdlVHlwZSA9PT0gJ2N1c3RvbSdcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJvamVjdGVkQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbWFpbj5cblxuPGZvb3RlciAqbmdJZj1cImZvb3Rlckhhc0NvbnRlbnQkIHwgYXN5bmNcIj5cbiAgPHFkLXBhZ2UtZm9vdGVyIFthdHRyLmRhdGEtdGVzdC1pZF09XCJ0ZXN0SWQgKyAnLWZvb3RlcidcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcWRQYWdlRm9vdGVyXVwiPjwvbmctY29udGVudD5cbiAgPC9xZC1wYWdlLWZvb3Rlcj5cbjwvZm9vdGVyPlxuXG48YXNpZGUgKm5nSWY9XCJpc0NvbnRyb2xQYW5lbFZpc2libGVcIj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwicWQtcGFnZS1jb250cm9sLXBhbmVsXCI+PC9uZy1jb250ZW50PlxuPC9hc2lkZT5cblxuPHFkLXByb2plY3Rpb24tZ3VhcmQgKm5nSWY9XCJjb25maWcucGFnZVR5cGUgIT09ICdjdXN0b20nXCIgW3dhcm5pbmdNZXNzYWdlXT1cInByb2plY3Rpb25HdWFyZE1lc3NhZ2VcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByb2plY3RlZENvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbjwvcWQtcHJvamVjdGlvbi1ndWFyZD5cblxuPG5nLXRlbXBsYXRlICNwcm9qZWN0ZWRDb250ZW50PlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
679
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3FkLXVpL3NyYy9saWIvcGFnZS9wYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9wYWdlL3BhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDeEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDL0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDakksT0FBTyxFQUFFLDJCQUEyQixF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LEtBQUs7dUJBQUMsY0FBYztnQkFNckIsb0JBQW9CO3NCQURuQixNQUFNO2dCQUlQLFFBQVE7c0JBRFAsZUFBZTt1QkFBQyxrQkFBa0I7Z0JBSW5DLFlBQVk7c0JBRFgsWUFBWTt1QkFBQywyQkFBMkI7Z0JBSXpDLGdCQUFnQjtzQkFEZixZQUFZO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFJM0QsYUFBYTtzQkFEWixZQUFZO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFJeEQsdUJBQXVCO3NCQUR0QixZQUFZO3VCQUFDLDZCQUE2QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFJbEUsb0JBQW9CO3NCQURuQixZQUFZO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFJL0QsV0FBVztzQkFEVixlQUFlO3VCQUFDLHlCQUF5QjtnQkF5QnRDLGFBQWE7c0JBRGhCLFdBQVc7dUJBQUMsa0JBQWtCO2dCQU0zQixjQUFjO3NCQURqQixXQUFXO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kaWFsb2cnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtYXAsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBRRF9TQUZFX0JPVFRPTV9PRkZTRVQgfSBmcm9tICcuLi9jb3JlL2NvcmUubW9kdWxlJztcbmltcG9ydCB7IFFkRGlhbG9nU2VydmljZSwgUWREaWFsb2dTaXplIH0gZnJvbSAnLi4vZGlhbG9nL2RpYWxvZy5tb2R1bGUnO1xuaW1wb3J0IHsgUWRQYWdlU3RlcHBlckFkYXB0ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9wYWdlLXN0ZXBwZXIvYWRhcHRvcnMvcGFnZS1zdGVwcGVyLWFkYXB0ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IFFkUGFnZVN0ZXBwZXJDb21wb25lbnQgfSBmcm9tICcuLi9wYWdlLXN0ZXBwZXIvcGFnZS1zdGVwcGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRZFBhZ2VUYWJzQWRhcHRlckRpcmVjdGl2ZSB9IGZyb20gJy4uL3BhZ2UtdGFicy9hZGFwdG9ycy9wYWdlLXRhYnMtYWRhcHRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUWRQYWdlVGFic0NvbXBvbmVudCB9IGZyb20gJy4uL3BhZ2UtdGFicy9wYWdlLXRhYnMuY29tcG9uZW50JztcbmltcG9ydCB7IFFkU2VjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL3NlY3Rpb24vc2VjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgUWRQYWdlQ2FuY2VsQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jYW5jZWwtY29uZmlybWF0aW9uLWRpYWxvZy9wYWdlLWNhbmNlbC1jb25maXJtYXRpb24tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRZFBhZ2VDb250cm9sUGFuZWxDb21wb25lbnQgfSBmcm9tICcuL2NvbnRyb2wtcGFuZWwvcGFnZS1jb250cm9sLXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRZFBhZ2VJbmZvQmFubmVyQ29tcG9uZW50IH0gZnJvbSAnLi9pbmZvLWJhbm5lci9wYWdlLWluZm8tYmFubmVyLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBRZEluc3BlY3RPcGVyYXRpb25Nb2RlLFxuICBRZFBhZ2VDb25maWcsXG4gIFFkUGFnZVR5cGVDcmVhdGVDb25maWcsXG4gIFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnXG59IGZyb20gJy4vbW9kZWwvcGFnZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFFkQ3JlYXRlRm9vdGVyQWN0aW9uS2V5LCBRZEZvb3RlckFjdGlvblR5cGUsIFFkUGFnZUZvb3RlckFjdGlvbiB9IGZyb20gJy4vbW9kZWwvcGFnZS1mb290ZXItYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBRZEZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvc2VydmljZXMvZm9ybS1ncm91cC1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRQYWdlRm9vdGVyU2VydmljZSB9IGZyb20gJy4vc2hhcmVkL3NlcnZpY2VzL3BhZ2UtZm9vdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRQYWdlU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvc2VydmljZXMvcGFnZS1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFFkUGFnZVN1Ym1pdEFjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcy9wYWdlLXN1Ym1pdC1hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBRZFJlc29sdmVyVHJpZ2dlclNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcy9yZXNvbHZlci10cmlnZ2VyLnNlcnZpY2UnO1xuXG50eXBlIFBhcnRpYWxGb290ZXJBY3Rpb24gPSB7IGFjdGlvbktleTogUWRDcmVhdGVGb290ZXJBY3Rpb25LZXk7IHBhcnRpYWxBY3Rpb246IFBhcnRpYWw8UWRQYWdlRm9vdGVyQWN0aW9uPiB9O1xuXG4vLyBGb290ZXIgb2Zmc2V0IChweCkuIEtlZXAgaW4gc3luYyB3aXRoIFNDU1MgJHBhZ2UtZm9vdGVyLWhlaWdodCFcbmNvbnN0IFNBRkVfQk9UVE9NX09GRlNFVF9QWCA9IDY0O1xuXG4vKipcbiAqICoqUWRQYWdlKiogc2VydmVzIGFzIHRoZSBjZW50cmFsIHN0cnVjdHVyYWwgZWxlbWVudCB3aXRoaW4gdGhlIGhpZXJhcmNoeSB1bmRlciB0aGUgKipRZFNoZWxsKiouXG4gKiBJbnRlZ3JhdGlvbiBpcyBkb25lIHRocm91Z2ggdGhlIEFuZ3VsYXIgUm91dGluZyBNb2R1bGUsIGFuZCBRZFBhZ2UgaXMgZGVzaWduZWQgdG8gYmUgcmVzcG9uc2l2ZSBhY3Jvc3MgdmFyaW91cyBzY3JlZW4gc2l6ZXMgcmlnaHQgb3V0IG9mIHRoZSBib3guXG4gKlxuICogIyMjIyAqKlBhZ2UgVHlwZXMqKlxuICpcbiAqIFFkUGFnZSB1c2VzIHBhZ2UgdHlwZXMgdG8gZGVjaWRlIGhvdyB0aGUgcGFnZSBsb29rcyBhbmQgd29ya3MuIEVhY2ggcGFnZSB0eXBlIGhhcyBpdHMgb3duIHNldHRpbmdzIGFuZCBhY3Rpb25zLlxuICpcbiAqIC0gKipvdmVydmlldyoqOiBEaXNwbGF5cyBhIHN1bW1hcnkgb3IgYSBsaXN0IG9mIG9iamVjdHMsIHByb3ZpZGluZyBhbiBvdmVydmlldyBvZiBtdWx0aXBsZSBidXNpbmVzcyBjYXNlcy5cbiAqIC0gKipjcmVhdGUqKjogQWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBvYmplY3QsIHJlcHJlc2VudGluZyBhIGJ1c2luZXNzIGNhc2UuXG4gKiAtICoqaW5zcGVjdCoqOiBFbmFibGVzIHZpZXdpbmcsIGVkaXRpbmcsIGFuZCBleGVjdXRpbmcgYWRkaXRpb25hbCBhY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIG9iamVjdCwgd2hpY2ggYWxzbyByZXByZXNlbnRzIGEgYnVzaW5lc3MgY2FzZS5cbiAqIC0gKipjdXN0b20qKjogUHJvdmlkZXMgYSB3YXkgdG8gaW1wbGVtZW50IHVuaXF1ZSBmdW5jdGlvbmFsaXR5IHRoYXQgZG9lc27igJl0IGZpdCB0aGUgb3RoZXIgcHJlZGVmaW5lZCBwYWdlIHR5cGVzLlxuICpcbiAqICoqTm90ZSB0aGF0IHRoZSAnY3VzdG9tJyBwYWdlIHR5cGUgc2hvdWxkIGJlIHVzZWQgb25seSBhcyBhIGZhbGxiYWNrIGZvciB2ZXJ5IHNwZWNpZmljIGNhc2VzLiBJZiB5b3UgZW5jb3VudGVyIHN1Y2ggYSBzaXR1YXRpb24sIHBsZWFzZSBjb250YWN0IHRoZSBRdWFkcmVsIHRlYW0uKipcbiAqXG4gKiAjIyMjICoqRmFjZXRzKipcbiAqXG4gKiBUaGVzZSBhcmUgZXh0cmEgcGllY2VzIG9mIGluZm9ybWF0aW9uIHNob3duIGluIHRoZSBwYWdlIGhlYWRlci4gVGhleSBnaXZlIGNvbnRleHQgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgb2JqZWN0IG1vZGVsIGJlaW5nIHZpZXdlZCBvciBlZGl0ZWQuIFRoZXJlIGFyZSBzZXZlcmFsIHR5cGVzIG9mIGZhY2V0cywgaW5jbHVkaW5nIGBzdGF0dXNgLCBgdmFsdWVgLCBgY3JpdGljYWxpdHlgLCBgcmVmZXJlbmNlc2AsIGBwcm9ncmVzc2AsIGBkYXRlYCwgYHNpbmdsZVNlbGVjdGAsIGFuZCBgbXVsdGlTZWxlY3RgLiBFYWNoIHR5cGUgaGFzIGl0cyBvd24gb3B0aW9ucy4gRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBgUWRQYWdlSGVhZGVyRmFjZXRgIGludGVyZmFjZS5cbiAqXG4gKiAjIyMjICoqQ29udGV4dCoqXG4gKlxuICogVGhlIGBjb250ZXh0YCBhY3RzIGFzIGEgZmlsdGVyIHRoYXQgY2FuIGJlIHNlbGVjdGVkIG9uIHRoZSBvdmVydmlldyBwYWdlIGFuZCBwcm92aWRlcyB0aGUgYnVzaW5lc3MgY29udGV4dCwgd2hpY2ggcmVtYWlucyBjb25zaXN0ZW50IHRocm91Z2hvdXQgdGhlIGVudGlyZSBhcHBsaWNhdGlvbi4gT24gY3JlYXRlIGFuZCBpbnNwZWN0IHBhZ2VzLCB0aGUgY29udGV4dCBpcyBkaXNwbGF5ZWQgYXMgcmVhZC1vbmx5LiBGb3IgbW9yZSBkZXRhaWxzLCBjaGVjayB0aGUgZGVkaWNhdGVkIGNoYXB0ZXIgaW4gU3Rvcnlib29rLlxuICpcbiAqXG4gKiAjIyMjICoqUGFnZSBJbmZvIEJhbm5lcnMqKlxuICpcbiAqIFRvIGluc2VydCBhIHBhZ2UgaW5mbyBiYW5uZXIgdW5kZXIgdGhlIHBhZ2UgaGVhZGVyLCBqdXN0IHB1dCBhIGBxZC1wYWdlLWluZm8tYmFubmVyYCBjb21wb25lbnQgaW5zaWRlIHRoZSBgcWQtcGFnZWAuIE11bHRpcGxlIGNvbnNlY3V0aXZlIGluZm8gYmFubmVycyBvZiB0aGUgc2FtZSB0eXBlIHdpbGwgYmUgbWVyZ2VkIGludG8gb25lIGJhbm5lciBjb250YWluZXIuIFBhZ2UgaW5mbyBiYW5uZXJzIGhhdmUgdGhlIHNhbWUgYXBwZWFyYW5jZSBsaWtlIG5vdGlmaWNhdGlvbnMuXG4gKlxuICogIyMjIyAqKkNvbnRyb2wgUGFuZWwqKlxuICpcbiAqIFRoZSBjb250cm9sIHBhbmVsIGlzIGxvY2F0ZWQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIHBhZ2UgYW5kIGlzIHVzZWQgdG8gZGlzcGxheSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFuZCBmdW5jdGlvbnMgcmVsZXZhbnQgdG8gYSBzcGVjaWZpYyBidXNpbmVzcyBjYXNlLCB3aGljaCBpcyBsaW5rZWQgdG8gYSBzcGVjaWZpYyBvYmplY3QgbW9kZWwuIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCB0aGUgZGVkaWNhdGVkIGNoYXB0ZXIgaW4gU3Rvcnlib29rLlxuICpcbiAqICMjIyMgKipBY3Rpb25zKipcbiAqXG4gKiBUaGVzZSBhcmUgaW50ZXJhY3RpdmUgZWxlbWVudHMgdGhhdCBwZXJmb3JtIHNwZWNpZmljIGZ1bmN0aW9ucy4gRnVuY3Rpb25zIGZvciB0aGVzZSBhY3Rpb25zIGNhbiBiZSBzZXQgdXAgdGhyb3VnaCBjb25maWd1cmF0aW9ucy4gQ3VzdG9tIGFjdGlvbnMgY2FuIGJlIGFkZGVkIHRvIGFueSBwYWdlIHR5cGUuIEFkZGl0aW9uYWxseSwgYWxsIGFjdGlvbnMgY2FuIGJlIGNvbmZpZ3VyZWQgYW5kIGN1c3RvbWl6ZWQgd2l0aCB5b3VyIG93biB0ZXh0LCB3aGljaCB3aWxsIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHRleHRzLlxuICpcbiAqIFBsZWFzZSBjaGVjayB0aGUgcmVsZXZhbnQgaW50ZXJmYWNlcyBmb3IgZWFjaCBwYWdlIHR5cGU6IGBRZFBhZ2VDb25maWdPdmVydmlld2AsIGBRZFBhZ2VDb25maWdDcmVhdGVgLCBgUWRQYWdlQ29uZmlnSW5zcGVjdGAsIGFuZCBgUWRQYWdlQ29uZmlnQ3VzdG9tYC5cbiAqXG4gKiAjIyMjICoqVmFsaWRhdGlvbi9QYXJhbWV0ZXJpemF0aW9uKipcbiAqXG4gKiBWYWxpZGF0aW9uIGFuZCBwYXJhbWV0ZXJpemF0aW9uIGFyZSBjb3ZlcmVkIGluIGEgZGVkaWNhdGVkIGNoYXB0ZXIgaW4gdGhlIFN0b3J5Ym9vay4gUGxlYXNlIGNoZWNrIHRoZSBcIlZhbGlkYXRpb25cIiBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqICMjIyMgKipSZXNvbHZlcioqXG4gKlxuICogVXNpbmcgYSByZXNvbHZlciB0byBmZXRjaCBwYWdlIG9iamVjdCBkYXRhIGlzIGVzc2VudGlhbCB0byB0aGUgcGFnZSBjb25jZXB0LiBBZGQgdGhlIHJlc29sdmVyIHRvIHRoZSBjb21wb25lbnQncyBwcm92aWRlcnMgYW5kIHVzZSB0aGUgYFFEX1BBR0VfT0JKRUNUX1JFU09MVkVSX1RPS0VOYCB0b2tlbi4gVGhpcyBhcHByb2FjaCBlbmFibGVzIHR5cGUgc2FmZXR5IGFuZCB1c2VyIGZlZWRiYWNrIGJ5IGVmZmVjdGl2ZWx5IG1hbmFnaW5nIHRoZSBuZWNlc3NhcnkgZGF0YSBmb3IgdGhlIHBhZ2UuXG4gKlxuICogYGBgdHNcbiAqIGludGVyZmFjZSBNeU9iamVjdE1vZGVsIHtcbiAqICAgLy8gTWV0YWRhdGEgZGlzcGxheWVkIGluIHRoZSBPYmplY3RIZWFkZXJcbiAqICAgc3RhdGU6IE15U3RhdGU7XG4gKiAgIGNvdW50cnlPZkRlc3RpbmF0aW9uOiBNeUNvdW50cnlPZkRlc3RpbmF0aW9uO1xuICogICAvLyBBcHBlYXJzIG5vdCBpbiB0aGUgT2JqZWN0SGVhZGVyXG4gKiAgIHBheWxvYWQ6IE15UGF5bG9hZDtcbiAqIH1cbiAqXG4gKiB0eXBlIE15T2JqZWN0TWV0YWRhdGEgPSAnc3RhdGUnIHwgJ2NvdW50cnlPZkRlc3RpbmF0aW9uJztcbiAqXG4gKiBASW5qZWN0YWJsZSgpXG4gKiBjbGFzcyBNeU9iamVjdE1vZGVsUmVzb2x2ZXIgaW1wbGVtZW50cyBRZFBhZ2VPYmplY3RSZXNvbHZlcjxNeU9iamVjdE1vZGVsPiB7XG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cbiAqXG4gKiAgIHJlc29sdmUoKTogT2JzZXJ2YWJsZTxNeU9iamVjdE1vZGVsPiB7XG4gKiAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICogICAgICAgLmdldDxNeU9iamVjdE1vZGVsPignbXktYXBpJylcbiAqICAgICAgIC5waXBlKHRhcCgoZGF0YTogTXlPYmplY3RNb2RlbCkgPT4gZG9Tb21ldGhpbmdXaXRoKGRhdGEpKSk7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgc2VsZWN0b3I6ICdteS1wYWdlJyxcbiAqICAgdGVtcGxhdGVVcmw6ICcuL215LXBhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICogICBwcm92aWRlcnM6IFtcbiAqICAgICB7XG4gKiAgICAgICBwcm92aWRlOiBRRF9QQUdFX09CSkVDVF9SRVNPTFZFUl9UT0tFTixcbiAqICAgICAgIHVzZUNsYXNzOiBNeU9iamVjdE1vZGVsUmVzb2x2ZXJcbiAqICAgICB9XG4gKiAgIF1cbiAqIH0pXG4gKiBjbGFzcyBNeVBhZ2VDb21wb25lbnQge1xuICogICBwYWdlQ29uZmlnOiBRZFBhZ2VDb25maWc8UGljazxNeU9iamVjdE1vZGVsLCBNeU9iamVjdE1ldGFkYXRhPj4gPSB7XG4gKiAgICAgdGl0bGU6IHsgaTE4bjogJ2kxOG4ucGFnZS50aXRsZScgfSxcbiAqICAgICBwYWdlVHlwZTogJ2luc3BlY3QnLFxuICogICAgIGhlYWRlckZhY2V0czogW1xuICogICAgICAge1xuICogICAgICAgICBuYW1lOiAnc3RhdHVzJyxcbiAqICAgICAgICAgbGFiZWw6IHtcbiAqICAgICAgICAgICBpMThuOiAnaTE4bi5zdGF0dXMubGFiZWwnXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICAgIG9wdGlvbnM6IHtcbiAqICAgICAgICAgICB0eXBlOiAnc3RhdHVzJ1xuICogICAgICAgICB9XG4gKiAgICAgICB9LFxuICogICAgICAge1xuICogICAgICAgICBuYW1lOiAnY291bnRyeU9mRGVzdGluYXRpb24nLFxuICogICAgICAgICBsYWJlbDoge1xuICogICAgICAgICAgIGkxOG46ICdpMThuLmNvdW50cnlPZkRlc3RpbmF0aW9uLmxhYmVsJ1xuICogICAgICAgICB9LFxuICogICAgICAgICBvcHRpb25zOiB7XG4gKiAgICAgICAgICAgdHlwZTogJ3ZhbHVlJ1xuICogICAgICAgICB9XG4gKiAgICAgICB9XG4gKiAgICAgXSxcbiAqICAgICBwYWdlVHlwZUNvbmZpZzoge1xuICogICAgICAgY2FuY2VsOiB7XG4gKiAgICAgICAgIGhhbmRsZXI6ICgpID0+IGhhbmRsZUNhbmNlbCgpXG4gKiAgICAgICB9LFxuICogICAgICAgc2F2ZToge1xuICogICAgICAgICBoYW5kbGVyOiAoZm9ybVZhbHVlcykgPT4gaGFuZGxlU2F2ZShmb3JtVmFsdWVzKVxuICogICAgICAgfVxuICogICAgIH1cbiAqICAgfTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIyMgKipVcGRhdGluZyBGYWNldHMqKlxuICpcbiAqIFR5cGljYWxseSwgdGhlIHZhbHVlcyBvZiB0aGUgZmFjZXRzIG9uIGEgY3JlYXRlIG9yIGluc3BlY3QgcGFnZSBhcmUgc2V0IHRvIHJlYWQtb25seS4gSG93ZXZlciwgdGhlcmUgbWF5IGJlIGNhc2VzIHdoZXJlLCBmb3IgZXhhbXBsZSwgYSBzdGF0dXMgY2hhbmdlIGlzIG5lZWRlZCwgc3VjaCBhcyB0aHJvdWdoIGEgZGlhbG9nLiBGb3IgdGhpcyBwdXJwb3NlLCB3ZSBoYXZlIHByb3ZpZGVkIGFuIHVwZGF0ZSBtZXRob2QuIEluIHRoZSByZXNvbHZlciBzZXJ2aWNlLCBkZWZpbmUgYW4gZW1wdHkgbWV0aG9kIGNhbGxlZCBgdXBkYXRlTWV0YWRhdGFgLiBJbmplY3QgdGhpcyBzZXJ2aWNlIHVzaW5nIGl0cyB0eXBlLCBhbmQgdGhlbiBjYWxsIHRoZSBgdXBkYXRlTWV0YWRhdGFgIG1ldGhvZCB3aXRoIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXIuXG4gKlxuICogKipQbGVhc2Ugbm90ZTogVGhlc2UgdmFsdWVzIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgZGlyZWN0bHkgd2l0aGluIGEgUWRQYWdlLioqXG4gKlxuICogYGBgdHNcbiAqIEBJbmplY3RhYmxlKClcbiAqIGNsYXNzIE15T2JqZWN0TW9kZWxSZXNvbHZlciBpbXBsZW1lbnRzIFFkUGFnZU9iamVjdFJlc29sdmVyPE15T2JqZWN0TW9kZWw+IHtcbiAqICAgY29uZmlnOiBRZFBhZ2VPYmplY3RSZXNvbHZlckNvbmZpZyA9IHtcbiAqICAgICAvLyB5b3VyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlXG4gKiAgIH1cbiAqXG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cbiAqXG4gKiAgIHJlc29sdmUoKTogT2JzZXJ2YWJsZTxNeU9iamVjdE1vZGVsPiB7XG4gKiAgICAgLy8geW91ciBpbXBsZW1lbnRhdGlvbiBoZXJlXG4gKiAgIH1cbiAqXG4gKiAgIHVwZGF0ZU1ldGFkYXRhKG1ldGFkYXRhOiBQYXJ0aWFsPE15T2JqZWN0TW9kZWw+KSB7XG4gKiAgICAgLy8gbGVhdmUgZW1wdHkgaGVyZSAmIGNhbGwgaW4geW91ciBjb21wb25lbnRcbiAqICAgfVxuICogfVxuICpcbiAqIEBDb21wb25lbnQoe1xuICogICAvLyAuLi5cbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAge1xuICogICAgICAgcHJvdmlkZTogUURfUEFHRV9PQkpFQ1RfUkVTT0xWRVJfVE9LRU4sXG4gKiAgICAgICB1c2VDbGFzczogTXlPYmplY3RNb2RlbFJlc29sdmVyXG4gKiAgICAgfVxuICogICBdXG4gKiB9KVxuICogY2xhc3MgTXlQYWdlQ29tcG9uZW50IHtcbiAqICAgY29uc3RydWN0b3IoQEluamVjdChRRF9QQUdFX09CSkVDVF9SRVNPTFZFUl9UT0tFTikgcHJpdmF0ZSBvYmplY3RSZXNvbHZlcjogTXlPYmplY3RNb2RlbFJlc29sdmVyKSB7fVxuICpcbiAqICAgdXBkYXRlU3RhdHVzKCkge1xuICogICAgIHRoaXMub2JqZWN0UmVzb2x2ZXIudXBkYXRlTWV0YWRhdGEoeyBzdGF0ZTogJ1VwZGF0ZWQnIH0pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyMjICoqT3ZlcnZpZXcgUGFnZSoqXG4gKlxuICogT24gYW4gb3ZlcnZpZXcgcGFnZSwgYSBsaXN0IG9mIGJ1c2luZXNzIGNhc2VzIGNhbiBiZSBkaXNwbGF5ZWQuIFR5cGljYWxseSwgdGhpcyBpcyBkb25lIGluIGEgKipRZFRhYmxlKiosIGluY2x1ZGluZyBmaWx0ZXJzIGFuZC9vciBzZWFyY2ggb3B0aW9ucy4gVGhlcmUgYXJlIGFjdGlvbnMgdGhhdCBoYW5kbGUgcm91dGluZyB0byB0aGUgcmVsYXRlZCBkZXRhaWwgcGFnZXMsIHdoZXJlIHRoZSBidXNpbmVzcyBjYXNlcywgcmVwcmVzZW50ZWQgYnkgYSBidXNpbmVzcyBvYmplY3QgbW9kZWwsIGNhbiBiZSB2aWV3ZWQsIGVkaXRlZCwgb3IgbmV3bHkgY3JlYXRlZC5cbiAqXG4gKiBgYGB0c1xuICogY29uc3Qgb3ZlcnZpZXdQYWdlQ29uZmlnOiBRZFBhZ2VDb25maWc8TXlPYmplY3RUeXBlPiA9IHtcbiAqICAgdGl0bGU6IHsgaTE4bjogJ2kxOG4ubXktcGFnZS50aXRsZScgfSxcbiAqICAgcGFnZVR5cGU6ICdvdmVydmlldycsXG4gKiAgIHBhZ2VUeXBlQ29uZmlnOiB7XG4gKiAgICAgY3VzdG9tQWN0aW9uczogW1xuICogICAgICAge1xuICogICAgICAgICBpMThuOiAnaTE4bi5jdXN0b20uYWN0aW9uJyxcbiAqICAgICAgICAgaGFuZGxlcjogKCkgPT4gZG9Tb21ldGhpbmcoKVxuICogICAgICAgfVxuICogICAgIF1cbiAqICAgfVxuICogfTtcbiAqIGBgYFxuICpcbiAqIGBgYGh0bWxcbiAqIDxxZC1wYWdlIFtjb25maWddPVwicGFnZUNvbmZpZ1wiPlxuICogICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICA8cWQtdGFibGUgW2NvbmZpZ109XCJ0YWJsZUNvbmZpZ1wiPjwvcWQtdGFibGU+XG4gKiAgIDwvcWQtc2VjdGlvbj5cbiAqIDwvcWQtcGFnZT5cbiAqIGBgYFxuICpcbiAqIFRvIGNvbmZpZ3VyZSBjb250ZXh0cyBmb3IgYSBwYWdlLCB5b3UgY2FuIGVhc2lseSBzZXQgY29udGV4dHMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBvdmVydmlldyBwYWdlLiBUaGV5IGFyZSB0aGVuIHNlbGVjdGFibGUgb24gdGhlIG92ZXJ2aWV3IHBhZ2U6XG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IG92ZXJ2aWV3UGFnZUNvbmZpZzogUWRQYWdlQ29uZmlnPE15T2JqZWN0VHlwZT4gPSB7XG4gKiAgIC8vIC4uLlxuICogICBjb250ZXh0czogW1xuICogICAgIHtcbiAqICAgICAgIGlkOiAndHlwZU9mVHJhZmZpYycsXG4gKiAgICAgICBsYWJlbDogeyBpMThuOiAnVmVya2VocnNhcnQnIH0sXG4gKiAgICAgICB0eXBlOiAnc2luZ2xlJyxcbiAqICAgICAgIHNlbGVjdGVkOiB7XG4gKiAgICAgICAgIGxhYmVsOiB7IGkxOG46ICdTY2hpZW5lJyB9LFxuICogICAgICAgICB2YWx1ZTogJ3JhaWwnXG4gKiAgICAgICB9LFxuICogICAgICAgb3B0aW9uczogW1xuICogICAgICAgICB7XG4gKiAgICAgICAgICAgdmFsdWU6ICdyYWlsJyxcbiAqICAgICAgICAgICBsYWJlbDogeyBpMThuOiAnU2NoaWVuZScgfVxuICogICAgICAgICB9LFxuICogICAgICAgICB7XG4gKiAgICAgICAgICAgdmFsdWU6ICdhaXInLFxuICogICAgICAgICAgIGxhYmVsOiB7IGkxOG46ICdMdWZ0JyB9XG4gKiAgICAgICAgIH1cbiAqICAgICAgIF1cbiAqICAgICB9XG4gKiAgIF1cbiAqICAgLy8gLi4uXG4gKiB9O1xuICogYGBgXG4gKlxuICogIyMjIyAqKkNyZWF0ZSBQYWdlKipcbiAqXG4gKiBPbiB0aGUgY3JlYXRlIHBhZ2UsIGEgbmV3IGJ1c2luZXNzIGNhc2UgY2FuIGJlIGNyZWF0ZWQuIFRoaXMgcGFnZSB0eXBpY2FsbHkgaW5jbHVkZXMgZm9ybXMgZm9yIGVudGVyaW5nIGRhdGEuIFRoZSBzdWJtaXQgYnV0dG9uIGlzIHBhcmFtZXRlcml6ZWQgd2l0aCB0aGUgZm9ybSBkYXRhIGFuZCBpcyB2YWxpZGF0ZWQgdGhyb3VnaCB0aGUgUWRQYWdlU3RlcHBlci5cbiAqIFRoZSBjbGljayBvbiB0aGUgc3VibWl0IGJ1dHRvbiBzaG91bGQgc3VibWl0IHRoZSBjcmVhdGlvbiBvZiB0aGUgYnVzaW5lc3MgY2FzZSBvciBvYmplY3QuIFlvdSBjYW4gZGVmaW5lIGEgc3BlY2lmaWMgaGFuZGxlciBpbiB0aGUgc3VibWl0IGJ1dHRvbidzIGNvbmZpZ3VyYXRpb24gdG8gY3JlYXRlIHRoZSBvYmplY3QuXG4gKiBJZiBvbmx5IG9uZSBzdGVwIGlzIG5lZWRlZCwgdGhlIHNpbmdsZS1zdGVwIG1vZGUgY2FuIGJlIHVzZWQuIEluIHNpbmdsZS1zdGVwIG1vZGUsIHRoZSBzdGVwcGVyIGlzIHZpc3VhbGx5IGhpZGRlbiBhbmQgYmVoYXZlcyBsaWtlIGEgKipRZFNlY3Rpb24qKi5cbiAqXG4gKiBgYGB0c1xuICogY29uc3QgY3JlYXRlUGFnZUNvbmZpZzogUWRQYWdlQ29uZmlnPE15T2JqZWN0VHlwZT4gPSB7XG4gKiAgIHRpdGxlOiB7IGkxOG46ICdpMThuLnBhZ2UudGl0bGUnIH0sXG4gKiAgIHBhZ2VUeXBlOiAnY3JlYXRlJyxcbiAqICAgcGFnZVR5cGVDb25maWc6IHtcbiAqICAgICBzdWJtaXQ6IHtcbiAqICAgICAgIGhhbmRsZXI6IChmb3JtVmFsdWVzKSA9PiBoYW5kbGVTdWJtaXQoZm9ybVZhbHVlcylcbiAqICAgICB9XG4gKiAgIH1cbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBgYGBodG1sXG4gKiA8IS0tIEZvciBcIlF1aWNrIEFkZFwiIHVzZSBQYWdlU3RlcHBlciBpbiBzaW5nbGUtc3RlcCBtb2RlIC0tPlxuICogPHFkLXBhZ2UgW2NvbmZpZ109XCJwYWdlQ29uZmlnXCI+XG4gKiAgIDxxZC1wYWdlLXN0ZXBwZXIgW2NvbmZpZ109XCJzdGVwcGVyQ29uZmlnXCI+XG4gKiAgICAgPHFkLXBhZ2Utc3RlcCBbY29uZmlnXT1cInN0ZXBDb25maWdPbmVcIj5cbiAqICAgICAgIDxxZC1zZWN0aW9uIFtjb25maWddPVwic2VjdGlvbkNvbmZpZ1wiPlxuICogICAgICAgICA8cWQtZ3JpZCBbY29uZmlnXT1cImdyaWRDb25maWdcIiBbZm9ybUdyb3VwXT1cIm15Rm9ybXNcIiBxZENvbm5lY3RGb3JtU3RhdGVUb1BhZ2U9XCJteUZvcm1zXCI+XG4gKiAgICAgICAgICAgPCEtLSB5b3VyIHFkLWZvcm0tY29tcG9uZW50cyBoZXJlIC0tPlxuICogICAgICAgICA8L3FkLWdyaWQ+XG4gKiAgICAgICA8L3FkLXNlY3Rpb24+XG4gKiAgICAgPC9xZC1wYWdlLXN0ZXA+XG4gKiAgIDwvcWQtcGFnZS1zdGVwcGVyPlxuICogPC9xZC1wYWdlPlxuICpcbiAqIDwhLS0gV2l0aCBQYWdlU3RlcHBlciB1c2luZyBtdWx0aXBsZSBzdGVwcyAtLT5cbiAqIDxxZC1wYWdlIFtjb25maWddPVwicGFnZUNvbmZpZ1wiPlxuICogICA8cWQtcGFnZS1zdGVwcGVyIFtjb25maWddPVwic3RlcHBlckNvbmZpZ1wiPlxuICogICAgIDxxZC1wYWdlLXN0ZXAgW2NvbmZpZ109XCJzdGVwQ29uZmlnT25lXCI+XG4gKiAgICAgICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICAgICAgPHFkLWdyaWQgW2NvbmZpZ109XCJncmlkQ29uZmlnXCIgW2Zvcm1Hcm91cF09XCJteUZvcm1zT25lXCIgcWRDb25uZWN0Rm9ybVN0YXRlVG9QYWdlPVwibXlGb3Jtc09uZVwiPlxuICogICAgICAgICAgIDwhLS0geW91ciBxZC1mb3JtLWNvbXBvbmVudHMgaGVyZSAtLT5cbiAqICAgICAgICAgPC9xZC1ncmlkPlxuICogICAgICAgPC9xZC1zZWN0aW9uPlxuICogICAgIDwvcWQtcGFnZS1zdGVwPlxuICogICAgIDxxZC1wYWdlLXN0ZXAgW2NvbmZpZ109XCJzdGVwQ29uZmlnVHdvXCI+XG4gKiAgICAgICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICAgICAgPHFkLWdyaWQgW2NvbmZpZ109XCJncmlkQ29uZmlnXCIgW2Zvcm1Hcm91cF09XCJteUZvcm1zVHdvXCIgcWRDb25uZWN0Rm9ybVN0YXRlVG9QYWdlPVwibXlGb3Jtc1R3b1wiPlxuICogICAgICAgICAgIDwhLS0geW91ciBxZC1mb3JtLWNvbXBvbmVudHMgaGVyZSAtLT5cbiAqICAgICAgICAgPC9xZC1ncmlkPlxuICogICAgICAgPC9xZC1zZWN0aW9uPlxuICogICAgIDwvcWQtcGFnZS1zdGVwPlxuICogICA8L3FkLXBhZ2Utc3RlcHBlcj5cbiAqIDwvcWQtcGFnZT5cbiAqIGBgYFxuICpcbiAqIFRvIGFsbG93IHJlc29sdmluZyBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyB3aGVuIGdvaW5nIHRvIG5leHQgc3RlcCwgeW91IGNhbiBwcm92aWRlIGEgcmVzb2x2ZXIgb2YgdHlwZSBRZFBhZ2VTdGVwUmVzb2x2ZXI6XG4gKlxuICogYGBgdHNcbiAqIGNsYXNzIE15UmVzb2x2ZXIgaW1wbGVtZW50cyBRZFBhZ2VTdGVwUmVzb2x2ZXIge1xuICogICAuLi5cbiAqXG4gKiAgIHJlc29sdmUoaW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICogICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcIm5leHQtc3RlcC5jb21cIik7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgc2VsZWN0b3I6ICdxZC11aS1wYWdlLWNyZWF0ZScsXG4gKiAgIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUuY29tcG9uZW50Lmh0bWwnLFxuICogICBwcm92aWRlcnM6IFtcbiAqICAgICB7XG4gKiAgICAgICBwcm92aWRlOiBRRF9QQUdFX1NURVBfUkVTT0xWRVJfVE9LRU4sXG4gKiAgICAgICB1c2VDbGFzczogUGFnZVN0ZXBSZXNvbHZlclxuICogICAgIH1cbiAqICAgXVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBDcmVhdGVDb21wb25lbnQge1xuICogYGBgXG4gKlxuICogIyMjIyAqKkluc3BlY3QgUGFnZSoqXG4gKlxuICogT24gYW4gaW5zcGVjdCBwYWdlLCBhIHNwZWNpZmljIGJ1c2luZXNzIGNhc2UgaXMgZGlzcGxheWVkIGFuZCBtYXkgYmUgZWRpdGVkIG9yIHN1Ym1pdHRlZC4gRGVwZW5kaW5nIG9uIHlvdXIgbmVlZHMgeW91IGNhbiBoaWRlIHRoZSBzdWJtaXQgYnV0dG9uLlxuICogSW4gY29udHJhc3QgdG8gYSBjcmVhdGUgcGFnZSwgYW4gZXhpc3Rpbmcgb2JqZWN0IGlzIHNob3duIGFuZCBwb3RlbnRpYWxseSB1cGRhdGVkLlxuICpcbiAqIFRoZSBwYWdlIG9wZXJhdGVzIGluIG9uZSBvZiB0d28gbW9kZXMgLSBgdmlld2Agb3IgYGVkaXRgIC0gYXMgZGVmaW5lZCBieSB0aGUgYG9wZXJhdGlvbk1vZGVgIGNvbmZpZ3VyYXRpb24ga2V5LlxuICpcbiAqIFRoZSBgdmlld29ubHlgIGJlaGF2aW9yIGRlZmluZWQgYnkgdGhlIG9wZXJhdGlvbiBtb2RlIGlzIGF1dG9tYXRpY2FsbHkgcHJvcGFnYXRlZCB0byBhbGwgbmVzdGVkIFFkU2VjdGlvbiBjb21wb25lbnRzIHRoYXQgYXJlIHBhcnQgb2YgYSBRTFMsXG4gKiBhcyB3ZWxsIGFzIHRvIGZ1bmN0aW9uYWwgcGF0dGVybnMgc3VjaCBhcyBRZFRhYmxlLCBRZFRyZWUsIFFkRmlsZUNvbGxlY3RvciwgYW5kIFFkUXVpY2tFZGl0LlxuICogQWxsIGZvcm1zIGFyZSByZW5kZXJlZCBlaXRoZXIgaW4gdmlld29ubHkgb3IgZWRpdGFibGUgbW9kZSBhY2NvcmRpbmdseS5cbiAqXG4gKiBUaGlzIGJlaGF2aW9yIGNhbiBiZSBleHBsaWNpdGx5IG92ZXJyaWRkZW4gaW4gZWFjaCBjb21wb25lbnTigJlzIGNvbmZpZ3VyYXRpb24gLSBmb3IgZXhhbXBsZSwgdG8gYWxsb3cgY2VydGFpbiBmaWVsZHMgdG8gcmVtYWluIGVkaXRhYmxlLlxuICpcbiAqIC0gKip2aWV3Kio6IEEgc3VibWl0IGFjdGlvbiBjYW4gb3B0aW9uYWxseSBiZSBhZGRlZCBmb3IgcHJvY2Vzcy1yZWxhdGVkIG9wZXJhdGlvbnMgc3VjaCBhcyBzdGF0dXMgdXBkYXRlcy5cbiAqICAgVGhlIGFjdGlvbiByZWNlaXZlcyB0aGUgY3VycmVudCBmb3JtIHZhbHVlcyBhbmQgc3VwcG9ydHMgdmFsaWRhdGlvbiBhbmQgcGFyYW1ldGVyaXphdGlvbi5cbiAqXG4gKiAtICoqZWRpdCoqOiBUeXBpY2FsbHkgaW5jbHVkZXMgYSBzYXZlIGJ1dHRvbiB0byBwZXJzaXN0IGNoYW5nZXMgbWFkZSBpbiBlZGl0YWJsZSBmaWVsZHMuXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IGluc3BlY3RQYWdlQ29uZmlnOiBRZFBhZ2VDb25maWc8TXlPYmplY3RUeXBlPiA9IHtcbiAqICAgdGl0bGU6IHsgaTE4bjogJ2kxOG4ucGFnZS50aXRsZScgfSxcbiAqICAgcGFnZVR5cGU6ICdpbnNwZWN0JyxcbiAqICAgcGFnZVR5cGVDb25maWc6IHtcbiAqICAgICBvcGVyYXRpb25Nb2RlOiAnZWRpdCcsXG4gKiAgICAgY2FuY2VsOiB7XG4gKiAgICAgICBoYW5kbGVyOiAoKSA9PiBoYW5kbGVDYW5jZWwoKVxuICogICAgIH0sXG4gKiAgICAgc2F2ZToge1xuICogICAgICAgaGFuZGxlcjogKGZvcm1WYWx1ZXMpID0+IGhhbmRsZVNhdmUoZm9ybVZhbHVlcylcbiAqICAgICB9XG4gKiAgIH1cbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBgYGBodG1sXG4gKiA8IS0tIHdpdGggU2VjdGlvbiAtLT5cbiAqIDxxZC1wYWdlIFtjb25maWddPVwicGFnZUNvbmZpZ1wiPlxuICogICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICA8cWQtZ3JpZCBbY29uZmlnXT1cImdyaWRDb25maWdcIiBbZm9ybUdyb3VwXT1cIm15Rm9ybXNcIiBxZENvbm5lY3RGb3JtU3RhdGVUb1BhZ2U9XCJteUZvcm1zXCI+XG4gKiAgICAgICA8IS0tIHlvdXIgcWQtZm9ybS1jb21wb25lbnRzIGhlcmUgLS0+XG4gKiAgICAgPC9xZC1ncmlkPlxuICogICA8L3FkLXNlY3Rpb24+XG4gKiA8L3FkLXBhZ2U+XG4gKlxuICogPCEtLSB3aXRoIFBhZ2VUYWJzIC0tPlxuICogPHFkLXBhZ2UgW2NvbmZpZ109XCJwYWdlQ29uZmlnXCI+XG4gKiAgIDxxZC1wYWdlLXRhYnMgW2NvbmZpZ109XCJzdGVwcGVyQ29uZmlnXCI+XG4gKiAgICAgPHFkLXBhZ2UtdGFiIFtjb25maWddPVwidGFiQ29uZmlnT25lXCI+XG4gKiAgICAgICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICAgICAgPHFkLWdyaWQgW2NvbmZpZ109XCJncmlkQ29uZmlnXCIgW2Zvcm1Hcm91cF09XCJteUZvcm1zT25lXCIgcWRDb25uZWN0Rm9ybVN0YXRlVG9QYWdlPVwibXlGb3Jtc09uZVwiPlxuICogICAgICAgICAgIDwhLS0geW91ciBxZC1mb3JtLWNvbXBvbmVudHMgaGVyZSAtLT5cbiAqICAgICAgICAgPC9xZC1ncmlkPlxuICogICAgICAgPC9xZC1zZWN0aW9uPlxuICogICAgIDwvcWQtcGFnZS10YWI+XG4gKiAgICAgPHFkLXBhZ2UtdGFiIFtjb25maWddPVwidGFiQ29uZmlnVHdvXCI+XG4gKiAgICAgICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICAgICAgPHFkLWdyaWQgW2NvbmZpZ109XCJncmlkQ29uZmlnXCIgW2Zvcm1Hcm91cF09XCJteUZvcm1zVHdvXCIgcWRDb25uZWN0Rm9ybVN0YXRlVG9QYWdlPVwibXlGb3Jtc1R3b1wiPlxuICogICAgICAgICAgIDwhLS0geW91ciBxZC1mb3JtLWNvbXBvbmVudHMgaGVyZSAtLT5cbiAqICAgICAgICAgPC9xZC1ncmlkPlxuICogICAgICAgPC9xZC1zZWN0aW9uPlxuICogICAgIDwvcWQtcGFnZS10YWI+XG4gKiAgIDwvcWQtcGFnZS10YWJzPlxuICogPC9xZC1wYWdlPlxuICogYGBgXG4gKlxuICogIyMjIyAqKkN1c3RvbSBQYWdlKipcbiAqXG4gKiBgYGB0c1xuICogY29uc3QgY3VzdG9tUGFnZUNvbmZpZzogUWRQYWdlQ29uZmlnPE15T2JqZWN0VHlwZT4gPSB7XG4gKiAgIHRpdGxlOiB7IGkxOG46ICdpMThuLnBhZ2UudGl0bGUnIH0sXG4gKiAgIHBhZ2VUeXBlOiAnY3VzdG9tJyxcbiAqICAgcGFnZVR5cGVDb25maWc6IHtcbiAqICAgICBjdXN0b21BY3Rpb25zOiBbXG4gKiAgICAgICB7XG4gKiAgICAgICAgIGkxOG46ICdpMThuLmN1c3RvbS5hY3Rpb24nLFxuICogICAgICAgICBoYW5kbGVyOiAoKSA9PiBkb1NvbWV0aGluZygpXG4gKiAgICAgICB9XG4gKiAgICAgXVxuICogICB9XG4gKiB9O1xuICogYGBgXG4gKlxuICogYGBgaHRtbFxuICogPHFkLXBhZ2UgW2NvbmZpZ109XCJwYWdlQ29uZmlnXCI+XG4gKiAgIDwhLS0gUGxhY2UgY29udGVudCBoZXJlIHRoYXQgZG9lc27igJl0IGZpdCB0aGUgb3RoZXIgcGFnZSB0eXBlcyAtLT5cbiAqIDwvcWQtcGFnZT5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxZC1wYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wYWdlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1FkUGFnZUZvb3RlclNlcnZpY2UsIFFkRm9ybUdyb3VwTWFuYWdlclNlcnZpY2UsIFFkUGFnZVN1Ym1pdEFjdGlvblNlcnZpY2UsIFFkUmVzb2x2ZXJUcmlnZ2VyU2VydmljZV0sXG4gIGhvc3Q6IHsgJ1tjbGFzcy5oYXMtY29udHJvbC1wYW5lbF0nOiAnaXNDb250cm9sUGFuZWxWaXNpYmxlJywgJ1tjbGFzcy5jb250cm9sLXBhbmVsLWJyb2FkXSc6ICdpc0NvbnRyb2xQYW5lbEJyb2FkJyB9XG59KVxuZXhwb3J0IGNsYXNzIFFkUGFnZUNvbXBvbmVudDxUIGV4dGVuZHMgb2JqZWN0PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgUWRQYWdlIGNvbXBvbmVudCwgaW5jbHVkaW5nIHRoZSBwYWdlIHR5cGUsXG4gICAqIHRpdGxlLCBhbmQgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIGVhY2ggdHlwZSBvZiBwYWdlLlxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgY29uZmlnITogUWRQYWdlQ29uZmlnPFQ+O1xuXG4gIC8qKlxuICAgKiBBIHN0YXRpYyB0ZXN0IElEIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cyBjYW4gYmUgc2V0LiA8YnIgLz5cbiAgICogVGhlIHZhbHVlIGZvciB0aGUgSFRNTCBhdHRyaWJ1dGUgW2RhdGEtdGVzdC1pZF0uXG4gICAqL1xuICBASW5wdXQoJ2RhdGEtdGVzdC1pZCcpIHRlc3RJZD8gPSAncGFnZSc7XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZW1pdHRlZCB3aGVuIHRoZSBvcGVyYXRpb24gbW9kZSBvZiB0aGUgaW5zcGVjdCBwYWdlIGlzIGNoYW5nZWQuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgb3BlcmF0aW9uTW9kZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFFkSW5zcGVjdE9wZXJhdGlvbk1vZGU+KCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihRZFNlY3Rpb25Db21wb25lbnQpXG4gIHNlY3Rpb25zITogUXVlcnlMaXN0PFFkU2VjdGlvbkNvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZChRZFBhZ2VDb250cm9sUGFuZWxDb21wb25lbnQpXG4gIGNvbnRyb2xQYW5lbCE6IFFkUGFnZUNvbnRyb2xQYW5lbENvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkKFFkUGFnZVN0ZXBwZXJDb21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgc3RlcHBlckNvbXBvbmVudD86IFFkUGFnZVN0ZXBwZXJDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZChRZFBhZ2VUYWJzQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHRhYnNDb21wb25lbnQ/OiBRZFBhZ2VUYWJzQ29tcG9uZW50O1xuXG4gIEBDb250ZW50Q2hpbGQoUWRQYWdlU3RlcHBlckFkYXB0ZXJEaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgc3RlcHBlckFkYXB0ZXJEaXJlY3RpdmU/OiBRZFBhZ2VTdGVwcGVyQWRhcHRlckRpcmVjdGl2ZTtcblxuICBAQ29udGVudENoaWxkKFFkUGFnZVRhYnNBZGFwdGVyRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHRhYnNBZGFwdGVyRGlyZWN0aXZlPzogUWRQYWdlVGFic0FkYXB0ZXJEaXJlY3RpdmU7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihRZFBhZ2VJbmZvQmFubmVyQ29tcG9uZW50KVxuICBpbmZvQmFubmVycyE6IFF1ZXJ5TGlzdDxRZFBhZ2VJbmZvQmFubmVyQ29tcG9uZW50PjtcblxuICBmb290ZXJIYXNDb250ZW50JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgaXNGb290ZXJWaXNpYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBwcm9qZWN0aW9uR3VhcmRNZXNzYWdlID1cbiAgICAnUUQtVUkgfCBRZFBhZ2UgLSBUaGlzIGNvbnRlbnQgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHVzZSBRZFNlY3Rpb25BZGFwdGVyRGlyZWN0aXZlIGZvciBjdXN0b20gY29udGVudCBwcm9qZWN0aW9uLic7XG5cbiAgcHJpdmF0ZSBfaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcml2YXRlIF9kZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfY2FuY2VsU3VibWl0VmFsaWRhdGlvbiQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGdldCBpc0NvbnRyb2xQYW5lbFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFBhbmVsICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb250cm9sUGFuZWwuY29uZmlnPy5pc0hpZGRlbiAhPT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBpc0NvbnRyb2xQYW5lbEJyb2FkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xQYW5lbD8uY29uZmlnPy53aWR0aCA9PT0gJ2Jyb2FkJztcbiAgfVxuXG4gIGdldCBoYXNOYXZpZ2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLnN0ZXBwZXJDb21wb25lbnQgfHwgdGhpcy50YWJzQ29tcG9uZW50IHx8IHRoaXMuc3RlcHBlckFkYXB0ZXJEaXJlY3RpdmUgfHwgdGhpcy50YWJzQWRhcHRlckRpcmVjdGl2ZSk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmhhcy1mb290ZXInKVxuICBnZXQgZm9vdGVyVmlzaWJsZSgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0Zvb3RlclZpc2libGU7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmhhcy1pbmZvLWJhbm5lcnMnKVxuICBnZXQgaGFzSW5mb0Jhbm5lcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5mb0Jhbm5lcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnZVN0b3JlU2VydmljZTogUWRQYWdlU3RvcmVTZXJ2aWNlPFQ+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9vdGVyU2VydmljZTogUWRQYWdlRm9vdGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlOiBRZEZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3VibWl0QWN0aW9uU2VydmljZTogUWRQYWdlU3VibWl0QWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZzogUWREaWFsb2dTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUURfU0FGRV9CT1RUT01fT0ZGU0VUKSBwcml2YXRlIGJvdHRvbU9mZnNldCQ/OiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1JlZj86IERpYWxvZ1JlZjx1bmtub3duPlxuICApIHtcbiAgICB0aGlzLmZvb3Rlckhhc0NvbnRlbnQkID0gdGhpcy5mb290ZXJTZXJ2aWNlLmZvb3Rlckhhc0NvbnRlbnQkO1xuICAgIHRoaXMuZm9vdGVySGFzQ29udGVudCQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJCkpLnN1YnNjcmliZShpc1Zpc2libGUgPT4ge1xuICAgICAgdGhpcy5pc0Zvb3RlclZpc2libGUgPSBpc1Zpc2libGU7XG4gICAgICB0aGlzLmJvdHRvbU9mZnNldCQ/Lm5leHQoaXNWaXNpYmxlID8gU0FGRV9CT1RUT01fT0ZGU0VUX1BYIDogMCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrQ29uZmlnVmFsaWRpdHkoKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZykgdGhpcy5wYWdlU3RvcmVTZXJ2aWNlLmluaXRQYWdlU3RhdGUodGhpcy5jb25maWcpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZ0NoYW5nZSA9IGNoYW5nZXNbJ2NvbmZpZyddO1xuXG4gICAgaWYgKCFjb25maWdDaGFuZ2UpIHJldHVybjtcblxuICAgIGNvbnN0IHsgY3VycmVudFZhbHVlOiBjdXJyLCBwcmV2aW91c1ZhbHVlOiBwcmV2IH0gPSBjb25maWdDaGFuZ2U7XG5cbiAgICBpZiAoY3Vycj8ucGFnZVR5cGVDb25maWc/LnN1Ym1pdD8uaXNIaWRkZW4gIT09IHByZXY/LnBhZ2VUeXBlQ29uZmlnPy5zdWJtaXQ/LmlzSGlkZGVuKVxuICAgICAgdGhpcy5mb290ZXJTZXJ2aWNlLnVwZGF0ZUFjdGlvbnMoW1xuICAgICAgICB7IGFjdGlvbktleTogJ3N1Ym1pdCcsIHBhcnRpYWxBY3Rpb246IHsgaXNWaXNpYmxlOiAhY3Vycj8ucGFnZVR5cGVDb25maWc/LnN1Ym1pdD8uaXNIaWRkZW4gfSB9XG4gICAgICBdKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcucGFnZVR5cGUgPT09ICdjcmVhdGUnKSB0aGlzLnNldHVwQ3JlYXRlUGFnZUZvb3RlckFjdGlvbnMoKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5wYWdlVHlwZSA9PT0gJ2NyZWF0ZScgJiYgdGhpcy5jb25maWc/LnBhZ2VUeXBlQ29uZmlnPy5jYW5jZWwgIT09IHVuZGVmaW5lZClcbiAgICAgIHRoaXMuaGFuZGxlQ2FuY2VsQWN0aW9uV2l0aEZvcm1DaGFuZ2VzKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcucGFnZVR5cGUgPT09ICdjcmVhdGUnICYmIHRoaXMuY29uZmlnPy5wYWdlVHlwZUNvbmZpZz8uc2F2ZURyYWZ0ICE9PSB1bmRlZmluZWQpXG4gICAgICB0aGlzLmluaXRTYXZlRHJhZnRGb290ZXJBY3Rpb24oKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5wYWdlVHlwZSA9PT0gJ2luc3BlY3QnKVxuICAgICAgdGhpcy5wYWdlU3RvcmVTZXJ2aWNlLmlzVmlld29ubHkkXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSlcbiAgICAgICAgLnN1YnNjcmliZShpc1ZpZXdvbmx5ID0+XG4gICAgICAgICAgdGhpcy51cGRhdGVJbnNwZWN0UGFnZU9wZXJhdGlvbk1vZGUoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5wYWdlVHlwZUNvbmZpZyBhcyBRZFBhZ2VUeXBlSW5zcGVjdENvbmZpZyxcbiAgICAgICAgICAgIGlzVmlld29ubHkgPyAndmlldycgOiAnZWRpdCdcbiAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICB0aGlzLnNldHVwUGFnZURpYWxvZ0Nsb3NlQ29udHJhY3QoKTtcbiAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVmICYmIHRoaXMuZGlhbG9nLmNsZWFyUGFnZURpYWxvZ0NhbkNsb3NlKHRoaXMuZGlhbG9nUmVmKTtcbiAgICB0aGlzLmJvdHRvbU9mZnNldCQ/Lm5leHQoMCk7XG4gICAgdGhpcy5fZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0NvbmZpZ1ZhbGlkaXR5KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb25maWcpIGNvbnNvbGUud2FybignUWRVaSB8IFFkUGFnZUNvbXBvbmVudCAtIFRvIGNvbmZpZ3VyZSB0aGUgcGFnZSB5b3Ugc2hvdWxkIHByb3ZpZGUgYSB2YWxpZCBjb25maWcuJyk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQ3JlYXRlUGFnZUZvb3RlckFjdGlvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgcGFnZVR5cGVDb25maWcgPSB0aGlzLmNvbmZpZz8ucGFnZVR5cGVDb25maWcgYXMgUWRQYWdlVHlwZUNyZWF0ZUNvbmZpZztcbiAgICBjb25zdCBhY3Rpb25LZXlzOiBRZENyZWF0ZUZvb3RlckFjdGlvbktleVtdID0gWydzYXZlRHJhZnQnLCAnY2FuY2VsJywgJ3N1Ym1pdCddO1xuICAgIGNvbnN0IGFjdGlvbnM6IFBhcnRpYWxGb290ZXJBY3Rpb25bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBhY3Rpb25LZXkgb2YgYWN0aW9uS2V5cykge1xuICAgICAgY29uc3QgYWN0aW9uID0gcGFnZVR5cGVDb25maWdbYWN0aW9uS2V5XTtcblxuICAgICAgaWYgKCFhY3Rpb24pIGNvbnRpbnVlO1xuXG4gICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICBhY3Rpb25LZXksXG4gICAgICAgIHBhcnRpYWxBY3Rpb246IHtcbiAgICAgICAgICAuLi4oYWN0aW9uPy5sYWJlbD8uaTE4biA/IHsgdGl0bGVJMThuOiBhY3Rpb24ubGFiZWwuaTE4biB9IDoge30pLFxuICAgICAgICAgIGhhbmRsZXI6IHRoaXMuZ2VuZXJhdGVGb290ZXJBY3Rpb25IYW5kbGVyKGFjdGlvbj8uaGFuZGxlcilcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5mb290ZXJTZXJ2aWNlLnVwZGF0ZUFjdGlvbnMoYWN0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNhbmNlbEFjdGlvbldpdGhGb3JtQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlXG4gICAgICAuJGhhc1ZhbHVlc0NoYW5nZWQoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpKVxuICAgICAgLnN1YnNjcmliZShoYXNDaGFuZ2VkID0+IHtcbiAgICAgICAgdGhpcy5mb290ZXJTZXJ2aWNlLnVwZGF0ZUFjdGlvbnMoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbktleTogJ2NhbmNlbCcsXG4gICAgICAgICAgICBwYXJ0aWFsQWN0aW9uOiB7XG4gICAgICAgICAgICAgIGhhbmRsZXI6IGhhc0NoYW5nZWRcbiAgICAgICAgICAgICAgICA/ICgpOiB2b2lkID0+IHRoaXMuc2V0dXBTdWJtaXRBY3Rpb25WYWxpZGF0aW9uKClcbiAgICAgICAgICAgICAgICA6ICgpOiB2b2lkID0+ICh0aGlzLmNvbmZpZz8ucGFnZVR5cGVDb25maWcgYXMgUWRQYWdlVHlwZUNyZWF0ZUNvbmZpZyk/LmNhbmNlbD8uaGFuZGxlcigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U2F2ZURyYWZ0Rm9vdGVyQWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhZ2VUeXBlQ29uZmlnID0gdGhpcy5jb25maWcucGFnZVR5cGVDb25maWcgYXMgUWRQYWdlVHlwZUNyZWF0ZUNvbmZpZztcblxuICAgIHRoaXMuZm9vdGVyU2VydmljZS5zZXRBY3Rpb25zKFtcbiAgICAgIHtcbiAgICAgICAga2V5OiAnc2F2ZURyYWZ0JyxcbiAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgdGl0bGVJMThuOiBwYWdlVHlwZUNvbmZpZy5zYXZlRHJhZnQ/LmxhYmVsPy5pMThuID8/ICdpMThuLnFkLnBhZ2UuZm9vdGVyLnNhdmVEcmFmdCcsXG4gICAgICAgICAgdHlwZTogUWRGb290ZXJBY3Rpb25UeXBlLlNlY29uZGFyeSxcbiAgICAgICAgICBoYW5kbGVyOiAoKTogdm9pZCA9PiBwYWdlVHlwZUNvbmZpZz8uc2F2ZURyYWZ0Py5oYW5kbGVyKCksXG4gICAgICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSW5zcGVjdFBhZ2VPcGVyYXRpb25Nb2RlKHBhZ2VUeXBlQ29uZmlnOiBRZFBhZ2VUeXBlSW5zcGVjdENvbmZpZywgbW9kZTogUWRJbnNwZWN0T3BlcmF0aW9uTW9kZSk6IHZvaWQge1xuICAgIGlmIChtb2RlID09PSAndmlldycpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwTWFuYWdlclNlcnZpY2UuY2FuY2VsUGVuZGluZ0FzeW5jVmFsaWRhdGlvbigpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlLmNhbmNlbFBlbmRpbmdBc3luY1ZhbGlkYXRpb24oKSk7XG4gICAgfVxuXG4gICAgdGhpcy5zdWJtaXRBY3Rpb25TZXJ2aWNlLnNldFN1Ym1pdEFjdGlvbkZvckluc3BlY3QocGFnZVR5cGVDb25maWcsIG1vZGUgPT09ICd2aWV3Jyk7XG5cbiAgICB0aGlzLmZvb3RlclNlcnZpY2UudXBkYXRlQWN0aW9ucyhbXG4gICAgICB7IGFjdGlvbktleTogJ3N1Ym1pdCcsIHBhcnRpYWxBY3Rpb246IHsgaXNWaXNpYmxlOiBtb2RlID09PSAndmlldycgJiYgIXBhZ2VUeXBlQ29uZmlnPy5zdWJtaXQ/LmlzSGlkZGVuIH0gfVxuICAgIF0pO1xuXG4gICAgdGhpcy5pbml0U3VibWl0VmFsaWRhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6ZWQpIHRoaXMub3BlcmF0aW9uTW9kZUNoYW5nZWQuZW1pdChtb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVGb290ZXJBY3Rpb25IYW5kbGVyKGhhbmRsZXI/OiAodmFsdWVzOiB1bmtub3duKSA9PiB2b2lkKTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICBpZiAoIWhhbmRsZXIpIHJldHVybjtcblxuICAgICAgaGFuZGxlcih0aGlzLmZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlLmhhc0Zvcm1Hcm91cHMoKSA/IHRoaXMuZm9ybUdyb3VwTWFuYWdlclNlcnZpY2UuZ2V0QWxsVmFsdWVzKCkgOiBhcmdzKTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFN1Ym1pdEFjdGlvblZhbGlkYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dcbiAgICAgIC5vcGVuKFFkUGFnZUNhbmNlbENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICB0aXRsZTogeyBpMThuOiAnaTE4bi5xZC5wYWdlLmNhbmNlbC5jb25maXJtYXRpb24uZGlhbG9nLnRpdGxlJyB9LFxuICAgICAgICBkaWFsb2dTaXplOiBRZERpYWxvZ1NpemUuU21hbGwsXG4gICAgICAgIGRhdGE6IHRoaXMuY29uZmlnLnBhZ2VUeXBlQ29uZmlnXG4gICAgICB9KVxuICAgICAgLmNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSlcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN1Ym1pdFZhbGlkYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fY2FuY2VsU3VibWl0VmFsaWRhdGlvbiQubmV4dCgpO1xuXG4gICAgdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZVxuICAgICAgLiRhcmVGb3JtR3JvdXBzVmFsaWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9jYW5jZWxTdWJtaXRWYWxpZGF0aW9uJCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSxcbiAgICAgICAgdGFwKGlzVmFsaWQgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1Ym1pdERpc2FibGVkSW5mb1RleHQgPVxuICAgICAgICAgICAgdGhpcy5jb25maWcucGFnZVR5cGUgPT09ICdpbnNwZWN0JyA/IHRoaXMuY29uZmlnLnBhZ2VUeXBlQ29uZmlnPy5zdWJtaXQ/LmRpc2FibGVkSW5mbyA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgIHRoaXMuZm9vdGVyU2VydmljZS51cGRhdGVBY3Rpb25zKFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWN0aW9uS2V5OiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgcGFydGlhbEFjdGlvbjoge1xuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxJbmZvOiBpc1ZhbGlkXG4gICAgICAgICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgaW5mb1R5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdWJtaXREaXNhYmxlZEluZm9UZXh0ID8/IHsgaTE4bjogJ2kxOG4ucWQucGFnZS5zdWJtaXQuaW52YWxpZEZvcm0nIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwUGFnZURpYWxvZ0Nsb3NlQ29udHJhY3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpYWxvZ1JlZikgcmV0dXJuO1xuXG4gICAgY29uc3QgZGlhbG9nU2l6ZSA9ICh0aGlzLmRpYWxvZ1JlZi5jb25maWcgYXMgdW5rbm93biBhcyB7IGRpYWxvZ1NpemU/OiBRZERpYWxvZ1NpemUgfSkuZGlhbG9nU2l6ZTtcbiAgICBpZiAoZGlhbG9nU2l6ZSAhPT0gUWREaWFsb2dTaXplLkZ1bGxXaWR0aCkgcmV0dXJuO1xuXG4gICAgdGhpcy5kaWFsb2cuc2V0UGFnZURpYWxvZ0NhbkNsb3NlKFxuICAgICAgKCkgPT5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZS4kaGFzVmFsdWVzQ2hhbmdlZCgpLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICBtYXAoaGFzQ2hhbmdlcyA9PiAoe1xuICAgICAgICAgICAgY2FuQ2xvc2U6ICFoYXNDaGFuZ2VzLFxuICAgICAgICAgICAgaGFzQ2hhbmdlcyxcbiAgICAgICAgICAgIGNhdXNlOiBoYXNDaGFuZ2VzID8gJ1VOU0FWRURfQ0hBTkdFUycgOiB1bmRlZmluZWRcbiAgICAgICAgICB9KSlcbiAgICAgICAgKSxcbiAgICAgIHRoaXMuZGlhbG9nUmVmXG4gICAgKTtcbiAgfVxufVxuIiwiPG1haW4gcWRTbmFja2Jhckxpc3RlbmVyPlxuICA8cWQtcGFnZS1vYmplY3QtaGVhZGVyXG4gICAgW2RhdGEtdGVzdC1pZF09XCJ0ZXN0SWRcIlxuICAgIFthdHRyLmRhdGEtdGVzdC1pZF09XCJ0ZXN0SWQgKyAnb2JqZWN0LWhlYWRlcidcIlxuICAgIFtjb25maWddPVwiY29uZmlnXCJcbiAgICBbaGFzTmF2aWdhdGlvbl09XCJoYXNOYXZpZ2F0aW9uXCJcbiAgPjwvcWQtcGFnZS1vYmplY3QtaGVhZGVyPlxuXG4gIDxkaXYgY2xhc3M9XCJwYWdlLWluZm8tYmFubmVyc1wiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInFkLXBhZ2UtaW5mby1iYW5uZXJcIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25maWcucGFnZVR5cGUgPT09ICdjcmVhdGUnIHx8IGNvbmZpZy5wYWdlVHlwZSA9PT0gJ2N1c3RvbSdcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJxZC1wYWdlLXN0ZXBwZXJcIj48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3FkUGFnZVN0ZXBwZXJBZGFwdGVyXVwiPjwvbmctY29udGVudD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZy5wYWdlVHlwZSA9PT0gJ292ZXJ2aWV3JyB8fCBjb25maWcucGFnZVR5cGUgPT09ICdpbnNwZWN0JyB8fCBjb25maWcucGFnZVR5cGUgPT09ICdjdXN0b20nXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwicWQtcGFnZS10YWJzXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltxZFBhZ2VUYWJzQWRhcHRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwicWQtc2VjdGlvblwiPjwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcWRTZWN0aW9uQWRhcHRlcl1cIj48L25nLWNvbnRlbnQ+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25maWcucGFnZVR5cGUgPT09ICdjdXN0b20nXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByb2plY3RlZENvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L21haW4+XG5cbjxmb290ZXIgKm5nSWY9XCJmb290ZXJIYXNDb250ZW50JCB8IGFzeW5jXCI+XG4gIDxxZC1wYWdlLWZvb3RlciBbYXR0ci5kYXRhLXRlc3QtaWRdPVwidGVzdElkICsgJy1mb290ZXInXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3FkUGFnZUZvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gIDwvcWQtcGFnZS1mb290ZXI+XG48L2Zvb3Rlcj5cblxuPGFzaWRlICpuZ0lmPVwiaXNDb250cm9sUGFuZWxWaXNpYmxlXCI+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cInFkLXBhZ2UtY29udHJvbC1wYW5lbFwiPjwvbmctY29udGVudD5cbjwvYXNpZGU+XG5cbjxxZC1wcm9qZWN0aW9uLWd1YXJkICpuZ0lmPVwiY29uZmlnLnBhZ2VUeXBlICE9PSAnY3VzdG9tJ1wiIFt3YXJuaW5nTWVzc2FnZV09XCJwcm9qZWN0aW9uR3VhcmRNZXNzYWdlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcm9qZWN0ZWRDb250ZW50XCI+PC9uZy1jb250YWluZXI+XG48L3FkLXByb2plY3Rpb24tZ3VhcmQ+XG5cbjxuZy10ZW1wbGF0ZSAjcHJvamVjdGVkQ29udGVudD5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,8 +1,8 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { FormArray, FormControl, FormGroup } from '@angular/forms';
3
3
  import isEqual from 'lodash/isEqual';
4
- import { combineLatest, of } from 'rxjs';
5
- import { map, startWith } from 'rxjs/operators';
4
+ import { BehaviorSubject, combineLatest, of, queueScheduler } from 'rxjs';
5
+ import { map, observeOn, startWith, switchMap } from 'rxjs/operators';
6
6
  import * as i0 from "@angular/core";
7
7
  /**
8
8
  * The QdFormGroupManagerService provides centralized registration, snapshotting, and value tracking
@@ -69,8 +69,10 @@ import * as i0 from "@angular/core";
69
69
  export class QdFormGroupManagerService {
70
70
  _formGroups = new Map();
71
71
  _formGroupsSnapshot = new Map();
72
+ _formGroupsChanged$ = new BehaviorSubject(undefined);
72
73
  setFormGroup(key, formGroup) {
73
74
  this._formGroups.set(key, formGroup);
75
+ this._formGroupsChanged$.next();
74
76
  }
75
77
  getFormGroup(key) {
76
78
  return this._formGroups.get(key);
@@ -80,6 +82,7 @@ export class QdFormGroupManagerService {
80
82
  }
81
83
  tryRemoveFormGroup(key) {
82
84
  this._formGroups.delete(key);
85
+ this._formGroupsChanged$.next();
83
86
  }
84
87
  hasFormGroups() {
85
88
  return this._formGroups.size > 0;
@@ -93,19 +96,24 @@ export class QdFormGroupManagerService {
93
96
  return !this._formGroups.has(key);
94
97
  }
95
98
  $areFormGroupsValid() {
96
- if (!this.hasFormGroups())
97
- return of(false);
98
- const obs = Array.from(this._formGroups.values()).map(fg => fg.statusChanges.pipe(startWith(fg.status), map(() => this.areFormGroupsValid(fg))));
99
- return combineLatest(obs).pipe(map(valids => valids.every(Boolean)));
99
+ return this._formGroupsChanged$.pipe(observeOn(queueScheduler), switchMap(() => {
100
+ if (!this.hasFormGroups())
101
+ return of(false);
102
+ const obs = Array.from(this._formGroups.values()).map(fg => fg.statusChanges.pipe(startWith(fg.status), map(() => this.areFormGroupsValid(fg))));
103
+ return combineLatest(obs).pipe(map(valids => valids.every(Boolean)));
104
+ }));
100
105
  }
101
106
  $hasValuesChanged() {
102
- if (!this.hasFormGroups())
103
- return of(false);
104
- const obs = Array.from(this._formGroups.entries()).map(([key, fg]) => fg.valueChanges.pipe(startWith(fg.getRawValue()), map(currentValues => {
105
- const snapshot = this._formGroupsSnapshot.get(key);
106
- return snapshot ? !isEqual(currentValues, snapshot) : true;
107
- })));
108
- return combineLatest(obs).pipe(map(changes => changes.some(Boolean)));
107
+ return this._formGroupsChanged$.pipe(observeOn(queueScheduler), switchMap(() => {
108
+ if (!this.hasFormGroups())
109
+ return of(false);
110
+ const obs = Array.from(this._formGroups.entries()).map(([key, fg]) => fg.valueChanges.pipe(startWith(fg.getRawValue()), map(() => {
111
+ const currentValues = fg.getRawValue();
112
+ const snapshot = this._formGroupsSnapshot.get(key);
113
+ return snapshot ? !isEqual(currentValues, snapshot) : true;
114
+ })));
115
+ return combineLatest(obs).pipe(map(changes => changes.some(Boolean)));
116
+ }));
109
117
  }
110
118
  takeFormGroupsSnapshot() {
111
119
  this._formGroups.forEach((fg, key) => this._formGroupsSnapshot.set(key, fg.getRawValue()));
@@ -125,6 +133,43 @@ export class QdFormGroupManagerService {
125
133
  }
126
134
  });
127
135
  });
136
+ this.cancelPendingAsyncValidation();
137
+ }
138
+ /**
139
+ * Cancels any in-flight async validators on all registered form groups.
140
+ *
141
+ * 1. Collect all PENDING controls and their async validators
142
+ * 2. Clear all async validators, then update validity (sync-only, no cascade)
143
+ * 3. Re-attach async validators for future use
144
+ */
145
+ cancelPendingAsyncValidation() {
146
+ this._formGroups.forEach(fg => {
147
+ const pendingControls = this.collectPendingControls(fg);
148
+ if (pendingControls.length === 0)
149
+ return;
150
+ for (const { control } of pendingControls) {
151
+ control.clearAsyncValidators();
152
+ }
153
+ for (const { control } of pendingControls) {
154
+ control.updateValueAndValidity({ onlySelf: true });
155
+ }
156
+ for (const { control, asyncValidator } of pendingControls) {
157
+ control.setAsyncValidators(asyncValidator);
158
+ }
159
+ });
160
+ }
161
+ collectPendingControls(control) {
162
+ const result = [];
163
+ if (control instanceof FormGroup) {
164
+ Object.values(control.controls).forEach(c => result.push(...this.collectPendingControls(c)));
165
+ }
166
+ else if (control instanceof FormArray) {
167
+ control.controls.forEach(c => result.push(...this.collectPendingControls(c)));
168
+ }
169
+ if (control.status === 'PENDING') {
170
+ result.push({ control, asyncValidator: control.asyncValidator });
171
+ }
172
+ return result;
128
173
  }
129
174
  resetFormArrayToValues(array, newValues) {
130
175
  if (!Array.isArray(newValues))
@@ -177,4 +222,4 @@ export class QdFormGroupManagerService {
177
222
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdFormGroupManagerService, decorators: [{
178
223
  type: Injectable
179
224
  }] });
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1ncm91cC1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3FkLXVpL3NyYy9saWIvcGFnZS9zaGFyZWQvc2VydmljZXMvZm9ybS1ncm91cC1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQW1CLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEYsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFaEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2REc7QUFFSCxNQUFNLE9BQU8seUJBQXlCO0lBQzVCLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBcUIsQ0FBQztJQUMzQyxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztJQUV6RSxZQUFZLENBQUMsR0FBVyxFQUFFLFNBQW9CO1FBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQVc7UUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFXO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMs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eUI7OzJGQUF6Qix5QkFBeUI7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBUaGUgUWRGb3JtR3JvdXBNYW5hZ2VyU2VydmljZSBwcm92aWRlcyBjZW50cmFsaXplZCByZWdpc3RyYXRpb24sIHNuYXBzaG90dGluZywgYW5kIHZhbHVlIHRyYWNraW5nXG4gKiBmb3IgbXVsdGlwbGUgQW5ndWxhciBgRm9ybUdyb3VwYCBpbnN0YW5jZXMuIEl0IHN1cHBvcnRzIGVmZmljaWVudCBzdGF0ZSByZXN0b3JhdGlvbiwgaW5jbHVkaW5nIGR5bmFtaWNcbiAqIHJlc2l6aW5nIG9mIGVtYmVkZGVkIGBGb3JtQXJyYXlgIGNvbnRyb2xzLCB3aGlsZSBhdm9pZGluZyBhbnkgc3RydWN0dXJhbCBjbG9uaW5nIGluIHNuYXBzaG90cy5cbiAqXG4gKiAjIyMjIFB1cnBvc2U6XG4gKiBUaGlzIHNlcnZpY2UgaXMgdXNlZnVsIHdoZW4gbWFuYWdpbmcgbXVsdGlwbGUgcmVhY3RpdmUgZm9ybXMgdGhhdCBtdXN0IGJlOlxuICogLSBPYnNlcnZlZCBmb3IgY2hhbmdlc1xuICogLSBDaGVja2VkIGZvciB2YWxpZGl0eVxuICogLSBDb21wYXJlZCBhZ2FpbnN0IGEgcHJldmlvdXMgc3RhdGUgKHNuYXBzaG90KVxuICogLSBSZXNldCB0byBhIHByZXZpb3VzIHN0YXRlLCBpbmNsdWRpbmcgZHluYW1pYyBmb3JtIGFycmF5c1xuICpcbiAqICMjIyMgVmFsdWUgU25hcHNob3RcbiAqIFNuYXBzaG90cyBzdG9yZSBvbmx5ICoqcmF3IHZhbHVlcyoqICh2aWEgYGdldFJhd1ZhbHVlKClgKSwgbm90IGFueSBjb250cm9sIGluc3RhbmNlcy5cbiAqIFRoaXMgYWxsb3dzIGZvciBtaW5pbWFsIG1lbW9yeSB1c2FnZSBhbmQgZWFzeSBjb21wYXJpc29uIHVzaW5nIGRlZXAgZXF1YWxpdHkgY2hlY2tzLlxuICpcbiAqICMjIyMgU21hcnQgRm9ybUFycmF5IFJlc2V0XG4gKiBXaGVuIHJlc3RvcmluZyBhIGBGb3JtQXJyYXlgLCB0aGUgc2VydmljZSBlbnN1cmVzIHRoYXQgdGhlIG51bWJlciBhbmQgc3RydWN0dXJlIG9mIGNvbnRyb2xzXG4gKiBtYXRjaGVzIHRoZSBzbmFwc2hvdCB2YWx1ZXMuIENvbnRyb2xzIGFyZSBjbG9uZWQgZHluYW1pY2FsbHkgZnJvbSBhbiBleGlzdGluZyBwcm90b3R5cGUuXG4gKiBJZiBhIGBGb3JtQXJyYXlgIHdhcyBlbXB0aWVkIChlLmcuIHZpYSBgcmVtb3ZlQXQoKWApLCBhIG1pbmltYWwgY29udHJvbCBzdHJ1Y3R1cmUgaXMgaW5mZXJyZWRcbiAqIGZyb20gdGhlIHNuYXBzaG90IGRhdGEuXG4gKlxuICogIyMjIyBFeGFtcGxlIFVzYWdlOlxuICpcbiAqICoqUmVnaXN0ZXIgYSBGb3JtR3JvdXAqKlxuICogYGBgdHNcbiAqIHNlcnZpY2Uuc2V0Rm9ybUdyb3VwKCd1c2VyRm9ybScsIGZvcm1Hcm91cCk7XG4gKiBgYGBcbiAqXG4gKiAqKlRha2UgYSBTbmFwc2hvdCoqXG4gKiBgYGB0c1xuICogc2VydmljZS50YWtlRm9ybUdyb3Vwc1NuYXBzaG90KCk7XG4gKiBgYGBcbiAqXG4gKiAqKkRldGVjdCBDaGFuZ2VzKipcbiAqIGBgYHRzXG4gKiBzZXJ2aWNlLiRoYXNWYWx1ZXNDaGFuZ2VkKCkuc3Vic2NyaWJlKGNoYW5nZWQgPT4ge1xuICogICBpZiAoY2hhbmdlZCkge1xuICogICAgIGNvbnNvbGUubG9nKCdGb3JtIGRhdGEgaGFzIGNoYW5nZWQnKTtcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiAqKlJlc3RvcmUgZnJvbSBTbmFwc2hvdCoqXG4gKiBgYGB0c1xuICogc2VydmljZS5yZXN0b3JlRm9ybUdyb3Vwc0Zyb21TbmFwc2hvdCgpO1xuICogYGBgXG4gKlxuICogKipDaGVjayBpZiBBbGwgRm9ybXMgQXJlIFZhbGlkKipcbiAqIGBgYHRzXG4gKiBzZXJ2aWNlLiRhcmVGb3JtR3JvdXBzVmFsaWQoKS5zdWJzY3JpYmUodmFsaWQgPT4ge1xuICogICBpZiAodmFsaWQpIHtcbiAqICAgICBjb25zb2xlLmxvZygnQWxsIGZvcm1zIHZhbGlkIScpO1xuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqICMjIyMgTm90ZXM6XG4gKiAtIEZvcm1BcnJheXMgYXJlIG5vdCByZXBsYWNlZCBkdXJpbmcgcmVzdG9yZS4gVGhlaXIgbGVuZ3RoIGlzIGFkanVzdGVkIGFuZCB0aGVpciBjb250ZW50IHJlc2V0LlxuICogLSBDb250cm9sIGNsb25pbmcgaXMgcmVjdXJzaXZlIGFuZCBzdHJ1Y3R1cmUtcHJlc2VydmluZy5cbiAqIC0gTm8gc3RydWN0dXJhbCBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gdGhlIHNuYXBzaG90OyBvbmx5IGRhdGEuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBRZEZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfZm9ybUdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBGb3JtR3JvdXA+KCk7XG4gIHByaXZhdGUgX2Zvcm1Hcm91cHNTbmFwc2hvdCA9IG5ldyBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKTtcblxuICBzZXRGb3JtR3JvdXAoa2V5OiBzdHJpbmcsIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogdm9pZCB7XG4gICAgdGhpcy5fZm9ybUdyb3Vwcy5zZXQoa2V5LCBmb3JtR3JvdXApO1xuICB9XG5cbiAgZ2V0Rm9ybUdyb3VwKGtleTogc3RyaW5nKTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3Vwcy5nZXQoa2V5KTtcbiAgfVxuXG4gIGdldEFsbEZvcm1Hcm91cHMoKTogTWFwPHN0cmluZywgRm9ybUdyb3VwPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1Hcm91cHM7XG4gIH1cblxuICB0cnlSZW1vdmVGb3JtR3JvdXAoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JtR3JvdXBzLmRlbGV0ZShrZXkpO1xuICB9XG5cbiAgaGFzRm9ybUdyb3VwcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3Vwcy5zaXplID4gMDtcbiAgfVxuXG4gIGdldEFsbFZhbHVlcygpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgYWxsVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgdGhpcy5fZm9ybUdyb3Vwcy5mb3JFYWNoKChmb3JtR3JvdXAsIGtleSkgPT4gKGFsbFZhbHVlc1trZXldID0gZm9ybUdyb3VwLnZhbHVlKSk7XG5cbiAgICByZXR1cm4gYWxsVmFsdWVzO1xuICB9XG5cbiAgaXNGb3JtR3JvdXBLZXlVbmlxdWUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuX2Zvcm1Hcm91cHMuaGFzKGtleSk7XG4gIH1cblxuICAkYXJlRm9ybUdyb3Vwc1ZhbGlkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5oYXNGb3JtR3JvdXBzKCkpIHJldHVybiBvZihmYWxzZSk7XG5cbiAgICBjb25zdCBvYnMgPSBBcnJheS5mcm9tKHRoaXMuX2Zvcm1Hcm91cHMudmFsdWVzKCkpLm1hcChmZyA9PlxuICAgICAgZmcuc3RhdHVzQ2hhbmdlcy5waXBlKFxuICAgICAgICBzdGFydFdpdGgoZmcuc3RhdHVzKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuYXJlRm9ybUdyb3Vwc1ZhbGlkKGZnKSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3Qob2JzKS5waXBlKG1hcCh2YWxpZHMgPT4gdmFsaWRzLmV2ZXJ5KEJvb2xlYW4pKSk7XG4gIH1cblxuICAkaGFzVmFsdWVzQ2hhbmdlZCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuaGFzRm9ybUdyb3VwcygpKSByZXR1cm4gb2YoZmFsc2UpO1xuXG4gICAgY29uc3Qgb2JzID0gQXJyYXkuZnJvbSh0aGlzLl9mb3JtR3JvdXBzLmVudHJpZXMoKSkubWFwKChba2V5LCBmZ10pID0+XG4gICAgICBmZy52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKGZnLmdldFJhd1ZhbHVlKCkpLFxuICAgICAgICBtYXAoY3VycmVudFZhbHVlcyA9PiB7XG4gICAgICAgICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLl9mb3JtR3JvdXBzU25hcHNob3QuZ2V0KGtleSk7XG4gICAgICAgICAgcmV0dXJuIHNuYXBzaG90ID8gIWlzRXF1YWwoY3VycmVudFZhbHVlcywgc25hcHNob3QpIDogdHJ1ZTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3Qob2JzKS5waXBlKG1hcChjaGFuZ2VzID0+IGNoYW5nZXMuc29tZShCb29sZWFuKSkpO1xuICB9XG5cbiAgdGFrZUZvcm1Hcm91cHNTbmFwc2hvdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JtR3JvdXBzLmZvckVhY2goKGZnLCBrZXkpID0+IHRoaXMuX2Zvcm1Hcm91cHNTbmFwc2hvdC5zZXQoa2V5LCBmZy5nZXRSYXdWYWx1ZSgpKSk7XG4gIH1cblxuICByZXN0b3JlRm9ybUdyb3Vwc0Zyb21TbmFwc2hvdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JtR3JvdXBzLmZvckVhY2goKGZnLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5fZm9ybUdyb3Vwc1NuYXBzaG90LmdldChrZXkpO1xuICAgICAgaWYgKCFzbmFwc2hvdCkgcmV0dXJuO1xuXG4gICAgICBPYmplY3QuZW50cmllcyhmZy5jb250cm9scykuZm9yRWFjaCgoW2N0cmxLZXksIGN0cmxdKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gKHNuYXBzaG90IGFzIGFueSlbY3RybEtleV07XG4gICAgICAgIGlmIChjdHJsIGluc3RhbmNlb2YgRm9ybUFycmF5ICYmIEFycmF5LmlzQXJyYXkobmV3VmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm1BcnJheVRvVmFsdWVzKGN0cmwsIG5ld1ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdHJsLnJlc2V0KG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0Rm9ybUFycmF5VG9WYWx1ZXMoYXJyYXk6IEZvcm1BcnJheSwgbmV3VmFsdWVzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobmV3VmFsdWVzKSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgb2xkTGVuID0gYXJyYXkubGVuZ3RoO1xuICAgIGNvbnN0IG5ld0xlbiA9IG5ld1ZhbHVlcy5sZW5ndGg7XG5cbiAgICBpZiAob2xkTGVuID09PSAwICYmIG5ld0xlbiA9PT0gMCkgcmV0dXJuO1xuICAgIGlmIChvbGRMZW4gPT09IDAgJiYgbmV3TGVuID4gMCkgcmV0dXJuIHRoaXMuaW5pdEZvcm1BcnJheUZyb21WYWx1ZXMoYXJyYXksIG5ld1ZhbHVlcyk7XG5cbiAgICB3aGlsZSAoYXJyYXkubGVuZ3RoIDwgbmV3TGVuKSBhcnJheS5wdXNoKHRoaXMuZGVlcENsb25lQ29udHJvbChhcnJheS5hdCgwKSkpO1xuICAgIHdoaWxlIChhcnJheS5sZW5ndGggPiBuZXdMZW4pIGFycmF5LnJlbW92ZUF0KGFycmF5Lmxlbmd0aCAtIDEpO1xuXG4gICAgYXJyYXkucmVzZXQobmV3VmFsdWVzKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZvcm1BcnJheUZyb21WYWx1ZXMoYXJyYXk6IEZvcm1BcnJheSwgdmFsdWVzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBjb25zdCBwcm90b1ZhbHVlID0gdmFsdWVzWzBdO1xuXG4gICAgaWYgKCFwcm90b1ZhbHVlIHx8IHR5cGVvZiBwcm90b1ZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgY29uc29sZS53YXJuKCdRRC1VSSB8IFFkRm9ybUdyb3VwTWFuYWdlciAtIENhbm5vdCByZXN0b3JlIEZvcm1BcnJheTogbm8gcHJvdG90eXBlIGFuZCB2YWx1ZSBpcyBub3Qgb2JqZWN0LWxpa2UuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbnRyb2xzOiBSZWNvcmQ8c3RyaW5nLCBBYnN0cmFjdENvbnRyb2w+ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhwcm90b1ZhbHVlKS5mb3JFYWNoKGtleSA9PiAoY29udHJvbHNba2V5XSA9IG5ldyBGb3JtQ29udHJvbCgpKSk7XG4gICAgICBhcnJheS5wdXNoKG5ldyBGb3JtR3JvdXAoeyAuLi5jb250cm9scyB9KSk7XG4gICAgfVxuXG4gICAgYXJyYXkucmVzZXQodmFsdWVzKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVlcENsb25lQ29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHJldHVybiBuZXcgRm9ybUNvbnRyb2wodW5kZWZpbmVkLCBjb250cm9sLnZhbGlkYXRvciwgY29udHJvbC5hc3luY1ZhbGlkYXRvcik7XG5cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgY29uc3QgZ3JvdXBDb250cm9sczogUmVjb3JkPHN0cmluZywgQWJzdHJhY3RDb250cm9sPiA9IHt9O1xuXG4gICAgICBPYmplY3QuZW50cmllcyhjb250cm9sLmNvbnRyb2xzKS5mb3JFYWNoKChba2V5LCBjdHJsXSkgPT4gKGdyb3VwQ29udHJvbHNba2V5XSA9IHRoaXMuZGVlcENsb25lQ29udHJvbChjdHJsKSkpO1xuXG4gICAgICByZXR1cm4gbmV3IEZvcm1Hcm91cChncm91cENvbnRyb2xzLCBjb250cm9sLnZhbGlkYXRvciwgY29udHJvbC5hc3luY1ZhbGlkYXRvcik7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgIGNvbnN0IGFyckNvbnRyb2xzID0gY29udHJvbC5jb250cm9scy5tYXAoYyA9PiB0aGlzLmRlZXBDbG9uZUNvbnRyb2woYykpO1xuXG4gICAgICByZXR1cm4gbmV3IEZvcm1BcnJheShhcnJDb250cm9scywgY29udHJvbC52YWxpZGF0b3IsIGNvbnRyb2wuYXN5bmNWYWxpZGF0b3IpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignUUQtVUkgfCBRZEZvcm1Hcm91cE1hbmFnZXIgLSBVbnN1cHBvcnRlZCBjb250cm9sIHR5cGUnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXJlRm9ybUdyb3Vwc1ZhbGlkKGZnOiBGb3JtR3JvdXApOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmZy5jb250cm9scykuZXZlcnkoYyA9PiAoYy5kaXNhYmxlZCAmJiAhYy52YWxpZGF0b3IgJiYgIWMuYXN5bmNWYWxpZGF0b3IgPyB0cnVlIDogYy52YWxpZCkpO1xuICB9XG59XG4iXX0=
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1ncm91cC1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3FkLXVpL3NyYy9saWIvcGFnZS9zaGFyZWQvc2VydmljZXMvZm9ybS1ncm91cC1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQW1CLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEYsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRXRFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkRHO0FBRUgsTUFBTSxPQUFPLHlCQUF5QjtJQUM1QixXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQXFCLENBQUM7SUFDM0MsbUJBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQW1DLENBQUM7SUFDakUsbUJBQW1CLEdBQUcsSUFBSSxlQUFlLENBQU8sU0FBUyxDQUFDLENBQUM7SUFFbkUsWUFBWSxDQUFDLEdBQVcsRUFBRSxTQUFvQjtRQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBVztRQUN0QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxD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LEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFOUcsT0FBTyxJQUFJLFNBQVMsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUVELElBQUksT0FBTyxZQUFZLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFeEUsT0FBTyxJQUFJLFNBQVMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU8sa0JBQWtCLENBQUMsRUFBYTtRQUN0QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ25ILENBQUM7dUdBdk1VLHlCQUF5QjsyR0FBekIseUJBQXlCOzsyRkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mLCBxdWV1ZVNjaGVkdWxlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBvYnNlcnZlT24sIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIFRoZSBRZEZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlIHByb3ZpZGVzIGNlbnRyYWxpemVkIHJlZ2lzdHJhdGlvbiwgc25hcHNob3R0aW5nLCBhbmQgdmFsdWUgdHJhY2tpbmdcbiAqIGZvciBtdWx0aXBsZSBBbmd1bGFyIGBGb3JtR3JvdXBgIGluc3RhbmNlcy4gSXQgc3VwcG9ydHMgZWZmaWNpZW50IHN0YXRlIHJlc3RvcmF0aW9uLCBpbmNsdWRpbmcgZHluYW1pY1xuICogcmVzaXppbmcgb2YgZW1iZWRkZWQgYEZvcm1BcnJheWAgY29udHJvbHMsIHdoaWxlIGF2b2lkaW5nIGFueSBzdHJ1Y3R1cmFsIGNsb25pbmcgaW4gc25hcHNob3RzLlxuICpcbiAqICMjIyMgUHVycG9zZTpcbiAqIFRoaXMgc2VydmljZSBpcyB1c2VmdWwgd2hlbiBtYW5hZ2luZyBtdWx0aXBsZSByZWFjdGl2ZSBmb3JtcyB0aGF0IG11c3QgYmU6XG4gKiAtIE9ic2VydmVkIGZvciBjaGFuZ2VzXG4gKiAtIENoZWNrZWQgZm9yIHZhbGlkaXR5XG4gKiAtIENvbXBhcmVkIGFnYWluc3QgYSBwcmV2aW91cyBzdGF0ZSAoc25hcHNob3QpXG4gKiAtIFJlc2V0IHRvIGEgcHJldmlvdXMgc3RhdGUsIGluY2x1ZGluZyBkeW5hbWljIGZvcm0gYXJyYXlzXG4gKlxuICogIyMjIyBWYWx1ZSBTbmFwc2hvdFxuICogU25hcHNob3RzIHN0b3JlIG9ubHkgKipyYXcgdmFsdWVzKiogKHZpYSBgZ2V0UmF3VmFsdWUoKWApLCBub3QgYW55IGNvbnRyb2wgaW5zdGFuY2VzLlxuICogVGhpcyBhbGxvd3MgZm9yIG1pbmltYWwgbWVtb3J5IHVzYWdlIGFuZCBlYXN5IGNvbXBhcmlzb24gdXNpbmcgZGVlcCBlcXVhbGl0eSBjaGVja3MuXG4gKlxuICogIyMjIyBTbWFydCBGb3JtQXJyYXkgUmVzZXRcbiAqIFdoZW4gcmVzdG9yaW5nIGEgYEZvcm1BcnJheWAsIHRoZSBzZXJ2aWNlIGVuc3VyZXMgdGhhdCB0aGUgbnVtYmVyIGFuZCBzdHJ1Y3R1cmUgb2YgY29udHJvbHNcbiAqIG1hdGNoZXMgdGhlIHNuYXBzaG90IHZhbHVlcy4gQ29udHJvbHMgYXJlIGNsb25lZCBkeW5hbWljYWxseSBmcm9tIGFuIGV4aXN0aW5nIHByb3RvdHlwZS5cbiAqIElmIGEgYEZvcm1BcnJheWAgd2FzIGVtcHRpZWQgKGUuZy4gdmlhIGByZW1vdmVBdCgpYCksIGEgbWluaW1hbCBjb250cm9sIHN0cnVjdHVyZSBpcyBpbmZlcnJlZFxuICogZnJvbSB0aGUgc25hcHNob3QgZGF0YS5cbiAqXG4gKiAjIyMjIEV4YW1wbGUgVXNhZ2U6XG4gKlxuICogKipSZWdpc3RlciBhIEZvcm1Hcm91cCoqXG4gKiBgYGB0c1xuICogc2VydmljZS5zZXRGb3JtR3JvdXAoJ3VzZXJGb3JtJywgZm9ybUdyb3VwKTtcbiAqIGBgYFxuICpcbiAqICoqVGFrZSBhIFNuYXBzaG90KipcbiAqIGBgYHRzXG4gKiBzZXJ2aWNlLnRha2VGb3JtR3JvdXBzU25hcHNob3QoKTtcbiAqIGBgYFxuICpcbiAqICoqRGV0ZWN0IENoYW5nZXMqKlxuICogYGBgdHNcbiAqIHNlcnZpY2UuJGhhc1ZhbHVlc0NoYW5nZWQoKS5zdWJzY3JpYmUoY2hhbmdlZCA9PiB7XG4gKiAgIGlmIChjaGFuZ2VkKSB7XG4gKiAgICAgY29uc29sZS5sb2coJ0Zvcm0gZGF0YSBoYXMgY2hhbmdlZCcpO1xuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqICoqUmVzdG9yZSBmcm9tIFNuYXBzaG90KipcbiAqIGBgYHRzXG4gKiBzZXJ2aWNlLnJlc3RvcmVGb3JtR3JvdXBzRnJvbVNuYXBzaG90KCk7XG4gKiBgYGBcbiAqXG4gKiAqKkNoZWNrIGlmIEFsbCBGb3JtcyBBcmUgVmFsaWQqKlxuICogYGBgdHNcbiAqIHNlcnZpY2UuJGFyZUZvcm1Hcm91cHNWYWxpZCgpLnN1YnNjcmliZSh2YWxpZCA9PiB7XG4gKiAgIGlmICh2YWxpZCkge1xuICogICAgIGNvbnNvbGUubG9nKCdBbGwgZm9ybXMgdmFsaWQhJyk7XG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKlxuICogIyMjIyBOb3RlczpcbiAqIC0gRm9ybUFycmF5cyBhcmUgbm90IHJlcGxhY2VkIGR1cmluZyByZXN0b3JlLiBUaGVpciBsZW5ndGggaXMgYWRqdXN0ZWQgYW5kIHRoZWlyIGNvbnRlbnQgcmVzZXQuXG4gKiAtIENvbnRyb2wgY2xvbmluZyBpcyByZWN1cnNpdmUgYW5kIHN0cnVjdHVyZS1wcmVzZXJ2aW5nLlxuICogLSBObyBzdHJ1Y3R1cmFsIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiB0aGUgc25hcHNob3Q7IG9ubHkgZGF0YS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFFkRm9ybUdyb3VwTWFuYWdlclNlcnZpY2Uge1xuICBwcml2YXRlIF9mb3JtR3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIEZvcm1Hcm91cD4oKTtcbiAgcHJpdmF0ZSBfZm9ybUdyb3Vwc1NuYXBzaG90ID0gbmV3IE1hcDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpO1xuICBwcml2YXRlIF9mb3JtR3JvdXBzQ2hhbmdlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHZvaWQ+KHVuZGVmaW5lZCk7XG5cbiAgc2V0Rm9ybUdyb3VwKGtleTogc3RyaW5nLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgIHRoaXMuX2Zvcm1Hcm91cHMuc2V0KGtleSwgZm9ybUdyb3VwKTtcbiAgICB0aGlzLl9mb3JtR3JvdXBzQ2hhbmdlZCQubmV4dCgpO1xuICB9XG5cbiAgZ2V0Rm9ybUdyb3VwKGtleTogc3RyaW5nKTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3Vwcy5nZXQoa2V5KTtcbiAgfVxuXG4gIGdldEFsbEZvcm1Hcm91cHMoKTogTWFwPHN0cmluZywgRm9ybUdyb3VwPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1Hcm91cHM7XG4gIH1cblxuICB0cnlSZW1vdmVGb3JtR3JvdXAoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JtR3JvdXBzLmRlbGV0ZShrZXkpO1xuICAgIHRoaXMuX2Zvcm1Hcm91cHNDaGFuZ2VkJC5uZXh0KCk7XG4gIH1cblxuICBoYXNGb3JtR3JvdXBzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mb3JtR3JvdXBzLnNpemUgPiAwO1xuICB9XG5cbiAgZ2V0QWxsVmFsdWVzKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBhbGxWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICB0aGlzLl9mb3JtR3JvdXBzLmZvckVhY2goKGZvcm1Hcm91cCwga2V5KSA9PiAoYWxsVmFsdWVzW2tleV0gPSBmb3JtR3JvdXAudmFsdWUpKTtcblxuICAgIHJldHVybiBhbGxWYWx1ZXM7XG4gIH1cblxuICBpc0Zvcm1Hcm91cEtleVVuaXF1ZShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5fZm9ybUdyb3Vwcy5oYXMoa2V5KTtcbiAgfVxuXG4gICRhcmVGb3JtR3JvdXBzVmFsaWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1Hcm91cHNDaGFuZ2VkJC5waXBlKFxuICAgICAgb2JzZXJ2ZU9uKHF1ZXVlU2NoZWR1bGVyKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5oYXNGb3JtR3JvdXBzKCkpIHJldHVybiBvZihmYWxzZSk7XG5cbiAgICAgICAgY29uc3Qgb2JzID0gQXJyYXkuZnJvbSh0aGlzLl9mb3JtR3JvdXBzLnZhbHVlcygpKS5tYXAoZmcgPT5cbiAgICAgICAgICBmZy5zdGF0dXNDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBzdGFydFdpdGgoZmcuc3RhdHVzKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLmFyZUZvcm1Hcm91cHNWYWxpZChmZykpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KG9icykucGlwZShtYXAodmFsaWRzID0+IHZhbGlkcy5ldmVyeShCb29sZWFuKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgJGhhc1ZhbHVlc0NoYW5nZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1Hcm91cHNDaGFuZ2VkJC5waXBlKFxuICAgICAgb2JzZXJ2ZU9uKHF1ZXVlU2NoZWR1bGVyKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5oYXNGb3JtR3JvdXBzKCkpIHJldHVybiBvZihmYWxzZSk7XG5cbiAgICAgICAgY29uc3Qgb2JzID0gQXJyYXkuZnJvbSh0aGlzLl9mb3JtR3JvdXBzLmVudHJpZXMoKSkubWFwKChba2V5LCBmZ10pID0+XG4gICAgICAgICAgZmcudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBzdGFydFdpdGgoZmcuZ2V0UmF3VmFsdWUoKSksXG4gICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gZmcuZ2V0UmF3VmFsdWUoKTtcbiAgICAgICAgICAgICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLl9mb3JtR3JvdXBzU25hcHNob3QuZ2V0KGtleSk7XG4gICAgICAgICAgICAgIHJldHVybiBzbmFwc2hvdCA/ICFpc0VxdWFsKGN1cnJlbnRWYWx1ZXMsIHNuYXBzaG90KSA6IHRydWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChvYnMpLnBpcGUobWFwKGNoYW5nZXMgPT4gY2hhbmdlcy5zb21lKEJvb2xlYW4pKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICB0YWtlRm9ybUdyb3Vwc1NuYXBzaG90KCk6IHZvaWQge1xuICAgIHRoaXMuX2Zvcm1Hcm91cHMuZm9yRWFjaCgoZmcsIGtleSkgPT4gdGhpcy5fZm9ybUdyb3Vwc1NuYXBzaG90LnNldChrZXksIGZnLmdldFJhd1ZhbHVlKCkpKTtcbiAgfVxuXG4gIHJlc3RvcmVGb3JtR3JvdXBzRnJvbVNuYXBzaG90KCk6IHZvaWQge1xuICAgIHRoaXMuX2Zvcm1Hcm91cHMuZm9yRWFjaCgoZmcsIGtleSkgPT4ge1xuICAgICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLl9mb3JtR3JvdXBzU25hcHNob3QuZ2V0KGtleSk7XG4gICAgICBpZiAoIXNuYXBzaG90KSByZXR1cm47XG5cbiAgICAgIE9iamVjdC5lbnRyaWVzKGZnLmNvbnRyb2xzKS5mb3JFYWNoKChbY3RybEtleSwgY3RybF0pID0+IHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSAoc25hcHNob3QgYXMgYW55KVtjdHJsS2V5XTtcbiAgICAgICAgaWYgKGN0cmwgaW5zdGFuY2VvZiBGb3JtQXJyYXkgJiYgQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybUFycmF5VG9WYWx1ZXMoY3RybCwgbmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN0cmwucmVzZXQobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2FuY2VsUGVuZGluZ0FzeW5jVmFsaWRhdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgYW55IGluLWZsaWdodCBhc3luYyB2YWxpZGF0b3JzIG9uIGFsbCByZWdpc3RlcmVkIGZvcm0gZ3JvdXBzLlxuICAgKlxuICAgKiAxLiBDb2xsZWN0IGFsbCBQRU5ESU5HIGNvbnRyb2xzIGFuZCB0aGVpciBhc3luYyB2YWxpZGF0b3JzXG4gICAqIDIuIENsZWFyIGFsbCBhc3luYyB2YWxpZGF0b3JzLCB0aGVuIHVwZGF0ZSB2YWxpZGl0eSAoc3luYy1vbmx5LCBubyBjYXNjYWRlKVxuICAgKiAzLiBSZS1hdHRhY2ggYXN5bmMgdmFsaWRhdG9ycyBmb3IgZnV0dXJlIHVzZVxuICAgKi9cbiAgY2FuY2VsUGVuZGluZ0FzeW5jVmFsaWRhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JtR3JvdXBzLmZvckVhY2goZmcgPT4ge1xuICAgICAgY29uc3QgcGVuZGluZ0NvbnRyb2xzID0gdGhpcy5jb2xsZWN0UGVuZGluZ0NvbnRyb2xzKGZnKTtcbiAgICAgIGlmIChwZW5kaW5nQ29udHJvbHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgIGZvciAoY29uc3QgeyBjb250cm9sIH0gb2YgcGVuZGluZ0NvbnRyb2xzKSB7XG4gICAgICAgIGNvbnRyb2wuY2xlYXJBc3luY1ZhbGlkYXRvcnMoKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCB7IGNvbnRyb2wgfSBvZiBwZW5kaW5nQ29udHJvbHMpIHtcbiAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgeyBjb250cm9sLCBhc3luY1ZhbGlkYXRvciB9IG9mIHBlbmRpbmdDb250cm9scykge1xuICAgICAgICBjb250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyhhc3luY1ZhbGlkYXRvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RQZW5kaW5nQ29udHJvbHMoXG4gICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sXG4gICk6IHsgY29udHJvbDogQWJzdHJhY3RDb250cm9sOyBhc3luY1ZhbGlkYXRvcjogQWJzdHJhY3RDb250cm9sWydhc3luY1ZhbGlkYXRvciddIH1bXSB7XG4gICAgY29uc3QgcmVzdWx0OiB7IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDsgYXN5bmNWYWxpZGF0b3I6IEFic3RyYWN0Q29udHJvbFsnYXN5bmNWYWxpZGF0b3InXSB9W10gPSBbXTtcblxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICBPYmplY3QudmFsdWVzKGNvbnRyb2wuY29udHJvbHMpLmZvckVhY2goYyA9PiByZXN1bHQucHVzaCguLi50aGlzLmNvbGxlY3RQZW5kaW5nQ29udHJvbHMoYykpKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgIGNvbnRyb2wuY29udHJvbHMuZm9yRWFjaChjID0+IHJlc3VsdC5wdXNoKC4uLnRoaXMuY29sbGVjdFBlbmRpbmdDb250cm9scyhjKSkpO1xuICAgIH1cblxuICAgIGlmIChjb250cm9sLnN0YXR1cyA9PT0gJ1BFTkRJTkcnKSB7XG4gICAgICByZXN1bHQucHVzaCh7IGNvbnRyb2wsIGFzeW5jVmFsaWRhdG9yOiBjb250cm9sLmFzeW5jVmFsaWRhdG9yIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0Rm9ybUFycmF5VG9WYWx1ZXMoYXJyYXk6IEZvcm1BcnJheSwgbmV3VmFsdWVzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobmV3VmFsdWVzKSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgb2xkTGVuID0gYXJyYXkubGVuZ3RoO1xuICAgIGNvbnN0IG5ld0xlbiA9IG5ld1ZhbHVlcy5sZW5ndGg7XG5cbiAgICBpZiAob2xkTGVuID09PSAwICYmIG5ld0xlbiA9PT0gMCkgcmV0dXJuO1xuICAgIGlmIChvbGRMZW4gPT09IDAgJiYgbmV3TGVuID4gMCkgcmV0dXJuIHRoaXMuaW5pdEZvcm1BcnJheUZyb21WYWx1ZXMoYXJyYXksIG5ld1ZhbHVlcyk7XG5cbiAgICB3aGlsZSAoYXJyYXkubGVuZ3RoIDwgbmV3TGVuKSBhcnJheS5wdXNoKHRoaXMuZGVlcENsb25lQ29udHJvbChhcnJheS5hdCgwKSkpO1xuICAgIHdoaWxlIChhcnJheS5sZW5ndGggPiBuZXdMZW4pIGFycmF5LnJlbW92ZUF0KGFycmF5Lmxlbmd0aCAtIDEpO1xuXG4gICAgYXJyYXkucmVzZXQobmV3VmFsdWVzKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZvcm1BcnJheUZyb21WYWx1ZXMoYXJyYXk6IEZvcm1BcnJheSwgdmFsdWVzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBjb25zdCBwcm90b1ZhbHVlID0gdmFsdWVzWzBdO1xuXG4gICAgaWYgKCFwcm90b1ZhbHVlIHx8IHR5cGVvZiBwcm90b1ZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgY29uc29sZS53YXJuKCdRRC1VSSB8IFFkRm9ybUdyb3VwTWFuYWdlciAtIENhbm5vdCByZXN0b3JlIEZvcm1BcnJheTogbm8gcHJvdG90eXBlIGFuZCB2YWx1ZSBpcyBub3Qgb2JqZWN0LWxpa2UuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbnRyb2xzOiBSZWNvcmQ8c3RyaW5nLCBBYnN0cmFjdENvbnRyb2w+ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhwcm90b1ZhbHVlKS5mb3JFYWNoKGtleSA9PiAoY29udHJvbHNba2V5XSA9IG5ldyBGb3JtQ29udHJvbCgpKSk7XG4gICAgICBhcnJheS5wdXNoKG5ldyBGb3JtR3JvdXAoeyAuLi5jb250cm9scyB9KSk7XG4gICAgfVxuXG4gICAgYXJyYXkucmVzZXQodmFsdWVzKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVlcENsb25lQ29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHJldHVybiBuZXcgRm9ybUNvbnRyb2wodW5kZWZpbmVkLCBjb250cm9sLnZhbGlkYXRvciwgY29udHJvbC5hc3luY1ZhbGlkYXRvcik7XG5cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgY29uc3QgZ3JvdXBDb250cm9sczogUmVjb3JkPHN0cmluZywgQWJzdHJhY3RDb250cm9sPiA9IHt9O1xuXG4gICAgICBPYmplY3QuZW50cmllcyhjb250cm9sLmNvbnRyb2xzKS5mb3JFYWNoKChba2V5LCBjdHJsXSkgPT4gKGdyb3VwQ29udHJvbHNba2V5XSA9IHRoaXMuZGVlcENsb25lQ29udHJvbChjdHJsKSkpO1xuXG4gICAgICByZXR1cm4gbmV3IEZvcm1Hcm91cChncm91cENvbnRyb2xzLCBjb250cm9sLnZhbGlkYXRvciwgY29udHJvbC5hc3luY1ZhbGlkYXRvcik7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgIGNvbnN0IGFyckNvbnRyb2xzID0gY29udHJvbC5jb250cm9scy5tYXAoYyA9PiB0aGlzLmRlZXBDbG9uZUNvbnRyb2woYykpO1xuXG4gICAgICByZXR1cm4gbmV3IEZvcm1BcnJheShhcnJDb250cm9scywgY29udHJvbC52YWxpZGF0b3IsIGNvbnRyb2wuYXN5bmNWYWxpZGF0b3IpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignUUQtVUkgfCBRZEZvcm1Hcm91cE1hbmFnZXIgLSBVbnN1cHBvcnRlZCBjb250cm9sIHR5cGUnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXJlRm9ybUdyb3Vwc1ZhbGlkKGZnOiBGb3JtR3JvdXApOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmZy5jb250cm9scykuZXZlcnkoYyA9PiAoYy5kaXNhYmxlZCAmJiAhYy52YWxpZGF0b3IgJiYgIWMuYXN5bmNWYWxpZGF0b3IgPyB0cnVlIDogYy52YWxpZCkpO1xuICB9XG59XG4iXX0=
@@ -14,6 +14,7 @@ export class QdPageSubmitActionService {
14
14
  _submitHandler;
15
15
  _isVisible = true;
16
16
  _destroyed$ = new Subject();
17
+ _cancelTrackFormValidity$ = new Subject();
17
18
  constructor(footerService, formGroupManagerService) {
18
19
  this.footerService = footerService;
19
20
  this.formGroupManagerService = formGroupManagerService;
@@ -41,9 +42,10 @@ export class QdPageSubmitActionService {
41
42
  };
42
43
  }
43
44
  trackFormValidity() {
45
+ this._cancelTrackFormValidity$.next();
44
46
  this.formGroupManagerService
45
47
  .$areFormGroupsValid()
46
- .pipe(takeUntil(this._destroyed$), distinctUntilChanged())
48
+ .pipe(takeUntil(this._cancelTrackFormValidity$), takeUntil(this._destroyed$), distinctUntilChanged())
47
49
  .subscribe(isValid => this.updateSubmitButtonState(isValid));
48
50
  }
49
51
  updateSubmitButtonState(isValid) {
@@ -66,4 +68,4 @@ export class QdPageSubmitActionService {
66
68
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdPageSubmitActionService, decorators: [{
67
69
  type: Injectable
68
70
  }], ctorParameters: () => [{ type: i1.QdPageFooterService }, { type: i2.QdFormGroupManagerService }] });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1zdWJtaXQtYWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3FkLXVpL3NyYy9saWIvcGFnZS9zaGFyZWQvc2VydmljZXMvcGFnZS1zdWJtaXQtYWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQUc1RCxNQUFNLE9BQU8seUJBQXlCO0lBT2pCO0lBQ0E7SUFQWCxVQUFVLEdBQUcsNEJBQTRCLENBQUM7SUFDMUMsY0FBYyxDQUFnQztJQUM5QyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLFdBQVcsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVuRCxZQUNtQixhQUFrQyxFQUNsQyx1QkFBa0Q7UUFEbEQsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBQ2xDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBMkI7SUFDbEUsQ0FBQztJQUVKLFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxjQUF1QyxFQUFFLFNBQWtCO1FBQ25GLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTTtZQUFFLE9BQU87UUFFcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8scUJBQXFCLENBQUMsWUFHN0I7UUFDQyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLDRCQUE0QixDQUFDO1FBQzNFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sa0JBQWtCLENBQUMsZUFBNkM7UUFDdEUsT0FBTyxDQUFDLEdBQUcsSUFBZSxFQUFRLEVBQUU7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQUU7Z0JBQUUsT0FBTyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUVuRixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyx1QkFBdUI7YUFDekIsbUJBQW1CLEVBQUU7YUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQzthQUN6RCxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sdUJBQXVCLENBQUMsT0FBZ0I7UUFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7WUFDNUI7Z0JBQ0UsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsTUFBTSxFQUFFO29CQUNOLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVTtvQkFDMUIsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjO29CQUM1QixVQUFVLEVBQUUsQ0FBQyxPQUFPO29CQUNwQixTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7b0JBQzFCLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxPQUFPO2lCQUNqQzthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt1R0E1RFUseUJBQXlCOzJHQUF6Qix5QkFBeUI7OzJGQUF6Qix5QkFBeUI7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWwvcGFnZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFFkRm9vdGVyQWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVsL3BhZ2UtZm9vdGVyLWFjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUWRGb3JtR3JvdXBNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4vZm9ybS1ncm91cC1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRQYWdlRm9vdGVyU2VydmljZSB9IGZyb20gJy4vcGFnZS1mb290ZXIuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBRZFBhZ2VTdWJtaXRBY3Rpb25TZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfbGFiZWxJMThuID0gJ2kxOG4ucWQucGFnZS5mb290ZXIuc3VibWl0JztcbiAgcHJpdmF0ZSBfc3VibWl0SGFuZGxlciE6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQ7XG4gIHByaXZhdGUgX2lzVmlzaWJsZSA9IHRydWU7XG4gIHByaXZhdGUgX2Rlc3Ryb3llZCQ6IFN1YmplY3Q8bnVsbD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9vdGVyU2VydmljZTogUWRQYWdlRm9vdGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlOiBRZEZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlXG4gICkge31cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95ZWQkLm5leHQobnVsbCk7XG4gICAgdGhpcy5fZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgc2V0U3VibWl0QWN0aW9uRm9ySW5zcGVjdChwYWdlVHlwZUNvbmZpZzogUWRQYWdlVHlwZUluc3BlY3RDb25maWcsIGlzVmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghcGFnZVR5cGVDb25maWc/LnN1Ym1pdCkgcmV0dXJuO1xuXG4gICAgdGhpcy5faXNWaXNpYmxlID0gaXNWaXNpYmxlO1xuICAgIHRoaXMuY29uZmlndXJlU3VibWl0QWN0aW9uKHBhZ2VUeXBlQ29uZmlnLnN1Ym1pdCk7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZ3VyZVN1Ym1pdEFjdGlvbihzdWJtaXRDb25maWc6IHtcbiAgICBsYWJlbD86IHsgaTE4bjogc3RyaW5nIH07XG4gICAgaGFuZGxlcjogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZDtcbiAgfSk6IHZvaWQge1xuICAgIHRoaXMuX2xhYmVsSTE4biA9IHN1Ym1pdENvbmZpZy5sYWJlbD8uaTE4biB8fCAnaTE4bi5xZC5wYWdlLmZvb3Rlci5zdWJtaXQnO1xuICAgIHRoaXMuX3N1Ym1pdEhhbmRsZXIgPSB0aGlzLmJ1aWxkU3VibWl0SGFuZGxlcihzdWJtaXRDb25maWcuaGFuZGxlcik7XG4gICAgdGhpcy50cmFja0Zvcm1WYWxpZGl0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFN1Ym1pdEhhbmRsZXIob3JpZ2luYWxIYW5kbGVyOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkKTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkID0+IHtcbiAgICAgIGlmICghdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZS5oYXNGb3JtR3JvdXBzKCkpIHJldHVybiBvcmlnaW5hbEhhbmRsZXIoLi4uYXJncyk7XG5cbiAgICAgIHJldHVybiBvcmlnaW5hbEhhbmRsZXIodGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZS5nZXRBbGxWYWx1ZXMoKSk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhY2tGb3JtVmFsaWRpdHkoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZVxuICAgICAgLiRhcmVGb3JtR3JvdXBzVmFsaWQoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgLnN1YnNjcmliZShpc1ZhbGlkID0+IHRoaXMudXBkYXRlU3VibWl0QnV0dG9uU3RhdGUoaXNWYWxpZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdWJtaXRCdXR0b25TdGF0ZShpc1ZhbGlkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5mb290ZXJTZXJ2aWNlLnNldEFjdGlvbnMoW1xuICAgICAge1xuICAgICAgICBrZXk6ICdzdWJtaXQnLFxuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICB0aXRsZUkxOG46IHRoaXMuX2xhYmVsSTE4bixcbiAgICAgICAgICBoYW5kbGVyOiB0aGlzLl9zdWJtaXRIYW5kbGVyLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6ICFpc1ZhbGlkLFxuICAgICAgICAgIGlzVmlzaWJsZTogdGhpcy5faXNWaXNpYmxlLFxuICAgICAgICAgIHR5cGU6IFFkRm9vdGVyQWN0aW9uVHlwZS5QcmltYXJ5XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdKTtcbiAgfVxufVxuIl19
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1zdWJtaXQtYWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3FkLXVpL3NyYy9saWIvcGFnZS9zaGFyZWQvc2VydmljZXMvcGFnZS1zdWJtaXQtYWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQUc1RCxNQUFNLE9BQU8seUJBQXlCO0lBUWpCO0lBQ0E7SUFSWCxVQUFVLEdBQUcsNEJBQTRCLENBQUM7SUFDMUMsY0FBYyxDQUFnQztJQUM5QyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLFdBQVcsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUMzQyx5QkFBeUIsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXhELFlBQ21CLGFBQWtDLEVBQ2xDLHVCQUFrRDtRQURsRCxrQkFBYSxHQUFiLGFBQWEsQ0FBcUI7UUFDbEMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUEyQjtJQUNsRSxDQUFDO0lBRUosV0FBVztRQUNULElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELHlCQUF5QixDQUFDLGNBQXVDLEVBQUUsU0FBa0I7UUFDbkYsSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNO1lBQUUsT0FBTztRQUVwQyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxZQUc3QjtRQUNDLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksNEJBQTRCLENBQUM7UUFDM0UsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxlQUE2QztRQUN0RSxPQUFPLENBQUMsR0FBRyxJQUFlLEVBQVEsRUFBRTtZQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsRUFBRTtnQkFBRSxPQUFPLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBRW5GLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxDQUFDO1FBRXRDLElBQUksQ0FBQyx1QkFBdUI7YUFDekIsbUJBQW1CLEVBQUU7YUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLENBQUM7YUFDcEcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVPLHVCQUF1QixDQUFDLE9BQWdCO1FBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO1lBQzVCO2dCQUNFLEdBQUcsRUFBRSxRQUFRO2dCQUNiLE1BQU0sRUFBRTtvQkFDTixTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7b0JBQzFCLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYztvQkFDNUIsVUFBVSxFQUFFLENBQUMsT0FBTztvQkFDcEIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO29CQUMxQixJQUFJLEVBQUUsa0JBQWtCLENBQUMsT0FBTztpQkFDakM7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7dUdBL0RVLHlCQUF5QjsyR0FBekIseUJBQXlCOzsyRkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBRZFBhZ2VUeXBlSW5zcGVjdENvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVsL3BhZ2UtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBRZEZvb3RlckFjdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbC9wYWdlLWZvb3Rlci1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFFkRm9ybUdyb3VwTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuL2Zvcm0tZ3JvdXAtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IFFkUGFnZUZvb3RlclNlcnZpY2UgfSBmcm9tICcuL3BhZ2UtZm9vdGVyLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUWRQYWdlU3VibWl0QWN0aW9uU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2xhYmVsSTE4biA9ICdpMThuLnFkLnBhZ2UuZm9vdGVyLnN1Ym1pdCc7XG4gIHByaXZhdGUgX3N1Ym1pdEhhbmRsZXIhOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkO1xuICBwcml2YXRlIF9pc1Zpc2libGUgPSB0cnVlO1xuICBwcml2YXRlIF9kZXN0cm95ZWQkOiBTdWJqZWN0PG51bGw+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBfY2FuY2VsVHJhY2tGb3JtVmFsaWRpdHkkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvb3RlclNlcnZpY2U6IFFkUGFnZUZvb3RlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtR3JvdXBNYW5hZ2VyU2VydmljZTogUWRGb3JtR3JvdXBNYW5hZ2VyU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveWVkJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHNldFN1Ym1pdEFjdGlvbkZvckluc3BlY3QocGFnZVR5cGVDb25maWc6IFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnLCBpc1Zpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXBhZ2VUeXBlQ29uZmlnPy5zdWJtaXQpIHJldHVybjtcblxuICAgIHRoaXMuX2lzVmlzaWJsZSA9IGlzVmlzaWJsZTtcbiAgICB0aGlzLmNvbmZpZ3VyZVN1Ym1pdEFjdGlvbihwYWdlVHlwZUNvbmZpZy5zdWJtaXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maWd1cmVTdWJtaXRBY3Rpb24oc3VibWl0Q29uZmlnOiB7XG4gICAgbGFiZWw/OiB7IGkxOG46IHN0cmluZyB9O1xuICAgIGhhbmRsZXI6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQ7XG4gIH0pOiB2b2lkIHtcbiAgICB0aGlzLl9sYWJlbEkxOG4gPSBzdWJtaXRDb25maWcubGFiZWw/LmkxOG4gfHwgJ2kxOG4ucWQucGFnZS5mb290ZXIuc3VibWl0JztcbiAgICB0aGlzLl9zdWJtaXRIYW5kbGVyID0gdGhpcy5idWlsZFN1Ym1pdEhhbmRsZXIoc3VibWl0Q29uZmlnLmhhbmRsZXIpO1xuICAgIHRoaXMudHJhY2tGb3JtVmFsaWRpdHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTdWJtaXRIYW5kbGVyKG9yaWdpbmFsSGFuZGxlcjogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZCk6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQge1xuICAgIHJldHVybiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwTWFuYWdlclNlcnZpY2UuaGFzRm9ybUdyb3VwcygpKSByZXR1cm4gb3JpZ2luYWxIYW5kbGVyKC4uLmFyZ3MpO1xuXG4gICAgICByZXR1cm4gb3JpZ2luYWxIYW5kbGVyKHRoaXMuZm9ybUdyb3VwTWFuYWdlclNlcnZpY2UuZ2V0QWxsVmFsdWVzKCkpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHRyYWNrRm9ybVZhbGlkaXR5KCk6IHZvaWQge1xuICAgIHRoaXMuX2NhbmNlbFRyYWNrRm9ybVZhbGlkaXR5JC5uZXh0KCk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlXG4gICAgICAuJGFyZUZvcm1Hcm91cHNWYWxpZCgpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fY2FuY2VsVHJhY2tGb3JtVmFsaWRpdHkkKSwgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgLnN1YnNjcmliZShpc1ZhbGlkID0+IHRoaXMudXBkYXRlU3VibWl0QnV0dG9uU3RhdGUoaXNWYWxpZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdWJtaXRCdXR0b25TdGF0ZShpc1ZhbGlkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5mb290ZXJTZXJ2aWNlLnNldEFjdGlvbnMoW1xuICAgICAge1xuICAgICAgICBrZXk6ICdzdWJtaXQnLFxuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICB0aXRsZUkxOG46IHRoaXMuX2xhYmVsSTE4bixcbiAgICAgICAgICBoYW5kbGVyOiB0aGlzLl9zdWJtaXRIYW5kbGVyLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6ICFpc1ZhbGlkLFxuICAgICAgICAgIGlzVmlzaWJsZTogdGhpcy5faXNWaXNpYmxlLFxuICAgICAgICAgIHR5cGU6IFFkRm9vdGVyQWN0aW9uVHlwZS5QcmltYXJ5XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdKTtcbiAgfVxufVxuIl19