@rocketshow/designer 1.37.0 → 1.39.0

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.
@@ -106,6 +106,7 @@
106
106
  "fixture": {
107
107
  "no-fixtures": "Füge neue Fixtures zum Projekt hinzu",
108
108
  "no-fixtures-selected": "Wähle für dieses Preset mindestens eine Fixture aus",
109
+ "no-capabilities-available": "Für die ausgewählten Fixtures sind keine Fähigkeiten verfügbar. Bitte benutze den Channels-Tab.",
109
110
  "no-fixtures-settings-selected": "Wähle mindestens ein Fixture aus",
110
111
  "add-copy": "Kopie hinzufügen",
111
112
  "capability-dimmer": "Dimmer",
@@ -206,21 +207,21 @@
206
207
  "back": "Zurück",
207
208
  "close": "Schliessen",
208
209
  "title-start": "Schnelleinführung",
209
- "step-start": "Wer das liest ist doof! 🤪 Scherz beiseite. Du wirst sehen, Rocket Show ist anders als die Anderen. Diese zwei-Minuten-Einführung bringt dir die Funktionalitäten etwas näher. 🏆 Du kannst die Einführung jederzeit oben rechts schliessen.",
210
+ "step-start": "Diese zwei-Minuten-Einführung bringt dir die Funktionalitäten vom Rocket Show Designer etwas näher. 🏆 Du kannst die Einführung jederzeit oben rechts schliessen.",
210
211
  "title-preview": "Vorschau",
211
- "step-preview": "Hier siehst du eine 3D-Vorschau deiner Show. Das kann dir einen Anhaltspunkt geben beim Designen, aber in Echt sieht es natürlich noch viel besser aus! 🤩",
212
+ "step-preview": "Hier siehst du eine 3D-Vorschau deiner Show. Das gibt dir einen guten Anhaltspunkt, aber in Echt sieht es natürlich viel besser aus! Wenn du auf einem Rocket Show-Gerät arbeitest, kannst du eine Echtzeit-Ansicht mit angeschlossenen Geräten in den Einstellungen aktivieren.",
212
213
  "title-fixtures": "Fixtures",
213
- "step-fixtures": "Was wäre eine Lichtshow ohne Lichtelemente? 💩 Füge neue Fixtures im Fixture Pool hinzu (Zanhrad oben rechts oder Taste 'P') und platziere sie im DMX-Universum. Markiere anschliessend hier die Fixtures, die du im Preset einsetzen möchtest. Aber was zum Henker ist ein Preset? 🧐",
214
+ "step-fixtures": "Füge neue Fixtures im Fixture Pool hinzu (Zanhrad oben rechts oder Taste 'P') und platziere sie im DMX-Universum. Markiere anschliessend hier die Fixtures, die du im Preset einsetzen möchtest. Aber was ist ein Preset? 🧐",
214
215
  "title-presets": "Presets",
215
- "step-presets": "In einem Preset wird einer Gruppe von Fixtures ein paar Eigenschaften und Effekte zugewiesen. Ein Preset ist zum Beispiel dafür zuständig, dass alle Moving Heads der vordersten Reihe rot leuchten.",
216
+ "step-presets": "In einem Preset wird einer Gruppe von ausgewählten Fixtures Eigenschaften und Effekte zugewiesen. Ein Preset ist zum Beispiel dafür zuständig, dass alle Moving Heads der vordersten Reihe rot leuchten.",
216
217
  "title-capabilities": "Fähigkeiten, Kanäle und Effekte",
217
218
  "step-capabilities": "Das Preset enthält eine Reihe von Fähigkeiten (zum Beispiel einen Dimmer-Wert oder eine Farbe). Du kannst aber auch die Kanäle der einzelnen Fixtures manuell editieren, oder sogar Effekte hinzufügen. 🎉",
218
219
  "title-scenes": "Szenen",
219
220
  "step-scenes": "Eine Szene enthält ein oder mehrere Presets. Damit kannst du komplexe Kombinationen erstellen und einfach wieder abrufen. Höher platzierte Presets überschreiben die Eigenschaften von darunterliegenden Presets.",
220
221
  "title-timeline": "Zeitleiste",
221
- "step-timeline": "In der Zeitleiste kannst du Szenen platzieren und synchronisiert zu einer Audio-Datei abspielen. ⏱ Auf dem Rocket Show-Gerät entspricht diese Datei einer Komposition, die beim Abspielen auch deine Lichtshow automatisch steuert.",
222
- "title-finish": "Das Ende naht...",
223
- "step-finish": "Was!? Du liest immer noch!? 😂 Höchste Zeit, dass du es selbst ausprobierst! Teile deine Shows mit deinen Freunden und schaue, was sie darüber denken. 👫"
222
+ "step-timeline": "In der Zeitleiste kannst du Szenen platzieren und synchronisiert zu einer Audio-Datei abspielen. ⏱ Auf dem Rocket Show-Gerät entspricht diese Datei einer Komposition, die beim Abspielen auch deine Lichtshow automatisch steuert, wenn die Namen identisch sind.",
223
+ "title-finish": "Gut gemacht!",
224
+ "step-finish": "Höchste Zeit, dass du es selbst ausprobierst! Teile deine Shows mit deinen Freunden und schaue, was sie darüber denken. 👫"
224
225
  },
225
226
  "fixtureCapabilityType": {
226
227
  "NoFunction": "Keine Funktion",
@@ -106,6 +106,7 @@
106
106
  "fixture": {
107
107
  "no-fixtures": "Add new fixtures to the project",
108
108
  "no-fixtures-selected": "Select at least one fixture for this preset",
109
+ "no-capabilities-available": "There are no capabilities available for the selected fixtures. Please use the channels-tab.",
109
110
  "no-fixtures-settings-selected": "Select at least one fixture",
110
111
  "add-copy": "Add copy",
111
112
  "capability-dimmer": "Dimmer",
@@ -157,7 +158,7 @@
157
158
  "invalid-fixture-profile-file": "This is not a valid OFL fixture profile file. Please select a valid profile file."
158
159
  },
159
160
  "effect": {
160
- "add-new": "Add new Effekt",
161
+ "add-new": "Add new Effect",
161
162
  "type-curve": "Curve",
162
163
  "type-pan-tilt": "Pan-Tilt",
163
164
  "curve": "Curve",
@@ -205,11 +206,11 @@
205
206
  "back": "Back",
206
207
  "close": "Close",
207
208
  "title-start": "Quick introduction",
208
- "step-start": "Only fools read this! 🤪 Joking aside, you will see, Rocket Show is different. This two-minute-introduction will teach you the most basic functionalities. 🏆 You can always skip by closing this window on the top right.",
209
+ "step-start": "This two-minute-introduction will teach you the most basic functionalities of the Rocket Show Designer. 🏆 You can always skip by closing this window on the top right.",
209
210
  "title-preview": "Preview",
210
- "step-preview": "You can see a 3D-preview of your show here. This might be useful as a guidance, but it looks much better in reality of course! 🤩",
211
+ "step-preview": "You can see a 3D-preview of your show here. This is a useful guidance, but it looks much better in reality, of course! If you're working on a Rocket Show device, you're able to activate a realtime preview for the connected devices in the settings.",
211
212
  "title-fixtures": "Fixtures",
212
- "step-fixtures": "What would a lightshow be without lighting elements? 💩 Add new fixtures in the fixture pool (cogwheel upper right or key 'P') und and place them on the DMX universe. Continue selecting the fixtures here you want to use in the current preset. But what the heck is a preset? 🧐",
213
+ "step-fixtures": "Add new fixtures in the fixture pool (cogwheel upper right or key 'P') und and place them on the DMX universe. Continue, by selecting the fixtures you want to use in the current preset. But what's a preset? 🧐",
213
214
  "title-presets": "Presets",
214
215
  "step-presets": "A preset assigns properties and effects to a group of fixtures. There might be a preset to let all moving heads in the front row shine red.",
215
216
  "title-capabilities": "Capabilities, channels and effects",
@@ -217,9 +218,9 @@
217
218
  "title-scenes": "Scenes",
218
219
  "step-scenes": "One scene contains one or more presets. This allows for complex combinations you can easily use on different places. Higher placed presets overwrite properties from lower placed ones.",
219
220
  "title-timeline": "Timeline",
220
- "step-timeline": "You can place scenes on the timeline and play them in sync with an audio file. ⏱ Such a file equals a composition on the Rocket Show device. Your lighting show will be played automatically with your composition.",
221
- "title-finish": "The ending is near...",
222
- "step-finish": "What!? You're still readying!? 😂 About time you're gonna try it out by yourself! Share your shows with your friends and see, what they think about it. 👫"
221
+ "step-timeline": "You can place scenes on the timeline and play them in sync with an audio file. ⏱ Such a file equals a composition on the Rocket Show device. Your lighting show will be played automatically with your composition, if the names match.",
222
+ "title-finish": "Well done!",
223
+ "step-finish": "About time you're gonna try it out by yourself! Share your shows with your friends and see, what they think about it. 👫"
223
224
  },
224
225
  "fixtureCapabilityType": {
225
226
  "NoFunction": "No function",
@@ -389,16 +389,16 @@ export class DesignerComponent {
389
389
  .subscribe();
390
390
  }
391
391
  projectSave() {
392
- if (this.projectService.project.name) {
393
- // this project has been saved before -> just save it again
394
- this.projectService.save(this.projectService.project);
395
- }
396
- else {
397
- // this project has not yet been saved -> show the save as-dialog
398
- this.userEnsureLoginService.login().subscribe(() => {
392
+ this.userEnsureLoginService.login().subscribe(() => {
393
+ if (this.projectService.project.name) {
394
+ // this project has been saved before -> just save it again
395
+ this.projectService.save(this.projectService.project);
396
+ }
397
+ else {
398
+ // this project has not yet been saved -> show the save as-dialog
399
399
  this.modalService.show(ProjectSaveComponent, { keyboard: true, ignoreBackdropClick: false });
400
- });
401
- }
400
+ }
401
+ });
402
402
  }
403
403
  projectSaveAs() {
404
404
  this.userEnsureLoginService.login().subscribe(() => {
@@ -669,4 +669,4 @@ export class DesignerComponent {
669
669
  args: ['document:keydown', ['$event']]
670
670
  }] }); })();
671
671
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DesignerComponent, { className: "DesignerComponent" }); })();
672
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9kZXNpZ25lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2Rlc2lnbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxLQUFLLE1BQU0sVUFBVSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0s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aURBQTRCOzs7aUZEaE9yQyxpQkFBaUI7Y0FON0IsU0FBUzsyQkFDRSxjQUFjLGlCQUdULGlCQUFpQixDQUFDLElBQUk7Z2RBSWpDLFlBQVk7a0JBRGYsS0FBSztZQU9GLDZCQUE2QjtrQkFEaEMsS0FBSztZQU1GLE9BQU87a0JBRFYsS0FBSztZQU1GLGtCQUFrQjtrQkFEckIsS0FBSztZQU1GLGNBQWM7a0JBRGpCLEtBQUs7WUFNRixjQUFjO2tCQURqQixLQUFLO1lBTUYsY0FBYztrQkFEakIsS0FBSztZQU1GLGtCQUFrQjtrQkFEckIsS0FBSztZQU1GLFdBQVc7a0JBRGQsS0FBSztZQU1GLGFBQWE7a0JBRGhCLEtBQUs7WUFNRixLQUFLO2tCQURSLEtBQUs7WUFPRixrQkFBa0I7a0JBRHJCLEtBQUs7WUFNRixnQkFBZ0I7a0JBRG5CLEtBQUs7WUFlTixnQkFBZ0I7a0JBRGYsU0FBUzttQkFBQyxnQkFBZ0I7WUFJM0IsaUJBQWlCO2tCQURoQixTQUFTO21CQUFDLGlCQUFpQjtZQThPNUIsbUJBQW1CO2tCQURsQixZQUFZO21CQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDOztrRkE3VGpDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IFNwbGl0IGZyb20gJ3NwbGl0LmpzJztcbmltcG9ydCB7IFByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuL3ByZXZpZXcvcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvamVjdEJyb3dzZXJDb21wb25lbnQgfSBmcm9tICcuL3Byb2plY3QvcHJvamVjdC1icm93c2VyL3Byb2plY3QtYnJvd3Nlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvamVjdEltcG9ydENvbXBvbmVudCB9IGZyb20gJy4vcHJvamVjdC9wcm9qZWN0LWltcG9ydC9wcm9qZWN0LWltcG9ydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvamVjdFNhdmVDb21wb25lbnQgfSBmcm9tICcuL3Byb2plY3QvcHJvamVjdC1zYXZlL3Byb2plY3Qtc2F2ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvamVjdFNoYXJlQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9qZWN0L3Byb2plY3Qtc2hhcmUvcHJvamVjdC1zaGFyZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9lcnJvci1kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBGaXh0dXJlUG9vbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2ZpeHR1cmUtcG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9maXh0dXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSG90a2V5VGFyZ2V0RXhjbHVkZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2hvdGtleS10YXJnZXQtZXhjbHVkZS5zZXJ2aWNlJztcbmltcG9ydCB7IEludHJvU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvaW50cm8uc2VydmljZSc7XG5pbXBvcnQgeyBQcm9qZWN0TG9hZFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3Byb2plY3QtbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2plY3RTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wcm9qZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGltZWxpbmVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90aW1lbGluZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJFbnN1cmVMb2dpblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3VzZXItZW5zdXJlLWxvZ2luLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBXYXJuaW5nRGlhbG9nU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvd2FybmluZy1kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBUaW1lbGluZUNvbXBvbmVudCB9IGZyb20gJy4vdGltZWxpbmUvdGltZWxpbmUuY29tcG9uZW50JztcbmltcG9ydCB7IFVzZXJSZWdpc3RlckNvbXBvbmVudCB9IGZyb20gJy4vdXNlci91c2VyLXJlZ2lzdGVyL3VzZXItcmVnaXN0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGVzaWduZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVzaWduZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kZXNpZ25lci5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBEZXNpZ25lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpXG4gIHNldCBtZW51SGVpZ2h0UHgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuY29uZmlnU2VydmljZS5tZW51SGVpZ2h0UHggPSB2YWx1ZTtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UubWVudUhlaWdodENoYW5nZWQubmV4dCgpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGV4dGVybmFsQ29tcG9zaXRpb25zQXZhaWxhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy50aW1lbGluZVNlcnZpY2UuZXh0ZXJuYWxDb21wb3NpdGlvbnNBdmFpbGFibGUgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCByZXN0VXJsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UucmVzdFVybCA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGVuYWJsZU1lZGlhTGlicmFyeSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29uZmlnU2VydmljZS5lbmFibGVNZWRpYUxpYnJhcnkgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBsb2dpbkF2YWlsYWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29uZmlnU2VydmljZS5sb2dpbkF2YWlsYWJsZSA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHNoYXJlQXZhaWxhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLnNoYXJlQXZhaWxhYmxlID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbGFuZ3VhZ2VTd2l0Y2godmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UubGFuZ3VhZ2VTd2l0Y2ggPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBuZXdQcm9qZWN0VGVtcGxhdGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UubmV3UHJvamVjdFRlbXBsYXRlID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbGl2ZVByZXZpZXcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UubGl2ZVByZXZpZXcgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBsb2NhbFByb2ZpbGVzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLmxvY2FsUHJvZmlsZXMgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBpbnRybyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29uZmlnU2VydmljZS5pbnRybyA9IHZhbHVlO1xuICAgIHRoaXMuaW50cm9TZXJ2aWNlLnJlZnJlc2goKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB1bmlxdWVQcm9qZWN0TmFtZXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UudW5pcXVlUHJvamVjdE5hbWVzID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgZHJvcHpvbmVDaHVua2luZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29uZmlnU2VydmljZS5kcm9wem9uZUNodW5raW5nID0gdmFsdWU7XG4gIH1cblxuICAvLyB0aGUgc2l6ZSBvZiB0aGUgbWVudSB1c2VkIGluIHRoZSBkZXNpZ25lclxuICBwcml2YXRlIGRlc2lnbmVyTWVudVNpemVQeCA9IDIwO1xuXG4gIHByaXZhdGUgc3BsaXRHdXR0ZXJTaXplUHggPSAxMztcblxuICBwdWJsaWMgdG90YWxNZW51SGVpZ2h0UHggPSAwO1xuXG4gIGN1cnJlbnRUYWIgPSAncHJvcGVydGllcyc7XG5cbiAgQFZpZXdDaGlsZChQcmV2aWV3Q29tcG9uZW50KVxuICBwcmV2aWV3Q29tcG9uZW50OiBQcmV2aWV3Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoVGltZWxpbmVDb21wb25lbnQpXG4gIHRpbWVsaW5lQ29tcG9uZW50OiBUaW1lbGluZUNvbXBvbmVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHVibGljIHByb2plY3RTZXJ2aWNlOiBQcm9qZWN0U2VydmljZSxcbiAgICBwdWJsaWMgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGZpeHR1cmVQb29sU2VydmljZTogRml4dHVyZVBvb2xTZXJ2aWNlLFxuICAgIHByaXZhdGUgaG90a2V5VGFyZ2V0RXhjbHVkZVNlcnZpY2U6IEhvdGtleVRhcmdldEV4Y2x1ZGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwdWJsaWMgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlckVuc3VyZUxvZ2luU2VydmljZTogVXNlckVuc3VyZUxvZ2luU2VydmljZSxcbiAgICBwcml2YXRlIHByb2plY3RMb2FkU2VydmljZTogUHJvamVjdExvYWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgd2FybmluZ0RpYWxvZ1NlcnZpY2U6IFdhcm5pbmdEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXJyb3JEaWFsb2dTZXJ2aWNlOiBFcnJvckRpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0aW1lbGluZVNlcnZpY2U6IFRpbWVsaW5lU2VydmljZSxcbiAgICBwdWJsaWMgaW50cm9TZXJ2aWNlOiBJbnRyb1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLm1lbnVIZWlnaHRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNhbGNUb3RhbE1lbnVIZWlnaHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZEVycm9yKHJlc3BvbnNlOiBhbnkpIHtcbiAgICBjb25zb2xlLmVycm9yKHJlc3BvbnNlKTtcbiAgICBsZXQgbXNnID0gJ2Rlc2lnbmVyLnByb2plY3Qub3Blbi1lcnJvcic7XG4gICAgbGV0IGVycm9yOiBzdHJpbmc7XG4gICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIGVycm9yID0gcmVzcG9uc2UgJiYgcmVzcG9uc2UuZXJyb3IgPyByZXNwb25zZS5lcnJvci5lcnJvciA6ICd1bmtub3duJztcbiAgICAgIGlmIChlcnJvciA9PT0gJ25vLXBlcm1pc3Npb24nKSB7XG4gICAgICAgIG1zZyA9ICdkZXNpZ25lci5wcm9qZWN0Lm9wZW4tbm8tcGVybWlzc2lvbi1lcnJvcic7XG4gICAgICAgIGVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXNnID0gJ2Rlc2lnbmVyLnByb2plY3Qub3Blbi1lcnJvcic7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yID0gcmVzcG9uc2UgJiYgcmVzcG9uc2UubWVzc2FnZSA/IHJlc3BvbnNlLm1lc3NhZ2UgOiAndW5rbm93bic7XG4gICAgfVxuICAgIHRoaXMuZXJyb3JEaWFsb2dTZXJ2aWNlLnNob3cobXNnLCBlcnJvcikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucHJvamVjdExvYWRTZXJ2aWNlLm5ldygpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5ndWFnZScpKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5ndWFnZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZSgnZW4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGNUb3RhbE1lbnVIZWlnaHQoKTtcblxuICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgY29uc3QgcHJvamVjdElkID0gdXJsUGFyYW1zLmdldCgnaWQnKTtcbiAgICBjb25zdCBwcm9qZWN0TmFtZSA9IHVybFBhcmFtcy5nZXQoJ25hbWUnKTtcbiAgICBsZXQgc2hhcmVUb2tlbiA9IHVybFBhcmFtcy5nZXQoJ3Rva2VuJyk7XG5cbiAgICBpZiAocHJvamVjdElkKSB7XG4gICAgICAvLyBsb2FkIGEgcHJvamVjdCBieSBxdWVyeSBwYXJhbSBJRFxuICAgICAgaWYgKCFzaGFyZVRva2VuKSB7XG4gICAgICAgIHNoYXJlVG9rZW4gPSAnJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5wcm9qZWN0TG9hZFNlcnZpY2UubG9hZChOdW1iZXIucGFyc2VJbnQocHJvamVjdElkLCAxMCksIHByb2plY3ROYW1lLCBzaGFyZVRva2VuKS5zdWJzY3JpYmUoXG4gICAgICAgICgpID0+IHt9LFxuICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRFcnJvcihyZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICh0aGlzLnVzZXJTZXJ2aWNlLmlzTG9nZ2VkSW4oKSB8fCAhdGhpcy5jb25maWdTZXJ2aWNlLmxvZ2luQXZhaWxhYmxlKSAmJlxuICAgICAgKHRoaXMudXNlclNlcnZpY2UuZ2V0QXV0b0xvYWRQcm9qZWN0SWQoKSB8fCB0aGlzLnVzZXJTZXJ2aWNlLmdldEF1dG9Mb2FkUHJvamVjdE5hbWUoKSlcbiAgICApIHtcbiAgICAgIC8vIHJlc3RvcmUgdGhlIGxhc3Qgc2F2ZWQgcHJvamVjdFxuICAgICAgdGhpcy5wcm9qZWN0TG9hZFNlcnZpY2UubG9hZCh0aGlzLnVzZXJTZXJ2aWNlLmdldEF1dG9Mb2FkUHJvamVjdElkKCksIHRoaXMudXNlclNlcnZpY2UuZ2V0QXV0b0xvYWRQcm9qZWN0TmFtZSgpKS5zdWJzY3JpYmUoXG4gICAgICAgICgpID0+IHt9LFxuICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRFcnJvcihyZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UubmV3UHJvamVjdFRlbXBsYXRlKSB7XG4gICAgICAgIC8vIGxvYWQgdGhlIG5ldyBwcm9qZWN0IHRlbXBsYXRlXG4gICAgICAgIHRoaXMucHJvamVjdExvYWRTZXJ2aWNlLnRlbXBsYXRlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2plY3RMb2FkU2VydmljZS5uZXcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNhbGNUb3RhbE1lbnVIZWlnaHQoKSB7XG4gICAgdGhpcy50b3RhbE1lbnVIZWlnaHRQeCA9IHRoaXMuZGVzaWduZXJNZW51U2l6ZVB4ICsgdGhpcy5zcGxpdEd1dHRlclNpemVQeCArIHRoaXMuY29uZmlnU2VydmljZS5tZW51SGVpZ2h0UHg7XG4gIH1cblxuICBwcml2YXRlIG9uUmVzaXplKCkge1xuICAgIGlmICh0aGlzLnByZXZpZXdDb21wb25lbnQpIHtcbiAgICAgIHRoaXMucHJldmlld0NvbXBvbmVudC5vblJlc2l6ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRpbWVsaW5lQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLnRpbWVsaW5lQ29tcG9uZW50Lm9uUmVzaXplKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFNldCB1cCB0aGUgc3BsaXR0ZXJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIFNwbGl0KFsnI3JvdzEnLCAnI3JvdzInLCAnI3JvdzMnXSwge1xuICAgICAgICBzaXplczogWzQyLCA0MCwgMThdLFxuICAgICAgICBkaXJlY3Rpb246ICd2ZXJ0aWNhbCcsXG4gICAgICAgIGN1cnNvcjogJ3Jvdy1yZXNpemUnLFxuICAgICAgICBzbmFwT2Zmc2V0OiAwLFxuICAgICAgICBndXR0ZXJTaXplOiB0aGlzLnNwbGl0R3V0dGVyU2l6ZVB4LFxuICAgICAgICBvbkRyYWc6IHRoaXMub25SZXNpemUuYmluZCh0aGlzKSxcbiAgICAgIH0pO1xuXG4gICAgICBTcGxpdChbJyNzY2VuZXMnLCAnI3ByZXNldHMnLCAnI3ByZXZpZXcnXSwge1xuICAgICAgICBzaXplczogWzIwLCAyMCwgNjBdLFxuICAgICAgICBzbmFwT2Zmc2V0OiAwLFxuICAgICAgICBndXR0ZXJTaXplOiB0aGlzLnNwbGl0R3V0dGVyU2l6ZVB4LFxuICAgICAgICBvbkRyYWc6IHRoaXMub25SZXNpemUuYmluZCh0aGlzKSxcbiAgICAgIH0pO1xuXG4gICAgICBTcGxpdChbJyNjYXBhYmlsaXRpZXMnLCAnI2ZpeHR1cmVzJywgJyNtYXN0ZXJEaW1tZXInXSwge1xuICAgICAgICBzaXplczogWzcwLCAyNCwgNl0sXG4gICAgICAgIHNuYXBPZmZzZXQ6IDAsXG4gICAgICAgIGd1dHRlclNpemU6IHRoaXMuc3BsaXRHdXR0ZXJTaXplUHgsXG4gICAgICAgIG9uRHJhZzogdGhpcy5vblJlc2l6ZS5iaW5kKHRoaXMpLFxuICAgICAgICBtaW5TaXplOiA1MCxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm9uUmVzaXplKCk7XG4gICAgfSk7XG4gIH1cblxuICBvcGVuVGFiKHRhYjogc3RyaW5nKSB7XG4gICAgLy8gb3BlbiBhIHNpZGUgdGFiIChlLmcuIGVmZmVjdHMsIGNoYW5uZWxzLCBzZXR0aW5ncywgZXRjLilcblxuICAgIGlmICh0YWIgPT09ICdzZXR0aW5ncycpIHtcbiAgICAgIHRoaXMuZml4dHVyZVNlcnZpY2Uuc2V0dGluZ3NTZWxlY3Rpb24gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpeHR1cmVTZXJ2aWNlLnNldHRpbmdzU2VsZWN0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50VGFiID0gdGFiO1xuICB9XG5cbiAgb3BlbkZpeHR1cmVQb29sKCkge1xuICAgIHRoaXMuZml4dHVyZVBvb2xTZXJ2aWNlLm9wZW4oKTtcbiAgfVxuXG4gIHByb2plY3ROZXcoKSB7XG4gICAgdGhpcy53YXJuaW5nRGlhbG9nU2VydmljZVxuICAgICAgLnNob3coJ2Rlc2lnbmVyLm1pc2Mud2FybmluZy1wcm9jZWVkLXVuc2F2ZWQnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5wcm9qZWN0TG9hZFNlcnZpY2UubmV3KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvamVjdE9wZW4oKSB7XG4gICAgdGhpcy53YXJuaW5nRGlhbG9nU2VydmljZVxuICAgICAgLnNob3coJ2Rlc2lnbmVyLm1pc2Mud2FybmluZy1wcm9jZWVkLXVuc2F2ZWQnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy51c2VyRW5zdXJlTG9naW5TZXJ2aWNlLmxvZ2luKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhQcm9qZWN0QnJvd3NlckNvbXBvbmVudCwgeyBrZXlib2FyZDogdHJ1ZSwgaWdub3JlQmFja2Ryb3BDbGljazogZmFsc2UgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcm9qZWN0U2F2ZSgpIHtcbiAgICBpZiAodGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0Lm5hbWUpIHtcbiAgICAgIC8vIHRoaXMgcHJvamVjdCBoYXMgYmVlbiBzYXZlZCBiZWZvcmUgLT4ganVzdCBzYXZlIGl0IGFnYWluXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnNhdmUodGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcyBwcm9qZWN0IGhhcyBub3QgeWV0IGJlZW4gc2F2ZWQgLT4gc2hvdyB0aGUgc2F2ZSBhcy1kaWFsb2dcbiAgICAgIHRoaXMudXNlckVuc3VyZUxvZ2luU2VydmljZS5sb2dpbigpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coUHJvamVjdFNhdmVDb21wb25lbnQsIHsga2V5Ym9hcmQ6IHRydWUsIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IGZhbHNlIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvamVjdFNhdmVBcygpIHtcbiAgICB0aGlzLnVzZXJFbnN1cmVMb2dpblNlcnZpY2UubG9naW4oKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhQcm9qZWN0U2F2ZUNvbXBvbmVudCwgeyBrZXlib2FyZDogdHJ1ZSwgaWdub3JlQmFja2Ryb3BDbGljazogZmFsc2UgfSk7XG4gICAgfSk7XG4gIH1cblxuICB1c2VyUmVnaXN0ZXIoKSB7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhVc2VyUmVnaXN0ZXJDb21wb25lbnQsIHsga2V5Ym9hcmQ6IHRydWUsIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IGZhbHNlIH0pO1xuICB9XG5cbiAgcHJvamVjdEltcG9ydCgpIHtcbiAgICB0aGlzLndhcm5pbmdEaWFsb2dTZXJ2aWNlXG4gICAgICAuc2hvdygnZGVzaWduZXIubWlzYy53YXJuaW5nLXByb2NlZWQtdW5zYXZlZCcpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5zaG93KFByb2plY3RJbXBvcnRDb21wb25lbnQsIHsga2V5Ym9hcmQ6IHRydWUsIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IGZhbHNlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByb2plY3RFeHBvcnQoKSB7XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdCwgbnVsbCwgMik7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnaHJlZicsICdkYXRhOnRleHQvanNvbjtjaGFyc2V0PVVURi04LCcgKyBlbmNvZGVVUklDb21wb25lbnQoanNvbikpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5uYW1lICsgJy5yc2QnKTtcbiAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgICBlbGVtZW50LmNsaWNrKCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbGVtZW50KTtcbiAgfVxuXG4gIHByb2plY3RTaGFyZSgpIHtcbiAgICBpZiAoIXRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5pZCkge1xuICAgICAgLy8gYSBzYXZlIGlzIHJlcXVpcmVkIGZpcnN0XG4gICAgICB0aGlzLmVycm9yRGlhbG9nU2VydmljZS5zaG93KCdkZXNpZ25lci5wcm9qZWN0LnNoYXJlLW5vLXNhdmUnKS5zdWJzY3JpYmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZ25vcmUgYmFja2Ryb3AgY2xpY2ssIGJlY2F1c2Ugc2VsZWN0aW5nIHRoZSBsaW5rIHRleHQgd2lsbCBhbHNvIGNsb3NlIHRoZSBtb2RhbFxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coUHJvamVjdFNoYXJlQ29tcG9uZW50LCB7IGtleWJvYXJkOiB0cnVlLCBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmhvdGtleVRhcmdldEV4Y2x1ZGVTZXJ2aWNlLmV4Y2x1ZGUoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ3AnKSB7XG4gICAgICB0aGlzLm9wZW5GaXh0dXJlUG9vbCgpO1xuXG4gICAgICAvLyBwcmV2ZW50IGNoZWNrYm94ZXMgYmVpbmcgdG9nZ2xlZCwgaWYgaW4gZm9jdXMgZS5nLlxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkgPT09ICduJykge1xuICAgICAgdGhpcy5wcm9qZWN0TmV3KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleSA9PT0gJ3MnKSB7XG4gICAgICB0aGlzLnByb2plY3RTYXZlKCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleSA9PT0gJ28nKSB7XG4gICAgICB0aGlzLnByb2plY3RPcGVuKCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoTGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZykge1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS51c2UobGFuZ3VhZ2UpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdsYW5ndWFnZScsIGxhbmd1YWdlKTtcbiAgfVxufVxuIiwiPCEtLSBXcmFwIHRoZSB3aG9sZSBjb21wb25lbnQgaW5zaWRlIGEgZGl2IHRvIGVuY2Fwc3VsYXRlIHRoZSBDU1MgLS0+XG5cbjwhLS0gMTAwICUgaGVpZ2h0IG1pbnVzIHRoZSBtZW51IGJhciBhYm92ZSBhbmQgdGhlIGd1dHRlciBzaXplIG9mIDEzIHB4IC0tPlxuPCEtLSA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMCUgLSAzM3B4KVwiPiAtLT5cbjxkaXYgaWQ9XCJkZXNpZ25lclwiIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiAnY2FsYygxMDAlIC0gJyArIHRvdGFsTWVudUhlaWdodFB4ICsgJ3B4KScgfVwiPlxuICA8IS0tIE5hdmlnYXRpb24gLS0+XG4gIDxuYXZcbiAgICBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLWxnIG5hdmJhci1saWdodCBiZy1saWdodCBib3JkZXItc2Vjb25kYXJ5XCJcbiAgICBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNDQ0OyBoZWlnaHQ6IDIwcHg7IHotaW5kZXg6IDk5OTlcIlxuICA+XG4gICAgPCEtLSBNZW51IGJ1dHRvbnMgLS0+XG4gICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdiBtci1hdXRvXCI+XG4gICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBkcm9wZG93blwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rIGRyb3Bkb3duLXRvZ2dsZVwiIGhyZWY9XCIjXCIgaWQ9XCJmaWxlRHJvcGRvd25cIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICB7eyAnZGVzaWduZXIubmF2aWdhdGlvbi5wcm9qZWN0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2E+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZmlsZURyb3Bkb3duXCI+XG4gICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGQtbm9uZSBkLW1kLWJsb2NrXCIgaHJlZj1cIiNcIiAoY2xpY2spPVwicHJvamVjdE5ldygpOyAoZmFsc2UpXCJcbiAgICAgICAgICAgID48aSBjbGFzcz1cImZhIGZhLWZ3IGZhLWZpbGUtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24ucHJvamVjdC1uZXcnIHwgdHJhbnNsYXRlIH19PC9hXG4gICAgICAgICAgPlxuICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCIgKGNsaWNrKT1cInByb2plY3RPcGVuKCk7IChmYWxzZSlcIlxuICAgICAgICAgICAgPjxpIGNsYXNzPVwiZmEgZmEtZncgZmEtZm9sZGVyLW9wZW4tb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24ucHJvamVjdC1vcGVuJyB8IHRyYW5zbGF0ZSB9fTwvYVxuICAgICAgICAgID5cbiAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1ub25lIGQtbWQtYmxvY2tcIiBocmVmPVwiI1wiIChjbGljayk9XCJwcm9qZWN0U2F2ZSgpOyAoZmFsc2UpXCJcbiAgICAgICAgICAgID48aSBjbGFzcz1cImZhIGZhLWZ3IGZhLWZsb3BweS1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7eyAnZGVzaWduZXIubmF2aWdhdGlvbi5wcm9qZWN0LXNhdmUnIHwgdHJhbnNsYXRlIH19PC9hXG4gICAgICAgICAgPlxuICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbSBkLW5vbmUgZC1tZC1ibG9ja1wiIGhyZWY9XCIjXCIgKGNsaWNrKT1cInByb2plY3RTYXZlQXMoKTsgKGZhbHNlKVwiXG4gICAgICAgICAgICA+PGkgY2xhc3M9XCJmYSBmYS1mdyBmYS1mbG9wcHktb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24ucHJvamVjdC1zYXZlLWFzJyB8IHRyYW5zbGF0ZSB9fTwvYVxuICAgICAgICAgID5cbiAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1ub25lIGQtbWQtYmxvY2tcIiBocmVmPVwiI1wiIChjbGljayk9XCJwcm9qZWN0SW1wb3J0KCk7IChmYWxzZSlcIlxuICAgICAgICAgICAgPjxpIGNsYXNzPVwiZmEgZmEtZncgZmEtZG93bmxvYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdkZXNpZ25lci5uYXZpZ2F0aW9uLnByb2plY3QtaW1wb3J0JyB8IHRyYW5zbGF0ZSB9fTwvYVxuICAgICAgICAgID5cbiAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1ub25lIGQtbWQtYmxvY2tcIiBocmVmPVwiI1wiIChjbGljayk9XCJwcm9qZWN0RXhwb3J0KCk7IChmYWxzZSlcIlxuICAgICAgICAgICAgPjxpIGNsYXNzPVwiZmEgZmEtZncgZmEtZXh0ZXJuYWwtbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24ucHJvamVjdC1leHBvcnQnIHwgdHJhbnNsYXRlIH19PC9hXG4gICAgICAgICAgPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBkcm9wZG93biBkLW5vbmUgZC1tZC1ibG9ja1wiPlxuICAgICAgICA8YVxuICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICBocmVmPVwiI1wiXG4gICAgICAgICAgaWQ9XCJzZXR0aW5nc0Ryb3Bkb3duXCJcbiAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdkZXNpZ25lci5uYXZpZ2F0aW9uLnNldHRpbmdzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2E+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwic2V0dGluZ3NEcm9wZG93blwiPlxuICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCIgKGNsaWNrKT1cIm9wZW5GaXh0dXJlUG9vbCgpOyAoZmFsc2UpXCI+e3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24uZml4dHVyZS1wb29sJyB8IHRyYW5zbGF0ZSB9fTwvYT5cbiAgICAgICAgICA8IS0tIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCI+e3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24uc3RhZ2UnIHwgdHJhbnNsYXRlIH19PC9hPiAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gZHJvcGRvd24gZC1ub25lIGQtbWQtYmxvY2tcIj5cbiAgICAgICAgPGFcbiAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgaHJlZj1cIiNcIlxuICAgICAgICAgIGlkPVwic2V0dGluZ3NEcm9wZG93blwiXG4gICAgICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnZGVzaWduZXIubmF2aWdhdGlvbi5oZWxwJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2E+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwic2V0dGluZ3NEcm9wZG93blwiPlxuICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCIgKGNsaWNrKT1cImludHJvU2VydmljZS5yZXNldCgpOyAoZmFsc2UpXCI+e3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24ucmVzZXQtaW50cm8nIHwgdHJhbnNsYXRlIH19PC9hPlxuICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCJodHRwczovL3JvY2tldHNob3cubmV0L3N1cHBvcnQvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3tcbiAgICAgICAgICAgICdkZXNpZ25lci5uYXZpZ2F0aW9uLnN1cHBvcnQnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgfX08L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdlwiPlxuICAgICAgPGxpICpuZ0lmPVwiY29uZmlnU2VydmljZS5zaGFyZUF2YWlsYWJsZVwiIGNsYXNzPVwibmF2LWl0ZW0gZC1ub25lIGQtbWQtZmxleFwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIj5cbiAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwicHJvamVjdFNoYXJlKCk7IChmYWxzZSlcIiByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcbiAgICAgICAgICA+PGkgY2xhc3M9XCJmYSBmYS1zaGFyZS1hbHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdkZXNpZ25lci5uYXZpZ2F0aW9uLnByb2plY3Qtc2hhcmUnIHwgdHJhbnNsYXRlIH19PC9hXG4gICAgICAgID5cbiAgICAgIDwvbGk+XG5cbiAgICAgIDxsaSAqbmdJZj1cImNvbmZpZ1NlcnZpY2UubGFuZ3VhZ2VTd2l0Y2hcIiBjbGFzcz1cIm5hdi1pdGVtIGRyb3Bkb3duXCI+XG4gICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmsgZHJvcGRvd24tdG9nZ2xlXCIgaHJlZj1cIiNcIiBpZD1cInNldHRpbmdzRHJvcGRvd25cIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgID48aSBjbGFzcz1cImZhIGZhLWdsb2JlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIHt7ICdkZXNpZ25lci5taXNjLmxhbmd1YWdlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2E+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHRcIiBhcmlhLWxhYmVsbGVkYnk9XCJzZXR0aW5nc0Ryb3Bkb3duXCI+XG4gICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiNcIiAoY2xpY2spPVwic3dpdGNoTGFuZ3VhZ2UoJ2VuJyk7IChmYWxzZSlcIiB0YXJnZXQ9XCJfYmxhbmtcIj5FbmdsaXNoPC9hPlxuICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCIgKGNsaWNrKT1cInN3aXRjaExhbmd1YWdlKCdkZScpOyAoZmFsc2UpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+RGV1dHNjaDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuXG4gICAgICA8bGkgKm5nSWY9XCJjb25maWdTZXJ2aWNlLmxvZ2luQXZhaWxhYmxlICYmICF1c2VyU2VydmljZS5pc0xvZ2dlZEluKClcIiBjbGFzcz1cIm5hdi1pdGVtXCIgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgKGNsaWNrKT1cInVzZXJSZWdpc3RlcigpOyAoZmFsc2UpXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXG4gICAgICAgICAgPjxpIGNsYXNzPVwiZmEgZmEtdXNlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24ubG9naW4nIHwgdHJhbnNsYXRlIH19PC9hXG4gICAgICAgID5cbiAgICAgIDwvbGk+XG5cbiAgICAgIDxsaSAqbmdJZj1cImNvbmZpZ1NlcnZpY2UubG9naW5BdmFpbGFibGUgJiYgdXNlclNlcnZpY2UuaXNMb2dnZWRJbigpXCIgY2xhc3M9XCJuYXYtaXRlbSBkcm9wZG93blwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rIGRyb3Bkb3duLXRvZ2dsZVwiIGhyZWY9XCIjXCIgaWQ9XCJzZXR0aW5nc0Ryb3Bkb3duXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICA+PGkgY2xhc3M9XCJmYSBmYS11c2VyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIHt7IHVzZXJTZXJ2aWNlLnVzZXJuYW1lIH19XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiIGFyaWEtbGFiZWxsZWRieT1cInNldHRpbmdzRHJvcGRvd25cIj5cbiAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiIChjbGljayk9XCJ1c2VyU2VydmljZS5sb2dvdXQoKTsgKGZhbHNlKVwiIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICA+PGkgY2xhc3M9XCJmYSBmYS1zaWduLW91dFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24ubG9nb3V0JyB8IHRyYW5zbGF0ZSB9fTwvYVxuICAgICAgICAgID5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvbmF2PlxuXG4gIDwhLS0gVGhlIG1haW4gY29udGVudCBmb3IgbGFyZ2VyIHNjcmVlbnMgLS0+XG4gIDxkaXYgY2xhc3M9XCJoLTEwMCBkLW5vbmUgZC1tZC1ibG9ja1wiPlxuICAgIDxkaXYgaWQ9XCJyb3cxXCIgY2xhc3M9XCJzcGxpdCBzcGxpdC12ZXJ0aWNhbCBjbGVhcmZpeCBwdC0zIHBsLTNcIj5cbiAgICAgIDwhLS0gU2NlbmVzIC0tPlxuICAgICAgPGRpdiBpZD1cInNjZW5lc1wiIGNsYXNzPVwic3BsaXQgc3BsaXQtaG9yaXpvbnRhbCBoLTEwMFwiPlxuICAgICAgICA8bGliLWFwcC1zY2VuZSAqbmdJZj1cInByb2plY3RTZXJ2aWNlLnByb2plY3RcIj48L2xpYi1hcHAtc2NlbmU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBQcmVzZXRzIC0tPlxuICAgICAgPGRpdiBpZD1cInByZXNldHNcIiBjbGFzcz1cInNwbGl0IHNwbGl0LWhvcml6b250YWwgaC0xMDBcIj5cbiAgICAgICAgPGxpYi1hcHAtcHJlc2V0ICpuZ0lmPVwicHJvamVjdFNlcnZpY2UucHJvamVjdFwiPjwvbGliLWFwcC1wcmVzZXQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSAzRCBwcmV2aWV3IC0tPlxuICAgICAgPGRpdiBpZD1cInByZXZpZXdcIiBjbGFzcz1cInNwbGl0IHNwbGl0LWhvcml6b250YWwgaC0xMDAgcHItM1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0XCJcbiAgICAgICAgICBjbGFzcz1cImNhcmQgYm9yZGVyLXNlY29uZGFyeSBoLTEwMFwiXG4gICAgICAgICAgW2NsYXNzLmNhcmQtaW50cm8tYWN0aXZlXT1cImludHJvU2VydmljZS5zaG93U3RlcCgncHJldmlldycpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0wIGgtMTAwXCI+XG4gICAgICAgICAgICA8bGliLWFwcC1wcmV2aWV3IGNsYXNzPVwiaC0xMDBcIj48L2xpYi1hcHAtcHJldmlldz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgaWQ9XCJyb3cyXCIgY2xhc3M9XCJzcGxpdCBzcGxpdC12ZXJ0aWNhbCBjbGVhcmZpeCBweC0zIGQtZmxleFwiIHN0eWxlPVwiZmxleC1kaXJlY3Rpb246IHJvd1wiPlxuICAgICAgPCEtLSBNZW51IGZvciB0aGUgY2FwYWJpbGl0aWVzLCBjaGFubmVscywgZWZmZWN0cyBhbmQgc2V0dGluZ3MgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwicHJvamVjdFNlcnZpY2UucHJvamVjdFwiIGNsYXNzPVwiY29sIGNvbC1hdXRvIHAtMFwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAtMXB4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYXYgZmxleC1jb2x1bW4gbmF2LXBpbGxzXCIgaWQ9XCJ2LXBpbGxzLXRhYlwiIHJvbGU9XCJ0YWJsaXN0XCIgYXJpYS1vcmllbnRhdGlvbj1cInZlcnRpY2FsXCI+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgcHgtMyBhY3RpdmVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5UYWIoJ2NhcGFiaWxpdGllcycpXCJcbiAgICAgICAgICAgIGlkPVwidi1waWxscy1jYXBhYmlsaXRpZXMtdGFiXCJcbiAgICAgICAgICAgIHBvcG92ZXI9XCJ7eyAnZGVzaWduZXIubWlzYy5jYXBhYmlsaXRpZXMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgdHJpZ2dlcnM9XCJtb3VzZWVudGVyOm1vdXNlbGVhdmVcIlxuICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJwaWxsXCJcbiAgICAgICAgICAgIGhyZWY9XCIjdi1waWxscy1jYXBhYmlsaXRpZXNcIlxuICAgICAgICAgICAgcm9sZT1cInRhYlwiXG4gICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwidi1waWxscy1jYXBhYmlsaXRpZXNcIlxuICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD1cInRydWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYm9sdCBmYS1md1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgcHgtM1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlblRhYignY2hhbm5lbHMnKVwiXG4gICAgICAgICAgICBpZD1cInYtcGlsbHMtY2hhbm5lbHMtdGFiXCJcbiAgICAgICAgICAgIHBvcG92ZXI9XCJ7eyAnZGVzaWduZXIubWlzYy5jaGFubmVscycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICB0cmlnZ2Vycz1cIm1vdXNlZW50ZXI6bW91c2VsZWF2ZVwiXG4gICAgICAgICAgICBkYXRhLXRvZ2dsZT1cInBpbGxcIlxuICAgICAgICAgICAgaHJlZj1cIiN2LXBpbGxzLWNoYW5uZWxzXCJcbiAgICAgICAgICAgIHJvbGU9XCJ0YWJcIlxuICAgICAgICAgICAgYXJpYS1jb250cm9scz1cInYtcGlsbHMtY2hhbm5lbHNcIlxuICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD1cImZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNsaWRlcnMgZmEtZndcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIHB4LTNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5UYWIoJ2VmZmVjdHMnKVwiXG4gICAgICAgICAgICBpZD1cInYtcGlsbHMtZWZmZWN0cy10YWJcIlxuICAgICAgICAgICAgcG9wb3Zlcj1cInt7ICdkZXNpZ25lci5taXNjLmVmZmVjdHMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgdHJpZ2dlcnM9XCJtb3VzZWVudGVyOm1vdXNlbGVhdmVcIlxuICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJwaWxsXCJcbiAgICAgICAgICAgIGhyZWY9XCIjdi1waWxscy1lZmZlY3RzXCJcbiAgICAgICAgICAgIHJvbGU9XCJ0YWJcIlxuICAgICAgICAgICAgYXJpYS1jb250cm9scz1cInYtcGlsbHMtZWZmZWN0c1wiXG4gICAgICAgICAgICBhcmlhLXNlbGVjdGVkPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbWFnaWMgZmEtZndcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIHB4LTNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5UYWIoJ3NldHRpbmdzJylcIlxuICAgICAgICAgICAgaWQ9XCJ2LXBpbGxzLXNldHRpbmdzLXRhYlwiXG4gICAgICAgICAgICBwb3BvdmVyPVwie3sgJ2Rlc2lnbmVyLm1pc2Muc2V0dGluZ3MnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgdHJpZ2dlcnM9XCJtb3VzZWVudGVyOm1vdXNlbGVhdmVcIlxuICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJwaWxsXCJcbiAgICAgICAgICAgIGhyZWY9XCIjdi1waWxscy1zZXR0aW5nc1wiXG4gICAgICAgICAgICByb2xlPVwidGFiXCJcbiAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJ2LXBpbGxzLXNldHRpbmdzXCJcbiAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICBzdHlsZT1cImJvcmRlci10b3A6IDFweCBzb2xpZCAjNDQ0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNvZyBmYS1md1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgaWQ9XCJjYXBhYmlsaXRpZXNcIiBjbGFzcz1cInNwbGl0IHNwbGl0LWhvcml6b250YWwgaC0xMDBcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMXJlbVwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvamVjdFNlcnZpY2UucHJvamVjdFwiIGNsYXNzPVwicm93IGgtMTAwXCI+XG4gICAgICAgICAgPCEtLSBDb250ZW50IGZvciB0aGUgY2FwYWJpbGl0aWVzLCBjaGFubmVscywgZWZmZWN0cyBhbmQgc2V0dGluZ3MgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBwbC0wIGgtMTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnQgaC0xMDBcIiBpZD1cInYtcGlsbHMtdGFiQ29udGVudFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLXBhbmUgaC0xMDAgc2hvdyBhY3RpdmVcIiBpZD1cInYtcGlsbHMtY2FwYWJpbGl0aWVzXCIgcm9sZT1cInRhYnBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1hcHAtZml4dHVyZS1jYXBhYmlsaXR5PjwvbGliLWFwcC1maXh0dXJlLWNhcGFiaWxpdHk+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLXBhbmUgaC0xMDAgc2hvd1wiIGlkPVwidi1waWxscy1jaGFubmVsc1wiIHJvbGU9XCJ0YWJwYW5lbFwiPlxuICAgICAgICAgICAgICAgIDxsaWItYXBwLWZpeHR1cmUtY2hhbm5lbD48L2xpYi1hcHAtZml4dHVyZS1jaGFubmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1wYW5lIGgtMTAwXCIgaWQ9XCJ2LXBpbGxzLWVmZmVjdHNcIiByb2xlPVwidGFicGFuZWxcIiBhcmlhLWxhYmVsbGVkYnk9XCJ2LXBpbGxzLXByb2ZpbGUtdGFiXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1hcHAtZWZmZWN0PjwvbGliLWFwcC1lZmZlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLXBhbmUgaC0xMDBcIiBpZD1cInYtcGlsbHMtc2V0dGluZ3NcIiByb2xlPVwidGFicGFuZWxcIiBhcmlhLWxhYmVsbGVkYnk9XCJ2LXBpbGxzLWhvbWUtdGFiXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1hcHAtZml4dHVyZS1zZXR0aW5ncz48L2xpYi1hcHAtZml4dHVyZS1zZXR0aW5ncz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGaXh0dXJlcyAtLT5cbiAgICAgIDxkaXYgaWQ9XCJmaXh0dXJlc1wiIGNsYXNzPVwic3BsaXQgc3BsaXQtaG9yaXpvbnRhbCBoLTEwMFwiPlxuICAgICAgICA8bGliLWFwcC1maXh0dXJlICpuZ0lmPVwicHJvamVjdFNlcnZpY2UucHJvamVjdFwiPjwvbGliLWFwcC1maXh0dXJlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTWFzdGVyIGRpbW1lciAtLT5cbiAgICAgIDxkaXYgaWQ9XCJtYXN0ZXJEaW1tZXJcIiBjbGFzcz1cInNwbGl0IHNwbGl0LWhvcml6b250YWwgaC0xMDBcIj5cbiAgICAgICAgPGxpYi1hcHAtbWFzdGVyLWRpbW1lciAqbmdJZj1cInByb2plY3RTZXJ2aWNlLnByb2plY3RcIj48L2xpYi1hcHAtbWFzdGVyLWRpbW1lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBUaW1lbGluZSAtLT5cbiAgICA8ZGl2IGlkPVwicm93M1wiIGNsYXNzPVwic3BsaXQgc3BsaXQtdmVydGljYWwgY2xlYXJmaXggcHgtMyBwYi0zXCIgc3R5bGU9XCJwYWRkaW5nLWJvdHRvbTogMjBweFwiPlxuICAgICAgPGxpYi1hcHAtdGltZWxpbmUgKm5nSWY9XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0XCI+PC9saWItYXBwLXRpbWVsaW5lPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRoZSBjb21wb25lbnRzIGZvciBzbWFsbCBzY3JlZW5zIC0tPlxuICA8ZGl2IGNsYXNzPVwiZC1tZC1ub25lIHAtM1wiPlxuICAgIDxkaXY+XG4gICAgICA8bGliLWFwcC1tYXN0ZXItZGltbWVyICpuZ0lmPVwicHJvamVjdFNlcnZpY2UucHJvamVjdFwiPjwvbGliLWFwcC1tYXN0ZXItZGltbWVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cbiAgICAgIDxsaWItYXBwLXNjZW5lICpuZ0lmPVwicHJvamVjdFNlcnZpY2UucHJvamVjdFwiPjwvbGliLWFwcC1zY2VuZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGxpYi1hcHAtaW50cm8gY2xhc3M9XCJkLW5vbmUgZC1tZC1mbGV4XCI+PC9saWItYXBwLWludHJvPlxuIl19
672
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9kZXNpZ25lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2Rlc2lnbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxLQUFLLE1BQU0sVUFBVSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0s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QTVCLGlEQUE0Qjs7O2lGRGhPckMsaUJBQWlCO2NBTjdCLFNBQVM7MkJBQ0UsY0FBYyxpQkFHVCxpQkFBaUIsQ0FBQyxJQUFJO2dkQUlqQyxZQUFZO2tCQURmLEtBQUs7WUFPRiw2QkFBNkI7a0JBRGhDLEtBQUs7WUFNRixPQUFPO2tCQURWLEtBQUs7WUFNRixrQkFBa0I7a0JBRHJCLEtBQUs7WUFNRixjQUFjO2tCQURqQixLQUFLO1lBTUYsY0FBYztrQkFEakIsS0FBSztZQU1GLGNBQWM7a0JBRGpCLEtBQUs7WUFNRixrQkFBa0I7a0JBRHJCLEtBQUs7WUFNRixXQUFXO2tCQURkLEtBQUs7WUFNRixhQUFhO2tCQURoQixLQUFLO1lBTUYsS0FBSztrQkFEUixLQUFLO1lBT0Ysa0JBQWtCO2tCQURyQixLQUFLO1lBTUYsZ0JBQWdCO2tCQURuQixLQUFLO1lBZU4sZ0JBQWdCO2tCQURmLFNBQVM7bUJBQUMsZ0JBQWdCO1lBSTNCLGlCQUFpQjtrQkFEaEIsU0FBUzttQkFBQyxpQkFBaUI7WUE4TzVCLG1CQUFtQjtrQkFEbEIsWUFBWTttQkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7a0ZBN1RqQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCBTcGxpdCBmcm9tICdzcGxpdC5qcyc7XG5pbXBvcnQgeyBQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi9wcmV2aWV3L3ByZXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2plY3RCcm93c2VyQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9qZWN0L3Byb2plY3QtYnJvd3Nlci9wcm9qZWN0LWJyb3dzZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2plY3RJbXBvcnRDb21wb25lbnQgfSBmcm9tICcuL3Byb2plY3QvcHJvamVjdC1pbXBvcnQvcHJvamVjdC1pbXBvcnQuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2plY3RTYXZlQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9qZWN0L3Byb2plY3Qtc2F2ZS9wcm9qZWN0LXNhdmUuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2plY3RTaGFyZUNvbXBvbmVudCB9IGZyb20gJy4vcHJvamVjdC9wcm9qZWN0LXNoYXJlL3Byb2plY3Qtc2hhcmUuY29tcG9uZW50JztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9yRGlhbG9nU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZXJyb3ItZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRml4dHVyZVBvb2xTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9maXh0dXJlLXBvb2wuc2VydmljZSc7XG5pbXBvcnQgeyBGaXh0dXJlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlJztcbmltcG9ydCB7IEhvdGtleVRhcmdldEV4Y2x1ZGVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9ob3RrZXktdGFyZ2V0LWV4Y2x1ZGUuc2VydmljZSc7XG5pbXBvcnQgeyBJbnRyb1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2ludHJvLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvamVjdExvYWRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wcm9qZWN0LWxvYWQuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9qZWN0U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcHJvamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IFRpbWVsaW5lU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdGltZWxpbmUuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyRW5zdXJlTG9naW5TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLWVuc3VyZS1sb2dpbi5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2FybmluZ0RpYWxvZ1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3dhcm5pbmctZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGltZWxpbmVDb21wb25lbnQgfSBmcm9tICcuL3RpbWVsaW5lL3RpbWVsaW5lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVc2VyUmVnaXN0ZXJDb21wb25lbnQgfSBmcm9tICcuL3VzZXIvdXNlci1yZWdpc3Rlci91c2VyLXJlZ2lzdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRlc2lnbmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rlc2lnbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGVzaWduZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRGVzaWduZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKVxuICBzZXQgbWVudUhlaWdodFB4KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UubWVudUhlaWdodFB4ID0gdmFsdWU7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLm1lbnVIZWlnaHRDaGFuZ2VkLm5leHQoKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBleHRlcm5hbENvbXBvc2l0aW9uc0F2YWlsYWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMudGltZWxpbmVTZXJ2aWNlLmV4dGVybmFsQ29tcG9zaXRpb25zQXZhaWxhYmxlID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgcmVzdFVybCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLnJlc3RVcmwgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBlbmFibGVNZWRpYUxpYnJhcnkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuZW5hYmxlTWVkaWFMaWJyYXJ5ID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbG9naW5BdmFpbGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UubG9naW5BdmFpbGFibGUgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBzaGFyZUF2YWlsYWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29uZmlnU2VydmljZS5zaGFyZUF2YWlsYWJsZSA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGxhbmd1YWdlU3dpdGNoKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLmxhbmd1YWdlU3dpdGNoID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbmV3UHJvamVjdFRlbXBsYXRlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLm5ld1Byb2plY3RUZW1wbGF0ZSA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGxpdmVQcmV2aWV3KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLmxpdmVQcmV2aWV3ID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbG9jYWxQcm9maWxlcyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29uZmlnU2VydmljZS5sb2NhbFByb2ZpbGVzID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgaW50cm8odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaW50cm8gPSB2YWx1ZTtcbiAgICB0aGlzLmludHJvU2VydmljZS5yZWZyZXNoKCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdW5pcXVlUHJvamVjdE5hbWVzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLnVuaXF1ZVByb2plY3ROYW1lcyA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGRyb3B6b25lQ2h1bmtpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuZHJvcHpvbmVDaHVua2luZyA9IHZhbHVlO1xuICB9XG5cbiAgLy8gdGhlIHNpemUgb2YgdGhlIG1lbnUgdXNlZCBpbiB0aGUgZGVzaWduZXJcbiAgcHJpdmF0ZSBkZXNpZ25lck1lbnVTaXplUHggPSAyMDtcblxuICBwcml2YXRlIHNwbGl0R3V0dGVyU2l6ZVB4ID0gMTM7XG5cbiAgcHVibGljIHRvdGFsTWVudUhlaWdodFB4ID0gMDtcblxuICBjdXJyZW50VGFiID0gJ3Byb3BlcnRpZXMnO1xuXG4gIEBWaWV3Q2hpbGQoUHJldmlld0NvbXBvbmVudClcbiAgcHJldmlld0NvbXBvbmVudDogUHJldmlld0NvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKFRpbWVsaW5lQ29tcG9uZW50KVxuICB0aW1lbGluZUNvbXBvbmVudDogVGltZWxpbmVDb21wb25lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBwcm9qZWN0U2VydmljZTogUHJvamVjdFNlcnZpY2UsXG4gICAgcHVibGljIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXh0dXJlUG9vbFNlcnZpY2U6IEZpeHR1cmVQb29sU2VydmljZSxcbiAgICBwcml2YXRlIGhvdGtleVRhcmdldEV4Y2x1ZGVTZXJ2aWNlOiBIb3RrZXlUYXJnZXRFeGNsdWRlU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHVibGljIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJFbnN1cmVMb2dpblNlcnZpY2U6IFVzZXJFbnN1cmVMb2dpblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcm9qZWN0TG9hZFNlcnZpY2U6IFByb2plY3RMb2FkU2VydmljZSxcbiAgICBwcml2YXRlIHdhcm5pbmdEaWFsb2dTZXJ2aWNlOiBXYXJuaW5nRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIGVycm9yRGlhbG9nU2VydmljZTogRXJyb3JEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGltZWxpbmVTZXJ2aWNlOiBUaW1lbGluZVNlcnZpY2UsXG4gICAgcHVibGljIGludHJvU2VydmljZTogSW50cm9TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuY29uZmlnU2VydmljZS5tZW51SGVpZ2h0Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjVG90YWxNZW51SGVpZ2h0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRFcnJvcihyZXNwb25zZTogYW55KSB7XG4gICAgY29uc29sZS5lcnJvcihyZXNwb25zZSk7XG4gICAgbGV0IG1zZyA9ICdkZXNpZ25lci5wcm9qZWN0Lm9wZW4tZXJyb3InO1xuICAgIGxldCBlcnJvcjogc3RyaW5nO1xuICAgIGlmIChyZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICBlcnJvciA9IHJlc3BvbnNlICYmIHJlc3BvbnNlLmVycm9yID8gcmVzcG9uc2UuZXJyb3IuZXJyb3IgOiAndW5rbm93bic7XG4gICAgICBpZiAoZXJyb3IgPT09ICduby1wZXJtaXNzaW9uJykge1xuICAgICAgICBtc2cgPSAnZGVzaWduZXIucHJvamVjdC5vcGVuLW5vLXBlcm1pc3Npb24tZXJyb3InO1xuICAgICAgICBlcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1zZyA9ICdkZXNpZ25lci5wcm9qZWN0Lm9wZW4tZXJyb3InO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvciA9IHJlc3BvbnNlICYmIHJlc3BvbnNlLm1lc3NhZ2UgPyByZXNwb25zZS5tZXNzYWdlIDogJ3Vua25vd24nO1xuICAgIH1cbiAgICB0aGlzLmVycm9yRGlhbG9nU2VydmljZS5zaG93KG1zZywgZXJyb3IpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnByb2plY3RMb2FkU2VydmljZS5uZXcoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKSkge1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS51c2UoJ2VuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jYWxjVG90YWxNZW51SGVpZ2h0KCk7XG5cbiAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIGNvbnN0IHByb2plY3RJZCA9IHVybFBhcmFtcy5nZXQoJ2lkJyk7XG4gICAgY29uc3QgcHJvamVjdE5hbWUgPSB1cmxQYXJhbXMuZ2V0KCduYW1lJyk7XG4gICAgbGV0IHNoYXJlVG9rZW4gPSB1cmxQYXJhbXMuZ2V0KCd0b2tlbicpO1xuXG4gICAgaWYgKHByb2plY3RJZCkge1xuICAgICAgLy8gbG9hZCBhIHByb2plY3QgYnkgcXVlcnkgcGFyYW0gSURcbiAgICAgIGlmICghc2hhcmVUb2tlbikge1xuICAgICAgICBzaGFyZVRva2VuID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJvamVjdExvYWRTZXJ2aWNlLmxvYWQoTnVtYmVyLnBhcnNlSW50KHByb2plY3RJZCwgMTApLCBwcm9qZWN0TmFtZSwgc2hhcmVUb2tlbikuc3Vic2NyaWJlKFxuICAgICAgICAoKSA9PiB7fSxcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkRXJyb3IocmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAodGhpcy51c2VyU2VydmljZS5pc0xvZ2dlZEluKCkgfHwgIXRoaXMuY29uZmlnU2VydmljZS5sb2dpbkF2YWlsYWJsZSkgJiZcbiAgICAgICh0aGlzLnVzZXJTZXJ2aWNlLmdldEF1dG9Mb2FkUHJvamVjdElkKCkgfHwgdGhpcy51c2VyU2VydmljZS5nZXRBdXRvTG9hZFByb2plY3ROYW1lKCkpXG4gICAgKSB7XG4gICAgICAvLyByZXN0b3JlIHRoZSBsYXN0IHNhdmVkIHByb2plY3RcbiAgICAgIHRoaXMucHJvamVjdExvYWRTZXJ2aWNlLmxvYWQodGhpcy51c2VyU2VydmljZS5nZXRBdXRvTG9hZFByb2plY3RJZCgpLCB0aGlzLnVzZXJTZXJ2aWNlLmdldEF1dG9Mb2FkUHJvamVjdE5hbWUoKSkuc3Vic2NyaWJlKFxuICAgICAgICAoKSA9PiB7fSxcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkRXJyb3IocmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLm5ld1Byb2plY3RUZW1wbGF0ZSkge1xuICAgICAgICAvLyBsb2FkIHRoZSBuZXcgcHJvamVjdCB0ZW1wbGF0ZVxuICAgICAgICB0aGlzLnByb2plY3RMb2FkU2VydmljZS50ZW1wbGF0ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0TG9hZFNlcnZpY2UubmV3KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYWxjVG90YWxNZW51SGVpZ2h0KCkge1xuICAgIHRoaXMudG90YWxNZW51SGVpZ2h0UHggPSB0aGlzLmRlc2lnbmVyTWVudVNpemVQeCArIHRoaXMuc3BsaXRHdXR0ZXJTaXplUHggKyB0aGlzLmNvbmZpZ1NlcnZpY2UubWVudUhlaWdodFB4O1xuICB9XG5cbiAgcHJpdmF0ZSBvblJlc2l6ZSgpIHtcbiAgICBpZiAodGhpcy5wcmV2aWV3Q29tcG9uZW50KSB7XG4gICAgICB0aGlzLnByZXZpZXdDb21wb25lbnQub25SZXNpemUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50aW1lbGluZUNvbXBvbmVudCkge1xuICAgICAgdGhpcy50aW1lbGluZUNvbXBvbmVudC5vblJlc2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZXQgdXAgdGhlIHNwbGl0dGVyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBTcGxpdChbJyNyb3cxJywgJyNyb3cyJywgJyNyb3czJ10sIHtcbiAgICAgICAgc2l6ZXM6IFs0MiwgNDAsIDE4XSxcbiAgICAgICAgZGlyZWN0aW9uOiAndmVydGljYWwnLFxuICAgICAgICBjdXJzb3I6ICdyb3ctcmVzaXplJyxcbiAgICAgICAgc25hcE9mZnNldDogMCxcbiAgICAgICAgZ3V0dGVyU2l6ZTogdGhpcy5zcGxpdEd1dHRlclNpemVQeCxcbiAgICAgICAgb25EcmFnOiB0aGlzLm9uUmVzaXplLmJpbmQodGhpcyksXG4gICAgICB9KTtcblxuICAgICAgU3BsaXQoWycjc2NlbmVzJywgJyNwcmVzZXRzJywgJyNwcmV2aWV3J10sIHtcbiAgICAgICAgc2l6ZXM6IFsyMCwgMjAsIDYwXSxcbiAgICAgICAgc25hcE9mZnNldDogMCxcbiAgICAgICAgZ3V0dGVyU2l6ZTogdGhpcy5zcGxpdEd1dHRlclNpemVQeCxcbiAgICAgICAgb25EcmFnOiB0aGlzLm9uUmVzaXplLmJpbmQodGhpcyksXG4gICAgICB9KTtcblxuICAgICAgU3BsaXQoWycjY2FwYWJpbGl0aWVzJywgJyNmaXh0dXJlcycsICcjbWFzdGVyRGltbWVyJ10sIHtcbiAgICAgICAgc2l6ZXM6IFs3MCwgMjQsIDZdLFxuICAgICAgICBzbmFwT2Zmc2V0OiAwLFxuICAgICAgICBndXR0ZXJTaXplOiB0aGlzLnNwbGl0R3V0dGVyU2l6ZVB4LFxuICAgICAgICBvbkRyYWc6IHRoaXMub25SZXNpemUuYmluZCh0aGlzKSxcbiAgICAgICAgbWluU2l6ZTogNTAsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5vblJlc2l6ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgb3BlblRhYih0YWI6IHN0cmluZykge1xuICAgIC8vIG9wZW4gYSBzaWRlIHRhYiAoZS5nLiBlZmZlY3RzLCBjaGFubmVscywgc2V0dGluZ3MsIGV0Yy4pXG5cbiAgICBpZiAodGFiID09PSAnc2V0dGluZ3MnKSB7XG4gICAgICB0aGlzLmZpeHR1cmVTZXJ2aWNlLnNldHRpbmdzU2VsZWN0aW9uID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maXh0dXJlU2VydmljZS5zZXR0aW5nc1NlbGVjdGlvbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFRhYiA9IHRhYjtcbiAgfVxuXG4gIG9wZW5GaXh0dXJlUG9vbCgpIHtcbiAgICB0aGlzLmZpeHR1cmVQb29sU2VydmljZS5vcGVuKCk7XG4gIH1cblxuICBwcm9qZWN0TmV3KCkge1xuICAgIHRoaXMud2FybmluZ0RpYWxvZ1NlcnZpY2VcbiAgICAgIC5zaG93KCdkZXNpZ25lci5taXNjLndhcm5pbmctcHJvY2VlZC11bnNhdmVkJylcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdExvYWRTZXJ2aWNlLm5ldygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByb2plY3RPcGVuKCkge1xuICAgIHRoaXMud2FybmluZ0RpYWxvZ1NlcnZpY2VcbiAgICAgIC5zaG93KCdkZXNpZ25lci5taXNjLndhcm5pbmctcHJvY2VlZC11bnNhdmVkJylcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMudXNlckVuc3VyZUxvZ2luU2VydmljZS5sb2dpbigpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coUHJvamVjdEJyb3dzZXJDb21wb25lbnQsIHsga2V5Ym9hcmQ6IHRydWUsIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IGZhbHNlIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvamVjdFNhdmUoKSB7XG4gICAgdGhpcy51c2VyRW5zdXJlTG9naW5TZXJ2aWNlLmxvZ2luKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QubmFtZSkge1xuICAgICAgICAvLyB0aGlzIHByb2plY3QgaGFzIGJlZW4gc2F2ZWQgYmVmb3JlIC0+IGp1c3Qgc2F2ZSBpdCBhZ2FpblxuICAgICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnNhdmUodGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoaXMgcHJvamVjdCBoYXMgbm90IHlldCBiZWVuIHNhdmVkIC0+IHNob3cgdGhlIHNhdmUgYXMtZGlhbG9nXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coUHJvamVjdFNhdmVDb21wb25lbnQsIHsga2V5Ym9hcmQ6IHRydWUsIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvamVjdFNhdmVBcygpIHtcbiAgICB0aGlzLnVzZXJFbnN1cmVMb2dpblNlcnZpY2UubG9naW4oKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhQcm9qZWN0U2F2ZUNvbXBvbmVudCwgeyBrZXlib2FyZDogdHJ1ZSwgaWdub3JlQmFja2Ryb3BDbGljazogZmFsc2UgfSk7XG4gICAgfSk7XG4gIH1cblxuICB1c2VyUmVnaXN0ZXIoKSB7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhVc2VyUmVnaXN0ZXJDb21wb25lbnQsIHsga2V5Ym9hcmQ6IHRydWUsIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IGZhbHNlIH0pO1xuICB9XG5cbiAgcHJvamVjdEltcG9ydCgpIHtcbiAgICB0aGlzLndhcm5pbmdEaWFsb2dTZXJ2aWNlXG4gICAgICAuc2hvdygnZGVzaWduZXIubWlzYy53YXJuaW5nLXByb2NlZWQtdW5zYXZlZCcpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5zaG93KFByb2plY3RJbXBvcnRDb21wb25lbnQsIHsga2V5Ym9hcmQ6IHRydWUsIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IGZhbHNlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByb2plY3RFeHBvcnQoKSB7XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdCwgbnVsbCwgMik7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnaHJlZicsICdkYXRhOnRleHQvanNvbjtjaGFyc2V0PVVURi04LCcgKyBlbmNvZGVVUklDb21wb25lbnQoanNvbikpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5uYW1lICsgJy5yc2QnKTtcbiAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgICBlbGVtZW50LmNsaWNrKCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbGVtZW50KTtcbiAgfVxuXG4gIHByb2plY3RTaGFyZSgpIHtcbiAgICBpZiAoIXRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5pZCkge1xuICAgICAgLy8gYSBzYXZlIGlzIHJlcXVpcmVkIGZpcnN0XG4gICAgICB0aGlzLmVycm9yRGlhbG9nU2VydmljZS5zaG93KCdkZXNpZ25lci5wcm9qZWN0LnNoYXJlLW5vLXNhdmUnKS5zdWJzY3JpYmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZ25vcmUgYmFja2Ryb3AgY2xpY2ssIGJlY2F1c2Ugc2VsZWN0aW5nIHRoZSBsaW5rIHRleHQgd2lsbCBhbHNvIGNsb3NlIHRoZSBtb2RhbFxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coUHJvamVjdFNoYXJlQ29tcG9uZW50LCB7IGtleWJvYXJkOiB0cnVlLCBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmhvdGtleVRhcmdldEV4Y2x1ZGVTZXJ2aWNlLmV4Y2x1ZGUoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ3AnKSB7XG4gICAgICB0aGlzLm9wZW5GaXh0dXJlUG9vbCgpO1xuXG4gICAgICAvLyBwcmV2ZW50IGNoZWNrYm94ZXMgYmVpbmcgdG9nZ2xlZCwgaWYgaW4gZm9jdXMgZS5nLlxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkgPT09ICduJykge1xuICAgICAgdGhpcy5wcm9qZWN0TmV3KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleSA9PT0gJ3MnKSB7XG4gICAgICB0aGlzLnByb2plY3RTYXZlKCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleSA9PT0gJ28nKSB7XG4gICAgICB0aGlzLnByb2plY3RPcGVuKCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoTGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZykge1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS51c2UobGFuZ3VhZ2UpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdsYW5ndWFnZScsIGxhbmd1YWdlKTtcbiAgfVxufVxuIiwiPCEtLSBXcmFwIHRoZSB3aG9sZSBjb21wb25lbnQgaW5zaWRlIGEgZGl2IHRvIGVuY2Fwc3VsYXRlIHRoZSBDU1MgLS0+XG5cbjwhLS0gMTAwICUgaGVpZ2h0IG1pbnVzIHRoZSBtZW51IGJhciBhYm92ZSBhbmQgdGhlIGd1dHRlciBzaXplIG9mIDEzIHB4IC0tPlxuPCEtLSA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMCUgLSAzM3B4KVwiPiAtLT5cbjxkaXYgaWQ9XCJkZXNpZ25lclwiIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiAnY2FsYygxMDAlIC0gJyArIHRvdGFsTWVudUhlaWdodFB4ICsgJ3B4KScgfVwiPlxuICA8IS0tIE5hdmlnYXRpb24gLS0+XG4gIDxuYXZcbiAgICBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLWxnIG5hdmJhci1saWdodCBiZy1saWdodCBib3JkZXItc2Vjb25kYXJ5XCJcbiAgICBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNDQ0OyBoZWlnaHQ6IDIwcHg7IHotaW5kZXg6IDk5OTlcIlxuICA+XG4gICAgPCEtLSBNZW51IGJ1dHRvbnMgLS0+XG4gICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdiBtci1hdXRvXCI+XG4gICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBkcm9wZG93blwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rIGRyb3Bkb3duLXRvZ2dsZVwiIGhyZWY9XCIjXCIgaWQ9XCJmaWxlRHJvcGRvd25cIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICB7eyAnZGVzaWduZXIubmF2aWdhdGlvbi5wcm9qZWN0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2E+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZmlsZURyb3Bkb3duXCI+XG4gICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGQtbm9uZSBkLW1kLWJsb2NrXCIgaHJlZj1cIiNcIiAoY2xpY2spPVwicHJvamVjdE5ldygpOyAoZmFsc2UpXCJcbiAgICAgICAgICAgID48aSBjbGFzcz1cImZhIGZhLWZ3IGZhLWZpbGUtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24ucHJvamVjdC1uZXcnIHwgdHJhbnNsYXRlIH19PC9hXG4gICAgICAgICAgPlxuICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCIgKGNsaWNrKT1cInByb2plY3RPcGVuKCk7IChmYWxzZSlcIlxuICAgICAgICAgICAgPjxpIGNsYXNzPVwiZmEgZmEtZncgZmEtZm9sZGVyLW9wZW4tb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24ucHJvamVjdC1vcGVuJyB8IHRyYW5zbGF0ZSB9fTwvYVxuICAgICAgICAgID5cbiAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1ub25lIGQtbWQtYmxvY2tcIiBocmVmPVwiI1wiIChjbGljayk9XCJwcm9qZWN0U2F2ZSgpOyAoZmFsc2UpXCJcbiAgICAgICAgICAgID48aSBjbGFzcz1cImZhIGZhLWZ3IGZhLWZsb3BweS1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7eyAnZGVzaWduZXIubmF2aWdhdGlvbi5wcm9qZWN0LXNhdmUnIHwgdHJhbnNsYXRlIH19PC9hXG4gICAgICAgICAgPlxuICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbSBkLW5vbmUgZC1tZC1ibG9ja1wiIGhyZWY9XCIjXCIgKGNsaWNrKT1cInByb2plY3RTYXZlQXMoKTsgKGZhbHNlKVwiXG4gICAgICAgICAgICA+PGkgY2xhc3M9XCJmYSBmYS1mdyBmYS1mbG9wcHktb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24ucHJvamVjdC1zYXZlLWFzJyB8IHRyYW5zbGF0ZSB9fTwvYVxuICAgICAgICAgID5cbiAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1ub25lIGQtbWQtYmxvY2tcIiBocmVmPVwiI1wiIChjbGljayk9XCJwcm9qZWN0SW1wb3J0KCk7IChmYWxzZSlcIlxuICAgICAgICAgICAgPjxpIGNsYXNzPVwiZmEgZmEtZncgZmEtZG93bmxvYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdkZXNpZ25lci5uYXZpZ2F0aW9uLnByb2plY3QtaW1wb3J0JyB8IHRyYW5zbGF0ZSB9fTwvYVxuICAgICAgICAgID5cbiAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1ub25lIGQtbWQtYmxvY2tcIiBocmVmPVwiI1wiIChjbGljayk9XCJwcm9qZWN0RXhwb3J0KCk7IChmYWxzZSlcIlxuICAgICAgICAgICAgPjxpIGNsYXNzPVwiZmEgZmEtZncgZmEtZXh0ZXJuYWwtbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24ucHJvamVjdC1leHBvcnQnIHwgdHJhbnNsYXRlIH19PC9hXG4gICAgICAgICAgPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBkcm9wZG93biBkLW5vbmUgZC1tZC1ibG9ja1wiPlxuICAgICAgICA8YVxuICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICBocmVmPVwiI1wiXG4gICAgICAgICAgaWQ9XCJzZXR0aW5nc0Ryb3Bkb3duXCJcbiAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdkZXNpZ25lci5uYXZpZ2F0aW9uLnNldHRpbmdzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2E+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwic2V0dGluZ3NEcm9wZG93blwiPlxuICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCIgKGNsaWNrKT1cIm9wZW5GaXh0dXJlUG9vbCgpOyAoZmFsc2UpXCI+e3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24uZml4dHVyZS1wb29sJyB8IHRyYW5zbGF0ZSB9fTwvYT5cbiAgICAgICAgICA8IS0tIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCI+e3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24uc3RhZ2UnIHwgdHJhbnNsYXRlIH19PC9hPiAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gZHJvcGRvd24gZC1ub25lIGQtbWQtYmxvY2tcIj5cbiAgICAgICAgPGFcbiAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgaHJlZj1cIiNcIlxuICAgICAgICAgIGlkPVwic2V0dGluZ3NEcm9wZG93blwiXG4gICAgICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnZGVzaWduZXIubmF2aWdhdGlvbi5oZWxwJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2E+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwic2V0dGluZ3NEcm9wZG93blwiPlxuICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCIgKGNsaWNrKT1cImludHJvU2VydmljZS5yZXNldCgpOyAoZmFsc2UpXCI+e3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24ucmVzZXQtaW50cm8nIHwgdHJhbnNsYXRlIH19PC9hPlxuICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCJodHRwczovL3JvY2tldHNob3cubmV0L3N1cHBvcnQvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3tcbiAgICAgICAgICAgICdkZXNpZ25lci5uYXZpZ2F0aW9uLnN1cHBvcnQnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgfX08L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdlwiPlxuICAgICAgPGxpICpuZ0lmPVwiY29uZmlnU2VydmljZS5zaGFyZUF2YWlsYWJsZVwiIGNsYXNzPVwibmF2LWl0ZW0gZC1ub25lIGQtbWQtZmxleFwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIj5cbiAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwicHJvamVjdFNoYXJlKCk7IChmYWxzZSlcIiByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcbiAgICAgICAgICA+PGkgY2xhc3M9XCJmYSBmYS1zaGFyZS1hbHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdkZXNpZ25lci5uYXZpZ2F0aW9uLnByb2plY3Qtc2hhcmUnIHwgdHJhbnNsYXRlIH19PC9hXG4gICAgICAgID5cbiAgICAgIDwvbGk+XG5cbiAgICAgIDxsaSAqbmdJZj1cImNvbmZpZ1NlcnZpY2UubGFuZ3VhZ2VTd2l0Y2hcIiBjbGFzcz1cIm5hdi1pdGVtIGRyb3Bkb3duXCI+XG4gICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmsgZHJvcGRvd24tdG9nZ2xlXCIgaHJlZj1cIiNcIiBpZD1cInNldHRpbmdzRHJvcGRvd25cIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgID48aSBjbGFzcz1cImZhIGZhLWdsb2JlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIHt7ICdkZXNpZ25lci5taXNjLmxhbmd1YWdlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2E+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHRcIiBhcmlhLWxhYmVsbGVkYnk9XCJzZXR0aW5nc0Ryb3Bkb3duXCI+XG4gICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiNcIiAoY2xpY2spPVwic3dpdGNoTGFuZ3VhZ2UoJ2VuJyk7IChmYWxzZSlcIiB0YXJnZXQ9XCJfYmxhbmtcIj5FbmdsaXNoPC9hPlxuICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCIgKGNsaWNrKT1cInN3aXRjaExhbmd1YWdlKCdkZScpOyAoZmFsc2UpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+RGV1dHNjaDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuXG4gICAgICA8bGkgKm5nSWY9XCJjb25maWdTZXJ2aWNlLmxvZ2luQXZhaWxhYmxlICYmICF1c2VyU2VydmljZS5pc0xvZ2dlZEluKClcIiBjbGFzcz1cIm5hdi1pdGVtXCIgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgKGNsaWNrKT1cInVzZXJSZWdpc3RlcigpOyAoZmFsc2UpXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXG4gICAgICAgICAgPjxpIGNsYXNzPVwiZmEgZmEtdXNlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24ubG9naW4nIHwgdHJhbnNsYXRlIH19PC9hXG4gICAgICAgID5cbiAgICAgIDwvbGk+XG5cbiAgICAgIDxsaSAqbmdJZj1cImNvbmZpZ1NlcnZpY2UubG9naW5BdmFpbGFibGUgJiYgdXNlclNlcnZpY2UuaXNMb2dnZWRJbigpXCIgY2xhc3M9XCJuYXYtaXRlbSBkcm9wZG93blwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rIGRyb3Bkb3duLXRvZ2dsZVwiIGhyZWY9XCIjXCIgaWQ9XCJzZXR0aW5nc0Ryb3Bkb3duXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICA+PGkgY2xhc3M9XCJmYSBmYS11c2VyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIHt7IHVzZXJTZXJ2aWNlLnVzZXJuYW1lIH19XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiIGFyaWEtbGFiZWxsZWRieT1cInNldHRpbmdzRHJvcGRvd25cIj5cbiAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiIChjbGljayk9XCJ1c2VyU2VydmljZS5sb2dvdXQoKTsgKGZhbHNlKVwiIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICA+PGkgY2xhc3M9XCJmYSBmYS1zaWduLW91dFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2Rlc2lnbmVyLm5hdmlnYXRpb24ubG9nb3V0JyB8IHRyYW5zbGF0ZSB9fTwvYVxuICAgICAgICAgID5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvbmF2PlxuXG4gIDwhLS0gVGhlIG1haW4gY29udGVudCBmb3IgbGFyZ2VyIHNjcmVlbnMgLS0+XG4gIDxkaXYgY2xhc3M9XCJoLTEwMCBkLW5vbmUgZC1tZC1ibG9ja1wiPlxuICAgIDxkaXYgaWQ9XCJyb3cxXCIgY2xhc3M9XCJzcGxpdCBzcGxpdC12ZXJ0aWNhbCBjbGVhcmZpeCBwdC0zIHBsLTNcIj5cbiAgICAgIDwhLS0gU2NlbmVzIC0tPlxuICAgICAgPGRpdiBpZD1cInNjZW5lc1wiIGNsYXNzPVwic3BsaXQgc3BsaXQtaG9yaXpvbnRhbCBoLTEwMFwiPlxuICAgICAgICA8bGliLWFwcC1zY2VuZSAqbmdJZj1cInByb2plY3RTZXJ2aWNlLnByb2plY3RcIj48L2xpYi1hcHAtc2NlbmU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBQcmVzZXRzIC0tPlxuICAgICAgPGRpdiBpZD1cInByZXNldHNcIiBjbGFzcz1cInNwbGl0IHNwbGl0LWhvcml6b250YWwgaC0xMDBcIj5cbiAgICAgICAgPGxpYi1hcHAtcHJlc2V0ICpuZ0lmPVwicHJvamVjdFNlcnZpY2UucHJvamVjdFwiPjwvbGliLWFwcC1wcmVzZXQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSAzRCBwcmV2aWV3IC0tPlxuICAgICAgPGRpdiBpZD1cInByZXZpZXdcIiBjbGFzcz1cInNwbGl0IHNwbGl0LWhvcml6b250YWwgaC0xMDAgcHItM1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0XCJcbiAgICAgICAgICBjbGFzcz1cImNhcmQgYm9yZGVyLXNlY29uZGFyeSBoLTEwMFwiXG4gICAgICAgICAgW2NsYXNzLmNhcmQtaW50cm8tYWN0aXZlXT1cImludHJvU2VydmljZS5zaG93U3RlcCgncHJldmlldycpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0wIGgtMTAwXCI+XG4gICAgICAgICAgICA8bGliLWFwcC1wcmV2aWV3IGNsYXNzPVwiaC0xMDBcIj48L2xpYi1hcHAtcHJldmlldz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgaWQ9XCJyb3cyXCIgY2xhc3M9XCJzcGxpdCBzcGxpdC12ZXJ0aWNhbCBjbGVhcmZpeCBweC0zIGQtZmxleFwiIHN0eWxlPVwiZmxleC1kaXJlY3Rpb246IHJvd1wiPlxuICAgICAgPCEtLSBNZW51IGZvciB0aGUgY2FwYWJpbGl0aWVzLCBjaGFubmVscywgZWZmZWN0cyBhbmQgc2V0dGluZ3MgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwicHJvamVjdFNlcnZpY2UucHJvamVjdFwiIGNsYXNzPVwiY29sIGNvbC1hdXRvIHAtMFwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAtMXB4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYXYgZmxleC1jb2x1bW4gbmF2LXBpbGxzXCIgaWQ9XCJ2LXBpbGxzLXRhYlwiIHJvbGU9XCJ0YWJsaXN0XCIgYXJpYS1vcmllbnRhdGlvbj1cInZlcnRpY2FsXCI+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgcHgtMyBhY3RpdmVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5UYWIoJ2NhcGFiaWxpdGllcycpXCJcbiAgICAgICAgICAgIGlkPVwidi1waWxscy1jYXBhYmlsaXRpZXMtdGFiXCJcbiAgICAgICAgICAgIHBvcG92ZXI9XCJ7eyAnZGVzaWduZXIubWlzYy5jYXBhYmlsaXRpZXMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgdHJpZ2dlcnM9XCJtb3VzZWVudGVyOm1vdXNlbGVhdmVcIlxuICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJwaWxsXCJcbiAgICAgICAgICAgIGhyZWY9XCIjdi1waWxscy1jYXBhYmlsaXRpZXNcIlxuICAgICAgICAgICAgcm9sZT1cInRhYlwiXG4gICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwidi1waWxscy1jYXBhYmlsaXRpZXNcIlxuICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD1cInRydWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYm9sdCBmYS1md1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgcHgtM1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlblRhYignY2hhbm5lbHMnKVwiXG4gICAgICAgICAgICBpZD1cInYtcGlsbHMtY2hhbm5lbHMtdGFiXCJcbiAgICAgICAgICAgIHBvcG92ZXI9XCJ7eyAnZGVzaWduZXIubWlzYy5jaGFubmVscycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICB0cmlnZ2Vycz1cIm1vdXNlZW50ZXI6bW91c2VsZWF2ZVwiXG4gICAgICAgICAgICBkYXRhLXRvZ2dsZT1cInBpbGxcIlxuICAgICAgICAgICAgaHJlZj1cIiN2LXBpbGxzLWNoYW5uZWxzXCJcbiAgICAgICAgICAgIHJvbGU9XCJ0YWJcIlxuICAgICAgICAgICAgYXJpYS1jb250cm9scz1cInYtcGlsbHMtY2hhbm5lbHNcIlxuICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD1cImZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNsaWRlcnMgZmEtZndcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIHB4LTNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5UYWIoJ2VmZmVjdHMnKVwiXG4gICAgICAgICAgICBpZD1cInYtcGlsbHMtZWZmZWN0cy10YWJcIlxuICAgICAgICAgICAgcG9wb3Zlcj1cInt7ICdkZXNpZ25lci5taXNjLmVmZmVjdHMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgdHJpZ2dlcnM9XCJtb3VzZWVudGVyOm1vdXNlbGVhdmVcIlxuICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJwaWxsXCJcbiAgICAgICAgICAgIGhyZWY9XCIjdi1waWxscy1lZmZlY3RzXCJcbiAgICAgICAgICAgIHJvbGU9XCJ0YWJcIlxuICAgICAgICAgICAgYXJpYS1jb250cm9scz1cInYtcGlsbHMtZWZmZWN0c1wiXG4gICAgICAgICAgICBhcmlhLXNlbGVjdGVkPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbWFnaWMgZmEtZndcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIHB4LTNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5UYWIoJ3NldHRpbmdzJylcIlxuICAgICAgICAgICAgaWQ9XCJ2LXBpbGxzLXNldHRpbmdzLXRhYlwiXG4gICAgICAgICAgICBwb3BvdmVyPVwie3sgJ2Rlc2lnbmVyLm1pc2Muc2V0dGluZ3MnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgdHJpZ2dlcnM9XCJtb3VzZWVudGVyOm1vdXNlbGVhdmVcIlxuICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJwaWxsXCJcbiAgICAgICAgICAgIGhyZWY9XCIjdi1waWxscy1zZXR0aW5nc1wiXG4gICAgICAgICAgICByb2xlPVwidGFiXCJcbiAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJ2LXBpbGxzLXNldHRpbmdzXCJcbiAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICBzdHlsZT1cImJvcmRlci10b3A6IDFweCBzb2xpZCAjNDQ0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNvZyBmYS1md1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgaWQ9XCJjYXBhYmlsaXRpZXNcIiBjbGFzcz1cInNwbGl0IHNwbGl0LWhvcml6b250YWwgaC0xMDBcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMXJlbVwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvamVjdFNlcnZpY2UucHJvamVjdFwiIGNsYXNzPVwicm93IGgtMTAwXCI+XG4gICAgICAgICAgPCEtLSBDb250ZW50IGZvciB0aGUgY2FwYWJpbGl0aWVzLCBjaGFubmVscywgZWZmZWN0cyBhbmQgc2V0dGluZ3MgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBwbC0wIGgtMTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnQgaC0xMDBcIiBpZD1cInYtcGlsbHMtdGFiQ29udGVudFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLXBhbmUgaC0xMDAgc2hvdyBhY3RpdmVcIiBpZD1cInYtcGlsbHMtY2FwYWJpbGl0aWVzXCIgcm9sZT1cInRhYnBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1hcHAtZml4dHVyZS1jYXBhYmlsaXR5PjwvbGliLWFwcC1maXh0dXJlLWNhcGFiaWxpdHk+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLXBhbmUgaC0xMDAgc2hvd1wiIGlkPVwidi1waWxscy1jaGFubmVsc1wiIHJvbGU9XCJ0YWJwYW5lbFwiPlxuICAgICAgICAgICAgICAgIDxsaWItYXBwLWZpeHR1cmUtY2hhbm5lbD48L2xpYi1hcHAtZml4dHVyZS1jaGFubmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1wYW5lIGgtMTAwXCIgaWQ9XCJ2LXBpbGxzLWVmZmVjdHNcIiByb2xlPVwidGFicGFuZWxcIiBhcmlhLWxhYmVsbGVkYnk9XCJ2LXBpbGxzLXByb2ZpbGUtdGFiXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1hcHAtZWZmZWN0PjwvbGliLWFwcC1lZmZlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLXBhbmUgaC0xMDBcIiBpZD1cInYtcGlsbHMtc2V0dGluZ3NcIiByb2xlPVwidGFicGFuZWxcIiBhcmlhLWxhYmVsbGVkYnk9XCJ2LXBpbGxzLWhvbWUtdGFiXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1hcHAtZml4dHVyZS1zZXR0aW5ncz48L2xpYi1hcHAtZml4dHVyZS1zZXR0aW5ncz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGaXh0dXJlcyAtLT5cbiAgICAgIDxkaXYgaWQ9XCJmaXh0dXJlc1wiIGNsYXNzPVwic3BsaXQgc3BsaXQtaG9yaXpvbnRhbCBoLTEwMFwiPlxuICAgICAgICA8bGliLWFwcC1maXh0dXJlICpuZ0lmPVwicHJvamVjdFNlcnZpY2UucHJvamVjdFwiPjwvbGliLWFwcC1maXh0dXJlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTWFzdGVyIGRpbW1lciAtLT5cbiAgICAgIDxkaXYgaWQ9XCJtYXN0ZXJEaW1tZXJcIiBjbGFzcz1cInNwbGl0IHNwbGl0LWhvcml6b250YWwgaC0xMDBcIj5cbiAgICAgICAgPGxpYi1hcHAtbWFzdGVyLWRpbW1lciAqbmdJZj1cInByb2plY3RTZXJ2aWNlLnByb2plY3RcIj48L2xpYi1hcHAtbWFzdGVyLWRpbW1lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBUaW1lbGluZSAtLT5cbiAgICA8ZGl2IGlkPVwicm93M1wiIGNsYXNzPVwic3BsaXQgc3BsaXQtdmVydGljYWwgY2xlYXJmaXggcHgtMyBwYi0zXCIgc3R5bGU9XCJwYWRkaW5nLWJvdHRvbTogMjBweFwiPlxuICAgICAgPGxpYi1hcHAtdGltZWxpbmUgKm5nSWY9XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0XCI+PC9saWItYXBwLXRpbWVsaW5lPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRoZSBjb21wb25lbnRzIGZvciBzbWFsbCBzY3JlZW5zIC0tPlxuICA8ZGl2IGNsYXNzPVwiZC1tZC1ub25lIHAtM1wiPlxuICAgIDxkaXY+XG4gICAgICA8bGliLWFwcC1tYXN0ZXItZGltbWVyICpuZ0lmPVwicHJvamVjdFNlcnZpY2UucHJvamVjdFwiPjwvbGliLWFwcC1tYXN0ZXItZGltbWVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cbiAgICAgIDxsaWItYXBwLXNjZW5lICpuZ0lmPVwicHJvamVjdFNlcnZpY2UucHJvamVjdFwiPjwvbGliLWFwcC1zY2VuZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGxpYi1hcHAtaW50cm8gY2xhc3M9XCJkLW5vbmUgZC1tZC1mbGV4XCI+PC9saWItYXBwLWludHJvPlxuIl19
@@ -79,6 +79,15 @@ function FixtureCapabilityComponent_div_4_Template(rf, ctx) { if (rf & 1) {
79
79
  i0.ɵɵadvance(2);
80
80
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 1, "designer.fixture.no-fixtures-selected"));
81
81
  } }
82
+ function FixtureCapabilityComponent_div_5_Template(rf, ctx) { if (rf & 1) {
83
+ i0.ɵɵelementStart(0, "div", 10)(1, "p", 11);
84
+ i0.ɵɵtext(2);
85
+ i0.ɵɵpipe(3, "translate");
86
+ i0.ɵɵelementEnd()();
87
+ } if (rf & 2) {
88
+ i0.ɵɵadvance(2);
89
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 1, "designer.fixture.no-capabilities-available"));
90
+ } }
82
91
  export class FixtureCapabilityComponent {
83
92
  constructor(presetService, fixtureService, changeDetectorRef, projectService, introService) {
84
93
  this.presetService = presetService;
@@ -101,7 +110,9 @@ export class FixtureCapabilityComponent {
101
110
  this.changeDetectorRef.detectChanges();
102
111
  });
103
112
  }
104
- ngOnInit() { }
113
+ ngOnInit() {
114
+ this.update();
115
+ }
105
116
  ngOnDestroy() {
106
117
  this.fixtureSelectionChangedSubscription.unsubscribe();
107
118
  this.previewSelectionChangedSubscription.unsubscribe();
@@ -156,9 +167,9 @@ export class FixtureCapabilityComponent {
156
167
  return false;
157
168
  }
158
169
  static { this.ɵfac = function FixtureCapabilityComponent_Factory(t) { return new (t || FixtureCapabilityComponent)(i0.ɵɵdirectiveInject(i1.PresetService), i0.ɵɵdirectiveInject(i2.FixtureService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i3.ProjectService), i0.ɵɵdirectiveInject(i4.IntroService)); }; }
159
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FixtureCapabilityComponent, selectors: [["lib-app-fixture-capability"]], decls: 5, vars: 5, consts: [[1, "card", "border-secondary", "panel", "h-100"], [1, "card-body", "capability-container", "d-flex", "h-100", 2, "overflow-y", "hidden"], ["class", "row m-0 pl-3", 3, "h-100", 4, "ngIf"], ["class", "m-auto", 4, "ngIf"], [1, "row", "m-0", "pl-3"], ["class", "col col-auto p-0 my-3 mr-3", "style", "height: calc(100% - 2rem)", 4, "ngIf"], ["class", "col col-auto p-0 my-3 mr-3", "style", "height: calc(100% - 2rem)", 4, "ngFor", "ngForOf"], [1, "col", "col-auto", "p-0", "my-3", "mr-3"], [1, "col", "col-auto", "p-0", "my-3", "mr-3", 2, "height", "calc(100% - 2rem)"], [3, "profile", "channel", "wheelIndex", "showContainer"], [1, "m-auto"], [1, "m-auto", 2, "color", "#717171"]], template: function FixtureCapabilityComponent_Template(rf, ctx) { if (rf & 1) {
170
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FixtureCapabilityComponent, selectors: [["lib-app-fixture-capability"]], decls: 6, vars: 6, consts: [[1, "card", "border-secondary", "panel", "h-100"], [1, "card-body", "capability-container", "d-flex", "h-100", 2, "overflow-y", "hidden"], ["class", "row m-0 pl-3", 3, "h-100", 4, "ngIf"], ["class", "m-auto", 4, "ngIf"], [1, "row", "m-0", "pl-3"], ["class", "col col-auto p-0 my-3 mr-3", "style", "height: calc(100% - 2rem)", 4, "ngIf"], ["class", "col col-auto p-0 my-3 mr-3", "style", "height: calc(100% - 2rem)", 4, "ngFor", "ngForOf"], [1, "col", "col-auto", "p-0", "my-3", "mr-3"], [1, "col", "col-auto", "p-0", "my-3", "mr-3", 2, "height", "calc(100% - 2rem)"], [3, "profile", "channel", "wheelIndex", "showContainer"], [1, "m-auto"], [1, "m-auto", 2, "color", "#717171"]], template: function FixtureCapabilityComponent_Template(rf, ctx) { if (rf & 1) {
160
171
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
161
- i0.ɵɵtemplate(2, FixtureCapabilityComponent_div_2_Template, 8, 8, "div", 2)(3, FixtureCapabilityComponent_div_3_Template, 4, 3, "div", 3)(4, FixtureCapabilityComponent_div_4_Template, 4, 3, "div", 3);
172
+ i0.ɵɵtemplate(2, FixtureCapabilityComponent_div_2_Template, 8, 8, "div", 2)(3, FixtureCapabilityComponent_div_3_Template, 4, 3, "div", 3)(4, FixtureCapabilityComponent_div_4_Template, 4, 3, "div", 3)(5, FixtureCapabilityComponent_div_5_Template, 4, 3, "div", 3);
162
173
  i0.ɵɵelementEnd()();
163
174
  } if (rf & 2) {
164
175
  i0.ɵɵclassProp("card-intro-active", ctx.introService.showStep("capabilities"));
@@ -168,11 +179,13 @@ export class FixtureCapabilityComponent {
168
179
  i0.ɵɵproperty("ngIf", ctx.projectService.project.fixtures.length == 0);
169
180
  i0.ɵɵadvance();
170
181
  i0.ɵɵproperty("ngIf", ctx.projectService.project.fixtures.length > 0 && ctx.presetService.selectedPreset && ctx.presetService.selectedPreset.fixtures.length == 0);
182
+ i0.ɵɵadvance();
183
+ i0.ɵɵproperty("ngIf", ctx.projectService.project.fixtures.length > 0 && ctx.presetService.selectedPreset && ctx.presetService.selectedPreset.fixtures.length > 0 && !ctx.hasCapabilityColorOrColorWheel && !ctx.hasCapabilityPanTilt);
171
184
  } }, dependencies: [i5.NgForOf, i5.NgIf, i6.FixtureCapabilityColorComponent, i7.FixtureCapabilityDimmerComponent, i8.FixtureCapabilityPanTiltComponent, i9.FixtureCapabilityColorWheelComponent, i5.KeyValuePipe, i10.TranslatePipe], changeDetection: 0 }); }
172
185
  }
173
186
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FixtureCapabilityComponent, [{
174
187
  type: Component,
175
- args: [{ selector: 'lib-app-fixture-capability', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"card border-secondary panel h-100\" [class.card-intro-active]=\"introService.showStep('capabilities')\">\n <div class=\"card-body capability-container d-flex h-100\" style=\"overflow-y: hidden\">\n <!-- h-100 needs to be applied in chrome to avoid performance issues with many layouts (reflows)\n during sliding. But the class must not be applied e.g. in Safari, because the bottom margin is not correct\n anymore afterwards. -->\n <div *ngIf=\"presetService.selectedPreset\" class=\"row m-0 pl-3\" [class.h-100]=\"isChrome()\">\n <!-- Dimmer -->\n <!-- the height attribute is required to avoid performance issues with many layouts (reflows)\n in Chrome during sliding -->\n <div *ngIf=\"hasCapabilityDimmer\" class=\"col col-auto p-0 my-3 mr-3\" style=\"height: calc(100% - 2rem)\">\n <lib-app-fixture-capability-dimmer></lib-app-fixture-capability-dimmer>\n </div>\n\n <!-- Color -->\n <!-- Also show for color wheel fixtures to approx. the color -->\n <div *ngIf=\"hasCapabilityColorOrColorWheel\" class=\"col col-auto p-0 my-3 mr-3\" style=\"height: calc(100% - 2rem)\">\n <lib-app-fixture-capability-color></lib-app-fixture-capability-color>\n </div>\n\n <!-- Color wheels -->\n <div\n *ngFor=\"let entry of colorWheelChannels | keyvalue; let i = index\"\n class=\"col col-auto p-0 my-3 mr-3\"\n style=\"height: calc(100% - 2rem)\"\n >\n <lib-app-fixture-capability-color-wheel\n [profile]=\"entry.key\"\n [channel]=\"entry.value\"\n [wheelIndex]=\"i\"\n [showContainer]=\"colorWheelChannels.size > 1\"\n ></lib-app-fixture-capability-color-wheel>\n </div>\n\n <!-- Pan/Tilt -->\n <div *ngIf=\"hasCapabilityPanTilt\" class=\"col col-auto p-0 my-3 mr-3\" style=\"height: calc(100% - 2rem)\">\n <lib-app-fixture-capability-pan-tilt></lib-app-fixture-capability-pan-tilt>\n </div>\n\n <!-- Fix spacing at the end -->\n <div class=\"col col-auto p-0 my-3 mr-3\">&nbsp;</div>\n </div>\n\n <div *ngIf=\"projectService.project.fixtures.length == 0\" class=\"m-auto\">\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-fixtures' | translate }}</p>\n </div>\n\n <div\n *ngIf=\"\n projectService.project.fixtures.length > 0 && presetService.selectedPreset && presetService.selectedPreset.fixtures.length == 0\n \"\n class=\"m-auto\"\n >\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-fixtures-selected' | translate }}</p>\n </div>\n </div>\n</div>\n" }]
188
+ args: [{ selector: 'lib-app-fixture-capability', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"card border-secondary panel h-100\" [class.card-intro-active]=\"introService.showStep('capabilities')\">\n <div class=\"card-body capability-container d-flex h-100\" style=\"overflow-y: hidden\">\n <!-- h-100 needs to be applied in chrome to avoid performance issues with many layouts (reflows)\n during sliding. But the class must not be applied e.g. in Safari, because the bottom margin is not correct\n anymore afterwards. -->\n <div *ngIf=\"presetService.selectedPreset\" class=\"row m-0 pl-3\" [class.h-100]=\"isChrome()\">\n <!-- Dimmer -->\n <!-- the height attribute is required to avoid performance issues with many layouts (reflows)\n in Chrome during sliding -->\n <div *ngIf=\"hasCapabilityDimmer\" class=\"col col-auto p-0 my-3 mr-3\" style=\"height: calc(100% - 2rem)\">\n <lib-app-fixture-capability-dimmer></lib-app-fixture-capability-dimmer>\n </div>\n\n <!-- Color -->\n <!-- Also show for color wheel fixtures to approx. the color -->\n <div *ngIf=\"hasCapabilityColorOrColorWheel\" class=\"col col-auto p-0 my-3 mr-3\" style=\"height: calc(100% - 2rem)\">\n <lib-app-fixture-capability-color></lib-app-fixture-capability-color>\n </div>\n\n <!-- Color wheels -->\n <div\n *ngFor=\"let entry of colorWheelChannels | keyvalue; let i = index\"\n class=\"col col-auto p-0 my-3 mr-3\"\n style=\"height: calc(100% - 2rem)\"\n >\n <lib-app-fixture-capability-color-wheel\n [profile]=\"entry.key\"\n [channel]=\"entry.value\"\n [wheelIndex]=\"i\"\n [showContainer]=\"colorWheelChannels.size > 1\"\n ></lib-app-fixture-capability-color-wheel>\n </div>\n\n <!-- Pan/Tilt -->\n <div *ngIf=\"hasCapabilityPanTilt\" class=\"col col-auto p-0 my-3 mr-3\" style=\"height: calc(100% - 2rem)\">\n <lib-app-fixture-capability-pan-tilt></lib-app-fixture-capability-pan-tilt>\n </div>\n\n <!-- Fix spacing at the end -->\n <div class=\"col col-auto p-0 my-3 mr-3\">&nbsp;</div>\n </div>\n\n <div *ngIf=\"projectService.project.fixtures.length == 0\" class=\"m-auto\">\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-fixtures' | translate }}</p>\n </div>\n\n <div\n *ngIf=\"\n projectService.project.fixtures.length > 0 && presetService.selectedPreset && presetService.selectedPreset.fixtures.length == 0\n \"\n class=\"m-auto\"\n >\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-fixtures-selected' | translate }}</p>\n </div>\n\n <div\n *ngIf=\"\n projectService.project.fixtures.length > 0 &&\n presetService.selectedPreset &&\n presetService.selectedPreset.fixtures.length > 0 &&\n !hasCapabilityColorOrColorWheel &&\n !hasCapabilityPanTilt\n \"\n class=\"m-auto\"\n >\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-capabilities-available' | translate }}</p>\n </div>\n </div>\n</div>\n" }]
176
189
  }], () => [{ type: i1.PresetService }, { type: i2.FixtureService }, { type: i0.ChangeDetectorRef }, { type: i3.ProjectService }, { type: i4.IntroService }], null); })();
177
190
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FixtureCapabilityComponent, { className: "FixtureCapabilityComponent" }); })();
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1jYXBhYmlsaXR5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvZml4dHVyZS9maXh0dXJlLWNhcGFiaWxpdHkvZml4dHVyZS1jYXBhYmlsaXR5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvZml4dHVyZS9maXh0dXJlLWNhcGFiaWxpdHkvZml4dHVyZS1jYXBhYmlsaXR5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBSXpHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7Ozs7OztJQ0MxRCw4QkFBc0c7SUFDcEcsb0RBQXVFO0lBQ3pFLGlCQUFNOzs7SUFJTiw4QkFBaUg7SUFDL0csbURBQXFFO0lBQ3ZFLGlCQUFNOzs7SUFHTiw4QkFJQztJQUNDLDREQUswQztJQUM1QyxpQkFBTTs7Ozs7SUFMRixjQUFxQjtJQUdyQixBQURBLEFBREEsQUFEQSxzQ0FBcUIsMkJBQ0Usb0JBQ1AscURBQzZCOzs7SUFLakQsOEJBQXVHO0lBQ3JHLHNEQUEyRTtJQUM3RSxpQkFBTTs7O0lBL0JSLDhCQUEwRjtJQWV4RixBQUxBLEFBTkEsaUZBQXNHLG9FQU1XLG9FQVNoSDs7SUFVRCxpRkFBdUc7SUFLdkcsOEJB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SUFFTyxNQUFNO1FBQ1osSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ25ELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzsyRkEzRlUsMEJBQTBCO29FQUExQiwwQkFBMEI7WUNmckMsQUFERiw4QkFBaUgsYUFDM0I7WUE2Q2xGLEFBSkEsQUFyQ0EsMkVBQTBGLDhEQXFDbEIsOERBU3ZFO1lBSUwsQUFERSxpQkFBTSxFQUNGOztZQXZEeUMsOEVBQWlFO1lBS3RHLGVBQWtDO1lBQWxDLHVEQUFrQztZQXFDbEMsY0FBaUQ7WUFBakQsc0VBQWlEO1lBS3BELGNBR1A7WUFITyxrS0FHUDs7O2lGRGxDYSwwQkFBMEI7Y0FOdEMsU0FBUzsyQkFDRSw0QkFBNEIsbUJBR3JCLHVCQUF1QixDQUFDLE1BQU07O2tGQUVwQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZUNoYW5uZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUtY2hhbm5lbCc7XG5pbXBvcnQgeyBGaXh0dXJlUHJvZmlsZSB9IGZyb20gJy4uLy4uL21vZGVscy9maXh0dXJlLXByb2ZpbGUnO1xuaW1wb3J0IHsgRml4dHVyZVdoZWVsU2xvdFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZS13aGVlbC1zbG90JztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlJztcbmltcG9ydCB7IEludHJvU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ludHJvLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJlc2V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZXNldC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2plY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvamVjdC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWFwcC1maXh0dXJlLWNhcGFiaWxpdHknLFxuICB0ZW1wbGF0ZVVybDogJy4vZml4dHVyZS1jYXBhYmlsaXR5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZml4dHVyZS1jYXBhYmlsaXR5LmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEZpeHR1cmVDYXBhYmlsaXR5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGZpeHR1cmVTZWxlY3Rpb25DaGFuZ2VkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcHJldmlld1NlbGVjdGlvbkNoYW5nZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAvLyBtYXAgY29udGFpbmluZyB0aGUgcHJvZmlsZSBhbmQgdGhlIGNoYW5uZWwgbmFtZSBjb250YWluaW5nIHRoZSB3aGVlbFxuICBjb2xvcldoZWVsQ2hhbm5lbHM6IE1hcDxGaXh0dXJlUHJvZmlsZSwgQ2FjaGVkRml4dHVyZUNoYW5uZWw+ID0gbmV3IE1hcDxGaXh0dXJlUHJvZmlsZSwgQ2FjaGVkRml4dHVyZUNoYW5uZWw+KCk7XG4gIGhhc0NhcGFiaWxpdHlEaW1tZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaGFzQ2FwYWJpbGl0eUNvbG9yT3JDb2xvcldoZWVsOiBib29sZWFuID0gZmFsc2U7XG4gIGhhc0NhcGFiaWxpdHlQYW5UaWx0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHByZXNldFNlcnZpY2U6IFByZXNldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIHByb2plY3RTZXJ2aWNlOiBQcm9qZWN0U2VydmljZSxcbiAgICBwdWJsaWMgaW50cm9TZXJ2aWNlOiBJbnRyb1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5maXh0dXJlU2VsZWN0aW9uQ2hhbmdlZFN1YnNjcmlwdGlvbiA9IHRoaXMucHJlc2V0U2VydmljZS5maXh0dXJlU2VsZWN0aW9uQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMucHJldmlld1NlbGVjdGlvbkNoYW5nZWRTdWJzY3JpcHRpb24gPSB0aGlzLnByZXNldFNlcnZpY2UucHJldmlld1NlbGVjdGlvbkNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmludHJvU2VydmljZS5zdGVwQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHt9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5maXh0dXJlU2VsZWN0aW9uQ2hhbmdlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucHJldmlld1NlbGVjdGlvbkNoYW5nZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgd2hlZWxJbkxpc3Qod2hlZWxzOiBNYXA8Rml4dHVyZVByb2ZpbGUsIENhY2hlZEZpeHR1cmVDaGFubmVsPiwgcHJvZmlsZTogRml4dHVyZVByb2ZpbGUsIGNoYW5uZWw6IENhY2hlZEZpeHR1cmVDaGFubmVsKSB7XG4gICAgd2hlZWxzLmZvckVhY2goKGV4aXN0aW5nQ2hhbm5lbDogQ2FjaGVkRml4dHVyZUNoYW5uZWwsIGV4aXN0aW5nUHJvZmlsZTogRml4dHVyZVByb2ZpbGUpID0+IHtcbiAgICAgIGlmIChleGlzdGluZ1Byb2ZpbGUudXVpZCA9PT0gcHJvZmlsZS51dWlkICYmIGV4aXN0aW5nQ2hhbm5lbC5uYW1lID09PSBjaGFubmVsLm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbG9yV2hlZWxzKCkge1xuICAgIHRoaXMuY29sb3JXaGVlbENoYW5uZWxzID0gbmV3IE1hcDxGaXh0dXJlUHJvZmlsZSwgQ2FjaGVkRml4dHVyZUNoYW5uZWw+KCk7XG5cbiAgICBpZiAoIXRoaXMucHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcHJlc2VyRml4dHVyZSBvZiB0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZXMpIHtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldENhY2hlZEZpeHR1cmVCeVV1aWQocHJlc2VyRml4dHVyZS5maXh0dXJlVXVpZCwgcHJlc2VyRml4dHVyZS5waXhlbEtleSk7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgZml4dHVyZS5jaGFubmVscykge1xuICAgICAgICBmb3IgKGNvbnN0IGNhcGFiaWxpdHkgb2YgY2hhbm5lbC5jYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICBpZiAoY2FwYWJpbGl0eS53aGVlbCAmJiBjYXBhYmlsaXR5LndoZWVsU2xvdHMgJiYgY2FwYWJpbGl0eS53aGVlbFNsb3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpeHR1cmVTZXJ2aWNlLndoZWVsSGFzU2xvdFR5cGUoY2FwYWJpbGl0eS53aGVlbCwgRml4dHVyZVdoZWVsU2xvdFR5cGUuQ29sb3IpKSB7XG4gICAgICAgICAgICAgIC8vIGNvbG9yIHdoZWVsXG4gICAgICAgICAgICAgIGlmICghdGhpcy53aGVlbEluTGlzdCh0aGlzLmNvbG9yV2hlZWxDaGFubmVscywgZml4dHVyZS5wcm9maWxlLCBjaGFubmVsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JXaGVlbENoYW5uZWxzLnNldChmaXh0dXJlLnByb2ZpbGUsIGNoYW5uZWwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZml4dHVyZVNlcnZpY2Uud2hlZWxIYXNTbG90VHlwZShjYXBhYmlsaXR5LndoZWVsLCBGaXh0dXJlV2hlZWxTbG90VHlwZS5Hb2JvKSkge1xuICAgICAgICAgICAgICAvLyBnb2JvIHdoZWVsXG4gICAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNhcGFiaWxpdGllcygpIHtcbiAgICB0aGlzLmhhc0NhcGFiaWxpdHlEaW1tZXIgPSB0aGlzLnByZXNldFNlcnZpY2UuaGFzQ2FwYWJpbGl0eURpbW1lcigpO1xuICAgIHRoaXMuaGFzQ2FwYWJpbGl0eUNvbG9yT3JDb2xvcldoZWVsID0gdGhpcy5wcmVzZXRTZXJ2aWNlLmhhc0NhcGFiaWxpdHlDb2xvck9yQ29sb3JXaGVlbCgpO1xuICAgIHRoaXMuaGFzQ2FwYWJpbGl0eVBhblRpbHQgPSB0aGlzLnByZXNldFNlcnZpY2UuaGFzQ2FwYWJpbGl0eVBhblRpbHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlKCkge1xuICAgIHRoaXMudXBkYXRlQ29sb3JXaGVlbHMoKTtcbiAgICB0aGlzLnVwZGF0ZUNhcGFiaWxpdGllcygpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaXNDaHJvbWUoKTogYm9vbGVhbiB7XG4gICAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoJ0Nocm9tZS8nKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJkIGJvcmRlci1zZWNvbmRhcnkgcGFuZWwgaC0xMDBcIiBbY2xhc3MuY2FyZC1pbnRyby1hY3RpdmVdPVwiaW50cm9TZXJ2aWNlLnNob3dTdGVwKCdjYXBhYmlsaXRpZXMnKVwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGNhcGFiaWxpdHktY29udGFpbmVyIGQtZmxleCBoLTEwMFwiIHN0eWxlPVwib3ZlcmZsb3cteTogaGlkZGVuXCI+XG4gICAgPCEtLSBoLTEwMCBuZWVkcyB0byBiZSBhcHBsaWVkIGluIGNocm9tZSB0byBhdm9pZCBwZXJmb3JtYW5jZSBpc3N1ZXMgd2l0aCBtYW55IGxheW91dHMgKHJlZmxvd3MpXG4gICAgZHVyaW5nIHNsaWRpbmcuIEJ1dCB0aGUgY2xhc3MgbXVzdCBub3QgYmUgYXBwbGllZCBlLmcuIGluIFNhZmFyaSwgYmVjYXVzZSB0aGUgYm90dG9tIG1hcmdpbiBpcyBub3QgY29ycmVjdFxuICAgIGFueW1vcmUgYWZ0ZXJ3YXJkcy4gLS0+XG4gICAgPGRpdiAqbmdJZj1cInByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXRcIiBjbGFzcz1cInJvdyBtLTAgcGwtM1wiIFtjbGFzcy5oLTEwMF09XCJpc0Nocm9tZSgpXCI+XG4gICAgICA8IS0tIERpbW1lciAtLT5cbiAgICAgIDwhLS0gdGhlIGhlaWdodCBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQgdG8gYXZvaWQgcGVyZm9ybWFuY2UgaXNzdWVzIHdpdGggbWFueSBsYXlvdXRzIChyZWZsb3dzKVxuICAgICAgaW4gQ2hyb21lIGR1cmluZyBzbGlkaW5nIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cImhhc0NhcGFiaWxpdHlEaW1tZXJcIiBjbGFzcz1cImNvbCBjb2wtYXV0byBwLTAgbXktMyBtci0zXCIgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwJSAtIDJyZW0pXCI+XG4gICAgICAgIDxsaWItYXBwLWZpeHR1cmUtY2FwYWJpbGl0eS1kaW1tZXI+PC9saWItYXBwLWZpeHR1cmUtY2FwYWJpbGl0eS1kaW1tZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBDb2xvciAtLT5cbiAgICAgIDwhLS0gQWxzbyBzaG93IGZvciBjb2xvciB3aGVlbCBmaXh0dXJlcyB0byBhcHByb3guIHRoZSBjb2xvciAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJoYXNDYXBhYmlsaXR5Q29sb3JPckNvbG9yV2hlZWxcIiBjbGFzcz1cImNvbCBjb2wtYXV0byBwLTAgbXktMyBtci0zXCIgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwJSAtIDJyZW0pXCI+XG4gICAgICAgIDxsaWItYXBwLWZpeHR1cmUtY2FwYWJpbGl0eS1jb2xvcj48L2xpYi1hcHAtZml4dHVyZS1jYXBhYmlsaXR5LWNvbG9yPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQ29sb3Igd2hlZWxzIC0tPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdGb3I9XCJsZXQgZW50cnkgb2YgY29sb3JXaGVlbENoYW5uZWxzIHwga2V5dmFsdWU7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBjbGFzcz1cImNvbCBjb2wtYXV0byBwLTAgbXktMyBtci0zXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwJSAtIDJyZW0pXCJcbiAgICAgID5cbiAgICAgICAgPGxpYi1hcHAtZml4dHVyZS1jYXBhYmlsaXR5LWNvbG9yLXdoZWVsXG4gICAgICAgICAgW3Byb2ZpbGVdPVwiZW50cnkua2V5XCJcbiAgICAgICAgICBbY2hhbm5lbF09XCJlbnRyeS52YWx1ZVwiXG4gICAgICAgICAgW3doZWVsSW5kZXhdPVwiaVwiXG4gICAgICAgICAgW3Nob3dDb250YWluZXJdPVwiY29sb3JXaGVlbENoYW5uZWxzLnNpemUgPiAxXCJcbiAgICAgICAgPjwvbGliLWFwcC1maXh0dXJlLWNhcGFiaWxpdHktY29sb3Itd2hlZWw+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBQYW4vVGlsdCAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJoYXNDYXBhYmlsaXR5UGFuVGlsdFwiIGNsYXNzPVwiY29sIGNvbC1hdXRvIHAtMCBteS0zIG1yLTNcIiBzdHlsZT1cImhlaWdodDogY2FsYygxMDAlIC0gMnJlbSlcIj5cbiAgICAgICAgPGxpYi1hcHAtZml4dHVyZS1jYXBhYmlsaXR5LXBhbi10aWx0PjwvbGliLWFwcC1maXh0dXJlLWNhcGFiaWxpdHktcGFuLXRpbHQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGaXggc3BhY2luZyBhdCB0aGUgZW5kIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtYXV0byBwLTAgbXktMyBtci0zXCI+Jm5ic3A7PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5maXh0dXJlcy5sZW5ndGggPT0gMFwiIGNsYXNzPVwibS1hdXRvXCI+XG4gICAgICA8cCBjbGFzcz1cIm0tYXV0b1wiIHN0eWxlPVwiY29sb3I6ICM3MTcxNzFcIj57eyAnZGVzaWduZXIuZml4dHVyZS5uby1maXh0dXJlcycgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cIlxuICAgICAgICBwcm9qZWN0U2VydmljZS5wcm9qZWN0LmZpeHR1cmVzLmxlbmd0aCA+IDAgJiYgcHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldCAmJiBwcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVzLmxlbmd0aCA9PSAwXG4gICAgICBcIlxuICAgICAgY2xhc3M9XCJtLWF1dG9cIlxuICAgID5cbiAgICAgIDxwIGNsYXNzPVwibS1hdXRvXCIgc3R5bGU9XCJjb2xvcjogIzcxNzE3MVwiPnt7ICdkZXNpZ25lci5maXh0dXJlLm5vLWZpeHR1cmVzLXNlbGVjdGVkJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1jYXBhYmlsaXR5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvZml4dHVyZS9maXh0dXJlLWNhcGFiaWxpdHkvZml4dHVyZS1jYXBhYmlsaXR5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvZml4dHVyZS9maXh0dXJlLWNhcGFiaWxpdHkvZml4dHVyZS1jYXBhYmlsaXR5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBSXpHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7Ozs7OztJQ0MxRCw4QkFBc0c7SUFDcEcsb0RBQXVFO0lBQ3pFLGlCQUFNOzs7SUFJTiw4QkFBaUg7SUFDL0csbURBQXFFO0lBQ3ZFLGlCQUFNOzs7SUFHTiw4QkFJQztJQUNDLDREQUswQztJQUM1QyxpQkFBTTs7Ozs7SUFMRixjQUFxQjtJQUdyQixBQURBLEFBREEsQUFEQSxzQ0FBcUIsMkJBQ0Usb0JBQ1AscURBQzZCOzs7SUFLakQsOEJBQXVHO0lBQ3JHLHNEQUEyRTtJQUM3RSxpQkFBTTs7O0lBL0JSLDhCQUEwRjtJQWV4RixBQUxBLEFBTkEsaUZBQXNHLG9FQU1XLG9FQVNoSDs7SUFVRCxpRkFBdUc7SUFLdkcsOEJB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R0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFDMUYsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUN4RSxDQUFDO0lBRU8sTUFBTTtRQUNaLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7MkZBN0ZVLDBCQUEwQjtvRUFBMUIsMEJBQTBCO1lDZnJDLEFBREYsOEJBQWlILGFBQzNCO1lBc0RsRixBQVRBLEFBSkEsQUFyQ0EsMkVBQTBGLDhEQXFDbEIsOERBU3ZFLDhEQWFBO1lBSUwsQUFERSxpQkFBTSxFQUNGOztZQXBFeUMsOEVBQWlFO1lBS3RHLGVBQWtDO1lBQWxDLHVEQUFrQztZQXFDbEMsY0FBaUQ7WUFBakQsc0VBQWlEO1lBS3BELGNBR1A7WUFITyxrS0FHUDtZQU1PLGNBT1A7WUFQTyxxT0FPUDs7O2lGRC9DYSwwQkFBMEI7Y0FOdEMsU0FBUzsyQkFDRSw0QkFBNEIsbUJBR3JCLHVCQUF1QixDQUFDLE1BQU07O2tGQUVwQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZUNoYW5uZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUtY2hhbm5lbCc7XG5pbXBvcnQgeyBGaXh0dXJlUHJvZmlsZSB9IGZyb20gJy4uLy4uL21vZGVscy9maXh0dXJlLXByb2ZpbGUnO1xuaW1wb3J0IHsgRml4dHVyZVdoZWVsU2xvdFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZS13aGVlbC1zbG90JztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlJztcbmltcG9ydCB7IEludHJvU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ludHJvLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJlc2V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZXNldC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2plY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvamVjdC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWFwcC1maXh0dXJlLWNhcGFiaWxpdHknLFxuICB0ZW1wbGF0ZVVybDogJy4vZml4dHVyZS1jYXBhYmlsaXR5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZml4dHVyZS1jYXBhYmlsaXR5LmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEZpeHR1cmVDYXBhYmlsaXR5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGZpeHR1cmVTZWxlY3Rpb25DaGFuZ2VkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcHJldmlld1NlbGVjdGlvbkNoYW5nZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAvLyBtYXAgY29udGFpbmluZyB0aGUgcHJvZmlsZSBhbmQgdGhlIGNoYW5uZWwgbmFtZSBjb250YWluaW5nIHRoZSB3aGVlbFxuICBjb2xvcldoZWVsQ2hhbm5lbHM6IE1hcDxGaXh0dXJlUHJvZmlsZSwgQ2FjaGVkRml4dHVyZUNoYW5uZWw+ID0gbmV3IE1hcDxGaXh0dXJlUHJvZmlsZSwgQ2FjaGVkRml4dHVyZUNoYW5uZWw+KCk7XG4gIGhhc0NhcGFiaWxpdHlEaW1tZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaGFzQ2FwYWJpbGl0eUNvbG9yT3JDb2xvcldoZWVsOiBib29sZWFuID0gZmFsc2U7XG4gIGhhc0NhcGFiaWxpdHlQYW5UaWx0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHByZXNldFNlcnZpY2U6IFByZXNldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIHByb2plY3RTZXJ2aWNlOiBQcm9qZWN0U2VydmljZSxcbiAgICBwdWJsaWMgaW50cm9TZXJ2aWNlOiBJbnRyb1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5maXh0dXJlU2VsZWN0aW9uQ2hhbmdlZFN1YnNjcmlwdGlvbiA9IHRoaXMucHJlc2V0U2VydmljZS5maXh0dXJlU2VsZWN0aW9uQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMucHJldmlld1NlbGVjdGlvbkNoYW5nZWRTdWJzY3JpcHRpb24gPSB0aGlzLnByZXNldFNlcnZpY2UucHJldmlld1NlbGVjdGlvbkNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmludHJvU2VydmljZS5zdGVwQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5maXh0dXJlU2VsZWN0aW9uQ2hhbmdlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucHJldmlld1NlbGVjdGlvbkNoYW5nZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgd2hlZWxJbkxpc3Qod2hlZWxzOiBNYXA8Rml4dHVyZVByb2ZpbGUsIENhY2hlZEZpeHR1cmVDaGFubmVsPiwgcHJvZmlsZTogRml4dHVyZVByb2ZpbGUsIGNoYW5uZWw6IENhY2hlZEZpeHR1cmVDaGFubmVsKSB7XG4gICAgd2hlZWxzLmZvckVhY2goKGV4aXN0aW5nQ2hhbm5lbDogQ2FjaGVkRml4dHVyZUNoYW5uZWwsIGV4aXN0aW5nUHJvZmlsZTogRml4dHVyZVByb2ZpbGUpID0+IHtcbiAgICAgIGlmIChleGlzdGluZ1Byb2ZpbGUudXVpZCA9PT0gcHJvZmlsZS51dWlkICYmIGV4aXN0aW5nQ2hhbm5lbC5uYW1lID09PSBjaGFubmVsLm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbG9yV2hlZWxzKCkge1xuICAgIHRoaXMuY29sb3JXaGVlbENoYW5uZWxzID0gbmV3IE1hcDxGaXh0dXJlUHJvZmlsZSwgQ2FjaGVkRml4dHVyZUNoYW5uZWw+KCk7XG5cbiAgICBpZiAoIXRoaXMucHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcHJlc2VyRml4dHVyZSBvZiB0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZXMpIHtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldENhY2hlZEZpeHR1cmVCeVV1aWQocHJlc2VyRml4dHVyZS5maXh0dXJlVXVpZCwgcHJlc2VyRml4dHVyZS5waXhlbEtleSk7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgZml4dHVyZS5jaGFubmVscykge1xuICAgICAgICBmb3IgKGNvbnN0IGNhcGFiaWxpdHkgb2YgY2hhbm5lbC5jYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICBpZiAoY2FwYWJpbGl0eS53aGVlbCAmJiBjYXBhYmlsaXR5LndoZWVsU2xvdHMgJiYgY2FwYWJpbGl0eS53aGVlbFNsb3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpeHR1cmVTZXJ2aWNlLndoZWVsSGFzU2xvdFR5cGUoY2FwYWJpbGl0eS53aGVlbCwgRml4dHVyZVdoZWVsU2xvdFR5cGUuQ29sb3IpKSB7XG4gICAgICAgICAgICAgIC8vIGNvbG9yIHdoZWVsXG4gICAgICAgICAgICAgIGlmICghdGhpcy53aGVlbEluTGlzdCh0aGlzLmNvbG9yV2hlZWxDaGFubmVscywgZml4dHVyZS5wcm9maWxlLCBjaGFubmVsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JXaGVlbENoYW5uZWxzLnNldChmaXh0dXJlLnByb2ZpbGUsIGNoYW5uZWwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZml4dHVyZVNlcnZpY2Uud2hlZWxIYXNTbG90VHlwZShjYXBhYmlsaXR5LndoZWVsLCBGaXh0dXJlV2hlZWxTbG90VHlwZS5Hb2JvKSkge1xuICAgICAgICAgICAgICAvLyBnb2JvIHdoZWVsXG4gICAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNhcGFiaWxpdGllcygpIHtcbiAgICB0aGlzLmhhc0NhcGFiaWxpdHlEaW1tZXIgPSB0aGlzLnByZXNldFNlcnZpY2UuaGFzQ2FwYWJpbGl0eURpbW1lcigpO1xuICAgIHRoaXMuaGFzQ2FwYWJpbGl0eUNvbG9yT3JDb2xvcldoZWVsID0gdGhpcy5wcmVzZXRTZXJ2aWNlLmhhc0NhcGFiaWxpdHlDb2xvck9yQ29sb3JXaGVlbCgpO1xuICAgIHRoaXMuaGFzQ2FwYWJpbGl0eVBhblRpbHQgPSB0aGlzLnByZXNldFNlcnZpY2UuaGFzQ2FwYWJpbGl0eVBhblRpbHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlKCkge1xuICAgIHRoaXMudXBkYXRlQ29sb3JXaGVlbHMoKTtcbiAgICB0aGlzLnVwZGF0ZUNhcGFiaWxpdGllcygpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaXNDaHJvbWUoKTogYm9vbGVhbiB7XG4gICAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoJ0Nocm9tZS8nKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJkIGJvcmRlci1zZWNvbmRhcnkgcGFuZWwgaC0xMDBcIiBbY2xhc3MuY2FyZC1pbnRyby1hY3RpdmVdPVwiaW50cm9TZXJ2aWNlLnNob3dTdGVwKCdjYXBhYmlsaXRpZXMnKVwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGNhcGFiaWxpdHktY29udGFpbmVyIGQtZmxleCBoLTEwMFwiIHN0eWxlPVwib3ZlcmZsb3cteTogaGlkZGVuXCI+XG4gICAgPCEtLSBoLTEwMCBuZWVkcyB0byBiZSBhcHBsaWVkIGluIGNocm9tZSB0byBhdm9pZCBwZXJmb3JtYW5jZSBpc3N1ZXMgd2l0aCBtYW55IGxheW91dHMgKHJlZmxvd3MpXG4gICAgZHVyaW5nIHNsaWRpbmcuIEJ1dCB0aGUgY2xhc3MgbXVzdCBub3QgYmUgYXBwbGllZCBlLmcuIGluIFNhZmFyaSwgYmVjYXVzZSB0aGUgYm90dG9tIG1hcmdpbiBpcyBub3QgY29ycmVjdFxuICAgIGFueW1vcmUgYWZ0ZXJ3YXJkcy4gLS0+XG4gICAgPGRpdiAqbmdJZj1cInByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXRcIiBjbGFzcz1cInJvdyBtLTAgcGwtM1wiIFtjbGFzcy5oLTEwMF09XCJpc0Nocm9tZSgpXCI+XG4gICAgICA8IS0tIERpbW1lciAtLT5cbiAgICAgIDwhLS0gdGhlIGhlaWdodCBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQgdG8gYXZvaWQgcGVyZm9ybWFuY2UgaXNzdWVzIHdpdGggbWFueSBsYXlvdXRzIChyZWZsb3dzKVxuICAgICAgaW4gQ2hyb21lIGR1cmluZyBzbGlkaW5nIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cImhhc0NhcGFiaWxpdHlEaW1tZXJcIiBjbGFzcz1cImNvbCBjb2wtYXV0byBwLTAgbXktMyBtci0zXCIgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwJSAtIDJyZW0pXCI+XG4gICAgICAgIDxsaWItYXBwLWZpeHR1cmUtY2FwYWJpbGl0eS1kaW1tZXI+PC9saWItYXBwLWZpeHR1cmUtY2FwYWJpbGl0eS1kaW1tZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBDb2xvciAtLT5cbiAgICAgIDwhLS0gQWxzbyBzaG93IGZvciBjb2xvciB3aGVlbCBmaXh0dXJlcyB0byBhcHByb3guIHRoZSBjb2xvciAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJoYXNDYXBhYmlsaXR5Q29sb3JPckNvbG9yV2hlZWxcIiBjbGFzcz1cImNvbCBjb2wtYXV0byBwLTAgbXktMyBtci0zXCIgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwJSAtIDJyZW0pXCI+XG4gICAgICAgIDxsaWItYXBwLWZpeHR1cmUtY2FwYWJpbGl0eS1jb2xvcj48L2xpYi1hcHAtZml4dHVyZS1jYXBhYmlsaXR5LWNvbG9yPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQ29sb3Igd2hlZWxzIC0tPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdGb3I9XCJsZXQgZW50cnkgb2YgY29sb3JXaGVlbENoYW5uZWxzIHwga2V5dmFsdWU7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBjbGFzcz1cImNvbCBjb2wtYXV0byBwLTAgbXktMyBtci0zXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwJSAtIDJyZW0pXCJcbiAgICAgID5cbiAgICAgICAgPGxpYi1hcHAtZml4dHVyZS1jYXBhYmlsaXR5LWNvbG9yLXdoZWVsXG4gICAgICAgICAgW3Byb2ZpbGVdPVwiZW50cnkua2V5XCJcbiAgICAgICAgICBbY2hhbm5lbF09XCJlbnRyeS52YWx1ZVwiXG4gICAgICAgICAgW3doZWVsSW5kZXhdPVwiaVwiXG4gICAgICAgICAgW3Nob3dDb250YWluZXJdPVwiY29sb3JXaGVlbENoYW5uZWxzLnNpemUgPiAxXCJcbiAgICAgICAgPjwvbGliLWFwcC1maXh0dXJlLWNhcGFiaWxpdHktY29sb3Itd2hlZWw+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBQYW4vVGlsdCAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJoYXNDYXBhYmlsaXR5UGFuVGlsdFwiIGNsYXNzPVwiY29sIGNvbC1hdXRvIHAtMCBteS0zIG1yLTNcIiBzdHlsZT1cImhlaWdodDogY2FsYygxMDAlIC0gMnJlbSlcIj5cbiAgICAgICAgPGxpYi1hcHAtZml4dHVyZS1jYXBhYmlsaXR5LXBhbi10aWx0PjwvbGliLWFwcC1maXh0dXJlLWNhcGFiaWxpdHktcGFuLXRpbHQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGaXggc3BhY2luZyBhdCB0aGUgZW5kIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtYXV0byBwLTAgbXktMyBtci0zXCI+Jm5ic3A7PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5maXh0dXJlcy5sZW5ndGggPT0gMFwiIGNsYXNzPVwibS1hdXRvXCI+XG4gICAgICA8cCBjbGFzcz1cIm0tYXV0b1wiIHN0eWxlPVwiY29sb3I6ICM3MTcxNzFcIj57eyAnZGVzaWduZXIuZml4dHVyZS5uby1maXh0dXJlcycgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cIlxuICAgICAgICBwcm9qZWN0U2VydmljZS5wcm9qZWN0LmZpeHR1cmVzLmxlbmd0aCA+IDAgJiYgcHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldCAmJiBwcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVzLmxlbmd0aCA9PSAwXG4gICAgICBcIlxuICAgICAgY2xhc3M9XCJtLWF1dG9cIlxuICAgID5cbiAgICAgIDxwIGNsYXNzPVwibS1hdXRvXCIgc3R5bGU9XCJjb2xvcjogIzcxNzE3MVwiPnt7ICdkZXNpZ25lci5maXh0dXJlLm5vLWZpeHR1cmVzLXNlbGVjdGVkJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIHByb2plY3RTZXJ2aWNlLnByb2plY3QuZml4dHVyZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICBwcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0ICYmXG4gICAgICAgIHByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAhaGFzQ2FwYWJpbGl0eUNvbG9yT3JDb2xvcldoZWVsICYmXG4gICAgICAgICFoYXNDYXBhYmlsaXR5UGFuVGlsdFxuICAgICAgXCJcbiAgICAgIGNsYXNzPVwibS1hdXRvXCJcbiAgICA+XG4gICAgICA8cCBjbGFzcz1cIm0tYXV0b1wiIHN0eWxlPVwiY29sb3I6ICM3MTcxNzFcIj57eyAnZGVzaWduZXIuZml4dHVyZS5uby1jYXBhYmlsaXRpZXMtYXZhaWxhYmxlJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==