@messaia/cdk 13.3.6-rc10 → 13.3.6-rc13

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 (28) hide show
  1. package/esm2020/lib/base/components/generic-list.component.mjs +14 -7
  2. package/esm2020/lib/chips/chips.module.mjs +15 -5
  3. package/esm2020/lib/chips/components/chips.component.mjs +188 -180
  4. package/esm2020/lib/chips/directives/autocomplete-option.directive.mjs +18 -0
  5. package/esm2020/lib/chips/directives/chip.directive.mjs +18 -0
  6. package/esm2020/lib/common/functions/utils.mjs +15 -1
  7. package/esm2020/lib/forms/components/generic-form/generic-form.component.mjs +5 -3
  8. package/esm2020/lib/forms/models/form-field-definition.mjs +1 -1
  9. package/esm2020/lib/layout/layout-nav-list/layout-nav-list.component.mjs +20 -31
  10. package/esm2020/lib/layout/layout-nav-list/layout-nav-list.directives.mjs +44 -20
  11. package/esm2020/lib/table/components/dynamic-table/dynamic-table.component.mjs +3 -3
  12. package/esm2020/lib/table/table.data-source.mjs +48 -14
  13. package/fesm2015/messaia-cdk.mjs +337 -234
  14. package/fesm2015/messaia-cdk.mjs.map +1 -1
  15. package/fesm2020/messaia-cdk.mjs +330 -230
  16. package/fesm2020/messaia-cdk.mjs.map +1 -1
  17. package/lib/base/components/generic-list.component.d.ts +4 -0
  18. package/lib/chips/chips.module.d.ts +17 -10
  19. package/lib/chips/components/chips.component.d.ts +107 -67
  20. package/lib/chips/directives/autocomplete-option.directive.d.ts +11 -0
  21. package/lib/chips/directives/chip.directive.d.ts +11 -0
  22. package/lib/common/functions/utils.d.ts +7 -0
  23. package/lib/common/styles/_common-theme.scss +10 -5
  24. package/lib/forms/models/form-field-definition.d.ts +2 -0
  25. package/lib/layout/layout-nav-list/layout-nav-list.component.d.ts +12 -9
  26. package/lib/layout/layout-nav-list/layout-nav-list.directives.d.ts +36 -0
  27. package/lib/table/table.data-source.d.ts +24 -2
  28. package/package.json +1 -1
@@ -1,5 +1,7 @@
1
1
  import { SelectionModel } from '@angular/cdk/collections';
2
2
  import { DataSource } from '@angular/cdk/table';
3
+ import { EventEmitter } from '@angular/core';
4
+ import { MatSort } from '@angular/material/sort';
3
5
  import { BehaviorSubject, merge, of as observableOf } from 'rxjs';
4
6
  import { catchError, map, skip, switchMap } from 'rxjs/operators';
5
7
  import { Utils } from '../common/functions/utils';
@@ -13,11 +15,11 @@ export class TableDataSource extends DataSource {
13
15
  * @param paginator
14
16
  * @param sort
15
17
  */
16
- constructor(service, paginator, sort) {
18
+ constructor(service, paginator, sorter) {
17
19
  super();
18
20
  this.service = service;
19
21
  this.paginator = paginator;
20
- this.sort = sort;
22
+ this.sorter = sorter;
21
23
  /**
22
24
  * Represents a value that changes over time.
23
25
  * Observers can subscribe to the subject to receive filter changes
@@ -37,6 +39,18 @@ export class TableDataSource extends DataSource {
37
39
  * Used to power selecting one or more options from a list.
38
40
  */
39
41
  this.selectionModel = new SelectionModel(true, []);
42
+ /**
43
+ * Sort change event emitter
44
+ */
45
+ this.onSortChange = new EventEmitter();
46
+ /**
47
+ * _sort: MatSort | null
48
+ */
49
+ this._sort = new MatSort();
50
+ /**
51
+ * isConnected: boolean
52
+ */
53
+ this.isConnected = false;
40
54
  /**
41
55
  * The navigations to includes
42
56
  */
@@ -76,7 +90,7 @@ export class TableDataSource extends DataSource {
76
90
  /**
77
91
  * A flag to show loading process
78
92
  */
79
- this.isLoading = true;
93
+ this.isLoading = false;
80
94
  /**
81
95
  * Get selected Items
82
96
  */
@@ -85,6 +99,7 @@ export class TableDataSource extends DataSource {
85
99
  * Get selected Items
86
100
  */
87
101
  this.getSelectedIds = () => this.getSelected('id');
102
+ this.sort = sorter;
88
103
  }
89
104
  /**
90
105
  * Gets filter
@@ -100,6 +115,15 @@ export class TableDataSource extends DataSource {
100
115
  }
101
116
  this._filterChange.next(filter);
102
117
  }
118
+ /**
119
+ * Instance of the MatSort directive used by the table to control its sorting. Sort changes
120
+ * emitted by the MatSort will trigger an update to the table's rendered data.
121
+ */
122
+ get sort() { return this._sort; }
123
+ set sort(sort) {
124
+ this._sort = sort;
125
+ this._sort?.sortChange.subscribe(x => this.onSortChange.emit(x));
126
+ }
103
127
  /**
104
128
  * Gets reload token
105
129
  */
@@ -111,32 +135,33 @@ export class TableDataSource extends DataSource {
111
135
  * @returns Observable that emits a new value when the data changes.
112
136
  */
113
137
  connect(_ = null) {
138
+ this.isConnected = true;
114
139
  /* A list of fields to observe */
115
140
  const displayDataChanges = [
116
- this.sort?.sortChange,
117
- this.paginator?.page || 1,
141
+ this.onSortChange,
142
+ this.paginator?.page,
118
143
  this._filterChange,
119
144
  this._reloadChange
120
145
  ];
121
146
  /* If the user changes the sort order, reset back to the first page */
122
- this.sort.sortChange.subscribe(() => { this.paginator.pageIndex = 0; });
147
+ this.onSortChange.subscribe(() => { this.paginator.pageIndex = 0; });
123
148
  return merge(...displayDataChanges)
124
149
  .pipe(skip(1), switchMap(() => {
125
150
  /* Flip flag to show that loading has begun */
126
151
  this.isLoading = true;
127
152
  /* Remove empty filters */
128
- Object.keys(this.fieldFilters).forEach((key) => ((this.fieldFilters[key] == null || this.fieldFilters[key] == '' || this.fieldFilters[key] == 'undefined')) && this.fieldFilters[key] != 0 && delete this.fieldFilters[key]);
129
- Object.keys(this.staticFieldFilters).forEach((key) => ((this.staticFieldFilters[key] == null || this.staticFieldFilters[key] == '' || this.staticFieldFilters[key] == 'undefined')) && this.staticFieldFilters[key] != 0 && delete this.staticFieldFilters[key]);
153
+ Utils.cleanObject(this.fieldFilters);
154
+ Utils.cleanObject(this.staticFieldFilters);
130
155
  /* Load data and return it */
131
- return this.service.getList(Object.assign({
156
+ return this.service.getList(Utils.cleanObject(Object.assign({
132
157
  includes: this.includes,
133
158
  projection: Array.isArray(this.projection) ? this.projection.join(',') : this.projection,
134
159
  page: this.paginator.pageIndex + 1,
135
160
  pageSize: this.paginator.pageSize,
136
161
  search: this.filter.toLowerCase(),
137
- sortBy: this.sort.active,
138
- sortOrder: this.sort.direction
139
- }, Utils.cleanObject(this.fieldFilters) || {}, this.staticFieldFilters), null, { 'CheckOut': 'Yes' });
162
+ sortBy: this.sort?.active,
163
+ sortOrder: this.sort?.direction
164
+ }, this.fieldFilters ?? {}, this.staticFieldFilters ?? {})), null, { 'CheckOut': 'Yes' });
140
165
  }), map((result) => {
141
166
  /* Flip flag to show that loading has finished */
142
167
  this.isLoading = false;
@@ -162,7 +187,9 @@ export class TableDataSource extends DataSource {
162
187
  * @param _ The component that exposes a view over the data provided by this
163
188
  * data source.
164
189
  */
165
- disconnect(_ = null) { }
190
+ disconnect(_ = null) {
191
+ this.isConnected = false;
192
+ }
166
193
  /**
167
194
  * Reloads items
168
195
  * @param clearSelection
@@ -173,6 +200,13 @@ export class TableDataSource extends DataSource {
173
200
  this.selectionModel.clear();
174
201
  }
175
202
  }
203
+ /**
204
+ * Clears field filters
205
+ */
206
+ applyFilters(newFilters = {}) {
207
+ this.fieldFilters = newFilters || {};
208
+ this.reload();
209
+ }
176
210
  /**
177
211
  * Clears field filters
178
212
  */
@@ -209,4 +243,4 @@ export class TableDataSource extends DataSource {
209
243
  }
210
244
  }
211
245
  }
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi90YWJsZS90YWJsZS5kYXRhLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUloRCxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxFQUFFLElBQUksWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJbEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBbUUsU0FBUSxVQUFtQjtJQXNHMUc7Ozs7O09BS0c7SUFDSCxZQUNRLE9BQWlCLEVBQ2pCLFNBQXVCLEVBQ3ZCLElBQWE7UUFFcEIsS0FBSyxFQUFFLENBQUM7UUFKRCxZQUFPLEdBQVAsT0FBTyxDQUFVO1FBQ2pCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsU0FBSSxHQUFKLElBQUksQ0FBUztRQTdHckI7OztXQUdHO1FBQ0ssa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVoRDs7O1dBR0c7UUFDSSxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBRXREOzs7V0FHRztRQUNJLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQXNCLElBQUksQ0FBQyxDQUFDO1FBRXJFOztXQUVHO1FBQ0ksbUJBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBVSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUF3QjlEOztXQUVHO1FBQ0ksYUFBUSxH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Q0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzthQUNoQztTQUNEO0lBQ0YsQ0FBQztDQVdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sbGVjdGlvblZpZXdlciwgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RhYmxlJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YgYXMgb2JzZXJ2YWJsZU9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc2tpcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uL2NvbW1vbi9mdW5jdGlvbnMvdXRpbHMnO1xyXG5pbXBvcnQgeyBHZW5lcmljU2VydmljZSB9IGZyb20gJy4uL2h0dHAvc2VydmljZXMvZ2VuZXJpYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJy4vbW9kZWxzL3BhZ2luYXRpb24nO1xyXG5cclxuLyoqXHJcbiAqIEEgZ2VuZXJpYyBkYXRhc291cmNlIGZvciBkYXRhLXRhYmxlXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgVGFibGVEYXRhU291cmNlPFRFbnRpdHksIFRTZXJ2aWNlIGV4dGVuZHMgR2VuZXJpY1NlcnZpY2U8VEVudGl0eT4+IGV4dGVuZHMgRGF0YVNvdXJjZTxURW50aXR5PiB7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlcHJlc2VudHMgYSB2YWx1ZSB0aGF0IGNoYW5nZXMgb3ZlciB0aW1lLiBcclxuXHQgKiBPYnNlcnZlcnMgY2FuIHN1YnNjcmliZSB0byB0aGUgc3ViamVjdCB0byByZWNlaXZlIGZpbHRlciBjaGFuZ2VzXHJcblx0ICovXHJcblx0cHJpdmF0ZSBfZmlsdGVyQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIG9uRGF0YUxvYWRlZDogZnVuY3Rpb24oJGV2ZW50KVxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgYWZ0ZXIgdGhlIGRhdGEgaXMgbG9hZGVkXHJcblx0ICovXHJcblx0cHVibGljIF9yZWxvYWRDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIG9uRGF0YUxvYWRlZDogZnVuY3Rpb24oJGV2ZW50KVxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgYWZ0ZXIgdGhlIGRhdGEgaXMgbG9hZGVkXHJcblx0ICovXHJcblx0cHVibGljIG9uRGF0YUxvYWRlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFnaW5hdGlvbjxURW50aXR5Pj4obnVsbCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVzZWQgdG8gcG93ZXIgc2VsZWN0aW5nIG9uZSBvciBtb3JlIG9wdGlvbnMgZnJvbSBhIGxpc3QuXHJcblx0ICovXHJcblx0cHVibGljIHNlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPFRFbnRpdHk+KHRydWUsIFtdKTtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyBmaWx0ZXJcclxuXHQgKi9cclxuXHRnZXQgZmlsdGVyKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9maWx0ZXJDaGFuZ2UudmFsdWU7IH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0cyBmaWx0ZXJcclxuXHQgKi9cclxuXHRzZXQgZmlsdGVyKGZpbHRlcjogc3RyaW5nKSB7XHJcblx0XHRpZiAodGhpcy5wYWdpbmF0b3IpIHtcclxuXHRcdFx0dGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuXHRcdFx0dGhpcy5wYWdlSW5kZXggPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuX2ZpbHRlckNoYW5nZS5uZXh0KGZpbHRlcik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXRzIHJlbG9hZCB0b2tlblxyXG5cdCAqL1xyXG5cdGdldCByZWxvYWRUb2tlbigpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fcmVsb2FkQ2hhbmdlLnZhbHVlOyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBuYXZpZ2F0aW9ucyB0byBpbmNsdWRlc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBpbmNsdWRlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBwcm9qZWN0aW9uOiBzdHJpbmcgfCBzdHJpbmdbXVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwcm9qZWN0aW9uOiBzdHJpbmcgfCBzdHJpbmdbXTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGxpc3Qgb2YgaXRlbXNcclxuXHQgKi9cclxuXHRwdWJsaWMgaXRlbXM6IFRFbnRpdHlbXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBVc2VkIHRvIGFkZCBzb21lIGZpZWxkIGZpbHRlcnNcclxuXHQgKi9cclxuXHRwdWJsaWMgZmllbGRGaWx0ZXJzOiBhbnkgPSB7fTtcclxuXHJcblx0LyoqXHJcblx0ICogVXNlZCB0byBhZGQgc29tZSBmaWVsZCBvcGVyYXRvcnNcclxuXHQgKi9cclxuXHRwdWJsaWMgZmllbGRPcGVyYXRvcnM6IGFueSA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBVc2VkIHRvIGFkZCBzb21lIHN0YXRpYyBmaWVsZCBmaWx0ZXJzXHJcblx0ICovXHJcblx0cHVibGljIHN0YXRpY0ZpZWxkRmlsdGVyczogYW55ID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBjdXJyZW50IHBhZ2UgaW5kZXguXHJcblx0ICovXHJcblx0cHVibGljIHBhZ2VJbmRleDogbnVtYmVyID0gMDtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGN1cnJlbnQgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIGJlaW5nIHBhZ2VkXHJcblx0ICovXHJcblx0cHVibGljIHRvdGFsOiBudW1iZXIgPSAwO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgY3VycmVudCBwYWdlIHNpemVcclxuXHQgKi9cclxuXHRwdWJsaWMgcGFnZVNpemU6IG51bWJlciA9IDE1O1xyXG5cclxuXHQvKipcclxuXHQgKiBOdW1iZXIgb2YgcGFnZXNcclxuXHQgKi9cclxuXHRwdWJsaWMgcGFnZUNvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIGZsYWcgdG8gc2hvdyBsb2FkaW5nIHByb2Nlc3NcclxuXHQgKi9cclxuXHRwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogQ29uc3RydWN0b3JcclxuXHQgKiBAcGFyYW0gc2VydmljZSBcclxuXHQgKiBAcGFyYW0gcGFnaW5hdG9yIFxyXG5cdCAqIEBwYXJhbSBzb3J0IFxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIHNlcnZpY2U6IFRTZXJ2aWNlLFxyXG5cdFx0cHVibGljIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yLFxyXG5cdFx0cHVibGljIHNvcnQ6IE1hdFNvcnRcclxuXHQpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb25uZWN0cyBhIGNvbGxlY3Rpb24gdmlld2VyIChzdWNoIGFzIGEgZGF0YS10YWJsZSkgdG8gdGhpcyBkYXRhIHNvdXJjZS5cclxuXHQgKiBAcGFyYW0gXyBUaGUgY29tcG9uZW50IHRoYXQgZXhwb3NlcyBhIHZpZXcgb3ZlciB0aGUgZGF0YSBwcm92aWRlZCBieSB0aGlzXHJcblx0ICogICAgIGRhdGEgc291cmNlLlxyXG5cdCAqIEByZXR1cm5zIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhIG5ldyB2YWx1ZSB3aGVuIHRoZSBkYXRhIGNoYW5nZXMuXHJcblx0ICovXHJcblx0cHVibGljIGNvbm5lY3QoXzogQ29sbGVjdGlvblZpZXdlciA9IG51bGwpOiBPYnNlcnZhYmxlPFRFbnRpdHlbXT4ge1xyXG5cdFx0LyogQSBsaXN0IG9mIGZpZWxkcyB0byBvYnNlcnZlICAqL1xyXG5cdFx0Y29uc3QgZGlzcGxheURhdGFDaGFuZ2VzID0gW1xyXG5cdFx0XHR0aGlzLnNvcnQ/LnNvcnRDaGFuZ2UsXHJcblx0XHRcdHRoaXMucGFnaW5hdG9yPy5wYWdlIHx8IDEsXHJcblx0XHRcdHRoaXMuX2ZpbHRlckNoYW5nZSxcclxuXHRcdFx0dGhpcy5fcmVsb2FkQ2hhbmdlXHJcblx0XHRdO1xyXG5cclxuXHRcdC8qIElmIHRoZSB1c2VyIGNoYW5nZXMgdGhlIHNvcnQgb3JkZXIsIHJlc2V0IGJhY2sgdG8gdGhlIGZpcnN0IHBhZ2UgKi9cclxuXHRcdHRoaXMuc29ydC5zb3J0Q2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7IH0pO1xyXG5cclxuXHRcdHJldHVybiBtZXJnZSguLi5kaXNwbGF5RGF0YUNoYW5nZXMpXHJcblx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdHNraXAoMSksXHJcblx0XHRcdFx0c3dpdGNoTWFwKCgpID0+IHtcclxuXHRcdFx0XHRcdC8qIEZsaXAgZmxhZyB0byBzaG93IHRoYXQgbG9hZGluZyBoYXMgYmVndW4gKi9cclxuXHRcdFx0XHRcdHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHQvKiBSZW1vdmUgZW1wdHkgZmlsdGVycyAqL1xyXG5cdFx0XHRcdFx0T2JqZWN0LmtleXModGhpcy5maWVsZEZpbHRlcnMpLmZvckVhY2goKGtleSkgPT4gKCh0aGlzLmZpZWxkRmlsdGVyc1trZXldID09IG51bGwgfHwgdGhpcy5maWVsZEZpbHRlcnNba2V5XSA9PSAnJyB8fCB0aGlzLmZpZWxkRmlsdGVyc1trZXldID09ICd1bmRlZmluZWQnKSkgJiYgdGhpcy5maWVsZEZpbHRlcnNba2V5XSAhPSAwICYmIGRlbGV0ZSB0aGlzLmZpZWxkRmlsdGVyc1trZXldKTtcclxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKHRoaXMuc3RhdGljRmllbGRGaWx0ZXJzKS5mb3JFYWNoKChrZXkpID0+ICgodGhpcy5zdGF0aWNGaWVsZEZpbHRlcnNba2V5XSA9PSBudWxsIHx8IHRoaXMuc3RhdGljRmllbGRGaWx0ZXJzW2tleV0gPT0gJycgfHwgdGhpcy5zdGF0aWNGaWVsZEZpbHRlcnNba2V5XSA9PSAndW5kZWZpbmVkJykpICYmIHRoaXMuc3RhdGljRmllbGRGaWx0ZXJzW2tleV0gIT0gMCAmJiBkZWxldGUgdGhpcy5zdGF0aWNGaWVsZEZpbHRlcnNba2V5XSk7XHJcblxyXG5cdFx0XHRcdFx0LyogTG9hZCBkYXRhIGFuZCByZXR1cm4gaXQgKi9cclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0TGlzdChPYmplY3QuYXNzaWduKHtcclxuXHRcdFx0XHRcdFx0aW5jbHVkZXM6IHRoaXMuaW5jbHVkZXMsXHJcblx0XHRcdFx0XHRcdHByb2plY3Rpb246IEFycmF5LmlzQXJyYXkodGhpcy5wcm9qZWN0aW9uKSA/IHRoaXMucHJvamVjdGlvbi5qb2luKCcsJykgOiB0aGlzLnByb2plY3Rpb24sXHJcblx0XHRcdFx0XHRcdHBhZ2U6IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCArIDEsXHJcblx0XHRcdFx0XHRcdHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSxcclxuXHRcdFx0XHRcdFx0c2VhcmNoOiB0aGlzLmZpbHRlci50b0xvd2VyQ2FzZSgpLFxyXG5cdFx0XHRcdFx0XHRzb3J0Qnk6IHRoaXMuc29ydC5hY3RpdmUsXHJcblx0XHRcdFx0XHRcdHNvcnRPcmRlcjogdGhpcy5zb3J0LmRpcmVjdGlvblxyXG5cdFx0XHRcdFx0fSwgVXRpbHMuY2xlYW5PYmplY3QodGhpcy5maWVsZEZpbHRlcnMpIHx8IHt9LCB0aGlzLnN0YXRpY0ZpZWxkRmlsdGVycyksIG51bGwsIHsgJ0NoZWNrT3V0JzogJ1llcycgfSk7XHJcblx0XHRcdFx0fSksXHJcblx0XHRcdFx0bWFwKChyZXN1bHQ6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0LyogRmxpcCBmbGFnIHRvIHNob3cgdGhhdCBsb2FkaW5nIGhhcyBmaW5pc2hlZCAqL1xyXG5cdFx0XHRcdFx0dGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHQvKiBVcGRhdGUgcGFnaW5hdGlvbiBmaWVsZHMgKi9cclxuXHRcdFx0XHRcdHRoaXMucGFnZUluZGV4ID0gTWF0aC5tYXgoTWF0aC5taW4ocmVzdWx0LnBhZ2UgLSAxLCByZXN1bHQucGFnZUNvdW50IC0gMSksIDApO1xyXG5cdFx0XHRcdFx0dGhpcy50b3RhbCA9IHJlc3VsdC50b3RhbDtcclxuXHRcdFx0XHRcdHRoaXMucGFnZVNpemUgPSByZXN1bHQucGFnZVNpemU7XHJcblx0XHRcdFx0XHR0aGlzLnBhZ2VDb3VudCA9IHJlc3VsdC5wYWdlQ291bnQ7XHJcblx0XHRcdFx0XHR0aGlzLml0ZW1zID0gcmVzdWx0Lml0ZW1zO1xyXG5cclxuXHRcdFx0XHRcdC8qIFJhaXNlIG9ubG9hZCBldmVudCAqL1xyXG5cdFx0XHRcdFx0dGhpcy5vbkRhdGFMb2FkZWQubmV4dChyZXN1bHQpO1xyXG5cclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1zO1xyXG5cdFx0XHRcdH0pLFxyXG5cdFx0XHRcdGNhdGNoRXJyb3IoKCkgPT4ge1xyXG5cdFx0XHRcdFx0LyogRmxpcCBmbGFnIHRvIHNob3cgdGhhdCBsb2FkaW5nIGhhcyBmaW5pc2hlZCAqL1xyXG5cdFx0XHRcdFx0dGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gb2JzZXJ2YWJsZU9mKFtdKTtcclxuXHRcdFx0XHR9KSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEaXNjb25uZWN0cyBhIGNvbGxlY3Rpb24gdmlld2VyIChzdWNoIGFzIGEgZGF0YS10YWJsZSkgZnJvbSB0aGlzIGRhdGEgc291cmNlLiBDYW4gYmUgdXNlZFxyXG5cdCAqIHRvIHBlcmZvcm0gYW55IGNsZWFuLXVwIG9yIHRlYXItZG93biBvcGVyYXRpb25zIHdoZW4gYSB2aWV3IGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBfIFRoZSBjb21wb25lbnQgdGhhdCBleHBvc2VzIGEgdmlldyBvdmVyIHRoZSBkYXRhIHByb3ZpZGVkIGJ5IHRoaXNcclxuXHQgKiAgICAgZGF0YSBzb3VyY2UuXHJcblx0ICovXHJcblx0cHVibGljIGRpc2Nvbm5lY3QoXzogQ29sbGVjdGlvblZpZXdlciA9IG51bGwpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBSZWxvYWRzIGl0ZW1zXHJcblx0ICogQHBhcmFtIGNsZWFyU2VsZWN0aW9uIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyByZWxvYWQoY2xlYXJTZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcblx0XHR0aGlzLl9yZWxvYWRDaGFuZ2UubmV4dChNYXRoLnJhbmRvbSgpKTtcclxuXHJcblx0XHRpZiAoY2xlYXJTZWxlY3Rpb24pIHtcclxuXHRcdFx0dGhpcy5zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2xlYXJzIGZpZWxkIGZpbHRlcnNcclxuXHQgKi9cclxuXHRwdWJsaWMgY2xlYXJGaWx0ZXJzKG5ld0ZpbHRlcnM6IGFueSA9IHt9KTogdm9pZCB7XHJcblx0XHR0aGlzLmZpZWxkRmlsdGVycyA9IG5ld0ZpbHRlcnMgfHwge307XHJcblx0XHR0aGlzLnJlbG9hZCgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2tzLCB3aGV0aGVyIGFsbCBpdGVtcyBhcmUgc2VsZWN0ZWRcclxuXHQgKi9cclxuXHRwdWJsaWMgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLnNlbGVjdGlvbk1vZGVsLmlzRW1wdHkoKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQubGVuZ3RoID09PSB0aGlzLnRvdGFsO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVG9nZ2xlcyBzZWxlY3RlZCBpdGVtc1xyXG5cdCAqIEBwYXJhbSBjaGVja2JveCBcclxuXHQgKiBAcGFyYW0gcHJlZGljYXRlXHJcblx0ICovXHJcblx0cHVibGljIHRvZ2dsZVNlbGVjdChjaGVja2JveDogTWF0Q2hlY2tib3hDaGFuZ2UsIHByZWRpY2F0ZT86ICh2YWx1ZTogVEVudGl0eSwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRFbnRpdHlbXSkgPT4gdW5rbm93bikge1xyXG5cdFx0aWYgKHRoaXMuc2VsZWN0aW9uTW9kZWwuaGFzVmFsdWUoKSkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XHJcblx0XHRcdGNoZWNrYm94LnNvdXJjZS5jaGVja2VkID0gZmFsc2U7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLml0ZW1zLmZpbHRlcihwcmVkaWNhdGUgPyBwcmVkaWNhdGUgOiB4ID0+IHgpXHJcblx0XHRcdFx0LmZpbHRlcih4ID0+ICF4Wydsb2NrZWQnXSlcclxuXHRcdFx0XHQuZm9yRWFjaChkYXRhID0+IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGRhdGEpKTtcclxuXHJcblx0XHRcdGlmICh0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmxlbmd0aCAhPT0gdGhpcy50b3RhbCkge1xyXG5cdFx0XHRcdGNoZWNrYm94LnNvdXJjZS5jaGVja2VkID0gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBzZWxlY3RlZCBJdGVtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBnZXRTZWxlY3RlZCA9IDxUVHlwZT4oa2V5OiBzdHJpbmcpOiBUVHlwZVtdID0+IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQubWFwKHggPT4geFtrZXldKTtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHNlbGVjdGVkIEl0ZW1zXHJcblx0ICovXHJcblx0cHVibGljIGdldFNlbGVjdGVkSWRzID0gKCk6IG51bWJlcltdID0+IHRoaXMuZ2V0U2VsZWN0ZWQ8bnVtYmVyPignaWQnKTtcclxufSJdfQ==
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi90YWJsZS90YWJsZS5kYXRhLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzdDLE9BQU8sRUFBRSxPQUFPLEVBQVEsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxFQUFFLElBQUksWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJbEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBbUUsU0FBUSxVQUFtQjtJQStIMUc7Ozs7O09BS0c7SUFDSCxZQUNRLE9BQWlCLEVBQ2pCLFNBQXVCLEVBQ3ZCLE1BQWdCO1FBRXZCLEtBQUssRUFBRSxDQUFDO1FBSkQsWUFBTyxHQUFQLE9BQU8sQ0FBVTtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLFdBQU0sR0FBTixNQUFNLENBQVU7UUF0SXhCOzs7V0FHRztRQUNLLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFaEQ7OztXQUdHO1FBQ0ksa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUV0RDs7O1dBR0c7UUFDSSxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFzQixJQUFJLENBQUMsQ0FBQztRQUVyRTs7V0FFRztRQUNJLG1CQUFjLEdBQUcsSUFBSSxjQUFjLENBQVUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBbUI5RDs7V0FFRztRQUNLLGlCQUFZLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFOUQ7O1dBRUc7UUFDSyxVQUFLLEdBQW1CLElBQUksT0FBTyxFQUFFLENBQUM7UUFpQjlDOztXQUVHO1FBQ0ksZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFcEM7O1dBRUc7UUFDSSxhQUFRLEdBQWtCLEVBQUUsQ0FBQztRQU9wQzs7V0FFRztRQUNJLFVBQUssR0FBYyxFQUFFLENBQUM7UUFFN0I7O1dBRUc7UUFDSSxpQkFBWSxHQUFRLEVBQUUsQ0FBQztRQUU5Qjs7V0FFRztRQUNJLG1CQUFjLEdBQVEsRUFBRSxDQUFDO1FBRWhDOztXQUVHO1FBQ0ksdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBRXBDOztXQUVHO1FBQ0ksY0FBUyxHQUFXLENBQUMsQ0FBQztRQUU3Qjs7V0FFRztRQUNJLFVBQUssR0FBVyxDQUFDLENBQUM7UUFFekI7O1dBRUc7UUFDSSxhQUFRLEdBQVcsRUFBRSxDQUFDO1FBRTdCOztXQUVHO1FBQ0ksY0FBUyxHQUFXLENBQUMsQ0FBQztRQUU3Qjs7V0FFRztRQUNJLGNBQVMsR0FBWSxLQUFLLENBQUM7UUF5SmxDOztXQUVHO1FBQ0ksZ0JBQVcsR0FBRyxDQUFRLEdBQVcsRUFBVyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFcEc7O1dBRUc7UUFDSSxtQkFBYyxHQUFHLEdBQWEsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQVMsSUFBSSxDQUFDLENBQUM7UUFuSnRFLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0lBQ3BCLENBQUM7SUFuSEQ7O09BRUc7SUFDSCxJQUFJLE1BQU0sS0FBYSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUV6RDs7T0FFRztJQUNILElBQUksTUFBTSxDQUFDLE1BQWM7UUFDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztTQUNuQjtRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFZRDs7O09BR0c7SUFDSCxJQUFJLElBQUksS0FBcUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRCxJQUFJLElBQUksQ0FBQyxJQUFvQjtRQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksV0FBVyxLQUFhLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBNkU5RDs7Ozs7T0FLRztJQUNJLE9BQU8sQ0FBQyxJQUFzQixJQUFJO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRXhCLGtDQUFrQztRQUNsQyxNQUFNLGtCQUFrQixHQUFHO1lBQzFCLElBQUksQ0FBQyxZQUFZO1lBQ2pCLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSTtZQUNwQixJQUFJLENBQUMsYUFBYTtZQUNsQixJQUFJLENBQUMsYUFBYTtTQUNsQixDQUFDO1FBRUYsc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJFLE9BQU8sS0FBSyxDQUFDLEdBQUcsa0JBQWtCLENBQUM7YUFDakMsSUFBSSxDQUNKLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsOENBQThDO1lBQzlDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBRXRCLDBCQUEwQjtZQUMxQixLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBRTNDLDZCQUE2QjtZQUM3QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDM0QsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixVQUFVLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDeEYsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLENBQUM7Z0JBQ2xDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVE7Z0JBQ2pDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtnQkFDakMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTTtnQkFDekIsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUzthQUMvQixFQUFFLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ25CLGlEQUFpRDtZQUNqRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUV2Qiw4QkFBOEI7WUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFFMUIsd0JBQXdCO1lBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRS9CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNuQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2YsaURBQWlEO1lBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBRXZCLE9BQU8sWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksVUFBVSxDQUFDLElBQXNCLElBQUk7UUFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxpQkFBMEIsSUFBSTtRQUMzQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUV2QyxJQUFJLGNBQWMsRUFBRTtZQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzVCO0lBQ0YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWSxDQUFDLGFBQWtCLEVBQUU7UUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLElBQUksRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxhQUFrQixFQUFFO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhO1FBQ25CLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNsQyxPQUFPLEtBQUssQ0FBQztTQUNiO1FBRUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztJQUMzRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFlBQVksQ0FBQyxRQUEyQixFQUFFLFNBQXdFO1FBQ3hILElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztTQUNoQzthQUFNO1lBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUMvQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUVwRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUN2RCxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7YUFDaEM7U0FDRDtJQUNGLENBQUM7Q0FXRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbGxlY3Rpb25WaWV3ZXIsIFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90YWJsZSc7XHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCwgU29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiBhcyBvYnNlcnZhYmxlT2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBza2lwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vY29tbW9uL2Z1bmN0aW9ucy91dGlscyc7XHJcbmltcG9ydCB7IEdlbmVyaWNTZXJ2aWNlIH0gZnJvbSAnLi4vaHR0cC9zZXJ2aWNlcy9nZW5lcmljLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnLi9tb2RlbHMvcGFnaW5hdGlvbic7XHJcblxyXG4vKipcclxuICogQSBnZW5lcmljIGRhdGFzb3VyY2UgZm9yIGRhdGEtdGFibGVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBUYWJsZURhdGFTb3VyY2U8VEVudGl0eSwgVFNlcnZpY2UgZXh0ZW5kcyBHZW5lcmljU2VydmljZTxURW50aXR5Pj4gZXh0ZW5kcyBEYXRhU291cmNlPFRFbnRpdHk+IHtcclxuXHJcblx0LyoqXHJcblx0ICogUmVwcmVzZW50cyBhIHZhbHVlIHRoYXQgY2hhbmdlcyBvdmVyIHRpbWUuIFxyXG5cdCAqIE9ic2VydmVycyBjYW4gc3Vic2NyaWJlIHRvIHRoZSBzdWJqZWN0IHRvIHJlY2VpdmUgZmlsdGVyIGNoYW5nZXNcclxuXHQgKi9cclxuXHRwcml2YXRlIF9maWx0ZXJDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcclxuXHJcblx0LyoqXHJcblx0ICogb25EYXRhTG9hZGVkOiBmdW5jdGlvbigkZXZlbnQpXHJcblx0ICogRXZlbnQgZW1pdHRlZCBhZnRlciB0aGUgZGF0YSBpcyBsb2FkZWRcclxuXHQgKi9cclxuXHRwdWJsaWMgX3JlbG9hZENoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcblx0LyoqXHJcblx0ICogb25EYXRhTG9hZGVkOiBmdW5jdGlvbigkZXZlbnQpXHJcblx0ICogRXZlbnQgZW1pdHRlZCBhZnRlciB0aGUgZGF0YSBpcyBsb2FkZWRcclxuXHQgKi9cclxuXHRwdWJsaWMgb25EYXRhTG9hZGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uPFRFbnRpdHk+PihudWxsKTtcclxuXHJcblx0LyoqXHJcblx0ICogVXNlZCB0byBwb3dlciBzZWxlY3Rpbmcgb25lIG9yIG1vcmUgb3B0aW9ucyBmcm9tIGEgbGlzdC5cclxuXHQgKi9cclxuXHRwdWJsaWMgc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8VEVudGl0eT4odHJ1ZSwgW10pO1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXRzIGZpbHRlclxyXG5cdCAqL1xyXG5cdGdldCBmaWx0ZXIoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2ZpbHRlckNoYW5nZS52YWx1ZTsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXRzIGZpbHRlclxyXG5cdCAqL1xyXG5cdHNldCBmaWx0ZXIoZmlsdGVyOiBzdHJpbmcpIHtcclxuXHRcdGlmICh0aGlzLnBhZ2luYXRvcikge1xyXG5cdFx0XHR0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG5cdFx0XHR0aGlzLnBhZ2VJbmRleCA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5fZmlsdGVyQ2hhbmdlLm5leHQoZmlsdGVyKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNvcnQgY2hhbmdlIGV2ZW50IGVtaXR0ZXJcclxuXHQgKi9cclxuXHRwcml2YXRlIG9uU29ydENoYW5nZTogRXZlbnRFbWl0dGVyPFNvcnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHQvKipcclxuXHQgKiBfc29ydDogTWF0U29ydCB8IG51bGxcclxuXHQgKi9cclxuXHRwcml2YXRlIF9zb3J0OiBNYXRTb3J0IHwgbnVsbCA9IG5ldyBNYXRTb3J0KCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluc3RhbmNlIG9mIHRoZSBNYXRTb3J0IGRpcmVjdGl2ZSB1c2VkIGJ5IHRoZSB0YWJsZSB0byBjb250cm9sIGl0cyBzb3J0aW5nLiBTb3J0IGNoYW5nZXNcclxuXHQgKiBlbWl0dGVkIGJ5IHRoZSBNYXRTb3J0IHdpbGwgdHJpZ2dlciBhbiB1cGRhdGUgdG8gdGhlIHRhYmxlJ3MgcmVuZGVyZWQgZGF0YS5cclxuXHQgKi9cclxuXHRnZXQgc29ydCgpOiBNYXRTb3J0IHwgbnVsbCB7IHJldHVybiB0aGlzLl9zb3J0OyB9XHJcblx0c2V0IHNvcnQoc29ydDogTWF0U29ydCB8IG51bGwpIHtcclxuXHRcdHRoaXMuX3NvcnQgPSBzb3J0O1xyXG5cdFx0dGhpcy5fc29ydD8uc29ydENoYW5nZS5zdWJzY3JpYmUoeCA9PiB0aGlzLm9uU29ydENoYW5nZS5lbWl0KHgpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgcmVsb2FkIHRva2VuXHJcblx0ICovXHJcblx0Z2V0IHJlbG9hZFRva2VuKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9yZWxvYWRDaGFuZ2UudmFsdWU7IH1cclxuXHJcblx0LyoqXHJcblx0ICogaXNDb25uZWN0ZWQ6IGJvb2xlYW5cclxuXHQgKi9cclxuXHRwdWJsaWMgaXNDb25uZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIG5hdmlnYXRpb25zIHRvIGluY2x1ZGVzXHJcblx0ICovXHJcblx0cHVibGljIGluY2x1ZGVzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIHByb2plY3Rpb246IHN0cmluZyB8IHN0cmluZ1tdXHJcblx0ICovXHJcblx0cHVibGljIHByb2plY3Rpb246IHN0cmluZyB8IHN0cmluZ1tdO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgbGlzdCBvZiBpdGVtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBpdGVtczogVEVudGl0eVtdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVzZWQgdG8gYWRkIHNvbWUgZmllbGQgZmlsdGVyc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBmaWVsZEZpbHRlcnM6IGFueSA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBVc2VkIHRvIGFkZCBzb21lIGZpZWxkIG9wZXJhdG9yc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBmaWVsZE9wZXJhdG9yczogYW55ID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVzZWQgdG8gYWRkIHNvbWUgc3RhdGljIGZpZWxkIGZpbHRlcnNcclxuXHQgKi9cclxuXHRwdWJsaWMgc3RhdGljRmllbGRGaWx0ZXJzOiBhbnkgPSB7fTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGN1cnJlbnQgcGFnZSBpbmRleC5cclxuXHQgKi9cclxuXHRwdWJsaWMgcGFnZUluZGV4OiBudW1iZXIgPSAwO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgY3VycmVudCB0b3RhbCBudW1iZXIgb2YgaXRlbXMgYmVpbmcgcGFnZWRcclxuXHQgKi9cclxuXHRwdWJsaWMgdG90YWw6IG51bWJlciA9IDA7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBjdXJyZW50IHBhZ2Ugc2l6ZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwYWdlU2l6ZTogbnVtYmVyID0gMTU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIE51bWJlciBvZiBwYWdlc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBwYWdlQ291bnQ6IG51bWJlciA9IDA7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgZmxhZyB0byBzaG93IGxvYWRpbmcgcHJvY2Vzc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogQ29uc3RydWN0b3JcclxuXHQgKiBAcGFyYW0gc2VydmljZSBcclxuXHQgKiBAcGFyYW0gcGFnaW5hdG9yIFxyXG5cdCAqIEBwYXJhbSBzb3J0IFxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIHNlcnZpY2U6IFRTZXJ2aWNlLFxyXG5cdFx0cHVibGljIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yLFxyXG5cdFx0cHVibGljIHNvcnRlcj86IE1hdFNvcnRcclxuXHQpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHR0aGlzLnNvcnQgPSBzb3J0ZXI7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb25uZWN0cyBhIGNvbGxlY3Rpb24gdmlld2VyIChzdWNoIGFzIGEgZGF0YS10YWJsZSkgdG8gdGhpcyBkYXRhIHNvdXJjZS5cclxuXHQgKiBAcGFyYW0gXyBUaGUgY29tcG9uZW50IHRoYXQgZXhwb3NlcyBhIHZpZXcgb3ZlciB0aGUgZGF0YSBwcm92aWRlZCBieSB0aGlzXHJcblx0ICogICAgIGRhdGEgc291cmNlLlxyXG5cdCAqIEByZXR1cm5zIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhIG5ldyB2YWx1ZSB3aGVuIHRoZSBkYXRhIGNoYW5nZXMuXHJcblx0ICovXHJcblx0cHVibGljIGNvbm5lY3QoXzogQ29sbGVjdGlvblZpZXdlciA9IG51bGwpOiBPYnNlcnZhYmxlPFRFbnRpdHlbXT4ge1xyXG5cdFx0dGhpcy5pc0Nvbm5lY3RlZCA9IHRydWU7XHJcblxyXG5cdFx0LyogQSBsaXN0IG9mIGZpZWxkcyB0byBvYnNlcnZlICAqL1xyXG5cdFx0Y29uc3QgZGlzcGxheURhdGFDaGFuZ2VzID0gW1xyXG5cdFx0XHR0aGlzLm9uU29ydENoYW5nZSxcclxuXHRcdFx0dGhpcy5wYWdpbmF0b3I/LnBhZ2UsXHJcblx0XHRcdHRoaXMuX2ZpbHRlckNoYW5nZSxcclxuXHRcdFx0dGhpcy5fcmVsb2FkQ2hhbmdlXHJcblx0XHRdO1xyXG5cclxuXHRcdC8qIElmIHRoZSB1c2VyIGNoYW5nZXMgdGhlIHNvcnQgb3JkZXIsIHJlc2V0IGJhY2sgdG8gdGhlIGZpcnN0IHBhZ2UgKi9cclxuXHRcdHRoaXMub25Tb3J0Q2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7IH0pO1xyXG5cclxuXHRcdHJldHVybiBtZXJnZSguLi5kaXNwbGF5RGF0YUNoYW5nZXMpXHJcblx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdHNraXAoMSksXHJcblx0XHRcdFx0c3dpdGNoTWFwKCgpID0+IHtcclxuXHRcdFx0XHRcdC8qIEZsaXAgZmxhZyB0byBzaG93IHRoYXQgbG9hZGluZyBoYXMgYmVndW4gKi9cclxuXHRcdFx0XHRcdHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHQvKiBSZW1vdmUgZW1wdHkgZmlsdGVycyAqL1xyXG5cdFx0XHRcdFx0VXRpbHMuY2xlYW5PYmplY3QodGhpcy5maWVsZEZpbHRlcnMpO1xyXG5cdFx0XHRcdFx0VXRpbHMuY2xlYW5PYmplY3QodGhpcy5zdGF0aWNGaWVsZEZpbHRlcnMpO1xyXG5cclxuXHRcdFx0XHRcdC8qIExvYWQgZGF0YSBhbmQgcmV0dXJuIGl0ICovXHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXJ2aWNlLmdldExpc3QoVXRpbHMuY2xlYW5PYmplY3QoT2JqZWN0LmFzc2lnbih7XHJcblx0XHRcdFx0XHRcdGluY2x1ZGVzOiB0aGlzLmluY2x1ZGVzLFxyXG5cdFx0XHRcdFx0XHRwcm9qZWN0aW9uOiBBcnJheS5pc0FycmF5KHRoaXMucHJvamVjdGlvbikgPyB0aGlzLnByb2plY3Rpb24uam9pbignLCcpIDogdGhpcy5wcm9qZWN0aW9uLFxyXG5cdFx0XHRcdFx0XHRwYWdlOiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKyAxLFxyXG5cdFx0XHRcdFx0XHRwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsXHJcblx0XHRcdFx0XHRcdHNlYXJjaDogdGhpcy5maWx0ZXIudG9Mb3dlckNhc2UoKSxcclxuXHRcdFx0XHRcdFx0c29ydEJ5OiB0aGlzLnNvcnQ/LmFjdGl2ZSxcclxuXHRcdFx0XHRcdFx0c29ydE9yZGVyOiB0aGlzLnNvcnQ/LmRpcmVjdGlvblxyXG5cdFx0XHRcdFx0fSwgdGhpcy5maWVsZEZpbHRlcnMgPz8ge30sIHRoaXMuc3RhdGljRmllbGRGaWx0ZXJzID8/IHt9KSksIG51bGwsIHsgJ0NoZWNrT3V0JzogJ1llcycgfSk7XHJcblx0XHRcdFx0fSksXHJcblx0XHRcdFx0bWFwKChyZXN1bHQ6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0LyogRmxpcCBmbGFnIHRvIHNob3cgdGhhdCBsb2FkaW5nIGhhcyBmaW5pc2hlZCAqL1xyXG5cdFx0XHRcdFx0dGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHQvKiBVcGRhdGUgcGFnaW5hdGlvbiBmaWVsZHMgKi9cclxuXHRcdFx0XHRcdHRoaXMucGFnZUluZGV4ID0gTWF0aC5tYXgoTWF0aC5taW4ocmVzdWx0LnBhZ2UgLSAxLCByZXN1bHQucGFnZUNvdW50IC0gMSksIDApO1xyXG5cdFx0XHRcdFx0dGhpcy50b3RhbCA9IHJlc3VsdC50b3RhbDtcclxuXHRcdFx0XHRcdHRoaXMucGFnZVNpemUgPSByZXN1bHQucGFnZVNpemU7XHJcblx0XHRcdFx0XHR0aGlzLnBhZ2VDb3VudCA9IHJlc3VsdC5wYWdlQ291bnQ7XHJcblx0XHRcdFx0XHR0aGlzLml0ZW1zID0gcmVzdWx0Lml0ZW1zO1xyXG5cclxuXHRcdFx0XHRcdC8qIFJhaXNlIG9ubG9hZCBldmVudCAqL1xyXG5cdFx0XHRcdFx0dGhpcy5vbkRhdGFMb2FkZWQubmV4dChyZXN1bHQpO1xyXG5cclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1zO1xyXG5cdFx0XHRcdH0pLFxyXG5cdFx0XHRcdGNhdGNoRXJyb3IoKCkgPT4ge1xyXG5cdFx0XHRcdFx0LyogRmxpcCBmbGFnIHRvIHNob3cgdGhhdCBsb2FkaW5nIGhhcyBmaW5pc2hlZCAqL1xyXG5cdFx0XHRcdFx0dGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gb2JzZXJ2YWJsZU9mKFtdKTtcclxuXHRcdFx0XHR9KSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEaXNjb25uZWN0cyBhIGNvbGxlY3Rpb24gdmlld2VyIChzdWNoIGFzIGEgZGF0YS10YWJsZSkgZnJvbSB0aGlzIGRhdGEgc291cmNlLiBDYW4gYmUgdXNlZFxyXG5cdCAqIHRvIHBlcmZvcm0gYW55IGNsZWFuLXVwIG9yIHRlYXItZG93biBvcGVyYXRpb25zIHdoZW4gYSB2aWV3IGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBfIFRoZSBjb21wb25lbnQgdGhhdCBleHBvc2VzIGEgdmlldyBvdmVyIHRoZSBkYXRhIHByb3ZpZGVkIGJ5IHRoaXNcclxuXHQgKiAgICAgZGF0YSBzb3VyY2UuXHJcblx0ICovXHJcblx0cHVibGljIGRpc2Nvbm5lY3QoXzogQ29sbGVjdGlvblZpZXdlciA9IG51bGwpOiB2b2lkIHtcclxuXHRcdHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbG9hZHMgaXRlbXNcclxuXHQgKiBAcGFyYW0gY2xlYXJTZWxlY3Rpb24gXHJcblx0ICovXHJcblx0cHVibGljIHJlbG9hZChjbGVhclNlbGVjdGlvbjogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuXHRcdHRoaXMuX3JlbG9hZENoYW5nZS5uZXh0KE1hdGgucmFuZG9tKCkpO1xyXG5cclxuXHRcdGlmIChjbGVhclNlbGVjdGlvbikge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDbGVhcnMgZmllbGQgZmlsdGVyc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBhcHBseUZpbHRlcnMobmV3RmlsdGVyczogYW55ID0ge30pOiB2b2lkIHtcclxuXHRcdHRoaXMuZmllbGRGaWx0ZXJzID0gbmV3RmlsdGVycyB8fCB7fTtcclxuXHRcdHRoaXMucmVsb2FkKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDbGVhcnMgZmllbGQgZmlsdGVyc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBjbGVhckZpbHRlcnMobmV3RmlsdGVyczogYW55ID0ge30pOiB2b2lkIHtcclxuXHRcdHRoaXMuZmllbGRGaWx0ZXJzID0gbmV3RmlsdGVycyB8fCB7fTtcclxuXHRcdHRoaXMucmVsb2FkKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDaGVja3MsIHdoZXRoZXIgYWxsIGl0ZW1zIGFyZSBzZWxlY3RlZFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKHRoaXMuc2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5sZW5ndGggPT09IHRoaXMudG90YWw7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUb2dnbGVzIHNlbGVjdGVkIGl0ZW1zXHJcblx0ICogQHBhcmFtIGNoZWNrYm94IFxyXG5cdCAqIEBwYXJhbSBwcmVkaWNhdGVcclxuXHQgKi9cclxuXHRwdWJsaWMgdG9nZ2xlU2VsZWN0KGNoZWNrYm94OiBNYXRDaGVja2JveENoYW5nZSwgcHJlZGljYXRlPzogKHZhbHVlOiBURW50aXR5LCBpbmRleDogbnVtYmVyLCBhcnJheTogVEVudGl0eVtdKSA9PiB1bmtub3duKSB7XHJcblx0XHRpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbC5oYXNWYWx1ZSgpKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcclxuXHRcdFx0Y2hlY2tib3guc291cmNlLmNoZWNrZWQgPSBmYWxzZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuaXRlbXMuZmlsdGVyKHByZWRpY2F0ZSA/IHByZWRpY2F0ZSA6IHggPT4geClcclxuXHRcdFx0XHQuZmlsdGVyKHggPT4gIXhbJ2xvY2tlZCddKVxyXG5cdFx0XHRcdC5mb3JFYWNoKGRhdGEgPT4gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoZGF0YSkpO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQubGVuZ3RoICE9PSB0aGlzLnRvdGFsKSB7XHJcblx0XHRcdFx0Y2hlY2tib3guc291cmNlLmNoZWNrZWQgPSBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHNlbGVjdGVkIEl0ZW1zXHJcblx0ICovXHJcblx0cHVibGljIGdldFNlbGVjdGVkID0gPFRUeXBlPihrZXk6IHN0cmluZyk6IFRUeXBlW10gPT4gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5tYXAoeCA9PiB4W2tleV0pO1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgc2VsZWN0ZWQgSXRlbXNcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0U2VsZWN0ZWRJZHMgPSAoKTogbnVtYmVyW10gPT4gdGhpcy5nZXRTZWxlY3RlZDxudW1iZXI+KCdpZCcpO1xyXG59Il19