@net7/boilerplate-muruca 5.5.19 → 5.5.20

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.
@@ -177,35 +177,48 @@ export class MrParallelTextViewerDS extends DataSource {
177
177
  // Attacca al primo caricamento
178
178
  document.addEventListener('pb-end-update', attachListeners);
179
179
  setTimeout(attachListeners, 500);
180
- // Cross-highlight per termini multi-@ana: quando un pb-highlight con key "vox2_vox3"
181
- // emette pb-highlight-on (hover sul termine o sulla tab aperta), ri-emettiamo pb-highlight-on
182
- // per ogni token individuale ("vox2", "vox3") così i termini correlati si evidenziano.
180
+ // Cross-highlight per termini multi-@ana: quando un pb-highlight con doppia key emette pb-highlight-on
181
+ // ri-emette pb-highlight-on per ogni token individuale così i termini correlati si evidenziano.
183
182
  document.addEventListener('pb-highlight-on', (ev) => {
184
183
  const key = ev.detail?.id;
185
184
  const channel = ev.detail?.key;
186
- if (key && key.includes('_')) {
185
+ if (!key || !channel)
186
+ return;
187
+ // Chiave composita (multi-@ana "vox2_vox3", ancore paired "v1a1_v1a2"): spezza e ri-emetti per ogni token su highlight-channel.
188
+ if (key.includes('_')) {
187
189
  key.split('_').forEach((token) => {
188
190
  document.dispatchEvent(new CustomEvent('pb-highlight-on', {
189
191
  detail: { key: channel, id: token, source: ev.detail.source },
190
192
  }));
191
193
  });
194
+ return;
192
195
  }
196
+ if (ev.detail?.source === 'paired-anchor')
197
+ return;
198
+ // Token singolo: se corrisponde a un'ancora paired ri-emette con l'id composito del popup per attivarne l'highlight.
199
+ document.querySelectorAll('[id$="-view"]').forEach((view) => {
200
+ if (!view.shadowRoot)
201
+ return;
202
+ const popup = view.shadowRoot.querySelector(`.tei-app[data-from="${key}"]`)
203
+ || view.shadowRoot.querySelector(`.tei-app[data-to="${key}"]`);
204
+ if (popup && popup.id) {
205
+ document.dispatchEvent(new CustomEvent('pb-highlight-on', {
206
+ detail: { key: channel, id: popup.id, source: 'paired-anchor' },
207
+ }));
208
+ }
209
+ });
193
210
  });
194
211
  }
195
212
  onClick(payload) {
196
- // console.log('🔵 onClick chiamato!', payload);
197
213
  let target = null;
198
214
  const clickPath = payload.path || payload.composedPath();
199
- // console.log('🔵 clickPath:', clickPath);
200
215
  // chiusura apparato con tasto
201
216
  const closeButton = clickPath.find((el) => el.className
202
217
  && typeof el.className === 'string'
203
218
  && el.className.includes('close_app'));
204
219
  if (closeButton) {
205
- // console.log('Click rilevato sul bottone di chiusura:', closeButton);
206
220
  const parentAppItem = closeButton.closest('.tei-app');
207
221
  if (parentAppItem && parentAppItem.style) {
208
- // console.log('Chiusura dell\'elemento tei-app');
209
222
  parentAppItem.style.display = 'none';
210
223
  parentAppItem.style.transform = '';
211
224
  this.resetHighlights();
@@ -224,10 +237,8 @@ export class MrParallelTextViewerDS extends DataSource {
224
237
  && typeof el.className === 'string'
225
238
  && el.className.includes('close_note'));
226
239
  if (closeNoteButton) {
227
- // console.log('Click rilevato sul bottone di chiusura nota:', closeNoteButton);
228
240
  const parentNoteItem = closeNoteButton.closest('.note-item');
229
241
  if (parentNoteItem && parentNoteItem.style) {
230
- // console.log('Chiusura dell\'elemento note-item');
231
242
  parentNoteItem.style.display = 'none';
232
243
  parentNoteItem.style.transform = '';
233
244
  this.resetHighlights();
@@ -256,12 +267,16 @@ export class MrParallelTextViewerDS extends DataSource {
256
267
  return;
257
268
  }
258
269
  if (view.shadowRoot) {
259
- const found = view.shadowRoot.querySelector(`[id="${appId}"]`);
270
+ // Cerca prima per id esatto; se non trovato, cerca popup per ancora apertura (data-from)
271
+ // o ancora di chiusura (data-to)
272
+ const found = view.shadowRoot.querySelector(`[id="${appId}"]`)
273
+ || view.shadowRoot.querySelector(`.tei-app[data-from="${appId}"]`)
274
+ || view.shadowRoot.querySelector(`.tei-app[data-to="${appId}"]`);
260
275
  if (found) {
261
276
  if (!anchorElement) {
262
277
  anchorElement = found;
263
278
  }
264
- const appElement = found.closest('.tei-app');
279
+ const appElement = found.closest('.tei-app') || (found.classList.contains('tei-app') ? found : null);
265
280
  if (appElement && !teiAppElement) {
266
281
  teiAppElement = appElement;
267
282
  }
@@ -274,18 +289,6 @@ export class MrParallelTextViewerDS extends DataSource {
274
289
  const nestedCits = target.querySelectorAll('span.quote');
275
290
  const isOuterCit = nestedCits.length > 0;
276
291
  const segElements = target.querySelectorAll('.seg-outer-inner');
277
- // console.log('[seg-outer-inner] click su:', target.getAttribute('key'), '| isOuterCit:', isOuterCit, '| seg trovati:', segElements.length, '| panel isVisible:', isVisible);
278
- // console.log(' nestedCits keys:', Array.from(nestedCits).map((el) => el.getAttribute('key')));
279
- // segElements.forEach((el, i) => {
280
- // console.log(` seg[${i}] backgroundColor attuale: "${(el as HTMLElement).style.backgroundColor}"`);
281
- // let node = (el as HTMLElement).parentElement;
282
- // const chain = [];
283
- // while (node && chain.length < 6) {
284
- // chain.push(`${node.tagName}${node.className ? '.' + node.className.replace(/\s+/g, '.') : ''}${node.getAttribute('key') ? '[key=' + node.getAttribute('key').substring(0, 20) + ']' : ''}`);
285
- // node = node.parentElement;
286
- // }
287
- // console.log(` seg[${i}] ancestors:`, chain.join(' > '));
288
- // });
289
292
  if (isVisible) {
290
293
  teiAppElement.style.display = 'none';
291
294
  teiAppElement.style.transform = '';
@@ -294,7 +297,6 @@ export class MrParallelTextViewerDS extends DataSource {
294
297
  // Pannello esterno chiuso: ripristina il background dei seg annidati
295
298
  segElements.forEach((el) => {
296
299
  el.style.backgroundColor = '';
297
- // console.log(' [outer CLOSE] seg backgroundColor → ""');
298
300
  });
299
301
  }
300
302
  }
@@ -312,7 +314,6 @@ export class MrParallelTextViewerDS extends DataSource {
312
314
  requestAnimationFrame(() => {
313
315
  segElements.forEach((el) => {
314
316
  el.style.backgroundColor = 'white';
315
- // console.log(' [outer OPEN rAF] seg backgroundColor → "white"');
316
317
  });
317
318
  });
318
319
  }
@@ -321,7 +322,6 @@ export class MrParallelTextViewerDS extends DataSource {
321
322
  requestAnimationFrame(() => {
322
323
  segElements.forEach((el) => {
323
324
  el.style.backgroundColor = '';
324
- // console.log(' [inner OPEN rAF] seg backgroundColor → ""');
325
325
  });
326
326
  });
327
327
  }
@@ -333,7 +333,6 @@ export class MrParallelTextViewerDS extends DataSource {
333
333
  }
334
334
  else if (target && target.getAttribute('type') === 'note_line') {
335
335
  const noteId = target.getAttribute('key');
336
- // console.log('noteId', noteId);
337
336
  const clickedElementPosition = target.getBoundingClientRect().top;
338
337
  const apparatusView = document.querySelector('.n7-text-viewer #apparato-view');
339
338
  const anchorElement = apparatusView
@@ -486,4 +485,4 @@ export class MrParallelTextViewerDS extends DataSource {
486
485
  }, 300);
487
486
  }
488
487
  }
489
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsZWwtdGV4dC12aWV3ZXIuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uNy1ib2lsZXJwbGF0ZS1tdXJ1Y2Evc3JjL2xpYi9kYXRhLXNvdXJjZXMvcGFyYWxsZWwtdGV4dC12aWV3ZXIuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkRBQTZEO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEMsTUFBTSxPQUFPLHNCQUF1QixTQUFRLFVBQVU7SUFHcEQsOEVBQThFO0lBQzlFLHlFQUF5RTtJQUMvRCxTQUFTLENBQUMsSUFBUztRQUMzQixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXZCOzs7Ozs7OztZQVFJO1FBQ0osSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsNEJBQTRCO1lBQzFCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM1RCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDdkIsQ0FBQztnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDdEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzVCLENBQUM7b0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJ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Q0FBQyxTQUFTLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQixDQUFDLEdBQVc7UUFDOUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO1lBRTNHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzlCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDVixNQUFzQixDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7b0JBQ2hGLE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCB7IFBhcmFsbGVsVGV4dFZpZXdlckRhdGEgfSBmcm9tICdAbmV0Ny9jb21wb25lbnRzJztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICdAbmV0Ny9jb3JlJztcblxuZXhwb3J0IGNsYXNzIE1yUGFyYWxsZWxUZXh0Vmlld2VyRFMgZXh0ZW5kcyBEYXRhU291cmNlIHtcbiAgaWQ6IHN0cmluZztcblxuICAvLyBwcm90ZWN0ZWQgdHJhbnNmb3JtKGRhdGE6IFBhcmFsbGVsVGV4dFZpZXdlckRhdGEpOiBQYXJhbGxlbFRleHRWaWV3ZXJEYXRhIHtcbiAgLy8gXl5eXl5eXl5eXl5eXnNlIHZhIGJ1aWxkYXJlIGNvbXBvbmVudHMgLS0tIDE3LTEyLTIwMjVeXl5eXl5eXl5eXl5eXl5eXlxuICBwcm90ZWN0ZWQgdHJhbnNmb3JtKGRhdGE6IGFueSk6IGFueSB7XG4gICAgaWYgKCFkYXRhKSByZXR1cm4gbnVsbDtcblxuICAgIC8qXG4gICAgaWYgKHRoaXMub3B0aW9ucy5mYWNzaW1pbGVPcHRpb25zICYmIGRhdGEuZmFjc2ltaWxlKSB7XG4gICAgICBpZiAoIWRhdGEuZmFjc2ltaWxlLm9wdGlvbnMpIHtcbiAgICAgICAgZGF0YS5mYWNzaW1pbGUub3B0aW9ucyA9IHt9O1xuICAgICAgfVxuICAgICAgT2JqZWN0LmtleXModGhpcy5vcHRpb25zLmZhY3NpbWlsZU9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBkYXRhLmZhY3NpbWlsZS5vcHRpb25zW2tleV0gPSB0aGlzLm9wdGlvbnMuZmFjc2ltaWxlT3B0aW9uc1trZXldO1xuICAgICAgfSk7XG4gICAgfSAqL1xuICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAvLyBHZXN0aW9uZSBkZWxsZSBsaWJPcHRpb25zXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmxpYk9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFkYXRhLmxpYk9wdGlvbnMgfHwgdHlwZW9mIGRhdGEubGliT3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBkYXRhLmxpYk9wdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMubGliT3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKCFkYXRhLmxpYk9wdGlvbnNba2V5XSB8fCB0eXBlb2YgZGF0YS5saWJPcHRpb25zW2tleV0gIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBkYXRhLmxpYk9wdGlvbnNba2V5XSA9IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMubGliT3B0aW9uc1trZXldKS5mb3JFYWNoKChzdWJLZXkpID0+IHtcbiAgICAgICAgICAgIGRhdGEubGliT3B0aW9uc1trZXldW3N1YktleV0gPSB0aGlzLm9wdGlvbnMubGliT3B0aW9uc1trZXldW3N1YktleV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBEZWJ1ZyBsaWJPcHRpb25zXG4gICAgICAvKiAgICAgICBjb25zb2xlLmxvZygnIERFQlVHIGxpYk9wdGlvbnM6Jywge1xuICAgICAgICAndGhpcy5vcHRpb25zLmxpYk9wdGlvbnMnOiB0aGlzLm9wdGlvbnMubGliT3B0aW9ucyxcbiAgICAgICAgJ2RhdGEubGliT3B0aW9ucyc6IGRhdGEubGliT3B0aW9ucyxcbiAgICAgICAgJ2RhdGEubGliT3B0aW9ucy5wYlBhZ2UnOiBkYXRhLmxpYk9wdGlvbnMucGJQYWdlLFxuICAgICAgICAndXJsSWdub3JlJzogZGF0YS5saWJPcHRpb25zLnBiUGFnZT8udXJsSWdub3JlXG4gICAgICB9KTsgKi9cbiAgICAgIH1cbiAgICAgIC8vIEdlc3Rpb25lIGRlbGxhIGdyaWRcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZ3JpZCkge1xuICAgICAgICBkYXRhLmdyaWQgPSB0aGlzLm9wdGlvbnMuZ3JpZDtcbiAgICAgIH1cbiAgICAgIC8vIEdlc3Rpb25lIGRlaSBwYW5lbHNcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucGFuZWxzKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5wYW5lbHMuZm9yRWFjaCgocGFuZWxQcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFuZWxJbmRleCA9IGRhdGEucGFuZWxzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChwYW5lbCkgPT4gcGFuZWwuaWQgPT09IHBhbmVsUHJvcGVydGllcy5pZFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAocGFuZWxJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGRhdGEucGFuZWxzW3BhbmVsSW5kZXhdID0ge1xuICAgICAgICAgICAgICAuLi5kYXRhLnBhbmVsc1twYW5lbEluZGV4XSxcbiAgICAgICAgICAgICAgLi4ucGFuZWxQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIGVuYWJsZUNsaWNrT25FbnRpdGllcywgdG9nZ2xlQ29sdW1uLFxuICAgICAgc2VhcmNoSWQsXG4gICAgICBzZWFyY2hBcGlcbiAgICB9ID0gdGhpcy5vcHRpb25zIHx8IHt9O1xuICAgIGRhdGEudG9nZ2xlQ29sdW1uID0gdG9nZ2xlQ29sdW1uO1xuICAgIC8vIGZvcmNlIHRlaSBwdWJsaXNoZXIgZW5kcG9pbnQgdmFsdWVcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ3BiLXBhZ2UtcmVhZHknLFxuICAgICAgKGV2OiBDdXN0b21FdmVudCkgPT4ge1xuICAgICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXY7XG4gICAgICAgIGRldGFpbC5lbmRwb2ludCA9IGRhdGEuZW5kcG9pbnQ7XG4gICAgICB9LFxuICAgICAgeyBvbmNlOiB0cnVlIH1cbiAgICApO1xuXG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIC8vIGNvbnN0IGlkID0gcGFyYW1zLmdldCgnaWQnKTtcblxuICAgIHRoaXMuc2V0dXBWaWV3Q2xpY2tMaXN0ZW5lcnMoKTtcblxuICAgIC8qICAgICBpZiAoZGF0YS5kb2NzWzBdPy52aWV3ID09PSAncGFnZScgJiYgaWQpIHtcbiAgICAgIGRhdGEuZG9jc1swXS52aWV3ID0gJ2Rpdic7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAncGItZW5kLXVwZGF0ZScsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgncGItdG9nZ2xlJywge1xuICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICB2aWV3OiAncGFnZScsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgYWN0aW9uOiAncmVmcmVzaCcsXG4gICAgICAgICAgICAgICAgICBrZXk6ICd0cmFuc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgncGItdG9nZ2xlJywge1xuICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICB2aWV3OiAnc2luZ2xlJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBhY3Rpb246ICdyZWZyZXNoJyxcbiAgICAgICAgICAgICAgICAgIGtleTogJ2FkZENoYW5uZWwnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdwYi10b2dnbGUnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXc6ICdzaW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgYWN0aW9uOiAncmVmcmVzaCcsXG4gICAgICAgICAgICAgICAgICBrZXk6ICdpbmRleCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBvbmNlOiB0cnVlIH1cbiAgICAgICk7XG4gICAgfSAqL1xuXG4gICAgaWYgKGVuYWJsZUNsaWNrT25FbnRpdGllcykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncGItZW5kLXVwZGF0ZScsIChldjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2Nyb2xsRWxlbWVudHNJbnRvVmlldyhldi5kZXRhaWwsICdjaGFwdGVyJywgJyN2aWV3MScpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyogICAgICAgaWYgKHBhcmFtcy5nZXQoJ2hxJykpIHtcbiAgICAgIGlmIChzZWFyY2hBcGkpIHtcbiAgICAgICAgY29uc3QgeG1sUXVlcnlVcmwgPSBgJHtzZWFyY2hBcGkudXJsXG4gICAgICAgIH0/cmVzb3VyY2UtaWQ9JHtzZWFyY2hBcGlbJ3Jlc291cmNlLWlkJ11cbiAgICAgICAgfSZzZWFyY2hJZD0ke3NlYXJjaElkXG4gICAgICAgIH0meG1sPSR7ZGF0YS5kb2NzWzBdPy54bWxcbiAgICAgICAgfSYke3BhcmFtcy50b1N0cmluZygpfWA7XG5cbiAgICAgICAgZGF0YS5kb2NzWzBdLnVybCA9IHhtbFF1ZXJ5VXJsO1xuICAgICAgICBkYXRhLmRvY3NbMF0ucm9vdFBhdGggPSAnYXBpL21yY3BhcnRzJztcbiAgICAgIH1cbiAgICAgICAgICovXG5cbiAgICBpZiAocGFyYW1zLmdldCgnaHEnKSkge1xuICAgICAgaWYgKHNlYXJjaEFwaSkge1xuICAgICAgICBjb25zdCBtYWluRG9jID0gZGF0YS5kb2NzLmZpbmQoKGRvYykgPT4gZG9jLmlkID09PSAnbWFpbkRvYycpO1xuXG4gICAgICAgIGlmIChtYWluRG9jKSB7XG4gICAgICAgICAgY29uc3QgeG1sUXVlcnlVcmwgPSBgJHtzZWFyY2hBcGkudXJsXG4gICAgICAgICAgfT9yZXNvdXJjZS1pZD0ke3NlYXJjaEFwaVsncmVzb3VyY2UtaWQnXVxuICAgICAgICAgIH0mc2VhcmNoSWQ9JHtzZWFyY2hJZFxuICAgICAgICAgIH0meG1sPSR7bWFpbkRvYy54bWxcbiAgICAgICAgICB9JiR7cGFyYW1zLnRvU3RyaW5nKCl9YDtcblxuICAgICAgICAgIGRhdGEubWFpbkRvYy51cmwgPSB4bWxRdWVyeVVybDtcbiAgICAgICAgICBkYXRhLm1haW5Eb2Mucm9vdFBhdGggPSAnYXBpL21yY3BhcnRzJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwYi1lbmQtdXBkYXRlJywgKGV2OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsRWxlbWVudHNJbnRvVmlldyhldi5kZXRhaWwsICdocScsICcjdHJhbnNjcmlwdGlvbi12aWV3Jyk7XG4gICAgfSk7XG4gICAgLyogICB9ICAqL1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZGlzcGxheUluZGV4KCkge1xuICAgIGlmICh0aGlzLm91dHB1dC50b2dnbGVDb2x1bW4pIHtcbiAgICAgIHRoaXMub3V0cHV0LnRvZ2dsZUNvbHVtbiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm91dHB1dC50b2dnbGVDb2x1bW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldHVwVmlld0NsaWNrTGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IGF0dGFjaExpc3RlbmVycyA9ICgpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB2aWV3cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uNy1wYXJhbGxlbC10ZXh0LXZpZXdlciBbaWQkPVwiLXZpZXdcIl0nKTtcblxuICAgICAgICB2aWV3cy5mb3JFYWNoKCh2aWV3KSA9PiB7XG4gICAgICAgICAgaWYgKHZpZXcuaWQgPT09ICd0cmFuc2NyaXB0aW9uLXZpZXcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZpZXcuc2hhZG93Um9vdCkge1xuICAgICAgICAgICAgaWYgKCh2aWV3IGFzIGFueSkuX19jbGlja0xpc3RlbmVyQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjbGlja0xpc3RlbmVyID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLm9uQ2xpY2soZXZlbnQpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gU2FsdmEgaWwgcmlmZXJpbWVudG8gZSBtYXJjYSBjb21lIGF0dGFjY2F0b1xuICAgICAgICAgICAgKHZpZXcgYXMgYW55KS5fX2NsaWNrTGlzdGVuZXIgPSBjbGlja0xpc3RlbmVyO1xuICAgICAgICAgICAgKHZpZXcgYXMgYW55KS5fX2NsaWNrTGlzdGVuZXJBdHRhY2hlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIEF0dGFjY2EgaWwgbGlzdGVuZXIgaW4gY2FwdHVyZSBwaGFzZSBwZXIgY2F0dHVyYXJlIHR1dHRpIGkgY2xpY2tcbiAgICAgICAgICAgIHZpZXcuc2hhZG93Um9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsaWNrTGlzdGVuZXIsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LCAxMDApO1xuICAgIH07XG5cbiAgICAvLyBBdHRhY2NhIGFsIHByaW1vIGNhcmljYW1lbnRvXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncGItZW5kLXVwZGF0ZScsIGF0dGFjaExpc3RlbmVycyk7XG5cbiAgICBzZXRUaW1lb3V0KGF0dGFjaExpc3RlbmVycywgNTAwKTtcblxuICAgIC8vIENyb3NzLWhpZ2hsaWdodCBwZXIgdGVybWluaSBtdWx0aS1AYW5hOiBxdWFuZG8gdW4gcGItaGlnaGxpZ2h0IGNvbiBrZXkgXCJ2b3gyX3ZveDNcIlxuICAgIC8vIGVtZXR0ZSBwYi1oaWdobGlnaHQtb24gKGhvdmVyIHN1bCB0ZXJtaW5lIG8gc3VsbGEgdGFiIGFwZXJ0YSksIHJpLWVtZXR0aWFtbyBwYi1oaWdobGlnaHQtb25cbiAgICAvLyBwZXIgb2duaSB0b2tlbiBpbmRpdmlkdWFsZSAoXCJ2b3gyXCIsIFwidm94M1wiKSBjb3PDrCBpIHRlcm1pbmkgY29ycmVsYXRpIHNpIGV2aWRlbnppYW5vLlxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BiLWhpZ2hsaWdodC1vbicsIChldjogYW55KSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBldi5kZXRhaWw/LmlkO1xuICAgICAgY29uc3QgY2hhbm5lbCA9IGV2LmRldGFpbD8ua2V5O1xuICAgICAgaWYgKGtleSAmJiBrZXkuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgICBrZXkuc3BsaXQoJ18nKS5mb3JFYWNoKCh0b2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3BiLWhpZ2hsaWdodC1vbicsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBrZXk6IGNoYW5uZWwsIGlkOiB0b2tlbiwgc291cmNlOiBldi5kZXRhaWwuc291cmNlIH0sXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uQ2xpY2socGF5bG9hZCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCfwn5S1IG9uQ2xpY2sgY2hpYW1hdG8hJywgcGF5bG9hZCk7XG4gICAgbGV0IHRhcmdldCA9IG51bGw7XG4gICAgY29uc3QgY2xpY2tQYXRoID0gcGF5bG9hZC5wYXRoIHx8IHBheWxvYWQuY29tcG9zZWRQYXRoKCk7XG4gICAgLy8gY29uc29sZS5sb2coJ/CflLUgY2xpY2tQYXRoOicsIGNsaWNrUGF0aCk7XG5cbiAgICAvLyBjaGl1c3VyYSBhcHBhcmF0byBjb24gdGFzdG9cbiAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGNsaWNrUGF0aC5maW5kKChlbCkgPT4gZWwuY2xhc3NOYW1lXG4gICAgICAmJiB0eXBlb2YgZWwuY2xhc3NOYW1lID09PSAnc3RyaW5nJ1xuICAgICAgJiYgZWwuY2xhc3NOYW1lLmluY2x1ZGVzKCdjbG9zZV9hcHAnKSk7XG5cbiAgICBpZiAoY2xvc2VCdXR0b24pIHtcbiAgICAvLyAgY29uc29sZS5sb2coJ0NsaWNrIHJpbGV2YXRvIHN1bCBib3R0b25lIGRpIGNoaXVzdXJhOicsIGNsb3NlQnV0dG9uKTtcblxuICAgICAgY29uc3QgcGFyZW50QXBwSXRlbSA9IGNsb3NlQnV0dG9uLmNsb3Nlc3QoJy50ZWktYXBwJyk7XG4gICAgICBpZiAocGFyZW50QXBwSXRlbSAmJiBwYXJlbnRBcHBJdGVtLnN0eWxlKSB7XG4gICAgICAgIC8vICAgIGNvbnNvbGUubG9nKCdDaGl1c3VyYSBkZWxsXFwnZWxlbWVudG8gdGVpLWFwcCcpO1xuICAgICAgICBwYXJlbnRBcHBJdGVtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIChwYXJlbnRBcHBJdGVtIGFzIEhUTUxFbGVtZW50KS5zdHlsZS50cmFuc2Zvcm0gPSAnJztcbiAgICAgICAgdGhpcy5yZXNldEhpZ2hsaWdodHMoKTtcbiAgICAgICAgcGF5bG9hZC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGluc2lkZVRlaUFwcCA9IGNsaWNrUGF0aC5maW5kKChlbCkgPT4gZWwuY2xhc3NOYW1lXG4gICAgICAmJiB0eXBlb2YgZWwuY2xhc3NOYW1lID09PSAnc3RyaW5nJ1xuICAgICAgJiYgZWwuY2xhc3NOYW1lLmluY2x1ZGVzKCd0ZWktYXBwJykpO1xuXG4gICAgaWYgKGluc2lkZVRlaUFwcCAmJiAoaW5zaWRlVGVpQXBwIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID09PSAnYmxvY2snKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hpdXN1cmEgbm90ZSBjb24gdGFzdG9cbiAgICBjb25zdCBjbG9zZU5vdGVCdXR0b24gPSBjbGlja1BhdGguZmluZCgoZWwpID0+IGVsLmNsYXNzTmFtZVxuICAgICAgJiYgdHlwZW9mIGVsLmNsYXNzTmFtZSA9PT0gJ3N0cmluZydcbiAgICAgICYmIGVsLmNsYXNzTmFtZS5pbmNsdWRlcygnY2xvc2Vfbm90ZScpKTtcblxuICAgIGlmIChjbG9zZU5vdGVCdXR0b24pIHtcbiAgICAvLyAgY29uc29sZS5sb2coJ0NsaWNrIHJpbGV2YXRvIHN1bCBib3R0b25lIGRpIGNoaXVzdXJhIG5vdGE6JywgY2xvc2VOb3RlQnV0dG9uKTtcblxuICAgICAgY29uc3QgcGFyZW50Tm90ZUl0ZW0gPSBjbG9zZU5vdGVCdXR0b24uY2xvc2VzdCgnLm5vdGUtaXRlbScpO1xuICAgICAgaWYgKHBhcmVudE5vdGVJdGVtICYmIHBhcmVudE5vdGVJdGVtLnN0eWxlKSB7XG4gICAgICAgIC8vICAgIGNvbnNvbGUubG9nKCdDaGl1c3VyYSBkZWxsXFwnZWxlbWVudG8gbm90ZS1pdGVtJyk7XG4gICAgICAgIHBhcmVudE5vdGVJdGVtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIChwYXJlbnROb3RlSXRlbSBhcyBIVE1MRWxlbWVudCkuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICAgIHRoaXMucmVzZXRIaWdobGlnaHRzKCk7XG4gICAgICAgIHBheWxvYWQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGF5bG9hZC5wYXRoKSB7XG4gICAgICB0YXJnZXQgPSBwYXlsb2FkLnBhdGguZmluZChcbiAgICAgICAgKHsgdGFnTmFtZSB9KSA9PiB0YWdOYW1lID09PSAnUEItSElHSExJR0hUJ1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0ID0gcGF5bG9hZC5jb21wb3NlZFBhdGgoKS5maW5kKFxuICAgICAgICAoeyB0YWdOYW1lIH0pID0+IHRhZ05hbWUgPT09ICdQQi1ISUdITElHSFQnXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmdldEF0dHJpYnV0ZSgndHlwZScpID09PSAnYXBwX2xlbScpIHtcbiAgICAgIGNvbnN0IGFwcElkID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgna2V5Jyk7XG5cbiAgICAgIC8vIFBvc2l6aW9uZSBlbGVtZW50byBjbGljY2F0b1xuICAgICAgY29uc3QgY2xpY2tlZEVsZW1lbnRQb3NpdGlvbiA9ICh0YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcblxuICAgICAgY29uc3QgY2xpY2tlZFZpZXcgPSBjbGlja1BhdGguZmluZCgoZWwpID0+IGVsLmlkICYmIGVsLmlkLmVuZHNXaXRoKCctdmlldycpKTtcbiAgICAgIGNvbnN0IGNsaWNrZWRWaWV3SWQgPSBjbGlja2VkVmlldyA/IGNsaWNrZWRWaWV3LmlkIDogbnVsbDtcblxuICAgICAgY29uc3QgYXBwYXJhdHVzVmlldyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uNy1wYXJhbGxlbC10ZXh0LXZpZXdlciBbaWQkPVwiLXZpZXdcIl0nKTtcblxuICAgICAgbGV0IGFuY2hvckVsZW1lbnQgPSBudWxsO1xuICAgICAgbGV0IHRlaUFwcEVsZW1lbnQgPSBudWxsO1xuXG4gICAgICBhcHBhcmF0dXNWaWV3LmZvckVhY2goKHZpZXcpID0+IHtcbiAgICAgICAgLy8gU2FsdGEgbGEgdmlldyBpbiBjdWkgw6ggc3RhdG8gZmF0dG8gaWwgY2xpY2tcbiAgICAgICAgaWYgKHZpZXcuaWQgPT09IGNsaWNrZWRWaWV3SWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmlldy5zaGFkb3dSb290KSB7XG4gICAgICAgICAgY29uc3QgZm91bmQgPSB2aWV3LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2lkPVwiJHthcHBJZH1cIl1gKTtcbiAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgIGlmICghYW5jaG9yRWxlbWVudCkge1xuICAgICAgICAgICAgICBhbmNob3JFbGVtZW50ID0gZm91bmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFwcEVsZW1lbnQgPSBmb3VuZC5jbG9zZXN0KCcudGVpLWFwcCcpO1xuICAgICAgICAgICAgaWYgKGFwcEVsZW1lbnQgJiYgIXRlaUFwcEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgdGVpQXBwRWxlbWVudCA9IGFwcEVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRlaUFwcEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gKHRlaUFwcEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPT09ICdibG9jayc7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5hIHNlIGlsIHBiLWhpZ2hsaWdodCBjbGljY2F0byDDqCB1bmEgY2l0IGVzdGVybmEgKGNvbnRpZW5lIGNpdCBhbm5pZGF0ZSkuXG4gICAgICAgIGNvbnN0IG5lc3RlZENpdHMgPSAodGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCdzcGFuLnF1b3RlJyk7XG4gICAgICAgIGNvbnN0IGlzT3V0ZXJDaXQgPSBuZXN0ZWRDaXRzLmxlbmd0aCA+IDA7XG4gICAgICAgIGNvbnN0IHNlZ0VsZW1lbnRzID0gKHRhcmdldCBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvckFsbCgnLnNlZy1vdXRlci1pbm5lcicpO1xuXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdbc2VnLW91dGVyLWlubmVyXSBjbGljayBzdTonLCB0YXJnZXQuZ2V0QXR0cmlidXRlKCdrZXknKSwgJ3wgaXNPdXRlckNpdDonLCBpc091dGVyQ2l0LCAnfCBzZWcgdHJvdmF0aTonLCBzZWdFbGVtZW50cy5sZW5ndGgsICd8IHBhbmVsIGlzVmlzaWJsZTonLCBpc1Zpc2libGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnICBuZXN0ZWRDaXRzIGtleXM6JywgQXJyYXkuZnJvbShuZXN0ZWRDaXRzKS5tYXAoKGVsKSA9PiBlbC5nZXRBdHRyaWJ1dGUoJ2tleScpKSk7XG4gICAgICAgIC8vIHNlZ0VsZW1lbnRzLmZvckVhY2goKGVsLCBpKSA9PiB7XG4gICAgICAgIC8vICAgY29uc29sZS5sb2coYCAgc2VnWyR7aX1dIGJhY2tncm91bmRDb2xvciBhdHR1YWxlOiBcIiR7KGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3J9XCJgKTtcbiAgICAgICAgLy8gICBsZXQgbm9kZSA9IChlbCBhcyBIVE1MRWxlbWVudCkucGFyZW50RWxlbWVudDtcbiAgICAgICAgLy8gICBjb25zdCBjaGFpbiA9IFtdO1xuICAgICAgICAvLyAgIHdoaWxlIChub2RlICYmIGNoYWluLmxlbmd0aCA8IDYpIHtcbiAgICAgICAgLy8gICAgIGNoYWluLnB1c2goYCR7bm9kZS50YWdOYW1lfSR7bm9kZS5jbGFzc05hbWUgPyAnLicgKyBub2RlLmNsYXNzTmFtZS5yZXBsYWNlKC9cXHMrL2csICcuJykgOiAnJ30ke25vZGUuZ2V0QXR0cmlidXRlKCdrZXknKSA/ICdba2V5PScgKyBub2RlLmdldEF0dHJpYnV0ZSgna2V5Jykuc3Vic3RyaW5nKDAsIDIwKSArICddJyA6ICcnfWApO1xuICAgICAgICAvLyAgICAgbm9kZSA9IG5vZGUucGFyZW50RWxlbWVudDtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vICAgY29uc29sZS5sb2coYCAgc2VnWyR7aX1dIGFuY2VzdG9yczpgLCBjaGFpbi5qb2luKCcgPiAnKSk7XG4gICAgICAgIC8vIH0pO1xuXG4gICAgICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgICAgICAodGVpQXBwRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAodGVpQXBwRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICAgICAgdGhpcy5yZXNldEhpZ2hsaWdodHMoKTtcblxuICAgICAgICAgIGlmIChpc091dGVyQ2l0KSB7XG4gICAgICAgICAgICAvLyBQYW5uZWxsbyBlc3Rlcm5vIGNoaXVzbzogcmlwcmlzdGluYSBpbCBiYWNrZ3JvdW5kIGRlaSBzZWcgYW5uaWRhdGlcbiAgICAgICAgICAgIHNlZ0VsZW1lbnRzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyc7XG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCcgIFtvdXRlciBDTE9TRV0gc2VnIGJhY2tncm91bmRDb2xvciDihpIgXCJcIicpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICh0ZWlBcHBFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcblxuICAgICAgICAgIC8vIHBvc2l6aW9uZSBhdHR1YWxlXG4gICAgICAgICAgY29uc3QgZWxlbWVudFBvc2l0aW9uID0gdGVpQXBwRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG5cbiAgICAgICAgICAvLyBkaWZmZXJlbnphXG4gICAgICAgICAgY29uc3QgcG9zaXRpb25EaWZmZXJlbmNlID0gY2xpY2tlZEVsZW1lbnRQb3NpdGlvbiAtIGVsZW1lbnRQb3NpdGlvbjtcblxuICAgICAgICAgIC8vIHNwb3N0YW1lbnRvXG4gICAgICAgICAgKHRlaUFwcEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7cG9zaXRpb25EaWZmZXJlbmNlfXB4KWA7XG5cbiAgICAgICAgICBpZiAoaXNPdXRlckNpdCkge1xuICAgICAgICAgICAgLy8gUGFubmVsbG8gZXN0ZXJubyBhcGVydG86IGRvcG8gY2hlIHBiLWhpZ2hsaWdodCBzaSBhdHRpdmEgKGdpYWxsbyksXG4gICAgICAgICAgICAvLyBpbXBvc3RhIHNmb25kbyBiaWFuY28gc3VpIHNlZyBjaGUgYXBwYXJ0ZW5nb25vIHNlbWFudGljYW1lbnRlIGFsbGEgY2l0IGVzdGVybmFcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHNlZ0VsZW1lbnRzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnd2hpdGUnO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCcgIFtvdXRlciBPUEVOIHJBRl0gc2VnIGJhY2tncm91bmRDb2xvciDihpIgXCJ3aGl0ZVwiJyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFBhbm5lbGxvIGludGVybm8gYXBlcnRvOiByaXByaXN0aW5hIGV2ZW50dWFsaSBzb3BwcmVzc2lvbmkgc3VpIHNlZyBpbnRlcm5pXG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICBzZWdFbGVtZW50cy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyc7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJyAgW2lubmVyIE9QRU4gckFGXSBzZWcgYmFja2dyb3VuZENvbG9yIOKGkiBcIlwiJyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ3RlaUFwcEVsZW1lbnQgbm9uIHRyb3ZhdG8hJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmdldEF0dHJpYnV0ZSgndHlwZScpID09PSAnbm90ZV9saW5lJykge1xuICAgICAgY29uc3Qgbm90ZUlkID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgna2V5Jyk7XG4gICAgICAvLyBjb25zb2xlLmxvZygnbm90ZUlkJywgbm90ZUlkKTtcblxuICAgICAgY29uc3QgY2xpY2tlZEVsZW1lbnRQb3NpdGlvbiA9ICh0YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcblxuICAgICAgY29uc3QgYXBwYXJhdHVzVmlldyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5uNy10ZXh0LXZpZXdlciAjYXBwYXJhdG8tdmlldycpO1xuXG4gICAgICBjb25zdCBhbmNob3JFbGVtZW50ID0gYXBwYXJhdHVzVmlld1xuICAgICAgICA/LnNoYWRvd1Jvb3RcbiAgICAgICAgPy5xdWVyeVNlbGVjdG9yKGAjJHtub3RlSWR9YCk7XG5cbiAgICAgIGNvbnN0IHRlaU5vdGVFbGVtZW50ID0gYW5jaG9yRWxlbWVudFxuICAgICAgICA/IGFuY2hvckVsZW1lbnQuY2xvc2VzdCgnLm5vdGUtaXRlbScpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGlmICh0ZWlOb3RlRWxlbWVudCkge1xuICAgICAgICAvLyBWZXJpZmljYSBzZSDDqCB2aXNpYmlsZVxuICAgICAgICBjb25zdCBpc1Zpc2libGUgPSAodGVpTm90ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPT09ICdibG9jayc7XG5cbiAgICAgICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgICAgICh0ZWlOb3RlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgICAgICAgICh0ZWlOb3RlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgKHRlaU5vdGVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcblxuICAgICAgICAgIC8vIHBvc2l6aW9uZSBhdHR1YWxlXG4gICAgICAgICAgY29uc3QgZWxlbWVudFBvc2l0aW9uID0gdGVpTm90ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuXG4gICAgICAgICAgLy8gZGlmZmVyZW56YVxuICAgICAgICAgIGNvbnN0IHBvc2l0aW9uRGlmZmVyZW5jZSA9IGNsaWNrZWRFbGVtZW50UG9zaXRpb24gLSBlbGVtZW50UG9zaXRpb247XG5cbiAgICAgICAgICAvLyBzcG9zdGFtZW50b1xuICAgICAgICAgICh0ZWlOb3RlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtwb3NpdGlvbkRpZmZlcmVuY2V9cHgpYDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGFyZ2V0ICYmIHRhcmdldC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ3BhcmFsbGVsX2FuY2hvcicpIHtcbiAgICAgIGNvbnN0IHNlY3Rpb25JZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2tleScpO1xuICAgICAgaWYgKHNlY3Rpb25JZCkge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgncGItdG9nZ2xlJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHsgaWQ6IHNlY3Rpb25JZCB9LFxuICAgICAgICAgICAgICBhY3Rpb246ICdyZWZyZXNoJyxcbiAgICAgICAgICAgICAga2V5OiAndHJhbnNjcmlwdGlvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGFyZ2V0ICYmIHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2tleScpICYmIHRhcmdldC5nZXRBdHRyaWJ1dGUoJ3Njcm9sbHZpZXcnKSAhPT0gbnVsbCkge1xuICAgICAgLy8gUGVyIHNjcm9sbCBzdSBpbmRpY2VcbiAgICAgIGNvbnN0IGtleSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2tleScpO1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICB0aGlzLnNjcm9sbFRvSW5kZXhFbGVtZW50KGtleSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0YXJnZXQgJiYgdGhpcy5vdXRwdXQudG9nZ2xlQ29sdW1uID09PSBmYWxzZSkge1xuICAgICAgaWYgKFxuICAgICAgICB0YXJnZXQuX19rZXlcbiAgICAgICAgJiYgKHRhcmdldC5jbGFzc05hbWUuaW5jbHVkZXMoJ3BlcnNvbicpXG4gICAgICAgICAgfHwgdGFyZ2V0LmNsYXNzTmFtZS5pbmNsdWRlcygncGxhY2UnKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLm91dHB1dC50b2dnbGVDb2x1bW4gPSB0cnVlO1xuICAgICAgICB0aGlzLnNjcm9sbEVsZW1lbnRzSW50b1ZpZXcodGFyZ2V0LCAnZW50aXR5JywgJyN0ZXh0LXZpZXdlci1pbmRleCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB0aGlzLm91dHB1dC50b2dnbGVDb2x1bW4gPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHRhIHR1dHRpIGdsaSBoaWdobGlnaHQgYXR0aXZpIGRlbCB0ZXN0byBcbiAgICovXG4gIHByaXZhdGUgcmVzZXRIaWdobGlnaHRzKCkge1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZCQ9XCItdmlld1wiXScpLmZvckVhY2goKHZpZXc6IGFueSkgPT4ge1xuICAgICAgaWYgKCF2aWV3LnNoYWRvd1Jvb3QpIHJldHVybjtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB2aWV3LnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoJ3ZpZXcnKSB8fCB2aWV3LnNoYWRvd1Jvb3Q7XG5cbiAgICAgIC8vIGNvbnNvbGUubG9nKCdbcmVzZXRIaWdobGlnaHRzXSBwcm9jZXNzaW5nIHZpZXc6Jywgdmlldy5pZCwgJ3wgcGItaGlnaGxpZ2h0czonLCBjb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3BiLWhpZ2hsaWdodCcpLmxlbmd0aCk7XG5cbiAgICAgIC8vIFJpbXVvdmUgaWwgZ2lhbGxvIGUgcmUtYWJpbGl0YSB0dXR0aSBpIHBiLWhpZ2hsaWdodFxuICAgICAgY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdwYi1oaWdobGlnaHQnKS5mb3JFYWNoKChobDogYW55KSA9PiB7XG4gICAgICAgIGhsLl9jbGFzc05hbWUgPSAnaGlnaGxpZ2h0LW9mZic7XG4gICAgICAgIGhsLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgICAgLy8gUmltdW92ZSBjbGFzc2UgJ2Rpc2FibGUnIGRhIHF1YWxzaWFzaSBlbGVtZW50byAocmVzaWR1byBkYSBwbGFpbiByZWFkaW5nIHZpZXcpXG4gICAgICBjb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kaXNhYmxlJykuZm9yRWFjaCgoZWw6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnZGlzYWJsZScpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFJpcHJpc3RpbmEgaWwgYmFja2dyb3VuZCBkZWkgc2VnLW91dGVyLWlubmVyIChwb3RyZWJiZSBlc3NlcmUgcmltYXN0byAnd2hpdGUnXG4gICAgICBjb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZWctb3V0ZXItaW5uZXInKS5mb3JFYWNoKChlbDogRWxlbWVudCkgPT4ge1xuICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcnO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2aWV3TGlzdGVuZXJVcGRhdGUoKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdwYi1zdGFydC11cGRhdGUnLFxuICAgICAgZnVuY3Rpb24gX2xpc3RlbmVyKCkge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwYi1zdGFydC11cGRhdGUnLCBfbGlzdGVuZXIsIHRydWUpO1xuICAgICAgfSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG5cbiAgY2hhbmdlVmlldyh2aWV3LCByZWZyZXNoKSB7XG4gICAgc2V0VGltZW91dChcbiAgICAgICh2LCByKSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBURVNUIENIQU5HRSBWSUVXOiAke3ZpZXd9YCk7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdwYi10b2dnbGUnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHZpZXc6IHYsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFjdGlvbjogciA/ICdyZWZyZXNoJyA6ICcnLFxuICAgICAgICAgICAgICBrZXk6ICd0cmFuc2NyaXB0aW9uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICA2MDAsXG4gICAgICB2aWV3LFxuICAgICAgcmVmcmVzaFxuICAgICk7XG4gIH1cblxuICBzY3JvbGxFbGVtZW50c0ludG9WaWV3KHRhcmdldCwgdHlwZSwgdmlldykge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbGV0IGVsZW1lbnQ6IGFueTtcbiAgICAgIGlmICh0eXBlID09PSAnY2hhcHRlcicpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRvY3VtZW50XG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvcignLm43LXRleHQtdmlld2VyICN2aWV3MCcpXG4gICAgICAgICAgICAuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdwYi1oaWdobGlnaHQnKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBoaWdobGlnaHQgPSBkb2N1bWVudFxuICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5uNy10ZXh0LXZpZXdlciAjdmlldzAnKVxuICAgICAgICAgICAgLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgncGItaGlnaGxpZ2h0Jyk7XG5cbiAgICAgICAgICBjb25zdCBoaWdobGlnaHRJZCA9IGhpZ2hsaWdodFtoaWdobGlnaHQubGVuZ3RoIC0gMV0uaWQ7IC8vIHMueFxuXG4gICAgICAgICAgY29uc3QgZnJhZ21lbnROdW1iZXIgPSBoaWdobGlnaHRJZC5yZXBsYWNlKCcuJywgJ1xcXFwuJyk7XG5cbiAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnRcbiAgICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKHZpZXcpXG4gICAgICAgICAgICAuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGAjJHtmcmFnbWVudE51bWJlcn1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnZW50aXR5Jykge1xuICAgICAgICBjb25zdCBrZXkgPSB0YXJnZXQuX19rZXk7XG4gICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudFxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKGAubjctdGV4dC12aWV3ZXIgJHt2aWV3fWApXG4gICAgICAgICAgLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgIyR7a2V5fWApO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnaHEnKSB7XG4gICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudFxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKGAubjctcGFyYWxsZWwtdGV4dC12aWV3ZXIgJHt2aWV3fWApXG4gICAgICAgICAgLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLnRlaS1lbScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAubjctcGFyYWxsZWwtdGV4dC12aWV3ZXIgJHt2aWV3fWApO1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCA9IGVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgfVxuICAgIH0sIDYwMCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsYSBhbGwnZWxlbWVudG8gY29ycmlzcG9uZGVudGUgbmVsbCdpbmRpY2VcbiAgICovXG4gIHNjcm9sbFRvSW5kZXhFbGVtZW50KGtleTogc3RyaW5nKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBjbGVhbktleSA9IGtleS5yZXBsYWNlKCcjJywgJycpO1xuICAgICAgY29uc3Qgdmlld3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubjctcGFyYWxsZWwtdGV4dC12aWV3ZXIgW2lkJD1cIi12aWV3XCJdOm5vdCgjdHJhbnNjcmlwdGlvbi12aWV3KScpO1xuXG4gICAgICBBcnJheS5mcm9tKHZpZXdzKS5zb21lKCh2aWV3KSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHZpZXcuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgIyR7Y2xlYW5LZXl9YCk7XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAodGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH0sIDMwMCk7XG4gIH1cbn1cbiJdfQ==
488
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsZWwtdGV4dC12aWV3ZXIuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uNy1ib2lsZXJwbGF0ZS1tdXJ1Y2Evc3JjL2xpYi9kYXRhLXNvdXJjZXMvcGFyYWxsZWwtdGV4dC12aWV3ZXIuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkRBQTZEO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEMsTUFBTSxPQUFPLHNCQUF1QixTQUFRLFVBQVU7SUFHcEQsOEVBQThFO0lBQzlFLHlFQUF5RTtJQUMvRCxTQUFTLENBQUMsSUFBUztRQUMzQixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXZCOzs7Ozs7OztZQVFJO1FBQ0osSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsNEJBQTRCO1lBQzFCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM1RCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDdkIsQ0FBQztnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDdEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzVCLENBQUM7b0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO3dCQUMzRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0RSxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDSCxtQkFBbUI7Z0JBQ3JCOzs7OztzQkFLTTtZQUNOLENBQUM7WUFDRCxzQkFBc0I7WUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hDLENBQUM7WUFDRCxzQkFBc0I7WUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtvQkFDOUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQ3RDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLGVBQWUsQ0FBQyxFQUFFLENBQzNDLENBQUM7b0JBRUYsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRzs0QkFDeEIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQzs0QkFDMUIsR0FBRyxlQUFlO3lCQUNuQixDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sRUFDSixxQkFBcUIsRUFBRSxZQUFZLEVBQ25DLFFBQVEsRUFDUixTQUFTLEVBQ1YsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxxQ0FBcUM7UUFDckMsUUFBUSxDQUFDLGdCQUFnQixDQUN2QixlQUFlLEVBQ2YsQ0FBQyxFQUFlLEVBQUUsRUFBRTtZQUNsQixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNsQyxDQUFDLEVBQ0QsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQ2YsQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0QsK0JBQStCO1FBRS9CLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztZQTRDSTtRQUVKLElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUMxQixRQUFRLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLENBQUMsRUFBTyxFQUFFLEVBQUU7Z0JBQ3JELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM5RCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRDs7Ozs7Ozs7Ozs7ZUFXTztRQUVQLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JCLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUM7Z0JBRTlELElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osTUFBTSxXQUFXLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FDakMsZ0JBQWdCLFNBQVMsQ0FBQyxhQUFhLENBQ3ZDLGFBQWEsUUFDYixRQUFRLE9BQU8sQ0FBQyxHQUNoQixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO29CQUV4QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7b0JBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztnQkFDekMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxDQUFDLEVBQU8sRUFBRSxFQUFFO1lBQ3JELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ25DLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLE1BQU0sZUFBZSxHQUFHLEdBQUcsRUFBRTtZQUMzQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO2dCQUVsRixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ3JCLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxvQkFBb0IsRUFBRSxDQUFDO3dCQUNyQyxPQUFPO29CQUNULENBQUM7b0JBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBQ3BCLElBQUssSUFBWSxDQUFDLHVCQUF1QixFQUFFLENBQUM7NEJBQzFDLE9BQU87d0JBQ1QsQ0FBQzt3QkFFRCxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQVksRUFBRSxFQUFFOzRCQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUN0QixDQUFDLENBQUM7d0JBRUYsOENBQThDO3dCQUM3QyxJQUFZLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQzt3QkFDN0MsSUFBWSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQzt3QkFFN0MsbUVBQW1FO3dCQUNuRSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2pFLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDVixDQUFDLENBQUM7UUFFRiwrQkFBK0I7UUFDL0IsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUU1RCxVQUFVLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRWpDLHdHQUF3RztRQUN4RyxrR0FBa0c7UUFDbEcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLENBQUMsRUFBTyxFQUFFLEVBQUU7WUFDdkQsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDMUIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7WUFDL0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUU3QixnSUFBZ0k7WUFDaEksSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7b0JBQ3ZDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsaUJBQWlCLEVBQUU7d0JBQ3hELE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7cUJBQzlELENBQUMsQ0FBQyxDQUFDO2dCQUNOLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sS0FBSyxlQUFlO2dCQUFFLE9BQU87WUFFbEQscUhBQXFIO1lBQ3JILFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO29CQUFFLE9BQU87Z0JBQzdCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQzt1QkFDdEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDdEIsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRTt3QkFDeEQsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFO3FCQUNoRSxDQUFDLENBQUMsQ0FBQztnQkFDTixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBTztRQUNiLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV6RCw4QkFBOEI7UUFDOUIsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVM7ZUFDbEQsT0FBTyxFQUFFLENBQUMsU0FBUyxLQUFLLFFBQVE7ZUFDaEMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUV6QyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdEQsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN6QyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Z0JBQ3BDLGFBQTZCLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUMxQixPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUztlQUNuRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLEtBQUssUUFBUTtlQUNoQyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRXZDLElBQUksWUFBWSxJQUFLLFlBQTRCLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUM1RSxPQUFPO1FBQ1QsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUztlQUN0RCxPQUFPLEVBQUUsQ0FBQyxTQUFTLEtBQUssUUFBUTtlQUNoQyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBRTFDLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM3RCxJQUFJLGNBQWMsSUFBSSxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztnQkFDckMsY0FBOEIsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztnQkFDckQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixPQUFPLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQzFCLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDeEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssY0FBYyxDQUM1QyxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDbEMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssY0FBYyxDQUM1QyxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUV6Qyw4QkFBOEI7WUFDOUIsTUFBTSxzQkFBc0IsR0FBSSxNQUFzQixDQUFDLHFCQUFxQixFQUFFLENBQUMsR0FBRyxDQUFDO1lBRW5GLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM3RSxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUUxRCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsd0NBQXdDLENBQUMsQ0FBQztZQUUxRixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBRXpCLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDN0IsOENBQThDO2dCQUM5QyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssYUFBYSxFQUFFLENBQUM7b0JBQzlCLE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDcEIseUZBQXlGO29CQUN6RixpQ0FBaUM7b0JBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUM7MkJBQ3pELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLHVCQUF1QixLQUFLLElBQUksQ0FBQzsyQkFDL0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEtBQUssSUFBSSxDQUFDLENBQUM7b0JBQ25FLElBQUksS0FBSyxFQUFFLENBQUM7d0JBQ1YsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDOzRCQUNuQixhQUFhLEdBQUcsS0FBSyxDQUFDO3dCQUN4QixDQUFDO3dCQUVELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDckcsSUFBSSxVQUFVLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzs0QkFDakMsYUFBYSxHQUFHLFVBQVUsQ0FBQzt3QkFDN0IsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sU0FBUyxHQUFJLGFBQTZCLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUM7Z0JBRTNFLG1GQUFtRjtnQkFDbkYsTUFBTSxVQUFVLEdBQUksTUFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDMUUsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sV0FBVyxHQUFJLE1BQXNCLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFFakYsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDYixhQUE2QixDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO29CQUNyRCxhQUE2QixDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO29CQUNwRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBRXZCLElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ2YscUVBQXFFO3dCQUNyRSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7NEJBQ3hCLEVBQWtCLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7d0JBQ2pELENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNMLGFBQTZCLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7b0JBRXZELG9CQUFvQjtvQkFDcEIsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsR0FBRyxDQUFDO29CQUVsRSxhQUFhO29CQUNiLE1BQU0sa0JBQWtCLEdBQUcsc0JBQXNCLEdBQUcsZUFBZSxDQUFDO29CQUVwRSxjQUFjO29CQUNiLGFBQTZCLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxjQUFjLGtCQUFrQixLQUFLLENBQUM7b0JBRXZGLElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ2YscUVBQXFFO3dCQUNyRSxpRkFBaUY7d0JBQ2pGLHFCQUFxQixDQUFDLEdBQUcsRUFBRTs0QkFDekIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO2dDQUN4QixFQUFrQixDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDOzRCQUN0RCxDQUFDLENBQUMsQ0FBQzt3QkFDTCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sNkVBQTZFO3dCQUM3RSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7NEJBQ3pCLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQ0FDeEIsRUFBa0IsQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQzs0QkFDakQsQ0FBQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUM3QyxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDakUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUxQyxNQUFNLHNCQUFzQixHQUFJLE1BQXNCLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLENBQUM7WUFFbkYsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBRS9FLE1BQU0sYUFBYSxHQUFHLGFBQWE7Z0JBQ2pDLEVBQUUsVUFBVTtnQkFDWixFQUFFLGFBQWEsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFFaEMsTUFBTSxjQUFjLEdBQUcsYUFBYTtnQkFDbEMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO2dCQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ1QsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIseUJBQXlCO2dCQUN6QixNQUFNLFNBQVMsR0FBSSxjQUE4QixDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDO2dCQUU1RSxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNiLGNBQThCLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7b0JBRXRELGNBQThCLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7Z0JBQ3ZELENBQUM7cUJBQU0sQ0FBQztvQkFDTCxjQUE4QixDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO29CQUV4RCxvQkFBb0I7b0JBQ3BCLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsQ0FBQztvQkFFbkUsYUFBYTtvQkFDYixNQUFNLGtCQUFrQixHQUFHLHNCQUFzQixHQUFHLGVBQWUsQ0FBQztvQkFFcEUsY0FBYztvQkFDYixjQUE4QixDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsY0FBYyxrQkFBa0IsS0FBSyxDQUFDO2dCQUMxRixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLGlCQUFpQixFQUFFLENBQUM7WUFDdkUsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLFFBQVEsQ0FBQyxhQUFhLENBQ3BCLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRTtvQkFDM0IsTUFBTSxFQUFFO3dCQUNOLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUU7d0JBQzdCLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixHQUFHLEVBQUUsZUFBZTtxQkFDckI7b0JBQ0QsT0FBTyxFQUFFLElBQUk7aUJBQ2QsQ0FBQyxDQUNILENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM5Rix1QkFBdUI7WUFDdkIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNSLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3hELElBQ0UsTUFBTSxDQUFDLEtBQUs7bUJBQ1QsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7dUJBQ2xDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQ3hDLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3RFLENBQUM7UUFDSCxDQUFDOztZQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlO1FBQ3JCLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUMvRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7Z0JBQUUsT0FBTztZQUM3QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO1lBRTFFLG1JQUFtSTtZQUVuSSxzREFBc0Q7WUFDdEQsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFO2dCQUMzRCxFQUFFLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQztnQkFDaEMsRUFBRSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxpRkFBaUY7WUFDakYsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQVcsRUFBRSxFQUFFO2dCQUMzRCxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztZQUVILGdGQUFnRjtZQUNoRixPQUFPLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFXLEVBQUUsRUFBRTtnQkFDbEUsRUFBa0IsQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixRQUFRLENBQUMsZ0JBQWdCLENBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLFNBQVM7WUFDaEIsUUFBUSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxDQUFDLEVBQ0QsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPO1FBQ3RCLFVBQVUsQ0FDUixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNQLDRDQUE0QztZQUM1QyxRQUFRLENBQUMsYUFBYSxDQUNwQixJQUFJLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzNCLE1BQU0sRUFBRTtvQkFDTixVQUFVLEVBQUU7d0JBQ1YsSUFBSSxFQUFFLENBQUM7cUJBQ1I7b0JBQ0QsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUMxQixHQUFHLEVBQUUsZUFBZTtpQkFDckI7YUFDRixDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsRUFDRCxHQUFHLEVBQ0gsSUFBSSxFQUNKLE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVELHNCQUFzQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSTtRQUN2QyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxPQUFZLENBQUM7WUFDakIsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3ZCLElBQ0UsUUFBUTtxQkFDTCxhQUFhLENBQUMsd0JBQXdCLENBQUM7cUJBQ3ZDLFVBQVUsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEVBQzNDLENBQUM7b0JBQ0QsTUFBTSxTQUFTLEdBQUcsUUFBUTt5QkFDdkIsYUFBYSxDQUFDLHdCQUF3QixDQUFDO3lCQUN2QyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBRS9DLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU07b0JBRTlELE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUV2RCxPQUFPLEdBQUcsUUFBUTt5QkFDZixhQUFhLENBQUMsSUFBSSxDQUFDO3lCQUNuQixVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksY0FBYyxFQUFFLENBQUMsQ0FBQztnQkFDcEQsQ0FBQztZQUNILENBQUM7aUJBQU0sSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ3pCLE9BQU8sR0FBRyxRQUFRO3FCQUNmLGFBQWEsQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUM7cUJBQ3hDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7aUJBQU0sSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sR0FBRyxRQUFRO3FCQUNmLGFBQWEsQ0FBQyw0QkFBNEIsSUFBSSxFQUFFLENBQUM7cUJBQ2pELFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekMsQ0FBQztZQUVELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsNEJBQTRCLElBQUksRUFBRSxDQUFDLENBQUM7WUFDN0UsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixTQUFTLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQixDQUFDLEdBQVc7UUFDOUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO1lBRTNHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzlCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDVixNQUFzQixDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7b0JBQ2hGLE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCB7IFBhcmFsbGVsVGV4dFZpZXdlckRhdGEgfSBmcm9tICdAbmV0Ny9jb21wb25lbnRzJztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICdAbmV0Ny9jb3JlJztcblxuZXhwb3J0IGNsYXNzIE1yUGFyYWxsZWxUZXh0Vmlld2VyRFMgZXh0ZW5kcyBEYXRhU291cmNlIHtcbiAgaWQ6IHN0cmluZztcblxuICAvLyBwcm90ZWN0ZWQgdHJhbnNmb3JtKGRhdGE6IFBhcmFsbGVsVGV4dFZpZXdlckRhdGEpOiBQYXJhbGxlbFRleHRWaWV3ZXJEYXRhIHtcbiAgLy8gXl5eXl5eXl5eXl5eXnNlIHZhIGJ1aWxkYXJlIGNvbXBvbmVudHMgLS0tIDE3LTEyLTIwMjVeXl5eXl5eXl5eXl5eXl5eXlxuICBwcm90ZWN0ZWQgdHJhbnNmb3JtKGRhdGE6IGFueSk6IGFueSB7XG4gICAgaWYgKCFkYXRhKSByZXR1cm4gbnVsbDtcblxuICAgIC8qXG4gICAgaWYgKHRoaXMub3B0aW9ucy5mYWNzaW1pbGVPcHRpb25zICYmIGRhdGEuZmFjc2ltaWxlKSB7XG4gICAgICBpZiAoIWRhdGEuZmFjc2ltaWxlLm9wdGlvbnMpIHtcbiAgICAgICAgZGF0YS5mYWNzaW1pbGUub3B0aW9ucyA9IHt9O1xuICAgICAgfVxuICAgICAgT2JqZWN0LmtleXModGhpcy5vcHRpb25zLmZhY3NpbWlsZU9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBkYXRhLmZhY3NpbWlsZS5vcHRpb25zW2tleV0gPSB0aGlzLm9wdGlvbnMuZmFjc2ltaWxlT3B0aW9uc1trZXldO1xuICAgICAgfSk7XG4gICAgfSAqL1xuICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAvLyBHZXN0aW9uZSBkZWxsZSBsaWJPcHRpb25zXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmxpYk9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFkYXRhLmxpYk9wdGlvbnMgfHwgdHlwZW9mIGRhdGEubGliT3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBkYXRhLmxpYk9wdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMubGliT3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKCFkYXRhLmxpYk9wdGlvbnNba2V5XSB8fCB0eXBlb2YgZGF0YS5saWJPcHRpb25zW2tleV0gIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBkYXRhLmxpYk9wdGlvbnNba2V5XSA9IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMubGliT3B0aW9uc1trZXldKS5mb3JFYWNoKChzdWJLZXkpID0+IHtcbiAgICAgICAgICAgIGRhdGEubGliT3B0aW9uc1trZXldW3N1YktleV0gPSB0aGlzLm9wdGlvbnMubGliT3B0aW9uc1trZXldW3N1YktleV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBEZWJ1ZyBsaWJPcHRpb25zXG4gICAgICAvKiAgICAgICBjb25zb2xlLmxvZygnIERFQlVHIGxpYk9wdGlvbnM6Jywge1xuICAgICAgICAndGhpcy5vcHRpb25zLmxpYk9wdGlvbnMnOiB0aGlzLm9wdGlvbnMubGliT3B0aW9ucyxcbiAgICAgICAgJ2RhdGEubGliT3B0aW9ucyc6IGRhdGEubGliT3B0aW9ucyxcbiAgICAgICAgJ2RhdGEubGliT3B0aW9ucy5wYlBhZ2UnOiBkYXRhLmxpYk9wdGlvbnMucGJQYWdlLFxuICAgICAgICAndXJsSWdub3JlJzogZGF0YS5saWJPcHRpb25zLnBiUGFnZT8udXJsSWdub3JlXG4gICAgICB9KTsgKi9cbiAgICAgIH1cbiAgICAgIC8vIEdlc3Rpb25lIGRlbGxhIGdyaWRcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZ3JpZCkge1xuICAgICAgICBkYXRhLmdyaWQgPSB0aGlzLm9wdGlvbnMuZ3JpZDtcbiAgICAgIH1cbiAgICAgIC8vIEdlc3Rpb25lIGRlaSBwYW5lbHNcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucGFuZWxzKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5wYW5lbHMuZm9yRWFjaCgocGFuZWxQcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFuZWxJbmRleCA9IGRhdGEucGFuZWxzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChwYW5lbCkgPT4gcGFuZWwuaWQgPT09IHBhbmVsUHJvcGVydGllcy5pZFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAocGFuZWxJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGRhdGEucGFuZWxzW3BhbmVsSW5kZXhdID0ge1xuICAgICAgICAgICAgICAuLi5kYXRhLnBhbmVsc1twYW5lbEluZGV4XSxcbiAgICAgICAgICAgICAgLi4ucGFuZWxQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIGVuYWJsZUNsaWNrT25FbnRpdGllcywgdG9nZ2xlQ29sdW1uLFxuICAgICAgc2VhcmNoSWQsXG4gICAgICBzZWFyY2hBcGlcbiAgICB9ID0gdGhpcy5vcHRpb25zIHx8IHt9O1xuICAgIGRhdGEudG9nZ2xlQ29sdW1uID0gdG9nZ2xlQ29sdW1uO1xuICAgIC8vIGZvcmNlIHRlaSBwdWJsaXNoZXIgZW5kcG9pbnQgdmFsdWVcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ3BiLXBhZ2UtcmVhZHknLFxuICAgICAgKGV2OiBDdXN0b21FdmVudCkgPT4ge1xuICAgICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXY7XG4gICAgICAgIGRldGFpbC5lbmRwb2ludCA9IGRhdGEuZW5kcG9pbnQ7XG4gICAgICB9LFxuICAgICAgeyBvbmNlOiB0cnVlIH1cbiAgICApO1xuXG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIC8vIGNvbnN0IGlkID0gcGFyYW1zLmdldCgnaWQnKTtcblxuICAgIHRoaXMuc2V0dXBWaWV3Q2xpY2tMaXN0ZW5lcnMoKTtcblxuICAgIC8qICAgICBpZiAoZGF0YS5kb2NzWzBdPy52aWV3ID09PSAncGFnZScgJiYgaWQpIHtcbiAgICAgIGRhdGEuZG9jc1swXS52aWV3ID0gJ2Rpdic7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAncGItZW5kLXVwZGF0ZScsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgncGItdG9nZ2xlJywge1xuICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICB2aWV3OiAncGFnZScsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgYWN0aW9uOiAncmVmcmVzaCcsXG4gICAgICAgICAgICAgICAgICBrZXk6ICd0cmFuc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgncGItdG9nZ2xlJywge1xuICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICB2aWV3OiAnc2luZ2xlJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBhY3Rpb246ICdyZWZyZXNoJyxcbiAgICAgICAgICAgICAgICAgIGtleTogJ2FkZENoYW5uZWwnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdwYi10b2dnbGUnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXc6ICdzaW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgYWN0aW9uOiAncmVmcmVzaCcsXG4gICAgICAgICAgICAgICAgICBrZXk6ICdpbmRleCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBvbmNlOiB0cnVlIH1cbiAgICAgICk7XG4gICAgfSAqL1xuXG4gICAgaWYgKGVuYWJsZUNsaWNrT25FbnRpdGllcykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncGItZW5kLXVwZGF0ZScsIChldjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2Nyb2xsRWxlbWVudHNJbnRvVmlldyhldi5kZXRhaWwsICdjaGFwdGVyJywgJyN2aWV3MScpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyogICAgICAgaWYgKHBhcmFtcy5nZXQoJ2hxJykpIHtcbiAgICAgIGlmIChzZWFyY2hBcGkpIHtcbiAgICAgICAgY29uc3QgeG1sUXVlcnlVcmwgPSBgJHtzZWFyY2hBcGkudXJsXG4gICAgICAgIH0/cmVzb3VyY2UtaWQ9JHtzZWFyY2hBcGlbJ3Jlc291cmNlLWlkJ11cbiAgICAgICAgfSZzZWFyY2hJZD0ke3NlYXJjaElkXG4gICAgICAgIH0meG1sPSR7ZGF0YS5kb2NzWzBdPy54bWxcbiAgICAgICAgfSYke3BhcmFtcy50b1N0cmluZygpfWA7XG5cbiAgICAgICAgZGF0YS5kb2NzWzBdLnVybCA9IHhtbFF1ZXJ5VXJsO1xuICAgICAgICBkYXRhLmRvY3NbMF0ucm9vdFBhdGggPSAnYXBpL21yY3BhcnRzJztcbiAgICAgIH1cbiAgICAgICAgICovXG5cbiAgICBpZiAocGFyYW1zLmdldCgnaHEnKSkge1xuICAgICAgaWYgKHNlYXJjaEFwaSkge1xuICAgICAgICBjb25zdCBtYWluRG9jID0gZGF0YS5kb2NzLmZpbmQoKGRvYykgPT4gZG9jLmlkID09PSAnbWFpbkRvYycpO1xuXG4gICAgICAgIGlmIChtYWluRG9jKSB7XG4gICAgICAgICAgY29uc3QgeG1sUXVlcnlVcmwgPSBgJHtzZWFyY2hBcGkudXJsXG4gICAgICAgICAgfT9yZXNvdXJjZS1pZD0ke3NlYXJjaEFwaVsncmVzb3VyY2UtaWQnXVxuICAgICAgICAgIH0mc2VhcmNoSWQ9JHtzZWFyY2hJZFxuICAgICAgICAgIH0meG1sPSR7bWFpbkRvYy54bWxcbiAgICAgICAgICB9JiR7cGFyYW1zLnRvU3RyaW5nKCl9YDtcblxuICAgICAgICAgIGRhdGEubWFpbkRvYy51cmwgPSB4bWxRdWVyeVVybDtcbiAgICAgICAgICBkYXRhLm1haW5Eb2Mucm9vdFBhdGggPSAnYXBpL21yY3BhcnRzJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwYi1lbmQtdXBkYXRlJywgKGV2OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsRWxlbWVudHNJbnRvVmlldyhldi5kZXRhaWwsICdocScsICcjdHJhbnNjcmlwdGlvbi12aWV3Jyk7XG4gICAgfSk7XG4gICAgLyogICB9ICAqL1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZGlzcGxheUluZGV4KCkge1xuICAgIGlmICh0aGlzLm91dHB1dC50b2dnbGVDb2x1bW4pIHtcbiAgICAgIHRoaXMub3V0cHV0LnRvZ2dsZUNvbHVtbiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm91dHB1dC50b2dnbGVDb2x1bW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldHVwVmlld0NsaWNrTGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IGF0dGFjaExpc3RlbmVycyA9ICgpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB2aWV3cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uNy1wYXJhbGxlbC10ZXh0LXZpZXdlciBbaWQkPVwiLXZpZXdcIl0nKTtcblxuICAgICAgICB2aWV3cy5mb3JFYWNoKCh2aWV3KSA9PiB7XG4gICAgICAgICAgaWYgKHZpZXcuaWQgPT09ICd0cmFuc2NyaXB0aW9uLXZpZXcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZpZXcuc2hhZG93Um9vdCkge1xuICAgICAgICAgICAgaWYgKCh2aWV3IGFzIGFueSkuX19jbGlja0xpc3RlbmVyQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjbGlja0xpc3RlbmVyID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLm9uQ2xpY2soZXZlbnQpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gU2FsdmEgaWwgcmlmZXJpbWVudG8gZSBtYXJjYSBjb21lIGF0dGFjY2F0b1xuICAgICAgICAgICAgKHZpZXcgYXMgYW55KS5fX2NsaWNrTGlzdGVuZXIgPSBjbGlja0xpc3RlbmVyO1xuICAgICAgICAgICAgKHZpZXcgYXMgYW55KS5fX2NsaWNrTGlzdGVuZXJBdHRhY2hlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIEF0dGFjY2EgaWwgbGlzdGVuZXIgaW4gY2FwdHVyZSBwaGFzZSBwZXIgY2F0dHVyYXJlIHR1dHRpIGkgY2xpY2tcbiAgICAgICAgICAgIHZpZXcuc2hhZG93Um9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsaWNrTGlzdGVuZXIsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LCAxMDApO1xuICAgIH07XG5cbiAgICAvLyBBdHRhY2NhIGFsIHByaW1vIGNhcmljYW1lbnRvXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncGItZW5kLXVwZGF0ZScsIGF0dGFjaExpc3RlbmVycyk7XG5cbiAgICBzZXRUaW1lb3V0KGF0dGFjaExpc3RlbmVycywgNTAwKTtcblxuICAgIC8vIENyb3NzLWhpZ2hsaWdodCBwZXIgdGVybWluaSBtdWx0aS1AYW5hOiBxdWFuZG8gdW4gcGItaGlnaGxpZ2h0IGNvbiBkb3BwaWEga2V5IGVtZXR0ZSBwYi1oaWdobGlnaHQtb24gXG4gICAgLy8gIHJpLWVtZXR0ZSBwYi1oaWdobGlnaHQtb24gcGVyIG9nbmkgdG9rZW4gaW5kaXZpZHVhbGUgIGNvc8OsIGkgdGVybWluaSBjb3JyZWxhdGkgc2kgZXZpZGVuemlhbm8uXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncGItaGlnaGxpZ2h0LW9uJywgKGV2OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGV2LmRldGFpbD8uaWQ7XG4gICAgICBjb25zdCBjaGFubmVsID0gZXYuZGV0YWlsPy5rZXk7XG4gICAgICBpZiAoIWtleSB8fCAhY2hhbm5lbCkgcmV0dXJuO1xuXG4gICAgICAvLyBDaGlhdmUgY29tcG9zaXRhIChtdWx0aS1AYW5hIFwidm94Ml92b3gzXCIsIGFuY29yZSBwYWlyZWQgXCJ2MWExX3YxYTJcIik6IHNwZXp6YSBlIHJpLWVtZXR0aSBwZXIgb2duaSB0b2tlbiBzdSBoaWdobGlnaHQtY2hhbm5lbC5cbiAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgICBrZXkuc3BsaXQoJ18nKS5mb3JFYWNoKCh0b2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3BiLWhpZ2hsaWdodC1vbicsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBrZXk6IGNoYW5uZWwsIGlkOiB0b2tlbiwgc291cmNlOiBldi5kZXRhaWwuc291cmNlIH0sXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXYuZGV0YWlsPy5zb3VyY2UgPT09ICdwYWlyZWQtYW5jaG9yJykgcmV0dXJuO1xuXG4gICAgICAvLyBUb2tlbiBzaW5nb2xvOiBzZSBjb3JyaXNwb25kZSBhIHVuJ2FuY29yYSBwYWlyZWQgcmktZW1ldHRlIGNvbiBsJ2lkIGNvbXBvc2l0byBkZWwgcG9wdXAgcGVyIGF0dGl2YXJuZSBsJ2hpZ2hsaWdodC5cbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZCQ9XCItdmlld1wiXScpLmZvckVhY2goKHZpZXc6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIXZpZXcuc2hhZG93Um9vdCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBwb3B1cCA9IHZpZXcuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGAudGVpLWFwcFtkYXRhLWZyb209XCIke2tleX1cIl1gKVxuICAgICAgICAgIHx8IHZpZXcuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGAudGVpLWFwcFtkYXRhLXRvPVwiJHtrZXl9XCJdYCk7XG4gICAgICAgIGlmIChwb3B1cCAmJiBwb3B1cC5pZCkge1xuICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdwYi1oaWdobGlnaHQtb24nLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsga2V5OiBjaGFubmVsLCBpZDogcG9wdXAuaWQsIHNvdXJjZTogJ3BhaXJlZC1hbmNob3InIH0sXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uQ2xpY2socGF5bG9hZCkge1xuICAgIGxldCB0YXJnZXQgPSBudWxsO1xuICAgIGNvbnN0IGNsaWNrUGF0aCA9IHBheWxvYWQucGF0aCB8fCBwYXlsb2FkLmNvbXBvc2VkUGF0aCgpO1xuXG4gICAgLy8gY2hpdXN1cmEgYXBwYXJhdG8gY29uIHRhc3RvXG4gICAgY29uc3QgY2xvc2VCdXR0b24gPSBjbGlja1BhdGguZmluZCgoZWwpID0+IGVsLmNsYXNzTmFtZVxuICAgICAgJiYgdHlwZW9mIGVsLmNsYXNzTmFtZSA9PT0gJ3N0cmluZydcbiAgICAgICYmIGVsLmNsYXNzTmFtZS5pbmNsdWRlcygnY2xvc2VfYXBwJykpO1xuXG4gICAgaWYgKGNsb3NlQnV0dG9uKSB7XG4gICAgICBjb25zdCBwYXJlbnRBcHBJdGVtID0gY2xvc2VCdXR0b24uY2xvc2VzdCgnLnRlaS1hcHAnKTtcbiAgICAgIGlmIChwYXJlbnRBcHBJdGVtICYmIHBhcmVudEFwcEl0ZW0uc3R5bGUpIHtcbiAgICAgICAgcGFyZW50QXBwSXRlbS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAocGFyZW50QXBwSXRlbSBhcyBIVE1MRWxlbWVudCkuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICAgIHRoaXMucmVzZXRIaWdobGlnaHRzKCk7XG4gICAgICAgIHBheWxvYWQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpbnNpZGVUZWlBcHAgPSBjbGlja1BhdGguZmluZCgoZWwpID0+IGVsLmNsYXNzTmFtZVxuICAgICAgJiYgdHlwZW9mIGVsLmNsYXNzTmFtZSA9PT0gJ3N0cmluZydcbiAgICAgICYmIGVsLmNsYXNzTmFtZS5pbmNsdWRlcygndGVpLWFwcCcpKTtcblxuICAgIGlmIChpbnNpZGVUZWlBcHAgJiYgKGluc2lkZVRlaUFwcCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoaXVzdXJhIG5vdGUgY29uIHRhc3RvXG4gICAgY29uc3QgY2xvc2VOb3RlQnV0dG9uID0gY2xpY2tQYXRoLmZpbmQoKGVsKSA9PiBlbC5jbGFzc05hbWVcbiAgICAgICYmIHR5cGVvZiBlbC5jbGFzc05hbWUgPT09ICdzdHJpbmcnXG4gICAgICAmJiBlbC5jbGFzc05hbWUuaW5jbHVkZXMoJ2Nsb3NlX25vdGUnKSk7XG5cbiAgICBpZiAoY2xvc2VOb3RlQnV0dG9uKSB7XG4gICAgICBjb25zdCBwYXJlbnROb3RlSXRlbSA9IGNsb3NlTm90ZUJ1dHRvbi5jbG9zZXN0KCcubm90ZS1pdGVtJyk7XG4gICAgICBpZiAocGFyZW50Tm90ZUl0ZW0gJiYgcGFyZW50Tm90ZUl0ZW0uc3R5bGUpIHtcbiAgICAgICAgcGFyZW50Tm90ZUl0ZW0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgKHBhcmVudE5vdGVJdGVtIGFzIEhUTUxFbGVtZW50KS5zdHlsZS50cmFuc2Zvcm0gPSAnJztcbiAgICAgICAgdGhpcy5yZXNldEhpZ2hsaWdodHMoKTtcbiAgICAgICAgcGF5bG9hZC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXlsb2FkLnBhdGgpIHtcbiAgICAgIHRhcmdldCA9IHBheWxvYWQucGF0aC5maW5kKFxuICAgICAgICAoeyB0YWdOYW1lIH0pID0+IHRhZ05hbWUgPT09ICdQQi1ISUdITElHSFQnXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXQgPSBwYXlsb2FkLmNvbXBvc2VkUGF0aCgpLmZpbmQoXG4gICAgICAgICh7IHRhZ05hbWUgfSkgPT4gdGFnTmFtZSA9PT0gJ1BCLUhJR0hMSUdIVCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuZ2V0QXR0cmlidXRlKCd0eXBlJykgPT09ICdhcHBfbGVtJykge1xuICAgICAgY29uc3QgYXBwSWQgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdrZXknKTtcblxuICAgICAgLy8gUG9zaXppb25lIGVsZW1lbnRvIGNsaWNjYXRvXG4gICAgICBjb25zdCBjbGlja2VkRWxlbWVudFBvc2l0aW9uID0gKHRhcmdldCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuXG4gICAgICBjb25zdCBjbGlja2VkVmlldyA9IGNsaWNrUGF0aC5maW5kKChlbCkgPT4gZWwuaWQgJiYgZWwuaWQuZW5kc1dpdGgoJy12aWV3JykpO1xuICAgICAgY29uc3QgY2xpY2tlZFZpZXdJZCA9IGNsaWNrZWRWaWV3ID8gY2xpY2tlZFZpZXcuaWQgOiBudWxsO1xuXG4gICAgICBjb25zdCBhcHBhcmF0dXNWaWV3ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm43LXBhcmFsbGVsLXRleHQtdmlld2VyIFtpZCQ9XCItdmlld1wiXScpO1xuXG4gICAgICBsZXQgYW5jaG9yRWxlbWVudCA9IG51bGw7XG4gICAgICBsZXQgdGVpQXBwRWxlbWVudCA9IG51bGw7XG5cbiAgICAgIGFwcGFyYXR1c1ZpZXcuZm9yRWFjaCgodmlldykgPT4ge1xuICAgICAgICAvLyBTYWx0YSBsYSB2aWV3IGluIGN1aSDDqCBzdGF0byBmYXR0byBpbCBjbGlja1xuICAgICAgICBpZiAodmlldy5pZCA9PT0gY2xpY2tlZFZpZXdJZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2aWV3LnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAvLyBDZXJjYSBwcmltYSBwZXIgaWQgZXNhdHRvOyBzZSBub24gdHJvdmF0bywgY2VyY2EgcG9wdXAgcGVyIGFuY29yYSBhcGVydHVyYSAoZGF0YS1mcm9tKVxuICAgICAgICAgIC8vIG8gYW5jb3JhIGRpIGNoaXVzdXJhIChkYXRhLXRvKVxuICAgICAgICAgIGNvbnN0IGZvdW5kID0gdmlldy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7YXBwSWR9XCJdYClcbiAgICAgICAgICAgIHx8IHZpZXcuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGAudGVpLWFwcFtkYXRhLWZyb209XCIke2FwcElkfVwiXWApXG4gICAgICAgICAgICB8fCB2aWV3LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgLnRlaS1hcHBbZGF0YS10bz1cIiR7YXBwSWR9XCJdYCk7XG4gICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICBpZiAoIWFuY2hvckVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudCA9IGZvdW5kO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhcHBFbGVtZW50ID0gZm91bmQuY2xvc2VzdCgnLnRlaS1hcHAnKSB8fCAoZm91bmQuY2xhc3NMaXN0LmNvbnRhaW5zKCd0ZWktYXBwJykgPyBmb3VuZCA6IG51bGwpO1xuICAgICAgICAgICAgaWYgKGFwcEVsZW1lbnQgJiYgIXRlaUFwcEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgdGVpQXBwRWxlbWVudCA9IGFwcEVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRlaUFwcEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gKHRlaUFwcEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPT09ICdibG9jayc7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5hIHNlIGlsIHBiLWhpZ2hsaWdodCBjbGljY2F0byDDqCB1bmEgY2l0IGVzdGVybmEgKGNvbnRpZW5lIGNpdCBhbm5pZGF0ZSkuXG4gICAgICAgIGNvbnN0IG5lc3RlZENpdHMgPSAodGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCdzcGFuLnF1b3RlJyk7XG4gICAgICAgIGNvbnN0IGlzT3V0ZXJDaXQgPSBuZXN0ZWRDaXRzLmxlbmd0aCA+IDA7XG4gICAgICAgIGNvbnN0IHNlZ0VsZW1lbnRzID0gKHRhcmdldCBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvckFsbCgnLnNlZy1vdXRlci1pbm5lcicpO1xuXG4gICAgICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgICAgICAodGVpQXBwRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAodGVpQXBwRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICAgICAgdGhpcy5yZXNldEhpZ2hsaWdodHMoKTtcblxuICAgICAgICAgIGlmIChpc091dGVyQ2l0KSB7XG4gICAgICAgICAgICAvLyBQYW5uZWxsbyBlc3Rlcm5vIGNoaXVzbzogcmlwcmlzdGluYSBpbCBiYWNrZ3JvdW5kIGRlaSBzZWcgYW5uaWRhdGlcbiAgICAgICAgICAgIHNlZ0VsZW1lbnRzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgKHRlaUFwcEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXG4gICAgICAgICAgLy8gcG9zaXppb25lIGF0dHVhbGVcbiAgICAgICAgICBjb25zdCBlbGVtZW50UG9zaXRpb24gPSB0ZWlBcHBFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcblxuICAgICAgICAgIC8vIGRpZmZlcmVuemFcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbkRpZmZlcmVuY2UgPSBjbGlja2VkRWxlbWVudFBvc2l0aW9uIC0gZWxlbWVudFBvc2l0aW9uO1xuXG4gICAgICAgICAgLy8gc3Bvc3RhbWVudG9cbiAgICAgICAgICAodGVpQXBwRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtwb3NpdGlvbkRpZmZlcmVuY2V9cHgpYDtcblxuICAgICAgICAgIGlmIChpc091dGVyQ2l0KSB7XG4gICAgICAgICAgICAvLyBQYW5uZWxsbyBlc3Rlcm5vIGFwZXJ0bzogZG9wbyBjaGUgcGItaGlnaGxpZ2h0IHNpIGF0dGl2YSAoZ2lhbGxvKSxcbiAgICAgICAgICAgIC8vIGltcG9zdGEgc2ZvbmRvIGJpYW5jbyBzdWkgc2VnIGNoZSBhcHBhcnRlbmdvbm8gc2VtYW50aWNhbWVudGUgYWxsYSBjaXQgZXN0ZXJuYVxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgc2VnRWxlbWVudHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd3aGl0ZSc7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFBhbm5lbGxvIGludGVybm8gYXBlcnRvOiByaXByaXN0aW5hIGV2ZW50dWFsaSBzb3BwcmVzc2lvbmkgc3VpIHNlZyBpbnRlcm5pXG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICBzZWdFbGVtZW50cy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyc7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ3RlaUFwcEVsZW1lbnQgbm9uIHRyb3ZhdG8hJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmdldEF0dHJpYnV0ZSgndHlwZScpID09PSAnbm90ZV9saW5lJykge1xuICAgICAgY29uc3Qgbm90ZUlkID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgna2V5Jyk7XG5cbiAgICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50UG9zaXRpb24gPSAodGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG5cbiAgICAgIGNvbnN0IGFwcGFyYXR1c1ZpZXcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubjctdGV4dC12aWV3ZXIgI2FwcGFyYXRvLXZpZXcnKTtcblxuICAgICAgY29uc3QgYW5jaG9yRWxlbWVudCA9IGFwcGFyYXR1c1ZpZXdcbiAgICAgICAgPy5zaGFkb3dSb290XG4gICAgICAgID8ucXVlcnlTZWxlY3RvcihgIyR7bm90ZUlkfWApO1xuXG4gICAgICBjb25zdCB0ZWlOb3RlRWxlbWVudCA9IGFuY2hvckVsZW1lbnRcbiAgICAgICAgPyBhbmNob3JFbGVtZW50LmNsb3Nlc3QoJy5ub3RlLWl0ZW0nKVxuICAgICAgICA6IG51bGw7XG4gICAgICBpZiAodGVpTm90ZUVsZW1lbnQpIHtcbiAgICAgICAgLy8gVmVyaWZpY2Egc2Ugw6ggdmlzaWJpbGVcbiAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gKHRlaU5vdGVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID09PSAnYmxvY2snO1xuXG4gICAgICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgICAgICAodGVpTm90ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgICAodGVpTm90ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICh0ZWlOb3RlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICAgICAgICAvLyBwb3NpemlvbmUgYXR0dWFsZVxuICAgICAgICAgIGNvbnN0IGVsZW1lbnRQb3NpdGlvbiA9IHRlaU5vdGVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcblxuICAgICAgICAgIC8vIGRpZmZlcmVuemFcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbkRpZmZlcmVuY2UgPSBjbGlja2VkRWxlbWVudFBvc2l0aW9uIC0gZWxlbWVudFBvc2l0aW9uO1xuXG4gICAgICAgICAgLy8gc3Bvc3RhbWVudG9cbiAgICAgICAgICAodGVpTm90ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7cG9zaXRpb25EaWZmZXJlbmNlfXB4KWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRhcmdldCAmJiB0YXJnZXQuZ2V0QXR0cmlidXRlKCd0eXBlJykgPT09ICdwYXJhbGxlbF9hbmNob3InKSB7XG4gICAgICBjb25zdCBzZWN0aW9uSWQgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdrZXknKTtcbiAgICAgIGlmIChzZWN0aW9uSWQpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3BiLXRvZ2dsZScsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7IGlkOiBzZWN0aW9uSWQgfSxcbiAgICAgICAgICAgICAgYWN0aW9uOiAncmVmcmVzaCcsXG4gICAgICAgICAgICAgIGtleTogJ3RyYW5zY3JpcHRpb24nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRhcmdldCAmJiB0YXJnZXQuZ2V0QXR0cmlidXRlKCdrZXknKSAmJiB0YXJnZXQuZ2V0QXR0cmlidXRlKCdzY3JvbGx2aWV3JykgIT09IG51bGwpIHtcbiAgICAgIC8vIFBlciBzY3JvbGwgc3UgaW5kaWNlXG4gICAgICBjb25zdCBrZXkgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdrZXknKTtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb0luZGV4RWxlbWVudChrZXkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGFyZ2V0ICYmIHRoaXMub3V0cHV0LnRvZ2dsZUNvbHVtbiA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGFyZ2V0Ll9fa2V5XG4gICAgICAgICYmICh0YXJnZXQuY2xhc3NOYW1lLmluY2x1ZGVzKCdwZXJzb24nKVxuICAgICAgICAgIHx8IHRhcmdldC5jbGFzc05hbWUuaW5jbHVkZXMoJ3BsYWNlJykpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5vdXRwdXQudG9nZ2xlQ29sdW1uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zY3JvbGxFbGVtZW50c0ludG9WaWV3KHRhcmdldCwgJ2VudGl0eScsICcjdGV4dC12aWV3ZXItaW5kZXgnKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgdGhpcy5vdXRwdXQudG9nZ2xlQ29sdW1uID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXR0YSB0dXR0aSBnbGkgaGlnaGxpZ2h0IGF0dGl2aSBkZWwgdGVzdG8gXG4gICAqL1xuICBwcml2YXRlIHJlc2V0SGlnaGxpZ2h0cygpIHtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQkPVwiLXZpZXdcIl0nKS5mb3JFYWNoKCh2aWV3OiBhbnkpID0+IHtcbiAgICAgIGlmICghdmlldy5zaGFkb3dSb290KSByZXR1cm47XG4gICAgICBjb25zdCBjb250ZW50ID0gdmlldy5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCd2aWV3JykgfHwgdmlldy5zaGFkb3dSb290O1xuXG4gICAgICAvLyBjb25zb2xlLmxvZygnW3Jlc2V0SGlnaGxpZ2h0c10gcHJvY2Vzc2luZyB2aWV3OicsIHZpZXcuaWQsICd8IHBiLWhpZ2hsaWdodHM6JywgY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdwYi1oaWdobGlnaHQnKS5sZW5ndGgpO1xuXG4gICAgICAvLyBSaW11b3ZlIGlsIGdpYWxsbyBlIHJlLWFiaWxpdGEgdHV0dGkgaSBwYi1oaWdobGlnaHRcbiAgICAgIGNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgncGItaGlnaGxpZ2h0JykuZm9yRWFjaCgoaGw6IGFueSkgPT4ge1xuICAgICAgICBobC5fY2xhc3NOYW1lID0gJ2hpZ2hsaWdodC1vZmYnO1xuICAgICAgICBobC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFJpbXVvdmUgY2xhc3NlICdkaXNhYmxlJyBkYSBxdWFsc2lhc2kgZWxlbWVudG8gKHJlc2lkdW8gZGEgcGxhaW4gcmVhZGluZyB2aWV3KVxuICAgICAgY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGlzYWJsZScpLmZvckVhY2goKGVsOiBFbGVtZW50KSA9PiB7XG4gICAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGUnKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBSaXByaXN0aW5hIGlsIGJhY2tncm91bmQgZGVpIHNlZy1vdXRlci1pbm5lciAocG90cmViYmUgZXNzZXJlIHJpbWFzdG8gJ3doaXRlJ1xuICAgICAgY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2VnLW91dGVyLWlubmVyJykuZm9yRWFjaCgoZWw6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnJztcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdmlld0xpc3RlbmVyVXBkYXRlKCkge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAncGItc3RhcnQtdXBkYXRlJyxcbiAgICAgIGZ1bmN0aW9uIF9saXN0ZW5lcigpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGItc3RhcnQtdXBkYXRlJywgX2xpc3RlbmVyLCB0cnVlKTtcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIGNoYW5nZVZpZXcodmlldywgcmVmcmVzaCkge1xuICAgIHNldFRpbWVvdXQoXG4gICAgICAodiwgcikgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgVEVTVCBDSEFOR0UgVklFVzogJHt2aWV3fWApO1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgncGItdG9nZ2xlJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICB2aWV3OiB2LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBhY3Rpb246IHIgPyAncmVmcmVzaCcgOiAnJyxcbiAgICAgICAgICAgICAga2V5OiAndHJhbnNjcmlwdGlvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgNjAwLFxuICAgICAgdmlldyxcbiAgICAgIHJlZnJlc2hcbiAgICApO1xuICB9XG5cbiAgc2Nyb2xsRWxlbWVudHNJbnRvVmlldyh0YXJnZXQsIHR5cGUsIHZpZXcpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxldCBlbGVtZW50OiBhbnk7XG4gICAgICBpZiAodHlwZSA9PT0gJ2NoYXB0ZXInKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkb2N1bWVudFxuICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5uNy10ZXh0LXZpZXdlciAjdmlldzAnKVxuICAgICAgICAgICAgLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigncGItaGlnaGxpZ2h0JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgaGlnaGxpZ2h0ID0gZG9jdW1lbnRcbiAgICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcubjctdGV4dC12aWV3ZXIgI3ZpZXcwJylcbiAgICAgICAgICAgIC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ3BiLWhpZ2hsaWdodCcpO1xuXG4gICAgICAgICAgY29uc3QgaGlnaGxpZ2h0SWQgPSBoaWdobGlnaHRbaGlnaGxpZ2h0Lmxlbmd0aCAtIDFdLmlkOyAvLyBzLnhcblxuICAgICAgICAgIGNvbnN0IGZyYWdtZW50TnVtYmVyID0gaGlnaGxpZ2h0SWQucmVwbGFjZSgnLicsICdcXFxcLicpO1xuXG4gICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50XG4gICAgICAgICAgICAucXVlcnlTZWxlY3Rvcih2aWV3KVxuICAgICAgICAgICAgLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgIyR7ZnJhZ21lbnROdW1iZXJ9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2VudGl0eScpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGFyZ2V0Ll9fa2V5O1xuICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnRcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcihgLm43LXRleHQtdmlld2VyICR7dmlld31gKVxuICAgICAgICAgIC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYCMke2tleX1gKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2hxJykge1xuICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnRcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcihgLm43LXBhcmFsbGVsLXRleHQtdmlld2VyICR7dmlld31gKVxuICAgICAgICAgIC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJy50ZWktZW0nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLm43LXBhcmFsbGVsLXRleHQtdmlld2VyICR7dmlld31gKTtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBlbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgIH1cbiAgICB9LCA2MDApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbGEgYWxsJ2VsZW1lbnRvIGNvcnJpc3BvbmRlbnRlIG5lbGwnaW5kaWNlXG4gICAqL1xuICBzY3JvbGxUb0luZGV4RWxlbWVudChrZXk6IHN0cmluZykge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgY2xlYW5LZXkgPSBrZXkucmVwbGFjZSgnIycsICcnKTtcbiAgICAgIGNvbnN0IHZpZXdzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm43LXBhcmFsbGVsLXRleHQtdmlld2VyIFtpZCQ9XCItdmlld1wiXTpub3QoI3RyYW5zY3JpcHRpb24tdmlldyknKTtcblxuICAgICAgQXJyYXkuZnJvbSh2aWV3cykuc29tZSgodmlldykgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB2aWV3LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYCMke2NsZWFuS2V5fWApO1xuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgKHRhcmdldCBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9LCAzMDApO1xuICB9XG59XG4iXX0=
@@ -2745,35 +2745,48 @@ class MrParallelTextViewerDS extends DataSource {
2745
2745
  // Attacca al primo caricamento
2746
2746
  document.addEventListener('pb-end-update', attachListeners);
2747
2747
  setTimeout(attachListeners, 500);
2748
- // Cross-highlight per termini multi-@ana: quando un pb-highlight con key "vox2_vox3"
2749
- // emette pb-highlight-on (hover sul termine o sulla tab aperta), ri-emettiamo pb-highlight-on
2750
- // per ogni token individuale ("vox2", "vox3") così i termini correlati si evidenziano.
2748
+ // Cross-highlight per termini multi-@ana: quando un pb-highlight con doppia key emette pb-highlight-on
2749
+ // ri-emette pb-highlight-on per ogni token individuale così i termini correlati si evidenziano.
2751
2750
  document.addEventListener('pb-highlight-on', (ev) => {
2752
2751
  const key = ev.detail?.id;
2753
2752
  const channel = ev.detail?.key;
2754
- if (key && key.includes('_')) {
2753
+ if (!key || !channel)
2754
+ return;
2755
+ // Chiave composita (multi-@ana "vox2_vox3", ancore paired "v1a1_v1a2"): spezza e ri-emetti per ogni token su highlight-channel.
2756
+ if (key.includes('_')) {
2755
2757
  key.split('_').forEach((token) => {
2756
2758
  document.dispatchEvent(new CustomEvent('pb-highlight-on', {
2757
2759
  detail: { key: channel, id: token, source: ev.detail.source },
2758
2760
  }));
2759
2761
  });
2762
+ return;
2760
2763
  }
2764
+ if (ev.detail?.source === 'paired-anchor')
2765
+ return;
2766
+ // Token singolo: se corrisponde a un'ancora paired ri-emette con l'id composito del popup per attivarne l'highlight.
2767
+ document.querySelectorAll('[id$="-view"]').forEach((view) => {
2768
+ if (!view.shadowRoot)
2769
+ return;
2770
+ const popup = view.shadowRoot.querySelector(`.tei-app[data-from="${key}"]`)
2771
+ || view.shadowRoot.querySelector(`.tei-app[data-to="${key}"]`);
2772
+ if (popup && popup.id) {
2773
+ document.dispatchEvent(new CustomEvent('pb-highlight-on', {
2774
+ detail: { key: channel, id: popup.id, source: 'paired-anchor' },
2775
+ }));
2776
+ }
2777
+ });
2761
2778
  });
2762
2779
  }
2763
2780
  onClick(payload) {
2764
- // console.log('🔵 onClick chiamato!', payload);
2765
2781
  let target = null;
2766
2782
  const clickPath = payload.path || payload.composedPath();
2767
- // console.log('🔵 clickPath:', clickPath);
2768
2783
  // chiusura apparato con tasto
2769
2784
  const closeButton = clickPath.find((el) => el.className
2770
2785
  && typeof el.className === 'string'
2771
2786
  && el.className.includes('close_app'));
2772
2787
  if (closeButton) {
2773
- // console.log('Click rilevato sul bottone di chiusura:', closeButton);
2774
2788
  const parentAppItem = closeButton.closest('.tei-app');
2775
2789
  if (parentAppItem && parentAppItem.style) {
2776
- // console.log('Chiusura dell\'elemento tei-app');
2777
2790
  parentAppItem.style.display = 'none';
2778
2791
  parentAppItem.style.transform = '';
2779
2792
  this.resetHighlights();
@@ -2792,10 +2805,8 @@ class MrParallelTextViewerDS extends DataSource {
2792
2805
  && typeof el.className === 'string'
2793
2806
  && el.className.includes('close_note'));
2794
2807
  if (closeNoteButton) {
2795
- // console.log('Click rilevato sul bottone di chiusura nota:', closeNoteButton);
2796
2808
  const parentNoteItem = closeNoteButton.closest('.note-item');
2797
2809
  if (parentNoteItem && parentNoteItem.style) {
2798
- // console.log('Chiusura dell\'elemento note-item');
2799
2810
  parentNoteItem.style.display = 'none';
2800
2811
  parentNoteItem.style.transform = '';
2801
2812
  this.resetHighlights();
@@ -2824,12 +2835,16 @@ class MrParallelTextViewerDS extends DataSource {
2824
2835
  return;
2825
2836
  }
2826
2837
  if (view.shadowRoot) {
2827
- const found = view.shadowRoot.querySelector(`[id="${appId}"]`);
2838
+ // Cerca prima per id esatto; se non trovato, cerca popup per ancora apertura (data-from)
2839
+ // o ancora di chiusura (data-to)
2840
+ const found = view.shadowRoot.querySelector(`[id="${appId}"]`)
2841
+ || view.shadowRoot.querySelector(`.tei-app[data-from="${appId}"]`)
2842
+ || view.shadowRoot.querySelector(`.tei-app[data-to="${appId}"]`);
2828
2843
  if (found) {
2829
2844
  if (!anchorElement) {
2830
2845
  anchorElement = found;
2831
2846
  }
2832
- const appElement = found.closest('.tei-app');
2847
+ const appElement = found.closest('.tei-app') || (found.classList.contains('tei-app') ? found : null);
2833
2848
  if (appElement && !teiAppElement) {
2834
2849
  teiAppElement = appElement;
2835
2850
  }
@@ -2842,18 +2857,6 @@ class MrParallelTextViewerDS extends DataSource {
2842
2857
  const nestedCits = target.querySelectorAll('span.quote');
2843
2858
  const isOuterCit = nestedCits.length > 0;
2844
2859
  const segElements = target.querySelectorAll('.seg-outer-inner');
2845
- // console.log('[seg-outer-inner] click su:', target.getAttribute('key'), '| isOuterCit:', isOuterCit, '| seg trovati:', segElements.length, '| panel isVisible:', isVisible);
2846
- // console.log(' nestedCits keys:', Array.from(nestedCits).map((el) => el.getAttribute('key')));
2847
- // segElements.forEach((el, i) => {
2848
- // console.log(` seg[${i}] backgroundColor attuale: "${(el as HTMLElement).style.backgroundColor}"`);
2849
- // let node = (el as HTMLElement).parentElement;
2850
- // const chain = [];
2851
- // while (node && chain.length < 6) {
2852
- // chain.push(`${node.tagName}${node.className ? '.' + node.className.replace(/\s+/g, '.') : ''}${node.getAttribute('key') ? '[key=' + node.getAttribute('key').substring(0, 20) + ']' : ''}`);
2853
- // node = node.parentElement;
2854
- // }
2855
- // console.log(` seg[${i}] ancestors:`, chain.join(' > '));
2856
- // });
2857
2860
  if (isVisible) {
2858
2861
  teiAppElement.style.display = 'none';
2859
2862
  teiAppElement.style.transform = '';
@@ -2862,7 +2865,6 @@ class MrParallelTextViewerDS extends DataSource {
2862
2865
  // Pannello esterno chiuso: ripristina il background dei seg annidati
2863
2866
  segElements.forEach((el) => {
2864
2867
  el.style.backgroundColor = '';
2865
- // console.log(' [outer CLOSE] seg backgroundColor → ""');
2866
2868
  });
2867
2869
  }
2868
2870
  }
@@ -2880,7 +2882,6 @@ class MrParallelTextViewerDS extends DataSource {
2880
2882
  requestAnimationFrame(() => {
2881
2883
  segElements.forEach((el) => {
2882
2884
  el.style.backgroundColor = 'white';
2883
- // console.log(' [outer OPEN rAF] seg backgroundColor → "white"');
2884
2885
  });
2885
2886
  });
2886
2887
  }
@@ -2889,7 +2890,6 @@ class MrParallelTextViewerDS extends DataSource {
2889
2890
  requestAnimationFrame(() => {
2890
2891
  segElements.forEach((el) => {
2891
2892
  el.style.backgroundColor = '';
2892
- // console.log(' [inner OPEN rAF] seg backgroundColor → ""');
2893
2893
  });
2894
2894
  });
2895
2895
  }
@@ -2901,7 +2901,6 @@ class MrParallelTextViewerDS extends DataSource {
2901
2901
  }
2902
2902
  else if (target && target.getAttribute('type') === 'note_line') {
2903
2903
  const noteId = target.getAttribute('key');
2904
- // console.log('noteId', noteId);
2905
2904
  const clickedElementPosition = target.getBoundingClientRect().top;
2906
2905
  const apparatusView = document.querySelector('.n7-text-viewer #apparato-view');
2907
2906
  const anchorElement = apparatusView