@plumile/router 0.1.27 → 0.1.30

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 (41) hide show
  1. package/README.md +9 -126
  2. package/lib/esm/builder.d.ts.map +1 -1
  3. package/lib/esm/builder.js +1 -1
  4. package/lib/esm/errors/HttpRedirect.d.ts.map +1 -1
  5. package/lib/esm/errors/HttpRedirect.js +1 -1
  6. package/lib/esm/errors/index.js +1 -1
  7. package/lib/esm/routing/createRouter.d.ts +4 -7
  8. package/lib/esm/routing/createRouter.d.ts.map +1 -1
  9. package/lib/esm/routing/createRouter.js +4 -365
  10. package/lib/esm/routing/useAllQuery.d.ts.map +1 -1
  11. package/lib/esm/routing/useAllQuery.js +1 -1
  12. package/lib/esm/routing/useFilterDiagnostics.d.ts.map +1 -1
  13. package/lib/esm/routing/useFilterDiagnostics.js +1 -1
  14. package/lib/esm/routing/useFilters.d.ts +5 -0
  15. package/lib/esm/routing/useFilters.d.ts.map +1 -1
  16. package/lib/esm/routing/useFilters.js +4 -1
  17. package/lib/esm/routing/useNavigate.d.ts.map +1 -1
  18. package/lib/esm/routing/useNavigate.js +1 -1
  19. package/lib/esm/routing/useQuery.d.ts.map +1 -1
  20. package/lib/esm/routing/useQuery.js +1 -1
  21. package/lib/esm/routing/useQueryState.d.ts.map +1 -1
  22. package/lib/esm/routing/useQueryState.js +1 -1
  23. package/lib/esm/tools/buildCombinedSearch.d.ts.map +1 -1
  24. package/lib/esm/tools/buildCombinedSearch.js +1 -1
  25. package/lib/esm/tools.d.ts.map +1 -1
  26. package/lib/esm/tools.js +1 -1
  27. package/lib/tsconfig.esm.tsbuildinfo +1 -1
  28. package/lib/types/builder.d.ts.map +1 -1
  29. package/lib/types/errors/HttpRedirect.d.ts.map +1 -1
  30. package/lib/types/routing/createRouter.d.ts +4 -7
  31. package/lib/types/routing/createRouter.d.ts.map +1 -1
  32. package/lib/types/routing/useAllQuery.d.ts.map +1 -1
  33. package/lib/types/routing/useFilterDiagnostics.d.ts.map +1 -1
  34. package/lib/types/routing/useFilters.d.ts +5 -0
  35. package/lib/types/routing/useFilters.d.ts.map +1 -1
  36. package/lib/types/routing/useNavigate.d.ts.map +1 -1
  37. package/lib/types/routing/useQuery.d.ts.map +1 -1
  38. package/lib/types/routing/useQueryState.d.ts.map +1 -1
  39. package/lib/types/tools/buildCombinedSearch.d.ts.map +1 -1
  40. package/lib/types/tools.d.ts.map +1 -1
  41. package/package.json +4 -4
@@ -4,41 +4,7 @@ import { getMatchedRoute, prepareMatch } from '../tools.js';
4
4
  import { parseRawQuery } from '../tools/query.js';
5
5
  import buildCombinedSearch from '../tools/buildCombinedSearch.js';
6
6
  import { parse as parseFilters } from '@plumile/filter-query';
7
- export default function createRouter(routes, opts = {}) {
8
- let devtoolsGlobal;
9
- let devtoolsPanel = false;
10
- let devtoolsShortcut = 'Alt+Shift+R';
11
- if (typeof opts.devtools === 'object') {
12
- const baseEnabled = (() => {
13
- try {
14
- return (typeof process !== 'undefined' &&
15
- process.env.NODE_ENV !== 'production');
16
- }
17
- catch {
18
- return false;
19
- }
20
- })();
21
- devtoolsGlobal = opts.devtools.global ?? baseEnabled;
22
- devtoolsPanel = !!opts.devtools.panel;
23
- if (typeof opts.devtools.shortcut === 'string' &&
24
- opts.devtools.shortcut.trim() !== '') {
25
- devtoolsShortcut = opts.devtools.shortcut;
26
- }
27
- }
28
- else {
29
- const enabled = (() => {
30
- if (typeof opts.devtools === 'boolean')
31
- return opts.devtools;
32
- try {
33
- return (typeof process !== 'undefined' &&
34
- process.env.NODE_ENV !== 'production');
35
- }
36
- catch {
37
- return false;
38
- }
39
- })();
40
- devtoolsGlobal = enabled;
41
- }
7
+ export default function createRouter(routes, options = {}) {
42
8
  const history = new BrowserHistory();
43
9
  const flatRoutes = buildRoutes(routes);
44
10
  const route = getMatchedRoute(flatRoutes, history.location);
@@ -274,7 +240,7 @@ export default function createRouter(routes, opts = {}) {
274
240
  }
275
241
  },
276
242
  };
277
- if (devtoolsGlobal) {
243
+ if (options.debug === true) {
278
244
  try {
279
245
  if (typeof window !== 'undefined') {
280
246
  window.__PLUMILE_ROUTER__ =
@@ -287,333 +253,6 @@ export default function createRouter(routes, opts = {}) {
287
253
  catch {
288
254
  }
289
255
  }
290
- if (devtoolsPanel) {
291
- try {
292
- if (typeof window !== 'undefined' &&
293
- typeof document !== 'undefined' &&
294
- document.querySelector('[data-plumile-router-devtools-panel]') == null) {
295
- const host = document.createElement('div');
296
- host.setAttribute('data-plumile-router-devtools-panel', '');
297
- host.style.position = 'fixed';
298
- host.style.zIndex = '2147483646';
299
- host.style.bottom = '8px';
300
- host.style.right = '8px';
301
- host.style.fontFamily =
302
- 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace';
303
- host.style.fontSize = '12px';
304
- host.style.lineHeight = '1.3';
305
- host.style.color = '#111';
306
- host.style.background = 'transparent';
307
- host.style.pointerEvents = 'none';
308
- const shadow = host.attachShadow({ mode: 'open' });
309
- const panel = document.createElement('div');
310
- panel.style.pointerEvents = 'auto';
311
- panel.style.minWidth = '260px';
312
- panel.style.maxWidth = '420px';
313
- panel.style.maxHeight = '50vh';
314
- panel.style.overflow = 'auto';
315
- panel.style.background = 'rgba(255,255,255,0.95)';
316
- panel.style.border = '1px solid #ccc';
317
- panel.style.borderRadius = '6px';
318
- panel.style.boxShadow = '0 2px 8px rgba(0,0,0,0.15)';
319
- panel.style.padding = '6px 8px 8px';
320
- panel.style.backdropFilter = 'blur(4px)';
321
- panel.style.display = 'flex';
322
- panel.style.flexDirection = 'column';
323
- panel.style.rowGap = '4px';
324
- const header = document.createElement('div');
325
- header.style.display = 'flex';
326
- header.style.alignItems = 'center';
327
- header.style.justifyContent = 'space-between';
328
- header.style.gap = '8px';
329
- const title = document.createElement('span');
330
- title.textContent = 'Plumile Router';
331
- title.style.fontWeight = '600';
332
- const buttons = document.createElement('div');
333
- buttons.style.display = 'flex';
334
- buttons.style.gap = '4px';
335
- const collapseBtn = document.createElement('button');
336
- collapseBtn.textContent = '−';
337
- const closeBtn = document.createElement('button');
338
- closeBtn.textContent = '×';
339
- const btns = [collapseBtn, closeBtn];
340
- for (const b of btns) {
341
- b.style.cursor = 'pointer';
342
- b.style.background = '#eee';
343
- b.style.border = '1px solid #ccc';
344
- b.style.borderRadius = '4px';
345
- b.style.fontSize = '11px';
346
- b.style.lineHeight = '1';
347
- b.style.padding = '2px 5px';
348
- }
349
- header.appendChild(title);
350
- buttons.appendChild(collapseBtn);
351
- buttons.appendChild(closeBtn);
352
- header.appendChild(buttons);
353
- const pathEl = document.createElement('div');
354
- pathEl.style.whiteSpace = 'nowrap';
355
- const matchEl = document.createElement('div');
356
- matchEl.style.whiteSpace = 'nowrap';
357
- const varsEl = document.createElement('pre');
358
- const queryEl = document.createElement('pre');
359
- const filtersEl = document.createElement('pre');
360
- const filterDiagEl = document.createElement('pre');
361
- const timelineWrap = document.createElement('div');
362
- timelineWrap.style.display = 'flex';
363
- timelineWrap.style.flexDirection = 'column';
364
- timelineWrap.style.gap = '2px';
365
- timelineWrap.style.marginTop = '4px';
366
- const timelineHeader = document.createElement('div');
367
- timelineHeader.textContent = 'Timeline (query changes)';
368
- timelineHeader.style.fontWeight = '600';
369
- timelineHeader.style.fontSize = '11px';
370
- const timeline = document.createElement('div');
371
- timeline.style.display = 'flex';
372
- timeline.style.flexDirection = 'column-reverse';
373
- timeline.style.maxHeight = '140px';
374
- timeline.style.overflowY = 'auto';
375
- timeline.style.border = '1px solid #e2e2e2';
376
- timeline.style.borderRadius = '4px';
377
- timeline.style.background = '#fafbfc';
378
- timeline.style.fontFamily = 'inherit';
379
- timeline.style.fontSize = '11px';
380
- timelineWrap.appendChild(timelineHeader);
381
- timelineWrap.appendChild(timeline);
382
- const pres = [
383
- varsEl,
384
- queryEl,
385
- filtersEl,
386
- filterDiagEl,
387
- ];
388
- for (const p of pres) {
389
- p.style.margin = '0';
390
- p.style.padding = '4px';
391
- p.style.background = '#f6f8fa';
392
- p.style.border = '1px solid #e2e2e2';
393
- p.style.borderRadius = '4px';
394
- p.style.overflowX = 'auto';
395
- p.style.maxHeight = '160px';
396
- }
397
- const small = document.createElement('div');
398
- small.style.fontSize = '10px';
399
- small.style.opacity = '0.7';
400
- small.textContent = `Shortcut: ${devtoolsShortcut}`;
401
- panel.appendChild(header);
402
- panel.appendChild(pathEl);
403
- panel.appendChild(matchEl);
404
- panel.appendChild(varsEl);
405
- panel.appendChild(queryEl);
406
- panel.appendChild(timelineWrap);
407
- panel.appendChild(filtersEl);
408
- panel.appendChild(filterDiagEl);
409
- panel.appendChild(small);
410
- shadow.appendChild(panel);
411
- document.body.appendChild(host);
412
- let collapsed = false;
413
- collapseBtn.addEventListener('click', () => {
414
- collapsed = !collapsed;
415
- if (collapsed) {
416
- panel.style.maxHeight = '24px';
417
- panel.style.overflow = 'hidden';
418
- collapseBtn.textContent = '+';
419
- }
420
- else {
421
- panel.style.maxHeight = '50vh';
422
- panel.style.overflow = 'auto';
423
- collapseBtn.textContent = '−';
424
- }
425
- });
426
- let unsub;
427
- closeBtn.addEventListener('click', () => {
428
- host.remove();
429
- if (typeof unsub === 'function') {
430
- unsub();
431
- }
432
- });
433
- let lastQuery;
434
- let lastSearch;
435
- function diffQueries(prev, next) {
436
- const added = [];
437
- const removed = [];
438
- const changed = [];
439
- const unchanged = [];
440
- const prevKeys = new Set(Object.keys(prev ?? {}));
441
- const nextKeys = new Set(Object.keys(next));
442
- nextKeys.forEach((k) => {
443
- if (!prevKeys.has(k)) {
444
- added.push(k);
445
- return;
446
- }
447
- let pv;
448
- if (prev != null) {
449
- pv = prev[k];
450
- }
451
- const nv = next[k];
452
- let same = false;
453
- if (Array.isArray(pv) && Array.isArray(nv)) {
454
- if (pv.length === nv.length) {
455
- same = pv.every((v, i) => {
456
- return v === nv[i];
457
- });
458
- }
459
- }
460
- else {
461
- same = pv === nv;
462
- }
463
- if (same) {
464
- unchanged.push(k);
465
- }
466
- else {
467
- changed.push(k);
468
- }
469
- prevKeys.delete(k);
470
- });
471
- prevKeys.forEach((k) => {
472
- removed.push(k);
473
- });
474
- return { added, removed, changed, unchanged };
475
- }
476
- function render() {
477
- try {
478
- const entry = context.get();
479
- pathEl.textContent = `${entry.location.pathname}${entry.location.search}`;
480
- const matchPath = entry.route?.route.path;
481
- matchEl.textContent = `match: ${matchPath ?? '(no route matched)'}`;
482
- const varsJson = JSON.stringify(entry.route?.params ?? {}, null, 2);
483
- varsEl.textContent = `vars: ${varsJson}`;
484
- const rawJson = JSON.stringify(entry.query, null, 2);
485
- queryEl.textContent = `raw: ${rawJson}`;
486
- const filtersJson = JSON.stringify(entry.filters, null, 2);
487
- filtersEl.textContent = `filters:${filtersJson}`;
488
- const diag = entry.filterDiagnostics ?? [];
489
- filterDiagEl.textContent = `filterDiagnostics: ${diag.length}`;
490
- if (entry.rawSearch !== lastSearch) {
491
- const nowQuery = entry.query;
492
- const diff = diffQueries(lastQuery, nowQuery);
493
- const row = document.createElement('div');
494
- row.style.display = 'flex';
495
- row.style.flexDirection = 'column';
496
- row.style.borderBottom = '1px solid #e9e9e9';
497
- row.style.padding = '3px 4px';
498
- const head = document.createElement('div');
499
- head.style.display = 'flex';
500
- head.style.justifyContent = 'space-between';
501
- const ts = new Date().toLocaleTimeString();
502
- let searchDisplay = '(empty)';
503
- if (entry.location.search !== '') {
504
- searchDisplay = entry.location.search;
505
- }
506
- head.innerHTML = `<strong>${ts}</strong> <code style="background:#eee;padding:1px 3px;border-radius:3px;">${searchDisplay}</code>`;
507
- const body = document.createElement('div');
508
- body.style.display = 'flex';
509
- body.style.flexWrap = 'wrap';
510
- body.style.gap = '4px';
511
- function pill(label, kind) {
512
- const span = document.createElement('span');
513
- span.textContent = label;
514
- span.style.padding = '1px 4px';
515
- span.style.borderRadius = '10px';
516
- span.style.fontSize = '10px';
517
- span.style.border = '1px solid';
518
- switch (kind) {
519
- case 'added':
520
- span.style.background = '#e6ffed';
521
- span.style.borderColor = '#2cbe4e';
522
- span.style.color = '#22863a';
523
- break;
524
- case 'removed':
525
- span.style.background = '#ffeef0';
526
- span.style.borderColor = '#d73a49';
527
- span.style.color = '#cb2431';
528
- break;
529
- case 'changed':
530
- span.style.background = '#fff5b1';
531
- span.style.borderColor = '#ffd33d';
532
- span.style.color = '#735c0f';
533
- break;
534
- case 'unchanged':
535
- span.style.background = '#f1f8ff';
536
- span.style.borderColor = '#79b8ff';
537
- span.style.color = '#0366d6';
538
- break;
539
- default:
540
- break;
541
- }
542
- return span;
543
- }
544
- if (diff.added.length > 0) {
545
- body.append(...diff.added.map((k) => {
546
- return pill(`+${k}`, 'added');
547
- }));
548
- }
549
- if (diff.changed.length > 0) {
550
- body.append(...diff.changed.map((k) => {
551
- return pill(`~${k}`, 'changed');
552
- }));
553
- }
554
- if (diff.removed.length > 0) {
555
- body.append(...diff.removed.map((k) => {
556
- return pill(`-${k}`, 'removed');
557
- }));
558
- }
559
- const noAdds = diff.added.length === 0;
560
- const noChanges = diff.changed.length === 0;
561
- const noRemovals = diff.removed.length === 0;
562
- if (noAdds && noChanges && noRemovals) {
563
- body.append(pill('no-change', 'unchanged'));
564
- }
565
- row.appendChild(head);
566
- row.appendChild(body);
567
- timeline.appendChild(row);
568
- if (timeline.childElementCount > 50) {
569
- const first = timeline.firstElementChild;
570
- if (first != null) {
571
- timeline.removeChild(first);
572
- }
573
- }
574
- lastQuery = nowQuery;
575
- lastSearch = entry.rawSearch;
576
- }
577
- }
578
- catch {
579
- }
580
- }
581
- render();
582
- unsub = context.subscribe(() => {
583
- render();
584
- });
585
- window.addEventListener('keydown', (ev) => {
586
- try {
587
- const parts = [];
588
- if (ev.altKey)
589
- parts.push('Alt');
590
- if (ev.shiftKey)
591
- parts.push('Shift');
592
- if (ev.ctrlKey)
593
- parts.push('Ctrl');
594
- let keyPart = ev.key;
595
- if (ev.key.length === 1) {
596
- keyPart = ev.key.toUpperCase();
597
- }
598
- parts.push(keyPart);
599
- const combo = parts.join('+');
600
- if (combo === devtoolsShortcut.replace(/\s+/g, '')) {
601
- if (host.style.display === 'none') {
602
- host.style.display = 'block';
603
- }
604
- else {
605
- host.style.display = 'none';
606
- }
607
- }
608
- }
609
- catch {
610
- }
611
- });
612
- }
613
- }
614
- catch {
615
- }
616
- }
617
- return { cleanup, context };
256
+ return { context, cleanup };
618
257
  }
619
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvY3JlYXRlUm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLG1CQUFtQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxLQUFLLElBQUksWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUF1RDlELE1BQU0sQ0FBQyxPQUFPLFVBQVUsWUFBWSxDQUNsQyxNQUEyQixFQUMzQixPQUlJLEVBQUU7SUFHTixJQUFJLGNBQXVCLENBQUM7SUFDNUIsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzFCLElBQUksZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ3hCLElBQUksQ0FBQztnQkFDSCxPQUFPLENBQ0wsT0FBTyxPQUFPLEtBQUssV0FBVztvQkFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUN0QyxDQUFDO1lBQ0osQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ0wsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQztRQUNyRCxhQUFhLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FB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QztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQUMsTUFBTSxDQUFDO1FBRVQsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBNkIsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYnVpbGRSb3V0ZXMgfSBmcm9tICcuLi9idWlsZGVyLmpzJztcbmltcG9ydCB7IEJyb3dzZXJIaXN0b3J5IH0gZnJvbSAnLi4vaGlzdG9yeS9pbmRleC5qcyc7XG5pbXBvcnQgeyBnZXRNYXRjaGVkUm91dGUsIHByZXBhcmVNYXRjaCB9IGZyb20gJy4uL3Rvb2xzLmpzJztcbmltcG9ydCB7IHBhcnNlUmF3UXVlcnkgfSBmcm9tICcuLi90b29scy9xdWVyeS5qcyc7XG5pbXBvcnQgYnVpbGRDb21iaW5lZFNlYXJjaCBmcm9tICcuLi90b29scy9idWlsZENvbWJpbmVkU2VhcmNoLmpzJztcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlRmlsdGVycyB9IGZyb20gJ0BwbHVtaWxlL2ZpbHRlci1xdWVyeSc7XG5pbXBvcnQgdHlwZSB7XG4gIFJvdXRlRW50cnksXG4gIFJvdXRpbmdDb250ZXh0VHlwZSxcbiAgU3Vic2NyaWJlQ2FsbGJhY2ssXG4gIEFueVJvdXRlLFxuICBQcmVwYXJlZEFjY2VzcyxcbiAgTmF2aWdhdGVPdmVybG9hZHMsXG59IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLyoqXG4gKiBSZXR1cm4gdHlwZSBmb3IgdGhlIGNyZWF0ZVJvdXRlciBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgQ3JlYXRlUm91dGVyUmV0dXJuPFIgZXh0ZW5kcyBBbnlSb3V0ZVtdPiA9IHtcbiAgLyoqIEZ1bmN0aW9uIHRvIGNsZWFuIHVwIHJvdXRlciBsaXN0ZW5lcnMgYW5kIHJlc291cmNlcyAqL1xuICBjbGVhbnVwOiAoKSA9PiB2b2lkO1xuICAvKiogUm91dGVyIGNvbnRleHQgb2JqZWN0IGZvciB0aGUgUmVhY3QgQ29udGV4dCBQcm92aWRlciAqL1xuICBjb250ZXh0OiBSb3V0aW5nQ29udGV4dFR5cGU8YW55PiAmIFByZXBhcmVkQWNjZXNzPFI+O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcGxldGUgcm91dGVyIHN5c3RlbSBmcm9tIHJvdXRlIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFRoaXMgcm91dGVyIGlzIGJ1aWx0IGZyb20gdGhlIHNhbWUgcHJpbWl0aXZlcyBhcyByZWFjdC1yb3V0ZXIgYnV0IHdpdGggYWRkaXRpb25hbFxuICogZmVhdHVyZXMgZm9yIGRhdGEgcHJlbG9hZGluZyBhbmQgY29kZSBzcGxpdHRpbmcuIEVhY2ggcm91dGUgY2FuIGNvbnRhaW4gYm90aCBhXG4gKiBDb21wb25lbnQgYW5kIGEgcHJlcGFyZSgpIGZ1bmN0aW9uIHRoYXQgY2FuIHByZWxvYWQgZGF0YSBmb3IgdGhlIGNvbXBvbmVudC5cbiAqXG4gKiBUaGUgcm91dGVyIHdhdGNoZXMgZm9yIGNoYW5nZXMgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gdmlhIHRoZSBIVE1MNSBIaXN0b3J5IEFQSSxcbiAqIG1hcHMgdGhlIGxvY2F0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdXRlIGVudHJ5LCBhbmQgdGhlbiBwcmVsb2FkcyB0aGUgY29kZVxuICogYW5kIGRhdGEgZm9yIHRoZSByb3V0ZSBiZWZvcmUgcmVuZGVyaW5nLlxuICpcbiAqIEBwYXJhbSByb3V0ZXMgLSBBcnJheSBvZiByb3V0ZSBjb25maWd1cmF0aW9uc1xuICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJvdXRlciBjb250ZXh0IGFuZCBjbGVhbnVwIGZ1bmN0aW9uXG4gKlxuICBwcmVwYXJlZE1hdGNoOiBwcmVwYXJlTWF0Y2gocm91dGUsIHBhcnNlUmF3UXVlcnkoaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gpKSxcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICcvdXNlcnMvOmlkJyxcbiAqICAgICByZXNvdXJjZVBhZ2U6IGdldFJlc291cmNlUGFnZSgnVXNlclByb2ZpbGUnLCAoKSA9PiBpbXBvcnQoJy4vVXNlclByb2ZpbGUnKSksXG4gKiAgICAgcHJlcGFyZTogKHsgdmFyaWFibGVzIH0pID0+ICh7IHVzZXJJZDogdmFyaWFibGVzLmlkIH0pXG4gKiAgIH1cbiAqIF07XG4gKlxuICogY29uc3QgeyBjb250ZXh0LCBjbGVhbnVwIH0gPSBjcmVhdGVSb3V0ZXIocm91dGVzKTtcbiAqXG4gKiAvLyBVc2UgaW4gUmVhY3QgYXBwXG4gKiA8Um91dGluZ0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHR9PlxuICogICA8Um91dGVyUmVuZGVyZXIgLz5cbiAqIDwvUm91dGluZ0NvbnRleHQuUHJvdmlkZXI+XG4gKiBgYGBcbiAqL1xuLyoqXG4gKiBDcmVhdGUgYSByb3V0ZXIgKHR5cGVkIG92ZXJsb2FkKS4gV2hlbiBjYWxsZWQgd2l0aCBhIGNvbnN0IHR1cGxlIG9mIHJvdXRlcywgZ2VuZXJpY3MgYXJlIHByZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUm91dGVyPFIgZXh0ZW5kcyBBbnlSb3V0ZVtdPihcbiAgcm91dGVzOiBbLi4uUl0gfCBBbnlSb3V0ZVtdLFxuICBvcHRzOiB7XG4gICAgZGV2dG9vbHM/OlxuICAgICAgfCBib29sZWFuXG4gICAgICB8IHsgZ2xvYmFsPzogYm9vbGVhbjsgcGFuZWw/OiBib29sZWFuOyBzaG9ydGN1dD86IHN0cmluZyB9O1xuICB9ID0ge30sXG4pOiBDcmVhdGVSb3V0ZXJSZXR1cm48UiBleHRlbmRzIEFueVJvdXRlW10gPyBSIDogQW55Um91dGVbXT4ge1xuICAvLyBOb3JtYWxpemUgZGV2dG9vbHMgb3B0aW9ucyBtYWludGFpbmluZyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBsZXQgZGV2dG9vbHNHbG9iYWw6IGJvb2xlYW47XG4gIGxldCBkZXZ0b29sc1BhbmVsID0gZmFsc2U7XG4gIGxldCBkZXZ0b29sc1Nob3J0Y3V0ID0gJ0FsdCtTaGlmdCtSJztcbiAgaWYgKHR5cGVvZiBvcHRzLmRldnRvb2xzID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGJhc2VFbmFibGVkID0gKCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xuICAgICAgICApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIGRldnRvb2xzR2xvYmFsID0gb3B0cy5kZXZ0b29scy5nbG9iYWwgPz8gYmFzZUVuYWJsZWQ7XG4gICAgZGV2dG9vbHNQYW5lbCA9ICEhb3B0cy5kZXZ0b29scy5wYW5lbDtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3B0cy5kZXZ0b29scy5zaG9ydGN1dCA9PT0gJ3N0cmluZycgJiZcbiAgICAgIG9wdHMuZGV2dG9vbHMuc2hvcnRjdXQudHJpbSgpICE9PSAnJ1xuICAgICkge1xuICAgICAgZGV2dG9vbHNTaG9ydGN1dCA9IG9wdHMuZGV2dG9vbHMuc2hvcnRjdXQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGJvb2xlYW4gb3IgdW5kZWZpbmVkXG4gICAgY29uc3QgZW5hYmxlZCA9ICgoKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMuZGV2dG9vbHMgPT09ICdib29sZWFuJykgcmV0dXJuIG9wdHMuZGV2dG9vbHM7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBkZXZ0b29sc0dsb2JhbCA9IGVuYWJsZWQ7XG4gIH1cbiAgLy8gSW5pdGlhbGl6ZSBicm93c2VyIGhpc3RvcnkgbWFuYWdlclxuICBjb25zdCBoaXN0b3J5ID0gbmV3IEJyb3dzZXJIaXN0b3J5KCk7XG5cbiAgLy8gQnVpbGQgYSBmbGF0IGxpc3Qgb2Ygcm91dGVzIGZvciBlZmZpY2llbnQgbWF0Y2hpbmdcbiAgY29uc3QgZmxhdFJvdXRlcyA9IGJ1aWxkUm91dGVzKHJvdXRlcyk7XG5cbiAgLy8gRmluZCB0aGUgaW5pdGlhbCByb3V0ZSBtYXRjaCBhbmQgcHJlcGFyZSBpdCBmb3IgcmVuZGVyaW5nXG4gIGNvbnN0IHJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIGhpc3RvcnkubG9jYXRpb24pO1xuICBjb25zdCBpbml0aWFsUmF3UXVlcnkgPSBwYXJzZVJhd1F1ZXJ5KGhpc3RvcnkubG9jYXRpb24uc2VhcmNoKTtcbiAgLy8gRGlyZWN0IHNjaGVtYTogb25seSB0aGUgbWF0Y2hlZCByb3V0ZSdzIG93biBxdWVyeVNjaGVtYSAobm8gaGllcmFyY2hpY2FsIGRpc2NvdmVyeSlcbiAgbGV0IGluaXRpYWxVbmlmaWVkU2NoZW1hOiBhbnk7XG4gIGlmIChyb3V0ZSAhPSBudWxsKSB7XG4gICAgY29uc3QgbGFzdCA9IHJvdXRlLnJvdXRlLnJvdXRlcy5hdCgtMSkgYXMgdW5rbm93biBhcyB7XG4gICAgICBxdWVyeVNjaGVtYT86IHVua25vd247XG4gICAgfSB8IG51bGw7XG4gICAgaWYgKGxhc3QgIT0gbnVsbCkge1xuICAgICAgaW5pdGlhbFVuaWZpZWRTY2hlbWEgPSBsYXN0LnF1ZXJ5U2NoZW1hO1xuICAgIH1cbiAgfVxuICBsZXQgaW5pdGlhbEZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBsZXQgaW5pdGlhbEZpbHRlckRpYWdub3N0aWNzOiBhbnlbXSB8IHVuZGVmaW5lZDtcbiAgaWYgKGluaXRpYWxVbmlmaWVkU2NoZW1hICE9IG51bGwpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUZpbHRlcnMoaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gsIGluaXRpYWxVbmlmaWVkU2NoZW1hKTtcbiAgICBpbml0aWFsRmlsdGVycyA9IHBhcnNlZC5maWx0ZXJzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaW5pdGlhbEZpbHRlckRpYWdub3N0aWNzID0gcGFyc2VkLmRpYWdub3N0aWNzIGFzIHVua25vd25bXTtcbiAgfVxuICBjb25zdCBwcmVwYXJlZE1hdGNoID0gcHJlcGFyZU1hdGNoKHJvdXRlLCBpbml0aWFsRmlsdGVycyk7XG4gIC8vIEhlbHBlciB0byBidWlsZCB0aGUgcmF3IHF1ZXJ5IG9iamVjdCBmcm9tIGEgc2VhcmNoIHN0cmluZ1xuICBsZXQgY3VycmVudEVudHJ5OiBSb3V0ZUVudHJ5PGFueT4gPSB7XG4gICAgZm9yY2VSZXJlbmRlcjogZmFsc2UsXG4gICAgbG9jYXRpb246IGhpc3RvcnkubG9jYXRpb24sXG4gICAgcm91dGUsXG4gICAgcHJlcGFyZWRNYXRjaCxcbiAgICByYXdTZWFyY2g6IGhpc3RvcnkubG9jYXRpb24uc2VhcmNoLFxuICAgIHF1ZXJ5OiBpbml0aWFsUmF3UXVlcnksXG4gICAgLy8gdHlwZWRRdWVyeSByZW1vdmVkICh1bmlmaWVkIGludG8gZmlsdGVycy9xdWVyeSlcbiAgICBmaWx0ZXJzOiBpbml0aWFsRmlsdGVycyxcbiAgICBmaWx0ZXJEaWFnbm9zdGljczogaW5pdGlhbEZpbHRlckRpYWdub3N0aWNzLFxuICAgIGFjdGl2ZVF1ZXJ5U2NoZW1hOiBpbml0aWFsVW5pZmllZFNjaGVtYSxcbiAgfTtcblxuICAvLyBJbml0aWFsIG5vcm1hbGl6YXRpb24gcGFzcyAoZS5nLiwgY2xhbXAgcGFnZSlcbiAgY29uc3QgaW5pdFR5cGVkID0gY3VycmVudEVudHJ5LmZpbHRlcnMgYXMgdW5rbm93biBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IHVuZGVmaW5lZDtcbiAgbGV0IGluaXRQYWdlTnVtZXJpYzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBpZiAoaW5pdFR5cGVkICE9IG51bGwpIHtcbiAgICBjb25zdCByYXdQYWdlID0gaW5pdFR5cGVkLnBhZ2U7XG4gICAgaWYgKHR5cGVvZiByYXdQYWdlID09PSAnbnVtYmVyJykgaW5pdFBhZ2VOdW1lcmljID0gcmF3UGFnZTtcbiAgICBlbHNlIGlmIChcbiAgICAgIHJhd1BhZ2UgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHJhd1BhZ2UgPT09ICdvYmplY3QnICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShyYXdQYWdlKSAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhd1BhZ2UsICdlcScpICYmXG4gICAgICB0eXBlb2YgKHJhd1BhZ2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmVxID09PSAnbnVtYmVyJ1xuICAgICkge1xuICAgICAgaW5pdFBhZ2VOdW1lcmljID0gKHJhd1BhZ2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmVxIGFzIG51bWJlcjtcbiAgICB9XG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiBpbml0UGFnZU51bWVyaWMgPT09ICdudW1iZXInICYmXG4gICAgaW5pdFBhZ2VOdW1lcmljIDwgMSAmJlxuICAgIGluaXRpYWxVbmlmaWVkU2NoZW1hICE9IG51bGwgJiZcbiAgICBpbml0VHlwZWQgIT0gbnVsbFxuICApIHtcbiAgICBjb25zdCBub3JtID0geyAuLi5pbml0VHlwZWQsIHBhZ2U6IHsgZXE6IDEgfSB9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGN1cnJlbnRFbnRyeS5maWx0ZXJzID0gbm9ybTsgLy8gaW1tZWRpYXRlIHZpc2liaWxpdHlcbiAgICBjb25zdCBub3JtYWxpemVkU2VhcmNoID0gYnVpbGRDb21iaW5lZFNlYXJjaCh7XG4gICAgICBmaWx0ZXJzOiBub3JtLFxuICAgICAgcXVlcnlTY2hlbWE6IGluaXRpYWxVbmlmaWVkU2NoZW1hLFxuICAgIH0pOyAvLyByZXR1cm5zICcnIG9yIHN0cmluZyBzdGFydGluZyB3aXRoICc/J1xuICAgIGlmIChub3JtYWxpemVkU2VhcmNoICE9PSBoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCkge1xuICAgICAgaGlzdG9yeS5zZXQoe1xuICAgICAgICBwYXRobmFtZTogaGlzdG9yeS5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgc2VhcmNoOiBub3JtYWxpemVkU2VhcmNoLFxuICAgICAgICBoYXNoOiAnJyxcbiAgICAgIH0pO1xuICAgICAgLy8gVXBkYXRlIGN1cnJlbnRFbnRyeS5sb2NhdGlvbiB0byByZWZsZWN0IG5ldyBzZWFyY2ggZGlyZWN0bHkgKGhpc3Rvcnkuc2V0IHRyaWdnZXJzIGFzeW5jIHN1YnNjcmliZXIpXG4gICAgICBjdXJyZW50RW50cnkgPSB7XG4gICAgICAgIC4uLmN1cnJlbnRFbnRyeSxcbiAgICAgICAgbG9jYXRpb246IHsgLi4uY3VycmVudEVudHJ5LmxvY2F0aW9uLCBzZWFyY2g6IG5vcm1hbGl6ZWRTZWFyY2ggfSxcbiAgICAgICAgcmF3U2VhcmNoOiBub3JtYWxpemVkU2VhcmNoLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBNYWludGFpbiBhIHNldCBvZiBzdWJzY3JpYmVycyB0byB0aGUgYWN0aXZlIHJvdXRlIGVudHJ5XG4gIGxldCBuZXh0SWQgPSAwO1xuICBjb25zdCBzdWJzY3JpYmVycyA9IG5ldyBNYXA8bnVtYmVyLCBTdWJzY3JpYmVDYWxsYmFjazxhbnk+PigpO1xuXG4gIC8vIExpc3RlbiBmb3IgbG9jYXRpb24gY2hhbmdlcywgbWF0Y2ggdG8gdGhlIHJvdXRlIGVudHJ5LCBwcmVwYXJlIHRoZSBlbnRyeSxcbiAgLy8gYW5kIG5vdGlmeSBzdWJzY3JpYmVycy4gVGhpcyBwYXR0ZXJuIGVuc3VyZXMgdGhhdCBkYXRhLWxvYWRpbmdcbiAgLy8gb2NjdXJzICpvdXRzaWRlKiBvZiAtIGFuZCAqYmVmb3JlKiAtIHJlbmRlcmluZy5cbiAgY29uc3QgY2xlYW51cCA9IGhpc3Rvcnkuc3Vic2NyaWJlKChsb2NhdGlvbiwgZm9yY2VSZXJlbmRlcikgPT4ge1xuICAgIGNvbnN0IHNhbWVQYXRobmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lID09PSBjdXJyZW50RW50cnkubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgY29uc3Qgc2FtZVNlYXJjaCA9IGxvY2F0aW9uLnNlYXJjaCA9PT0gY3VycmVudEVudHJ5LnJhd1NlYXJjaDtcblxuICAgIGlmICghZm9yY2VSZXJlbmRlciAmJiBzYW1lUGF0aG5hbWUgJiYgc2FtZVNlYXJjaCkge1xuICAgICAgLy8gTm90aGluZyBjaGFuZ2VkIHRoYXQgd2UgY2FyZSBhYm91dFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgdGhlIHNlYXJjaCBjaGFuZ2VkIHdlIHN0aWxsIHdhbnQgdG8gcHJvcGFnYXRlIHRoZSBjaGFuZ2UuXG4gICAgLy8gS2VlcCB0aGUgZXhpc3RpbmcgcHJlcGFyZWRNYXRjaCB3aGVuIHBhdGhuYW1lIGlzIGlkZW50aWNhbCB0byBhdm9pZCByZWR1bmRhbnQgd29yay5cbiAgICBsZXQgbmV4dFByZXBhcmVkTWF0Y2ggPSBjdXJyZW50RW50cnkucHJlcGFyZWRNYXRjaDtcbiAgICBsZXQgbmV4dFJvdXRlID0gY3VycmVudEVudHJ5LnJvdXRlO1xuXG4gICAgaWYgKCFzYW1lUGF0aG5hbWUpIHtcbiAgICAgIC8vIFBhdGggY2hhbmdlZDogcmVjb21wdXRlIG1hdGNoICsgcHJlcGFyZWQgZGF0YSBpbmNsdWRpbmcgcXVlcnlcbiAgICAgIG5leHRSb3V0ZSA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCBoaXN0b3J5LmxvY2F0aW9uKTtcbiAgICAgIC8vIHdlIHdpbGwgc2V0IGJlbG93IGFmdGVyIGNvbXB1dGluZyB0eXBlZCBxdWVyeVxuICAgIH1cblxuICAgIC8vIEJ1aWxkIHJhdyBxdWVyeSBvYmplY3QgKGJhc2ljIGFnZ3JlZ2F0aW9uKSBmcm9tIGxvY2F0aW9uLnNlYXJjaFxuICAgIGNvbnN0IHF1ZXJ5ID0gcGFyc2VSYXdRdWVyeShsb2NhdGlvbi5zZWFyY2gpO1xuICAgIC8vIERldGVybWluZSBzY2hlbWEgZnJvbSBkZWVwZXN0IG1hdGNoZWQgcm91dGVcbiAgICBsZXQgcXVlcnlTY2hlbWE6IGFueTtcbiAgICBpZiAobmV4dFJvdXRlICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGxhc3QgPSBuZXh0Um91dGUucm91dGUucm91dGVzLmF0KC0xKSBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgcXVlcnlTY2hlbWE/OiB1bmtub3duO1xuICAgICAgfSB8IG51bGw7XG4gICAgICBpZiAobGFzdCAhPSBudWxsKSB7XG4gICAgICAgIHF1ZXJ5U2NoZW1hID0gbGFzdC5xdWVyeVNjaGVtYTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUGFyc2UgdW5pZmllZCBmaWx0ZXJzXG4gICAgbGV0IGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGxldCBmaWx0ZXJEaWFnbm9zdGljczogYW55W10gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHF1ZXJ5U2NoZW1hICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZEYgPSBwYXJzZUZpbHRlcnMobG9jYXRpb24uc2VhcmNoLCBxdWVyeVNjaGVtYSk7XG4gICAgICBmaWx0ZXJzID0gcGFyc2VkRi5maWx0ZXJzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBmaWx0ZXJEaWFnbm9zdGljcyA9IHBhcnNlZEYuZGlhZ25vc3RpY3MgYXMgdW5rbm93bltdO1xuICAgIH1cbiAgICAvLyBOb3JtYWxpemF0aW9uOiBjbGFtcCBwYWdlID49IDEgaWYgbnVtZXJpYyBwYWdlIHByZXNlbnRcbiAgICBsZXQgbm9ybWFsaXplZCA9IGZhbHNlO1xuICAgIGxldCBwZzogdW5rbm93bjtcbiAgICBpZiAoZmlsdGVycyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBmOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IGZpbHRlcnM7XG4gICAgICBjb25zdCBtYXliZSA9IGYucGFnZTtcbiAgICAgIGlmIChcbiAgICAgICAgbWF5YmUgIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgbWF5YmUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KG1heWJlKSAmJlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWF5YmUsICdlcScpXG4gICAgICApIHtcbiAgICAgICAgcGcgPSAobWF5YmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmVxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGcgPSBtYXliZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwZyA9PT0gJ251bWJlcicgJiYgcGcgPCAxKSB7XG4gICAgICBjb25zdCBjbG9uZSA9IHsgLi4uKGZpbHRlcnMgYXMgUmVjb3JkPHN0cmluZywgYW55PiksIHBhZ2U6IHsgZXE6IDEgfSB9O1xuICAgICAgZmlsdGVycyA9IGNsb25lO1xuICAgICAgbm9ybWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSB0aGUgc2VhcmNoIGNoYW5nZWQgKHNhbWUgcGF0aG5hbWUpIHdlIHN0aWxsIG5lZWQgdG8gcmUtcnVuIHByZXBhcmVcbiAgICBpZiAoIXNhbWVQYXRobmFtZSB8fCAhc2FtZVNlYXJjaCkge1xuICAgICAgbmV4dFByZXBhcmVkTWF0Y2ggPSBwcmVwYXJlTWF0Y2gobmV4dFJvdXRlLCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRFbnRyeTogUm91dGVFbnRyeTxhbnk+ID0ge1xuICAgICAgZm9yY2VSZXJlbmRlcjogZm9yY2VSZXJlbmRlciB8fCAoc2FtZVBhdGhuYW1lICYmICFzYW1lU2VhcmNoKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcm91dGU6IG5leHRSb3V0ZSxcbiAgICAgIHByZXBhcmVkTWF0Y2g6IG5leHRQcmVwYXJlZE1hdGNoLFxuICAgICAgcmF3U2VhcmNoOiBsb2NhdGlvbi5zZWFyY2gsXG4gICAgICBxdWVyeSxcbiAgICAgIGZpbHRlcnMsXG4gICAgICBmaWx0ZXJEaWFnbm9zdGljcyxcbiAgICAgIGFjdGl2ZVF1ZXJ5U2NoZW1hOiBxdWVyeVNjaGVtYSxcbiAgICB9O1xuXG4gICAgLy8gSWYgbm9ybWFsaXphdGlvbiBjaGFuZ2VkIHRoZSB0eXBlZCBxdWVyeSB3ZSB0cmlnZ2VyIGEgcmVwbGFjZSB3aXRoIG5vcm1hbGl6ZWQgc2VhcmNoXG4gICAgaWYgKG5vcm1hbGl6ZWQgJiYgcXVlcnlTY2hlbWEgIT0gbnVsbCkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IGJ1aWxkQ29tYmluZWRTZWFyY2goe1xuICAgICAgICBmaWx0ZXJzLFxuICAgICAgICBxdWVyeVNjaGVtYSxcbiAgICAgIH0pO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRTZWFyY2ggIT09IGxvY2F0aW9uLnNlYXJjaCkge1xuICAgICAgICBsZXQgbmV4dFNlYXJjaFN0ciA9IG5vcm1hbGl6ZWRTZWFyY2g7XG4gICAgICAgIGlmICghbmV4dFNlYXJjaFN0ci5zdGFydHNXaXRoKCc/JykpIHtcbiAgICAgICAgICBpZiAobmV4dFNlYXJjaFN0ciA9PT0gJycpIG5leHRTZWFyY2hTdHIgPSAnJztcbiAgICAgICAgICBlbHNlIG5leHRTZWFyY2hTdHIgPSBgPyR7bmV4dFNlYXJjaFN0cn1gO1xuICAgICAgICB9XG4gICAgICAgIGhpc3Rvcnkuc2V0KHtcbiAgICAgICAgICBwYXRobmFtZTogbG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgc2VhcmNoOiBuZXh0U2VhcmNoU3RyLFxuICAgICAgICAgIGhhc2g6ICcnLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuOyAvLyBlYXJseTogc3Vic2VxdWVudCBzZXQgd2lsbCB0cmlnZ2VyIHJlcnVuXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGN1cnJlbnQgZW50cnkgYW5kIG5vdGlmeSBhbGwgc3Vic2NyaWJlcnNcbiAgICBjdXJyZW50RW50cnkgPSBuZXh0RW50cnk7XG4gICAgc3Vic2NyaWJlcnMuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgIGNhbGxiYWNrKG5leHRFbnRyeSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFRoZSByb3V0ZXIgY29udGV4dCBvYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBSZWFjdCBDb250ZXh0XG4gIGNvbnN0IGNvbnRleHQ6IFJvdXRpbmdDb250ZXh0VHlwZTxhbnk+ICZcbiAgICBQcmVwYXJlZEFjY2VzczxBbnlSb3V0ZVtdPiAmIHtcbiAgICAgIG5hdmlnYXRlOiBOYXZpZ2F0ZU92ZXJsb2FkczxBbnlSb3V0ZVtdPjtcbiAgICB9ID0ge1xuICAgIGhpc3RvcnksXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRFbnRyeTtcbiAgICB9LFxuICAgIHByZWxvYWRDb2RlKHBhdGhuYW1lKSB7XG4gICAgICAvLyBQcmVsb2FkIGp1c3QgdGhlIGNvbXBvbmVudCBjb2RlIGZvciBhIHJvdXRlIHdpdGhvdXQgc3RvcmluZyB0aGUgcmVzdWx0XG4gICAgICBjb25zdCBtYXRjaGVzID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIHtcbiAgICAgICAgLi4ud2luZG93LmxvY2F0aW9uLFxuICAgICAgICBwYXRobmFtZSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAobWF0Y2hlcyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gTG9hZCBhbGwgcmVzb3VyY2UgcGFnZXMgZm9yIHRoZSBtYXRjaGVkIHJvdXRlXG4gICAgICBtYXRjaGVzLnJvdXRlLnJvdXRlcy5mb3JFYWNoKCh7IHJlc291cmNlUGFnZSB9KSA9PiB7XG4gICAgICAgIGlmIChyZXNvdXJjZVBhZ2UgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICAgIHJlc291cmNlUGFnZS5sb2FkKCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHByZWxvYWQocGF0aG5hbWUpIHtcbiAgICAgIC8vIFByZWxvYWQgYm90aCB0aGUgY29tcG9uZW50IGNvZGUgYW5kIHByZXBhcmVkIGRhdGEgZm9yIGEgcm91dGVcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywge1xuICAgICAgICAuLi53aW5kb3cubG9jYXRpb24sXG4gICAgICAgIHBhdGhuYW1lLFxuICAgICAgfSk7XG4gICAgICBwcmVwYXJlTWF0Y2gobWF0Y2hlcyk7XG4gICAgfSxcbiAgICBzdWJzY3JpYmUoY2FsbGJhY2spIHtcbiAgICAgIC8vIEFkZCBhIG5ldyBzdWJzY3JpYmVyIGFuZCByZXR1cm4gdW5zdWJzY3JpYmUgZnVuY3Rpb25cbiAgICAgIG5leHRJZCArPSAxO1xuICAgICAgY29uc3QgaWQgPSBuZXh0SWQ7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1zdHlsZVxuICAgICAgY29uc3QgZGlzcG9zZSA9ICgpID0+IHtcbiAgICAgICAgc3Vic2NyaWJlcnMuZGVsZXRlKGlkKTtcbiAgICAgIH07XG4gICAgICBzdWJzY3JpYmVycy5zZXQoaWQsIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiBkaXNwb3NlO1xuICAgIH0sXG4gICAgbmF2aWdhdGUoeyBwYXRobmFtZSwgcXVlcnksIGZpbHRlcnM6IG5hdkZpbHRlcnMsIHJlcGxhY2UgfTogYW55KSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gY3VycmVudEVudHJ5O1xuICAgICAgY29uc3QgdGFyZ2V0UGF0aG5hbWUgPSBwYXRobmFtZSA/PyBjdXJyZW50LmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgICAgLy8gRGV0ZXJtaW5lIHNjaGVtYSBvZiBkZXN0aW5hdGlvbiAoaWYgc2FtZSBwYXRoIGFuZCB3ZSBoYXZlIHJvdXRlIHdlIGNhbiByZXVzZSwgZWxzZSByZW1hdGNoKVxuICAgICAgbGV0IGRlc3RTY2hlbWE6IGFueTtcbiAgICAgIC8vIEFsd2F5cyBhdHRlbXB0IGZ1bGwgbWF0Y2ggZm9yIGRlc3RpbmF0aW9uIHRvIGVuc3VyZSBzY2hlbWEgcHJlc2VudCBldmVuIGlmIHNhbWUgcGF0aG5hbWVcbiAgICAgIGNvbnN0IGRlc3RSb3V0ZSA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCB7XG4gICAgICAgIC4uLndpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgcGF0aG5hbWU6IHRhcmdldFBhdGhuYW1lLFxuICAgICAgfSk7XG4gICAgICBpZiAoZGVzdFJvdXRlICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IGRlc3RSb3V0ZS5yb3V0ZS5yb3V0ZXMuYXQoLTEpIGFzIHVua25vd24gYXMge1xuICAgICAgICAgIHF1ZXJ5U2NoZW1hPzogdW5rbm93bjtcbiAgICAgICAgfSB8IG51bGw7XG4gICAgICAgIGlmIChsYXN0ICE9IG51bGwpIHtcbiAgICAgICAgICBkZXN0U2NoZW1hID0gbGFzdC5xdWVyeVNjaGVtYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRmFsbGJhY2sgdG8gY3VycmVudGx5IGFjdGl2ZSBzY2hlbWEgaWYgZGVzdGluYXRpb24gc2NoZW1hIG5vdCBmb3VuZCAoZS5nLiwgcmFjZSBjb25kaXRpb25zKVxuICAgICAgZGVzdFNjaGVtYSA/Pz0gY3VycmVudC5hY3RpdmVRdWVyeVNjaGVtYTtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZUZpbHRlcnMgPSBuYXZGaWx0ZXJzID8/IGN1cnJlbnQuZmlsdGVycztcbiAgICAgIC8vIFRyZWF0IGxlZ2FjeSBuYXZpZ2F0ZSh7IHF1ZXJ5IH0pIGFzIGZpbHRlcnMgaW4gdW5pZmllZCBtb2RlbCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgY29uc3QgZmlsdGVyc0lucHV0ID1cbiAgICAgICAgZWZmZWN0aXZlRmlsdGVycyA/PyAocXVlcnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpO1xuICAgICAgY29uc3Qgc2VhcmNoID0gYnVpbGRDb21iaW5lZFNlYXJjaCh7XG4gICAgICAgIGZpbHRlcnM6IGZpbHRlcnNJbnB1dCxcbiAgICAgICAgcXVlcnlTY2hlbWE6IGRlc3RTY2hlbWEsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxvY2F0aW9uT2JqID0geyBwYXRobmFtZTogdGFyZ2V0UGF0aG5hbWUsIHNlYXJjaCwgaGFzaDogJycgfTtcbiAgICAgIGlmIChyZXBsYWNlID09PSB0cnVlKSB7XG4gICAgICAgIGhpc3Rvcnkuc2V0KGxvY2F0aW9uT2JqKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpc3RvcnkucHVzaChsb2NhdGlvbk9iaik7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRQcmVwYXJlZChwYXRoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IGN1cnJlbnRFbnRyeTtcbiAgICAgICAgLy8gRmluZCBsYXN0IHByZXBhcmVkIHJvdXRlIHdpdGggbWF0Y2hpbmcgcGF0aFxuICAgICAgICBmb3IgKGNvbnN0IHByIG9mIGVudHJ5LnByZXBhcmVkTWF0Y2gucm91dGVzKSB7XG4gICAgICAgICAgaWYgKHByLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBwci5wcmVwYXJlZCBhcyBhbnk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIGdldFR5cGVkUXVlcnkgcmVtb3ZlZFxuICB9O1xuXG4gIC8vIFJldHVybiBib3RoIHRoZSBjb250ZXh0IG9iamVjdCBhbmQgYSBjbGVhbnVwIGZ1bmN0aW9uXG4gIC8vIERldnRvb2xzIGV4cG9zdXJlIChkZXZlbG9wbWVudCBvbmx5KVxuICBpZiAoZGV2dG9vbHNHbG9iYWwpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IF9fUExVTUlMRV9ST1VURVJfXz86IGFueSB9KS5fX1BMVU1JTEVfUk9VVEVSX18gPVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGdldDogY29udGV4dC5nZXQsXG4gICAgICAgICAgICBzdWJzY3JpYmU6IGNvbnRleHQuc3Vic2NyaWJlLFxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBpZ25vcmUgKi9cbiAgICB9XG4gIH1cbiAgLy8gT3B0aW9uYWwgaW4tcGFnZSBkZXZ0b29scyBwYW5lbCAobGlnaHR3ZWlnaHQgb3ZlcmxheSlcbiAgaWYgKGRldnRvb2xzUGFuZWwpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXBsdW1pbGUtcm91dGVyLWRldnRvb2xzLXBhbmVsXScpID09IG51bGxcbiAgICAgICkge1xuICAgICAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGhvc3Quc2V0QXR0cmlidXRlKCdkYXRhLXBsdW1pbGUtcm91dGVyLWRldnRvb2xzLXBhbmVsJywgJycpO1xuICAgICAgICBob3N0LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgICAgaG9zdC5zdHlsZS56SW5kZXggPSAnMjE0NzQ4MzY0Nic7XG4gICAgICAgIGhvc3Quc3R5bGUuYm90dG9tID0gJzhweCc7XG4gICAgICAgIGhvc3Quc3R5bGUucmlnaHQgPSAnOHB4JztcbiAgICAgICAgaG9zdC5zdHlsZS5mb250RmFtaWx5ID1cbiAgICAgICAgICAndWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiTGliZXJhdGlvbiBNb25vXCIsIG1vbm9zcGFjZSc7XG4gICAgICAgIGhvc3Quc3R5bGUuZm9udFNpemUgPSAnMTJweCc7XG4gICAgICAgIGhvc3Quc3R5bGUubGluZUhlaWdodCA9ICcxLjMnO1xuICAgICAgICBob3N0LnN0eWxlLmNvbG9yID0gJyMxMTEnO1xuICAgICAgICBob3N0LnN0eWxlLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICBob3N0LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgIGNvbnN0IHNoYWRvdyA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pO1xuICAgICAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBwYW5lbC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xuICAgICAgICBwYW5lbC5zdHlsZS5taW5XaWR0aCA9ICcyNjBweCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLm1heFdpZHRoID0gJzQyMHB4JztcbiAgICAgICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gJzUwdmgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgcGFuZWwuc3R5bGUuYmFja2dyb3VuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpJztcbiAgICAgICAgcGFuZWwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjY2NjJztcbiAgICAgICAgcGFuZWwuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzZweCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLmJveFNoYWRvdyA9ICcwIDJweCA4cHggcmdiYSgwLDAsMCwwLjE1KSc7XG4gICAgICAgIHBhbmVsLnN0eWxlLnBhZGRpbmcgPSAnNnB4IDhweCA4cHgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5iYWNrZHJvcEZpbHRlciA9ICdibHVyKDRweCknO1xuICAgICAgICBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XG4gICAgICAgIHBhbmVsLnN0eWxlLnJvd0dhcCA9ICc0cHgnO1xuICAgICAgICBjb25zdCBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaGVhZGVyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIGhlYWRlci5zdHlsZS5hbGlnbkl0ZW1zID0gJ2NlbnRlcic7XG4gICAgICAgIGhlYWRlci5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdzcGFjZS1iZXR3ZWVuJztcbiAgICAgICAgaGVhZGVyLnN0eWxlLmdhcCA9ICc4cHgnO1xuICAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSAnUGx1bWlsZSBSb3V0ZXInO1xuICAgICAgICB0aXRsZS5zdHlsZS5mb250V2VpZ2h0ID0gJzYwMCc7XG4gICAgICAgIGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgYnV0dG9ucy5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICBidXR0b25zLnN0eWxlLmdhcCA9ICc0cHgnO1xuICAgICAgICBjb25zdCBjb2xsYXBzZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBjb2xsYXBzZUJ0bi50ZXh0Q29udGVudCA9ICfiiJInO1xuICAgICAgICBjb25zdCBjbG9zZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBjbG9zZUJ0bi50ZXh0Q29udGVudCA9ICfDlyc7XG4gICAgICAgIGNvbnN0IGJ0bnM6IEhUTUxCdXR0b25FbGVtZW50W10gPSBbY29sbGFwc2VCdG4sIGNsb3NlQnRuXTtcbiAgICAgICAgZm9yIChjb25zdCBiIG9mIGJ0bnMpIHtcbiAgICAgICAgICBiLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICAgICAgICBiLnN0eWxlLmJhY2tncm91bmQgPSAnI2VlZSc7XG4gICAgICAgICAgYi5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNjY2MnO1xuICAgICAgICAgIGIuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgICAgICAgYi5zdHlsZS5mb250U2l6ZSA9ICcxMXB4JztcbiAgICAgICAgICBiLnN0eWxlLmxpbmVIZWlnaHQgPSAnMSc7XG4gICAgICAgICAgYi5zdHlsZS5wYWRkaW5nID0gJzJweCA1cHgnO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZCh0aXRsZSk7XG4gICAgICAgIGJ1dHRvbnMuYXBwZW5kQ2hpbGQoY29sbGFwc2VCdG4pO1xuICAgICAgICBidXR0b25zLmFwcGVuZENoaWxkKGNsb3NlQnRuKTtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGJ1dHRvbnMpO1xuICAgICAgICBjb25zdCBwYXRoRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgcGF0aEVsLnN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJztcbiAgICAgICAgY29uc3QgbWF0Y2hFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBtYXRjaEVsLnN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJztcbiAgICAgICAgY29uc3QgdmFyc0VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJlJyk7XG4gICAgICAgIGNvbnN0IHF1ZXJ5RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICAgICAgLy8gdHlwZWQgcXVlcnkgZWxlbWVudCByZW1vdmVkXG4gICAgICAgIGNvbnN0IGZpbHRlcnNFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpO1xuICAgICAgICBjb25zdCBmaWx0ZXJEaWFnRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICAgICAgLy8gVGltZWxpbmUgY29udGFpbmVyXG4gICAgICAgIGNvbnN0IHRpbWVsaW5lV3JhcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aW1lbGluZVdyYXAuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgdGltZWxpbmVXcmFwLnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJztcbiAgICAgICAgdGltZWxpbmVXcmFwLnN0eWxlLmdhcCA9ICcycHgnO1xuICAgICAgICB0aW1lbGluZVdyYXAuc3R5bGUubWFyZ2luVG9wID0gJzRweCc7XG4gICAgICAgIGNvbnN0IHRpbWVsaW5lSGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRpbWVsaW5lSGVhZGVyLnRleHRDb250ZW50ID0gJ1RpbWVsaW5lIChxdWVyeSBjaGFuZ2VzKSc7XG4gICAgICAgIHRpbWVsaW5lSGVhZGVyLnN0eWxlLmZvbnRXZWlnaHQgPSAnNjAwJztcbiAgICAgICAgdGltZWxpbmVIZWFkZXIuc3R5bGUuZm9udFNpemUgPSAnMTFweCc7XG4gICAgICAgIGNvbnN0IHRpbWVsaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uLXJldmVyc2UnOyAvLyBuZXdlc3Qgb24gdG9wIHZpc3VhbGx5IHdoaWxlIGFwcGVuZGluZyBhdCBlbmQgZm9yIGNoZWFwZXIgb3BzXG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLm1heEhlaWdodCA9ICcxNDBweCc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLm92ZXJmbG93WSA9ICdhdXRvJztcbiAgICAgICAgdGltZWxpbmUuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjZTJlMmUyJztcbiAgICAgICAgdGltZWxpbmUuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZhZmJmYyc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmZvbnRGYW1pbHkgPSAnaW5oZXJpdCc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmZvbnRTaXplID0gJzExcHgnO1xuICAgICAgICB0aW1lbGluZVdyYXAuYXBwZW5kQ2hpbGQodGltZWxpbmVIZWFkZXIpO1xuICAgICAgICB0aW1lbGluZVdyYXAuYXBwZW5kQ2hpbGQodGltZWxpbmUpO1xuICAgICAgICBjb25zdCBwcmVzOiBIVE1MUHJlRWxlbWVudFtdID0gW1xuICAgICAgICAgIHZhcnNFbCxcbiAgICAgICAgICBxdWVyeUVsLFxuICAgICAgICAgIGZpbHRlcnNFbCxcbiAgICAgICAgICBmaWx0ZXJEaWFnRWwsXG4gICAgICAgIF07XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBwcmVzKSB7XG4gICAgICAgICAgcC5zdHlsZS5tYXJnaW4gPSAnMCc7XG4gICAgICAgICAgcC5zdHlsZS5wYWRkaW5nID0gJzRweCc7XG4gICAgICAgICAgcC5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmNmY4ZmEnO1xuICAgICAgICAgIHAuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjZTJlMmUyJztcbiAgICAgICAgICBwLnN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuICAgICAgICAgIHAuc3R5bGUub3ZlcmZsb3dYID0gJ2F1dG8nO1xuICAgICAgICAgIHAuc3R5bGUubWF4SGVpZ2h0ID0gJzE2MHB4JztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzbWFsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzbWFsbC5zdHlsZS5mb250U2l6ZSA9ICcxMHB4JztcbiAgICAgICAgc21hbGwuc3R5bGUub3BhY2l0eSA9ICcwLjcnO1xuICAgICAgICBzbWFsbC50ZXh0Q29udGVudCA9IGBTaG9ydGN1dDogJHtkZXZ0b29sc1Nob3J0Y3V0fWA7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKGhlYWRlcik7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHBhdGhFbCk7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKG1hdGNoRWwpO1xuICAgICAgICBwYW5lbC5hcHBlbmRDaGlsZCh2YXJzRWwpO1xuICAgICAgICBwYW5lbC5hcHBlbmRDaGlsZChxdWVyeUVsKTtcbiAgICAgICAgLy8gdHlwZWRFbCByZW1vdmVkXG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHRpbWVsaW5lV3JhcCk7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKGZpbHRlcnNFbCk7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKGZpbHRlckRpYWdFbCk7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHNtYWxsKTtcbiAgICAgICAgc2hhZG93LmFwcGVuZENoaWxkKHBhbmVsKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgICAgICAgbGV0IGNvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgICBjb2xsYXBzZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICBjb2xsYXBzZWQgPSAhY29sbGFwc2VkO1xuICAgICAgICAgIGlmIChjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHBhbmVsLnN0eWxlLm1heEhlaWdodCA9ICcyNHB4JztcbiAgICAgICAgICAgIHBhbmVsLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICBjb2xsYXBzZUJ0bi50ZXh0Q29udGVudCA9ICcrJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gJzUwdmgnO1xuICAgICAgICAgICAgcGFuZWwuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgICAgICAgICBjb2xsYXBzZUJ0bi50ZXh0Q29udGVudCA9ICfiiJInO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB1bnN1YjogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAgICAgICBjbG9zZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICBob3N0LnJlbW92ZSgpO1xuICAgICAgICAgIGlmICh0eXBlb2YgdW5zdWIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHVuc3ViKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLyoqIFVwZGF0ZSBwYW5lbCBjb250ZW50IGZyb20gY3VycmVudCByb3V0ZSBlbnRyeSAqL1xuICAgICAgICAvLyBLZWVwIGxhc3QgcXVlcnkgc25hcHNob3QgZm9yIGRpZmZcbiAgICAgICAgbGV0IGxhc3RRdWVyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBsYXN0U2VhcmNoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb21wdXRlIGRpZmYgY2xhc3NpZmljYXRpb24gYmV0d2VlbiB0d28gcXVlcnkgb2JqZWN0cy5cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGRpZmZRdWVyaWVzKFxuICAgICAgICAgIHByZXY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuICAgICAgICAgIG5leHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICApOiB7XG4gICAgICAgICAgYWRkZWQ6IHN0cmluZ1tdO1xuICAgICAgICAgIHJlbW92ZWQ6IHN0cmluZ1tdO1xuICAgICAgICAgIGNoYW5nZWQ6IHN0cmluZ1tdO1xuICAgICAgICAgIHVuY2hhbmdlZDogc3RyaW5nW107XG4gICAgICAgIH0ge1xuICAgICAgICAgIGNvbnN0IGFkZGVkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGNvbnN0IHJlbW92ZWQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgY29uc3QgY2hhbmdlZDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBjb25zdCB1bmNoYW5nZWQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgY29uc3QgcHJldktleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKHByZXYgPz8ge30pKTtcbiAgICAgICAgICBjb25zdCBuZXh0S2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMobmV4dCkpO1xuICAgICAgICAgIG5leHRLZXlzLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgIGlmICghcHJldktleXMuaGFzKGspKSB7XG4gICAgICAgICAgICAgIGFkZGVkLnB1c2goayk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwdjogdW5rbm93bjtcbiAgICAgICAgICAgIGlmIChwcmV2ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gcHJldiBpcyBhIHBsYWluIHJlY29yZDsgZGlyZWN0IGluZGV4IChydW50aW1lIHNhZmUpXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgICAgICAgcHYgPSAocHJldiBhcyBhbnkpW2tdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbnYgPSBuZXh0W2tdO1xuICAgICAgICAgICAgbGV0IHNhbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHB2KSAmJiBBcnJheS5pc0FycmF5KG52KSkge1xuICAgICAgICAgICAgICBpZiAocHYubGVuZ3RoID09PSAobnYgYXMgdW5rbm93bltdKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBzYW1lID0gcHYuZXZlcnkoKHYsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2ID09PSAobnYgYXMgdW5rbm93bltdKVtpXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2FtZSA9IHB2ID09PSBudjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzYW1lKSB7XG4gICAgICAgICAgICAgIHVuY2hhbmdlZC5wdXNoKGspO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hhbmdlZC5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJldktleXMuZGVsZXRlKGspO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByZXZLZXlzLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgIHJlbW92ZWQucHVzaChrKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4geyBhZGRlZCwgcmVtb3ZlZCwgY2hhbmdlZCwgdW5jaGFuZ2VkIH07XG4gICAgICAgIH1cbiAgICAgICAgLyoqIFVwZGF0ZSBwYW5lbCBjb250ZW50IGFuZCBtYXliZSBwdXNoIHRpbWVsaW5lIGVudHJ5ICovXG4gICAgICAgIGZ1bmN0aW9uIHJlbmRlcigpOiB2b2lkIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBjb250ZXh0LmdldCgpO1xuICAgICAgICAgICAgcGF0aEVsLnRleHRDb250ZW50ID0gYCR7ZW50cnkubG9jYXRpb24ucGF0aG5hbWV9JHtlbnRyeS5sb2NhdGlvbi5zZWFyY2h9YDtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoUGF0aCA9IGVudHJ5LnJvdXRlPy5yb3V0ZS5wYXRoO1xuICAgICAgICAgICAgbWF0Y2hFbC50ZXh0Q29udGVudCA9IGBtYXRjaDogJHttYXRjaFBhdGggPz8gJyhubyByb3V0ZSBtYXRjaGVkKSd9YDtcbiAgICAgICAgICAgIGNvbnN0IHZhcnNKc29uID0gSlNPTi5zdHJpbmdpZnkoZW50cnkucm91dGU/LnBhcmFtcyA/PyB7fSwgbnVsbCwgMik7XG4gICAgICAgICAgICB2YXJzRWwudGV4dENvbnRlbnQgPSBgdmFyczogJHt2YXJzSnNvbn1gO1xuICAgICAgICAgICAgY29uc3QgcmF3SnNvbiA9IEpTT04uc3RyaW5naWZ5KGVudHJ5LnF1ZXJ5LCBudWxsLCAyKTtcbiAgICAgICAgICAgIHF1ZXJ5RWwudGV4dENvbnRlbnQgPSBgcmF3OiAgJHtyYXdKc29ufWA7XG4gICAgICAgICAgICAvLyB0eXBlZCBxdWVyeSByZW1vdmVkXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzSnNvbiA9IEpTT04uc3RyaW5naWZ5KGVudHJ5LmZpbHRlcnMsIG51bGwsIDIpO1xuICAgICAgICAgICAgZmlsdGVyc0VsLnRleHRDb250ZW50ID0gYGZpbHRlcnM6JHtmaWx0ZXJzSnNvbn1gO1xuICAgICAgICAgICAgY29uc3QgZGlhZyA9IGVudHJ5LmZpbHRlckRpYWdub3N0aWNzID8/IFtdO1xuICAgICAgICAgICAgZmlsdGVyRGlhZ0VsLnRleHRDb250ZW50ID0gYGZpbHRlckRpYWdub3N0aWNzOiAke2RpYWcubGVuZ3RofWA7XG4gICAgICAgICAgICAvLyBUaW1lbGluZSBsb2cgaWYgcXVlcnkgc2VhcmNoIGNoYW5nZWRcbiAgICAgICAgICAgIGlmIChlbnRyeS5yYXdTZWFyY2ggIT09IGxhc3RTZWFyY2gpIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm93UXVlcnkgPSBlbnRyeS5xdWVyeSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IGRpZmZRdWVyaWVzKGxhc3RRdWVyeSwgbm93UXVlcnkpO1xuICAgICAgICAgICAgICBjb25zdCByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgcm93LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgICAgIHJvdy5zdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XG4gICAgICAgICAgICAgIHJvdy5zdHlsZS5ib3JkZXJCb3R0b20gPSAnMXB4IHNvbGlkICNlOWU5ZTknO1xuICAgICAgICAgICAgICByb3cuc3R5bGUucGFkZGluZyA9ICczcHggNHB4JztcbiAgICAgICAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICBoZWFkLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgICAgIGhlYWQuc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnc3BhY2UtYmV0d2Vlbic7XG4gICAgICAgICAgICAgIGNvbnN0IHRzID0gbmV3IERhdGUoKS50b0xvY2FsZVRpbWVTdHJpbmcoKTtcbiAgICAgICAgICAgICAgbGV0IHNlYXJjaERpc3BsYXkgPSAnKGVtcHR5KSc7XG4gICAgICAgICAgICAgIGlmIChlbnRyeS5sb2NhdGlvbi5zZWFyY2ggIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoRGlzcGxheSA9IGVudHJ5LmxvY2F0aW9uLnNlYXJjaDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBoZWFkLmlubmVySFRNTCA9IGA8c3Ryb25nPiR7dHN9PC9zdHJvbmc+IDxjb2RlIHN0eWxlPVwiYmFja2dyb3VuZDojZWVlO3BhZGRpbmc6MXB4IDNweDtib3JkZXItcmFkaXVzOjNweDtcIj4ke3NlYXJjaERpc3BsYXl9PC9jb2RlPmA7XG4gICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgYm9keS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICBib2R5LnN0eWxlLmZsZXhXcmFwID0gJ3dyYXAnO1xuICAgICAgICAgICAgICBib2R5LnN0eWxlLmdhcCA9ICc0cHgnO1xuICAgICAgICAgICAgICAvKiogQ3JlYXRlIGEgY29sb3JlZCBwaWxsIGVsZW1lbnQgKi9cbiAgICAgICAgICAgICAgZnVuY3Rpb24gcGlsbChcbiAgICAgICAgICAgICAgICBsYWJlbDogc3RyaW5nLFxuICAgICAgICAgICAgICAgIGtpbmQ6ICdhZGRlZCcgfCAncmVtb3ZlZCcgfCAnY2hhbmdlZCcgfCAndW5jaGFuZ2VkJyxcbiAgICAgICAgICAgICAgKTogSFRNTFNwYW5FbGVtZW50IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSBsYWJlbDtcbiAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLnBhZGRpbmcgPSAnMXB4IDRweCc7XG4gICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnMTBweCc7XG4gICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5mb250U2l6ZSA9ICcxMHB4JztcbiAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQnO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICAgICAgICAgICAgY2FzZSAnYWRkZWQnOlxuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJhY2tncm91bmQgPSAnI2U2ZmZlZCc7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYm9yZGVyQ29sb3IgPSAnIzJjYmU0ZSc7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuY29sb3IgPSAnIzIyODYzYSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSAncmVtb3ZlZCc6XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmZlZWYwJztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5ib3JkZXJDb2xvciA9ICcjZDczYTQ5JztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5jb2xvciA9ICcjY2IyNDMxJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlICdjaGFuZ2VkJzpcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmZmY1YjEnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJvcmRlckNvbG9yID0gJyNmZmQzM2QnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmNvbG9yID0gJyM3MzVjMGYnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ3VuY2hhbmdlZCc6XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZCA9ICcjZjFmOGZmJztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5ib3JkZXJDb2xvciA9ICcjNzliOGZmJztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5jb2xvciA9ICcjMDM2NmQ2JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gZXhoYXVzdGl2ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3BhbjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZGlmZi5hZGRlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYm9keS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAuLi5kaWZmLmFkZGVkLm1hcCgoaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGlsbChgKyR7a31gLCAnYWRkZWQnKTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGRpZmYuY2hhbmdlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYm9keS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAuLi5kaWZmLmNoYW5nZWQubWFwKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwaWxsKGB+JHtrfWAsICdjaGFuZ2VkJyk7XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChkaWZmLnJlbW92ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgLi4uZGlmZi5yZW1vdmVkLm1hcCgoaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGlsbChgLSR7a31gLCAncmVtb3ZlZCcpO1xuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBub0FkZHMgPSBkaWZmLmFkZGVkLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgICAgY29uc3Qgbm9DaGFuZ2VzID0gZGlmZi5jaGFuZ2VkLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgICAgY29uc3Qgbm9SZW1vdmFscyA9IGRpZmYucmVtb3ZlZC5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICAgIGlmIChub0FkZHMgJiYgbm9DaGFuZ2VzICYmIG5vUmVtb3ZhbHMpIHtcbiAgICAgICAgICAgICAgICBib2R5LmFwcGVuZChwaWxsKCduby1jaGFuZ2UnLCAndW5jaGFuZ2VkJykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJvdy5hcHBlbmRDaGlsZChoZWFkKTtcbiAgICAgICAgICAgICAgcm93LmFwcGVuZENoaWxkKGJvZHkpO1xuICAgICAgICAgICAgICB0aW1lbGluZS5hcHBlbmRDaGlsZChyb3cpO1xuICAgICAgICAgICAgICBpZiAodGltZWxpbmUuY2hpbGRFbGVtZW50Q291bnQgPiA1MCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gdGltZWxpbmUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLnJlbW92ZUNoaWxkKGZpcnN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGFzdFF1ZXJ5ID0gbm93UXVlcnk7XG4gICAgICAgICAgICAgIGxhc3RTZWFyY2ggPSBlbnRyeS5yYXdTZWFyY2g7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvKiBpZ25vcmUgKi9cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCk7XG4gICAgICAgIHVuc3ViID0gY29udGV4dC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHJlbmRlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXYpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICBpZiAoZXYuYWx0S2V5KSBwYXJ0cy5wdXNoKCdBbHQnKTtcbiAgICAgICAgICAgIGlmIChldi5zaGlmdEtleSkgcGFydHMucHVzaCgnU2hpZnQnKTtcbiAgICAgICAgICAgIGlmIChldi5jdHJsS2V5KSBwYXJ0cy5wdXNoKCdDdHJsJyk7XG4gICAgICAgICAgICBsZXQga2V5UGFydCA9IGV2LmtleTtcbiAgICAgICAgICAgIGlmIChldi5rZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgIGtleVBhcnQgPSBldi5rZXkudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnRzLnB1c2goa2V5UGFydCk7XG4gICAgICAgICAgICBjb25zdCBjb21ibyA9IHBhcnRzLmpvaW4oJysnKTtcbiAgICAgICAgICAgIGlmIChjb21ibyA9PT0gZGV2dG9vbHNTaG9ydGN1dC5yZXBsYWNlKC9cXHMrL2csICcnKSkge1xuICAgICAgICAgICAgICBpZiAoaG9zdC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICBob3N0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhvc3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLyogaWdub3JlICovXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8qIGlnbm9yZSAqL1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBjbGVhbnVwLCBjb250ZXh0IH0gYXMgQ3JlYXRlUm91dGVyUmV0dXJuPGFueT47XG59XG4iXX0=
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvY3JlYXRlUm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLG1CQUFtQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxLQUFLLElBQUksWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUF5RTlELE1BQU0sQ0FBQyxPQUFPLFVBQVUsWUFBWSxDQUNsQyxNQUEyQixFQUMzQixVQUErQixFQUFFO0lBR2pDLE1BQU0sT0FBTyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7SUFHckMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBR3ZDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVELE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRS9ELElBQUksb0JBQXlCLENBQUM7SUFDOUIsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUU3QixDQUFDO1FBQ1QsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7WUFDakIsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQyxDQUFDO0lB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QzVDLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQzt3QkFDckIsT0FBTyxFQUFFLENBQUMsUUFBZSxDQUFDO29CQUM1QixDQUFDO2dCQUNILENBQUM7Z0JBQ0QsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztLQUVGLENBQUM7SUFFRixJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDO1lBQ0gsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztnQkFDakMsTUFBa0QsQ0FBQyxrQkFBa0I7b0JBQ3BFO3dCQUNFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRzt3QkFDaEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO3FCQUM3QixDQUFDO1lBQ04sQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7UUFFVCxDQUFDO0lBQ0gsQ0FBQztJQUdELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJ1aWxkUm91dGVzIH0gZnJvbSAnLi4vYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBCcm93c2VySGlzdG9yeSB9IGZyb20gJy4uL2hpc3RvcnkvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hlZFJvdXRlLCBwcmVwYXJlTWF0Y2ggfSBmcm9tICcuLi90b29scy5qcyc7XG5pbXBvcnQgeyBwYXJzZVJhd1F1ZXJ5IH0gZnJvbSAnLi4vdG9vbHMvcXVlcnkuanMnO1xuaW1wb3J0IGJ1aWxkQ29tYmluZWRTZWFyY2ggZnJvbSAnLi4vdG9vbHMvYnVpbGRDb21iaW5lZFNlYXJjaC5qcyc7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZUZpbHRlcnMgfSBmcm9tICdAcGx1bWlsZS9maWx0ZXItcXVlcnknO1xuaW1wb3J0IHR5cGUge1xuICBSb3V0ZUVudHJ5LFxuICBSb3V0aW5nQ29udGV4dFR5cGUsXG4gIFN1YnNjcmliZUNhbGxiYWNrLFxuICBBbnlSb3V0ZSxcbiAgUHJlcGFyZWRBY2Nlc3MsXG4gIE5hdmlnYXRlT3ZlcmxvYWRzLFxufSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8qKlxuICogUmV0dXJuIHR5cGUgZm9yIHRoZSBjcmVhdGVSb3V0ZXIgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZVJvdXRlclJldHVybjxSIGV4dGVuZHMgQW55Um91dGVbXT4gPSB7XG4gIC8qKiBGdW5jdGlvbiB0byBjbGVhbiB1cCByb3V0ZXIgbGlzdGVuZXJzIGFuZCByZXNvdXJjZXMgKi9cbiAgY2xlYW51cDogKCkgPT4gdm9pZDtcbiAgLyoqIFJvdXRlciBjb250ZXh0IG9iamVjdCBmb3IgdGhlIFJlYWN0IENvbnRleHQgUHJvdmlkZXIgKi9cbiAgY29udGV4dDogUm91dGluZ0NvbnRleHRUeXBlPGFueT4gJiBQcmVwYXJlZEFjY2VzczxSPjtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBsZXRlIHJvdXRlciBzeXN0ZW0gZnJvbSByb3V0ZSBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBUaGlzIHJvdXRlciBpcyBidWlsdCBmcm9tIHRoZSBzYW1lIHByaW1pdGl2ZXMgYXMgcmVhY3Qtcm91dGVyIGJ1dCB3aXRoIGFkZGl0aW9uYWxcbiAqIGZlYXR1cmVzIGZvciBkYXRhIHByZWxvYWRpbmcgYW5kIGNvZGUgc3BsaXR0aW5nLiBFYWNoIHJvdXRlIGNhbiBjb250YWluIGJvdGggYVxuICogQ29tcG9uZW50IGFuZCBhIHByZXBhcmUoKSBmdW5jdGlvbiB0aGF0IGNhbiBwcmVsb2FkIGRhdGEgZm9yIHRoZSBjb21wb25lbnQuXG4gKlxuICogVGhlIHJvdXRlciB3YXRjaGVzIGZvciBjaGFuZ2VzIHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uIHZpYSB0aGUgSFRNTDUgSGlzdG9yeSBBUEksXG4gKiBtYXBzIHRoZSBsb2NhdGlvbiB0byB0aGUgY29ycmVzcG9uZGluZyByb3V0ZSBlbnRyeSwgYW5kIHRoZW4gcHJlbG9hZHMgdGhlIGNvZGVcbiAqIGFuZCBkYXRhIGZvciB0aGUgcm91dGUgYmVmb3JlIHJlbmRlcmluZy5cbiAqXG4gKiBAcGFyYW0gcm91dGVzIC0gQXJyYXkgb2Ygcm91dGUgY29uZmlndXJhdGlvbnNcbiAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIHRoZSByb3V0ZXIgY29udGV4dCBhbmQgY2xlYW51cCBmdW5jdGlvblxuICpcbiAgcHJlcGFyZWRNYXRjaDogcHJlcGFyZU1hdGNoKHJvdXRlLCBwYXJzZVJhd1F1ZXJ5KGhpc3RvcnkubG9jYXRpb24uc2VhcmNoKSksXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByb3V0ZXMgPSBbXG4gKiAgIHtcbiAqICAgICBwYXRoOiAnL3VzZXJzLzppZCcsXG4gKiAgICAgcmVzb3VyY2VQYWdlOiBnZXRSZXNvdXJjZVBhZ2UoJ1VzZXJQcm9maWxlJywgKCkgPT4gaW1wb3J0KCcuL1VzZXJQcm9maWxlJykpLFxuICogICAgIHByZXBhcmU6ICh7IHZhcmlhYmxlcyB9KSA9PiAoeyB1c2VySWQ6IHZhcmlhYmxlcy5pZCB9KVxuICogICB9XG4gKiBdO1xuICpcbiAqIGNvbnN0IHsgY29udGV4dCwgY2xlYW51cCB9ID0gY3JlYXRlUm91dGVyKHJvdXRlcyk7XG4gKlxuICogLy8gVXNlIGluIFJlYWN0IGFwcFxuICogPFJvdXRpbmdDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0fT5cbiAqICAgPFJvdXRlclJlbmRlcmVyIC8+XG4gKiA8L1JvdXRpbmdDb250ZXh0LlByb3ZpZGVyPlxuICogYGBgXG4gKi9cbi8qKlxuICogQ3JlYXRlIGEgcm91dGVyICh0eXBlZCBvdmVybG9hZCkuIFdoZW4gY2FsbGVkIHdpdGggYSBjb25zdCB0dXBsZSBvZiByb3V0ZXMsIGdlbmVyaWNzIGFyZSBwcmVzZXJ2ZWQuXG4gKi9cbi8qKlxuICogT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgYGNyZWF0ZVJvdXRlcmAuXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZVJvdXRlck9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIGV4cG9zZXMgYSBsaWdodHdlaWdodCBkZWJ1ZyBicmlkZ2Ugb24gYHdpbmRvdy5fX1BMVU1JTEVfUk9VVEVSX19gXG4gICAqIGNvbnRhaW5pbmcgYHsgZ2V0LCBzdWJzY3JpYmUgfWAuIEludGVuZGVkIGZvciBsb2NhbCB0b29saW5nIC8gdGhlIERldlRvb2xzIGV4dGVuc2lvbi5cbiAgICovXG4gIGRlYnVnPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJvdXRlciBpbnN0YW5jZSBmcm9tIGEgcm91dGUgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcm91dGVzIC0gUm91dGUgZGVmaW5pdGlvbnMgdG8gcmVnaXN0ZXIuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGRlYnVnIHNldHRpbmdzIHVzZWQgZm9yIGV4cG9zaW5nIGRldmVsb3BtZW50IHRvb2xpbmcuXG4gKiBAcGFyYW0gb3B0aW9ucy5kZWJ1ZyAtIFdoZW4gdHJ1ZSwgcHVibGlzaGVzIGB3aW5kb3cuX19QTFVNSUxFX1JPVVRFUl9fYCAoZGV2ZWxvcG1lbnQgb25seSkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVJvdXRlcjxSIGV4dGVuZHMgQW55Um91dGVbXT4oXG4gIHJvdXRlczogWy4uLlJdIHwgQW55Um91dGVbXSxcbiAgb3B0aW9uczogQ3JlYXRlUm91dGVyT3B0aW9ucyA9IHt9LFxuKTogQ3JlYXRlUm91dGVyUmV0dXJuPFIgZXh0ZW5kcyBBbnlSb3V0ZVtdID8gUiA6IEFueVJvdXRlW10+IHtcbiAgLy8gSW5pdGlhbGl6ZSBicm93c2VyIGhpc3RvcnkgbWFuYWdlclxuICBjb25zdCBoaXN0b3J5ID0gbmV3IEJyb3dzZXJIaXN0b3J5KCk7XG5cbiAgLy8gQnVpbGQgYSBmbGF0IGxpc3Qgb2Ygcm91dGVzIGZvciBlZmZpY2llbnQgbWF0Y2hpbmdcbiAgY29uc3QgZmxhdFJvdXRlcyA9IGJ1aWxkUm91dGVzKHJvdXRlcyk7XG5cbiAgLy8gRmluZCB0aGUgaW5pdGlhbCByb3V0ZSBtYXRjaCBhbmQgcHJlcGFyZSBpdCBmb3IgcmVuZGVyaW5nXG4gIGNvbnN0IHJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIGhpc3RvcnkubG9jYXRpb24pO1xuICBjb25zdCBpbml0aWFsUmF3UXVlcnkgPSBwYXJzZVJhd1F1ZXJ5KGhpc3RvcnkubG9jYXRpb24uc2VhcmNoKTtcbiAgLy8gRGlyZWN0IHNjaGVtYTogb25seSB0aGUgbWF0Y2hlZCByb3V0ZSdzIG93biBxdWVyeVNjaGVtYSAobm8gaGllcmFyY2hpY2FsIGRpc2NvdmVyeSlcbiAgbGV0IGluaXRpYWxVbmlmaWVkU2NoZW1hOiBhbnk7XG4gIGlmIChyb3V0ZSAhPSBudWxsKSB7XG4gICAgY29uc3QgbGFzdCA9IHJvdXRlLnJvdXRlLnJvdXRlcy5hdCgtMSkgYXMgdW5rbm93biBhcyB7XG4gICAgICBxdWVyeVNjaGVtYT86IHVua25vd247XG4gICAgfSB8IG51bGw7XG4gICAgaWYgKGxhc3QgIT0gbnVsbCkge1xuICAgICAgaW5pdGlhbFVuaWZpZWRTY2hlbWEgPSBsYXN0LnF1ZXJ5U2NoZW1hO1xuICAgIH1cbiAgfVxuICBsZXQgaW5pdGlhbEZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBsZXQgaW5pdGlhbEZpbHRlckRpYWdub3N0aWNzOiBhbnlbXSB8IHVuZGVmaW5lZDtcbiAgaWYgKGluaXRpYWxVbmlmaWVkU2NoZW1hICE9IG51bGwpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUZpbHRlcnMoaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gsIGluaXRpYWxVbmlmaWVkU2NoZW1hKTtcbiAgICBpbml0aWFsRmlsdGVycyA9IHBhcnNlZC5maWx0ZXJzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaW5pdGlhbEZpbHRlckRpYWdub3N0aWNzID0gcGFyc2VkLmRpYWdub3N0aWNzIGFzIHVua25vd25bXTtcbiAgfVxuICBjb25zdCBwcmVwYXJlZE1hdGNoID0gcHJlcGFyZU1hdGNoKHJvdXRlLCBpbml0aWFsRmlsdGVycyk7XG4gIC8vIEhlbHBlciB0byBidWlsZCB0aGUgcmF3IHF1ZXJ5IG9iamVjdCBmcm9tIGEgc2VhcmNoIHN0cmluZ1xuICBsZXQgY3VycmVudEVudHJ5OiBSb3V0ZUVudHJ5PGFueT4gPSB7XG4gICAgZm9yY2VSZXJlbmRlcjogZmFsc2UsXG4gICAgbG9jYXRpb246IGhpc3RvcnkubG9jYXRpb24sXG4gICAgcm91dGUsXG4gICAgcHJlcGFyZWRNYXRjaCxcbiAgICByYXdTZWFyY2g6IGhpc3RvcnkubG9jYXRpb24uc2VhcmNoLFxuICAgIHF1ZXJ5OiBpbml0aWFsUmF3UXVlcnksXG4gICAgLy8gdHlwZWRRdWVyeSByZW1vdmVkICh1bmlmaWVkIGludG8gZmlsdGVycy9xdWVyeSlcbiAgICBmaWx0ZXJzOiBpbml0aWFsRmlsdGVycyxcbiAgICBmaWx0ZXJEaWFnbm9zdGljczogaW5pdGlhbEZpbHRlckRpYWdub3N0aWNzLFxuICAgIGFjdGl2ZVF1ZXJ5U2NoZW1hOiBpbml0aWFsVW5pZmllZFNjaGVtYSxcbiAgfTtcblxuICAvLyBJbml0aWFsIG5vcm1hbGl6YXRpb24gcGFzcyAoZS5nLiwgY2xhbXAgcGFnZSlcbiAgY29uc3QgaW5pdFR5cGVkID0gY3VycmVudEVudHJ5LmZpbHRlcnMgYXMgdW5rbm93biBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IHVuZGVmaW5lZDtcbiAgbGV0IGluaXRQYWdlTnVtZXJpYzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBpZiAoaW5pdFR5cGVkICE9IG51bGwpIHtcbiAgICBjb25zdCByYXdQYWdlID0gaW5pdFR5cGVkLnBhZ2U7XG4gICAgaWYgKHR5cGVvZiByYXdQYWdlID09PSAnbnVtYmVyJykgaW5pdFBhZ2VOdW1lcmljID0gcmF3UGFnZTtcbiAgICBlbHNlIGlmIChcbiAgICAgIHJhd1BhZ2UgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHJhd1BhZ2UgPT09ICdvYmplY3QnICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShyYXdQYWdlKSAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhd1BhZ2UsICdlcScpICYmXG4gICAgICB0eXBlb2YgKHJhd1BhZ2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmVxID09PSAnbnVtYmVyJ1xuICAgICkge1xuICAgICAgaW5pdFBhZ2VOdW1lcmljID0gKHJhd1BhZ2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmVxIGFzIG51bWJlcjtcbiAgICB9XG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiBpbml0UGFnZU51bWVyaWMgPT09ICdudW1iZXInICYmXG4gICAgaW5pdFBhZ2VOdW1lcmljIDwgMSAmJlxuICAgIGluaXRpYWxVbmlmaWVkU2NoZW1hICE9IG51bGwgJiZcbiAgICBpbml0VHlwZWQgIT0gbnVsbFxuICApIHtcbiAgICBjb25zdCBub3JtID0geyAuLi5pbml0VHlwZWQsIHBhZ2U6IHsgZXE6IDEgfSB9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGN1cnJlbnRFbnRyeS5maWx0ZXJzID0gbm9ybTsgLy8gaW1tZWRpYXRlIHZpc2liaWxpdHlcbiAgICBjb25zdCBub3JtYWxpemVkU2VhcmNoID0gYnVpbGRDb21iaW5lZFNlYXJjaCh7XG4gICAgICBmaWx0ZXJzOiBub3JtLFxuICAgICAgcXVlcnlTY2hlbWE6IGluaXRpYWxVbmlmaWVkU2NoZW1hLFxuICAgIH0pOyAvLyByZXR1cm5zICcnIG9yIHN0cmluZyBzdGFydGluZyB3aXRoICc/J1xuICAgIGlmIChub3JtYWxpemVkU2VhcmNoICE9PSBoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCkge1xuICAgICAgaGlzdG9yeS5zZXQoe1xuICAgICAgICBwYXRobmFtZTogaGlzdG9yeS5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgc2VhcmNoOiBub3JtYWxpemVkU2VhcmNoLFxuICAgICAgICBoYXNoOiAnJyxcbiAgICAgIH0pO1xuICAgICAgLy8gVXBkYXRlIGN1cnJlbnRFbnRyeS5sb2NhdGlvbiB0byByZWZsZWN0IG5ldyBzZWFyY2ggZGlyZWN0bHkgKGhpc3Rvcnkuc2V0IHRyaWdnZXJzIGFzeW5jIHN1YnNjcmliZXIpXG4gICAgICBjdXJyZW50RW50cnkgPSB7XG4gICAgICAgIC4uLmN1cnJlbnRFbnRyeSxcbiAgICAgICAgbG9jYXRpb246IHsgLi4uY3VycmVudEVudHJ5LmxvY2F0aW9uLCBzZWFyY2g6IG5vcm1hbGl6ZWRTZWFyY2ggfSxcbiAgICAgICAgcmF3U2VhcmNoOiBub3JtYWxpemVkU2VhcmNoLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBNYWludGFpbiBhIHNldCBvZiBzdWJzY3JpYmVycyB0byB0aGUgYWN0aXZlIHJvdXRlIGVudHJ5XG4gIGxldCBuZXh0SWQgPSAwO1xuICBjb25zdCBzdWJzY3JpYmVycyA9IG5ldyBNYXA8bnVtYmVyLCBTdWJzY3JpYmVDYWxsYmFjazxhbnk+PigpO1xuXG4gIC8vIExpc3RlbiBmb3IgbG9jYXRpb24gY2hhbmdlcywgbWF0Y2ggdG8gdGhlIHJvdXRlIGVudHJ5LCBwcmVwYXJlIHRoZSBlbnRyeSxcbiAgLy8gYW5kIG5vdGlmeSBzdWJzY3JpYmVycy4gVGhpcyBwYXR0ZXJuIGVuc3VyZXMgdGhhdCBkYXRhLWxvYWRpbmdcbiAgLy8gb2NjdXJzICpvdXRzaWRlKiBvZiAtIGFuZCAqYmVmb3JlKiAtIHJlbmRlcmluZy5cbiAgY29uc3QgY2xlYW51cCA9IGhpc3Rvcnkuc3Vic2NyaWJlKChsb2NhdGlvbiwgZm9yY2VSZXJlbmRlcikgPT4ge1xuICAgIGNvbnN0IHNhbWVQYXRobmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lID09PSBjdXJyZW50RW50cnkubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgY29uc3Qgc2FtZVNlYXJjaCA9IGxvY2F0aW9uLnNlYXJjaCA9PT0gY3VycmVudEVudHJ5LnJhd1NlYXJjaDtcblxuICAgIGlmICghZm9yY2VSZXJlbmRlciAmJiBzYW1lUGF0aG5hbWUgJiYgc2FtZVNlYXJjaCkge1xuICAgICAgLy8gTm90aGluZyBjaGFuZ2VkIHRoYXQgd2UgY2FyZSBhYm91dFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgdGhlIHNlYXJjaCBjaGFuZ2VkIHdlIHN0aWxsIHdhbnQgdG8gcHJvcGFnYXRlIHRoZSBjaGFuZ2UuXG4gICAgLy8gS2VlcCB0aGUgZXhpc3RpbmcgcHJlcGFyZWRNYXRjaCB3aGVuIHBhdGhuYW1lIGlzIGlkZW50aWNhbCB0byBhdm9pZCByZWR1bmRhbnQgd29yay5cbiAgICBsZXQgbmV4dFByZXBhcmVkTWF0Y2ggPSBjdXJyZW50RW50cnkucHJlcGFyZWRNYXRjaDtcbiAgICBsZXQgbmV4dFJvdXRlID0gY3VycmVudEVudHJ5LnJvdXRlO1xuXG4gICAgaWYgKCFzYW1lUGF0aG5hbWUpIHtcbiAgICAgIC8vIFBhdGggY2hhbmdlZDogcmVjb21wdXRlIG1hdGNoICsgcHJlcGFyZWQgZGF0YSBpbmNsdWRpbmcgcXVlcnlcbiAgICAgIG5leHRSb3V0ZSA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCBoaXN0b3J5LmxvY2F0aW9uKTtcbiAgICAgIC8vIHdlIHdpbGwgc2V0IGJlbG93IGFmdGVyIGNvbXB1dGluZyB0eXBlZCBxdWVyeVxuICAgIH1cblxuICAgIC8vIEJ1aWxkIHJhdyBxdWVyeSBvYmplY3QgKGJhc2ljIGFnZ3JlZ2F0aW9uKSBmcm9tIGxvY2F0aW9uLnNlYXJjaFxuICAgIGNvbnN0IHF1ZXJ5ID0gcGFyc2VSYXdRdWVyeShsb2NhdGlvbi5zZWFyY2gpO1xuICAgIC8vIERldGVybWluZSBzY2hlbWEgZnJvbSBkZWVwZXN0IG1hdGNoZWQgcm91dGVcbiAgICBsZXQgcXVlcnlTY2hlbWE6IGFueTtcbiAgICBpZiAobmV4dFJvdXRlICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGxhc3QgPSBuZXh0Um91dGUucm91dGUucm91dGVzLmF0KC0xKSBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgcXVlcnlTY2hlbWE/OiB1bmtub3duO1xuICAgICAgfSB8IG51bGw7XG4gICAgICBpZiAobGFzdCAhPSBudWxsKSB7XG4gICAgICAgIHF1ZXJ5U2NoZW1hID0gbGFzdC5xdWVyeVNjaGVtYTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUGFyc2UgdW5pZmllZCBmaWx0ZXJzXG4gICAgbGV0IGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGxldCBmaWx0ZXJEaWFnbm9zdGljczogYW55W10gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHF1ZXJ5U2NoZW1hICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZEYgPSBwYXJzZUZpbHRlcnMobG9jYXRpb24uc2VhcmNoLCBxdWVyeVNjaGVtYSk7XG4gICAgICBmaWx0ZXJzID0gcGFyc2VkRi5maWx0ZXJzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBmaWx0ZXJEaWFnbm9zdGljcyA9IHBhcnNlZEYuZGlhZ25vc3RpY3MgYXMgdW5rbm93bltdO1xuICAgIH1cbiAgICAvLyBOb3JtYWxpemF0aW9uOiBjbGFtcCBwYWdlID49IDEgaWYgbnVtZXJpYyBwYWdlIHByZXNlbnRcbiAgICBsZXQgbm9ybWFsaXplZCA9IGZhbHNlO1xuICAgIGxldCBwZzogdW5rbm93bjtcbiAgICBpZiAoZmlsdGVycyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBmOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IGZpbHRlcnM7XG4gICAgICBjb25zdCBtYXliZSA9IGYucGFnZTtcbiAgICAgIGlmIChcbiAgICAgICAgbWF5YmUgIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgbWF5YmUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KG1heWJlKSAmJlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWF5YmUsICdlcScpXG4gICAgICApIHtcbiAgICAgICAgcGcgPSAobWF5YmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmVxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGcgPSBtYXliZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwZyA9PT0gJ251bWJlcicgJiYgcGcgPCAxKSB7XG4gICAgICBjb25zdCBjbG9uZSA9IHsgLi4uKGZpbHRlcnMgYXMgUmVjb3JkPHN0cmluZywgYW55PiksIHBhZ2U6IHsgZXE6IDEgfSB9O1xuICAgICAgZmlsdGVycyA9IGNsb25lO1xuICAgICAgbm9ybWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSB0aGUgc2VhcmNoIGNoYW5nZWQgKHNhbWUgcGF0aG5hbWUpIHdlIHN0aWxsIG5lZWQgdG8gcmUtcnVuIHByZXBhcmVcbiAgICBpZiAoIXNhbWVQYXRobmFtZSB8fCAhc2FtZVNlYXJjaCkge1xuICAgICAgbmV4dFByZXBhcmVkTWF0Y2ggPSBwcmVwYXJlTWF0Y2gobmV4dFJvdXRlLCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRFbnRyeTogUm91dGVFbnRyeTxhbnk+ID0ge1xuICAgICAgZm9yY2VSZXJlbmRlcjogZm9yY2VSZXJlbmRlciB8fCAoc2FtZVBhdGhuYW1lICYmICFzYW1lU2VhcmNoKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcm91dGU6IG5leHRSb3V0ZSxcbiAgICAgIHByZXBhcmVkTWF0Y2g6IG5leHRQcmVwYXJlZE1hdGNoLFxuICAgICAgcmF3U2VhcmNoOiBsb2NhdGlvbi5zZWFyY2gsXG4gICAgICBxdWVyeSxcbiAgICAgIGZpbHRlcnMsXG4gICAgICBmaWx0ZXJEaWFnbm9zdGljcyxcbiAgICAgIGFjdGl2ZVF1ZXJ5U2NoZW1hOiBxdWVyeVNjaGVtYSxcbiAgICB9O1xuXG4gICAgLy8gSWYgbm9ybWFsaXphdGlvbiBjaGFuZ2VkIHRoZSB0eXBlZCBxdWVyeSB3ZSB0cmlnZ2VyIGEgcmVwbGFjZSB3aXRoIG5vcm1hbGl6ZWQgc2VhcmNoXG4gICAgaWYgKG5vcm1hbGl6ZWQgJiYgcXVlcnlTY2hlbWEgIT0gbnVsbCkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IGJ1aWxkQ29tYmluZWRTZWFyY2goe1xuICAgICAgICBmaWx0ZXJzLFxuICAgICAgICBxdWVyeVNjaGVtYSxcbiAgICAgIH0pO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRTZWFyY2ggIT09IGxvY2F0aW9uLnNlYXJjaCkge1xuICAgICAgICBsZXQgbmV4dFNlYXJjaFN0ciA9IG5vcm1hbGl6ZWRTZWFyY2g7XG4gICAgICAgIGlmICghbmV4dFNlYXJjaFN0ci5zdGFydHNXaXRoKCc/JykpIHtcbiAgICAgICAgICBpZiAobmV4dFNlYXJjaFN0ciA9PT0gJycpIG5leHRTZWFyY2hTdHIgPSAnJztcbiAgICAgICAgICBlbHNlIG5leHRTZWFyY2hTdHIgPSBgPyR7bmV4dFNlYXJjaFN0cn1gO1xuICAgICAgICB9XG4gICAgICAgIGhpc3Rvcnkuc2V0KHtcbiAgICAgICAgICBwYXRobmFtZTogbG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgc2VhcmNoOiBuZXh0U2VhcmNoU3RyLFxuICAgICAgICAgIGhhc2g6ICcnLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuOyAvLyBlYXJseTogc3Vic2VxdWVudCBzZXQgd2lsbCB0cmlnZ2VyIHJlcnVuXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGN1cnJlbnQgZW50cnkgYW5kIG5vdGlmeSBhbGwgc3Vic2NyaWJlcnNcbiAgICBjdXJyZW50RW50cnkgPSBuZXh0RW50cnk7XG4gICAgc3Vic2NyaWJlcnMuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgIGNhbGxiYWNrKG5leHRFbnRyeSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFRoZSByb3V0ZXIgY29udGV4dCBvYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBSZWFjdCBDb250ZXh0XG4gIGNvbnN0IGNvbnRleHQ6IFJvdXRpbmdDb250ZXh0VHlwZTxhbnk+ICZcbiAgICBQcmVwYXJlZEFjY2VzczxBbnlSb3V0ZVtdPiAmIHtcbiAgICAgIG5hdmlnYXRlOiBOYXZpZ2F0ZU92ZXJsb2FkczxBbnlSb3V0ZVtdPjtcbiAgICB9ID0ge1xuICAgIGhpc3RvcnksXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRFbnRyeTtcbiAgICB9LFxuICAgIHByZWxvYWRDb2RlKHBhdGhuYW1lKSB7XG4gICAgICAvLyBQcmVsb2FkIGp1c3QgdGhlIGNvbXBvbmVudCBjb2RlIGZvciBhIHJvdXRlIHdpdGhvdXQgc3RvcmluZyB0aGUgcmVzdWx0XG4gICAgICBjb25zdCBtYXRjaGVzID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIHtcbiAgICAgICAgLi4ud2luZG93LmxvY2F0aW9uLFxuICAgICAgICBwYXRobmFtZSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAobWF0Y2hlcyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gTG9hZCBhbGwgcmVzb3VyY2UgcGFnZXMgZm9yIHRoZSBtYXRjaGVkIHJvdXRlXG4gICAgICBtYXRjaGVzLnJvdXRlLnJvdXRlcy5mb3JFYWNoKCh7IHJlc291cmNlUGFnZSB9KSA9PiB7XG4gICAgICAgIGlmIChyZXNvdXJjZVBhZ2UgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICAgIHJlc291cmNlUGFnZS5sb2FkKCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHByZWxvYWQocGF0aG5hbWUpIHtcbiAgICAgIC8vIFByZWxvYWQgYm90aCB0aGUgY29tcG9uZW50IGNvZGUgYW5kIHByZXBhcmVkIGRhdGEgZm9yIGEgcm91dGVcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywge1xuICAgICAgICAuLi53aW5kb3cubG9jYXRpb24sXG4gICAgICAgIHBhdGhuYW1lLFxuICAgICAgfSk7XG4gICAgICBwcmVwYXJlTWF0Y2gobWF0Y2hlcyk7XG4gICAgfSxcbiAgICBzdWJzY3JpYmUoY2FsbGJhY2spIHtcbiAgICAgIC8vIEFkZCBhIG5ldyBzdWJzY3JpYmVyIGFuZCByZXR1cm4gdW5zdWJzY3JpYmUgZnVuY3Rpb25cbiAgICAgIG5leHRJZCArPSAxO1xuICAgICAgY29uc3QgaWQgPSBuZXh0SWQ7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1zdHlsZVxuICAgICAgY29uc3QgZGlzcG9zZSA9ICgpID0+IHtcbiAgICAgICAgc3Vic2NyaWJlcnMuZGVsZXRlKGlkKTtcbiAgICAgIH07XG4gICAgICBzdWJzY3JpYmVycy5zZXQoaWQsIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiBkaXNwb3NlO1xuICAgIH0sXG4gICAgbmF2aWdhdGUoeyBwYXRobmFtZSwgcXVlcnksIGZpbHRlcnM6IG5hdkZpbHRlcnMsIHJlcGxhY2UgfTogYW55KSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gY3VycmVudEVudHJ5O1xuICAgICAgY29uc3QgdGFyZ2V0UGF0aG5hbWUgPSBwYXRobmFtZSA/PyBjdXJyZW50LmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgICAgLy8gRGV0ZXJtaW5lIHNjaGVtYSBvZiBkZXN0aW5hdGlvbiAoaWYgc2FtZSBwYXRoIGFuZCB3ZSBoYXZlIHJvdXRlIHdlIGNhbiByZXVzZSwgZWxzZSByZW1hdGNoKVxuICAgICAgbGV0IGRlc3RTY2hlbWE6IGFueTtcbiAgICAgIC8vIEFsd2F5cyBhdHRlbXB0IGZ1bGwgbWF0Y2ggZm9yIGRlc3RpbmF0aW9uIHRvIGVuc3VyZSBzY2hlbWEgcHJlc2VudCBldmVuIGlmIHNhbWUgcGF0aG5hbWVcbiAgICAgIGNvbnN0IGRlc3RSb3V0ZSA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCB7XG4gICAgICAgIC4uLndpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgcGF0aG5hbWU6IHRhcmdldFBhdGhuYW1lLFxuICAgICAgfSk7XG4gICAgICBpZiAoZGVzdFJvdXRlICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IGRlc3RSb3V0ZS5yb3V0ZS5yb3V0ZXMuYXQoLTEpIGFzIHVua25vd24gYXMge1xuICAgICAgICAgIHF1ZXJ5U2NoZW1hPzogdW5rbm93bjtcbiAgICAgICAgfSB8IG51bGw7XG4gICAgICAgIGlmIChsYXN0ICE9IG51bGwpIHtcbiAgICAgICAgICBkZXN0U2NoZW1hID0gbGFzdC5xdWVyeVNjaGVtYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRmFsbGJhY2sgdG8gY3VycmVudGx5IGFjdGl2ZSBzY2hlbWEgaWYgZGVzdGluYXRpb24gc2NoZW1hIG5vdCBmb3VuZCAoZS5nLiwgcmFjZSBjb25kaXRpb25zKVxuICAgICAgZGVzdFNjaGVtYSA/Pz0gY3VycmVudC5hY3RpdmVRdWVyeVNjaGVtYTtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZUZpbHRlcnMgPSBuYXZGaWx0ZXJzID8/IGN1cnJlbnQuZmlsdGVycztcbiAgICAgIC8vIFRyZWF0IGxlZ2FjeSBuYXZpZ2F0ZSh7IHF1ZXJ5IH0pIGFzIGZpbHRlcnMgaW4gdW5pZmllZCBtb2RlbCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgY29uc3QgZmlsdGVyc0lucHV0ID1cbiAgICAgICAgZWZmZWN0aXZlRmlsdGVycyA/PyAocXVlcnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpO1xuICAgICAgY29uc3Qgc2VhcmNoID0gYnVpbGRDb21iaW5lZFNlYXJjaCh7XG4gICAgICAgIGZpbHRlcnM6IGZpbHRlcnNJbnB1dCxcbiAgICAgICAgcXVlcnlTY2hlbWE6IGRlc3RTY2hlbWEsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxvY2F0aW9uT2JqID0geyBwYXRobmFtZTogdGFyZ2V0UGF0aG5hbWUsIHNlYXJjaCwgaGFzaDogJycgfTtcbiAgICAgIGlmIChyZXBsYWNlID09PSB0cnVlKSB7XG4gICAgICAgIGhpc3Rvcnkuc2V0KGxvY2F0aW9uT2JqKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpc3RvcnkucHVzaChsb2NhdGlvbk9iaik7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRQcmVwYXJlZChwYXRoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IGN1cnJlbnRFbnRyeTtcbiAgICAgICAgLy8gRmluZCBsYXN0IHByZXBhcmVkIHJvdXRlIHdpdGggbWF0Y2hpbmcgcGF0aFxuICAgICAgICBmb3IgKGNvbnN0IHByIG9mIGVudHJ5LnByZXBhcmVkTWF0Y2gucm91dGVzKSB7XG4gICAgICAgICAgaWYgKHByLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBwci5wcmVwYXJlZCBhcyBhbnk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIGdldFR5cGVkUXVlcnkgcmVtb3ZlZFxuICB9O1xuXG4gIGlmIChvcHRpb25zLmRlYnVnID09PSB0cnVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAod2luZG93IGFzIHVua25vd24gYXMgeyBfX1BMVU1JTEVfUk9VVEVSX18/OiBhbnkgfSkuX19QTFVNSUxFX1JPVVRFUl9fID1cbiAgICAgICAgICB7XG4gICAgICAgICAgICBnZXQ6IGNvbnRleHQuZ2V0LFxuICAgICAgICAgICAgc3Vic2NyaWJlOiBjb250ZXh0LnN1YnNjcmliZSxcbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLyogaWdub3JlICovXG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJuIGJvdGggdGhlIGNvbnRleHQgb2JqZWN0IGFuZCBhIGNsZWFudXAgZnVuY3Rpb25cbiAgcmV0dXJuIHsgY29udGV4dCwgY2xlYW51cCB9O1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"useAllQuery.d.ts","sourceRoot":"","sources":["../../../src/routing/useAllQuery.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,kBAAkB,GAAG;IAE/B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAWF,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnE,IAAI,GAAE,kBAAuB,GAC5B,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KAAK,IAAI,CAAC,CAkCrE"}
1
+ {"version":3,"file":"useAllQuery.d.ts","sourceRoot":"","sources":["../../../src/routing/useAllQuery.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,kBAAkB,GAAG;IAE/B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAQF,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnE,IAAI,GAAE,kBAAuB,GAC5B,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KAAK,IAAI,CAAC,CAkCrE"}
@@ -28,4 +28,4 @@ export default function useAllQuery(opts = {}) {
28
28
  }, [ctx, opts.replace]);
29
29
  return [rawQuery, setValue];
30
30
  }
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlQWxsUXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGluZy91c2VBbGxRdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNoRCxPQUFPLGNBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQWlCakQsTUFBTSxDQUFDLE9BQU8sVUFBVSxXQUFXLENBQ2pDLE9BQTJCLEVBQUU7SUFFN0IsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUV6QixNQUFNLFFBQVEsR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDO0lBRTlCLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FDMUIsQ0FBQyxJQUFPLEVBQUUsT0FBK0IsRUFBRSxFQUFFO1FBQzNDLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2hCLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ2pELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUUzQixNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUE0QixFQUFFLENBQUM7UUFDekMsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixDQUFDO1FBQ0QsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxDQUFDLEdBQUksSUFBZ0MsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFFcEIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FDcEIsQ0FBQztJQUVGLE9BQU8sQ0FBQyxRQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJvdXRpbmdDb250ZXh0IGZyb20gJy4vUm91dGluZ0NvbnRleHQuanMnO1xuXG4vKiogT3B0aW9ucyBmb3IgdXNlQWxsUXVlcnkgKi9cbmV4cG9ydCB0eXBlIFVzZUFsbFF1ZXJ5T3B0aW9ucyA9IHtcbiAgLyoqIFJlcGxhY2UgaW5zdGVhZCBvZiBwdXNoIHdoZW4gdXBkYXRpbmcgKHByZXZlbnRzIG5ldyBoaXN0b3J5IGVudHJ5KSAqL1xuICByZXBsYWNlPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQmlkaXJlY3Rpb25hbCBzdGF0ZSDihpQgVVJMIHN5bmNocm9uaXphdGlvbiBmb3IgYSBzaW5nbGUgcXVlcnkgcGFyYW0uXG4gKlxuICogQmVoYXZpb3VyczpcbiAqIC0gUmVhZHMgZnJvbSB0eXBlZFF1ZXJ5IChpZiBzY2hlbWEgcHJlc2VudCkgZWxzZSByYXcgcXVlcnkgYWdncmVnYXRpb24uXG4gKiAtIFdoZW4gc2V0dGluZyB2YWx1ZSB0byB1bmRlZmluZWQgKG9yIGRlZmF1bHQgd2l0aCBvbWl0SWZEZWZhdWx0KSB0aGUga2V5IGlzIHJlbW92ZWQuXG4gKiAtIFNlcmlhbGl6ZXMgdmlhIG5hdmlnYXRlICsgdW5pZmllZCBidWlsZENvbWJpbmVkU2VhcmNoIChzY2hlbWEgb3JkZXJpbmcgJiBvbWlzc2lvbiByZXNwZWN0ZWQpLlxuICogLSBTdGFibGUgaWRlbnRpdHkgZm9yIHNldHRlci5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlQWxsUXVlcnk8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgb3B0czogVXNlQWxsUXVlcnlPcHRpb25zID0ge30sXG4pOiBbVCB8IHVuZGVmaW5lZCwgKG5leHQ6IFQsIG5hdk9wdHM/OiB7IHJlcGxhY2U/OiBib29sZWFuIH0pID0+IHZvaWRdIHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChSb3V0aW5nQ29udGV4dCk7XG4gIGNvbnN0IGVudHJ5ID0gY3R4Py5nZXQoKTtcblxuICBjb25zdCByYXdRdWVyeSA9IGVudHJ5Py5xdWVyeTtcblxuICBjb25zdCBzZXRWYWx1ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXh0OiBULCBuYXZPcHRzPzogeyByZXBsYWNlPzogYm9vbGVhbiB9KSA9PiB7XG4gICAgICBpZiAoY3R4ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVwbGFjZSA9IG5hdk9wdHM/LnJlcGxhY2UgPz8gb3B0cy5yZXBsYWNlO1xuICAgICAgY29uc3QgZW50cnlOb3cgPSBjdHguZ2V0KCk7XG4gICAgICAvLyBCYXNlIG9iamVjdDogc3RhcnQgZnJvbSBleGlzdGluZyB0eXBlZFF1ZXJ5IGlmIHByZXNlbnQgZWxzZSByYXcgcXVlcnkgY2xvbmVcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHsgLi4uZW50cnlOb3cucXVlcnkgfTtcbiAgICAgIGNvbnN0IGJhc2U6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoc291cmNlKSkge1xuICAgICAgICBiYXNlW2tdID0gc291cmNlW2tdO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKG5leHQpKSB7XG4gICAgICAgIGNvbnN0IHYgPSAobmV4dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba107XG4gICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgICAgICAgZGVsZXRlIGJhc2Vba107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmFzZVtrXSA9IHY7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGN0eC5uYXZpZ2F0ZSh7IHF1ZXJ5OiBiYXNlLCByZXBsYWNlIH0pO1xuICAgIH0sXG4gICAgW2N0eCwgb3B0cy5yZXBsYWNlXSxcbiAgKTtcblxuICByZXR1cm4gW3Jhd1F1ZXJ5IGFzIFQsIHNldFZhbHVlXTtcbn1cbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlQWxsUXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGluZy91c2VBbGxRdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNoRCxPQUFPLGNBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQWNqRCxNQUFNLENBQUMsT0FBTyxVQUFVLFdBQVcsQ0FDakMsT0FBMkIsRUFBRTtJQUU3QixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkMsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBRXpCLE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxLQUFLLENBQUM7SUFFOUIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUMxQixDQUFDLElBQU8sRUFBRSxPQUErQixFQUFFLEVBQUU7UUFDM0MsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDaEIsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxPQUFPLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDakQsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRTNCLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQTRCLEVBQUUsQ0FBQztRQUN6QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFDRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxNQUFNLENBQUMsR0FBSSxJQUFnQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUVwQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUNwQixDQUFDO0lBRUYsT0FBTyxDQUFDLFFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUm91dGluZ0NvbnRleHQgZnJvbSAnLi9Sb3V0aW5nQ29udGV4dC5qcyc7XG5cbi8qKiBPcHRpb25zIGNvbnRyb2xsaW5nIGhvdyBgdXNlQWxsUXVlcnlgIHdyaXRlcyBiYWNrIHRvIHRoZSBoaXN0b3J5IHN0YWNrLiAqL1xuZXhwb3J0IHR5cGUgVXNlQWxsUXVlcnlPcHRpb25zID0ge1xuICAvKiogUmVwbGFjZSBpbnN0ZWFkIG9mIHB1c2ggd2hlbiB1cGRhdGluZyAocHJldmVudHMgbmV3IGhpc3RvcnkgZW50cnkpICovXG4gIHJlcGxhY2U/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBTeW5jaHJvbmlzZXMgYW4gb2JqZWN0IG9mIHF1ZXJ5IHBhcmFtZXRlcnMgd2l0aCB0aGUgcm91dGVyIHN0YXRlLlxuICpcbiAqIEBwYXJhbSBvcHRzIC0gT3B0aW9uYWwgbmF2aWdhdGlvbiBvcHRpb25zIChgcmVwbGFjZWAgbWlycm9ycyBoaXN0b3J5LnJlcGxhY2VTdGF0ZSkuXG4gKiBAcmV0dXJucyBUdXBsZSBjb250YWluaW5nIHRoZSBhZ2dyZWdhdGVkIHF1ZXJ5IG9iamVjdCBhbmQgYSBzZXR0ZXIgdGhhdCB3cml0ZXMgYmFjayB2aWEgYG5hdmlnYXRlYC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlQWxsUXVlcnk8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgb3B0czogVXNlQWxsUXVlcnlPcHRpb25zID0ge30sXG4pOiBbVCB8IHVuZGVmaW5lZCwgKG5leHQ6IFQsIG5hdk9wdHM/OiB7IHJlcGxhY2U/OiBib29sZWFuIH0pID0+IHZvaWRdIHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChSb3V0aW5nQ29udGV4dCk7XG4gIGNvbnN0IGVudHJ5ID0gY3R4Py5nZXQoKTtcblxuICBjb25zdCByYXdRdWVyeSA9IGVudHJ5Py5xdWVyeTtcblxuICBjb25zdCBzZXRWYWx1ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXh0OiBULCBuYXZPcHRzPzogeyByZXBsYWNlPzogYm9vbGVhbiB9KSA9PiB7XG4gICAgICBpZiAoY3R4ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVwbGFjZSA9IG5hdk9wdHM/LnJlcGxhY2UgPz8gb3B0cy5yZXBsYWNlO1xuICAgICAgY29uc3QgZW50cnlOb3cgPSBjdHguZ2V0KCk7XG4gICAgICAvLyBCYXNlIG9iamVjdDogc3RhcnQgZnJvbSBleGlzdGluZyB0eXBlZFF1ZXJ5IGlmIHByZXNlbnQgZWxzZSByYXcgcXVlcnkgY2xvbmVcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHsgLi4uZW50cnlOb3cucXVlcnkgfTtcbiAgICAgIGNvbnN0IGJhc2U6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoc291cmNlKSkge1xuICAgICAgICBiYXNlW2tdID0gc291cmNlW2tdO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKG5leHQpKSB7XG4gICAgICAgIGNvbnN0IHYgPSAobmV4dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba107XG4gICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgICAgICAgZGVsZXRlIGJhc2Vba107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmFzZVtrXSA9IHY7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGN0eC5uYXZpZ2F0ZSh7IHF1ZXJ5OiBiYXNlLCByZXBsYWNlIH0pO1xuICAgIH0sXG4gICAgW2N0eCwgb3B0cy5yZXBsYWNlXSxcbiAgKTtcblxuICByZXR1cm4gW3Jhd1F1ZXJ5IGFzIFQsIHNldFZhbHVlXTtcbn1cbiJdfQ==