speechrecorderng 3.0.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/esm2020/lib/action/action.mjs +2 -1
  2. package/esm2020/lib/audio/array_audio_buffer.mjs +65 -2
  3. package/esm2020/lib/audio/array_audio_buffer_input_stream.mjs +2 -2
  4. package/esm2020/lib/audio/array_audio_buffer_random_access_stream.mjs +16 -0
  5. package/esm2020/lib/audio/audio_data_holder.mjs +203 -48
  6. package/esm2020/lib/audio/audio_display.mjs +10 -34
  7. package/esm2020/lib/audio/audio_player.mjs +18 -45
  8. package/esm2020/lib/audio/capture/capture.mjs +293 -69
  9. package/esm2020/lib/audio/dsp/level_measure.mjs +211 -88
  10. package/esm2020/lib/audio/impl/wavformat.mjs +1 -1
  11. package/esm2020/lib/audio/impl/wavreader.mjs +134 -0
  12. package/esm2020/lib/audio/impl/wavwriter.mjs +10 -9
  13. package/esm2020/lib/audio/inddb_audio_buffer.mjs +508 -0
  14. package/esm2020/lib/audio/net_audio_buffer.mjs +297 -0
  15. package/esm2020/lib/audio/persistor.mjs +8 -2
  16. package/esm2020/lib/audio/playback/array_audio_buffer_source_node.mjs +15 -154
  17. package/esm2020/lib/audio/playback/audio_source_node.mjs +18 -0
  18. package/esm2020/lib/audio/playback/audio_source_worklet_module_loader.mjs +167 -0
  19. package/esm2020/lib/audio/playback/inddb_audio_buffer_source_node.mjs +167 -0
  20. package/esm2020/lib/audio/playback/net_audio_buffer_source_node.mjs +218 -0
  21. package/esm2020/lib/audio/playback/player.mjs +190 -171
  22. package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +35 -76
  23. package/esm2020/lib/audio/ui/audio_display_control.mjs +12 -24
  24. package/esm2020/lib/audio/ui/audio_display_scroll_pane.mjs +14 -45
  25. package/esm2020/lib/audio/ui/audiosignal.mjs +333 -267
  26. package/esm2020/lib/audio/ui/container.mjs +40 -57
  27. package/esm2020/lib/audio/ui/livelevel.mjs +53 -52
  28. package/esm2020/lib/audio/ui/scroll_pane_horizontal.mjs +5 -19
  29. package/esm2020/lib/audio/ui/sonagram.mjs +386 -339
  30. package/esm2020/lib/db/inddb.mjs +120 -0
  31. package/esm2020/lib/io/BinaryReader.mjs +85 -0
  32. package/esm2020/lib/io/stream.mjs +101 -1
  33. package/esm2020/lib/net/uploader.mjs +111 -5
  34. package/esm2020/lib/recorder_component.mjs +59 -1
  35. package/esm2020/lib/speechrecorder/project/project.mjs +10 -1
  36. package/esm2020/lib/speechrecorder/project/project.service.mjs +3 -3
  37. package/esm2020/lib/speechrecorder/recording.mjs +30 -6
  38. package/esm2020/lib/speechrecorder/recordings/basic_recording.service.mjs +213 -0
  39. package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +732 -65
  40. package/esm2020/lib/speechrecorder/script/script.service.mjs +3 -3
  41. package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +358 -184
  42. package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +181 -28
  43. package/esm2020/lib/speechrecorder/session/controlpanel.mjs +47 -129
  44. package/esm2020/lib/speechrecorder/session/item.mjs +13 -1
  45. package/esm2020/lib/speechrecorder/session/progress.mjs +26 -55
  46. package/esm2020/lib/speechrecorder/session/prompting.mjs +33 -176
  47. package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +6 -6
  48. package/esm2020/lib/speechrecorder/session/recording_file_cache.mjs +28 -15
  49. package/esm2020/lib/speechrecorder/session/recording_list.mjs +92 -55
  50. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +9 -13
  51. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +9 -18
  52. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +10 -36
  53. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +10 -37
  54. package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +80 -56
  55. package/esm2020/lib/speechrecorder/session/session.service.mjs +3 -3
  56. package/esm2020/lib/speechrecorder/session/session_finished_dialog.mjs +4 -4
  57. package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +409 -165
  58. package/esm2020/lib/speechrecorder/session/warning_bar.mjs +6 -29
  59. package/esm2020/lib/speechrecorder/spruploader.mjs +3 -3
  60. package/esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +6 -41
  61. package/esm2020/lib/speechrecorderng.component.mjs +42 -31
  62. package/esm2020/lib/speechrecorderng.module.mjs +5 -5
  63. package/esm2020/lib/spr.config.mjs +3 -3
  64. package/esm2020/lib/spr.module.version.mjs +2 -2
  65. package/esm2020/lib/ui/canvas_layer_comp.mjs +3 -3
  66. package/esm2020/lib/ui/message_dialog.mjs +7 -7
  67. package/esm2020/lib/ui/recordingitem_display.mjs +26 -59
  68. package/esm2020/lib/utils/scrollIntoViewToBottom.mjs +3 -3
  69. package/esm2020/lib/utils/ua-parser.mjs +28 -4
  70. package/esm2020/lib/utils/utils.mjs +29 -1
  71. package/fesm2015/speechrecorderng.mjs +12755 -9195
  72. package/fesm2015/speechrecorderng.mjs.map +1 -1
  73. package/fesm2020/speechrecorderng.mjs +12652 -9101
  74. package/fesm2020/speechrecorderng.mjs.map +1 -1
  75. package/{speechrecorderng.d.ts → index.d.ts} +0 -0
  76. package/lib/audio/array_audio_buffer.d.ts +17 -1
  77. package/lib/audio/array_audio_buffer_random_access_stream.d.ts +9 -0
  78. package/lib/audio/audio_data_holder.d.ts +69 -14
  79. package/lib/audio/audio_display.d.ts +1 -1
  80. package/lib/audio/audio_player.d.ts +3 -7
  81. package/lib/audio/capture/capture.d.ts +24 -4
  82. package/lib/audio/dsp/level_measure.d.ts +2 -23
  83. package/lib/audio/impl/wavformat.d.ts +3 -3
  84. package/lib/audio/impl/wavreader.d.ts +16 -0
  85. package/lib/audio/impl/wavwriter.d.ts +1 -4
  86. package/lib/audio/inddb_audio_buffer.d.ts +68 -0
  87. package/lib/audio/net_audio_buffer.d.ts +59 -0
  88. package/lib/audio/persistor.d.ts +3 -9
  89. package/lib/audio/playback/array_audio_buffer_source_node.d.ts +2 -8
  90. package/lib/audio/playback/audio_source_node.d.ts +10 -0
  91. package/lib/audio/playback/audio_source_worklet_module_loader.d.ts +4 -0
  92. package/lib/audio/playback/inddb_audio_buffer_source_node.d.ts +21 -0
  93. package/lib/audio/playback/net_audio_buffer_source_node.d.ts +27 -0
  94. package/lib/audio/playback/player.d.ts +19 -16
  95. package/lib/audio/ui/audio_canvas_layer_comp.d.ts +3 -3
  96. package/lib/audio/ui/audio_display_control.d.ts +3 -6
  97. package/lib/audio/ui/audio_display_scroll_pane.d.ts +1 -1
  98. package/lib/audio/ui/audiosignal.d.ts +4 -3
  99. package/lib/audio/ui/container.d.ts +1 -1
  100. package/lib/audio/ui/livelevel.d.ts +11 -4
  101. package/lib/audio/ui/scroll_pane_horizontal.d.ts +1 -1
  102. package/lib/audio/ui/sonagram.d.ts +4 -3
  103. package/lib/db/inddb.d.ts +21 -0
  104. package/lib/io/BinaryReader.d.ts +18 -0
  105. package/lib/io/stream.d.ts +18 -0
  106. package/lib/net/uploader.d.ts +20 -2
  107. package/lib/recorder_component.d.ts +5 -0
  108. package/lib/speechrecorder/project/project.d.ts +9 -0
  109. package/lib/speechrecorder/recording.d.ts +8 -2
  110. package/lib/speechrecorder/recordings/basic_recording.service.d.ts +27 -0
  111. package/lib/speechrecorder/recordings/recordings.service.d.ts +21 -6
  112. package/lib/speechrecorder/session/audiorecorder.d.ts +7 -18
  113. package/lib/speechrecorder/session/basicrecorder.d.ts +28 -4
  114. package/lib/speechrecorder/session/controlpanel.d.ts +7 -7
  115. package/lib/speechrecorder/session/item.d.ts +1 -0
  116. package/lib/speechrecorder/session/progress.d.ts +2 -1
  117. package/lib/speechrecorder/session/prompting.d.ts +5 -5
  118. package/lib/speechrecorder/session/recorder_combi_pane.d.ts +1 -1
  119. package/lib/speechrecorder/session/recording_file_cache.d.ts +7 -4
  120. package/lib/speechrecorder/session/recording_list.d.ts +2 -1
  121. package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +1 -1
  122. package/lib/speechrecorder/session/recordingfile/recording-file-navi.component.d.ts +1 -1
  123. package/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.d.ts +1 -1
  124. package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +1 -1
  125. package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +4 -5
  126. package/lib/speechrecorder/session/session_finished_dialog.d.ts +1 -1
  127. package/lib/speechrecorder/session/sessionmanager.d.ts +10 -10
  128. package/lib/speechrecorder/session/warning_bar.d.ts +1 -1
  129. package/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.d.ts +1 -1
  130. package/lib/speechrecorderng.component.d.ts +2 -1
  131. package/lib/spr.module.version.d.ts +1 -1
  132. package/lib/ui/canvas_layer_comp.d.ts +1 -1
  133. package/lib/ui/message_dialog.d.ts +1 -1
  134. package/lib/ui/recordingitem_display.d.ts +3 -2
  135. package/lib/utils/scrollIntoViewToBottom.d.ts +1 -1
  136. package/lib/utils/ua-parser.d.ts +4 -1
  137. package/lib/utils/utils.d.ts +6 -0
  138. package/package.json +5 -4
  139. package/esm2020/lib/math/utils.mjs +0 -14
  140. package/esm2020/lib/utils/css_utils.mjs +0 -7
  141. package/lib/math/utils.d.ts +0 -3
  142. package/lib/utils/css_utils.d.ts +0 -3
@@ -21,23 +21,10 @@ export class ViewSelection {
21
21
  export class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {
22
22
  constructor() {
23
23
  super(...arguments);
24
- //protected _audioData: AudioBuffer|null=null;
25
- //protected _arrayAudioData: ArrayAudioBuffer|null=null;
26
24
  this._audioDataHolder = null;
27
25
  this._bgColor = 'white';
28
26
  this._selectColor = 'rgba(0%,0%,100%,25%)';
29
27
  }
30
- frameLength() {
31
- let frameLength = null;
32
- // if (this._audioData && this._audioData.numberOfChannels > 0) {
33
- // let ch0 = this._audioData.getChannelData(0);
34
- // frameLength = ch0.length;
35
- //
36
- // }else if(this._arrayAudioData){
37
- // frameLength=this._arrayAudioData.frameLen;
38
- // }
39
- return frameLength;
40
- }
41
28
  /**
42
29
  * Returns pixel position depending on current zoom setting.
43
30
  * @param framePos audio frame (sample) position
@@ -66,18 +53,17 @@ export class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {
66
53
  frameToViewPortXPixelPosition(framePos) {
67
54
  let pixelPos = this.frameToXPixelPosition(framePos);
68
55
  if (pixelPos != null) {
69
- let vPixelPos = this.toXViewPortPixelPosition(pixelPos);
70
- return vPixelPos;
56
+ return this.toXViewPortPixelPosition(pixelPos);
71
57
  }
72
58
  else {
73
59
  return null;
74
60
  }
75
61
  }
76
62
  viewPortXPixelToFramePosition(xViewPortPixelPos) {
77
- let vpXramePos = null;
78
- let frameLength = this._audioDataHolder?.frameLen;
63
+ let vpXframePos = null;
64
+ const frameLength = this._audioDataHolder?.frameLen;
79
65
  if (frameLength !== undefined) {
80
- let vw;
66
+ let vw = undefined;
81
67
  if (this.bounds) {
82
68
  vw = this.bounds.dimension.width;
83
69
  }
@@ -85,8 +71,8 @@ export class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {
85
71
  vw = this.virtualDimension.width;
86
72
  }
87
73
  if (vw !== undefined) {
88
- let xVirtualPixelPos = this.toXVirtualPixelPosition(xViewPortPixelPos);
89
- let framesPerPixel = frameLength / vw;
74
+ const xVirtualPixelPos = this.toXVirtualPixelPosition(xViewPortPixelPos);
75
+ const framesPerPixel = frameLength / vw;
90
76
  let framePos = framesPerPixel * xVirtualPixelPos;
91
77
  if (framePos < 0) {
92
78
  framePos = 0;
@@ -94,17 +80,16 @@ export class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {
94
80
  if (framePos >= frameLength) {
95
81
  framePos = frameLength - 1;
96
82
  }
97
- vpXramePos = Math.round(framePos);
83
+ vpXframePos = Math.round(framePos);
98
84
  }
99
85
  }
100
- return vpXramePos;
86
+ return vpXframePos;
101
87
  }
102
88
  layoutBounds(bounds, virtualDimension, redraw) {
103
89
  this.bounds = bounds;
104
90
  this.virtualDimension = virtualDimension;
105
- //this.canvasLayers.forEach(cl=>{
106
91
  for (let ci = 0; ci < this.canvasLayers.length; ci++) {
107
- let cl = this.canvasLayers[ci];
92
+ const cl = this.canvasLayers[ci];
108
93
  const leftStyle = bounds.position.left + 'px';
109
94
  if (cl.style.left != leftStyle) {
110
95
  cl.style.left = leftStyle;
@@ -115,7 +100,7 @@ export class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {
115
100
  }
116
101
  }
117
102
  if (bounds.dimension.width) {
118
- let intW = Math.floor(bounds.dimension.width);
103
+ const intW = Math.floor(bounds.dimension.width);
119
104
  if (redraw) {
120
105
  // Do not set width of background canvas (causes flicker on start render)
121
106
  for (let ci = 1; ci < this.canvasLayers.length; ci++) {
@@ -125,7 +110,7 @@ export class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {
125
110
  }
126
111
  }
127
112
  }
128
- let wStr = intW.toString() + 'px';
113
+ const wStr = intW.toString() + 'px';
129
114
  for (let ci = 0; ci < this.canvasLayers.length; ci++) {
130
115
  let cl = this.canvasLayers[ci];
131
116
  if (cl.style.width != wStr) {
@@ -134,7 +119,7 @@ export class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {
134
119
  }
135
120
  }
136
121
  if (bounds.dimension.height) {
137
- let intH = Math.floor(bounds.dimension.height);
122
+ const intH = Math.floor(bounds.dimension.height);
138
123
  if (redraw) {
139
124
  // Do not set height of background canvas (causes flicker on start render)
140
125
  for (let ci = 1; ci < this.canvasLayers.length; ci++) {
@@ -144,7 +129,7 @@ export class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {
144
129
  }
145
130
  }
146
131
  }
147
- let hStr = intH + 'px';
132
+ const hStr = intH + 'px';
148
133
  for (let ci = 0; ci < this.canvasLayers.length; ci++) {
149
134
  let cl = this.canvasLayers[ci];
150
135
  if (cl.style.height != hStr) {
@@ -152,12 +137,11 @@ export class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {
152
137
  }
153
138
  }
154
139
  }
155
- //});
156
140
  }
157
141
  }
158
- BasicAudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BasicAudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
159
- BasicAudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: BasicAudioCanvasLayerComponent, usesInheritance: true, ngImport: i0 });
160
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BasicAudioCanvasLayerComponent, decorators: [{
142
+ BasicAudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BasicAudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
143
+ BasicAudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: BasicAudioCanvasLayerComponent, usesInheritance: true, ngImport: i0 });
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BasicAudioCanvasLayerComponent, decorators: [{
161
145
  type: Directive
162
146
  }] });
163
147
  export class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
@@ -214,13 +198,6 @@ export class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
214
198
  }
215
199
  updateCursorCanvas(me, showCursorPosition = true) {
216
200
  if (this.cursorCanvas) {
217
- let w = this.cursorCanvas.width;
218
- let h = this.cursorCanvas.height;
219
- let g = this.cursorCanvas.getContext("2d");
220
- // if (!showCursorPosition) {
221
- // this.selectStartX = null
222
- // this.selectingChange(null)
223
- // }
224
201
  if (me) {
225
202
  if (this.selectStartX) {
226
203
  this.pointerPositionChanged(null);
@@ -248,7 +225,7 @@ export class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
248
225
  }
249
226
  this.pointerPositionEventEmitter.emit(pointerPosition);
250
227
  }
251
- selectingChange(viewSel) {
228
+ _selectingChange(viewSel) {
252
229
  let ns = undefined;
253
230
  if (viewSel) {
254
231
  let frameStart = this.viewPortXPixelToFramePosition(viewSel.startX);
@@ -257,17 +234,14 @@ export class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
257
234
  ns = new Selection(this._audioDataHolder.sampleRate, frameStart, frameEnd);
258
235
  }
259
236
  }
237
+ return ns;
238
+ }
239
+ selectingChange(viewSel) {
240
+ const ns = this._selectingChange(viewSel);
260
241
  this.selectingEventEmitter.emit(ns);
261
242
  }
262
243
  select(viewSel) {
263
- let ns = undefined;
264
- if (viewSel) {
265
- let frameStart = this.viewPortXPixelToFramePosition(viewSel.startX);
266
- let frameEnd = this.viewPortXPixelToFramePosition(viewSel.endX);
267
- if (this._audioDataHolder && frameStart != null && frameEnd != null) {
268
- ns = new Selection(this._audioDataHolder.sampleRate, frameStart, frameEnd);
269
- }
270
- }
244
+ const ns = this._selectingChange(viewSel);
271
245
  this.selectedEventEmitter.emit(ns);
272
246
  }
273
247
  viewSelection() {
@@ -280,10 +254,10 @@ export class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
280
254
  s = this._selection;
281
255
  }
282
256
  if (s) {
283
- let sf = s.startFrame;
284
- let ef = s.endFrame;
285
- let xs = this.frameToViewPortXPixelPosition(sf);
286
- let xe = this.frameToViewPortXPixelPosition(ef);
257
+ const sf = s.startFrame;
258
+ const ef = s.endFrame;
259
+ const xs = this.frameToViewPortXPixelPosition(sf);
260
+ const xe = this.frameToViewPortXPixelPosition(ef);
287
261
  if (xs != null && xe != null) {
288
262
  vs = new ViewSelection(xs, xe);
289
263
  }
@@ -297,8 +271,8 @@ export class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
297
271
  this.bgCanvas.height = Math.round(this.bounds.dimension.height);
298
272
  let g1 = this.bgCanvas.getContext("2d");
299
273
  if (g1) {
300
- let w = this.bgCanvas.width;
301
- let h = this.bgCanvas.height;
274
+ const w = this.bgCanvas.width;
275
+ const h = this.bgCanvas.height;
302
276
  g1.clearRect(0, 0, w, h);
303
277
  if (this._bgColor) {
304
278
  g1.fillStyle = this._bgColor;
@@ -314,26 +288,11 @@ export class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
314
288
  }
315
289
  drawCursorLayer() {
316
290
  if (this.cursorCanvas) {
317
- let w = this.cursorCanvas.width;
318
- let h = this.cursorCanvas.height;
319
- let g = this.cursorCanvas.getContext("2d");
291
+ const w = this.cursorCanvas.width;
292
+ const h = this.cursorCanvas.height;
293
+ const g = this.cursorCanvas.getContext("2d");
320
294
  if (g) {
321
295
  g.clearRect(0, 0, w, h);
322
- // let s:Selection=null;
323
- // if(this._selecting){
324
- // s=this._selecting
325
- // }else if(this._selection){
326
- // s=this._selection
327
- // }
328
- // if(s){
329
- // let sf=s.startFrame
330
- // let ef=s.endFrame
331
- // let xs=this.frameToViewPortXPixelPosition(sf)
332
- // let xe=this.frameToViewPortXPixelPosition(ef)
333
- // let sw=xe-xs
334
- // g.fillStyle = 'rgba(0%,0%,100%,25%)';
335
- // g.fillRect(xs,0,sw,h);
336
- // }
337
296
  if (this._pointerPosition) {
338
297
  let framePos = this._pointerPosition.framePosition;
339
298
  if (framePos) {
@@ -359,9 +318,9 @@ export class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
359
318
  }
360
319
  }
361
320
  AudioCanvasLayerComponent.ENABLE_STREAMING_NUMBER_OF_SAMPLES_THRESHOLD = 10 * 60 * 48000; // Use streaming/chunking if audio clip has more than this number of samples
362
- AudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
363
- AudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: AudioCanvasLayerComponent, inputs: { pointerPosition: "pointerPosition", selecting: "selecting", selection: "selection" }, outputs: { pointerPositionEventEmitter: "pointerPositionEventEmitter", selectingEventEmitter: "selectingEventEmitter", selectedEventEmitter: "selectedEventEmitter" }, host: { listeners: { "document:mouseup": "onMouseup($event)" } }, viewQueries: [{ propertyName: "bgCanvasRef", first: true, predicate: ["bg"], descendants: true, static: true }, { propertyName: "cursorCanvasRef", first: true, predicate: ["cursor"], descendants: true, static: true }], usesInheritance: true, ngImport: i0 });
364
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioCanvasLayerComponent, decorators: [{
321
+ AudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
322
+ AudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: AudioCanvasLayerComponent, inputs: { pointerPosition: "pointerPosition", selecting: "selecting", selection: "selection" }, outputs: { pointerPositionEventEmitter: "pointerPositionEventEmitter", selectingEventEmitter: "selectingEventEmitter", selectedEventEmitter: "selectedEventEmitter" }, host: { listeners: { "document:mouseup": "onMouseup($event)" } }, viewQueries: [{ propertyName: "bgCanvasRef", first: true, predicate: ["bg"], descendants: true, static: true }, { propertyName: "cursorCanvasRef", first: true, predicate: ["cursor"], descendants: true, static: true }], usesInheritance: true, ngImport: i0 });
323
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioCanvasLayerComponent, decorators: [{
365
324
  type: Directive
366
325
  }], propDecorators: { bgCanvasRef: [{
367
326
  type: ViewChild,
@@ -385,4 +344,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
385
344
  }], selectedEventEmitter: [{
386
345
  type: Output
387
346
  }] } });
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fY2FudmFzX2xheWVyX2NvbXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvYXVkaW8vdWkvYXVkaW9fY2FudmFzX2xheWVyX2NvbXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN0QyxPQUFPLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQzs7QUFLaEMsTUFBTSxPQUFPLGFBQWE7SUFheEIsWUFBb0IsT0FBYyxFQUFVLEtBQVk7UUFBcEMsWUFBTyxHQUFQLE9BQU8sQ0FBTztRQUFVLFVBQUssR0FBTCxLQUFLLENBQU87SUFBRSxDQUFDO0lBWjNELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDaEMsQ0FBQztDQUdGO0FBR0QsTUFBTSxPQUFnQiw4QkFBK0IsU0FBUSxvQkFBb0I7SUFEakY7O1FBRUUsOENBQThDO1FBQzlDLHdEQUF3RDtRQUM5QyxxQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO1FBQzVDLGFBQVEsR0FBYSxPQUFPLENBQUM7UUFDN0IsaUJBQVksR0FBQyxzQkFBc0IsQ0FBQztLQTJJL0M7SUF6SVMsV0FBVztRQUNqQixJQUFJLFdBQVcsR0FBRyxJQUFJ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QkFBeUI7NEZBQXpCLHlCQUF5QjtrQkFEOUMsU0FBUzs4QkFTNkIsV0FBVztzQkFBN0MsU0FBUzt1QkFBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdNLGVBQWU7c0JBQXJELFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJdkMsU0FBUztzQkFEUixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVk3QixlQUFlO3NCQUEzQixLQUFLO2dCQU1PLFNBQVM7c0JBQXJCLEtBQUs7Z0JBV08sU0FBUztzQkFBckIsS0FBSztnQkFxREksMkJBQTJCO3NCQUFwQyxNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NhbnZhc0xheWVyQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vdWkvY2FudmFzX2xheWVyX2NvbXBcIjtcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gJy4uL3BlcnNpc3RvcidcclxuaW1wb3J0IHsgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCwgRGlyZWN0aXZlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtNYXJrZXJ9IGZyb20gXCIuL2NvbW1vblwiO1xyXG5pbXBvcnQge0RpbWVuc2lvbiwgUmVjdGFuZ2xlfSBmcm9tIFwiLi4vLi4vbWF0aC8yZC9nZW9tZXRyeVwiO1xyXG5pbXBvcnQge0F1ZGlvRGF0YUhvbGRlcn0gZnJvbSBcIi4uL2F1ZGlvX2RhdGFfaG9sZGVyXCI7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFZpZXdTZWxlY3Rpb257XHJcbiAgZ2V0IHN0YXJ0WCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0WDtcclxuICB9XHJcblxyXG4gIGdldCBlbmRYKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW5kWDtcclxuICB9XHJcblxyXG4gIHdpZHRoKCk6bnVtYmVye1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuZFgtdGhpcy5fc3RhcnRYXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zdGFydFg6bnVtYmVyLCBwcml2YXRlIF9lbmRYOm51bWJlcil7fVxyXG59XHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2ljQXVkaW9DYW52YXNMYXllckNvbXBvbmVudCBleHRlbmRzIENhbnZhc0xheWVyQ29tcG9uZW50IHtcclxuICAvL3Byb3RlY3RlZCBfYXVkaW9EYXRhOiBBdWRpb0J1ZmZlcnxudWxsPW51bGw7XHJcbiAgLy9wcm90ZWN0ZWQgX2FycmF5QXVkaW9EYXRhOiBBcnJheUF1ZGlvQnVmZmVyfG51bGw9bnVsbDtcclxuICBwcm90ZWN0ZWQgX2F1ZGlvRGF0YUhvbGRlcjpBdWRpb0RhdGFIb2xkZXJ8IG51bGw9bnVsbDtcclxuICBwcm90ZWN0ZWQgX2JnQ29sb3I6c3RyaW5nfG51bGw9J3doaXRlJztcclxuICBwcm90ZWN0ZWQgX3NlbGVjdENvbG9yPSdyZ2JhKDAlLDAlLDEwMCUsMjUlKSc7XHJcblxyXG4gIHByaXZhdGUgZnJhbWVMZW5ndGgoKTpudW1iZXJ8bnVsbHtcclxuICAgIGxldCBmcmFtZUxlbmd0aCA9IG51bGw7XHJcbiAgICAvLyBpZiAodGhpcy5fYXVkaW9EYXRhICYmIHRoaXMuX2F1ZGlvRGF0YS5udW1iZXJPZkNoYW5uZWxzID4gMCkge1xyXG4gICAgLy8gICBsZXQgY2gwID0gdGhpcy5fYXVkaW9EYXRhLmdldENoYW5uZWxEYXRhKDApO1xyXG4gICAgLy8gICBmcmFtZUxlbmd0aCA9IGNoMC5sZW5ndGg7XHJcbiAgICAvL1xyXG4gICAgLy8gfWVsc2UgaWYodGhpcy5fYXJyYXlBdWRpb0RhdGEpe1xyXG4gICAgLy8gICBmcmFtZUxlbmd0aD10aGlzLl9hcnJheUF1ZGlvRGF0YS5mcmFtZUxlbjtcclxuICAgIC8vIH1cclxuXHJcbiAgICByZXR1cm4gZnJhbWVMZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHBpeGVsIHBvc2l0aW9uIGRlcGVuZGluZyBvbiBjdXJyZW50IHpvb20gc2V0dGluZy5cclxuICAgKiBAcGFyYW0gZnJhbWVQb3MgYXVkaW8gZnJhbWUgKHNhbXBsZSkgcG9zaXRpb25cclxuICAgKi9cclxuICBmcmFtZVRvWFBpeGVsUG9zaXRpb24oZnJhbWVQb3M6IG51bWJlcik6IG51bWJlciB8IG51bGwge1xyXG4gICAgbGV0IHBpeGVsUG9zPW51bGw7XHJcbiAgICBsZXQgZnJhbWVMZW5ndGggPSB0aGlzLl9hdWRpb0RhdGFIb2xkZXI/LmZyYW1lTGVuO1xyXG5cclxuICAgIGlmKGZyYW1lTGVuZ3RoIT09dW5kZWZpbmVkKSB7XHJcbiAgICAgIGxldCB2dztcclxuICAgICAgaWYgKHRoaXMuYm91bmRzKSB7XHJcbiAgICAgICAgdncgPSB0aGlzLmJvdW5kcy5kaW1lbnNpb24ud2lkdGg7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudmlydHVhbERpbWVuc2lvbikge1xyXG4gICAgICAgIHZ3ID0gdGhpcy52aXJ0dWFsRGltZW5zaW9uLndpZHRoO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh2dyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcGl4ZWxQb3MgPSBmcmFtZVBvcyAqIHZ3IC8gZnJhbWVMZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBwaXhlbFBvcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgcGl4ZWwgcG9zaXRpb24gaW4gdmlldyBwb3J0ICh2aXNpYmxlIHdpbmRvdyBvZiBzY3JvbGwgcGFuZSkuXHJcbiAgICogQHBhcmFtIGZyYW1lUG9zIGF1ZGlvIGZyYW1lIChzYW1wbGUpIHBvc2l0aW9uXHJcbiAgICovXHJcbiAgZnJhbWVUb1ZpZXdQb3J0WFBpeGVsUG9zaXRpb24oZnJhbWVQb3M6IG51bWJlcik6IG51bWJlciB8IG51bGwge1xyXG4gICAgbGV0IHBpeGVsUG9zPXRoaXMuZnJhbWVUb1hQaXhlbFBvc2l0aW9uKGZyYW1lUG9zKTtcclxuICAgIGlmKHBpeGVsUG9zIT1udWxsKXtcclxuICAgICAgbGV0IHZQaXhlbFBvcyA9IHRoaXMudG9YVmlld1BvcnRQaXhlbFBvc2l0aW9uKHBpeGVsUG9zKTtcclxuICAgICAgcmV0dXJuIHZQaXhlbFBvcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmlld1BvcnRYUGl4ZWxUb0ZyYW1lUG9zaXRpb24oeFZpZXdQb3J0UGl4ZWxQb3M6IG51bWJlcik6IG51bWJlciB8IG51bGwge1xyXG4gICAgbGV0IHZwWHJhbWVQb3M9bnVsbDtcclxuXHJcbiAgICBsZXQgZnJhbWVMZW5ndGggPSB0aGlzLl9hdWRpb0RhdGFIb2xkZXI/LmZyYW1lTGVuO1xyXG5cclxuICAgIGlmKGZyYW1lTGVuZ3RoIT09dW5kZWZpbmVkKSB7XHJcbiAgICAgIGxldCB2dztcclxuICAgICAgaWYgKHRoaXMuYm91bmRzKSB7XHJcbiAgICAgICAgdnc9IHRoaXMuYm91bmRzLmRpbWVuc2lvbi53aWR0aDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy52aXJ0dWFsRGltZW5zaW9uKSB7XHJcbiAgICAgICAgdncgPSB0aGlzLnZpcnR1YWxEaW1lbnNpb24ud2lkdGg7XHJcbiAgICAgIH1cclxuICAgICAgaWYodnchPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgbGV0IHhWaXJ0dWFsUGl4ZWxQb3MgPSB0aGlzLnRvWFZpcnR1YWxQaXhlbFBvc2l0aW9uKHhWaWV3UG9ydFBpeGVsUG9zKVxyXG4gICAgICAgIGxldCBmcmFtZXNQZXJQaXhlbCA9IGZyYW1lTGVuZ3RoIC8gdnc7XHJcbiAgICAgICAgbGV0IGZyYW1lUG9zID0gZnJhbWVzUGVyUGl4ZWwgKiB4VmlydHVhbFBpeGVsUG9zO1xyXG4gICAgICAgIGlmIChmcmFtZVBvcyA8IDApIHtcclxuICAgICAgICAgIGZyYW1lUG9zID0gMFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZnJhbWVQb3MgPj0gZnJhbWVMZW5ndGgpIHtcclxuICAgICAgICAgIGZyYW1lUG9zID0gZnJhbWVMZW5ndGggLSAxXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZwWHJhbWVQb3MgPSBNYXRoLnJvdW5kKGZyYW1lUG9zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZwWHJhbWVQb3M7XHJcbiAgfVxyXG5cclxuICAgIGxheW91dEJvdW5kcyhib3VuZHM6UmVjdGFuZ2xlLCB2aXJ0dWFsRGltZW5zaW9uOkRpbWVuc2lvbixyZWRyYXc6IGJvb2xlYW4pIHtcclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZHM9Ym91bmRzO1xyXG4gICAgICAgIHRoaXMudmlydHVhbERpbWVuc2lvbj12aXJ0dWFsRGltZW5zaW9uO1xyXG4gICAgICAgIC8vdGhpcy5jYW52YXNMYXllcnMuZm9yRWFjaChjbD0+e1xyXG4gICAgICAgIGZvcihsZXQgY2k9MDtjaTx0aGlzLmNhbnZhc0xheWVycy5sZW5ndGg7Y2krKykge1xyXG4gICAgICAgICAgICBsZXQgY2wgPSB0aGlzLmNhbnZhc0xheWVyc1tjaV07XHJcbiAgICAgICAgICAgIGNvbnN0IGxlZnRTdHlsZT1ib3VuZHMucG9zaXRpb24ubGVmdCsgJ3B4JztcclxuICAgICAgICAgICAgaWYoY2wuc3R5bGUubGVmdCE9bGVmdFN0eWxlKSB7XHJcbiAgICAgICAgICAgICAgY2wuc3R5bGUubGVmdCA9IGxlZnRTdHlsZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB0b3BTdHlsZT1ib3VuZHMucG9zaXRpb24udG9wICsgJ3B4JztcclxuICAgICAgICAgICAgaWYoY2wuc3R5bGUudG9wIT10b3BTdHlsZSkge1xyXG4gICAgICAgICAgICAgIGNsLnN0eWxlLnRvcCA9IHRvcFN0eWxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChib3VuZHMuZGltZW5zaW9uLndpZHRoKSB7XHJcbiAgICAgICAgICAgIGxldCBpbnRXPU1hdGguZmxvb3IoYm91bmRzLmRpbWVuc2lvbi53aWR0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZWRyYXcpIHtcclxuICAgICAgICAgICAgICAgIC8vIERvIG5vdCBzZXQgd2lkdGggb2YgYmFja2dyb3VuZCBjYW52YXMgKGNhdXNlcyBmbGlja2VyIG9uIHN0YXJ0IHJlbmRlcilcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgY2k9MTtjaTx0aGlzLmNhbnZhc0xheWVycy5sZW5ndGg7Y2krKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbCA9IHRoaXMuY2FudmFzTGF5ZXJzW2NpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZihjbC53aWR0aCE9aW50Vykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2wud2lkdGggPSBpbnRXO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgd1N0ciA9IGludFcudG9TdHJpbmcoKSArICdweCc7XHJcbiAgICAgICAgICAgIGZvcihsZXQgY2k9MDtjaTx0aGlzLmNhbnZhc0xheWVycy5sZW5ndGg7Y2krKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNsID0gdGhpcy5jYW52YXNMYXllcnNbY2ldO1xyXG4gICAgICAgICAgICAgICAgaWYoY2wuc3R5bGUud2lkdGghPXdTdHIpIHtcclxuICAgICAgICAgICAgICAgICAgY2wuc3R5bGUud2lkdGggPSB3U3RyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChib3VuZHMuZGltZW5zaW9uLmhlaWdodCkge1xyXG4gICAgICAgICAgICBsZXQgaW50SD1NYXRoLmZsb29yKGJvdW5kcy5kaW1lbnNpb24uaGVpZ2h0KVxyXG4gICAgICAgICAgICBpZiAocmVkcmF3KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBEbyBub3Qgc2V0IGhlaWdodCBvZiBiYWNrZ3JvdW5kIGNhbnZhcyAoY2F1c2VzIGZsaWNrZXIgb24gc3RhcnQgcmVuZGVyKVxyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBjaT0xO2NpPHRoaXMuY2FudmFzTGF5ZXJzLmxlbmd0aDtjaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNsID0gdGhpcy5jYW52YXNMYXllcnNbY2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGNsLmhlaWdodCE9aW50SCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2wuaGVpZ2h0ID0gaW50SDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGhTdHIgPSBpbnRIICsgJ3B4JztcclxuICAgICAgICAgICAgZm9yKGxldCBjaT0wO2NpPHRoaXMuY2FudmFzTGF5ZXJzLmxlbmd0aDtjaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2wgPSB0aGlzLmNhbnZhc0xheWVyc1tjaV07XHJcbiAgICAgICAgICAgICAgICBpZihjbC5zdHlsZS5oZWlnaHQhPWhTdHIpe1xyXG4gICAgICAgICAgICAgICAgICBjbC5zdHlsZS5oZWlnaHQgPSBoU3RyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vfSk7XHJcblxyXG5cclxuICAgIH1cclxufVxyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBdWRpb0NhbnZhc0xheWVyQ29tcG9uZW50IGV4dGVuZHMgQmFzaWNBdWRpb0NhbnZhc0xheWVyQ29tcG9uZW50IHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IEVOQUJMRV9TVFJFQU1JTkdfTlVNQkVSX09GX1NBTVBMRVNfVEhSRVNIT0xEPTEwKjYwKjQ4MDAwOyAgLy8gVXNlIHN0cmVhbWluZy9jaHVua2luZyBpZiBhdWRpbyBjbGlwIGhhcyBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2Ygc2FtcGxlc1xyXG5cclxuICAgIF9wb2ludGVyUG9zaXRpb246TWFya2VyfG51bGw9bnVsbDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgc2VsZWN0U3RhcnRYOm51bWJlcnxudWxsPW51bGw7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnYmcnLCB7IHN0YXRpYzogdHJ1ZSB9KSBiZ0NhbnZhc1JlZiE6IEVsZW1lbnRSZWY7XHJcbiAgICBiZ0NhbnZhcyE6IEhUTUxDYW52YXNFbGVtZW50O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2N1cnNvcicsIHsgc3RhdGljOiB0cnVlIH0pIGN1cnNvckNhbnZhc1JlZiE6IEVsZW1lbnRSZWY7XHJcbiAgICBjdXJzb3JDYW52YXMhOiBIVE1MQ2FudmFzRWxlbWVudDtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFsnJGV2ZW50J10pXHJcbiAgb25Nb3VzZXVwKG1lOiBNb3VzZUV2ZW50KSB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNvbW1pdChtZSlcclxuICB9XHJcblxyXG4gICAgbGF5b3V0Qm91bmRzKGJvdW5kczpSZWN0YW5nbGUsIHZpcnR1YWxEaW1lbnNpb246RGltZW5zaW9uLHJlZHJhdzogYm9vbGVhbixjbGVhcjpib29sZWFuPXRydWUpIHtcclxuICAgICAgICBzdXBlci5sYXlvdXRCb3VuZHMoYm91bmRzLHZpcnR1YWxEaW1lbnNpb24scmVkcmF3KVxyXG4gICAgICAgIGlmIChyZWRyYXcpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydERyYXcoY2xlYXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBzZXQgcG9pbnRlclBvc2l0aW9uKHBvaW50ZXJQb3NpdGlvbjpNYXJrZXJ8bnVsbCl7XHJcbiAgICAgICAgdGhpcy5fcG9pbnRlclBvc2l0aW9uPXBvaW50ZXJQb3NpdGlvblxyXG4gICAgICAgIHRoaXMuZHJhd0N1cnNvckxheWVyKClcclxuICAgIH1cclxuXHJcbiAgICBfc2VsZWN0aW5nOiBTZWxlY3Rpb258bnVsbCA9bnVsbDtcclxuICAgIEBJbnB1dCgpIHNldCBzZWxlY3Rpbmcoc2VsZWN0aW5nOlNlbGVjdGlvbnwgbnVsbCl7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0aW5nPXNlbGVjdGluZ1xyXG4gICAgICAgIHRoaXMuZHJhd0JnKClcclxuICAgICAgICB0aGlzLmRyYXdDdXJzb3JMYXllcigpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNlbGVjdGluZygpOlNlbGVjdGlvbnxudWxse1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RpbmdcclxuICAgIH1cclxuXHJcbiAgICBfc2VsZWN0aW9uOiBTZWxlY3Rpb258bnVsbCA9bnVsbFxyXG4gICAgQElucHV0KCkgc2V0IHNlbGVjdGlvbihzZWxlY3Rpb246U2VsZWN0aW9ufG51bGwpe1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbj1zZWxlY3Rpb247XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpbmc9bnVsbDtcclxuICAgICAgICB0aGlzLmRyYXdCZygpXHJcbiAgICAgICAgdGhpcy5kcmF3Q3Vyc29yTGF5ZXIoKVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZWxlY3Rpb24oKTpTZWxlY3Rpb258bnVsbHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0aW9uU3RhcnQobWU6TW91c2VFdmVudCl7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RTdGFydFg9bWUub2Zmc2V0WDtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3Rpb25Db21taXQobWU6TW91c2VFdmVudCl7XHJcbiAgICAgICAgbGV0IHZzOlZpZXdTZWxlY3Rpb258bnVsbD1udWxsO1xyXG4gICAgICAgIGlmKHRoaXMuc2VsZWN0U3RhcnRYIT1udWxsKSB7XHJcbiAgICAgICAgICB2cz1uZXcgVmlld1NlbGVjdGlvbih0aGlzLnNlbGVjdFN0YXJ0WCxtZS5vZmZzZXRYKVxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RTdGFydFg9bnVsbDtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0KHZzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWJzdHJhY3Qgc3RhcnREcmF3KGNsZWFyOmJvb2xlYW4pOnZvaWQ7XHJcblxyXG4gICAgdXBkYXRlQ3Vyc29yQ2FudmFzKG1lOk1vdXNlRXZlbnQsc2hvd0N1cnNvclBvc2l0aW9uPXRydWUpe1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJzb3JDYW52YXMpIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB3ID0gdGhpcy5jdXJzb3JDYW52YXMud2lkdGg7XHJcbiAgICAgICAgICAgIGxldCBoID0gdGhpcy5jdXJzb3JDYW52YXMuaGVpZ2h0O1xyXG4gICAgICAgICAgICBsZXQgZyA9IHRoaXMuY3Vyc29yQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGlmICghc2hvd0N1cnNvclBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNlbGVjdFN0YXJ0WCA9IG51bGxcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuc2VsZWN0aW5nQ2hhbmdlKG51bGwpXHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgaWYgKG1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RTdGFydFgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJQb3NpdGlvbkNoYW5nZWQobnVsbClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGluZ0NoYW5nZShuZXcgVmlld1NlbGVjdGlvbih0aGlzLnNlbGVjdFN0YXJ0WCwgbWUub2Zmc2V0WCkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd0N1cnNvclBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRlclBvc2l0aW9uQ2hhbmdlZChtZS5vZmZzZXRYKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJQb3NpdGlvbkNoYW5nZWQobnVsbClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIHBvaW50ZXJQb3NpdGlvbkV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8TWFya2VyPigpO1xyXG4gICAgQE91dHB1dCgpIHNlbGVjdGluZ0V2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uPigpO1xyXG4gICAgQE91dHB1dCgpIHNlbGVjdGVkRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb24+KCk7XHJcblxyXG5cclxuICAgIHBvaW50ZXJQb3NpdGlvbkNoYW5nZWQoeFBvc2l0aW9uOm51bWJlcnwgbnVsbCl7XHJcbiAgICAgICAgbGV0IHBvaW50ZXJQb3NpdGlvbjpNYXJrZXJ8dW5kZWZpbmVkPXVuZGVmaW5lZDtcclxuICAgICAgICBpZih4UG9zaXRpb24pe1xyXG4gICAgICAgICAgICBwb2ludGVyUG9zaXRpb249bmV3IE1hcmtlcigpO1xyXG4gICAgICAgICAgICBsZXQgdnBYUG9zPXRoaXMudmlld1BvcnRYUGl4ZWxUb0ZyYW1lUG9zaXRpb24oeFBvc2l0aW9uKTtcclxuICAgICAgICAgICAgaWYodnBYUG9zIT1udWxsKSB7XHJcbiAgICAgICAgICAgICAgICBwb2ludGVyUG9zaXRpb24uZnJhbWVQb3NpdGlvbiA9dnBYUG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9pbnRlclBvc2l0aW9uRXZlbnRFbWl0dGVyLmVtaXQocG9pbnRlclBvc2l0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RpbmdDaGFuZ2Uodmlld1NlbDpWaWV3U2VsZWN0aW9ufCBudWxsKXtcclxuICAgICAgICBsZXQgbnM6U2VsZWN0aW9ufHVuZGVmaW5lZD11bmRlZmluZWQ7XHJcbiAgICAgICAgaWYodmlld1NlbCkge1xyXG4gICAgICAgICAgICBsZXQgZnJhbWVTdGFydCA9IHRoaXMudmlld1BvcnRYUGl4ZWxUb0ZyYW1lUG9zaXRpb24odmlld1NlbC5zdGFydFgpXHJcbiAgICAgICAgICAgIGxldCBmcmFtZUVuZCA9IHRoaXMudmlld1BvcnRYUGl4ZWxUb0ZyYW1lUG9zaXRpb24odmlld1NlbC5lbmRYKVxyXG4gICAgICAgICAgICBpZih0aGlzLl9hdWRpb0RhdGFIb2xkZXIgJiYgZnJhbWVTdGFydCE9bnVsbCAmJiBmcmFtZUVuZCE9bnVsbCkge1xyXG4gICAgICAgICAgICAgICAgbnMgPSBuZXcgU2VsZWN0aW9uKHRoaXMuX2F1ZGlvRGF0YUhvbGRlci5zYW1wbGVSYXRlLCBmcmFtZVN0YXJ0LCBmcmFtZUVuZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RpbmdFdmVudEVtaXR0ZXIuZW1pdChucylcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3Qodmlld1NlbDpWaWV3U2VsZWN0aW9ufCBudWxsKXtcclxuICAgICAgICBsZXQgbnM6U2VsZWN0aW9ufHVuZGVmaW5lZD11bmRlZmluZWQ7XHJcbiAgICAgICAgaWYodmlld1NlbCkge1xyXG4gICAgICAgICAgbGV0IGZyYW1lU3RhcnQgPSB0aGlzLnZpZXdQb3J0WFBpeGVsVG9GcmFtZVBvc2l0aW9uKHZpZXdTZWwuc3RhcnRYKVxyXG4gICAgICAgICAgbGV0IGZyYW1lRW5kID0gdGhpcy52aWV3UG9ydFhQaXhlbFRvRnJhbWVQb3NpdGlvbih2aWV3U2VsLmVuZFgpXHJcbiAgICAgICAgICAgIGlmKHRoaXMuX2F1ZGlvRGF0YUhvbGRlciAmJiBmcmFtZVN0YXJ0IT1udWxsICYmIGZyYW1lRW5kIT1udWxsKSB7XHJcbiAgICAgICAgICAgICAgICBucyA9IG5ldyBTZWxlY3Rpb24odGhpcy5fYXVkaW9EYXRhSG9sZGVyLnNhbXBsZVJhdGUsIGZyYW1lU3RhcnQsIGZyYW1lRW5kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRXZlbnRFbWl0dGVyLmVtaXQobnMpXHJcbiAgICB9XHJcblxyXG4gICAgdmlld1NlbGVjdGlvbigpOlZpZXdTZWxlY3Rpb258bnVsbHtcclxuICAgICAgbGV0IHZzOlZpZXdTZWxlY3Rpb258bnVsbD1udWxsO1xyXG4gICAgICBsZXQgczpTZWxlY3Rpb258bnVsbD1udWxsO1xyXG4gICAgICBpZih0aGlzLl9zZWxlY3Rpbmcpe1xyXG4gICAgICAgIHM9dGhpcy5fc2VsZWN0aW5nXHJcbiAgICAgIH1lbHNlIGlmKHRoaXMuX3NlbGVjdGlvbil7XHJcbiAgICAgICAgcz10aGlzLl9zZWxlY3Rpb25cclxuICAgICAgfVxyXG4gICAgICBpZihzKXtcclxuICAgICAgICBsZXQgc2Y9cy5zdGFydEZyYW1lO1xyXG4gICAgICAgIGxldCBlZj1zLmVuZEZyYW1lO1xyXG4gICAgICAgIGxldCB4cz10aGlzLmZyYW1lVG9WaWV3UG9ydFhQaXhlbFBvc2l0aW9uKHNmKVxyXG4gICAgICAgIGxldCB4ZT10aGlzLmZyYW1lVG9WaWV3UG9ydFhQaXhlbFBvc2l0aW9uKGVmKVxyXG4gICAgICAgICAgaWYoeHMhPW51bGwgJiYgeGUhPW51bGwpIHtcclxuICAgICAgICAgICAgICB2cyA9IG5ldyBWaWV3U2VsZWN0aW9uKHhzLCB4ZSlcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdnM7XHJcbiAgICB9XHJcblxyXG5cclxuICBkcmF3QmcoKXtcclxuICAgICAgaWYodGhpcy5iZ0NhbnZhcyAmJiB0aGlzLmJvdW5kcykge1xyXG4gICAgICAgICAgdGhpcy5iZ0NhbnZhcy5zdHlsZS5sZWZ0ID0gTWF0aC5yb3VuZCh0aGlzLmJvdW5kcy5wb3NpdGlvbi5sZWZ0KS50b1N0cmluZygpICsgJ3B4JztcclxuICAgICAgICAgIHRoaXMuYmdDYW52YXMud2lkdGggPSBNYXRoLnJvdW5kKHRoaXMuYm91bmRzLmRpbWVuc2lvbi53aWR0aCk7XHJcbiAgICAgICAgICB0aGlzLmJnQ2FudmFzLmhlaWdodCA9IE1hdGgucm91bmQodGhpcy5ib3VuZHMuZGltZW5zaW9uLmhlaWdodCk7XHJcbiAgICAgICAgbGV0IGcxID0gdGhpcy5iZ0NhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgaWYgKGcxKSB7XHJcbiAgICAgICAgICBsZXQgdyA9IHRoaXMuYmdDYW52YXMud2lkdGg7XHJcbiAgICAgICAgICBsZXQgaCA9IHRoaXMuYmdDYW52YXMuaGVpZ2h0O1xyXG4gICAgICAgICAgZzEuY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICAgICAgaWYodGhpcy5fYmdDb2xvcikge1xyXG4gICAgICAgICAgICBnMS5maWxsU3R5bGUgPSB0aGlzLl9iZ0NvbG9yO1xyXG4gICAgICAgICAgICBnMS5maWxsUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCB2cyA9IHRoaXMudmlld1NlbGVjdGlvbigpXHJcbiAgICAgICAgICBpZiAodnMpIHtcclxuICAgICAgICAgICAgZzEuZmlsbFN0eWxlID0gdGhpcy5fc2VsZWN0Q29sb3I7XHJcbiAgICAgICAgICAgIGcxLmZpbGxSZWN0KHZzLnN0YXJ0WCwgMCwgdnMud2lkdGgoKSwgaCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgfVxyXG4gICAgZHJhd0N1cnNvckxheWVyKCl7XHJcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yQ2FudmFzKSB7XHJcbiAgICAgICAgICAgIGxldCB3ID0gdGhpcy5jdXJzb3JDYW52YXMud2lkdGg7XHJcbiAgICAgICAgICAgIGxldCBoID0gdGhpcy5jdXJzb3JDYW52YXMuaGVpZ2h0O1xyXG4gICAgICAgICAgICBsZXQgZyA9IHRoaXMuY3Vyc29yQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuICAgICAgICAgICAgaWYoZykge1xyXG4gICAgICAgICAgICAgICAgZy5jbGVhclJlY3QoMCwgMCwgdywgaCk7XHJcbiAgICAgICAgICAgICAgICAvLyBsZXQgczpTZWxlY3Rpb249bnVsbDtcclxuICAgICAgICAgICAgICAgIC8vIGlmKHRoaXMuX3NlbGVjdGluZyl7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgcz10aGlzLl9zZWxlY3RpbmdcclxuICAgICAgICAgICAgICAgIC8vIH1lbHNlIGlmKHRoaXMuX3NlbGVjdGlvbil7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgcz10aGlzLl9zZWxlY3Rpb25cclxuICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgIC8vIGlmKHMpe1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGxldCBzZj1zLnN0YXJ0RnJhbWVcclxuICAgICAgICAgICAgICAgIC8vICAgICBsZXQgZWY9cy5lbmRGcmFtZVxyXG4gICAgICAgICAgICAgICAgLy8gICAgIGxldCB4cz10aGlzLmZyYW1lVG9WaWV3UG9ydFhQaXhlbFBvc2l0aW9uKHNmKVxyXG4gICAgICAgICAgICAgICAgLy8gICAgIGxldCB4ZT10aGlzLmZyYW1lVG9WaWV3UG9ydFhQaXhlbFBvc2l0aW9uKGVmKVxyXG4gICAgICAgICAgICAgICAgLy8gICAgIGxldCBzdz14ZS14c1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGcuZmlsbFN0eWxlID0gJ3JnYmEoMCUsMCUsMTAwJSwyNSUpJztcclxuICAgICAgICAgICAgICAgIC8vICAgICBnLmZpbGxSZWN0KHhzLDAsc3csaCk7XHJcbiAgICAgICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5fcG9pbnRlclBvc2l0aW9uKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZyYW1lUG9zPXRoaXMuX3BvaW50ZXJQb3NpdGlvbi5mcmFtZVBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZnJhbWVQb3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHhWaWV3UG9ydFBpeGVscG9zID0gdGhpcy5mcmFtZVRvVmlld1BvcnRYUGl4ZWxQb3NpdGlvbihmcmFtZVBvcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhWaWV3UG9ydFBpeGVscG9zKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZy5maWxsU3R5bGUgPSAneWVsbG93JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuc3Ryb2tlU3R5bGUgPSAneWVsbG93JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLm1vdmVUbyh4Vmlld1BvcnRQaXhlbHBvcywgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLmxpbmVUbyh4Vmlld1BvcnRQaXhlbHBvcywgaCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLmNsb3NlUGF0aCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuc3Ryb2tlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2F1ZGlvRGF0YUhvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuZm9udCA9ICcxNHB4IHNhbnMtc2VyaWYnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuZmlsbFN0eWxlID0gJ3llbGxvdyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZy5maWxsVGV4dChmcmFtZVBvcy50b1N0cmluZygpLCB4Vmlld1BvcnRQaXhlbHBvcyArIDIsIDUwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn1cclxuXHJcblxyXG5cclxuIl19
347
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fY2FudmFzX2xheWVyX2NvbXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvYXVkaW8vdWkvYXVkaW9fY2FudmFzX2xheWVyX2NvbXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN0QyxPQUFPLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQzs7QUFLaEMsTUFBTSxPQUFPLGFBQWE7SUFheEIsWUFBb0IsT0FBYyxFQUFVLEtBQVk7UUFBcEMsWUFBTyxHQUFQLE9BQU8sQ0FBTztRQUFVLFVBQUssR0FBTCxLQUFLLENBQU87SUFBRSxDQUFDO0lBWjNELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDaEMsQ0FBQztDQUdGO0FBR0QsTUFBTSxPQUFnQiw4QkFBK0IsU0FBUSxvQkFBb0I7SUFEakY7O1FBRVkscUJBQWdCLEdBQXVCLElBQUksQ0FBQztRQUM1QyxhQUFRLEdBQWEsT0FBTyxDQUFDO1FBQzdCLGlCQUFZLEdBQUMsc0JBQXNCLENBQUM7S0FzSC9DO0lBcEhDOzs7T0FHRztJQUNILHFCQUFxQixDQUFDLFFBQWdCO1FBQ3BDLElBQUksUUFBUSxHQUFDLElBQUks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QyxFQUFFLEdBQUMsRUFBRSxHQUFDLEtBQU0sQ0FBQSxDQUFFLDRFQUE0RTt1SEFGL0kseUJBQXlCOzJHQUF6Qix5QkFBeUI7NEZBQXpCLHlCQUF5QjtrQkFEOUMsU0FBUzs4QkFTNkIsV0FBVztzQkFBN0MsU0FBUzt1QkFBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdNLGVBQWU7c0JBQXJELFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJdkMsU0FBUztzQkFEUixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVk3QixlQUFlO3NCQUEzQixLQUFLO2dCQU1PLFNBQVM7c0JBQXJCLEtBQUs7Z0JBV08sU0FBUztzQkFBckIsS0FBSztnQkEyQ0ksMkJBQTJCO3NCQUFwQyxNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NhbnZhc0xheWVyQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vdWkvY2FudmFzX2xheWVyX2NvbXBcIjtcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gJy4uL3BlcnNpc3RvcidcclxuaW1wb3J0IHsgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCwgRGlyZWN0aXZlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtNYXJrZXJ9IGZyb20gXCIuL2NvbW1vblwiO1xyXG5pbXBvcnQge0RpbWVuc2lvbiwgUmVjdGFuZ2xlfSBmcm9tIFwiLi4vLi4vbWF0aC8yZC9nZW9tZXRyeVwiO1xyXG5pbXBvcnQge0F1ZGlvRGF0YUhvbGRlcn0gZnJvbSBcIi4uL2F1ZGlvX2RhdGFfaG9sZGVyXCI7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFZpZXdTZWxlY3Rpb257XHJcbiAgZ2V0IHN0YXJ0WCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0WDtcclxuICB9XHJcblxyXG4gIGdldCBlbmRYKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW5kWDtcclxuICB9XHJcblxyXG4gIHdpZHRoKCk6bnVtYmVye1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuZFgtdGhpcy5fc3RhcnRYXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zdGFydFg6bnVtYmVyLCBwcml2YXRlIF9lbmRYOm51bWJlcil7fVxyXG59XHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2ljQXVkaW9DYW52YXNMYXllckNvbXBvbmVudCBleHRlbmRzIENhbnZhc0xheWVyQ29tcG9uZW50IHtcclxuICBwcm90ZWN0ZWQgX2F1ZGlvRGF0YUhvbGRlcjpBdWRpb0RhdGFIb2xkZXJ8IG51bGw9bnVsbDtcclxuICBwcm90ZWN0ZWQgX2JnQ29sb3I6c3RyaW5nfG51bGw9J3doaXRlJztcclxuICBwcm90ZWN0ZWQgX3NlbGVjdENvbG9yPSdyZ2JhKDAlLDAlLDEwMCUsMjUlKSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgcGl4ZWwgcG9zaXRpb24gZGVwZW5kaW5nIG9uIGN1cnJlbnQgem9vbSBzZXR0aW5nLlxyXG4gICAqIEBwYXJhbSBmcmFtZVBvcyBhdWRpbyBmcmFtZSAoc2FtcGxlKSBwb3NpdGlvblxyXG4gICAqL1xyXG4gIGZyYW1lVG9YUGl4ZWxQb3NpdGlvbihmcmFtZVBvczogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBsZXQgcGl4ZWxQb3M9bnVsbDtcclxuICAgIGxldCBmcmFtZUxlbmd0aCA9IHRoaXMuX2F1ZGlvRGF0YUhvbGRlcj8uZnJhbWVMZW47XHJcblxyXG4gICAgaWYoZnJhbWVMZW5ndGghPT11bmRlZmluZWQpIHtcclxuICAgICAgbGV0IHZ3O1xyXG4gICAgICBpZiAodGhpcy5ib3VuZHMpIHtcclxuICAgICAgICB2dyA9IHRoaXMuYm91bmRzLmRpbWVuc2lvbi53aWR0aDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy52aXJ0dWFsRGltZW5zaW9uKSB7XHJcbiAgICAgICAgdncgPSB0aGlzLnZpcnR1YWxEaW1lbnNpb24ud2lkdGg7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHZ3ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBwaXhlbFBvcyA9IGZyYW1lUG9zICogdncgLyBmcmFtZUxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBpeGVsUG9zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBwaXhlbCBwb3NpdGlvbiBpbiB2aWV3IHBvcnQgKHZpc2libGUgd2luZG93IG9mIHNjcm9sbCBwYW5lKS5cclxuICAgKiBAcGFyYW0gZnJhbWVQb3MgYXVkaW8gZnJhbWUgKHNhbXBsZSkgcG9zaXRpb25cclxuICAgKi9cclxuICBmcmFtZVRvVmlld1BvcnRYUGl4ZWxQb3NpdGlvbihmcmFtZVBvczogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBsZXQgcGl4ZWxQb3M9dGhpcy5mcmFtZVRvWFBpeGVsUG9zaXRpb24oZnJhbWVQb3MpO1xyXG4gICAgaWYocGl4ZWxQb3MhPW51bGwpe1xyXG4gICAgICByZXR1cm4gdGhpcy50b1hWaWV3UG9ydFBpeGVsUG9zaXRpb24ocGl4ZWxQb3MpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2aWV3UG9ydFhQaXhlbFRvRnJhbWVQb3NpdGlvbih4Vmlld1BvcnRQaXhlbFBvczogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBsZXQgdnBYZnJhbWVQb3M9bnVsbDtcclxuICAgIGNvbnN0IGZyYW1lTGVuZ3RoID0gdGhpcy5fYXVkaW9EYXRhSG9sZGVyPy5mcmFtZUxlbjtcclxuICAgIGlmKGZyYW1lTGVuZ3RoIT09dW5kZWZpbmVkKSB7XHJcbiAgICAgIGxldCB2dzpudW1iZXJ8dW5kZWZpbmVkPXVuZGVmaW5lZDtcclxuICAgICAgaWYgKHRoaXMuYm91bmRzKSB7XHJcbiAgICAgICAgdnc9IHRoaXMuYm91bmRzLmRpbWVuc2lvbi53aWR0aDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy52aXJ0dWFsRGltZW5zaW9uKSB7XHJcbiAgICAgICAgdncgPSB0aGlzLnZpcnR1YWxEaW1lbnNpb24ud2lkdGg7XHJcbiAgICAgIH1cclxuICAgICAgaWYodnchPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc3QgeFZpcnR1YWxQaXhlbFBvcyA9IHRoaXMudG9YVmlydHVhbFBpeGVsUG9zaXRpb24oeFZpZXdQb3J0UGl4ZWxQb3MpXHJcbiAgICAgICAgY29uc3QgZnJhbWVzUGVyUGl4ZWwgPSBmcmFtZUxlbmd0aCAvIHZ3O1xyXG4gICAgICAgIGxldCBmcmFtZVBvcyA9IGZyYW1lc1BlclBpeGVsICogeFZpcnR1YWxQaXhlbFBvcztcclxuICAgICAgICBpZiAoZnJhbWVQb3MgPCAwKSB7XHJcbiAgICAgICAgICBmcmFtZVBvcyA9IDBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZyYW1lUG9zID49IGZyYW1lTGVuZ3RoKSB7XHJcbiAgICAgICAgICBmcmFtZVBvcyA9IGZyYW1lTGVuZ3RoIC0gMVxyXG4gICAgICAgIH1cclxuICAgICAgICB2cFhmcmFtZVBvcyA9IE1hdGgucm91bmQoZnJhbWVQb3MpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdnBYZnJhbWVQb3M7XHJcbiAgfVxyXG5cclxuICAgIGxheW91dEJvdW5kcyhib3VuZHM6UmVjdGFuZ2xlLCB2aXJ0dWFsRGltZW5zaW9uOkRpbWVuc2lvbixyZWRyYXc6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmJvdW5kcz1ib3VuZHM7XHJcbiAgICAgICAgdGhpcy52aXJ0dWFsRGltZW5zaW9uPXZpcnR1YWxEaW1lbnNpb247XHJcbiAgICAgICAgZm9yKGxldCBjaT0wO2NpPHRoaXMuY2FudmFzTGF5ZXJzLmxlbmd0aDtjaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsID0gdGhpcy5jYW52YXNMYXllcnNbY2ldO1xyXG4gICAgICAgICAgICBjb25zdCBsZWZ0U3R5bGU9Ym91bmRzLnBvc2l0aW9uLmxlZnQrICdweCc7XHJcbiAgICAgICAgICAgIGlmKGNsLnN0eWxlLmxlZnQhPWxlZnRTdHlsZSkge1xyXG4gICAgICAgICAgICAgIGNsLnN0eWxlLmxlZnQgPSBsZWZ0U3R5bGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdG9wU3R5bGU9Ym91bmRzLnBvc2l0aW9uLnRvcCArICdweCc7XHJcbiAgICAgICAgICAgIGlmKGNsLnN0eWxlLnRvcCE9dG9wU3R5bGUpIHtcclxuICAgICAgICAgICAgICBjbC5zdHlsZS50b3AgPSB0b3BTdHlsZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYm91bmRzLmRpbWVuc2lvbi53aWR0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRXPU1hdGguZmxvb3IoYm91bmRzLmRpbWVuc2lvbi53aWR0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZWRyYXcpIHtcclxuICAgICAgICAgICAgICAgIC8vIERvIG5vdCBzZXQgd2lkdGggb2YgYmFja2dyb3VuZCBjYW52YXMgKGNhdXNlcyBmbGlja2VyIG9uIHN0YXJ0IHJlbmRlcilcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgY2k9MTtjaTx0aGlzLmNhbnZhc0xheWVycy5sZW5ndGg7Y2krKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbCA9IHRoaXMuY2FudmFzTGF5ZXJzW2NpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZihjbC53aWR0aCE9aW50Vykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2wud2lkdGggPSBpbnRXO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB3U3RyID0gaW50Vy50b1N0cmluZygpICsgJ3B4JztcclxuICAgICAgICAgICAgZm9yKGxldCBjaT0wO2NpPHRoaXMuY2FudmFzTGF5ZXJzLmxlbmd0aDtjaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2wgPSB0aGlzLmNhbnZhc0xheWVyc1tjaV07XHJcbiAgICAgICAgICAgICAgICBpZihjbC5zdHlsZS53aWR0aCE9d1N0cikge1xyXG4gICAgICAgICAgICAgICAgICBjbC5zdHlsZS53aWR0aCA9IHdTdHI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJvdW5kcy5kaW1lbnNpb24uaGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGludEg9TWF0aC5mbG9vcihib3VuZHMuZGltZW5zaW9uLmhlaWdodClcclxuICAgICAgICAgICAgaWYgKHJlZHJhdykge1xyXG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IHNldCBoZWlnaHQgb2YgYmFja2dyb3VuZCBjYW52YXMgKGNhdXNlcyBmbGlja2VyIG9uIHN0YXJ0IHJlbmRlcilcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgY2k9MTtjaTx0aGlzLmNhbnZhc0xheWVycy5sZW5ndGg7Y2krKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbCA9IHRoaXMuY2FudmFzTGF5ZXJzW2NpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZihjbC5oZWlnaHQhPWludEgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNsLmhlaWdodCA9IGludEg7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGhTdHIgPSBpbnRIICsgJ3B4JztcclxuICAgICAgICAgICAgZm9yKGxldCBjaT0wO2NpPHRoaXMuY2FudmFzTGF5ZXJzLmxlbmd0aDtjaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2wgPSB0aGlzLmNhbnZhc0xheWVyc1tjaV07XHJcbiAgICAgICAgICAgICAgICBpZihjbC5zdHlsZS5oZWlnaHQhPWhTdHIpe1xyXG4gICAgICAgICAgICAgICAgICBjbC5zdHlsZS5oZWlnaHQgPSBoU3RyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEF1ZGlvQ2FudmFzTGF5ZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNpY0F1ZGlvQ2FudmFzTGF5ZXJDb21wb25lbnQge1xyXG5cclxuICAgIHByb3RlY3RlZCBzdGF0aWMgcmVhZG9ubHkgRU5BQkxFX1NUUkVBTUlOR19OVU1CRVJfT0ZfU0FNUExFU19USFJFU0hPTEQ9MTAqNjAqNDgwMDA7ICAvLyBVc2Ugc3RyZWFtaW5nL2NodW5raW5nIGlmIGF1ZGlvIGNsaXAgaGFzIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBzYW1wbGVzXHJcblxyXG4gICAgX3BvaW50ZXJQb3NpdGlvbjpNYXJrZXJ8bnVsbD1udWxsO1xyXG5cclxuICAgIHByb3RlY3RlZCBzZWxlY3RTdGFydFg6bnVtYmVyfG51bGw9bnVsbDtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdiZycsIHsgc3RhdGljOiB0cnVlIH0pIGJnQ2FudmFzUmVmITogRWxlbWVudFJlZjtcclxuICAgIGJnQ2FudmFzITogSFRNTENhbnZhc0VsZW1lbnQ7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnY3Vyc29yJywgeyBzdGF0aWM6IHRydWUgfSkgY3Vyc29yQ2FudmFzUmVmITogRWxlbWVudFJlZjtcclxuICAgIGN1cnNvckNhbnZhcyE6IEhUTUxDYW52YXNFbGVtZW50O1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZXVwJywgWyckZXZlbnQnXSlcclxuICBvbk1vdXNldXAobWU6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uQ29tbWl0KG1lKVxyXG4gIH1cclxuXHJcbiAgICBsYXlvdXRCb3VuZHMoYm91bmRzOlJlY3RhbmdsZSwgdmlydHVhbERpbWVuc2lvbjpEaW1lbnNpb24scmVkcmF3OiBib29sZWFuLGNsZWFyOmJvb2xlYW49dHJ1ZSkge1xyXG4gICAgICAgIHN1cGVyLmxheW91dEJvdW5kcyhib3VuZHMsdmlydHVhbERpbWVuc2lvbixyZWRyYXcpXHJcbiAgICAgICAgaWYgKHJlZHJhdykge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RHJhdyhjbGVhcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHNldCBwb2ludGVyUG9zaXRpb24ocG9pbnRlclBvc2l0aW9uOk1hcmtlcnxudWxsKXtcclxuICAgICAgICB0aGlzLl9wb2ludGVyUG9zaXRpb249cG9pbnRlclBvc2l0aW9uXHJcbiAgICAgICAgdGhpcy5kcmF3Q3Vyc29yTGF5ZXIoKVxyXG4gICAgfVxyXG5cclxuICAgIF9zZWxlY3Rpbmc6IFNlbGVjdGlvbnxudWxsID1udWxsO1xyXG4gICAgQElucHV0KCkgc2V0IHNlbGVjdGluZyhzZWxlY3Rpbmc6U2VsZWN0aW9ufCBudWxsKXtcclxuICAgICAgICB0aGlzLl9zZWxlY3Rpbmc9c2VsZWN0aW5nXHJcbiAgICAgICAgdGhpcy5kcmF3QmcoKVxyXG4gICAgICAgIHRoaXMuZHJhd0N1cnNvckxheWVyKClcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VsZWN0aW5nKCk6U2VsZWN0aW9ufG51bGx7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGluZ1xyXG4gICAgfVxyXG5cclxuICAgIF9zZWxlY3Rpb246IFNlbGVjdGlvbnxudWxsID1udWxsXHJcbiAgICBASW5wdXQoKSBzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbjpTZWxlY3Rpb258bnVsbCl7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uPXNlbGVjdGlvbjtcclxuICAgICAgICB0aGlzLnNlbGVjdGluZz1udWxsO1xyXG4gICAgICAgIHRoaXMuZHJhd0JnKClcclxuICAgICAgICB0aGlzLmRyYXdDdXJzb3JMYXllcigpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNlbGVjdGlvbigpOlNlbGVjdGlvbnxudWxse1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3Rpb25TdGFydChtZTpNb3VzZUV2ZW50KXtcclxuICAgICAgICB0aGlzLnNlbGVjdFN0YXJ0WD1tZS5vZmZzZXRYO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGlvbkNvbW1pdChtZTpNb3VzZUV2ZW50KXtcclxuICAgICAgICBsZXQgdnM6Vmlld1NlbGVjdGlvbnxudWxsPW51bGw7XHJcbiAgICAgICAgaWYodGhpcy5zZWxlY3RTdGFydFghPW51bGwpIHtcclxuICAgICAgICAgIHZzPW5ldyBWaWV3U2VsZWN0aW9uKHRoaXMuc2VsZWN0U3RhcnRYLG1lLm9mZnNldFgpXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdFN0YXJ0WD1udWxsO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3QodnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhYnN0cmFjdCBzdGFydERyYXcoY2xlYXI6Ym9vbGVhbik6dm9pZDtcclxuXHJcbiAgICB1cGRhdGVDdXJzb3JDYW52YXMobWU6TW91c2VFdmVudCxzaG93Q3Vyc29yUG9zaXRpb249dHJ1ZSl7XHJcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yQ2FudmFzKSB7XHJcbiAgICAgICAgICAgIGlmIChtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0U3RhcnRYKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb2ludGVyUG9zaXRpb25DaGFuZ2VkKG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RpbmdDaGFuZ2UobmV3IFZpZXdTZWxlY3Rpb24odGhpcy5zZWxlY3RTdGFydFgsIG1lLm9mZnNldFgpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dDdXJzb3JQb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJQb3NpdGlvbkNoYW5nZWQobWUub2Zmc2V0WClcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb2ludGVyUG9zaXRpb25DaGFuZ2VkKG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBwb2ludGVyUG9zaXRpb25FdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPE1hcmtlcj4oKTtcclxuICAgIEBPdXRwdXQoKSBzZWxlY3RpbmdFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdGlvbj4oKTtcclxuICAgIEBPdXRwdXQoKSBzZWxlY3RlZEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uPigpO1xyXG5cclxuXHJcbiAgICBwb2ludGVyUG9zaXRpb25DaGFuZ2VkKHhQb3NpdGlvbjpudW1iZXJ8IG51bGwpe1xyXG4gICAgICAgIGxldCBwb2ludGVyUG9zaXRpb246TWFya2VyfHVuZGVmaW5lZD11bmRlZmluZWQ7XHJcbiAgICAgICAgaWYoeFBvc2l0aW9uKXtcclxuICAgICAgICAgICAgcG9pbnRlclBvc2l0aW9uPW5ldyBNYXJrZXIoKTtcclxuICAgICAgICAgICAgbGV0IHZwWFBvcz10aGlzLnZpZXdQb3J0WFBpeGVsVG9GcmFtZVBvc2l0aW9uKHhQb3NpdGlvbik7XHJcbiAgICAgICAgICAgIGlmKHZwWFBvcyE9bnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcG9pbnRlclBvc2l0aW9uLmZyYW1lUG9zaXRpb24gPXZwWFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvaW50ZXJQb3NpdGlvbkV2ZW50RW1pdHRlci5lbWl0KHBvaW50ZXJQb3NpdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW5nQ2hhbmdlKHZpZXdTZWw6Vmlld1NlbGVjdGlvbnwgbnVsbCk6U2VsZWN0aW9ufHVuZGVmaW5lZCB7XHJcbiAgICAgIGxldCBuczogU2VsZWN0aW9uIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gICAgICBpZiAodmlld1NlbCkge1xyXG4gICAgICAgIGxldCBmcmFtZVN0YXJ0ID0gdGhpcy52aWV3UG9ydFhQaXhlbFRvRnJhbWVQb3NpdGlvbih2aWV3U2VsLnN0YXJ0WClcclxuICAgICAgICBsZXQgZnJhbWVFbmQgPSB0aGlzLnZpZXdQb3J0WFBpeGVsVG9GcmFtZVBvc2l0aW9uKHZpZXdTZWwuZW5kWClcclxuICAgICAgICBpZiAodGhpcy5fYXVkaW9EYXRhSG9sZGVyICYmIGZyYW1lU3RhcnQgIT0gbnVsbCAmJiBmcmFtZUVuZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICBucyA9IG5ldyBTZWxlY3Rpb24odGhpcy5fYXVkaW9EYXRhSG9sZGVyLnNhbXBsZVJhdGUsIGZyYW1lU3RhcnQsIGZyYW1lRW5kKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5zO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGluZ0NoYW5nZSh2aWV3U2VsOlZpZXdTZWxlY3Rpb258IG51bGwpe1xyXG4gICAgICAgIGNvbnN0IG5zPXRoaXMuX3NlbGVjdGluZ0NoYW5nZSh2aWV3U2VsKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGluZ0V2ZW50RW1pdHRlci5lbWl0KG5zKVxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdCh2aWV3U2VsOlZpZXdTZWxlY3Rpb258IG51bGwpe1xyXG4gICAgICAgIGNvbnN0IG5zPXRoaXMuX3NlbGVjdGluZ0NoYW5nZSh2aWV3U2VsKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRXZlbnRFbWl0dGVyLmVtaXQobnMpXHJcbiAgICB9XHJcblxyXG4gICAgdmlld1NlbGVjdGlvbigpOlZpZXdTZWxlY3Rpb258bnVsbHtcclxuICAgICAgbGV0IHZzOlZpZXdTZWxlY3Rpb258bnVsbD1udWxsO1xyXG4gICAgICBsZXQgczpTZWxlY3Rpb258bnVsbD1udWxsO1xyXG4gICAgICBpZih0aGlzLl9zZWxlY3Rpbmcpe1xyXG4gICAgICAgIHM9dGhpcy5fc2VsZWN0aW5nXHJcbiAgICAgIH1lbHNlIGlmKHRoaXMuX3NlbGVjdGlvbil7XHJcbiAgICAgICAgcz10aGlzLl9zZWxlY3Rpb25cclxuICAgICAgfVxyXG4gICAgICBpZihzKXtcclxuICAgICAgICBjb25zdCBzZj1zLnN0YXJ0RnJhbWU7XHJcbiAgICAgICAgY29uc3QgZWY9cy5lbmRGcmFtZTtcclxuICAgICAgICBjb25zdCB4cz10aGlzLmZyYW1lVG9WaWV3UG9ydFhQaXhlbFBvc2l0aW9uKHNmKVxyXG4gICAgICAgIGNvbnN0IHhlPXRoaXMuZnJhbWVUb1ZpZXdQb3J0WFBpeGVsUG9zaXRpb24oZWYpXHJcbiAgICAgICAgICBpZih4cyE9bnVsbCAmJiB4ZSE9bnVsbCkge1xyXG4gICAgICAgICAgICAgIHZzID0gbmV3IFZpZXdTZWxlY3Rpb24oeHMsIHhlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB2cztcclxuICAgIH1cclxuXHJcblxyXG4gIGRyYXdCZygpe1xyXG4gICAgICBpZih0aGlzLmJnQ2FudmFzICYmIHRoaXMuYm91bmRzKSB7XHJcbiAgICAgICAgICB0aGlzLmJnQ2FudmFzLnN0eWxlLmxlZnQgPSBNYXRoLnJvdW5kKHRoaXMuYm91bmRzLnBvc2l0aW9uLmxlZnQpLnRvU3RyaW5nKCkgKyAncHgnO1xyXG4gICAgICAgICAgdGhpcy5iZ0NhbnZhcy53aWR0aCA9IE1hdGgucm91bmQodGhpcy5ib3VuZHMuZGltZW5zaW9uLndpZHRoKTtcclxuICAgICAgICAgIHRoaXMuYmdDYW52YXMuaGVpZ2h0ID0gTWF0aC5yb3VuZCh0aGlzLmJvdW5kcy5kaW1lbnNpb24uaGVpZ2h0KTtcclxuICAgICAgICBsZXQgZzEgPSB0aGlzLmJnQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuICAgICAgICBpZiAoZzEpIHtcclxuICAgICAgICAgIGNvbnN0IHcgPSB0aGlzLmJnQ2FudmFzLndpZHRoO1xyXG4gICAgICAgICAgY29uc3QgaCA9IHRoaXMuYmdDYW52YXMuaGVpZ2h0O1xyXG4gICAgICAgICAgZzEuY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICAgICAgaWYodGhpcy5fYmdDb2xvcikge1xyXG4gICAgICAgICAgICBnMS5maWxsU3R5bGUgPSB0aGlzLl9iZ0NvbG9yO1xyXG4gICAgICAgICAgICBnMS5maWxsUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCB2cyA9IHRoaXMudmlld1NlbGVjdGlvbigpXHJcbiAgICAgICAgICBpZiAodnMpIHtcclxuICAgICAgICAgICAgZzEuZmlsbFN0eWxlID0gdGhpcy5fc2VsZWN0Q29sb3I7XHJcbiAgICAgICAgICAgIGcxLmZpbGxSZWN0KHZzLnN0YXJ0WCwgMCwgdnMud2lkdGgoKSwgaCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgfVxyXG4gICAgZHJhd0N1cnNvckxheWVyKCl7XHJcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yQ2FudmFzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHcgPSB0aGlzLmN1cnNvckNhbnZhcy53aWR0aDtcclxuICAgICAgICAgICAgY29uc3QgaCA9IHRoaXMuY3Vyc29yQ2FudmFzLmhlaWdodDtcclxuICAgICAgICAgICAgY29uc3QgZyA9IHRoaXMuY3Vyc29yQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuICAgICAgICAgICAgaWYoZykge1xyXG4gICAgICAgICAgICAgICAgZy5jbGVhclJlY3QoMCwgMCwgdywgaCk7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLl9wb2ludGVyUG9zaXRpb24pe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmcmFtZVBvcz10aGlzLl9wb2ludGVyUG9zaXRpb24uZnJhbWVQb3NpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGZyYW1lUG9zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB4Vmlld1BvcnRQaXhlbHBvcyA9IHRoaXMuZnJhbWVUb1ZpZXdQb3J0WFBpeGVsUG9zaXRpb24oZnJhbWVQb3MpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Vmlld1BvcnRQaXhlbHBvcykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuZmlsbFN0eWxlID0gJ3llbGxvdyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLnN0cm9rZVN0eWxlID0gJ3llbGxvdyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLmJlZ2luUGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZy5tb3ZlVG8oeFZpZXdQb3J0UGl4ZWxwb3MsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZy5saW5lVG8oeFZpZXdQb3J0UGl4ZWxwb3MsIGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZy5jbG9zZVBhdGgoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLnN0cm9rZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hdWRpb0RhdGFIb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLmZvbnQgPSAnMTRweCBzYW5zLXNlcmlmJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLmZpbGxTdHlsZSA9ICd5ZWxsb3cnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuZmlsbFRleHQoZnJhbWVQb3MudG9TdHJpbmcoKSwgeFZpZXdQb3J0UGl4ZWxwb3MgKyAyLCA1MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG5cclxuXHJcbiJdfQ==
@@ -1,21 +1,18 @@
1
1
  import { Component, Input, ViewChild } from '@angular/core';
2
2
  import { MatCheckbox } from "@angular/material/checkbox";
3
3
  import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/material/icon";
5
- import * as i2 from "@angular/material/checkbox";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/material/icon";
6
6
  import * as i3 from "@angular/material/tooltip";
7
- import * as i4 from "@angular/common";
7
+ import * as i4 from "@angular/material/checkbox";
8
8
  export class AudioDisplayControl {
9
- constructor(ref) {
10
- this.ref = ref;
9
+ constructor() {
11
10
  this.audioClip = null;
12
11
  this.autoplaySelectedCheckbox = null;
13
12
  this.zoomInAction = null;
14
13
  this.zoomOutAction = null;
15
14
  this.status = null;
16
15
  }
17
- ngAfterContentInit() {
18
- }
19
16
  clearSelection() {
20
17
  if (this.audioClip != null) {
21
18
  this.audioClip.selection = null;
@@ -37,8 +34,8 @@ export class AudioDisplayControl {
37
34
  this.status = 'ERROR';
38
35
  }
39
36
  }
40
- AudioDisplayControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioDisplayControl, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
41
- AudioDisplayControl.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AudioDisplayControl, selector: "audio-display-control", inputs: { audioClip: "audioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", playStopAction: "playStopAction", zoomInAction: "zoomInAction", zoomOutAction: "zoomOutAction", zoomFitToPanelAction: "zoomFitToPanelAction", zoomSelectedAction: "zoomSelectedAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction" }, viewQueries: [{ propertyName: "autoplaySelectedCheckbox", first: true, predicate: MatCheckbox, descendants: true, static: true }], ngImport: i0, template: `
37
+ AudioDisplayControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplayControl, deps: [], target: i0.ɵɵFactoryTarget.Component });
38
+ AudioDisplayControl.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioDisplayControl, selector: "audio-display-control", inputs: { audioClip: "audioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", playStopAction: "playStopAction", zoomInAction: "zoomInAction", zoomOutAction: "zoomOutAction", zoomFitToPanelAction: "zoomFitToPanelAction", zoomSelectedAction: "zoomSelectedAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction" }, viewQueries: [{ propertyName: "autoplaySelectedCheckbox", first: true, predicate: MatCheckbox, descendants: true, static: true }], ngImport: i0, template: `
42
39
  <div #controlPanel style="display:flex;flex-direction: row;">
43
40
  <fieldset>
44
41
 
@@ -81,12 +78,10 @@ AudioDisplayControl.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
81
78
  </button>
82
79
 
83
80
  </fieldset>
84
- </div>`, isInline: true, styles: [":host{flex:0}\n"], components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
85
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioDisplayControl, decorators: [{
81
+ </div>`, isInline: true, styles: [":host{flex:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }] });
82
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplayControl, decorators: [{
86
83
  type: Component,
87
- args: [{
88
- selector: 'audio-display-control',
89
- template: `
84
+ args: [{ selector: 'audio-display-control', template: `
90
85
  <div #controlPanel style="display:flex;flex-direction: row;">
91
86
  <fieldset>
92
87
 
@@ -129,15 +124,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
129
124
  </button>
130
125
 
131
126
  </fieldset>
132
- </div>`,
133
- styles: [
134
- `:host {
135
- flex: 0;
136
-
137
- }`
138
- ]
139
- }]
140
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { audioClip: [{
127
+ </div>`, styles: [":host{flex:0}\n"] }]
128
+ }], ctorParameters: function () { return []; }, propDecorators: { audioClip: [{
141
129
  type: Input
142
130
  }], autoplaySelectedCheckbox: [{
143
131
  type: ViewChild,
@@ -159,4 +147,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
159
147
  }], autoPlayOnSelectToggleAction: [{
160
148
  type: Input
161
149
  }] } });
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fZGlzcGxheV9jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3VpL2F1ZGlvX2Rpc3BsYXlfY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUF1QyxLQUFLLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBRTlGLE9BQU8sRUFBQyxXQUFXLEVBQW9CLE1BQU0sNEJBQTRCLENBQUM7Ozs7OztBQTJEekUsTUFBTSxPQUFPLG1CQUFtQjtJQWtCL0IsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFoQi9CLGNBQVMsR0FBaUIsSUFBSSxDQUFDO1FBR2hDLDZCQUF3QixHQUFtQixJQUFJLENBQUM7UUFJL0MsaUJBQVksR0FBb0IsSUFBSSxDQUFDO1FBQ3JDLGtCQUFhLEdBQW9CLElBQUksQ0FBQztRQUkvQyxXQUFNLEdBQWEsSUFBSSxDQUFDO0lBTTFCLENBQUM7SUFFQyxrQkFBa0I7SUFFcEIsQ0FBQztJQUVDLGNBQWM7UUFDVixJQUFHLElBQUksQ0FBQyxTQUFTLElBQUUsSUFBSSxFQUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQTtTQUNoQztJQUNMLENBQUM7SUFFQyxZQUFZO1FBQ1IsSUFBSSxFQUFFLEdBQUMsS0FBSyxDQUFDO1FBQ2IsSUFBRyxJQUFJLENBQUMsU0FBUyxFQUFDO1lBQ2QsRUFBRSxHQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUUsSUFBSSxDQUFDLENBQUM7U0FDdkM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFSCx1QkFBdUIsQ0FBQyxFQUFxQjtRQUN6QyxJQUFJLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtZQUNuQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtTQUN4RDtJQUNMLENBQUM7SUFFSCxLQUFLO1FBQ0osSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDdkIsQ0FBQzs7aUhBaERXLG1CQUFtQjtxR0FBbkIsbUJBQW1CLGllQUlsQixXQUFXLDhEQXZEWjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztlQTJDQzs0RkFRRCxtQkFBbUI7a0JBdkQ5QixTQUFTO21CQUFDO29CQUVULFFBQVEsRUFBRSx1QkFBdUI7b0JBRWpDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztlQTJDQztvQkFDWCxNQUFNLEVBQUU7d0JBQ0o7OztRQUdBO3FCQUFDO2lCQUVOO3dHQUdVLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0Usd0JBQXdCO3NCQUQvQixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRS9CLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csNEJBQTRCO3NCQUFwQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEFmdGVyQ29udGVudEluaXQsIENoYW5nZURldGVjdG9yUmVmLCBJbnB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQge0FjdGlvbn0gZnJvbSBcIi4uLy4uL2FjdGlvbi9hY3Rpb25cIjtcclxuaW1wb3J0IHtNYXRDaGVja2JveCwgTWF0Q2hlY2tib3hDaGFuZ2V9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveFwiO1xyXG5pbXBvcnQge0F1ZGlvQ2xpcH0gZnJvbSBcIi4uL3BlcnNpc3RvclwiO1xyXG5cclxuXHJcbiAgQENvbXBvbmVudCh7XHJcblxyXG4gICAgc2VsZWN0b3I6ICdhdWRpby1kaXNwbGF5LWNvbnRyb2wnLFxyXG5cclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGRpdiAjY29udHJvbFBhbmVsIHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOiByb3c7XCI+XHJcbiAgICAgICAgICAgIDxmaWVsZHNldD5cclxuXHJcbiAgICAgICAgICAgICAgICA8bGVnZW5kPlBsYXk8L2xlZ2VuZD5cclxuXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJwbGF5U3RhcnRBY3Rpb24/LnBlcmZvcm0oKVwiIFtkaXNhYmxlZF09XCJwbGF5U3RhcnRBY3Rpb24/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInBsYXlTdGFydEFjdGlvbj8uZGlzYWJsZWQgPyAnZ3JleScgOiAnZ3JlZW4nXCIgbWF0VG9vbHRpcD1cIlBsYXkgYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnBsYXlfYXJyb3c8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJwbGF5U2VsZWN0aW9uQWN0aW9uPy5wZXJmb3JtKClcIiBbZGlzYWJsZWRdPVwicGxheVNlbGVjdGlvbkFjdGlvbj8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwicGxheVNlbGVjdGlvbkFjdGlvbj8uZGlzYWJsZWQgPyAnZ3JleScgOiAnZ3JlZW4nXCIgbWF0VG9vbHRpcD1cIlBsYXkgc2VsZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnBsYXlfY2lyY2xlX291dGxpbmU8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJwbGF5U3RvcEFjdGlvbj8ucGVyZm9ybSgpXCIgW2Rpc2FibGVkXT1cInBsYXlTdG9wQWN0aW9uPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJwbGF5U3RvcEFjdGlvbj8uZGlzYWJsZWQgPyAnZ3JleScgOiAneWVsbG93J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5zdG9wPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAjYXV0b3BsYXlTZWxlY3Rpb25DaGVja2JveCAoY2hhbmdlKT1cImF1dG9QbGF5U2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIj5BdXRvcGxheSBvbiBzZWxlY3RcclxuICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICA8L2ZpZWxkc2V0PlxyXG4gICAgICAgICAgICA8ZmllbGRzZXQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPGxlZ2VuZD5ab29tPC9sZWdlbmQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ6b29tRml0VG9QYW5lbEFjdGlvbj8ucGVyZm9ybSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInpvb21GaXRUb1BhbmVsQWN0aW9uPy5kaXNhYmxlZFwiPnt7em9vbUZpdFRvUGFuZWxBY3Rpb24/Lm5hbWV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiem9vbU91dEFjdGlvbj8ucGVyZm9ybSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInpvb21PdXRBY3Rpb24/LmRpc2FibGVkXCI+e3t6b29tT3V0QWN0aW9uPy5uYW1lfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInpvb21JbkFjdGlvbj8ucGVyZm9ybSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInpvb21JbkFjdGlvbj8uZGlzYWJsZWRcIj57e3pvb21JbkFjdGlvbj8ubmFtZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ6b29tU2VsZWN0ZWRBY3Rpb24/LnBlcmZvcm0oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ6b29tU2VsZWN0ZWRBY3Rpb24/LmRpc2FibGVkXCI+e3t6b29tU2VsZWN0ZWRBY3Rpb24/Lm5hbWV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2ZpZWxkc2V0PlxyXG4gICAgICAgICAgICA8ZmllbGRzZXQ+XHJcbiAgICAgICAgICAgICAgICA8bGVnZW5kPlNlbGVjdGlvbjwvbGVnZW5kPlxyXG4gICAgICAgICAgICAgICAge3thdWRpb0NsaXA/LnNlbGVjdGlvbj8ubGVmdEZyYW1lfX0gPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImF1ZGlvQ2xpcD8uc2VsZWN0aW9uXCI+dG88L3NwYW4+IHt7YXVkaW9DbGlwPy5zZWxlY3Rpb24/LnJpZ2h0RnJhbWV9fVxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xlYXJTZWxlY3Rpb24oKVwiIFtkaXNhYmxlZF09XCJhdWRpb0NsaXA/LnNlbGVjdGlvbj09bnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJoYXNTZWxlY3Rpb24oKSA/ICdyZWQnIDogJ2dyZXknXCIgbWF0VG9vbHRpcD1cIkNsZWFyIHNlbGVjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDwvZmllbGRzZXQ+XHJcbiAgICAgICAgPC9kaXY+YCxcclxuICAgIHN0eWxlczogW1xyXG4gICAgICAgIGA6aG9zdCB7XHJcbiAgICAgICAgZmxleDogMDtcclxuXHJcbiAgICAgIH1gXVxyXG5cclxuICB9KVxyXG5cdGV4cG9ydCBjbGFzcyBBdWRpb0Rpc3BsYXlDb250cm9sIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XHJcblxyXG4gICAgQElucHV0KCkgYXVkaW9DbGlwOiBBdWRpb0NsaXB8bnVsbD1udWxsO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoTWF0Q2hlY2tib3gsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgICBwcml2YXRlIGF1dG9wbGF5U2VsZWN0ZWRDaGVja2JveDogTWF0Q2hlY2tib3h8bnVsbD1udWxsO1xyXG4gICAgQElucHV0KCkgcGxheVN0YXJ0QWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgcGxheVNlbGVjdGlvbkFjdGlvbjogQWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICAgIEBJbnB1dCgpIHBsYXlTdG9wQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgem9vbUluQWN0aW9uOiBBY3Rpb248dm9pZD58bnVsbD1udWxsO1xyXG4gICAgQElucHV0KCkgem9vbU91dEFjdGlvbjogQWN0aW9uPHZvaWQ+fG51bGw9bnVsbDtcclxuICAgIEBJbnB1dCgpIHpvb21GaXRUb1BhbmVsQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgem9vbVNlbGVjdGVkQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbjogQWN0aW9uPGJvb2xlYW4+fHVuZGVmaW5lZDtcclxuXHQgICBzdGF0dXM6c3RyaW5nfG51bGw9bnVsbDtcclxuXHJcblx0XHRhdWRpbzphbnk7XHJcblxyXG5cdFx0Y29uc3RydWN0b3IocHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcblxyXG5cdFx0fVxyXG5cclxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuXHJcblx0XHR9XHJcblxyXG4gICAgY2xlYXJTZWxlY3Rpb24oKXtcclxuICAgICAgICBpZih0aGlzLmF1ZGlvQ2xpcCE9bnVsbCl7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW9DbGlwLnNlbGVjdGlvbj1udWxsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICAgaGFzU2VsZWN0aW9uKCk6Ym9vbGVhbntcclxuICAgICAgICAgIGxldCBocz1mYWxzZTtcclxuICAgICAgICAgIGlmKHRoaXMuYXVkaW9DbGlwKXtcclxuICAgICAgICAgICAgICBocz0odGhpcy5hdWRpb0NsaXAuc2VsZWN0aW9uIT1udWxsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBocztcclxuICAgICAgfVxyXG5cclxuICAgIGF1dG9QbGF5U2VsZWN0aW9uQ2hhbmdlKGNoOiBNYXRDaGVja2JveENoYW5nZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9QbGF5T25TZWxlY3RUb2dnbGVBY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uLnBlcmZvcm0oY2guY2hlY2tlZClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cdFx0ZXJyb3IoKXtcclxuXHRcdFx0dGhpcy5zdGF0dXMgPSAnRVJST1InO1xyXG5cdFx0fVxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4iXX0=
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fZGlzcGxheV9jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3VpL2F1ZGlvX2Rpc3BsYXlfY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFFekQsT0FBTyxFQUFDLFdBQVcsRUFBb0IsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7O0FBMkR6RSxNQUFNLE9BQU8sbUJBQW1CO0lBa0IvQjtRQWhCVyxjQUFTLEdBQWlCLElBQUksQ0FBQztRQUdoQyw2QkFBd0IsR0FBbUIsSUFBSSxDQUFDO1FBSS9DLGlCQUFZLEdBQW9CLElBQUksQ0FBQztRQUNyQyxrQkFBYSxHQUFvQixJQUFJLENBQUM7UUFJL0MsV0FBTSxHQUFhLElBQUksQ0FBQztJQUlYLENBQUM7SUFFZCxjQUFjO1FBQ1YsSUFBRyxJQUFJLENBQUMsU0FBUyxJQUFFLElBQUksRUFBQztZQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUE7U0FDaEM7SUFDTCxDQUFDO0lBRUMsWUFBWTtRQUNSLElBQUksRUFBRSxHQUFDLEtBQUssQ0FBQztRQUNiLElBQUcsSUFBSSxDQUFDLFNBQVMsRUFBQztZQUNkLEVBQUUsR0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxJQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUgsdUJBQXVCLENBQUMsRUFBcUI7UUFDekMsSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUU7WUFDbkMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUE7U0FDeEQ7SUFDTCxDQUFDO0lBRUgsS0FBSztRQUNKLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBQ3ZCLENBQUM7O2lIQTFDVyxtQkFBbUI7cUdBQW5CLG1CQUFtQixpZUFJbEIsV0FBVyw4REF2RFo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUEyQ0M7NEZBUUQsbUJBQW1CO2tCQXZEOUIsU0FBUzsrQkFFRSx1QkFBdUIsWUFFdkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUEyQ0M7MEVBVUYsU0FBUztzQkFBakIsS0FBSztnQkFHRSx3QkFBd0I7c0JBRC9CLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFL0IsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHtBY3Rpb259IGZyb20gXCIuLi8uLi9hY3Rpb24vYWN0aW9uXCI7XHJcbmltcG9ydCB7TWF0Q2hlY2tib3gsIE1hdENoZWNrYm94Q2hhbmdlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3hcIjtcclxuaW1wb3J0IHtBdWRpb0NsaXB9IGZyb20gXCIuLi9wZXJzaXN0b3JcIjtcclxuXHJcblxyXG4gIEBDb21wb25lbnQoe1xyXG5cclxuICAgIHNlbGVjdG9yOiAnYXVkaW8tZGlzcGxheS1jb250cm9sJyxcclxuXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgI2NvbnRyb2xQYW5lbCBzdHlsZT1cImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjogcm93O1wiPlxyXG4gICAgICAgICAgICA8ZmllbGRzZXQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPGxlZ2VuZD5QbGF5PC9sZWdlbmQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicGxheVN0YXJ0QWN0aW9uPy5wZXJmb3JtKClcIiBbZGlzYWJsZWRdPVwicGxheVN0YXJ0QWN0aW9uPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJwbGF5U3RhcnRBY3Rpb24/LmRpc2FibGVkID8gJ2dyZXknIDogJ2dyZWVuJ1wiIG1hdFRvb2x0aXA9XCJQbGF5IGFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5wbGF5X2Fycm93PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicGxheVNlbGVjdGlvbkFjdGlvbj8ucGVyZm9ybSgpXCIgW2Rpc2FibGVkXT1cInBsYXlTZWxlY3Rpb25BY3Rpb24/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInBsYXlTZWxlY3Rpb25BY3Rpb24/LmRpc2FibGVkID8gJ2dyZXknIDogJ2dyZWVuJ1wiIG1hdFRvb2x0aXA9XCJQbGF5IHNlbGVjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5wbGF5X2NpcmNsZV9vdXRsaW5lPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicGxheVN0b3BBY3Rpb24/LnBlcmZvcm0oKVwiIFtkaXNhYmxlZF09XCJwbGF5U3RvcEFjdGlvbj8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwicGxheVN0b3BBY3Rpb24/LmRpc2FibGVkID8gJ2dyZXknIDogJ3llbGxvdydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+c3RvcDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggI2F1dG9wbGF5U2VsZWN0aW9uQ2hlY2tib3ggKGNoYW5nZSk9XCJhdXRvUGxheVNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCI+QXV0b3BsYXkgb24gc2VsZWN0XHJcbiAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgPC9maWVsZHNldD5cclxuICAgICAgICAgICAgPGZpZWxkc2V0PlxyXG5cclxuICAgICAgICAgICAgICAgIDxsZWdlbmQ+Wm9vbTwvbGVnZW5kPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiem9vbUZpdFRvUGFuZWxBY3Rpb24/LnBlcmZvcm0oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ6b29tRml0VG9QYW5lbEFjdGlvbj8uZGlzYWJsZWRcIj57e3pvb21GaXRUb1BhbmVsQWN0aW9uPy5uYW1lfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInpvb21PdXRBY3Rpb24/LnBlcmZvcm0oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ6b29tT3V0QWN0aW9uPy5kaXNhYmxlZFwiPnt7em9vbU91dEFjdGlvbj8ubmFtZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ6b29tSW5BY3Rpb24/LnBlcmZvcm0oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ6b29tSW5BY3Rpb24/LmRpc2FibGVkXCI+e3t6b29tSW5BY3Rpb24/Lm5hbWV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiem9vbVNlbGVjdGVkQWN0aW9uPy5wZXJmb3JtKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiem9vbVNlbGVjdGVkQWN0aW9uPy5kaXNhYmxlZFwiPnt7em9vbVNlbGVjdGVkQWN0aW9uPy5uYW1lfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9maWVsZHNldD5cclxuICAgICAgICAgICAgPGZpZWxkc2V0PlxyXG4gICAgICAgICAgICAgICAgPGxlZ2VuZD5TZWxlY3Rpb248L2xlZ2VuZD5cclxuICAgICAgICAgICAgICAgIHt7YXVkaW9DbGlwPy5zZWxlY3Rpb24/LmxlZnRGcmFtZX19IDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhdWRpb0NsaXA/LnNlbGVjdGlvblwiPnRvPC9zcGFuPiB7e2F1ZGlvQ2xpcD8uc2VsZWN0aW9uPy5yaWdodEZyYW1lfX1cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsZWFyU2VsZWN0aW9uKClcIiBbZGlzYWJsZWRdPVwiYXVkaW9DbGlwPy5zZWxlY3Rpb249PW51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiaGFzU2VsZWN0aW9uKCkgPyAncmVkJyA6ICdncmV5J1wiIG1hdFRvb2x0aXA9XCJDbGVhciBzZWxlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8L2ZpZWxkc2V0PlxyXG4gICAgICAgIDwvZGl2PmAsXHJcbiAgICBzdHlsZXM6IFtcclxuICAgICAgICBgOmhvc3Qge1xyXG4gICAgICAgIGZsZXg6IDA7XHJcblxyXG4gICAgICB9YF1cclxuXHJcbiAgfSlcclxuXHRleHBvcnQgY2xhc3MgQXVkaW9EaXNwbGF5Q29udHJvbCB7XHJcblxyXG4gICAgQElucHV0KCkgYXVkaW9DbGlwOiBBdWRpb0NsaXB8bnVsbD1udWxsO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoTWF0Q2hlY2tib3gsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgICBwcml2YXRlIGF1dG9wbGF5U2VsZWN0ZWRDaGVja2JveDogTWF0Q2hlY2tib3h8bnVsbD1udWxsO1xyXG4gICAgQElucHV0KCkgcGxheVN0YXJ0QWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgcGxheVNlbGVjdGlvbkFjdGlvbjogQWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICAgIEBJbnB1dCgpIHBsYXlTdG9wQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgem9vbUluQWN0aW9uOiBBY3Rpb248dm9pZD58bnVsbD1udWxsO1xyXG4gICAgQElucHV0KCkgem9vbU91dEFjdGlvbjogQWN0aW9uPHZvaWQ+fG51bGw9bnVsbDtcclxuICAgIEBJbnB1dCgpIHpvb21GaXRUb1BhbmVsQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgem9vbVNlbGVjdGVkQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbjogQWN0aW9uPGJvb2xlYW4+fHVuZGVmaW5lZDtcclxuXHQgICBzdGF0dXM6c3RyaW5nfG51bGw9bnVsbDtcclxuXHJcblx0XHRhdWRpbzphbnk7XHJcblxyXG5cdFx0Y29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAgIGNsZWFyU2VsZWN0aW9uKCl7XHJcbiAgICAgICAgaWYodGhpcy5hdWRpb0NsaXAhPW51bGwpe1xyXG4gICAgICAgICAgICB0aGlzLmF1ZGlvQ2xpcC5zZWxlY3Rpb249bnVsbFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAgIGhhc1NlbGVjdGlvbigpOmJvb2xlYW57XHJcbiAgICAgICAgICBsZXQgaHM9ZmFsc2U7XHJcbiAgICAgICAgICBpZih0aGlzLmF1ZGlvQ2xpcCl7XHJcbiAgICAgICAgICAgICAgaHM9KHRoaXMuYXVkaW9DbGlwLnNlbGVjdGlvbiE9bnVsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gaHM7XHJcbiAgICAgIH1cclxuXHJcbiAgICBhdXRvUGxheVNlbGVjdGlvbkNoYW5nZShjaDogTWF0Q2hlY2tib3hDaGFuZ2UpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbi5wZXJmb3JtKGNoLmNoZWNrZWQpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHRcdGVycm9yKCl7XHJcblx0XHRcdHRoaXMuc3RhdHVzID0gJ0VSUk9SJztcclxuXHRcdH1cclxuXHJcblxyXG4gICAgfVxyXG5cclxuIl19