tnx-shared 5.0.76 → 5.0.77

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/bundles/tnx-shared.umd.js +1032 -892
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/base/data-form-base.d.ts +2 -2
  6. package/classes/base/data-form-base.d.ts.map +1 -1
  7. package/classes/base/data-list-base.d.ts +1 -3
  8. package/classes/base/data-list-base.d.ts.map +1 -1
  9. package/classes/constants.d.ts +0 -4
  10. package/classes/constants.d.ts.map +1 -1
  11. package/classes/form-schema.d.ts +25 -38
  12. package/classes/form-schema.d.ts.map +1 -1
  13. package/classes/public-function.d.ts +1 -1
  14. package/components/address/address.component.d.ts.map +1 -1
  15. package/components/address-new/address-new.component.d.ts +37 -0
  16. package/components/address-new/address-new.component.d.ts.map +1 -0
  17. package/components/address-new/address-new.component.ngfactory.d.ts.map +1 -0
  18. package/components/address-new/address-new.component.scss.shim.ngstyle.d.ts.map +1 -0
  19. package/components/address-new/models/don-vi-hanh-chinh.d.ts +6 -0
  20. package/components/address-new/models/don-vi-hanh-chinh.d.ts.map +1 -0
  21. package/components/address-new/services/address.service.d.ts +8 -0
  22. package/components/address-new/services/address.service.d.ts.map +1 -0
  23. package/components/address-new/services/address.service.ngfactory.d.ts.map +1 -0
  24. package/components/autocomplete-picker/autocomplete-picker.component.d.ts +0 -1
  25. package/components/autocomplete-picker/autocomplete-picker.component.d.ts.map +1 -1
  26. package/components/common-app-component/common-app-component.d.ts +1 -4
  27. package/components/common-app-component/common-app-component.d.ts.map +1 -1
  28. package/components/crud/crud-form/crud-form.component.d.ts +2 -2
  29. package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
  30. package/components/crud/crud-list/crud-list.component.d.ts +1 -6
  31. package/components/crud/crud-list/crud-list.component.d.ts.map +1 -1
  32. package/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.d.ts.map +1 -1
  33. package/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.d.ts.map +1 -1
  34. package/components/file-explorer/file-manager/file-manager.component.d.ts +3 -0
  35. package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
  36. package/components/file-explorer/services/download-link.service.d.ts +1 -0
  37. package/components/file-explorer/services/download-link.service.d.ts.map +1 -1
  38. package/components/file-explorer/services/file-explorer.service.d.ts +2 -0
  39. package/components/file-explorer/services/file-explorer.service.d.ts.map +1 -1
  40. package/components/file-explorer/services/file-object.service.d.ts +2 -0
  41. package/components/file-explorer/services/file-object.service.d.ts.map +1 -1
  42. package/components/file-explorer/signature-detail/signature-detail.component.d.ts +8 -0
  43. package/components/file-explorer/signature-detail/signature-detail.component.d.ts.map +1 -0
  44. package/components/file-explorer/signature-detail/signature-detail.component.ngfactory.d.ts.map +1 -0
  45. package/components/file-explorer/signature-detail/signature-detail.component.scss.shim.ngstyle.d.ts.map +1 -0
  46. package/components/file-upload/file-upload.component.d.ts +3 -0
  47. package/components/file-upload/file-upload.component.d.ts.map +1 -1
  48. package/components/mask/mask.component.d.ts +0 -2
  49. package/components/mask/mask.component.d.ts.map +1 -1
  50. package/components/service-file-upload/service-file-upload.component.d.ts +3 -0
  51. package/components/service-file-upload/service-file-upload.component.d.ts.map +1 -1
  52. package/configs/component-context.constant.d.ts +0 -1
  53. package/configs/component-context.constant.d.ts.map +1 -1
  54. package/esm2015/classes/base/data-form-base.js +5 -5
  55. package/esm2015/classes/base/data-list-base.js +23 -48
  56. package/esm2015/classes/constants.js +1 -6
  57. package/esm2015/classes/form-schema.js +29 -34
  58. package/esm2015/components/address/address.component.js +10 -4
  59. package/esm2015/components/address-new/address-new.component.js +224 -0
  60. package/esm2015/components/address-new/models/don-vi-hanh-chinh.js +8 -0
  61. package/esm2015/components/address-new/services/address.service.js +25 -0
  62. package/esm2015/components/autocomplete-picker/autocomplete-picker.component.js +16 -72
  63. package/esm2015/components/common-app-component/app.menu.component.js +2 -2
  64. package/esm2015/components/common-app-component/common-app-component.js +3 -26
  65. package/esm2015/components/crud/crud-form/crud-form.component.js +11 -10
  66. package/esm2015/components/crud/crud-list/crud-list.component.js +6 -71
  67. package/esm2015/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.js +3 -29
  68. package/esm2015/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.js +3 -29
  69. package/esm2015/components/file-explorer/file-manager/file-manager.component.js +155 -14
  70. package/esm2015/components/file-explorer/services/download-link.service.js +4 -1
  71. package/esm2015/components/file-explorer/services/file-explorer.service.js +21 -7
  72. package/esm2015/components/file-explorer/services/file-object.service.js +18 -1
  73. package/esm2015/components/file-explorer/signature-detail/signature-detail.component.js +66 -0
  74. package/esm2015/components/file-upload/file-upload.component.js +34 -2
  75. package/esm2015/components/mask/mask.component.js +4 -8
  76. package/esm2015/components/service-file-upload/service-file-upload.component.js +32 -2
  77. package/esm2015/components/workflow/services/entity-workflow-history.service.js +3 -3
  78. package/esm2015/components/workflow/services/entity-workflow-setting.service.js +4 -4
  79. package/esm2015/configs/component-context.constant.js +2 -3
  80. package/esm2015/models/grid-info.js +1 -1
  81. package/esm2015/pipes/tn-date.pipe.js +2 -12
  82. package/esm2015/public-api.js +7 -3
  83. package/esm2015/services/base.service.js +1 -16
  84. package/esm2015/services/common.service.js +1 -9
  85. package/esm2015/services/crud.service.js +4 -23
  86. package/esm2015/services/menu.service.js +3 -6
  87. package/esm2015/services/notifier.service.js +2 -2
  88. package/esm2015/services/permission.service.js +2 -9
  89. package/esm2015/services/template-text-v4.service.js +1 -1
  90. package/esm2015/services/user-v5.service.js +1 -1
  91. package/esm2015/services/user.service.js +2 -8
  92. package/esm2015/tnx-shared.js +94 -94
  93. package/esm2015/tnx-shared.module.js +6 -2
  94. package/fesm2015/tnx-shared.js +693 -536
  95. package/fesm2015/tnx-shared.js.map +1 -1
  96. package/models/grid-info.d.ts +0 -1
  97. package/models/grid-info.d.ts.map +1 -1
  98. package/package.json +2 -2
  99. package/pipes/tn-date.pipe.d.ts +0 -2
  100. package/pipes/tn-date.pipe.d.ts.map +1 -1
  101. package/public-api.d.ts +6 -2
  102. package/public-api.d.ts.map +1 -1
  103. package/services/base.service.d.ts +0 -1
  104. package/services/base.service.d.ts.map +1 -1
  105. package/services/common.service.d.ts +0 -4
  106. package/services/common.service.d.ts.map +1 -1
  107. package/services/crud.service.d.ts.map +1 -1
  108. package/services/menu.service.d.ts +1 -1
  109. package/services/menu.service.d.ts.map +1 -1
  110. package/services/permission.service.d.ts +0 -1
  111. package/services/permission.service.d.ts.map +1 -1
  112. package/services/template-text-v4.service.d.ts.map +1 -1
  113. package/services/user.service.d.ts.map +1 -1
  114. package/tnx-shared.d.ts +93 -93
  115. package/tnx-shared.d.ts.map +1 -1
  116. package/tnx-shared.metadata.json +1 -1
  117. package/tnx-shared.module.d.ts +3 -2
  118. package/tnx-shared.module.d.ts.map +1 -1
  119. package/tnx-shared.module.ngfactory.d.ts.map +1 -1
  120. package/components/file-explorer/models/file-settings.d.ts +0 -46
  121. package/components/file-explorer/models/file-settings.d.ts.map +0 -1
  122. package/esm2015/components/file-explorer/models/file-settings.js +0 -60
  123. package/esm2015/services/organization-base.service.js +0 -57
  124. package/services/organization-base.service.d.ts +0 -16
  125. package/services/organization-base.service.d.ts.map +0 -1
  126. package/services/organization-base.service.ngfactory.d.ts.map +0 -1
@@ -321,17 +321,8 @@ export class DataListBase extends ComponentBase {
321
321
  return __awaiter(this, void 0, void 0, function* () {
322
322
  });
323
323
  }
324
- validateEdit(rowData) {
325
- return __awaiter(this, void 0, void 0, function* () {
326
- return true;
327
- });
328
- }
329
324
  _edit(rowData, scopeDataEdit = {}) {
330
325
  return __awaiter(this, void 0, void 0, function* () {
331
- const resultValidate = yield this.validateEdit(rowData);
332
- if (!resultValidate) {
333
- return;
334
- }
335
326
  const flashShow = rowData[KeyFlashShow];
336
327
  delete rowData[KeyFlashShow];
337
328
  this.formModel.formState = FormState.EDIT;
@@ -361,44 +352,33 @@ export class DataListBase extends ComponentBase {
361
352
  getPromiseDeleteItem(rowData) {
362
353
  return this.setting.baseService.delete(rowData.id);
363
354
  }
364
- validateDelete(rowData) {
365
- return __awaiter(this, void 0, void 0, function* () {
366
- return true;
367
- });
368
- }
369
355
  _delete(rowData) {
370
- return __awaiter(this, void 0, void 0, function* () {
371
- if (rowData.__disableDelete) {
372
- return;
373
- }
374
- const resultValidate = yield this.validateDelete(rowData);
375
- if (!resultValidate) {
356
+ if (rowData.__disableDelete) {
357
+ return;
358
+ }
359
+ this._notifierService.showDeleteConfirm().then(rs => {
360
+ if (!rs) {
376
361
  return;
377
362
  }
378
- this._notifierService.showDeleteConfirm().then(rs => {
379
- if (!rs) {
380
- return;
381
- }
382
- if (this.setting.baseService) {
383
- this.getPromiseDeleteItem(rowData)
384
- .then(response => {
385
- if (response.success) {
386
- if (this.setting.showVersionButton) {
387
- this.context.fireEvent(ComCtxConstants.COMMON.RELOAD_DATA_VERSION, {}, true);
388
- }
389
- else {
390
- this._triggerProcessData();
391
- }
392
- this._notifierService.showDeleteDataSuccess();
363
+ if (this.setting.baseService) {
364
+ this.getPromiseDeleteItem(rowData)
365
+ .then(response => {
366
+ if (response.success) {
367
+ if (this.setting.showVersionButton) {
368
+ this.context.fireEvent(ComCtxConstants.COMMON.RELOAD_DATA_VERSION, {}, true);
393
369
  }
394
370
  else {
395
- this._notifierService.showWarningByReponse(response);
371
+ this._triggerProcessData();
396
372
  }
397
- }, error => {
398
- this._notifierService.showDeleteDataError();
399
- });
400
- }
401
- });
373
+ this._notifierService.showDeleteDataSuccess();
374
+ }
375
+ else {
376
+ this._notifierService.showWarningByReponse(response);
377
+ }
378
+ }, error => {
379
+ this._notifierService.showDeleteDataError();
380
+ });
381
+ }
402
382
  });
403
383
  }
404
384
  getPromiseDeleteItems(items) {
@@ -707,11 +687,7 @@ export class DataListBase extends ComponentBase {
707
687
  promise = schema.baseService.getDataDropdown(schema.groupCode, arrValue, this.createDropdownOptions(schema));
708
688
  }
709
689
  else {
710
- const filters = [this.newFilter(schema.valueField, Operator.in, arrValue)];
711
- if (schema.modifyFilter) {
712
- schema.modifyFilter(filters);
713
- }
714
- promise = schema.baseService.getDataDropdownByFilter(filters, this.createDropdownOptions(schema));
690
+ promise = schema.baseService.getDataDropdownByFilter([this.newFilter(schema.valueField, Operator.in, arrValue)], this.createDropdownOptions(schema));
715
691
  }
716
692
  if (schema.order != null) {
717
693
  const result = yield promise;
@@ -753,7 +729,6 @@ export class DataListBase extends ComponentBase {
753
729
  });
754
730
  }
755
731
  mergeRefDataToDatasource(dataSource, schema, data) {
756
- data !== null && data !== void 0 ? data : (data = []);
757
732
  const field = schema.field;
758
733
  let funcGetLabel = item => item[schema.displayField] || item['label'];
759
734
  if (schema.funcGetLabel) {
@@ -865,4 +840,4 @@ DataListBase.propDecorators = {
865
840
  content: [{ type: ViewChild, args: ['crudList',] }],
866
841
  parentModel: [{ type: Input }]
867
842
  };
868
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY2xhc3Nlcy9iYXNlL2RhdGEtbGlzdC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDeEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDbkgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFckcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8s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QixDQUFDO0tBQUE7OztZQTM0QkosU0FBUzs7O1lBNUI0QyxRQUFROzs7c0JBK0J6RCxTQUFTLFNBQUMsVUFBVTswQkFhcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IENydWRMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jcnVkL2NydWQtbGlzdC9jcnVkLWxpc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRW50aXR5UGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2VudGl0eS1wZXJtaXNzaW9uL3NlcnZpY2VzLmNzL2VudGl0eS1wZXJtaXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGF0ZU1hY2hpbmVzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc3RhdGVtYWNoaW5lcy9zZXJ2aWNlcy9zdGF0ZW1hY2hpbmVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXZkl0ZW0gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L21vZGVscy9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9zZXJ2aWNlcy9lbnRpdHktd29ya2Zsb3ctaGlzdG9yeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50aXR5V29ya2Zsb3dTZXR0aW5nU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvZW50aXR5LXdvcmtmbG93LXNldHRpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL3dvcmtmbG93LXBlcm1pc3Npb24tZGV0YWlsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd1NldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvd29ya2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBGaWx0ZXIsIEdyaWRJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XHJcbmltcG9ydCB7IERhdGFTb3VyY2VXb3JrZmxvd0NvcmVTdGF0dXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvd29ya2Zsb3ctY29yZS1zdGF0dXMuZW51bSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3J1ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3VzdG9tUm91dGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2N1c3RvbS1yb3V0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eU1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V4cG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGlzdEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9saXN0LWhlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFzdGVyRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXN0ZXItZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW51bUdldFJlZlR5cGUsIEZvcm1TdGF0ZSwgS2V5RmllbGRHZXRSZWZUeXBlLCBLZXlGbGFzaFNob3csIFdvcmtmbG93RmllbGRTdGF0ZUNvZGUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TY2hlbWFCYXNlLCBDb250cm9sVHlwZSwgQ3J1ZEZvcm1EYXRhLCBDcnVkTGlzdERhdGEsIENydWRMaXN0U2V0dGluZywgRHJvcGRvd25PcHRpb25zLCBPcGVyYXRvciwgVGV4dEFsaWduIH0gZnJvbSAnLi4vZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi9jb21wb25lbnQtYmFzZSc7XHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFMaXN0QmFzZSBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBwdWJsaWMgY3J1ZExpc3Q6IENydWRMaXN0Q29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnY3J1ZExpc3QnKSBzZXQgY29udGVudChjb250ZW50OiBDcnVkTGlzdENvbXBvbmVudCkge1xyXG4gICAgICAgIGNvbnN0IGJlZm9yZVZhbHVlID0gdGhpcy5jcnVkTGlzdDtcclxuICAgICAgICBpZiAoY29udGVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0ID0gY29udGVudDtcclxuICAgICAgICAgICAgaWYgKCFiZWZvcmVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudFJlYWR5Kys7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3VudFJlYWR5IDwgMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEBJbnB1dCgpIHBhcmVudE1vZGVsOiBDcnVkTGlzdERhdGE7XHJcblxyXG4gICAgcHJpdmF0ZSBub3RDb25maWdCYXNlU2VydmljZU1lc3NhZ2UgPSAnQ2jGsGEgY+G6pXUgaMOsbmggQ1JVRCBiYXNlIHNlcnZpY2UnO1xyXG4gICAgZG9Ob3RDaGVja0Jhc2VTZXJ2aWNlID0gZmFsc2U7XHJcbiAgICBzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XHJcbiAgICBtb2RlbDogQ3J1ZExpc3REYXRhID0gbmV3IENydWRMaXN0RGF0YSgpO1xyXG4gICAgZm9ybU1vZGVsOiBDcnVkRm9ybURhdGEgPSBuZXcgQ3J1ZEZvcm1EYXRhKCk7XHJcbiAgICBzY29wZURhdGFFZGl0OiBhbnkgPSB7fTtcclxuICAgIHNob3dEZXRhaWxGb3JtID0gZmFsc2U7XHJcbiAgICBjb3VudFJlYWR5OiBudW1iZXIgPSAwO1xyXG4gICAgaGFzQ3J1ZExpc3QgPSB0cnVlO1xyXG4gICAgY3VzdG9tR2V0RGF0YSA9IGZhbHNlO1xyXG4gICAgcmVhZHlUb1RyaW5oS3kgPSBmYWxzZTtcclxuICAgIHBsdXNVcmwgPSAnJztcclxuICAgIHJvd0RhdGFDdXJyZW50OiBhbnk7XHJcblxyXG4gICAgaXNDcnVkTGlzdCA9IGZhbHNlO1xyXG4gICAgbG9hZGluZ1RpbWVvdXQ7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfY3VzdG9tUm91dGVyU2VydmljZTogQ3VzdG9tUm91dGVyU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfbGlzdEhlbHBlclNlcnZpY2U6IExpc3RIZWxwZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9leHBvcnRTZXJ2aWNlOiBFeHBvcnRTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9yb3V0ZXI6IFJvdXRlcjtcclxuICAgIHByb3RlY3RlZCBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9kYXRlUGlwZTogRGF0ZVBpcGU7XHJcbiAgICBwcm90ZWN0ZWQgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZjtcclxuICAgIHByb3RlY3RlZCBfZW50aXR5TWV0YWRhdGFTZXJ2aWNlOiBFbnRpdHlNZXRhZGF0YVNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfbWFzdGVyRGF0YVNlcnZpY2U6IE1hc3RlckRhdGFTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9lbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlOiBFbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9lbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlOiBFbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9lbnRpdHlQZXJtaXNzaW9uU2VydmljZTogRW50aXR5UGVybWlzc2lvblNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3dvcmtmbG93U2V0dGluZ1NlcnZpY2U6IFdvcmtmbG93U2V0dGluZ3NTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF93b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlOiBXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9zdGF0ZU1hY2hpbmVzU2VydmljZTogU3RhdGVNYWNoaW5lc1NlcnZpY2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgX2luamVjdG9yOiBJbmplY3RvclxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSA9IHRoaXMuX2luamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgdGhpcy5fcm91dGVyID0gdGhpcy5faW5qZWN0b3IuZ2V0KFJvdXRlcik7XHJcbiAgICAgICAgdGhpcy5fY3VzdG9tUm91dGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDdXN0b21Sb3V0ZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9saXN0SGVscGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChMaXN0SGVscGVyU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRXhwb3J0U2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3J1ZFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2RhdGVQaXBlID0gdGhpcy5faW5qZWN0b3IuZ2V0KERhdGVQaXBlKTtcclxuICAgICAgICB0aGlzLl9jZCA9IHRoaXMuX2luamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX21hc3RlckRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE1hc3RlckRhdGFTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9lbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2VudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZW50aXR5UGVybWlzc2lvblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5UGVybWlzc2lvblNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtmbG93U2V0dGluZ1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fc3RhdGVNYWNoaW5lc1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoU3RhdGVNYWNoaW5lc1NlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29scykge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29scyA9IHRoaXMuc2V0dGluZy5jb2xzLmZpbHRlcihxID0+ICFxLnJlbW92ZU9uSW5pdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWVyZ2VJbmZvVG9Db2x1bW5TY2hlbWEoKTtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlRmllbGRTZWFyY2hUZXh0KCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmRvTm90Q2hlY2tCYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHRoaXMubm90Q29uZmlnQmFzZVNlcnZpY2VNZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1dvcmtmbG93KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UudXNlV29ya2Zsb3cgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXRLZXlXb3JrZmxvd1NldHRpbmcoKTtcclxuICAgICAgICAgICAgdGhpcy5fZW50aXR5V29ya2Zsb3dTZXR0aW5nU2VydmljZS5yZWdpc3RlclNlcnZpY2Uoa2V5LCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9lbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2VudGl0eVBlcm1pc3Npb25TZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtmbG93U2V0dGluZ1NlcnZpY2UucmVnaXN0ZXJTZXJ2aWNlKGtleSwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGVja0FsbG93VHJpbmhLeSA9IHRoaXMuY2hlY2tBbGxvd1RyaW5oS3kuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY2hlY2tBbGxvd1RyaW5oS3kgPSB0aGlzLmNoZWNrQWxsb3dUcmluaEt5O1xyXG4gICAgICAgIHRoaXMuZ2V0TWVudUJ1dHRvbnMgPSB0aGlzLmdldE1lbnVCdXR0b25zLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaGFuZGxlQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlICYmIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS51c2VXb3JrZmxvdykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSGFzV29ya2Zsb3coKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGVja0hhc0VuYWJsZVdvcmtmbG93Q29yZVN0YXR1cygpO1xyXG4gICAgICAgIHRoaXMuY291bnRSZWFkeSsrO1xyXG4gICAgICAgIGlmICh0aGlzLmNvdW50UmVhZHkgPiAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrSGFzRW5hYmxlV29ya2Zsb3dDb3JlU3RhdHVzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29yZVN0YXR1cykge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xQYXJlbnQgPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3dvcmtmbG93Q29yZVN0YXR1cycsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Ry4bqhbmcgdGjDoWkgdHLDrG5oIGvDvScsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3dvcmtmbG93Q29yZVN0YXR1cycsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZVJlZkZpZWxkOiAnd29ya2Zsb3dDb3JlU3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTIwcHgnLFxyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZTogRGF0YVNvdXJjZVdvcmtmbG93Q29yZVN0YXR1cyxcclxuICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkTmVlZEdldFJlZi51bnNoaWZ0KGNvbFBhcmVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uY29sUGFyZW50LFxyXG4gICAgICAgICAgICAgICAgcmF3Q29sdW1uOiBjb2xQYXJlbnQsXHJcbiAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogY29sUGFyZW50LmRhdGFUeXBlUmVmRmllbGQsXHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3N0cicgKyBjb2xQYXJlbnQuZmllbGQsXHJcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogY29sUGFyZW50LmFsbG93RmlsdGVyLFxyXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29sdW1uXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbFBhcmVudC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLnB1c2goY29sUGFyZW50LCBjaGlsZHJlbik7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sUGFyZW50LCBjaGlsZHJlbl0pO1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xQYXJlbnRdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBjaGVja0hhc1dvcmtmbG93KCkge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXRLZXlXb3JrZmxvd1NldHRpbmcoKTtcclxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5fZW50aXR5V29ya2Zsb3dTZXR0aW5nU2VydmljZS5nZXRTZXR0aW5nKGtleSk7XHJcbiAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCAmJiBkYXRhLmRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nID0gZGF0YS5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcud29ya2Zsb3dTZXR0aW5nID0gc2V0dGluZztcclxuICAgICAgICAgICAgLy8gTOG6pXkgdGjDtG5nIHRpbiBxdXnhu4FuIGPhu6dhIG5nxrDhu51pIGTDuW5nXHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJEYXRhID0gYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuZ2V0SW5mb0ZvcldvcmtmbG93KHRoaXMuX3VzZXJTZXJ2aWNlLmdldFVzZXJJZENvbWJpbmUoKSk7XHJcbiAgICAgICAgICAgIGlmICh1c2VyRGF0YS5kYXRhID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnTOG7l2kgbOG6pXkgdGjDtG5nIHRpbiBuZ8aw4budaSBkw7luZycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuYWR2YW5jZURhdGEudXNlckRhdGEgPSB1c2VyRGF0YS5kYXRhO1xyXG4gICAgICAgICAgICBjb25zdCBjb2xQYXJlbnQgPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZW50aXR5V29ya2Zsb3dTdGF0dXMnLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGVSZWZGaWVsZDogJ2VudGl0eVdvcmtmbG93U3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW4sXHJcbiAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Ry4bqhbmcgdGjDoWknLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMjBweCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBzZXR0aW5nLnN0YXR1c2VzLm1hcChpdGVtID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0ubWEsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVuOiBpdGVtLnRlblxyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmLnVuc2hpZnQoY29sUGFyZW50KTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLnVzZXJEYXRhID0gdGhpcy5tb2RlbC5hZHZhbmNlRGF0YS51c2VyRGF0YTtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5jb2xQYXJlbnQsXHJcbiAgICAgICAgICAgICAgICByYXdDb2x1bW46IGNvbFBhcmVudCxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjb2xQYXJlbnQuZGF0YVR5cGVSZWZGaWVsZCxcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnc3RyJyArIGNvbFBhcmVudC5maWVsZCxcclxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBjb2xQYXJlbnQuYWxsb3dGaWx0ZXIsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW5cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29sUGFyZW50LnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xQYXJlbnQsIGNoaWxkcmVuKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5mb3JtYXRDb2x1bW5zKFtjb2xQYXJlbnQsIGNoaWxkcmVuXSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuYnVpbGRGaWx0ZXJDb2x1bW4oW2NvbFBhcmVudF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXREYXRhU291cmNlVHJhbmdUaGFpV29ya2Zsb3coKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0V29ya2Zsb3dEZXRhaWxCeVdvcmtmbG93U2V0dGluZyhpdGVtV29ya2Zsb3dTZXR0aW5nOiBhbnkpIHtcclxuICAgICAgICBpZiAoaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzICYmICFBcnJheS5pc0FycmF5KGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlcykpIHtcclxuICAgICAgICAgICAgaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzID0gaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHdvcmtmbG93cyA9IChhd2FpdCB0aGlzLl9zdGF0ZU1hY2hpbmVzU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2NvZGUnLCBPcGVyYXRvci5pbiwgaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzKVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBuZXcgRHJvcGRvd25PcHRpb25zKHtcclxuICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ6ICdjb2RlJyxcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ3RpdGxlJyxcclxuICAgICAgICAgICAgICAgIGZpZWxkUGx1czogJ2RhdGEnXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKSk7XHJcbiAgICAgICAgd29ya2Zsb3dzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0uZGF0YSA9IEpTT04ucGFyc2UoaXRlbS5kYXRhKTtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lRGF0YSA9IGl0ZW0uZGF0YTtcclxuICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zID0ge307XHJcbiAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEubWFjaGluZXMuZm9yRWFjaChtYWNoaW5lID0+IHtcclxuICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9uc1ttYWNoaW5lLmNvZGVdID0gW107XHJcbiAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmNvbm5lY3Rpb25zLmZvckVhY2goY29ubiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm4uc291cmNlID09IG1hY2hpbmUuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zW21hY2hpbmUuY29kZV0ucHVzaChjb25uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd3MgPSB3b3JrZmxvd3M7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFwcGVuZENvbFdvcmtmbG93U3RhdHVzKHdvcmtmbG93czogV2ZJdGVtW10pIHtcclxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gW3tcclxuICAgICAgICAgICAgaWQ6IG51bGwsXHJcbiAgICAgICAgICAgIHJhd1RlbjogJ0NoxrBhIGLhuq90IMSR4bqndScsXHJcbiAgICAgICAgICAgIHRlbjogJ0NoxrBhIGLhuq90IMSR4bqndScsXHJcbiAgICAgICAgICAgIG1hTG93ZXI6ICcnLFxyXG4gICAgICAgICAgICB0ZW5Mb3dlcjogJ2NoxrBhIGLhuq90IMSR4bqndSdcclxuICAgICAgICB9XTtcclxuICAgICAgICBpZiAod29ya2Zsb3dzICYmIHdvcmtmbG93cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgd29ya2Zsb3dzLmZvckVhY2god29ya2Zsb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgd29ya2Zsb3cuZGF0YS5tYWNoaW5lcy5mb3JFYWNoKG1hY2hpbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TdGF0dXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtYWNoaW5lLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd1RlbjogbWFjaGluZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW46IG1hY2hpbmUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFMb3dlcjogbWFjaGluZS5jb2RlLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbkxvd2VyOiBtYWNoaW5lLm5hbWUudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhU291cmNlLnNvbWUoeCA9PiB4LnRlbkxvd2VyID09IGl0ZW1TdGF0dXMudGVuTG93ZXIgJiYgeC5tYUxvd2VyID09IGl0ZW1TdGF0dXMubWFMb3dlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5wdXNoKGl0ZW1TdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2FtZU5hbWUgPSBkYXRhU291cmNlLmZpbmQocSA9PiBxLnRlbkxvd2VyID09IGl0ZW1TdGF0dXMudGVuTG93ZXIgJiYgcS5tYUxvd2VyICE9IGl0ZW1TdGF0dXMubWFMb3dlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2FtZU5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TYW1lTmFtZS50ZW4gPSBgJHtpdGVtU2FtZU5hbWUucmF3VGVufSAoJHtpdGVtU2FtZU5hbWUuaWR9KWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU3RhdHVzLnRlbiA9IGAke2l0ZW1TdGF0dXMucmF3VGVufSAoJHtpdGVtU3RhdHVzLmlkfSlgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb2xQYXJlbnQgPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgIGZpZWxkOiBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogJ3RyYW5nVGhhaVY1JyxcclxuICAgICAgICAgICAgZGF0YVR5cGVSZWZGaWVsZDogJ3RyYW5nVGhhaVY1JyxcclxuICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvbHVtbixcclxuICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICBsYWJlbDogJ1Ry4bqhbmcgdGjDoWknLFxyXG4gICAgICAgICAgICB3aWR0aDogJzEyMHB4JyxcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBUZXh0QWxpZ24uQ2VudGVyLFxyXG4gICAgICAgICAgICBpc1RyZWU6IHRydWUsXHJcbiAgICAgICAgICAgIGZpZWxkVHJlZTogJ3BhcmVudElkJyxcclxuICAgICAgICAgICAgZGF0YVNvdXJjZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZE5lZWRHZXRSZWYudW5zaGlmdChjb2xQYXJlbnQpO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS51c2VyRGF0YSA9IHRoaXMubW9kZWwuYWR2YW5jZURhdGEudXNlckRhdGE7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB7XHJcbiAgICAgICAgICAgIC4uLmNvbFBhcmVudCxcclxuICAgICAgICAgICAgcmF3Q29sdW1uOiBjb2xQYXJlbnQsXHJcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcclxuICAgICAgICAgICAgZGF0YVR5cGU6IGNvbFBhcmVudC5kYXRhVHlwZVJlZkZpZWxkLFxyXG4gICAgICAgICAgICBmaWVsZDogJ3N0cicgKyBjb2xQYXJlbnQuZmllbGQsXHJcbiAgICAgICAgICAgIGFsbG93RmlsdGVyOiBjb2xQYXJlbnQuYWxsb3dGaWx0ZXIsXHJcbiAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29sdW1uXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2xQYXJlbnQudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLnB1c2goY29sUGFyZW50LCBjaGlsZHJlbik7XHJcbiAgICAgICAgdGhpcy5jcnVkTGlzdC5mb3JtYXRDb2x1bW5zKFtjb2xQYXJlbnQsIGNoaWxkcmVuXSk7XHJcbiAgICAgICAgdGhpcy5jcnVkTGlzdC5idWlsZEZpbHRlckNvbHVtbihbY29sUGFyZW50XSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXJDdXJyZW50ID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcclxuICAgICAgICBpZiAodXNlckN1cnJlbnQudXNlck5hbWUgPT0gJ2FkbWluJykge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xGb3JBZG1pbiA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnX192aWV3SGlzdG9yeScsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ19fdmlld0hpc3RvcnknLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDBweCcsXHJcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IFRleHRBbGlnbi5DZW50ZXJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLnB1c2goY29sRm9yQWRtaW4pO1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmZvcm1hdENvbHVtbnMoW2NvbEZvckFkbWluXSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuYnVpbGRGaWx0ZXJDb2x1bW4oW2NvbEZvckFkbWluXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrQWxsb3dUcmluaEt5KHJvd0RhdGEpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNZW51QnV0dG9ucyhyb3dEYXRhKSB7XHJcbiAgICAgICAgdGhpcy5yb3dEYXRhQ3VycmVudCA9IHJvd0RhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2FkZChldnQpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZSA9IGF3YWl0IHRoaXMudmFsaWRhdGVBZGQoKTtcclxuICAgICAgICBpZiAoIXJlc3VsdFZhbGlkYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YSA9IHt9O1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5BREQ7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5iZWZvcmVBZGQoKTtcclxuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBIZWFkZXIgPSBgVGjDqm0gbeG7m2kgJHt0aGlzLnNldHRpbmcub2JqZWN0TmFtZX1gO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5tYXNrQ2xhc3MgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHZhbGlkYXRlQWRkKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGJlZm9yZUFkZCgpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfdmlldyhyb3dEYXRhKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLlZJRVc7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5iZWZvcmVWaWV3KCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBvcHVwSGVhZGVyID0gYFhlbSAke3RoaXMuc2V0dGluZy5vYmplY3ROYW1lfWA7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YSA9IHRoaXMuY2xvbmVEYXRhKHJvd0RhdGEpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMubW9kaWZ5Vmlld01vZGVsKHJvd0RhdGEpO1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGJlZm9yZVZpZXcoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbW9kaWZ5Vmlld01vZGVsKHJvd0RhdGE6IGFueSkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHZhbGlkYXRlRWRpdChyb3dEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2VkaXQocm93RGF0YSwgc2NvcGVEYXRhRWRpdDogYW55ID0ge30pIHtcclxuICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZSA9IGF3YWl0IHRoaXMudmFsaWRhdGVFZGl0KHJvd0RhdGEpO1xyXG4gICAgICAgIGlmICghcmVzdWx0VmFsaWRhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmbGFzaFNob3cgPSByb3dEYXRhW0tleUZsYXNoU2hvd107XHJcbiAgICAgICAgZGVsZXRlIHJvd0RhdGFbS2V5Rmxhc2hTaG93XTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuRURJVDtcclxuICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZUVkaXQoKTtcclxuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBIZWFkZXIgPSBgQ+G6rXAgbmjhuq10ICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcclxuICAgICAgICB0aGlzLnNldHRpbmcubWFza0NsYXNzID0gZmxhc2hTaG93ID8gJ2hpZGUnIDogbnVsbDtcclxuICAgICAgICB0aGlzLnNjb3BlRGF0YUVkaXQgPSBzY29wZURhdGFFZGl0O1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB0aGlzLmNsb25lRGF0YShyb3dEYXRhKTtcclxuICAgICAgICBhd2FpdCB0aGlzLm1vZGlmeUVkaXRNb2RlbChyb3dEYXRhKTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhW0tleUZsYXNoU2hvd10gPSBmbGFzaFNob3c7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYmVmb3JlRWRpdCgpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb2RpZnlFZGl0TW9kZWwocm93RGF0YTogYW55KSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbG9uZURhdGEocm93RGF0YSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiByb3dEYXRhW3RoaXMuc2V0dGluZy5lbnRpdHlLZXldXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9taXNlRGVsZXRlSXRlbShyb3dEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5kZWxldGUocm93RGF0YS5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdmFsaWRhdGVEZWxldGUocm93RGF0YSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9kZWxldGUocm93RGF0YSkge1xyXG4gICAgICAgIGlmIChyb3dEYXRhLl9fZGlzYWJsZURlbGV0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3VsdFZhbGlkYXRlID0gYXdhaXQgdGhpcy52YWxpZGF0ZURlbGV0ZShyb3dEYXRhKTtcclxuICAgICAgICBpZiAoIXJlc3VsdFZhbGlkYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcnMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb21pc2VEZWxldGVJdGVtKHJvd0RhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zaG93VmVyc2lvbkJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5SRUxPQURfREFUQV9WRVJTSU9OLCB7fSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YUVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9taXNlRGVsZXRlSXRlbXMoaXRlbXMpIHtcclxuICAgICAgICBjb25zdCBpZHMgPSBpdGVtcy5tYXAoeCA9PiB4LmlkKS5qb2luKCcsJyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5kZWxldGVNYW55KGlkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgX2RlbGV0ZU11bHRpcGxlKGl0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcnMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb21pc2VEZWxldGVJdGVtcyhpdGVtcykudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkJlZm9yZUNhbmNlbCgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZVNhdmVkKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlQ2FuY2VsKCRldmVudCkge1xyXG4gICAgICAgIHRoaXMub25CZWZvcmVDYW5jZWwoKTtcclxuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlNZXRhZGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNldHRpbmcuZW50aXR5TWV0YWRhdGFTZXR0aW5nLmRhdGEgPSB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuZ2V0V2YxU2V0dGluZygpO1xyXG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zZXR0aW5nLmVudGl0eU1ldGFkYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFbnRpdHlNZXRhZGF0YVNlcnZpY2UpO1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlID0gdGhpcy5zZXR0aW5nLmVudGl0eU1ldGFkYXRhU2VydmljZTtcclxuICAgICAgICAgICAgLy8gICAgIGF3YWl0IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5sb2FkKHRoaXMuX2Jhc2VTZXJ2aWNlLCB0aGlzLmNvbnRleHQsIHRydWUpOyAgLy8gZm9yY2UgbG9hZCDEkeG7gyDEkeG7jWMgdOG7qyBjc2RsXHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNldHRpbmcuZW50aXR5TWV0YWRhdGFTZXR0aW5nLmRhdGEgPSB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuZ2V0V2YxU2V0dGluZygpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BsZWFzZSBpbmNsdWRlIEVudGl0eU1ldGFkYXRhU2VydmljZSBpbiBwcm92aWRlciBvZiBjb21wb25lbnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVsb2FkKCkge1xyXG4gICAgICAgIHRoaXMuY3J1ZExpc3QucmVsb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3RyaWdnZXJQcm9jZXNzRGF0YShncmlkSW5mbz86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzRGF0YShncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzRGF0YShncmlkSW5mbz86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NydWRMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZ3JpZEluZm8pIHtcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvID0gdGhpcy5jcnVkTGlzdC5nZXRHcmlkSW5mbygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIWdyaWRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZUluZm86IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IDk5OVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgc29ydHM6IFtdXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldERhdGEoZ3JpZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvOiBHcmlkSW5mbyk6IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGdldERhdGEoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSAmJiB0aGlzLm1vZGVsLnJlYWR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLm1vZGlmeUZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBmaWx0ZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBoYXNOdWxsVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN0VmFsdWVzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShmaWx0ZXIudmFsdWUpLmZvckVhY2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc051bGxWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0VmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc051bGxWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdFZhbHVlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gT3BlcmF0b3IuaXNOdWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5sb2dpYyA9ICdvcic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWVsZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5vcGVyYXRvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSwgT3BlcmF0b3IuaXNOdWxsLCAnJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBPcGVyYXRvci5pbiwgcmVzdFZhbHVlcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHRNb2RpZnkgPSBhd2FpdCB0aGlzLm1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE1vZGlmeSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC50b3RhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5cyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdW5tYXJrTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZG9HZXRSZXF1ZXN0KGdyaWRJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX21hcmtMb2FkaW5nKCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuY3J1ZExpc3QpIHtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5hZGp1c3RQb3NpdGlvbkxvYWRpbmdNYXNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnTcOheSBjaOG7pyBwaOG6o24gaOG7k2kgcXXDoSBsw6J1LCB2dWkgbMOybmcga2nhu4NtIHRyYSBs4bqhaSDEkcaw4budbmcgdHJ1eeG7gW4gbeG6oW5nIScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LCAyMDAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZVJlbG9hZGVkKGV2dCA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgdGhpcy5hZnRlclJlbG9hZGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWZ0ZXJSZWxvYWRlZCgpIHsgfVxyXG5cclxuICAgIF91bm1hcmtMb2FkaW5nKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcclxuICAgICAgICB0aGlzLm1vZGVsLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpcmVEYXRhTG9hZGVkKHN1Y2Nlc3M6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgdGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LnByb2Nlc3NCYXNlRGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCB0aGlzLnBsdXNVcmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGFDdXN0b20oZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZG9HZXRSZXF1ZXN0KGdyaWRJbmZvOiBHcmlkSW5mbykge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXN0b21HZXREYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm8pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzR2V0RGF0YShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dIdHRwVW5rbm93RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRGF0YUxvYWRlZChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YUN1c3RvbShncmlkSW5mbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0dldERhdGEocmVzcG9uc2U6IFJlc3BvbnNlUmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5leHBhbmRlZFJvd0tleXMgPSB7fTtcclxuICAgICAgICB0aGlzLm1vZGVsLnRvdGFsID0gcmVzcG9uc2UudG90YWxSZWNvcmQ7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlUmVuZGVyRGF0YVNvdXJjZShyZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YS5mb3JFYWNoKHJvd0l0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5c1tyb3dJdGVtW3RoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGRdXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NGb3JlYWNoSXRlbUFmdGVyR2V0RGF0YShyb3dJdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSByZXNwb25zZS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLndvcmtmbG93U2V0dGluZykge1xyXG4gICAgICAgICAgICAvLyBM4bqleSByYSBuaOG7r25nIHRy4bqhbmcgdGjDoWkgbcOgIGLhuqNuIGdoaSBraMO0bmcgxJHGsOG7o2Mgc+G7rWFcclxuICAgICAgICAgICAgY29uc3Qgc3RhdHVzTm90QWxsb3dFZGl0cyA9IHRoaXMuc2V0dGluZy53b3JrZmxvd1NldHRpbmcuc3RhdHVzZXMuZmlsdGVyKHAgPT4gIXAub3B0aW9ucy5jaG9QaGVwU3VhKS5tYXAoaXRlbSA9PiBpdGVtLnRyYW5nVGhhaUNvbnRhaW5lci5tYSk7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uX2luZGV4ID0gKHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlIC0gMSkgKiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUgKyAxICsgaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAvLyBpdGVtLmN1cnJlbnRTdGF0ZUNvZGUgPSBpdGVtLmN1cnJlbnRTdGF0ZUNvZGU7XHJcbiAgICAgICAgICAgICAgICBpdGVtLl9fZGlzYWJsZUVkaXQgPSBzdGF0dXNOb3RBbGxvd0VkaXRzLmluZGV4T2YoaXRlbS5jdXJyZW50U3RhdGVDb2RlKSA+IC0xO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uX2luZGV4ID0gKHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlIC0gMSkgKiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUgKyAxICsgaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAvLyBpdGVtLmN1cnJlbnRTdGF0ZUNvZGUgPSBpdGVtLmN1cnJlbnRTdGF0ZUNvZGU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzZXRTZWxlY3RlZEl0ZW1zID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zICYmIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJHZXREYXRhKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2dldFJlZkRhdGFEcm9wZG93bih0aGlzLm1vZGVsLmRhdGFTb3VyY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGJlZm9yZVJlbmRlckRhdGFTb3VyY2UoZGF0YXNvdXJjZTogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gZGF0YXNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByb2Nlc3NGb3JlYWNoSXRlbUFmdGVyR2V0RGF0YSh4OiBhbnkpIHtcclxuICAgICAgICAvLyBwcm9jZXNzIHdvcmtmbG93XHJcbiAgICAgICAgaWYgKHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlLmlzV2YxKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuZ2V0V2YxU2V0dGluZygpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudXNlcklkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoeFsnbWV0YWRhdGFTdGF0dXMnXSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhbJ2NyZWF0ZWRCeSddICE9IGN1cnJlbnRVc2VySWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVFZGl0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVEZWxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHhbJ21ldGFkYXRhU3RhdHVzJ10gPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0geC5jb3VudE9mQXBwcm92ZSA/IHguY291bnRPZkFwcHJvdmUgKyAxIDogMTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSAnb2JqZWN0SXNVc2VyJyArIGNvdW50O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVELTExOTggLSBOYW1OSCAtIFRyxrDhu51uZyBo4bujcCBzZXR0aW5nIGNoxrBhIGPDsyBk4buvIGxp4buHdSB0aMOsIGLhu4sgZXhjZXB0aW9uLCBkbyBjw6FjIGLhuqNuIGdoaSB0aMOqbSBt4bubaSB0csaw4bubYyBraGkgYuG6rXQgcXV5IHRyw6xuaCB0aMOsIGtvIGPDsyBk4buvIGxp4buHdSBuw6B5XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ1trZXldLnNvbWUoeCA9PiB4ID09IGN1cnJlbnRVc2VySWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVEZWxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEVORCBVRC0xMTk4XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh4WydtZXRhZGF0YVN0YXR1cyddID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHguX19kaXNhYmxlRGVsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlckdldERhdGEoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2dldFJlZkRhdGFEcm9wZG93bihkYXRhU291cmNlKSB7XHJcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UgJiYgZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJQcm9taXNlRG9udE5lZWRXYWl0ID0gW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJTY2hlbWFEb250TmVlZFdhaXQgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2NoZW1hIG9mIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZE5lZWRHZXRSZWYpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYS5maWVsZDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hW0tleUZpZWxkR2V0UmVmVHlwZV0gPT0gRW51bUdldFJlZlR5cGUuU0VSVkVSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZm9yY2VHZXREYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uICYmIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5yYXdDb2x1bW4gJiYgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbi5maWVsZCA9PSBzY2hlbWEuZmllbGQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLnNldHRpbmcuY29scy5zb21lKGl0ZW0gPT4gaXRlbS5maWVsZCA9PSAnc3RyJyArIGZpZWxkICYmIGl0ZW0udmlzaWJsZSAhPSBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJWYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBjdXJyZW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaWRzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkcyA9IGlkcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzLmZvckVhY2goaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhcnJWYWx1ZS5zb21lKHAgPT4gcCA9PSBjdXJyZW50VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJWYWx1ZS5wdXNoKGN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuYmFzZVNlcnZpY2UgaW5zdGFuY2VvZiBNYXN0ZXJEYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYS5ncm91cENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgYXJyVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvbnMoc2NoZW1hKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gW3RoaXMubmV3RmlsdGVyKHNjaGVtYS52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgYXJyVmFsdWUpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tb2RpZnlGaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYS5tb2RpZnlGaWx0ZXIoZmlsdGVycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEub3JkZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlLCBzY2hlbWEsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJQcm9taXNlRG9udE5lZWRXYWl0LnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclNjaGVtYURvbnROZWVkV2FpdC5wdXNoKHNjaGVtYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY0dldExhYmVsID0gaXRlbSA9PiBpdGVtW3NjaGVtYS5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ2xhYmVsJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY0dldExhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtID0gc2NoZW1hLmRhdGFTb3VyY2UuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBpdGVtRGF0YVtmaWVsZF0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFyclByb21pc2VEb250TmVlZFdhaXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyclJlcyA9IGF3YWl0IFByb21pc2UuYWxsKGFyclByb21pc2VEb250TmVlZFdhaXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFyclNjaGVtYURvbnROZWVkV2FpdC5mb3JFYWNoKChzY2hlbWEsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2UsIHNjaGVtYSwgYXJyUmVzW2luZGV4XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFmdGVyR2V0UmVmRGF0YURyb3Bkb3duKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5VG9UcmluaEt5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlOiBhbnlbXSwgc2NoZW1hOiBDb2x1bW5TY2hlbWFCYXNlLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGRhdGEgPz89IFtdO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hLmZpZWxkO1xyXG4gICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW1bc2NoZW1hLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcclxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93ID0gKHJvd0l0ZW0sIGRhdGEpID0+IHsgfTtcclxuICAgICAgICBsZXQgZnVuY0dldFJlZkRhdGFSb3cgPSAocmVmSXRlbXMpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZkl0ZW1zLm1hcChpdGVtID0+IGZ1bmNHZXRMYWJlbChpdGVtKSkuam9pbihgJHtzY2hlbWEuc2VwYXJhdG9yfSBgKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY1NldFZhbHVlUm93KSB7XHJcbiAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3cpIHtcclxuICAgICAgICAgICAgZnVuY0dldFJlZkRhdGFSb3cgPSBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlkcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gaWRzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW1zID0gZGF0YS5maWx0ZXIoaSA9PiBpZHMuc29tZShxID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBxKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldFJlZkRhdGFSb3cocmVmSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3coaXRlbURhdGEsIHJlZkl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSBkYXRhLmZpbmQoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgaXRlbURhdGFbZmllbGRdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KGl0ZW1EYXRhLCByZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZnRlckdldFJlZkRhdGFEcm9wZG93bihmaWVsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVEcm9wZG93bk9wdGlvbnMoc2NoZW1hOiBDb2x1bW5TY2hlbWFCYXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wZG93bk9wdGlvbnMoe1xyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHNjaGVtYS5kaXNwbGF5RmllbGQsXHJcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHNjaGVtYS52YWx1ZUZpZWxkLFxyXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHNjaGVtYS5maWVsZFBsdXMsXHJcbiAgICAgICAgICAgIGZpZWxkVHJlZTogc2NoZW1hLmZpZWxkVHJlZSxcclxuICAgICAgICAgICAgZmllbGRQYXJlbnRUcmVlSXRlbTogc2NoZW1hLmZpZWxkUGFyZW50VHJlZUl0ZW0sXHJcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbDogc2NoZW1hLmZ1bmNHZXRMYWJlbCxcclxuICAgICAgICAgICAgc29ydEZpZWxkOiBzY2hlbWEuc29ydEZpZWxkLFxyXG4gICAgICAgICAgICBzb3J0RGlyOiBzY2hlbWEuc29ydERpcixcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhRmluaXNoOiBzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24oZmllbGQ6IHN0cmluZykge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lcmdlSW5mb1RvQ29sdW1uU2NoZW1hKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uTW9kZWxTY2hlbWEgPSB0aGlzLnNldHRpbmcubW9kZWxTY2hlbWFzLmZpbmQocCA9PiBwLmZpZWxkID09IGNvbC5maWVsZCk7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW5Nb2RlbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgY29sLmxhYmVsID0gY29sdW1uTW9kZWxTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgICAgIGNvbC5mdWxsTGFiZWwgPSBjb2x1bW5Nb2RlbFNjaGVtYS5mdWxsTmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICghY29sLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sLmRhdGFUeXBlID0gdGhpcy5nZXREYXRhVHlwZShjb2x1bW5Nb2RlbFNjaGVtYS5kYXRhVHlwZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldERhdGFUeXBlKHR5cGU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0eXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2VuZXJhdGVGaWVsZFNlYXJjaFRleHQoKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29sLmZ1bGxUZXh0U2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0LnB1c2goY29sLmZpZWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0LmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBmaWVsZCwgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sIHNvdXJjZUZpZWxkOiAnX2snIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmZpbHRlclRlbXBsYXRlQWR2cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpbHRlclRlbXBsYXRlQWR2cy5zcGxpY2UoMCwgMCwgbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyc1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVQZXJtaXNzaW9uKHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jcnVkTGlzdC52YWxpZGF0ZVBlcm1pc3Npb24ocm93RGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iXX0=
843
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY2xhc3Nlcy9iYXNlL2RhdGEtbGlzdC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDeEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDbkgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFckcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8s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VyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2RixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtnQkFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQztvQkFDcEQsS0FBSyxFQUFFLElBQUk7b0JBQ1gsT0FBTztpQkFDVixDQUFDLENBQUMsQ0FBQzthQUNQO1NBQ0o7SUFDTCxDQUFDO0lBRWEsa0JBQWtCLENBQUMsT0FBTzs7WUFDcEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNmLE9BQU8sTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzFEO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztLQUFBOzs7WUF0M0JKLFNBQVM7OztZQTVCNEMsUUFBUTs7O3NCQStCekQsU0FBUyxTQUFDLFVBQVU7MEJBYXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBDcnVkTGlzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3J1ZC9jcnVkLWxpc3QvY3J1ZC1saXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVudGl0eVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9lbnRpdHktcGVybWlzc2lvbi9zZXJ2aWNlcy5jcy9lbnRpdHktcGVybWlzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RhdGVNYWNoaW5lc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3N0YXRlbWFjaGluZXMvc2VydmljZXMvc3RhdGVtYWNoaW5lcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2ZJdGVtIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9tb2RlbHMvbW9kZWxzJztcclxuaW1wb3J0IHsgRW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvZW50aXR5LXdvcmtmbG93LWhpc3Rvcnkuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL2VudGl0eS13b3JrZmxvdy1zZXR0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9zZXJ2aWNlcy93b3JrZmxvdy1wZXJtaXNzaW9uLWRldGFpbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL3dvcmtmbG93LXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcclxuaW1wb3J0IHsgRmlsdGVyLCBHcmlkSW5mbyB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uLy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBEYXRhU291cmNlV29ya2Zsb3dDb3JlU3RhdHVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3dvcmtmbG93LWNvcmUtc3RhdHVzLmVudW0nO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XHJcbmltcG9ydCB7IEN1c3RvbVJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXN0b20tcm91dGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktbWV0YWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IExpc3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGlzdC1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hc3RlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFzdGVyLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudW1HZXRSZWZUeXBlLCBGb3JtU3RhdGUsIEtleUZpZWxkR2V0UmVmVHlwZSwgS2V5Rmxhc2hTaG93LCBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQ29sdW1uU2NoZW1hQmFzZSwgQ29udHJvbFR5cGUsIENydWRGb3JtRGF0YSwgQ3J1ZExpc3REYXRhLCBDcnVkTGlzdFNldHRpbmcsIERyb3Bkb3duT3B0aW9ucywgT3BlcmF0b3IsIFRleHRBbGlnbiB9IGZyb20gJy4uL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4vY29tcG9uZW50LWJhc2UnO1xyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhTGlzdEJhc2UgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xyXG4gICAgcHVibGljIGNydWRMaXN0OiBDcnVkTGlzdENvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ2NydWRMaXN0Jykgc2V0IGNvbnRlbnQoY29udGVudDogQ3J1ZExpc3RDb21wb25lbnQpIHtcclxuICAgICAgICBjb25zdCBiZWZvcmVWYWx1ZSA9IHRoaXMuY3J1ZExpc3Q7XHJcbiAgICAgICAgaWYgKGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdCA9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgIGlmICghYmVmb3JlVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291bnRSZWFkeSsrO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY291bnRSZWFkeSA8IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBASW5wdXQoKSBwYXJlbnRNb2RlbDogQ3J1ZExpc3REYXRhO1xyXG5cclxuICAgIHByaXZhdGUgbm90Q29uZmlnQmFzZVNlcnZpY2VNZXNzYWdlID0gJ0NoxrBhIGPhuqV1IGjDrG5oIENSVUQgYmFzZSBzZXJ2aWNlJztcclxuICAgIGRvTm90Q2hlY2tCYXNlU2VydmljZSA9IGZhbHNlO1xyXG4gICAgc2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xyXG4gICAgbW9kZWw6IENydWRMaXN0RGF0YSA9IG5ldyBDcnVkTGlzdERhdGEoKTtcclxuICAgIGZvcm1Nb2RlbDogQ3J1ZEZvcm1EYXRhID0gbmV3IENydWRGb3JtRGF0YSgpO1xyXG4gICAgc2NvcGVEYXRhRWRpdDogYW55ID0ge307XHJcbiAgICBzaG93RGV0YWlsRm9ybSA9IGZhbHNlO1xyXG4gICAgY291bnRSZWFkeTogbnVtYmVyID0gMDtcclxuICAgIGhhc0NydWRMaXN0ID0gdHJ1ZTtcclxuICAgIGN1c3RvbUdldERhdGEgPSBmYWxzZTtcclxuICAgIHJlYWR5VG9UcmluaEt5ID0gZmFsc2U7XHJcbiAgICBwbHVzVXJsID0gJyc7XHJcbiAgICByb3dEYXRhQ3VycmVudDogYW55O1xyXG5cclxuICAgIGlzQ3J1ZExpc3QgPSBmYWxzZTtcclxuICAgIGxvYWRpbmdUaW1lb3V0O1xyXG5cclxuICAgIHByb3RlY3RlZCBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2N1c3RvbVJvdXRlclNlcnZpY2U6IEN1c3RvbVJvdXRlclNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2xpc3RIZWxwZXJTZXJ2aWNlOiBMaXN0SGVscGVyU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfcm91dGVyOiBSb3V0ZXI7XHJcbiAgICBwcm90ZWN0ZWQgX2NydWRTZXJ2aWNlOiBDcnVkU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfZGF0ZVBpcGU6IERhdGVQaXBlO1xyXG4gICAgcHJvdGVjdGVkIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWY7XHJcbiAgICBwcm90ZWN0ZWQgX2VudGl0eU1ldGFkYXRhU2VydmljZTogRW50aXR5TWV0YWRhdGFTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF91c2VyU2VydmljZTogVXNlclNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX21hc3RlckRhdGFTZXJ2aWNlOiBNYXN0ZXJEYXRhU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfZW50aXR5V29ya2Zsb3dTZXR0aW5nU2VydmljZTogRW50aXR5V29ya2Zsb3dTZXR0aW5nU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfZW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZTogRW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfZW50aXR5UGVybWlzc2lvblNlcnZpY2U6IEVudGl0eVBlcm1pc3Npb25TZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF93b3JrZmxvd1NldHRpbmdTZXJ2aWNlOiBXb3JrZmxvd1NldHRpbmdzU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfd29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZTogV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfc3RhdGVNYWNoaW5lc1NlcnZpY2U6IFN0YXRlTWFjaGluZXNTZXJ2aWNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIF9pbmplY3RvcjogSW5qZWN0b3JcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgICAgIHRoaXMuX3JvdXRlciA9IHRoaXMuX2luamVjdG9yLmdldChSb3V0ZXIpO1xyXG4gICAgICAgIHRoaXMuX2N1c3RvbVJvdXRlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3VzdG9tUm91dGVyU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fbGlzdEhlbHBlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTGlzdEhlbHBlclNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9leHBvcnRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEV4cG9ydFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENydWRTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9kYXRlUGlwZSA9IHRoaXMuX2luamVjdG9yLmdldChEYXRlUGlwZSk7XHJcbiAgICAgICAgdGhpcy5fY2QgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFVzZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9tYXN0ZXJEYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChNYXN0ZXJEYXRhU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZW50aXR5V29ya2Zsb3dTZXR0aW5nU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9lbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2VudGl0eVBlcm1pc3Npb25TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eVBlcm1pc3Npb25TZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl93b3JrZmxvd1NldHRpbmdTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93U2V0dGluZ3NTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl93b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3N0YXRlTWFjaGluZXNTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFN0YXRlTWFjaGluZXNTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMgPSB0aGlzLnNldHRpbmcuY29scy5maWx0ZXIocSA9PiAhcS5yZW1vdmVPbkluaXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1lcmdlSW5mb1RvQ29sdW1uU2NoZW1hKCk7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZpZWxkU2VhcmNoVGV4dCgpO1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5kb05vdENoZWNrQmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyh0aGlzLm5vdENvbmZpZ0Jhc2VTZXJ2aWNlTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdXb3JrZmxvdykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0S2V5V29ya2Zsb3dTZXR0aW5nKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2VudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2UucmVnaXN0ZXJTZXJ2aWNlKGtleSwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKTtcclxuICAgICAgICAgICAgdGhpcy5fZW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZS5yZWdpc3RlclNlcnZpY2Uoa2V5LCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9lbnRpdHlQZXJtaXNzaW9uU2VydmljZS5yZWdpc3RlclNlcnZpY2Uoa2V5LCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xyXG4gICAgICAgICAgICB0aGlzLl93b3JrZmxvd1NldHRpbmdTZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hlY2tBbGxvd1RyaW5oS3kgPSB0aGlzLmNoZWNrQWxsb3dUcmluaEt5LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNoZWNrQWxsb3dUcmluaEt5ID0gdGhpcy5jaGVja0FsbG93VHJpbmhLeTtcclxuICAgICAgICB0aGlzLmdldE1lbnVCdXR0b25zID0gdGhpcy5nZXRNZW51QnV0dG9ucy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUFmdGVyVmlld0luaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGhhbmRsZUFmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSAmJiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UudXNlV29ya2Zsb3cpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0hhc1dvcmtmbG93KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hlY2tIYXNFbmFibGVXb3JrZmxvd0NvcmVTdGF0dXMoKTtcclxuICAgICAgICB0aGlzLmNvdW50UmVhZHkrKztcclxuICAgICAgICBpZiAodGhpcy5jb3VudFJlYWR5ID4gMSkge1xyXG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBjaGVja0hhc0VuYWJsZVdvcmtmbG93Q29yZVN0YXR1cygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvcmVTdGF0dXMpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sUGFyZW50ID0gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICd3b3JrZmxvd0NvcmVTdGF0dXMnLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdUcuG6oW5nIHRow6FpIHRyw6xuaCBrw70nLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICd3b3JrZmxvd0NvcmVTdGF0dXMnLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGVSZWZGaWVsZDogJ3dvcmtmbG93Q29yZVN0YXR1cycsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEyMHB4JyxcclxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IERhdGFTb3VyY2VXb3JrZmxvd0NvcmVTdGF0dXMsXHJcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZE5lZWRHZXRSZWYudW5zaGlmdChjb2xQYXJlbnQpO1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHtcclxuICAgICAgICAgICAgICAgIC4uLmNvbFBhcmVudCxcclxuICAgICAgICAgICAgICAgIHJhd0NvbHVtbjogY29sUGFyZW50LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IGNvbFBhcmVudC5kYXRhVHlwZVJlZkZpZWxkLFxyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdzdHInICsgY29sUGFyZW50LmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGNvbFBhcmVudC5hbGxvd0ZpbHRlcixcclxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvbHVtblxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb2xQYXJlbnQudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29scy5wdXNoKGNvbFBhcmVudCwgY2hpbGRyZW4pO1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmZvcm1hdENvbHVtbnMoW2NvbFBhcmVudCwgY2hpbGRyZW5dKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5idWlsZEZpbHRlckNvbHVtbihbY29sUGFyZW50XSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tIYXNXb3JrZmxvdygpIHtcclxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0S2V5V29ya2Zsb3dTZXR0aW5nKCk7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuX2VudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2UuZ2V0U2V0dGluZyhrZXkpO1xyXG4gICAgICAgIGlmIChkYXRhICE9IG51bGwgJiYgZGF0YS5kYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IGRhdGEuZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLndvcmtmbG93U2V0dGluZyA9IHNldHRpbmc7XHJcbiAgICAgICAgICAgIC8vIEzhuqV5IHRow7RuZyB0aW4gcXV54buBbiBj4bunYSBuZ8aw4budaSBkw7luZ1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyRGF0YSA9IGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEluZm9Gb3JXb3JrZmxvdyh0aGlzLl91c2VyU2VydmljZS5nZXRVc2VySWRDb21iaW5lKCkpO1xyXG4gICAgICAgICAgICBpZiAodXNlckRhdGEuZGF0YSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0zhu5dpIGzhuqV5IHRow7RuZyB0aW4gbmfGsOG7nWkgZMO5bmcnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmFkdmFuY2VEYXRhLnVzZXJEYXRhID0gdXNlckRhdGEuZGF0YTtcclxuICAgICAgICAgICAgY29uc3QgY29sUGFyZW50ID0gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6IFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2VudGl0eVdvcmtmbG93U3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlUmVmRmllbGQ6ICdlbnRpdHlXb3JrZmxvd1N0YXR1cycsXHJcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29sdW1uLFxyXG4gICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdUcuG6oW5nIHRow6FpJyxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTIwcHgnLFxyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZTogc2V0dGluZy5zdGF0dXNlcy5tYXAoaXRlbSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLm1hLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbjogaXRlbS50ZW5cclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkTmVlZEdldFJlZi51bnNoaWZ0KGNvbFBhcmVudCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS51c2VyRGF0YSA9IHRoaXMubW9kZWwuYWR2YW5jZURhdGEudXNlckRhdGE7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uY29sUGFyZW50LFxyXG4gICAgICAgICAgICAgICAgcmF3Q29sdW1uOiBjb2xQYXJlbnQsXHJcbiAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogY29sUGFyZW50LmRhdGFUeXBlUmVmRmllbGQsXHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3N0cicgKyBjb2xQYXJlbnQuZmllbGQsXHJcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogY29sUGFyZW50LmFsbG93RmlsdGVyLFxyXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29sdW1uXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbFBhcmVudC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLnB1c2goY29sUGFyZW50LCBjaGlsZHJlbik7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sUGFyZW50LCBjaGlsZHJlbl0pO1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xQYXJlbnRdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RGF0YVNvdXJjZVRyYW5nVGhhaVdvcmtmbG93KCkge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGdldFdvcmtmbG93RGV0YWlsQnlXb3JrZmxvd1NldHRpbmcoaXRlbVdvcmtmbG93U2V0dGluZzogYW55KSB7XHJcbiAgICAgICAgaWYgKGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlcyAmJiAhQXJyYXkuaXNBcnJheShpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXMpKSB7XHJcbiAgICAgICAgICAgIGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlcyA9IGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2Rlcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3b3JrZmxvd3MgPSAoYXdhaXQgdGhpcy5fc3RhdGVNYWNoaW5lc1NlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdjb2RlJywgT3BlcmF0b3IuaW4sIGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlcylcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgbmV3IERyb3Bkb3duT3B0aW9ucyh7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiAnY29kZScsXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6ICd0aXRsZScsXHJcbiAgICAgICAgICAgICAgICBmaWVsZFBsdXM6ICdkYXRhJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICkpO1xyXG4gICAgICAgIHdvcmtmbG93cy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpdGVtLmRhdGEgPSBKU09OLnBhcnNlKGl0ZW0uZGF0YSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlTWFjaGluZURhdGEgPSBpdGVtLmRhdGE7XHJcbiAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9ucyA9IHt9O1xyXG4gICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLm1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnNbbWFjaGluZS5jb2RlXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5jb25uZWN0aW9ucy5mb3JFYWNoKGNvbm4gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25uLnNvdXJjZSA9PSBtYWNoaW5lLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9uc1ttYWNoaW5lLmNvZGVdLnB1c2goY29ubik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dzID0gd29ya2Zsb3dzO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhcHBlbmRDb2xXb3JrZmxvd1N0YXR1cyh3b3JrZmxvd3M6IFdmSXRlbVtdKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IFt7XHJcbiAgICAgICAgICAgIGlkOiBudWxsLFxyXG4gICAgICAgICAgICByYXdUZW46ICdDaMawYSBi4bqvdCDEkeG6p3UnLFxyXG4gICAgICAgICAgICB0ZW46ICdDaMawYSBi4bqvdCDEkeG6p3UnLFxyXG4gICAgICAgICAgICBtYUxvd2VyOiAnJyxcclxuICAgICAgICAgICAgdGVuTG93ZXI6ICdjaMawYSBi4bqvdCDEkeG6p3UnXHJcbiAgICAgICAgfV07XHJcbiAgICAgICAgaWYgKHdvcmtmbG93cyAmJiB3b3JrZmxvd3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHdvcmtmbG93cy5mb3JFYWNoKHdvcmtmbG93ID0+IHtcclxuICAgICAgICAgICAgICAgIHdvcmtmbG93LmRhdGEubWFjaGluZXMuZm9yRWFjaChtYWNoaW5lID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU3RhdHVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbWFjaGluZS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByYXdUZW46IG1hY2hpbmUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVuOiBtYWNoaW5lLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hTG93ZXI6IG1hY2hpbmUuY29kZS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW5Mb3dlcjogbWFjaGluZS5uYW1lLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YVNvdXJjZS5zb21lKHggPT4geC50ZW5Mb3dlciA9PSBpdGVtU3RhdHVzLnRlbkxvd2VyICYmIHgubWFMb3dlciA9PSBpdGVtU3RhdHVzLm1hTG93ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UucHVzaChpdGVtU3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVNhbWVOYW1lID0gZGF0YVNvdXJjZS5maW5kKHEgPT4gcS50ZW5Mb3dlciA9PSBpdGVtU3RhdHVzLnRlbkxvd2VyICYmIHEubWFMb3dlciAhPSBpdGVtU3RhdHVzLm1hTG93ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVNhbWVOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2FtZU5hbWUudGVuID0gYCR7aXRlbVNhbWVOYW1lLnJhd1Rlbn0gKCR7aXRlbVNhbWVOYW1lLmlkfSlgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVN0YXR1cy50ZW4gPSBgJHtpdGVtU3RhdHVzLnJhd1Rlbn0gKCR7aXRlbVN0YXR1cy5pZH0pYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29sUGFyZW50ID0gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICBmaWVsZDogV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSxcclxuICAgICAgICAgICAgZGF0YVR5cGU6ICd0cmFuZ1RoYWlWNScsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlUmVmRmllbGQ6ICd0cmFuZ1RoYWlWNScsXHJcbiAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW4sXHJcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcclxuICAgICAgICAgICAgbGFiZWw6ICdUcuG6oW5nIHRow6FpJyxcclxuICAgICAgICAgICAgd2lkdGg6ICcxMjBweCcsXHJcbiAgICAgICAgICAgIHRleHRBbGlnbjogVGV4dEFsaWduLkNlbnRlcixcclxuICAgICAgICAgICAgaXNUcmVlOiB0cnVlLFxyXG4gICAgICAgICAgICBmaWVsZFRyZWU6ICdwYXJlbnRJZCcsXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2VcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmLnVuc2hpZnQoY29sUGFyZW50KTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEudXNlckRhdGEgPSB0aGlzLm1vZGVsLmFkdmFuY2VEYXRhLnVzZXJEYXRhO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0ge1xyXG4gICAgICAgICAgICAuLi5jb2xQYXJlbnQsXHJcbiAgICAgICAgICAgIHJhd0NvbHVtbjogY29sUGFyZW50LFxyXG4gICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiBjb2xQYXJlbnQuZGF0YVR5cGVSZWZGaWVsZCxcclxuICAgICAgICAgICAgZmllbGQ6ICdzdHInICsgY29sUGFyZW50LmZpZWxkLFxyXG4gICAgICAgICAgICBhbGxvd0ZpbHRlcjogY29sUGFyZW50LmFsbG93RmlsdGVyLFxyXG4gICAgICAgICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvbHVtblxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sUGFyZW50LnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY29scy5wdXNoKGNvbFBhcmVudCwgY2hpbGRyZW4pO1xyXG4gICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sUGFyZW50LCBjaGlsZHJlbl0pO1xyXG4gICAgICAgIHRoaXMuY3J1ZExpc3QuYnVpbGRGaWx0ZXJDb2x1bW4oW2NvbFBhcmVudF0pO1xyXG5cclxuICAgICAgICBjb25zdCB1c2VyQ3VycmVudCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICAgICAgaWYgKHVzZXJDdXJyZW50LnVzZXJOYW1lID09ICdhZG1pbicpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sRm9yQWRtaW4gPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ19fdmlld0hpc3RvcnknLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdfX3ZpZXdIaXN0b3J5JyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnJyxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwcHgnLFxyXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiBUZXh0QWxpZ24uQ2VudGVyXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29scy5wdXNoKGNvbEZvckFkbWluKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5mb3JtYXRDb2x1bW5zKFtjb2xGb3JBZG1pbl0pO1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xGb3JBZG1pbl0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjaGVja0FsbG93VHJpbmhLeShyb3dEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWVudUJ1dHRvbnMocm93RGF0YSkge1xyXG4gICAgICAgIHRoaXMucm93RGF0YUN1cnJlbnQgPSByb3dEYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9hZGQoZXZ0KSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0VmFsaWRhdGUgPSBhd2FpdCB0aGlzLnZhbGlkYXRlQWRkKCk7XHJcbiAgICAgICAgaWYgKCFyZXN1bHRWYWxpZGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB7fTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuQUREO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlQWRkKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBvcHVwSGVhZGVyID0gYFRow6ptIG3hu5tpICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcclxuICAgICAgICB0aGlzLnNldHRpbmcubWFza0NsYXNzID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB2YWxpZGF0ZUFkZCgpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBiZWZvcmVBZGQoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3ZpZXcocm93RGF0YSkge1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5WSUVXO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlVmlldygpO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5wb3B1cEhlYWRlciA9IGBYZW0gJHt0aGlzLnNldHRpbmcub2JqZWN0TmFtZX1gO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5tYXNrQ2xhc3MgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB0aGlzLmNsb25lRGF0YShyb3dEYXRhKTtcclxuICAgICAgICBhd2FpdCB0aGlzLm1vZGlmeVZpZXdNb2RlbChyb3dEYXRhKTtcclxuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBiZWZvcmVWaWV3KCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vZGlmeVZpZXdNb2RlbChyb3dEYXRhOiBhbnkpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZWRpdChyb3dEYXRhLCBzY29wZURhdGFFZGl0OiBhbnkgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IGZsYXNoU2hvdyA9IHJvd0RhdGFbS2V5Rmxhc2hTaG93XTtcclxuICAgICAgICBkZWxldGUgcm93RGF0YVtLZXlGbGFzaFNob3ddO1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5FRElUO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlRWRpdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5wb3B1cEhlYWRlciA9IGBD4bqtcCBuaOG6rXQgJHt0aGlzLnNldHRpbmcub2JqZWN0TmFtZX1gO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5tYXNrQ2xhc3MgPSBmbGFzaFNob3cgPyAnaGlkZScgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NvcGVEYXRhRWRpdCA9IHNjb3BlRGF0YUVkaXQ7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YSA9IHRoaXMuY2xvbmVEYXRhKHJvd0RhdGEpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMubW9kaWZ5RWRpdE1vZGVsKHJvd0RhdGEpO1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGFbS2V5Rmxhc2hTaG93XSA9IGZsYXNoU2hvdztcclxuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBiZWZvcmVFZGl0KCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vZGlmeUVkaXRNb2RlbChyb3dEYXRhOiBhbnkpIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsb25lRGF0YShyb3dEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHJvd0RhdGFbdGhpcy5zZXR0aW5nLmVudGl0eUtleV1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb21pc2VEZWxldGVJdGVtKHJvd0RhdGEpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmRlbGV0ZShyb3dEYXRhLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBfZGVsZXRlKHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAocm93RGF0YS5fX2Rpc2FibGVEZWxldGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKCFycykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZURlbGV0ZUl0ZW0ocm93RGF0YSlcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNob3dWZXJzaW9uQnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuQ09NTU9OLlJFTE9BRF9EQVRBX1ZFUlNJT04sIHt9LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhU3VjY2VzcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXBvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhRXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb21pc2VEZWxldGVJdGVtcyhpdGVtcykge1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IGl0ZW1zLm1hcCh4ID0+IHguaWQpLmpvaW4oJywnKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmRlbGV0ZU1hbnkoaWRzKTtcclxuICAgIH1cclxuXHJcbiAgICBfZGVsZXRlTXVsdGlwbGUoaXRlbXMpIHtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKCFycykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZURlbGV0ZUl0ZW1zKGl0ZW1zKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhU3VjY2VzcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXBvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQmVmb3JlQ2FuY2VsKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlU2F2ZWQoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDYW5jZWwoJGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5vbkJlZm9yZUNhbmNlbCgpO1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGdldEVudGl0eU1ldGFkYXRhKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuc2V0dGluZy5lbnRpdHlNZXRhZGF0YVNldHRpbmcuZGF0YSA9IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5nZXRXZjFTZXR0aW5nKCk7XHJcbiAgICAgICAgICAgIC8vICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNldHRpbmcuZW50aXR5TWV0YWRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eU1ldGFkYXRhU2VydmljZSk7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UgPSB0aGlzLnNldHRpbmcuZW50aXR5TWV0YWRhdGFTZXJ2aWNlO1xyXG4gICAgICAgICAgICAvLyAgICAgYXdhaXQgdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlLmxvYWQodGhpcy5fYmFzZVNlcnZpY2UsIHRoaXMuY29udGV4dCwgdHJ1ZSk7ICAvLyBmb3JjZSBsb2FkIMSR4buDIMSR4buNYyB04burIGNzZGxcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuc2V0dGluZy5lbnRpdHlNZXRhZGF0YVNldHRpbmcuZGF0YSA9IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5nZXRXZjFTZXR0aW5nKCk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignUGxlYXNlIGluY2x1ZGUgRW50aXR5TWV0YWRhdGFTZXJ2aWNlIGluIHByb3ZpZGVyIG9mIGNvbXBvbmVudCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZWxvYWQoKSB7XHJcbiAgICAgICAgdGhpcy5jcnVkTGlzdC5yZWxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfdHJpZ2dlclByb2Nlc3NEYXRhKGdyaWRJbmZvPzogR3JpZEluZm8pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NEYXRhKGdyaWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHByb2Nlc3NEYXRhKGdyaWRJbmZvPzogR3JpZEluZm8pIHtcclxuICAgICAgICB0aGlzLnJlYWR5VG9UcmluaEt5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ3J1ZExpc3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNydWRMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFncmlkSW5mbykge1xyXG4gICAgICAgICAgICAgICAgZ3JpZEluZm8gPSB0aGlzLmNydWRMaXN0LmdldEdyaWRJbmZvKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghZ3JpZEluZm8pIHtcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKHtcclxuICAgICAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogOTk5XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBzb3J0czogW11cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0RGF0YShncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbW9kaWZ5R3JpZEluZm8oZ3JpZEluZm86IEdyaWRJbmZvKTogUHJvbWlzZTxib29sZWFuIHwgdm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0RGF0YShncmlkSW5mbzogR3JpZEluZm8pIHtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlICYmIHRoaXMubW9kZWwucmVhZHkpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWFya0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgZ3JpZEluZm8ubW9kaWZ5RmlsdGVyKFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsIGZpbHRlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhhc051bGxWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3RWYWx1ZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKGZpbHRlci52YWx1ZSkuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTnVsbFZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RWYWx1ZXMucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzTnVsbFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN0VmFsdWVzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIub3BlcmF0b3IgPSBPcGVyYXRvci5pc051bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmxvZ2ljID0gJ29yJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmZpZWxkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBPcGVyYXRvci5pc051bGwsICcnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsIE9wZXJhdG9yLmluLCByZXN0VmFsdWVzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdE1vZGlmeSA9IGF3YWl0IHRoaXMubW9kaWZ5R3JpZEluZm8oZ3JpZEluZm8pO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0TW9kaWZ5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnRvdGFsID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZXhwYW5kZWRSb3dLZXlzID0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kb0dldFJlcXVlc3QoZ3JpZEluZm8pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfbWFya0xvYWRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmFkanVzdFBvc2l0aW9uTG9hZGluZ01hc2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdNw6F5IGNo4bunIHBo4bqjbiBo4buTaSBxdcOhIGzDonUsIHZ1aSBsw7JuZyBraeG7g20gdHJhIGzhuqFpIMSRxrDhu51uZyB0cnV54buBbiBt4bqhbmchJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDIwMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlUmVsb2FkZWQoZXZ0ID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3VubWFya0xvYWRpbmcoKTtcclxuICAgICAgICB0aGlzLmFmdGVyUmVsb2FkZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlclJlbG9hZGVkKCkgeyB9XHJcblxyXG4gICAgX3VubWFya0xvYWRpbmcoKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xyXG4gICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlyZURhdGFMb2FkZWQoc3VjY2VzczogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICBpZiAoc3VjY2VzcyAmJiB0aGlzLmNydWRMaXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QucHJvY2Vzc0Jhc2VEYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3VubWFya0xvYWRpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9taXNlR2V0RGF0YShncmlkSW5mbzogR3JpZEluZm8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEJ5R3JpZFJlcXVlc3QoZ3JpZEluZm8sIHRoaXMucGx1c1VybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGF0YUN1c3RvbShncmlkSW5mbzogR3JpZEluZm8pIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkb0dldFJlcXVlc3QoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1c3RvbUdldERhdGEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQcm9taXNlR2V0RGF0YShncmlkSW5mbylcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihhc3luYyByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NHZXREYXRhKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZURhdGFMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZURhdGFMb2FkZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0h0dHBVbmtub3dFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXREYXRhQ3VzdG9tKGdyaWRJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzR2V0RGF0YShyZXNwb25zZTogUmVzcG9uc2VSZXN1bHQpIHtcclxuICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5cyA9IHt9O1xyXG4gICAgICAgIHRoaXMubW9kZWwudG90YWwgPSByZXNwb25zZS50b3RhbFJlY29yZDtcclxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5iZWZvcmVSZW5kZXJEYXRhU291cmNlKHJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2gocm93SXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZXhwYW5kZWRSb3dLZXlzW3Jvd0l0ZW1bdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZF1dID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0ZvcmVhY2hJdGVtQWZ0ZXJHZXREYXRhKHJvd0l0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHJlc3BvbnNlLmRhdGE7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcud29ya2Zsb3dTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgIC8vIEzhuqV5IHJhIG5o4buvbmcgdHLhuqFuZyB0aMOhaSBtw6AgYuG6o24gZ2hpIGtow7RuZyDEkcaw4bujYyBz4butYVxyXG4gICAgICAgICAgICBjb25zdCBzdGF0dXNOb3RBbGxvd0VkaXRzID0gdGhpcy5zZXR0aW5nLndvcmtmbG93U2V0dGluZy5zdGF0dXNlcy5maWx0ZXIocCA9PiAhcC5vcHRpb25zLmNob1BoZXBTdWEpLm1hcChpdGVtID0+IGl0ZW0udHJhbmdUaGFpQ29udGFpbmVyLm1hKTtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5faW5kZXggPSAodGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgLSAxKSAqIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZSArIDEgKyBpbmRleDtcclxuICAgICAgICAgICAgICAgIC8vIGl0ZW0uY3VycmVudFN0YXRlQ29kZSA9IGl0ZW0uY3VycmVudFN0YXRlQ29kZTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uX19kaXNhYmxlRWRpdCA9IHN0YXR1c05vdEFsbG93RWRpdHMuaW5kZXhPZihpdGVtLmN1cnJlbnRTdGF0ZUNvZGUpID4gLTE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5faW5kZXggPSAodGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgLSAxKSAqIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZSArIDEgKyBpbmRleDtcclxuICAgICAgICAgICAgICAgIC8vIGl0ZW0uY3VycmVudFN0YXRlQ29kZSA9IGl0ZW0uY3VycmVudFN0YXRlQ29kZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xyXG5cclxuICAgICAgICBjb25zdCByZXNldFNlbGVjdGVkSXRlbXMgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aDtcclxuICAgICAgICBpZiAocmVzZXRTZWxlY3RlZEl0ZW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5hZnRlckdldERhdGEoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZ2V0UmVmRGF0YURyb3Bkb3duKHRoaXMubW9kZWwuZGF0YVNvdXJjZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYmVmb3JlUmVuZGVyRGF0YVNvdXJjZShkYXRhc291cmNlOiBhbnkpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBkYXRhc291cmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJvY2Vzc0ZvcmVhY2hJdGVtQWZ0ZXJHZXREYXRhKHg6IGFueSkge1xyXG4gICAgICAgIC8vIHByb2Nlc3Mgd29ya2Zsb3dcclxuICAgICAgICBpZiAodGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuaXNXZjEoKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5nZXRXZjFTZXR0aW5nKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VXNlcklkID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS51c2VySWQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIGlmICh4WydtZXRhZGF0YVN0YXR1cyddID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeFsnY3JlYXRlZEJ5J10gIT0gY3VycmVudFVzZXJJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZURlbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoeFsnbWV0YWRhdGFTdGF0dXMnXSA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB4LmNvdW50T2ZBcHByb3ZlID8geC5jb3VudE9mQXBwcm92ZSArIDEgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9ICdvYmplY3RJc1VzZXInICsgY291bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVUQtMTE5OCAtIE5hbU5IIC0gVHLGsOG7nW5nIGjhu6NwIHNldHRpbmcgY2jGsGEgY8OzIGThu68gbGnhu4d1IHRow6wgYuG7iyBleGNlcHRpb24sIGRvIGPDoWMgYuG6o24gZ2hpIHRow6ptIG3hu5tpIHRyxrDhu5tjIGtoaSBi4bqtdCBxdXkgdHLDrG5oIHRow6wga28gY8OzIGThu68gbGnhu4d1IG7DoHlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ1trZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nW2tleV0uc29tZSh4ID0+IHggPT0gY3VycmVudFVzZXJJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHguX19kaXNhYmxlRWRpdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZURlbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRU5EIFVELTExOThcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHhbJ21ldGFkYXRhU3RhdHVzJ10gPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHguX19kaXNhYmxlRWRpdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVEZWxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFmdGVyR2V0RGF0YSgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0UmVmRGF0YURyb3Bkb3duKGRhdGFTb3VyY2UpIHtcclxuICAgICAgICBpZiAoZGF0YVNvdXJjZSAmJiBkYXRhU291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZE5lZWRHZXRSZWYpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyclByb21pc2VEb250TmVlZFdhaXQgPSBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyclNjaGVtYURvbnROZWVkV2FpdCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzY2hlbWEgb2YgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkTmVlZEdldFJlZikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hLmZpZWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFbS2V5RmllbGRHZXRSZWZUeXBlXSA9PSBFbnVtR2V0UmVmVHlwZS5TRVJWRVIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mb3JjZUdldERhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICh0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4gJiYgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbiAmJiB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4ucmF3Q29sdW1uLmZpZWxkID09IHNjaGVtYS5maWVsZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuc2V0dGluZy5jb2xzLnNvbWUoaXRlbSA9PiBpdGVtLmZpZWxkID09ICdzdHInICsgZmllbGQgJiYgaXRlbS52aXNpYmxlICE9IGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyclZhbHVlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGl0ZW1EYXRhW2ZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlkcyA9IGN1cnJlbnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpZHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gaWRzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHMuZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcnJWYWx1ZS5zb21lKHAgPT4gcCA9PSBpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyVmFsdWUucHVzaChpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFyclZhbHVlLnNvbWUocCA9PiBwID09IGN1cnJlbnRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goY3VycmVudFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyclZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBzY2hlbWEuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmdyb3VwQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBhcnJWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBzY2hlbWEuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhpcy5uZXdGaWx0ZXIoc2NoZW1hLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCBhcnJWYWx1ZSldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvbnMoc2NoZW1hKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm9yZGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZVJlZkRhdGFUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZSwgc2NoZW1hLCByZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyUHJvbWlzZURvbnROZWVkV2FpdC5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJTY2hlbWFEb250TmVlZFdhaXQucHVzaChzY2hlbWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4gaXRlbVtzY2hlbWEuZGlzcGxheUZpZWxkXSB8fCBpdGVtWydsYWJlbCddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY0dldExhYmVsID0gc2NoZW1hLmZ1bmNHZXRMYWJlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbSA9IHNjaGVtYS5kYXRhU291cmNlLmZpbmQoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgaXRlbURhdGFbZmllbGRdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0TGFiZWwocmVmSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChhcnJQcm9taXNlRG9udE5lZWRXYWl0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJSZXMgPSBhd2FpdCBQcm9taXNlLmFsbChhcnJQcm9taXNlRG9udE5lZWRXYWl0KTtcclxuICAgICAgICAgICAgICAgICAgICBhcnJTY2hlbWFEb250TmVlZFdhaXQuZm9yRWFjaCgoc2NoZW1hLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlLCBzY2hlbWEsIGFyclJlc1tpbmRleF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZnRlckdldFJlZkRhdGFEcm9wZG93bihudWxsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVhZHlUb1RyaW5oS3kgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtZXJnZVJlZkRhdGFUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZTogYW55W10sIHNjaGVtYTogQ29sdW1uU2NoZW1hQmFzZSwgZGF0YTogYW55W10pIHtcclxuICAgICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYS5maWVsZDtcclxuICAgICAgICBsZXQgZnVuY0dldExhYmVsID0gaXRlbSA9PiBpdGVtW3NjaGVtYS5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ2xhYmVsJ107XHJcbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0TGFiZWwpIHtcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsID0gc2NoZW1hLmZ1bmNHZXRMYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGZ1bmNTZXRWYWx1ZVJvdyA9IChyb3dJdGVtLCBkYXRhKSA9PiB7IH07XHJcbiAgICAgICAgbGV0IGZ1bmNHZXRSZWZEYXRhUm93ID0gKHJlZkl0ZW1zKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiByZWZJdGVtcy5tYXAoaXRlbSA9PiBmdW5jR2V0TGFiZWwoaXRlbSkpLmpvaW4oYCR7c2NoZW1hLnNlcGFyYXRvcn0gYCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvdykge1xyXG4gICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3cgPSBzY2hlbWEuZnVuY1NldFZhbHVlUm93O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRSZWZEYXRhUm93KSB7XHJcbiAgICAgICAgICAgIGZ1bmNHZXRSZWZEYXRhUm93ID0gc2NoZW1hLmZ1bmNHZXRSZWZEYXRhUm93O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2NoZW1hLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbURhdGFbZmllbGRdICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaWRzID0gaXRlbURhdGFbZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpZHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkcyA9IGlkcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtcyA9IGRhdGEuZmlsdGVyKGkgPT4gaWRzLnNvbWUocSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgcSkpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVmSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRSZWZEYXRhUm93KHJlZkl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KGl0ZW1EYXRhLCByZWZJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbURhdGFbZmllbGRdICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtID0gZGF0YS5maW5kKGkgPT4gc2NoZW1hLmZ1bmNDb21wYXJlKGksIGl0ZW1EYXRhW2ZpZWxkXSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0TGFiZWwocmVmSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhpdGVtRGF0YSwgcmVmSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24oZmllbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlRHJvcGRvd25PcHRpb25zKHNjaGVtYTogQ29sdW1uU2NoZW1hQmFzZSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRHJvcGRvd25PcHRpb25zKHtcclxuICAgICAgICAgICAgZGlzcGxheUZpZWxkOiBzY2hlbWEuZGlzcGxheUZpZWxkLFxyXG4gICAgICAgICAgICB2YWx1ZUZpZWxkOiBzY2hlbWEudmFsdWVGaWVsZCxcclxuICAgICAgICAgICAgZmllbGRQbHVzOiBzY2hlbWEuZmllbGRQbHVzLFxyXG4gICAgICAgICAgICBmaWVsZFRyZWU6IHNjaGVtYS5maWVsZFRyZWUsXHJcbiAgICAgICAgICAgIGZpZWxkUGFyZW50VHJlZUl0ZW06IHNjaGVtYS5maWVsZFBhcmVudFRyZWVJdGVtLFxyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWw6IHNjaGVtYS5mdW5jR2V0TGFiZWwsXHJcbiAgICAgICAgICAgIHNvcnRGaWVsZDogc2NoZW1hLnNvcnRGaWVsZCxcclxuICAgICAgICAgICAgc29ydERpcjogc2NoZW1hLnNvcnREaXIsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YUZpbmlzaDogc2NoZW1hLmNhbGxiYWNrRGF0YUZpbmlzaFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFmdGVyR2V0UmVmRGF0YURyb3Bkb3duKGZpZWxkOiBzdHJpbmcpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtZXJnZUluZm9Ub0NvbHVtblNjaGVtYSgpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY29scy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbk1vZGVsU2NoZW1hID0gdGhpcy5zZXR0aW5nLm1vZGVsU2NoZW1hcy5maW5kKHAgPT4gcC5maWVsZCA9PSBjb2wuZmllbGQpO1xyXG4gICAgICAgICAgICBpZiAoY29sdW1uTW9kZWxTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgIGNvbC5sYWJlbCA9IGNvbHVtbk1vZGVsU2NoZW1hLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBjb2wuZnVsbExhYmVsID0gY29sdW1uTW9kZWxTY2hlbWEuZnVsbE5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbC5kYXRhVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbC5kYXRhVHlwZSA9IHRoaXMuZ2V0RGF0YVR5cGUoY29sdW1uTW9kZWxTY2hlbWEuZGF0YVR5cGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXREYXRhVHlwZSh0eXBlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlRmllbGRTZWFyY2hUZXh0KCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbC5mdWxsVGV4dFNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkU2VhcmNoVGV4dC5wdXNoKGNvbC5maWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmZpZWxkU2VhcmNoVGV4dC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkU2VhcmNoVGV4dC5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgZmllbGQsIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLCBzb3VyY2VGaWVsZDogJ19rJyB9KSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5maWx0ZXJUZW1wbGF0ZUFkdnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWx0ZXJUZW1wbGF0ZUFkdnMuc3BsaWNlKDAsIDAsIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnb3InLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnNcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlUGVybWlzc2lvbihyb3dEYXRhKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3J1ZExpc3QpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY3J1ZExpc3QudmFsaWRhdGVQZXJtaXNzaW9uKHJvd0RhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -129,9 +129,4 @@ export var EnumWorkflowCoreCodeSettingKey;
129
129
  EnumWorkflowCoreCodeSettingKey["PHE_DUYET_2_BUOC"] = "workflowCoreTrinhKy2Buoc";
130
130
  EnumWorkflowCoreCodeSettingKey["PHE_DUYET_3_BUOC"] = "workflowCoreTrinhKy3Buoc";
131
131
  })(EnumWorkflowCoreCodeSettingKey || (EnumWorkflowCoreCodeSettingKey = {}));
132
- export var EnumCoreVersion;
133
- (function (EnumCoreVersion) {
134
- EnumCoreVersion["V4"] = "V4";
135
- EnumCoreVersion["V5"] = "V5";
136
- })(EnumCoreVersion || (EnumCoreVersion = {}));
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNsYXNzZXMvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE1BQU0sQ0FBTixJQUFZLFNBSVg7QUFKRCxXQUFZLFNBQVM7SUFDakIsdUNBQU8sQ0FBQTtJQUNQLHlDQUFRLENBQUE7SUFDUix5Q0FBUSxDQUFBO0FBQ1osQ0FBQyxFQUpXLFNBQVMsS0FBVCxTQUFTLFFBSXBCO0FBRUQsTUFBTSxDQUFOLElBQVksZUFHWDtBQUhELFdBQVksZUFBZTtJQUN2QixxREFBUSxDQUFBO0lBQ1IsMkRBQVcsQ0FBQTtBQUNmLENBQUMsRUFIVyxlQUFlLEtBQWYsZUFBZSxRQUcxQjtBQUdELE1BQU0sQ0FBTixJQUFZLHNCQUVYO0FBRkQsV0FBWSxzQkFBc0I7SUFDOUIsaURBQXVCLENBQUEsQ0FBRSx3QkFBd0I7QUFDckQsQ0FBQyxFQUZXLHNCQUFzQixLQUF0QixzQkFBc0IsUUFFakM7QUFHRCxNQUFNLENBQU4sSUFBWSxZQUdYO0FBSEQsV0FBWSxZQUFZO0lBQ3BCLDhHQUE4RixDQUFBO0lBQzlGLGtIQUFrRyxDQUFBO0FBQ3RHLENBQUMsRUFIVyxZQUFZLEtBQVosWUFBWSxRQUd2QjtBQUVELE1BQU0sQ0FBTixJQUFZLFNBR1g7QUFIRCxXQUFZLFNBQVM7SUFDakIsc0NBQXlCLENBQUE7SUFDekIsb0NBQXVCLENBQUE7QUFDM0IsQ0FBQyxFQUhXLFNBQVMsS0FBVCxTQUFTLFFBR3BCO0FBRUQsTUFBTSxDQUFOLElBQVksT0FFWDtBQUZELFdBQVksT0FBTztJQUNmLGdGQUF3RSxDQUFBO0FBQzVFLENBQUMsRUFGVyxPQUFPLEtBQVAsT0FBTyxRQUVsQjtBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDOUIsZ0JBQWdCLEVBQUUsZ0JBQWdCO0NBQ3JDLENB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QVksOEJBSVg7QUFKRCxXQUFZLDhCQUE4QjtJQUN0QyxrRUFBZ0MsQ0FBQTtJQUNoQywrRUFBNkMsQ0FBQTtJQUM3QywrRUFBNkMsQ0FBQTtBQUNqRCxDQUFDLEVBSlcsOEJBQThCLEtBQTlCLDhCQUE4QixRQUl6QztBQUVELE1BQU0sQ0FBTixJQUFZLGVBR1g7QUFIRCxXQUFZLGVBQWU7SUFDdkIsNEJBQVMsQ0FBQTtJQUNULDRCQUFTLENBQUE7QUFDYixDQUFDLEVBSFcsZUFBZSxLQUFmLGVBQWUsUUFHMUIiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuZXhwb3J0IGVudW0gRm9ybVN0YXRlIHtcclxuICAgIEFERCA9IDAsXHJcbiAgICBWSUVXID0gMSxcclxuICAgIEVESVQgPSAyXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25UeXBlcyB7XHJcbiAgICBQQUdFID0gMSxcclxuICAgIENPTlRST0wgPSAyXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZW51bSBOb3RpZmljYXRpb25PYmplY3RUeXBlIHtcclxuICAgIENBVEVHT1JZX1VQREFURUQgPSAnLTEnICAvLyBD4bqtcCBuaOG6rXQgbeG7m2kgZGFuaCBt4bulY1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGVudW0gVGVtcGxhdGVUeXBlIHtcclxuICAgIEVYQ0VMX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCcsXHJcbiAgICBET0NfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudDtjaGFyc2V0PVVURi04J1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBFeHRlbnNpb24ge1xyXG4gICAgRVhDRUxfRVhURU5TSU9OID0gJy54bHN4JyxcclxuICAgIERPQ19FWFRFTlNJT04gPSAnLmRvY3gnXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFBhdHRlcm4ge1xyXG4gICAgZGF0ZXRpbWUgPSAnXihbMC0yXVswLTldfCgzKVswLTFdKShcXC8pKCgoMClbMC05XSl8KCgxKVswLTJdKSkoXFwvKVxcZHs0fSQnXHJcbn1cclxuXHJcbi8qKlxyXG4gKiAwMC4wMC4wMDAueHh4NFxyXG4gKiB4MTogQ2jGsGEgcGjDom4gbG/huqFpXHJcbiAqIHgyOiAgQ2jGsGEgcGjDom4gbG/huqFpXHJcbiAqIHgzOiAgQ2jGsGEgcGjDom4gbG/huqFpXHJcbiAqIHg0OiBNw6MgY29tcG9uZW50XHJcbiAqXHJcbiAqIDAxIC0gUyA9IFROIFNoYXJlIC0gROG7i2NoIHbhu6UgY2hpYSBz4bq7IGNodW5nXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgU0hBUkVfQ09NUE9ORU5UX0lEID0ge1xyXG4gICAgU19BRFZBTkNFX1NFQVJDSDogJzAwLjAwLjAwMC4wMDAxJ1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFNIQVJFX0VWRU5UID0ge1xyXG4gICAgRk9SQ0VfTUFSS19ESVJUWV9GT1JNOiAnRk9SQ0VfTUFSS19ESVJUWV9GT1JNJ1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGtleVVzZXJTdXJ2ZXlMb2NhbCA9ICdfaW5mb1VzZXJEb1N1cnZleSc7XHJcbmV4cG9ydCBjb25zdCBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlID0gJ2N1cnJlbnRTdGF0ZUNvZGUnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFR5cGVEYW5oTXVjQVBJID0ge1xyXG4gICAgRE9DX0xBUDogMSxcclxuICAgIFBIVV9USFVPQzogMlxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFRyYW5nVGhhaXMgPSB7XHJcbiAgICBJbkFjdGl2ZTogZmFsc2UsXHJcbiAgICBBY3RpdmU6IHRydWVcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBTb3J0RGlycyA9IHtcclxuICAgIERlc2M6IC0xLFxyXG4gICAgQXNjOiAxXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgU2Vzc2lvblR5cGVzID0ge1xyXG4gICAgTW9ybmluZzogMSxcclxuICAgIEFmdGVybm9vbjogMixcclxuICAgIEV2ZW5pbmc6IDNcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBFWFBMT1JFUl9UWVBFUyA9IHtcclxuICAgIEZJTEU6IDAsXHJcbiAgICBGT0xERVI6IDFcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBGSUxFX1RZUEVTID0ge1xyXG4gICAgSU1BR0U6ICdpbWFnZScsXHJcbiAgICBWSURFTzogJ3ZpZGVvJyxcclxuICAgIEFVRElPOiAnYXVkaW8nLFxyXG4gICAgVEVYVDogJ3RleHQnLFxyXG4gICAgU1BSRUFEU0hFRVQ6ICdzcHJlYWRzaGVldCcsXHJcbiAgICBQUkVTRU5UQVRJT046ICdwcmVzZW50YXRpb24nLFxyXG4gICAgT1RIRVI6ICdvdGhlcidcclxufTtcclxuXHJcbmV4cG9ydCBlbnVtIFNoYXJlZEZvbGRlclR5cGUge1xyXG4gICAgWmlwcGVkRmlsZSA9IDEsXHJcbiAgICBBdmF0YXIgPSAyLFxyXG4gICAgVGVtcHQgPSAzLFxyXG4gICAgVGVtcGxhdGUgPSA0LFxyXG4gICAgSW50ZXJuYWwgPSA1LFxyXG4gICAgU2Nhbm5lZEZpbGUgPSA2LFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBHZW5kZXIge1xyXG4gICAgTWFsZSA9IDAsXHJcbiAgICBGZW1hbGUgPSAxXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEV4cG9ydEl0ZW1UeXBlIHtcclxuICAgIEZvbGRlciA9IDEsXHJcbiAgICBFeGNlbEZpbGUgPSAyLFxyXG4gICAgRXhjZWxTaGVldCA9IDNcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRW51bUNvbnRyb2xQaWNrZXJUeXBlIHtcclxuICAgIFVTRVIgPSAwLFxyXG4gICAgU1RVREVOVCA9IDEsXHJcbiAgICBURUFDSEVSID0gMixcclxuICAgIFJPT00gPSAzLFxyXG4gICAgQ0xBU1MgPSA0LFxyXG4gICAgU1VCSkVDVCA9IDUsXHJcbiAgICBOR1VPSV9USFVFID0gNixcclxuICAgIERPTl9WSSA9IDcsXHJcbiAgICBLSE8gPSA4LFxyXG4gICAgTkdBTkggPSA5LFxyXG4gICAgVEhJRVRCSSA9IDEwLFxyXG4gICAgSE9DUEhBTl9SQU5HQlVPQyA9IDExLFxyXG4gICAgT1JHQU5JWkFUSU9OID0gMTIsXHJcbiAgICBIT1BET05HID0gMTMsXHJcbiAgICBURUFDSEVSUExVUyA9IDE0LFxyXG4gICAgREVfVEFJID0gMTUsXHJcbiAgICBCSUVVX01BVSA9IDE2LFxyXG4gICAgVEVBQ0hFUkZVTEwgPSAxNyxcclxuICAgIENBTkJPID0gMTdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRW51bUdldFJlZlR5cGUge1xyXG4gICAgTE9DQUwgPSAxLFxyXG4gICAgU0VSVkVSID0gMlxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgS2V5Rmxhc2hTaG93ID0gJ19mbGFzaFNob3cnO1xyXG5leHBvcnQgY29uc3QgS2V5RmllbGRHZXRSZWZUeXBlID0gJ190eXBlR2V0UmVmJztcclxuXHJcbmV4cG9ydCBlbnVtIEVudW1Xb3JrZmxvd0NvcmVDb2RlU2V0dGluZ0tleSB7XHJcbiAgICBNQUNfRElOSCA9ICd3b3JrZmxvd0NvcmVUcmluaEt5JyxcclxuICAgIFBIRV9EVVlFVF8yX0JVT0MgPSAnd29ya2Zsb3dDb3JlVHJpbmhLeTJCdW9jJyxcclxuICAgIFBIRV9EVVlFVF8zX0JVT0MgPSAnd29ya2Zsb3dDb3JlVHJpbmhLeTNCdW9jJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBFbnVtQ29yZVZlcnNpb24ge1xyXG4gICAgVjQgPSAnVjQnLFxyXG4gICAgVjUgPSAnVjUnXHJcbn1cclxuIl19
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNsYXNzZXMvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE1BQU0sQ0FBTixJQUFZLFNBSVg7QUFKRCxXQUFZLFNBQVM7SUFDakIsdUNBQU8sQ0FBQTtJQUNQLHlDQUFRLENBQUE7SUFDUix5Q0FBUSxDQUFBO0FBQ1osQ0FBQyxFQUpXLFNBQVMsS0FBVCxTQUFTLFFBSXBCO0FBRUQsTUFBTSxDQUFOLElBQVksZUFHWDtBQUhELFdBQVksZUFBZTtJQUN2QixxREFBUSxDQUFBO0lBQ1IsMkRBQVcsQ0FBQTtBQUNmLENBQUMsRUFIVyxlQUFlLEtBQWYsZUFBZSxRQUcxQjtBQUdELE1BQU0sQ0FBTixJQUFZLHNCQUVYO0FBRkQsV0FBWSxzQkFBc0I7SUFDOUIsaURBQXVCLENBQUEsQ0FBRSx3QkFBd0I7QUFDckQsQ0FBQyxFQUZXLHNCQUFzQixLQUF0QixzQkFBc0IsUUFFakM7QUFHRCxNQUFNLENBQU4sSUFBWSxZQUdYO0FBSEQsV0FBWSxZQUFZO0lBQ3BCLDhHQUE4RixDQUFBO0lBQzlGLGtIQUFrRyxDQUFBO0FBQ3RHLENBQUMsRUFIVyxZQUFZLEtBQVosWUFBWSxRQUd2QjtBQUVELE1BQU0sQ0FBTixJQUFZLFNBR1g7QUFIRCxXQUFZLFNBQVM7SUFDakIsc0NBQXlCLENBQUE7SUFDekIsb0NBQXVCLENBQUE7QUFDM0IsQ0FBQyxFQUhXLFNBQVMsS0FBVCxTQUFTLFFBR3BCO0FBRUQsTUFBTSxDQUFOLElBQVksT0FFWDtBQUZELFdBQVksT0FBTztJQUNmLGdGQUF3RSxDQUFBO0FBQzVFLENBQUMsRUFGVyxPQUFPLEtBQVAsT0FBTyxRQUVsQjtBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDOUIsZ0JBQWdCLEVBQUUsZ0JBQWdCO0NBQ3JDLENB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QVksOEJBSVg7QUFKRCxXQUFZLDhCQUE4QjtJQUN0QyxrRUFBZ0MsQ0FBQTtJQUNoQywrRUFBNkMsQ0FBQTtJQUM3QywrRUFBNkMsQ0FBQTtBQUNqRCxDQUFDLEVBSlcsOEJBQThCLEtBQTlCLDhCQUE4QixRQUl6QyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5leHBvcnQgZW51bSBGb3JtU3RhdGUge1xyXG4gICAgQUREID0gMCxcclxuICAgIFZJRVcgPSAxLFxyXG4gICAgRURJVCA9IDJcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUGVybWlzc2lvblR5cGVzIHtcclxuICAgIFBBR0UgPSAxLFxyXG4gICAgQ09OVFJPTCA9IDJcclxufVxyXG5cclxuXHJcbmV4cG9ydCBlbnVtIE5vdGlmaWNhdGlvbk9iamVjdFR5cGUge1xyXG4gICAgQ0FURUdPUllfVVBEQVRFRCA9ICctMScgIC8vIEPhuq1wIG5o4bqtdCBt4bubaSBkYW5oIG3hu6VjXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZW51bSBUZW1wbGF0ZVR5cGUge1xyXG4gICAgRVhDRUxfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JyxcclxuICAgIERPQ19UWVBFID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50O2NoYXJzZXQ9VVRGLTgnXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEV4dGVuc2lvbiB7XHJcbiAgICBFWENFTF9FWFRFTlNJT04gPSAnLnhsc3gnLFxyXG4gICAgRE9DX0VYVEVOU0lPTiA9ICcuZG9jeCdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUGF0dGVybiB7XHJcbiAgICBkYXRldGltZSA9ICdeKFswLTJdWzAtOV18KDMpWzAtMV0pKFxcLykoKCgwKVswLTldKXwoKDEpWzAtMl0pKShcXC8pXFxkezR9JCdcclxufVxyXG5cclxuLyoqXHJcbiAqIDAwLjAwLjAwMC54eHg0XHJcbiAqIHgxOiBDaMawYSBwaMOibiBsb+G6oWlcclxuICogeDI6ICBDaMawYSBwaMOibiBsb+G6oWlcclxuICogeDM6ICBDaMawYSBwaMOibiBsb+G6oWlcclxuICogeDQ6IE3DoyBjb21wb25lbnRcclxuICpcclxuICogMDEgLSBTID0gVE4gU2hhcmUgLSBE4buLY2ggduG7pSBjaGlhIHPhursgY2h1bmdcclxuICovXHJcbmV4cG9ydCBjb25zdCBTSEFSRV9DT01QT05FTlRfSUQgPSB7XHJcbiAgICBTX0FEVkFOQ0VfU0VBUkNIOiAnMDAuMDAuMDAwLjAwMDEnXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgU0hBUkVfRVZFTlQgPSB7XHJcbiAgICBGT1JDRV9NQVJLX0RJUlRZX0ZPUk06ICdGT1JDRV9NQVJLX0RJUlRZX0ZPUk0nXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3Qga2V5VXNlclN1cnZleUxvY2FsID0gJ19pbmZvVXNlckRvU3VydmV5JztcclxuZXhwb3J0IGNvbnN0IFdvcmtmbG93RmllbGRTdGF0ZUNvZGUgPSAnY3VycmVudFN0YXRlQ29kZSc7XHJcblxyXG5leHBvcnQgY29uc3QgVHlwZURhbmhNdWNBUEkgPSB7XHJcbiAgICBET0NfTEFQOiAxLFxyXG4gICAgUEhVX1RIVU9DOiAyXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgVHJhbmdUaGFpcyA9IHtcclxuICAgIEluQWN0aXZlOiBmYWxzZSxcclxuICAgIEFjdGl2ZTogdHJ1ZVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFNvcnREaXJzID0ge1xyXG4gICAgRGVzYzogLTEsXHJcbiAgICBBc2M6IDFcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBTZXNzaW9uVHlwZXMgPSB7XHJcbiAgICBNb3JuaW5nOiAxLFxyXG4gICAgQWZ0ZXJub29uOiAyLFxyXG4gICAgRXZlbmluZzogM1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IEVYUExPUkVSX1RZUEVTID0ge1xyXG4gICAgRklMRTogMCxcclxuICAgIEZPTERFUjogMVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IEZJTEVfVFlQRVMgPSB7XHJcbiAgICBJTUFHRTogJ2ltYWdlJyxcclxuICAgIFZJREVPOiAndmlkZW8nLFxyXG4gICAgQVVESU86ICdhdWRpbycsXHJcbiAgICBURVhUOiAndGV4dCcsXHJcbiAgICBTUFJFQURTSEVFVDogJ3NwcmVhZHNoZWV0JyxcclxuICAgIFBSRVNFTlRBVElPTjogJ3ByZXNlbnRhdGlvbicsXHJcbiAgICBPVEhFUjogJ290aGVyJ1xyXG59O1xyXG5cclxuZXhwb3J0IGVudW0gU2hhcmVkRm9sZGVyVHlwZSB7XHJcbiAgICBaaXBwZWRGaWxlID0gMSxcclxuICAgIEF2YXRhciA9IDIsXHJcbiAgICBUZW1wdCA9IDMsXHJcbiAgICBUZW1wbGF0ZSA9IDQsXHJcbiAgICBJbnRlcm5hbCA9IDUsXHJcbiAgICBTY2FubmVkRmlsZSA9IDYsXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEdlbmRlciB7XHJcbiAgICBNYWxlID0gMCxcclxuICAgIEZlbWFsZSA9IDFcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRXhwb3J0SXRlbVR5cGUge1xyXG4gICAgRm9sZGVyID0gMSxcclxuICAgIEV4Y2VsRmlsZSA9IDIsXHJcbiAgICBFeGNlbFNoZWV0ID0gM1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBFbnVtQ29udHJvbFBpY2tlclR5cGUge1xyXG4gICAgVVNFUiA9IDAsXHJcbiAgICBTVFVERU5UID0gMSxcclxuICAgIFRFQUNIRVIgPSAyLFxyXG4gICAgUk9PTSA9IDMsXHJcbiAgICBDTEFTUyA9IDQsXHJcbiAgICBTVUJKRUNUID0gNSxcclxuICAgIE5HVU9JX1RIVUUgPSA2LFxyXG4gICAgRE9OX1ZJID0gNyxcclxuICAgIEtITyA9IDgsXHJcbiAgICBOR0FOSCA9IDksXHJcbiAgICBUSElFVEJJID0gMTAsXHJcbiAgICBIT0NQSEFOX1JBTkdCVU9DID0gMTEsXHJcbiAgICBPUkdBTklaQVRJT04gPSAxMixcclxuICAgIEhPUERPTkcgPSAxMyxcclxuICAgIFRFQUNIRVJQTFVTID0gMTQsXHJcbiAgICBERV9UQUkgPSAxNSxcclxuICAgIEJJRVVfTUFVID0gMTYsXHJcbiAgICBURUFDSEVSRlVMTCA9IDE3LFxyXG4gICAgQ0FOQk8gPSAxN1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBFbnVtR2V0UmVmVHlwZSB7XHJcbiAgICBMT0NBTCA9IDEsXHJcbiAgICBTRVJWRVIgPSAyXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBLZXlGbGFzaFNob3cgPSAnX2ZsYXNoU2hvdyc7XHJcbmV4cG9ydCBjb25zdCBLZXlGaWVsZEdldFJlZlR5cGUgPSAnX3R5cGVHZXRSZWYnO1xyXG5cclxuZXhwb3J0IGVudW0gRW51bVdvcmtmbG93Q29yZUNvZGVTZXR0aW5nS2V5IHtcclxuICAgIE1BQ19ESU5IID0gJ3dvcmtmbG93Q29yZVRyaW5oS3knLFxyXG4gICAgUEhFX0RVWUVUXzJfQlVPQyA9ICd3b3JrZmxvd0NvcmVUcmluaEt5MkJ1b2MnLFxyXG4gICAgUEhFX0RVWUVUXzNfQlVPQyA9ICd3b3JrZmxvd0NvcmVUcmluaEt5M0J1b2MnXHJcbn1cclxuIl19