@workflow/web-shared 5.0.0-beta.12 → 5.0.0-beta.14

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 (75) hide show
  1. package/dist/components/event-list-view.d.ts.map +1 -1
  2. package/dist/components/event-list-view.js +9 -9
  3. package/dist/components/new-trace-viewer/components/event-list.d.ts +1 -1
  4. package/dist/components/new-trace-viewer/components/event-list.d.ts.map +1 -1
  5. package/dist/components/new-trace-viewer/components/event-list.js +6 -4
  6. package/dist/components/new-trace-viewer/components/timeline.d.ts +1 -1
  7. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -1
  8. package/dist/components/new-trace-viewer/components/timeline.js +7 -7
  9. package/dist/components/new-trace-viewer/context.d.ts +1 -1
  10. package/dist/components/new-trace-viewer/context.d.ts.map +1 -1
  11. package/dist/components/new-trace-viewer/context.js +1 -1
  12. package/dist/components/new-trace-viewer/icons.js +3 -3
  13. package/dist/components/new-trace-viewer/search.d.ts +1 -1
  14. package/dist/components/new-trace-viewer/search.d.ts.map +1 -1
  15. package/dist/components/new-trace-viewer/search.js +1 -1
  16. package/dist/components/new-trace-viewer/trace-viewer.d.ts +2 -2
  17. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -1
  18. package/dist/components/new-trace-viewer/trace-viewer.js +6 -7
  19. package/dist/components/new-trace-viewer/types.d.ts +2 -0
  20. package/dist/components/new-trace-viewer/types.d.ts.map +1 -1
  21. package/dist/components/new-trace-viewer/types.js +2 -2
  22. package/dist/components/new-trace-viewer/utils.d.ts +1 -1
  23. package/dist/components/new-trace-viewer/utils.d.ts.map +1 -1
  24. package/dist/components/new-trace-viewer/utils.js +1 -1
  25. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  26. package/dist/components/sidebar/attribute-panel.js +14 -10
  27. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  28. package/dist/components/sidebar/entity-detail-panel.js +12 -11
  29. package/dist/components/sidebar/events-list.d.ts +3 -1
  30. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  31. package/dist/components/sidebar/events-list.js +10 -9
  32. package/dist/components/sidebar/span-detail-merge.d.ts +16 -0
  33. package/dist/components/sidebar/span-detail-merge.d.ts.map +1 -0
  34. package/dist/components/sidebar/span-detail-merge.js +53 -0
  35. package/dist/components/trace-viewer/util/timing.d.ts +2 -2
  36. package/dist/components/trace-viewer/util/timing.d.ts.map +1 -1
  37. package/dist/components/trace-viewer/util/timing.js +3 -3
  38. package/dist/components/trace-viewer-new.d.ts.map +1 -1
  39. package/dist/components/trace-viewer-new.js +2 -3
  40. package/dist/components/ui/error-stack-block.d.ts +17 -10
  41. package/dist/components/ui/error-stack-block.d.ts.map +1 -1
  42. package/dist/components/ui/error-stack-block.js +30 -19
  43. package/dist/index.d.ts +1 -1
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +2 -2
  46. package/dist/lib/utils.d.ts +11 -0
  47. package/dist/lib/utils.d.ts.map +1 -1
  48. package/dist/lib/utils.js +49 -1
  49. package/package.json +3 -3
  50. package/src/components/event-list-view.tsx +12 -11
  51. package/src/components/new-trace-viewer/components/event-list.tsx +6 -5
  52. package/src/components/new-trace-viewer/components/timeline.tsx +11 -7
  53. package/src/components/new-trace-viewer/context.tsx +1 -1
  54. package/src/components/new-trace-viewer/icons.tsx +2 -2
  55. package/src/components/new-trace-viewer/search.ts +1 -1
  56. package/src/components/new-trace-viewer/trace-viewer.tsx +7 -14
  57. package/src/components/new-trace-viewer/types.ts +2 -0
  58. package/src/components/new-trace-viewer/utils.ts +1 -1
  59. package/src/components/sidebar/attribute-panel.tsx +13 -12
  60. package/src/components/sidebar/entity-detail-panel.tsx +28 -13
  61. package/src/components/sidebar/events-list.tsx +40 -34
  62. package/src/components/sidebar/span-detail-merge.ts +65 -0
  63. package/src/components/trace-viewer/util/timing.ts +2 -2
  64. package/src/components/trace-viewer-new.tsx +2 -4
  65. package/src/components/ui/error-stack-block.tsx +51 -31
  66. package/src/index.ts +1 -0
  67. package/src/lib/utils.ts +57 -0
  68. package/dist/components/new-trace-viewer/detail-panel.d.ts +0 -10
  69. package/dist/components/new-trace-viewer/detail-panel.d.ts.map +0 -1
  70. package/dist/components/new-trace-viewer/detail-panel.js +0 -13
  71. package/dist/components/new-trace-viewer/util/constants.d.ts +0 -1
  72. package/dist/components/new-trace-viewer/util/constants.d.ts.map +0 -1
  73. package/dist/components/new-trace-viewer/util/constants.js +0 -2
  74. package/src/components/new-trace-viewer/detail-panel.tsx +0 -55
  75. package/src/components/new-trace-viewer/util/constants.ts +0 -0
@@ -4,13 +4,13 @@ import { parseStepName, parseWorkflowName } from '@workflow/utils/parse-name';
4
4
  import { Check, ChevronRight, Copy } from 'lucide-react';
5
5
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
6
6
  import { Virtuoso } from 'react-virtuoso';
7
+ import { looksLikeWorkflowIdSearchInput, parseExactWorkflowSearchId, } from '../lib/exact-event-search-id';
7
8
  import { isEncryptedMarker } from '../lib/hydration';
8
- import { parseExactWorkflowSearchId, looksLikeWorkflowIdSearchInput, } from '../lib/exact-event-search-id';
9
- import { DecryptButton } from './ui/decrypt-button';
10
- import { formatDuration } from '../lib/utils';
11
9
  import { useToast } from '../lib/toast';
10
+ import { formatDuration } from '../lib/utils';
12
11
  import { DataInspector, DecryptClickContext } from './ui/data-inspector';
13
- import { ErrorStackBlock, isStructuredErrorWithStack, } from './ui/error-stack-block';
12
+ import { DecryptButton } from './ui/decrypt-button';
13
+ import { ErrorStackBlock, isStructuredError, } from './ui/error-stack-block';
14
14
  import { LoadMoreButton } from './ui/load-more-button';
15
15
  import { MenuDropdown } from './ui/menu-dropdown';
16
16
  import { Skeleton } from './ui/skeleton';
@@ -329,7 +329,7 @@ function deepParseJson(value) {
329
329
  return value;
330
330
  }
331
331
  /**
332
- * Extracts a structured error with a stack trace from event data, if present.
332
+ * Extracts a structured error from event data, if present.
333
333
  * Returns the error object to render with ErrorStackBlock, or null if not applicable.
334
334
  */
335
335
  function extractStructuredError(data, eventType) {
@@ -339,10 +339,10 @@ function extractStructuredError(data, eventType) {
339
339
  return null;
340
340
  const record = data;
341
341
  // Check the nested `error` field first (the StructuredError)
342
- if (isStructuredErrorWithStack(record.error))
342
+ if (isStructuredError(record.error))
343
343
  return record.error;
344
- // Some error formats put the stack at the top level of eventData
345
- if (isStructuredErrorWithStack(record))
344
+ // Some error formats put the message/stack at the top level of eventData.
345
+ if (isStructuredError(record))
346
346
  return record;
347
347
  return null;
348
348
  }
@@ -895,4 +895,4 @@ export function EventListView({ events, run, onLoadEventData, hasMoreEvents = fa
895
895
  : `${sortedEvents.length} event${sortedEvents.length !== 1 ? 's' : ''} for ${searchQuery.trim()}${searchResultsTruncated ? ' (results may be truncated)' : ''}`
896
896
  : `${sortedEvents.length} event${sortedEvents.length !== 1 ? 's' : ''} loaded` }), !isExactSearchActive && hasMoreEvents && (_jsx("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none", children: _jsx("div", { className: "pointer-events-auto", children: _jsx(LoadMoreButton, { loading: isLoadingMoreEvents, onClick: () => void onLoadMoreEvents?.() }) }) }))] })] }) }));
897
897
  }
898
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbGlzdC12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvZXZlbnQtbGlzdC12aWV3LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQU16RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUF1QixNQUFNLGdCQUFnQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsOEJBQThCLEdBRy9CLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekUsT0FBTyxFQUNMLGVBQWUsRUFDZiwwQkFBMEIsR0FDM0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENB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QUFxQixZQUNsQyxLQUFDLGNBQWMsSUFDYixPQUFPLEVBQUUsbUJBQW1CLEVBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLGdCQUFnQixFQUFFLEVBQUUsR0FDeEMsR0FDRSxHQUNGLENBQ1AsSUFDRyxJQUNGLEdBQ3VCLENBQ2hDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBwYXJzZVN0ZXBOYW1lLCBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB0eXBlIHsgRXZlbnQsIFdvcmtmbG93UnVuIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IENoZWNrLCBDaGV2cm9uUmlnaHQsIENvcHkgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHR5cGUge1xuICBLZXlib2FyZEV2ZW50IGFzIFJlYWN0S2V5Ym9hcmRFdmVudCxcbiAgTW91c2VFdmVudCBhcyBSZWFjdE1vdXNlRXZlbnQsXG4gIFJlYWN0Tm9kZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFZpcnR1b3NvLCB0eXBlIFZpcnR1b3NvSGFuZGxlIH0gZnJvbSAncmVhY3QtdmlydHVvc28nO1xuaW1wb3J0IHsgaXNFbmNyeXB0ZWRNYXJrZXIgfSBmcm9tICcuLi9saWIvaHlkcmF0aW9uJztcbmltcG9ydCB7XG4gIHBhcnNlRXhhY3RXb3JrZmxvd1NlYXJjaElkLFxuICBsb29rc0xpa2VXb3JrZmxvd0lkU2VhcmNoSW5wdXQsXG4gIHR5cGUgRXhhY3RJZFNlYXJjaFJlc3VsdCxcbiAgdHlwZSBFeGFjdFdvcmtmbG93U2VhcmNoSWRLaW5kLFxufSBmcm9tICcuLi9saWIvZXhhY3QtZXZlbnQtc2VhcmNoLWlkJztcbmltcG9ydCB7IERlY3J5cHRCdXR0b24gfSBmcm9tICcuL3VpL2RlY3J5cHQtYnV0dG9uJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uIH0gZnJvbSAnLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IHVzZVRvYXN0IH0gZnJvbSAnLi4vbGliL3RvYXN0JztcbmltcG9ydCB7IERhdGFJbnNwZWN0b3IsIERlY3J5cHRDbGlja0NvbnRleHQgfSBmcm9tICcuL3VpL2RhdGEtaW5zcGVjdG9yJztcbmltcG9ydCB7XG4gIEVycm9yU3RhY2tCbG9jayxcbiAgaXNTdHJ1Y3R1cmVkRXJyb3JXaXRoU3RhY2ssXG59IGZyb20gJy4vdWkvZXJyb3Itc3RhY2stYmxvY2snO1xuaW1wb3J0IHsgTG9hZE1vcmVCdXR0b24gfSBmcm9tICcuL3VpL2xvYWQtbW9yZS1idXR0b24nO1xuaW1wb3J0IHsgTWVudURyb3Bkb3duIH0gZnJvbSAnLi91aS9tZW51LWRyb3Bkb3duJztcbmltcG9ydCB7IFNrZWxldG9uIH0gZnJvbSAnLi91aS9za2VsZXRvbic7XG5pbXBvcnQgeyBUaW1lc3RhbXBUb29sdGlwIH0gZnJvbSAnLi91aS90aW1lc3RhbXAtdG9vbHRpcCc7XG5cbi8qKlxuICogRXZlbnQgdHlwZXMgd2hvc2UgZXZlbnREYXRhIGNvbnRhaW5zIGFuIGVycm9yIGZpZWxkIHdpdGggYSBTdHJ1Y3R1cmVkRXJyb3IuXG4gKi9cbmNvbnN0IEVSUk9SX0VWRU5UX1RZUEVTID0gbmV3IFNldChbXG4gICdzdGVwX2ZhaWxlZCcsXG4gICdzdGVwX3JldHJ5aW5nJyxcbiAgJ3J1bl9mYWlsZWQnLFxuICAnd29ya2Zsb3dfZmFpbGVkJyxcbl0pO1xuXG5jb25zdCBCVVRUT05fUkVTRVRfU1RZTEU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIGFwcGVhcmFuY2U6ICdub25lJyxcbiAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICBib3JkZXI6ICdub25lJyxcbiAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50Jyxcbn07XG5jb25zdCBET1RfUFVMU0VfQU5JTUFUSU9OID1cbiAgJ3dvcmtmbG93LWRvdC1wdWxzZSAxLjI1cyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSBpbmZpbml0ZSc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gSGVscGVyc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIGZvcm1hdEV2ZW50VGltZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgcmV0dXJuIChcbiAgICBkYXRlLnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgIHNlY29uZDogJzItZGlnaXQnLFxuICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICB9KSArXG4gICAgJy4nICtcbiAgICBkYXRlLmdldE1pbGxpc2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgJzAnKVxuICApO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRFdmVudFR5cGUoZXZlbnRUeXBlOiBFdmVudFsnZXZlbnRUeXBlJ10pOiBzdHJpbmcge1xuICByZXR1cm4gZXZlbnRUeXBlXG4gICAgLnNwbGl0KCdfJylcbiAgICAubWFwKCh3b3JkOiBzdHJpbmcpID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKVxuICAgIC5qb2luKCcgJyk7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRXZlbnQgdHlwZSDihpIgc3RhdHVzIGNvbG9yIChzbWFsbCBkb3Qgb25seSlcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogUmV0dXJucyBhIENTUyBjb2xvciB1c2luZyBHZWlzdCBkZXNpZ24gdG9rZW5zIGZvciB0aGUgc3RhdHVzIGRvdC4gKi9cbmZ1bmN0aW9uIGdldFN0YXR1c0RvdENvbG9yKGV2ZW50VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gRmFpbGVkIOKGkiByZWRcbiAgaWYgKFxuICAgIGV2ZW50VHlwZSA9PT0gJ3N0ZXBfZmFpbGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3J1bl9mYWlsZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnd29ya2Zsb3dfZmFpbGVkJ1xuICApIHtcbiAgICByZXR1cm4gJ3ZhcigtLWRzLXJlZC03MDApJztcbiAgfVxuICAvLyBDYW5jZWxsZWQg4oaSIGFtYmVyXG4gIGlmIChldmVudFR5cGUgPT09ICdydW5fY2FuY2VsbGVkJykge1xuICAgIHJldHVybiAndmFyKC0tZHMtYW1iZXItNzAwKSc7XG4gIH1cbiAgLy8gUmV0cnlpbmcg4oaSIGFtYmVyXG4gIGlmIChldmVudFR5cGUgPT09ICdzdGVwX3JldHJ5aW5nJykge1xuICAgIHJldHVybiAndmFyKC0tZHMtYW1iZXItNzAwKSc7XG4gIH1cbiAgLy8gQ29tcGxldGVkL3N1Y2NlZWRlZCDihpIgZ3JlZW5cbiAgaWYgKFxuICAgIGV2ZW50VHlwZSA9PT0gJ3N0ZXBfY29tcGxldGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3J1bl9jb21wbGV0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnd29ya2Zsb3dfY29tcGxldGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ2hvb2tfZGlzcG9zZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnd2FpdF9jb21wbGV0ZWQnXG4gICkge1xuICAgIHJldHVybiAndmFyKC0tZHMtZ3JlZW4tNzAwKSc7XG4gIH1cbiAgLy8gU3RhcnRlZC9ydW5uaW5nIOKGkiBibHVlXG4gIGlmIChcbiAgICBldmVudFR5cGUgPT09ICdzdGVwX3N0YXJ0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAncnVuX3N0YXJ0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnd29ya2Zsb3dfc3RhcnRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICdob29rX3JlY2VpdmVkJ1xuICApIHtcbiAgICByZXR1cm4gJ3ZhcigtLWRzLWJsdWUtNzAwKSc7XG4gIH1cbiAgLy8gQ3JlYXRlZC9wZW5kaW5nIOKGkiBncmF5XG4gIHJldHVybiAndmFyKC0tZHMtZ3JheS02MDApJztcbn1cblxuLyoqXG4gKiBCdWlsZCBhIG1hcCBmcm9tIGNvcnJlbGF0aW9uSWQgKHN0ZXBJZCkg4oaSIGRpc3BsYXkgbmFtZSB1c2luZyBzdGVwX2NyZWF0ZWRcbiAqIGV2ZW50cywgYW5kIHBhcnNlIHRoZSB3b3JrZmxvdyBuYW1lIGZyb20gdGhlIHJ1bi5cbiAqL1xuZnVuY3Rpb24gYnVpbGROYW1lTWFwcyhcbiAgZXZlbnRzOiBFdmVudFtdIHwgbnVsbCxcbiAgcnVuOiBXb3JrZmxvd1J1biB8IG51bGxcbik6IHtcbiAgY29ycmVsYXRpb25OYW1lTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICB3b3JrZmxvd05hbWU6IHN0cmluZyB8IG51bGw7XG59IHtcbiAgY29uc3QgY29ycmVsYXRpb25OYW1lTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICAvLyBNYXAgc3RlcCBjb3JyZWxhdGlvbklkICg9IHN0ZXBJZCkg4oaSIHBhcnNlZCBzdGVwIG5hbWUgZnJvbSBzdGVwX2NyZWF0ZWQgZXZlbnRzXG4gIGlmIChldmVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfY3JlYXRlZCcgJiYgZXZlbnQuY29ycmVsYXRpb25JZCkge1xuICAgICAgICBjb25zdCBzdGVwTmFtZSA9IGV2ZW50LmV2ZW50RGF0YT8uc3RlcE5hbWUgPz8gJyc7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU3RlcE5hbWUoU3RyaW5nKHN0ZXBOYW1lKSk7XG4gICAgICAgIGNvcnJlbGF0aW9uTmFtZU1hcC5zZXQoXG4gICAgICAgICAgZXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICAgICAgICBwYXJzZWQ/LnNob3J0TmFtZSA/PyBzdGVwTmFtZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFBhcnNlIHdvcmtmbG93IG5hbWUgZnJvbSBydW5cbiAgY29uc3Qgd29ya2Zsb3dOYW1lID0gcnVuPy53b3JrZmxvd05hbWVcbiAgICA/IChwYXJzZVdvcmtmbG93TmFtZShydW4ud29ya2Zsb3dOYW1lKT8uc2hvcnROYW1lID8/IHJ1bi53b3JrZmxvd05hbWUpXG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7IGNvcnJlbGF0aW9uTmFtZU1hcCwgd29ya2Zsb3dOYW1lIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYXRpb25JbmZvIHtcbiAgLyoqIFRpbWUgZnJvbSBjcmVhdGVkIOKGkiBzdGFydGVkIChtcykgKi9cbiAgcXVldWVkPzogbnVtYmVyO1xuICAvKiogVGltZSBmcm9tIHN0YXJ0ZWQg4oaSIGNvbXBsZXRlZC9mYWlsZWQvY2FuY2VsbGVkIChtcykgKi9cbiAgcmFuPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgbWFwIGZyb20gY29ycmVsYXRpb25JZCDihpIgZHVyYXRpb24gaW5mbyBieSBkaWZmaW5nXG4gKiBjcmVhdGVkIOKGlCBzdGFydGVkIChxdWV1ZWQpIGFuZCBzdGFydGVkIOKGlCBjb21wbGV0ZWQvZmFpbGVkL2NhbmNlbGxlZCAocmFuKS5cbiAqIEFsc28gY29tcHV0ZXMgcnVuLWxldmVsIGR1cmF0aW9ucyB1bmRlciB0aGUga2V5ICdfX3J1bl9fJy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRHVyYXRpb25NYXAoZXZlbnRzOiBFdmVudFtdKTogTWFwPHN0cmluZywgRHVyYXRpb25JbmZvPiB7XG4gIC8vIFByb2Nlc3MgZXZlbnRzIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIgc28gdGhlIHJlc3VsdCBkb2Vzbid0IGRlcGVuZCBvblxuICAvLyB0aGUgY2FsbGVyJ3Mgc29ydCBkaXJlY3Rpb24uIFJldHJpZWQgc3RlcHMgZW1pdCBtdWx0aXBsZSBgc3RlcF9zdGFydGVkYFxuICAvLyBldmVudHMgZm9yIHRoZSBzYW1lIGNvcnJlbGF0aW9uSWQ7IHRoZSBxdWV1ZWQgZHVyYXRpb24gbXVzdCBiZSBtZWFzdXJlZFxuICAvLyBhZ2FpbnN0IHRoZSBmaXJzdCBvbmUsIG5vdCB0aGUgbGFzdC5cbiAgY29uc3QgY2hyb25vbG9naWNhbCA9IFsuLi5ldmVudHNdLnNvcnQoXG4gICAgKGEsIGIpID0+IG5ldyBEYXRlKGEuY3JlYXRlZEF0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShiLmNyZWF0ZWRBdCkuZ2V0VGltZSgpXG4gICk7XG5cbiAgY29uc3QgY3JlYXRlZFRpbWVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgY29uc3QgZmlyc3RTdGFydGVkVGltZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBjb25zdCBzdGFydGVkVGltZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBjb25zdCBkdXJhdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgRHVyYXRpb25JbmZvPigpO1xuXG4gIGZvciAoY29uc3QgZXZlbnQgb2YgY2hyb25vbG9naWNhbCkge1xuICAgIGNvbnN0IHRzID0gbmV3IERhdGUoZXZlbnQuY3JlYXRlZEF0KS5nZXRUaW1lKCk7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQuY29ycmVsYXRpb25JZCA/PyAnX19ydW5fXyc7XG4gICAgY29uc3QgdHlwZTogc3RyaW5nID0gZXZlbnQuZXZlbnRUeXBlO1xuXG4gICAgLy8gVHJhY2sgY3JlYXRlZCB0aW1lcyAoZmlyc3QgZXZlbnQgZm9yIGVhY2ggY29ycmVsYXRpb24pXG4gICAgaWYgKHR5cGUgPT09ICdzdGVwX2NyZWF0ZWQnIHx8IHR5cGUgPT09ICdydW5fY3JlYXRlZCcpIHtcbiAgICAgIGlmICghY3JlYXRlZFRpbWVzLmhhcyhrZXkpKSB7XG4gICAgICAgIGNyZWF0ZWRUaW1lcy5zZXQoa2V5LCB0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJhY2sgc3RhcnRlZCB0aW1lcyAmIGNvbXB1dGUgcXVldWVkIGR1cmF0aW9uXG4gICAgaWYgKFxuICAgICAgdHlwZSA9PT0gJ3N0ZXBfc3RhcnRlZCcgfHxcbiAgICAgIHR5cGUgPT09ICdydW5fc3RhcnRlZCcgfHxcbiAgICAgIHR5cGUgPT09ICd3b3JrZmxvd19zdGFydGVkJ1xuICAgICkge1xuICAgICAgc3RhcnRlZFRpbWVzLnNldChrZXksIHRzKTtcbiAgICAgIC8vIFRoZSBxdWV1ZWQgZHVyYXRpb24gaXMgYW5jaG9yZWQgb24gdGhlIGZpcnN0IHN0YXJ0IGV2ZW50IG9ubHkg4oCUXG4gICAgICAvLyBzdWJzZXF1ZW50IHN0ZXBfc3RhcnRlZCBldmVudHMgY29tZSBmcm9tIHJldHJpZXMuXG4gICAgICBpZiAoIWZpcnN0U3RhcnRlZFRpbWVzLmhhcyhrZXkpKSB7XG4gICAgICAgIGZpcnN0U3RhcnRlZFRpbWVzLnNldChrZXksIHRzKTtcbiAgICAgICAgLy8gSWYgbm8gZXhwbGljaXQgY3JlYXRlZCBldmVudCB3YXMgc2VlbiwgdXNlIHRoZSBzdGFydGVkIHRpbWUgYXMgY3JlYXRlZFxuICAgICAgICBpZiAoIWNyZWF0ZWRUaW1lcy5oYXMoa2V5KSkge1xuICAgICAgICAgIGNyZWF0ZWRUaW1lcy5zZXQoa2V5LCB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlYXRlZEF0ID0gY3JlYXRlZFRpbWVzLmdldChrZXkpO1xuICAgICAgICBjb25zdCBpbmZvID0gZHVyYXRpb25zLmdldChrZXkpID8/IHt9O1xuICAgICAgICBpZiAoY3JlYXRlZEF0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbmZvLnF1ZXVlZCA9IHRzIC0gY3JlYXRlZEF0O1xuICAgICAgICB9XG4gICAgICAgIGR1cmF0aW9ucy5zZXQoa2V5LCBpbmZvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb21wdXRlIHJhbiBkdXJhdGlvbiBvbiB0ZXJtaW5hbCBldmVudHNcbiAgICBpZiAoXG4gICAgICB0eXBlID09PSAnc3RlcF9jb21wbGV0ZWQnIHx8XG4gICAgICB0eXBlID09PSAnc3RlcF9mYWlsZWQnIHx8XG4gICAgICB0eXBlID09PSAncnVuX2NvbXBsZXRlZCcgfHxcbiAgICAgIHR5cGUgPT09ICdydW5fZmFpbGVkJyB8fFxuICAgICAgdHlwZSA9PT0gJ3J1bl9jYW5jZWxsZWQnIHx8XG4gICAgICB0eXBlID09PSAnd29ya2Zsb3dfY29tcGxldGVkJyB8fFxuICAgICAgdHlwZSA9PT0gJ3dvcmtmbG93X2ZhaWxlZCcgfHxcbiAgICAgIHR5cGUgPT09ICd3YWl0X2NvbXBsZXRlZCcgfHxcbiAgICAgIHR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJ1xuICAgICkge1xuICAgICAgY29uc3Qgc3RhcnRlZEF0ID0gc3RhcnRlZFRpbWVzLmdldChrZXkpO1xuICAgICAgY29uc3QgaW5mbyA9IGR1cmF0aW9ucy5nZXQoa2V5KSA/PyB7fTtcbiAgICAgIGlmIChzdGFydGVkQXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpbmZvLnJhbiA9IHRzIC0gc3RhcnRlZEF0O1xuICAgICAgfVxuICAgICAgZHVyYXRpb25zLnNldChrZXksIGluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkdXJhdGlvbnM7XG59XG5cbi8qKiBDaGVjayBpZiBhIGxvYWRlZCBldmVudERhdGEgb2JqZWN0IGNvbnRhaW5zIGFueSBlbmNyeXB0ZWQgbWFya2VyIHZhbHVlcy4gKi9cbmZ1bmN0aW9uIGhhc0VuY3J5cHRlZFZhbHVlcyhkYXRhOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICghZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgZm9yIChjb25zdCB2YWwgb2YgT2JqZWN0LnZhbHVlcyhkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWwpKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzUnVuTGV2ZWwoZXZlbnRUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBldmVudFR5cGUgPT09ICdydW5fY3JlYXRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICdydW5fc3RhcnRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICdydW5fY29tcGxldGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3J1bl9mYWlsZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAncnVuX2NhbmNlbGxlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICd3b3JrZmxvd19zdGFydGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3dvcmtmbG93X2NvbXBsZXRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICd3b3JrZmxvd19mYWlsZWQnXG4gICk7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gVHJlZSBndXR0ZXIg4oCUIGZpeGVkLXdpZHRoLCBzaG93cyBicmFuY2ggbGluZXMgb25seSBmb3IgdGhlIHNlbGVjdGVkIGdyb3VwXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIEZpeGVkIGd1dHRlciB3aWR0aDogMjBweCByb290IGFyZWEgKyAxNnB4IGZvciBvbmUgYnJhbmNoIGxhbmUgKi9cbmNvbnN0IEdVVFRFUl9XSURUSCA9IDM2O1xuLyoqIFggcG9zaXRpb24gb2YgdGhlIHNpbmdsZSBicmFuY2ggbGFuZSBsaW5lICovXG5jb25zdCBMQU5FX1ggPSAyMDtcbmNvbnN0IFJPT1RfTElORV9DT0xPUiA9ICd2YXIoLS1kcy1ncmF5LTUwMCknO1xuXG5mdW5jdGlvbiBUcmVlR3V0dGVyKHtcbiAgaXNGaXJzdCxcbiAgaXNMYXN0LFxuICBpc1J1bkxldmVsOiBpc1J1bixcbiAgc3RhdHVzRG90Q29sb3IsXG4gIHB1bHNlID0gZmFsc2UsXG4gIGhhc1NlbGVjdGlvbixcbiAgc2hvd0JyYW5jaCxcbiAgc2hvd0xhbmVMaW5lLFxuICBpc0xhbmVTdGFydCxcbiAgaXNMYW5lRW5kLFxuICBjb250aW51YXRpb25Pbmx5ID0gZmFsc2UsXG59OiB7XG4gIGlzRmlyc3Q6IGJvb2xlYW47XG4gIGlzTGFzdDogYm9vbGVhbjtcbiAgaXNSdW5MZXZlbDogYm9vbGVhbjtcbiAgc3RhdHVzRG90Q29sb3I/OiBzdHJpbmc7XG4gIHB1bHNlPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgYW55IGdyb3VwIGlzIGN1cnJlbnRseSBhY3RpdmUgKHNlbGVjdGVkIG9yIGhvdmVyZWQpICovXG4gIGhhc1NlbGVjdGlvbjogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyBhIGhvcml6b250YWwgYnJhbmNoIGxpbmUgZm9yIHRoaXMgcm93IChldmVudCBiZWxvbmdzIHRvIGFjdGl2ZSBncm91cCkgKi9cbiAgc2hvd0JyYW5jaDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIHZlcnRpY2FsIGxhbmUgbGluZSBwYXNzZXMgdGhyb3VnaCB0aGlzIHJvdyAqL1xuICBzaG93TGFuZUxpbmU6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSB2ZXJ0aWNhbCBsYW5lIGxpbmUgc3RhcnRzIGF0IHRoaXMgcm93ICh0b3AgY2xpcHBlZCB0byA1MCUpICovXG4gIGlzTGFuZVN0YXJ0OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgdmVydGljYWwgbGFuZSBsaW5lIGVuZHMgYXQgdGhpcyByb3cgKGJvdHRvbSBjbGlwcGVkIHRvIDUwJSkgKi9cbiAgaXNMYW5lRW5kOiBib29sZWFuO1xuICBjb250aW51YXRpb25Pbmx5PzogYm9vbGVhbjtcbn0pIHtcbiAgY29uc3QgZG90U2l6ZSA9IGlzUnVuID8gOCA6IDY7XG4gIGNvbnN0IGRvdExlZnQgPSBpc1J1biA/IDUgOiA2O1xuICBjb25zdCBkb3RPcGFjaXR5ID0gaGFzU2VsZWN0aW9uICYmICFzaG93QnJhbmNoICYmICFpc1J1biA/IDAuMyA6IDE7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4LXNocmluay0wIHNlbGYtc3RyZXRjaFwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICB3aWR0aDogR1VUVEVSX1dJRFRILFxuICAgICAgICBtaW5IZWlnaHQ6IGNvbnRpbnVhdGlvbk9ubHkgPyAwIDogdW5kZWZpbmVkLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7LyogUm9vdCB2ZXJ0aWNhbCBsaW5lIChsZWZ0bW9zdCwgYWx3YXlzIHZpc2libGUpICovfVxuICAgICAgPGRpdlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgIGxlZnQ6IDgsXG4gICAgICAgICAgdG9wOiBjb250aW51YXRpb25Pbmx5ID8gMCA6IGlzRmlyc3QgPyAnNTAlJyA6IDAsXG4gICAgICAgICAgYm90dG9tOiBjb250aW51YXRpb25Pbmx5ID8gMCA6IGlzTGFzdCA/ICc1MCUnIDogMCxcbiAgICAgICAgICB3aWR0aDogMixcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFJPT1RfTElORV9DT0xPUixcbiAgICAgICAgICB6SW5kZXg6IDAsXG4gICAgICAgIH19XG4gICAgICAvPlxuXG4gICAgICB7IWNvbnRpbnVhdGlvbk9ubHkgJiYgKFxuICAgICAgICA8PlxuICAgICAgICAgIHsvKiBTdGF0dXMgZG90IG9uIHRoZSByb290IGxpbmUgZm9yIGV2ZXJ5IGV2ZW50ICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICBsZWZ0OiBkb3RMZWZ0LFxuICAgICAgICAgICAgICB0b3A6ICc1MCUnLFxuICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpJyxcbiAgICAgICAgICAgICAgd2lkdGg6IGRvdFNpemUsXG4gICAgICAgICAgICAgIGhlaWdodDogZG90U2l6ZSxcbiAgICAgICAgICAgICAgekluZGV4OiAyLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LyogT3BhcXVlIGJhY2tkcm9wIGVuc3VyZXMgZ3V0dGVyIGxpbmVzIG5ldmVyIHZpc3VhbGx5IGN1dCB0aHJvdWdoIGRvdHMgKi99XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgaW5zZXQ6IDAsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgICAgICAgIHpJbmRleDogMCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7cHVsc2UgJiYgKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgaW5zZXQ6IDAsXG4gICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBzdGF0dXNEb3RDb2xvcixcbiAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNzUgKiBkb3RPcGFjaXR5LFxuICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBET1RfUFVMU0VfQU5JTUFUSU9OLFxuICAgICAgICAgICAgICAgICAgekluZGV4OiAxLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHN0YXR1c0RvdENvbG9yLFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IGRvdE9wYWNpdHksXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMTUwbXMnLFxuICAgICAgICAgICAgICAgIHpJbmRleDogMixcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogSG9yaXpvbnRhbCBicmFuY2ggZnJvbSByb290IHRvIGd1dHRlciBlZGdlIChzZWxlY3RlZCBncm91cCBldmVudHMgb25seSkgKi99XG4gICAgICAgICAge3Nob3dCcmFuY2ggJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgIGxlZnQ6IDksXG4gICAgICAgICAgICAgICAgdG9wOiAnNTAlJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogR1VUVEVSX1dJRFRIIC0gOSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDIsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBST09UX0xJTkVfQ09MT1IsXG4gICAgICAgICAgICAgICAgekluZGV4OiAwLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICAgICl9XG5cbiAgICAgIHsvKiBWZXJ0aWNhbCBsYW5lIGxpbmUgY29ubmVjdGluZyB0aGUgc2VsZWN0ZWQgZ3JvdXAncyBldmVudHMgKi99XG4gICAgICB7c2hvd0xhbmVMaW5lICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IExBTkVfWCxcbiAgICAgICAgICAgIHRvcDogY29udGludWF0aW9uT25seSA/IDAgOiBpc0xhbmVTdGFydCA/ICc1MCUnIDogMCxcbiAgICAgICAgICAgIGJvdHRvbTogY29udGludWF0aW9uT25seSA/IDAgOiBpc0xhbmVFbmQgPyAnNTAlJyA6IDAsXG4gICAgICAgICAgICB3aWR0aDogMixcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogUk9PVF9MSU5FX0NPTE9SLFxuICAgICAgICAgICAgekluZGV4OiAwLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIENvcHlhYmxlIGNlbGwg4oCUIHNob3dzIGEgY29weSBidXR0b24gb24gaG92ZXJcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBDb3B5YWJsZUNlbGwoe1xuICB2YWx1ZSxcbiAgY2xhc3NOYW1lLFxuICBzdHlsZTogc3R5bGVQcm9wLFxufToge1xuICB2YWx1ZTogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbn0pOiBSZWFjdE5vZGUge1xuICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByZXNldENvcGllZFRpbWVvdXRSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQocmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVDb3B5ID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0TW91c2VFdmVudCkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHZhbHVlKS50aGVuKCgpID0+IHtcbiAgICAgICAgc2V0Q29waWVkKHRydWUpO1xuICAgICAgICBpZiAocmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBzZXRDb3BpZWQoZmFsc2UpO1xuICAgICAgICAgIHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgfSwgMTUwMCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFt2YWx1ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17YGdyb3VwL2NvcHkgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgbWluLXctMCBweC00ICR7Y2xhc3NOYW1lID8/ICcnfWB9XG4gICAgICBzdHlsZT17c3R5bGVQcm9wfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgIHt2YWx1ZSB8fCAnLSd9XG4gICAgICA8L3NwYW4+XG4gICAgICB7dmFsdWUgPyAoXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5fVxuICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTAgb3BhY2l0eS0wIGdyb3VwLWhvdmVyL2NvcHk6b3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1vcGFjaXR5IHAtMC41IHJvdW5kZWQgaG92ZXI6YmctW3ZhcigtLWRzLWdyYXktYWxwaGEtMjAwKV1cIlxuICAgICAgICAgIHN0eWxlPXtCVVRUT05fUkVTRVRfU1RZTEV9XG4gICAgICAgICAgYXJpYS1sYWJlbD17YENvcHkgJHt2YWx1ZX1gfVxuICAgICAgICA+XG4gICAgICAgICAge2NvcGllZCA/IChcbiAgICAgICAgICAgIDxDaGVja1xuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTMgdy0zXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmVlbi03MDApJyB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPENvcHkgY2xhc3NOYW1lPVwiaC0zIHctM1wiIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyB9fSAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8qKiBSZWN1cnNpdmVseSBwYXJzZSBzdHJpbmdpZmllZCBKU09OIHZhbHVlcyBzbyBlc2NhcGVkIHNsYXNoZXMgLyBxdW90ZXMgYXJlIGNsZWFuZWQgdXAgKi9cbmZ1bmN0aW9uIGRlZXBQYXJzZUpzb24odmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuICAgIGlmIChcbiAgICAgICh0cmltbWVkLnN0YXJ0c1dpdGgoJ3snKSAmJiB0cmltbWVkLmVuZHNXaXRoKCd9JykpIHx8XG4gICAgICAodHJpbW1lZC5zdGFydHNXaXRoKCdbJykgJiYgdHJpbW1lZC5lbmRzV2l0aCgnXScpKSB8fFxuICAgICAgKHRyaW1tZWQuc3RhcnRzV2l0aCgnXCInKSAmJiB0cmltbWVkLmVuZHNXaXRoKCdcIicpKVxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRlZXBQYXJzZUpzb24oSlNPTi5wYXJzZSh0cmltbWVkKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChkZWVwUGFyc2VKc29uKTtcbiAgfVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIC8vIFByZXNlcnZlIG9iamVjdHMgd2l0aCBjdXN0b20gY29uc3RydWN0b3JzIChlLmcuLCBlbmNyeXB0ZWQgbWFya2VycyxcbiAgICAvLyBjbGFzcyBpbnN0YW5jZSByZWZzKSDigJQgZG9uJ3QgZGVzdHJ1Y3R1cmUgdGhlbSBpbnRvIHBsYWluIG9iamVjdHNcbiAgICBpZiAodmFsdWUuY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICByZXN1bHRba10gPSBkZWVwUGFyc2VKc29uKHYpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIHN0cnVjdHVyZWQgZXJyb3Igd2l0aCBhIHN0YWNrIHRyYWNlIGZyb20gZXZlbnQgZGF0YSwgaWYgcHJlc2VudC5cbiAqIFJldHVybnMgdGhlIGVycm9yIG9iamVjdCB0byByZW5kZXIgd2l0aCBFcnJvclN0YWNrQmxvY2ssIG9yIG51bGwgaWYgbm90IGFwcGxpY2FibGUuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTdHJ1Y3R1cmVkRXJyb3IoXG4gIGRhdGE6IHVua25vd24sXG4gIGV2ZW50VHlwZT86IHN0cmluZ1xuKTogKFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBzdGFjazogc3RyaW5nIH0pIHwgbnVsbCB7XG4gIGlmICghZXZlbnRUeXBlIHx8ICFFUlJPUl9FVkVOVF9UWVBFUy5oYXMoZXZlbnRUeXBlKSkgcmV0dXJuIG51bGw7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcmVjb3JkID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLy8gQ2hlY2sgdGhlIG5lc3RlZCBgZXJyb3JgIGZpZWxkIGZpcnN0ICh0aGUgU3RydWN0dXJlZEVycm9yKVxuICBpZiAoaXNTdHJ1Y3R1cmVkRXJyb3JXaXRoU3RhY2socmVjb3JkLmVycm9yKSkgcmV0dXJuIHJlY29yZC5lcnJvcjtcbiAgLy8gU29tZSBlcnJvciBmb3JtYXRzIHB1dCB0aGUgc3RhY2sgYXQgdGhlIHRvcCBsZXZlbCBvZiBldmVudERhdGFcbiAgaWYgKGlzU3RydWN0dXJlZEVycm9yV2l0aFN0YWNrKHJlY29yZCkpIHJldHVybiByZWNvcmQ7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBQYXlsb2FkQmxvY2soe1xuICBkYXRhLFxuICBldmVudFR5cGUsXG59OiB7XG4gIGRhdGE6IHVua25vd247XG4gIGV2ZW50VHlwZT86IHN0cmluZztcbn0pOiBSZWFjdE5vZGUge1xuICBjb25zdCBzdHJ1Y3R1cmVkRXJyb3IgPSB1c2VNZW1vKFxuICAgICgpID0+IGV4dHJhY3RTdHJ1Y3R1cmVkRXJyb3IoZGF0YSwgZXZlbnRUeXBlKSxcbiAgICBbZGF0YSwgZXZlbnRUeXBlXVxuICApO1xuXG4gIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJlc2V0Q29waWVkVGltZW91dFJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3QgY2xlYW5lZCA9IHVzZU1lbW8oKCkgPT4gZGVlcFBhcnNlSnNvbihkYXRhKSwgW2RhdGFdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChyZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGZvcm1hdHRlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY2xlYW5lZCwgbnVsbCwgMik7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gU3RyaW5nKGNsZWFuZWQpO1xuICAgIH1cbiAgfSwgW2NsZWFuZWRdKTtcblxuICBjb25zdCBoYW5kbGVDb3B5ID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0TW91c2VFdmVudCkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGZvcm1hdHRlZCkudGhlbigoKSA9PiB7XG4gICAgICAgIHNldENvcGllZCh0cnVlKTtcbiAgICAgICAgaWYgKHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChyZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgc2V0Q29waWVkKGZhbHNlKTtcbiAgICAgICAgICByZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH0sIDE1MDApO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZm9ybWF0dGVkXVxuICApO1xuXG4gIGlmIChzdHJ1Y3R1cmVkRXJyb3IpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTJcIj5cbiAgICAgICAgPEVycm9yU3RhY2tCbG9jayB2YWx1ZT17c3RydWN0dXJlZEVycm9yfSAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBncm91cC9wYXlsb2FkXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cIm92ZXJmbG93LXgtYXV0byBwLTIgdGV4dC1bMTFweF1cIlxuICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknIH19XG4gICAgICA+XG4gICAgICAgIDxEYXRhSW5zcGVjdG9yIGRhdGE9e2NsZWFuZWR9IGV4cGFuZExldmVsPXsyfSAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5fVxuICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSBib3R0b20tMiByaWdodC0yIG9wYWNpdHktMCBncm91cC1ob3Zlci9wYXlsb2FkOm9wYWNpdHktMTAwIHRyYW5zaXRpb24tb3BhY2l0eSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0yIHB5LTEgcm91bmRlZC1tZCB0ZXh0LXhzIGhvdmVyOmJnLVt2YXIoLS1kcy1ncmF5LWFscGhhLTIwMCldXCJcbiAgICAgICAgc3R5bGU9e3sgLi4uQlVUVE9OX1JFU0VUX1NUWUxFLCBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScgfX1cbiAgICAgICAgYXJpYS1sYWJlbD1cIkNvcHkgcGF5bG9hZFwiXG4gICAgICA+XG4gICAgICAgIHtjb3BpZWQgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxDaGVja1xuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTMgdy0zXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmVlbi03MDApJyB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JlZW4tNzAwKScgfX0+Q29waWVkPC9zcGFuPlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8Q29weSBjbGFzc05hbWU9XCJoLTMgdy0zXCIgLz5cbiAgICAgICAgICAgIDxzcGFuPkNvcHk8L3NwYW4+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTb3J0IG9wdGlvbnMgZm9yIHRoZSBldmVudHMgbGlzdFxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmNvbnN0IFNPUlRfT1BUSU9OUyA9IFtcbiAgeyB2YWx1ZTogJ2Rlc2MnIGFzIGNvbnN0LCBsYWJlbDogJ05ld2VzdCcgfSxcbiAgeyB2YWx1ZTogJ2FzYycgYXMgY29uc3QsIGxhYmVsOiAnT2xkZXN0JyB9LFxuXTtcblxuZnVuY3Rpb24gUm93c1NrZWxldG9uKCkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAge0FycmF5LmZyb20oeyBsZW5ndGg6IDE2IH0sIChfLCBpKSA9PiAoXG4gICAgICAgIDxkaXYga2V5PXtpfSBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMFwiIHN0eWxlPXt7IGhlaWdodDogNDAgfX0+XG4gICAgICAgICAgey8qIEd1dHRlciBhcmVhICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXgtc2hyaW5rLTAgc2VsZi1zdHJldGNoIGZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiBHVVRURVJfV0lEVEggfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LyogVmVydGljYWwgbGluZSBza2VsZXRvbiAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICBsZWZ0OiA4LFxuICAgICAgICAgICAgICAgIHRvcDogaSA9PT0gMCA/ICc1MCUnIDogMCxcbiAgICAgICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDIsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsXCIgc3R5bGU9e3sgYm9yZGVyUmFkaXVzOiAxIH19IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHsvKiBEb3Qgc2tlbGV0b24gKi99XG4gICAgICAgICAgICA8U2tlbGV0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC1zaHJpbmstMFwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGkgJSA0ID09PSAwID8gOCA6IDYsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBpICUgNCA9PT0gMCA/IDggOiA2LFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogaSAlIDQgPT09IDAgPyA1IDogNixcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgey8qIENoZXZyb24gcGxhY2Vob2xkZXIgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTUgZmxleC1zaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cInctNSBoLTVcIiBzdHlsZT17eyBib3JkZXJSYWRpdXM6IDQgfX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7LyogVGltZSAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNzAlJyB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvKiBFdmVudCBUeXBlICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41XCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNrZWxldG9uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogNiwgaGVpZ2h0OiA2LCBib3JkZXJSYWRpdXM6ICc1MCUnIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNjAlJyB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvKiBOYW1lICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc1MCUnIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgey8qIENvcnJlbGF0aW9uIElEICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzMgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc3NSUnIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgey8qIEV2ZW50IElEICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzMgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc3NSUnIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRXZlbnQgcm93XG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuaW50ZXJmYWNlIEV2ZW50c0xpc3RQcm9wcyB7XG4gIGV2ZW50czogRXZlbnRbXSB8IG51bGw7XG4gIHJ1bj86IFdvcmtmbG93UnVuIHwgbnVsbDtcbiAgb25Mb2FkRXZlbnREYXRhPzogKGV2ZW50OiBFdmVudCkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIGhhc01vcmVFdmVudHM/OiBib29sZWFuO1xuICBpc0xvYWRpbmdNb3JlRXZlbnRzPzogYm9vbGVhbjtcbiAgb25Mb2FkTW9yZUV2ZW50cz86ICgpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAvKiogV2hlbiBwcm92aWRlZCwgc2lnbmFscyB0aGF0IGRlY3J5cHRpb24gaXMgYWN0aXZlICh0cmlnZ2VycyByZS1sb2FkIG9mIGV4cGFuZGVkIGV2ZW50cykgKi9cbiAgZW5jcnlwdGlvbktleT86IFVpbnQ4QXJyYXk7XG4gIC8qKiBXaGVuIHRydWUsIHNob3dzIGEgbG9hZGluZyBzdGF0ZSBpbnN0ZWFkIG9mIFwiTm8gZXZlbnRzIGZvdW5kXCIgZm9yIGVtcHR5IGxpc3RzICovXG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBTb3J0IG9yZGVyIGZvciBldmVudHMuIERlZmF1bHRzIHRvICdhc2MnLiAqL1xuICBzb3J0T3JkZXI/OiAnYXNjJyB8ICdkZXNjJztcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGNoYW5nZXMgc29ydCBvcmRlci4gV2hlbiBwcm92aWRlZCwgdGhlIHNvcnQgZHJvcGRvd24gaXMgc2hvd25cbiAgICogIGFuZCB0aGUgcGFyZW50IGlzIGV4cGVjdGVkIHRvIHJlZmV0Y2ggZnJvbSB0aGUgQVBJIHdpdGggdGhlIG5ldyBvcmRlci4gKi9cbiAgb25Tb3J0T3JkZXJDaGFuZ2U/OiAob3JkZXI6ICdhc2MnIHwgJ2Rlc2MnKSA9PiB2b2lkO1xuICAvKiogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBEZWNyeXB0IGJ1dHRvbi4gKi9cbiAgb25EZWNyeXB0PzogKCkgPT4gdm9pZDtcbiAgLyoqIFdoZXRoZXIgdGhlIGVuY3J5cHRpb24ga2V5IGlzIGN1cnJlbnRseSBiZWluZyBmZXRjaGVkLiAqL1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xuICAvKiogUnVuLWxldmVsIGhpbnQ6IHRoZSBydW4gY29udGFpbnMgZW5jcnlwdGVkIGRhdGEgKGZyb20gcHJvYmUpLiAqL1xuICBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcbiAgLyoqIEZldGNoIGV2ZW50cyBmb3IgYW4gZXhhY3QgY29ycmVsYXRpb24gb3IgZXZlbnQgSUQuICovXG4gIG9uRXhhY3RJZFNlYXJjaD86IChcbiAgICBpZDogc3RyaW5nLFxuICAgIGtpbmQ6IEV4YWN0V29ya2Zsb3dTZWFyY2hJZEtpbmQsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWxcbiAgKSA9PiBQcm9taXNlPEV4YWN0SWRTZWFyY2hSZXN1bHQ+O1xufVxuXG5mdW5jdGlvbiBFdmVudFJvdyh7XG4gIGV2ZW50LFxuICBpbmRleCxcbiAgaXNGaXJzdCxcbiAgaXNMYXN0LFxuICBpc0V4cGFuZGVkLFxuICBvblRvZ2dsZUV4cGFuZCxcbiAgYWN0aXZlR3JvdXBLZXksXG4gIHNlbGVjdGVkR3JvdXBLZXksXG4gIHNlbGVjdGVkR3JvdXBSYW5nZSxcbiAgY29ycmVsYXRpb25OYW1lTWFwLFxuICB3b3JrZmxvd05hbWUsXG4gIGR1cmF0aW9uTWFwLFxuICBvblNlbGVjdEdyb3VwLFxuICBvbkhvdmVyR3JvdXAsXG4gIG9uTG9hZEV2ZW50RGF0YSxcbiAgY2FjaGVkRXZlbnREYXRhLFxuICBvbkNhY2hlRXZlbnREYXRhLFxuICBlbmNyeXB0aW9uS2V5LFxuICBvbkVuY3J5cHRlZERhdGFEZXRlY3RlZCxcbiAgc3VwcHJlc3NHcm91cERpbW1pbmcgPSBmYWxzZSxcbn06IHtcbiAgZXZlbnQ6IEV2ZW50O1xuICBpbmRleDogbnVtYmVyO1xuICBpc0ZpcnN0OiBib29sZWFuO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGlzRXhwYW5kZWQ6IGJvb2xlYW47XG4gIG9uVG9nZ2xlRXhwYW5kOiAoZXZlbnRJZDogc3RyaW5nKSA9PiB2b2lkO1xuICBhY3RpdmVHcm91cEtleT86IHN0cmluZztcbiAgc2VsZWN0ZWRHcm91cEtleT86IHN0cmluZztcbiAgc2VsZWN0ZWRHcm91cFJhbmdlOiB7IGZpcnN0OiBudW1iZXI7IGxhc3Q6IG51bWJlciB9IHwgbnVsbDtcbiAgY29ycmVsYXRpb25OYW1lTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICB3b3JrZmxvd05hbWU6IHN0cmluZyB8IG51bGw7XG4gIGR1cmF0aW9uTWFwOiBNYXA8c3RyaW5nLCBEdXJhdGlvbkluZm8+O1xuICBvblNlbGVjdEdyb3VwOiAoZ3JvdXBLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbiAgb25Ib3Zlckdyb3VwOiAoZ3JvdXBLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbiAgb25Mb2FkRXZlbnREYXRhPzogKGV2ZW50OiBFdmVudCkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIGNhY2hlZEV2ZW50RGF0YTogdW5rbm93biB8IG51bGw7XG4gIG9uQ2FjaGVFdmVudERhdGE6IChldmVudElkOiBzdHJpbmcsIGRhdGE6IHVua25vd24pID0+IHZvaWQ7XG4gIGVuY3J5cHRpb25LZXk/OiBVaW50OEFycmF5O1xuICBvbkVuY3J5cHRlZERhdGFEZXRlY3RlZD86ICgpID0+IHZvaWQ7XG4gIC8qKiBFeGFjdC1JRCBzZWFyY2ggcmVzdWx0cyBzaG91bGQgbm90IGRpbSB1bnJlbGF0ZWQgcm93cy4gKi9cbiAgc3VwcHJlc3NHcm91cERpbW1pbmc/OiBib29sZWFuO1xufSkge1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbG9hZGVkRXZlbnREYXRhLCBzZXRMb2FkZWRFdmVudERhdGFdID0gdXNlU3RhdGU8dW5rbm93biB8IG51bGw+KFxuICAgIGNhY2hlZEV2ZW50RGF0YVxuICApO1xuICBjb25zdCBbbG9hZEVycm9yLCBzZXRMb2FkRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtoYXNBdHRlbXB0ZWRMb2FkLCBzZXRIYXNBdHRlbXB0ZWRMb2FkXSA9IHVzZVN0YXRlKFxuICAgIGNhY2hlZEV2ZW50RGF0YSAhPT0gbnVsbFxuICApO1xuXG4gIC8vIE5vdGlmeSBwYXJlbnQgaWYgY2FjaGVkIGRhdGEgaGFzIGVuY3J5cHRlZCBtYXJrZXJzIG9uIG1vdW50XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgY2FjaGVkRXZlbnREYXRhICE9PSBudWxsICYmXG4gICAgICAhZW5jcnlwdGlvbktleSAmJlxuICAgICAgaGFzRW5jcnlwdGVkVmFsdWVzKGNhY2hlZEV2ZW50RGF0YSlcbiAgICApIHtcbiAgICAgIG9uRW5jcnlwdGVkRGF0YURldGVjdGVkPy4oKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgcm93R3JvdXBLZXkgPSBpc1J1bkxldmVsKGV2ZW50LmV2ZW50VHlwZSlcbiAgICA/ICdfX3J1bl9fJ1xuICAgIDogKGV2ZW50LmNvcnJlbGF0aW9uSWQgPz8gdW5kZWZpbmVkKTtcblxuICBjb25zdCBzdGF0dXNEb3RDb2xvciA9IGdldFN0YXR1c0RvdENvbG9yKGV2ZW50LmV2ZW50VHlwZSk7XG4gIGNvbnN0IGNyZWF0ZWRBdCA9IG5ldyBEYXRlKGV2ZW50LmNyZWF0ZWRBdCk7XG4gIGNvbnN0IGhhc0V4aXN0aW5nRXZlbnREYXRhID0gJ2V2ZW50RGF0YScgaW4gZXZlbnQgJiYgZXZlbnQuZXZlbnREYXRhICE9IG51bGw7XG4gIGNvbnN0IGlzUnVuID0gaXNSdW5MZXZlbChldmVudC5ldmVudFR5cGUpO1xuICBjb25zdCBldmVudE5hbWUgPSBpc1J1blxuICAgID8gKHdvcmtmbG93TmFtZSA/PyAnLScpXG4gICAgOiBldmVudC5jb3JyZWxhdGlvbklkXG4gICAgICA/IChjb3JyZWxhdGlvbk5hbWVNYXAuZ2V0KGV2ZW50LmNvcnJlbGF0aW9uSWQpID8/ICctJylcbiAgICAgIDogJy0nO1xuXG4gIGNvbnN0IGR1cmF0aW9uS2V5ID0gZXZlbnQuY29ycmVsYXRpb25JZCA/PyAoaXNSdW4gPyAnX19ydW5fXycgOiAnJyk7XG4gIGNvbnN0IGR1cmF0aW9uSW5mbyA9IGR1cmF0aW9uS2V5ID8gZHVyYXRpb25NYXAuZ2V0KGR1cmF0aW9uS2V5KSA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBoYXNBY3RpdmUgPSBhY3RpdmVHcm91cEtleSAhPT0gdW5kZWZpbmVkO1xuICBjb25zdCBpc1JlbGF0ZWQgPSByb3dHcm91cEtleSAhPT0gdW5kZWZpbmVkICYmIHJvd0dyb3VwS2V5ID09PSBhY3RpdmVHcm91cEtleTtcbiAgY29uc3QgaXNEaW1tZWQgPSBoYXNBY3RpdmUgJiYgIWlzUmVsYXRlZCAmJiAhc3VwcHJlc3NHcm91cERpbW1pbmc7XG4gIGNvbnN0IGlzUHVsc2luZyA9IGhhc0FjdGl2ZSAmJiBpc1JlbGF0ZWQ7XG5cbiAgLy8gR3V0dGVyIHN0YXRlIGRlcml2ZWQgZnJvbSBzZWxlY3RlZEdyb3VwUmFuZ2VcbiAgY29uc3Qgc2hvd0JyYW5jaCA9IGhhc0FjdGl2ZSAmJiBpc1JlbGF0ZWQgJiYgIWlzUnVuO1xuICBjb25zdCBzaG93TGFuZUxpbmUgPVxuICAgIHNlbGVjdGVkR3JvdXBSYW5nZSAhPT0gbnVsbCAmJlxuICAgIGluZGV4ID49IHNlbGVjdGVkR3JvdXBSYW5nZS5maXJzdCAmJlxuICAgIGluZGV4IDw9IHNlbGVjdGVkR3JvdXBSYW5nZS5sYXN0O1xuICBjb25zdCBpc0xhbmVTdGFydCA9XG4gICAgc2VsZWN0ZWRHcm91cFJhbmdlICE9PSBudWxsICYmIGluZGV4ID09PSBzZWxlY3RlZEdyb3VwUmFuZ2UuZmlyc3Q7XG4gIGNvbnN0IGlzTGFuZUVuZCA9XG4gICAgc2VsZWN0ZWRHcm91cFJhbmdlICE9PSBudWxsICYmIGluZGV4ID09PSBzZWxlY3RlZEdyb3VwUmFuZ2UubGFzdDtcblxuICBjb25zdCBsb2FkRXZlbnREZXRhaWxzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmIChsb2FkZWRFdmVudERhdGEgIT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNhY2hlZEV2ZW50RGF0YSAhPT0gbnVsbCkge1xuICAgICAgc2V0TG9hZGVkRXZlbnREYXRhKGNhY2hlZEV2ZW50RGF0YSk7XG4gICAgICBzZXRIYXNBdHRlbXB0ZWRMb2FkKHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldElzTG9hZGluZyh0cnVlKTtcbiAgICBzZXRMb2FkRXJyb3IobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb25Mb2FkRXZlbnREYXRhKSB7XG4gICAgICAgIHNldExvYWRFcnJvcignRXZlbnQgZGV0YWlscyB1bmF2YWlsYWJsZScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgb25Mb2FkRXZlbnREYXRhKGV2ZW50KTtcbiAgICAgIGlmIChkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZXRMb2FkZWRFdmVudERhdGEoZGF0YSk7XG4gICAgICAgIG9uQ2FjaGVFdmVudERhdGEoZXZlbnQuZXZlbnRJZCwgZGF0YSk7XG4gICAgICAgIGlmICghZW5jcnlwdGlvbktleSAmJiBoYXNFbmNyeXB0ZWRWYWx1ZXMoZGF0YSkpIHtcbiAgICAgICAgICBvbkVuY3J5cHRlZERhdGFEZXRlY3RlZD8uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNldExvYWRFcnJvcihcbiAgICAgICAgZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdGYWlsZWQgdG8gbG9hZCBldmVudCBkZXRhaWxzJ1xuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldEhhc0F0dGVtcHRlZExvYWQodHJ1ZSk7XG4gICAgfVxuICB9LCBbXG4gICAgZXZlbnQsXG4gICAgbG9hZGVkRXZlbnREYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBvbkxvYWRFdmVudERhdGEsXG4gICAgb25DYWNoZUV2ZW50RGF0YSxcbiAgICBlbmNyeXB0aW9uS2V5LFxuICAgIG9uRW5jcnlwdGVkRGF0YURldGVjdGVkLFxuICAgIGNhY2hlZEV2ZW50RGF0YSxcbiAgXSk7XG5cbiAgLy8gQXV0by1sb2FkIGV2ZW50IGRhdGEgd2hlbiByZW1vdW50aW5nIGluIGV4cGFuZGVkIHN0YXRlIHdpdGhvdXQgY2FjaGVkIGRhdGFcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzRXhwYW5kZWQgfHwgaXNMb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZvaWQgbG9hZEV2ZW50RGV0YWlscygpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuXG4gIC8vIFdoZW4gZW5jcnlwdGlvbiBrZXkgY2hhbmdlcyBhbmQgdGhpcyBldmVudCB3YXMgcHJldmlvdXNseSBsb2FkZWQsXG4gIC8vIHJlLWxvYWQgdG8gZ2V0IGRlY3J5cHRlZCBkYXRhXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGVuY3J5cHRpb25LZXkgJiYgaGFzQXR0ZW1wdGVkTG9hZCAmJiBvbkxvYWRFdmVudERhdGEpIHtcbiAgICAgIHNldExvYWRlZEV2ZW50RGF0YShudWxsKTtcbiAgICAgIHNldEhhc0F0dGVtcHRlZExvYWQoZmFsc2UpO1xuICAgICAgb25Mb2FkRXZlbnREYXRhKGV2ZW50KVxuICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2V0TG9hZGVkRXZlbnREYXRhKGRhdGEpO1xuICAgICAgICAgICAgb25DYWNoZUV2ZW50RGF0YShldmVudC5ldmVudElkLCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0SGFzQXR0ZW1wdGVkTG9hZCh0cnVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICBzZXRIYXNBdHRlbXB0ZWRMb2FkKHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbZW5jcnlwdGlvbktleV0pO1xuXG4gIGNvbnN0IGhhbmRsZVJvd0NsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9uU2VsZWN0R3JvdXAocm93R3JvdXBLZXkgPT09IHNlbGVjdGVkR3JvdXBLZXkgPyB1bmRlZmluZWQgOiByb3dHcm91cEtleSk7XG4gICAgb25Ub2dnbGVFeHBhbmQoZXZlbnQuZXZlbnRJZCk7XG4gICAgaWYgKCFpc0V4cGFuZGVkKSB7XG4gICAgICB2b2lkIGxvYWRFdmVudERldGFpbHMoKTtcbiAgICB9XG4gIH0sIFtcbiAgICBzZWxlY3RlZEdyb3VwS2V5LFxuICAgIHJvd0dyb3VwS2V5LFxuICAgIG9uU2VsZWN0R3JvdXAsXG4gICAgb25Ub2dnbGVFeHBhbmQsXG4gICAgZXZlbnQuZXZlbnRJZCxcbiAgICBpc0V4cGFuZGVkLFxuICAgIGxvYWRFdmVudERldGFpbHMsXG4gIF0pO1xuXG4gIGNvbnN0IG1lcmdlZEV2ZW50RGF0YSA9XG4gICAgbG9hZGVkRXZlbnREYXRhID8/XG4gICAgKGhhc0V4aXN0aW5nRXZlbnREYXRhXG4gICAgICA/IChldmVudCBhcyBFdmVudCAmIHsgZXZlbnREYXRhOiB1bmtub3duIH0pLmV2ZW50RGF0YVxuICAgICAgOiBudWxsKTtcblxuICBjb25zdCBkaXNwbGF5UGF5bG9hZCA9IGlzTG9hZGluZyA/IGxvYWRlZEV2ZW50RGF0YSA6IG1lcmdlZEV2ZW50RGF0YTtcblxuICBjb25zdCBjb250ZW50T3BhY2l0eSA9IGlzRGltbWVkID8gMC4zIDogMTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtZXZlbnQtaWQ9e2V2ZW50LmV2ZW50SWR9XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IG9uSG92ZXJHcm91cChyb3dHcm91cEtleSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IG9uSG92ZXJHcm91cCh1bmRlZmluZWQpfVxuICAgID5cbiAgICAgIHsvKiBSb3cgKi99XG4gICAgICA8ZGl2XG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgb25DbGljaz17aGFuZGxlUm93Q2xpY2t9XG4gICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykgaGFuZGxlUm93Q2xpY2soKTtcbiAgICAgICAgfX1cbiAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHRleHQtbGVmdCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMCB0ZXh0LVsxM3B4XSBob3ZlcjpiZy1bdmFyKC0tZHMtZ3JheS1hbHBoYS0xMDApXSB0cmFuc2l0aW9uLWNvbG9ycyBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgIHN0eWxlPXt7IG1pbkhlaWdodDogNDAgfX1cbiAgICAgID5cbiAgICAgICAgPFRyZWVHdXR0ZXJcbiAgICAgICAgICBpc0ZpcnN0PXtpc0ZpcnN0fVxuICAgICAgICAgIGlzTGFzdD17aXNMYXN0ICYmICFpc0V4cGFuZGVkfVxuICAgICAgICAgIGlzUnVuTGV2ZWw9e2lzUnVufVxuICAgICAgICAgIHN0YXR1c0RvdENvbG9yPXtzdGF0dXNEb3RDb2xvcn1cbiAgICAgICAgICBwdWxzZT17aXNQdWxzaW5nfVxuICAgICAgICAgIGhhc1NlbGVjdGlvbj17aGFzQWN0aXZlfVxuICAgICAgICAgIHNob3dCcmFuY2g9e3Nob3dCcmFuY2h9XG4gICAgICAgICAgc2hvd0xhbmVMaW5lPXtzaG93TGFuZUxpbmV9XG4gICAgICAgICAgaXNMYW5lU3RhcnQ9e2lzTGFuZVN0YXJ0fVxuICAgICAgICAgIGlzTGFuZUVuZD17aXNMYW5lRW5kfVxuICAgICAgICAvPlxuXG4gICAgICAgIHsvKiBDb250ZW50IGFyZWEg4oCUIGRpbXMgd2hlbiB1bnJlbGF0ZWQgKi99XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBmbGV4LTEgbWluLXctMFwiXG4gICAgICAgICAgc3R5bGU9e3sgb3BhY2l0eTogY29udGVudE9wYWNpdHksIHRyYW5zaXRpb246ICdvcGFjaXR5IDE1MG1zJyB9fVxuICAgICAgICA+XG4gICAgICAgICAgey8qIEV4cGFuZCBjaGV2cm9uIGluZGljYXRvciAqL31cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTUgaC01IGZsZXgtc2hyaW5rLTAgcm91bmRlZFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgdmFyKC0tZHMtZ3JheS00MDApJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPENoZXZyb25SaWdodFxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTMgdy0zIHRyYW5zaXRpb24tdHJhbnNmb3JtXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBpc0V4cGFuZGVkID8gJ3JvdGF0ZSg5MGRlZyknIDogJ3JvdGF0ZSgwZGVnKScsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgey8qIFRpbWUgKi99XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGFidWxhci1udW1zIG1pbi13LTAgcHgtNFwiXG4gICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsIGZsZXg6ICcyIDEgMCUnIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRpbWVzdGFtcFRvb2x0aXAgZGF0ZT17Y3JlYXRlZEF0fT5cbiAgICAgICAgICAgICAgPHNwYW4+e2Zvcm1hdEV2ZW50VGltZShjcmVhdGVkQXQpfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvVGltZXN0YW1wVG9vbHRpcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBFdmVudCBUeXBlICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW0gbWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNVwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogNixcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNixcbiAgICAgICAgICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtpc1B1bHNpbmcgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICBpbnNldDogMCxcbiAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogc3RhdHVzRG90Q29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC43NSxcbiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246IERPVF9QVUxTRV9BTklNQVRJT04sXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogNixcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA2LFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHN0YXR1c0RvdENvbG9yLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIHtmb3JtYXRFdmVudFR5cGUoZXZlbnQuZXZlbnRUeXBlKX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBOYW1lICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcFwiXG4gICAgICAgICAgICBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fVxuICAgICAgICAgICAgdGl0bGU9e2V2ZW50TmFtZSAhPT0gJy0nID8gZXZlbnROYW1lIDogdW5kZWZpbmVkfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtldmVudE5hbWV9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogQ29ycmVsYXRpb24gSUQgKi99XG4gICAgICAgICAgPENvcHlhYmxlQ2VsbFxuICAgICAgICAgICAgdmFsdWU9e2V2ZW50LmNvcnJlbGF0aW9uSWQgfHwgJyd9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmb250LW1vbm9cIlxuICAgICAgICAgICAgc3R5bGU9e3sgZmxleDogJzMgMSAwJScgfX1cbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgey8qIEV2ZW50IElEICovfVxuICAgICAgICAgIDxDb3B5YWJsZUNlbGxcbiAgICAgICAgICAgIHZhbHVlPXtldmVudC5ldmVudElkfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9udC1tb25vXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGZsZXg6ICczIDEgMCUnIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIEV4cGFuZGVkIGRldGFpbHMg4oCUIHRyZWUgbGluZXMgY29udGludWUgdGhyb3VnaCB0aGlzIGFyZWEgKi99XG4gICAgICB7aXNFeHBhbmRlZCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleFwiPlxuICAgICAgICAgIHsvKiBDb250aW51YXRpb24gZ3V0dGVyIOKAlCBsYW5lIGxpbmUgY29udGludWVzIGlmIG5vdCBhdCBsYW5lIGVuZCAqL31cbiAgICAgICAgICA8VHJlZUd1dHRlclxuICAgICAgICAgICAgaXNGaXJzdD17ZmFsc2V9XG4gICAgICAgICAgICBpc0xhc3Q9e2lzTGFzdH1cbiAgICAgICAgICAgIGlzUnVuTGV2ZWw9e2lzUnVufVxuICAgICAgICAgICAgaGFzU2VsZWN0aW9uPXtoYXNBY3RpdmV9XG4gICAgICAgICAgICBzaG93QnJhbmNoPXtmYWxzZX1cbiAgICAgICAgICAgIHNob3dMYW5lTGluZT17c2hvd0xhbmVMaW5lICYmICFpc0xhbmVFbmR9XG4gICAgICAgICAgICBpc0xhbmVTdGFydD17ZmFsc2V9XG4gICAgICAgICAgICBpc0xhbmVFbmQ9e2ZhbHNlfVxuICAgICAgICAgICAgY29udGludWF0aW9uT25seVxuICAgICAgICAgIC8+XG4gICAgICAgICAgey8qIFNwYWNlciBmb3IgY2hldnJvbiBjb2x1bW4gKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTUgZmxleC1zaHJpbmstMFwiIC8+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIG15LTEuNSBtci0zIG1sLTIgcHktMiByb3VuZGVkLW1kIGJvcmRlciBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LWFscGhhLTIwMCknLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBjb250ZW50T3BhY2l0eSxcbiAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMTUwbXMnLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LyogRHVyYXRpb24gaW5mbyAqL31cbiAgICAgICAgICAgIHsoZHVyYXRpb25JbmZvPy5xdWV1ZWQgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBkdXJhdGlvbkluZm8/LnJhbiAhPT0gdW5kZWZpbmVkKSAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC0yIHBiLTEuNSB0ZXh0LXhzIGZsZXggZ2FwLTNcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2R1cmF0aW9uSW5mby5xdWV1ZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgZHVyYXRpb25JbmZvLnF1ZXVlZCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICBRdWV1ZWQgZm9yeycgJ31cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1vbm8gdGFidWxhci1udW1zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Zm9ybWF0RHVyYXRpb24oZHVyYXRpb25JbmZvLnF1ZXVlZCl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtkdXJhdGlvbkluZm8ucmFuICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIFJhbiBmb3J7JyAnfVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1vbm8gdGFidWxhci1udW1zXCI+XG4gICAgICAgICAgICAgICAgICAgICAge2Zvcm1hdER1cmF0aW9uKGR1cmF0aW9uSW5mby5yYW4pfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7LyogUGF5bG9hZCAqL31cbiAgICAgICAgICAgIHtkaXNwbGF5UGF5bG9hZCAhPSBudWxsID8gKFxuICAgICAgICAgICAgICA8UGF5bG9hZEJsb2NrIGRhdGE9e2Rpc3BsYXlQYXlsb2FkfSBldmVudFR5cGU9e2V2ZW50LmV2ZW50VHlwZX0gLz5cbiAgICAgICAgICAgICkgOiBsb2FkRXJyb3IgPyAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBwLTMgdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAndmFyKC0tZHMtcmVkLTQwMCknLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtcmVkLTEwMCknLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1yZWQtOTAwKScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtsb2FkRXJyb3J9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IGlzTG9hZGluZyB8fFxuICAgICAgICAgICAgICAobG9hZGVkRXZlbnREYXRhID09PSBudWxsICYmXG4gICAgICAgICAgICAgICAgIWhhc0F0dGVtcHRlZExvYWQgJiZcbiAgICAgICAgICAgICAgICBldmVudC5jb3JyZWxhdGlvbklkKSA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0yIHAtM1wiPlxuICAgICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTNcIiBzdHlsZT17eyB3aWR0aDogJzc1JScgfX0gLz5cbiAgICAgICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc1MCUnIH19IC8+XG4gICAgICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNjAlJyB9fSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwLTIgdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTkwMCknIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBObyBkYXRhXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIE1haW4gY29tcG9uZW50XG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50TGlzdFZpZXcoe1xuICBldmVudHMsXG4gIHJ1bixcbiAgb25Mb2FkRXZlbnREYXRhLFxuICBoYXNNb3JlRXZlbnRzID0gZmFsc2UsXG4gIGlzTG9hZGluZ01vcmVFdmVudHMgPSBmYWxzZSxcbiAgb25Mb2FkTW9yZUV2ZW50cyxcbiAgZW5jcnlwdGlvbktleSxcbiAgaXNMb2FkaW5nID0gZmFsc2UsXG4gIHNvcnRPcmRlcjogc29ydE9yZGVyUHJvcCxcbiAgb25Tb3J0T3JkZXJDaGFuZ2UsXG4gIG9uRGVjcnlwdCxcbiAgaXNEZWNyeXB0aW5nID0gZmFsc2UsXG4gIGhhc0VuY3J5cHRlZERhdGE6IGhhc0VuY3J5cHRlZERhdGFQcm9wID0gZmFsc2UsXG4gIG9uRXhhY3RJZFNlYXJjaCxcbn06IEV2ZW50c0xpc3RQcm9wcykge1xuICBjb25zdCB0b2FzdCA9IHVzZVRvYXN0KCk7XG4gIGNvbnN0IFtpbnRlcm5hbFNvcnRPcmRlciwgc2V0SW50ZXJuYWxTb3J0T3JkZXJdID0gdXNlU3RhdGU8J2FzYycgfCAnZGVzYyc+KFxuICAgICdhc2MnXG4gICk7XG4gIGNvbnN0IGVmZmVjdGl2ZVNvcnRPcmRlciA9IHNvcnRPcmRlclByb3AgPz8gaW50ZXJuYWxTb3J0T3JkZXI7XG4gIGNvbnN0IGhhbmRsZVNvcnRPcmRlckNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChvcmRlcjogJ2FzYycgfCAnZGVzYycpID0+IHtcbiAgICAgIGlmIChvblNvcnRPcmRlckNoYW5nZSkge1xuICAgICAgICBvblNvcnRPcmRlckNoYW5nZShvcmRlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRJbnRlcm5hbFNvcnRPcmRlcihvcmRlcik7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25Tb3J0T3JkZXJDaGFuZ2VdXG4gICk7XG5cbiAgY29uc3QgW3NlYXJjaFF1ZXJ5LCBzZXRTZWFyY2hRdWVyeV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtzZWFyY2hSZXN1bHRzLCBzZXRTZWFyY2hSZXN1bHRzXSA9IHVzZVN0YXRlPEV2ZW50W10gfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3NlYXJjaFJlc3VsdHNUcnVuY2F0ZWQsIHNldFNlYXJjaFJlc3VsdHNUcnVuY2F0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2VhcmNoRXJyb3IsIHNldFNlYXJjaEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbc2VhcmNoTG9hZGluZywgc2V0U2VhcmNoTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzZWFyY2hOb3RGb3VuZCwgc2V0U2VhcmNoTm90Rm91bmRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hSZXF1ZXN0UmVmID0gdXNlUmVmKDApO1xuICBjb25zdCB2aXJ0dW9zb1JlZiA9IHVzZVJlZjxWaXJ0dW9zb0hhbmRsZT4obnVsbCk7XG5cbiAgY29uc3QgcGFyc2VkU2VhcmNoSWQgPSB1c2VNZW1vKFxuICAgICgpID0+IHBhcnNlRXhhY3RXb3JrZmxvd1NlYXJjaElkKHNlYXJjaFF1ZXJ5KSxcbiAgICBbc2VhcmNoUXVlcnldXG4gICk7XG4gIGNvbnN0IGlzRXhhY3RTZWFyY2hBY3RpdmUgPSBzZWFyY2hSZXN1bHRzICE9PSBudWxsO1xuXG4gIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZUV2ZW50cyA9IGlzRXhhY3RTZWFyY2hBY3RpdmUgPyBzZWFyY2hSZXN1bHRzIDogKGV2ZW50cyA/PyBbXSk7XG4gICAgaWYgKHNvdXJjZUV2ZW50cy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcbiAgICBjb25zdCBkaXIgPSBlZmZlY3RpdmVTb3J0T3JkZXIgPT09ICdkZXNjJyA/IC0xIDogMTtcbiAgICByZXR1cm4gWy4uLnNvdXJjZUV2ZW50c10uc29ydChcbiAgICAgIChhLCBiKSA9PlxuICAgICAgICBkaXIgKlxuICAgICAgICAobmV3IERhdGUoYS5jcmVhdGVkQXQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGIuY3JlYXRlZEF0KS5nZXRUaW1lKCkpXG4gICAgKTtcbiAgfSwgW2V2ZW50cywgZWZmZWN0aXZlU29ydE9yZGVyLCBpc0V4YWN0U2VhcmNoQWN0aXZlLCBzZWFyY2hSZXN1bHRzXSk7XG5cbiAgLy8gRGV0ZWN0IGVuY3J5cHRlZCBmaWVsZHMgYWNyb3NzIGFsbCBsb2FkZWQgZXZlbnRzIChpbmxpbmUgZXZlbnREYXRhKS5cbiAgY29uc3QgaGFzRW5jcnlwdGVkSW5saW5lRGF0YSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZUV2ZW50cyA9IGlzRXhhY3RTZWFyY2hBY3RpdmUgPyBzZWFyY2hSZXN1bHRzIDogZXZlbnRzO1xuICAgIGlmICghc291cmNlRXZlbnRzKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChjb25zdCBldmVudCBvZiBzb3VyY2VFdmVudHMpIHtcbiAgICAgIGNvbnN0IGVkID0gKGV2ZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5ldmVudERhdGE7XG4gICAgICBpZiAoaGFzRW5jcnlwdGVkVmFsdWVzKGVkKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgW2V2ZW50cywgaXNFeGFjdFNlYXJjaEFjdGl2ZSwgc2VhcmNoUmVzdWx0c10pO1xuXG4gIC8vIFRyYWNrcyB3aGV0aGVyIGFueSBleHBhbmRlZCByb3cncyBsYXp5LWxvYWRlZCBkYXRhIGNvbnRhaW5lZCBlbmNyeXB0ZWQgbWFya2Vycy5cbiAgLy8gU2V0IHRvIHRydWUgYnkgRXZlbnRSb3cgdmlhIG9uRW5jcnlwdGVkRGF0YURldGVjdGVkOyBuZXZlciByZXNldCAoc3RpY2t5KS5cbiAgY29uc3QgW2ZvdW5kRW5jcnlwdGVkSW5MYXp5RGF0YSwgc2V0Rm91bmRFbmNyeXB0ZWRJbkxhenlEYXRhXSA9XG4gICAgdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBoYW5kbGVFbmNyeXB0ZWREYXRhRGV0ZWN0ZWQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0Rm91bmRFbmNyeXB0ZWRJbkxhenlEYXRhKHRydWUpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFzRW5jcnlwdGVkRGF0YSA9XG4gICAgaGFzRW5jcnlwdGVkRGF0YVByb3AgfHwgaGFzRW5jcnlwdGVkSW5saW5lRGF0YSB8fCBmb3VuZEVuY3J5cHRlZEluTGF6eURhdGE7XG5cbiAgY29uc3QgeyBjb3JyZWxhdGlvbk5hbWVNYXAsIHdvcmtmbG93TmFtZSB9ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgYnVpbGROYW1lTWFwcyhcbiAgICAgICAgaXNFeGFjdFNlYXJjaEFjdGl2ZSA/IHNlYXJjaFJlc3VsdHMgOiAoZXZlbnRzID8/IG51bGwpLFxuICAgICAgICBydW4gPz8gbnVsbFxuICAgICAgKSxcbiAgICBbZXZlbnRzLCBpc0V4YWN0U2VhcmNoQWN0aXZlLCBydW4sIHNlYXJjaFJlc3VsdHNdXG4gICk7XG5cbiAgY29uc3QgZHVyYXRpb25NYXAgPSB1c2VNZW1vKFxuICAgICgpID0+IGJ1aWxkRHVyYXRpb25NYXAoc29ydGVkRXZlbnRzKSxcbiAgICBbc29ydGVkRXZlbnRzXVxuICApO1xuXG4gIGNvbnN0IFtzZWxlY3RlZEdyb3VwS2V5LCBzZXRTZWxlY3RlZEdyb3VwS2V5XSA9IHVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIGNvbnN0IFtob3ZlcmVkR3JvdXBLZXksIHNldEhvdmVyZWRHcm91cEtleV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBjb25zdCBvblNlbGVjdEdyb3VwID0gdXNlQ2FsbGJhY2soKGdyb3VwS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcbiAgICBzZXRTZWxlY3RlZEdyb3VwS2V5KGdyb3VwS2V5KTtcbiAgfSwgW10pO1xuICBjb25zdCBvbkhvdmVyR3JvdXAgPSB1c2VDYWxsYmFjaygoZ3JvdXBLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIHNldEhvdmVyZWRHcm91cEtleShncm91cEtleSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBhY3RpdmVHcm91cEtleSA9IHNlbGVjdGVkR3JvdXBLZXkgPz8gaG92ZXJlZEdyb3VwS2V5O1xuXG4gIC8vIEV4cGFuZGVkIHN0YXRlIGxpZnRlZCBvdXQgb2YgRXZlbnRSb3cgc28gaXQgc3Vydml2ZXMgdmlydHVhbGl6YXRpb25cbiAgY29uc3QgW2V4cGFuZGVkRXZlbnRJZHMsIHNldEV4cGFuZGVkRXZlbnRJZHNdID0gdXNlU3RhdGU8U2V0PHN0cmluZz4+KFxuICAgICgpID0+IG5ldyBTZXQoKVxuICApO1xuICBjb25zdCB0b2dnbGVFdmVudEV4cGFuZGVkID0gdXNlQ2FsbGJhY2soKGV2ZW50SWQ6IHN0cmluZykgPT4ge1xuICAgIHNldEV4cGFuZGVkRXZlbnRJZHMoKHByZXYpID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KHByZXYpO1xuICAgICAgaWYgKG5leHQuaGFzKGV2ZW50SWQpKSB7XG4gICAgICAgIG5leHQuZGVsZXRlKGV2ZW50SWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dC5hZGQoZXZlbnRJZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIEV2ZW50IGRhdGEgY2FjaGUg4oCUIHJlZiBhdm9pZHMgcmUtcmVuZGVycyB3aGVuIGNhY2hlIHVwZGF0ZXNcbiAgY29uc3QgZXZlbnREYXRhQ2FjaGVSZWYgPSB1c2VSZWY8TWFwPHN0cmluZywgdW5rbm93bj4+KG5ldyBNYXAoKSk7XG4gIGNvbnN0IGNhY2hlRXZlbnREYXRhID0gdXNlQ2FsbGJhY2soKGV2ZW50SWQ6IHN0cmluZywgZGF0YTogdW5rbm93bikgPT4ge1xuICAgIGV2ZW50RGF0YUNhY2hlUmVmLmN1cnJlbnQuc2V0KGV2ZW50SWQsIGRhdGEpO1xuICB9LCBbXSk7XG5cbiAgLy8gTG9va3VwIGZyb20gZXZlbnRJZCDihpIgZ3JvdXBLZXkgZm9yIGVmZmljaWVudCBjb2xsYXBzZSBmaWx0ZXJpbmdcbiAgY29uc3QgZXZlbnRHcm91cEtleU1hcCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBldiBvZiBzb3J0ZWRFdmVudHMpIHtcbiAgICAgIGNvbnN0IGdrID0gaXNSdW5MZXZlbChldi5ldmVudFR5cGUpXG4gICAgICAgID8gJ19fcnVuX18nXG4gICAgICAgIDogKGV2LmNvcnJlbGF0aW9uSWQgPz8gJycpO1xuICAgICAgaWYgKGdrKSBtYXAuc2V0KGV2LmV2ZW50SWQsIGdrKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcDtcbiAgfSwgW3NvcnRlZEV2ZW50c10pO1xuXG4gIC8vIENvbGxhcHNlIGV4cGFuZGVkIGV2ZW50cyB0aGF0IGRvbid0IGJlbG9uZyB0byB0aGUgbmV3bHkgc2VsZWN0ZWQgZ3JvdXBcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRHcm91cEtleSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgc2V0RXhwYW5kZWRFdmVudElkcygocHJldikgPT4ge1xuICAgICAgaWYgKHByZXYuc2l6ZSA9PT0gMCkgcmV0dXJuIHByZXY7XG4gICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgY29uc3QgbmV4dCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgZm9yIChjb25zdCBldmVudElkIG9mIHByZXYpIHtcbiAgICAgICAgaWYgKGV2ZW50R3JvdXBLZXlNYXAuZ2V0KGV2ZW50SWQpID09PSBzZWxlY3RlZEdyb3VwS2V5KSB7XG4gICAgICAgICAgbmV4dC5hZGQoZXZlbnRJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjaGFuZ2VkID8gbmV4dCA6IHByZXY7XG4gICAgfSk7XG4gIH0sIFtzZWxlY3RlZEdyb3VwS2V5LCBldmVudEdyb3VwS2V5TWFwXSk7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgcm93LWluZGV4IHJhbmdlIGZvciB0aGUgYWN0aXZlIGdyb3VwJ3MgY29ubmVjdGluZyBsYW5lIGxpbmUuXG4gIC8vIE9ubHkgYXBwbGllcyB0byBub24tcnVuIGdyb3VwcyAoc3RlcC9ob29rL3dhaXQgY29ycmVsYXRpb25zKS5cbiAgY29uc3Qgc2VsZWN0ZWRHcm91cFJhbmdlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFhY3RpdmVHcm91cEtleSB8fCBhY3RpdmVHcm91cEtleSA9PT0gJ19fcnVuX18nKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgZmlyc3QgPSAtMTtcbiAgICBsZXQgbGFzdCA9IC0xO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkRXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoc29ydGVkRXZlbnRzW2ldLmNvcnJlbGF0aW9uSWQgPT09IGFjdGl2ZUdyb3VwS2V5KSB7XG4gICAgICAgIGlmIChmaXJzdCA9PT0gLTEpIGZpcnN0ID0gaTtcbiAgICAgICAgbGFzdCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaXJzdCA+PSAwID8geyBmaXJzdCwgbGFzdCB9IDogbnVsbDtcbiAgfSwgW2FjdGl2ZUdyb3VwS2V5LCBzb3J0ZWRFdmVudHNdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBzZWFyY2hRdWVyeS50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkKSB7XG4gICAgICBzZWFyY2hSZXF1ZXN0UmVmLmN1cnJlbnQgKz0gMTtcbiAgICAgIHNldFNlYXJjaFJlc3VsdHMobnVsbCk7XG4gICAgICBzZXRTZWFyY2hSZXN1bHRzVHJ1bmNhdGVkKGZhbHNlKTtcbiAgICAgIHNldFNlYXJjaEVycm9yKG51bGwpO1xuICAgICAgc2V0U2VhcmNoTG9hZGluZyhmYWxzZSk7XG4gICAgICBzZXRTZWFyY2hOb3RGb3VuZChmYWxzZSk7XG4gICAgICBzZXRTZWxlY3RlZEdyb3VwS2V5KHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VFeGFjdFdvcmtmbG93U2VhcmNoSWQodHJpbW1lZCk7XG4gICAgaWYgKCFwYXJzZWQgfHwgIW9uRXhhY3RJZFNlYXJjaCkge1xuICAgICAgc2V0U2VhcmNoUmVzdWx0cyhudWxsKTtcbiAgICAgIHNldFNlYXJjaExvYWRpbmcoZmFsc2UpO1xuICAgICAgc2V0U2VhcmNoTm90Rm91bmQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RJZCA9ICsrc2VhcmNoUmVxdWVzdFJlZi5jdXJyZW50O1xuICAgIHNldFNlYXJjaExvYWRpbmcodHJ1ZSk7XG4gICAgc2V0U2VhcmNoTm90Rm91bmQoZmFsc2UpO1xuICAgIHNldFNlYXJjaEVycm9yKG51bGwpO1xuXG4gICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHZvaWQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgb25FeGFjdElkU2VhcmNoKFxuICAgICAgICAgICAgcGFyc2VkLmlkLFxuICAgICAgICAgICAgcGFyc2VkLmtpbmQsXG4gICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQgfHxcbiAgICAgICAgICAgIHNlYXJjaFJlcXVlc3RSZWYuY3VycmVudCAhPT0gcmVxdWVzdElkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlc3VsdHMuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICBzZXRTZWFyY2hSZXN1bHRzKFtdKTtcbiAgICAgICAgICAgIHNldFNlYXJjaFJlc3VsdHNUcnVuY2F0ZWQoZmFsc2UpO1xuICAgICAgICAgICAgc2V0U2VhcmNoTm90Rm91bmQoZmFsc2UpO1xuICAgICAgICAgICAgc2V0U2VhcmNoRXJyb3IocmVzdWx0cy5tZXNzYWdlKTtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkR3JvdXBLZXkodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXN1bHRzLnN0YXR1cyA9PT0gJ25vdF9mb3VuZCcgfHxcbiAgICAgICAgICAgIChyZXN1bHRzLnN0YXR1cyA9PT0gJ29rJyAmJiByZXN1bHRzLmV2ZW50cy5sZW5ndGggPT09IDApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBzZXRTZWFyY2hSZXN1bHRzKFtdKTtcbiAgICAgICAgICAgIHNldFNlYXJjaFJlc3VsdHNUcnVuY2F0ZWQoZmFsc2UpO1xuICAgICAgICAgICAgc2V0U2VhcmNoTm90Rm91bmQodHJ1ZSk7XG4gICAgICAgICAgICBzZXRTZWFyY2hFcnJvcihudWxsKTtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkR3JvdXBLZXkodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXRTZWFyY2hSZXN1bHRzKHJlc3VsdHMuZXZlbnRzKTtcbiAgICAgICAgICBzZXRTZWFyY2hSZXN1bHRzVHJ1bmNhdGVkKEJvb2xlYW4ocmVzdWx0cy50cnVuY2F0ZWQpKTtcbiAgICAgICAgICBzZXRTZWFyY2hOb3RGb3VuZChmYWxzZSk7XG4gICAgICAgICAgc2V0U2VhcmNoRXJyb3IobnVsbCk7XG4gICAgICAgICAgc2V0U2VsZWN0ZWRHcm91cEtleShcbiAgICAgICAgICAgIHBhcnNlZC5raW5kID09PSAnZXZlbnQnXG4gICAgICAgICAgICAgID8gKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gcmVzdWx0cy5ldmVudHNbMF07XG4gICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzUnVuTGV2ZWwoZmlyc3QuZXZlbnRUeXBlKVxuICAgICAgICAgICAgICAgICAgICA/ICdfX3J1bl9fJ1xuICAgICAgICAgICAgICAgICAgICA6IChmaXJzdC5jb3JyZWxhdGlvbklkID8/IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfSkoKVxuICAgICAgICAgICAgICA6IHBhcnNlZC5pZFxuICAgICAgICAgICk7XG4gICAgICAgICAgdmlydHVvc29SZWYuY3VycmVudD8uc2Nyb2xsVG9JbmRleCh7XG4gICAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICAgIGFsaWduOiAnc3RhcnQnLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQgfHxcbiAgICAgICAgICAgIHNlYXJjaFJlcXVlc3RSZWYuY3VycmVudCAhPT0gcmVxdWVzdElkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldFNlYXJjaFJlc3VsdHMoW10pO1xuICAgICAgICAgIHNldFNlYXJjaFJlc3VsdHNUcnVuY2F0ZWQoZmFsc2UpO1xuICAgICAgICAgIHNldFNlYXJjaE5vdEZvdW5kKGZhbHNlKTtcbiAgICAgICAgICBzZXRTZWFyY2hFcnJvcignRmFpbGVkIHRvIHNlYXJjaCBldmVudHMuIFRyeSBhZ2Fpbi4nKTtcbiAgICAgICAgICBzZXRTZWxlY3RlZEdyb3VwS2V5KHVuZGVmaW5lZCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc2VhcmNoUmVxdWVzdFJlZi5jdXJyZW50ID09PSByZXF1ZXN0SWQgJiZcbiAgICAgICAgICAgICFhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNldFNlYXJjaExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9LCAzMDApO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9O1xuICB9LCBbc2VhcmNoUXVlcnksIG9uRXhhY3RJZFNlYXJjaF0pO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaEtleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0S2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBzZWFyY2hRdWVyeS50cmltKCk7XG4gICAgICBpZiAoXG4gICAgICAgICF0cmltbWVkIHx8XG4gICAgICAgIHBhcnNlRXhhY3RXb3JrZmxvd1NlYXJjaElkKHRyaW1tZWQpIHx8XG4gICAgICAgICFvbkV4YWN0SWRTZWFyY2ggfHxcbiAgICAgICAgIWxvb2tzTGlrZVdvcmtmbG93SWRTZWFyY2hJbnB1dCh0cmltbWVkKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9hc3QuaW5mbygnRW50ZXIgYSBmdWxsIHN0ZXAgSUQsIHdhaXQgSUQsIGhvb2sgSUQsIG9yIGV2ZW50IElEJyk7XG4gICAgfSxcbiAgICBbc2VhcmNoUXVlcnksIG9uRXhhY3RJZFNlYXJjaCwgdG9hc3RdXG4gICk7XG5cbiAgLy8gVHJhY2sgd2hldGhlciB3ZSd2ZSBldmVyIGhhZCBldmVudHMgdG8gZGlzdGluZ3Vpc2ggaW5pdGlhbCBsb2FkIGZyb20gcmVmZXRjaFxuICBjb25zdCBoYXNIYWRFdmVudHNSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICBpZiAoc29ydGVkRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICBoYXNIYWRFdmVudHNSZWYuY3VycmVudCA9IHRydWU7XG4gIH1cbiAgY29uc3QgaXNJbml0aWFsTG9hZCA9IGlzTG9hZGluZyAmJiAhaGFzSGFkRXZlbnRzUmVmLmN1cnJlbnQ7XG4gIGNvbnN0IGlzUmVmZXRjaGluZyA9XG4gICAgaXNMb2FkaW5nICYmIGhhc0hhZEV2ZW50c1JlZi5jdXJyZW50ICYmIHNvcnRlZEV2ZW50cy5sZW5ndGggPT09IDA7XG5cbiAgaWYgKGlzSW5pdGlhbExvYWQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLWZ1bGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgey8qIFNrZWxldG9uIHNlYXJjaCBiYXIgKi99XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogNiB9fT5cbiAgICAgICAgICA8U2tlbGV0b24gc3R5bGU9e3sgaGVpZ2h0OiA0MCwgYm9yZGVyUmFkaXVzOiA2IH19IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7LyogU2tlbGV0b24gaGVhZGVyICovfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTAgaC0xMCBib3JkZXItYiBmbGV4LXNocmluay0wXCJcbiAgICAgICAgICBzdHlsZT17eyBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktYWxwaGEtMjAwKScgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC1zaHJpbmstMFwiIHN0eWxlPXt7IHdpZHRoOiBHVVRURVJfV0lEVEggfX0gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctNSBmbGV4LXNocmluay0wXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiA0MCB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6IDcyIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fT5cbiAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTNcIiBzdHlsZT17eyB3aWR0aDogNDQgfX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICczIDEgMCUnIH19PlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiA5MiB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzMgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6IDYwIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Um93c1NrZWxldG9uIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RGVjcnlwdENsaWNrQ29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e29uRGVjcnlwdCA/IHsgb25EZWNyeXB0LCBpc0RlY3J5cHRpbmcgfSA6IHVuZGVmaW5lZH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtZnVsbCBmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICA8c3R5bGU+e2BAa2V5ZnJhbWVzIHdvcmtmbG93LWRvdC1wdWxzZXswJXt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eTouN303MCUsMTAwJXt0cmFuc2Zvcm06c2NhbGUoMi4yKTtvcGFjaXR5OjB9fWB9PC9zdHlsZT5cbiAgICAgICAgey8qIFNlYXJjaCBiYXIgKyBzb3J0ICovfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHBhZGRpbmc6IDYsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgZ2FwOiA2LFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA2LFxuICAgICAgICAgICAgICBib3hTaGFkb3c6ICcwIDAgMCAxcHggdmFyKC0tZHMtZ3JheS1hbHBoYS00MDApJyxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3ZhcigtLWRzLWJhY2tncm91bmQtMTAwKScsXG4gICAgICAgICAgICAgIGhlaWdodDogNDAsXG4gICAgICAgICAgICAgIGZsZXg6IDEsXG4gICAgICAgICAgICAgIG1pbldpZHRoOiAwLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDQwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogNDAsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktODAwKScsXG4gICAgICAgICAgICAgICAgZmxleFNocmluazogMCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgIHdpZHRoPXsxNn1cbiAgICAgICAgICAgICAgICBoZWlnaHQ9ezE2fVxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgIGN4PVwiN1wiXG4gICAgICAgICAgICAgICAgICBjeT1cIjdcIlxuICAgICAgICAgICAgICAgICAgcj1cIjQuNVwiXG4gICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuNSAxMS41TDE0IDE0XCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGJ5IHN0ZXAgSUQsIHdhaXQgSUQsIGhvb2sgSUQsIG9yIGV2ZW50IElE4oCmXCJcbiAgICAgICAgICAgICAgdmFsdWU9e3NlYXJjaFF1ZXJ5fVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFNlYXJjaFF1ZXJ5KGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVTZWFyY2hLZXlEb3dufVxuICAgICAgICAgICAgICBkaXNhYmxlZD17IW9uRXhhY3RJZFNlYXJjaH1cbiAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgIG9uRXhhY3RJZFNlYXJjaFxuICAgICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgIDogJ0V4YWN0IElEIHNlYXJjaCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIHZpZXcuJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogLTE2LFxuICAgICAgICAgICAgICAgIHBhZGRpbmdJbmxpbmU6IDEyLFxuICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdpbmhlcml0JyxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogMTQsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgICAgICAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0MCxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IG9uRXhhY3RJZFNlYXJjaCA/IDEgOiAwLjUsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiBvbkV4YWN0SWRTZWFyY2ggPyAndGV4dCcgOiAnbm90LWFsbG93ZWQnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxNZW51RHJvcGRvd25cbiAgICAgICAgICAgIG9wdGlvbnM9e1NPUlRfT1BUSU9OU31cbiAgICAgICAgICAgIHZhbHVlPXtlZmZlY3RpdmVTb3J0T3JkZXJ9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlU29ydE9yZGVyQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgeyhoYXNFbmNyeXB0ZWREYXRhIHx8IGVuY3J5cHRpb25LZXkpICYmIG9uRGVjcnlwdCAmJiAoXG4gICAgICAgICAgICA8RGVjcnlwdEJ1dHRvblxuICAgICAgICAgICAgICBkZWNyeXB0ZWQ9eyEhZW5jcnlwdGlvbktleX1cbiAgICAgICAgICAgICAgbG9hZGluZz17aXNEZWNyeXB0aW5nfVxuICAgICAgICAgICAgICBvbkNsaWNrPXtvbkRlY3J5cHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMCB0ZXh0LVsxM3B4XSBmb250LW1lZGl1bSBoLTEwIGJvcmRlci1iIGZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktYWxwaGEtMjAwKScsXG4gICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTBcIiBzdHlsZT17eyB3aWR0aDogR1VUVEVSX1dJRFRIIH19IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTUgZmxleC1zaHJpbmstMFwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fT5cbiAgICAgICAgICAgIFRpbWVcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgRXZlbnQgVHlwZVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICBOYW1lXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMyAxIDAlJyB9fT5cbiAgICAgICAgICAgIENvcnJlbGF0aW9uIElEXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMyAxIDAlJyB9fT5cbiAgICAgICAgICAgIEV2ZW50IElEXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBWaXJ0dWFsaXplZCBldmVudCByb3dzIG9yIHJlZmV0Y2hpbmcgc2tlbGV0b24gKi99XG4gICAgICAgIHtpc1JlZmV0Y2hpbmcgfHwgc2VhcmNoTG9hZGluZyA/IChcbiAgICAgICAgICA8Um93c1NrZWxldG9uIC8+XG4gICAgICAgICkgOiBzb3J0ZWRFdmVudHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggZmxleC0xIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC02IHRleHQtY2VudGVyIHRleHQtc21cIlxuICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3NlYXJjaE5vdEZvdW5kICYmIHNlYXJjaFF1ZXJ5LnRyaW0oKVxuICAgICAgICAgICAgICA/IGBObyBldmVudHMgZm91bmQgZm9yICR7c2VhcmNoUXVlcnkudHJpbSgpfWBcbiAgICAgICAgICAgICAgOiBzZWFyY2hFcnJvclxuICAgICAgICAgICAgICAgID8gc2VhcmNoRXJyb3JcbiAgICAgICAgICAgICAgICA6IHBhcnNlZFNlYXJjaElkICYmIHNlYXJjaFF1ZXJ5LnRyaW0oKSAmJiAhb25FeGFjdElkU2VhcmNoXG4gICAgICAgICAgICAgICAgICA/ICdFeGFjdCBJRCBzZWFyY2ggaXMgdW5hdmFpbGFibGUgaW4gdGhpcyB2aWV3LidcbiAgICAgICAgICAgICAgICAgIDogJ05vIGV2ZW50cyBmb3VuZCd9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFZpcnR1b3NvXG4gICAgICAgICAgICByZWY9e3ZpcnR1b3NvUmVmfVxuICAgICAgICAgICAgdG90YWxDb3VudD17c29ydGVkRXZlbnRzLmxlbmd0aH1cbiAgICAgICAgICAgIG92ZXJzY2FuPXsyMH1cbiAgICAgICAgICAgIGRlZmF1bHRJdGVtSGVpZ2h0PXs0MH1cbiAgICAgICAgICAgIGVuZFJlYWNoZWQ9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGlzRXhhY3RTZWFyY2hBY3RpdmUgfHxcbiAgICAgICAgICAgICAgICAhaGFzTW9yZUV2ZW50cyB8fFxuICAgICAgICAgICAgICAgIGlzTG9hZGluZ01vcmVFdmVudHNcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZvaWQgb25Mb2FkTW9yZUV2ZW50cz8uKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgaXRlbUNvbnRlbnQ9eyhpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGV2ID0gc29ydGVkRXZlbnRzW2luZGV4XTtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RXZlbnRSb3dcbiAgICAgICAgICAgICAgICAgIGV2ZW50PXtldn1cbiAgICAgICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIGlzRmlyc3Q9e2luZGV4ID09PSAwfVxuICAgICAgICAgICAgICAgICAgaXNMYXN0PXtpbmRleCA9PT0gc29ydGVkRXZlbnRzLmxlbmd0aCAtIDF9XG4gICAgICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtleHBhbmRlZEV2ZW50SWRzLmhhcyhldi5ldmVudElkKX1cbiAgICAgICAgICAgICAgICAgIG9uVG9nZ2xlRXhwYW5kPXt0b2dnbGVFdmVudEV4cGFuZGVkfVxuICAgICAgICAgICAgICAgICAgYWN0aXZlR3JvdXBLZXk9e2FjdGl2ZUdyb3VwS2V5fVxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRHcm91cEtleT17c2VsZWN0ZWRHcm91cEtleX1cbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBSYW5nZT17c2VsZWN0ZWRHcm91cFJhbmdlfVxuICAgICAgICAgICAgICAgICAgY29ycmVsYXRpb25OYW1lTWFwPXtjb3JyZWxhdGlvbk5hbWVNYXB9XG4gICAgICAgICAgICAgICAgICB3b3JrZmxvd05hbWU9e3dvcmtmbG93TmFtZX1cbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uTWFwPXtkdXJhdGlvbk1hcH1cbiAgICAgICAgICAgICAgICAgIG9uU2VsZWN0R3JvdXA9e29uU2VsZWN0R3JvdXB9XG4gICAgICAgICAgICAgICAgICBvbkhvdmVyR3JvdXA9e29uSG92ZXJHcm91cH1cbiAgICAgICAgICAgICAgICAgIG9uTG9hZEV2ZW50RGF0YT17b25Mb2FkRXZlbnREYXRhfVxuICAgICAgICAgICAgICAgICAgY2FjaGVkRXZlbnREYXRhPXtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnREYXRhQ2FjaGVSZWYuY3VycmVudC5nZXQoZXYuZXZlbnRJZCkgPz8gbnVsbFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgb25DYWNoZUV2ZW50RGF0YT17Y2FjaGVFdmVudERhdGF9XG4gICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5PXtlbmNyeXB0aW9uS2V5fVxuICAgICAgICAgICAgICAgICAgb25FbmNyeXB0ZWREYXRhRGV0ZWN0ZWQ9e2hhbmRsZUVuY3J5cHRlZERhdGFEZXRlY3RlZH1cbiAgICAgICAgICAgICAgICAgIHN1cHByZXNzR3JvdXBEaW1taW5nPXtpc0V4YWN0U2VhcmNoQWN0aXZlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgc3R5bGU9e3sgZmxleDogMSwgbWluSGVpZ2h0OiAwIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cblxuICAgICAgICB7LyogRml4ZWQgZm9vdGVyIOKAlCBjb3VudCArIGxvYWQgbW9yZSAqL31cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXgtc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIgaC0xMCBib3JkZXItdCBweC00IHRleHQteHNcIlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktYWxwaGEtMjAwKScsXG4gICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIHtpc0V4YWN0U2VhcmNoQWN0aXZlXG4gICAgICAgICAgICAgID8gc2VhcmNoRXJyb3JcbiAgICAgICAgICAgICAgICA/IHNlYXJjaEVycm9yXG4gICAgICAgICAgICAgICAgOiBzZWFyY2hOb3RGb3VuZFxuICAgICAgICAgICAgICAgICAgPyBgTm8gZXZlbnRzIGZvdW5kIGZvciAke3NlYXJjaFF1ZXJ5LnRyaW0oKX1gXG4gICAgICAgICAgICAgICAgICA6IGAke3NvcnRlZEV2ZW50cy5sZW5ndGh9IGV2ZW50JHtzb3J0ZWRFdmVudHMubGVuZ3RoICE9PSAxID8gJ3MnIDogJyd9IGZvciAke3NlYXJjaFF1ZXJ5LnRyaW0oKX0ke3NlYXJjaFJlc3VsdHNUcnVuY2F0ZWQgPyAnIChyZXN1bHRzIG1heSBiZSB0cnVuY2F0ZWQpJyA6ICcnfWBcbiAgICAgICAgICAgICAgOiBgJHtzb3J0ZWRFdmVudHMubGVuZ3RofSBldmVudCR7c29ydGVkRXZlbnRzLmxlbmd0aCAhPT0gMSA/ICdzJyA6ICcnfSBsb2FkZWRgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB7IWlzRXhhY3RTZWFyY2hBY3RpdmUgJiYgaGFzTW9yZUV2ZW50cyAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8TG9hZE1vcmVCdXR0b25cbiAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2lzTG9hZGluZ01vcmVFdmVudHN9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIG9uTG9hZE1vcmVFdmVudHM/LigpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L0RlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59XG4iXX0=
898
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbGlzdC12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvZXZlbnQtbGlzdC12aWV3LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQU16RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUF1QixNQUFNLGdCQUFnQixDQUFDO0FBQy9ELE9BQU8sRUFHTCw4QkFBOEIsRUFDOUIsMEJBQTBCLEdBQzNCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUNMLGVBQWUsRUFDZixpQkFBaUIsR0FFbEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENB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QUFxQixZQUNsQyxLQUFDLGNBQWMsSUFDYixPQUFPLEVBQUUsbUJBQW1CLEVBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLGdCQUFnQixFQUFFLEVBQUUsR0FDeEMsR0FDRSxHQUNGLENBQ1AsSUFDRyxJQUNGLEdBQ3VCLENBQ2hDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBwYXJzZVN0ZXBOYW1lLCBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB0eXBlIHsgRXZlbnQsIFdvcmtmbG93UnVuIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IENoZWNrLCBDaGV2cm9uUmlnaHQsIENvcHkgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHR5cGUge1xuICBLZXlib2FyZEV2ZW50IGFzIFJlYWN0S2V5Ym9hcmRFdmVudCxcbiAgTW91c2VFdmVudCBhcyBSZWFjdE1vdXNlRXZlbnQsXG4gIFJlYWN0Tm9kZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFZpcnR1b3NvLCB0eXBlIFZpcnR1b3NvSGFuZGxlIH0gZnJvbSAncmVhY3QtdmlydHVvc28nO1xuaW1wb3J0IHtcbiAgdHlwZSBFeGFjdElkU2VhcmNoUmVzdWx0LFxuICB0eXBlIEV4YWN0V29ya2Zsb3dTZWFyY2hJZEtpbmQsXG4gIGxvb2tzTGlrZVdvcmtmbG93SWRTZWFyY2hJbnB1dCxcbiAgcGFyc2VFeGFjdFdvcmtmbG93U2VhcmNoSWQsXG59IGZyb20gJy4uL2xpYi9leGFjdC1ldmVudC1zZWFyY2gtaWQnO1xuaW1wb3J0IHsgaXNFbmNyeXB0ZWRNYXJrZXIgfSBmcm9tICcuLi9saWIvaHlkcmF0aW9uJztcbmltcG9ydCB7IHVzZVRvYXN0IH0gZnJvbSAnLi4vbGliL3RvYXN0JztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uIH0gZnJvbSAnLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IERhdGFJbnNwZWN0b3IsIERlY3J5cHRDbGlja0NvbnRleHQgfSBmcm9tICcuL3VpL2RhdGEtaW5zcGVjdG9yJztcbmltcG9ydCB7IERlY3J5cHRCdXR0b24gfSBmcm9tICcuL3VpL2RlY3J5cHQtYnV0dG9uJztcbmltcG9ydCB7XG4gIEVycm9yU3RhY2tCbG9jayxcbiAgaXNTdHJ1Y3R1cmVkRXJyb3IsXG4gIHR5cGUgU3RydWN0dXJlZEVycm9yUmVjb3JkLFxufSBmcm9tICcuL3VpL2Vycm9yLXN0YWNrLWJsb2NrJztcbmltcG9ydCB7IExvYWRNb3JlQnV0dG9uIH0gZnJvbSAnLi91aS9sb2FkLW1vcmUtYnV0dG9uJztcbmltcG9ydCB7IE1lbnVEcm9wZG93biB9IGZyb20gJy4vdWkvbWVudS1kcm9wZG93bic7XG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gJy4vdWkvc2tlbGV0b24nO1xuaW1wb3J0IHsgVGltZXN0YW1wVG9vbHRpcCB9IGZyb20gJy4vdWkvdGltZXN0YW1wLXRvb2x0aXAnO1xuXG4vKipcbiAqIEV2ZW50IHR5cGVzIHdob3NlIGV2ZW50RGF0YSBjb250YWlucyBhbiBlcnJvciBmaWVsZCB3aXRoIGEgU3RydWN0dXJlZEVycm9yLlxuICovXG5jb25zdCBFUlJPUl9FVkVOVF9UWVBFUyA9IG5ldyBTZXQoW1xuICAnc3RlcF9mYWlsZWQnLFxuICAnc3RlcF9yZXRyeWluZycsXG4gICdydW5fZmFpbGVkJyxcbiAgJ3dvcmtmbG93X2ZhaWxlZCcsXG5dKTtcblxuY29uc3QgQlVUVE9OX1JFU0VUX1NUWUxFOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICBhcHBlYXJhbmNlOiAnbm9uZScsXG4gIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJyxcbiAgYm9yZGVyOiAnbm9uZScsXG4gIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG59O1xuY29uc3QgRE9UX1BVTFNFX0FOSU1BVElPTiA9XG4gICd3b3JrZmxvdy1kb3QtcHVsc2UgMS4yNXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkgaW5maW5pdGUnO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEhlbHBlcnNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBmb3JtYXRFdmVudFRpbWUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICBzZWNvbmQ6ICcyLWRpZ2l0JyxcbiAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgfSkgK1xuICAgICcuJyArXG4gICAgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDMsICcwJylcbiAgKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RXZlbnRUeXBlKGV2ZW50VHlwZTogRXZlbnRbJ2V2ZW50VHlwZSddKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV2ZW50VHlwZVxuICAgIC5zcGxpdCgnXycpXG4gICAgLm1hcCgod29yZDogc3RyaW5nKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAuam9pbignICcpO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEV2ZW50IHR5cGUg4oaSIHN0YXR1cyBjb2xvciAoc21hbGwgZG90IG9ubHkpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFJldHVybnMgYSBDU1MgY29sb3IgdXNpbmcgR2Vpc3QgZGVzaWduIHRva2VucyBmb3IgdGhlIHN0YXR1cyBkb3QuICovXG5mdW5jdGlvbiBnZXRTdGF0dXNEb3RDb2xvcihldmVudFR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEZhaWxlZCDihpIgcmVkXG4gIGlmIChcbiAgICBldmVudFR5cGUgPT09ICdzdGVwX2ZhaWxlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICdydW5fZmFpbGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3dvcmtmbG93X2ZhaWxlZCdcbiAgKSB7XG4gICAgcmV0dXJuICd2YXIoLS1kcy1yZWQtNzAwKSc7XG4gIH1cbiAgLy8gQ2FuY2VsbGVkIOKGkiBhbWJlclxuICBpZiAoZXZlbnRUeXBlID09PSAncnVuX2NhbmNlbGxlZCcpIHtcbiAgICByZXR1cm4gJ3ZhcigtLWRzLWFtYmVyLTcwMCknO1xuICB9XG4gIC8vIFJldHJ5aW5nIOKGkiBhbWJlclxuICBpZiAoZXZlbnRUeXBlID09PSAnc3RlcF9yZXRyeWluZycpIHtcbiAgICByZXR1cm4gJ3ZhcigtLWRzLWFtYmVyLTcwMCknO1xuICB9XG4gIC8vIENvbXBsZXRlZC9zdWNjZWVkZWQg4oaSIGdyZWVuXG4gIGlmIChcbiAgICBldmVudFR5cGUgPT09ICdzdGVwX2NvbXBsZXRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICdydW5fY29tcGxldGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3dvcmtmbG93X2NvbXBsZXRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJ1xuICApIHtcbiAgICByZXR1cm4gJ3ZhcigtLWRzLWdyZWVuLTcwMCknO1xuICB9XG4gIC8vIFN0YXJ0ZWQvcnVubmluZyDihpIgYmx1ZVxuICBpZiAoXG4gICAgZXZlbnRUeXBlID09PSAnc3RlcF9zdGFydGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3J1bl9zdGFydGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3dvcmtmbG93X3N0YXJ0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnaG9va19yZWNlaXZlZCdcbiAgKSB7XG4gICAgcmV0dXJuICd2YXIoLS1kcy1ibHVlLTcwMCknO1xuICB9XG4gIC8vIENyZWF0ZWQvcGVuZGluZyDihpIgZ3JheVxuICByZXR1cm4gJ3ZhcigtLWRzLWdyYXktNjAwKSc7XG59XG5cbi8qKlxuICogQnVpbGQgYSBtYXAgZnJvbSBjb3JyZWxhdGlvbklkIChzdGVwSWQpIOKGkiBkaXNwbGF5IG5hbWUgdXNpbmcgc3RlcF9jcmVhdGVkXG4gKiBldmVudHMsIGFuZCBwYXJzZSB0aGUgd29ya2Zsb3cgbmFtZSBmcm9tIHRoZSBydW4uXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTmFtZU1hcHMoXG4gIGV2ZW50czogRXZlbnRbXSB8IG51bGwsXG4gIHJ1bjogV29ya2Zsb3dSdW4gfCBudWxsXG4pOiB7XG4gIGNvcnJlbGF0aW9uTmFtZU1hcDogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgd29ya2Zsb3dOYW1lOiBzdHJpbmcgfCBudWxsO1xufSB7XG4gIGNvbnN0IGNvcnJlbGF0aW9uTmFtZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgLy8gTWFwIHN0ZXAgY29ycmVsYXRpb25JZCAoPSBzdGVwSWQpIOKGkiBwYXJzZWQgc3RlcCBuYW1lIGZyb20gc3RlcF9jcmVhdGVkIGV2ZW50c1xuICBpZiAoZXZlbnRzKSB7XG4gICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdzdGVwX2NyZWF0ZWQnICYmIGV2ZW50LmNvcnJlbGF0aW9uSWQpIHtcbiAgICAgICAgY29uc3Qgc3RlcE5hbWUgPSBldmVudC5ldmVudERhdGE/LnN0ZXBOYW1lID8/ICcnO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVN0ZXBOYW1lKFN0cmluZyhzdGVwTmFtZSkpO1xuICAgICAgICBjb3JyZWxhdGlvbk5hbWVNYXAuc2V0KFxuICAgICAgICAgIGV2ZW50LmNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgcGFyc2VkPy5zaG9ydE5hbWUgPz8gc3RlcE5hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQYXJzZSB3b3JrZmxvdyBuYW1lIGZyb20gcnVuXG4gIGNvbnN0IHdvcmtmbG93TmFtZSA9IHJ1bj8ud29ya2Zsb3dOYW1lXG4gICAgPyAocGFyc2VXb3JrZmxvd05hbWUocnVuLndvcmtmbG93TmFtZSk/LnNob3J0TmFtZSA/PyBydW4ud29ya2Zsb3dOYW1lKVxuICAgIDogbnVsbDtcblxuICByZXR1cm4geyBjb3JyZWxhdGlvbk5hbWVNYXAsIHdvcmtmbG93TmFtZSB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER1cmF0aW9uSW5mbyB7XG4gIC8qKiBUaW1lIGZyb20gY3JlYXRlZCDihpIgc3RhcnRlZCAobXMpICovXG4gIHF1ZXVlZD86IG51bWJlcjtcbiAgLyoqIFRpbWUgZnJvbSBzdGFydGVkIOKGkiBjb21wbGV0ZWQvZmFpbGVkL2NhbmNlbGxlZCAobXMpICovXG4gIHJhbj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIG1hcCBmcm9tIGNvcnJlbGF0aW9uSWQg4oaSIGR1cmF0aW9uIGluZm8gYnkgZGlmZmluZ1xuICogY3JlYXRlZCDihpQgc3RhcnRlZCAocXVldWVkKSBhbmQgc3RhcnRlZCDihpQgY29tcGxldGVkL2ZhaWxlZC9jYW5jZWxsZWQgKHJhbikuXG4gKiBBbHNvIGNvbXB1dGVzIHJ1bi1sZXZlbCBkdXJhdGlvbnMgdW5kZXIgdGhlIGtleSAnX19ydW5fXycuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZER1cmF0aW9uTWFwKGV2ZW50czogRXZlbnRbXSk6IE1hcDxzdHJpbmcsIER1cmF0aW9uSW5mbz4ge1xuICAvLyBQcm9jZXNzIGV2ZW50cyBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyIHNvIHRoZSByZXN1bHQgZG9lc24ndCBkZXBlbmQgb25cbiAgLy8gdGhlIGNhbGxlcidzIHNvcnQgZGlyZWN0aW9uLiBSZXRyaWVkIHN0ZXBzIGVtaXQgbXVsdGlwbGUgYHN0ZXBfc3RhcnRlZGBcbiAgLy8gZXZlbnRzIGZvciB0aGUgc2FtZSBjb3JyZWxhdGlvbklkOyB0aGUgcXVldWVkIGR1cmF0aW9uIG11c3QgYmUgbWVhc3VyZWRcbiAgLy8gYWdhaW5zdCB0aGUgZmlyc3Qgb25lLCBub3QgdGhlIGxhc3QuXG4gIGNvbnN0IGNocm9ub2xvZ2ljYWwgPSBbLi4uZXZlbnRzXS5zb3J0KFxuICAgIChhLCBiKSA9PiBuZXcgRGF0ZShhLmNyZWF0ZWRBdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYi5jcmVhdGVkQXQpLmdldFRpbWUoKVxuICApO1xuXG4gIGNvbnN0IGNyZWF0ZWRUaW1lcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIGNvbnN0IGZpcnN0U3RhcnRlZFRpbWVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgY29uc3Qgc3RhcnRlZFRpbWVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgY29uc3QgZHVyYXRpb25zID0gbmV3IE1hcDxzdHJpbmcsIER1cmF0aW9uSW5mbz4oKTtcblxuICBmb3IgKGNvbnN0IGV2ZW50IG9mIGNocm9ub2xvZ2ljYWwpIHtcbiAgICBjb25zdCB0cyA9IG5ldyBEYXRlKGV2ZW50LmNyZWF0ZWRBdCkuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmNvcnJlbGF0aW9uSWQgPz8gJ19fcnVuX18nO1xuICAgIGNvbnN0IHR5cGU6IHN0cmluZyA9IGV2ZW50LmV2ZW50VHlwZTtcblxuICAgIC8vIFRyYWNrIGNyZWF0ZWQgdGltZXMgKGZpcnN0IGV2ZW50IGZvciBlYWNoIGNvcnJlbGF0aW9uKVxuICAgIGlmICh0eXBlID09PSAnc3RlcF9jcmVhdGVkJyB8fCB0eXBlID09PSAncnVuX2NyZWF0ZWQnKSB7XG4gICAgICBpZiAoIWNyZWF0ZWRUaW1lcy5oYXMoa2V5KSkge1xuICAgICAgICBjcmVhdGVkVGltZXMuc2V0KGtleSwgdHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRyYWNrIHN0YXJ0ZWQgdGltZXMgJiBjb21wdXRlIHF1ZXVlZCBkdXJhdGlvblxuICAgIGlmIChcbiAgICAgIHR5cGUgPT09ICdzdGVwX3N0YXJ0ZWQnIHx8XG4gICAgICB0eXBlID09PSAncnVuX3N0YXJ0ZWQnIHx8XG4gICAgICB0eXBlID09PSAnd29ya2Zsb3dfc3RhcnRlZCdcbiAgICApIHtcbiAgICAgIHN0YXJ0ZWRUaW1lcy5zZXQoa2V5LCB0cyk7XG4gICAgICAvLyBUaGUgcXVldWVkIGR1cmF0aW9uIGlzIGFuY2hvcmVkIG9uIHRoZSBmaXJzdCBzdGFydCBldmVudCBvbmx5IOKAlFxuICAgICAgLy8gc3Vic2VxdWVudCBzdGVwX3N0YXJ0ZWQgZXZlbnRzIGNvbWUgZnJvbSByZXRyaWVzLlxuICAgICAgaWYgKCFmaXJzdFN0YXJ0ZWRUaW1lcy5oYXMoa2V5KSkge1xuICAgICAgICBmaXJzdFN0YXJ0ZWRUaW1lcy5zZXQoa2V5LCB0cyk7XG4gICAgICAgIC8vIElmIG5vIGV4cGxpY2l0IGNyZWF0ZWQgZXZlbnQgd2FzIHNlZW4sIHVzZSB0aGUgc3RhcnRlZCB0aW1lIGFzIGNyZWF0ZWRcbiAgICAgICAgaWYgKCFjcmVhdGVkVGltZXMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjcmVhdGVkVGltZXMuc2V0KGtleSwgdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRBdCA9IGNyZWF0ZWRUaW1lcy5nZXQoa2V5KTtcbiAgICAgICAgY29uc3QgaW5mbyA9IGR1cmF0aW9ucy5nZXQoa2V5KSA/PyB7fTtcbiAgICAgICAgaWYgKGNyZWF0ZWRBdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaW5mby5xdWV1ZWQgPSB0cyAtIGNyZWF0ZWRBdDtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbnMuc2V0KGtleSwgaW5mbyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSByYW4gZHVyYXRpb24gb24gdGVybWluYWwgZXZlbnRzXG4gICAgaWYgKFxuICAgICAgdHlwZSA9PT0gJ3N0ZXBfY29tcGxldGVkJyB8fFxuICAgICAgdHlwZSA9PT0gJ3N0ZXBfZmFpbGVkJyB8fFxuICAgICAgdHlwZSA9PT0gJ3J1bl9jb21wbGV0ZWQnIHx8XG4gICAgICB0eXBlID09PSAncnVuX2ZhaWxlZCcgfHxcbiAgICAgIHR5cGUgPT09ICdydW5fY2FuY2VsbGVkJyB8fFxuICAgICAgdHlwZSA9PT0gJ3dvcmtmbG93X2NvbXBsZXRlZCcgfHxcbiAgICAgIHR5cGUgPT09ICd3b3JrZmxvd19mYWlsZWQnIHx8XG4gICAgICB0eXBlID09PSAnd2FpdF9jb21wbGV0ZWQnIHx8XG4gICAgICB0eXBlID09PSAnaG9va19kaXNwb3NlZCdcbiAgICApIHtcbiAgICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHN0YXJ0ZWRUaW1lcy5nZXQoa2V5KTtcbiAgICAgIGNvbnN0IGluZm8gPSBkdXJhdGlvbnMuZ2V0KGtleSkgPz8ge307XG4gICAgICBpZiAoc3RhcnRlZEF0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaW5mby5yYW4gPSB0cyAtIHN0YXJ0ZWRBdDtcbiAgICAgIH1cbiAgICAgIGR1cmF0aW9ucy5zZXQoa2V5LCBpbmZvKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZHVyYXRpb25zO1xufVxuXG4vKiogQ2hlY2sgaWYgYSBsb2FkZWQgZXZlbnREYXRhIG9iamVjdCBjb250YWlucyBhbnkgZW5jcnlwdGVkIG1hcmtlciB2YWx1ZXMuICovXG5mdW5jdGlvbiBoYXNFbmNyeXB0ZWRWYWx1ZXMoZGF0YTogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGZvciAoY29uc3QgdmFsIG9mIE9iamVjdC52YWx1ZXMoZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICBpZiAoaXNFbmNyeXB0ZWRNYXJrZXIodmFsKSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1J1bkxldmVsKGV2ZW50VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZXZlbnRUeXBlID09PSAncnVuX2NyZWF0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAncnVuX3N0YXJ0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAncnVuX2NvbXBsZXRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICdydW5fZmFpbGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3J1bl9jYW5jZWxsZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnd29ya2Zsb3dfc3RhcnRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICd3b3JrZmxvd19jb21wbGV0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnd29ya2Zsb3dfZmFpbGVkJ1xuICApO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFRyZWUgZ3V0dGVyIOKAlCBmaXhlZC13aWR0aCwgc2hvd3MgYnJhbmNoIGxpbmVzIG9ubHkgZm9yIHRoZSBzZWxlY3RlZCBncm91cFxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBGaXhlZCBndXR0ZXIgd2lkdGg6IDIwcHggcm9vdCBhcmVhICsgMTZweCBmb3Igb25lIGJyYW5jaCBsYW5lICovXG5jb25zdCBHVVRURVJfV0lEVEggPSAzNjtcbi8qKiBYIHBvc2l0aW9uIG9mIHRoZSBzaW5nbGUgYnJhbmNoIGxhbmUgbGluZSAqL1xuY29uc3QgTEFORV9YID0gMjA7XG5jb25zdCBST09UX0xJTkVfQ09MT1IgPSAndmFyKC0tZHMtZ3JheS01MDApJztcblxuZnVuY3Rpb24gVHJlZUd1dHRlcih7XG4gIGlzRmlyc3QsXG4gIGlzTGFzdCxcbiAgaXNSdW5MZXZlbDogaXNSdW4sXG4gIHN0YXR1c0RvdENvbG9yLFxuICBwdWxzZSA9IGZhbHNlLFxuICBoYXNTZWxlY3Rpb24sXG4gIHNob3dCcmFuY2gsXG4gIHNob3dMYW5lTGluZSxcbiAgaXNMYW5lU3RhcnQsXG4gIGlzTGFuZUVuZCxcbiAgY29udGludWF0aW9uT25seSA9IGZhbHNlLFxufToge1xuICBpc0ZpcnN0OiBib29sZWFuO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGlzUnVuTGV2ZWw6IGJvb2xlYW47XG4gIHN0YXR1c0RvdENvbG9yPzogc3RyaW5nO1xuICBwdWxzZT86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIGFueSBncm91cCBpcyBjdXJyZW50bHkgYWN0aXZlIChzZWxlY3RlZCBvciBob3ZlcmVkKSAqL1xuICBoYXNTZWxlY3Rpb246IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgYSBob3Jpem9udGFsIGJyYW5jaCBsaW5lIGZvciB0aGlzIHJvdyAoZXZlbnQgYmVsb25ncyB0byBhY3RpdmUgZ3JvdXApICovXG4gIHNob3dCcmFuY2g6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSB2ZXJ0aWNhbCBsYW5lIGxpbmUgcGFzc2VzIHRocm91Z2ggdGhpcyByb3cgKi9cbiAgc2hvd0xhbmVMaW5lOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgdmVydGljYWwgbGFuZSBsaW5lIHN0YXJ0cyBhdCB0aGlzIHJvdyAodG9wIGNsaXBwZWQgdG8gNTAlKSAqL1xuICBpc0xhbmVTdGFydDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIHZlcnRpY2FsIGxhbmUgbGluZSBlbmRzIGF0IHRoaXMgcm93IChib3R0b20gY2xpcHBlZCB0byA1MCUpICovXG4gIGlzTGFuZUVuZDogYm9vbGVhbjtcbiAgY29udGludWF0aW9uT25seT86IGJvb2xlYW47XG59KSB7XG4gIGNvbnN0IGRvdFNpemUgPSBpc1J1biA/IDggOiA2O1xuICBjb25zdCBkb3RMZWZ0ID0gaXNSdW4gPyA1IDogNjtcbiAgY29uc3QgZG90T3BhY2l0eSA9IGhhc1NlbGVjdGlvbiAmJiAhc2hvd0JyYW5jaCAmJiAhaXNSdW4gPyAwLjMgOiAxO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleC1zaHJpbmstMCBzZWxmLXN0cmV0Y2hcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgd2lkdGg6IEdVVFRFUl9XSURUSCxcbiAgICAgICAgbWluSGVpZ2h0OiBjb250aW51YXRpb25Pbmx5ID8gMCA6IHVuZGVmaW5lZCxcbiAgICAgIH19XG4gICAgPlxuICAgICAgey8qIFJvb3QgdmVydGljYWwgbGluZSAobGVmdG1vc3QsIGFsd2F5cyB2aXNpYmxlKSAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICBsZWZ0OiA4LFxuICAgICAgICAgIHRvcDogY29udGludWF0aW9uT25seSA/IDAgOiBpc0ZpcnN0ID8gJzUwJScgOiAwLFxuICAgICAgICAgIGJvdHRvbTogY29udGludWF0aW9uT25seSA/IDAgOiBpc0xhc3QgPyAnNTAlJyA6IDAsXG4gICAgICAgICAgd2lkdGg6IDIsXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBST09UX0xJTkVfQ09MT1IsXG4gICAgICAgICAgekluZGV4OiAwLFxuICAgICAgICB9fVxuICAgICAgLz5cblxuICAgICAgeyFjb250aW51YXRpb25Pbmx5ICYmIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7LyogU3RhdHVzIGRvdCBvbiB0aGUgcm9vdCBsaW5lIGZvciBldmVyeSBldmVudCAqL31cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgbGVmdDogZG90TGVmdCxcbiAgICAgICAgICAgICAgdG9wOiAnNTAlJyxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtNTAlKScsXG4gICAgICAgICAgICAgIHdpZHRoOiBkb3RTaXplLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGRvdFNpemUsXG4gICAgICAgICAgICAgIHpJbmRleDogMixcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgey8qIE9wYXF1ZSBiYWNrZHJvcCBlbnN1cmVzIGd1dHRlciBsaW5lcyBuZXZlciB2aXN1YWxseSBjdXQgdGhyb3VnaCBkb3RzICovfVxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgIGluc2V0OiAwLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtYmFja2dyb3VuZC0xMDApJyxcbiAgICAgICAgICAgICAgICB6SW5kZXg6IDAsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge3B1bHNlICYmIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgIGluc2V0OiAwLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogc3RhdHVzRG90Q29sb3IsXG4gICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc1ICogZG90T3BhY2l0eSxcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogRE9UX1BVTFNFX0FOSU1BVElPTixcbiAgICAgICAgICAgICAgICAgIHpJbmRleDogMSxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBzdGF0dXNEb3RDb2xvcixcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiBkb3RPcGFjaXR5LFxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDE1MG1zJyxcbiAgICAgICAgICAgICAgICB6SW5kZXg6IDIsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgey8qIEhvcml6b250YWwgYnJhbmNoIGZyb20gcm9vdCB0byBndXR0ZXIgZWRnZSAoc2VsZWN0ZWQgZ3JvdXAgZXZlbnRzIG9ubHkpICovfVxuICAgICAgICAgIHtzaG93QnJhbmNoICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICBsZWZ0OiA5LFxuICAgICAgICAgICAgICAgIHRvcDogJzUwJScsXG4gICAgICAgICAgICAgICAgd2lkdGg6IEdVVFRFUl9XSURUSCAtIDksXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogUk9PVF9MSU5FX0NPTE9SLFxuICAgICAgICAgICAgICAgIHpJbmRleDogMCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApfVxuXG4gICAgICB7LyogVmVydGljYWwgbGFuZSBsaW5lIGNvbm5lY3RpbmcgdGhlIHNlbGVjdGVkIGdyb3VwJ3MgZXZlbnRzICovfVxuICAgICAge3Nob3dMYW5lTGluZSAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiBMQU5FX1gsXG4gICAgICAgICAgICB0b3A6IGNvbnRpbnVhdGlvbk9ubHkgPyAwIDogaXNMYW5lU3RhcnQgPyAnNTAlJyA6IDAsXG4gICAgICAgICAgICBib3R0b206IGNvbnRpbnVhdGlvbk9ubHkgPyAwIDogaXNMYW5lRW5kID8gJzUwJScgOiAwLFxuICAgICAgICAgICAgd2lkdGg6IDIsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFJPT1RfTElORV9DT0xPUixcbiAgICAgICAgICAgIHpJbmRleDogMCxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBDb3B5YWJsZSBjZWxsIOKAlCBzaG93cyBhIGNvcHkgYnV0dG9uIG9uIGhvdmVyXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gQ29weWFibGVDZWxsKHtcbiAgdmFsdWUsXG4gIGNsYXNzTmFtZSxcbiAgc3R5bGU6IHN0eWxlUHJvcCxcbn06IHtcbiAgdmFsdWU6IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG59KTogUmVhY3ROb2RlIHtcbiAgY29uc3QgW2NvcGllZCwgc2V0Q29waWVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcmVzZXRDb3BpZWRUaW1lb3V0UmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlQ29weSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh2YWx1ZSkudGhlbigoKSA9PiB7XG4gICAgICAgIHNldENvcGllZCh0cnVlKTtcbiAgICAgICAgaWYgKHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChyZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgc2V0Q29waWVkKGZhbHNlKTtcbiAgICAgICAgICByZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH0sIDE1MDApO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBbdmFsdWVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2Bncm91cC9jb3B5IGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIG1pbi13LTAgcHgtNCAke2NsYXNzTmFtZSA/PyAnJ31gfVxuICAgICAgc3R5bGU9e3N0eWxlUHJvcH1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICB7dmFsdWUgfHwgJy0nfVxuICAgICAgPC9zcGFuPlxuICAgICAge3ZhbHVlID8gKFxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlQ29weX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LXNocmluay0wIG9wYWNpdHktMCBncm91cC1ob3Zlci9jb3B5Om9wYWNpdHktMTAwIHRyYW5zaXRpb24tb3BhY2l0eSBwLTAuNSByb3VuZGVkIGhvdmVyOmJnLVt2YXIoLS1kcy1ncmF5LWFscGhhLTIwMCldXCJcbiAgICAgICAgICBzdHlsZT17QlVUVE9OX1JFU0VUX1NUWUxFfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e2BDb3B5ICR7dmFsdWV9YH1cbiAgICAgICAgPlxuICAgICAgICAgIHtjb3BpZWQgPyAoXG4gICAgICAgICAgICA8Q2hlY2tcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC0zIHctM1wiXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JlZW4tNzAwKScgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxDb3B5IGNsYXNzTmFtZT1cImgtMyB3LTNcIiBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScgfX0gLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICkgOiBudWxsfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vKiogUmVjdXJzaXZlbHkgcGFyc2Ugc3RyaW5naWZpZWQgSlNPTiB2YWx1ZXMgc28gZXNjYXBlZCBzbGFzaGVzIC8gcXVvdGVzIGFyZSBjbGVhbmVkIHVwICovXG5mdW5jdGlvbiBkZWVwUGFyc2VKc29uKHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTtcbiAgICBpZiAoXG4gICAgICAodHJpbW1lZC5zdGFydHNXaXRoKCd7JykgJiYgdHJpbW1lZC5lbmRzV2l0aCgnfScpKSB8fFxuICAgICAgKHRyaW1tZWQuc3RhcnRzV2l0aCgnWycpICYmIHRyaW1tZWQuZW5kc1dpdGgoJ10nKSkgfHxcbiAgICAgICh0cmltbWVkLnN0YXJ0c1dpdGgoJ1wiJykgJiYgdHJpbW1lZC5lbmRzV2l0aCgnXCInKSlcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWVwUGFyc2VKc29uKEpTT04ucGFyc2UodHJpbW1lZCkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoZGVlcFBhcnNlSnNvbik7XG4gIH1cbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBQcmVzZXJ2ZSBvYmplY3RzIHdpdGggY3VzdG9tIGNvbnN0cnVjdG9ycyAoZS5nLiwgZW5jcnlwdGVkIG1hcmtlcnMsXG4gICAgLy8gY2xhc3MgaW5zdGFuY2UgcmVmcykg4oCUIGRvbid0IGRlc3RydWN0dXJlIHRoZW0gaW50byBwbGFpbiBvYmplY3RzXG4gICAgaWYgKHZhbHVlLmNvbnN0cnVjdG9yICE9PSBPYmplY3QpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgcmVzdWx0W2tdID0gZGVlcFBhcnNlSnNvbih2KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBzdHJ1Y3R1cmVkIGVycm9yIGZyb20gZXZlbnQgZGF0YSwgaWYgcHJlc2VudC5cbiAqIFJldHVybnMgdGhlIGVycm9yIG9iamVjdCB0byByZW5kZXIgd2l0aCBFcnJvclN0YWNrQmxvY2ssIG9yIG51bGwgaWYgbm90IGFwcGxpY2FibGUuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTdHJ1Y3R1cmVkRXJyb3IoXG4gIGRhdGE6IHVua25vd24sXG4gIGV2ZW50VHlwZT86IHN0cmluZ1xuKTogU3RydWN0dXJlZEVycm9yUmVjb3JkIHwgbnVsbCB7XG4gIGlmICghZXZlbnRUeXBlIHx8ICFFUlJPUl9FVkVOVF9UWVBFUy5oYXMoZXZlbnRUeXBlKSkgcmV0dXJuIG51bGw7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcmVjb3JkID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLy8gQ2hlY2sgdGhlIG5lc3RlZCBgZXJyb3JgIGZpZWxkIGZpcnN0ICh0aGUgU3RydWN0dXJlZEVycm9yKVxuICBpZiAoaXNTdHJ1Y3R1cmVkRXJyb3IocmVjb3JkLmVycm9yKSkgcmV0dXJuIHJlY29yZC5lcnJvcjtcbiAgLy8gU29tZSBlcnJvciBmb3JtYXRzIHB1dCB0aGUgbWVzc2FnZS9zdGFjayBhdCB0aGUgdG9wIGxldmVsIG9mIGV2ZW50RGF0YS5cbiAgaWYgKGlzU3RydWN0dXJlZEVycm9yKHJlY29yZCkpIHJldHVybiByZWNvcmQ7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBQYXlsb2FkQmxvY2soe1xuICBkYXRhLFxuICBldmVudFR5cGUsXG59OiB7XG4gIGRhdGE6IHVua25vd247XG4gIGV2ZW50VHlwZT86IHN0cmluZztcbn0pOiBSZWFjdE5vZGUge1xuICBjb25zdCBzdHJ1Y3R1cmVkRXJyb3IgPSB1c2VNZW1vKFxuICAgICgpID0+IGV4dHJhY3RTdHJ1Y3R1cmVkRXJyb3IoZGF0YSwgZXZlbnRUeXBlKSxcbiAgICBbZGF0YSwgZXZlbnRUeXBlXVxuICApO1xuXG4gIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJlc2V0Q29waWVkVGltZW91dFJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3QgY2xlYW5lZCA9IHVzZU1lbW8oKCkgPT4gZGVlcFBhcnNlSnNvbihkYXRhKSwgW2RhdGFdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChyZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGZvcm1hdHRlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY2xlYW5lZCwgbnVsbCwgMik7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gU3RyaW5nKGNsZWFuZWQpO1xuICAgIH1cbiAgfSwgW2NsZWFuZWRdKTtcblxuICBjb25zdCBoYW5kbGVDb3B5ID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0TW91c2VFdmVudCkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGZvcm1hdHRlZCkudGhlbigoKSA9PiB7XG4gICAgICAgIHNldENvcGllZCh0cnVlKTtcbiAgICAgICAgaWYgKHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChyZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgc2V0Q29waWVkKGZhbHNlKTtcbiAgICAgICAgICByZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH0sIDE1MDApO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZm9ybWF0dGVkXVxuICApO1xuXG4gIGlmIChzdHJ1Y3R1cmVkRXJyb3IpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTJcIj5cbiAgICAgICAgPEVycm9yU3RhY2tCbG9jayB2YWx1ZT17c3RydWN0dXJlZEVycm9yfSAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBncm91cC9wYXlsb2FkXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cIm92ZXJmbG93LXgtYXV0byBwLTIgdGV4dC1bMTFweF1cIlxuICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknIH19XG4gICAgICA+XG4gICAgICAgIDxEYXRhSW5zcGVjdG9yIGRhdGE9e2NsZWFuZWR9IGV4cGFuZExldmVsPXsyfSAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5fVxuICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSBib3R0b20tMiByaWdodC0yIG9wYWNpdHktMCBncm91cC1ob3Zlci9wYXlsb2FkOm9wYWNpdHktMTAwIHRyYW5zaXRpb24tb3BhY2l0eSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0yIHB5LTEgcm91bmRlZC1tZCB0ZXh0LXhzIGhvdmVyOmJnLVt2YXIoLS1kcy1ncmF5LWFscGhhLTIwMCldXCJcbiAgICAgICAgc3R5bGU9e3sgLi4uQlVUVE9OX1JFU0VUX1NUWUxFLCBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScgfX1cbiAgICAgICAgYXJpYS1sYWJlbD1cIkNvcHkgcGF5bG9hZFwiXG4gICAgICA+XG4gICAgICAgIHtjb3BpZWQgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxDaGVja1xuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTMgdy0zXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmVlbi03MDApJyB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JlZW4tNzAwKScgfX0+Q29waWVkPC9zcGFuPlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8Q29weSBjbGFzc05hbWU9XCJoLTMgdy0zXCIgLz5cbiAgICAgICAgICAgIDxzcGFuPkNvcHk8L3NwYW4+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTb3J0IG9wdGlvbnMgZm9yIHRoZSBldmVudHMgbGlzdFxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmNvbnN0IFNPUlRfT1BUSU9OUyA9IFtcbiAgeyB2YWx1ZTogJ2Rlc2MnIGFzIGNvbnN0LCBsYWJlbDogJ05ld2VzdCcgfSxcbiAgeyB2YWx1ZTogJ2FzYycgYXMgY29uc3QsIGxhYmVsOiAnT2xkZXN0JyB9LFxuXTtcblxuZnVuY3Rpb24gUm93c1NrZWxldG9uKCkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAge0FycmF5LmZyb20oeyBsZW5ndGg6IDE2IH0sIChfLCBpKSA9PiAoXG4gICAgICAgIDxkaXYga2V5PXtpfSBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMFwiIHN0eWxlPXt7IGhlaWdodDogNDAgfX0+XG4gICAgICAgICAgey8qIEd1dHRlciBhcmVhICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXgtc2hyaW5rLTAgc2VsZi1zdHJldGNoIGZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiBHVVRURVJfV0lEVEggfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LyogVmVydGljYWwgbGluZSBza2VsZXRvbiAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICBsZWZ0OiA4LFxuICAgICAgICAgICAgICAgIHRvcDogaSA9PT0gMCA/ICc1MCUnIDogMCxcbiAgICAgICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDIsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsXCIgc3R5bGU9e3sgYm9yZGVyUmFkaXVzOiAxIH19IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHsvKiBEb3Qgc2tlbGV0b24gKi99XG4gICAgICAgICAgICA8U2tlbGV0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC1zaHJpbmstMFwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGkgJSA0ID09PSAwID8gOCA6IDYsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBpICUgNCA9PT0gMCA/IDggOiA2LFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogaSAlIDQgPT09IDAgPyA1IDogNixcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgey8qIENoZXZyb24gcGxhY2Vob2xkZXIgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTUgZmxleC1zaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cInctNSBoLTVcIiBzdHlsZT17eyBib3JkZXJSYWRpdXM6IDQgfX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7LyogVGltZSAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNzAlJyB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvKiBFdmVudCBUeXBlICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41XCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNrZWxldG9uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogNiwgaGVpZ2h0OiA2LCBib3JkZXJSYWRpdXM6ICc1MCUnIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNjAlJyB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvKiBOYW1lICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc1MCUnIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgey8qIENvcnJlbGF0aW9uIElEICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzMgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc3NSUnIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgey8qIEV2ZW50IElEICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzMgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc3NSUnIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRXZlbnQgcm93XG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuaW50ZXJmYWNlIEV2ZW50c0xpc3RQcm9wcyB7XG4gIGV2ZW50czogRXZlbnRbXSB8IG51bGw7XG4gIHJ1bj86IFdvcmtmbG93UnVuIHwgbnVsbDtcbiAgb25Mb2FkRXZlbnREYXRhPzogKGV2ZW50OiBFdmVudCkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIGhhc01vcmVFdmVudHM/OiBib29sZWFuO1xuICBpc0xvYWRpbmdNb3JlRXZlbnRzPzogYm9vbGVhbjtcbiAgb25Mb2FkTW9yZUV2ZW50cz86ICgpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAvKiogV2hlbiBwcm92aWRlZCwgc2lnbmFscyB0aGF0IGRlY3J5cHRpb24gaXMgYWN0aXZlICh0cmlnZ2VycyByZS1sb2FkIG9mIGV4cGFuZGVkIGV2ZW50cykgKi9cbiAgZW5jcnlwdGlvbktleT86IFVpbnQ4QXJyYXk7XG4gIC8qKiBXaGVuIHRydWUsIHNob3dzIGEgbG9hZGluZyBzdGF0ZSBpbnN0ZWFkIG9mIFwiTm8gZXZlbnRzIGZvdW5kXCIgZm9yIGVtcHR5IGxpc3RzICovXG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBTb3J0IG9yZGVyIGZvciBldmVudHMuIERlZmF1bHRzIHRvICdhc2MnLiAqL1xuICBzb3J0T3JkZXI/OiAnYXNjJyB8ICdkZXNjJztcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGNoYW5nZXMgc29ydCBvcmRlci4gV2hlbiBwcm92aWRlZCwgdGhlIHNvcnQgZHJvcGRvd24gaXMgc2hvd25cbiAgICogIGFuZCB0aGUgcGFyZW50IGlzIGV4cGVjdGVkIHRvIHJlZmV0Y2ggZnJvbSB0aGUgQVBJIHdpdGggdGhlIG5ldyBvcmRlci4gKi9cbiAgb25Tb3J0T3JkZXJDaGFuZ2U/OiAob3JkZXI6ICdhc2MnIHwgJ2Rlc2MnKSA9PiB2b2lkO1xuICAvKiogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBEZWNyeXB0IGJ1dHRvbi4gKi9cbiAgb25EZWNyeXB0PzogKCkgPT4gdm9pZDtcbiAgLyoqIFdoZXRoZXIgdGhlIGVuY3J5cHRpb24ga2V5IGlzIGN1cnJlbnRseSBiZWluZyBmZXRjaGVkLiAqL1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xuICAvKiogUnVuLWxldmVsIGhpbnQ6IHRoZSBydW4gY29udGFpbnMgZW5jcnlwdGVkIGRhdGEgKGZyb20gcHJvYmUpLiAqL1xuICBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcbiAgLyoqIEZldGNoIGV2ZW50cyBmb3IgYW4gZXhhY3QgY29ycmVsYXRpb24gb3IgZXZlbnQgSUQuICovXG4gIG9uRXhhY3RJZFNlYXJjaD86IChcbiAgICBpZDogc3RyaW5nLFxuICAgIGtpbmQ6IEV4YWN0V29ya2Zsb3dTZWFyY2hJZEtpbmQsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWxcbiAgKSA9PiBQcm9taXNlPEV4YWN0SWRTZWFyY2hSZXN1bHQ+O1xufVxuXG5mdW5jdGlvbiBFdmVudFJvdyh7XG4gIGV2ZW50LFxuICBpbmRleCxcbiAgaXNGaXJzdCxcbiAgaXNMYXN0LFxuICBpc0V4cGFuZGVkLFxuICBvblRvZ2dsZUV4cGFuZCxcbiAgYWN0aXZlR3JvdXBLZXksXG4gIHNlbGVjdGVkR3JvdXBLZXksXG4gIHNlbGVjdGVkR3JvdXBSYW5nZSxcbiAgY29ycmVsYXRpb25OYW1lTWFwLFxuICB3b3JrZmxvd05hbWUsXG4gIGR1cmF0aW9uTWFwLFxuICBvblNlbGVjdEdyb3VwLFxuICBvbkhvdmVyR3JvdXAsXG4gIG9uTG9hZEV2ZW50RGF0YSxcbiAgY2FjaGVkRXZlbnREYXRhLFxuICBvbkNhY2hlRXZlbnREYXRhLFxuICBlbmNyeXB0aW9uS2V5LFxuICBvbkVuY3J5cHRlZERhdGFEZXRlY3RlZCxcbiAgc3VwcHJlc3NHcm91cERpbW1pbmcgPSBmYWxzZSxcbn06IHtcbiAgZXZlbnQ6IEV2ZW50O1xuICBpbmRleDogbnVtYmVyO1xuICBpc0ZpcnN0OiBib29sZWFuO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGlzRXhwYW5kZWQ6IGJvb2xlYW47XG4gIG9uVG9nZ2xlRXhwYW5kOiAoZXZlbnRJZDogc3RyaW5nKSA9PiB2b2lkO1xuICBhY3RpdmVHcm91cEtleT86IHN0cmluZztcbiAgc2VsZWN0ZWRHcm91cEtleT86IHN0cmluZztcbiAgc2VsZWN0ZWRHcm91cFJhbmdlOiB7IGZpcnN0OiBudW1iZXI7IGxhc3Q6IG51bWJlciB9IHwgbnVsbDtcbiAgY29ycmVsYXRpb25OYW1lTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICB3b3JrZmxvd05hbWU6IHN0cmluZyB8IG51bGw7XG4gIGR1cmF0aW9uTWFwOiBNYXA8c3RyaW5nLCBEdXJhdGlvbkluZm8+O1xuICBvblNlbGVjdEdyb3VwOiAoZ3JvdXBLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbiAgb25Ib3Zlckdyb3VwOiAoZ3JvdXBLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbiAgb25Mb2FkRXZlbnREYXRhPzogKGV2ZW50OiBFdmVudCkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIGNhY2hlZEV2ZW50RGF0YTogdW5rbm93biB8IG51bGw7XG4gIG9uQ2FjaGVFdmVudERhdGE6IChldmVudElkOiBzdHJpbmcsIGRhdGE6IHVua25vd24pID0+IHZvaWQ7XG4gIGVuY3J5cHRpb25LZXk/OiBVaW50OEFycmF5O1xuICBvbkVuY3J5cHRlZERhdGFEZXRlY3RlZD86ICgpID0+IHZvaWQ7XG4gIC8qKiBFeGFjdC1JRCBzZWFyY2ggcmVzdWx0cyBzaG91bGQgbm90IGRpbSB1bnJlbGF0ZWQgcm93cy4gKi9cbiAgc3VwcHJlc3NHcm91cERpbW1pbmc/OiBib29sZWFuO1xufSkge1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbG9hZGVkRXZlbnREYXRhLCBzZXRMb2FkZWRFdmVudERhdGFdID0gdXNlU3RhdGU8dW5rbm93biB8IG51bGw+KFxuICAgIGNhY2hlZEV2ZW50RGF0YVxuICApO1xuICBjb25zdCBbbG9hZEVycm9yLCBzZXRMb2FkRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtoYXNBdHRlbXB0ZWRMb2FkLCBzZXRIYXNBdHRlbXB0ZWRMb2FkXSA9IHVzZVN0YXRlKFxuICAgIGNhY2hlZEV2ZW50RGF0YSAhPT0gbnVsbFxuICApO1xuXG4gIC8vIE5vdGlmeSBwYXJlbnQgaWYgY2FjaGVkIGRhdGEgaGFzIGVuY3J5cHRlZCBtYXJrZXJzIG9uIG1vdW50XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgY2FjaGVkRXZlbnREYXRhICE9PSBudWxsICYmXG4gICAgICAhZW5jcnlwdGlvbktleSAmJlxuICAgICAgaGFzRW5jcnlwdGVkVmFsdWVzKGNhY2hlZEV2ZW50RGF0YSlcbiAgICApIHtcbiAgICAgIG9uRW5jcnlwdGVkRGF0YURldGVjdGVkPy4oKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgcm93R3JvdXBLZXkgPSBpc1J1bkxldmVsKGV2ZW50LmV2ZW50VHlwZSlcbiAgICA/ICdfX3J1bl9fJ1xuICAgIDogKGV2ZW50LmNvcnJlbGF0aW9uSWQgPz8gdW5kZWZpbmVkKTtcblxuICBjb25zdCBzdGF0dXNEb3RDb2xvciA9IGdldFN0YXR1c0RvdENvbG9yKGV2ZW50LmV2ZW50VHlwZSk7XG4gIGNvbnN0IGNyZWF0ZWRBdCA9IG5ldyBEYXRlKGV2ZW50LmNyZWF0ZWRBdCk7XG4gIGNvbnN0IGhhc0V4aXN0aW5nRXZlbnREYXRhID0gJ2V2ZW50RGF0YScgaW4gZXZlbnQgJiYgZXZlbnQuZXZlbnREYXRhICE9IG51bGw7XG4gIGNvbnN0IGlzUnVuID0gaXNSdW5MZXZlbChldmVudC5ldmVudFR5cGUpO1xuICBjb25zdCBldmVudE5hbWUgPSBpc1J1blxuICAgID8gKHdvcmtmbG93TmFtZSA/PyAnLScpXG4gICAgOiBldmVudC5jb3JyZWxhdGlvbklkXG4gICAgICA/IChjb3JyZWxhdGlvbk5hbWVNYXAuZ2V0KGV2ZW50LmNvcnJlbGF0aW9uSWQpID8/ICctJylcbiAgICAgIDogJy0nO1xuXG4gIGNvbnN0IGR1cmF0aW9uS2V5ID0gZXZlbnQuY29ycmVsYXRpb25JZCA/PyAoaXNSdW4gPyAnX19ydW5fXycgOiAnJyk7XG4gIGNvbnN0IGR1cmF0aW9uSW5mbyA9IGR1cmF0aW9uS2V5ID8gZHVyYXRpb25NYXAuZ2V0KGR1cmF0aW9uS2V5KSA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBoYXNBY3RpdmUgPSBhY3RpdmVHcm91cEtleSAhPT0gdW5kZWZpbmVkO1xuICBjb25zdCBpc1JlbGF0ZWQgPSByb3dHcm91cEtleSAhPT0gdW5kZWZpbmVkICYmIHJvd0dyb3VwS2V5ID09PSBhY3RpdmVHcm91cEtleTtcbiAgY29uc3QgaXNEaW1tZWQgPSBoYXNBY3RpdmUgJiYgIWlzUmVsYXRlZCAmJiAhc3VwcHJlc3NHcm91cERpbW1pbmc7XG4gIGNvbnN0IGlzUHVsc2luZyA9IGhhc0FjdGl2ZSAmJiBpc1JlbGF0ZWQ7XG5cbiAgLy8gR3V0dGVyIHN0YXRlIGRlcml2ZWQgZnJvbSBzZWxlY3RlZEdyb3VwUmFuZ2VcbiAgY29uc3Qgc2hvd0JyYW5jaCA9IGhhc0FjdGl2ZSAmJiBpc1JlbGF0ZWQgJiYgIWlzUnVuO1xuICBjb25zdCBzaG93TGFuZUxpbmUgPVxuICAgIHNlbGVjdGVkR3JvdXBSYW5nZSAhPT0gbnVsbCAmJlxuICAgIGluZGV4ID49IHNlbGVjdGVkR3JvdXBSYW5nZS5maXJzdCAmJlxuICAgIGluZGV4IDw9IHNlbGVjdGVkR3JvdXBSYW5nZS5sYXN0O1xuICBjb25zdCBpc0xhbmVTdGFydCA9XG4gICAgc2VsZWN0ZWRHcm91cFJhbmdlICE9PSBudWxsICYmIGluZGV4ID09PSBzZWxlY3RlZEdyb3VwUmFuZ2UuZmlyc3Q7XG4gIGNvbnN0IGlzTGFuZUVuZCA9XG4gICAgc2VsZWN0ZWRHcm91cFJhbmdlICE9PSBudWxsICYmIGluZGV4ID09PSBzZWxlY3RlZEdyb3VwUmFuZ2UubGFzdDtcblxuICBjb25zdCBsb2FkRXZlbnREZXRhaWxzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmIChsb2FkZWRFdmVudERhdGEgIT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNhY2hlZEV2ZW50RGF0YSAhPT0gbnVsbCkge1xuICAgICAgc2V0TG9hZGVkRXZlbnREYXRhKGNhY2hlZEV2ZW50RGF0YSk7XG4gICAgICBzZXRIYXNBdHRlbXB0ZWRMb2FkKHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldElzTG9hZGluZyh0cnVlKTtcbiAgICBzZXRMb2FkRXJyb3IobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb25Mb2FkRXZlbnREYXRhKSB7XG4gICAgICAgIHNldExvYWRFcnJvcignRXZlbnQgZGV0YWlscyB1bmF2YWlsYWJsZScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgb25Mb2FkRXZlbnREYXRhKGV2ZW50KTtcbiAgICAgIGlmIChkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZXRMb2FkZWRFdmVudERhdGEoZGF0YSk7XG4gICAgICAgIG9uQ2FjaGVFdmVudERhdGEoZXZlbnQuZXZlbnRJZCwgZGF0YSk7XG4gICAgICAgIGlmICghZW5jcnlwdGlvbktleSAmJiBoYXNFbmNyeXB0ZWRWYWx1ZXMoZGF0YSkpIHtcbiAgICAgICAgICBvbkVuY3J5cHRlZERhdGFEZXRlY3RlZD8uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNldExvYWRFcnJvcihcbiAgICAgICAgZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdGYWlsZWQgdG8gbG9hZCBldmVudCBkZXRhaWxzJ1xuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldEhhc0F0dGVtcHRlZExvYWQodHJ1ZSk7XG4gICAgfVxuICB9LCBbXG4gICAgZXZlbnQsXG4gICAgbG9hZGVkRXZlbnREYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBvbkxvYWRFdmVudERhdGEsXG4gICAgb25DYWNoZUV2ZW50RGF0YSxcbiAgICBlbmNyeXB0aW9uS2V5LFxuICAgIG9uRW5jcnlwdGVkRGF0YURldGVjdGVkLFxuICAgIGNhY2hlZEV2ZW50RGF0YSxcbiAgXSk7XG5cbiAgLy8gQXV0by1sb2FkIGV2ZW50IGRhdGEgd2hlbiByZW1vdW50aW5nIGluIGV4cGFuZGVkIHN0YXRlIHdpdGhvdXQgY2FjaGVkIGRhdGFcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzRXhwYW5kZWQgfHwgaXNMb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZvaWQgbG9hZEV2ZW50RGV0YWlscygpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuXG4gIC8vIFdoZW4gZW5jcnlwdGlvbiBrZXkgY2hhbmdlcyBhbmQgdGhpcyBldmVudCB3YXMgcHJldmlvdXNseSBsb2FkZWQsXG4gIC8vIHJlLWxvYWQgdG8gZ2V0IGRlY3J5cHRlZCBkYXRhXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGVuY3J5cHRpb25LZXkgJiYgaGFzQXR0ZW1wdGVkTG9hZCAmJiBvbkxvYWRFdmVudERhdGEpIHtcbiAgICAgIHNldExvYWRlZEV2ZW50RGF0YShudWxsKTtcbiAgICAgIHNldEhhc0F0dGVtcHRlZExvYWQoZmFsc2UpO1xuICAgICAgb25Mb2FkRXZlbnREYXRhKGV2ZW50KVxuICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2V0TG9hZGVkRXZlbnREYXRhKGRhdGEpO1xuICAgICAgICAgICAgb25DYWNoZUV2ZW50RGF0YShldmVudC5ldmVudElkLCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0SGFzQXR0ZW1wdGVkTG9hZCh0cnVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICBzZXRIYXNBdHRlbXB0ZWRMb2FkKHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbZW5jcnlwdGlvbktleV0pO1xuXG4gIGNvbnN0IGhhbmRsZVJvd0NsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9uU2VsZWN0R3JvdXAocm93R3JvdXBLZXkgPT09IHNlbGVjdGVkR3JvdXBLZXkgPyB1bmRlZmluZWQgOiByb3dHcm91cEtleSk7XG4gICAgb25Ub2dnbGVFeHBhbmQoZXZlbnQuZXZlbnRJZCk7XG4gICAgaWYgKCFpc0V4cGFuZGVkKSB7XG4gICAgICB2b2lkIGxvYWRFdmVudERldGFpbHMoKTtcbiAgICB9XG4gIH0sIFtcbiAgICBzZWxlY3RlZEdyb3VwS2V5LFxuICAgIHJvd0dyb3VwS2V5LFxuICAgIG9uU2VsZWN0R3JvdXAsXG4gICAgb25Ub2dnbGVFeHBhbmQsXG4gICAgZXZlbnQuZXZlbnRJZCxcbiAgICBpc0V4cGFuZGVkLFxuICAgIGxvYWRFdmVudERldGFpbHMsXG4gIF0pO1xuXG4gIGNvbnN0IG1lcmdlZEV2ZW50RGF0YSA9XG4gICAgbG9hZGVkRXZlbnREYXRhID8/XG4gICAgKGhhc0V4aXN0aW5nRXZlbnREYXRhXG4gICAgICA/IChldmVudCBhcyBFdmVudCAmIHsgZXZlbnREYXRhOiB1bmtub3duIH0pLmV2ZW50RGF0YVxuICAgICAgOiBudWxsKTtcblxuICBjb25zdCBkaXNwbGF5UGF5bG9hZCA9IGlzTG9hZGluZyA/IGxvYWRlZEV2ZW50RGF0YSA6IG1lcmdlZEV2ZW50RGF0YTtcblxuICBjb25zdCBjb250ZW50T3BhY2l0eSA9IGlzRGltbWVkID8gMC4zIDogMTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtZXZlbnQtaWQ9e2V2ZW50LmV2ZW50SWR9XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IG9uSG92ZXJHcm91cChyb3dHcm91cEtleSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IG9uSG92ZXJHcm91cCh1bmRlZmluZWQpfVxuICAgID5cbiAgICAgIHsvKiBSb3cgKi99XG4gICAgICA8ZGl2XG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgb25DbGljaz17aGFuZGxlUm93Q2xpY2t9XG4gICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykgaGFuZGxlUm93Q2xpY2soKTtcbiAgICAgICAgfX1cbiAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHRleHQtbGVmdCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMCB0ZXh0LVsxM3B4XSBob3ZlcjpiZy1bdmFyKC0tZHMtZ3JheS1hbHBoYS0xMDApXSB0cmFuc2l0aW9uLWNvbG9ycyBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgIHN0eWxlPXt7IG1pbkhlaWdodDogNDAgfX1cbiAgICAgID5cbiAgICAgICAgPFRyZWVHdXR0ZXJcbiAgICAgICAgICBpc0ZpcnN0PXtpc0ZpcnN0fVxuICAgICAgICAgIGlzTGFzdD17aXNMYXN0ICYmICFpc0V4cGFuZGVkfVxuICAgICAgICAgIGlzUnVuTGV2ZWw9e2lzUnVufVxuICAgICAgICAgIHN0YXR1c0RvdENvbG9yPXtzdGF0dXNEb3RDb2xvcn1cbiAgICAgICAgICBwdWxzZT17aXNQdWxzaW5nfVxuICAgICAgICAgIGhhc1NlbGVjdGlvbj17aGFzQWN0aXZlfVxuICAgICAgICAgIHNob3dCcmFuY2g9e3Nob3dCcmFuY2h9XG4gICAgICAgICAgc2hvd0xhbmVMaW5lPXtzaG93TGFuZUxpbmV9XG4gICAgICAgICAgaXNMYW5lU3RhcnQ9e2lzTGFuZVN0YXJ0fVxuICAgICAgICAgIGlzTGFuZUVuZD17aXNMYW5lRW5kfVxuICAgICAgICAvPlxuXG4gICAgICAgIHsvKiBDb250ZW50IGFyZWEg4oCUIGRpbXMgd2hlbiB1bnJlbGF0ZWQgKi99XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBmbGV4LTEgbWluLXctMFwiXG4gICAgICAgICAgc3R5bGU9e3sgb3BhY2l0eTogY29udGVudE9wYWNpdHksIHRyYW5zaXRpb246ICdvcGFjaXR5IDE1MG1zJyB9fVxuICAgICAgICA+XG4gICAgICAgICAgey8qIEV4cGFuZCBjaGV2cm9uIGluZGljYXRvciAqL31cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTUgaC01IGZsZXgtc2hyaW5rLTAgcm91bmRlZFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgdmFyKC0tZHMtZ3JheS00MDApJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPENoZXZyb25SaWdodFxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTMgdy0zIHRyYW5zaXRpb24tdHJhbnNmb3JtXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBpc0V4cGFuZGVkID8gJ3JvdGF0ZSg5MGRlZyknIDogJ3JvdGF0ZSgwZGVnKScsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgey8qIFRpbWUgKi99XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGFidWxhci1udW1zIG1pbi13LTAgcHgtNFwiXG4gICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsIGZsZXg6ICcyIDEgMCUnIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRpbWVzdGFtcFRvb2x0aXAgZGF0ZT17Y3JlYXRlZEF0fT5cbiAgICAgICAgICAgICAgPHNwYW4+e2Zvcm1hdEV2ZW50VGltZShjcmVhdGVkQXQpfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvVGltZXN0YW1wVG9vbHRpcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBFdmVudCBUeXBlICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW0gbWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNVwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogNixcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNixcbiAgICAgICAgICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtpc1B1bHNpbmcgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICBpbnNldDogMCxcbiAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogc3RhdHVzRG90Q29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC43NSxcbiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246IERPVF9QVUxTRV9BTklNQVRJT04sXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogNixcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA2LFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHN0YXR1c0RvdENvbG9yLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIHtmb3JtYXRFdmVudFR5cGUoZXZlbnQuZXZlbnRUeXBlKX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBOYW1lICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcFwiXG4gICAgICAgICAgICBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fVxuICAgICAgICAgICAgdGl0bGU9e2V2ZW50TmFtZSAhPT0gJy0nID8gZXZlbnROYW1lIDogdW5kZWZpbmVkfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtldmVudE5hbWV9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogQ29ycmVsYXRpb24gSUQgKi99XG4gICAgICAgICAgPENvcHlhYmxlQ2VsbFxuICAgICAgICAgICAgdmFsdWU9e2V2ZW50LmNvcnJlbGF0aW9uSWQgfHwgJyd9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmb250LW1vbm9cIlxuICAgICAgICAgICAgc3R5bGU9e3sgZmxleDogJzMgMSAwJScgfX1cbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgey8qIEV2ZW50IElEICovfVxuICAgICAgICAgIDxDb3B5YWJsZUNlbGxcbiAgICAgICAgICAgIHZhbHVlPXtldmVudC5ldmVudElkfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9udC1tb25vXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGZsZXg6ICczIDEgMCUnIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIEV4cGFuZGVkIGRldGFpbHMg4oCUIHRyZWUgbGluZXMgY29udGludWUgdGhyb3VnaCB0aGlzIGFyZWEgKi99XG4gICAgICB7aXNFeHBhbmRlZCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleFwiPlxuICAgICAgICAgIHsvKiBDb250aW51YXRpb24gZ3V0dGVyIOKAlCBsYW5lIGxpbmUgY29udGludWVzIGlmIG5vdCBhdCBsYW5lIGVuZCAqL31cbiAgICAgICAgICA8VHJlZUd1dHRlclxuICAgICAgICAgICAgaXNGaXJzdD17ZmFsc2V9XG4gICAgICAgICAgICBpc0xhc3Q9e2lzTGFzdH1cbiAgICAgICAgICAgIGlzUnVuTGV2ZWw9e2lzUnVufVxuICAgICAgICAgICAgaGFzU2VsZWN0aW9uPXtoYXNBY3RpdmV9XG4gICAgICAgICAgICBzaG93QnJhbmNoPXtmYWxzZX1cbiAgICAgICAgICAgIHNob3dMYW5lTGluZT17c2hvd0xhbmVMaW5lICYmICFpc0xhbmVFbmR9XG4gICAgICAgICAgICBpc0xhbmVTdGFydD17ZmFsc2V9XG4gICAgICAgICAgICBpc0xhbmVFbmQ9e2ZhbHNlfVxuICAgICAgICAgICAgY29udGludWF0aW9uT25seVxuICAgICAgICAgIC8+XG4gICAgICAgICAgey8qIFNwYWNlciBmb3IgY2hldnJvbiBjb2x1bW4gKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTUgZmxleC1zaHJpbmstMFwiIC8+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIG15LTEuNSBtci0zIG1sLTIgcHktMiByb3VuZGVkLW1kIGJvcmRlciBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LWFscGhhLTIwMCknLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBjb250ZW50T3BhY2l0eSxcbiAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMTUwbXMnLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LyogRHVyYXRpb24gaW5mbyAqL31cbiAgICAgICAgICAgIHsoZHVyYXRpb25JbmZvPy5xdWV1ZWQgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBkdXJhdGlvbkluZm8/LnJhbiAhPT0gdW5kZWZpbmVkKSAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC0yIHBiLTEuNSB0ZXh0LXhzIGZsZXggZ2FwLTNcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2R1cmF0aW9uSW5mby5xdWV1ZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgZHVyYXRpb25JbmZvLnF1ZXVlZCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICBRdWV1ZWQgZm9yeycgJ31cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1vbm8gdGFidWxhci1udW1zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Zm9ybWF0RHVyYXRpb24oZHVyYXRpb25JbmZvLnF1ZXVlZCl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtkdXJhdGlvbkluZm8ucmFuICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIFJhbiBmb3J7JyAnfVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1vbm8gdGFidWxhci1udW1zXCI+XG4gICAgICAgICAgICAgICAgICAgICAge2Zvcm1hdER1cmF0aW9uKGR1cmF0aW9uSW5mby5yYW4pfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7LyogUGF5bG9hZCAqL31cbiAgICAgICAgICAgIHtkaXNwbGF5UGF5bG9hZCAhPSBudWxsID8gKFxuICAgICAgICAgICAgICA8UGF5bG9hZEJsb2NrIGRhdGE9e2Rpc3BsYXlQYXlsb2FkfSBldmVudFR5cGU9e2V2ZW50LmV2ZW50VHlwZX0gLz5cbiAgICAgICAgICAgICkgOiBsb2FkRXJyb3IgPyAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBwLTMgdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAndmFyKC0tZHMtcmVkLTQwMCknLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtcmVkLTEwMCknLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1yZWQtOTAwKScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtsb2FkRXJyb3J9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IGlzTG9hZGluZyB8fFxuICAgICAgICAgICAgICAobG9hZGVkRXZlbnREYXRhID09PSBudWxsICYmXG4gICAgICAgICAgICAgICAgIWhhc0F0dGVtcHRlZExvYWQgJiZcbiAgICAgICAgICAgICAgICBldmVudC5jb3JyZWxhdGlvbklkKSA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0yIHAtM1wiPlxuICAgICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTNcIiBzdHlsZT17eyB3aWR0aDogJzc1JScgfX0gLz5cbiAgICAgICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc1MCUnIH19IC8+XG4gICAgICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNjAlJyB9fSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwLTIgdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTkwMCknIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBObyBkYXRhXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIE1haW4gY29tcG9uZW50XG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50TGlzdFZpZXcoe1xuICBldmVudHMsXG4gIHJ1bixcbiAgb25Mb2FkRXZlbnREYXRhLFxuICBoYXNNb3JlRXZlbnRzID0gZmFsc2UsXG4gIGlzTG9hZGluZ01vcmVFdmVudHMgPSBmYWxzZSxcbiAgb25Mb2FkTW9yZUV2ZW50cyxcbiAgZW5jcnlwdGlvbktleSxcbiAgaXNMb2FkaW5nID0gZmFsc2UsXG4gIHNvcnRPcmRlcjogc29ydE9yZGVyUHJvcCxcbiAgb25Tb3J0T3JkZXJDaGFuZ2UsXG4gIG9uRGVjcnlwdCxcbiAgaXNEZWNyeXB0aW5nID0gZmFsc2UsXG4gIGhhc0VuY3J5cHRlZERhdGE6IGhhc0VuY3J5cHRlZERhdGFQcm9wID0gZmFsc2UsXG4gIG9uRXhhY3RJZFNlYXJjaCxcbn06IEV2ZW50c0xpc3RQcm9wcykge1xuICBjb25zdCB0b2FzdCA9IHVzZVRvYXN0KCk7XG4gIGNvbnN0IFtpbnRlcm5hbFNvcnRPcmRlciwgc2V0SW50ZXJuYWxTb3J0T3JkZXJdID0gdXNlU3RhdGU8J2FzYycgfCAnZGVzYyc+KFxuICAgICdhc2MnXG4gICk7XG4gIGNvbnN0IGVmZmVjdGl2ZVNvcnRPcmRlciA9IHNvcnRPcmRlclByb3AgPz8gaW50ZXJuYWxTb3J0T3JkZXI7XG4gIGNvbnN0IGhhbmRsZVNvcnRPcmRlckNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChvcmRlcjogJ2FzYycgfCAnZGVzYycpID0+IHtcbiAgICAgIGlmIChvblNvcnRPcmRlckNoYW5nZSkge1xuICAgICAgICBvblNvcnRPcmRlckNoYW5nZShvcmRlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRJbnRlcm5hbFNvcnRPcmRlcihvcmRlcik7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25Tb3J0T3JkZXJDaGFuZ2VdXG4gICk7XG5cbiAgY29uc3QgW3NlYXJjaFF1ZXJ5LCBzZXRTZWFyY2hRdWVyeV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtzZWFyY2hSZXN1bHRzLCBzZXRTZWFyY2hSZXN1bHRzXSA9IHVzZVN0YXRlPEV2ZW50W10gfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3NlYXJjaFJlc3VsdHNUcnVuY2F0ZWQsIHNldFNlYXJjaFJlc3VsdHNUcnVuY2F0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2VhcmNoRXJyb3IsIHNldFNlYXJjaEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbc2VhcmNoTG9hZGluZywgc2V0U2VhcmNoTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzZWFyY2hOb3RGb3VuZCwgc2V0U2VhcmNoTm90Rm91bmRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hSZXF1ZXN0UmVmID0gdXNlUmVmKDApO1xuICBjb25zdCB2aXJ0dW9zb1JlZiA9IHVzZVJlZjxWaXJ0dW9zb0hhbmRsZT4obnVsbCk7XG5cbiAgY29uc3QgcGFyc2VkU2VhcmNoSWQgPSB1c2VNZW1vKFxuICAgICgpID0+IHBhcnNlRXhhY3RXb3JrZmxvd1NlYXJjaElkKHNlYXJjaFF1ZXJ5KSxcbiAgICBbc2VhcmNoUXVlcnldXG4gICk7XG4gIGNvbnN0IGlzRXhhY3RTZWFyY2hBY3RpdmUgPSBzZWFyY2hSZXN1bHRzICE9PSBudWxsO1xuXG4gIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZUV2ZW50cyA9IGlzRXhhY3RTZWFyY2hBY3RpdmUgPyBzZWFyY2hSZXN1bHRzIDogKGV2ZW50cyA/PyBbXSk7XG4gICAgaWYgKHNvdXJjZUV2ZW50cy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcbiAgICBjb25zdCBkaXIgPSBlZmZlY3RpdmVTb3J0T3JkZXIgPT09ICdkZXNjJyA/IC0xIDogMTtcbiAgICByZXR1cm4gWy4uLnNvdXJjZUV2ZW50c10uc29ydChcbiAgICAgIChhLCBiKSA9PlxuICAgICAgICBkaXIgKlxuICAgICAgICAobmV3IERhdGUoYS5jcmVhdGVkQXQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGIuY3JlYXRlZEF0KS5nZXRUaW1lKCkpXG4gICAgKTtcbiAgfSwgW2V2ZW50cywgZWZmZWN0aXZlU29ydE9yZGVyLCBpc0V4YWN0U2VhcmNoQWN0aXZlLCBzZWFyY2hSZXN1bHRzXSk7XG5cbiAgLy8gRGV0ZWN0IGVuY3J5cHRlZCBmaWVsZHMgYWNyb3NzIGFsbCBsb2FkZWQgZXZlbnRzIChpbmxpbmUgZXZlbnREYXRhKS5cbiAgY29uc3QgaGFzRW5jcnlwdGVkSW5saW5lRGF0YSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZUV2ZW50cyA9IGlzRXhhY3RTZWFyY2hBY3RpdmUgPyBzZWFyY2hSZXN1bHRzIDogZXZlbnRzO1xuICAgIGlmICghc291cmNlRXZlbnRzKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChjb25zdCBldmVudCBvZiBzb3VyY2VFdmVudHMpIHtcbiAgICAgIGNvbnN0IGVkID0gKGV2ZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5ldmVudERhdGE7XG4gICAgICBpZiAoaGFzRW5jcnlwdGVkVmFsdWVzKGVkKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgW2V2ZW50cywgaXNFeGFjdFNlYXJjaEFjdGl2ZSwgc2VhcmNoUmVzdWx0c10pO1xuXG4gIC8vIFRyYWNrcyB3aGV0aGVyIGFueSBleHBhbmRlZCByb3cncyBsYXp5LWxvYWRlZCBkYXRhIGNvbnRhaW5lZCBlbmNyeXB0ZWQgbWFya2Vycy5cbiAgLy8gU2V0IHRvIHRydWUgYnkgRXZlbnRSb3cgdmlhIG9uRW5jcnlwdGVkRGF0YURldGVjdGVkOyBuZXZlciByZXNldCAoc3RpY2t5KS5cbiAgY29uc3QgW2ZvdW5kRW5jcnlwdGVkSW5MYXp5RGF0YSwgc2V0Rm91bmRFbmNyeXB0ZWRJbkxhenlEYXRhXSA9XG4gICAgdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBoYW5kbGVFbmNyeXB0ZWREYXRhRGV0ZWN0ZWQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0Rm91bmRFbmNyeXB0ZWRJbkxhenlEYXRhKHRydWUpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFzRW5jcnlwdGVkRGF0YSA9XG4gICAgaGFzRW5jcnlwdGVkRGF0YVByb3AgfHwgaGFzRW5jcnlwdGVkSW5saW5lRGF0YSB8fCBmb3VuZEVuY3J5cHRlZEluTGF6eURhdGE7XG5cbiAgY29uc3QgeyBjb3JyZWxhdGlvbk5hbWVNYXAsIHdvcmtmbG93TmFtZSB9ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgYnVpbGROYW1lTWFwcyhcbiAgICAgICAgaXNFeGFjdFNlYXJjaEFjdGl2ZSA/IHNlYXJjaFJlc3VsdHMgOiAoZXZlbnRzID8/IG51bGwpLFxuICAgICAgICBydW4gPz8gbnVsbFxuICAgICAgKSxcbiAgICBbZXZlbnRzLCBpc0V4YWN0U2VhcmNoQWN0aXZlLCBydW4sIHNlYXJjaFJlc3VsdHNdXG4gICk7XG5cbiAgY29uc3QgZHVyYXRpb25NYXAgPSB1c2VNZW1vKFxuICAgICgpID0+IGJ1aWxkRHVyYXRpb25NYXAoc29ydGVkRXZlbnRzKSxcbiAgICBbc29ydGVkRXZlbnRzXVxuICApO1xuXG4gIGNvbnN0IFtzZWxlY3RlZEdyb3VwS2V5LCBzZXRTZWxlY3RlZEdyb3VwS2V5XSA9IHVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIGNvbnN0IFtob3ZlcmVkR3JvdXBLZXksIHNldEhvdmVyZWRHcm91cEtleV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBjb25zdCBvblNlbGVjdEdyb3VwID0gdXNlQ2FsbGJhY2soKGdyb3VwS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcbiAgICBzZXRTZWxlY3RlZEdyb3VwS2V5KGdyb3VwS2V5KTtcbiAgfSwgW10pO1xuICBjb25zdCBvbkhvdmVyR3JvdXAgPSB1c2VDYWxsYmFjaygoZ3JvdXBLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIHNldEhvdmVyZWRHcm91cEtleShncm91cEtleSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBhY3RpdmVHcm91cEtleSA9IHNlbGVjdGVkR3JvdXBLZXkgPz8gaG92ZXJlZEdyb3VwS2V5O1xuXG4gIC8vIEV4cGFuZGVkIHN0YXRlIGxpZnRlZCBvdXQgb2YgRXZlbnRSb3cgc28gaXQgc3Vydml2ZXMgdmlydHVhbGl6YXRpb25cbiAgY29uc3QgW2V4cGFuZGVkRXZlbnRJZHMsIHNldEV4cGFuZGVkRXZlbnRJZHNdID0gdXNlU3RhdGU8U2V0PHN0cmluZz4+KFxuICAgICgpID0+IG5ldyBTZXQoKVxuICApO1xuICBjb25zdCB0b2dnbGVFdmVudEV4cGFuZGVkID0gdXNlQ2FsbGJhY2soKGV2ZW50SWQ6IHN0cmluZykgPT4ge1xuICAgIHNldEV4cGFuZGVkRXZlbnRJZHMoKHByZXYpID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KHByZXYpO1xuICAgICAgaWYgKG5leHQuaGFzKGV2ZW50SWQpKSB7XG4gICAgICAgIG5leHQuZGVsZXRlKGV2ZW50SWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dC5hZGQoZXZlbnRJZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIEV2ZW50IGRhdGEgY2FjaGUg4oCUIHJlZiBhdm9pZHMgcmUtcmVuZGVycyB3aGVuIGNhY2hlIHVwZGF0ZXNcbiAgY29uc3QgZXZlbnREYXRhQ2FjaGVSZWYgPSB1c2VSZWY8TWFwPHN0cmluZywgdW5rbm93bj4+KG5ldyBNYXAoKSk7XG4gIGNvbnN0IGNhY2hlRXZlbnREYXRhID0gdXNlQ2FsbGJhY2soKGV2ZW50SWQ6IHN0cmluZywgZGF0YTogdW5rbm93bikgPT4ge1xuICAgIGV2ZW50RGF0YUNhY2hlUmVmLmN1cnJlbnQuc2V0KGV2ZW50SWQsIGRhdGEpO1xuICB9LCBbXSk7XG5cbiAgLy8gTG9va3VwIGZyb20gZXZlbnRJZCDihpIgZ3JvdXBLZXkgZm9yIGVmZmljaWVudCBjb2xsYXBzZSBmaWx0ZXJpbmdcbiAgY29uc3QgZXZlbnRHcm91cEtleU1hcCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBldiBvZiBzb3J0ZWRFdmVudHMpIHtcbiAgICAgIGNvbnN0IGdrID0gaXNSdW5MZXZlbChldi5ldmVudFR5cGUpXG4gICAgICAgID8gJ19fcnVuX18nXG4gICAgICAgIDogKGV2LmNvcnJlbGF0aW9uSWQgPz8gJycpO1xuICAgICAgaWYgKGdrKSBtYXAuc2V0KGV2LmV2ZW50SWQsIGdrKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcDtcbiAgfSwgW3NvcnRlZEV2ZW50c10pO1xuXG4gIC8vIENvbGxhcHNlIGV4cGFuZGVkIGV2ZW50cyB0aGF0IGRvbid0IGJlbG9uZyB0byB0aGUgbmV3bHkgc2VsZWN0ZWQgZ3JvdXBcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRHcm91cEtleSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgc2V0RXhwYW5kZWRFdmVudElkcygocHJldikgPT4ge1xuICAgICAgaWYgKHByZXYuc2l6ZSA9PT0gMCkgcmV0dXJuIHByZXY7XG4gICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgY29uc3QgbmV4dCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgZm9yIChjb25zdCBldmVudElkIG9mIHByZXYpIHtcbiAgICAgICAgaWYgKGV2ZW50R3JvdXBLZXlNYXAuZ2V0KGV2ZW50SWQpID09PSBzZWxlY3RlZEdyb3VwS2V5KSB7XG4gICAgICAgICAgbmV4dC5hZGQoZXZlbnRJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjaGFuZ2VkID8gbmV4dCA6IHByZXY7XG4gICAgfSk7XG4gIH0sIFtzZWxlY3RlZEdyb3VwS2V5LCBldmVudEdyb3VwS2V5TWFwXSk7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgcm93LWluZGV4IHJhbmdlIGZvciB0aGUgYWN0aXZlIGdyb3VwJ3MgY29ubmVjdGluZyBsYW5lIGxpbmUuXG4gIC8vIE9ubHkgYXBwbGllcyB0byBub24tcnVuIGdyb3VwcyAoc3RlcC9ob29rL3dhaXQgY29ycmVsYXRpb25zKS5cbiAgY29uc3Qgc2VsZWN0ZWRHcm91cFJhbmdlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFhY3RpdmVHcm91cEtleSB8fCBhY3RpdmVHcm91cEtleSA9PT0gJ19fcnVuX18nKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgZmlyc3QgPSAtMTtcbiAgICBsZXQgbGFzdCA9IC0xO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkRXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoc29ydGVkRXZlbnRzW2ldLmNvcnJlbGF0aW9uSWQgPT09IGFjdGl2ZUdyb3VwS2V5KSB7XG4gICAgICAgIGlmIChmaXJzdCA9PT0gLTEpIGZpcnN0ID0gaTtcbiAgICAgICAgbGFzdCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaXJzdCA+PSAwID8geyBmaXJzdCwgbGFzdCB9IDogbnVsbDtcbiAgfSwgW2FjdGl2ZUdyb3VwS2V5LCBzb3J0ZWRFdmVudHNdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBzZWFyY2hRdWVyeS50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkKSB7XG4gICAgICBzZWFyY2hSZXF1ZXN0UmVmLmN1cnJlbnQgKz0gMTtcbiAgICAgIHNldFNlYXJjaFJlc3VsdHMobnVsbCk7XG4gICAgICBzZXRTZWFyY2hSZXN1bHRzVHJ1bmNhdGVkKGZhbHNlKTtcbiAgICAgIHNldFNlYXJjaEVycm9yKG51bGwpO1xuICAgICAgc2V0U2VhcmNoTG9hZGluZyhmYWxzZSk7XG4gICAgICBzZXRTZWFyY2hOb3RGb3VuZChmYWxzZSk7XG4gICAgICBzZXRTZWxlY3RlZEdyb3VwS2V5KHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VFeGFjdFdvcmtmbG93U2VhcmNoSWQodHJpbW1lZCk7XG4gICAgaWYgKCFwYXJzZWQgfHwgIW9uRXhhY3RJZFNlYXJjaCkge1xuICAgICAgc2V0U2VhcmNoUmVzdWx0cyhudWxsKTtcbiAgICAgIHNldFNlYXJjaExvYWRpbmcoZmFsc2UpO1xuICAgICAgc2V0U2VhcmNoTm90Rm91bmQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RJZCA9ICsrc2VhcmNoUmVxdWVzdFJlZi5jdXJyZW50O1xuICAgIHNldFNlYXJjaExvYWRpbmcodHJ1ZSk7XG4gICAgc2V0U2VhcmNoTm90Rm91bmQoZmFsc2UpO1xuICAgIHNldFNlYXJjaEVycm9yKG51bGwpO1xuXG4gICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHZvaWQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgb25FeGFjdElkU2VhcmNoKFxuICAgICAgICAgICAgcGFyc2VkLmlkLFxuICAgICAgICAgICAgcGFyc2VkLmtpbmQsXG4gICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQgfHxcbiAgICAgICAgICAgIHNlYXJjaFJlcXVlc3RSZWYuY3VycmVudCAhPT0gcmVxdWVzdElkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlc3VsdHMuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICBzZXRTZWFyY2hSZXN1bHRzKFtdKTtcbiAgICAgICAgICAgIHNldFNlYXJjaFJlc3VsdHNUcnVuY2F0ZWQoZmFsc2UpO1xuICAgICAgICAgICAgc2V0U2VhcmNoTm90Rm91bmQoZmFsc2UpO1xuICAgICAgICAgICAgc2V0U2VhcmNoRXJyb3IocmVzdWx0cy5tZXNzYWdlKTtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkR3JvdXBLZXkodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXN1bHRzLnN0YXR1cyA9PT0gJ25vdF9mb3VuZCcgfHxcbiAgICAgICAgICAgIChyZXN1bHRzLnN0YXR1cyA9PT0gJ29rJyAmJiByZXN1bHRzLmV2ZW50cy5sZW5ndGggPT09IDApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBzZXRTZWFyY2hSZXN1bHRzKFtdKTtcbiAgICAgICAgICAgIHNldFNlYXJjaFJlc3VsdHNUcnVuY2F0ZWQoZmFsc2UpO1xuICAgICAgICAgICAgc2V0U2VhcmNoTm90Rm91bmQodHJ1ZSk7XG4gICAgICAgICAgICBzZXRTZWFyY2hFcnJvcihudWxsKTtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkR3JvdXBLZXkodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXRTZWFyY2hSZXN1bHRzKHJlc3VsdHMuZXZlbnRzKTtcbiAgICAgICAgICBzZXRTZWFyY2hSZXN1bHRzVHJ1bmNhdGVkKEJvb2xlYW4ocmVzdWx0cy50cnVuY2F0ZWQpKTtcbiAgICAgICAgICBzZXRTZWFyY2hOb3RGb3VuZChmYWxzZSk7XG4gICAgICAgICAgc2V0U2VhcmNoRXJyb3IobnVsbCk7XG4gICAgICAgICAgc2V0U2VsZWN0ZWRHcm91cEtleShcbiAgICAgICAgICAgIHBhcnNlZC5raW5kID09PSAnZXZlbnQnXG4gICAgICAgICAgICAgID8gKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gcmVzdWx0cy5ldmVudHNbMF07XG4gICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzUnVuTGV2ZWwoZmlyc3QuZXZlbnRUeXBlKVxuICAgICAgICAgICAgICAgICAgICA/ICdfX3J1bl9fJ1xuICAgICAgICAgICAgICAgICAgICA6IChmaXJzdC5jb3JyZWxhdGlvbklkID8/IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfSkoKVxuICAgICAgICAgICAgICA6IHBhcnNlZC5pZFxuICAgICAgICAgICk7XG4gICAgICAgICAgdmlydHVvc29SZWYuY3VycmVudD8uc2Nyb2xsVG9JbmRleCh7XG4gICAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICAgIGFsaWduOiAnc3RhcnQnLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQgfHxcbiAgICAgICAgICAgIHNlYXJjaFJlcXVlc3RSZWYuY3VycmVudCAhPT0gcmVxdWVzdElkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldFNlYXJjaFJlc3VsdHMoW10pO1xuICAgICAgICAgIHNldFNlYXJjaFJlc3VsdHNUcnVuY2F0ZWQoZmFsc2UpO1xuICAgICAgICAgIHNldFNlYXJjaE5vdEZvdW5kKGZhbHNlKTtcbiAgICAgICAgICBzZXRTZWFyY2hFcnJvcignRmFpbGVkIHRvIHNlYXJjaCBldmVudHMuIFRyeSBhZ2Fpbi4nKTtcbiAgICAgICAgICBzZXRTZWxlY3RlZEdyb3VwS2V5KHVuZGVmaW5lZCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc2VhcmNoUmVxdWVzdFJlZi5jdXJyZW50ID09PSByZXF1ZXN0SWQgJiZcbiAgICAgICAgICAgICFhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNldFNlYXJjaExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9LCAzMDApO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9O1xuICB9LCBbc2VhcmNoUXVlcnksIG9uRXhhY3RJZFNlYXJjaF0pO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaEtleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0S2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBzZWFyY2hRdWVyeS50cmltKCk7XG4gICAgICBpZiAoXG4gICAgICAgICF0cmltbWVkIHx8XG4gICAgICAgIHBhcnNlRXhhY3RXb3JrZmxvd1NlYXJjaElkKHRyaW1tZWQpIHx8XG4gICAgICAgICFvbkV4YWN0SWRTZWFyY2ggfHxcbiAgICAgICAgIWxvb2tzTGlrZVdvcmtmbG93SWRTZWFyY2hJbnB1dCh0cmltbWVkKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9hc3QuaW5mbygnRW50ZXIgYSBmdWxsIHN0ZXAgSUQsIHdhaXQgSUQsIGhvb2sgSUQsIG9yIGV2ZW50IElEJyk7XG4gICAgfSxcbiAgICBbc2VhcmNoUXVlcnksIG9uRXhhY3RJZFNlYXJjaCwgdG9hc3RdXG4gICk7XG5cbiAgLy8gVHJhY2sgd2hldGhlciB3ZSd2ZSBldmVyIGhhZCBldmVudHMgdG8gZGlzdGluZ3Vpc2ggaW5pdGlhbCBsb2FkIGZyb20gcmVmZXRjaFxuICBjb25zdCBoYXNIYWRFdmVudHNSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICBpZiAoc29ydGVkRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICBoYXNIYWRFdmVudHNSZWYuY3VycmVudCA9IHRydWU7XG4gIH1cbiAgY29uc3QgaXNJbml0aWFsTG9hZCA9IGlzTG9hZGluZyAmJiAhaGFzSGFkRXZlbnRzUmVmLmN1cnJlbnQ7XG4gIGNvbnN0IGlzUmVmZXRjaGluZyA9XG4gICAgaXNMb2FkaW5nICYmIGhhc0hhZEV2ZW50c1JlZi5jdXJyZW50ICYmIHNvcnRlZEV2ZW50cy5sZW5ndGggPT09IDA7XG5cbiAgaWYgKGlzSW5pdGlhbExvYWQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLWZ1bGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgey8qIFNrZWxldG9uIHNlYXJjaCBiYXIgKi99XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogNiB9fT5cbiAgICAgICAgICA8U2tlbGV0b24gc3R5bGU9e3sgaGVpZ2h0OiA0MCwgYm9yZGVyUmFkaXVzOiA2IH19IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7LyogU2tlbGV0b24gaGVhZGVyICovfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTAgaC0xMCBib3JkZXItYiBmbGV4LXNocmluay0wXCJcbiAgICAgICAgICBzdHlsZT17eyBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktYWxwaGEtMjAwKScgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC1zaHJpbmstMFwiIHN0eWxlPXt7IHdpZHRoOiBHVVRURVJfV0lEVEggfX0gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctNSBmbGV4LXNocmluay0wXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiA0MCB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6IDcyIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fT5cbiAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTNcIiBzdHlsZT17eyB3aWR0aDogNDQgfX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICczIDEgMCUnIH19PlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiA5MiB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzMgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6IDYwIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Um93c1NrZWxldG9uIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RGVjcnlwdENsaWNrQ29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e29uRGVjcnlwdCA/IHsgb25EZWNyeXB0LCBpc0RlY3J5cHRpbmcgfSA6IHVuZGVmaW5lZH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtZnVsbCBmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICA8c3R5bGU+e2BAa2V5ZnJhbWVzIHdvcmtmbG93LWRvdC1wdWxzZXswJXt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eTouN303MCUsMTAwJXt0cmFuc2Zvcm06c2NhbGUoMi4yKTtvcGFjaXR5OjB9fWB9PC9zdHlsZT5cbiAgICAgICAgey8qIFNlYXJjaCBiYXIgKyBzb3J0ICovfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHBhZGRpbmc6IDYsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgZ2FwOiA2LFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA2LFxuICAgICAgICAgICAgICBib3hTaGFkb3c6ICcwIDAgMCAxcHggdmFyKC0tZHMtZ3JheS1hbHBoYS00MDApJyxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3ZhcigtLWRzLWJhY2tncm91bmQtMTAwKScsXG4gICAgICAgICAgICAgIGhlaWdodDogNDAsXG4gICAgICAgICAgICAgIGZsZXg6IDEsXG4gICAgICAgICAgICAgIG1pbldpZHRoOiAwLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDQwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogNDAsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktODAwKScsXG4gICAgICAgICAgICAgICAgZmxleFNocmluazogMCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgIHdpZHRoPXsxNn1cbiAgICAgICAgICAgICAgICBoZWlnaHQ9ezE2fVxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgIGN4PVwiN1wiXG4gICAgICAgICAgICAgICAgICBjeT1cIjdcIlxuICAgICAgICAgICAgICAgICAgcj1cIjQuNVwiXG4gICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuNSAxMS41TDE0IDE0XCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGJ5IHN0ZXAgSUQsIHdhaXQgSUQsIGhvb2sgSUQsIG9yIGV2ZW50IElE4oCmXCJcbiAgICAgICAgICAgICAgdmFsdWU9e3NlYXJjaFF1ZXJ5fVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFNlYXJjaFF1ZXJ5KGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVTZWFyY2hLZXlEb3dufVxuICAgICAgICAgICAgICBkaXNhYmxlZD17IW9uRXhhY3RJZFNlYXJjaH1cbiAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgIG9uRXhhY3RJZFNlYXJjaFxuICAgICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgIDogJ0V4YWN0IElEIHNlYXJjaCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIHZpZXcuJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogLTE2LFxuICAgICAgICAgICAgICAgIHBhZGRpbmdJbmxpbmU6IDEyLFxuICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdpbmhlcml0JyxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogMTQsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgICAgICAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0MCxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IG9uRXhhY3RJZFNlYXJjaCA/IDEgOiAwLjUsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiBvbkV4YWN0SWRTZWFyY2ggPyAndGV4dCcgOiAnbm90LWFsbG93ZWQnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxNZW51RHJvcGRvd25cbiAgICAgICAgICAgIG9wdGlvbnM9e1NPUlRfT1BUSU9OU31cbiAgICAgICAgICAgIHZhbHVlPXtlZmZlY3RpdmVTb3J0T3JkZXJ9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlU29ydE9yZGVyQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgeyhoYXNFbmNyeXB0ZWREYXRhIHx8IGVuY3J5cHRpb25LZXkpICYmIG9uRGVjcnlwdCAmJiAoXG4gICAgICAgICAgICA8RGVjcnlwdEJ1dHRvblxuICAgICAgICAgICAgICBkZWNyeXB0ZWQ9eyEhZW5jcnlwdGlvbktleX1cbiAgICAgICAgICAgICAgbG9hZGluZz17aXNEZWNyeXB0aW5nfVxuICAgICAgICAgICAgICBvbkNsaWNrPXtvbkRlY3J5cHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMCB0ZXh0LVsxM3B4XSBmb250LW1lZGl1bSBoLTEwIGJvcmRlci1iIGZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktYWxwaGEtMjAwKScsXG4gICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTBcIiBzdHlsZT17eyB3aWR0aDogR1VUVEVSX1dJRFRIIH19IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTUgZmxleC1zaHJpbmstMFwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fT5cbiAgICAgICAgICAgIFRpbWVcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgRXZlbnQgVHlwZVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICBOYW1lXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMyAxIDAlJyB9fT5cbiAgICAgICAgICAgIENvcnJlbGF0aW9uIElEXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMyAxIDAlJyB9fT5cbiAgICAgICAgICAgIEV2ZW50IElEXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBWaXJ0dWFsaXplZCBldmVudCByb3dzIG9yIHJlZmV0Y2hpbmcgc2tlbGV0b24gKi99XG4gICAgICAgIHtpc1JlZmV0Y2hpbmcgfHwgc2VhcmNoTG9hZGluZyA/IChcbiAgICAgICAgICA8Um93c1NrZWxldG9uIC8+XG4gICAgICAgICkgOiBzb3J0ZWRFdmVudHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggZmxleC0xIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC02IHRleHQtY2VudGVyIHRleHQtc21cIlxuICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3NlYXJjaE5vdEZvdW5kICYmIHNlYXJjaFF1ZXJ5LnRyaW0oKVxuICAgICAgICAgICAgICA/IGBObyBldmVudHMgZm91bmQgZm9yICR7c2VhcmNoUXVlcnkudHJpbSgpfWBcbiAgICAgICAgICAgICAgOiBzZWFyY2hFcnJvclxuICAgICAgICAgICAgICAgID8gc2VhcmNoRXJyb3JcbiAgICAgICAgICAgICAgICA6IHBhcnNlZFNlYXJjaElkICYmIHNlYXJjaFF1ZXJ5LnRyaW0oKSAmJiAhb25FeGFjdElkU2VhcmNoXG4gICAgICAgICAgICAgICAgICA/ICdFeGFjdCBJRCBzZWFyY2ggaXMgdW5hdmFpbGFibGUgaW4gdGhpcyB2aWV3LidcbiAgICAgICAgICAgICAgICAgIDogJ05vIGV2ZW50cyBmb3VuZCd9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFZpcnR1b3NvXG4gICAgICAgICAgICByZWY9e3ZpcnR1b3NvUmVmfVxuICAgICAgICAgICAgdG90YWxDb3VudD17c29ydGVkRXZlbnRzLmxlbmd0aH1cbiAgICAgICAgICAgIG92ZXJzY2FuPXsyMH1cbiAgICAgICAgICAgIGRlZmF1bHRJdGVtSGVpZ2h0PXs0MH1cbiAgICAgICAgICAgIGVuZFJlYWNoZWQ9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGlzRXhhY3RTZWFyY2hBY3RpdmUgfHxcbiAgICAgICAgICAgICAgICAhaGFzTW9yZUV2ZW50cyB8fFxuICAgICAgICAgICAgICAgIGlzTG9hZGluZ01vcmVFdmVudHNcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZvaWQgb25Mb2FkTW9yZUV2ZW50cz8uKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgaXRlbUNvbnRlbnQ9eyhpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGV2ID0gc29ydGVkRXZlbnRzW2luZGV4XTtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RXZlbnRSb3dcbiAgICAgICAgICAgICAgICAgIGV2ZW50PXtldn1cbiAgICAgICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIGlzRmlyc3Q9e2luZGV4ID09PSAwfVxuICAgICAgICAgICAgICAgICAgaXNMYXN0PXtpbmRleCA9PT0gc29ydGVkRXZlbnRzLmxlbmd0aCAtIDF9XG4gICAgICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtleHBhbmRlZEV2ZW50SWRzLmhhcyhldi5ldmVudElkKX1cbiAgICAgICAgICAgICAgICAgIG9uVG9nZ2xlRXhwYW5kPXt0b2dnbGVFdmVudEV4cGFuZGVkfVxuICAgICAgICAgICAgICAgICAgYWN0aXZlR3JvdXBLZXk9e2FjdGl2ZUdyb3VwS2V5fVxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRHcm91cEtleT17c2VsZWN0ZWRHcm91cEtleX1cbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBSYW5nZT17c2VsZWN0ZWRHcm91cFJhbmdlfVxuICAgICAgICAgICAgICAgICAgY29ycmVsYXRpb25OYW1lTWFwPXtjb3JyZWxhdGlvbk5hbWVNYXB9XG4gICAgICAgICAgICAgICAgICB3b3JrZmxvd05hbWU9e3dvcmtmbG93TmFtZX1cbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uTWFwPXtkdXJhdGlvbk1hcH1cbiAgICAgICAgICAgICAgICAgIG9uU2VsZWN0R3JvdXA9e29uU2VsZWN0R3JvdXB9XG4gICAgICAgICAgICAgICAgICBvbkhvdmVyR3JvdXA9e29uSG92ZXJHcm91cH1cbiAgICAgICAgICAgICAgICAgIG9uTG9hZEV2ZW50RGF0YT17b25Mb2FkRXZlbnREYXRhfVxuICAgICAgICAgICAgICAgICAgY2FjaGVkRXZlbnREYXRhPXtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnREYXRhQ2FjaGVSZWYuY3VycmVudC5nZXQoZXYuZXZlbnRJZCkgPz8gbnVsbFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgb25DYWNoZUV2ZW50RGF0YT17Y2FjaGVFdmVudERhdGF9XG4gICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5PXtlbmNyeXB0aW9uS2V5fVxuICAgICAgICAgICAgICAgICAgb25FbmNyeXB0ZWREYXRhRGV0ZWN0ZWQ9e2hhbmRsZUVuY3J5cHRlZERhdGFEZXRlY3RlZH1cbiAgICAgICAgICAgICAgICAgIHN1cHByZXNzR3JvdXBEaW1taW5nPXtpc0V4YWN0U2VhcmNoQWN0aXZlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgc3R5bGU9e3sgZmxleDogMSwgbWluSGVpZ2h0OiAwIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cblxuICAgICAgICB7LyogRml4ZWQgZm9vdGVyIOKAlCBjb3VudCArIGxvYWQgbW9yZSAqL31cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXgtc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIgaC0xMCBib3JkZXItdCBweC00IHRleHQteHNcIlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktYWxwaGEtMjAwKScsXG4gICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIHtpc0V4YWN0U2VhcmNoQWN0aXZlXG4gICAgICAgICAgICAgID8gc2VhcmNoRXJyb3JcbiAgICAgICAgICAgICAgICA/IHNlYXJjaEVycm9yXG4gICAgICAgICAgICAgICAgOiBzZWFyY2hOb3RGb3VuZFxuICAgICAgICAgICAgICAgICAgPyBgTm8gZXZlbnRzIGZvdW5kIGZvciAke3NlYXJjaFF1ZXJ5LnRyaW0oKX1gXG4gICAgICAgICAgICAgICAgICA6IGAke3NvcnRlZEV2ZW50cy5sZW5ndGh9IGV2ZW50JHtzb3J0ZWRFdmVudHMubGVuZ3RoICE9PSAxID8gJ3MnIDogJyd9IGZvciAke3NlYXJjaFF1ZXJ5LnRyaW0oKX0ke3NlYXJjaFJlc3VsdHNUcnVuY2F0ZWQgPyAnIChyZXN1bHRzIG1heSBiZSB0cnVuY2F0ZWQpJyA6ICcnfWBcbiAgICAgICAgICAgICAgOiBgJHtzb3J0ZWRFdmVudHMubGVuZ3RofSBldmVudCR7c29ydGVkRXZlbnRzLmxlbmd0aCAhPT0gMSA/ICdzJyA6ICcnfSBsb2FkZWRgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB7IWlzRXhhY3RTZWFyY2hBY3RpdmUgJiYgaGFzTW9yZUV2ZW50cyAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8TG9hZE1vcmVCdXR0b25cbiAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2lzTG9hZGluZ01vcmVFdmVudHN9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIG9uTG9hZE1vcmVFdmVudHM/LigpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L0RlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59XG4iXX0=