@netgrif/components-core 6.0.3 → 6.0.4

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 (84) hide show
  1. package/bundles/netgrif-components-core.umd.js +166 -61
  2. package/bundles/netgrif-components-core.umd.js.map +1 -1
  3. package/bundles/netgrif-components-core.umd.min.js +2 -2
  4. package/bundles/netgrif-components-core.umd.min.js.map +1 -1
  5. package/esm2015/lib/data-fields/file-field/abstract-file-field.component.js +2 -2
  6. package/esm2015/lib/groups/services/next-group.service.js +3 -2
  7. package/esm2015/lib/resources/abstract-endpoint/abstract-resource.service.js +3 -2
  8. package/esm2015/lib/resources/engine-endpoint/public/public-task-resource.service.js +1 -1
  9. package/esm2015/lib/search/models/category/case/case-dataset.js +3 -6
  10. package/esm2015/lib/search/models/category/case/case-simple-dataset.js +3 -3
  11. package/esm2015/lib/search/models/category/case/case-title.js +13 -3
  12. package/esm2015/lib/search/models/category/case/case-visual-id.js +13 -3
  13. package/esm2015/lib/search/models/category/category.js +10 -2
  14. package/esm2015/lib/search/models/operator/substring.js +3 -3
  15. package/esm2015/lib/search/search-keyword-resolver-service/search-index-resolver.service.js +18 -3
  16. package/esm2015/lib/search/search-service/search.service.js +3 -2
  17. package/esm2015/lib/side-menu/content-components/new-case/abstract-new-case.component.js +6 -1
  18. package/esm2015/lib/task/services/finish-task.service.js +18 -13
  19. package/esm2015/lib/task/services/task-data.service.js +2 -1
  20. package/esm2015/lib/user/services/user-list.service.js +4 -3
  21. package/esm2015/lib/utility/pagination/load-all-pages.js +4 -3
  22. package/esm2015/lib/utility/pagination/pagination-params.js +19 -0
  23. package/esm2015/lib/utility/pagination/pagination-sort.js +17 -0
  24. package/esm2015/lib/utility/public-api.js +3 -1
  25. package/esm2015/lib/utility/tests/mocks/mock-endpoint.js +4 -3
  26. package/esm2015/lib/view/abstract/sortable-view.js +4 -3
  27. package/esm2015/lib/view/case-view/service/case-view-service.js +6 -4
  28. package/esm2015/lib/view/public-api.js +3 -1
  29. package/esm2015/lib/view/task-view/service/task-view.service.js +6 -4
  30. package/esm2015/lib/view/tree-case-view/tree-component/case-tree.service.js +19 -5
  31. package/esm2015/lib/view/tree-case-view/tree-component/model/tree-case-view-configuration.js +2 -0
  32. package/esm2015/lib/view/tree-case-view/tree-component/model/tree-configuration-injection-token.js +3 -0
  33. package/esm2015/lib/view/workflow-view/workflow-view.service.js +4 -11
  34. package/esm5/lib/data-fields/file-field/abstract-file-field.component.js +2 -2
  35. package/esm5/lib/groups/services/next-group.service.js +3 -2
  36. package/esm5/lib/resources/abstract-endpoint/abstract-resource.service.js +3 -2
  37. package/esm5/lib/resources/engine-endpoint/public/public-task-resource.service.js +1 -1
  38. package/esm5/lib/search/models/category/case/case-dataset.js +3 -6
  39. package/esm5/lib/search/models/category/case/case-simple-dataset.js +3 -3
  40. package/esm5/lib/search/models/category/case/case-title.js +19 -4
  41. package/esm5/lib/search/models/category/case/case-visual-id.js +19 -4
  42. package/esm5/lib/search/models/category/category.js +10 -2
  43. package/esm5/lib/search/models/operator/substring.js +3 -3
  44. package/esm5/lib/search/search-keyword-resolver-service/search-index-resolver.service.js +17 -2
  45. package/esm5/lib/search/search-service/search.service.js +3 -2
  46. package/esm5/lib/side-menu/content-components/new-case/abstract-new-case.component.js +6 -1
  47. package/esm5/lib/task/services/finish-task.service.js +18 -13
  48. package/esm5/lib/task/services/task-data.service.js +2 -1
  49. package/esm5/lib/user/services/user-list.service.js +4 -3
  50. package/esm5/lib/utility/pagination/load-all-pages.js +4 -3
  51. package/esm5/lib/utility/pagination/pagination-params.js +19 -0
  52. package/esm5/lib/utility/pagination/pagination-sort.js +17 -0
  53. package/esm5/lib/utility/public-api.js +3 -1
  54. package/esm5/lib/utility/tests/mocks/mock-endpoint.js +4 -3
  55. package/esm5/lib/view/abstract/sortable-view.js +4 -3
  56. package/esm5/lib/view/case-view/service/case-view-service.js +6 -4
  57. package/esm5/lib/view/public-api.js +3 -1
  58. package/esm5/lib/view/task-view/service/task-view.service.js +6 -4
  59. package/esm5/lib/view/tree-case-view/tree-component/case-tree.service.js +19 -5
  60. package/esm5/lib/view/tree-case-view/tree-component/model/tree-case-view-configuration.js +2 -0
  61. package/esm5/lib/view/tree-case-view/tree-component/model/tree-configuration-injection-token.js +3 -0
  62. package/esm5/lib/view/workflow-view/workflow-view.service.js +4 -11
  63. package/fesm2015/netgrif-components-core.js +154 -61
  64. package/fesm2015/netgrif-components-core.js.map +1 -1
  65. package/fesm5/netgrif-components-core.js +165 -62
  66. package/fesm5/netgrif-components-core.js.map +1 -1
  67. package/lib/search/models/category/case/case-dataset.d.ts +0 -2
  68. package/lib/search/models/category/case/case-title.d.ts +4 -1
  69. package/lib/search/models/category/case/case-visual-id.d.ts +4 -1
  70. package/lib/search/models/category/category.d.ts +7 -0
  71. package/lib/search/search-keyword-resolver-service/search-index-resolver.service.d.ts +12 -0
  72. package/lib/side-menu/content-components/new-case/abstract-new-case.component.d.ts +1 -0
  73. package/lib/task/services/finish-task.service.d.ts +5 -0
  74. package/lib/utility/pagination/pagination-params.d.ts +17 -0
  75. package/lib/utility/pagination/pagination-sort.d.ts +13 -0
  76. package/lib/utility/public-api.d.ts +2 -0
  77. package/lib/view/public-api.d.ts +2 -0
  78. package/lib/view/tree-case-view/tree-component/case-tree.service.d.ts +4 -1
  79. package/lib/view/tree-case-view/tree-component/model/tree-case-view-configuration.d.ts +9 -0
  80. package/lib/view/tree-case-view/tree-component/model/tree-configuration-injection-token.d.ts +3 -0
  81. package/lib/view/workflow-view/workflow-view.service.d.ts +0 -1
  82. package/netgrif-components-core.metadata.json +1 -1
  83. package/package.json +2 -2
  84. package/schematics/collection.json +0 -3
@@ -15,6 +15,7 @@ import { SnackBarService } from '../../snack-bar/services/snack-bar.service';
15
15
  import { TranslateService } from '@ngx-translate/core';
16
16
  import { arrayToObservable } from '../../utility/array-to-observable';
17
17
  import { SearchIndexResolverService } from '../../search/search-keyword-resolver-service/search-index-resolver.service';
18
+ import { PaginationParams } from '../../utility/pagination/pagination-params';
18
19
  var WorkflowViewService = /** @class */ (function (_super) {
19
20
  __extends(WorkflowViewService, _super);
20
21
  function WorkflowViewService(_petriNetResource, _log, _dialogService, _snackBarService, _translate, resolver, injectedBaseFilter, confirmDelete) {
@@ -190,17 +191,9 @@ var WorkflowViewService = /** @class */ (function (_super) {
190
191
  // TODO 7.4.2020 - workflow sorting and searching
191
192
  return '';
192
193
  };
193
- WorkflowViewService.prototype.addSortParams = function (params) {
194
- if (this._lastHeaderSearchState.sortDirection !== '') {
195
- return params.set('sort', this.getSortId() + "," + this._lastHeaderSearchState.sortDirection);
196
- }
197
- else {
198
- return params.set('sort', this.getDefaultSortParam());
199
- }
200
- };
201
194
  WorkflowViewService.prototype.addPageParams = function (params, pagination) {
202
- params = params.set('size', pagination.size + '');
203
- params = params.set('page', pagination.number + '');
195
+ params = params.set(PaginationParams.PAGE_SIZE, "" + pagination.size);
196
+ params = params.set(PaginationParams.PAGE_NUMBER, "" + pagination.number);
204
197
  return params;
205
198
  };
206
199
  WorkflowViewService.ctorParameters = function () { return [
@@ -229,4 +222,4 @@ var WorkflowViewService = /** @class */ (function (_super) {
229
222
  return WorkflowViewService;
230
223
  }(SortableView));
231
224
  export { WorkflowViewService };
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctdmlldy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5ldGdyaWYvY29tcG9uZW50cy1jb3JlLyIsInNvdXJjZXMiOlsibGliL3ZpZXcvd29ya2Zsb3ctdmlldy93b3JrZmxvdy12aWV3LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFhLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDbkcsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUVuRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFaEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRzdELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUVyRSxPQUFPLEVBQUMsbUNBQW1DLEVBQUUsMkJBQTJCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzSCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQzNFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxpQkFBaUIsRUFB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VSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsRCxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNwRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDOztnQkEvTXdDLHVCQUF1QjtnQkFDcEMsYUFBYTtnQkFDSCxhQUFhO2dCQUNYLGVBQWU7Z0JBQ3JCLGdCQUFnQjtnQkFDNUIsMEJBQTBCO2dEQUNuQyxRQUFRLFlBQUksTUFBTSxTQUFDLDJCQUEyQjs4Q0FDOUMsUUFBUSxZQUFJLE1BQU0sU0FBQyxtQ0FBbUM7OztnQkFwQnRFLFVBQVU7OztnQkFyQkgsdUJBQXVCO2dCQUl2QixhQUFhO2dCQVViLGFBQWE7Z0JBQ2IsZUFBZTtnQkFDZixnQkFBZ0I7Z0JBRWhCLDBCQUEwQjtnREFzQmpCLFFBQVEsWUFBSSxNQUFNLFNBQUMsMkJBQTJCOzhDQUM5QyxRQUFRLFlBQUksTUFBTSxTQUFDLG1DQUFtQzs7SUEwTXZFLDBCQUFDO0NBQUEsQUE5TkQsQ0FDeUMsWUFBWSxHQTZOcEQ7U0E3TlksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTb3J0YWJsZVZpZXd9IGZyb20gJy4uL2Fic3RyYWN0L3NvcnRhYmxlLXZpZXcnO1xuaW1wb3J0IHtQZXRyaU5ldFJlc291cmNlU2VydmljZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2VuZ2luZS1lbmRwb2ludC9wZXRyaS1uZXQtcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtOZXR9IGZyb20gJy4uLy4uL3Byb2Nlc3MvbmV0JztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgY29uY2F0TWFwLCBtYXAsIG1lcmdlTWFwLCBzY2FuLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7UGV0cmlOZXRSZWZlcmVuY2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvcGV0cmktbmV0LXJlZmVyZW5jZSc7XG5pbXBvcnQge0h0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7UGFnaW5hdGlvbn0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wYWdpbmF0aW9uJztcbmltcG9ydCB7TG9hZGluZ0VtaXR0ZXJ9IGZyb20gJy4uLy4uL3V0aWxpdHkvbG9hZGluZy1lbWl0dGVyJztcbmltcG9ydCB7UGFnZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wYWdlJztcbmltcG9ydCB7TGlzdFJhbmdlfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHtoYXNDb250ZW50fSBmcm9tICcuLi8uLi91dGlsaXR5L3BhZ2luYXRpb24vcGFnZS1oYXMtY29udGVudCc7XG5pbXBvcnQge1BldHJpTmV0UmVxdWVzdEJvZHl9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvcGV0cmktbmV0LXJlcXVlc3QtYm9keSc7XG5pbXBvcnQge05BRV9XT1JLRkxPV19TRVJWSUNFX0NPTkZJUk1fREVMRVRFLCBOQUVfV09SS0ZMT1dfU0VSVklDRV9GSUxURVJ9IGZyb20gJy4vbW9kZWxzL2luamVjdGlvbi10b2tlbi13b3JrZmxvdy1zZXJ2aWNlJztcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSAnLi4vLi4vZGlhbG9nL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7U25hY2tCYXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zbmFjay1iYXIvc2VydmljZXMvc25hY2stYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7YXJyYXlUb09ic2VydmFibGV9IGZyb20gJy4uLy4uL3V0aWxpdHkvYXJyYXktdG8tb2JzZXJ2YWJsZSc7XG5pbXBvcnQge1NlYXJjaEluZGV4UmVzb2x2ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZWFyY2gvc2VhcmNoLWtleXdvcmQtcmVzb2x2ZXItc2VydmljZS9zZWFyY2gtaW5kZXgtcmVzb2x2ZXIuc2VydmljZSc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFdvcmtmbG93Vmlld1NlcnZpY2UgZXh0ZW5kcyBTb3J0YWJsZVZpZXcgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgLy8gVE9ETyAxOS4xMC4yMDIwIC0gQWRkIHN1cHBvcnQgZm9yIHJlcXVlc3RzIHdpdGggY29udGV4dCAoZmlsdGVyKSwgc2FtZSBhcyBDYXNlLSBhbmQgVGFza1ZpZXdTZXJ2aWNlc1xuICAgIHByb3RlY3RlZCBfbG9hZGluZyQ6IExvYWRpbmdFbWl0dGVyO1xuICAgIHByb3RlY3RlZCBfd29ya2Zsb3dzJDogT2JzZXJ2YWJsZTxBcnJheTxOZXQ+PjtcbiAgICBwcm90ZWN0ZWQgX2NsZWFyOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfbmV4dFBhZ2UkOiBCZWhhdmlvclN1YmplY3Q8UGFnaW5hdGlvbj47XG4gICAgcHJvdGVjdGVkIF9lbmRPZkRhdGE6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIF9wYWdpbmF0aW9uOiBQYWdpbmF0aW9uO1xuICAgIHByb3RlY3RlZCBfYmFzZUZpbHRlcjogUGV0cmlOZXRSZXF1ZXN0Qm9keTtcbiAgICBwcm90ZWN0ZWQgX3Nob3dEZWxldGVDb25maXJtYXRpb25EaWFsb2c6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3BldHJpTmV0UmVzb3VyY2U6IFBldHJpTmV0UmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3NuYWNrQmFyU2VydmljZTogU25hY2tCYXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHJlc29sdmVyOiBTZWFyY2hJbmRleFJlc29sdmVyU2VydmljZSxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5BRV9XT1JLRkxPV19TRVJWSUNFX0ZJTFRFUikgaW5qZWN0ZWRCYXNlRmlsdGVyOiBQZXRyaU5ldFJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkFFX1dPUktGTE9XX1NFUlZJQ0VfQ09ORklSTV9ERUxFVEUpIGNvbmZpcm1EZWxldGU6IGJvb2xlYW4pIHtcbiAgICAgICAgc3VwZXIocmVzb2x2ZXIpO1xuICAgICAgICB0aGlzLl9sb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLl9jbGVhciA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9lbmRPZkRhdGEgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbiA9IHtcbiAgICAgICAgICAgIHNpemU6IDI1LFxuICAgICAgICAgICAgdG90YWxFbGVtZW50czogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdG90YWxQYWdlczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbnVtYmVyOiAtMVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9uZXh0UGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhZ2luYXRpb24+KFxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcGFnaW5hdGlvbiwge251bWJlcjogMH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fYmFzZUZpbHRlciA9IGluamVjdGVkQmFzZUZpbHRlciAhPT0gbnVsbCA/IGluamVjdGVkQmFzZUZpbHRlciA6IHt9O1xuICAgICAgICB0aGlzLl9zaG93RGVsZXRlQ29uZmlybWF0aW9uRGlhbG9nID0gY29uZmlybURlbGV0ZSA9PT0gbnVsbCB8fCBjb25maXJtRGVsZXRlO1xuXG4gICAgICAgIGNvbnN0IHdvcmtmbG93c01hcCA9IHRoaXMuX25leHRQYWdlJC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAocCA9PiB0aGlzLmxvYWRQYWdlKHApKSxcbiAgICAgICAgICAgIG1hcChwZXRyaU5ldHMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jbGVhcikge1xuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBzZXQgYW4gZW1wdHkgdmFsdWUgdG8gdGhlIHZpcnR1YWwgc2Nyb2xsIGFuZCB0aGVuIHJlcGxhY2UgaXQgYnkgdGhlIHJlYWwgdmFsdWUgZm9yY2luZyBpdCB0byByZWRyYXcgaXRzIGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IFt7Y29udGVudDogW10sIHN0b3BMb2FkaW5nOiBmYWxzZX0sIHtjb250ZW50OiBwZXRyaU5ldHMsIHN0b3BMb2FkaW5nOiB0cnVlfV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheVRvT2JzZXJ2YWJsZShyZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Yoe2NvbnRlbnQ6IHBldHJpTmV0cywgc3RvcExvYWRpbmc6IHRydWV9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNvbmNhdE1hcChvID0+IG8pLFxuICAgICAgICAgICAgbWFwKG8gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvLnN0b3BMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gby5jb250ZW50O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAocGV0cmlOZXRzID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGV0cmlOZXRzLnJlZHVjZSgoYWNjLCBjdXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsuLi5hY2MsIFtjdXIuc3RyaW5nSWRdOiBjdXJ9O1xuICAgICAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2NhbigoYWNjLCBwZXRyaU5ldHNNYXApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2xlYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsuLi5wZXRyaU5ldHNNYXB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gey4uLmFjYywgLi4ucGV0cmlOZXRzTWFwfTtcbiAgICAgICAgICAgIH0sIHt9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3dvcmtmbG93cyQgPSB3b3JrZmxvd3NNYXAucGlwZShcbiAgICAgICAgICAgIG1hcCh2ID0+IE9iamVjdC52YWx1ZXModikpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuX2xvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX25leHRQYWdlJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRpbmckLmlzQWN0aXZlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9hZGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkaW5nJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHdvcmtmbG93cyQoKTogT2JzZXJ2YWJsZTxBcnJheTxOZXQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl93b3JrZmxvd3MkO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkUGFnZShwYWdlUmVxdWVzdDogUGFnaW5hdGlvbik6IE9ic2VydmFibGU8QXJyYXk8TmV0Pj4ge1xuICAgICAgICBpZiAocGFnZVJlcXVlc3QubnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGFyYW1zOiBIdHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICAgICAgcGFyYW1zID0gdGhpcy5hZGRTb3J0UGFyYW1zKHBhcmFtcyk7XG4gICAgICAgIHBhcmFtcyA9IHRoaXMuYWRkUGFnZVBhcmFtcyhwYXJhbXMsIHBhZ2VSZXF1ZXN0KTtcbiAgICAgICAgdGhpcy5fbG9hZGluZyQub24oKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fcGV0cmlOZXRSZXNvdXJjZS5zZWFyY2hQZXRyaU5ldHModGhpcy5fYmFzZUZpbHRlciwgcGFyYW1zKS5waXBlKFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignTG9hZGluZyBQZXRyaSBuZXRzIGhhcyBmYWlsZWQhJywgZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2Yoe2NvbnRlbnQ6IFtdLCBwYWdpbmF0aW9uOiB7Li4udGhpcy5fcGFnaW5hdGlvbn19KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9wYWdpbmF0aW9uLCByZXMucGFnaW5hdGlvbik7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcChyZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VuZE9mRGF0YSA9ICFoYXNDb250ZW50KHJlcylcbiAgICAgICAgICAgICAgICAgICAgfHwgcmVzLnBhZ2luYXRpb24ubnVtYmVyID09PSByZXMucGFnaW5hdGlvbi50b3RhbFBhZ2VzIC0gMTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKChuZXRzUGFnZTogUGFnZTxQZXRyaU5ldFJlZmVyZW5jZT4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ29udGVudChuZXRzUGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyYXk6IEFycmF5PE5ldD4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgbmV0c1BhZ2UuY29udGVudC5mb3JFYWNoKG5ldCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKG5ldyBOZXQobmV0KSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIG5leHRQYWdlKHJlbmRlcmVkUmFuZ2U6IExpc3RSYW5nZSwgdG90YWxMb2FkZWQ6IG51bWJlciwgcGFnaW5hdGlvbj86IFBhZ2luYXRpb24pIHtcbiAgICAgICAgaWYgKHRoaXMuX2VuZE9mRGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlbmRlcmVkUmFuZ2UuZW5kID09PSB0b3RhbExvYWRlZCkge1xuICAgICAgICAgICAgbGV0IHAgPSBwYWdpbmF0aW9uO1xuICAgICAgICAgICAgaWYgKHAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHAgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wYWdpbmF0aW9uKTtcbiAgICAgICAgICAgICAgICBwLm51bWJlciArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbmV4dFBhZ2UkLm5leHQocCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVsb2FkKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3dvcmtmbG93cyQgfHwgIXRoaXMuX3BhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VuZE9mRGF0YSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jbGVhciA9IHRydWU7XG4gICAgICAgIGNvbnN0IHAgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wYWdpbmF0aW9uKTtcbiAgICAgICAgcC5udW1iZXIgPSAwO1xuICAgICAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiAtMSxcbiAgICAgICAgICAgIGVuZDogMFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5leHRQYWdlKHJhbmdlLCAwLCBwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBhIGRpYWxvZyAoaWYgY29uZmlndXJlZCkgYW5kIHRoZW4gYXNrcyB0aGUgc2VydmljZSB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHdvcmtmbG93LlxuICAgICAqIEBwYXJhbSB3b3JrZmxvdyB0aGUgd29ya2Zsb3cgdGhhdCBzaG91bGQgYmUgZGVsZXRlZFxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGVXb3JrZmxvdyh3b3JrZmxvdzogTmV0KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9zaG93RGVsZXRlQ29uZmlybWF0aW9uRGlhbG9nKSB7XG4gICAgICAgICAgICBjb25zdCBjb25maXJtYXRpb25UZXh0ID0gdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3dvcmtmbG93LmRlbGV0ZScpLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlblByb21wdERpYWxvZyhcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnd29ya2Zsb3cuZGlhbG9nLmhlYWRlcicsIHtuYW1lOiB3b3JrZmxvdy50aXRsZSwgdmVyc2lvbjogd29ya2Zsb3cudmVyc2lvbn0pLFxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd3b3JrZmxvdy5kaWFsb2cuY29udGVudCcpLFxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd3b3JrZmxvdy5kaWFsb2cudHlwZVRvQ29uZmlybScsIHtkZWxldGU6IGNvbmZpcm1hdGlvblRleHR9KSlcbiAgICAgICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0LnByb21wdCA9PT0gY29uZmlybWF0aW9uVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWxldGVXb3JrZmxvdyh3b3JrZmxvdyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc25hY2tCYXJTZXJ2aWNlLm9wZW5HZW5lcmljU25hY2tCYXIodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3dvcmtmbG93LnNuYWNrQmFyLmRlbGV0ZUNhbmNlbGVkJyksICdpbmZvJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9kZWxldGVXb3JrZmxvdyh3b3JrZmxvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZW5kcyB0aGUgd29ya2Zsb3cgZGVsZXRlIHRvIGJhY2tlbmQgYW5kIHByb2Nlc3NlcyB0aGUgcmVzdWx0LlxuICAgICAqIEBwYXJhbSB3b3JrZmxvdyB0aGUgd29ya2Zsb3cgdGhhdCBzaG91bGQgYmUgZGVsZXRlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfZGVsZXRlV29ya2Zsb3cod29ya2Zsb3c6IE5ldCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wZXRyaU5ldFJlc291cmNlLmRlbGV0ZVBldHJpTmV0KHdvcmtmbG93LnN0cmluZ0lkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyU2VydmljZS5vcGVuU3VjY2Vzc1NuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd3b3JrZmxvdy5zbmFja0Jhci5kZWxldGVTdWNjZXNzJykpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5pbmZvKCdQcm9jZXNzIGRlbGV0ZSBzdWNjZXNzLiBTZXJ2ZXIgcmVzcG9uc2U6ICcgKyByZXNwb25zZS5zdWNjZXNzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zbmFja0JhclNlcnZpY2Uub3BlbkVycm9yU25hY2tCYXIodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3dvcmtmbG93LnNuYWNrQmFyLmRlbGV0ZUVycm9yJykpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignUHJvY2VzcyBkZWxldGUgZmFpbGVkLiBTZXJ2ZXIgcmVzcG9uc2U6ICcgKyBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE1ldGFGaWVsZFNvcnRJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFzdEhlYWRlclNlYXJjaFN0YXRlLmZpZWxkSWRlbnRpZmllcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdFNvcnRQYXJhbSgpOiBzdHJpbmcge1xuICAgICAgICAvLyBUT0RPIDcuNC4yMDIwIC0gd29ya2Zsb3cgc29ydGluZyBhbmQgc2VhcmNoaW5nXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWRkU29ydFBhcmFtcyhwYXJhbXM6IEh0dHBQYXJhbXMpOiBIdHRwUGFyYW1zIHtcbiAgICAgICAgaWYgKHRoaXMuX2xhc3RIZWFkZXJTZWFyY2hTdGF0ZS5zb3J0RGlyZWN0aW9uICE9PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcy5zZXQoJ3NvcnQnLCBgJHt0aGlzLmdldFNvcnRJZCgpfSwke3RoaXMuX2xhc3RIZWFkZXJTZWFyY2hTdGF0ZS5zb3J0RGlyZWN0aW9ufWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcy5zZXQoJ3NvcnQnLCB0aGlzLmdldERlZmF1bHRTb3J0UGFyYW0oKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWRkUGFnZVBhcmFtcyhwYXJhbXM6IEh0dHBQYXJhbXMsIHBhZ2luYXRpb246IFBhZ2luYXRpb24pOiBIdHRwUGFyYW1zIHtcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnc2l6ZScsIHBhZ2luYXRpb24uc2l6ZSArICcnKTtcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgncGFnZScsIHBhZ2luYXRpb24ubnVtYmVyICsgJycpO1xuICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH1cblxufVxuIl19
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctdmlldy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5ldGdyaWYvY29tcG9uZW50cy1jb3JlLyIsInNvdXJjZXMiOlsibGliL3ZpZXcvd29ya2Zsb3ctdmlldy93b3JrZmxvdy12aWV3LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFhLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDbkcsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUVuRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFaEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRzdELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUVyRSxPQUFPLEVBQUMsbUNBQW1DLEVBQUUsMkJBQTJCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzSCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQzNFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxpQkFBaUIsRUFB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QUNuQyxRQUFRLFlBQUksTUFBTSxTQUFDLDJCQUEyQjs4Q0FDOUMsUUFBUSxZQUFJLE1BQU0sU0FBQyxtQ0FBbUM7OztnQkFwQnRFLFVBQVU7OztnQkF0QkgsdUJBQXVCO2dCQUl2QixhQUFhO2dCQVViLGFBQWE7Z0JBQ2IsZUFBZTtnQkFDZixnQkFBZ0I7Z0JBRWhCLDBCQUEwQjtnREF1QmpCLFFBQVEsWUFBSSxNQUFNLFNBQUMsMkJBQTJCOzhDQUM5QyxRQUFRLFlBQUksTUFBTSxTQUFDLG1DQUFtQzs7SUFrTXZFLDBCQUFDO0NBQUEsQUF0TkQsQ0FDeUMsWUFBWSxHQXFOcEQ7U0FyTlksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTb3J0YWJsZVZpZXd9IGZyb20gJy4uL2Fic3RyYWN0L3NvcnRhYmxlLXZpZXcnO1xuaW1wb3J0IHtQZXRyaU5ldFJlc291cmNlU2VydmljZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2VuZ2luZS1lbmRwb2ludC9wZXRyaS1uZXQtcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtOZXR9IGZyb20gJy4uLy4uL3Byb2Nlc3MvbmV0JztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgY29uY2F0TWFwLCBtYXAsIG1lcmdlTWFwLCBzY2FuLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7UGV0cmlOZXRSZWZlcmVuY2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvcGV0cmktbmV0LXJlZmVyZW5jZSc7XG5pbXBvcnQge0h0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7UGFnaW5hdGlvbn0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wYWdpbmF0aW9uJztcbmltcG9ydCB7TG9hZGluZ0VtaXR0ZXJ9IGZyb20gJy4uLy4uL3V0aWxpdHkvbG9hZGluZy1lbWl0dGVyJztcbmltcG9ydCB7UGFnZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wYWdlJztcbmltcG9ydCB7TGlzdFJhbmdlfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHtoYXNDb250ZW50fSBmcm9tICcuLi8uLi91dGlsaXR5L3BhZ2luYXRpb24vcGFnZS1oYXMtY29udGVudCc7XG5pbXBvcnQge1BldHJpTmV0UmVxdWVzdEJvZHl9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvcGV0cmktbmV0LXJlcXVlc3QtYm9keSc7XG5pbXBvcnQge05BRV9XT1JLRkxPV19TRVJWSUNFX0NPTkZJUk1fREVMRVRFLCBOQUVfV09SS0ZMT1dfU0VSVklDRV9GSUxURVJ9IGZyb20gJy4vbW9kZWxzL2luamVjdGlvbi10b2tlbi13b3JrZmxvdy1zZXJ2aWNlJztcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSAnLi4vLi4vZGlhbG9nL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7U25hY2tCYXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zbmFjay1iYXIvc2VydmljZXMvc25hY2stYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7YXJyYXlUb09ic2VydmFibGV9IGZyb20gJy4uLy4uL3V0aWxpdHkvYXJyYXktdG8tb2JzZXJ2YWJsZSc7XG5pbXBvcnQge1NlYXJjaEluZGV4UmVzb2x2ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZWFyY2gvc2VhcmNoLWtleXdvcmQtcmVzb2x2ZXItc2VydmljZS9zZWFyY2gtaW5kZXgtcmVzb2x2ZXIuc2VydmljZSc7XG5pbXBvcnQge1BhZ2luYXRpb25QYXJhbXN9IGZyb20gJy4uLy4uL3V0aWxpdHkvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLXBhcmFtcyc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFdvcmtmbG93Vmlld1NlcnZpY2UgZXh0ZW5kcyBTb3J0YWJsZVZpZXcgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgLy8gVE9ETyAxOS4xMC4yMDIwIC0gQWRkIHN1cHBvcnQgZm9yIHJlcXVlc3RzIHdpdGggY29udGV4dCAoZmlsdGVyKSwgc2FtZSBhcyBDYXNlLSBhbmQgVGFza1ZpZXdTZXJ2aWNlc1xuICAgIHByb3RlY3RlZCBfbG9hZGluZyQ6IExvYWRpbmdFbWl0dGVyO1xuICAgIHByb3RlY3RlZCBfd29ya2Zsb3dzJDogT2JzZXJ2YWJsZTxBcnJheTxOZXQ+PjtcbiAgICBwcm90ZWN0ZWQgX2NsZWFyOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfbmV4dFBhZ2UkOiBCZWhhdmlvclN1YmplY3Q8UGFnaW5hdGlvbj47XG4gICAgcHJvdGVjdGVkIF9lbmRPZkRhdGE6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIF9wYWdpbmF0aW9uOiBQYWdpbmF0aW9uO1xuICAgIHByb3RlY3RlZCBfYmFzZUZpbHRlcjogUGV0cmlOZXRSZXF1ZXN0Qm9keTtcbiAgICBwcm90ZWN0ZWQgX3Nob3dEZWxldGVDb25maXJtYXRpb25EaWFsb2c6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3BldHJpTmV0UmVzb3VyY2U6IFBldHJpTmV0UmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3NuYWNrQmFyU2VydmljZTogU25hY2tCYXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHJlc29sdmVyOiBTZWFyY2hJbmRleFJlc29sdmVyU2VydmljZSxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5BRV9XT1JLRkxPV19TRVJWSUNFX0ZJTFRFUikgaW5qZWN0ZWRCYXNlRmlsdGVyOiBQZXRyaU5ldFJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkFFX1dPUktGTE9XX1NFUlZJQ0VfQ09ORklSTV9ERUxFVEUpIGNvbmZpcm1EZWxldGU6IGJvb2xlYW4pIHtcbiAgICAgICAgc3VwZXIocmVzb2x2ZXIpO1xuICAgICAgICB0aGlzLl9sb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLl9jbGVhciA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9lbmRPZkRhdGEgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbiA9IHtcbiAgICAgICAgICAgIHNpemU6IDI1LFxuICAgICAgICAgICAgdG90YWxFbGVtZW50czogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdG90YWxQYWdlczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbnVtYmVyOiAtMVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9uZXh0UGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhZ2luYXRpb24+KFxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcGFnaW5hdGlvbiwge251bWJlcjogMH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fYmFzZUZpbHRlciA9IGluamVjdGVkQmFzZUZpbHRlciAhPT0gbnVsbCA/IGluamVjdGVkQmFzZUZpbHRlciA6IHt9O1xuICAgICAgICB0aGlzLl9zaG93RGVsZXRlQ29uZmlybWF0aW9uRGlhbG9nID0gY29uZmlybURlbGV0ZSA9PT0gbnVsbCB8fCBjb25maXJtRGVsZXRlO1xuXG4gICAgICAgIGNvbnN0IHdvcmtmbG93c01hcCA9IHRoaXMuX25leHRQYWdlJC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAocCA9PiB0aGlzLmxvYWRQYWdlKHApKSxcbiAgICAgICAgICAgIG1hcChwZXRyaU5ldHMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jbGVhcikge1xuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBzZXQgYW4gZW1wdHkgdmFsdWUgdG8gdGhlIHZpcnR1YWwgc2Nyb2xsIGFuZCB0aGVuIHJlcGxhY2UgaXQgYnkgdGhlIHJlYWwgdmFsdWUgZm9yY2luZyBpdCB0byByZWRyYXcgaXRzIGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IFt7Y29udGVudDogW10sIHN0b3BMb2FkaW5nOiBmYWxzZX0sIHtjb250ZW50OiBwZXRyaU5ldHMsIHN0b3BMb2FkaW5nOiB0cnVlfV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheVRvT2JzZXJ2YWJsZShyZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Yoe2NvbnRlbnQ6IHBldHJpTmV0cywgc3RvcExvYWRpbmc6IHRydWV9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNvbmNhdE1hcChvID0+IG8pLFxuICAgICAgICAgICAgbWFwKG8gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvLnN0b3BMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gby5jb250ZW50O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAocGV0cmlOZXRzID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGV0cmlOZXRzLnJlZHVjZSgoYWNjLCBjdXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsuLi5hY2MsIFtjdXIuc3RyaW5nSWRdOiBjdXJ9O1xuICAgICAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2NhbigoYWNjLCBwZXRyaU5ldHNNYXApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2xlYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsuLi5wZXRyaU5ldHNNYXB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gey4uLmFjYywgLi4ucGV0cmlOZXRzTWFwfTtcbiAgICAgICAgICAgIH0sIHt9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3dvcmtmbG93cyQgPSB3b3JrZmxvd3NNYXAucGlwZShcbiAgICAgICAgICAgIG1hcCh2ID0+IE9iamVjdC52YWx1ZXModikpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuX2xvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX25leHRQYWdlJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRpbmckLmlzQWN0aXZlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9hZGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkaW5nJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHdvcmtmbG93cyQoKTogT2JzZXJ2YWJsZTxBcnJheTxOZXQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl93b3JrZmxvd3MkO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkUGFnZShwYWdlUmVxdWVzdDogUGFnaW5hdGlvbik6IE9ic2VydmFibGU8QXJyYXk8TmV0Pj4ge1xuICAgICAgICBpZiAocGFnZVJlcXVlc3QubnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGFyYW1zOiBIdHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICAgICAgcGFyYW1zID0gdGhpcy5hZGRTb3J0UGFyYW1zKHBhcmFtcyk7XG4gICAgICAgIHBhcmFtcyA9IHRoaXMuYWRkUGFnZVBhcmFtcyhwYXJhbXMsIHBhZ2VSZXF1ZXN0KTtcbiAgICAgICAgdGhpcy5fbG9hZGluZyQub24oKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fcGV0cmlOZXRSZXNvdXJjZS5zZWFyY2hQZXRyaU5ldHModGhpcy5fYmFzZUZpbHRlciwgcGFyYW1zKS5waXBlKFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignTG9hZGluZyBQZXRyaSBuZXRzIGhhcyBmYWlsZWQhJywgZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2Yoe2NvbnRlbnQ6IFtdLCBwYWdpbmF0aW9uOiB7Li4udGhpcy5fcGFnaW5hdGlvbn19KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9wYWdpbmF0aW9uLCByZXMucGFnaW5hdGlvbik7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcChyZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VuZE9mRGF0YSA9ICFoYXNDb250ZW50KHJlcylcbiAgICAgICAgICAgICAgICAgICAgfHwgcmVzLnBhZ2luYXRpb24ubnVtYmVyID09PSByZXMucGFnaW5hdGlvbi50b3RhbFBhZ2VzIC0gMTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKChuZXRzUGFnZTogUGFnZTxQZXRyaU5ldFJlZmVyZW5jZT4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ29udGVudChuZXRzUGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyYXk6IEFycmF5PE5ldD4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgbmV0c1BhZ2UuY29udGVudC5mb3JFYWNoKG5ldCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKG5ldyBOZXQobmV0KSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIG5leHRQYWdlKHJlbmRlcmVkUmFuZ2U6IExpc3RSYW5nZSwgdG90YWxMb2FkZWQ6IG51bWJlciwgcGFnaW5hdGlvbj86IFBhZ2luYXRpb24pIHtcbiAgICAgICAgaWYgKHRoaXMuX2VuZE9mRGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlbmRlcmVkUmFuZ2UuZW5kID09PSB0b3RhbExvYWRlZCkge1xuICAgICAgICAgICAgbGV0IHAgPSBwYWdpbmF0aW9uO1xuICAgICAgICAgICAgaWYgKHAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHAgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wYWdpbmF0aW9uKTtcbiAgICAgICAgICAgICAgICBwLm51bWJlciArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbmV4dFBhZ2UkLm5leHQocCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVsb2FkKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3dvcmtmbG93cyQgfHwgIXRoaXMuX3BhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VuZE9mRGF0YSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jbGVhciA9IHRydWU7XG4gICAgICAgIGNvbnN0IHAgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wYWdpbmF0aW9uKTtcbiAgICAgICAgcC5udW1iZXIgPSAwO1xuICAgICAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiAtMSxcbiAgICAgICAgICAgIGVuZDogMFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5leHRQYWdlKHJhbmdlLCAwLCBwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBhIGRpYWxvZyAoaWYgY29uZmlndXJlZCkgYW5kIHRoZW4gYXNrcyB0aGUgc2VydmljZSB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHdvcmtmbG93LlxuICAgICAqIEBwYXJhbSB3b3JrZmxvdyB0aGUgd29ya2Zsb3cgdGhhdCBzaG91bGQgYmUgZGVsZXRlZFxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGVXb3JrZmxvdyh3b3JrZmxvdzogTmV0KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9zaG93RGVsZXRlQ29uZmlybWF0aW9uRGlhbG9nKSB7XG4gICAgICAgICAgICBjb25zdCBjb25maXJtYXRpb25UZXh0ID0gdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3dvcmtmbG93LmRlbGV0ZScpLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlblByb21wdERpYWxvZyhcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnd29ya2Zsb3cuZGlhbG9nLmhlYWRlcicsIHtuYW1lOiB3b3JrZmxvdy50aXRsZSwgdmVyc2lvbjogd29ya2Zsb3cudmVyc2lvbn0pLFxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd3b3JrZmxvdy5kaWFsb2cuY29udGVudCcpLFxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd3b3JrZmxvdy5kaWFsb2cudHlwZVRvQ29uZmlybScsIHtkZWxldGU6IGNvbmZpcm1hdGlvblRleHR9KSlcbiAgICAgICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0LnByb21wdCA9PT0gY29uZmlybWF0aW9uVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWxldGVXb3JrZmxvdyh3b3JrZmxvdyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc25hY2tCYXJTZXJ2aWNlLm9wZW5HZW5lcmljU25hY2tCYXIodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3dvcmtmbG93LnNuYWNrQmFyLmRlbGV0ZUNhbmNlbGVkJyksICdpbmZvJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9kZWxldGVXb3JrZmxvdyh3b3JrZmxvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZW5kcyB0aGUgd29ya2Zsb3cgZGVsZXRlIHRvIGJhY2tlbmQgYW5kIHByb2Nlc3NlcyB0aGUgcmVzdWx0LlxuICAgICAqIEBwYXJhbSB3b3JrZmxvdyB0aGUgd29ya2Zsb3cgdGhhdCBzaG91bGQgYmUgZGVsZXRlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfZGVsZXRlV29ya2Zsb3cod29ya2Zsb3c6IE5ldCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wZXRyaU5ldFJlc291cmNlLmRlbGV0ZVBldHJpTmV0KHdvcmtmbG93LnN0cmluZ0lkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyU2VydmljZS5vcGVuU3VjY2Vzc1NuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd3b3JrZmxvdy5zbmFja0Jhci5kZWxldGVTdWNjZXNzJykpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5pbmZvKCdQcm9jZXNzIGRlbGV0ZSBzdWNjZXNzLiBTZXJ2ZXIgcmVzcG9uc2U6ICcgKyByZXNwb25zZS5zdWNjZXNzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zbmFja0JhclNlcnZpY2Uub3BlbkVycm9yU25hY2tCYXIodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3dvcmtmbG93LnNuYWNrQmFyLmRlbGV0ZUVycm9yJykpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignUHJvY2VzcyBkZWxldGUgZmFpbGVkLiBTZXJ2ZXIgcmVzcG9uc2U6ICcgKyBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE1ldGFGaWVsZFNvcnRJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFzdEhlYWRlclNlYXJjaFN0YXRlLmZpZWxkSWRlbnRpZmllcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdFNvcnRQYXJhbSgpOiBzdHJpbmcge1xuICAgICAgICAvLyBUT0RPIDcuNC4yMDIwIC0gd29ya2Zsb3cgc29ydGluZyBhbmQgc2VhcmNoaW5nXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWRkUGFnZVBhcmFtcyhwYXJhbXM6IEh0dHBQYXJhbXMsIHBhZ2luYXRpb246IFBhZ2luYXRpb24pOiBIdHRwUGFyYW1zIHtcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldChQYWdpbmF0aW9uUGFyYW1zLlBBR0VfU0laRSwgYCR7cGFnaW5hdGlvbi5zaXplfWApO1xuICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KFBhZ2luYXRpb25QYXJhbXMuUEFHRV9OVU1CRVIsIGAke3BhZ2luYXRpb24ubnVtYmVyfWApO1xuICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH1cblxufVxuIl19