@netgrif/components-core 7.0.0-beta.2 → 7.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/authentication/authentication.factory.mjs +5 -1
- package/esm2022/lib/authentication/models/credentials.mjs +1 -1
- package/esm2022/lib/authentication/models/user.transformer.mjs +2 -2
- package/esm2022/lib/authentication/services/methods/basic-authentication/basic-with-realm-authentication.service.mjs +43 -0
- package/esm2022/lib/authentication/services/public-api.mjs +2 -1
- package/esm2022/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.mjs +4 -4
- package/esm2022/lib/navigation/model/uri-resource.mjs +1 -1
- package/esm2022/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.mjs +11 -11
- package/esm2022/lib/navigation/service/uri.service.mjs +10 -10
- package/esm2022/lib/resources/abstract-endpoint/abstract-resource.service.mjs +28 -1
- package/esm2022/lib/resources/engine-endpoint/petri-net-resource.service.mjs +5 -3
- package/esm2022/lib/resources/engine-endpoint/public/public-petri-net-resource.service.mjs +3 -2
- package/esm2022/lib/resources/engine-endpoint/user-resource.service.mjs +36 -35
- package/esm2022/lib/side-menu/content-components/import-net/abstract-import-net.component.mjs +2 -2
- package/esm2022/lib/task-content/services/field-converter.service.mjs +4 -4
- package/esm2022/lib/user/models/iuser.mjs +1 -1
- package/esm2022/lib/user/models/user.mjs +6 -2
- package/esm2022/lib/user/services/user-list.service.mjs +2 -2
- package/esm2022/lib/user/services/user.service.mjs +2 -2
- package/esm2022/lib/utility/tests/mocks/mock-authentication-method-service.mjs +2 -2
- package/esm2022/lib/utility/tests/mocks/mock-authentication.service.mjs +2 -2
- package/esm2022/lib/utility/tests/mocks/mock-user-resource.service.mjs +2 -2
- package/fesm2022/netgrif-components-core.mjs +150 -75
- package/fesm2022/netgrif-components-core.mjs.map +1 -1
- package/lib/authentication/authentication.factory.d.ts +2 -1
- package/lib/authentication/models/credentials.d.ts +1 -0
- package/lib/authentication/services/methods/basic-authentication/basic-with-realm-authentication.service.d.ts +16 -0
- package/lib/authentication/services/public-api.d.ts +1 -0
- package/lib/navigation/model/uri-resource.d.ts +2 -1
- package/lib/resources/abstract-endpoint/abstract-resource.service.d.ts +6 -0
- package/lib/resources/engine-endpoint/user-resource.service.d.ts +17 -17
- package/lib/user/models/iuser.d.ts +18 -0
- package/lib/user/models/user.d.ts +3 -1
- package/package.json +1 -1
package/esm2022/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.mjs
CHANGED
|
@@ -152,7 +152,7 @@ export class AbstractNavigationDoubleDrawerComponent {
|
|
|
152
152
|
return;
|
|
153
153
|
}
|
|
154
154
|
if (node.parentId && !node.parent) {
|
|
155
|
-
if (this._uriService.
|
|
155
|
+
if (node.parentId === this._uriService.root.id) {
|
|
156
156
|
node.parent = this._uriService.root;
|
|
157
157
|
}
|
|
158
158
|
else {
|
|
@@ -181,7 +181,7 @@ export class AbstractNavigationDoubleDrawerComponent {
|
|
|
181
181
|
this.loadRightSide();
|
|
182
182
|
}
|
|
183
183
|
else {
|
|
184
|
-
if (!this.leftItems.find(item => item.resource?.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH)?.value === node.
|
|
184
|
+
if (!this.leftItems.find(item => item.resource?.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH)?.value === node.uriPath)) {
|
|
185
185
|
this.loadLeftSide();
|
|
186
186
|
}
|
|
187
187
|
this.loadRightSide();
|
|
@@ -286,7 +286,7 @@ export class AbstractNavigationDoubleDrawerComponent {
|
|
|
286
286
|
onItemClick(item) {
|
|
287
287
|
if (item.resource === undefined) {
|
|
288
288
|
// custom view represented only in nae.json
|
|
289
|
-
if (item.processUri === this.currentNode.
|
|
289
|
+
if (item.processUri === this.currentNode.uriPath) {
|
|
290
290
|
this._uriService.activeNode = this._currentNode;
|
|
291
291
|
}
|
|
292
292
|
else {
|
|
@@ -302,7 +302,7 @@ export class AbstractNavigationDoubleDrawerComponent {
|
|
|
302
302
|
this._log.error(error);
|
|
303
303
|
});
|
|
304
304
|
}
|
|
305
|
-
else if (!path.includes(this.currentNode.
|
|
305
|
+
else if (!path.includes(this.currentNode.uriPath)) {
|
|
306
306
|
this._uriService.activeNode = this._currentNode.parent;
|
|
307
307
|
}
|
|
308
308
|
else {
|
|
@@ -314,7 +314,7 @@ export class AbstractNavigationDoubleDrawerComponent {
|
|
|
314
314
|
return item.resource?.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_HAS_CHILDREN)?.value;
|
|
315
315
|
}
|
|
316
316
|
isItemAndNodeEqual(item, node) {
|
|
317
|
-
return item.resource?.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH)?.value === node.
|
|
317
|
+
return item.resource?.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH)?.value === node.uriPath;
|
|
318
318
|
}
|
|
319
319
|
loadLeftSide() {
|
|
320
320
|
if (this._uriService.isRoot(this._currentNode)) {
|
|
@@ -432,13 +432,13 @@ export class AbstractNavigationDoubleDrawerComponent {
|
|
|
432
432
|
this.leftItems.sort((a, b) => multiplier * a?.navigation?.title.localeCompare(b?.navigation?.title));
|
|
433
433
|
}
|
|
434
434
|
resolveCustomViewsInRightSide() {
|
|
435
|
-
if (!!this._childCustomViews[this._currentNode.
|
|
436
|
-
this.rightItems.push(...Object.values(this._childCustomViews[this._currentNode.
|
|
435
|
+
if (!!this._childCustomViews[this._currentNode.uriPath]) {
|
|
436
|
+
this.rightItems.push(...Object.values(this._childCustomViews[this._currentNode.uriPath]));
|
|
437
437
|
}
|
|
438
438
|
}
|
|
439
439
|
resolveCustomViewsInLeftSide() {
|
|
440
|
-
if (!!this._childCustomViews[this._currentNode.parent.
|
|
441
|
-
this.leftItems.push(...Object.values(this._childCustomViews[this._currentNode.parent.
|
|
440
|
+
if (!!this._childCustomViews[this._currentNode.parent.uriPath]) {
|
|
441
|
+
this.leftItems.push(...Object.values(this._childCustomViews[this._currentNode.parent.uriPath]));
|
|
442
442
|
}
|
|
443
443
|
}
|
|
444
444
|
resolveItemCaseToNavigationItem(itemCase) {
|
|
@@ -508,7 +508,7 @@ export class AbstractNavigationDoubleDrawerComponent {
|
|
|
508
508
|
return this.rightItems === undefined || this.rightItems.length === 0;
|
|
509
509
|
}
|
|
510
510
|
uriNodeTrackBy(index, node) {
|
|
511
|
-
return node.
|
|
511
|
+
return node.id;
|
|
512
512
|
}
|
|
513
513
|
itemsTrackBy(index, item) {
|
|
514
514
|
return item.id;
|
|
@@ -594,4 +594,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
594
594
|
}], viewsCategoryName: [{
|
|
595
595
|
type: Input
|
|
596
596
|
}] } });
|
|
597
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbmF2aWdhdGlvbi1kb3VibGUtZHJhd2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9uYXZpZ2F0aW9uL25hdmlnYXRpb24tZG91YmxlLWRyYXdlci9hYnN0cmFjdC1uYXZpZ2F0aW9uLWRvdWJsZS1kcmF3ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixXQUFXLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFJL0UsT0FBTyxFQUFhLEVBQUUsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFXbkMsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sdURBQXVELENBQUM7QUFJckcsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBSzdELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBSTdFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUM1RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUVILHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNPLDhCQUE4QixFQUM5QywwQkFBMEIsRUFDMUIsc0JBQXNCLEVBQ3RCLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3pCLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQU9yQyxNQUFNLE9BQWdCLHVDQUF1QztJQXFFekI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJ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QWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHN9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNYXREcmF3ZXJNb2RlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7UmVzaXplRXZlbnR9IGZyb20gJ2FuZ3VsYXItcmVzaXphYmxlLWVsZW1lbnQnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1JvbGVBY2Nlc3MsIFZpZXd9IGZyb20gJy4uLy4uLy4uL2NvbW1vbnMvc2NoZW1hJztcbmltcG9ydCB7QWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aG9yaXphdGlvbi9wZXJtaXNzaW9uL2FjY2Vzcy5zZXJ2aWNlJztcbmltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7SW1wZXJzb25hdGlvblVzZXJTZWxlY3RTZXJ2aWNlfSBmcm9tICcuLi8uLi9pbXBlcnNvbmF0aW9uL3NlcnZpY2VzL2ltcGVyc29uYXRpb24tdXNlci1zZWxlY3Quc2VydmljZSc7XG5pbXBvcnQge0ltcGVyc29uYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9pbXBlcnNvbmF0aW9uL3NlcnZpY2VzL2ltcGVyc29uYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0Nhc2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvY2FzZSc7XG5pbXBvcnQge1xuICAgIER5bmFtaWNOYXZpZ2F0aW9uUm91dGVQcm92aWRlclNlcnZpY2UsXG59IGZyb20gJy4uLy4uL3JvdXRpbmcvZHluYW1pYy1uYXZpZ2F0aW9uLXJvdXRlLXByb3ZpZGVyL2R5bmFtaWMtbmF2aWdhdGlvbi1yb3V0ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7TkFFX1JPVVRJTkdfQ09ORklHVVJBVElPTl9QQVRIfSBmcm9tICcuLi8uLi9yb3V0aW5nL3JvdXRpbmctYnVpbGRlci9yb3V0aW5nLWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQge0xhbmd1YWdlU2VydmljZX0gZnJvbSAnLi4vLi4vdHJhbnNsYXRlL2xhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtVc2VyfSBmcm9tICcuLi8uLi91c2VyL21vZGVscy91c2VyJztcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4uLy4uL3VzZXIvc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7TG9hZGluZ0VtaXR0ZXJ9IGZyb20gJy4uLy4uL3V0aWxpdHkvbG9hZGluZy1lbWl0dGVyJztcbmltcG9ydCB7VXJpTm9kZVJlc291cmNlfSBmcm9tICcuLi9tb2RlbC91cmktcmVzb3VyY2UnO1xuaW1wb3J0IHtVcmlTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL3VyaS5zZXJ2aWNlJztcbmltcG9ydCB7STE4bkZpZWxkVmFsdWV9IGZyb20gXCIuLi8uLi9kYXRhLWZpZWxkcy9pMThuLWZpZWxkL21vZGVscy9pMThuLWZpZWxkLXZhbHVlXCI7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQge0dyb3VwTmF2aWdhdGlvbkNvbnN0YW50c30gZnJvbSBcIi4uL21vZGVsL2dyb3VwLW5hdmlnYXRpb24tY29uc3RhbnRzXCI7XG5pbXBvcnQge0Nhc2VSZXNvdXJjZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L2Nhc2UtcmVzb3VyY2Uuc2VydmljZVwiO1xuaW1wb3J0IHtQYWdlfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wYWdlXCI7XG5pbXBvcnQge0Nhc2VTZWFyY2hSZXF1ZXN0Qm9keSwgUGV0cmlOZXRTZWFyY2hSZXF1ZXN0fSBmcm9tIFwiLi4vLi4vZmlsdGVyL21vZGVscy9jYXNlLXNlYXJjaC1yZXF1ZXN0LWJvZHlcIjtcbmltcG9ydCB7SHR0cFBhcmFtc30gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQge1BhZ2luYXRpb25QYXJhbXN9IGZyb20gXCIuLi8uLi91dGlsaXR5L3BhZ2luYXRpb24vcGFnaW5hdGlvbi1wYXJhbXNcIjtcbmltcG9ydCB7U2ltcGxlRmlsdGVyfSBmcm9tIFwiLi4vLi4vZmlsdGVyL21vZGVscy9zaW1wbGUtZmlsdGVyXCI7XG5pbXBvcnQge1xuICAgIENvbmZpZ0RvdWJsZU1lbnUsXG4gICAgTEVGVF9EUkFXRVJfREVGQVVMVF9XSURUSCxcbiAgICBNRU5VX0lERU5USUZJRVJTLFxuICAgIE1lbnVPcmRlcixcbiAgICBOYXZpZ2F0aW9uSXRlbSwgUklHSFRfRFJBV0VSX0RFRkFVTFRfTUlOX1dJRFRILFxuICAgIFJJR0hUX0RSQVdFUl9ERUZBVUxUX1dJRFRILFxuICAgIFJJR0hUX0RSQVdFUl9NQVhfV0lEVEgsXG4gICAgUklHSFRfU0lERV9JTklUX1BBR0VfU0laRSxcbiAgICBSSUdIVF9TSURFX05FV19QQUdFX1NJWkUsXG4gICAgU0VUVElOR1NfVFJBTlNJVElPTl9JRFxufSBmcm9tICcuLi9tb2RlbC9uYXZpZ2F0aW9uLWNvbmZpZ3MnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmNjLWFic3RyYWN0LW5hdmlnYXRpb24tZG91YmxlLWRyYXdlcicsXG4gICAgdGVtcGxhdGU6ICcnLFxufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE5hdmlnYXRpb25Eb3VibGVEcmF3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBASW5wdXQoKSBwb3J0YWxMZWZ0TWVudTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBASW5wdXQoKSBwb3J0YWxSaWdodE1lbnU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgaW1hZ2VSb3V0ZXJMaW5rOiBzdHJpbmcgPSAnLyc7XG4gICAgQElucHV0KCkgaW1hZ2VBbHQ6IHN0cmluZyA9ICdMb2dvJztcbiAgICBASW5wdXQoKSBpbWFnZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHByb2ZpbGVSb3V0ZXJMaW5rOiBzdHJpbmcgPSAnL3Byb2ZpbGUnO1xuICAgIEBJbnB1dCgpIGluY2x1ZGVVc2VyOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBpbmNsdWRlTGFuZ3VhZ2U6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGluY2x1ZGVNb3JlTWVudTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgaW5jbHVkZUltcGVyc29uYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGFsbENsb3NhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBmb2xkZXJJY29uOiBzdHJpbmcgPSAnZm9sZGVyJztcbiAgICBASW5wdXQoKSBvcGVuZWRGb2xkZXJJY29uOiBzdHJpbmcgPSAnZm9sZGVyX29wZW4nO1xuICAgIEBJbnB1dCgpIGZpbHRlckljb246IHN0cmluZyA9ICdmaWx0ZXJfYWx0JztcbiAgICBASW5wdXQoKSBmb2xkZXJzQ2F0ZWdvcnlOYW1lOiBzdHJpbmcgPSAndG9vbGJhci5tZW51LmZvbGRlcnMnO1xuICAgIEBJbnB1dCgpIHZpZXdzQ2F0ZWdvcnlOYW1lOiBzdHJpbmcgPSAndG9vbGJhci5tZW51LnZpZXdzJztcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgZGlzcGxheWVkIGl0ZW1zIG9uIHRoZSBsZWZ0IHNpZGVcbiAgICAgKiAqL1xuICAgIGxlZnRJdGVtczogQXJyYXk8TmF2aWdhdGlvbkl0ZW0+XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGRpc3BsYXllZCBpdGVtcyBvbiB0aGUgcmlnaHQgc2lkZVxuICAgICAqICovXG4gICAgcmlnaHRJdGVtczogQXJyYXk8TmF2aWdhdGlvbkl0ZW0+XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGhpZGRlbiBpdGVtc1xuICAgICAqICovXG4gICAgbW9yZUl0ZW1zOiBBcnJheTxOYXZpZ2F0aW9uSXRlbT47XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGN1c3RvbSBpdGVtcyBpbiBtb3JlIG1lbnVcbiAgICAgKiAqL1xuICAgIGhpZGRlbkN1c3RvbUl0ZW1zOiBBcnJheTxOYXZpZ2F0aW9uSXRlbT47XG5cbiAgICBpdGVtc09yZGVyOiBNZW51T3JkZXI7XG5cbiAgICBwcm90ZWN0ZWQgX2JyZWFrcG9pbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICBwcm90ZWN0ZWQgX2N1cnJlbnROb2RlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50bHkgZGlzcGxheSB1cmlcbiAgICAgKiBTaWJsaW5ncyBvZiB0aGUgbm9kZSBhcmUgb24gdGhlIGxlZnQsIGNoaWxkcmVuIGFyZSBvbiB0aGUgcmlnaHRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2N1cnJlbnROb2RlOiBVcmlOb2RlUmVzb3VyY2U7XG5cbiAgICBsZWZ0TG9hZGluZyQ6IExvYWRpbmdFbWl0dGVyO1xuICAgIHJpZ2h0TG9hZGluZyQ6IExvYWRpbmdFbWl0dGVyO1xuICAgIG5vZGVMb2FkaW5nJDogTG9hZGluZ0VtaXR0ZXI7XG5cbiAgICBwcm90ZWN0ZWQgX2NvbmZpZ0xlZnRNZW51OiBDb25maWdEb3VibGVNZW51ID0ge1xuICAgICAgICBtb2RlOiAnc2lkZScsXG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgd2lkdGg6IExFRlRfRFJBV0VSX0RFRkFVTFRfV0lEVEgsXG4gICAgfTtcbiAgICBwcm90ZWN0ZWQgX2NvbmZpZ1JpZ2h0TWVudTogQ29uZmlnRG91YmxlTWVudSA9IHtcbiAgICAgICAgbW9kZTogJ3NpZGUnLFxuICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXG4gICAgICAgIHdpZHRoOiBSSUdIVF9EUkFXRVJfREVGQVVMVF9XSURUSCxcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIF9jaGlsZEN1c3RvbVZpZXdzOiB7IFt1cmk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogTmF2aWdhdGlvbkl0ZW0gfSB9O1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2JyZWFrcG9pbnQ6IEJyZWFrcG9pbnRPYnNlcnZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hY2Nlc3NTZXJ2aWNlOiBBY2Nlc3NTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2xvZzogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9jb25maWc6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VyaVNlcnZpY2U6IFVyaVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfY2FzZVJlc291cmNlU2VydmljZTogQ2FzZVJlc291cmNlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9pbXBlcnNvbmF0aW9uVXNlclNlbGVjdDogSW1wZXJzb25hdGlvblVzZXJTZWxlY3RTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2ltcGVyc29uYXRpb246IEltcGVyc29uYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2R5bmFtaWNSb3V0aW5nU2VydmljZTogRHluYW1pY05hdmlnYXRpb25Sb3V0ZVByb3ZpZGVyU2VydmljZSkge1xuICAgICAgICB0aGlzLmxlZnRJdGVtcyA9IG5ldyBBcnJheTxOYXZpZ2F0aW9uSXRlbT4oKTtcbiAgICAgICAgdGhpcy5yaWdodEl0ZW1zID0gbmV3IEFycmF5PE5hdmlnYXRpb25JdGVtPigpO1xuICAgICAgICB0aGlzLmxlZnRMb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQgPSBuZXcgTG9hZGluZ0VtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5ub2RlTG9hZGluZyQgPSBuZXcgTG9hZGluZ0VtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5pdGVtc09yZGVyID0gTWVudU9yZGVyLkFzY2VuZGluZztcbiAgICAgICAgdGhpcy5oaWRkZW5DdXN0b21JdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLm1vcmVJdGVtcyA9IG5ldyBBcnJheTxOYXZpZ2F0aW9uSXRlbT4oKTtcbiAgICAgICAgdGhpcy5fY2hpbGRDdXN0b21WaWV3cyA9IHt9O1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9icmVha3BvaW50U3Vic2NyaXB0aW9uID0gdGhpcy5fYnJlYWtwb2ludC5vYnNlcnZlKFtCcmVha3BvaW50cy5IYW5kc2V0TGFuZHNjYXBlXSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50LmlzTWF0Y2hlZCgnKG1heC13aWR0aDogOTU5Ljk5cHgpJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVMYXlvdXQoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVMYXlvdXQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnROb2RlU3Vic2NyaXB0aW9uID0gdGhpcy5fdXJpU2VydmljZS5hY3RpdmVOb2RlJC5zdWJzY3JpYmUobm9kZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnROb2RlID0gbm9kZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgdmlld0NvbmZpZ3VyYXRpb25QYXRoID0gdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YVtOQUVfUk9VVElOR19DT05GSUdVUkFUSU9OX1BBVEhdO1xuICAgICAgICBpZiAoISF2aWV3Q29uZmlndXJhdGlvblBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdDb25maWd1cmF0aW9uID0gdGhpcy5fY29uZmlnLmdldFZpZXdCeVBhdGgodmlld0NvbmZpZ3VyYXRpb25QYXRoKTtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHZpZXdDb25maWd1cmF0aW9uLmNoaWxkcmVuKS5mb3JFYWNoKChba2V5LCBjaGlsZFZpZXddKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlVXJpRm9yQ2hpbGRWaWV3cyh2aWV3Q29uZmlndXJhdGlvblBhdGggKyAnLycgKyBrZXksIGNoaWxkVmlldyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlSGlkZGVuTWVudUl0ZW1Gcm9tQ2hpbGRWaWV3cyh2aWV3Q29uZmlndXJhdGlvblBhdGggKyAnLycgKyBrZXksIGNoaWxkVmlldyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBjdXJyZW50Tm9kZSgpOiBVcmlOb2RlUmVzb3VyY2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudE5vZGU7XG4gICAgfVxuXG4gICAgc2V0IGN1cnJlbnROb2RlKG5vZGU6IFVyaU5vZGVSZXNvdXJjZSkge1xuICAgICAgICBpZiAobm9kZSA9PT0gdGhpcy5fY3VycmVudE5vZGUgfHwgdGhpcy5sZWZ0TG9hZGluZyQuaXNBY3RpdmUgfHwgdGhpcy5yaWdodExvYWRpbmckLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3VycmVudE5vZGUgPSBub2RlO1xuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5wYXJlbnRJZCAmJiAhbm9kZS5wYXJlbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl91cmlTZXJ2aWNlLmlzUm9vdChub2RlKSkge1xuICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gdGhpcy5fdXJpU2VydmljZS5yb290O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVMb2FkaW5nJC5vbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3VyaVNlcnZpY2UuZ2V0Tm9kZUJ5UGF0aCh0aGlzLl91cmlTZXJ2aWNlLnJlc29sdmVQYXJlbnRQYXRoKG5vZGUpKS5zdWJzY3JpYmUobiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gIW4gPyB0aGlzLl91cmlTZXJ2aWNlLnJvb3QgOiBuO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZUxvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm5vZGVMb2FkaW5nJC5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5ub2RlTG9hZGluZyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVNZW51SXRlbXMobm9kZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlTWVudUl0ZW1zKG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVNZW51SXRlbXMobm9kZTogVXJpTm9kZVJlc291cmNlKSB7XG4gICAgICAgIGlmICh0aGlzLl91cmlTZXJ2aWNlLmlzUm9vdChub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5sZWZ0SXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMubG9hZFJpZ2h0U2lkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmxlZnRJdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5yZXNvdXJjZT8uaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfTk9ERV9QQVRIKT8udmFsdWUgPT09IG5vZGUucGF0aCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRMZWZ0U2lkZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb2FkUmlnaHRTaWRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYnJlYWtwb2ludFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fY3VycmVudE5vZGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMubGVmdExvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMucmlnaHRMb2FkaW5nJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLm5vZGVMb2FkaW5nJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIGdldCBjb25maWdMZWZ0TWVudSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZ0xlZnRNZW51O1xuICAgIH1cblxuICAgIGdldCBjb25maWdSaWdodE1lbnUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWdSaWdodE1lbnU7XG4gICAgfVxuXG4gICAgdG9nZ2xlTWVudSgpIHtcbiAgICAgICAgdGhpcy50b2dnbGVSaWdodE1lbnUoKTtcbiAgICAgICAgaWYgKHRoaXMuYWxsQ2xvc2FibGUpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlTGVmdE1lbnUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvZ2dsZUxlZnRNZW51KCkge1xuICAgICAgICB0aGlzLl9jb25maWdMZWZ0TWVudS5vcGVuZWQgPSAhdGhpcy5fY29uZmlnTGVmdE1lbnUub3BlbmVkO1xuICAgIH1cblxuICAgIHRvZ2dsZVJpZ2h0TWVudSgpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnUmlnaHRNZW51Lm9wZW5lZCA9ICF0aGlzLl9jb25maWdSaWdodE1lbnUub3BlbmVkO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlTGF5b3V0KGlzTGFyZ2VTY3JlZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29uZmlnTGVmdE1lbnUgPSBpc0xhcmdlU2NyZWVuID8ge1xuICAgICAgICAgICAgbW9kZTogJ3NpZGUnLFxuICAgICAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2NvbmZpZ0xlZnRNZW51LndpZHRoLFxuICAgICAgICB9IDoge1xuICAgICAgICAgICAgbW9kZTogJ292ZXInLFxuICAgICAgICAgICAgb3BlbmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5fY29uZmlnTGVmdE1lbnUud2lkdGgsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2NvbmZpZ1JpZ2h0TWVudSA9IGlzTGFyZ2VTY3JlZW4gPyB7XG4gICAgICAgICAgICBtb2RlOiAnc2lkZScsXG4gICAgICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5fY29uZmlnUmlnaHRNZW51LndpZHRoLFxuICAgICAgICB9IDoge1xuICAgICAgICAgICAgbW9kZTogJ292ZXInLFxuICAgICAgICAgICAgb3BlbmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5fY29uZmlnUmlnaHRNZW51LndpZHRoLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldExhbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0TGFuZ3VhZ2UoKTtcbiAgICB9XG5cbiAgICBsb2dvdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlLmxvZ291dCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ1VzZXIgaXMgbG9nZ2VkIG91dCcpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5nZXQoKS5zZXJ2aWNlcyAmJiB0aGlzLl9jb25maWcuZ2V0KCkuc2VydmljZXMuYXV0aCAmJiB0aGlzLl9jb25maWcuZ2V0KCkuc2VydmljZXMuYXV0aC5sb2dvdXRSZWRpcmVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0UGF0aCA9IHRoaXMuX2NvbmZpZy5nZXQoKS5zZXJ2aWNlcy5hdXRoLmxvZ291dFJlZGlyZWN0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5pbmZvKCdSZWRpcmVjdGluZyB0byAnICsgcmVkaXJlY3RQYXRoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW3JlZGlyZWN0UGF0aF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbXBlcnNvbmF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW1wZXJzb25hdGlvblVzZXJTZWxlY3Quc2VsZWN0SW1wZXJzb25hdGUoKTtcbiAgICB9XG5cbiAgICBzdG9wSW1wZXJzb25hdGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW1wZXJzb25hdGlvbi5jZWFzZSgpO1xuICAgIH1cblxuICAgIGdldCB1c2VyKCk6IFVzZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclNlcnZpY2UudXNlcjtcbiAgICB9XG5cbiAgICBnZXQgY2FuR29CYWNrTG9hZGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVMb2FkaW5nJDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBob21lIGNsaWNrLCB0aGUgY3VycmVudCBsZXZlbCBpcyBzZXQgdG8gMCwgYW5kIGN1cnJlbnQgcGFyZW50IGlzXG4gICAgICogc2V0IHRvIHJvb3Qgbm9kZS5cbiAgICAgKiAqL1xuICAgIG9uSG9tZUNsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5sZWZ0TG9hZGluZyQuaXNBY3RpdmUgfHwgdGhpcy5yaWdodExvYWRpbmckLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cmlTZXJ2aWNlLmFjdGl2ZU5vZGUgPSB0aGlzLl91cmlTZXJ2aWNlLnJvb3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gYmFjayBjbGljaywgdGhlIHBhcmVudCBpcyBzZXQgdG8gcGFyZW50IG9mIGxlZnQgbm9kZXMsIHRoYXQgd2lsbCBzb2x2ZVxuICAgICAqIHRoZSByaWdodCBzaWRlIG1lbnUgKGVsZW1lbnRzIHRoYXQgd2VyZSBpbiBsZWZ0IHNpZGUsIGFmdGVyIGJhY2t3YXJkXG4gICAgICogbmF2aWdhdGlvbiB3aWxsIGJlIG9uIHRoZSByaWdodCBzaWRlKS5cbiAgICAgKiBDdXJyZW50IGxldmVsIGlzIHNldCB0byBhIGxvd2VyIG51bWJlciBpbiBvcmRlciB0byBzZXQgdGhlIGxlZnQgc2lkZSBtZW51LlxuICAgICAqICovXG4gICAgb25CYWNrQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmxlZnRMb2FkaW5nJC5pc0FjdGl2ZSB8fCB0aGlzLnJpZ2h0TG9hZGluZyQuaXNBY3RpdmUgfHwgdGhpcy5fdXJpU2VydmljZS5pc1Jvb3QodGhpcy5fY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cmlTZXJ2aWNlLmFjdGl2ZU5vZGUgPSB0aGlzLl9jdXJyZW50Tm9kZS5wYXJlbnQ7XG4gICAgfVxuXG4gICAgb25JdGVtQ2xpY2soaXRlbTogTmF2aWdhdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgaWYgKGl0ZW0ucmVzb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gY3VzdG9tIHZpZXcgcmVwcmVzZW50ZWQgb25seSBpbiBuYWUuanNvblxuICAgICAgICAgICAgaWYgKGl0ZW0ucHJvY2Vzc1VyaSA9PT0gdGhpcy5jdXJyZW50Tm9kZS5wYXRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXJpU2VydmljZS5hY3RpdmVOb2RlID0gdGhpcy5fY3VycmVudE5vZGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VyaVNlcnZpY2UuYWN0aXZlTm9kZSA9IHRoaXMuX2N1cnJlbnROb2RlLnBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBpdGVtLnJlc291cmNlLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX05PREVfUEFUSCk/LnZhbHVlXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNJdGVtQ2hpbGRyZW4oaXRlbSkgJiYgIXRoaXMubGVmdExvYWRpbmckLmlzQWN0aXZlICYmICF0aGlzLnJpZ2h0TG9hZGluZyQuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cmlTZXJ2aWNlLmdldE5vZGVCeVBhdGgocGF0aCkuc3Vic2NyaWJlKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cmlTZXJ2aWNlLmFjdGl2ZU5vZGUgPSBub2RlXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghcGF0aC5pbmNsdWRlcyh0aGlzLmN1cnJlbnROb2RlLnBhdGgpKXtcbiAgICAgICAgICAgICAgICB0aGlzLl91cmlTZXJ2aWNlLmFjdGl2ZU5vZGUgPSB0aGlzLl9jdXJyZW50Tm9kZS5wYXJlbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VyaVNlcnZpY2UuYWN0aXZlTm9kZSA9IHRoaXMuX2N1cnJlbnROb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzSXRlbUNoaWxkcmVuKGl0ZW06IE5hdmlnYXRpb25JdGVtKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpdGVtLnJlc291cmNlPy5pbW1lZGlhdGVEYXRhLmZpbmQoZiA9PiBmLnN0cmluZ0lkID09PSBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9IQVNfQ0hJTERSRU4pPy52YWx1ZVxuICAgIH1cblxuICAgIGlzSXRlbUFuZE5vZGVFcXVhbChpdGVtOiBOYXZpZ2F0aW9uSXRlbSwgbm9kZTogVXJpTm9kZVJlc291cmNlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpdGVtLnJlc291cmNlPy5pbW1lZGlhdGVEYXRhLmZpbmQoZiA9PiBmLnN0cmluZ0lkID09PSBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9OT0RFX1BBVEgpPy52YWx1ZSA9PT0gbm9kZS5wYXRoXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxvYWRMZWZ0U2lkZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3VyaVNlcnZpY2UuaXNSb290KHRoaXMuX2N1cnJlbnROb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5sZWZ0SXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxlZnRMb2FkaW5nJC5vbigpO1xuICAgICAgICB0aGlzLl91cmlTZXJ2aWNlLmdldEl0ZW1DYXNlQnlOb2RlUGF0aCh0aGlzLmN1cnJlbnROb2RlLnBhcmVudCkuc3Vic2NyaWJlKHBhZ2UgPT4ge1xuICAgICAgICAgICAgbGV0IGNoaWxkQ2FzZXMkO1xuICAgICAgICAgICAgbGV0IHRhcmdldEl0ZW07XG4gICAgICAgICAgICBsZXQgb3JkZXJlZENoaWxkQ2FzZUlkcztcblxuICAgICAgICAgICAgaWYgKHBhZ2U/LnBhZ2luYXRpb24/LnRvdGFsRWxlbWVudHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjaGlsZENhc2VzJCA9IG9mKFtdKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRJdGVtID0gcGFnZS5jb250ZW50WzBdXG4gICAgICAgICAgICAgICAgb3JkZXJlZENoaWxkQ2FzZUlkcyA9IHRoaXMuZXh0cmFjdENoaWxkQ2FzZUlkcyh0YXJnZXRJdGVtKVxuICAgICAgICAgICAgICAgIGNoaWxkQ2FzZXMkID0gdGhpcy5nZXRJdGVtQ2FzZXNCeUlkc0luT25lUGFnZShvcmRlcmVkQ2hpbGRDYXNlSWRzKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAocCA9PiBwLmNvbnRlbnQpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRDYXNlcyQuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm1hcChmb2xkZXIgPT4gdGhpcy5yZXNvbHZlSXRlbUNhc2VUb05hdmlnYXRpb25JdGVtKGZvbGRlcikpLmZpbHRlcihpID0+ICEhaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0SXRlbXMgPSByZXN1bHQuc29ydCgoYSwgYikgPT4gb3JkZXJlZENoaWxkQ2FzZUlkcy5pbmRleE9mKGEucmVzb3VyY2Uuc3RyaW5nSWQpIC0gb3JkZXJlZENoaWxkQ2FzZUlkcy5pbmRleE9mKGIucmVzb3VyY2Uuc3RyaW5nSWQpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVDdXN0b21WaWV3c0luTGVmdFNpZGUoKVxuICAgICAgICAgICAgICAgIHRoaXMubGVmdExvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0SXRlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVDdXN0b21WaWV3c0luTGVmdFNpZGUoKVxuICAgICAgICAgICAgICAgIHRoaXMubGVmdExvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLmxlZnRJdGVtcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlQ3VzdG9tVmlld3NJbkxlZnRTaWRlKClcbiAgICAgICAgICAgIHRoaXMubGVmdExvYWRpbmckLm9mZigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbG9hZFJpZ2h0U2lkZSgpIHtcbiAgICAgICAgdGhpcy5yaWdodExvYWRpbmckLm9uKCk7XG4gICAgICAgIHRoaXMubW9yZUl0ZW1zID0gW107XG4gICAgICAgIHRoaXMuX3VyaVNlcnZpY2UuZ2V0SXRlbUNhc2VCeU5vZGVQYXRoKHRoaXMuY3VycmVudE5vZGUpLnN1YnNjcmliZShwYWdlID0+IHtcbiAgICAgICAgICAgIGxldCBjaGlsZENhc2VzJDtcbiAgICAgICAgICAgIGxldCB0YXJnZXRJdGVtO1xuICAgICAgICAgICAgbGV0IG9yZGVyZWRDaGlsZENhc2VJZHM7XG5cbiAgICAgICAgICAgIGlmIChwYWdlPy5wYWdpbmF0aW9uPy50b3RhbEVsZW1lbnRzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRDYXNlcyQgPSBvZihbXSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0SXRlbSA9IHBhZ2UuY29udGVudFswXVxuICAgICAgICAgICAgICAgIG9yZGVyZWRDaGlsZENhc2VJZHMgPSB0aGlzLmV4dHJhY3RDaGlsZENhc2VJZHModGFyZ2V0SXRlbSlcbiAgICAgICAgICAgICAgICBjaGlsZENhc2VzJCA9IHRoaXMuZ2V0SXRlbUNhc2VzQnlJZHNJbk9uZVBhZ2Uob3JkZXJlZENoaWxkQ2FzZUlkcykucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKHAgPT4gcC5jb250ZW50KSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkQ2FzZXMkLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IChyZXN1bHQgYXMgQ2FzZVtdKS5zb3J0KChhLCBiKSA9PiBvcmRlcmVkQ2hpbGRDYXNlSWRzLmluZGV4T2YoYS5zdHJpbmdJZCkgLSBvcmRlcmVkQ2hpbGRDYXNlSWRzLmluZGV4T2YoYi5zdHJpbmdJZCkpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gUklHSFRfU0lERV9JTklUX1BBR0VfU0laRSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByYXdSaWdodEl0ZW1zOiBDYXNlW10gPSByZXN1bHQuc3BsaWNlKDAsIFJJR0hUX1NJREVfSU5JVF9QQUdFX1NJWkUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0SXRlbXMgPSByYXdSaWdodEl0ZW1zLm1hcChmb2xkZXIgPT4gdGhpcy5yZXNvbHZlSXRlbUNhc2VUb05hdmlnYXRpb25JdGVtKGZvbGRlcikpLmZpbHRlcihpID0+ICEhaSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9yZUl0ZW1zID0gcmVzdWx0Lm1hcChmb2xkZXIgPT4gdGhpcy5yZXNvbHZlSXRlbUNhc2VUb05hdmlnYXRpb25JdGVtKGZvbGRlcikpLmZpbHRlcihpID0+ICEhaSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yaWdodEl0ZW1zID0gcmVzdWx0Lm1hcChmb2xkZXIgPT4gdGhpcy5yZXNvbHZlSXRlbUNhc2VUb05hdmlnYXRpb25JdGVtKGZvbGRlcikpLmZpbHRlcihpID0+ICEhaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZUN1c3RvbVZpZXdzSW5SaWdodFNpZGUoKVxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRJdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMubW9yZUl0ZW1zID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlQ3VzdG9tVmlld3NJblJpZ2h0U2lkZSgpXG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodExvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0SXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMubW9yZUl0ZW1zID0gW107XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVDdXN0b21WaWV3c0luUmlnaHRTaWRlKClcbiAgICAgICAgICAgIHRoaXMucmlnaHRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGV4dHJhY3RDaGlsZENhc2VJZHMoaXRlbTogQ2FzZSk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfQ0hJTERfSVRFTV9JRFMpPy52YWx1ZVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRJdGVtQ2FzZXNCeUlkc0luT25lUGFnZShjYXNlSWRzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8UGFnZTxDYXNlPj4gIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUNhc2VzQnlJZHMoY2FzZUlkcywgMCwgY2FzZUlkcy5sZW5ndGgpXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEl0ZW1DYXNlc0J5SWRzKGNhc2VJZHM6IHN0cmluZ1tdLCBwYWdlTnVtYmVyOiBudW1iZXIsIHBhZ2VTaXplOiBzdHJpbmcgfCBudW1iZXIpOiBPYnNlcnZhYmxlPFBhZ2U8Q2FzZT4+IHtcbiAgICAgICAgY29uc3Qgc2VhcmNoQm9keTogQ2FzZVNlYXJjaFJlcXVlc3RCb2R5ID0ge1xuICAgICAgICAgICAgc3RyaW5nSWQ6IGNhc2VJZHMsXG4gICAgICAgICAgICBwcm9jZXNzOiBNRU5VX0lERU5USUZJRVJTLm1hcChpZCA9PiAoe2lkZW50aWZpZXI6IGlkfSBhcyBQZXRyaU5ldFNlYXJjaFJlcXVlc3QpKVxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgICAgICAgICAgLnNldChQYWdpbmF0aW9uUGFyYW1zLlBBR0VfU0laRSwgcGFnZVNpemUpXG4gICAgICAgICAgICAuc2V0KFBhZ2luYXRpb25QYXJhbXMuUEFHRV9OVU1CRVIsIHBhZ2VOdW1iZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FzZVJlc291cmNlU2VydmljZS5zZWFyY2hDYXNlcyhTaW1wbGVGaWx0ZXIuZnJvbUNhc2VRdWVyeShzZWFyY2hCb2R5KSwgaHR0cFBhcmFtcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWRNb3JlSXRlbXMoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vcmVJdGVtcy5sZW5ndGggPiBSSUdIVF9TSURFX05FV19QQUdFX1NJWkUpIHtcbiAgICAgICAgICAgIHRoaXMucmlnaHRJdGVtcy5wdXNoKC4uLnRoaXMubW9yZUl0ZW1zLnNwbGljZSgwLCBSSUdIVF9TSURFX05FV19QQUdFX1NJWkUpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yaWdodEl0ZW1zLnB1c2goLi4udGhpcy5tb3JlSXRlbXMpXG4gICAgICAgICAgICB0aGlzLm1vcmVJdGVtcyA9IFtdXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBc2NlbmRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zT3JkZXIgPT09IE1lbnVPcmRlci5Bc2NlbmRpbmc7XG4gICAgfVxuXG4gICAgcHVibGljIHN3aXRjaE9yZGVyKCkge1xuICAgICAgICB0aGlzLml0ZW1zT3JkZXIgPSAodGhpcy5pdGVtc09yZGVyICsgMSkgJSAyO1xuICAgICAgICBsZXQgbXVsdGlwbGllciA9IDFcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNPcmRlciA9PT0gTWVudU9yZGVyLkRlc2NlbmRpbmcpIHtcbiAgICAgICAgICAgIG11bHRpcGxpZXIgPSAtMVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmlnaHRJdGVtcy5zb3J0KChhLCBiKSA9PiBtdWx0aXBsaWVyICogKGE/Lm5hdmlnYXRpb24gYXMgTmF2aWdhdGlvbkl0ZW0pPy50aXRsZS5sb2NhbGVDb21wYXJlKChiPy5uYXZpZ2F0aW9uIGFzIE5hdmlnYXRpb25JdGVtKT8udGl0bGUpKTtcbiAgICAgICAgdGhpcy5sZWZ0SXRlbXMuc29ydCgoYSwgYikgPT4gbXVsdGlwbGllciAqIChhPy5uYXZpZ2F0aW9uIGFzIE5hdmlnYXRpb25JdGVtKT8udGl0bGUubG9jYWxlQ29tcGFyZSgoYj8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVDdXN0b21WaWV3c0luUmlnaHRTaWRlKCkge1xuICAgICAgICBpZiAoISF0aGlzLl9jaGlsZEN1c3RvbVZpZXdzW3RoaXMuX2N1cnJlbnROb2RlLnBhdGhdKSB7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0SXRlbXMucHVzaCguLi5PYmplY3QudmFsdWVzKHRoaXMuX2NoaWxkQ3VzdG9tVmlld3NbdGhpcy5fY3VycmVudE5vZGUucGF0aF0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlQ3VzdG9tVmlld3NJbkxlZnRTaWRlKCkge1xuICAgICAgICBpZiAoISF0aGlzLl9jaGlsZEN1c3RvbVZpZXdzW3RoaXMuX2N1cnJlbnROb2RlLnBhcmVudC5wYXRoXSkge1xuICAgICAgICAgICAgdGhpcy5sZWZ0SXRlbXMucHVzaCguLi5PYmplY3QudmFsdWVzKHRoaXMuX2NoaWxkQ3VzdG9tVmlld3NbdGhpcy5fY3VycmVudE5vZGUucGFyZW50LnBhdGhdKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShpdGVtQ2FzZTogQ2FzZSk6IE5hdmlnYXRpb25JdGVtIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKHRoaXMucmVwcmVzZW50c1Jvb3ROb2RlKGl0ZW1DYXNlKSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbTogTmF2aWdhdGlvbkl0ZW0gPSB7XG4gICAgICAgICAgICBhY2Nlc3M6IHt9LFxuICAgICAgICAgICAgbmF2aWdhdGlvbjoge1xuICAgICAgICAgICAgICAgIGljb246IGl0ZW1DYXNlLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX01FTlVfSUNPTik/LnZhbHVlIHx8IHRoaXMuZmlsdGVySWNvbixcbiAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRUcmFuc2xhdGlvbihpdGVtQ2FzZS5pbW1lZGlhdGVEYXRhLmZpbmQoZiA9PiBmLnN0cmluZ0lkID09PSBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9NRU5VX05BTUUpPy52YWx1ZSkgfHwgaXRlbUNhc2UudGl0bGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcm91dGluZzoge1xuICAgICAgICAgICAgICAgIHBhdGg6IHRoaXMuZ2V0SXRlbVJvdXRpbmdQYXRoKGl0ZW1DYXNlKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZDogaXRlbUNhc2Uuc3RyaW5nSWQsXG4gICAgICAgICAgICByZXNvdXJjZTogaXRlbUNhc2UsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc29sdmVkUm9sZXMgPSB0aGlzLnJlc29sdmVBY2Nlc3NSb2xlcyhpdGVtQ2FzZSwgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfQUxMT1dFRF9ST0xFUyk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkQmFubmVkUm9sZXMgPSB0aGlzLnJlc29sdmVBY2Nlc3NSb2xlcyhpdGVtQ2FzZSwgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfQkFOTkVEX1JPTEVTKTtcbiAgICAgICAgaWYgKCEhcmVzb2x2ZWRSb2xlcykgaXRlbS5hY2Nlc3NbJ3JvbGUnXSA9IHJlc29sdmVkUm9sZXM7XG4gICAgICAgIGlmICghIXJlc29sdmVkQmFubmVkUm9sZXMpIGl0ZW0uYWNjZXNzWydiYW5uZWRSb2xlJ10gPSByZXNvbHZlZEJhbm5lZFJvbGVzO1xuICAgICAgICBpZiAoIXRoaXMuX2FjY2Vzc1NlcnZpY2UuY2FuQWNjZXNzVmlldyhpdGVtLCBpdGVtLnJvdXRpbmdQYXRoKSkgcmV0dXJuO1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVwcmVzZW50c1Jvb3ROb2RlKGl0ZW06IENhc2UpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfTk9ERV9QQVRIKS52YWx1ZSA9PT0gXCIvXCJcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0VHJhbnNsYXRpb24odmFsdWU6IEkxOG5GaWVsZFZhbHVlKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZy5zcGxpdCgnLScpWzBdO1xuICAgICAgICByZXR1cm4gbG9jYWxlIGluIHZhbHVlLnRyYW5zbGF0aW9ucyA/IHZhbHVlLnRyYW5zbGF0aW9uc1tsb2NhbGVdIDogdmFsdWUuZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlQWNjZXNzUm9sZXMoZmlsdGVyOiBDYXNlLCByb2xlVHlwZTogc3RyaW5nKTogQXJyYXk8Um9sZUFjY2Vzcz4gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBhbGxvd2VkUm9sZXMgPSBmaWx0ZXIuaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gcm9sZVR5cGUpPy5vcHRpb25zO1xuICAgICAgICBpZiAoIWFsbG93ZWRSb2xlcyB8fCBPYmplY3Qua2V5cyhhbGxvd2VkUm9sZXMpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgcm9sZXMgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMoYWxsb3dlZFJvbGVzKS5mb3JFYWNoKGNvbWJpbmVkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gY29tYmluZWQuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIHJvbGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHByb2Nlc3NJZDogcGFydHNbMV0sXG4gICAgICAgICAgICAgICAgcm9sZUlkOiBwYXJ0c1swXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJvbGVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRJdGVtUm91dGluZ1BhdGgoaXRlbUNhc2U6IENhc2UpIHtcbiAgICAgICAgY29uc3QgdHJhbnNJZCA9IFNFVFRJTkdTX1RSQU5TSVRJT05fSUQ7XG4gICAgICAgIGNvbnN0IHRhc2tJZCA9IGl0ZW1DYXNlLnRhc2tzLmZpbmQodGFza1BhaXIgPT4gdGFza1BhaXIudHJhbnNpdGlvbiA9PT0gdHJhbnNJZCkudGFzaztcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5fZHluYW1pY1JvdXRpbmdTZXJ2aWNlLnJvdXRlO1xuICAgICAgICByZXR1cm4gYC8ke3VybH0vJHt0YXNrSWR9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIHRoZSBiYWNrIGJ1dHRvbiBzaG91bGQgYmUgZGlzcGxheWVkXG4gICAgICogQHJldHVybnMgYm9vbGVhbiBpZiB0aGUgYmFjayBidXR0b24gc2hvdWxkIGJlIGRpc3BsYXllZFxuICAgICAqICovXG4gICAgaXNPblplcm9MZXZlbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fY3VycmVudE5vZGU/LmxldmVsID8gdGhpcy5fY3VycmVudE5vZGUubGV2ZWwgPT0gMCA6IHRydWU7XG4gICAgfVxuXG4gICAgaXNMZWZ0SXRlbXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGVmdEl0ZW1zID09PSB1bmRlZmluZWQgfHwgdGhpcy5sZWZ0SXRlbXMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIGlzUmlnaHRJdGVtc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yaWdodEl0ZW1zID09PSB1bmRlZmluZWQgfHwgdGhpcy5yaWdodEl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICB1cmlOb2RlVHJhY2tCeShpbmRleDogbnVtYmVyLCBub2RlOiBVcmlOb2RlUmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUucGF0aDtcbiAgICB9XG5cbiAgICBpdGVtc1RyYWNrQnkoaW5kZXg6IG51bWJlciwgaXRlbTogTmF2aWdhdGlvbkl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgb25SZXNpemVFdmVudChldmVudDogUmVzaXplRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LnJlY3RhbmdsZS53aWR0aCA+IFJJR0hUX0RSQVdFUl9NQVhfV0lEVEgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS53aWR0aCA9IFJJR0hUX0RSQVdFUl9NQVhfV0lEVEg7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQucmVjdGFuZ2xlLndpZHRoIDwgUklHSFRfRFJBV0VSX0RFRkFVTFRfTUlOX1dJRFRIKSB7XG4gICAgICAgICAgICB0aGlzLl9jb25maWdSaWdodE1lbnUud2lkdGggPSBSSUdIVF9EUkFXRVJfREVGQVVMVF9NSU5fV0lEVEg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jb25maWdSaWdodE1lbnUud2lkdGggPSBldmVudC5yZWN0YW5nbGUud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETyBpbXBsZW1lbnQgc2F2aW5nIGRyYXdlciB3aWR0aCB0byB1c2VyIHByZWZlcmVuY2VzXG4gICAgICAgIC8vIHRoaXMudXNlclByZWZlcmVuY2VTZXJ2aWNlLl9kcmF3ZXJXaWR0aENoYW5nZWQkLm5leHQodGhpcy53aWR0aCk7XG4gICAgICAgIC8vIHRoaXMuY29udGVudFdpZHRoLm5leHQodGhpcy53aWR0aCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVVcmlGb3JDaGlsZFZpZXdzKGNvbmZpZ1BhdGg6IHN0cmluZywgY2hpbGRWaWV3OiBWaWV3KTogdm9pZCB7XG4gICAgICAgIGlmICghY2hpbGRWaWV3LnByb2Nlc3NVcmkpIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLl9hY2Nlc3NTZXJ2aWNlLmNhbkFjY2Vzc1ZpZXcoY2hpbGRWaWV3LCBjb25maWdQYXRoKSkgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuX2NoaWxkQ3VzdG9tVmlld3NbY2hpbGRWaWV3LnByb2Nlc3NVcmldKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGlsZEN1c3RvbVZpZXdzW2NoaWxkVmlldy5wcm9jZXNzVXJpXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NoaWxkQ3VzdG9tVmlld3NbY2hpbGRWaWV3LnByb2Nlc3NVcmldW2NvbmZpZ1BhdGhdID0ge1xuICAgICAgICAgICAgaWQ6IGNvbmZpZ1BhdGgsXG4gICAgICAgICAgICAuLi5jaGlsZFZpZXcsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVIaWRkZW5NZW51SXRlbUZyb21DaGlsZFZpZXdzKGNvbmZpZ1BhdGg6IHN0cmluZywgY2hpbGRWaWV3OiBWaWV3KTogdm9pZCB7XG4gICAgICAgIGlmICghY2hpbGRWaWV3Lm5hdmlnYXRpb24pIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLl9hY2Nlc3NTZXJ2aWNlLmNhbkFjY2Vzc1ZpZXcoY2hpbGRWaWV3LCBjb25maWdQYXRoKSkgcmV0dXJuO1xuICAgICAgICBpZiAoISEoKGNoaWxkVmlldz8ubmF2aWdhdGlvbiBhcyBhbnkpPy5oaWRkZW4pKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGRlbkN1c3RvbUl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBjb25maWdQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmNoaWxkVmlldyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=
|
|
597
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbmF2aWdhdGlvbi1kb3VibGUtZHJhd2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9uYXZpZ2F0aW9uL25hdmlnYXRpb24tZG91YmxlLWRyYXdlci9hYnN0cmFjdC1uYXZpZ2F0aW9uLWRvdWJsZS1kcmF3ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixXQUFXLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFJL0UsT0FBTyxFQUFhLEVBQUUsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFXbkMsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sdURBQXVELENBQUM7QUFJckcsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBSzdELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBSTdFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUM1RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUVILHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNPLDhCQUE4QixFQUM5QywwQkFBMEIsRUFDMUIsc0JBQXNCLEVBQ3RCLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3pCLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQU9yQyxNQUFNLE9BQWdCLHVDQUF1QztJQXFFekI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJ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O2lCQUNmOzhmQUdZLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHN9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNYXREcmF3ZXJNb2RlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7UmVzaXplRXZlbnR9IGZyb20gJ2FuZ3VsYXItcmVzaXphYmxlLWVsZW1lbnQnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1JvbGVBY2Nlc3MsIFZpZXd9IGZyb20gJy4uLy4uLy4uL2NvbW1vbnMvc2NoZW1hJztcbmltcG9ydCB7QWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aG9yaXphdGlvbi9wZXJtaXNzaW9uL2FjY2Vzcy5zZXJ2aWNlJztcbmltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7SW1wZXJzb25hdGlvblVzZXJTZWxlY3RTZXJ2aWNlfSBmcm9tICcuLi8uLi9pbXBlcnNvbmF0aW9uL3NlcnZpY2VzL2ltcGVyc29uYXRpb24tdXNlci1zZWxlY3Quc2VydmljZSc7XG5pbXBvcnQge0ltcGVyc29uYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9pbXBlcnNvbmF0aW9uL3NlcnZpY2VzL2ltcGVyc29uYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0Nhc2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvY2FzZSc7XG5pbXBvcnQge1xuICAgIER5bmFtaWNOYXZpZ2F0aW9uUm91dGVQcm92aWRlclNlcnZpY2UsXG59IGZyb20gJy4uLy4uL3JvdXRpbmcvZHluYW1pYy1uYXZpZ2F0aW9uLXJvdXRlLXByb3ZpZGVyL2R5bmFtaWMtbmF2aWdhdGlvbi1yb3V0ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7TkFFX1JPVVRJTkdfQ09ORklHVVJBVElPTl9QQVRIfSBmcm9tICcuLi8uLi9yb3V0aW5nL3JvdXRpbmctYnVpbGRlci9yb3V0aW5nLWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQge0xhbmd1YWdlU2VydmljZX0gZnJvbSAnLi4vLi4vdHJhbnNsYXRlL2xhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtVc2VyfSBmcm9tICcuLi8uLi91c2VyL21vZGVscy91c2VyJztcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4uLy4uL3VzZXIvc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7TG9hZGluZ0VtaXR0ZXJ9IGZyb20gJy4uLy4uL3V0aWxpdHkvbG9hZGluZy1lbWl0dGVyJztcbmltcG9ydCB7VXJpTm9kZVJlc291cmNlfSBmcm9tICcuLi9tb2RlbC91cmktcmVzb3VyY2UnO1xuaW1wb3J0IHtVcmlTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL3VyaS5zZXJ2aWNlJztcbmltcG9ydCB7STE4bkZpZWxkVmFsdWV9IGZyb20gXCIuLi8uLi9kYXRhLWZpZWxkcy9pMThuLWZpZWxkL21vZGVscy9pMThuLWZpZWxkLXZhbHVlXCI7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQge0dyb3VwTmF2aWdhdGlvbkNvbnN0YW50c30gZnJvbSBcIi4uL21vZGVsL2dyb3VwLW5hdmlnYXRpb24tY29uc3RhbnRzXCI7XG5pbXBvcnQge0Nhc2VSZXNvdXJjZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L2Nhc2UtcmVzb3VyY2Uuc2VydmljZVwiO1xuaW1wb3J0IHtQYWdlfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wYWdlXCI7XG5pbXBvcnQge0Nhc2VTZWFyY2hSZXF1ZXN0Qm9keSwgUGV0cmlOZXRTZWFyY2hSZXF1ZXN0fSBmcm9tIFwiLi4vLi4vZmlsdGVyL21vZGVscy9jYXNlLXNlYXJjaC1yZXF1ZXN0LWJvZHlcIjtcbmltcG9ydCB7SHR0cFBhcmFtc30gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQge1BhZ2luYXRpb25QYXJhbXN9IGZyb20gXCIuLi8uLi91dGlsaXR5L3BhZ2luYXRpb24vcGFnaW5hdGlvbi1wYXJhbXNcIjtcbmltcG9ydCB7U2ltcGxlRmlsdGVyfSBmcm9tIFwiLi4vLi4vZmlsdGVyL21vZGVscy9zaW1wbGUtZmlsdGVyXCI7XG5pbXBvcnQge1xuICAgIENvbmZpZ0RvdWJsZU1lbnUsXG4gICAgTEVGVF9EUkFXRVJfREVGQVVMVF9XSURUSCxcbiAgICBNRU5VX0lERU5USUZJRVJTLFxuICAgIE1lbnVPcmRlcixcbiAgICBOYXZpZ2F0aW9uSXRlbSwgUklHSFRfRFJBV0VSX0RFRkFVTFRfTUlOX1dJRFRILFxuICAgIFJJR0hUX0RSQVdFUl9ERUZBVUxUX1dJRFRILFxuICAgIFJJR0hUX0RSQVdFUl9NQVhfV0lEVEgsXG4gICAgUklHSFRfU0lERV9JTklUX1BBR0VfU0laRSxcbiAgICBSSUdIVF9TSURFX05FV19QQUdFX1NJWkUsXG4gICAgU0VUVElOR1NfVFJBTlNJVElPTl9JRFxufSBmcm9tICcuLi9tb2RlbC9uYXZpZ2F0aW9uLWNvbmZpZ3MnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmNjLWFic3RyYWN0LW5hdmlnYXRpb24tZG91YmxlLWRyYXdlcicsXG4gICAgdGVtcGxhdGU6ICcnLFxufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE5hdmlnYXRpb25Eb3VibGVEcmF3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBASW5wdXQoKSBwb3J0YWxMZWZ0TWVudTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBASW5wdXQoKSBwb3J0YWxSaWdodE1lbnU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgaW1hZ2VSb3V0ZXJMaW5rOiBzdHJpbmcgPSAnLyc7XG4gICAgQElucHV0KCkgaW1hZ2VBbHQ6IHN0cmluZyA9ICdMb2dvJztcbiAgICBASW5wdXQoKSBpbWFnZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHByb2ZpbGVSb3V0ZXJMaW5rOiBzdHJpbmcgPSAnL3Byb2ZpbGUnO1xuICAgIEBJbnB1dCgpIGluY2x1ZGVVc2VyOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBpbmNsdWRlTGFuZ3VhZ2U6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGluY2x1ZGVNb3JlTWVudTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgaW5jbHVkZUltcGVyc29uYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGFsbENsb3NhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBmb2xkZXJJY29uOiBzdHJpbmcgPSAnZm9sZGVyJztcbiAgICBASW5wdXQoKSBvcGVuZWRGb2xkZXJJY29uOiBzdHJpbmcgPSAnZm9sZGVyX29wZW4nO1xuICAgIEBJbnB1dCgpIGZpbHRlckljb246IHN0cmluZyA9ICdmaWx0ZXJfYWx0JztcbiAgICBASW5wdXQoKSBmb2xkZXJzQ2F0ZWdvcnlOYW1lOiBzdHJpbmcgPSAndG9vbGJhci5tZW51LmZvbGRlcnMnO1xuICAgIEBJbnB1dCgpIHZpZXdzQ2F0ZWdvcnlOYW1lOiBzdHJpbmcgPSAndG9vbGJhci5tZW51LnZpZXdzJztcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgZGlzcGxheWVkIGl0ZW1zIG9uIHRoZSBsZWZ0IHNpZGVcbiAgICAgKiAqL1xuICAgIGxlZnRJdGVtczogQXJyYXk8TmF2aWdhdGlvbkl0ZW0+XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGRpc3BsYXllZCBpdGVtcyBvbiB0aGUgcmlnaHQgc2lkZVxuICAgICAqICovXG4gICAgcmlnaHRJdGVtczogQXJyYXk8TmF2aWdhdGlvbkl0ZW0+XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGhpZGRlbiBpdGVtc1xuICAgICAqICovXG4gICAgbW9yZUl0ZW1zOiBBcnJheTxOYXZpZ2F0aW9uSXRlbT47XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGN1c3RvbSBpdGVtcyBpbiBtb3JlIG1lbnVcbiAgICAgKiAqL1xuICAgIGhpZGRlbkN1c3RvbUl0ZW1zOiBBcnJheTxOYXZpZ2F0aW9uSXRlbT47XG5cbiAgICBpdGVtc09yZGVyOiBNZW51T3JkZXI7XG5cbiAgICBwcm90ZWN0ZWQgX2JyZWFrcG9pbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICBwcm90ZWN0ZWQgX2N1cnJlbnROb2RlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50bHkgZGlzcGxheSB1cmlcbiAgICAgKiBTaWJsaW5ncyBvZiB0aGUgbm9kZSBhcmUgb24gdGhlIGxlZnQsIGNoaWxkcmVuIGFyZSBvbiB0aGUgcmlnaHRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2N1cnJlbnROb2RlOiBVcmlOb2RlUmVzb3VyY2U7XG5cbiAgICBsZWZ0TG9hZGluZyQ6IExvYWRpbmdFbWl0dGVyO1xuICAgIHJpZ2h0TG9hZGluZyQ6IExvYWRpbmdFbWl0dGVyO1xuICAgIG5vZGVMb2FkaW5nJDogTG9hZGluZ0VtaXR0ZXI7XG5cbiAgICBwcm90ZWN0ZWQgX2NvbmZpZ0xlZnRNZW51OiBDb25maWdEb3VibGVNZW51ID0ge1xuICAgICAgICBtb2RlOiAnc2lkZScsXG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgd2lkdGg6IExFRlRfRFJBV0VSX0RFRkFVTFRfV0lEVEgsXG4gICAgfTtcbiAgICBwcm90ZWN0ZWQgX2NvbmZpZ1JpZ2h0TWVudTogQ29uZmlnRG91YmxlTWVudSA9IHtcbiAgICAgICAgbW9kZTogJ3NpZGUnLFxuICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXG4gICAgICAgIHdpZHRoOiBSSUdIVF9EUkFXRVJfREVGQVVMVF9XSURUSCxcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIF9jaGlsZEN1c3RvbVZpZXdzOiB7IFt1cmk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogTmF2aWdhdGlvbkl0ZW0gfSB9O1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2JyZWFrcG9pbnQ6IEJyZWFrcG9pbnRPYnNlcnZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hY2Nlc3NTZXJ2aWNlOiBBY2Nlc3NTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2xvZzogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9jb25maWc6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VyaVNlcnZpY2U6IFVyaVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfY2FzZVJlc291cmNlU2VydmljZTogQ2FzZVJlc291cmNlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9pbXBlcnNvbmF0aW9uVXNlclNlbGVjdDogSW1wZXJzb25hdGlvblVzZXJTZWxlY3RTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2ltcGVyc29uYXRpb246IEltcGVyc29uYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2R5bmFtaWNSb3V0aW5nU2VydmljZTogRHluYW1pY05hdmlnYXRpb25Sb3V0ZVByb3ZpZGVyU2VydmljZSkge1xuICAgICAgICB0aGlzLmxlZnRJdGVtcyA9IG5ldyBBcnJheTxOYXZpZ2F0aW9uSXRlbT4oKTtcbiAgICAgICAgdGhpcy5yaWdodEl0ZW1zID0gbmV3IEFycmF5PE5hdmlnYXRpb25JdGVtPigpO1xuICAgICAgICB0aGlzLmxlZnRMb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQgPSBuZXcgTG9hZGluZ0VtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5ub2RlTG9hZGluZyQgPSBuZXcgTG9hZGluZ0VtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5pdGVtc09yZGVyID0gTWVudU9yZGVyLkFzY2VuZGluZztcbiAgICAgICAgdGhpcy5oaWRkZW5DdXN0b21JdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLm1vcmVJdGVtcyA9IG5ldyBBcnJheTxOYXZpZ2F0aW9uSXRlbT4oKTtcbiAgICAgICAgdGhpcy5fY2hpbGRDdXN0b21WaWV3cyA9IHt9O1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9icmVha3BvaW50U3Vic2NyaXB0aW9uID0gdGhpcy5fYnJlYWtwb2ludC5vYnNlcnZlKFtCcmVha3BvaW50cy5IYW5kc2V0TGFuZHNjYXBlXSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50LmlzTWF0Y2hlZCgnKG1heC13aWR0aDogOTU5Ljk5cHgpJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVMYXlvdXQoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVMYXlvdXQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnROb2RlU3Vic2NyaXB0aW9uID0gdGhpcy5fdXJpU2VydmljZS5hY3RpdmVOb2RlJC5zdWJzY3JpYmUobm9kZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnROb2RlID0gbm9kZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgdmlld0NvbmZpZ3VyYXRpb25QYXRoID0gdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YVtOQUVfUk9VVElOR19DT05GSUdVUkFUSU9OX1BBVEhdO1xuICAgICAgICBpZiAoISF2aWV3Q29uZmlndXJhdGlvblBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdDb25maWd1cmF0aW9uID0gdGhpcy5fY29uZmlnLmdldFZpZXdCeVBhdGgodmlld0NvbmZpZ3VyYXRpb25QYXRoKTtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHZpZXdDb25maWd1cmF0aW9uLmNoaWxkcmVuKS5mb3JFYWNoKChba2V5LCBjaGlsZFZpZXddKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlVXJpRm9yQ2hpbGRWaWV3cyh2aWV3Q29uZmlndXJhdGlvblBhdGggKyAnLycgKyBrZXksIGNoaWxkVmlldyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlSGlkZGVuTWVudUl0ZW1Gcm9tQ2hpbGRWaWV3cyh2aWV3Q29uZmlndXJhdGlvblBhdGggKyAnLycgKyBrZXksIGNoaWxkVmlldyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBjdXJyZW50Tm9kZSgpOiBVcmlOb2RlUmVzb3VyY2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudE5vZGU7XG4gICAgfVxuXG4gICAgc2V0IGN1cnJlbnROb2RlKG5vZGU6IFVyaU5vZGVSZXNvdXJjZSkge1xuICAgICAgICBpZiAobm9kZSA9PT0gdGhpcy5fY3VycmVudE5vZGUgfHwgdGhpcy5sZWZ0TG9hZGluZyQuaXNBY3RpdmUgfHwgdGhpcy5yaWdodExvYWRpbmckLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3VycmVudE5vZGUgPSBub2RlO1xuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5wYXJlbnRJZCAmJiAhbm9kZS5wYXJlbnQpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudElkID09PSB0aGlzLl91cmlTZXJ2aWNlLnJvb3QuaWQpIHtcbiAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHRoaXMuX3VyaVNlcnZpY2Uucm9vdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlTG9hZGluZyQub24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91cmlTZXJ2aWNlLmdldE5vZGVCeVBhdGgodGhpcy5fdXJpU2VydmljZS5yZXNvbHZlUGFyZW50UGF0aChub2RlKSkuc3Vic2NyaWJlKG4gPT4ge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9ICFuID8gdGhpcy5fdXJpU2VydmljZS5yb290IDogbjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlTG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ub2RlTG9hZGluZyQuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZUxvYWRpbmckLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlTWVudUl0ZW1zKG5vZGUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZU1lbnVJdGVtcyhub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlTWVudUl0ZW1zKG5vZGU6IFVyaU5vZGVSZXNvdXJjZSkge1xuICAgICAgICBpZiAodGhpcy5fdXJpU2VydmljZS5pc1Jvb3Qobm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMubGVmdEl0ZW1zID0gW107XG4gICAgICAgICAgICB0aGlzLmxvYWRSaWdodFNpZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5sZWZ0SXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucmVzb3VyY2U/LmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX05PREVfUEFUSCk/LnZhbHVlID09PSBub2RlLnVyaVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTGVmdFNpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9hZFJpZ2h0U2lkZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnROb2RlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmxlZnRMb2FkaW5nJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5ub2RlTG9hZGluZyQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBnZXQgY29uZmlnTGVmdE1lbnUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWdMZWZ0TWVudTtcbiAgICB9XG5cbiAgICBnZXQgY29uZmlnUmlnaHRNZW51KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnUmlnaHRNZW51O1xuICAgIH1cblxuICAgIHRvZ2dsZU1lbnUoKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlUmlnaHRNZW51KCk7XG4gICAgICAgIGlmICh0aGlzLmFsbENsb3NhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUxlZnRNZW51KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b2dnbGVMZWZ0TWVudSgpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnTGVmdE1lbnUub3BlbmVkID0gIXRoaXMuX2NvbmZpZ0xlZnRNZW51Lm9wZW5lZDtcbiAgICB9XG5cbiAgICB0b2dnbGVSaWdodE1lbnUoKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS5vcGVuZWQgPSAhdGhpcy5fY29uZmlnUmlnaHRNZW51Lm9wZW5lZDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUxheW91dChpc0xhcmdlU2NyZWVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbmZpZ0xlZnRNZW51ID0gaXNMYXJnZVNjcmVlbiA/IHtcbiAgICAgICAgICAgIG1vZGU6ICdzaWRlJyxcbiAgICAgICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLl9jb25maWdMZWZ0TWVudS53aWR0aCxcbiAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIG1vZGU6ICdvdmVyJyxcbiAgICAgICAgICAgIG9wZW5lZDogZmFsc2UsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2NvbmZpZ0xlZnRNZW51LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9jb25maWdSaWdodE1lbnUgPSBpc0xhcmdlU2NyZWVuID8ge1xuICAgICAgICAgICAgbW9kZTogJ3NpZGUnLFxuICAgICAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS53aWR0aCxcbiAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIG1vZGU6ICdvdmVyJyxcbiAgICAgICAgICAgIG9wZW5lZDogZmFsc2UsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS53aWR0aCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRMYW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldExhbmd1YWdlKCk7XG4gICAgfVxuXG4gICAgbG9nb3V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91c2VyU2VydmljZS5sb2dvdXQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdVc2VyIGlzIGxvZ2dlZCBvdXQnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb25maWcuZ2V0KCkuc2VydmljZXMgJiYgdGhpcy5fY29uZmlnLmdldCgpLnNlcnZpY2VzLmF1dGggJiYgdGhpcy5fY29uZmlnLmdldCgpLnNlcnZpY2VzLmF1dGgubG9nb3V0UmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWRpcmVjdFBhdGggPSB0aGlzLl9jb25maWcuZ2V0KCkuc2VydmljZXMuYXV0aC5sb2dvdXRSZWRpcmVjdDtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuaW5mbygnUmVkaXJlY3RpbmcgdG8gJyArIHJlZGlyZWN0UGF0aCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtyZWRpcmVjdFBhdGhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW1wZXJzb25hdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ltcGVyc29uYXRpb25Vc2VyU2VsZWN0LnNlbGVjdEltcGVyc29uYXRlKCk7XG4gICAgfVxuXG4gICAgc3RvcEltcGVyc29uYXRpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ltcGVyc29uYXRpb24uY2Vhc2UoKTtcbiAgICB9XG5cbiAgICBnZXQgdXNlcigpOiBVc2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTZXJ2aWNlLnVzZXI7XG4gICAgfVxuXG4gICAgZ2V0IGNhbkdvQmFja0xvYWRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlTG9hZGluZyQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gaG9tZSBjbGljaywgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgc2V0IHRvIDAsIGFuZCBjdXJyZW50IHBhcmVudCBpc1xuICAgICAqIHNldCB0byByb290IG5vZGUuXG4gICAgICogKi9cbiAgICBvbkhvbWVDbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubGVmdExvYWRpbmckLmlzQWN0aXZlIHx8IHRoaXMucmlnaHRMb2FkaW5nJC5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdXJpU2VydmljZS5hY3RpdmVOb2RlID0gdGhpcy5fdXJpU2VydmljZS5yb290O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIGJhY2sgY2xpY2ssIHRoZSBwYXJlbnQgaXMgc2V0IHRvIHBhcmVudCBvZiBsZWZ0IG5vZGVzLCB0aGF0IHdpbGwgc29sdmVcbiAgICAgKiB0aGUgcmlnaHQgc2lkZSBtZW51IChlbGVtZW50cyB0aGF0IHdlcmUgaW4gbGVmdCBzaWRlLCBhZnRlciBiYWNrd2FyZFxuICAgICAqIG5hdmlnYXRpb24gd2lsbCBiZSBvbiB0aGUgcmlnaHQgc2lkZSkuXG4gICAgICogQ3VycmVudCBsZXZlbCBpcyBzZXQgdG8gYSBsb3dlciBudW1iZXIgaW4gb3JkZXIgdG8gc2V0IHRoZSBsZWZ0IHNpZGUgbWVudS5cbiAgICAgKiAqL1xuICAgIG9uQmFja0NsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5sZWZ0TG9hZGluZyQuaXNBY3RpdmUgfHwgdGhpcy5yaWdodExvYWRpbmckLmlzQWN0aXZlIHx8IHRoaXMuX3VyaVNlcnZpY2UuaXNSb290KHRoaXMuX2N1cnJlbnROb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdXJpU2VydmljZS5hY3RpdmVOb2RlID0gdGhpcy5fY3VycmVudE5vZGUucGFyZW50O1xuICAgIH1cblxuICAgIG9uSXRlbUNsaWNrKGl0ZW06IE5hdmlnYXRpb25JdGVtKTogdm9pZCB7XG4gICAgICAgIGlmIChpdGVtLnJlc291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGN1c3RvbSB2aWV3IHJlcHJlc2VudGVkIG9ubHkgaW4gbmFlLmpzb25cbiAgICAgICAgICAgIGlmIChpdGVtLnByb2Nlc3NVcmkgPT09IHRoaXMuY3VycmVudE5vZGUudXJpUGF0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VyaVNlcnZpY2UuYWN0aXZlTm9kZSA9IHRoaXMuX2N1cnJlbnROb2RlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cmlTZXJ2aWNlLmFjdGl2ZU5vZGUgPSB0aGlzLl9jdXJyZW50Tm9kZS5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gaXRlbS5yZXNvdXJjZS5pbW1lZGlhdGVEYXRhLmZpbmQoZiA9PiBmLnN0cmluZ0lkID09PSBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9OT0RFX1BBVEgpPy52YWx1ZVxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzSXRlbUNoaWxkcmVuKGl0ZW0pICYmICF0aGlzLmxlZnRMb2FkaW5nJC5pc0FjdGl2ZSAmJiAhdGhpcy5yaWdodExvYWRpbmckLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXJpU2VydmljZS5nZXROb2RlQnlQYXRoKHBhdGgpLnN1YnNjcmliZShub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXJpU2VydmljZS5hY3RpdmVOb2RlID0gbm9kZVxuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXBhdGguaW5jbHVkZXModGhpcy5jdXJyZW50Tm9kZS51cmlQYXRoKSl7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXJpU2VydmljZS5hY3RpdmVOb2RlID0gdGhpcy5fY3VycmVudE5vZGUucGFyZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cmlTZXJ2aWNlLmFjdGl2ZU5vZGUgPSB0aGlzLl9jdXJyZW50Tm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc0l0ZW1DaGlsZHJlbihpdGVtOiBOYXZpZ2F0aW9uSXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaXRlbS5yZXNvdXJjZT8uaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfSEFTX0NISUxEUkVOKT8udmFsdWVcbiAgICB9XG5cbiAgICBpc0l0ZW1BbmROb2RlRXF1YWwoaXRlbTogTmF2aWdhdGlvbkl0ZW0sIG5vZGU6IFVyaU5vZGVSZXNvdXJjZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaXRlbS5yZXNvdXJjZT8uaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfTk9ERV9QQVRIKT8udmFsdWUgPT09IG5vZGUudXJpUGF0aFxuICAgIH1cblxuICAgIHByb3RlY3RlZCBsb2FkTGVmdFNpZGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl91cmlTZXJ2aWNlLmlzUm9vdCh0aGlzLl9jdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMubGVmdEl0ZW1zID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sZWZ0TG9hZGluZyQub24oKTtcbiAgICAgICAgdGhpcy5fdXJpU2VydmljZS5nZXRJdGVtQ2FzZUJ5Tm9kZVBhdGgodGhpcy5jdXJyZW50Tm9kZS5wYXJlbnQpLnN1YnNjcmliZShwYWdlID0+IHtcbiAgICAgICAgICAgIGxldCBjaGlsZENhc2VzJDtcbiAgICAgICAgICAgIGxldCB0YXJnZXRJdGVtO1xuICAgICAgICAgICAgbGV0IG9yZGVyZWRDaGlsZENhc2VJZHM7XG5cbiAgICAgICAgICAgIGlmIChwYWdlPy5wYWdpbmF0aW9uPy50b3RhbEVsZW1lbnRzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRDYXNlcyQgPSBvZihbXSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0SXRlbSA9IHBhZ2UuY29udGVudFswXVxuICAgICAgICAgICAgICAgIG9yZGVyZWRDaGlsZENhc2VJZHMgPSB0aGlzLmV4dHJhY3RDaGlsZENhc2VJZHModGFyZ2V0SXRlbSlcbiAgICAgICAgICAgICAgICBjaGlsZENhc2VzJCA9IHRoaXMuZ2V0SXRlbUNhc2VzQnlJZHNJbk9uZVBhZ2Uob3JkZXJlZENoaWxkQ2FzZUlkcykucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKHAgPT4gcC5jb250ZW50KSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkQ2FzZXMkLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKS5maWx0ZXIoaSA9PiAhIWkpO1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdEl0ZW1zID0gcmVzdWx0LnNvcnQoKGEsIGIpID0+IG9yZGVyZWRDaGlsZENhc2VJZHMuaW5kZXhPZihhLnJlc291cmNlLnN0cmluZ0lkKSAtIG9yZGVyZWRDaGlsZENhc2VJZHMuaW5kZXhPZihiLnJlc291cmNlLnN0cmluZ0lkKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlQ3VzdG9tVmlld3NJbkxlZnRTaWRlKClcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdEl0ZW1zID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlQ3VzdG9tVmlld3NJbkxlZnRTaWRlKClcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5sZWZ0SXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZUN1c3RvbVZpZXdzSW5MZWZ0U2lkZSgpXG4gICAgICAgICAgICB0aGlzLmxlZnRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxvYWRSaWdodFNpZGUoKSB7XG4gICAgICAgIHRoaXMucmlnaHRMb2FkaW5nJC5vbigpO1xuICAgICAgICB0aGlzLm1vcmVJdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLl91cmlTZXJ2aWNlLmdldEl0ZW1DYXNlQnlOb2RlUGF0aCh0aGlzLmN1cnJlbnROb2RlKS5zdWJzY3JpYmUocGFnZSA9PiB7XG4gICAgICAgICAgICBsZXQgY2hpbGRDYXNlcyQ7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0SXRlbTtcbiAgICAgICAgICAgIGxldCBvcmRlcmVkQ2hpbGRDYXNlSWRzO1xuXG4gICAgICAgICAgICBpZiAocGFnZT8ucGFnaW5hdGlvbj8udG90YWxFbGVtZW50cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNoaWxkQ2FzZXMkID0gb2YoW10pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldEl0ZW0gPSBwYWdlLmNvbnRlbnRbMF1cbiAgICAgICAgICAgICAgICBvcmRlcmVkQ2hpbGRDYXNlSWRzID0gdGhpcy5leHRyYWN0Q2hpbGRDYXNlSWRzKHRhcmdldEl0ZW0pXG4gICAgICAgICAgICAgICAgY2hpbGRDYXNlcyQgPSB0aGlzLmdldEl0ZW1DYXNlc0J5SWRzSW5PbmVQYWdlKG9yZGVyZWRDaGlsZENhc2VJZHMpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcChwID0+IHAuY29udGVudCksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZENhc2VzJC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSAocmVzdWx0IGFzIENhc2VbXSkuc29ydCgoYSwgYikgPT4gb3JkZXJlZENoaWxkQ2FzZUlkcy5pbmRleE9mKGEuc3RyaW5nSWQpIC0gb3JkZXJlZENoaWxkQ2FzZUlkcy5pbmRleE9mKGIuc3RyaW5nSWQpKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IFJJR0hUX1NJREVfSU5JVF9QQUdFX1NJWkUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF3UmlnaHRJdGVtczogQ2FzZVtdID0gcmVzdWx0LnNwbGljZSgwLCBSSUdIVF9TSURFX0lOSVRfUEFHRV9TSVpFKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yaWdodEl0ZW1zID0gcmF3UmlnaHRJdGVtcy5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKS5maWx0ZXIoaSA9PiAhIWkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcmVJdGVtcyA9IHJlc3VsdC5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKS5maWx0ZXIoaSA9PiAhIWkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmlnaHRJdGVtcyA9IHJlc3VsdC5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKS5maWx0ZXIoaSA9PiAhIWkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVDdXN0b21WaWV3c0luUmlnaHRTaWRlKClcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0SXRlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vcmVJdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZUN1c3RvbVZpZXdzSW5SaWdodFNpZGUoKVxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5yaWdodEl0ZW1zID0gW107XG4gICAgICAgICAgICB0aGlzLm1vcmVJdGVtcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlQ3VzdG9tVmlld3NJblJpZ2h0U2lkZSgpXG4gICAgICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBleHRyYWN0Q2hpbGRDYXNlSWRzKGl0ZW06IENhc2UpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBpdGVtLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX0NISUxEX0lURU1fSURTKT8udmFsdWVcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0SXRlbUNhc2VzQnlJZHNJbk9uZVBhZ2UoY2FzZUlkczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPFBhZ2U8Q2FzZT4+ICB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1DYXNlc0J5SWRzKGNhc2VJZHMsIDAsIGNhc2VJZHMubGVuZ3RoKVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRJdGVtQ2FzZXNCeUlkcyhjYXNlSWRzOiBzdHJpbmdbXSwgcGFnZU51bWJlcjogbnVtYmVyLCBwYWdlU2l6ZTogc3RyaW5nIHwgbnVtYmVyKTogT2JzZXJ2YWJsZTxQYWdlPENhc2U+PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaEJvZHk6IENhc2VTZWFyY2hSZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAgIHN0cmluZ0lkOiBjYXNlSWRzLFxuICAgICAgICAgICAgcHJvY2VzczogTUVOVV9JREVOVElGSUVSUy5tYXAoaWQgPT4gKHtpZGVudGlmaWVyOiBpZH0gYXMgUGV0cmlOZXRTZWFyY2hSZXF1ZXN0KSlcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAgICAgICAgIC5zZXQoUGFnaW5hdGlvblBhcmFtcy5QQUdFX1NJWkUsIHBhZ2VTaXplKVxuICAgICAgICAgICAgLnNldChQYWdpbmF0aW9uUGFyYW1zLlBBR0VfTlVNQkVSLCBwYWdlTnVtYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nhc2VSZXNvdXJjZVNlcnZpY2Uuc2VhcmNoQ2FzZXMoU2ltcGxlRmlsdGVyLmZyb21DYXNlUXVlcnkoc2VhcmNoQm9keSksIGh0dHBQYXJhbXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkTW9yZUl0ZW1zKCkge1xuICAgICAgICBpZiAodGhpcy5tb3JlSXRlbXMubGVuZ3RoID4gUklHSFRfU0lERV9ORVdfUEFHRV9TSVpFKSB7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0SXRlbXMucHVzaCguLi50aGlzLm1vcmVJdGVtcy5zcGxpY2UoMCwgUklHSFRfU0lERV9ORVdfUEFHRV9TSVpFKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmlnaHRJdGVtcy5wdXNoKC4uLnRoaXMubW9yZUl0ZW1zKVxuICAgICAgICAgICAgdGhpcy5tb3JlSXRlbXMgPSBbXVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzQXNjZW5kaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtc09yZGVyID09PSBNZW51T3JkZXIuQXNjZW5kaW5nO1xuICAgIH1cblxuICAgIHB1YmxpYyBzd2l0Y2hPcmRlcigpIHtcbiAgICAgICAgdGhpcy5pdGVtc09yZGVyID0gKHRoaXMuaXRlbXNPcmRlciArIDEpICUgMjtcbiAgICAgICAgbGV0IG11bHRpcGxpZXIgPSAxXG4gICAgICAgIGlmICh0aGlzLml0ZW1zT3JkZXIgPT09IE1lbnVPcmRlci5EZXNjZW5kaW5nKSB7XG4gICAgICAgICAgICBtdWx0aXBsaWVyID0gLTFcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJpZ2h0SXRlbXMuc29ydCgoYSwgYikgPT4gbXVsdGlwbGllciAqIChhPy5uYXZpZ2F0aW9uIGFzIE5hdmlnYXRpb25JdGVtKT8udGl0bGUubG9jYWxlQ29tcGFyZSgoYj8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlKSk7XG4gICAgICAgIHRoaXMubGVmdEl0ZW1zLnNvcnQoKGEsIGIpID0+IG11bHRpcGxpZXIgKiAoYT8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlLmxvY2FsZUNvbXBhcmUoKGI/Lm5hdmlnYXRpb24gYXMgTmF2aWdhdGlvbkl0ZW0pPy50aXRsZSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlQ3VzdG9tVmlld3NJblJpZ2h0U2lkZSgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5fY2hpbGRDdXN0b21WaWV3c1t0aGlzLl9jdXJyZW50Tm9kZS51cmlQYXRoXSkge1xuICAgICAgICAgICAgdGhpcy5yaWdodEl0ZW1zLnB1c2goLi4uT2JqZWN0LnZhbHVlcyh0aGlzLl9jaGlsZEN1c3RvbVZpZXdzW3RoaXMuX2N1cnJlbnROb2RlLnVyaVBhdGhdKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUN1c3RvbVZpZXdzSW5MZWZ0U2lkZSgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5fY2hpbGRDdXN0b21WaWV3c1t0aGlzLl9jdXJyZW50Tm9kZS5wYXJlbnQudXJpUGF0aF0pIHtcbiAgICAgICAgICAgIHRoaXMubGVmdEl0ZW1zLnB1c2goLi4uT2JqZWN0LnZhbHVlcyh0aGlzLl9jaGlsZEN1c3RvbVZpZXdzW3RoaXMuX2N1cnJlbnROb2RlLnBhcmVudC51cmlQYXRoXSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVJdGVtQ2FzZVRvTmF2aWdhdGlvbkl0ZW0oaXRlbUNhc2U6IENhc2UpOiBOYXZpZ2F0aW9uSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh0aGlzLnJlcHJlc2VudHNSb290Tm9kZShpdGVtQ2FzZSkpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW06IE5hdmlnYXRpb25JdGVtID0ge1xuICAgICAgICAgICAgYWNjZXNzOiB7fSxcbiAgICAgICAgICAgIG5hdmlnYXRpb246IHtcbiAgICAgICAgICAgICAgICBpY29uOiBpdGVtQ2FzZS5pbW1lZGlhdGVEYXRhLmZpbmQoZiA9PiBmLnN0cmluZ0lkID09PSBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9NRU5VX0lDT04pPy52YWx1ZSB8fCB0aGlzLmZpbHRlckljb24sXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0VHJhbnNsYXRpb24oaXRlbUNhc2UuaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfTUVOVV9OQU1FKT8udmFsdWUpIHx8IGl0ZW1DYXNlLnRpdGxlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJvdXRpbmc6IHtcbiAgICAgICAgICAgICAgICBwYXRoOiB0aGlzLmdldEl0ZW1Sb3V0aW5nUGF0aChpdGVtQ2FzZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWQ6IGl0ZW1DYXNlLnN0cmluZ0lkLFxuICAgICAgICAgICAgcmVzb3VyY2U6IGl0ZW1DYXNlLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXNvbHZlZFJvbGVzID0gdGhpcy5yZXNvbHZlQWNjZXNzUm9sZXMoaXRlbUNhc2UsIEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX0FMTE9XRURfUk9MRVMpO1xuICAgICAgICBjb25zdCByZXNvbHZlZEJhbm5lZFJvbGVzID0gdGhpcy5yZXNvbHZlQWNjZXNzUm9sZXMoaXRlbUNhc2UsIEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX0JBTk5FRF9ST0xFUyk7XG4gICAgICAgIGlmICghIXJlc29sdmVkUm9sZXMpIGl0ZW0uYWNjZXNzWydyb2xlJ10gPSByZXNvbHZlZFJvbGVzO1xuICAgICAgICBpZiAoISFyZXNvbHZlZEJhbm5lZFJvbGVzKSBpdGVtLmFjY2Vzc1snYmFubmVkUm9sZSddID0gcmVzb2x2ZWRCYW5uZWRSb2xlcztcbiAgICAgICAgaWYgKCF0aGlzLl9hY2Nlc3NTZXJ2aWNlLmNhbkFjY2Vzc1ZpZXcoaXRlbSwgaXRlbS5yb3V0aW5nUGF0aCkpIHJldHVybjtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlcHJlc2VudHNSb290Tm9kZShpdGVtOiBDYXNlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpdGVtLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX05PREVfUEFUSCkudmFsdWUgPT09IFwiL1wiXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFRyYW5zbGF0aW9uKHZhbHVlOiBJMThuRmllbGRWYWx1ZSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcuc3BsaXQoJy0nKVswXTtcbiAgICAgICAgcmV0dXJuIGxvY2FsZSBpbiB2YWx1ZS50cmFuc2xhdGlvbnMgPyB2YWx1ZS50cmFuc2xhdGlvbnNbbG9jYWxlXSA6IHZhbHVlLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUFjY2Vzc1JvbGVzKGZpbHRlcjogQ2FzZSwgcm9sZVR5cGU6IHN0cmluZyk6IEFycmF5PFJvbGVBY2Nlc3M+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgYWxsb3dlZFJvbGVzID0gZmlsdGVyLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IHJvbGVUeXBlKT8ub3B0aW9ucztcbiAgICAgICAgaWYgKCFhbGxvd2VkUm9sZXMgfHwgT2JqZWN0LmtleXMoYWxsb3dlZFJvbGVzKS5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJvbGVzID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKGFsbG93ZWRSb2xlcykuZm9yRWFjaChjb21iaW5lZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGNvbWJpbmVkLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICByb2xlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzSWQ6IHBhcnRzWzFdLFxuICAgICAgICAgICAgICAgIHJvbGVJZDogcGFydHNbMF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByb2xlcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0SXRlbVJvdXRpbmdQYXRoKGl0ZW1DYXNlOiBDYXNlKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zSWQgPSBTRVRUSU5HU19UUkFOU0lUSU9OX0lEO1xuICAgICAgICBjb25zdCB0YXNrSWQgPSBpdGVtQ2FzZS50YXNrcy5maW5kKHRhc2tQYWlyID0+IHRhc2tQYWlyLnRyYW5zaXRpb24gPT09IHRyYW5zSWQpLnRhc2s7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuX2R5bmFtaWNSb3V0aW5nU2VydmljZS5yb3V0ZTtcbiAgICAgICAgcmV0dXJuIGAvJHt1cmx9LyR7dGFza0lkfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciB0aGUgYmFjayBidXR0b24gc2hvdWxkIGJlIGRpc3BsYXllZFxuICAgICAqIEByZXR1cm5zIGJvb2xlYW4gaWYgdGhlIGJhY2sgYnV0dG9uIHNob3VsZCBiZSBkaXNwbGF5ZWRcbiAgICAgKiAqL1xuICAgIGlzT25aZXJvTGV2ZWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2N1cnJlbnROb2RlPy5sZXZlbCA/IHRoaXMuX2N1cnJlbnROb2RlLmxldmVsID09IDAgOiB0cnVlO1xuICAgIH1cblxuICAgIGlzTGVmdEl0ZW1zRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlZnRJdGVtcyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMubGVmdEl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBpc1JpZ2h0SXRlbXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmlnaHRJdGVtcyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMucmlnaHRJdGVtcy5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdXJpTm9kZVRyYWNrQnkoaW5kZXg6IG51bWJlciwgbm9kZTogVXJpTm9kZVJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmlkO1xuICAgIH1cblxuICAgIGl0ZW1zVHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBOYXZpZ2F0aW9uSXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS5pZDtcbiAgICB9XG5cbiAgICBvblJlc2l6ZUV2ZW50KGV2ZW50OiBSZXNpemVFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQucmVjdGFuZ2xlLndpZHRoID4gUklHSFRfRFJBV0VSX01BWF9XSURUSCkge1xuICAgICAgICAgICAgdGhpcy5fY29uZmlnUmlnaHRNZW51LndpZHRoID0gUklHSFRfRFJBV0VSX01BWF9XSURUSDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5yZWN0YW5nbGUud2lkdGggPCBSSUdIVF9EUkFXRVJfREVGQVVMVF9NSU5fV0lEVEgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS53aWR0aCA9IFJJR0hUX0RSQVdFUl9ERUZBVUxUX01JTl9XSURUSDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS53aWR0aCA9IGV2ZW50LnJlY3RhbmdsZS53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIGltcGxlbWVudCBzYXZpbmcgZHJhd2VyIHdpZHRoIHRvIHVzZXIgcHJlZmVyZW5jZXNcbiAgICAgICAgLy8gdGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2UuX2RyYXdlcldpZHRoQ2hhbmdlZCQubmV4dCh0aGlzLndpZHRoKTtcbiAgICAgICAgLy8gdGhpcy5jb250ZW50V2lkdGgubmV4dCh0aGlzLndpZHRoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZVVyaUZvckNoaWxkVmlld3MoY29uZmlnUGF0aDogc3RyaW5nLCBjaGlsZFZpZXc6IFZpZXcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFjaGlsZFZpZXcucHJvY2Vzc1VyaSkgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuX2FjY2Vzc1NlcnZpY2UuY2FuQWNjZXNzVmlldyhjaGlsZFZpZXcsIGNvbmZpZ1BhdGgpKSByZXR1cm47XG4gICAgICAgIGlmICghdGhpcy5fY2hpbGRDdXN0b21WaWV3c1tjaGlsZFZpZXcucHJvY2Vzc1VyaV0pIHtcbiAgICAgICAgICAgIHRoaXMuX2NoaWxkQ3VzdG9tVmlld3NbY2hpbGRWaWV3LnByb2Nlc3NVcmldID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2hpbGRDdXN0b21WaWV3c1tjaGlsZFZpZXcucHJvY2Vzc1VyaV1bY29uZmlnUGF0aF0gPSB7XG4gICAgICAgICAgICBpZDogY29uZmlnUGF0aCxcbiAgICAgICAgICAgIC4uLmNoaWxkVmlldyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUhpZGRlbk1lbnVJdGVtRnJvbUNoaWxkVmlld3MoY29uZmlnUGF0aDogc3RyaW5nLCBjaGlsZFZpZXc6IFZpZXcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFjaGlsZFZpZXcubmF2aWdhdGlvbikgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuX2FjY2Vzc1NlcnZpY2UuY2FuQWNjZXNzVmlldyhjaGlsZFZpZXcsIGNvbmZpZ1BhdGgpKSByZXR1cm47XG4gICAgICAgIGlmICghISgoY2hpbGRWaWV3Py5uYXZpZ2F0aW9uIGFzIGFueSk/LmhpZGRlbikpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZGVuQ3VzdG9tSXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6IGNvbmZpZ1BhdGgsXG4gICAgICAgICAgICAgICAgLi4uY2hpbGRWaWV3LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==
|
|
@@ -55,14 +55,14 @@ export class UriService {
|
|
|
55
55
|
return this._rootLoading$;
|
|
56
56
|
}
|
|
57
57
|
isRoot(node) {
|
|
58
|
-
return node.
|
|
58
|
+
return node.id === this._rootNode.id && node.uriPath === this._rootNode.uriPath;
|
|
59
59
|
}
|
|
60
60
|
get activeNode() {
|
|
61
61
|
return this._activeNode$.getValue();
|
|
62
62
|
}
|
|
63
63
|
set activeNode(node) {
|
|
64
64
|
if (node.parentId && !node.parent) {
|
|
65
|
-
if (node.parentId === this._rootNode.
|
|
65
|
+
if (node.parentId === this._rootNode.id) {
|
|
66
66
|
node.parent = this._rootNode;
|
|
67
67
|
}
|
|
68
68
|
else {
|
|
@@ -121,7 +121,7 @@ export class UriService {
|
|
|
121
121
|
getChildNodes(node) {
|
|
122
122
|
if (!node)
|
|
123
123
|
node = this.activeNode;
|
|
124
|
-
return this._resourceService.getNodesByParent(node.
|
|
124
|
+
return this._resourceService.getNodesByParent(node.id).pipe(map(nodes => {
|
|
125
125
|
this.capitalizeNames(nodes);
|
|
126
126
|
return nodes;
|
|
127
127
|
}));
|
|
@@ -137,7 +137,7 @@ export class UriService {
|
|
|
137
137
|
if (!node)
|
|
138
138
|
node = this.activeNode;
|
|
139
139
|
const searchBody = {
|
|
140
|
-
uriNodeId: node.
|
|
140
|
+
uriNodeId: node.id,
|
|
141
141
|
};
|
|
142
142
|
if (!!processIdentifiers) {
|
|
143
143
|
searchBody.process = processIdentifiers.map(id => ({ identifier: id }));
|
|
@@ -163,7 +163,7 @@ export class UriService {
|
|
|
163
163
|
}
|
|
164
164
|
const searchBody = {
|
|
165
165
|
data: {
|
|
166
|
-
[GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH]: node.
|
|
166
|
+
[GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH]: node.uriPath
|
|
167
167
|
},
|
|
168
168
|
process: { identifier: "preference_item" }
|
|
169
169
|
};
|
|
@@ -193,7 +193,7 @@ export class UriService {
|
|
|
193
193
|
if (level === 0)
|
|
194
194
|
return of([this.root]);
|
|
195
195
|
return this._resourceService.getByLevel(level).pipe(map(nodes => {
|
|
196
|
-
const ns = !!parent?.
|
|
196
|
+
const ns = !!parent?.id ? nodes.filter(n => n.parentId === parent.id) : nodes;
|
|
197
197
|
this.capitalizeNames(ns);
|
|
198
198
|
return ns;
|
|
199
199
|
}));
|
|
@@ -201,13 +201,13 @@ export class UriService {
|
|
|
201
201
|
resolveParentPath(node) {
|
|
202
202
|
if (!node)
|
|
203
203
|
node = this.activeNode;
|
|
204
|
-
const lastDelimiter = node.
|
|
204
|
+
const lastDelimiter = node.uriPath.lastIndexOf('/');
|
|
205
205
|
if (lastDelimiter === 0)
|
|
206
206
|
return '/';
|
|
207
|
-
return node.
|
|
207
|
+
return node.uriPath.substring(0, lastDelimiter);
|
|
208
208
|
}
|
|
209
209
|
splitNodePath(node) {
|
|
210
|
-
return node?.
|
|
210
|
+
return node?.uriPath.split('/').filter(s => s !== UriService.ROOT);
|
|
211
211
|
}
|
|
212
212
|
capitalizeNames(nodes) {
|
|
213
213
|
if (!(nodes instanceof Array))
|
|
@@ -245,4 +245,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
245
245
|
type: Inject,
|
|
246
246
|
args: [NAE_URI_NODE_CASES_PAGE_SIZE]
|
|
247
247
|
}] }] });
|
|
248
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL25hdmlnYXRpb24vc2VydmljZS91cmkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQWEsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxlQUFlLEVBQWMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFNL0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBR2hGLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7QUFFN0U7O0tBRUs7QUFJTCxNQUFNLE9BQU8sVUFBVTtJQVFHO0lBQ0E7SUFDQTtJQUNBO0lBQ2tEO0lBVmpFLE1BQU0sQ0FBQyxJQUFJLEdBQVcsTUFBTSxDQUFDO0lBQzVCLFNBQVMsQ0FBa0I7SUFDbEIsYUFBYSxDQUFpQjtJQUM5QixlQUFlLENBQWlCO0lBQ2hDLFlBQVksQ0FBbUM7SUFFaEUsWUFBc0IsT0FBc0IsRUFDdEIsZ0JBQW9DLEVBQ3BDLG9CQUF5QyxFQUN6QyxtQkFBdUMsRUFDVyxRQUF5QjtRQUozRSxZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQ3RCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMs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Q0FBQyxDQUFDLEVBQUU7WUFDbEIsSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFBRSxPQUFPO1lBQzlDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzNDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7d0dBdk9RLFVBQVUsc0pBWWEsNEJBQTRCOzRHQVpuRCxVQUFVLGNBRlAsTUFBTTs7NEZBRVQsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQWFnQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0Nhc2VTZWFyY2hSZXF1ZXN0Qm9keSwgUGV0cmlOZXRTZWFyY2hSZXF1ZXN0fSBmcm9tICcuLi8uLi9maWx0ZXIvbW9kZWxzL2Nhc2Utc2VhcmNoLXJlcXVlc3QtYm9keSc7XG5pbXBvcnQge1NpbXBsZUZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL21vZGVscy9zaW1wbGUtZmlsdGVyJztcbmltcG9ydCB7QWN0aXZlR3JvdXBTZXJ2aWNlfSBmcm9tICcuLi8uLi9ncm91cHMvc2VydmljZXMvYWN0aXZlLWdyb3VwLnNlcnZpY2UnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtDYXNlUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L2Nhc2UtcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0Nhc2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvY2FzZSc7XG5pbXBvcnQge1BhZ2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvcGFnZSc7XG5pbXBvcnQge0xvYWRpbmdFbWl0dGVyfSBmcm9tICcuLi8uLi91dGlsaXR5L2xvYWRpbmctZW1pdHRlcic7XG5pbXBvcnQge1BhZ2luYXRpb25QYXJhbXN9IGZyb20gJy4uLy4uL3V0aWxpdHkvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLXBhcmFtcyc7XG5pbXBvcnQge05BRV9VUklfTk9ERV9DQVNFU19QQUdFX1NJWkV9IGZyb20gJy4uL21vZGVsL3NpemUtbWVudS1pbmplY3Rpb24tdG9rZW4nO1xuaW1wb3J0IHtVcmlOb2RlUmVzb3VyY2V9IGZyb20gJy4uL21vZGVsL3VyaS1yZXNvdXJjZSc7XG5pbXBvcnQge1VyaVJlc291cmNlU2VydmljZX0gZnJvbSAnLi91cmktcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0dyb3VwTmF2aWdhdGlvbkNvbnN0YW50c30gZnJvbSBcIi4uL21vZGVsL2dyb3VwLW5hdmlnYXRpb24tY29uc3RhbnRzXCI7XG5cbi8qKlxuICogU2VydmljZSBmb3IgbWFuYWdpbmcgVVJJc1xuICogKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFVyaVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgcHVibGljIHN0YXRpYyBST09UOiBzdHJpbmcgPSAncm9vdCc7XG4gICAgcHJpdmF0ZSBfcm9vdE5vZGU6IFVyaU5vZGVSZXNvdXJjZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yb290TG9hZGluZyQ6IExvYWRpbmdFbWl0dGVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3BhcmVudExvYWRpbmckOiBMb2FkaW5nRW1pdHRlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVOb2RlJDogQmVoYXZpb3JTdWJqZWN0PFVyaU5vZGVSZXNvdXJjZT47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2xvZ2dlcjogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3Jlc291cmNlU2VydmljZTogVXJpUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfY2FzZVJlc291cmNlU2VydmljZTogQ2FzZVJlc291cmNlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2FjdGl2ZUdyb3VwU2VydmljZTogQWN0aXZlR3JvdXBTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkFFX1VSSV9OT0RFX0NBU0VTX1BBR0VfU0laRSkgcHJvdGVjdGVkIHBhZ2VTaXplOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICAgICAgaWYgKCFwYWdlU2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IDIwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZVNpemUgPSBwYXJzZUludCh0aGlzLnBhZ2VTaXplKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yb290TG9hZGluZyQgPSBuZXcgTG9hZGluZ0VtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5fcGFyZW50TG9hZGluZyQgPSBuZXcgTG9hZGluZ0VtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlTm9kZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVyaU5vZGVSZXNvdXJjZT4odW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5sb2FkUm9vdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fcm9vdExvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX3BhcmVudExvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZU5vZGUkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb290KCk6IFVyaU5vZGVSZXNvdXJjZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290Tm9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvb3RMb2FkZWQkKCk6IExvYWRpbmdFbWl0dGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3RMb2FkaW5nJDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNSb290KG5vZGU6IFVyaU5vZGVSZXNvdXJjZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gbm9kZS5wYXRoID09PSB0aGlzLl9yb290Tm9kZS5wYXRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlTm9kZSgpOiBVcmlOb2RlUmVzb3VyY2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlTm9kZSQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGFjdGl2ZU5vZGUobm9kZTogVXJpTm9kZVJlc291cmNlKSB7XG4gICAgICAgIGlmIChub2RlLnBhcmVudElkICYmICFub2RlLnBhcmVudCkge1xuICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50SWQgPT09IHRoaXMuX3Jvb3ROb2RlLnBhdGgpIHtcbiAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHRoaXMuX3Jvb3ROb2RlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRMb2FkaW5nJC5vbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Tm9kZUJ5UGF0aCh0aGlzLnJlc29sdmVQYXJlbnRQYXRoKG5vZGUpKS5zdWJzY3JpYmUobiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gIW4gPyB0aGlzLl9yb290Tm9kZSA6IG47XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudExvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50TG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYWN0aXZlTm9kZSQubmV4dChub2RlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZU5vZGUkKCk6IE9ic2VydmFibGU8VXJpTm9kZVJlc291cmNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVOb2RlJDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhcmVudE5vZGVMb2FkaW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudExvYWRpbmckO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogTG9hZHMgcm9vdCBJRCBpbnRvIHZhcmlhYmxlLlxuICAgICAqIFdoZW4gcm9vdCBub2RlIGlzIGxvYWRlZCBhbmQgYWN0aXZlIG5vZGUgaXMgbm90IHNldCB5ZXQgdGhlIHJvb3Qgbm9kZSBpcyBzZXQgYXMgYWN0aXZlIG5vZGVcbiAgICAgKiAqL1xuICAgIHByaXZhdGUgbG9hZFJvb3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jvb3RMb2FkaW5nJC5vbigpO1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVNlcnZpY2UuZ2V0Um9vdCgpLnN1YnNjcmliZShub2RlID0+IHtcbiAgICAgICAgICAgIGlmICghIW5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yb290Tm9kZSA9IG5vZGU7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gdGhpcy5fcm9vdE5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcm9vdExvYWRpbmckLm9mZigpO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5fcm9vdExvYWRpbmckLm9mZigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXQoKTogVXJpTm9kZVJlc291cmNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gdGhpcy5fcm9vdE5vZGU7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290Tm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdXJpIG5vZGUgYnkgdXJpIHBhdGguXG4gICAgICogQHBhcmFtIHBhdGhcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Tm9kZUJ5UGF0aChwYXRoOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFVyaU5vZGVSZXNvdXJjZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTZXJ2aWNlLmdldE5vZGVCeVVyaShwYXRoKS5waXBlKFxuICAgICAgICAgICAgbWFwKG4gPT4gdGhpcy5jYXBpdGFsaXplTmFtZShuKSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGNoaWxkIG5vZGVzIG9mIHByb3ZpZGVzIG5vZGUuXG4gICAgICogQHBhcmFtIG5vZGUgcGFyZW50IG5vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q2hpbGROb2Rlcyhub2RlPzogVXJpTm9kZVJlc291cmNlKTogT2JzZXJ2YWJsZTxBcnJheTxVcmlOb2RlUmVzb3VyY2U+PiB7XG4gICAgICAgIGlmICghbm9kZSkgbm9kZSA9IHRoaXMuYWN0aXZlTm9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU2VydmljZS5nZXROb2Rlc0J5UGFyZW50KG5vZGUucGF0aCkucGlwZShcbiAgICAgICAgICAgIG1hcChub2RlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXBpdGFsaXplTmFtZXMobm9kZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlcztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBjYXNlcyB1bmRlciB1cmkgbm9kZVxuICAgICAqIEBwYXJhbSBub2RlIHBhcmVudCBub2RlIG9mIGNhc2VzXG4gICAgICogQHBhcmFtIHByb2Nlc3NJZGVudGlmaWVycyBvcHRpb25hbCBzZWFyY2ggZmlsdGVyIGZvciBwcm9jZXNzIGlkZW50aWZpZXIgdG8gZ2V0IG9ubHkgY2FzZXMgZnJvbSB0aGUgcHJvY2Vzc1xuICAgICAqIEBwYXJhbSBwYWdlTnVtYmVyIG9wdGlvbmFsIHBhcmFtZXRlciBmb3IgbG9hZCBwYWdlIG9uIHRoZSBpbmRleC4gRGVmYXVsdCB2YWx1ZSBpcyAwICh0aGUgZmlyc3QgcGFnZSkuXG4gICAgICogQHBhcmFtIHBhZ2VTaXplIG9wdGlvbmFsIHBhcmFtZXRlciBmb3IgbG9hZGVkIHBhZ2Ugc2l6ZS4gRGVmYXVsdHMgdG8gdmFsdWUgb2YgaW5qZWN0aW9uIHRva2VuIFVSSV9OT0RFX0NBU0VTX1BBR0VfU0laRSBvciB0byB2YWx1ZSBcIjIwXCIuXG4gICAgICovXG4gICAgcHVibGljIGdldENhc2VzT2ZOb2RlKG5vZGU/OiBVcmlOb2RlUmVzb3VyY2UsIHByb2Nlc3NJZGVudGlmaWVycz86IEFycmF5PHN0cmluZz4sIHBhZ2VOdW1iZXI6IG51bWJlciA9IDAsIHBhZ2VTaXplOiBzdHJpbmcgfCBudW1iZXIgPSB0aGlzLnBhZ2VTaXplKTogT2JzZXJ2YWJsZTxQYWdlPENhc2U+PiB7XG4gICAgICAgIGlmICghbm9kZSkgbm9kZSA9IHRoaXMuYWN0aXZlTm9kZTtcbiAgICAgICAgY29uc3Qgc2VhcmNoQm9keTogQ2FzZVNlYXJjaFJlcXVlc3RCb2R5ID0ge1xuICAgICAgICAgICAgdXJpTm9kZUlkOiBub2RlLnBhdGgsXG4gICAgICAgIH07XG4gICAgICAgIGlmICghIXByb2Nlc3NJZGVudGlmaWVycykge1xuICAgICAgICAgICAgc2VhcmNoQm9keS5wcm9jZXNzID0gcHJvY2Vzc0lkZW50aWZpZXJzLm1hcChpZCA9PiAoe2lkZW50aWZpZXI6IGlkfSBhcyBQZXRyaU5ldFNlYXJjaFJlcXVlc3QpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIGFjdGl2ZSBncm91cCBpcyBicm9rZW4gYSBnaXZlbiB0aGUgd3JvbmcgaWRcbiAgICAgICAgLy8gaWYgKCEhdGhpcy5fYWN0aXZlR3JvdXBTZXJ2aWNlLmFjdGl2ZUdyb3VwKSB7XG4gICAgICAgIC8vICAgICBzZWFyY2hCb2R5LmRhdGEgPSB7fTtcbiAgICAgICAgLy8gICAgIHNlYXJjaEJvZHkuZGF0YVsncGFyZW50SWQnXSA9IHRoaXMuX2FjdGl2ZUdyb3VwU2VydmljZS5hY3RpdmVHcm91cC5zdHJpbmdJZDtcbiAgICAgICAgLy8gfVxuICAgICAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAgICAgICAgIC5zZXQoUGFnaW5hdGlvblBhcmFtcy5QQUdFX1NJWkUsIHBhZ2VTaXplKVxuICAgICAgICAgICAgLnNldChQYWdpbmF0aW9uUGFyYW1zLlBBR0VfTlVNQkVSLCBwYWdlTnVtYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nhc2VSZXNvdXJjZVNlcnZpY2Uuc2VhcmNoQ2FzZXMoU2ltcGxlRmlsdGVyLmZyb21DYXNlUXVlcnkoc2VhcmNoQm9keSksIGh0dHBQYXJhbXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBtZW51IGl0ZW0gY2FzZSBieSBub2RlUGF0aCBmaWVsZCB2YWx1ZVxuICAgICAqIEBwYXJhbSBub2RlIGEgbm9kZSwgdGhhdCBpcyByZXByZXNlbnRlZCBieSB0aGUgd2FudGVkIGNhc2VcbiAgICAgKiBAcmV0dXJuIHBhZ2UgY29udGFpbmluZyAxIGNhc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SXRlbUNhc2VCeU5vZGVQYXRoKG5vZGU/OiBVcmlOb2RlUmVzb3VyY2UpOiBPYnNlcnZhYmxlPFBhZ2U8Q2FzZT4+IHtcbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICBub2RlID0gdGhpcy5hY3RpdmVOb2RlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlYXJjaEJvZHk6IENhc2VTZWFyY2hSZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBbR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfTk9ERV9QQVRIXSA6IG5vZGUucGF0aFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IHtpZGVudGlmaWVyOiBcInByZWZlcmVuY2VfaXRlbVwifVxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgICAgICAgICAgLnNldChQYWdpbmF0aW9uUGFyYW1zLlBBR0VfU0laRSwgMSlcbiAgICAgICAgICAgIC5zZXQoUGFnaW5hdGlvblBhcmFtcy5QQUdFX05VTUJFUiwgMCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXNlUmVzb3VyY2VTZXJ2aWNlLnNlYXJjaENhc2VzKFNpbXBsZUZpbHRlci5mcm9tQ2FzZVF1ZXJ5KHNlYXJjaEJvZHkpLCBodHRwUGFyYW1zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc2libGluZ3Mgbm9kZSBvZiB0aGUgcHJvdmlkZWQgbm9kZVxuICAgICAqIEBwYXJhbSBub2RlIHNpYmxpbmdzIG5vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2libGluZ3NPZk5vZGUobm9kZT86IFVyaU5vZGVSZXNvdXJjZSk6IE9ic2VydmFibGU8QXJyYXk8VXJpTm9kZVJlc291cmNlPj4ge1xuICAgICAgICBpZiAoIW5vZGUpIG5vZGUgPSB0aGlzLmFjdGl2ZU5vZGU7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVNlcnZpY2UuZ2V0Tm9kZXNCeVBhcmVudChub2RlLnBhcmVudElkKS5waXBlKFxuICAgICAgICAgICAgbWFwKG5vZGVzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcGl0YWxpemVOYW1lcyhub2Rlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IG5vZGVzIG9uIHRoZSBzYW1lIHVyaSBsZXZlbCBzdGFydGluZyBmcm9tIDAuIFJvb3Qgbm9kZSBpcyBubyAwIGxldmVsLlxuICAgICAqIEBwYXJhbSBsZXZlbFxuICAgICAqIEBwYXJhbSBwYXJlbnQgb3B0aW9uYWwgcGFyYW1ldGVyIHRvIGZpbHRlciBub2RlcyB3aXRoIGNvbW1vbiBwYXJlbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Tm9kZXNPbkxldmVsKGxldmVsOiBudW1iZXIsIHBhcmVudD86IFVyaU5vZGVSZXNvdXJjZSk6IE9ic2VydmFibGU8QXJyYXk8VXJpTm9kZVJlc291cmNlPj4ge1xuICAgICAgICBpZiAobGV2ZWwgPT09IDApIHJldHVybiBvZihbdGhpcy5yb290XSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVNlcnZpY2UuZ2V0QnlMZXZlbChsZXZlbCkucGlwZShcbiAgICAgICAgICAgIG1hcChub2RlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbnMgPSAhIXBhcmVudD8ucGF0aCA/IG5vZGVzLmZpbHRlcihuID0+IG4ucGFyZW50SWQgPT09IHBhcmVudC5wYXRoKSA6IG5vZGVzO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FwaXRhbGl6ZU5hbWVzKG5zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzb2x2ZVBhcmVudFBhdGgobm9kZT86IFVyaU5vZGVSZXNvdXJjZSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghbm9kZSkgbm9kZSA9IHRoaXMuYWN0aXZlTm9kZTtcbiAgICAgICAgY29uc3QgbGFzdERlbGltaXRlciA9IG5vZGUucGF0aC5sYXN0SW5kZXhPZignLycpO1xuICAgICAgICBpZiAobGFzdERlbGltaXRlciA9PT0gMCkgcmV0dXJuICcvJztcbiAgICAgICAgcmV0dXJuIG5vZGUucGF0aC5zdWJzdHJpbmcoMCwgbGFzdERlbGltaXRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNwbGl0Tm9kZVBhdGgobm9kZTogVXJpTm9kZVJlc291cmNlKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBub2RlPy5wYXRoLnNwbGl0KCcvJykuZmlsdGVyKHMgPT4gcyAhPT0gVXJpU2VydmljZS5ST09UKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhcGl0YWxpemVOYW1lcyhub2RlczogQXJyYXk8VXJpTm9kZVJlc291cmNlPikge1xuICAgICAgICBpZiAoIShub2RlcyBpbnN0YW5jZW9mIEFycmF5KSkgcmV0dXJuO1xuICAgICAgICBub2Rlcy5mb3JFYWNoKG4gPT4gdGhpcy5jYXBpdGFsaXplTmFtZShuKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIC9uZXRncmlmL25hZV9zeXN0ZW0vcHJvY2Vzc2VzLy4uLiA9PiBOZXRncmlmIC0+IE5hZSBTeXN0ZW1zIC0+IFByb2Nlc3Nlc1xuICAgICAqIEBwYXJhbSBub2RlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNhcGl0YWxpemVOYW1lKG5vZGU6IFVyaU5vZGVSZXNvdXJjZSkge1xuICAgICAgICBsZXQgcGFydHMgPSBub2RlLm5hbWUuc3BsaXQoJ18nKTtcbiAgICAgICAgcGFydHMgPSBwYXJ0cy5tYXAocCA9PiB7XG4gICAgICAgICAgICBpZiAocCA9PT0gdW5kZWZpbmVkIHx8IHAubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICBpZiAocC5sZW5ndGggPT09IDEpIHJldHVybiBwLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICByZXR1cm4gcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHAuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9KTtcbiAgICAgICAgbm9kZS5uYW1lID0gcGFydHMuam9pbignICcpO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG59XG4iXX0=
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL25hdmlnYXRpb24vc2VydmljZS91cmkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQWEsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxlQUFlLEVBQWMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFNL0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBR2hGLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7QUFFN0U7O0tBRUs7QUFJTCxNQUFNLE9BQU8sVUFBVTtJQVFHO0lBQ0E7SUFDQTtJQUNBO0lBQ2tEO0lBVmpFLE1BQU0sQ0FBQyxJQUFJLEdBQVcsTUFBTSxDQUFDO0lBQzVCLFNBQVMsQ0FBa0I7SUFDbEIsYUFBYSxDQUFpQjtJQUM5QixlQUFlLENBQWlCO0lBQ2hDLFlBQVksQ0FBbUM7SUFFaEUsWUFBc0IsT0FBc0IsRUFDdEIsZ0JBQW9DLEVBQ3BDLG9CQUF5QyxFQUN6QyxtQkFBdUMsRUFDVyxRQUF5QjtRQUozRSxZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQ3RCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMs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QUFHLENBQUMsQ0FBQztRQUNqQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE9BQU87WUFDOUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0MsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzt3R0F2T1EsVUFBVSxzSkFZYSw0QkFBNEI7NEdBWm5ELFVBQVUsY0FGUCxNQUFNOzs0RkFFVCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBYWdCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwUGFyYW1zfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Q2FzZVNlYXJjaFJlcXVlc3RCb2R5LCBQZXRyaU5ldFNlYXJjaFJlcXVlc3R9IGZyb20gJy4uLy4uL2ZpbHRlci9tb2RlbHMvY2FzZS1zZWFyY2gtcmVxdWVzdC1ib2R5JztcbmltcG9ydCB7U2ltcGxlRmlsdGVyfSBmcm9tICcuLi8uLi9maWx0ZXIvbW9kZWxzL3NpbXBsZS1maWx0ZXInO1xuaW1wb3J0IHtBY3RpdmVHcm91cFNlcnZpY2V9IGZyb20gJy4uLy4uL2dyb3Vwcy9zZXJ2aWNlcy9hY3RpdmUtZ3JvdXAuc2VydmljZSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0Nhc2VSZXNvdXJjZVNlcnZpY2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9lbmdpbmUtZW5kcG9pbnQvY2FzZS1yZXNvdXJjZS5zZXJ2aWNlJztcbmltcG9ydCB7Q2FzZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9jYXNlJztcbmltcG9ydCB7UGFnZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wYWdlJztcbmltcG9ydCB7TG9hZGluZ0VtaXR0ZXJ9IGZyb20gJy4uLy4uL3V0aWxpdHkvbG9hZGluZy1lbWl0dGVyJztcbmltcG9ydCB7UGFnaW5hdGlvblBhcmFtc30gZnJvbSAnLi4vLi4vdXRpbGl0eS9wYWdpbmF0aW9uL3BhZ2luYXRpb24tcGFyYW1zJztcbmltcG9ydCB7TkFFX1VSSV9OT0RFX0NBU0VTX1BBR0VfU0laRX0gZnJvbSAnLi4vbW9kZWwvc2l6ZS1tZW51LWluamVjdGlvbi10b2tlbic7XG5pbXBvcnQge1VyaU5vZGVSZXNvdXJjZX0gZnJvbSAnLi4vbW9kZWwvdXJpLXJlc291cmNlJztcbmltcG9ydCB7VXJpUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuL3VyaS1yZXNvdXJjZS5zZXJ2aWNlJztcbmltcG9ydCB7R3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzfSBmcm9tIFwiLi4vbW9kZWwvZ3JvdXAtbmF2aWdhdGlvbi1jb25zdGFudHNcIjtcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBtYW5hZ2luZyBVUklzXG4gKiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVXJpU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICBwdWJsaWMgc3RhdGljIFJPT1Q6IHN0cmluZyA9ICdyb290JztcbiAgICBwcml2YXRlIF9yb290Tm9kZTogVXJpTm9kZVJlc291cmNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Jvb3RMb2FkaW5nJDogTG9hZGluZ0VtaXR0ZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfcGFyZW50TG9hZGluZyQ6IExvYWRpbmdFbWl0dGVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZU5vZGUkOiBCZWhhdmlvclN1YmplY3Q8VXJpTm9kZVJlc291cmNlPjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfcmVzb3VyY2VTZXJ2aWNlOiBVcmlSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9jYXNlUmVzb3VyY2VTZXJ2aWNlOiBDYXNlUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfYWN0aXZlR3JvdXBTZXJ2aWNlOiBBY3RpdmVHcm91cFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChOQUVfVVJJX05PREVfQ0FTRVNfUEFHRV9TSVpFKSBwcm90ZWN0ZWQgcGFnZVNpemU6IHN0cmluZyB8IG51bWJlcikge1xuICAgICAgICBpZiAoIXBhZ2VTaXplKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gMjA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2VTaXplID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IHBhcnNlSW50KHRoaXMucGFnZVNpemUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Jvb3RMb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLl9wYXJlbnRMb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLl9hY3RpdmVOb2RlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXJpTm9kZVJlc291cmNlPih1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmxvYWRSb290KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9yb290TG9hZGluZyQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fcGFyZW50TG9hZGluZyQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlTm9kZSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvb3QoKTogVXJpTm9kZVJlc291cmNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3ROb2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm9vdExvYWRlZCQoKTogTG9hZGluZ0VtaXR0ZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdExvYWRpbmckO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1Jvb3Qobm9kZTogVXJpTm9kZVJlc291cmNlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBub2RlLmlkID09PSB0aGlzLl9yb290Tm9kZS5pZCAmJiBub2RlLnVyaVBhdGggPT09IHRoaXMuX3Jvb3ROb2RlLnVyaVBhdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3RpdmVOb2RlKCk6IFVyaU5vZGVSZXNvdXJjZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVOb2RlJC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgYWN0aXZlTm9kZShub2RlOiBVcmlOb2RlUmVzb3VyY2UpIHtcbiAgICAgICAgaWYgKG5vZGUucGFyZW50SWQgJiYgIW5vZGUucGFyZW50KSB7XG4gICAgICAgICAgICBpZiAobm9kZS5wYXJlbnRJZCA9PT0gdGhpcy5fcm9vdE5vZGUuaWQpIHtcbiAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHRoaXMuX3Jvb3ROb2RlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRMb2FkaW5nJC5vbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Tm9kZUJ5UGF0aCh0aGlzLnJlc29sdmVQYXJlbnRQYXRoKG5vZGUpKS5zdWJzY3JpYmUobiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gIW4gPyB0aGlzLl9yb290Tm9kZSA6IG47XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudExvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50TG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYWN0aXZlTm9kZSQubmV4dChub2RlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZU5vZGUkKCk6IE9ic2VydmFibGU8VXJpTm9kZVJlc291cmNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVOb2RlJDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhcmVudE5vZGVMb2FkaW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudExvYWRpbmckO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogTG9hZHMgcm9vdCBJRCBpbnRvIHZhcmlhYmxlLlxuICAgICAqIFdoZW4gcm9vdCBub2RlIGlzIGxvYWRlZCBhbmQgYWN0aXZlIG5vZGUgaXMgbm90IHNldCB5ZXQgdGhlIHJvb3Qgbm9kZSBpcyBzZXQgYXMgYWN0aXZlIG5vZGVcbiAgICAgKiAqL1xuICAgIHByaXZhdGUgbG9hZFJvb3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jvb3RMb2FkaW5nJC5vbigpO1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVNlcnZpY2UuZ2V0Um9vdCgpLnN1YnNjcmliZShub2RlID0+IHtcbiAgICAgICAgICAgIGlmICghIW5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yb290Tm9kZSA9IG5vZGU7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gdGhpcy5fcm9vdE5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcm9vdExvYWRpbmckLm9mZigpO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5fcm9vdExvYWRpbmckLm9mZigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXQoKTogVXJpTm9kZVJlc291cmNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gdGhpcy5fcm9vdE5vZGU7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290Tm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdXJpIG5vZGUgYnkgdXJpIHBhdGguXG4gICAgICogQHBhcmFtIHBhdGhcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Tm9kZUJ5UGF0aChwYXRoOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFVyaU5vZGVSZXNvdXJjZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTZXJ2aWNlLmdldE5vZGVCeVVyaShwYXRoKS5waXBlKFxuICAgICAgICAgICAgbWFwKG4gPT4gdGhpcy5jYXBpdGFsaXplTmFtZShuKSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGNoaWxkIG5vZGVzIG9mIHByb3ZpZGVzIG5vZGUuXG4gICAgICogQHBhcmFtIG5vZGUgcGFyZW50IG5vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q2hpbGROb2Rlcyhub2RlPzogVXJpTm9kZVJlc291cmNlKTogT2JzZXJ2YWJsZTxBcnJheTxVcmlOb2RlUmVzb3VyY2U+PiB7XG4gICAgICAgIGlmICghbm9kZSkgbm9kZSA9IHRoaXMuYWN0aXZlTm9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU2VydmljZS5nZXROb2Rlc0J5UGFyZW50KG5vZGUuaWQpLnBpcGUoXG4gICAgICAgICAgICBtYXAobm9kZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FwaXRhbGl6ZU5hbWVzKG5vZGVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2FzZXMgdW5kZXIgdXJpIG5vZGVcbiAgICAgKiBAcGFyYW0gbm9kZSBwYXJlbnQgbm9kZSBvZiBjYXNlc1xuICAgICAqIEBwYXJhbSBwcm9jZXNzSWRlbnRpZmllcnMgb3B0aW9uYWwgc2VhcmNoIGZpbHRlciBmb3IgcHJvY2VzcyBpZGVudGlmaWVyIHRvIGdldCBvbmx5IGNhc2VzIGZyb20gdGhlIHByb2Nlc3NcbiAgICAgKiBAcGFyYW0gcGFnZU51bWJlciBvcHRpb25hbCBwYXJhbWV0ZXIgZm9yIGxvYWQgcGFnZSBvbiB0aGUgaW5kZXguIERlZmF1bHQgdmFsdWUgaXMgMCAodGhlIGZpcnN0IHBhZ2UpLlxuICAgICAqIEBwYXJhbSBwYWdlU2l6ZSBvcHRpb25hbCBwYXJhbWV0ZXIgZm9yIGxvYWRlZCBwYWdlIHNpemUuIERlZmF1bHRzIHRvIHZhbHVlIG9mIGluamVjdGlvbiB0b2tlbiBVUklfTk9ERV9DQVNFU19QQUdFX1NJWkUgb3IgdG8gdmFsdWUgXCIyMFwiLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDYXNlc09mTm9kZShub2RlPzogVXJpTm9kZVJlc291cmNlLCBwcm9jZXNzSWRlbnRpZmllcnM/OiBBcnJheTxzdHJpbmc+LCBwYWdlTnVtYmVyOiBudW1iZXIgPSAwLCBwYWdlU2l6ZTogc3RyaW5nIHwgbnVtYmVyID0gdGhpcy5wYWdlU2l6ZSk6IE9ic2VydmFibGU8UGFnZTxDYXNlPj4ge1xuICAgICAgICBpZiAoIW5vZGUpIG5vZGUgPSB0aGlzLmFjdGl2ZU5vZGU7XG4gICAgICAgIGNvbnN0IHNlYXJjaEJvZHk6IENhc2VTZWFyY2hSZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAgIHVyaU5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCEhcHJvY2Vzc0lkZW50aWZpZXJzKSB7XG4gICAgICAgICAgICBzZWFyY2hCb2R5LnByb2Nlc3MgPSBwcm9jZXNzSWRlbnRpZmllcnMubWFwKGlkID0+ICh7aWRlbnRpZmllcjogaWR9IGFzIFBldHJpTmV0U2VhcmNoUmVxdWVzdCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE8gYWN0aXZlIGdyb3VwIGlzIGJyb2tlbiBhIGdpdmVuIHRoZSB3cm9uZyBpZFxuICAgICAgICAvLyBpZiAoISF0aGlzLl9hY3RpdmVHcm91cFNlcnZpY2UuYWN0aXZlR3JvdXApIHtcbiAgICAgICAgLy8gICAgIHNlYXJjaEJvZHkuZGF0YSA9IHt9O1xuICAgICAgICAvLyAgICAgc2VhcmNoQm9keS5kYXRhWydwYXJlbnRJZCddID0gdGhpcy5fYWN0aXZlR3JvdXBTZXJ2aWNlLmFjdGl2ZUdyb3VwLnN0cmluZ0lkO1xuICAgICAgICAvLyB9XG4gICAgICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgICAgICAgICAgLnNldChQYWdpbmF0aW9uUGFyYW1zLlBBR0VfU0laRSwgcGFnZVNpemUpXG4gICAgICAgICAgICAuc2V0KFBhZ2luYXRpb25QYXJhbXMuUEFHRV9OVU1CRVIsIHBhZ2VOdW1iZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FzZVJlc291cmNlU2VydmljZS5zZWFyY2hDYXNlcyhTaW1wbGVGaWx0ZXIuZnJvbUNhc2VRdWVyeShzZWFyY2hCb2R5KSwgaHR0cFBhcmFtcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IG1lbnUgaXRlbSBjYXNlIGJ5IG5vZGVQYXRoIGZpZWxkIHZhbHVlXG4gICAgICogQHBhcmFtIG5vZGUgYSBub2RlLCB0aGF0IGlzIHJlcHJlc2VudGVkIGJ5IHRoZSB3YW50ZWQgY2FzZVxuICAgICAqIEByZXR1cm4gcGFnZSBjb250YWluaW5nIDEgY2FzZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJdGVtQ2FzZUJ5Tm9kZVBhdGgobm9kZT86IFVyaU5vZGVSZXNvdXJjZSk6IE9ic2VydmFibGU8UGFnZTxDYXNlPj4ge1xuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgIG5vZGUgPSB0aGlzLmFjdGl2ZU5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VhcmNoQm9keTogQ2FzZVNlYXJjaFJlcXVlc3RCb2R5ID0ge1xuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIFtHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9OT0RFX1BBVEhdIDogbm9kZS51cmlQYXRoXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2Vzczoge2lkZW50aWZpZXI6IFwicHJlZmVyZW5jZV9pdGVtXCJ9XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAgICAgICAuc2V0KFBhZ2luYXRpb25QYXJhbXMuUEFHRV9TSVpFLCAxKVxuICAgICAgICAgICAgLnNldChQYWdpbmF0aW9uUGFyYW1zLlBBR0VfTlVNQkVSLCAwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nhc2VSZXNvdXJjZVNlcnZpY2Uuc2VhcmNoQ2FzZXMoU2ltcGxlRmlsdGVyLmZyb21DYXNlUXVlcnkoc2VhcmNoQm9keSksIGh0dHBQYXJhbXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBzaWJsaW5ncyBub2RlIG9mIHRoZSBwcm92aWRlZCBub2RlXG4gICAgICogQHBhcmFtIG5vZGUgc2libGluZ3Mgbm9kZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTaWJsaW5nc09mTm9kZShub2RlPzogVXJpTm9kZVJlc291cmNlKTogT2JzZXJ2YWJsZTxBcnJheTxVcmlOb2RlUmVzb3VyY2U+PiB7XG4gICAgICAgIGlmICghbm9kZSkgbm9kZSA9IHRoaXMuYWN0aXZlTm9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU2VydmljZS5nZXROb2Rlc0J5UGFyZW50KG5vZGUucGFyZW50SWQpLnBpcGUoXG4gICAgICAgICAgICBtYXAobm9kZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FwaXRhbGl6ZU5hbWVzKG5vZGVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgbm9kZXMgb24gdGhlIHNhbWUgdXJpIGxldmVsIHN0YXJ0aW5nIGZyb20gMC4gUm9vdCBub2RlIGlzIG5vIDAgbGV2ZWwuXG4gICAgICogQHBhcmFtIGxldmVsXG4gICAgICogQHBhcmFtIHBhcmVudCBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gZmlsdGVyIG5vZGVzIHdpdGggY29tbW9uIHBhcmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROb2Rlc09uTGV2ZWwobGV2ZWw6IG51bWJlciwgcGFyZW50PzogVXJpTm9kZVJlc291cmNlKTogT2JzZXJ2YWJsZTxBcnJheTxVcmlOb2RlUmVzb3VyY2U+PiB7XG4gICAgICAgIGlmIChsZXZlbCA9PT0gMCkgcmV0dXJuIG9mKFt0aGlzLnJvb3RdKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU2VydmljZS5nZXRCeUxldmVsKGxldmVsKS5waXBlKFxuICAgICAgICAgICAgbWFwKG5vZGVzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBucyA9ICEhcGFyZW50Py5pZCA/IG5vZGVzLmZpbHRlcihuID0+IG4ucGFyZW50SWQgPT09IHBhcmVudC5pZCkgOiBub2RlcztcbiAgICAgICAgICAgICAgICB0aGlzLmNhcGl0YWxpemVOYW1lcyhucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmVQYXJlbnRQYXRoKG5vZGU/OiBVcmlOb2RlUmVzb3VyY2UpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIW5vZGUpIG5vZGUgPSB0aGlzLmFjdGl2ZU5vZGU7XG4gICAgICAgIGNvbnN0IGxhc3REZWxpbWl0ZXIgPSBub2RlLnVyaVBhdGgubGFzdEluZGV4T2YoJy8nKTtcbiAgICAgICAgaWYgKGxhc3REZWxpbWl0ZXIgPT09IDApIHJldHVybiAnLyc7XG4gICAgICAgIHJldHVybiBub2RlLnVyaVBhdGguc3Vic3RyaW5nKDAsIGxhc3REZWxpbWl0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzcGxpdE5vZGVQYXRoKG5vZGU6IFVyaU5vZGVSZXNvdXJjZSk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gbm9kZT8udXJpUGF0aC5zcGxpdCgnLycpLmZpbHRlcihzID0+IHMgIT09IFVyaVNlcnZpY2UuUk9PVCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXBpdGFsaXplTmFtZXMobm9kZXM6IEFycmF5PFVyaU5vZGVSZXNvdXJjZT4pIHtcbiAgICAgICAgaWYgKCEobm9kZXMgaW5zdGFuY2VvZiBBcnJheSkpIHJldHVybjtcbiAgICAgICAgbm9kZXMuZm9yRWFjaChuID0+IHRoaXMuY2FwaXRhbGl6ZU5hbWUobikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICAvbmV0Z3JpZi9uYWVfc3lzdGVtL3Byb2Nlc3Nlcy8uLi4gPT4gTmV0Z3JpZiAtPiBOYWUgU3lzdGVtcyAtPiBQcm9jZXNzZXNcbiAgICAgKiBAcGFyYW0gbm9kZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYXBpdGFsaXplTmFtZShub2RlOiBVcmlOb2RlUmVzb3VyY2UpIHtcbiAgICAgICAgbGV0IHBhcnRzID0gbm9kZS5uYW1lLnNwbGl0KCdfJyk7XG4gICAgICAgIHBhcnRzID0gcGFydHMubWFwKHAgPT4ge1xuICAgICAgICAgICAgaWYgKHAgPT09IHVuZGVmaW5lZCB8fCBwLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHAubGVuZ3RoID09PSAxKSByZXR1cm4gcC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHAuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwLnN1YnN0cmluZygxKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG5vZGUubmFtZSA9IHBhcnRzLmpvaW4oJyAnKTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxufVxuIl19
|
|
@@ -79,5 +79,32 @@ export class AbstractResourceService {
|
|
|
79
79
|
return r;
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Converts a Spring-style paginated response into the application's Page<T> format.
|
|
84
|
+
* @param response The raw response from backend (Spring `PageImpl` structure).
|
|
85
|
+
* @returns Converted Page<T> object.
|
|
86
|
+
*/
|
|
87
|
+
mapToPage(response) {
|
|
88
|
+
if (!response || !response.content) {
|
|
89
|
+
return {
|
|
90
|
+
content: [],
|
|
91
|
+
pagination: {
|
|
92
|
+
size: 0,
|
|
93
|
+
totalElements: 0,
|
|
94
|
+
totalPages: 0,
|
|
95
|
+
number: 0
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
content: response.content,
|
|
101
|
+
pagination: {
|
|
102
|
+
size: response.size,
|
|
103
|
+
totalElements: response.totalElements,
|
|
104
|
+
totalPages: response.totalPages,
|
|
105
|
+
number: response.number
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
}
|
|
82
109
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtcmVzb3VyY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvcmVzb3VyY2VzL2Fic3RyYWN0LWVuZHBvaW50L2Fic3RyYWN0LXJlc291cmNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFFNUU7Ozs7R0FJRztBQUNILE1BQU0sT0FBZ0IsdUJBQXVCO0lBV1Q7SUFDQTtJQVZmLFdBQVcsQ0FBUztJQUVyQzs7Ozs7T0FLRztJQUNILFlBQXNCLFlBQW9CLEVBQ1YsaUJBQW1DLEVBQ25DLGNBQW9DO1FBRHBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMsbUJBQWMsR0FBZCxjQUFjLENBQXNCO1FBQ2hFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUFjLFVBQVU7UUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDTyxrQkFBa0IsQ0FBQyxJQUFZO1FBQ3JDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUViLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUUvRixJQUFJLGNBQWMsWUFBWSxLQUFLLEVBQUU7WUFDakMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDOUIsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtvQkFDeEIsR0FBRyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7aUJBQzFCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0gsSUFBSSxjQUFjLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtnQkFDOUIsR0FBRyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDaEM7U0FDSjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxlQUFlLENBQUksQ0FBTSxFQUFFLGdCQUF3QjtRQUN6RCxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ0osT0FBTyxDQUFDLENBQUM7U0FDWjtRQUNELE1BQU0sV0FBVyxHQUFlO1lBQzVCLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDVixJQUFJLEVBQUUsQ0FBQztZQUNQLFVBQVUsRUFBRSxDQUFDO1lBQ2IsYUFBYSxFQUFFLENBQUM7U0FDbkIsQ0FBQztRQUVGLE9BQU87WUFDSCxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBVyxDQUFDLEVBQUUsZ0JBQWdCLENBQUM7WUFDdkQsVUFBVSxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVc7U0FDcEYsQ0FBQztJQUNOLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sVUFBVSxDQUFJLENBQU0sRUFBRSxnQkFBd0I7UUFDcEQsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNKLE9BQU8sQ0FBQyxDQUFDO1NBQ1o7UUFDRCxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDL0IsT0FBTyxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDekg7YUFBTTtZQUNILE9BQU8sQ0FBQyxDQUFDO1NBQ1o7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLFNBQVMsQ0FBSSxRQUFhO1FBQ2hDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQ2hDLE9BQU87Z0JBQ0gsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsVUFBVSxFQUFFO29CQUNSLElBQUksRUFBRSxDQUFDO29CQUNQLGFBQWEsRUFBRSxDQUFDO29CQUNoQixVQUFVLEVBQUUsQ0FBQztvQkFDYixNQUFNLEVBQUUsQ0FBQztpQkFDWjthQUNKLENBQUM7U0FDTDtRQUVELE9BQU87WUFDSCxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87WUFDekIsVUFBVSxFQUFFO2dCQUNSLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtnQkFDbkIsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhO2dCQUNyQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7Z0JBQy9CLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTthQUMxQjtTQUNKLENBQUM7SUFDTixDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1Jlc291cmNlUHJvdmlkZXJ9IGZyb20gJy4uL3Jlc291cmNlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtQYWdlfSBmcm9tICcuLi9pbnRlcmZhY2UvcGFnZSc7XG5pbXBvcnQge1BhZ2luYXRpb259IGZyb20gJy4uL2ludGVyZmFjZS9wYWdpbmF0aW9uJztcbmltcG9ydCB7UGFnaW5hdGlvblBhcmFtc30gZnJvbSAnLi4vLi4vdXRpbGl0eS9wYWdpbmF0aW9uL3BhZ2luYXRpb24tcGFyYW1zJztcblxuLyoqXG4gKiBUaGUgY2xhc3MgdGhhdCBjb250YWlucyBiZWhhdmlvciBjb21tb24gdG8gYWxsIHJlc291cmNlIHNlcnZpY2VzLlxuICpcbiAqIE1vc3RseSBlbmRwb2ludCBVUkwgcmVzb2x1dGlvbiBhbmQgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHJlc3BvbnNlIHBhcnNpbmcuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFJlc291cmNlU2VydmljZSB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9TRVJWRVJfVVJMOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcmVzb3VyY2VOYW1lIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXNpcmVkIGVuZHBvaW50IGZyb20gY29uZmlndXJhdGlvbiwgZm91bmQgaW5cbiAgICAgKiB7QGxpbmsgU2V0QXV0aEFuZFJlc291cmNlc0FkZHJlc3N9LltyZXNvdXJjZXNde0BsaW5rIFJlc291cmNlc30uXG4gICAgICogQHBhcmFtIF9yZXNvdXJjZVByb3ZpZGVyIGBSZXNvdXJjZVByb3ZpZGVyYCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBfY29uZmlnU2VydmljZSBgQ29uZmlndXJhdGlvblNlcnZpY2VgIGluc3RhbmNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHJlc291cmNlTmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3Jlc291cmNlUHJvdmlkZXI6IFJlc291cmNlUHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfY29uZmlnU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fU0VSVkVSX1VSTCA9IHRoaXMuZ2V0UmVzb3VyY2VBZGRyZXNzKHJlc291cmNlTmFtZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBTRVJWRVJfVVJMKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9TRVJWRVJfVVJMO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBVUkwgZm9ybSBuYWUuanNvbiAtIHJlc291cmNlc1xuICAgICAqIEBwYXJhbSBuYW1lIC0gSUQgcHJvcGVydHlcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0UmVzb3VyY2VBZGRyZXNzKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGxldCBVUkwgPSAnJztcblxuICAgICAgICBjb25zdCByZXNvdXJjZXNBcnJheSA9IHRoaXMuX2NvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlndXJhdGlvblN1YnRyZWUoWydwcm92aWRlcnMnLCAncmVzb3VyY2VzJ10pO1xuXG4gICAgICAgIGlmIChyZXNvdXJjZXNBcnJheSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICByZXNvdXJjZXNBcnJheS5mb3JFYWNoKHJlc291cmNlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2UubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBVUkwgPSByZXNvdXJjZS5hZGRyZXNzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJlc291cmNlc0FycmF5Lm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICBVUkwgPSByZXNvdXJjZXNBcnJheS5hZGRyZXNzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBVUkw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgcmVzcG9uc2UgYHJgIGludG8gYSB7QGxpbmsgUGFnZX0gaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gciAtIHJlc3BvbnNlIG9iamVjdFxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzUGFyYW1zIC0gcGx1cmFsIGZvcm0gb2YgdGhlIHJlc291cmNlIG5hbWUsIHRoYXQgaXMgdXNlZCB0byBleHRyYWN0IHRoZSBkYXRhLiBFZy4gXCJjYXNlc1wiLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRSZXNvdXJjZVBhZ2U8VD4ocjogYW55LCBwcm9wZXJ0aWVzUGFyYW1zOiBzdHJpbmcpOiBQYWdlPFQ+IHtcbiAgICAgICAgaWYgKCFyKSB7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZhdWx0UGFnZTogUGFnaW5hdGlvbiA9IHtcbiAgICAgICAgICAgIG51bWJlcjogLTEsXG4gICAgICAgICAgICBzaXplOiAwLFxuICAgICAgICAgICAgdG90YWxQYWdlczogMCxcbiAgICAgICAgICAgIHRvdGFsRWxlbWVudHM6IDBcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogdGhpcy5jaGFuZ2VUeXBlPEFycmF5PFQ+PihyLCBwcm9wZXJ0aWVzUGFyYW1zKSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHIuaGFzT3duUHJvcGVydHkoUGFnaW5hdGlvblBhcmFtcy5QQUdFX05VTUJFUikgPyByLnBhZ2UgOiBkZWZhdWx0UGFnZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIGRhdGEgZnJvbSB0aGUgcmVzcG9uc2UgYHJgIGludG8gYW4gb2JqZWN0IHdpdGggYmV0dGVyIHVzYWJpbGl0eS5cbiAgICAgKiBAcGFyYW0gciAtIHJlc3BvbnNlIG9iamVjdFxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzUGFyYW1zIC0gcGx1cmFsIGZvcm0gb2YgdGhlIHJlc291cmNlIG5hbWUsIHRoYXQgaXMgdXNlZCB0byBleHRyYWN0IHRoZSBkYXRhLiBFZy4gXCJjYXNlc1wiLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjaGFuZ2VUeXBlPFQ+KHI6IGFueSwgcHJvcGVydGllc1BhcmFtczogc3RyaW5nKTogVCB7XG4gICAgICAgIGlmICghcikge1xuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHIuaGFzT3duUHJvcGVydHkoJ19lbWJlZGRlZCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydGllc1BhcmFtcyAmJiByLl9lbWJlZGRlZC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0aWVzUGFyYW1zKSA/IHIuX2VtYmVkZGVkW3Byb3BlcnRpZXNQYXJhbXNdIDogci5fZW1iZWRkZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgU3ByaW5nLXN0eWxlIHBhZ2luYXRlZCByZXNwb25zZSBpbnRvIHRoZSBhcHBsaWNhdGlvbidzIFBhZ2U8VD4gZm9ybWF0LlxuICAgICAqIEBwYXJhbSByZXNwb25zZSBUaGUgcmF3IHJlc3BvbnNlIGZyb20gYmFja2VuZCAoU3ByaW5nIGBQYWdlSW1wbGAgc3RydWN0dXJlKS5cbiAgICAgKiBAcmV0dXJucyBDb252ZXJ0ZWQgUGFnZTxUPiBvYmplY3QuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG1hcFRvUGFnZTxUPihyZXNwb25zZTogYW55KTogUGFnZTxUPiB7XG4gICAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLmNvbnRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29udGVudDogW10sXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBzaXplOiAwLFxuICAgICAgICAgICAgICAgICAgICB0b3RhbEVsZW1lbnRzOiAwLFxuICAgICAgICAgICAgICAgICAgICB0b3RhbFBhZ2VzOiAwLFxuICAgICAgICAgICAgICAgICAgICBudW1iZXI6IDBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3BvbnNlLmNvbnRlbnQsXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2l6ZTogcmVzcG9uc2Uuc2l6ZSxcbiAgICAgICAgICAgICAgICB0b3RhbEVsZW1lbnRzOiByZXNwb25zZS50b3RhbEVsZW1lbnRzLFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXM6IHJlc3BvbnNlLnRvdGFsUGFnZXMsXG4gICAgICAgICAgICAgICAgbnVtYmVyOiByZXNwb25zZS5udW1iZXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cblxufVxuIl19
|