@netgrif/components-core 6.4.2-rc.6 → 6.4.2

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.
@@ -12,6 +12,7 @@ import { DynamicEnumerationField } from '../../data-fields/enumeration-field/mod
12
12
  import { QueuedEvent } from '../../event-queue/model/queued-event';
13
13
  import { AfterAction } from '../../utility/call-chain/after-action';
14
14
  import { EnumerationField } from "../../data-fields/enumeration-field/models/enumeration-field";
15
+ import { ButtonField } from "../../data-fields/button-field/models/button-field";
15
16
  import * as i0 from "@angular/core";
16
17
  import * as i1 from "./task-request-state.service";
17
18
  import * as i2 from "@ngx-translate/core";
@@ -43,6 +44,7 @@ export class TaskDataService extends TaskHandlingService {
43
44
  this._fieldConverterService = _fieldConverterService;
44
45
  this._taskEvent = _taskEvent;
45
46
  this._taskOperations = _taskOperations;
47
+ this._taskContentService = _taskContentService;
46
48
  this._afterActionFactory = _afterActionFactory;
47
49
  this._eventQueue = _eventQueue;
48
50
  this._userComparator = _userComparator;
@@ -174,6 +176,11 @@ export class TaskDataService extends TaskHandlingService {
174
176
  this._taskContentService.taskFieldsIndex[parentTaskId].fields[field.stringId] = field;
175
177
  field.valueChanges().subscribe(() => {
176
178
  if (this.wasFieldUpdated(field)) {
179
+ if (field instanceof ButtonField && field.component?.properties?.validateData === 'true' && !this._taskContentService.validateTaskData()) {
180
+ field.waitingForResponse = false;
181
+ field.changed = false;
182
+ return;
183
+ }
177
184
  if (field instanceof DynamicEnumerationField) {
178
185
  field.loading = true;
179
186
  this.updateTaskDataFields(this._afterActionFactory.create(bool => {
@@ -560,4 +567,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
560
567
  }] }, { type: i8.SelectedCaseService, decorators: [{
561
568
  type: Optional
562
569
  }] }, { type: i9.TaskContentService }, { type: i10.CallChainService }, { type: i11.EventQueueService }, { type: i12.UserComparatorService }, { type: i13.EventService }, { type: i14.ChangedFieldsService }, { type: i15.FrontActionService }]; } });
563
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1kYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3Rhc2svc2VydmljZXMvdGFzay1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQWEsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBYSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFVdkQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFFOUUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBRXpFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN2RixPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUM3RixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFJOUQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHNFQUFzRSxDQUFDO0FBRzdHLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFRbEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sOERBQThELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRzlGOzs7R0FHRztBQUVILE1BQU0sT0FBTyxlQUFnQixTQUFRLG1CQUFtQjtJQUtwRCxZQUFzQixVQUFtQyxF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TUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDbEcsS0FBSyxDQUFDLHFCQUFxQixFQUFFLENBQUM7aUJBQ2pDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFUywyQkFBMkIsQ0FBQyxJQUE0QjtRQUM5RCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1lBQ2hHLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzs2R0E1a0JRLGVBQWUsNlBBWUosbUJBQW1CO2lIQVo5QixlQUFlOzRGQUFmLGVBQWU7a0JBRDNCLFVBQVU7OzBCQWFNLE1BQU07MkJBQUMsbUJBQW1COzswQkFDMUIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q2hhbmdlZEZpZWxkcywgRnJvbnRBY3Rpb259IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL21vZGVscy9jaGFuZ2VkLWZpZWxkcyc7XG5pbXBvcnQge1Rhc2tDb250ZW50U2VydmljZX0gZnJvbSAnLi4vLi4vdGFzay1jb250ZW50L3NlcnZpY2VzL3Rhc2stY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7VGFza1JlcXVlc3RTdGF0ZVNlcnZpY2V9IGZyb20gJy4vdGFzay1yZXF1ZXN0LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7U25hY2tCYXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zbmFjay1iYXIvc2VydmljZXMvc25hY2stYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHtUYXNrUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L3Rhc2stcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0ZpZWxkQ29udmVydGVyU2VydmljZX0gZnJvbSAnLi4vLi4vdGFzay1jb250ZW50L3NlcnZpY2VzL2ZpZWxkLWNvbnZlcnRlci5zZXJ2aWNlJztcbmltcG9ydCB7VGFza1NldERhdGFSZXF1ZXN0Qm9keX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS90YXNrLXNldC1kYXRhLXJlcXVlc3QtYm9keSc7XG5pbXBvcnQge1Rhc2tIYW5kbGluZ1NlcnZpY2V9IGZyb20gJy4vdGFzay1oYW5kbGluZy1zZXJ2aWNlJztcbmltcG9ydCB7TkFFX1RBU0tfT1BFUkFUSU9OU30gZnJvbSAnLi4vbW9kZWxzL3Rhc2stb3BlcmF0aW9ucy1pbmplY3Rpb24tdG9rZW4nO1xuaW1wb3J0IHtUYXNrT3BlcmF0aW9uc30gZnJvbSAnLi4vaW50ZXJmYWNlcy90YXNrLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtGaWxlRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2ZpbGUtZmllbGQvbW9kZWxzL2ZpbGUtZmllbGQnO1xuaW1wb3J0IHtTZWxlY3RlZENhc2VTZXJ2aWNlfSBmcm9tICcuL3NlbGVjdGVkLWNhc2Uuc2VydmljZSc7XG5pbXBvcnQge0ZpbGVMaXN0RmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2ZpbGUtbGlzdC1maWVsZC9tb2RlbHMvZmlsZS1saXN0LWZpZWxkJztcbmltcG9ydCB7Y3JlYXRlVGFza0V2ZW50Tm90aWZpY2F0aW9ufSBmcm9tICcuLi8uLi90YXNrLWNvbnRlbnQvbW9kZWwvdGFzay1ldmVudC1ub3RpZmljYXRpb24nO1xuaW1wb3J0IHtUYXNrRXZlbnR9IGZyb20gJy4uLy4uL3Rhc2stY29udGVudC9tb2RlbC90YXNrLWV2ZW50JztcbmltcG9ydCB7VGFza0V2ZW50U2VydmljZX0gZnJvbSAnLi4vLi4vdGFzay1jb250ZW50L3NlcnZpY2VzL3Rhc2stZXZlbnQuc2VydmljZSc7XG5pbXBvcnQge0RhdGFGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2Fic3RyYWN0LWRhdGEtZmllbGQnO1xuaW1wb3J0IHtDYWxsQ2hhaW5TZXJ2aWNlfSBmcm9tICcuLi8uLi91dGlsaXR5L2NhbGwtY2hhaW4vY2FsbC1jaGFpbi5zZXJ2aWNlJztcbmltcG9ydCB7dGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtEeW5hbWljRW51bWVyYXRpb25GaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZW51bWVyYXRpb24tZmllbGQvbW9kZWxzL2R5bmFtaWMtZW51bWVyYXRpb24tZmllbGQnO1xuaW1wb3J0IHtEYXRhR3JvdXB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvZGF0YS1ncm91cHMnO1xuaW1wb3J0IHtFdmVudFF1ZXVlU2VydmljZX0gZnJvbSAnLi4vLi4vZXZlbnQtcXVldWUvc2VydmljZXMvZXZlbnQtcXVldWUuc2VydmljZSc7XG5pbXBvcnQge1F1ZXVlZEV2ZW50fSBmcm9tICcuLi8uLi9ldmVudC1xdWV1ZS9tb2RlbC9xdWV1ZWQtZXZlbnQnO1xuaW1wb3J0IHtBZnRlckFjdGlvbn0gZnJvbSAnLi4vLi4vdXRpbGl0eS9jYWxsLWNoYWluL2FmdGVyLWFjdGlvbic7XG5pbXBvcnQge1VzZXJDb21wYXJhdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vdXNlci9zZXJ2aWNlcy91c2VyLWNvbXBhcmF0b3Iuc2VydmljZSc7XG5pbXBvcnQge1Rhc2tTZXREYXRhUmVxdWVzdENvbnRleHR9IGZyb20gJy4uL21vZGVscy90YXNrLXNldC1kYXRhLXJlcXVlc3QtY29udGV4dCc7XG5pbXBvcnQge0V2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9tZXNzYWdlLXJlc291cmNlJztcbmltcG9ydCB7RXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9ldmVudC9zZXJ2aWNlcy9ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7Q2hhbmdlZEZpZWxkc1NlcnZpY2V9IGZyb20gJy4uLy4uL2NoYW5nZWQtZmllbGRzL3NlcnZpY2VzL2NoYW5nZWQtZmllbGRzLnNlcnZpY2UnO1xuaW1wb3J0IHtDaGFuZ2VkRmllbGRzTWFwfSBmcm9tICcuLi8uLi9ldmVudC9zZXJ2aWNlcy9pbnRlcmZhY2VzL2NoYW5nZWQtZmllbGRzLW1hcCc7XG5pbXBvcnQge1Rhc2tGaWVsZHN9IGZyb20gJy4uLy4uL3Rhc2stY29udGVudC9tb2RlbC90YXNrLWZpZWxkcyc7XG5pbXBvcnQge0VudW1lcmF0aW9uRmllbGR9IGZyb20gXCIuLi8uLi9kYXRhLWZpZWxkcy9lbnVtZXJhdGlvbi1maWVsZC9tb2RlbHMvZW51bWVyYXRpb24tZmllbGRcIjtcbmltcG9ydCB7RnJvbnRBY3Rpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vYWN0aW9ucy9zZXJ2aWNlcy9mcm9udC1hY3Rpb24uc2VydmljZVwiO1xuXG4vKipcbiAqIEhhbmRsZXMgdGhlIGxvYWRpbmcgYW5kIHVwZGF0aW5nIG9mIGRhdGEgZmllbGRzIGFuZCBiZWhhdmlvdXIgb2ZcbiAqIGEgc2luZ2xlIFRhc2sgb2JqZWN0IG1hbmFnZWQgYnkgYSB7QGxpbmsgVGFza0NvbnRlbnRTZXJ2aWNlfSBpbnN0YW5jZS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhc2tEYXRhU2VydmljZSBleHRlbmRzIFRhc2tIYW5kbGluZ1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgcHJvdGVjdGVkIF91cGRhdGVTdWNjZXNzJDogU3ViamVjdDxib29sZWFuPjtcbiAgICBwcm90ZWN0ZWQgX2RhdGFSZWxvYWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfdGFza1N0YXRlOiBUYXNrUmVxdWVzdFN0YXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2xvZzogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3NuYWNrQmFyOiBTbmFja0JhclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90YXNrUmVzb3VyY2VTZXJ2aWNlOiBUYXNrUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfZmllbGRDb252ZXJ0ZXJTZXJ2aWNlOiBGaWVsZENvbnZlcnRlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90YXNrRXZlbnQ6IFRhc2tFdmVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgQEluamVjdChOQUVfVEFTS19PUEVSQVRJT05TKSBwcm90ZWN0ZWQgX3Rhc2tPcGVyYXRpb25zOiBUYXNrT3BlcmF0aW9ucyxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBfc2VsZWN0ZWRDYXNlU2VydmljZTogU2VsZWN0ZWRDYXNlU2VydmljZSxcbiAgICAgICAgICAgICAgICBfdGFza0NvbnRlbnRTZXJ2aWNlOiBUYXNrQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hZnRlckFjdGlvbkZhY3Rvcnk6IENhbGxDaGFpblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9ldmVudFF1ZXVlOiBFdmVudFF1ZXVlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VzZXJDb21wYXJhdG9yOiBVc2VyQ29tcGFyYXRvclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9ldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2NoYW5nZWRGaWVsZHNTZXJ2aWNlOiBDaGFuZ2VkRmllbGRzU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2Zyb250QWN0aW9uU2VydmljZTogRnJvbnRBY3Rpb25TZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKF90YXNrQ29udGVudFNlcnZpY2UsIF9zZWxlY3RlZENhc2VTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlU3VjY2VzcyQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgICAgICB0aGlzLl9kYXRhUmVsb2FkU3Vic2NyaXB0aW9uID0gdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnRhc2tEYXRhUmVsb2FkUmVxdWVzdCQuc3Vic2NyaWJlKHF1ZXVlZEZyb250ZW5kQWN0aW9uID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVRhc2tEYXRhRmllbGRzKG5ldyBBZnRlckFjdGlvbigpLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVN1Y2Nlc3MkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2RhdGFSZWxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNUYXNrUHJlc2VudCgpICYmIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwICYmIGdyb3VwLmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICBncm91cC5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiBmaWVsZC5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBiYWNrZW5kXG4gICAgICogY2FsbHMgaW4gW3VwZGF0ZVRhc2tEYXRhRmllbGRzXXtAbGluayBUYXNrRGF0YVNlcnZpY2UjdXBkYXRlVGFza0RhdGFGaWVsZHN9IG1ldGhvZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHVwZGF0ZVN1Y2Nlc3MkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlU3VjY2VzcyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZHMgdGhlIERhdGEgRmllbGRzIG9mIGFuIHVuaW5pdGlhbGl6ZWQgVGFzayBmcm9tIGJhY2tlbmRcbiAgICAgKiBhbmQgcG9wdWxhdGVzIHRoZSBUYXNrIG1hbmFnZWQgYnkge0BsaW5rIFRhc2tDb250ZW50U2VydmljZX0gd2l0aCB0aGUgYXBwcm9wcmlhdGUgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEJld2FyZSB0aGF0IGlmIHRoZSBUYXNrIGhhcyBzb21lIGRhdGEgYWxyZWFkeSBsb2FkZWQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmdcbiAgICAgKiBhbmQgb25seSBwYXNzZXMgYHRydWVgIHRvIHRoZSBgYWZ0ZXJBY3Rpb25gIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogSWYgdGhlIHRhc2sgaGVsZCB3aXRoaW4gdGhlIHtAbGluayBUYXNrQ29udGVudFNlcnZpY2V9IGNoYW5nZXMgYmVmb3JlIGEgcmVzcG9uc2UgaXMgcmVjZWl2ZWQsIHRoZSByZXNwb25zZSB3aWxsIGJlIGlnbm9yZWRcbiAgICAgKiBhbmQgdGhlIGBhZnRlckFjdGlvbmAgd2lsbCBub3QgYmUgZXhlY3V0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gaWYgdGhlIHJlcXVlc3QgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSBlbWl0cyBgdHJ1ZWAgaW50byB0aGUgU3ViamVjdCwgb3RoZXJ3aXNlIGBmYWxzZWAgd2lsbCBiZSBlbWl0dGVkXG4gICAgICogQHBhcmFtIGZvcmNlIHNldCB0byBgdHJ1ZWAgaWYgeW91IG5lZWQgZm9yY2UgcmVsb2FkIG9mIGFsbCB0YXNrIGRhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdGlhbGl6ZVRhc2tEYXRhRmllbGRzKGFmdGVyQWN0aW9uOiBBZnRlckFjdGlvbiA9IG5ldyBBZnRlckFjdGlvbigpLCBmb3JjZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2V2ZW50UXVldWUuc2NoZWR1bGVFdmVudChuZXcgUXVldWVkRXZlbnQoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNUYXNrUHJlc2VudCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRFdmVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtR2V0RGF0YVJlcXVlc3QoYWZ0ZXJBY3Rpb24sIGZvcmNlLCBuZXh0RXZlbnQpO1xuICAgICAgICAgICAgfSwgbmV4dEV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBhZnRlckFjdGlvbi5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgYGdldERhdGFgIHJlcXVlc3Qgb24gdGhlIHRhc2sgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUgYHRhc2tDb250ZW50YCBzZXJ2aWNlXG4gICAgICogQHBhcmFtIGFmdGVyQWN0aW9uIHRoZSBhY3Rpb24gdGhhdCBzaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHRoZSByZXF1ZXN0IGlzIHByb2Nlc3NlZFxuICAgICAqIEBwYXJhbSBmb3JjZSBzZXQgdG8gYHRydWVgIGlmIHlvdSBuZWVkIGZvcmNlIHJlbG9hZCBvZiBhbGwgdGFzayBkYXRhXG4gICAgICogQHBhcmFtIG5leHRFdmVudCBpbmRpY2F0ZXMgdG8gdGhlIGV2ZW50IHF1ZXVlIHRoYXQgdGhlIG5leHQgZXZlbnQgY2FuIGJlIHByb2Nlc3NlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwZXJmb3JtR2V0RGF0YVJlcXVlc3QoYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uLCBmb3JjZTogYm9vbGVhbiwgbmV4dEV2ZW50OiBBZnRlckFjdGlvbikge1xuICAgICAgICBpZiAodGhpcy5fc2FmZVRhc2suZGF0YVNpemUgPiAwICYmICFmb3JjZSkge1xuICAgICAgICAgICAgdGhpcy5zZW5kTm90aWZpY2F0aW9uKFRhc2tFdmVudC5HRVRfREFUQSwgdHJ1ZSk7XG4gICAgICAgICAgICBhZnRlckFjdGlvbi5yZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLiRzaG91bGRDcmVhdGUubmV4dCh0aGlzLl9zYWZlVGFzay5kYXRhR3JvdXBzKTtcbiAgICAgICAgICAgIG5leHRFdmVudC5yZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JjZSkge1xuICAgICAgICAgICAgdGhpcy5fc2FmZVRhc2suZGF0YVNpemUgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ290dGVuVGFza0lkID0gdGhpcy5fc2FmZVRhc2suc3RyaW5nSWQ7XG4gICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdGFydExvYWRpbmcoZ290dGVuVGFza0lkKTtcblxuICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLmdldERhdGEoZ290dGVuVGFza0lkKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShkYXRhR3JvdXBzID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxHZXREYXRhUmVxdWVzdChnb3R0ZW5UYXNrSWQsIGRhdGFHcm91cHMsIGFmdGVyQWN0aW9uLCBuZXh0RXZlbnQpO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NFcnJvbmVvdXNHZXREYXRhUmVxdWVzdChnb3R0ZW5UYXNrSWQsIGVycm9yLCBhZnRlckFjdGlvbiwgbmV4dEV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGEgc3VjY2Vzc2Z1bCBvdXRjb21lIG9mIGEgYGdldERhdGFgIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gZ290dGVuVGFza0lkIHRoZSBJRCBvZiB0aGUgdGFzayB3aG9zZSBkYXRhIHdhcyByZXF1ZXN0ZWRcbiAgICAgKiBAcGFyYW0gZGF0YUdyb3VwcyB0aGUgcmV0dXJuZWQgZGF0YSBncm91cHMgb2YgdGhlIHRhc2tcbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gdGhlIGFjdGlvbiB0aGF0IHNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgcHJvY2Vzc2VkXG4gICAgICogQHBhcmFtIG5leHRFdmVudCBpbmRpY2F0ZXMgdG8gdGhlIGV2ZW50IHF1ZXVlIHRoYXQgdGhlIG5leHQgZXZlbnQgY2FuIGJlIHByb2Nlc3NlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzU3VjY2Vzc2Z1bEdldERhdGFSZXF1ZXN0KGdvdHRlblRhc2tJZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFHcm91cHM6IEFycmF5PERhdGFHcm91cD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFdmVudDogQWZ0ZXJBY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVGFza1JlbGV2YW50KGdvdHRlblRhc2tJZCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZygnY3VycmVudCB0YXNrIGNoYW5nZWQgYmVmb3JlIHRoZSBnZXQgZGF0YSByZXNwb25zZSBjb3VsZCBiZSByZWNlaXZlZCwgZGlzY2FyZGluZy4uLicpO1xuICAgICAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0b3BMb2FkaW5nKGdvdHRlblRhc2tJZCk7XG4gICAgICAgICAgICBhZnRlckFjdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS5yZWZlcmVuY2VkVGFza0FuZENhc2VJZHMgPSB7fTtcbiAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnRhc2tGaWVsZHNJbmRleCA9IHt9O1xuXG4gICAgICAgIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMgPSBkYXRhR3JvdXBzO1xuICAgICAgICBpZiAoZGF0YUdyb3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5pbmZvKCdUYXNrIGhhcyBubyBkYXRhICcgKyB0aGlzLl9zYWZlVGFzayk7XG4gICAgICAgICAgICB0aGlzLl9zYWZlVGFzay5kYXRhU2l6ZSA9IDA7XG4gICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UudGFza0ZpZWxkc0luZGV4W3RoaXMuX3NhZmVUYXNrLnN0cmluZ0lkXSA9IHt9IGFzIFRhc2tGaWVsZHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UucmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzW3RoaXMuX3NhZmVUYXNrLmNhc2VJZF0gPSBbdGhpcy5fc2FmZVRhc2suc3RyaW5nSWRdO1xuICAgICAgICAgICAgZGF0YUdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhR3JvdXBQYXJlbnRDYXNlSWQ6IHN0cmluZyA9IGdyb3VwLnBhcmVudENhc2VJZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5fc2FmZVRhc2suY2FzZUlkIDogZ3JvdXAucGFyZW50Q2FzZUlkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFRhc2tJZDogc3RyaW5nID0gZ3JvdXAucGFyZW50VGFza0lkID09PSB1bmRlZmluZWQgPyB0aGlzLl9zYWZlVGFzay5zdHJpbmdJZCA6IGdyb3VwLnBhcmVudFRhc2tJZDtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRUcmFuc2l0aW9uSWQ6IHN0cmluZyA9IGdyb3VwLnBhcmVudFRyYW5zaXRpb25JZCA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2FmZVRhc2sudHJhbnNpdGlvbklkIDogZ3JvdXAucGFyZW50VHJhbnNpdGlvbklkO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhR3JvdXBQYXJlbnRDYXNlSWQgIT09IHRoaXMuX3NhZmVUYXNrLmNhc2VJZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3Rhc2tDb250ZW50U2VydmljZS5yZWZlcmVuY2VkVGFza0FuZENhc2VJZHNbZGF0YUdyb3VwUGFyZW50Q2FzZUlkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnJlZmVyZW5jZWRUYXNrQW5kQ2FzZUlkc1tkYXRhR3JvdXBQYXJlbnRDYXNlSWRdID0gW2dyb3VwLnBhcmVudFRhc2tJZF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UucmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzW2RhdGFHcm91cFBhcmVudENhc2VJZF0ucHVzaChncm91cC5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhR3JvdXBQYXJlbnRDYXNlSWQgPT09IHRoaXMuX3NhZmVUYXNrLmNhc2VJZFxuICAgICAgICAgICAgICAgICAgICAmJiBwYXJlbnRUYXNrSWQgIT09IHRoaXMuX3NhZmVUYXNrLnN0cmluZ0lkXG4gICAgICAgICAgICAgICAgICAgICYmICF0aGlzLl90YXNrQ29udGVudFNlcnZpY2UucmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzW2RhdGFHcm91cFBhcmVudENhc2VJZF0uaW5jbHVkZXMocGFyZW50VGFza0lkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UucmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzW2RhdGFHcm91cFBhcmVudENhc2VJZF0ucHVzaChncm91cC5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuZmllbGRzLmxlbmd0aCA+IDAgJiYgIXRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbcGFyZW50VGFza0lkXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UudGFza0ZpZWxkc0luZGV4W3BhcmVudFRhc2tJZF0gPSB7fSBhcyBUYXNrRmllbGRzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuZmllbGRzLmxlbmd0aCA+IDAgJiYgIXRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbcGFyZW50VGFza0lkXS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnRhc2tGaWVsZHNJbmRleFtwYXJlbnRUYXNrSWRdLmZpZWxkcyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBncm91cC5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbcGFyZW50VGFza0lkXS50cmFuc2l0aW9uSWQgPSBwYXJlbnRUcmFuc2l0aW9uSWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbcGFyZW50VGFza0lkXS5maWVsZHNbZmllbGQuc3RyaW5nSWRdID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlQ2hhbmdlcygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy53YXNGaWVsZFVwZGF0ZWQoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkIGluc3RhbmNlb2YgRHluYW1pY0VudW1lcmF0aW9uRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGFza0RhdGFGaWVsZHModGhpcy5fYWZ0ZXJBY3Rpb25GYWN0b3J5LmNyZWF0ZShib29sID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGFza0RhdGFGaWVsZHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQgaW5zdGFuY2VvZiBGaWxlRmllbGQgfHwgZmllbGQgaW5zdGFuY2VvZiBGaWxlTGlzdEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5jaGFuZ2VkRmllbGRzJC5zdWJzY3JpYmUoKGNoYW5nZTogQ2hhbmdlZEZpZWxkc01hcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZWRGaWVsZHNTZXJ2aWNlLmVtaXRDaGFuZ2VkRmllbGRzKGNoYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NhZmVUYXNrLmRhdGFTaXplID09PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zYWZlVGFzay5kYXRhU2l6ZSA9IGdyb3VwLmZpZWxkcy5sZW5ndGggOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zYWZlVGFzay5kYXRhU2l6ZSArPSBncm91cC5maWVsZHMubGVuZ3RoO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0b3BMb2FkaW5nKGdvdHRlblRhc2tJZCk7XG4gICAgICAgIHRoaXMuc2VuZE5vdGlmaWNhdGlvbihUYXNrRXZlbnQuR0VUX0RBVEEsIHRydWUpO1xuICAgICAgICBhZnRlckFjdGlvbi5yZXNvbHZlKHRydWUpO1xuICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLiRzaG91bGRDcmVhdGUubmV4dCh0aGlzLl9zYWZlVGFzay5kYXRhR3JvdXBzKTtcbiAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLiRzaG91bGRDcmVhdGVDb3VudGVyLm5leHQodGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLiRzaG91bGRDcmVhdGVDb3VudGVyLmdldFZhbHVlKCkgKyAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzZXMgYW4gZXJyb25lb3VzIG91dGNvbWUgb2YgYSBgZ2V0RGF0YWAgcmVxdWVzdFxuICAgICAqIEBwYXJhbSBnb3R0ZW5UYXNrSWQgdGhlIElEIG9mIHRoZSB0YXNrIHdob3NlIGRhdGEgd2FzIHJlcXVlc3RlZFxuICAgICAqIEBwYXJhbSBlcnJvciB0aGUgcmV0dXJuZWQgZXJyb3JcbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gdGhlIGFjdGlvbiB0aGF0IHNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgcHJvY2Vzc2VkXG4gICAgICogQHBhcmFtIG5leHRFdmVudCBpbmRpY2F0ZXMgdG8gdGhlIGV2ZW50IHF1ZXVlIHRoYXQgdGhlIG5leHQgZXZlbnQgY2FuIGJlIHByb2Nlc3NlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzRXJyb25lb3VzR2V0RGF0YVJlcXVlc3QoZ290dGVuVGFza0lkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UgfCBFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQWN0aW9uOiBBZnRlckFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFdmVudDogQWZ0ZXJBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0b3BMb2FkaW5nKGdvdHRlblRhc2tJZCk7XG4gICAgICAgIHRoaXMuX2xvZy5kZWJ1ZygnZ2V0dGluZyB0YXNrIGRhdGEgZmFpbGVkJywgZXJyb3IpO1xuXG4gICAgICAgIGlmICghdGhpcy5pc1Rhc2tSZWxldmFudChnb3R0ZW5UYXNrSWQpKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ2N1cnJlbnQgdGFzayBjaGFuZ2VkIGJlZm9yZSB0aGUgZ2V0IGRhdGEgZXJyb3IgY291bGQgYmUgcmVjZWl2ZWQnKTtcbiAgICAgICAgICAgIGFmdGVyQWN0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSAmJiBlcnJvci5zdGF0dXMgPT09IDUwMCAmJiBlcnJvci5lcnJvci5tZXNzYWdlICYmIGVycm9yLmVycm9yLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnQ291bGQgbm90IGZpbmQgdGFzayB3aXRoIGlkJykpIHtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW5XYXJuaW5nU25hY2tCYXIodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3Rhc2tzLnNuYWNrYmFyLm5vTG9uZ2VyRXhpc3RzJykpO1xuICAgICAgICAgICAgdGhpcy5fdGFza09wZXJhdGlvbnMucmVsb2FkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbkVycm9yU25hY2tCYXIodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbkVycm9yU25hY2tCYXIoYCR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3Rhc2tzLnNuYWNrYmFyLm5vR3JvdXAnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnRhc2sudGl0bGV9ICR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3Rhc2tzLnNuYWNrYmFyLmZhaWxlZFRvTG9hZCcpfWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VuZE5vdGlmaWNhdGlvbihUYXNrRXZlbnQuR0VUX0RBVEEsIGZhbHNlKTtcbiAgICAgICAgYWZ0ZXJBY3Rpb24ucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIG5leHRFdmVudC5yZXNvbHZlKGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb2xsZWN0cyBhbGwgY2hhbmdlZCBkYXRhIGZpZWxkcyBhbmQgbm90aWZpZXMgdGhlIGJhY2tlbmQgb2YgdGhlIGNoYW5nZXMuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsIGNsZWFycyB0aGUgW2NoYW5nZWRde0BsaW5rIERhdGFGaWVsZCNjaGFuZ2VkfSBmbGFnIG9uIGFsbCBkYXRhIGZpZWxkcyB0aGF0IHdlcmUgYSBwYXJ0IG9mIHRoZSByZXF1ZXN0XG4gICAgICogYW5kIGVtaXRzIGEge0BsaW5rIENoYW5nZWRGaWVsZHN9IG9iamVjdCBpbnRvIHRoaXMgb2JqZWN0J3MgW2NoYW5nZWRGaWVsZHMkXXtAbGluayBUYXNrRGF0YVNlcnZpY2UjY2hhbmdlZEZpZWxkcyR9IHN0cmVhbS5cbiAgICAgKlxuICAgICAqIElmIHRoZSB0YXNrIGhlbGQgd2l0aGluIHRoZSB7QGxpbmsgVGFza0NvbnRlbnRTZXJ2aWNlfSBjaGFuZ2VzIGJlZm9yZSBhIHJlc3BvbnNlIGlzIHJlY2VpdmVkLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSBpZ25vcmVkXG4gICAgICogYW5kIHRoZSBgYWZ0ZXJBY3Rpb25gIHdpbGwgbm90IGJlIGV4ZWN1dGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFmdGVyQWN0aW9uIGlmIHRoZSByZXF1ZXN0IGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkgZW1pdHMgYHRydWVgIGludG8gdGhlIFN1YmplY3QsIG90aGVyd2lzZSBgZmFsc2VgIHdpbGwgYmUgZW1pdHRlZFxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVUYXNrRGF0YUZpZWxkcyhhZnRlckFjdGlvbjogQWZ0ZXJBY3Rpb24gPSBuZXcgQWZ0ZXJBY3Rpb24oKSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNUYXNrUHJlc2VudCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ1Rhc2sgaXMgbm90IHByZXNlbnQuIFVwZGF0ZSByZXF1ZXN0IGlnbm9yZWQuJyk7XG4gICAgICAgICAgICBhZnRlckFjdGlvbi5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zYWZlVGFzay51c2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZygnY3VycmVudCB0YXNrIGlzIG5vdCBhc3NpZ25lZC4uLicpO1xuICAgICAgICAgICAgYWZ0ZXJBY3Rpb24ucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXRUYXNrSWQgPSB0aGlzLl9zYWZlVGFzay5zdHJpbmdJZDtcblxuICAgICAgICBpZiAodGhpcy5fc2FmZVRhc2suZGF0YVNpemUgPD0gMCkge1xuICAgICAgICAgICAgYWZ0ZXJBY3Rpb24ucmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcXVlc3RDb250ZXh0ID0gdGhpcy5jcmVhdGVVcGRhdGVSZXF1ZXN0Q29udGV4dCgpO1xuXG4gICAgICAgIHRoaXMuX2V2ZW50UXVldWUuc2NoZWR1bGVFdmVudChuZXcgUXVldWVkRXZlbnQoXG4gICAgICAgICAgICAoKSA9PiB0aGlzLmlzU2V0RGF0YVJlcXVlc3RTdGlsbFZhbGlkKHJlcXVlc3RDb250ZXh0LmJvZHkpLFxuICAgICAgICAgICAgbmV4dEV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1TZXREYXRhUmVxdWVzdChzZXRUYXNrSWQsIHJlcXVlc3RDb250ZXh0LCBhZnRlckFjdGlvbiwgbmV4dEV2ZW50KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmV2ZXJ0U2V0RGF0YVJlcXVlc3QocmVxdWVzdENvbnRleHQpO1xuICAgICAgICAgICAgICAgIG5leHRFdmVudC5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqIEdvZXMgb3ZlciBhbGwgdGhlIGRhdGEgZmllbGRzIGluIHRoZSBtYW5hZ2VkIFRhc2sgYW5kIGlmIHRoZXkgYXJlIHZhbGlkIGFuZCBjaGFuZ2VkIGFkZHMgdGhlbSB0byB0aGUgc2V0IGRhdGEgcmVxdWVzdFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVVcGRhdGVSZXF1ZXN0Q29udGV4dCgpOiBUYXNrU2V0RGF0YVJlcXVlc3RDb250ZXh0IHtcbiAgICAgICAgY29uc3QgY29udGV4dDogVGFza1NldERhdGFSZXF1ZXN0Q29udGV4dCA9IHtcbiAgICAgICAgICAgIGJvZHk6IHt9LFxuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZXM6IHt9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fc2FmZVRhc2suZGF0YUdyb3Vwcy5maWx0ZXIoZGF0YUdyb3VwID0+IGRhdGFHcm91cC5wYXJlbnRUYXNrSWQgPT09IHVuZGVmaW5lZCkuZm9yRWFjaChkYXRhR3JvdXAgPT4ge1xuICAgICAgICAgICAgZGF0YUdyb3VwLmZpZWxkcy5maWx0ZXIoZmllbGQgPT4gdGhpcy53YXNGaWVsZFVwZGF0ZWQoZmllbGQpKS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmJvZHlbdGhpcy5fdGFzay5zdHJpbmdJZF0gPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZpZWxkVG9TZXREYXRhUmVxdWVzdEJvZHkoY29udGV4dCwgdGhpcy5fdGFzay5zdHJpbmdJZCwgZmllbGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zYWZlVGFzay5kYXRhR3JvdXBzLmZpbHRlcihkYXRhR3JvdXAgPT4gZGF0YUdyb3VwLnBhcmVudFRhc2tJZCAhPT0gdW5kZWZpbmVkKS5mb3JFYWNoKGRhdGFHcm91cCA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YUdyb3VwLmZpZWxkcy5zb21lKGZpZWxkID0+IHRoaXMud2FzRmllbGRVcGRhdGVkKGZpZWxkKSkpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmJvZHlbZGF0YUdyb3VwLnBhcmVudFRhc2tJZF0gPSB7fTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YUdyb3VwLmZpZWxkcy5maWx0ZXIoZmllbGQgPT4gdGhpcy53YXNGaWVsZFVwZGF0ZWQoZmllbGQpKS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZpZWxkVG9TZXREYXRhUmVxdWVzdEJvZHkoY29udGV4dCwgZGF0YUdyb3VwLnBhcmVudFRhc2tJZCwgZmllbGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWRkRmllbGRUb1NldERhdGFSZXF1ZXN0Qm9keShjb250ZXh0OiBUYXNrU2V0RGF0YVJlcXVlc3RDb250ZXh0LCB0YXNrSWQ6IHN0cmluZywgZmllbGQ6IERhdGFGaWVsZDxhbnk+KTogdm9pZCB7XG4gICAgICAgIGNvbnRleHQuYm9keVt0YXNrSWRdW2ZpZWxkLnN0cmluZ0lkXSA9IHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMuX2ZpZWxkQ29udmVydGVyU2VydmljZS5yZXNvbHZlVHlwZShmaWVsZCksXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5fZmllbGRDb252ZXJ0ZXJTZXJ2aWNlLmZvcm1hdFZhbHVlRm9yQmFja2VuZChmaWVsZCwgZmllbGQudmFsdWUpXG4gICAgICAgIH07XG4gICAgICAgIGNvbnRleHQucHJldmlvdXNWYWx1ZXNbZmllbGQuc3RyaW5nSWRdID0gZmllbGQucHJldmlvdXNWYWx1ZTtcbiAgICAgICAgZmllbGQuY2hhbmdlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpc0F1dG9jb21wbGV0ZUVudW1FeGNlcHRpb24oZmllbGQ6IERhdGFGaWVsZDx1bmtub3duPik6IGJvb2xlYW57XG4gICAgICAgIHJldHVybiAoZmllbGQgaW5zdGFuY2VvZiBFbnVtZXJhdGlvbkZpZWxkKSAmJiAoZmllbGQuZ2V0Q29tcG9uZW50VHlwZSgpID09PSAnYXV0b2NvbXBsZXRlJykgJiYgIShmaWVsZC52YWxpZCB8fCBmaWVsZC52YWx1ZSA9PT0gbnVsbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGZpZWxkIHRoZSBjaGVja2VkIGZpZWxkXG4gICAgICogQHJldHVybnMgd2hldGhlciB0aGUgZmllbGQgd2FzIHVwZGF0ZWQgb24gZnJvbnRlbmQgYW5kIHRodXMgdGhlIGJhY2tlbmQgc2hvdWxkIGJlIG5vdGlmaWVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHdhc0ZpZWxkVXBkYXRlZChmaWVsZDogRGF0YUZpZWxkPHVua25vd24+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmaWVsZC5pbml0aWFsaXplZCAmJiBmaWVsZC5jaGFuZ2VkICYmIChmaWVsZC52YWxpZCB8fCBmaWVsZC5zZW5kSW52YWxpZFZhbHVlcykgJiYgKCF0aGlzLmlzQXV0b2NvbXBsZXRlRW51bUV4Y2VwdGlvbihmaWVsZCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSByZXF1ZXN0IGNvdWxkIHN0aWxsIGJlIHBlcmZvcm1lZCBieSB0aGUgbG9nZ2VkIHVzZXJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc1NldERhdGFSZXF1ZXN0U3RpbGxWYWxpZChyZXF1ZXN0OiBUYXNrU2V0RGF0YVJlcXVlc3RCb2R5KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5pc1Rhc2tQcmVzZW50KCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fc2FmZVRhc2sudXNlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl91c2VyQ29tcGFyYXRvci5jb21wYXJlVXNlcnModGhpcy5fc2FmZVRhc2sudXNlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXNrSWRzSW5SZXF1ZXN0OiBBcnJheTxzdHJpbmc+ID0gT2JqZWN0LmtleXMocmVxdWVzdCk7XG4gICAgICAgIGZvciAoY29uc3QgdGFza0lkIG9mIHRhc2tJZHNJblJlcXVlc3QpIHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LmtleXModGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnRhc2tGaWVsZHNJbmRleCkuaW5jbHVkZXModGFza0lkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihgVGFzayBpZCAke3Rhc2tJZH0gaXMgbm90IHByZXNlbnQgaW4gdGFzayBmaWVsZHMgaW5kZXhgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaWVsZElkc09mUmVxdWVzdCA9IE9iamVjdC5rZXlzKHJlcXVlc3RbdGFza0lkXSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkSWQgb2YgZmllbGRJZHNPZlJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbdGFza0lkXS5maWVsZHNbZmllbGRJZF07XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGBVbmV4cGVjdGVkIHN0YXRlLiBEYXRhZmllbGQgJHtmaWVsZElkfSBvZiB0YXNrICR7dGFza0lkXG4gICAgICAgICAgICAgICAgICAgIH0gaW4gc2V0RGF0YSByZXF1ZXN0IGlzIG5vdCBwcmVzZW50IGluIHRoZSB0YXNrLmApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZmllbGQuYmVoYXZpb3IuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKGBGaWVsZCAke2ZpZWxkSWR9LCB3YXMgbWVhbnQgdG8gYmUgc2V0IHRvXG4gICAgICAgICAgICAgICAgICAgICR7SlNPTi5zdHJpbmdpZnkocmVxdWVzdFt0YXNrSWRdW2ZpZWxkSWRdKVxuICAgICAgICAgICAgICAgICAgICB9LCBidXQgaXMgbm8gbG9uZXIgZWRpdGFibGUuYCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBgc2V0RGF0YWAgcmVxdWVzdCBvbiB0aGUgdGFzayBjdXJyZW50bHkgc3RvcmVkIGluIHRoZSBgdGFza0NvbnRlbnRgIHNlcnZpY2VcbiAgICAgKiBAcGFyYW0gc2V0VGFza0lkIElEIG9mIHRoZSB0YXNrXG4gICAgICogQHBhcmFtIGNvbnRleHQgY29udGV4dCBvZiB0aGUgYHNldERhdGFgIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gdGhlIGFjdGlvbiB0aGF0IHNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgcHJvY2Vzc2VkXG4gICAgICogQHBhcmFtIG5leHRFdmVudCBpbmRpY2F0ZXMgdG8gdGhlIGV2ZW50IHF1ZXVlIHRoYXQgdGhlIG5leHQgZXZlbnQgY2FuIGJlIHByb2Nlc3NlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwZXJmb3JtU2V0RGF0YVJlcXVlc3Qoc2V0VGFza0lkOiBzdHJpbmcsIGNvbnRleHQ6IFRhc2tTZXREYXRhUmVxdWVzdENvbnRleHQsIGFmdGVyQWN0aW9uOiBBZnRlckFjdGlvbiwgbmV4dEV2ZW50OiBBZnRlckFjdGlvbikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoY29udGV4dC5ib2R5KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VuZE5vdGlmaWNhdGlvbihUYXNrRXZlbnQuU0VUX0RBVEEsIHRydWUpO1xuICAgICAgICAgICAgYWZ0ZXJBY3Rpb24ucmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgIG5leHRFdmVudC5yZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0YXJ0TG9hZGluZyhzZXRUYXNrSWQpO1xuICAgICAgICB0aGlzLl90YXNrU3RhdGUuc3RhcnRVcGRhdGluZyhzZXRUYXNrSWQpO1xuXG4gICAgICAgIHRoaXMuX3Rhc2tSZXNvdXJjZVNlcnZpY2Uuc2V0RGF0YSh0aGlzLl9zYWZlVGFzay5zdHJpbmdJZCwgY29udGV4dC5ib2R5KS5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogRXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzVGFza1JlbGV2YW50KHNldFRhc2tJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdjdXJyZW50IHRhc2sgY2hhbmdlZCBiZWZvcmUgdGhlIHNldCBkYXRhIHJlc3BvbnNlIGNvdWxkIGJlIHJlY2VpdmVkLCBkaXNjYXJkaW5nLi4uJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdG9wTG9hZGluZyhzZXRUYXNrSWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrU3RhdGUuc3RvcFVwZGF0aW5nKHNldFRhc2tJZCk7XG4gICAgICAgICAgICAgICAgICAgIGFmdGVyQWN0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIG5leHRFdmVudC5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdWNjZXNzZnVsU2V0RGF0YVJlcXVlc3Qoc2V0VGFza0lkLCByZXNwb25zZSwgYWZ0ZXJBY3Rpb24sIG5leHRFdmVudCwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5lcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1Vuc3VjY2Vzc2Z1bFNldERhdGFSZXF1ZXN0KHNldFRhc2tJZCwgcmVzcG9uc2UsIGFmdGVyQWN0aW9uLCBuZXh0RXZlbnQsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NFcnJvbmVvdXNTZXREYXRhUmVxdWVzdChzZXRUYXNrSWQsIGVycm9yLCBhZnRlckFjdGlvbiwgbmV4dEV2ZW50LCBjb250ZXh0KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2Nlc3NlcyBhbiB1bnN1Y2Nlc3NmdWwgb3V0Y29tZSBvZiBhIGBzZXREYXRhYCByZXF1ZXN0XG4gICAgICogQHBhcmFtIHNldFRhc2tJZCB0aGUgSUQgb2YgdGhlIHRhc2sgd2hvc2UgZGF0YSB3YXMgc2V0XG4gICAgICogQHBhcmFtIHJlc3BvbnNlIHRoZSByZXN1bHRpbmcgRXZlbnQgb3V0Y29tZSBvZiB0aGUgc2V0IGRhdGEgcmVxdWVzdFxuICAgICAqIEBwYXJhbSBhZnRlckFjdGlvbiB0aGUgYWN0aW9uIHRoYXQgc2hvdWxkIGJlIHBlcmZvcm1lZCBhZnRlciB0aGUgcmVxdWVzdCBpcyBwcm9jZXNzZWRcbiAgICAgKiBAcGFyYW0gbmV4dEV2ZW50IGluZGljYXRlcyB0byB0aGUgZXZlbnQgcXVldWUgdGhhdCB0aGUgbmV4dCBldmVudCBjYW4gYmUgcHJvY2Vzc2VkXG4gICAgICogQHBhcmFtIGJvZHkgaG9sZCB0aGUgZGF0YSB0aGF0IHdhcyBzZW50IGluIHJlcXVlc3RcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1Vuc3VjY2Vzc2Z1bFNldERhdGFSZXF1ZXN0KHNldFRhc2tJZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2U6IEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQWN0aW9uOiBBZnRlckFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFdmVudDogQWZ0ZXJBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBUYXNrU2V0RGF0YVJlcXVlc3RDb250ZXh0KSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvciAhPT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHJlc3BvbnNlLmVycm9yKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuRXJyb3JTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgndGFza3Muc25hY2tiYXIuZmFpbGVkU2F2ZScpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzcG9uc2Uub3V0Y29tZSkge1xuICAgICAgICAgICAgY29uc3Qgb3V0Y29tZSA9IHJlc3BvbnNlLm91dGNvbWU7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VkRmllbGRzTWFwOiBDaGFuZ2VkRmllbGRzTWFwID0gdGhpcy5fZXZlbnRTZXJ2aWNlLnBhcnNlQ2hhbmdlZEZpZWxkc0Zyb21PdXRjb21lVHJlZShvdXRjb21lKTtcblxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWRGaWVsZHNNYXApLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VkRmllbGRzU2VydmljZS5lbWl0Q2hhbmdlZEZpZWxkcyhjaGFuZ2VkRmllbGRzTWFwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJldmVydFRvUHJldmlvdXNWYWx1ZShjb250ZXh0KTtcbiAgICAgICAgdGhpcy5jbGVhcldhaXRpbmdGb3JSZXNwb25zZUZsYWcoY29udGV4dC5ib2R5KTtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZUluZm8oYWZ0ZXJBY3Rpb24sIGZhbHNlLCBzZXRUYXNrSWQpO1xuICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuX3Rhc2tPcGVyYXRpb25zLnJlbG9hZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2Nlc3NlcyBhIHN1Y2Nlc3NmdWwgb3V0Y29tZSBvZiBhIGBzZXREYXRhYCByZXF1ZXN0XG4gICAgICogQHBhcmFtIHNldFRhc2tJZCB0aGUgSUQgb2YgdGhlIHRhc2sgd2hvc2UgZGF0YSB3YXMgc2V0XG4gICAgICogQHBhcmFtIHJlc3BvbnNlIHRoZSByZXN1bHRpbmcgRXZlbnQgb3V0Y29tZSBvZiB0aGUgc2V0IGRhdGEgcmVxdWVzdFxuICAgICAqIEBwYXJhbSBhZnRlckFjdGlvbiB0aGUgYWN0aW9uIHRoYXQgc2hvdWxkIGJlIHBlcmZvcm1lZCBhZnRlciB0aGUgcmVxdWVzdCBpcyBwcm9jZXNzZWRcbiAgICAgKiBAcGFyYW0gbmV4dEV2ZW50IGluZGljYXRlcyB0byB0aGUgZXZlbnQgcXVldWUgdGhhdCB0aGUgbmV4dCBldmVudCBjYW4gYmUgcHJvY2Vzc2VkXG4gICAgICogQHBhcmFtIGNvbnRleHQgaG9sZCB0aGUgZGF0YSB0aGF0IHdhcyBzZW50IGluIHJlcXVlc3RcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1N1Y2Nlc3NmdWxTZXREYXRhUmVxdWVzdChzZXRUYXNrSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZTogRXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQWN0aW9uOiBBZnRlckFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RXZlbnQ6IEFmdGVyQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IFRhc2tTZXREYXRhUmVxdWVzdENvbnRleHQpIHtcbiAgICAgICAgY29uc3Qgb3V0Y29tZSA9IHJlc3BvbnNlLm91dGNvbWU7XG4gICAgICAgIGNvbnN0IGNoYW5nZWRGaWVsZHNNYXA6IENoYW5nZWRGaWVsZHNNYXAgPSB0aGlzLl9ldmVudFNlcnZpY2UucGFyc2VDaGFuZ2VkRmllbGRzRnJvbU91dGNvbWVUcmVlKG91dGNvbWUpO1xuICAgICAgICBjb25zdCBmcm9udEFjdGlvbnM6IEFycmF5PEZyb250QWN0aW9uPiA9IHRoaXMuX2V2ZW50U2VydmljZS5wYXJzZUZyb250QWN0aW9uc0Zyb21PdXRjb21lVHJlZShvdXRjb21lKTtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoY2hhbmdlZEZpZWxkc01hcCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlZEZpZWxkc1NlcnZpY2UuZW1pdENoYW5nZWRGaWVsZHMoY2hhbmdlZEZpZWxkc01hcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhZnJvbnRBY3Rpb25zICYmIGZyb250QWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9mcm9udEFjdGlvblNlcnZpY2UucnVuQWxsKGZyb250QWN0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhcldhaXRpbmdGb3JSZXNwb25zZUZsYWcoY29udGV4dC5ib2R5KTtcbiAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlblN1Y2Nlc3NTbmFja0JhcighIW91dGNvbWUubWVzc2FnZSA/IG91dGNvbWUubWVzc2FnZSA6IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd0YXNrcy5zbmFja2Jhci5kYXRhU2F2ZWQnKSk7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGVJbmZvKGFmdGVyQWN0aW9uLCB0cnVlLCBzZXRUYXNrSWQpO1xuICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzZXMgYW4gZXJyb25lb3VzIG91dGNvbWUgb2YgYSBgc2V0RGF0YWAgcmVxdWVzdFxuICAgICAqIEBwYXJhbSBzZXRUYXNrSWQgdGhlIElEIG9mIHRoZSB0YXNrIHdob3NlIGRhdGEgd2FzIHNldFxuICAgICAqIEBwYXJhbSBlcnJvciB0aGUgcmV0dXJuZWQgZXJyb3JcbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gdGhlIGFjdGlvbiB0aGF0IHNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgcHJvY2Vzc2VkXG4gICAgICogQHBhcmFtIG5leHRFdmVudCBpbmRpY2F0ZXMgdG8gdGhlIGV2ZW50IHF1ZXVlIHRoYXQgdGhlIG5leHQgZXZlbnQgY2FuIGJlIHByb2Nlc3NlZFxuICAgICAqIEBwYXJhbSBib2R5IGhvbGQgdGhlIGRhdGEgdGhhdCB3YXMgc2VudCBpbiByZXF1ZXN0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NFcnJvbmVvdXNTZXREYXRhUmVxdWVzdChzZXRUYXNrSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQWN0aW9uOiBBZnRlckFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFdmVudDogQWZ0ZXJBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBUYXNrU2V0RGF0YVJlcXVlc3RDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuX2xvZy5kZWJ1Zygnc2V0dGluZyB0YXNrIGRhdGEgZmFpbGVkJywgZXJyb3IpO1xuXG4gICAgICAgIGlmICghdGhpcy5pc1Rhc2tSZWxldmFudChzZXRUYXNrSWQpKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ2N1cnJlbnQgdGFzayBjaGFuZ2VkIGJlZm9yZSB0aGUgZ2V0IGRhdGEgZXJyb3IgY291bGQgYmUgcmVjZWl2ZWQnKTtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdG9wTG9hZGluZyhzZXRUYXNrSWQpO1xuICAgICAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0b3BVcGRhdGluZyhzZXRUYXNrSWQpO1xuICAgICAgICAgICAgYWZ0ZXJBY3Rpb24uY29tcGxldGUoKTtcbiAgICAgICAgICAgIG5leHRFdmVudC5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmV2ZXJ0VG9QcmV2aW91c1ZhbHVlKGNvbnRleHQpO1xuICAgICAgICB0aGlzLmNsZWFyV2FpdGluZ0ZvclJlc3BvbnNlRmxhZyhjb250ZXh0LmJvZHkpO1xuICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuRXJyb3JTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgndGFza3Muc25hY2tiYXIuZmFpbGVkU2F2ZScpKTtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZUluZm8oYWZ0ZXJBY3Rpb24sIGZhbHNlLCBzZXRUYXNrSWQpO1xuICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuX3Rhc2tPcGVyYXRpb25zLnJlbG9hZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldmVydHMgdGhlIGVmZmVjdHMgb2YgYSBmYWlsZWQgYHNldERhdGFgIHJlcXVlc3QsIHNvIHRoYXQgdGhlIHVzZXIgc2VlcyBjdXJyZW50IHZhbHVlcy5cbiAgICAgKiBAcGFyYW0gY29udGV4dCB0aGUgY29udGV4dCBvZiB0aGUgZmFpbGVkIHJlcXVlc3RcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmV2ZXJ0U2V0RGF0YVJlcXVlc3QoY29udGV4dDogVGFza1NldERhdGFSZXF1ZXN0Q29udGV4dCkge1xuICAgICAgICAvLyB0aGlzIGl0ZXJhdGlvbiBjb3VsZCBiZSBpbXByb3ZlZCBpZiB3ZSBoYWQgYSBtYXAgb2YgYWxsIHRoZSBkYXRhIGZpZWxkcyBpbiBhIHRhc2tcbiAgICAgICAgY29uc3QgdG90YWxDb3VudCA9IE9iamVjdC5rZXlzKGNvbnRleHQuYm9keSkubGVuZ3RoO1xuICAgICAgICBsZXQgZm91bmRDb3VudCA9IDA7XG5cbiAgICAgICAgZm9yIChjb25zdCBkYXRhZ3JvdXAgb2YgdGhpcy5fc2FmZVRhc2suZGF0YUdyb3Vwcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBkYXRhZ3JvdXAuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LmJvZHlbZmllbGQuc3RyaW5nSWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbXBhcmVCYWNrZW5kRm9ybWF0dGVkRmllbGRWYWx1ZXMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpZWxkQ29udmVydGVyU2VydmljZS5mb3JtYXRWYWx1ZUZvckJhY2tlbmQoZmllbGQsIGZpZWxkLnZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5ib2R5W2ZpZWxkLnN0cmluZ0lkXS52YWx1ZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWVXaXRob3V0Q2hhbmdlKGNvbnRleHQucHJldmlvdXNWYWx1ZXNbZmllbGQuc3RyaW5nSWRdKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3VuZENvdW50Kys7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kQ291bnQgPT09IHRvdGFsQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZy5lcnJvcihgSW52YWxpZCBzdGF0ZS4gU29tZSBkYXRhIGZpZWxkcyBvZiB0YXNrICR7dGhpcy5fc2FmZVRhc2suc3RyaW5nSWR9LCBhcmUgbm8gbG9uZ2VyIHByZXNlbnQgaW4gaXQhYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGFyZXMgdGhlIHZhbHVlcyB0aGF0IGFyZSBpbiB0aGUgYmFja2VuZCBjb21wYXRpYmxlIGZvcm1hdCBhcyBnaXZlbiBieSB0aGUge0BsaW5rIEZpZWxkQ29udmVydGVyU2VydmljZX1cbiAgICAgKiBhbmQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZXkgYXJlIHRoZSBzYW1lIHZhbHVlLCBvciBub3QuXG4gICAgICogQHBhcmFtIGN1cnJlbnQgdGhlIGN1cnJlbnQgdmFsdWUgKGNhbiBhbHNvIGJlIGNhbGxlZCBgdmFsdWUxYCBvciBgbGVmdGApXG4gICAgICogQHBhcmFtIG9sZCB0aGUgbmV3IHZhbHVlIChjYW4gYWxzbyBiZSBjYWxsZWQgYHZhbHVlMmAgb3IgYHJpZ2h0YClcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWUgYW5kIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNvbXBhcmVCYWNrZW5kRm9ybWF0dGVkRmllbGRWYWx1ZXMoY3VycmVudCwgb2xkKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2xkKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSWxsZWdhbCBhcmd1bWVudHMhIENhbm5vdCBjb21wYXJlIGFycmF5IHZhbHVlIHRvIG5vbi1hcnJheSB2YWx1ZScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3VycmVudC5sZW5ndGggIT09IG9sZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50LmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IG9sZFtpbmRleF0gPT09IHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdXJyZW50ID09PSBvbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqXG4gICAgICogc3RvcHMgbG9hZGluZyBhbmQgdXBkYXRpbmcgaW5kaWNhdG9ycywgYW5kIGVtaXRzIHRoZSBgcmVzdWx0YCB2YWx1ZVxuICAgICAqIHRvIGJvdGggdGhlIGBhZnRlckFjdGlvbmAgYW5kIFtfdXBkYXRlU3VjY2VzcyRde0BsaW5rIFRhc2tEYXRhU2VydmljZSNfdXBkYXRlU3VjY2VzcyR9IHN0cmVhbXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gdGhlIGNhbGwgY2hhaW4gc3RlYW0gb2YgdGhlIHVwZGF0ZSBkYXRhIG1ldGhvZFxuICAgICAqIEBwYXJhbSByZXN1bHQgcmVzdWx0IG9mIHRoZSB1cGRhdGUgZGF0YSByZXF1ZXN0XG4gICAgICogQHBhcmFtIHNldFRhc2tJZCB0aGUgSUQgb2YgdGhlIHtAbGluayBUYXNrfSwgd2hvJ3Mgc3RhdGUgc2hvdWxkIGJlIHVwZGF0ZWRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgdXBkYXRlU3RhdGVJbmZvKGFmdGVyQWN0aW9uOiBBZnRlckFjdGlvbiwgcmVzdWx0OiBib29sZWFuLCBzZXRUYXNrSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YXNrU3RhdGUuc3RvcExvYWRpbmcoc2V0VGFza0lkKTtcbiAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0b3BVcGRhdGluZyhzZXRUYXNrSWQpO1xuICAgICAgICBpZiAodGhpcy5fdXBkYXRlU3VjY2VzcyQub2JzZXJ2ZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlU3VjY2VzcyQubmV4dChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VuZE5vdGlmaWNhdGlvbihUYXNrRXZlbnQuU0VUX0RBVEEsIHJlc3VsdCk7XG4gICAgICAgIGFmdGVyQWN0aW9uLnJlc29sdmUocmVzdWx0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQdWJsaXNoZXMgYSBnZXQvc2V0IGRhdGEgbm90aWZpY2F0aW9uIHRvIHRoZSB7QGxpbmsgVGFza0V2ZW50U2VydmljZX1cbiAgICAgKiBAcGFyYW0gZXZlbnQgdGhlIGV2ZW50IHRoYXQgb2NjdXJyZWQgdG8gdGhlIHRhc2tcbiAgICAgKiBAcGFyYW0gc3VjY2VzcyB3aGV0aGVyIHRoZSBnZXQvc2V0IGRhdGEgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsIG9yIG5vdFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzZW5kTm90aWZpY2F0aW9uKGV2ZW50OiBUYXNrRXZlbnQuR0VUX0RBVEEgfCBUYXNrRXZlbnQuU0VUX0RBVEEsIHN1Y2Nlc3M6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFza0V2ZW50LnB1Ymxpc2hUYXNrRXZlbnQoY3JlYXRlVGFza0V2ZW50Tm90aWZpY2F0aW9uKHRoaXMuX3NhZmVUYXNrLCBldmVudCwgc3VjY2VzcykpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXZlcnRUb1ByZXZpb3VzVmFsdWUoY29udGV4dDogVGFza1NldERhdGFSZXF1ZXN0Q29udGV4dCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zYWZlVGFzay5kYXRhR3JvdXBzLmZvckVhY2goZGF0YUdyb3VwID0+IHtcbiAgICAgICAgICAgIGRhdGFHcm91cC5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluaXRpYWxpemVkICYmIGZpZWxkLnZhbGlkICYmIE9iamVjdC5rZXlzKGNvbnRleHQucHJldmlvdXNWYWx1ZXMpLmluY2x1ZGVzKGZpZWxkLnN0cmluZ0lkKSkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5yZXZlcnRUb1ByZXZpb3VzVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNsZWFyV2FpdGluZ0ZvclJlc3BvbnNlRmxhZyhib2R5OiBUYXNrU2V0RGF0YVJlcXVlc3RCb2R5KSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGJvZHkpLmZvckVhY2godGFza0lkID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGJvZHlbdGFza0lkXSkuZm9yRWFjaChmaWVsZElkID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UudGFza0ZpZWxkc0luZGV4W3Rhc2tJZF0uZmllbGRzW2ZpZWxkSWRdLndhaXRpbmdGb3JSZXNwb25zZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
570
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1kYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3Rhc2svc2VydmljZXMvdGFzay1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQWEsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBYSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFVdkQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFFOUUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBRXpFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN2RixPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUM3RixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFJOUQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHNFQUFzRSxDQUFDO0FBRzdHLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFRbEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sOERBQThELENBQUM7QUFFOUYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUUvRTs7O0dBR0c7QUFFSCxNQUFN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ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q2hhbmdlZEZpZWxkcywgRnJvbnRBY3Rpb259IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL21vZGVscy9jaGFuZ2VkLWZpZWxkcyc7XG5pbXBvcnQge1Rhc2tDb250ZW50U2VydmljZX0gZnJvbSAnLi4vLi4vdGFzay1jb250ZW50L3NlcnZpY2VzL3Rhc2stY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7VGFza1JlcXVlc3RTdGF0ZVNlcnZpY2V9IGZyb20gJy4vdGFzay1yZXF1ZXN0LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7U25hY2tCYXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zbmFjay1iYXIvc2VydmljZXMvc25hY2stYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHtUYXNrUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L3Rhc2stcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0ZpZWxkQ29udmVydGVyU2VydmljZX0gZnJvbSAnLi4vLi4vdGFzay1jb250ZW50L3NlcnZpY2VzL2ZpZWxkLWNvbnZlcnRlci5zZXJ2aWNlJztcbmltcG9ydCB7VGFza1NldERhdGFSZXF1ZXN0Qm9keX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS90YXNrLXNldC1kYXRhLXJlcXVlc3QtYm9keSc7XG5pbXBvcnQge1Rhc2tIYW5kbGluZ1NlcnZpY2V9IGZyb20gJy4vdGFzay1oYW5kbGluZy1zZXJ2aWNlJztcbmltcG9ydCB7TkFFX1RBU0tfT1BFUkFUSU9OU30gZnJvbSAnLi4vbW9kZWxzL3Rhc2stb3BlcmF0aW9ucy1pbmplY3Rpb24tdG9rZW4nO1xuaW1wb3J0IHtUYXNrT3BlcmF0aW9uc30gZnJvbSAnLi4vaW50ZXJmYWNlcy90YXNrLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtGaWxlRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2ZpbGUtZmllbGQvbW9kZWxzL2ZpbGUtZmllbGQnO1xuaW1wb3J0IHtTZWxlY3RlZENhc2VTZXJ2aWNlfSBmcm9tICcuL3NlbGVjdGVkLWNhc2Uuc2VydmljZSc7XG5pbXBvcnQge0ZpbGVMaXN0RmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2ZpbGUtbGlzdC1maWVsZC9tb2RlbHMvZmlsZS1saXN0LWZpZWxkJztcbmltcG9ydCB7Y3JlYXRlVGFza0V2ZW50Tm90aWZpY2F0aW9ufSBmcm9tICcuLi8uLi90YXNrLWNvbnRlbnQvbW9kZWwvdGFzay1ldmVudC1ub3RpZmljYXRpb24nO1xuaW1wb3J0IHtUYXNrRXZlbnR9IGZyb20gJy4uLy4uL3Rhc2stY29udGVudC9tb2RlbC90YXNrLWV2ZW50JztcbmltcG9ydCB7VGFza0V2ZW50U2VydmljZX0gZnJvbSAnLi4vLi4vdGFzay1jb250ZW50L3NlcnZpY2VzL3Rhc2stZXZlbnQuc2VydmljZSc7XG5pbXBvcnQge0RhdGFGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2Fic3RyYWN0LWRhdGEtZmllbGQnO1xuaW1wb3J0IHtDYWxsQ2hhaW5TZXJ2aWNlfSBmcm9tICcuLi8uLi91dGlsaXR5L2NhbGwtY2hhaW4vY2FsbC1jaGFpbi5zZXJ2aWNlJztcbmltcG9ydCB7dGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtEeW5hbWljRW51bWVyYXRpb25GaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZW51bWVyYXRpb24tZmllbGQvbW9kZWxzL2R5bmFtaWMtZW51bWVyYXRpb24tZmllbGQnO1xuaW1wb3J0IHtEYXRhR3JvdXB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvZGF0YS1ncm91cHMnO1xuaW1wb3J0IHtFdmVudFF1ZXVlU2VydmljZX0gZnJvbSAnLi4vLi4vZXZlbnQtcXVldWUvc2VydmljZXMvZXZlbnQtcXVldWUuc2VydmljZSc7XG5pbXBvcnQge1F1ZXVlZEV2ZW50fSBmcm9tICcuLi8uLi9ldmVudC1xdWV1ZS9tb2RlbC9xdWV1ZWQtZXZlbnQnO1xuaW1wb3J0IHtBZnRlckFjdGlvbn0gZnJvbSAnLi4vLi4vdXRpbGl0eS9jYWxsLWNoYWluL2FmdGVyLWFjdGlvbic7XG5pbXBvcnQge1VzZXJDb21wYXJhdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vdXNlci9zZXJ2aWNlcy91c2VyLWNvbXBhcmF0b3Iuc2VydmljZSc7XG5pbXBvcnQge1Rhc2tTZXREYXRhUmVxdWVzdENvbnRleHR9IGZyb20gJy4uL21vZGVscy90YXNrLXNldC1kYXRhLXJlcXVlc3QtY29udGV4dCc7XG5pbXBvcnQge0V2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9tZXNzYWdlLXJlc291cmNlJztcbmltcG9ydCB7RXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9ldmVudC9zZXJ2aWNlcy9ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7Q2hhbmdlZEZpZWxkc1NlcnZpY2V9IGZyb20gJy4uLy4uL2NoYW5nZWQtZmllbGRzL3NlcnZpY2VzL2NoYW5nZWQtZmllbGRzLnNlcnZpY2UnO1xuaW1wb3J0IHtDaGFuZ2VkRmllbGRzTWFwfSBmcm9tICcuLi8uLi9ldmVudC9zZXJ2aWNlcy9pbnRlcmZhY2VzL2NoYW5nZWQtZmllbGRzLW1hcCc7XG5pbXBvcnQge1Rhc2tGaWVsZHN9IGZyb20gJy4uLy4uL3Rhc2stY29udGVudC9tb2RlbC90YXNrLWZpZWxkcyc7XG5pbXBvcnQge0VudW1lcmF0aW9uRmllbGR9IGZyb20gXCIuLi8uLi9kYXRhLWZpZWxkcy9lbnVtZXJhdGlvbi1maWVsZC9tb2RlbHMvZW51bWVyYXRpb24tZmllbGRcIjtcbmltcG9ydCB7RnJvbnRBY3Rpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vYWN0aW9ucy9zZXJ2aWNlcy9mcm9udC1hY3Rpb24uc2VydmljZVwiO1xuaW1wb3J0IHtCdXR0b25GaWVsZH0gZnJvbSBcIi4uLy4uL2RhdGEtZmllbGRzL2J1dHRvbi1maWVsZC9tb2RlbHMvYnV0dG9uLWZpZWxkXCI7XG5cbi8qKlxuICogSGFuZGxlcyB0aGUgbG9hZGluZyBhbmQgdXBkYXRpbmcgb2YgZGF0YSBmaWVsZHMgYW5kIGJlaGF2aW91ciBvZlxuICogYSBzaW5nbGUgVGFzayBvYmplY3QgbWFuYWdlZCBieSBhIHtAbGluayBUYXNrQ29udGVudFNlcnZpY2V9IGluc3RhbmNlLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGFza0RhdGFTZXJ2aWNlIGV4dGVuZHMgVGFza0hhbmRsaW5nU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICBwcm90ZWN0ZWQgX3VwZGF0ZVN1Y2Nlc3MkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICAgIHByb3RlY3RlZCBfZGF0YVJlbG9hZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF90YXNrU3RhdGU6IFRhc2tSZXF1ZXN0U3RhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfc25hY2tCYXI6IFNuYWNrQmFyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3Rhc2tSZXNvdXJjZVNlcnZpY2U6IFRhc2tSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9maWVsZENvbnZlcnRlclNlcnZpY2U6IEZpZWxkQ29udmVydGVyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3Rhc2tFdmVudDogVGFza0V2ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBASW5qZWN0KE5BRV9UQVNLX09QRVJBVElPTlMpIHByb3RlY3RlZCBfdGFza09wZXJhdGlvbnM6IFRhc2tPcGVyYXRpb25zLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIF9zZWxlY3RlZENhc2VTZXJ2aWNlOiBTZWxlY3RlZENhc2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdGFza0NvbnRlbnRTZXJ2aWNlOiBUYXNrQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hZnRlckFjdGlvbkZhY3Rvcnk6IENhbGxDaGFpblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9ldmVudFF1ZXVlOiBFdmVudFF1ZXVlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VzZXJDb21wYXJhdG9yOiBVc2VyQ29tcGFyYXRvclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9ldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2NoYW5nZWRGaWVsZHNTZXJ2aWNlOiBDaGFuZ2VkRmllbGRzU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2Zyb250QWN0aW9uU2VydmljZTogRnJvbnRBY3Rpb25TZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKF90YXNrQ29udGVudFNlcnZpY2UsIF9zZWxlY3RlZENhc2VTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlU3VjY2VzcyQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgICAgICB0aGlzLl9kYXRhUmVsb2FkU3Vic2NyaXB0aW9uID0gdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnRhc2tEYXRhUmVsb2FkUmVxdWVzdCQuc3Vic2NyaWJlKHF1ZXVlZEZyb250ZW5kQWN0aW9uID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVRhc2tEYXRhRmllbGRzKG5ldyBBZnRlckFjdGlvbigpLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVN1Y2Nlc3MkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2RhdGFSZWxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNUYXNrUHJlc2VudCgpICYmIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwICYmIGdyb3VwLmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICBncm91cC5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiBmaWVsZC5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBiYWNrZW5kXG4gICAgICogY2FsbHMgaW4gW3VwZGF0ZVRhc2tEYXRhRmllbGRzXXtAbGluayBUYXNrRGF0YVNlcnZpY2UjdXBkYXRlVGFza0RhdGFGaWVsZHN9IG1ldGhvZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHVwZGF0ZVN1Y2Nlc3MkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlU3VjY2VzcyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZHMgdGhlIERhdGEgRmllbGRzIG9mIGFuIHVuaW5pdGlhbGl6ZWQgVGFzayBmcm9tIGJhY2tlbmRcbiAgICAgKiBhbmQgcG9wdWxhdGVzIHRoZSBUYXNrIG1hbmFnZWQgYnkge0BsaW5rIFRhc2tDb250ZW50U2VydmljZX0gd2l0aCB0aGUgYXBwcm9wcmlhdGUgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEJld2FyZSB0aGF0IGlmIHRoZSBUYXNrIGhhcyBzb21lIGRhdGEgYWxyZWFkeSBsb2FkZWQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmdcbiAgICAgKiBhbmQgb25seSBwYXNzZXMgYHRydWVgIHRvIHRoZSBgYWZ0ZXJBY3Rpb25gIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogSWYgdGhlIHRhc2sgaGVsZCB3aXRoaW4gdGhlIHtAbGluayBUYXNrQ29udGVudFNlcnZpY2V9IGNoYW5nZXMgYmVmb3JlIGEgcmVzcG9uc2UgaXMgcmVjZWl2ZWQsIHRoZSByZXNwb25zZSB3aWxsIGJlIGlnbm9yZWRcbiAgICAgKiBhbmQgdGhlIGBhZnRlckFjdGlvbmAgd2lsbCBub3QgYmUgZXhlY3V0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gaWYgdGhlIHJlcXVlc3QgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSBlbWl0cyBgdHJ1ZWAgaW50byB0aGUgU3ViamVjdCwgb3RoZXJ3aXNlIGBmYWxzZWAgd2lsbCBiZSBlbWl0dGVkXG4gICAgICogQHBhcmFtIGZvcmNlIHNldCB0byBgdHJ1ZWAgaWYgeW91IG5lZWQgZm9yY2UgcmVsb2FkIG9mIGFsbCB0YXNrIGRhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdGlhbGl6ZVRhc2tEYXRhRmllbGRzKGFmdGVyQWN0aW9uOiBBZnRlckFjdGlvbiA9IG5ldyBBZnRlckFjdGlvbigpLCBmb3JjZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2V2ZW50UXVldWUuc2NoZWR1bGVFdmVudChuZXcgUXVldWVkRXZlbnQoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNUYXNrUHJlc2VudCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRFdmVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtR2V0RGF0YVJlcXVlc3QoYWZ0ZXJBY3Rpb24sIGZvcmNlLCBuZXh0RXZlbnQpO1xuICAgICAgICAgICAgfSwgbmV4dEV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBhZnRlckFjdGlvbi5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgYGdldERhdGFgIHJlcXVlc3Qgb24gdGhlIHRhc2sgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUgYHRhc2tDb250ZW50YCBzZXJ2aWNlXG4gICAgICogQHBhcmFtIGFmdGVyQWN0aW9uIHRoZSBhY3Rpb24gdGhhdCBzaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHRoZSByZXF1ZXN0IGlzIHByb2Nlc3NlZFxuICAgICAqIEBwYXJhbSBmb3JjZSBzZXQgdG8gYHRydWVgIGlmIHlvdSBuZWVkIGZvcmNlIHJlbG9hZCBvZiBhbGwgdGFzayBkYXRhXG4gICAgICogQHBhcmFtIG5leHRFdmVudCBpbmRpY2F0ZXMgdG8gdGhlIGV2ZW50IHF1ZXVlIHRoYXQgdGhlIG5leHQgZXZlbnQgY2FuIGJlIHByb2Nlc3NlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwZXJmb3JtR2V0RGF0YVJlcXVlc3QoYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uLCBmb3JjZTogYm9vbGVhbiwgbmV4dEV2ZW50OiBBZnRlckFjdGlvbikge1xuICAgICAgICBpZiAodGhpcy5fc2FmZVRhc2suZGF0YVNpemUgPiAwICYmICFmb3JjZSkge1xuICAgICAgICAgICAgdGhpcy5zZW5kTm90aWZpY2F0aW9uKFRhc2tFdmVudC5HRVRfREFUQSwgdHJ1ZSk7XG4gICAgICAgICAgICBhZnRlckFjdGlvbi5yZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLiRzaG91bGRDcmVhdGUubmV4dCh0aGlzLl9zYWZlVGFzay5kYXRhR3JvdXBzKTtcbiAgICAgICAgICAgIG5leHRFdmVudC5yZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JjZSkge1xuICAgICAgICAgICAgdGhpcy5fc2FmZVRhc2suZGF0YVNpemUgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ290dGVuVGFza0lkID0gdGhpcy5fc2FmZVRhc2suc3RyaW5nSWQ7XG4gICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdGFydExvYWRpbmcoZ290dGVuVGFza0lkKTtcblxuICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLmdldERhdGEoZ290dGVuVGFza0lkKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShkYXRhR3JvdXBzID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxHZXREYXRhUmVxdWVzdChnb3R0ZW5UYXNrSWQsIGRhdGFHcm91cHMsIGFmdGVyQWN0aW9uLCBuZXh0RXZlbnQpO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NFcnJvbmVvdXNHZXREYXRhUmVxdWVzdChnb3R0ZW5UYXNrSWQsIGVycm9yLCBhZnRlckFjdGlvbiwgbmV4dEV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGEgc3VjY2Vzc2Z1bCBvdXRjb21lIG9mIGEgYGdldERhdGFgIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gZ290dGVuVGFza0lkIHRoZSBJRCBvZiB0aGUgdGFzayB3aG9zZSBkYXRhIHdhcyByZXF1ZXN0ZWRcbiAgICAgKiBAcGFyYW0gZGF0YUdyb3VwcyB0aGUgcmV0dXJuZWQgZGF0YSBncm91cHMgb2YgdGhlIHRhc2tcbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gdGhlIGFjdGlvbiB0aGF0IHNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgcHJvY2Vzc2VkXG4gICAgICogQHBhcmFtIG5leHRFdmVudCBpbmRpY2F0ZXMgdG8gdGhlIGV2ZW50IHF1ZXVlIHRoYXQgdGhlIG5leHQgZXZlbnQgY2FuIGJlIHByb2Nlc3NlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzU3VjY2Vzc2Z1bEdldERhdGFSZXF1ZXN0KGdvdHRlblRhc2tJZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFHcm91cHM6IEFycmF5PERhdGFHcm91cD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFdmVudDogQWZ0ZXJBY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVGFza1JlbGV2YW50KGdvdHRlblRhc2tJZCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZygnY3VycmVudCB0YXNrIGNoYW5nZWQgYmVmb3JlIHRoZSBnZXQgZGF0YSByZXNwb25zZSBjb3VsZCBiZSByZWNlaXZlZCwgZGlzY2FyZGluZy4uLicpO1xuICAgICAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0b3BMb2FkaW5nKGdvdHRlblRhc2tJZCk7XG4gICAgICAgICAgICBhZnRlckFjdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS5yZWZlcmVuY2VkVGFza0FuZENhc2VJZHMgPSB7fTtcbiAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnRhc2tGaWVsZHNJbmRleCA9IHt9O1xuXG4gICAgICAgIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMgPSBkYXRhR3JvdXBzO1xuICAgICAgICBpZiAoZGF0YUdyb3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5pbmZvKCdUYXNrIGhhcyBubyBkYXRhICcgKyB0aGlzLl9zYWZlVGFzayk7XG4gICAgICAgICAgICB0aGlzLl9zYWZlVGFzay5kYXRhU2l6ZSA9IDA7XG4gICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UudGFza0ZpZWxkc0luZGV4W3RoaXMuX3NhZmVUYXNrLnN0cmluZ0lkXSA9IHt9IGFzIFRhc2tGaWVsZHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UucmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzW3RoaXMuX3NhZmVUYXNrLmNhc2VJZF0gPSBbdGhpcy5fc2FmZVRhc2suc3RyaW5nSWRdO1xuICAgICAgICAgICAgZGF0YUdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhR3JvdXBQYXJlbnRDYXNlSWQ6IHN0cmluZyA9IGdyb3VwLnBhcmVudENhc2VJZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5fc2FmZVRhc2suY2FzZUlkIDogZ3JvdXAucGFyZW50Q2FzZUlkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFRhc2tJZDogc3RyaW5nID0gZ3JvdXAucGFyZW50VGFza0lkID09PSB1bmRlZmluZWQgPyB0aGlzLl9zYWZlVGFzay5zdHJpbmdJZCA6IGdyb3VwLnBhcmVudFRhc2tJZDtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRUcmFuc2l0aW9uSWQ6IHN0cmluZyA9IGdyb3VwLnBhcmVudFRyYW5zaXRpb25JZCA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2FmZVRhc2sudHJhbnNpdGlvbklkIDogZ3JvdXAucGFyZW50VHJhbnNpdGlvbklkO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhR3JvdXBQYXJlbnRDYXNlSWQgIT09IHRoaXMuX3NhZmVUYXNrLmNhc2VJZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3Rhc2tDb250ZW50U2VydmljZS5yZWZlcmVuY2VkVGFza0FuZENhc2VJZHNbZGF0YUdyb3VwUGFyZW50Q2FzZUlkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnJlZmVyZW5jZWRUYXNrQW5kQ2FzZUlkc1tkYXRhR3JvdXBQYXJlbnRDYXNlSWRdID0gW2dyb3VwLnBhcmVudFRhc2tJZF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UucmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzW2RhdGFHcm91cFBhcmVudENhc2VJZF0ucHVzaChncm91cC5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhR3JvdXBQYXJlbnRDYXNlSWQgPT09IHRoaXMuX3NhZmVUYXNrLmNhc2VJZFxuICAgICAgICAgICAgICAgICAgICAmJiBwYXJlbnRUYXNrSWQgIT09IHRoaXMuX3NhZmVUYXNrLnN0cmluZ0lkXG4gICAgICAgICAgICAgICAgICAgICYmICF0aGlzLl90YXNrQ29udGVudFNlcnZpY2UucmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzW2RhdGFHcm91cFBhcmVudENhc2VJZF0uaW5jbHVkZXMocGFyZW50VGFza0lkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UucmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzW2RhdGFHcm91cFBhcmVudENhc2VJZF0ucHVzaChncm91cC5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuZmllbGRzLmxlbmd0aCA+IDAgJiYgIXRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbcGFyZW50VGFza0lkXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UudGFza0ZpZWxkc0luZGV4W3BhcmVudFRhc2tJZF0gPSB7fSBhcyBUYXNrRmllbGRzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuZmllbGRzLmxlbmd0aCA+IDAgJiYgIXRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbcGFyZW50VGFza0lkXS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnRhc2tGaWVsZHNJbmRleFtwYXJlbnRUYXNrSWRdLmZpZWxkcyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBncm91cC5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbcGFyZW50VGFza0lkXS50cmFuc2l0aW9uSWQgPSBwYXJlbnRUcmFuc2l0aW9uSWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbcGFyZW50VGFza0lkXS5maWVsZHNbZmllbGQuc3RyaW5nSWRdID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlQ2hhbmdlcygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy53YXNGaWVsZFVwZGF0ZWQoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkIGluc3RhbmNlb2YgQnV0dG9uRmllbGQgJiYgZmllbGQuY29tcG9uZW50Py5wcm9wZXJ0aWVzPy52YWxpZGF0ZURhdGEgPT09ICd0cnVlJyAmJiAhdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnZhbGlkYXRlVGFza0RhdGEoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC53YWl0aW5nRm9yUmVzcG9uc2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZCBpbnN0YW5jZW9mIER5bmFtaWNFbnVtZXJhdGlvbkZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRhc2tEYXRhRmllbGRzKHRoaXMuX2FmdGVyQWN0aW9uRmFjdG9yeS5jcmVhdGUoYm9vbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRhc2tEYXRhRmllbGRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkIGluc3RhbmNlb2YgRmlsZUZpZWxkIHx8IGZpZWxkIGluc3RhbmNlb2YgRmlsZUxpc3RGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuY2hhbmdlZEZpZWxkcyQuc3Vic2NyaWJlKChjaGFuZ2U6IENoYW5nZWRGaWVsZHNNYXApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VkRmllbGRzU2VydmljZS5lbWl0Q2hhbmdlZEZpZWxkcyhjaGFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zYWZlVGFzay5kYXRhU2l6ZSA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2FmZVRhc2suZGF0YVNpemUgPSBncm91cC5maWVsZHMubGVuZ3RoIDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2FmZVRhc2suZGF0YVNpemUgKz0gZ3JvdXAuZmllbGRzLmxlbmd0aDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdG9wTG9hZGluZyhnb3R0ZW5UYXNrSWQpO1xuICAgICAgICB0aGlzLnNlbmROb3RpZmljYXRpb24oVGFza0V2ZW50LkdFVF9EQVRBLCB0cnVlKTtcbiAgICAgICAgYWZ0ZXJBY3Rpb24ucmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUodHJ1ZSk7XG4gICAgICAgIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS4kc2hvdWxkQ3JlYXRlLm5leHQodGhpcy5fc2FmZVRhc2suZGF0YUdyb3Vwcyk7XG4gICAgICAgIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS4kc2hvdWxkQ3JlYXRlQ291bnRlci5uZXh0KHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS4kc2hvdWxkQ3JlYXRlQ291bnRlci5nZXRWYWx1ZSgpICsgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGFuIGVycm9uZW91cyBvdXRjb21lIG9mIGEgYGdldERhdGFgIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gZ290dGVuVGFza0lkIHRoZSBJRCBvZiB0aGUgdGFzayB3aG9zZSBkYXRhIHdhcyByZXF1ZXN0ZWRcbiAgICAgKiBAcGFyYW0gZXJyb3IgdGhlIHJldHVybmVkIGVycm9yXG4gICAgICogQHBhcmFtIGFmdGVyQWN0aW9uIHRoZSBhY3Rpb24gdGhhdCBzaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHRoZSByZXF1ZXN0IGlzIHByb2Nlc3NlZFxuICAgICAqIEBwYXJhbSBuZXh0RXZlbnQgaW5kaWNhdGVzIHRvIHRoZSBldmVudCBxdWV1ZSB0aGF0IHRoZSBuZXh0IGV2ZW50IGNhbiBiZSBwcm9jZXNzZWRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0Vycm9uZW91c0dldERhdGFSZXF1ZXN0KGdvdHRlblRhc2tJZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlIHwgRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlckFjdGlvbjogQWZ0ZXJBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RXZlbnQ6IEFmdGVyQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdG9wTG9hZGluZyhnb3R0ZW5UYXNrSWQpO1xuICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ2dldHRpbmcgdGFzayBkYXRhIGZhaWxlZCcsIGVycm9yKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNUYXNrUmVsZXZhbnQoZ290dGVuVGFza0lkKSkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdjdXJyZW50IHRhc2sgY2hhbmdlZCBiZWZvcmUgdGhlIGdldCBkYXRhIGVycm9yIGNvdWxkIGJlIHJlY2VpdmVkJyk7XG4gICAgICAgICAgICBhZnRlckFjdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgZXJyb3Iuc3RhdHVzID09PSA1MDAgJiYgZXJyb3IuZXJyb3IubWVzc2FnZSAmJiBlcnJvci5lcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0NvdWxkIG5vdCBmaW5kIHRhc2sgd2l0aCBpZCcpKSB7XG4gICAgICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuV2FybmluZ1NuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd0YXNrcy5zbmFja2Jhci5ub0xvbmdlckV4aXN0cycpKTtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2tPcGVyYXRpb25zLnJlbG9hZCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW5FcnJvclNuYWNrQmFyKGAke3RoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd0YXNrcy5zbmFja2Jhci5ub0dyb3VwJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrLnRpdGxlfSAke3RoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd0YXNrcy5zbmFja2Jhci5mYWlsZWRUb0xvYWQnKX1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbmROb3RpZmljYXRpb24oVGFza0V2ZW50LkdFVF9EQVRBLCBmYWxzZSk7XG4gICAgICAgIGFmdGVyQWN0aW9uLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGVjdHMgYWxsIGNoYW5nZWQgZGF0YSBmaWVsZHMgYW5kIG5vdGlmaWVzIHRoZSBiYWNrZW5kIG9mIHRoZSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogSWYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bCBjbGVhcnMgdGhlIFtjaGFuZ2VkXXtAbGluayBEYXRhRmllbGQjY2hhbmdlZH0gZmxhZyBvbiBhbGwgZGF0YSBmaWVsZHMgdGhhdCB3ZXJlIGEgcGFydCBvZiB0aGUgcmVxdWVzdFxuICAgICAqIGFuZCBlbWl0cyBhIHtAbGluayBDaGFuZ2VkRmllbGRzfSBvYmplY3QgaW50byB0aGlzIG9iamVjdCdzIFtjaGFuZ2VkRmllbGRzJF17QGxpbmsgVGFza0RhdGFTZXJ2aWNlI2NoYW5nZWRGaWVsZHMkfSBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBJZiB0aGUgdGFzayBoZWxkIHdpdGhpbiB0aGUge0BsaW5rIFRhc2tDb250ZW50U2VydmljZX0gY2hhbmdlcyBiZWZvcmUgYSByZXNwb25zZSBpcyByZWNlaXZlZCwgdGhlIHJlc3BvbnNlIHdpbGwgYmUgaWdub3JlZFxuICAgICAqIGFuZCB0aGUgYGFmdGVyQWN0aW9uYCB3aWxsIG5vdCBiZSBleGVjdXRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhZnRlckFjdGlvbiBpZiB0aGUgcmVxdWVzdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGVtaXRzIGB0cnVlYCBpbnRvIHRoZSBTdWJqZWN0LCBvdGhlcndpc2UgYGZhbHNlYCB3aWxsIGJlIGVtaXR0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlVGFza0RhdGFGaWVsZHMoYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uID0gbmV3IEFmdGVyQWN0aW9uKCkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVGFza1ByZXNlbnQoKSkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdUYXNrIGlzIG5vdCBwcmVzZW50LiBVcGRhdGUgcmVxdWVzdCBpZ25vcmVkLicpO1xuICAgICAgICAgICAgYWZ0ZXJBY3Rpb24ucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fc2FmZVRhc2sudXNlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ2N1cnJlbnQgdGFzayBpcyBub3QgYXNzaWduZWQuLi4nKTtcbiAgICAgICAgICAgIGFmdGVyQWN0aW9uLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2V0VGFza0lkID0gdGhpcy5fc2FmZVRhc2suc3RyaW5nSWQ7XG5cbiAgICAgICAgaWYgKHRoaXMuX3NhZmVUYXNrLmRhdGFTaXplIDw9IDApIHtcbiAgICAgICAgICAgIGFmdGVyQWN0aW9uLnJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXF1ZXN0Q29udGV4dCA9IHRoaXMuY3JlYXRlVXBkYXRlUmVxdWVzdENvbnRleHQoKTtcblxuICAgICAgICB0aGlzLl9ldmVudFF1ZXVlLnNjaGVkdWxlRXZlbnQobmV3IFF1ZXVlZEV2ZW50KFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5pc1NldERhdGFSZXF1ZXN0U3RpbGxWYWxpZChyZXF1ZXN0Q29udGV4dC5ib2R5KSxcbiAgICAgICAgICAgIG5leHRFdmVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtU2V0RGF0YVJlcXVlc3Qoc2V0VGFza0lkLCByZXF1ZXN0Q29udGV4dCwgYWZ0ZXJBY3Rpb24sIG5leHRFdmVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dEV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJldmVydFNldERhdGFSZXF1ZXN0KHJlcXVlc3RDb250ZXh0KTtcbiAgICAgICAgICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBHb2VzIG92ZXIgYWxsIHRoZSBkYXRhIGZpZWxkcyBpbiB0aGUgbWFuYWdlZCBUYXNrIGFuZCBpZiB0aGV5IGFyZSB2YWxpZCBhbmQgY2hhbmdlZCBhZGRzIHRoZW0gdG8gdGhlIHNldCBkYXRhIHJlcXVlc3RcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY3JlYXRlVXBkYXRlUmVxdWVzdENvbnRleHQoKTogVGFza1NldERhdGFSZXF1ZXN0Q29udGV4dCB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQ6IFRhc2tTZXREYXRhUmVxdWVzdENvbnRleHQgPSB7XG4gICAgICAgICAgICBib2R5OiB7fSxcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWVzOiB7fVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMuZmlsdGVyKGRhdGFHcm91cCA9PiBkYXRhR3JvdXAucGFyZW50VGFza0lkID09PSB1bmRlZmluZWQpLmZvckVhY2goZGF0YUdyb3VwID0+IHtcbiAgICAgICAgICAgIGRhdGFHcm91cC5maWVsZHMuZmlsdGVyKGZpZWxkID0+IHRoaXMud2FzRmllbGRVcGRhdGVkKGZpZWxkKSkuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5ib2R5W3RoaXMuX3Rhc2suc3RyaW5nSWRdID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGaWVsZFRvU2V0RGF0YVJlcXVlc3RCb2R5KGNvbnRleHQsIHRoaXMuX3Rhc2suc3RyaW5nSWQsIGZpZWxkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc2FmZVRhc2suZGF0YUdyb3Vwcy5maWx0ZXIoZGF0YUdyb3VwID0+IGRhdGFHcm91cC5wYXJlbnRUYXNrSWQgIT09IHVuZGVmaW5lZCkuZm9yRWFjaChkYXRhR3JvdXAgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGFHcm91cC5maWVsZHMuc29tZShmaWVsZCA9PiB0aGlzLndhc0ZpZWxkVXBkYXRlZChmaWVsZCkpKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5ib2R5W2RhdGFHcm91cC5wYXJlbnRUYXNrSWRdID0ge307XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGFHcm91cC5maWVsZHMuZmlsdGVyKGZpZWxkID0+IHRoaXMud2FzRmllbGRVcGRhdGVkKGZpZWxkKSkuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGaWVsZFRvU2V0RGF0YVJlcXVlc3RCb2R5KGNvbnRleHQsIGRhdGFHcm91cC5wYXJlbnRUYXNrSWQsIGZpZWxkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFkZEZpZWxkVG9TZXREYXRhUmVxdWVzdEJvZHkoY29udGV4dDogVGFza1NldERhdGFSZXF1ZXN0Q29udGV4dCwgdGFza0lkOiBzdHJpbmcsIGZpZWxkOiBEYXRhRmllbGQ8YW55Pik6IHZvaWQge1xuICAgICAgICBjb250ZXh0LmJvZHlbdGFza0lkXVtmaWVsZC5zdHJpbmdJZF0gPSB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLl9maWVsZENvbnZlcnRlclNlcnZpY2UucmVzb2x2ZVR5cGUoZmllbGQpLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2ZpZWxkQ29udmVydGVyU2VydmljZS5mb3JtYXRWYWx1ZUZvckJhY2tlbmQoZmllbGQsIGZpZWxkLnZhbHVlKVxuICAgICAgICB9O1xuICAgICAgICBjb250ZXh0LnByZXZpb3VzVmFsdWVzW2ZpZWxkLnN0cmluZ0lkXSA9IGZpZWxkLnByZXZpb3VzVmFsdWU7XG4gICAgICAgIGZpZWxkLmNoYW5nZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaXNBdXRvY29tcGxldGVFbnVtRXhjZXB0aW9uKGZpZWxkOiBEYXRhRmllbGQ8dW5rbm93bj4pOiBib29sZWFue1xuICAgICAgICByZXR1cm4gKGZpZWxkIGluc3RhbmNlb2YgRW51bWVyYXRpb25GaWVsZCkgJiYgKGZpZWxkLmdldENvbXBvbmVudFR5cGUoKSA9PT0gJ2F1dG9jb21wbGV0ZScpICYmICEoZmllbGQudmFsaWQgfHwgZmllbGQudmFsdWUgPT09IG51bGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBmaWVsZCB0aGUgY2hlY2tlZCBmaWVsZFxuICAgICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIGZpZWxkIHdhcyB1cGRhdGVkIG9uIGZyb250ZW5kIGFuZCB0aHVzIHRoZSBiYWNrZW5kIHNob3VsZCBiZSBub3RpZmllZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCB3YXNGaWVsZFVwZGF0ZWQoZmllbGQ6IERhdGFGaWVsZDx1bmtub3duPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmllbGQuaW5pdGlhbGl6ZWQgJiYgZmllbGQuY2hhbmdlZCAmJiAoZmllbGQudmFsaWQgfHwgZmllbGQuc2VuZEludmFsaWRWYWx1ZXMpICYmICghdGhpcy5pc0F1dG9jb21wbGV0ZUVudW1FeGNlcHRpb24oZmllbGQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgcmVxdWVzdCBjb3VsZCBzdGlsbCBiZSBwZXJmb3JtZWQgYnkgdGhlIGxvZ2dlZCB1c2VyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaXNTZXREYXRhUmVxdWVzdFN0aWxsVmFsaWQocmVxdWVzdDogVGFza1NldERhdGFSZXF1ZXN0Qm9keSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNUYXNrUHJlc2VudCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3NhZmVUYXNrLnVzZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fdXNlckNvbXBhcmF0b3IuY29tcGFyZVVzZXJzKHRoaXMuX3NhZmVUYXNrLnVzZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFza0lkc0luUmVxdWVzdDogQXJyYXk8c3RyaW5nPiA9IE9iamVjdC5rZXlzKHJlcXVlc3QpO1xuICAgICAgICBmb3IgKGNvbnN0IHRhc2tJZCBvZiB0YXNrSWRzSW5SZXF1ZXN0KSB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5rZXlzKHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXgpLmluY2x1ZGVzKHRhc2tJZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoYFRhc2sgaWQgJHt0YXNrSWR9IGlzIG5vdCBwcmVzZW50IGluIHRhc2sgZmllbGRzIGluZGV4YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmllbGRJZHNPZlJlcXVlc3QgPSBPYmplY3Qua2V5cyhyZXF1ZXN0W3Rhc2tJZF0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZElkIG9mIGZpZWxkSWRzT2ZSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UudGFza0ZpZWxkc0luZGV4W3Rhc2tJZF0uZmllbGRzW2ZpZWxkSWRdO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihgVW5leHBlY3RlZCBzdGF0ZS4gRGF0YWZpZWxkICR7ZmllbGRJZH0gb2YgdGFzayAke3Rhc2tJZFxuICAgICAgICAgICAgICAgICAgICB9IGluIHNldERhdGEgcmVxdWVzdCBpcyBub3QgcHJlc2VudCBpbiB0aGUgdGFzay5gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWZpZWxkLmJlaGF2aW9yLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZyhgRmllbGQgJHtmaWVsZElkfSwgd2FzIG1lYW50IHRvIGJlIHNldCB0b1xuICAgICAgICAgICAgICAgICAgICAke0pTT04uc3RyaW5naWZ5KHJlcXVlc3RbdGFza0lkXVtmaWVsZElkXSlcbiAgICAgICAgICAgICAgICAgICAgfSwgYnV0IGlzIG5vIGxvbmVyIGVkaXRhYmxlLmApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgYHNldERhdGFgIHJlcXVlc3Qgb24gdGhlIHRhc2sgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUgYHRhc2tDb250ZW50YCBzZXJ2aWNlXG4gICAgICogQHBhcmFtIHNldFRhc2tJZCBJRCBvZiB0aGUgdGFza1xuICAgICAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgb2YgdGhlIGBzZXREYXRhYCByZXF1ZXN0XG4gICAgICogQHBhcmFtIGFmdGVyQWN0aW9uIHRoZSBhY3Rpb24gdGhhdCBzaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHRoZSByZXF1ZXN0IGlzIHByb2Nlc3NlZFxuICAgICAqIEBwYXJhbSBuZXh0RXZlbnQgaW5kaWNhdGVzIHRvIHRoZSBldmVudCBxdWV1ZSB0aGF0IHRoZSBuZXh0IGV2ZW50IGNhbiBiZSBwcm9jZXNzZWRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcGVyZm9ybVNldERhdGFSZXF1ZXN0KHNldFRhc2tJZDogc3RyaW5nLCBjb250ZXh0OiBUYXNrU2V0RGF0YVJlcXVlc3RDb250ZXh0LCBhZnRlckFjdGlvbjogQWZ0ZXJBY3Rpb24sIG5leHRFdmVudDogQWZ0ZXJBY3Rpb24pIHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGNvbnRleHQuYm9keSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbmROb3RpZmljYXRpb24oVGFza0V2ZW50LlNFVF9EQVRBLCB0cnVlKTtcbiAgICAgICAgICAgIGFmdGVyQWN0aW9uLnJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdGFydExvYWRpbmcoc2V0VGFza0lkKTtcbiAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0YXJ0VXBkYXRpbmcoc2V0VGFza0lkKTtcblxuICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLnNldERhdGEodGhpcy5fc2FmZVRhc2suc3RyaW5nSWQsIGNvbnRleHQuYm9keSkucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1Rhc2tSZWxldmFudChzZXRUYXNrSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZygnY3VycmVudCB0YXNrIGNoYW5nZWQgYmVmb3JlIHRoZSBzZXQgZGF0YSByZXNwb25zZSBjb3VsZCBiZSByZWNlaXZlZCwgZGlzY2FyZGluZy4uLicpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrU3RhdGUuc3RvcExvYWRpbmcoc2V0VGFza0lkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0b3BVcGRhdGluZyhzZXRUYXNrSWQpO1xuICAgICAgICAgICAgICAgICAgICBhZnRlckFjdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3VjY2Vzc2Z1bFNldERhdGFSZXF1ZXN0KHNldFRhc2tJZCwgcmVzcG9uc2UsIGFmdGVyQWN0aW9uLCBuZXh0RXZlbnQsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuZXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NVbnN1Y2Nlc3NmdWxTZXREYXRhUmVxdWVzdChzZXRUYXNrSWQsIHJlc3BvbnNlLCBhZnRlckFjdGlvbiwgbmV4dEV2ZW50LCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRXJyb25lb3VzU2V0RGF0YVJlcXVlc3Qoc2V0VGFza0lkLCBlcnJvciwgYWZ0ZXJBY3Rpb24sIG5leHRFdmVudCwgY29udGV4dCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzZXMgYW4gdW5zdWNjZXNzZnVsIG91dGNvbWUgb2YgYSBgc2V0RGF0YWAgcmVxdWVzdFxuICAgICAqIEBwYXJhbSBzZXRUYXNrSWQgdGhlIElEIG9mIHRoZSB0YXNrIHdob3NlIGRhdGEgd2FzIHNldFxuICAgICAqIEBwYXJhbSByZXNwb25zZSB0aGUgcmVzdWx0aW5nIEV2ZW50IG91dGNvbWUgb2YgdGhlIHNldCBkYXRhIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gdGhlIGFjdGlvbiB0aGF0IHNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgcHJvY2Vzc2VkXG4gICAgICogQHBhcmFtIG5leHRFdmVudCBpbmRpY2F0ZXMgdG8gdGhlIGV2ZW50IHF1ZXVlIHRoYXQgdGhlIG5leHQgZXZlbnQgY2FuIGJlIHByb2Nlc3NlZFxuICAgICAqIEBwYXJhbSBib2R5IGhvbGQgdGhlIGRhdGEgdGhhdCB3YXMgc2VudCBpbiByZXF1ZXN0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NVbnN1Y2Nlc3NmdWxTZXREYXRhUmVxdWVzdChzZXRUYXNrSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiBFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlckFjdGlvbjogQWZ0ZXJBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RXZlbnQ6IEFmdGVyQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogVGFza1NldERhdGFSZXF1ZXN0Q29udGV4dCkge1xuICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IgIT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuRXJyb3JTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudChyZXNwb25zZS5lcnJvcikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbkVycm9yU25hY2tCYXIodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3Rhc2tzLnNuYWNrYmFyLmZhaWxlZFNhdmUnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3BvbnNlLm91dGNvbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG91dGNvbWUgPSByZXNwb25zZS5vdXRjb21lO1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlZEZpZWxkc01hcDogQ2hhbmdlZEZpZWxkc01hcCA9IHRoaXMuX2V2ZW50U2VydmljZS5wYXJzZUNoYW5nZWRGaWVsZHNGcm9tT3V0Y29tZVRyZWUob3V0Y29tZSk7XG5cbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhjaGFuZ2VkRmllbGRzTWFwKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlZEZpZWxkc1NlcnZpY2UuZW1pdENoYW5nZWRGaWVsZHMoY2hhbmdlZEZpZWxkc01hcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXZlcnRUb1ByZXZpb3VzVmFsdWUoY29udGV4dCk7XG4gICAgICAgIHRoaXMuY2xlYXJXYWl0aW5nRm9yUmVzcG9uc2VGbGFnKGNvbnRleHQuYm9keSk7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGVJbmZvKGFmdGVyQWN0aW9uLCBmYWxzZSwgc2V0VGFza0lkKTtcbiAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUoZmFsc2UpO1xuICAgICAgICB0aGlzLl90YXNrT3BlcmF0aW9ucy5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzZXMgYSBzdWNjZXNzZnVsIG91dGNvbWUgb2YgYSBgc2V0RGF0YWAgcmVxdWVzdFxuICAgICAqIEBwYXJhbSBzZXRUYXNrSWQgdGhlIElEIG9mIHRoZSB0YXNrIHdob3NlIGRhdGEgd2FzIHNldFxuICAgICAqIEBwYXJhbSByZXNwb25zZSB0aGUgcmVzdWx0aW5nIEV2ZW50IG91dGNvbWUgb2YgdGhlIHNldCBkYXRhIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gdGhlIGFjdGlvbiB0aGF0IHNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgcHJvY2Vzc2VkXG4gICAgICogQHBhcmFtIG5leHRFdmVudCBpbmRpY2F0ZXMgdG8gdGhlIGV2ZW50IHF1ZXVlIHRoYXQgdGhlIG5leHQgZXZlbnQgY2FuIGJlIHByb2Nlc3NlZFxuICAgICAqIEBwYXJhbSBjb250ZXh0IGhvbGQgdGhlIGRhdGEgdGhhdCB3YXMgc2VudCBpbiByZXF1ZXN0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NTdWNjZXNzZnVsU2V0RGF0YVJlcXVlc3Qoc2V0VGFza0lkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2U6IEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlckFjdGlvbjogQWZ0ZXJBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEV2ZW50OiBBZnRlckFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBUYXNrU2V0RGF0YVJlcXVlc3RDb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IG91dGNvbWUgPSByZXNwb25zZS5vdXRjb21lO1xuICAgICAgICBjb25zdCBjaGFuZ2VkRmllbGRzTWFwOiBDaGFuZ2VkRmllbGRzTWFwID0gdGhpcy5fZXZlbnRTZXJ2aWNlLnBhcnNlQ2hhbmdlZEZpZWxkc0Zyb21PdXRjb21lVHJlZShvdXRjb21lKTtcbiAgICAgICAgY29uc3QgZnJvbnRBY3Rpb25zOiBBcnJheTxGcm9udEFjdGlvbj4gPSB0aGlzLl9ldmVudFNlcnZpY2UucGFyc2VGcm9udEFjdGlvbnNGcm9tT3V0Y29tZVRyZWUob3V0Y29tZSk7XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWRGaWVsZHNNYXApLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZWRGaWVsZHNTZXJ2aWNlLmVtaXRDaGFuZ2VkRmllbGRzKGNoYW5nZWRGaWVsZHNNYXApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIWZyb250QWN0aW9ucyAmJiBmcm9udEFjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fZnJvbnRBY3Rpb25TZXJ2aWNlLnJ1bkFsbChmcm9udEFjdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXJXYWl0aW5nRm9yUmVzcG9uc2VGbGFnKGNvbnRleHQuYm9keSk7XG4gICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW5TdWNjZXNzU25hY2tCYXIoISFvdXRjb21lLm1lc3NhZ2UgPyBvdXRjb21lLm1lc3NhZ2UgOiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgndGFza3Muc25hY2tiYXIuZGF0YVNhdmVkJykpO1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlSW5mbyhhZnRlckFjdGlvbiwgdHJ1ZSwgc2V0VGFza0lkKTtcbiAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGFuIGVycm9uZW91cyBvdXRjb21lIG9mIGEgYHNldERhdGFgIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gc2V0VGFza0lkIHRoZSBJRCBvZiB0aGUgdGFzayB3aG9zZSBkYXRhIHdhcyBzZXRcbiAgICAgKiBAcGFyYW0gZXJyb3IgdGhlIHJldHVybmVkIGVycm9yXG4gICAgICogQHBhcmFtIGFmdGVyQWN0aW9uIHRoZSBhY3Rpb24gdGhhdCBzaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHRoZSByZXF1ZXN0IGlzIHByb2Nlc3NlZFxuICAgICAqIEBwYXJhbSBuZXh0RXZlbnQgaW5kaWNhdGVzIHRvIHRoZSBldmVudCBxdWV1ZSB0aGF0IHRoZSBuZXh0IGV2ZW50IGNhbiBiZSBwcm9jZXNzZWRcbiAgICAgKiBAcGFyYW0gYm9keSBob2xkIHRoZSBkYXRhIHRoYXQgd2FzIHNlbnQgaW4gcmVxdWVzdFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzRXJyb25lb3VzU2V0RGF0YVJlcXVlc3Qoc2V0VGFza0lkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlckFjdGlvbjogQWZ0ZXJBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RXZlbnQ6IEFmdGVyQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogVGFza1NldERhdGFSZXF1ZXN0Q29udGV4dCkge1xuICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ3NldHRpbmcgdGFzayBkYXRhIGZhaWxlZCcsIGVycm9yKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNUYXNrUmVsZXZhbnQoc2V0VGFza0lkKSkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdjdXJyZW50IHRhc2sgY2hhbmdlZCBiZWZvcmUgdGhlIGdldCBkYXRhIGVycm9yIGNvdWxkIGJlIHJlY2VpdmVkJyk7XG4gICAgICAgICAgICB0aGlzLl90YXNrU3RhdGUuc3RvcExvYWRpbmcoc2V0VGFza0lkKTtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdG9wVXBkYXRpbmcoc2V0VGFza0lkKTtcbiAgICAgICAgICAgIGFmdGVyQWN0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJldmVydFRvUHJldmlvdXNWYWx1ZShjb250ZXh0KTtcbiAgICAgICAgdGhpcy5jbGVhcldhaXRpbmdGb3JSZXNwb25zZUZsYWcoY29udGV4dC5ib2R5KTtcbiAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbkVycm9yU25hY2tCYXIodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3Rhc2tzLnNuYWNrYmFyLmZhaWxlZFNhdmUnKSk7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGVJbmZvKGFmdGVyQWN0aW9uLCBmYWxzZSwgc2V0VGFza0lkKTtcbiAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUoZmFsc2UpO1xuICAgICAgICB0aGlzLl90YXNrT3BlcmF0aW9ucy5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXZlcnRzIHRoZSBlZmZlY3RzIG9mIGEgZmFpbGVkIGBzZXREYXRhYCByZXF1ZXN0LCBzbyB0aGF0IHRoZSB1c2VyIHNlZXMgY3VycmVudCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIGNvbnRleHQgdGhlIGNvbnRleHQgb2YgdGhlIGZhaWxlZCByZXF1ZXN0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJldmVydFNldERhdGFSZXF1ZXN0KGNvbnRleHQ6IFRhc2tTZXREYXRhUmVxdWVzdENvbnRleHQpIHtcbiAgICAgICAgLy8gdGhpcyBpdGVyYXRpb24gY291bGQgYmUgaW1wcm92ZWQgaWYgd2UgaGFkIGEgbWFwIG9mIGFsbCB0aGUgZGF0YSBmaWVsZHMgaW4gYSB0YXNrXG4gICAgICAgIGNvbnN0IHRvdGFsQ291bnQgPSBPYmplY3Qua2V5cyhjb250ZXh0LmJvZHkpLmxlbmd0aDtcbiAgICAgICAgbGV0IGZvdW5kQ291bnQgPSAwO1xuXG4gICAgICAgIGZvciAoY29uc3QgZGF0YWdyb3VwIG9mIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZGF0YWdyb3VwLmZpZWxkcykge1xuICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5ib2R5W2ZpZWxkLnN0cmluZ0lkXSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21wYXJlQmFja2VuZEZvcm1hdHRlZEZpZWxkVmFsdWVzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWVsZENvbnZlcnRlclNlcnZpY2UuZm9ybWF0VmFsdWVGb3JCYWNrZW5kKGZpZWxkLCBmaWVsZC52YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYm9keVtmaWVsZC5zdHJpbmdJZF0udmFsdWUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlV2l0aG91dENoYW5nZShjb250ZXh0LnByZXZpb3VzVmFsdWVzW2ZpZWxkLnN0cmluZ0lkXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm91bmRDb3VudCsrO1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZENvdW50ID09PSB0b3RhbENvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2cuZXJyb3IoYEludmFsaWQgc3RhdGUuIFNvbWUgZGF0YSBmaWVsZHMgb2YgdGFzayAke3RoaXMuX3NhZmVUYXNrLnN0cmluZ0lkfSwgYXJlIG5vIGxvbmdlciBwcmVzZW50IGluIGl0IWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXBhcmVzIHRoZSB2YWx1ZXMgdGhhdCBhcmUgaW4gdGhlIGJhY2tlbmQgY29tcGF0aWJsZSBmb3JtYXQgYXMgZ2l2ZW4gYnkgdGhlIHtAbGluayBGaWVsZENvbnZlcnRlclNlcnZpY2V9XG4gICAgICogYW5kIGRldGVybWluZXMgd2hldGhlciB0aGV5IGFyZSB0aGUgc2FtZSB2YWx1ZSwgb3Igbm90LlxuICAgICAqIEBwYXJhbSBjdXJyZW50IHRoZSBjdXJyZW50IHZhbHVlIChjYW4gYWxzbyBiZSBjYWxsZWQgYHZhbHVlMWAgb3IgYGxlZnRgKVxuICAgICAqIEBwYXJhbSBvbGQgdGhlIG5ldyB2YWx1ZSAoY2FuIGFsc28gYmUgY2FsbGVkIGB2YWx1ZTJgIG9yIGByaWdodGApXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFuZCBgZmFsc2VgIG90aGVyd2lzZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjb21wYXJlQmFja2VuZEZvcm1hdHRlZEZpZWxkVmFsdWVzKGN1cnJlbnQsIG9sZCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9sZCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnRzISBDYW5ub3QgY29tcGFyZSBhcnJheSB2YWx1ZSB0byBub24tYXJyYXkgdmFsdWUnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnQubGVuZ3RoICE9PSBvbGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudC5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiBvbGRbaW5kZXhdID09PSB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3VycmVudCA9PT0gb2xkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKlxuICAgICAqIHN0b3BzIGxvYWRpbmcgYW5kIHVwZGF0aW5nIGluZGljYXRvcnMsIGFuZCBlbWl0cyB0aGUgYHJlc3VsdGAgdmFsdWVcbiAgICAgKiB0byBib3RoIHRoZSBgYWZ0ZXJBY3Rpb25gIGFuZCBbX3VwZGF0ZVN1Y2Nlc3MkXXtAbGluayBUYXNrRGF0YVNlcnZpY2UjX3VwZGF0ZVN1Y2Nlc3MkfSBzdHJlYW1zLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFmdGVyQWN0aW9uIHRoZSBjYWxsIGNoYWluIHN0ZWFtIG9mIHRoZSB1cGRhdGUgZGF0YSBtZXRob2RcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHJlc3VsdCBvZiB0aGUgdXBkYXRlIGRhdGEgcmVxdWVzdFxuICAgICAqIEBwYXJhbSBzZXRUYXNrSWQgdGhlIElEIG9mIHRoZSB7QGxpbmsgVGFza30sIHdobydzIHN0YXRlIHNob3VsZCBiZSB1cGRhdGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVN0YXRlSW5mbyhhZnRlckFjdGlvbjogQWZ0ZXJBY3Rpb24sIHJlc3VsdDogYm9vbGVhbiwgc2V0VGFza0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0b3BMb2FkaW5nKHNldFRhc2tJZCk7XG4gICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdG9wVXBkYXRpbmcoc2V0VGFza0lkKTtcbiAgICAgICAgaWYgKHRoaXMuX3VwZGF0ZVN1Y2Nlc3MkLm9ic2VydmVycy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVN1Y2Nlc3MkLm5leHQocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbmROb3RpZmljYXRpb24oVGFza0V2ZW50LlNFVF9EQVRBLCByZXN1bHQpO1xuICAgICAgICBhZnRlckFjdGlvbi5yZXNvbHZlKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHVibGlzaGVzIGEgZ2V0L3NldCBkYXRhIG5vdGlmaWNhdGlvbiB0byB0aGUge0BsaW5rIFRhc2tFdmVudFNlcnZpY2V9XG4gICAgICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCB0aGF0IG9jY3VycmVkIHRvIHRoZSB0YXNrXG4gICAgICogQHBhcmFtIHN1Y2Nlc3Mgd2hldGhlciB0aGUgZ2V0L3NldCBkYXRhIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCBvciBub3RcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2VuZE5vdGlmaWNhdGlvbihldmVudDogVGFza0V2ZW50LkdFVF9EQVRBIHwgVGFza0V2ZW50LlNFVF9EQVRBLCBzdWNjZXNzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Rhc2tFdmVudC5wdWJsaXNoVGFza0V2ZW50KGNyZWF0ZVRhc2tFdmVudE5vdGlmaWNhdGlvbih0aGlzLl9zYWZlVGFzaywgZXZlbnQsIHN1Y2Nlc3MpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmV2ZXJ0VG9QcmV2aW91c1ZhbHVlKGNvbnRleHQ6IFRhc2tTZXREYXRhUmVxdWVzdENvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2FmZVRhc2suZGF0YUdyb3Vwcy5mb3JFYWNoKGRhdGFHcm91cCA9PiB7XG4gICAgICAgICAgICBkYXRhR3JvdXAuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbml0aWFsaXplZCAmJiBmaWVsZC52YWxpZCAmJiBPYmplY3Qua2V5cyhjb250ZXh0LnByZXZpb3VzVmFsdWVzKS5pbmNsdWRlcyhmaWVsZC5zdHJpbmdJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucmV2ZXJ0VG9QcmV2aW91c1ZhbHVlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjbGVhcldhaXRpbmdGb3JSZXNwb25zZUZsYWcoYm9keTogVGFza1NldERhdGFSZXF1ZXN0Qm9keSkge1xuICAgICAgICBPYmplY3Qua2V5cyhib2R5KS5mb3JFYWNoKHRhc2tJZCA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhib2R5W3Rhc2tJZF0pLmZvckVhY2goZmllbGRJZCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnRhc2tGaWVsZHNJbmRleFt0YXNrSWRdLmZpZWxkc1tmaWVsZElkXS53YWl0aW5nRm9yUmVzcG9uc2UgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -7,6 +7,7 @@
7
7
  export function createMockCase(stringId = 'stringId', processIdentifier = 'processIdentifier', title = 'title', petriNetId = 'petriNetId') {
8
8
  return {
9
9
  lastModified: [],
10
+ lastModifiedDataSet: [],
10
11
  visualId: '',
11
12
  petriNetObjectId: {
12
13
  timestamp: 0,
@@ -33,4 +34,4 @@ export function createMockCase(stringId = 'stringId', processIdentifier = 'proce
33
34
  users: {}
34
35
  };
35
36
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1vY2stY2FzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvdXRpbGl0eS90ZXN0cy91dGlsaXR5L2NyZWF0ZS1tb2NrLWNhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLFFBQVEsR0FBRyxVQUFVLEVBQ3JCLGlCQUFpQixHQUFHLG1CQUFtQixFQUN2QyxLQUFLLEdBQUcsT0FBTyxFQUNmLFVBQVUsR0FBRyxZQUFZO0lBQ3BELE9BQU87UUFDSCxZQUFZLEVBQUUsRUFBRTtRQUNoQixRQUFRLEVBQUUsRUFBRTtRQUNaLGdCQUFnQixFQUFFO1lBQ2QsU0FBUyxFQUFFLENBQUM7WUFDWixpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLGlCQUFpQixFQUFFLENBQUM7WUFDcEIsT0FBTyxFQUFFLENBQUM7WUFDVixVQUFVLEVBQUUsQ0FBQztZQUNiLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLENBQUM7U0FDVjtRQUNELGlCQUFpQjtRQUNqQixLQUFLO1FBQ0wsS0FBSyxFQUFFLEVBQUU7UUFDVCxZQUFZLEVBQUUsRUFBRTtRQUNoQixhQUFhLEVBQUUsRUFBRTtRQUNqQixNQUFNLEVBQUU7WUFDSixLQUFLLEVBQUUsRUFBRTtZQUNULFFBQVEsRUFBRSxFQUFFO1NBQ2Y7UUFDRCxjQUFjLEVBQUUsRUFBRTtRQUNsQixRQUFRO1FBQ1IsVUFBVTtRQUNWLFdBQVcsRUFBRSxFQUFFO1FBQ2YsS0FBSyxFQUFFLEVBQUU7S0FDWixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2FzZX0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9jYXNlJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbW9jayBDYXNlIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIGF0dHJpYnV0ZXMuXG4gKlxuICogVGhlIGF0dHJpYnV0ZXMgYXJlIGZpbGxlZCB3aXRoIG1vc3RseSBlbXB0eSB2YWx1ZXMsIGlmIHlvdSB3YW50IHRvIG1ha2UgYSB0ZXN0IHRoYXQgdXNlcyBzb21lIG9mIHRoZW0sXG4gKiB3ZSByZWNvbW1lbmQgc2V0dGluZyB0aGVtIHlvdXJzZWxmLCBhcyB0aGUgcmV0dXJuZWQgb2JqZWN0IG1pZ2h0IGNoYW5nZSBiZXR3ZWVuIHZlcnNpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0Nhc2Uoc3RyaW5nSWQgPSAnc3RyaW5nSWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJZGVudGlmaWVyID0gJ3Byb2Nlc3NJZGVudGlmaWVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICd0aXRsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGV0cmlOZXRJZCA9ICdwZXRyaU5ldElkJyk6IENhc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxhc3RNb2RpZmllZDogW10sXG4gICAgICAgIHZpc3VhbElkOiAnJyxcbiAgICAgICAgcGV0cmlOZXRPYmplY3RJZDoge1xuICAgICAgICAgICAgdGltZXN0YW1wOiAwLFxuICAgICAgICAgICAgbWFjaGluZUlkZW50aWZpZXI6IDAsXG4gICAgICAgICAgICBwcm9jZXNzSWRlbnRpZmllcjogMCxcbiAgICAgICAgICAgIGNvdW50ZXI6IDAsXG4gICAgICAgICAgICB0aW1lU2Vjb25kOiAwLFxuICAgICAgICAgICAgdGltZTogMCxcbiAgICAgICAgICAgIGRhdGU6IDBcbiAgICAgICAgfSxcbiAgICAgICAgcHJvY2Vzc0lkZW50aWZpZXIsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBjb2xvcjogJycsXG4gICAgICAgIGNyZWF0aW9uRGF0ZTogW10sXG4gICAgICAgIGltbWVkaWF0ZURhdGE6IFtdLFxuICAgICAgICBhdXRob3I6IHtcbiAgICAgICAgICAgIGVtYWlsOiAnJyxcbiAgICAgICAgICAgIGZ1bGxOYW1lOiAnJ1xuICAgICAgICB9LFxuICAgICAgICByZXNldEFyY1Rva2Vuczoge30sXG4gICAgICAgIHN0cmluZ0lkLFxuICAgICAgICBwZXRyaU5ldElkLFxuICAgICAgICBwZXJtaXNzaW9uczoge30sXG4gICAgICAgIHVzZXJzOiB7fVxuICAgIH07XG59XG4iXX0=
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1vY2stY2FzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvdXRpbGl0eS90ZXN0cy91dGlsaXR5L2NyZWF0ZS1tb2NrLWNhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLFFBQVEsR0FBRyxVQUFVLEVBQ3JCLGlCQUFpQixHQUFHLG1CQUFtQixFQUN2QyxLQUFLLEdBQUcsT0FBTyxFQUNmLFVBQVUsR0FBRyxZQUFZO0lBQ3BELE9BQU87UUFDSCxZQUFZLEVBQUUsRUFBRTtRQUNoQixtQkFBbUIsRUFBRSxFQUFFO1FBQ3ZCLFFBQVEsRUFBRSxFQUFFO1FBQ1osZ0JBQWdCLEVBQUU7WUFDZCxTQUFTLEVBQUUsQ0FBQztZQUNaLGlCQUFpQixFQUFFLENBQUM7WUFDcEIsaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixPQUFPLEVBQUUsQ0FBQztZQUNWLFVBQVUsRUFBRSxDQUFDO1lBQ2IsSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLEVBQUUsQ0FBQztTQUNWO1FBQ0QsaUJBQWlCO1FBQ2pCLEtBQUs7UUFDTCxLQUFLLEVBQUUsRUFBRTtRQUNULFlBQVksRUFBRSxFQUFFO1FBQ2hCLGFBQWEsRUFBRSxFQUFFO1FBQ2pCLE1BQU0sRUFBRTtZQUNKLEtBQUssRUFBRSxFQUFFO1lBQ1QsUUFBUSxFQUFFLEVBQUU7U0FDZjtRQUNELGNBQWMsRUFBRSxFQUFFO1FBQ2xCLFFBQVE7UUFDUixVQUFVO1FBQ1YsV0FBVyxFQUFFLEVBQUU7UUFDZixLQUFLLEVBQUUsRUFBRTtLQUNaLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDYXNlfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2Nhc2UnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtb2NrIENhc2UgaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlcy5cbiAqXG4gKiBUaGUgYXR0cmlidXRlcyBhcmUgZmlsbGVkIHdpdGggbW9zdGx5IGVtcHR5IHZhbHVlcywgaWYgeW91IHdhbnQgdG8gbWFrZSBhIHRlc3QgdGhhdCB1c2VzIHNvbWUgb2YgdGhlbSxcbiAqIHdlIHJlY29tbWVuZCBzZXR0aW5nIHRoZW0geW91cnNlbGYsIGFzIHRoZSByZXR1cm5lZCBvYmplY3QgbWlnaHQgY2hhbmdlIGJldHdlZW4gdmVyc2lvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ2FzZShzdHJpbmdJZCA9ICdzdHJpbmdJZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0lkZW50aWZpZXIgPSAncHJvY2Vzc0lkZW50aWZpZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gJ3RpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXRyaU5ldElkID0gJ3BldHJpTmV0SWQnKTogQ2FzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbGFzdE1vZGlmaWVkOiBbXSxcbiAgICAgICAgbGFzdE1vZGlmaWVkRGF0YVNldDogW10sXG4gICAgICAgIHZpc3VhbElkOiAnJyxcbiAgICAgICAgcGV0cmlOZXRPYmplY3RJZDoge1xuICAgICAgICAgICAgdGltZXN0YW1wOiAwLFxuICAgICAgICAgICAgbWFjaGluZUlkZW50aWZpZXI6IDAsXG4gICAgICAgICAgICBwcm9jZXNzSWRlbnRpZmllcjogMCxcbiAgICAgICAgICAgIGNvdW50ZXI6IDAsXG4gICAgICAgICAgICB0aW1lU2Vjb25kOiAwLFxuICAgICAgICAgICAgdGltZTogMCxcbiAgICAgICAgICAgIGRhdGU6IDBcbiAgICAgICAgfSxcbiAgICAgICAgcHJvY2Vzc0lkZW50aWZpZXIsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBjb2xvcjogJycsXG4gICAgICAgIGNyZWF0aW9uRGF0ZTogW10sXG4gICAgICAgIGltbWVkaWF0ZURhdGE6IFtdLFxuICAgICAgICBhdXRob3I6IHtcbiAgICAgICAgICAgIGVtYWlsOiAnJyxcbiAgICAgICAgICAgIGZ1bGxOYW1lOiAnJ1xuICAgICAgICB9LFxuICAgICAgICByZXNldEFyY1Rva2Vuczoge30sXG4gICAgICAgIHN0cmluZ0lkLFxuICAgICAgICBwZXRyaU5ldElkLFxuICAgICAgICBwZXJtaXNzaW9uczoge30sXG4gICAgICAgIHVzZXJzOiB7fVxuICAgIH07XG59XG4iXX0=
@@ -1880,7 +1880,7 @@ var sk = {
1880
1880
  session: session$1,
1881
1881
  paginator: paginator$1,
1882
1882
  "export": {
1883
- errorExportDownload: "File failed to download!"
1883
+ errorExportDownload: "Stiahnutie súboru zlyhalo!"
1884
1884
  }
1885
1885
  };
1886
1886
 
@@ -16265,6 +16265,7 @@ class TaskDataService extends TaskHandlingService {
16265
16265
  this._fieldConverterService = _fieldConverterService;
16266
16266
  this._taskEvent = _taskEvent;
16267
16267
  this._taskOperations = _taskOperations;
16268
+ this._taskContentService = _taskContentService;
16268
16269
  this._afterActionFactory = _afterActionFactory;
16269
16270
  this._eventQueue = _eventQueue;
16270
16271
  this._userComparator = _userComparator;
@@ -16395,7 +16396,13 @@ class TaskDataService extends TaskHandlingService {
16395
16396
  this._taskContentService.taskFieldsIndex[parentTaskId].transitionId = parentTransitionId;
16396
16397
  this._taskContentService.taskFieldsIndex[parentTaskId].fields[field.stringId] = field;
16397
16398
  field.valueChanges().subscribe(() => {
16399
+ var _a, _b;
16398
16400
  if (this.wasFieldUpdated(field)) {
16401
+ if (field instanceof ButtonField && ((_b = (_a = field.component) === null || _a === void 0 ? void 0 : _a.properties) === null || _b === void 0 ? void 0 : _b.validateData) === 'true' && !this._taskContentService.validateTaskData()) {
16402
+ field.waitingForResponse = false;
16403
+ field.changed = false;
16404
+ return;
16405
+ }
16399
16406
  if (field instanceof DynamicEnumerationField) {
16400
16407
  field.loading = true;
16401
16408
  this.updateTaskDataFields(this._afterActionFactory.create(bool => {
@@ -20688,7 +20695,7 @@ class SubjectTaskOperations {
20688
20695
  }
20689
20696
 
20690
20697
  class AbstractTaskPanelComponent extends AbstractPanelWithImmediateDataComponent {
20691
- constructor(_taskContentService, _log, _taskViewService, _paperView, _taskEventService, _assignTaskService, _delegateTaskService, _cancelTaskService, _finishTaskService, _taskState, _taskDataService, _assignPolicyService, _finishPolicyService, _callChain, _taskOperations, _disableFunctions, _translate, _currencyPipe, _changedFieldsService, _permissionService, overflowService, _taskForceOpen, injectedTabData) {
20698
+ constructor(_taskContentService, _log, _taskViewService, _paperView, _taskEventService, _assignTaskService, _delegateTaskService, _cancelTaskService, _finishTaskService, _taskState, _taskDataService, _assignPolicyService, _finishPolicyService, _callChain, _taskOperations, _disableFunctions, _translate, _currencyPipe, _changedFieldsService, _permissionService, _userComparator, overflowService, _taskForceOpen, injectedTabData) {
20692
20699
  super(_translate, _currencyPipe, overflowService);
20693
20700
  this._taskContentService = _taskContentService;
20694
20701
  this._log = _log;
@@ -20710,6 +20717,7 @@ class AbstractTaskPanelComponent extends AbstractPanelWithImmediateDataComponent
20710
20717
  this._currencyPipe = _currencyPipe;
20711
20718
  this._changedFieldsService = _changedFieldsService;
20712
20719
  this._permissionService = _permissionService;
20720
+ this._userComparator = _userComparator;
20713
20721
  this._taskForceOpen = _taskForceOpen;
20714
20722
  this._forceLoadDataOnOpen = false;
20715
20723
  this.responsiveBody = true;
@@ -20780,7 +20788,12 @@ class AbstractTaskPanelComponent extends AbstractPanelWithImmediateDataComponent
20780
20788
  if (injectedTabData !== null) {
20781
20789
  this._unsub = injectedTabData.tabSelected$.pipe(filter(bool => bool && this.isExpanded())).subscribe(() => {
20782
20790
  if (this._canReload) {
20783
- this._taskDataService.initializeTaskDataFields(new AfterAction(), true);
20791
+ this._taskDataService.initializeTaskDataFields(this._callChain.create(() => {
20792
+ const taskShouldBeBlocked = !this._taskContentService.task
20793
+ || this._taskContentService.task.user === undefined
20794
+ || !this._userComparator.compareUsers(this._taskContentService.task.user);
20795
+ this._taskContentService.blockFields(taskShouldBeBlocked);
20796
+ }), true);
20784
20797
  }
20785
20798
  else {
20786
20799
  this._canReload = true;
@@ -21001,7 +21014,7 @@ class AbstractTaskPanelComponent extends AbstractPanelWithImmediateDataComponent
21001
21014
  return ((_a = this.panelRef) === null || _a === void 0 ? void 0 : _a.expanded) && !((_b = this._taskContentService) === null || _b === void 0 ? void 0 : _b.isExpanding);
21002
21015
  }
21003
21016
  }
21004
- AbstractTaskPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractTaskPanelComponent, deps: [{ token: TaskContentService }, { token: LoggerService }, { token: TaskViewService }, { token: PaperViewService }, { token: TaskEventService }, { token: AssignTaskService }, { token: DelegateTaskService }, { token: CancelTaskService }, { token: FinishTaskService }, { token: TaskRequestStateService }, { token: TaskDataService }, { token: AssignPolicyService }, { token: FinishPolicyService }, { token: CallChainService }, { token: SubjectTaskOperations }, { token: NAE_TASK_PANEL_DISABLE_BUTTON_FUNCTIONS, optional: true }, { token: i1$2.TranslateService }, { token: i5.CurrencyPipe }, { token: ChangedFieldsService }, { token: PermissionService }, { token: OverflowService, optional: true }, { token: NAE_TASK_FORCE_OPEN, optional: true }, { token: NAE_TAB_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
21017
+ AbstractTaskPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractTaskPanelComponent, deps: [{ token: TaskContentService }, { token: LoggerService }, { token: TaskViewService }, { token: PaperViewService }, { token: TaskEventService }, { token: AssignTaskService }, { token: DelegateTaskService }, { token: CancelTaskService }, { token: FinishTaskService }, { token: TaskRequestStateService }, { token: TaskDataService }, { token: AssignPolicyService }, { token: FinishPolicyService }, { token: CallChainService }, { token: SubjectTaskOperations }, { token: NAE_TASK_PANEL_DISABLE_BUTTON_FUNCTIONS, optional: true }, { token: i1$2.TranslateService }, { token: i5.CurrencyPipe }, { token: ChangedFieldsService }, { token: PermissionService }, { token: UserComparatorService }, { token: OverflowService, optional: true }, { token: NAE_TASK_FORCE_OPEN, optional: true }, { token: NAE_TAB_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
21005
21018
  AbstractTaskPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AbstractTaskPanelComponent, selector: "ncc-abstract-legal-notice", inputs: { taskListVirtualScroll: "taskListVirtualScroll", panelContentComponent: "panelContentComponent", selectedHeaders$: "selectedHeaders$", first: "first", last: "last", responsiveBody: "responsiveBody", preventCollapse: "preventCollapse", hidePanelHeader: "hidePanelHeader", hideActionRow: "hideActionRow", actionButtonTemplates: "actionButtonTemplates", actionRowJustifyContent: "actionRowJustifyContent", showMoreMenu: "showMoreMenu", forceLoadDataOnOpen: "forceLoadDataOnOpen", textEllipsis: "textEllipsis", taskPanelData: "taskPanelData" }, outputs: { taskEvent: "taskEvent", panelRefOutput: "panelRefOutput" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
21006
21019
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractTaskPanelComponent, decorators: [{
21007
21020
  type: Component,
@@ -21015,7 +21028,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
21015
21028
  }, {
21016
21029
  type: Inject,
21017
21030
  args: [NAE_TASK_PANEL_DISABLE_BUTTON_FUNCTIONS]
21018
- }] }, { type: i1$2.TranslateService }, { type: i5.CurrencyPipe }, { type: ChangedFieldsService }, { type: PermissionService }, { type: OverflowService, decorators: [{
21031
+ }] }, { type: i1$2.TranslateService }, { type: i5.CurrencyPipe }, { type: ChangedFieldsService }, { type: PermissionService }, { type: UserComparatorService }, { type: OverflowService, decorators: [{
21019
21032
  type: Optional
21020
21033
  }] }, { type: undefined, decorators: [{
21021
21034
  type: Optional
@@ -34001,6 +34014,7 @@ function createMockTask(stringId = 'stringId', title = 'taskTitle', transitionId
34001
34014
  function createMockCase(stringId = 'stringId', processIdentifier = 'processIdentifier', title = 'title', petriNetId = 'petriNetId') {
34002
34015
  return {
34003
34016
  lastModified: [],
34017
+ lastModifiedDataSet: [],
34004
34018
  visualId: '',
34005
34019
  petriNetObjectId: {
34006
34020
  timestamp: 0,