@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
@@ -43,7 +43,7 @@ var OutputType;
43
43
  OutputType[OutputType["Glb"] = 2] = "Glb";
44
44
  OutputType[OutputType["Video"] = 3] = "Video";
45
45
  })(OutputType || (OutputType = {}));
46
- var RenderType;
46
+ export var RenderType;
47
47
  (function (RenderType) {
48
48
  RenderType[RenderType["Realtime"] = 0] = "Realtime";
49
49
  RenderType[RenderType["Raytrace"] = 1] = "Raytrace";
@@ -134,7 +134,7 @@ export class ApiServiceModule {
134
134
  for (let i = 0; i < byteCharacters.length; i++) {
135
135
  byteArray[i] = byteCharacters.charCodeAt(i);
136
136
  }
137
- const imageBlob = new Blob([byteArray], { type: 'image/png' });
137
+ const imageBlob = new Blob([byteArray], { type: 'image/jpeg' });
138
138
  const reader = new FileReader();
139
139
  reader.readAsDataURL(imageBlob);
140
140
  reader.onload = () => {
@@ -146,6 +146,10 @@ export class ApiServiceModule {
146
146
  });
147
147
  });
148
148
  }
149
+ degreesToVector3(value) {
150
+ // Value -> rotation in degrees for Z-axis
151
+ return new Vector3(0, 0, +value); // format it for blender
152
+ }
149
153
  _sendJsonRequest(url, body, options) {
150
154
  return __awaiter(this, void 0, void 0, function* () {
151
155
  try {
@@ -197,7 +201,7 @@ export class ApiServiceModule {
197
201
  _createProductRenderRequestBody(filename, camera, renderParameters) {
198
202
  return {
199
203
  clientId: 'colijn',
200
- colijnLegacy: false,
204
+ colijnLegacy: renderParameters.allowCulling,
201
205
  rootPath: '',
202
206
  useAssetPath: false,
203
207
  sceneSettings: this._setProductSceneSettings(renderParameters),
@@ -219,19 +223,11 @@ export class ApiServiceModule {
219
223
  }
220
224
  };
221
225
  }
222
- // private _setOutputSettings(renderParameters): OutputSettings {
223
- // const outputSettings: OutputSettings = new OutputSettings();
224
- // outputSettings.width = renderParameters.width;
225
- // outputSettings.height = renderParameters.height;
226
- // outputSettings.outputType = OutputType.Jpeg;
227
- // outputSettings.renderType = RenderType.Raytrace;
228
- // return outputSettings;
229
- // }
230
226
  _setRenderSettings(renderParameters) {
231
227
  const settings = new RenderSettings();
232
228
  settings.width = renderParameters.width;
233
229
  settings.height = renderParameters.height;
234
- settings.outputType = OutputType.Png;
230
+ settings.outputType = OutputType.Jpeg;
235
231
  settings.renderType = RenderType.Raytrace;
236
232
  settings.transparency = false;
237
233
  settings.exposure = renderParameters.lightingExposure;
@@ -241,17 +237,17 @@ export class ApiServiceModule {
241
237
  const settings = new RenderSettings();
242
238
  settings.width = renderParameters.width;
243
239
  settings.height = renderParameters.height;
244
- settings.outputType = OutputType.Png;
240
+ settings.outputType = OutputType.Jpeg;
245
241
  settings.renderType = RenderType.Raytrace;
246
242
  return settings;
247
243
  }
248
244
  _setSceneSettings(renderParameters) {
249
245
  const settings = new SceneSettings();
250
- settings.sceneAssetId = renderParameters.sceneAssetId;
246
+ settings.sceneAssetId = renderParameters.sceneAsset.primarySceneName;
251
247
  settings.activeCameraId = 1;
252
248
  settings.default = true;
253
- settings.hdriRotation = this._degreesToVector3(renderParameters.hdriRotation);
254
- settings.hdriIntensity = Number(renderParameters.hdriIntensity / 100);
249
+ settings.hdriRotation = this.degreesToVector3(renderParameters.hdriRotation);
250
+ settings.hdriIntensity = renderParameters.hdriIntensity;
255
251
  return settings;
256
252
  }
257
253
  _setProductSceneSettings(renderParameters) {
@@ -315,7 +311,8 @@ export class ApiServiceModule {
315
311
  renderCamera.id = 1;
316
312
  renderCamera.assetId = 'camera_colijn';
317
313
  renderCamera.transform = this._setCameraRotation(cameraInfo);
318
- renderCamera.fov = fov;
314
+ // renderCamera.fov = fov;
315
+ renderCamera.fov = 62;
319
316
  return renderCamera;
320
317
  }
321
318
  _cameraProductSettings(camera) {
@@ -342,10 +339,6 @@ export class ApiServiceModule {
342
339
  const factor = Math.pow(10, 5);
343
340
  return Math.floor(value * factor) / factor;
344
341
  }
345
- _degreesToVector3(value) {
346
- // Value -> rotation in degrees for Z-axis
347
- return new Vector3(0, 0, +value); // format it for blender
348
- }
349
342
  }
350
343
  ApiServiceModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ApiServiceModule, deps: [{ token: i1.HomedecoratorConnectorService }, { token: i2.MessageBusService }, { token: i3.HttpClient }, { token: i4.HomedecoratorSettingsService }, { token: i5.MatDialog }, { token: i6.ConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable });
351
344
  ApiServiceModule.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ApiServiceModule, providedIn: 'root' });
@@ -355,4 +348,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
355
348
  providedIn: 'root'
356
349
  }]
357
350
  }], ctorParameters: function () { return [{ type: i1.HomedecoratorConnectorService }, { type: i2.MessageBusService }, { type: i3.HttpClient }, { type: i4.HomedecoratorSettingsService }, { type: i5.MatDialog }, { type: i6.ConfigurationService }]; } });
358
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiM2RtLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL2NvcmUvc2VydmljZS8zZG0tYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQXFCLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFHL0UsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBR3RELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7OztBQUdoRSxNQUFNLE9BQU8sY0FBYztDQVMxQjtBQUVELE1BQU0sT0FBTyxhQUFhO0NBU3pCO0FBRUQsTUFBTSxPQUFPLGNBQWM7Q0FTMUI7QUFFRCxNQUFNLE9BQU8sTUFBTTtDQU1sQjtBQUVELE1BQU0sT0FBTyxTQUFTO0NBS3JCO0FBR0QsTUFBTSxPQUFPLElBQUk7SUFBakI7UUFDUyxNQUFDLEdBQVcsQ0FBQyxDQUFDO1FBQ2QsTUFBQyxHQUFXLENBQUMsQ0FBQztRQUNkLE1BQUMsR0FBVyxDQUFDLENBQUM7UUFDZCxNQUFDLEdBQVcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FBQTtBQUVELElBQUssVUFLSjtBQUxELFdBQUssVUFBVTtJQUNiLDJDQUFRLENBQUE7SUFDUix5Q0FBTyxDQUFBO0lBQ1AseUNBQU8sQ0FBQTtJQUNQLDZDQUFTLENBQUE7QUFDWCxDQUFDLEVBTEksVUFBVSxLQUFWLFVBQVUsUUFLZDtBQUVELElBQUssVUFHSjtBQUhELFdBQUssVUFBVTtJQUNiLG1EQUFZLENBQUE7SUFDWixtREFBWSxDQUFBO0FBQ2QsQ0FBQyxFQUhJLFVBQVUsS0FBVixVQUFVLFFBR2Q7QUFNRCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFlBQ1MscUJBQW9ELEVB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O1FBQ3JDLDBDQUEwQztRQUMxQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtJQUM1RCxDQUFDOzs4R0FoVlUsZ0JBQWdCO2tIQUFoQixnQkFBZ0IsY0FIZixNQUFNOzRGQUdQLGdCQUFnQjtrQkFKNUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtFdWxlciwgTWF0aFV0aWxzLCBQZXJzcGVjdGl2ZUNhbWVyYSwgUXVhdGVybmlvbiwgVmVjdG9yM30gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4vaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi9tZXNzYWdlLWJ1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vZW51bS9tZXNzYWdlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25LZXl9IGZyb20gJy4uL2VudW0vY29uZmlndXJhdGlvbi1rZXkuZW51bSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4vY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBPdXRwdXRTZXR0aW5ncyB7XHJcbiAgcHVibGljIHdpZHRoOiBudW1iZXI7XHJcbiAgcHVibGljIGhlaWdodDogbnVtYmVyO1xyXG4gIHB1YmxpYyBvdXRwdXRUeXBlOiBPdXRwdXRUeXBlO1xyXG4gIHB1YmxpYyB0cmFuc3BhcmVuY3k6IGJvb2xlYW47XHJcbiAgcHVibGljIHF1YWxpdHk6IG51bWJlcjtcclxuICBwdWJsaWMgcmVuZGVyVHlwZTogUmVuZGVyVHlwZTtcclxuICBwdWJsaWMgZHVyYXRpb246IG51bWJlcjtcclxuICBwdWJsaWMgYm91bmNlczogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2NlbmVTZXR0aW5ncyB7XHJcbiAgcHVibGljIGFjdGl2ZUNhbWVyYUlkOiBudW1iZXI7XHJcbiAgcHVibGljIHNjZW5lQXNzZXRJZDogc3RyaW5nO1xyXG4gIHB1YmxpYyBsaWdodEdyb3VwSWQ6IG51bWJlcjtcclxuICBwdWJsaWMgaGRyaUFzc2V0SWQ6IG51bWJlcjtcclxuICBwdWJsaWMgaGRyaVJvdGF0aW9uOiBWZWN0b3IzO1xyXG4gIHB1YmxpYyBoZHJpSW50ZW5zaXR5OiBudW1iZXI7XHJcbiAgcHVibGljIGRlZmF1bHQ6IGJvb2xlYW47XHJcbiAgcHVibGljIGlkOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZW5kZXJTZXR0aW5ncyB7XHJcbiAgcHVibGljIHJlbmRlclNldHRpbmdzQXNzZXRJZDogc3RyaW5nO1xyXG4gIHB1YmxpYyB3aWR0aDogbnVtYmVyO1xyXG4gIHB1YmxpYyBoZWlnaHQ6IG51bWJlcjtcclxuICBwdWJsaWMgb3V0cHV0VHlwZTogT3V0cHV0VHlwZTtcclxuICBwdWJsaWMgcmVuZGVyVHlwZTogUmVuZGVyVHlwZTtcclxuICBwdWJsaWMgdHJhbnNwYXJlbmN5OiBib29sZWFuO1xyXG4gIHB1YmxpYyBxdWFsaXR5OiBudW1iZXI7XHJcbiAgcHVibGljIGV4cG9zdXJlOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDYW1lcmEge1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgYXNzZXRJZDogc3RyaW5nOyAvLyBmb3IgcHJlLWNyZWF0ZWQgY2FtZXJhXHJcbiAgZm92OiBudW1iZXI7IC8vIG9yIG1heWJlIGxlbnMgaW4gbW0/XHJcbiAgdHJhbnNmb3JtOiBhbnk7XHJcbiAgZG9mOiBDYW1lcmFET0Y7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDYW1lcmFET0Yge1xyXG4gIGZvY2FsTGVuZ3RoOiBudW1iZXI7XHJcbiAgZlN0b3A6IG51bWJlcjtcclxuICBibGFkZXM6IG51bWJlcjtcclxuICByb3RhdGlvbjogbnVtYmVyO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFJHQkEge1xyXG4gIHB1YmxpYyByOiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBnOiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBiOiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBhOiBudW1iZXIgPSAwO1xyXG59XHJcblxyXG5lbnVtIE91dHB1dFR5cGUge1xyXG4gIEpwZWcgPSAwLFxyXG4gIFBuZyA9IDEsXHJcbiAgR2xiID0gMixcclxuICBWaWRlbyA9IDNcclxufVxyXG5cclxuZW51bSBSZW5kZXJUeXBlIHtcclxuICBSZWFsdGltZSA9IDAsXHJcbiAgUmF5dHJhY2UgPSAxXHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBBcGlTZXJ2aWNlTW9kdWxlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBpT25lQ29udHJvbGxlclNlcnZpY2U6IEhvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlLFxyXG4gICAgcHVibGljIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIF9zZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHVwbG9hZFRvQXBpR0xCKFxyXG4gICAgZm9ybURhdGE6IEZvcm1EYXRhLFxyXG4gICAgZmlsZW5hbWU6IHN0cmluZyxcclxuICAgIGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEsXHJcbiAgICBzdGFuZGFsb25lOiBib29sZWFuLFxyXG4gICAgcmVuZGVyUGFyYW1ldGVyczogYW55LFxyXG4gICAgcmVuZGVyUHJldmlldzogYm9vbGVhblxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgYXBpVXJsOiBzdHJpbmcgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudXBsb2FkRW5kcG9pbnQ7XHJcbiAgICBjb25zdCBvcHRpb25zOiBPYmplY3QgPSB7fTtcclxuICAgIHRoaXMuX3NlbmRSZXF1ZXN0KGFwaVVybCwgZm9ybURhdGEsIG9wdGlvbnMpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVMb2FkaW5nSW5kaWNhdG9yKTtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNob3dMb2FkaW5nSW5kaWNhdG9yLCB7dGl0bGU6ICdSZW5kZXJpbmcuLi4nfSk7XHJcbiAgICAgIHRoaXMucmVxdWVzdFJlbmRlcihmaWxlbmFtZSwgY2FtZXJhLCBzdGFuZGFsb25lLCByZW5kZXJQYXJhbWV0ZXJzLCByZW5kZXJQcmV2aWV3KTtcclxuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlbmRlckVycm9yLCB7dGl0bGU6ICdVcGxvYWQgZXJyb3InLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0UmVuZGVyKFxyXG4gICAgZmlsZW5hbWU6IHN0cmluZyxcclxuICAgIGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEsXHJcbiAgICBzdGFuZGFsb25lOiBib29sZWFuLFxyXG4gICAgcmVuZGVyUGFyYW1ldGVyczogYW55LFxyXG4gICAgcmVuZGVyUHJldmlldzogYm9vbGVhblxyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCBhcGlVcmw6IHN0cmluZyA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5yZW5kZXJFbmRwb2ludDtcclxuICAgIGNvbnN0IG9wdGlvbnM6IE9iamVjdCA9IHRoaXMuX3NldE9wdGlvbnMoKTtcclxuICAgIGxldCByZXF1ZXN0OiBPYmplY3Q7XHJcbiAgICBpZiAoc3RhbmRhbG9uZSkge1xyXG4gICAgICByZXF1ZXN0ID0gdGhpcy5fY3JlYXRlUHJvZHVjdFJlbmRlclJlcXVlc3RCb2R5KGZpbGVuYW1lLCBjYW1lcmEsIHJlbmRlclBhcmFtZXRlcnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVxdWVzdCA9IHRoaXMuX2NyZWF0ZVJlbmRlclJlcXVlc3RCb2R5KGZpbGVuYW1lLCBjYW1lcmEsIHJlbmRlclBhcmFtZXRlcnMpO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5fc2VuZFJlcXVlc3QoYXBpVXJsLCByZXF1ZXN0LCBvcHRpb25zKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmICghc3RhbmRhbG9uZSkge1xyXG4gICAgICAgIGlmIChyZW5kZXJQcmV2aWV3KSB7XHJcbiAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoPEJsb2I+cmVzdWx0KTtcclxuICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFVUkw6IHN0cmluZyA9IHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nO1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxvYWRpbmdJbmRpY2F0b3IpO1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuQmxlbmRlclJlbmRlclByZXZpZXdSZWFkeSwgZGF0YVVSTCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhVVJMO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgZG93bmxvYWRGaWxlbmFtZTogc3RyaW5nID0gZmlsZW5hbWUucmVwbGFjZSgnLmdsYicsICcuanBnJyk7XHJcbiAgICAgICAgICBjb25zdCBlbGVtZW50OiBIVE1MQW5jaG9yRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgIGVsZW1lbnQuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwocmVzdWx0KTtcclxuICAgICAgICAgIGVsZW1lbnQuZG93bmxvYWQgPSBkb3dubG9hZEZpbGVuYW1lO1xyXG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50KTtcclxuICAgICAgICAgIGVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxvYWRpbmdJbmRpY2F0b3IpO1xyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nLmNsb3NlQWxsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoPEJsb2I+cmVzdWx0KTtcclxuICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZGF0YVVSTDogc3RyaW5nID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxvYWRpbmdJbmRpY2F0b3IpO1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkJsZW5kZXJSZW5kZXJGaWxlUmVhZHksIGRhdGFVUkwpO1xyXG4gICAgICAgICAgcmV0dXJuIGRhdGFVUkw7XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVuZGVyRXJyb3IsIHt0aXRsZTogJ1JlbmRlciBlcnJvcicsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2V9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENhbWVyYVByb3BlcnRpZXMoY2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYSk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FtZXJhUHJvZHVjdFNldHRpbmdzKGNhbWVyYSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFJlbmRlckZyb21Kc29uKHJlcXVlc3REYXRhOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGFwaVVybDogc3RyaW5nID0gJ2h0dHBzOi8vY2l0cmVuZGVyc2VydmljZS5pb25lY2xvdWQubmwvcHJvY2Vzc0JsZW5kZXJSZW5kZXInO1xyXG4gICAgYXdhaXQgdGhpcy5fc2VuZEpzb25SZXF1ZXN0KGFwaVVybCwgcmVxdWVzdERhdGEpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgY29uc3QgaW1hZ2U6IHN0cmluZyA9IHJlc3VsdFsncmVuZGVyJ107XHJcbiAgICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzOiBzdHJpbmcgPSBhdG9iKGltYWdlKTtcclxuICAgICAgY29uc3QgYnl0ZUFycmF5OiBVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZUNoYXJhY3RlcnMubGVuZ3RoKTtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYnl0ZUFycmF5W2ldID0gYnl0ZUNoYXJhY3RlcnMuY2hhckNvZGVBdChpKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbWFnZUJsb2I6IEJsb2IgPSAgbmV3IEJsb2IoW2J5dGVBcnJheV0sIHsgdHlwZTogJ2ltYWdlL3BuZycgfSk7XHJcbiAgICAgIGNvbnN0IHJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKDxCbG9iPmltYWdlQmxvYik7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YVVSTDogc3RyaW5nID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVMb2FkaW5nSW5kaWNhdG9yKTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuQmxlbmRlclJlbmRlckZpbGVSZWFkeSwgZGF0YVVSTCk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFVUkw7XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3NlbmRKc29uUmVxdWVzdCh1cmw6IHN0cmluZywgYm9keTogYW55LCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxPYmplY3Q+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBBcnJheUJ1ZmZlciA9IGF3YWl0IHRoaXMuX2h0dHAucG9zdCh1cmwsIGJvZHksIHtcclxuICAgICAgICAuLi5vcHRpb25zLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2QnOiAnUE9TVCcsXHJcbiAgICAgICAgICAuLi4ob3B0aW9ucz8uaGVhZGVycyB8fCB7fSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pLnRvUHJvbWlzZSgpO1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBfc2VuZFJlcXVlc3Q6JywgZXJyb3IpO1xyXG4gICAgICB0aHJvdyBlcnJvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9zZW5kUmVxdWVzdCh1cmw6IHN0cmluZywgYm9keTogYW55LCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxPYmplY3Q+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLl9odHRwLnBvc3QoYCR7dXJsfWAsIGJvZHksIG9wdGlvbnMpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0T3B0aW9ucygpOiBPYmplY3Qge1xyXG4gICAgY29uc3QgaGVhZGVyczogT2JqZWN0ID0ge1xyXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAnQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2QnOiAnUE9TVCdcclxuICAgIH07XHJcbiAgICByZXR1cm4ge2hlYWRlcnMsIHJlc3BvbnNlVHlwZTogJ2Jsb2InLCByZXBvcnRQcm9ncmVzczogdHJ1ZX07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVSZW5kZXJSZXF1ZXN0Qm9keShmaWxlbmFtZTogc3RyaW5nLCBjYW1lcmE6IFBlcnNwZWN0aXZlQ2FtZXJhLCByZW5kZXJQYXJhbWV0ZXJzOiBhbnkpOiBPYmplY3Qge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5yZW5kZXJBcGlDbGllbnRJZCxcclxuICAgICAgY29saWpuTGVnYWN5OiB0cnVlLFxyXG4gICAgICByb290UGF0aDogJycsXHJcbiAgICAgIHVzZUFzc2V0UGF0aDogZmFsc2UsXHJcbiAgICAgIHNjZW5lU2V0dGluZ3M6IFt0aGlzLl9zZXRTY2VuZVNldHRpbmdzKHJlbmRlclBhcmFtZXRlcnMpXSxcclxuICAgICAgcmVuZGVyU2V0dGluZ3M6IHRoaXMuX3NldFJlbmRlclNldHRpbmdzKHJlbmRlclBhcmFtZXRlcnMpLFxyXG4gICAgICBjb250ZW50OiB7XHJcbiAgICAgICAgbWF0ZXJpYWxzOiBbXSxcclxuICAgICAgICBjYW1lcmFzOiBbXHJcbiAgICAgICAgICB0aGlzLl9jYW1lcmFTZXR0aW5ncyhjYW1lcmEpXHJcbiAgICAgICAgXSxcclxuICAgICAgICBsaWdodHM6IFtdLFxyXG4gICAgICAgIGdyb3VwczogW10sXHJcbiAgICAgICAgcHJlZmFiczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBpZDogNyxcclxuICAgICAgICAgICAgYXNzZXRJZDogZmlsZW5hbWVcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVQcm9kdWN0UmVuZGVyUmVxdWVzdEJvZHkoZmlsZW5hbWU6IHN0cmluZywgY2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYSwgcmVuZGVyUGFyYW1ldGVyczogYW55KTogT2JqZWN0IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNsaWVudElkOiAnY29saWpuJyxcclxuICAgICAgY29saWpuTGVnYWN5OiBmYWxzZSxcclxuICAgICAgcm9vdFBhdGg6ICcnLFxyXG4gICAgICB1c2VBc3NldFBhdGg6IGZhbHNlLFxyXG4gICAgICBzY2VuZVNldHRpbmdzOiB0aGlzLl9zZXRQcm9kdWN0U2NlbmVTZXR0aW5ncyhyZW5kZXJQYXJhbWV0ZXJzKSxcclxuICAgICAgcmVuZGVyU2V0dGluZ3M6IHRoaXMuX3NldFByb2R1Y3RSZW5kZXJTZXR0aW5ncyhyZW5kZXJQYXJhbWV0ZXJzKSxcclxuICAgICAgY29udGVudDoge1xyXG4gICAgICAgIG1hdGVyaWFsczogW10sXHJcbiAgICAgICAgY2FtZXJhczogW1xyXG4gICAgICAgICAgdGhpcy5fY2FtZXJhUHJvZHVjdFNldHRpbmdzKGNhbWVyYSlcclxuICAgICAgICBdLFxyXG4gICAgICAgIGxpZ2h0czogW10sXHJcbiAgICAgICAgZ3JvdXBzOiBbXSxcclxuICAgICAgICBwcmVmYWJzOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGlkOiA3LFxyXG4gICAgICAgICAgICBhc3NldElkOiBmaWxlbmFtZSxcclxuICAgICAgICAgICAgcGFyZW50U2NlbmVzOiBbNjAwLCA2MDFdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBfc2V0T3V0cHV0U2V0dGluZ3MocmVuZGVyUGFyYW1ldGVycyk6IE91dHB1dFNldHRpbmdzIHtcclxuICAvLyAgIGNvbnN0IG91dHB1dFNldHRpbmdzOiBPdXRwdXRTZXR0aW5ncyA9IG5ldyBPdXRwdXRTZXR0aW5ncygpO1xyXG4gIC8vICAgb3V0cHV0U2V0dGluZ3Mud2lkdGggPSByZW5kZXJQYXJhbWV0ZXJzLndpZHRoO1xyXG4gIC8vICAgb3V0cHV0U2V0dGluZ3MuaGVpZ2h0ID0gcmVuZGVyUGFyYW1ldGVycy5oZWlnaHQ7XHJcbiAgLy8gICBvdXRwdXRTZXR0aW5ncy5vdXRwdXRUeXBlID0gT3V0cHV0VHlwZS5KcGVnO1xyXG4gIC8vICAgb3V0cHV0U2V0dGluZ3MucmVuZGVyVHlwZSA9IFJlbmRlclR5cGUuUmF5dHJhY2U7XHJcbiAgLy8gICByZXR1cm4gb3V0cHV0U2V0dGluZ3M7XHJcbiAgLy8gfVxyXG5cclxuICBwcml2YXRlIF9zZXRSZW5kZXJTZXR0aW5ncyhyZW5kZXJQYXJhbWV0ZXJzOiBhbnkpOiBSZW5kZXJTZXR0aW5ncyB7XHJcbiAgICBjb25zdCBzZXR0aW5nczogUmVuZGVyU2V0dGluZ3MgPSBuZXcgUmVuZGVyU2V0dGluZ3MoKTtcclxuICAgIHNldHRpbmdzLndpZHRoID0gcmVuZGVyUGFyYW1ldGVycy53aWR0aDtcclxuICAgIHNldHRpbmdzLmhlaWdodCA9IHJlbmRlclBhcmFtZXRlcnMuaGVpZ2h0O1xyXG4gICAgc2V0dGluZ3Mub3V0cHV0VHlwZSA9IE91dHB1dFR5cGUuUG5nO1xyXG4gICAgc2V0dGluZ3MucmVuZGVyVHlwZSA9IFJlbmRlclR5cGUuUmF5dHJhY2U7XHJcbiAgICBzZXR0aW5ncy50cmFuc3BhcmVuY3kgPSBmYWxzZTtcclxuICAgIHNldHRpbmdzLmV4cG9zdXJlID0gcmVuZGVyUGFyYW1ldGVycy5saWdodGluZ0V4cG9zdXJlO1xyXG4gICAgcmV0dXJuIHNldHRpbmdzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0UHJvZHVjdFJlbmRlclNldHRpbmdzKHJlbmRlclBhcmFtZXRlcnM6IGFueSk6IFJlbmRlclNldHRpbmdzIHtcclxuICAgIGNvbnN0IHNldHRpbmdzOiBSZW5kZXJTZXR0aW5ncyA9IG5ldyBSZW5kZXJTZXR0aW5ncygpO1xyXG4gICAgc2V0dGluZ3Mud2lkdGggPSByZW5kZXJQYXJhbWV0ZXJzLndpZHRoO1xyXG4gICAgc2V0dGluZ3MuaGVpZ2h0ID0gcmVuZGVyUGFyYW1ldGVycy5oZWlnaHQ7XHJcbiAgICBzZXR0aW5ncy5vdXRwdXRUeXBlID0gT3V0cHV0VHlwZS5Qbmc7XHJcbiAgICBzZXR0aW5ncy5yZW5kZXJUeXBlID0gUmVuZGVyVHlwZS5SYXl0cmFjZTtcclxuICAgIHJldHVybiBzZXR0aW5ncztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldFNjZW5lU2V0dGluZ3MocmVuZGVyUGFyYW1ldGVyczogYW55KTogU2NlbmVTZXR0aW5ncyB7XHJcbiAgICBjb25zdCBzZXR0aW5nczogU2NlbmVTZXR0aW5ncyA9IG5ldyBTY2VuZVNldHRpbmdzKCk7XHJcbiAgICBzZXR0aW5ncy5zY2VuZUFzc2V0SWQgPSByZW5kZXJQYXJhbWV0ZXJzLnNjZW5lQXNzZXRJZDtcclxuICAgIHNldHRpbmdzLmFjdGl2ZUNhbWVyYUlkID0gMTtcclxuICAgIHNldHRpbmdzLmRlZmF1bHQgPSB0cnVlO1xyXG4gICAgc2V0dGluZ3MuaGRyaVJvdGF0aW9uID0gdGhpcy5fZGVncmVlc1RvVmVjdG9yMyhyZW5kZXJQYXJhbWV0ZXJzLmhkcmlSb3RhdGlvbik7XHJcbiAgICBzZXR0aW5ncy5oZHJpSW50ZW5zaXR5ID0gTnVtYmVyKHJlbmRlclBhcmFtZXRlcnMuaGRyaUludGVuc2l0eSAvIDEwMCk7XHJcbiAgICByZXR1cm4gc2V0dGluZ3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRQcm9kdWN0U2NlbmVTZXR0aW5ncyhyZW5kZXJQYXJhbWV0ZXJzOiBhbnkpOiBTY2VuZVNldHRpbmdzW10ge1xyXG4gICAgY29uc3QgY29tcG9zaXRlU2NlbmU6IFNjZW5lU2V0dGluZ3MgPSBuZXcgU2NlbmVTZXR0aW5ncygpO1xyXG4gICAgY29tcG9zaXRlU2NlbmUuc2NlbmVBc3NldElkID0gJ2NvbXBvc2l0ZV9wcm9kdWN0X3JlbmRlcmluZyc7XHJcbiAgICBjb21wb3NpdGVTY2VuZS5hY3RpdmVDYW1lcmFJZCA9IDE7XHJcbiAgICBjb21wb3NpdGVTY2VuZS5kZWZhdWx0ID0gdHJ1ZTtcclxuICAgIGNvbXBvc2l0ZVNjZW5lLmlkID0gNjAwO1xyXG5cclxuICAgIGNvbnN0IGFkZGl0aW9uYWxTY2VuZTogU2NlbmVTZXR0aW5ncyA9IG5ldyBTY2VuZVNldHRpbmdzKCk7XHJcbiAgICBhZGRpdGlvbmFsU2NlbmUuc2NlbmVBc3NldElkID0gJ1NjZW5lX0dyb3VuZCc7XHJcbiAgICBhZGRpdGlvbmFsU2NlbmUuYWN0aXZlQ2FtZXJhSWQgPSAxO1xyXG4gICAgYWRkaXRpb25hbFNjZW5lLmRlZmF1bHQgPSBmYWxzZTtcclxuICAgIGFkZGl0aW9uYWxTY2VuZS5pZCA9IDYwMTtcclxuXHJcbiAgICByZXR1cm4gW2NvbXBvc2l0ZVNjZW5lLCBhZGRpdGlvbmFsU2NlbmVdO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBfc2V0UHJvZHVjdE91dHB1dFNldHRpbmdzKHJlbmRlclBhcmFtZXRlcnM6IGFueSk6IE91dHB1dFNldHRpbmdzIHtcclxuICAvLyAgIGNvbnN0IG91dHB1dFNldHRpbmdzOiBPdXRwdXRTZXR0aW5ncyA9IG5ldyBPdXRwdXRTZXR0aW5ncygpO1xyXG4gIC8vICAgb3V0cHV0U2V0dGluZ3Mud2lkdGggPSByZW5kZXJQYXJhbWV0ZXJzLndpZHRoO1xyXG4gIC8vICAgb3V0cHV0U2V0dGluZ3MuaGVpZ2h0ID0gcmVuZGVyUGFyYW1ldGVycy5oZWlnaHQ7XHJcbiAgLy8gICBvdXRwdXRTZXR0aW5ncy5vdXRwdXRUeXBlID0gT3V0cHV0VHlwZS5KcGVnO1xyXG4gIC8vICAgb3V0cHV0U2V0dGluZ3MucmVuZGVyVHlwZSA9IFJlbmRlclR5cGUuUmVhbHRpbWU7XHJcbiAgLy8gICByZXR1cm4gb3V0cHV0U2V0dGluZ3M7XHJcbiAgLy8gfVxyXG5cclxuICBwcml2YXRlIF9jYWxjdWxhdGVDYW1lcmFQb3NpdGlvblJvdGF0aW9uKGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEpOiBhbnkge1xyXG4gICAgY29uc3QgcG9zOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKS5jb3B5KGNhbWVyYS5wb3NpdGlvbik7XHJcbiAgICBjb25zdCBxdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uID0gY2FtZXJhLnF1YXRlcm5pb247XHJcbiAgICBjb25zdCBibGVuZGVyUXVhdDogUXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCkuc2V0RnJvbUF4aXNBbmdsZShuZXcgVmVjdG9yMygxLCAwLCAwKSwgTWF0aFV0aWxzLmRlZ1RvUmFkKDkwKSk7XHJcbiAgICBjb25zdCBldWxlcjogRXVsZXIgPSBuZXcgRXVsZXIoKS5zZXRGcm9tUXVhdGVybmlvbihcclxuICAgICAgYmxlbmRlclF1YXQubXVsdGlwbHkocXVhdGVybmlvbiksXHJcbiAgICAgICdaWVgnXHJcbiAgICApO1xyXG4gICAgcG9zLmFwcGx5QXhpc0FuZ2xlKG5ldyBWZWN0b3IzKDEsIDAsIDApLCBNYXRoVXRpbHMuZGVnVG9SYWQoOTApKTtcclxuICAgIGNvbnN0IHJvdDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKFxyXG4gICAgICBNYXRoVXRpbHMucmFkVG9EZWcoZXVsZXIueCksXHJcbiAgICAgIE1hdGhVdGlscy5yYWRUb0RlZyhldWxlci55KSxcclxuICAgICAgTWF0aFV0aWxzLnJhZFRvRGVnKGV1bGVyLnopXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJ3Bvc2l0aW9uJzogcG9zLFxyXG4gICAgICAncm90YXRpb24nOiByb3RcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRDYW1lcmFSb3RhdGlvbihjYW1lcmFJbmZvOiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICBzZXQ6IHtcclxuICAgICAgICAgIHg6IHRoaXMuX3Nob3J0ZW5WYWx1ZShjYW1lcmFJbmZvLnBvc2l0aW9uLngpLFxyXG4gICAgICAgICAgeTogdGhpcy5fc2hvcnRlblZhbHVlKGNhbWVyYUluZm8ucG9zaXRpb24ueSksXHJcbiAgICAgICAgICB6OiB0aGlzLl9zaG9ydGVuVmFsdWUoY2FtZXJhSW5mby5wb3NpdGlvbi56KVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgcm90YXRpb246IHtcclxuICAgICAgICBzZXQ6IHtcclxuICAgICAgICAgIHg6IHRoaXMuX3Nob3J0ZW5WYWx1ZShjYW1lcmFJbmZvLnJvdGF0aW9uLngpLFxyXG4gICAgICAgICAgeTogdGhpcy5fc2hvcnRlblZhbHVlKGNhbWVyYUluZm8ucm90YXRpb24ueSksXHJcbiAgICAgICAgICB6OiB0aGlzLl9zaG9ydGVuVmFsdWUoY2FtZXJhSW5mby5yb3RhdGlvbi56KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NhbWVyYVNldHRpbmdzKGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEpOiBDYW1lcmEge1xyXG4gICAgbGV0IGZvdjogbnVtYmVyID0gNDU7XHJcbiAgICBpZiAodGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5DYW1lcmFGT1YpKSB7XHJcbiAgICAgIGZvdiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuQ2FtZXJhRk9WKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNhbWVyYUluZm8gPSB0aGlzLl9jYWxjdWxhdGVDYW1lcmFQb3NpdGlvblJvdGF0aW9uKGNhbWVyYSk7XHJcbiAgICBjb25zdCByZW5kZXJDYW1lcmE6IENhbWVyYSA9IG5ldyBDYW1lcmEoKTtcclxuICAgIHJlbmRlckNhbWVyYS5pZCA9IDE7XHJcbiAgICByZW5kZXJDYW1lcmEuYXNzZXRJZCA9ICdjYW1lcmFfY29saWpuJztcclxuICAgIHJlbmRlckNhbWVyYS50cmFuc2Zvcm0gPSB0aGlzLl9zZXRDYW1lcmFSb3RhdGlvbihjYW1lcmFJbmZvKTtcclxuICAgIHJlbmRlckNhbWVyYS5mb3YgPSBmb3Y7XHJcbiAgICByZXR1cm4gcmVuZGVyQ2FtZXJhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2FtZXJhUHJvZHVjdFNldHRpbmdzKGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEpOiBhbnkge1xyXG4gICAgY29uc3QgY2FtZXJhSW5mbyA9IHRoaXMuX2NhbGN1bGF0ZUNhbWVyYVBvc2l0aW9uUm90YXRpb24oY2FtZXJhKTtcclxuICAgIGNvbnN0IHJlbmRlckNhbWVyYTogQ2FtZXJhID0gbmV3IENhbWVyYSgpO1xyXG4gICAgcmVuZGVyQ2FtZXJhLmlkID0gMTtcclxuICAgIHJlbmRlckNhbWVyYS5hc3NldElkID0gJ2NhbWVyYV9jb2xpam4nO1xyXG4gICAgcmVuZGVyQ2FtZXJhLnRyYW5zZm9ybSA9IHRoaXMuX3NldENhbWVyYVJvdGF0aW9uKGNhbWVyYUluZm8pO1xyXG4gICAgcmVuZGVyQ2FtZXJhLmZvdiA9IDkwO1xyXG4gICAgcmV0dXJuIHJlbmRlckNhbWVyYTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFNjZW5lQmFzZWRMaWdodHMoc2NlbmVBc3NldElkOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgaWYgKHNjZW5lQXNzZXRJZC5pbmNsdWRlcygnZWV2ZWUnKSkge1xyXG4gICAgICByZXR1cm4gW3tcclxuICAgICAgICAnaWQnOiA3LFxyXG4gICAgICAgICdhc3NldElkJzogJ2xpZ2h0c19lZXZlZSdcclxuICAgICAgfV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zaG9ydGVuVmFsdWUodmFsdWUpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZmFjdG9yOiBudW1iZXIgPSBNYXRoLnBvdygxMCwgNSk7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcih2YWx1ZSAqIGZhY3RvcikgLyBmYWN0b3I7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kZWdyZWVzVG9WZWN0b3IzKHZhbHVlOiBudW1iZXIpOiBWZWN0b3IzIHtcclxuICAgIC8vIFZhbHVlIC0+IHJvdGF0aW9uIGluIGRlZ3JlZXMgZm9yIFotYXhpc1xyXG4gICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIDAsICt2YWx1ZSk7IC8vIGZvcm1hdCBpdCBmb3IgYmxlbmRlclxyXG4gIH1cclxufVxyXG4iXX0=
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiM2RtLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL2NvcmUvc2VydmljZS8zZG0tYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQXFCLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFHL0UsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBR3RELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7OztBQUloRSxNQUFNLE9BQU8sY0FBYztDQVMxQjtBQUVELE1BQU0sT0FBTyxhQUFhO0NBU3pCO0FBRUQsTUFBTSxPQUFPLGNBQWM7Q0FTMUI7QUFFRCxNQUFNLE9BQU8sTUFBTTtDQU1sQjtBQUVELE1BQU0sT0FBTyxTQUFTO0NBS3JCO0FBR0QsTUFBTSxPQUFPLElBQUk7SUFBakI7UUFDUyxNQUFDLEdBQVcsQ0FBQyxDQUFDO1FBQ2QsTUFBQyxHQUFXLENBQUMsQ0FBQztRQUNkLE1BQUMsR0FBVyxDQUFDLENBQUM7UUFDZCxNQUFDLEdBQVcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FBQTtBQUVELElBQUssVUFLSjtBQUxELFdBQUssVUFBVTtJQUNiLDJDQUFRLENBQUE7SUFDUix5Q0FBTyxDQUFBO0lBQ1AseUNBQU8sQ0FBQTtJQUNQLDZDQUFTLENBQUE7QUFDWCxDQUFDLEVBTEksVUFBVSxLQUFWLFVBQVUsUUFLZDtBQUVELE1BQU0sQ0FBTixJQUFZLFVBR1g7QUFIRCxXQUFZLFVBQVU7SUFDcEIsbURBQVksQ0FBQTtJQUNaLG1EQUFZLENBQUE7QUFDZCxDQUFDLEVBSFcsVUFBVSxLQUFWLFVBQVUsUUFHckI7QUFNRCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFlB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R0FBRyxNQUFNLENBQUM7SUFDN0MsQ0FBQzs7OEdBMVVVLGdCQUFnQjtrSEFBaEIsZ0JBQWdCLGNBSGYsTUFBTTs0RkFHUCxnQkFBZ0I7a0JBSjVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7RXVsZXIsIE1hdGhVdGlscywgUGVyc3BlY3RpdmVDYW1lcmEsIFF1YXRlcm5pb24sIFZlY3RvcjN9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4vbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi9ob21lZGVjb3JhdG9yLWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uS2V5fSBmcm9tICcuLi9lbnVtL2NvbmZpZ3VyYXRpb24ta2V5LmVudW0nO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7QmxlbmRlclJlbmRlclNldHRpbmdzfSBmcm9tICcuLi8uLi9wbHVnaW5zL3JlbmRlci9tb2RlbC9ibGVuZGVyLXJlbmRlci1zZXR0aW5ncyc7XHJcblxyXG5leHBvcnQgY2xhc3MgT3V0cHV0U2V0dGluZ3Mge1xyXG4gIHB1YmxpYyB3aWR0aDogbnVtYmVyO1xyXG4gIHB1YmxpYyBoZWlnaHQ6IG51bWJlcjtcclxuICBwdWJsaWMgb3V0cHV0VHlwZTogT3V0cHV0VHlwZTtcclxuICBwdWJsaWMgdHJhbnNwYXJlbmN5OiBib29sZWFuO1xyXG4gIHB1YmxpYyBxdWFsaXR5OiBudW1iZXI7XHJcbiAgcHVibGljIHJlbmRlclR5cGU6IFJlbmRlclR5cGU7XHJcbiAgcHVibGljIGR1cmF0aW9uOiBudW1iZXI7XHJcbiAgcHVibGljIGJvdW5jZXM6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNjZW5lU2V0dGluZ3Mge1xyXG4gIHB1YmxpYyBhY3RpdmVDYW1lcmFJZDogbnVtYmVyO1xyXG4gIHB1YmxpYyBzY2VuZUFzc2V0SWQ6IHN0cmluZztcclxuICBwdWJsaWMgbGlnaHRHcm91cElkOiBudW1iZXI7XHJcbiAgcHVibGljIGhkcmlBc3NldElkOiBudW1iZXI7XHJcbiAgcHVibGljIGhkcmlSb3RhdGlvbjogVmVjdG9yMztcclxuICBwdWJsaWMgaGRyaUludGVuc2l0eTogbnVtYmVyO1xyXG4gIHB1YmxpYyBkZWZhdWx0OiBib29sZWFuO1xyXG4gIHB1YmxpYyBpZDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVuZGVyU2V0dGluZ3Mge1xyXG4gIHB1YmxpYyByZW5kZXJTZXR0aW5nc0Fzc2V0SWQ6IHN0cmluZztcclxuICBwdWJsaWMgd2lkdGg6IG51bWJlcjtcclxuICBwdWJsaWMgaGVpZ2h0OiBudW1iZXI7XHJcbiAgcHVibGljIG91dHB1dFR5cGU6IE91dHB1dFR5cGU7XHJcbiAgcHVibGljIHJlbmRlclR5cGU6IFJlbmRlclR5cGU7XHJcbiAgcHVibGljIHRyYW5zcGFyZW5jeTogYm9vbGVhbjtcclxuICBwdWJsaWMgcXVhbGl0eTogbnVtYmVyO1xyXG4gIHB1YmxpYyBleHBvc3VyZTogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FtZXJhIHtcclxuICBpZDogbnVtYmVyO1xyXG4gIGFzc2V0SWQ6IHN0cmluZzsgLy8gZm9yIHByZS1jcmVhdGVkIGNhbWVyYVxyXG4gIGZvdjogbnVtYmVyOyAvLyBvciBtYXliZSBsZW5zIGluIG1tP1xyXG4gIHRyYW5zZm9ybTogYW55O1xyXG4gIGRvZjogQ2FtZXJhRE9GO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FtZXJhRE9GIHtcclxuICBmb2NhbExlbmd0aDogbnVtYmVyO1xyXG4gIGZTdG9wOiBudW1iZXI7XHJcbiAgYmxhZGVzOiBudW1iZXI7XHJcbiAgcm90YXRpb246IG51bWJlcjtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBSR0JBIHtcclxuICBwdWJsaWMgcjogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgZzogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgYjogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgYTogbnVtYmVyID0gMDtcclxufVxyXG5cclxuZW51bSBPdXRwdXRUeXBlIHtcclxuICBKcGVnID0gMCxcclxuICBQbmcgPSAxLFxyXG4gIEdsYiA9IDIsXHJcbiAgVmlkZW8gPSAzXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJlbmRlclR5cGUge1xyXG4gIFJlYWx0aW1lID0gMCxcclxuICBSYXl0cmFjZSA9IDFcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEFwaVNlcnZpY2VNb2R1bGUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGlPbmVDb250cm9sbGVyU2VydmljZTogSG9tZWRlY29yYXRvckNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgdXBsb2FkVG9BcGlHTEIoXHJcbiAgICBmb3JtRGF0YTogRm9ybURhdGEsXHJcbiAgICBmaWxlbmFtZTogc3RyaW5nLFxyXG4gICAgY2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYSxcclxuICAgIHN0YW5kYWxvbmU6IGJvb2xlYW4sXHJcbiAgICByZW5kZXJQYXJhbWV0ZXJzOiBhbnksXHJcbiAgICByZW5kZXJQcmV2aWV3OiBib29sZWFuXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBhcGlVcmw6IHN0cmluZyA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy51cGxvYWRFbmRwb2ludDtcclxuICAgIGNvbnN0IG9wdGlvbnM6IE9iamVjdCA9IHt9O1xyXG4gICAgdGhpcy5fc2VuZFJlcXVlc3QoYXBpVXJsLCBmb3JtRGF0YSwgb3B0aW9ucykudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxvYWRpbmdJbmRpY2F0b3IpO1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2hvd0xvYWRpbmdJbmRpY2F0b3IsIHt0aXRsZTogJ1JlbmRlcmluZy4uLid9KTtcclxuICAgICAgdGhpcy5yZXF1ZXN0UmVuZGVyKGZpbGVuYW1lLCBjYW1lcmEsIHN0YW5kYWxvbmUsIHJlbmRlclBhcmFtZXRlcnMsIHJlbmRlclByZXZpZXcpO1xyXG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVuZGVyRXJyb3IsIHt0aXRsZTogJ1VwbG9hZCBlcnJvcicsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2V9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJlcXVlc3RSZW5kZXIoXHJcbiAgICBmaWxlbmFtZTogc3RyaW5nLFxyXG4gICAgY2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYSxcclxuICAgIHN0YW5kYWxvbmU6IGJvb2xlYW4sXHJcbiAgICByZW5kZXJQYXJhbWV0ZXJzOiBhbnksXHJcbiAgICByZW5kZXJQcmV2aWV3OiBib29sZWFuXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IGFwaVVybDogc3RyaW5nID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnJlbmRlckVuZHBvaW50O1xyXG4gICAgY29uc3Qgb3B0aW9uczogT2JqZWN0ID0gdGhpcy5fc2V0T3B0aW9ucygpO1xyXG4gICAgbGV0IHJlcXVlc3Q6IE9iamVjdDtcclxuICAgIGlmIChzdGFuZGFsb25lKSB7XHJcbiAgICAgIHJlcXVlc3QgPSB0aGlzLl9jcmVhdGVQcm9kdWN0UmVuZGVyUmVxdWVzdEJvZHkoZmlsZW5hbWUsIGNhbWVyYSwgcmVuZGVyUGFyYW1ldGVycyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXF1ZXN0ID0gdGhpcy5fY3JlYXRlUmVuZGVyUmVxdWVzdEJvZHkoZmlsZW5hbWUsIGNhbWVyYSwgcmVuZGVyUGFyYW1ldGVycyk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLl9zZW5kUmVxdWVzdChhcGlVcmwsIHJlcXVlc3QsIG9wdGlvbnMpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKCFzdGFuZGFsb25lKSB7XHJcbiAgICAgICAgaWYgKHJlbmRlclByZXZpZXcpIHtcclxuICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTCg8QmxvYj5yZXN1bHQpO1xyXG4gICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YVVSTDogc3RyaW5nID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlTG9hZGluZ0luZGljYXRvcik7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5CbGVuZGVyUmVuZGVyUHJldmlld1JlYWR5LCBkYXRhVVJMKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGFVUkw7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBkb3dubG9hZEZpbGVuYW1lOiBzdHJpbmcgPSBmaWxlbmFtZS5yZXBsYWNlKCcuZ2xiJywgJy5qcGcnKTtcclxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQ6IEhUTUxBbmNob3JFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgZWxlbWVudC5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXN1bHQpO1xyXG4gICAgICAgICAgZWxlbWVudC5kb3dubG9hZCA9IGRvd25sb2FkRmlsZW5hbWU7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xyXG4gICAgICAgICAgZWxlbWVudC5jbGljaygpO1xyXG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbGVtZW50KTtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlTG9hZGluZ0luZGljYXRvcik7XHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2cuY2xvc2VBbGwoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTCg8QmxvYj5yZXN1bHQpO1xyXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBkYXRhVVJMOiBzdHJpbmcgPSByZWFkZXIucmVzdWx0IGFzIHN0cmluZztcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlTG9hZGluZ0luZGljYXRvcik7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuQmxlbmRlclJlbmRlckZpbGVSZWFkeSwgZGF0YVVSTCk7XHJcbiAgICAgICAgICByZXR1cm4gZGF0YVVSTDtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZW5kZXJFcnJvciwge3RpdGxlOiAnUmVuZGVyIGVycm9yJywgbWVzc2FnZTogZXJyb3IubWVzc2FnZX0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q2FtZXJhUHJvcGVydGllcyhjYW1lcmE6IFBlcnNwZWN0aXZlQ2FtZXJhKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9jYW1lcmFQcm9kdWN0U2V0dGluZ3MoY2FtZXJhKTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UmVuZGVyRnJvbUpzb24ocmVxdWVzdERhdGE6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgYXBpVXJsOiBzdHJpbmcgPSAnaHR0cHM6Ly9jaXRyZW5kZXJzZXJ2aWNlLmlvbmVjbG91ZC5ubC9wcm9jZXNzQmxlbmRlclJlbmRlcic7XHJcbiAgICBhd2FpdCB0aGlzLl9zZW5kSnNvblJlcXVlc3QoYXBpVXJsLCByZXF1ZXN0RGF0YSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICBjb25zdCBpbWFnZTogc3RyaW5nID0gcmVzdWx0WydyZW5kZXInXTtcclxuICAgICAgY29uc3QgYnl0ZUNoYXJhY3RlcnM6IHN0cmluZyA9IGF0b2IoaW1hZ2UpO1xyXG4gICAgICBjb25zdCBieXRlQXJyYXk6IFVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlQ2hhcmFjdGVycy5sZW5ndGgpO1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBieXRlQXJyYXlbaV0gPSBieXRlQ2hhcmFjdGVycy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGltYWdlQmxvYjogQmxvYiA9ICBuZXcgQmxvYihbYnl0ZUFycmF5XSwgeyB0eXBlOiAnaW1hZ2UvanBlZycgfSk7XHJcbiAgICAgIGNvbnN0IHJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKDxCbG9iPmltYWdlQmxvYik7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YVVSTDogc3RyaW5nID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVMb2FkaW5nSW5kaWNhdG9yKTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuQmxlbmRlclJlbmRlckZpbGVSZWFkeSwgZGF0YVVSTCk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFVUkw7XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gICAgcHVibGljIGRlZ3JlZXNUb1ZlY3RvcjModmFsdWU6IG51bWJlcik6IFZlY3RvcjMge1xyXG4gICAgICAgIC8vIFZhbHVlIC0+IHJvdGF0aW9uIGluIGRlZ3JlZXMgZm9yIFotYXhpc1xyXG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAwLCArdmFsdWUpOyAvLyBmb3JtYXQgaXQgZm9yIGJsZW5kZXJcclxuICAgIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfc2VuZEpzb25SZXF1ZXN0KHVybDogc3RyaW5nLCBib2R5OiBhbnksIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPE9iamVjdD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzcG9uc2U6IEFycmF5QnVmZmVyID0gYXdhaXQgdGhpcy5faHR0cC5wb3N0KHVybCwgYm9keSwge1xyXG4gICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCc6ICdQT1NUJyxcclxuICAgICAgICAgIC4uLihvcHRpb25zPy5oZWFkZXJzIHx8IHt9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSkudG9Qcm9taXNlKCk7XHJcbiAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIF9zZW5kUmVxdWVzdDonLCBlcnJvcik7XHJcbiAgICAgIHRocm93IGVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3NlbmRSZXF1ZXN0KHVybDogc3RyaW5nLCBib2R5OiBhbnksIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPE9iamVjdD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2h0dHAucG9zdChgJHt1cmx9YCwgYm9keSwgb3B0aW9ucykudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRPcHRpb25zKCk6IE9iamVjdCB7XHJcbiAgICBjb25zdCBoZWFkZXJzOiBPYmplY3QgPSB7XHJcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCc6ICdQT1NUJ1xyXG4gICAgfTtcclxuICAgIHJldHVybiB7aGVhZGVycywgcmVzcG9uc2VUeXBlOiAnYmxvYicsIHJlcG9ydFByb2dyZXNzOiB0cnVlfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZVJlbmRlclJlcXVlc3RCb2R5KGZpbGVuYW1lOiBzdHJpbmcsIGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEsIHJlbmRlclBhcmFtZXRlcnM6IGFueSk6IE9iamVjdCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnJlbmRlckFwaUNsaWVudElkLFxyXG4gICAgICBjb2xpam5MZWdhY3k6IHRydWUsXHJcbiAgICAgIHJvb3RQYXRoOiAnJyxcclxuICAgICAgdXNlQXNzZXRQYXRoOiBmYWxzZSxcclxuICAgICAgc2NlbmVTZXR0aW5nczogW3RoaXMuX3NldFNjZW5lU2V0dGluZ3MocmVuZGVyUGFyYW1ldGVycyldLFxyXG4gICAgICByZW5kZXJTZXR0aW5nczogdGhpcy5fc2V0UmVuZGVyU2V0dGluZ3MocmVuZGVyUGFyYW1ldGVycyksXHJcbiAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICBtYXRlcmlhbHM6IFtdLFxyXG4gICAgICAgIGNhbWVyYXM6IFtcclxuICAgICAgICAgIHRoaXMuX2NhbWVyYVNldHRpbmdzKGNhbWVyYSlcclxuICAgICAgICBdLFxyXG4gICAgICAgIGxpZ2h0czogW10sXHJcbiAgICAgICAgZ3JvdXBzOiBbXSxcclxuICAgICAgICBwcmVmYWJzOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGlkOiA3LFxyXG4gICAgICAgICAgICBhc3NldElkOiBmaWxlbmFtZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZVByb2R1Y3RSZW5kZXJSZXF1ZXN0Qm9keShmaWxlbmFtZTogc3RyaW5nLCBjYW1lcmE6IFBlcnNwZWN0aXZlQ2FtZXJhLCByZW5kZXJQYXJhbWV0ZXJzOiBhbnkpOiBPYmplY3Qge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY2xpZW50SWQ6ICdjb2xpam4nLFxyXG4gICAgICBjb2xpam5MZWdhY3k6IHJlbmRlclBhcmFtZXRlcnMuYWxsb3dDdWxsaW5nLFxyXG4gICAgICByb290UGF0aDogJycsXHJcbiAgICAgIHVzZUFzc2V0UGF0aDogZmFsc2UsXHJcbiAgICAgIHNjZW5lU2V0dGluZ3M6IHRoaXMuX3NldFByb2R1Y3RTY2VuZVNldHRpbmdzKHJlbmRlclBhcmFtZXRlcnMpLFxyXG4gICAgICByZW5kZXJTZXR0aW5nczogdGhpcy5fc2V0UHJvZHVjdFJlbmRlclNldHRpbmdzKHJlbmRlclBhcmFtZXRlcnMpLFxyXG4gICAgICBjb250ZW50OiB7XHJcbiAgICAgICAgbWF0ZXJpYWxzOiBbXSxcclxuICAgICAgICBjYW1lcmFzOiBbXHJcbiAgICAgICAgICB0aGlzLl9jYW1lcmFQcm9kdWN0U2V0dGluZ3MoY2FtZXJhKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgbGlnaHRzOiBbXSxcclxuICAgICAgICBncm91cHM6IFtdLFxyXG4gICAgICAgIHByZWZhYnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaWQ6IDcsXHJcbiAgICAgICAgICAgIGFzc2V0SWQ6IGZpbGVuYW1lLFxyXG4gICAgICAgICAgICBwYXJlbnRTY2VuZXM6IFs2MDAsIDYwMV1cclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHByaXZhdGUgX3NldFJlbmRlclNldHRpbmdzKHJlbmRlclBhcmFtZXRlcnM6IEJsZW5kZXJSZW5kZXJTZXR0aW5ncyk6IFJlbmRlclNldHRpbmdzIHtcclxuICAgIGNvbnN0IHNldHRpbmdzOiBSZW5kZXJTZXR0aW5ncyA9IG5ldyBSZW5kZXJTZXR0aW5ncygpO1xyXG4gICAgc2V0dGluZ3Mud2lkdGggPSByZW5kZXJQYXJhbWV0ZXJzLndpZHRoO1xyXG4gICAgc2V0dGluZ3MuaGVpZ2h0ID0gcmVuZGVyUGFyYW1ldGVycy5oZWlnaHQ7XHJcbiAgICBzZXR0aW5ncy5vdXRwdXRUeXBlID0gT3V0cHV0VHlwZS5KcGVnO1xyXG4gICAgc2V0dGluZ3MucmVuZGVyVHlwZSA9IFJlbmRlclR5cGUuUmF5dHJhY2U7XHJcbiAgICBzZXR0aW5ncy50cmFuc3BhcmVuY3kgPSBmYWxzZTtcclxuICAgIHNldHRpbmdzLmV4cG9zdXJlID0gcmVuZGVyUGFyYW1ldGVycy5saWdodGluZ0V4cG9zdXJlO1xyXG4gICAgcmV0dXJuIHNldHRpbmdzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0UHJvZHVjdFJlbmRlclNldHRpbmdzKHJlbmRlclBhcmFtZXRlcnM6IGFueSk6IFJlbmRlclNldHRpbmdzIHtcclxuICAgIGNvbnN0IHNldHRpbmdzOiBSZW5kZXJTZXR0aW5ncyA9IG5ldyBSZW5kZXJTZXR0aW5ncygpO1xyXG4gICAgc2V0dGluZ3Mud2lkdGggPSByZW5kZXJQYXJhbWV0ZXJzLndpZHRoO1xyXG4gICAgc2V0dGluZ3MuaGVpZ2h0ID0gcmVuZGVyUGFyYW1ldGVycy5oZWlnaHQ7XHJcbiAgICBzZXR0aW5ncy5vdXRwdXRUeXBlID0gT3V0cHV0VHlwZS5KcGVnO1xyXG4gICAgc2V0dGluZ3MucmVuZGVyVHlwZSA9IFJlbmRlclR5cGUuUmF5dHJhY2U7XHJcbiAgICByZXR1cm4gc2V0dGluZ3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRTY2VuZVNldHRpbmdzKHJlbmRlclBhcmFtZXRlcnM6IEJsZW5kZXJSZW5kZXJTZXR0aW5ncyk6IFNjZW5lU2V0dGluZ3Mge1xyXG4gICAgY29uc3Qgc2V0dGluZ3M6IFNjZW5lU2V0dGluZ3MgPSBuZXcgU2NlbmVTZXR0aW5ncygpO1xyXG4gICAgc2V0dGluZ3Muc2NlbmVBc3NldElkID0gcmVuZGVyUGFyYW1ldGVycy5zY2VuZUFzc2V0LnByaW1hcnlTY2VuZU5hbWU7XHJcbiAgICBzZXR0aW5ncy5hY3RpdmVDYW1lcmFJZCA9IDE7XHJcbiAgICBzZXR0aW5ncy5kZWZhdWx0ID0gdHJ1ZTtcclxuICAgIHNldHRpbmdzLmhkcmlSb3RhdGlvbiA9IHRoaXMuZGVncmVlc1RvVmVjdG9yMyhyZW5kZXJQYXJhbWV0ZXJzLmhkcmlSb3RhdGlvbik7XHJcbiAgICBzZXR0aW5ncy5oZHJpSW50ZW5zaXR5ID0gcmVuZGVyUGFyYW1ldGVycy5oZHJpSW50ZW5zaXR5O1xyXG4gICAgcmV0dXJuIHNldHRpbmdzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0UHJvZHVjdFNjZW5lU2V0dGluZ3MocmVuZGVyUGFyYW1ldGVyczogYW55KTogU2NlbmVTZXR0aW5nc1tdIHtcclxuICAgIGNvbnN0IGNvbXBvc2l0ZVNjZW5lOiBTY2VuZVNldHRpbmdzID0gbmV3IFNjZW5lU2V0dGluZ3MoKTtcclxuICAgIGNvbXBvc2l0ZVNjZW5lLnNjZW5lQXNzZXRJZCA9ICdjb21wb3NpdGVfcHJvZHVjdF9yZW5kZXJpbmcnO1xyXG4gICAgY29tcG9zaXRlU2NlbmUuYWN0aXZlQ2FtZXJhSWQgPSAxO1xyXG4gICAgY29tcG9zaXRlU2NlbmUuZGVmYXVsdCA9IHRydWU7XHJcbiAgICBjb21wb3NpdGVTY2VuZS5pZCA9IDYwMDtcclxuXHJcbiAgICBjb25zdCBhZGRpdGlvbmFsU2NlbmU6IFNjZW5lU2V0dGluZ3MgPSBuZXcgU2NlbmVTZXR0aW5ncygpO1xyXG4gICAgYWRkaXRpb25hbFNjZW5lLnNjZW5lQXNzZXRJZCA9ICdTY2VuZV9Hcm91bmQnO1xyXG4gICAgYWRkaXRpb25hbFNjZW5lLmFjdGl2ZUNhbWVyYUlkID0gMTtcclxuICAgIGFkZGl0aW9uYWxTY2VuZS5kZWZhdWx0ID0gZmFsc2U7XHJcbiAgICBhZGRpdGlvbmFsU2NlbmUuaWQgPSA2MDE7XHJcblxyXG4gICAgcmV0dXJuIFtjb21wb3NpdGVTY2VuZSwgYWRkaXRpb25hbFNjZW5lXTtcclxuICB9XHJcblxyXG4gIC8vIHByaXZhdGUgX3NldFByb2R1Y3RPdXRwdXRTZXR0aW5ncyhyZW5kZXJQYXJhbWV0ZXJzOiBhbnkpOiBPdXRwdXRTZXR0aW5ncyB7XHJcbiAgLy8gICBjb25zdCBvdXRwdXRTZXR0aW5nczogT3V0cHV0U2V0dGluZ3MgPSBuZXcgT3V0cHV0U2V0dGluZ3MoKTtcclxuICAvLyAgIG91dHB1dFNldHRpbmdzLndpZHRoID0gcmVuZGVyUGFyYW1ldGVycy53aWR0aDtcclxuICAvLyAgIG91dHB1dFNldHRpbmdzLmhlaWdodCA9IHJlbmRlclBhcmFtZXRlcnMuaGVpZ2h0O1xyXG4gIC8vICAgb3V0cHV0U2V0dGluZ3Mub3V0cHV0VHlwZSA9IE91dHB1dFR5cGUuSnBlZztcclxuICAvLyAgIG91dHB1dFNldHRpbmdzLnJlbmRlclR5cGUgPSBSZW5kZXJUeXBlLlJlYWx0aW1lO1xyXG4gIC8vICAgcmV0dXJuIG91dHB1dFNldHRpbmdzO1xyXG4gIC8vIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2FsY3VsYXRlQ2FtZXJhUG9zaXRpb25Sb3RhdGlvbihjYW1lcmE6IFBlcnNwZWN0aXZlQ2FtZXJhKTogYW55IHtcclxuICAgIGNvbnN0IHBvczogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCkuY29weShjYW1lcmEucG9zaXRpb24pO1xyXG4gICAgY29uc3QgcXVhdGVybmlvbjogUXVhdGVybmlvbiA9IGNhbWVyYS5xdWF0ZXJuaW9uO1xyXG4gICAgY29uc3QgYmxlbmRlclF1YXQ6IFF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpLnNldEZyb21BeGlzQW5nbGUobmV3IFZlY3RvcjMoMSwgMCwgMCksIE1hdGhVdGlscy5kZWdUb1JhZCg5MCkpO1xyXG4gICAgY29uc3QgZXVsZXI6IEV1bGVyID0gbmV3IEV1bGVyKCkuc2V0RnJvbVF1YXRlcm5pb24oXHJcbiAgICAgIGJsZW5kZXJRdWF0Lm11bHRpcGx5KHF1YXRlcm5pb24pLFxyXG4gICAgICAnWllYJ1xyXG4gICAgKTtcclxuICAgIHBvcy5hcHBseUF4aXNBbmdsZShuZXcgVmVjdG9yMygxLCAwLCAwKSwgTWF0aFV0aWxzLmRlZ1RvUmFkKDkwKSk7XHJcbiAgICBjb25zdCByb3Q6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMyhcclxuICAgICAgTWF0aFV0aWxzLnJhZFRvRGVnKGV1bGVyLngpLFxyXG4gICAgICBNYXRoVXRpbHMucmFkVG9EZWcoZXVsZXIueSksXHJcbiAgICAgIE1hdGhVdGlscy5yYWRUb0RlZyhldWxlci56KVxyXG4gICAgKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdwb3NpdGlvbic6IHBvcyxcclxuICAgICAgJ3JvdGF0aW9uJzogcm90XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0Q2FtZXJhUm90YXRpb24oY2FtZXJhSW5mbzogYW55KTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgc2V0OiB7XHJcbiAgICAgICAgICB4OiB0aGlzLl9zaG9ydGVuVmFsdWUoY2FtZXJhSW5mby5wb3NpdGlvbi54KSxcclxuICAgICAgICAgIHk6IHRoaXMuX3Nob3J0ZW5WYWx1ZShjYW1lcmFJbmZvLnBvc2l0aW9uLnkpLFxyXG4gICAgICAgICAgejogdGhpcy5fc2hvcnRlblZhbHVlKGNhbWVyYUluZm8ucG9zaXRpb24ueilcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHJvdGF0aW9uOiB7XHJcbiAgICAgICAgc2V0OiB7XHJcbiAgICAgICAgICB4OiB0aGlzLl9zaG9ydGVuVmFsdWUoY2FtZXJhSW5mby5yb3RhdGlvbi54KSxcclxuICAgICAgICAgIHk6IHRoaXMuX3Nob3J0ZW5WYWx1ZShjYW1lcmFJbmZvLnJvdGF0aW9uLnkpLFxyXG4gICAgICAgICAgejogdGhpcy5fc2hvcnRlblZhbHVlKGNhbWVyYUluZm8ucm90YXRpb24ueilcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jYW1lcmFTZXR0aW5ncyhjYW1lcmE6IFBlcnNwZWN0aXZlQ2FtZXJhKTogQ2FtZXJhIHtcclxuICAgIGxldCBmb3Y6IG51bWJlciA9IDQ1O1xyXG4gICAgaWYgKHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuQ2FtZXJhRk9WKSkge1xyXG4gICAgICBmb3YgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LkNhbWVyYUZPVik7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjYW1lcmFJbmZvID0gdGhpcy5fY2FsY3VsYXRlQ2FtZXJhUG9zaXRpb25Sb3RhdGlvbihjYW1lcmEpO1xyXG4gICAgY29uc3QgcmVuZGVyQ2FtZXJhOiBDYW1lcmEgPSBuZXcgQ2FtZXJhKCk7XHJcbiAgICByZW5kZXJDYW1lcmEuaWQgPSAxO1xyXG4gICAgcmVuZGVyQ2FtZXJhLmFzc2V0SWQgPSAnY2FtZXJhX2NvbGlqbic7XHJcbiAgICByZW5kZXJDYW1lcmEudHJhbnNmb3JtID0gdGhpcy5fc2V0Q2FtZXJhUm90YXRpb24oY2FtZXJhSW5mbyk7XHJcbiAgICAvLyByZW5kZXJDYW1lcmEuZm92ID0gZm92O1xyXG4gICAgcmVuZGVyQ2FtZXJhLmZvdiA9IDYyO1xyXG4gICAgcmV0dXJuIHJlbmRlckNhbWVyYTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NhbWVyYVByb2R1Y3RTZXR0aW5ncyhjYW1lcmE6IFBlcnNwZWN0aXZlQ2FtZXJhKTogYW55IHtcclxuICAgIGNvbnN0IGNhbWVyYUluZm8gPSB0aGlzLl9jYWxjdWxhdGVDYW1lcmFQb3NpdGlvblJvdGF0aW9uKGNhbWVyYSk7XHJcbiAgICBjb25zdCByZW5kZXJDYW1lcmE6IENhbWVyYSA9IG5ldyBDYW1lcmEoKTtcclxuICAgIHJlbmRlckNhbWVyYS5pZCA9IDE7XHJcbiAgICByZW5kZXJDYW1lcmEuYXNzZXRJZCA9ICdjYW1lcmFfY29saWpuJztcclxuICAgIHJlbmRlckNhbWVyYS50cmFuc2Zvcm0gPSB0aGlzLl9zZXRDYW1lcmFSb3RhdGlvbihjYW1lcmFJbmZvKTtcclxuICAgIHJlbmRlckNhbWVyYS5mb3YgPSA5MDtcclxuICAgIHJldHVybiByZW5kZXJDYW1lcmE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRTY2VuZUJhc2VkTGlnaHRzKHNjZW5lQXNzZXRJZDogc3RyaW5nKTogYW55IHtcclxuICAgIGlmIChzY2VuZUFzc2V0SWQuaW5jbHVkZXMoJ2VldmVlJykpIHtcclxuICAgICAgcmV0dXJuIFt7XHJcbiAgICAgICAgJ2lkJzogNyxcclxuICAgICAgICAnYXNzZXRJZCc6ICdsaWdodHNfZWV2ZWUnXHJcbiAgICAgIH1dO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvcnRlblZhbHVlKHZhbHVlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGZhY3RvcjogbnVtYmVyID0gTWF0aC5wb3coMTAsIDUpO1xyXG4gICAgcmV0dXJuIE1hdGguZmxvb3IodmFsdWUgKiBmYWN0b3IpIC8gZmFjdG9yO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiJdfQ==
@@ -6,7 +6,7 @@ export class HomedecoratorAppEventService {
6
6
  this.instanceSet = new BehaviorSubject(undefined);
7
7
  this.enableIntegration = new BehaviorSubject(false);
8
8
  this.articleInfoReceived = new Subject();
9
- this.answerCountReceived = new BehaviorSubject(0);
9
+ this.answerCountReceived = new BehaviorSubject(undefined);
10
10
  this.readyToRender = new BehaviorSubject(false);
11
11
  this.selectSelectionsCalled = new Subject();
12
12
  this.selectAnswerCalled = new Subject();
@@ -15,6 +15,7 @@ export class HomedecoratorAppEventService {
15
15
  this.objectMovingOrRotating = new Subject();
16
16
  this.addToCart = new Subject();
17
17
  this.addExternalSourceToCart = new Subject();
18
+ this.glbCreated = new Subject();
18
19
  this.dirty = new Subject();
19
20
  }
20
21
  }
@@ -26,4 +27,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
26
27
  providedIn: 'root'
27
28
  }]
28
29
  }] });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWRlY29yYXRvci1hcHAtZXZlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWFwcC1ldmVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7O0FBUzlDLE1BQU0sT0FBTyw0QkFBNEI7SUFIekM7UUFLUyxnQkFBVyxHQUE0QixJQUFJLGVBQWUsQ0FBUyxTQUFTLENBQUMsQ0FBQztRQUM5RSxzQkFBaUIsR0FBNkIsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEYsd0JBQW1CLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFDN0Qsd0JBQW1CLEdBQTRCLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzlFLGtCQUFhLEdBQTZCLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLDJCQUFzQixHQUF1QixJQUFJLE9BQU8sRUFBYSxDQUFDO1FBQ3RFLHVCQUFrQixHQUFvQixJQUFJLE9BQU8sRUFBVSxDQUFDO1FBRXJFLGdCQUFXLEdBQWlCLElBQUksT0FBTyxFQUFPLENBQUM7UUFDL0MsZ0JBQVcsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVqRCwyQkFBc0IsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUU1RCxjQUFTLEdBQXFFLElBQUksT0FBTyxFQUEyRCxDQUFDO1FBQ3JKLDRCQUF1QixHQUErQyxJQUFJLE9BQU8sRUFBcUMsQ0FBQztRQUV2SCxVQUFLLEdBQXFCLElBQUksT0FBTyxFQUFXLENBQUM7S0FDekQ7OzBIQW5CWSw0QkFBNEI7OEhBQTVCLDRCQUE0QixjQUYzQixNQUFNOzRGQUVQLDRCQUE0QjtrQkFIeEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL3NlbGVjdGlvbic7XHJcbmltcG9ydCB7QW5zd2VyfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Fuc3dlcic7XHJcbmltcG9ydCB7QXJ0aWNsZUV4dGVuZGVkfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWV4dGVuZGVkLmJvJztcclxuaW1wb3J0IHtFeHRlcm5hbFNvdXJjZUFydGljbGVBZGRJbnRlcmZhY2V9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2ludGVyZmFjZS9leHRlcm5hbC1zb3VyY2UtYXJ0aWNsZS1hZGQuaW50ZXJmYWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEhvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2Uge1xyXG5cclxuICBwdWJsaWMgaW5zdGFuY2VTZXQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XHJcbiAgcHVibGljIGVuYWJsZUludGVncmF0aW9uOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBwdWJsaWMgYXJ0aWNsZUluZm9SZWNlaXZlZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHB1YmxpYyBhbnN3ZXJDb3VudFJlY2VpdmVkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICBwdWJsaWMgcmVhZHlUb1JlbmRlcjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdFNlbGVjdGlvbnNDYWxsZWQ6IFN1YmplY3Q8U2VsZWN0aW9uPiA9IG5ldyBTdWJqZWN0PFNlbGVjdGlvbj4oKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0QW5zd2VyQ2FsbGVkOiBTdWJqZWN0PEFuc3dlcj4gPSBuZXcgU3ViamVjdDxBbnN3ZXI+KCk7XHJcblxyXG4gIHB1YmxpYyBzaG93T3V0bGluZTogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gIHB1YmxpYyBoaWRlT3V0bGluZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHB1YmxpYyBvYmplY3RNb3ZpbmdPclJvdGF0aW5nOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcHVibGljIGFkZFRvQ2FydDogU3ViamVjdDx7IGFydGljbGU6IHN0cmluZyB8IEFydGljbGVFeHRlbmRlZCwgcXVhbnRpdHk6IG51bWJlciB9PiA9IG5ldyBTdWJqZWN0PHsgYXJ0aWNsZTogc3RyaW5nIHwgQXJ0aWNsZUV4dGVuZGVkLCBxdWFudGl0eTogbnVtYmVyIH0+KCk7XHJcbiAgcHVibGljIGFkZEV4dGVybmFsU291cmNlVG9DYXJ0OiBTdWJqZWN0PEV4dGVybmFsU291cmNlQXJ0aWNsZUFkZEludGVyZmFjZT4gPSBuZXcgU3ViamVjdDxFeHRlcm5hbFNvdXJjZUFydGljbGVBZGRJbnRlcmZhY2U+KCk7XHJcblxyXG4gIHB1YmxpYyBkaXJ0eTogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbn1cclxuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWRlY29yYXRvci1hcHAtZXZlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWFwcC1ldmVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7O0FBUzlDLE1BQU0sT0FBTyw0QkFBNEI7SUFIekM7UUFLUyxnQkFBVyxHQUE0QixJQUFJLGVBQWUsQ0FBUyxTQUFTLENBQUMsQ0FBQztRQUM5RSxzQkFBaUIsR0FBNkIsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEYsd0JBQW1CLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFDN0Qsd0JBQW1CLEdBQTRCLElBQUksZUFBZSxDQUFTLFNBQVMsQ0FBQyxDQUFDO1FBQ3RGLGtCQUFhLEdBQTZCLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLDJCQUFzQixHQUF1QixJQUFJLE9BQU8sRUFBYSxDQUFDO1FBQ3RFLHVCQUFrQixHQUFvQixJQUFJLE9BQU8sRUFBVSxDQUFDO1FBRXJFLGdCQUFXLEdBQWlCLElBQUksT0FBTyxFQUFPLENBQUM7UUFDL0MsZ0JBQVcsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVqRCwyQkFBc0IsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUU1RCxjQUFTLEdBQXFFLElBQUksT0FBTyxFQUEyRCxDQUFDO1FBQ3JKLDRCQUF1QixHQUErQyxJQUFJLE9BQU8sRUFBcUMsQ0FBQztRQUN2SCxlQUFVLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFFcEQsVUFBSyxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO0tBQ3pEOzswSEFwQlksNEJBQTRCOzhIQUE1Qiw0QkFBNEIsY0FGM0IsTUFBTTs0RkFFUCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9zZWxlY3Rpb24nO1xyXG5pbXBvcnQge0Fuc3dlcn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hbnN3ZXInO1xyXG5pbXBvcnQge0FydGljbGVFeHRlbmRlZH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1leHRlbmRlZC5ibyc7XHJcbmltcG9ydCB7RXh0ZXJuYWxTb3VyY2VBcnRpY2xlQWRkSW50ZXJmYWNlfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9pbnRlcmZhY2UvZXh0ZXJuYWwtc291cmNlLWFydGljbGUtYWRkLmludGVyZmFjZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIb21lZGVjb3JhdG9yQXBwRXZlbnRTZXJ2aWNlIHtcclxuXHJcbiAgcHVibGljIGluc3RhbmNlU2V0OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIHB1YmxpYyBlbmFibGVJbnRlZ3JhdGlvbjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIGFydGljbGVJbmZvUmVjZWl2ZWQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwdWJsaWMgYW5zd2VyQ291bnRSZWNlaXZlZDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4odW5kZWZpbmVkKTtcclxuICBwdWJsaWMgcmVhZHlUb1JlbmRlcjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdFNlbGVjdGlvbnNDYWxsZWQ6IFN1YmplY3Q8U2VsZWN0aW9uPiA9IG5ldyBTdWJqZWN0PFNlbGVjdGlvbj4oKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0QW5zd2VyQ2FsbGVkOiBTdWJqZWN0PEFuc3dlcj4gPSBuZXcgU3ViamVjdDxBbnN3ZXI+KCk7XHJcblxyXG4gIHB1YmxpYyBzaG93T3V0bGluZTogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gIHB1YmxpYyBoaWRlT3V0bGluZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHB1YmxpYyBvYmplY3RNb3ZpbmdPclJvdGF0aW5nOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcHVibGljIGFkZFRvQ2FydDogU3ViamVjdDx7IGFydGljbGU6IHN0cmluZyB8IEFydGljbGVFeHRlbmRlZCwgcXVhbnRpdHk6IG51bWJlciB9PiA9IG5ldyBTdWJqZWN0PHsgYXJ0aWNsZTogc3RyaW5nIHwgQXJ0aWNsZUV4dGVuZGVkLCBxdWFudGl0eTogbnVtYmVyIH0+KCk7XHJcbiAgcHVibGljIGFkZEV4dGVybmFsU291cmNlVG9DYXJ0OiBTdWJqZWN0PEV4dGVybmFsU291cmNlQXJ0aWNsZUFkZEludGVyZmFjZT4gPSBuZXcgU3ViamVjdDxFeHRlcm5hbFNvdXJjZUFydGljbGVBZGRJbnRlcmZhY2U+KCk7XHJcbiAgcHVibGljIGdsYkNyZWF0ZWQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuXHJcbiAgcHVibGljIGRpcnR5OiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxufVxyXG4iXX0=