@colijnit/homedecorator 258.1.1 → 258.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/app/core/enum/icon.enum.d.ts +1 -0
  2. package/app/core/enum/message-type.enum.d.ts +2 -1
  3. package/app/core/interface/message-with-payload.interface.d.ts +1 -0
  4. package/app/core/model/homedecorator-settings-options.d.ts +1 -1
  5. package/app/core/model/homedecorator-settings.d.ts +3 -0
  6. package/app/core/service/3dm-api.d.ts +2 -2
  7. package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
  8. package/app/core/service/homedecorator-connector-adapter.service.d.ts +9 -1
  9. package/app/core/service/homedecorator-connector.service.d.ts +15 -2
  10. package/app/core/service/utils.service.d.ts +1 -1
  11. package/app/core/utils/object.utils.d.ts +2 -0
  12. package/app/homedecorator.module.d.ts +2 -1
  13. package/app/plugins/core3d/service/wall-measurements.service.d.ts +2 -0
  14. package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +3 -0
  15. package/app/plugins/product-catalog/product-catalog/product-catalog.component.d.ts +2 -0
  16. package/app/plugins/product-configurator/product-configurator-selector-list-of-values.component.scss +28 -0
  17. package/app/plugins/product-configurator/product-configurator-selector-option-button.component.d.ts +19 -0
  18. package/app/plugins/product-configurator/product-configurator-selector-option-button.component.scss +38 -0
  19. package/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.d.ts +20 -0
  20. package/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.scss +0 -0
  21. package/app/plugins/product-configurator/product-configurator-selector-option-list-of-values.component.d.ts +19 -0
  22. package/app/plugins/product-configurator/product-configurator-selector-option-tile.component.scss +56 -0
  23. package/app/plugins/product-configurator/product-configurator-selector-option-tile.compontent.d.ts +20 -0
  24. package/app/plugins/product-configurator/product-configurator-selector.component.d.ts +26 -0
  25. package/app/plugins/product-configurator/product-configurator-selector.component.scss +46 -0
  26. package/app/plugins/product-configurator/product-configurator.component.d.ts +38 -0
  27. package/app/plugins/product-configurator/product-configurator.component.scss +35 -0
  28. package/app/plugins/product-configurator/product-configurator.module.d.ts +18 -0
  29. package/app/plugins/product-configurator/template_variables.scss +13 -0
  30. package/app/plugins/render/model/blender-render-settings.d.ts +10 -0
  31. package/app/plugins/render/model/blender-scene-settings.d.ts +18 -0
  32. package/app/plugins/render/render-controls/render-controls.component.d.ts +19 -7
  33. package/app/plugins/render/service/new-render.service.d.ts +21 -4
  34. package/app/plugins/room-planner/components/floor-catalog/floor-catalog.component.scss +1 -1
  35. package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +5 -0
  36. package/app/plugins/threedselector/threedselector/threedselector.component.d.ts +4 -0
  37. package/app/plugins/threedselector/threedselector/threedselector.component.scss +17 -0
  38. package/app/plugins/threedselector/threedselector.module.d.ts +2 -1
  39. package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
  40. package/assets/icons/circle_regular.svg +0 -0
  41. package/bundles/colijnit-homedecorator.umd.js +1986 -835
  42. package/bundles/colijnit-homedecorator.umd.js.map +1 -1
  43. package/esm2015/app/app.version.js +3 -3
  44. package/esm2015/app/core/enum/icon.enum.js +2 -1
  45. package/esm2015/app/core/enum/message-type.enum.js +2 -1
  46. package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
  47. package/esm2015/app/core/model/homedecorator-settings-options.js +2 -2
  48. package/esm2015/app/core/model/homedecorator-settings.js +3 -1
  49. package/esm2015/app/core/model/icon.js +2 -1
  50. package/esm2015/app/core/service/3dm-api.js +15 -22
  51. package/esm2015/app/core/service/homedecorator-app-event.service.js +3 -2
  52. package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +65 -7
  53. package/esm2015/app/core/service/homedecorator-connector.service.js +150 -6
  54. package/esm2015/app/core/service/homedecorator-settings.service.js +8 -1
  55. package/esm2015/app/core/service/utils.service.js +116 -93
  56. package/esm2015/app/core/utils/object.utils.js +13 -1
  57. package/esm2015/app/homedecorator.component.js +1 -2
  58. package/esm2015/app/homedecorator.module.js +8 -4
  59. package/esm2015/app/plugins/core3d/core3d/core3d.component.js +2 -2
  60. package/esm2015/app/plugins/core3d/service/wall-measurements.service.js +7 -1
  61. package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +98 -50
  62. package/esm2015/app/plugins/model-uploader/model-uploader/model-uploader.component.js +4 -4
  63. package/esm2015/app/plugins/product-catalog/product-catalog/product-catalog.component.js +21 -11
  64. package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-button.component.js +67 -0
  65. package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.js +57 -0
  66. package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-list-of-values.component.js +75 -0
  67. package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-tile.compontent.js +90 -0
  68. package/esm2015/app/plugins/product-configurator/product-configurator-selector.component.js +253 -0
  69. package/esm2015/app/plugins/product-configurator/product-configurator.component.js +151 -0
  70. package/esm2015/app/plugins/product-configurator/product-configurator.module.js +115 -0
  71. package/esm2015/app/plugins/render/model/blender-render-settings.js +3 -0
  72. package/esm2015/app/plugins/render/model/blender-scene-settings.js +10 -0
  73. package/esm2015/app/plugins/render/model/render-parameters.js +3 -3
  74. package/esm2015/app/plugins/render/render-controls/render-controls.component.js +532 -446
  75. package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +6 -40
  76. package/esm2015/app/plugins/render/service/new-render.service.js +212 -44
  77. package/esm2015/app/plugins/render/service/render.service.js +6 -9
  78. package/esm2015/app/plugins/room-planner/components/floor-catalog/floor-catalog.component.js +1 -1
  79. package/esm2015/app/plugins/room-planner/components/texture-picker/texture-picker.component.js +1 -1
  80. package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +12 -10
  81. package/esm2015/app/plugins/threedselector/element-buttons/element-buttons.component.js +2 -2
  82. package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +55 -1
  83. package/esm2015/app/plugins/threedselector/threedselector/service/load-furniture.service.js +3 -3
  84. package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +64 -15
  85. package/esm2015/app/plugins/threedselector/threedselector/utils/asset.utils.js +1 -1
  86. package/esm2015/app/plugins/threedselector/threedselector.module.js +8 -4
  87. package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +1 -1
  88. package/esm2015/app/shared/category-library/category-library.component.js +1 -1
  89. package/fesm2015/colijnit-homedecorator.js +2522 -1149
  90. package/fesm2015/colijnit-homedecorator.js.map +1 -1
  91. package/package.json +4 -4
  92. package/styles.scss +1 -1
@@ -82,18 +82,13 @@ export class RenderDialogComponent {
82
82
  this.checkHasGallery();
83
83
  }
84
84
  get renderProgress() {
85
- return this._settingsService.settings.options.useNewRender ? this._newRenderService.currentQueueRenderItem.renderProgress : this.renderService.currentQueueRenderItem.renderProgress;
85
+ return this._newRenderService.currentQueueRenderItem.renderProgress;
86
86
  }
87
87
  get disablePictureButton() {
88
- if (this._settingsService.settings.options.useNewRender) {
89
- return this._newRenderService.currentQueueRenderItem.renderStatus === this.renderStatus.IsRunning;
90
- }
91
- else {
92
- return (this.renderService.currentQueueRenderItem.renderStatus === this.renderStatus.IsRunning || this.renderService.serverData.setup === false);
93
- }
88
+ return this._newRenderService.currentQueueRenderItem.renderStatus === this.renderStatus.IsRunning;
94
89
  }
95
90
  get renderedImages() {
96
- return this._settingsService.settings.options.useNewRender ? this._newRenderService.renderedRoomImages : this.renderService.renderedRoomImages;
91
+ return this._newRenderService.renderedRoomImages;
97
92
  }
98
93
  ngOnDestroy() {
99
94
  this._subs.forEach(s => s.unsubscribe());
@@ -196,21 +191,7 @@ export class RenderDialogComponent {
196
191
  }
197
192
  startRenderingRoom() {
198
193
  return __awaiter(this, void 0, void 0, function* () {
199
- if (this._settingsService.settings.options.useNewRender) {
200
- this._newRenderService.renderRoom(this.renderService.getImageSizeOnId(this.renderService.selectedImageSize));
201
- }
202
- else {
203
- this.imageRenderSource = '';
204
- const queueItem = new RenderQueueItem();
205
- queueItem.params = this.renderService.getRenderParameters(this.renderModes.RenderRoom);
206
- this.renderService.renderQueue = [];
207
- this.renderService.renderQueue.push(queueItem);
208
- yield this.renderService.startRendering()
209
- .catch((e) => {
210
- console.error(e);
211
- this.renderService.renderQueue = [];
212
- });
213
- }
194
+ this._newRenderService.renderRoom(this.renderService.getImageSizeOnId(this.renderService.selectedImageSize));
214
195
  });
215
196
  }
216
197
  createBlenderRender() {
@@ -238,22 +219,7 @@ export class RenderDialogComponent {
238
219
  link.remove();
239
220
  }
240
221
  removeRender(url, index) {
241
- if (this._settingsService.settings.options.useNewRender) {
242
- this._newRenderService.renderedRoomImages.splice(index, 1);
243
- }
244
- else {
245
- const filename = url.substring(url.lastIndexOf('/') + 1);
246
- const assetPath = this._settingsService.settings.assetPath;
247
- const xhr = new XMLHttpRequest();
248
- xhr.open('POST', `${assetPath}remove-render.php`, false);
249
- const formData = new FormData();
250
- formData.append('filename', filename);
251
- xhr.send(formData);
252
- if (xhr.status !== 200) {
253
- return false;
254
- }
255
- this.renderService.renderedRoomImages = this.renderService.renderedRoomImages.filter(item => item !== url);
256
- }
222
+ this._newRenderService.renderedRoomImages.splice(index, 1);
257
223
  return true;
258
224
  }
259
225
  renderOnChange() {
@@ -350,4 +316,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
350
316
  type: ViewChild,
351
317
  args: ['render_image_height', { static: true }]
352
318
  }] } });
353
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3JlbmRlci9yZW5kZXItZGlhbG9nL3JlbmRlci1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yZW5kZXIvcmVuZGVyLWRpYWxvZy9yZW5kZXItZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQWMsTUFBTSxFQUFhLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRy9FLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDM0QsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBS2pELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBSTNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRSxPQUFPLEVBQUMsZUFBZSxFQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUFDLElBQUksRUFBRSxTQUFTLEVBQVksT0FBTyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQ3pELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7Ozs7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SyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztZQUN4QyxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3BELENBQUM7S0FDSDs0RkFJVSxxQkFBcUI7a0JBWmpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFO3dCQUNWLE9BQU8sQ0FBQyxZQUFZLEVBQUU7NEJBQ3BCLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUMsWUFBWSxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7NEJBQ3RDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7NEJBQ3hDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7eUJBQ3BELENBQUM7cUJBQ0g7b0JBQ0QsV0FBVyxFQUFFLGdDQUFnQztvQkFDN0MsU0FBUyxFQUFFLENBQUMsZ0NBQWdDLENBQUM7aUJBQzlDOzswQkE0Q0ksTUFBTTsyQkFBQyxlQUFlO3VaQTNCbEIsZ0JBQWdCO3NCQUR0QixTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBSWxDLGVBQWU7c0JBRHJCLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUl4QyxnQkFBZ0I7c0JBRHRCLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgT25EZXN0cm95LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge2FuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlcn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtEb21TYW5pdGl6ZXJ9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQge1JlbmRlclN0YXR1c30gZnJvbSAnLi4vZW51bS9yZW5kZXItc3RhdHVzJztcclxuaW1wb3J0IHtJY29uTmFtZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL2ljb24tbmFtZS5lbnVtJztcclxuaW1wb3J0IHtSZW5kZXJNb2Rlc30gZnJvbSAnLi4vZW51bS9yZW5kZXItbW9kZXMnO1xyXG5pbXBvcnQge0NhbWVyYVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2NhbWVyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtSZW5kZXJTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL3JlbmRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtOZXdSZW5kZXJTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL25ldy1yZW5kZXIuc2VydmljZSc7XHJcbmltcG9ydCB7Q2FtZXJhUG9zaXRpb259IGZyb20gJy4uL21vZGVsL2NhbWVyYS1wb3NpdGlvbic7XHJcbmltcG9ydCB7UmVuZGVyRGF0YX0gZnJvbSAnLi4vbW9kZWwvcmVuZGVyLWRhdGEnO1xyXG5pbXBvcnQge1JlbmRlcn0gZnJvbSAnLi4vbW9kZWwvcmVuZGVyJztcclxuaW1wb3J0IHtSZW5kZXJRdWV1ZUl0ZW19IGZyb20gJy4uL21vZGVsL3JlbmRlci1xdWV1ZS1pdGVtJztcclxuaW1wb3J0IHtBcGlTZXJ2aWNlTW9kdWxlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvM2RtLWFwaSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9tZXNzYWdlLWJ1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS91dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL21lc3NhZ2UtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHtCb3gzLCBNYXRoVXRpbHMsIE9iamVjdDNELCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbktleX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL2NvbmZpZ3VyYXRpb24ta2V5LmVudW0nO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtTY2VuZVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL3NjZW5lLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdycC1yZW5kZXItZGlhbG9nJyxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdzbGlkZUluT3V0JywgW1xyXG4gICAgICBzdGF0ZSgnMScsIHN0eWxlKHsnbWF4LWhlaWdodCc6ICcqJ30pKSxcclxuICAgICAgc3RhdGUoJzAnLCBzdHlsZSh7J21heC1oZWlnaHQnOiAnMHB4J30pKSxcclxuICAgICAgdHJhbnNpdGlvbignKiA9PiAqJywgYW5pbWF0ZSgnMTAwMG1zIGVhc2UtaW4tb3V0JykpLFxyXG4gICAgXSlcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZW5kZXItZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZW5kZXItZGlhbG9nLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlbmRlckRpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyByZWFkb25seSByZW5kZXJTdGF0dXMgPSBSZW5kZXJTdGF0dXM7XHJcbiAgcHVibGljIHJlYWRvbmx5IGljb25OYW1lOiB0eXBlb2YgSWNvbk5hbWUgPSBJY29uTmFtZTtcclxuICBwdWJsaWMgcmVhZG9ubHkgcmVuZGVyTW9kZXMgPSBSZW5kZXJNb2RlcztcclxuICBwdWJsaWMgY2FtZXJhTWF0cml4OiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgaW5wdXROYW1lOiBzdHJpbmcgPSAnQ3VycmVudCBDYW1lcmEnO1xyXG4gIHB1YmxpYyBpbnB1dExpZ2h0OiBudW1iZXIgPSAxO1xyXG4gIHB1YmxpYyBpbnB1dFNpemU6IG51bWJlciA9IDE7XHJcbiAgcHVibGljIGdhbGxlcnlJbmZvOiBhbnkgPSB7fTtcclxuICBwdWJsaWMgaW5wdXRSZVJlbmRlckNoZWNrZWQ6IGJvb2xlYW5bXSA9IFtdO1xyXG4gIHB1YmxpYyBpbWFnZVJlbmRlclNvdXJjZTogYW55ID0gJyc7XHJcbiAgcHVibGljIGNhblJlbmRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAVmlld0NoaWxkKCdyZW5kZXJfaW1hZ2UnLCB7c3RhdGljOiB0cnVlfSlcclxuICBwdWJsaWMgcmVuZGVySW1hZ2VGaWVsZDogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgncmVuZGVyX2ltYWdlX3dpZHRoJywge3N0YXRpYzogdHJ1ZX0pXHJcbiAgcHVibGljIGltYWdlV2lkdGhGaWVsZDogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgncmVuZGVyX2ltYWdlX2hlaWdodCcsIHtzdGF0aWM6IHRydWV9KVxyXG4gIHB1YmxpYyBpbWFnZUhlaWdodEZpZWxkOiBFbGVtZW50UmVmO1xyXG5cclxuICBwdWJsaWMgZ2V0IHJlbmRlclByb2dyZXNzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMudXNlTmV3UmVuZGVyID8gdGhpcy5fbmV3UmVuZGVyU2VydmljZS5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnJlbmRlclByb2dyZXNzIDogdGhpcy5yZW5kZXJTZXJ2aWNlLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucmVuZGVyUHJvZ3Jlc3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRpc2FibGVQaWN0dXJlQnV0dG9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnVzZU5ld1JlbmRlcikge1xyXG4gICAgICByZXR1cm4gdGhpcy5fbmV3UmVuZGVyU2VydmljZS5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnJlbmRlclN0YXR1cyA9PT0gdGhpcy5yZW5kZXJTdGF0dXMuSXNSdW5uaW5nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICh0aGlzLnJlbmRlclNlcnZpY2UuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5yZW5kZXJTdGF0dXMgPT09IHRoaXMucmVuZGVyU3RhdHVzLklzUnVubmluZyB8fCB0aGlzLnJlbmRlclNlcnZpY2Uuc2VydmVyRGF0YS5zZXR1cCA9PT0gZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCByZW5kZXJlZEltYWdlcygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMudXNlTmV3UmVuZGVyID8gdGhpcy5fbmV3UmVuZGVyU2VydmljZS5yZW5kZXJlZFJvb21JbWFnZXMgOiB0aGlzLnJlbmRlclNlcnZpY2UucmVuZGVyZWRSb29tSW1hZ2VzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IHsgaGFzRXJyb3I6IGJvb2xlYW4sIGVycm9yOiBzdHJpbmcgfSxcclxuICAgIHB1YmxpYyBjYW1lcmFTZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxyXG4gICAgcHVibGljIHJlbmRlclNlcnZpY2U6IFJlbmRlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdXRpbHNTZXJ2aWNlOiBVdGlsc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX25ld1JlbmRlclNlcnZpY2U6IE5ld1JlbmRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF8zZG1SZW5kZXJBcGk6IEFwaVNlcnZpY2VNb2R1bGUsXHJcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgX2NhbWVyYVNlcnZpY2U6IENhbWVyYVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5jYW1lcmFNYXRyaXggPSB0aGlzLmNhbWVyYVNlcnZpY2UuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZS5lbGVtZW50cztcclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5yZW5kZXJTZXJ2aWNlLnJlbmRlclJvb21JbWFnZUNoYW5nZWQuc3Vic2NyaWJlKCh1cmw6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmICh1cmwgIT09ICcnKSB7XHJcbiAgICAgICAgICB0aGlzLmltYWdlUmVuZGVyU291cmNlID0gdGhpcy5fZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwodXJsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9uZXdSZW5kZXJTZXJ2aWNlLnJlbmRlclJvb21JbWFnZUNoYW5nZWQuc3Vic2NyaWJlKCh1cmw6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmICh1cmwgIT09ICcnKSB7XHJcbiAgICAgICAgICB0aGlzLmltYWdlUmVuZGVyU291cmNlID0gdGhpcy5fZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwodXJsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5jaGVja0hhc0dhbGxlcnkoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICAgIHRoaXMucmVuZGVySW1hZ2VGaWVsZCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuaW1hZ2VIZWlnaHRGaWVsZCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuaW1hZ2VXaWR0aEZpZWxkID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoYW5nZUlucHV0U2l6ZShtb2RlbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmlucHV0U2l6ZSA9IG1vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZFJlbmRlckN1c3RvbSgpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCBjYW1Qb3NpdGlvbjogQ2FtZXJhUG9zaXRpb24gPSBuZXcgQ2FtZXJhUG9zaXRpb24oKTtcclxuICAgIGNhbVBvc2l0aW9uLmlkID0gdGhpcy5nZXRDYW1lcmFQb3NpdGlvbklkKCk7XHJcbiAgICBjYW1Qb3NpdGlvbi5uYW1lID0gdGhpcy5pbnB1dE5hbWU7XHJcbiAgICBjYW1Qb3NpdGlvbi5wb3NpdGlvbiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jYW1lcmFTZXJ2aWNlLmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UuZWxlbWVudHMpKTtcclxuICAgIGNhbVBvc2l0aW9uLnR5cGUgPSAnY3VzdG9tJztcclxuXHJcbiAgICBjb25zdCBzY2VuZVBhcmFtczogUmVuZGVyRGF0YSA9IHRoaXMucmVuZGVyU2VydmljZS5nZXRSZW5kZXJQYXJhbWV0ZXJzKHRoaXMucmVuZGVyTW9kZXMuUmVuZGVySW9uZSk7XHJcblxyXG4gICAgY29uc3QgcmVuZGVyOiBSZW5kZXIgPSBuZXcgUmVuZGVyKCk7XHJcbiAgICByZW5kZXIuaWQgPSB0aGlzLmdldFJlbmRlcklkKCk7XHJcbiAgICByZW5kZXIucHJvZHVjdEhhc2ggPSBzY2VuZVBhcmFtcy5jb25maWd1cmVkSXRlbS5kZWZhdWx0UmVuZGVyUGF0aDtcclxuICAgIHJlbmRlci5saWdodG5pbmcgPSB0aGlzLnJlbmRlclNlcnZpY2UuZ2V0TGlnaHRuaW5nT25JZCh0aGlzLmlucHV0TGlnaHQpO1xyXG4gICAgcmVuZGVyLmltYWdlU2l6ZSA9IHRoaXMucmVuZGVyU2VydmljZS5nZXRJbWFnZVNpemVPbklkKHRoaXMuaW5wdXRTaXplKTtcclxuICAgIHJlbmRlci5jYW1lcmFQb3NpdGlvbiA9IGNhbVBvc2l0aW9uO1xyXG5cclxuICAgIHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJzLnB1c2gocmVuZGVyKTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkUmVuZGVyR2FsbGVyeSgpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCBzY2VuZVBhcmFtcyA9IHRoaXMucmVuZGVyU2VydmljZS5nZXRSZW5kZXJQYXJhbWV0ZXJzKHRoaXMucmVuZGVyTW9kZXMuUmVuZGVySW9uZSk7XHJcblxyXG4gICAgY29uc3QgZGVncmVlcyA9IDM2MDtcclxuICAgIGNvbnN0IGFuZ2xlcyA9IDg7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbmdsZXM7IGkrKykge1xyXG5cclxuICAgICAgY29uc3QgY2FtUG9zaXRpb24gPSB7XHJcbiAgICAgICAgaWQ6IHRoaXMuZ2V0Q2FtZXJhUG9zaXRpb25JZCgpLFxyXG4gICAgICAgIG5hbWU6ICdHQUxMRVJZICcgKyAoaSAqIChkZWdyZWVzIC8gYW5nbGVzKSksXHJcbiAgICAgICAgcG9zaXRpb246IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jYW1lcmFTZXJ2aWNlLmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UuZWxlbWVudHMpKSxcclxuICAgICAgICB0eXBlOiAnZ2FsbGVyeScsXHJcbiAgICAgICAgYW5nbGU6IChpICogKGRlZ3JlZXMgLyBhbmdsZXMpKVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgcmVuZGVyOiBSZW5kZXIgPSBuZXcgUmVuZGVyKCk7XHJcbiAgICAgIHJlbmRlci5pZCA9IHRoaXMuZ2V0UmVuZGVySWQoKTtcclxuICAgICAgcmVuZGVyLnByb2R1Y3RIYXNoID0gc2NlbmVQYXJhbXMuY29uZmlndXJlZEl0ZW0uZGVmYXVsdFJlbmRlclBhdGg7XHJcbiAgICAgIHJlbmRlci5saWdodG5pbmcgPSB0aGlzLnJlbmRlclNlcnZpY2UuZ2V0TGlnaHRuaW5nT25JZCh0aGlzLmlucHV0TGlnaHQpO1xyXG4gICAgICByZW5kZXIuaW1hZ2VTaXplID0gdGhpcy5yZW5kZXJTZXJ2aWNlLmdldEltYWdlU2l6ZU9uSWQodGhpcy5pbnB1dFNpemUpO1xyXG4gICAgICByZW5kZXIuY2FtZXJhUG9zaXRpb24gPSBjYW1Qb3NpdGlvbjtcclxuXHJcbiAgICAgIHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJzLnB1c2gocmVuZGVyKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLmNoZWNrSGFzR2FsbGVyeSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENhbWVyYVBvc2l0aW9uSWQoKTogbnVtYmVyIHtcclxuICAgIGxldCBhZGRJZCA9IDE7XHJcbiAgICBpZiAodGhpcy5yZW5kZXJTZXJ2aWNlLmNhbWVyYVBvc2l0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGFkZElkID0gdGhpcy5yZW5kZXJTZXJ2aWNlLmNhbWVyYVBvc2l0aW9uc1t0aGlzLnJlbmRlclNlcnZpY2UuY2FtZXJhUG9zaXRpb25zLmxlbmd0aCAtIDFdLmlkICsgMTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYWRkSWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVuZGVySWQoKTogbnVtYmVyIHtcclxuICAgIGxldCBhZGRJZCA9IDE7XHJcbiAgICBpZiAodGhpcy5yZW5kZXJTZXJ2aWNlLnJlbmRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhZGRJZCA9IHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJzW3RoaXMucmVuZGVyU2VydmljZS5yZW5kZXJzLmxlbmd0aCAtIDFdLmlkICsgMTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYWRkSWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlQ2FtZXJhUG9zaXRpb24ocmVuZGVyOiBhbnkpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAocmVuZGVyLmNhbWVyYVBvc2l0aW9uICE9PSB1bmRlZmluZWQgJiYgcmVuZGVyLmNhbWVyYVBvc2l0aW9uLnR5cGUgPT09ICdjdXN0b20nKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJzLmZvckVhY2goKGl0ZW06IFJlbmRlciwga2V5LCBvYmplY3QpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5pZCA9PT0gcmVuZGVyLmlkKSB7XHJcbiAgICAgICAgICBvYmplY3Quc3BsaWNlKGtleSwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoKHJlbmRlci5jYW1lcmFQb3NpdGlvbiAhPT0gdW5kZWZpbmVkICYmIHJlbmRlci5jYW1lcmFQb3NpdGlvbi50eXBlID09PSAnZ2FsbGVyeScpIHx8IHJlbmRlciA9PT0gJ2dhbGxlcnknKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZW5kZXJTZXJ2aWNlLnJlbmRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAodGhpcy5yZW5kZXJTZXJ2aWNlLnJlbmRlcnNbaV0uY2FtZXJhUG9zaXRpb24udHlwZSA9PT0gJ2dhbGxlcnknKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlclNlcnZpY2UucmVuZGVycy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICBpID0gaSAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbnB1dFJlUmVuZGVyQ2hlY2tlZCA9IFtdO1xyXG4gICAgdGhpcy5yZW5kZXJPbkNoYW5nZSgpO1xyXG4gICAgdGhpcy5jaGVja0hhc0dhbGxlcnkoKTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgYWRkUmVuZGVyc1RvUXVldWUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5pbnB1dFJlUmVuZGVyQ2hlY2tlZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRSZVJlbmRlckNoZWNrZWQuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVldWVJdGVtID0gbmV3IFJlbmRlclF1ZXVlSXRlbSgpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJzW2tleV0uc3RhdHVzID0gUmVuZGVyU3RhdHVzLklzV2FpdGluZztcclxuICAgICAgICBxdWV1ZUl0ZW0ucGFyYW1zID0gdGhpcy5yZW5kZXJTZXJ2aWNlLmdldFJlbmRlclBhcmFtZXRlcnModGhpcy5yZW5kZXJNb2Rlcy5SZW5kZXJJb25lKTtcclxuICAgICAgICBxdWV1ZUl0ZW0ucGFyYW1zLmNhbWVyYU1hdHJpeCA9IHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJzW2tleV0uY2FtZXJhUG9zaXRpb24ucG9zaXRpb247XHJcbiAgICAgICAgcXVldWVJdGVtLnBhcmFtcy5pbWFnZVdpZHRoID0gdGhpcy5yZW5kZXJTZXJ2aWNlLnJlbmRlcnNba2V5XS5pbWFnZVNpemUud2lkdGg7XHJcbiAgICAgICAgcXVldWVJdGVtLnBhcmFtcy5pbWFnZUhlaWdodCA9IHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJzW2tleV0uaW1hZ2VTaXplLmhlaWdodDtcclxuICAgICAgICBxdWV1ZUl0ZW0ucGFyYW1zLnJlbmRlciA9IHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJzW2tleV07XHJcbiAgICAgICAgdGhpcy5yZW5kZXJTZXJ2aWNlLnJlbmRlclF1ZXVlLnB1c2gocXVldWVJdGVtKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuaW5wdXRSZVJlbmRlckNoZWNrZWQgPSBbXTtcclxuICAgICAgdGhpcy5yZW5kZXJPbkNoYW5nZSgpO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5yZW5kZXJTZXJ2aWNlLnN0YXJ0UmVuZGVyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc3RhcnRSZW5kZXJpbmdSb29tKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnVzZU5ld1JlbmRlcikge1xyXG4gICAgICB0aGlzLl9uZXdSZW5kZXJTZXJ2aWNlLnJlbmRlclJvb20odGhpcy5yZW5kZXJTZXJ2aWNlLmdldEltYWdlU2l6ZU9uSWQodGhpcy5yZW5kZXJTZXJ2aWNlLnNlbGVjdGVkSW1hZ2VTaXplKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmltYWdlUmVuZGVyU291cmNlID0gJyc7XHJcblxyXG4gICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBuZXcgUmVuZGVyUXVldWVJdGVtKCk7XHJcbiAgICAgIHF1ZXVlSXRlbS5wYXJhbXMgPSB0aGlzLnJlbmRlclNlcnZpY2UuZ2V0UmVuZGVyUGFyYW1ldGVycyh0aGlzLnJlbmRlck1vZGVzLlJlbmRlclJvb20pO1xyXG4gICAgICB0aGlzLnJlbmRlclNlcnZpY2UucmVuZGVyUXVldWUgPSBbXTtcclxuICAgICAgdGhpcy5yZW5kZXJTZXJ2aWNlLnJlbmRlclF1ZXVlLnB1c2gocXVldWVJdGVtKTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMucmVuZGVyU2VydmljZS5zdGFydFJlbmRlcmluZygpXHJcbiAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJTZXJ2aWNlLnJlbmRlclF1ZXVlID0gW107XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlQmxlbmRlclJlbmRlcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlbmRlclNpemUgPSB0aGlzLnJlbmRlclNlcnZpY2UuZ2V0SW1hZ2VTaXplT25JZCh0aGlzLnJlbmRlclNlcnZpY2Uuc2VsZWN0ZWRJbWFnZVNpemUpO1xyXG4gICAgY29uc3QgcmVuZGVyU2NlbmVBc3NldElkOiBzdHJpbmcgPSB0aGlzLnJlbmRlclNlcnZpY2Uuc2VsZWN0ZWRSZW5kZXJTY2VuZTtcclxuICAgIGNvbnN0IHJlbmRlcklucHV0OiBhbnkgPSB7XHJcbiAgICAgICdoZWlnaHQnOiByZW5kZXJTaXplLmhlaWdodCxcclxuICAgICAgJ3dpZHRoJzogcmVuZGVyU2l6ZS53aWR0aCxcclxuICAgICAgJ3NjZW5lQXNzZXRJZCc6IHJlbmRlclNjZW5lQXNzZXRJZFxyXG4gICAgfTtcclxuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TaG93TG9hZGluZ0luZGljYXRvciwge3RpdGxlOiAnVXBsb2FkaW5nLi4uJ30pO1xyXG4gICAgdGhpcy5fdXRpbHNTZXJ2aWNlLnByZXBSb29tRm9yUmVuZGVyKGZhbHNlLCByZW5kZXJJbnB1dCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsQmxlbmRlclJlbmRlcigpOiB2b2lkIHtcclxuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlTG9hZGluZ0luZGljYXRvcik7XHJcbiAgICB0aGlzLl9kaWFsb2cuY2xvc2VBbGwoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlSW1hZ2UodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xyXG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xyXG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgbnVsbCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gICAgbGluay5yZW1vdmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVSZW5kZXIodXJsOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy51c2VOZXdSZW5kZXIpIHtcclxuICAgICAgdGhpcy5fbmV3UmVuZGVyU2VydmljZS5yZW5kZXJlZFJvb21JbWFnZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy8nKSArIDEpO1xyXG4gICAgICBjb25zdCBhc3NldFBhdGggPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoO1xyXG4gICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgeGhyLm9wZW4oJ1BPU1QnLCBgJHthc3NldFBhdGh9cmVtb3ZlLXJlbmRlci5waHBgLCBmYWxzZSk7XHJcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZW5hbWUnLCBmaWxlbmFtZSk7XHJcbiAgICAgIHhoci5zZW5kKGZvcm1EYXRhKTtcclxuICAgICAgaWYgKHhoci5zdGF0dXMgIT09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5yZW5kZXJTZXJ2aWNlLnJlbmRlcmVkUm9vbUltYWdlcyA9IHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJlZFJvb21JbWFnZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gdXJsKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlck9uQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgbGV0IGNoZWNrID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5pbnB1dFJlUmVuZGVyQ2hlY2tlZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRSZVJlbmRlckNoZWNrZWQuZm9yRWFjaCgoeCkgPT4ge1xyXG4gICAgICAgIGlmICh4ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBjaGVjayA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuY2FuUmVuZGVyID0gY2hlY2s7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2FsbGVyeVJlbmRlck9uQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJlbmRlclNlcnZpY2UucmVuZGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJzLmZvckVhY2goKHg6IFJlbmRlciwga2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKHguY2FtZXJhUG9zaXRpb24udHlwZSA9PT0gJ2dhbGxlcnknKSB7XHJcbiAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dFJlUmVuZGVyQ2hlY2tlZFtrZXldID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXRSZVJlbmRlckNoZWNrZWRba2V5XSA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlck9uQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tIYXNHYWxsZXJ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nYWxsZXJ5SW5mbyA9IHtcclxuICAgICAgaXRlbXM6IDAsXHJcbiAgICAgIHJlbmRlckluZm86IG51bGxcclxuICAgIH07XHJcbiAgICBpZiAodGhpcy5yZW5kZXJTZXJ2aWNlLnJlbmRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnJlbmRlclNlcnZpY2UucmVuZGVycy5mb3JFYWNoKCh4OiBSZW5kZXIpID0+IHtcclxuICAgICAgICBpZiAoeC5jYW1lcmFQb3NpdGlvbi50eXBlID09PSAnZ2FsbGVyeScgJiYgeC5wcm9kdWN0SGFzaCA9PT0gdGhpcy5yZW5kZXJTZXJ2aWNlLmN1cnJlbnRQcm9kdWN0SGFzaCkge1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5SW5mby5pdGVtcysrO1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5SW5mby5yZW5kZXJJbmZvID0geDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG1vdmVDYW1lcmFXaXRoaW5Cb3VuZHMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBmbG9vclBsYW5lSXRlbSA9IHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS5nZXRPYmplY3RCeU5hbWUoJ2Zsb29yLXBsYW5lJyk7XHJcbiAgICBjb25zdCBjYW1lcmFPYmplY3QgPSB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYTtcclxuICAgIGNvbnN0IHdhbGxIZWlnaHQ6IG51bWJlciA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuV2FsbEhlaWdodCkgLyAxMDA7IC8vIGNvbnZlcnQgY20gdG8gbSBzbyB0aGUgdW5pdHMgbWF0Y2hcclxuXHJcbiAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCh0cnVlKTtcclxuICAgIGNvbnN0IHRhcmdldEJveDogQm94MyA9IG5ldyBCb3gzKCkuc2V0RnJvbU9iamVjdChmbG9vclBsYW5lSXRlbSk7XHJcbiAgICBjb25zdCBtb3ZpbmdCb3g6IEJveDMgPSBuZXcgQm94MygpLnNldEZyb21PYmplY3QoY2FtZXJhT2JqZWN0KTtcclxuICAgIGNvbnN0IG1vdmluZ1NpemU6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgbW92aW5nQm94LmdldFNpemUobW92aW5nU2l6ZSk7XHJcbiAgICBjb25zdCBtb3ZpbmdQb3NpdGlvbjogVmVjdG9yMyA9IGNhbWVyYU9iamVjdC5wb3NpdGlvbjtcclxuICAgIG1vdmluZ1Bvc2l0aW9uLnggPSBNYXRoVXRpbHMuY2xhbXAobW92aW5nUG9zaXRpb24ueCwgdGFyZ2V0Qm94Lm1pbi54ICsgbW92aW5nU2l6ZS54IC8gMiwgdGFyZ2V0Qm94Lm1heC54IC0gbW92aW5nU2l6ZS54IC8gMik7XHJcbiAgICAvLyBtb3ZpbmdQb3NpdGlvbi55ID0gTWF0aFV0aWxzLmNsYW1wKG1vdmluZ1Bvc2l0aW9uLnksIHRhcmdldEJveC5taW4ueSArIG1vdmluZ1NpemUueSAvIDIsIHRhcmdldEJveC5tYXgueSAtIG1vdmluZ1NpemUueSAvIDIpO1xyXG4gICAgbW92aW5nUG9zaXRpb24ueSA9IHdhbGxIZWlnaHQgLyAyO1xyXG4gICAgbW92aW5nUG9zaXRpb24ueiA9IE1hdGhVdGlscy5jbGFtcChtb3ZpbmdQb3NpdGlvbi56LCB0YXJnZXRCb3gubWluLnogKyBtb3ZpbmdTaXplLnogLyAyLCB0YXJnZXRCb3gubWF4LnogLSBtb3ZpbmdTaXplLnogLyAyKTtcclxuICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLnJvdGF0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLnBvc2l0aW9uLnNldChtb3ZpbmdQb3NpdGlvbi54LCBtb3ZpbmdQb3NpdGlvbi55LCBtb3ZpbmdQb3NpdGlvbi56KTtcclxuICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhTW92ZW1lbnRDaGFuZ2VkLm5leHQoKTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwicmVuZGVyU2VydmljZS5zZXJ2ZXJEYXRhLnJlbmRlck1vZGUgPT09IHJlbmRlck1vZGVzLlJlbmRlcklvbmVcIj5cclxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cclxuICAgIDxkaXYgY2xhc3M9XCJyZW5kZXItY2FtZXJhLXBvc2l0aW9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmVuZGVyLWNhbWVyYS1wb3NpdGlvbnMtbGVmdFwiPlxyXG4gICAgICAgIDwhLS1cclxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwibWF0cml4VG9nZ2xlXCIgKGNsaWNrKT1cInRvZ2dsZUNhbWVyYVBvc2l0aW9uKClcIj57eyBzaG93TWF0cml4ID8gKCdISURFX01BVFJJWCcgfCBsb2NhbGl6ZSkgOiAoJ1NIT1dfTUFUUklYJyB8IGxvY2FsaXplKSB9fTwvYnV0dG9uPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1tYXRyaXgtY29udGFpbmVyXCIgKm5nSWY9XCJzaG93TWF0cml4XCI+XHJcbiAgICAgICAgICA8bWF0LWdyaWQtbGlzdCBbY29sc109XCI0XCIgcm93SGVpZ2h0PVwiMzVweFwiIGNsYXNzPVwiY2FtZXJhX3Bvc2l0aW9uX2dyaWRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjYW1lcmFNYXRyaXg7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiMVwiPjxiPnt7IGkgfX06PC9iPjwvbWF0LWdyaWQtdGlsZT5cclxuICAgICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiM1wiPjxzcGFuPnt7aXRlbX19PC9zcGFuPjwvbWF0LWdyaWQtdGlsZT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L21hdC1ncmlkLWxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgLS0+XHJcblxyXG4gICAgICAgIDxoND57eydMSUdIVE5JTkcnIHwgbG9jYWxpemV9fTwvaDQ+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZmFjZS1zZWxlY3QtZm9ybVwiPlxyXG4gICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJpbnB1dExpZ2h0XCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBsaWdodCBvZiByZW5kZXJTZXJ2aWNlLmxpZ2h0bmluZ3NcIiBbdmFsdWVdPVwibGlnaHQuaWRcIj57eyBsaWdodC5uYW1lIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgIDxoND57eydTSVpFJyB8IGxvY2FsaXplfX08L2g0PlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZhY2Utc2VsZWN0LWZvcm1cIj5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cImlucHV0U2l6ZVwiPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc2l6ZSBvZiByZW5kZXJTZXJ2aWNlLmltYWdlU2l6ZXNcIiBbdmFsdWVdPVwic2l6ZS5pZFwiPnt7IHNpemUubmFtZSB9fSB8IDxlbT57eyBzaXplLndpZHRoIH19eHt7IHNpemUuaGVpZ2h0IH19PC9lbT48L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8cD5Zb3Ugc2VsZWN0ZWQ6IHt7aW5wdXRTaXplfX08L3A+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXNlcGFyYXRvclwiPjwvZGl2PlxyXG5cclxuICAgICAgICA8aDQ+e3snTkFNRScgfCBsb2NhbGl6ZX19PC9oND5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucHV0TmFtZVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgIDxwPnt7ICdBRERfQ1VSUkVOVF9DQU1FUkFfUE9TSVRJT05fVE9fUkVOREVSJyB8IGxvY2FsaXplIH19PC9wPlxyXG5cclxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwiYWRkX2NhbWVyYV9wb3NpdGlvblwiIGNvbG9yPVwicHJpbWFyeVwiIHRpdGxlPVwie3snQUREX0NVUlJFTlRfUE9TSVRJT04nIHwgbG9jYWxpemV9fVwiIChjbGljayk9XCJhZGRSZW5kZXJDdXN0b20oKVwiPlxyXG4gICAgICAgICAge3snQUREX0NVUlJFTlRfUE9TSVRJT04nIHwgbG9jYWxpemV9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGhpcy5nYWxsZXJ5SW5mby5pdGVtcyA9PT0gMFwiPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1zZXBhcmF0b3JcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgICA8cD57eyAnQUREX0dBTExFUllfUE9TSVRJT05TX1RPX1JFTkRFUl9JTkZPJyB8IGxvY2FsaXplIH19PC9wPlxyXG5cclxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJhZGRfZ2FsbGVyeV9wb3NpdGlvbnNcIiBjb2xvcj1cInByaW1hcnlcIiB0aXRsZT1cInt7J0FERF9HQUxMRVJZX1BPU0lUSU9OUycgfCBsb2NhbGl6ZX19XCIgKGNsaWNrKT1cImFkZFJlbmRlckdhbGxlcnkoKVwiPlxyXG4gICAgICAgICAgICB7eydBRERfR0FMTEVSWV9QT1NJVElPTlMnIHwgbG9jYWxpemV9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyZW5kZXItY2FtZXJhLXBvc2l0aW9ucy1yaWdodFwiPlxyXG4gICAgICAgIDxtYXQtZ3JpZC1saXN0IFtjb2xzXT1cIjE2XCIgcm93SGVpZ2h0PVwiMzVweFwiIGNsYXNzPVwiY2FtZXJhX3Bvc2l0aW9uc19ncmlkXCI+XHJcbiAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiMVwiPjxkaXYgY2xhc3M9XCJncmlkLXRpbGUtaGVhZFwiPjwvZGl2PjwvbWF0LWdyaWQtdGlsZT5cclxuICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIzXCI+PGRpdiBjbGFzcz1cImdyaWQtdGlsZS1oZWFkXCI+e3snQVZBSUxBQkxFJyB8IGxvY2FsaXplfX08L2Rpdj48L21hdC1ncmlkLXRpbGU+XHJcbiAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiNVwiPjxkaXYgY2xhc3M9XCJncmlkLXRpbGUtaGVhZFwiPnt7J05BTUUnIHwgbG9jYWxpemV9fTwvZGl2PjwvbWF0LWdyaWQtdGlsZT5cclxuICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIzXCI+PGRpdiBjbGFzcz1cImdyaWQtdGlsZS1oZWFkXCI+e3snTElHSFQnIHwgbG9jYWxpemV9fTwvZGl2PjwvbWF0LWdyaWQtdGlsZT5cclxuICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIzXCI+PGRpdiBjbGFzcz1cImdyaWQtdGlsZS1oZWFkXCI+e3snU0laRScgfCBsb2NhbGl6ZX19PC9kaXY+PC9tYXQtZ3JpZC10aWxlPlxyXG4gICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjFcIj48L21hdC1ncmlkLXRpbGU+XHJcbiAgICAgICAgPC9tYXQtZ3JpZC1saXN0PlxyXG4gICAgICAgIDxtYXQtZ3JpZC1saXN0IFtjb2xzXT1cIjE2XCIgcm93SGVpZ2h0PVwiNTVweFwiIGNsYXNzPVwiY2FtZXJhX3Bvc2l0aW9uc19ncmlkXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZW5kZXIgb2YgcmVuZGVyU2VydmljZS5yZW5kZXJzOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZW5kZXIuY2FtZXJhUG9zaXRpb24udHlwZSA9PT0gJ2N1c3RvbScgJiYgcmVuZGVyLnByb2R1Y3RIYXNoID09PSByZW5kZXJTZXJ2aWNlLmN1cnJlbnRQcm9kdWN0SGFzaFwiIGNsYXNzPVwiZ3JpZF9oZWFkXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXRpbGUtY29udGVudCBuby1wYWRkaW5nXCIgW2hpZGRlbl09XCJyZW5kZXIuc3RhdHVzID09PSByZW5kZXJTdGF0dXMuSXNXYWl0aW5nIHx8IHJlbmRlci5zdGF0dXMgPT09IHJlbmRlclN0YXR1cy5Jc1J1bm5pbmdcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwiaW5wdXRSZVJlbmRlckNoZWNrZWRbaV1cIiBbdmFsdWVdPVwicmVuZGVyLmlkXCIgKGNoYW5nZSk9XCJyZW5kZXJPbkNoYW5nZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XHJcbiAgICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXRpbGUtY29udGVudCBncmlkLXRpbGUtaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIiAqbmdJZj1cInJlbmRlci51cmwgPT09ICcnICYmIHJlbmRlci5zdGF0dXMgIT09IHJlbmRlclN0YXR1cy5Jc1J1bm5pbmdcIj5jYW1lcmFfYWx0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3sgcmVuZGVyLnVybCB9fVwiIHRhcmdldD1cIl9ibGFua1wiIGRvd25sb2FkICpuZ0lmPVwicmVuZGVyLnVybCAhPT0gJycgJiYgcmVuZGVyLnN0YXR1cyAhPT0gcmVuZGVyU3RhdHVzLklzUnVubmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJ7eyByZW5kZXIudXJsIH19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cInJlbmRlci5zdGF0dXMgPT09IHJlbmRlclN0YXR1cy5Jc1J1bm5pbmdcIiBbZGlhbWV0ZXJdPVwiMjVcIiBbbW9kZV09XCInZGV0ZXJtaW5hdGUnXCIgW3ZhbHVlXT1cInJlbmRlci5wcm9ncmVzcyA+IDEwID8gcmVuZGVyLnByb2dyZXNzIDogMTBcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cclxuICAgICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiNVwiPjxkaXYgY2xhc3M9XCJncmlkLXRpbGUtY29udGVudFwiPnt7IHJlbmRlci5jYW1lcmFQb3NpdGlvbi5uYW1lIH19PC9kaXY+PC9tYXQtZ3JpZC10aWxlPlxyXG4gICAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIzXCI+PGRpdiBjbGFzcz1cImdyaWQtdGlsZS1jb250ZW50XCI+e3sgcmVuZGVyLmxpZ2h0bmluZy5uYW1lIH19PC9kaXY+PC9tYXQtZ3JpZC10aWxlPlxyXG4gICAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIzXCI+PGRpdiBjbGFzcz1cImdyaWQtdGlsZS1jb250ZW50XCI+e3sgcmVuZGVyLmltYWdlU2l6ZS5uYW1lIH19IHwgPGVtPnt7IHJlbmRlci5pbWFnZVNpemUud2lkdGggfX14e3sgcmVuZGVyLmltYWdlU2l6ZS5oZWlnaHQgfX08L2VtPjwvZGl2PjwvbWF0LWdyaWQtdGlsZT5cclxuICAgICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiMVwiPjxkaXYgY2xhc3M9XCJncmlkLXRpbGUtY29udGVudCBuby1wYWRkaW5nIHJpZ2h0XCI+PGJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlQ2FtZXJhUG9zaXRpb24ocmVuZGVyKVwiIGNsYXNzPVwicmVtb3ZlLWJ0blwiIFtoaWRkZW5dPVwicmVuZGVyLnN0YXR1cyA9PT0gcmVuZGVyU3RhdHVzLklzV2FpdGluZyB8fCByZW5kZXIuc3RhdHVzID09PSByZW5kZXJTdGF0dXMuSXNSdW5uaW5nXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+PC9kaXY+PC9tYXQtZ3JpZC10aWxlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoaXMuZ2FsbGVyeUluZm8uaXRlbXMgPiAwXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjFcIiBjbGFzcz1cImdyaWRfaGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtdGlsZS1jb250ZW50IG5vLXBhZGRpbmdcIiBbaGlkZGVuXT1cImdhbGxlcnlJbmZvLnJlbmRlckluZm8uc3RhdHVzID09PSByZW5kZXJTdGF0dXMuSXNXYWl0aW5nIHx8IGdhbGxlcnlJbmZvLnJlbmRlckluZm8uc3RhdHVzID09PSByZW5kZXJTdGF0dXMuSXNSdW5uaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiAoY2hhbmdlKT1cImdhbGxlcnlSZW5kZXJPbkNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XHJcbiAgICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjhcIiBjbGFzcz1cImdyaWRfaGVhZFwiPjxkaXYgY2xhc3M9XCJncmlkLXRpbGUtY29udGVudFwiPnt7ICdHQUxMRVJZX0lNQUdFU19GUk9NJyB8IGxvY2FsaXplIH19IHt7IGdhbGxlcnlJbmZvLml0ZW1zIH19IHt7ICdDQU1FUkFfUE9TSVRJT05TJyB8IGxvY2FsaXplIH19PC9kaXY+PC9tYXQtZ3JpZC10aWxlPlxyXG4gICAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIzXCIgY2xhc3M9XCJncmlkX2hlYWRcIj48ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLWNvbnRlbnRcIj57eyBnYWxsZXJ5SW5mby5yZW5kZXJJbmZvLmxpZ2h0bmluZy5uYW1lIH19PC9kaXY+PC9tYXQtZ3JpZC10aWxlPlxyXG4gICAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIzXCIgY2xhc3M9XCJncmlkX2hlYWRcIj48ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLWNvbnRlbnRcIj57eyBnYWxsZXJ5SW5mby5yZW5kZXJJbmZvLmltYWdlU2l6ZS5uYW1lIH19IHwgPGVtPnt7IGdhbGxlcnlJbmZvLnJlbmRlckluZm8uaW1hZ2VTaXplLndpZHRoIH19eHt7IGdhbGxlcnlJbmZvLnJlbmRlckluZm8uaW1hZ2VTaXplLmhlaWdodCB9fTwvZW0+PC9kaXY+PC9tYXQtZ3JpZC10aWxlPlxyXG4gICAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIxXCIgY2xhc3M9XCJncmlkX2hlYWRcIj48ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLWNvbnRlbnQgbm8tcGFkZGluZyByaWdodFwiPjxidXR0b24gKGNsaWNrKT1cInJlbW92ZUNhbWVyYVBvc2l0aW9uKCdnYWxsZXJ5JylcIiBjbGFzcz1cInJlbW92ZS1idG5cIiBbaGlkZGVuXT1cImdhbGxlcnlJbmZvLnJlbmRlckluZm8uc3RhdHVzID09PSByZW5kZXJTdGF0dXMuSXNXYWl0aW5nIHx8IGdhbGxlcnlJbmZvLnJlbmRlckluZm8uc3RhdHVzID09PSByZW5kZXJTdGF0dXMuSXNSdW5uaW5nXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+PC9kaXY+PC9tYXQtZ3JpZC10aWxlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmVuZGVyIG9mIHJlbmRlclNlcnZpY2UucmVuZGVyczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZW5kZXIuY2FtZXJhUG9zaXRpb24udHlwZSA9PT0gJ2dhbGxlcnknICYmIHJlbmRlci5wcm9kdWN0SGFzaCA9PT0gcmVuZGVyU2VydmljZS5jdXJyZW50UHJvZHVjdEhhc2hcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXRpbGUtY29udGVudFwiIFtoaWRkZW5dPVwidHJ1ZVwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cImlucHV0UmVSZW5kZXJDaGVja2VkW2ldXCIgW3ZhbHVlXT1cInJlbmRlci5pZFwiIChjaGFuZ2UpPVwicmVuZGVyT25DaGFuZ2UoKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLWNvbnRlbnQgc21hbGwtcGFkZGluZyBncmlkLXRpbGUtaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCIgKm5nSWY9XCJyZW5kZXIudXJsID09PSAnJyAmJiByZW5kZXIuc3RhdHVzICE9PSByZW5kZXJTdGF0dXMuSXNSdW5uaW5nXCI+Y2FtZXJhX2FsdDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3sgcmVuZGVyLnVybCB9fVwiIHRhcmdldD1cIl9ibGFua1wiIGRvd25sb2FkICpuZ0lmPVwicmVuZGVyLnVybCAhPT0gJycgJiYgcmVuZGVyLnN0YXR1cyAhPT0gcmVuZGVyU3RhdHVzLklzUnVubmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cInt7IHJlbmRlci51cmwgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cInJlbmRlci5zdGF0dXMgPT09IHJlbmRlclN0YXR1cy5Jc1J1bm5pbmdcIiBbZGlhbWV0ZXJdPVwiMjVcIiBbbW9kZV09XCInZGV0ZXJtaW5hdGUnXCIgW3ZhbHVlXT1cInJlbmRlci5wcm9ncmVzcyA+IDEwID8gcmVuZGVyLnByb2dyZXNzIDogMTBcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L21hdC1ncmlkLWxpc3Q+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cInJlbmRlcl9idG5cIiAoY2xpY2spPVwiYWRkUmVuZGVyc1RvUXVldWUoKVwiIGNvbG9yPVwicHJpbWFyeVwiIHRpdGxlPVwie3snQ1JFQVRFX1JFTkRFUlMnIHwgbG9jYWxpemV9fVwiIFtkaXNhYmxlZF09XCIhY2FuUmVuZGVyIHx8IHJlbmRlclNlcnZpY2UucmVuZGVyUXVldWUubGVuZ3RoID4gMFwiPlxyXG4gICAgICB7eydDUkVBVEVfUkVOREVSUycgfCBsb2NhbGl6ZX19XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG4gIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlIGNsYXNzPVwiY2xvc2VfYnRuXCI+WDwvYnV0dG9uPlxyXG5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwicmVuZGVyU2VydmljZS5zZXJ2ZXJEYXRhLnJlbmRlck1vZGUgPT09IHJlbmRlck1vZGVzLlJlbmRlclJvb21cIj5cclxuXHJcbiAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgICA8ZGl2IGNsYXNzPVwicmVuZGVyLWNhbWVyYS1wb3NpdGlvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJlbmRlci1jYW1lcmEtcG9zaXRpb25zLWxlZnQgbGFyZ2VcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaW1hZ2VSZW5kZXJTb3VyY2UgIT0gJydcIiBjbGFzcz1cInJlbmRlci1pbWFnZS1jb250ZW50XCI+XHJcbiAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VSZW5kZXJTb3VyY2VcIiAjcmVuZGVyX2ltYWdlPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRlclwiIFtuZ0NsYXNzXT1cIihyZW5kZXJQcm9ncmVzcyA9PSAxMDAgPyAncmVhZHknIDogJycpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG9hZGVyX3Byb2dyZXNzXCIgW3N0eWxlLndpZHRoLiVdPVwiKHJlbmRlclByb2dyZXNzID8gcmVuZGVyUHJvZ3Jlc3MgOiAwKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IChyZW5kZXJQcm9ncmVzcyA/IHJlbmRlclByb2dyZXNzIDogMCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJpbWFnZVJlbmRlclNvdXJjZSA9PSAnJ1wiIGNsYXNzPVwiaW1hZ2Vfc3BhY2VyXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+Y2FtZXJhX2FsdDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhLmhhc0Vycm9yXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVuZGVyLXJlcXVlc3Qtd2FybmluZ1wiPlxyXG4gICAgICAgICAgICA8cCBbdGV4dENvbnRlbnRdPVwiZGF0YS5lcnJvclwiPjwvcD5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtb3ZlLWhlbHAtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwibW92ZUNhbWVyYVdpdGhpbkJvdW5kcygpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIE1vdmUgY2FtZXJhIGluIHRvIHJvb21cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1zZXBhcmF0b3JcIj48L2Rpdj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmYWNlLXNlbGVjdC1mb3JtXCIgKm5nSWY9XCJyZW5kZXJTZXJ2aWNlLnNlcnZlckRhdGEucmVuZGVyTW9kZSA9PT0gcmVuZGVyTW9kZXMuUmVuZGVyUm9vbVwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wiSU1BR0VfU0laRVwiIHwgbG9jYWxpemV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJyZW5kZXJTZXJ2aWNlLnNlbGVjdGVkSW1hZ2VTaXplXCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzaXplIG9mIHJlbmRlclNlcnZpY2UuaW1hZ2VTaXplc1wiIFt2YWx1ZV09XCJzaXplLmlkXCI+e3sgc2l6ZS5uYW1lIH19IHt7IHNpemUud2lkdGggfX14e3sgc2l6ZS5oZWlnaHQgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInJlbmRlclNlcnZpY2UuYmxlbmRGaWxlc1JlbmRlclwiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmFjZS1zZWxlY3QtZm9ybVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwicmVuZGVyU2VydmljZS5zZXJ2ZXJEYXRhLnJlbmRlck1vZGUgPT09IHJlbmRlck1vZGVzLlJlbmRlclJvb21cIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcIkVOVklST05NRU5UXCIgfCBsb2NhbGl6ZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInJlbmRlclNlcnZpY2Uuc2VsZWN0ZWRSZW5kZXJTY2VuZVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2NlbmUgb2YgcmVuZGVyU2VydmljZS5yZW5kZXJTY2VuZXNcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNjZW5lLnNjZW5lQXNzZXRJZFwiPnt7IHNjZW5lLm5hbWUgfX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbjwhLS0gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZhY2Utc2VsZWN0LWZvcm1cIiAqbmdJZj1cInJlbmRlclNlcnZpY2Uuc2VydmVyRGF0YS5yZW5kZXJNb2RlID09PSByZW5kZXJNb2Rlcy5SZW5kZXJSb29tXCI+LS0+XHJcbjwhLS0gICAgICAgICAgPG1hdC1sYWJlbD57e1wiRU5WSVJPTk1FTlRcIiB8IGxvY2FsaXplfX08L21hdC1sYWJlbD4tLT5cclxuPCEtLSAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInJlbmRlclNlcnZpY2Uuc2VsZWN0ZWRFbnZpcm9ubWVudFwiPi0tPlxyXG48IS0tICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHJlbmRlckVudmlyb25tZW50IG9mIHJlbmRlclNlcnZpY2UucmVuZGVyRW52aXJvbm1lbnRzXCIgW3ZhbHVlXT1cInJlbmRlckVudmlyb25tZW50LmlkXCI+e3sgcmVuZGVyRW52aXJvbm1lbnQubmFtZSB9fTwvbWF0LW9wdGlvbj4tLT5cclxuPCEtLSAgICAgICAgICA8L21hdC1zZWxlY3Q+LS0+XHJcbjwhLS0gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+LS0+XHJcblxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhcmVuZGVyU2VydmljZS5ibGVuZEZpbGVzUmVuZGVyXCIgbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cInN0YXJ0UmVuZGVyaW5nUm9vbSgpXCIgY29sb3I9XCJwcmltYXJ5XCIgdGl0bGU9XCJ7eydNQUtFX0FfUElDVFVSRScgfCBsb2NhbGl6ZX19XCIgW2Rpc2FibGVkXT1cImRpc2FibGVQaWN0dXJlQnV0dG9uXCI+XHJcbiAgICAgICAgICB7eydNQUtFX0FfUElDVFVSRScgfCBsb2NhbGl6ZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJyZW5kZXJTZXJ2aWNlLmJsZW5kRmlsZXNSZW5kZXJcIiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwiY3JlYXRlQmxlbmRlclJlbmRlcigpXCIgY29sb3I9XCJwcmltYXJ5XCIgdGl0bGU9XCJ7eydNQUtFX0FfUElDVFVSRScgfCBsb2NhbGl6ZX19XCIgW2Rpc2FibGVkXT1cImRpc2FibGVQaWN0dXJlQnV0dG9uXCI+XHJcbiAgICAgICAgICB7eydNQUtFX0FfUElDVFVSRScgfCBsb2NhbGl6ZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuXHJcbjwhLS0gICAgICA8ZGl2IGNsYXNzPVwicmVuZGVyLWNhbWVyYS1wb3NpdGlvbnMtcmlnaHQgc21hbGxcIj4tLT5cclxuPCEtLSAgICAgICAgPG1hdC1ncmlkLWxpc3QgW2NvbHNdPVwiMTBcIiByb3dIZWlnaHQ9XCIzNXB4XCIgY2xhc3M9XCJjYW1lcmFfcG9zaXRpb25zX2dyaWRcIj4tLT5cclxuPCEtLSAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiM1wiPjxkaXYgY2xhc3M9XCJncmlkLXRpbGUtaGVhZFwiPnt7J0lNQUdFJyB8IGxvY2FsaXplfX08L2Rpdj48L21hdC1ncmlkLXRpbGU+LS0+XHJcbjwhLS0gICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjZcIj48ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLWhlYWRcIj57eydOQU1FJyB8IGxvY2FsaXplfX08L2Rpdj48L21hdC1ncmlkLXRpbGU+LS0+XHJcbjwhLS0gICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjFcIj48ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLWhlYWRcIj48L2Rpdj48L21hdC1ncmlkLXRpbGU+LS0+XHJcbjwhLS0gICAgICAgIDwvbWF0LWdyaWQtbGlzdD4tLT5cclxuPCEtLSAgICAgICAgPG1hdC1ncmlkLWxpc3QgW2NvbHNdPVwiMTFcIiByb3dIZWlnaHQ9XCI1NXB4XCIgY2xhc3M9XCJjYW1lcmFfcG9zaXRpb25zX2dyaWRcIj4tLT5cclxuPCEtLSAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpbWFnZSBvZiByZW5kZXJlZEltYWdlczsgbGV0IGluZGV4ID0gaW5kZXhcIj4tLT5cclxuPCEtLSAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIzXCI+LS0+XHJcbjwhLS0gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXRpbGUtY29udGVudCBncmlkLXRpbGUtaW1hZ2VcIj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyXCI+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3sgaW1hZ2UgfX1cIiB0YXJnZXQ9XCJfYmxhbmtcIiBkb3dubG9hZD4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJ7eyBpbWFnZSB9fVwiPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgPC9hPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxyXG48IS0tICAgICAgICAgICAgICA8L2Rpdj4tLT5cclxuPCEtLSAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT4tLT5cclxuPCEtLSAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCI2XCI+PGRpdiBjbGFzcz1cImdyaWQtdGlsZS1jb250ZW50XCI+e3sgJ0lNQUdFJyB8IGxvY2FsaXplIH19PC9kaXY+PC9tYXQtZ3JpZC10aWxlPi0tPlxyXG48IS0tICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjJcIj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtdGlsZS1jb250ZW50XCI+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNhdmVJbWFnZShpbWFnZSlcIiB0aXRsZT1cInt7J0RPV05MT0FEX0lNQUdFJyB8IGxvY2FsaXplfX1cIj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5nZXRfYXBwPC9tYXQtaWNvbj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICA8L2J1dHRvbj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgPC9kaXY+LS0+XHJcbjwhLS0gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXRpbGUtY29udGVudCBuby1wYWRkaW5nIHJpZ2h0XCI+PGJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlUmVuZGVyKGltYWdlLCBpbmRleClcIiBjbGFzcz1cInJlbW92ZS1idG5cIj48bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+ZGVsZXRlPC9tYXQtaWNvbj48L2J1dHRvbj48L2Rpdj4tLT5cclxuPCEtLSAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT4tLT5cclxuPCEtLSAgICAgICAgICA8L25nLWNvbnRhaW5lcj4tLT5cclxuPCEtLSAgICAgICAgPC9tYXQtZ3JpZC1saXN0Pi0tPlxyXG48IS0tICAgICAgPC9kaXY+LS0+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8YnV0dG9uIG1hdC1idXR0b24gbWF0LWRpYWxvZy1jbG9zZSBjbGFzcz1cImNsb3NlX2J0blwiPlg8L2J1dHRvbj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3JlbmRlci9yZW5kZXItZGlhbG9nL3JlbmRlci1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yZW5kZXIvcmVuZGVyLWRpYWxvZy9yZW5kZXItZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQWMsTUFBTSxFQUFhLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRy9FLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDM0QsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBS2pELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBSTNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRSxPQUFPLEVBQUMsZUFBZSxFQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUFDLElBQUksRUFBRSxTQUFTLEVBQVksT0FBTyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQ3pELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7Ozs7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IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgT25EZXN0cm95LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge2FuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlcn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtEb21TYW5pdGl6ZXJ9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQge1JlbmRlclN0YXR1c30gZnJvbSAnLi4vZW51bS9yZW5kZXItc3RhdHVzJztcclxuaW1wb3J0IHtJY29uTmFtZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL2ljb24tbmFtZS5lbnVtJztcclxuaW1wb3J0IHtSZW5kZXJNb2Rlc30gZnJvbSAnLi4vZW51bS9yZW5kZXItbW9kZXMnO1xyXG5pbXBvcnQge0NhbWVyYVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2NhbWVyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtSZW5kZXJTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL3JlbmRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtOZXdSZW5kZXJTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL25ldy1yZW5kZXIuc2VydmljZSc7XHJcbmltcG9ydCB7Q2FtZXJhUG9zaXRpb259IGZyb20gJy4uL21vZGVsL2NhbWVyYS1wb3NpdGlvbic7XHJcbmltcG9ydCB7UmVuZGVyRGF0YX0gZnJvbSAnLi4vbW9kZWwvcmVuZGVyLWRhdGEnO1xyXG5pbXBvcnQge1JlbmRlcn0gZnJvbSAnLi4vbW9kZWwvcmVuZGVyJztcclxuaW1wb3J0IHtSZW5kZXJRdWV1ZUl0ZW19IGZyb20gJy4uL21vZGVsL3JlbmRlci1xdWV1ZS1pdGVtJztcclxuaW1wb3J0IHtBcGlTZXJ2aWNlTW9kdWxlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvM2RtLWFwaSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9tZXNzYWdlLWJ1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS91dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL21lc3NhZ2UtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHtCb3gzLCBNYXRoVXRpbHMsIE9iamVjdDNELCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbktleX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL2NvbmZpZ3VyYXRpb24ta2V5LmVudW0nO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtTY2VuZVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL3NjZW5lLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdycC1yZW5kZXItZGlhbG9nJyxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdzbGlkZUluT3V0JywgW1xyXG4gICAgICBzdGF0ZSgnMScsIHN0eWxlKHsnbWF4LWhlaWdodCc6ICcqJ30pKSxcclxuICAgICAgc3RhdGUoJzAnLCBzdHlsZSh7J21heC1oZWlnaHQnOiAnMHB4J30pKSxcclxuICAgICAgdHJhbnNpdGlvbignKiA9PiAqJywgYW5pbWF0ZSgnMTAwMG1zIGVhc2UtaW4tb3V0JykpLFxyXG4gICAgXSlcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZW5kZXItZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZW5kZXItZGlhbG9nLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlbmRlckRpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyByZWFkb25seSByZW5kZXJTdGF0dXMgPSBSZW5kZXJTdGF0dXM7XHJcbiAgcHVibGljIHJlYWRvbmx5IGljb25OYW1lOiB0eXBlb2YgSWNvbk5hbWUgPSBJY29uTmFtZTtcclxuICBwdWJsaWMgcmVhZG9ubHkgcmVuZGVyTW9kZXMgPSBSZW5kZXJNb2RlcztcclxuICBwdWJsaWMgY2FtZXJhTWF0cml4OiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgaW5wdXROYW1lOiBzdHJpbmcgPSAnQ3VycmVudCBDYW1lcmEnO1xyXG4gIHB1YmxpYyBpbnB1dExpZ2h0OiBudW1iZXIgPSAxO1xyXG4gIHB1YmxpYyBpbnB1dFNpemU6IG51bWJlciA9IDE7XHJcbiAgcHVibGljIGdhbGxlcnlJbmZvOiBhbnkgPSB7fTtcclxuICBwdWJsaWMgaW5wdXRSZVJlbmRlckNoZWNrZWQ6IGJvb2xlYW5bXSA9IFtdO1xyXG4gIHB1YmxpYyBpbWFnZVJlbmRlclNvdXJjZTogYW55ID0gJyc7XHJcbiAgcHVibGljIGNhblJlbmRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAVmlld0NoaWxkKCdyZW5kZXJfaW1hZ2UnLCB7c3RhdGljOiB0cnVlfSlcclxuICBwdWJsaWMgcmVuZGVySW1hZ2VGaWVsZDogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgncmVuZGVyX2ltYWdlX3dpZHRoJywge3N0YXRpYzogdHJ1ZX0pXHJcbiAgcHVibGljIGltYWdlV2lkdGhGaWVsZDogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgncmVuZGVyX2ltYWdlX2hlaWdodCcsIHtzdGF0aWM6IHRydWV9KVxyXG4gIHB1YmxpYyBpbWFnZUhlaWdodEZpZWxkOiBFbGVtZW50UmVmO1xyXG5cclxuICBwdWJsaWMgZ2V0IHJlbmRlclByb2dyZXNzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmV3UmVuZGVyU2VydmljZS5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnJlbmRlclByb2dyZXNzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkaXNhYmxlUGljdHVyZUJ1dHRvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9uZXdSZW5kZXJTZXJ2aWNlLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucmVuZGVyU3RhdHVzID09PSB0aGlzLnJlbmRlclN0YXR1cy5Jc1J1bm5pbmc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkSW1hZ2VzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLl9uZXdSZW5kZXJTZXJ2aWNlLnJlbmRlcmVkUm9vbUltYWdlcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiB7IGhhc0Vycm9yOiBib29sZWFuLCBlcnJvcjogc3RyaW5nIH0sXHJcbiAgICBwdWJsaWMgY2FtZXJhU2VydmljZTogQ2FtZXJhU2VydmljZSxcclxuICAgIHB1YmxpYyByZW5kZXJTZXJ2aWNlOiBSZW5kZXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3V0aWxzU2VydmljZTogVXRpbHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIF9zZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9uZXdSZW5kZXJTZXJ2aWNlOiBOZXdSZW5kZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfM2RtUmVuZGVyQXBpOiBBcGlTZXJ2aWNlTW9kdWxlLFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIF9jYW1lcmFTZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVTZXJ2aWNlOiBTY2VuZVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuY2FtZXJhTWF0cml4ID0gdGhpcy5jYW1lcmFTZXJ2aWNlLmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UuZWxlbWVudHM7XHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJSb29tSW1hZ2VDaGFuZ2VkLnN1YnNjcmliZSgodXJsOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAodXJsICE9PSAnJykge1xyXG4gICAgICAgICAgdGhpcy5pbWFnZVJlbmRlclNvdXJjZSA9IHRoaXMuX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKHVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fbmV3UmVuZGVyU2VydmljZS5yZW5kZXJSb29tSW1hZ2VDaGFuZ2VkLnN1YnNjcmliZSgodXJsOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAodXJsICE9PSAnJykge1xyXG4gICAgICAgICAgdGhpcy5pbWFnZVJlbmRlclNvdXJjZSA9IHRoaXMuX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKHVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuY2hlY2tIYXNHYWxsZXJ5KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB0aGlzLnJlbmRlckltYWdlRmllbGQgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmltYWdlSGVpZ2h0RmllbGQgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmltYWdlV2lkdGhGaWVsZCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGFuZ2VJbnB1dFNpemUobW9kZWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5pbnB1dFNpemUgPSBtb2RlbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRSZW5kZXJDdXN0b20oKTogdm9pZCB7XHJcblxyXG4gICAgY29uc3QgY2FtUG9zaXRpb246IENhbWVyYVBvc2l0aW9uID0gbmV3IENhbWVyYVBvc2l0aW9uKCk7XHJcbiAgICBjYW1Qb3NpdGlvbi5pZCA9IHRoaXMuZ2V0Q2FtZXJhUG9zaXRpb25JZCgpO1xyXG4gICAgY2FtUG9zaXRpb24ubmFtZSA9IHRoaXMuaW5wdXROYW1lO1xyXG4gICAgY2FtUG9zaXRpb24ucG9zaXRpb24gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY2FtZXJhU2VydmljZS5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLmVsZW1lbnRzKSk7XHJcbiAgICBjYW1Qb3NpdGlvbi50eXBlID0gJ2N1c3RvbSc7XHJcblxyXG4gICAgY29uc3Qgc2NlbmVQYXJhbXM6IFJlbmRlckRhdGEgPSB0aGlzLnJlbmRlclNlcnZpY2UuZ2V0UmVuZGVyUGFyYW1ldGVycyh0aGlzLnJlbmRlck1vZGVzLlJlbmRlcklvbmUpO1xyXG5cclxuICAgIGNvbnN0IHJlbmRlcjogUmVuZGVyID0gbmV3IFJlbmRlcigpO1xyXG4gICAgcmVuZGVyLmlkID0gdGhpcy5nZXRSZW5kZXJJZCgpO1xyXG4gICAgcmVuZGVyLnByb2R1Y3RIYXNoID0gc2NlbmVQYXJhbXMuY29uZmlndXJlZEl0ZW0uZGVmYXVsdFJlbmRlclBhdGg7XHJcbiAgICByZW5kZXIubGlnaHRuaW5nID0gdGhpcy5yZW5kZXJTZXJ2aWNlLmdldExpZ2h0bmluZ09uSWQodGhpcy5pbnB1dExpZ2h0KTtcclxuICAgIHJlbmRlci5pbWFnZVNpemUgPSB0aGlzLnJlbmRlclNlcnZpY2UuZ2V0SW1hZ2VTaXplT25JZCh0aGlzLmlucHV0U2l6ZSk7XHJcbiAgICByZW5kZXIuY2FtZXJhUG9zaXRpb24gPSBjYW1Qb3NpdGlvbjtcclxuXHJcbiAgICB0aGlzLnJlbmRlclNlcnZpY2UucmVuZGVycy5wdXNoKHJlbmRlcik7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZFJlbmRlckdhbGxlcnkoKTogdm9pZCB7XHJcblxyXG4gICAgY29uc3Qgc2NlbmVQYXJhbXMgPSB0aGlzLnJlbmRlclNlcnZpY2UuZ2V0UmVuZGVyUGFyYW1ldGVycyh0aGlzLnJlbmRlck1vZGVzLlJlbmRlcklvbmUpO1xyXG5cclxuICAgIGNvbnN0IGRlZ3JlZXMgPSAzNjA7XHJcbiAgICBjb25zdCBhbmdsZXMgPSA4O1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYW5nbGVzOyBpKyspIHtcclxuXHJcbiAgICAgIGNvbnN0IGNhbVBvc2l0aW9uID0ge1xyXG4gICAgICAgIGlkOiB0aGlzLmdldENhbWVyYVBvc2l0aW9uSWQoKSxcclxuICAgICAgICBuYW1lOiAnR0FMTEVSWSAnICsgKGkgKiAoZGVncmVlcyAvIGFuZ2xlcykpLFxyXG4gICAgICAgIHBvc2l0aW9uOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY2FtZXJhU2VydmljZS5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLmVsZW1lbnRzKSksXHJcbiAgICAgICAgdHlwZTogJ2dhbGxlcnknLFxyXG4gICAgICAgIGFuZ2xlOiAoaSAqIChkZWdyZWVzIC8gYW5nbGVzKSlcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHJlbmRlcjogUmVuZGVyID0gbmV3IFJlbmRlcigpO1xyXG4gICAgICByZW5kZXIuaWQgPSB0aGlzLmdldFJlbmRlcklkKCk7XHJcbiAgICAgIHJlbmRlci5wcm9kdWN0SGFzaCA9IHNjZW5lUGFyYW1zLmNvbmZpZ3VyZWRJdGVtLmRlZmF1bHRSZW5kZXJQYXRoO1xyXG4gICAgICByZW5kZXIubGlnaHRuaW5nID0gdGhpcy5yZW5kZXJTZXJ2aWNlLmdldExpZ2h0bmluZ09uSWQodGhpcy5pbnB1dExpZ2h0KTtcclxuICAgICAgcmVuZGVyLmltYWdlU2l6ZSA9IHRoaXMucmVuZGVyU2VydmljZS5nZXRJbWFnZVNpemVPbklkKHRoaXMuaW5wdXRTaXplKTtcclxuICAgICAgcmVuZGVyLmNhbWVyYVBvc2l0aW9uID0gY2FtUG9zaXRpb247XHJcblxyXG4gICAgICB0aGlzLnJlbmRlclNlcnZpY2UucmVuZGVycy5wdXNoKHJlbmRlcik7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5jaGVja0hhc0dhbGxlcnkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDYW1lcmFQb3NpdGlvbklkKCk6IG51bWJlciB7XHJcbiAgICBsZXQgYWRkSWQgPSAxO1xyXG4gICAgaWYgKHRoaXMucmVuZGVyU2VydmljZS5jYW1lcmFQb3NpdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhZGRJZCA9IHRoaXMucmVuZGVyU2VydmljZS5jYW1lcmFQb3NpdGlvbnNbdGhpcy5yZW5kZXJTZXJ2aWNlLmNhbWVyYVBvc2l0aW9ucy5sZW5ndGggLSAxXS5pZCArIDE7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFkZElkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFJlbmRlcklkKCk6IG51bWJlciB7XHJcbiAgICBsZXQgYWRkSWQgPSAxO1xyXG4gICAgaWYgKHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgYWRkSWQgPSB0aGlzLnJlbmRlclNlcnZpY2UucmVuZGVyc1t0aGlzLnJlbmRlclNlcnZpY2UucmVuZGVycy5sZW5ndGggLSAxXS5pZCArIDE7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFkZElkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUNhbWVyYVBvc2l0aW9uKHJlbmRlcjogYW55KTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHJlbmRlci5jYW1lcmFQb3NpdGlvbiAhPT0gdW5kZWZpbmVkICYmIHJlbmRlci5jYW1lcmFQb3NpdGlvbi50eXBlID09PSAnY3VzdG9tJykge1xyXG4gICAgICB0aGlzLnJlbmRlclNlcnZpY2UucmVuZGVycy5mb3JFYWNoKChpdGVtOiBSZW5kZXIsIGtleSwgb2JqZWN0KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHJlbmRlci5pZCkge1xyXG4gICAgICAgICAgb2JqZWN0LnNwbGljZShrZXksIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKChyZW5kZXIuY2FtZXJhUG9zaXRpb24gIT09IHVuZGVmaW5lZCAmJiByZW5kZXIuY2FtZXJhUG9zaXRpb24udHlwZSA9PT0gJ2dhbGxlcnknKSB8fCByZW5kZXIgPT09ICdnYWxsZXJ5Jykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJzW2ldLmNhbWVyYVBvc2l0aW9uLnR5cGUgPT09ICdnYWxsZXJ5Jykge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJTZXJ2aWNlLnJlbmRlcnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgaSA9IGkgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5wdXRSZVJlbmRlckNoZWNrZWQgPSBbXTtcclxuICAgIHRoaXMucmVuZGVyT25DaGFuZ2UoKTtcclxuICAgIHRoaXMuY2hlY2tIYXNHYWxsZXJ5KCk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFkZFJlbmRlcnNUb1F1ZXVlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuaW5wdXRSZVJlbmRlckNoZWNrZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmlucHV0UmVSZW5kZXJDaGVja2VkLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IG5ldyBSZW5kZXJRdWV1ZUl0ZW0oKTtcclxuICAgICAgICB0aGlzLnJlbmRlclNlcnZpY2UucmVuZGVyc1trZXldLnN0YXR1cyA9IFJlbmRlclN0YXR1cy5Jc1dhaXRpbmc7XHJcbiAgICAgICAgcXVldWVJdGVtLnBhcmFtcyA9IHRoaXMucmVuZGVyU2VydmljZS5nZXRSZW5kZXJQYXJhbWV0ZXJzKHRoaXMucmVuZGVyTW9kZXMuUmVuZGVySW9uZSk7XHJcbiAgICAgICAgcXVldWVJdGVtLnBhcmFtcy5jYW1lcmFNYXRyaXggPSB0aGlzLnJlbmRlclNlcnZpY2UucmVuZGVyc1trZXldLmNhbWVyYVBvc2l0aW9uLnBvc2l0aW9uO1xyXG4gICAgICAgIHF1ZXVlSXRlbS5wYXJhbXMuaW1hZ2VXaWR0aCA9IHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJzW2tleV0uaW1hZ2VTaXplLndpZHRoO1xyXG4gICAgICAgIHF1ZXVlSXRlbS5wYXJhbXMuaW1hZ2VIZWlnaHQgPSB0aGlzLnJlbmRlclNlcnZpY2UucmVuZGVyc1trZXldLmltYWdlU2l6ZS5oZWlnaHQ7XHJcbiAgICAgICAgcXVldWVJdGVtLnBhcmFtcy5yZW5kZXIgPSB0aGlzLnJlbmRlclNlcnZpY2UucmVuZGVyc1trZXldO1xyXG4gICAgICAgIHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJRdWV1ZS5wdXNoKHF1ZXVlSXRlbSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmlucHV0UmVSZW5kZXJDaGVja2VkID0gW107XHJcbiAgICAgIHRoaXMucmVuZGVyT25DaGFuZ2UoKTtcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMucmVuZGVyU2VydmljZS5zdGFydFJlbmRlcmluZygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHN0YXJ0UmVuZGVyaW5nUm9vbSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX25ld1JlbmRlclNlcnZpY2UucmVuZGVyUm9vbSh0aGlzLnJlbmRlclNlcnZpY2UuZ2V0SW1hZ2VTaXplT25JZCh0aGlzLnJlbmRlclNlcnZpY2Uuc2VsZWN0ZWRJbWFnZVNpemUpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjcmVhdGVCbGVuZGVyUmVuZGVyKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcmVuZGVyU2l6ZSA9IHRoaXMucmVuZGVyU2VydmljZS5nZXRJbWFnZVNpemVPbklkKHRoaXMucmVuZGVyU2VydmljZS5zZWxlY3RlZEltYWdlU2l6ZSk7XHJcbiAgICBjb25zdCByZW5kZXJTY2VuZUFzc2V0SWQ6IHN0cmluZyA9IHRoaXMucmVuZGVyU2VydmljZS5zZWxlY3RlZFJlbmRlclNjZW5lO1xyXG4gICAgY29uc3QgcmVuZGVySW5wdXQ6IGFueSA9IHtcclxuICAgICAgJ2hlaWdodCc6IHJlbmRlclNpemUuaGVpZ2h0LFxyXG4gICAgICAnd2lkdGgnOiByZW5kZXJTaXplLndpZHRoLFxyXG4gICAgICAnc2NlbmVBc3NldElkJzogcmVuZGVyU2NlbmVBc3NldElkXHJcbiAgICB9O1xyXG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNob3dMb2FkaW5nSW5kaWNhdG9yLCB7dGl0bGU6ICdVcGxvYWRpbmcuLi4nfSk7XHJcbiAgICB0aGlzLl91dGlsc1NlcnZpY2UucHJlcFJvb21Gb3JSZW5kZXIoZmFsc2UsIHJlbmRlcklucHV0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxCbGVuZGVyUmVuZGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVMb2FkaW5nSW5kaWNhdG9yKTtcclxuICAgIHRoaXMuX2RpYWxvZy5jbG9zZUFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmVJbWFnZSh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGxpbmsuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBudWxsKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICBsaW5rLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZVJlbmRlcih1cmw6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5fbmV3UmVuZGVyU2VydmljZS5yZW5kZXJlZFJvb21JbWFnZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlck9uQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgbGV0IGNoZWNrID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5pbnB1dFJlUmVuZGVyQ2hlY2tlZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRSZVJlbmRlckNoZWNrZWQuZm9yRWFjaCgoeCkgPT4ge1xyXG4gICAgICAgIGlmICh4ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBjaGVjayA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuY2FuUmVuZGVyID0gY2hlY2s7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2FsbGVyeVJlbmRlck9uQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJlbmRlclNlcnZpY2UucmVuZGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyU2VydmljZS5yZW5kZXJzLmZvckVhY2goKHg6IFJlbmRlciwga2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKHguY2FtZXJhUG9zaXRpb24udHlwZSA9PT0gJ2dhbGxlcnknKSB7XHJcbiAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dFJlUmVuZGVyQ2hlY2tlZFtrZXldID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXRSZVJlbmRlckNoZWNrZWRba2V5XSA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlck9uQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tIYXNHYWxsZXJ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nYWxsZXJ5SW5mbyA9IHtcclxuICAgICAgaXRlbXM6IDAsXHJcbiAgICAgIHJlbmRlckluZm86IG51bGxcclxuICAgIH07XHJcbiAgICBpZiAodGhpcy5yZW5kZXJTZXJ2aWNlLnJlbmRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnJlbmRlclNlcnZpY2UucmVuZGVycy5mb3JFYWNoKCh4OiBSZW5kZXIpID0+IHtcclxuICAgICAgICBpZiAoeC5jYW1lcmFQb3NpdGlvbi50eXBlID09PSAnZ2FsbGVyeScgJiYgeC5wcm9kdWN0SGFzaCA9PT0gdGhpcy5yZW5kZXJTZXJ2aWNlLmN1cnJlbnRQcm9kdWN0SGFzaCkge1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5SW5mby5pdGVtcysrO1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5SW5mby5yZW5kZXJJbmZvID0geDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG1vdmVDYW1lcmFXaXRoaW5Cb3VuZHMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBmbG9vclBsYW5lSXRlbSA9IHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS5nZXRPYmplY3RCeU5hbWUoJ2Zsb29yLXBsYW5lJyk7XHJcbiAgICBjb25zdCBjYW1lcmFPYmplY3QgPSB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYTtcclxuICAgIGNvbnN0IHdhbGxIZWlnaHQ6IG51bWJlciA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuV2FsbEhlaWdodCkgLyAxMDA7IC8vIGNvbnZlcnQgY20gdG8gbSBzbyB0aGUgdW5pdHMgbWF0Y2hcclxuXHJcbiAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCh0cnVlKTtcclxuICAgIGNvbnN0IHRhcmdldEJveDogQm94MyA9IG5ldyBCb3gzKCkuc2V0RnJvbU9iamVjdChmbG9vclBsYW5lSXRlbSk7XHJcbiAgICBjb25zdCBtb3ZpbmdCb3g6IEJveDMgPSBuZXcgQm94MygpLnNldEZyb21PYmplY3QoY2FtZXJhT2JqZWN0KTtcclxuICAgIGNvbnN0IG1vdmluZ1NpemU6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgbW92aW5nQm94LmdldFNpemUobW92aW5nU2l6ZSk7XHJcbiAgICBjb25zdCBtb3ZpbmdQb3NpdGlvbjogVmVjdG9yMyA9IGNhbWVyYU9iamVjdC5wb3NpdGlvbjtcclxuICAgIG1vdmluZ1Bvc2l0aW9uLnggPSBNYXRoVXRpbHMuY2xhbXAobW92aW5nUG9zaXRpb24ueCwgdGFyZ2V0Qm94Lm1pbi54ICsgbW92aW5nU2l6ZS54IC8gMiwgdGFyZ2V0Qm94Lm1heC54IC0gbW92aW5nU2l6ZS54IC8gMik7XHJcbiAgICAvLyBtb3ZpbmdQb3NpdGlvbi55ID0gTWF0aFV0aWxzLmNsYW1wKG1vdmluZ1Bvc2l0aW9uLnksIHRhcmdldEJveC5taW4ueSArIG1vdmluZ1NpemUueSAvIDIsIHRhcmdldEJveC5tYXgueSAtIG1vdmluZ1NpemUueSAvIDIpO1xyXG4gICAgbW92aW5nUG9zaXRpb24ueSA9IHdhbGxIZWlnaHQgLyAyO1xyXG4gICAgbW92aW5nUG9zaXRpb24ueiA9IE1hdGhVdGlscy5jbGFtcChtb3ZpbmdQb3NpdGlvbi56LCB0YXJnZXRCb3gubWluLnogKyBtb3ZpbmdTaXplLnogLyAyLCB0YXJnZXRCb3gubWF4LnogLSBtb3ZpbmdTaXplLnogLyAyKTtcclxuICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLnJvdGF0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLnBvc2l0aW9uLnNldChtb3ZpbmdQb3NpdGlvbi54LCBtb3ZpbmdQb3NpdGlvbi55LCBtb3ZpbmdQb3NpdGlvbi56KTtcclxuICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhTW92ZW1lbnRDaGFuZ2VkLm5leHQoKTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwicmVuZGVyU2VydmljZS5zZXJ2ZXJEYXRhLnJlbmRlck1vZGUgPT09IHJlbmRlck1vZGVzLlJlbmRlcklvbmVcIj5cclxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cclxuICAgIDxkaXYgY2xhc3M9XCJyZW5kZXItY2FtZXJhLXBvc2l0aW9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmVuZGVyLWNhbWVyYS1wb3NpdGlvbnMtbGVmdFwiPlxyXG4gICAgICAgIDwhLS1cclxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwibWF0cml4VG9nZ2xlXCIgKGNsaWNrKT1cInRvZ2dsZUNhbWVyYVBvc2l0aW9uKClcIj57eyBzaG93TWF0cml4ID8gKCdISURFX01BVFJJWCcgfCBsb2NhbGl6ZSkgOiAoJ1NIT1dfTUFUUklYJyB8IGxvY2FsaXplKSB9fTwvYnV0dG9uPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1tYXRyaXgtY29udGFpbmVyXCIgKm5nSWY9XCJzaG93TWF0cml4XCI+XHJcbiAgICAgICAgICA8bWF0LWdyaWQtbGlzdCBbY29sc109XCI0XCIgcm93SGVpZ2h0PVwiMzVweFwiIGNsYXNzPVwiY2FtZXJhX3Bvc2l0aW9uX2dyaWRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjYW1lcmFNYXRyaXg7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiMVwiPjxiPnt7IGkgfX06PC9iPjwvbWF0LWdyaWQtdGlsZT5cclxuICAgICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiM1wiPjxzcGFuPnt7aXRlbX19PC9zcGFuPjwvbWF0LWdyaWQtdGlsZT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L21hdC1ncmlkLWxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgLS0+XHJcblxyXG4gICAgICAgIDxoND57eydMSUdIVE5JTkcnIHwgbG9jYWxpemV9fTwvaDQ+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZmFjZS1zZWxlY3QtZm9ybVwiPlxyXG4gICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJpbnB1dExpZ2h0XCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBsaWdodCBvZiByZW5kZXJTZXJ2aWNlLmxpZ2h0bmluZ3NcIiBbdmFsdWVdPVwibGlnaHQuaWRcIj57eyBsaWdodC5uYW1lIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgIDxoND57eydTSVpFJyB8IGxvY2FsaXplfX08L2g0PlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZhY2Utc2VsZWN0LWZvcm1cIj5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cImlucHV0U2l6ZVwiPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc2l6ZSBvZiByZW5kZXJTZXJ2aWNlLmltYWdlU2l6ZXNcIiBbdmFsdWVdPVwic2l6ZS5pZFwiPnt7IHNpemUubmFtZSB9fSB8IDxlbT57eyBzaXplLndpZHRoIH19eHt7IHNpemUuaGVpZ2h0IH19PC9lbT48L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8cD5Zb3Ugc2VsZWN0ZWQ6IHt7aW5wdXRTaXplfX08L3A+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXNlcGFyYXRvclwiPjwvZGl2PlxyXG5cclxuICAgICAgICA8aDQ+e3snTkFNRScgfCBsb2NhbGl6ZX19PC9oND5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucHV0TmFtZVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgIDxwPnt7ICdBRERfQ1VSUkVOVF9DQU1FUkFfUE9TSVRJT05fVE9fUkVOREVSJyB8IGxvY2FsaXplIH19PC9wPlxyXG5cclxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwiYWRkX2NhbWVyYV9wb3NpdGlvblwiIGNvbG9yPVwicHJpbWFyeVwiIHRpdGxlPVwie3snQUREX0NVUlJFTlRfUE9TSVRJT04nIHwgbG9jYWxpemV9fVwiIChjbGljayk9XCJhZGRSZW5kZXJDdXN0b20oKVwiPlxyXG4gICAgICAgICAge3snQUREX0NVUlJFTlRfUE9TSVRJT04nIHwgbG9jYWxpemV9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGhpcy5nYWxsZXJ5SW5mby5pdGVtcyA9PT0gMFwiPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1zZXBhcmF0b3JcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgICA8cD57eyAnQUREX0dBTExFUllfUE9TSVRJT05TX1RPX1JFTkRFUl9JTkZPJyB8IGxvY2FsaXplIH19PC9wPlxyXG5cclxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJhZGRfZ2FsbGVyeV9wb3NpdGlvbnNcIiBjb2xvcj1cInByaW1hcnlcIiB0aXRsZT1cInt7J0FERF9HQUxMRVJZX1BPU0lUSU9OUycgfCBsb2NhbGl6ZX19XCIgKGNsaWNrKT1cImFkZFJlbmRlckdhbGxlcnkoKVwiPlxyXG4gICAgICAgICAgICB7eydBRERfR0FMTEVSWV9QT1NJVElPTlMnIHwgbG9jYWxpemV9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyZW5kZXItY2FtZXJhLXBvc2l0aW9ucy1yaWdodFwiPlxyXG4gICAgICAgIDxtYXQtZ3JpZC1saXN0IFtjb2xzXT1cIjE2XCIgcm93SGVpZ2h0PVwiMzVweFwiIGNsYXNzPVwiY2FtZXJhX3Bvc2l0aW9uc19ncmlkXCI+XHJcbiAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiMVwiPjxkaXYgY2xhc3M9XCJncmlkLXRpbGUtaGVhZFwiPjwvZGl2PjwvbWF0LWdyaWQtdGlsZT5cclxuICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIzXCI+PGRpdiBjbGFzcz1cImdyaWQtdGlsZS1oZWFkXCI+e3snQVZBSUxBQkxFJyB8IGxvY2FsaXplfX08L2Rpdj48L21hdC1ncmlkLXRpbGU+XHJcbiAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiNVwiPjxkaXYgY2xhc3M9XCJncmlkLXRpbGUtaGVhZFwiPnt7J05BTUUnIHwgbG9jYWxpemV9fTwvZGl2PjwvbWF0LWdyaWQtdGlsZT5cclxuICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIzXCI+PGRpdiBjbGFzcz1cImdyaWQtdGlsZS1oZWFkXCI+e3snTElHSFQnIHwgbG9jYWxpemV9fTwvZGl2PjwvbWF0LWdyaWQtdGlsZT5cclxuICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIzXCI+PGRpdiBjbGFzcz1cImdyaWQtdGlsZS1oZWFkXCI+e3snU0laRScgfCBsb2NhbGl6ZX19PC9kaXY+PC9tYXQtZ3JpZC10aWxlPlxyXG4gICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjFcIj48L21hdC1ncmlkLXRpbGU+XHJcbiAgICAgICAgPC9tYXQtZ3JpZC1saXN0PlxyXG4gICAgICAgIDxtYXQtZ3JpZC1saXN0IFtjb2xzXT1cIjE2XCIgcm93SGVpZ2h0PVwiNTVweFwiIGNsYXNzPVwiY2FtZXJhX3Bvc2l0aW9uc19ncmlkXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZW5kZXIgb2YgcmVuZGVyU2VydmljZS5yZW5kZXJzOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZW5kZXIuY2FtZXJhUG9zaXRpb24udHlwZSA9PT0gJ2N1c3RvbScgJiYgcmVuZGVyLnByb2R1Y3RIYXNoID09PSByZW5kZXJTZXJ2aWNlLmN1cnJlbnRQcm9kdWN0SGFzaFwiIGNsYXNzPVwiZ3JpZF9oZWFkXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXRpbGUtY29udGVudCBuby1wYWRkaW5nXCIgW2hpZGRlbl09XCJyZW5kZXIuc3RhdHVzID09PSByZW5kZXJTdGF0dXMuSXNXYWl0aW5nIHx8IHJlbmRlci5zdGF0dXMgPT09IHJlbmRlclN0YXR1cy5Jc1J1bm5pbmdcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwiaW5wdXRSZVJlbmRlckNoZWNrZWRbaV1cIiBbdmFsdWVdPVwicmVuZGVyLmlkXCIgKGNoYW5nZSk9XCJyZW5kZXJPbkNoYW5nZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XHJcbiAgICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXRpbGUtY29udGVudCBncmlkLXRpbGUtaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIiAqbmdJZj1cInJlbmRlci51cmwgPT09ICcnICYmIHJlbmRlci5zdGF0dXMgIT09IHJlbmRlclN0YXR1cy5Jc1J1bm5pbmdcIj5jYW1lcmFfYWx0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3sgcmVuZGVyLnVybCB9fVwiIHRhcmdldD1cIl9ibGFua1wiIGRvd25sb2FkICpuZ0lmPVwicmVuZGVyLnVybCAhPT0gJycgJiYgcmVuZGVyLnN0YXR1cyAhPT0gcmVuZGVyU3RhdHVzLklzUnVubmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJ7eyByZW5kZXIudXJsIH19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cInJlbmRlci5zdGF0dXMgPT09IHJlbmRlclN0YXR1cy5Jc1J1bm5pbmdcIiBbZGlhbWV0ZXJdPVwiMjVcIiBbbW9kZV09XCInZGV0ZXJtaW5hdGUnXCIgW3ZhbHVlXT1cInJlbmRlci5wcm9ncmVzcyA+IDEwID8gcmVuZGVyLnByb2dyZXNzIDogMTBcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cclxuICAgICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiNVwiPjxkaXYgY2xhc3M9XCJncmlkLXRpbGUtY29udGVudFwiPnt7IHJlbmRlci5jYW1lcmFQb3NpdGlvbi5uYW1lIH19PC9kaXY+PC9tYXQtZ3JpZC10aWxlPlxyXG4gICAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIzXCI+PGRpdiBjbGFzcz1cImdyaWQtdGlsZS1jb250ZW50XCI+e3sgcmVuZGVyLmxpZ2h0bmluZy5uYW1lIH19PC9kaXY+PC9tYXQtZ3JpZC10aWxlPlxyXG4gICAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIzXCI+PGRpdiBjbGFzcz1cImdyaWQtdGlsZS1jb250ZW50XCI+e3sgcmVuZGVyLmltYWdlU2l6ZS5uYW1lIH19IHwgPGVtPnt7IHJlbmRlci5pbWFnZVNpemUud2lkdGggfX14e3sgcmVuZGVyLmltYWdlU2l6ZS5oZWlnaHQgfX08L2VtPjwvZGl2PjwvbWF0LWdyaWQtdGlsZT5cclxuICAgICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiMVwiPjxkaXYgY2xhc3M9XCJncmlkLXRpbGUtY29udGVudCBuby1wYWRkaW5nIHJpZ2h0XCI+PGJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlQ2FtZXJhUG9zaXRpb24ocmVuZGVyKVwiIGNsYXNzPVwicmVtb3ZlLWJ0blwiIFtoaWRkZW5dPVwicmVuZGVyLnN0YXR1cyA9PT0gcmVuZGVyU3RhdHVzLklzV2FpdGluZyB8fCByZW5kZXIuc3RhdHVzID09PSByZW5kZXJTdGF0dXMuSXNSdW5uaW5nXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+PC9kaXY+PC9tYXQtZ3JpZC10aWxlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoaXMuZ2FsbGVyeUluZm8uaXRlbXMgPiAwXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjFcIiBjbGFzcz1cImdyaWRfaGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtdGlsZS1jb250ZW50IG5vLXBhZGRpbmdcIiBbaGlkZGVuXT1cImdhbGxlcnlJbmZvLnJlbmRlckluZm8uc3RhdHVzID09PSByZW5kZXJTdGF0dXMuSXNXYWl0aW5nIHx8IGdhbGxlcnlJbmZvLnJlbmRlckluZm8uc3RhdHVzID09PSByZW5kZXJTdGF0dXMuSXNSdW5uaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiAoY2hhbmdlKT1cImdhbGxlcnlSZW5kZXJPbkNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XHJcbiAgICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjhcIiBjbGFzcz1cImdyaWRfaGVhZFwiPjxkaXYgY2xhc3M9XCJncmlkLXRpbGUtY29udGVudFwiPnt7ICdHQUxMRVJZX0lNQUdFU19GUk9NJyB8IGxvY2FsaXplIH19IHt7IGdhbGxlcnlJbmZvLml0ZW1zIH19IHt7ICdDQU1FUkFfUE9TSVRJT05TJyB8IGxvY2FsaXplIH19PC9kaXY+PC9tYXQtZ3JpZC10aWxlPlxyXG4gICAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIzXCIgY2xhc3M9XCJncmlkX2hlYWRcIj48ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLWNvbnRlbnRcIj57eyBnYWxsZXJ5SW5mby5yZW5kZXJJbmZvLmxpZ2h0bmluZy5uYW1lIH19PC9kaXY+PC9tYXQtZ3JpZC10aWxlPlxyXG4gICAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIzXCIgY2xhc3M9XCJncmlkX2hlYWRcIj48ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLWNvbnRlbnRcIj57eyBnYWxsZXJ5SW5mby5yZW5kZXJJbmZvLmltYWdlU2l6ZS5uYW1lIH19IHwgPGVtPnt7IGdhbGxlcnlJbmZvLnJlbmRlckluZm8uaW1hZ2VTaXplLndpZHRoIH19eHt7IGdhbGxlcnlJbmZvLnJlbmRlckluZm8uaW1hZ2VTaXplLmhlaWdodCB9fTwvZW0+PC9kaXY+PC9tYXQtZ3JpZC10aWxlPlxyXG4gICAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIxXCIgY2xhc3M9XCJncmlkX2hlYWRcIj48ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLWNvbnRlbnQgbm8tcGFkZGluZyByaWdodFwiPjxidXR0b24gKGNsaWNrKT1cInJlbW92ZUNhbWVyYVBvc2l0aW9uKCdnYWxsZXJ5JylcIiBjbGFzcz1cInJlbW92ZS1idG5cIiBbaGlkZGVuXT1cImdhbGxlcnlJbmZvLnJlbmRlckluZm8uc3RhdHVzID09PSByZW5kZXJTdGF0dXMuSXNXYWl0aW5nIHx8IGdhbGxlcnlJbmZvLnJlbmRlckluZm8uc3RhdHVzID09PSByZW5kZXJTdGF0dXMuSXNSdW5uaW5nXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+PC9kaXY+PC9tYXQtZ3JpZC10aWxlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmVuZGVyIG9mIHJlbmRlclNlcnZpY2UucmVuZGVyczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZW5kZXIuY2FtZXJhUG9zaXRpb24udHlwZSA9PT0gJ2dhbGxlcnknICYmIHJlbmRlci5wcm9kdWN0SGFzaCA9PT0gcmVuZGVyU2VydmljZS5jdXJyZW50UHJvZHVjdEhhc2hcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXRpbGUtY29udGVudFwiIFtoaWRkZW5dPVwidHJ1ZVwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cImlucHV0UmVSZW5kZXJDaGVja2VkW2ldXCIgW3ZhbHVlXT1cInJlbmRlci5pZFwiIChjaGFuZ2UpPVwicmVuZGVyT25DaGFuZ2UoKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLWNvbnRlbnQgc21hbGwtcGFkZGluZyBncmlkLXRpbGUtaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCIgKm5nSWY9XCJyZW5kZXIudXJsID09PSAnJyAmJiByZW5kZXIuc3RhdHVzICE9PSByZW5kZXJTdGF0dXMuSXNSdW5uaW5nXCI+Y2FtZXJhX2FsdDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3sgcmVuZGVyLnVybCB9fVwiIHRhcmdldD1cIl9ibGFua1wiIGRvd25sb2FkICpuZ0lmPVwicmVuZGVyLnVybCAhPT0gJycgJiYgcmVuZGVyLnN0YXR1cyAhPT0gcmVuZGVyU3RhdHVzLklzUnVubmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cInt7IHJlbmRlci51cmwgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cInJlbmRlci5zdGF0dXMgPT09IHJlbmRlclN0YXR1cy5Jc1J1bm5pbmdcIiBbZGlhbWV0ZXJdPVwiMjVcIiBbbW9kZV09XCInZGV0ZXJtaW5hdGUnXCIgW3ZhbHVlXT1cInJlbmRlci5wcm9ncmVzcyA+IDEwID8gcmVuZGVyLnByb2dyZXNzIDogMTBcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L21hdC1ncmlkLWxpc3Q+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cInJlbmRlcl9idG5cIiAoY2xpY2spPVwiYWRkUmVuZGVyc1RvUXVldWUoKVwiIGNvbG9yPVwicHJpbWFyeVwiIHRpdGxlPVwie3snQ1JFQVRFX1JFTkRFUlMnIHwgbG9jYWxpemV9fVwiIFtkaXNhYmxlZF09XCIhY2FuUmVuZGVyIHx8IHJlbmRlclNlcnZpY2UucmVuZGVyUXVldWUubGVuZ3RoID4gMFwiPlxyXG4gICAgICB7eydDUkVBVEVfUkVOREVSUycgfCBsb2NhbGl6ZX19XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG4gIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlIGNsYXNzPVwiY2xvc2VfYnRuXCI+WDwvYnV0dG9uPlxyXG5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwicmVuZGVyU2VydmljZS5zZXJ2ZXJEYXRhLnJlbmRlck1vZGUgPT09IHJlbmRlck1vZGVzLlJlbmRlclJvb21cIj5cclxuXHJcbiAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgICA8ZGl2IGNsYXNzPVwicmVuZGVyLWNhbWVyYS1wb3NpdGlvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJlbmRlci1jYW1lcmEtcG9zaXRpb25zLWxlZnQgbGFyZ2VcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaW1hZ2VSZW5kZXJTb3VyY2UgIT0gJydcIiBjbGFzcz1cInJlbmRlci1pbWFnZS1jb250ZW50XCI+XHJcbiAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VSZW5kZXJTb3VyY2VcIiAjcmVuZGVyX2ltYWdlPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRlclwiIFtuZ0NsYXNzXT1cIihyZW5kZXJQcm9ncmVzcyA9PSAxMDAgPyAncmVhZHknIDogJycpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG9hZGVyX3Byb2dyZXNzXCIgW3N0eWxlLndpZHRoLiVdPVwiKHJlbmRlclByb2dyZXNzID8gcmVuZGVyUHJvZ3Jlc3MgOiAwKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IChyZW5kZXJQcm9ncmVzcyA/IHJlbmRlclByb2dyZXNzIDogMCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJpbWFnZVJlbmRlclNvdXJjZSA9PSAnJ1wiIGNsYXNzPVwiaW1hZ2Vfc3BhY2VyXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+Y2FtZXJhX2FsdDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhLmhhc0Vycm9yXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVuZGVyLXJlcXVlc3Qtd2FybmluZ1wiPlxyXG4gICAgICAgICAgICA8cCBbdGV4dENvbnRlbnRdPVwiZGF0YS5lcnJvclwiPjwvcD5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtb3ZlLWhlbHAtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwibW92ZUNhbWVyYVdpdGhpbkJvdW5kcygpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIE1vdmUgY2FtZXJhIGluIHRvIHJvb21cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1zZXBhcmF0b3JcIj48L2Rpdj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmYWNlLXNlbGVjdC1mb3JtXCIgKm5nSWY9XCJyZW5kZXJTZXJ2aWNlLnNlcnZlckRhdGEucmVuZGVyTW9kZSA9PT0gcmVuZGVyTW9kZXMuUmVuZGVyUm9vbVwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wiSU1BR0VfU0laRVwiIHwgbG9jYWxpemV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJyZW5kZXJTZXJ2aWNlLnNlbGVjdGVkSW1hZ2VTaXplXCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzaXplIG9mIHJlbmRlclNlcnZpY2UuaW1hZ2VTaXplc1wiIFt2YWx1ZV09XCJzaXplLmlkXCI+e3sgc2l6ZS5uYW1lIH19IHt7IHNpemUud2lkdGggfX14e3sgc2l6ZS5oZWlnaHQgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInJlbmRlclNlcnZpY2UuYmxlbmRGaWxlc1JlbmRlclwiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmFjZS1zZWxlY3QtZm9ybVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwicmVuZGVyU2VydmljZS5zZXJ2ZXJEYXRhLnJlbmRlck1vZGUgPT09IHJlbmRlck1vZGVzLlJlbmRlclJvb21cIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcIkVOVklST05NRU5UXCIgfCBsb2NhbGl6ZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInJlbmRlclNlcnZpY2Uuc2VsZWN0ZWRSZW5kZXJTY2VuZVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2NlbmUgb2YgcmVuZGVyU2VydmljZS5yZW5kZXJTY2VuZXNcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNjZW5lLnNjZW5lQXNzZXRJZFwiPnt7IHNjZW5lLm5hbWUgfX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbjwhLS0gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZhY2Utc2VsZWN0LWZvcm1cIiAqbmdJZj1cInJlbmRlclNlcnZpY2Uuc2VydmVyRGF0YS5yZW5kZXJNb2RlID09PSByZW5kZXJNb2Rlcy5SZW5kZXJSb29tXCI+LS0+XHJcbjwhLS0gICAgICAgICAgPG1hdC1sYWJlbD57e1wiRU5WSVJPTk1FTlRcIiB8IGxvY2FsaXplfX08L21hdC1sYWJlbD4tLT5cclxuPCEtLSAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInJlbmRlclNlcnZpY2Uuc2VsZWN0ZWRFbnZpcm9ubWVudFwiPi0tPlxyXG48IS0tICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHJlbmRlckVudmlyb25tZW50IG9mIHJlbmRlclNlcnZpY2UucmVuZGVyRW52aXJvbm1lbnRzXCIgW3ZhbHVlXT1cInJlbmRlckVudmlyb25tZW50LmlkXCI+e3sgcmVuZGVyRW52aXJvbm1lbnQubmFtZSB9fTwvbWF0LW9wdGlvbj4tLT5cclxuPCEtLSAgICAgICAgICA8L21hdC1zZWxlY3Q+LS0+XHJcbjwhLS0gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+LS0+XHJcblxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhcmVuZGVyU2VydmljZS5ibGVuZEZpbGVzUmVuZGVyXCIgbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cInN0YXJ0UmVuZGVyaW5nUm9vbSgpXCIgY29sb3I9XCJwcmltYXJ5XCIgdGl0bGU9XCJ7eydNQUtFX0FfUElDVFVSRScgfCBsb2NhbGl6ZX19XCIgW2Rpc2FibGVkXT1cImRpc2FibGVQaWN0dXJlQnV0dG9uXCI+XHJcbiAgICAgICAgICB7eydNQUtFX0FfUElDVFVSRScgfCBsb2NhbGl6ZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJyZW5kZXJTZXJ2aWNlLmJsZW5kRmlsZXNSZW5kZXJcIiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwiY3JlYXRlQmxlbmRlclJlbmRlcigpXCIgY29sb3I9XCJwcmltYXJ5XCIgdGl0bGU9XCJ7eydNQUtFX0FfUElDVFVSRScgfCBsb2NhbGl6ZX19XCIgW2Rpc2FibGVkXT1cImRpc2FibGVQaWN0dXJlQnV0dG9uXCI+XHJcbiAgICAgICAgICB7eydNQUtFX0FfUElDVFVSRScgfCBsb2NhbGl6ZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuXHJcbjwhLS0gICAgICA8ZGl2IGNsYXNzPVwicmVuZGVyLWNhbWVyYS1wb3NpdGlvbnMtcmlnaHQgc21hbGxcIj4tLT5cclxuPCEtLSAgICAgICAgPG1hdC1ncmlkLWxpc3QgW2NvbHNdPVwiMTBcIiByb3dIZWlnaHQ9XCIzNXB4XCIgY2xhc3M9XCJjYW1lcmFfcG9zaXRpb25zX2dyaWRcIj4tLT5cclxuPCEtLSAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiM1wiPjxkaXYgY2xhc3M9XCJncmlkLXRpbGUtaGVhZFwiPnt7J0lNQUdFJyB8IGxvY2FsaXplfX08L2Rpdj48L21hdC1ncmlkLXRpbGU+LS0+XHJcbjwhLS0gICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjZcIj48ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLWhlYWRcIj57eydOQU1FJyB8IGxvY2FsaXplfX08L2Rpdj48L21hdC1ncmlkLXRpbGU+LS0+XHJcbjwhLS0gICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjFcIj48ZGl2IGNsYXNzPVwiZ3JpZC10aWxlLWhlYWRcIj48L2Rpdj48L21hdC1ncmlkLXRpbGU+LS0+XHJcbjwhLS0gICAgICAgIDwvbWF0LWdyaWQtbGlzdD4tLT5cclxuPCEtLSAgICAgICAgPG1hdC1ncmlkLWxpc3QgW2NvbHNdPVwiMTFcIiByb3dIZWlnaHQ9XCI1NXB4XCIgY2xhc3M9XCJjYW1lcmFfcG9zaXRpb25zX2dyaWRcIj4tLT5cclxuPCEtLSAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpbWFnZSBvZiByZW5kZXJlZEltYWdlczsgbGV0IGluZGV4ID0gaW5kZXhcIj4tLT5cclxuPCEtLSAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIzXCI+LS0+XHJcbjwhLS0gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXRpbGUtY29udGVudCBncmlkLXRpbGUtaW1hZ2VcIj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyXCI+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3sgaW1hZ2UgfX1cIiB0YXJnZXQ9XCJfYmxhbmtcIiBkb3dubG9hZD4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJ7eyBpbWFnZSB9fVwiPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgPC9hPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxyXG48IS0tICAgICAgICAgICAgICA8L2Rpdj4tLT5cclxuPCEtLSAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT4tLT5cclxuPCEtLSAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCI2XCI+PGRpdiBjbGFzcz1cImdyaWQtdGlsZS1jb250ZW50XCI+e3sgJ0lNQUdFJyB8IGxvY2FsaXplIH19PC9kaXY+PC9tYXQtZ3JpZC10aWxlPi0tPlxyXG48IS0tICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjJcIj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtdGlsZS1jb250ZW50XCI+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNhdmVJbWFnZShpbWFnZSlcIiB0aXRsZT1cInt7J0RPV05MT0FEX0lNQUdFJyB8IGxvY2FsaXplfX1cIj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5nZXRfYXBwPC9tYXQtaWNvbj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICA8L2J1dHRvbj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgPC9kaXY+LS0+XHJcbjwhLS0gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXRpbGUtY29udGVudCBuby1wYWRkaW5nIHJpZ2h0XCI+PGJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlUmVuZGVyKGltYWdlLCBpbmRleClcIiBjbGFzcz1cInJlbW92ZS1idG5cIj48bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+ZGVsZXRlPC9tYXQtaWNvbj48L2J1dHRvbj48L2Rpdj4tLT5cclxuPCEtLSAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT4tLT5cclxuPCEtLSAgICAgICAgICA8L25nLWNvbnRhaW5lcj4tLT5cclxuPCEtLSAgICAgICAgPC9tYXQtZ3JpZC1saXN0Pi0tPlxyXG48IS0tICAgICAgPC9kaXY+LS0+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8YnV0dG9uIG1hdC1idXR0b24gbWF0LWRpYWxvZy1jbG9zZSBjbGFzcz1cImNsb3NlX2J0blwiPlg8L2J1dHRvbj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19