@ngxsmk/theme 2.0.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @ngxsmk/theme
2
2
 
3
- The design-token engine of the [NGXSMK UI kit](https://ngxsmk.github.io/ngxsmk-ui-kit). A `ThemeConfig` maps to a flat set of `--ngxsmk-*` CSS custom properties that every `@ngxsmk/core` component reads. Ships 4 presets, light/dark/system strategies, and runtime theme switching via `NgxsmkThemeService`.
3
+ The design-token engine of the [NGXSMK UI kit](https://ngxsmk.github.io/ngxsmk-ui-kit) ([WhatsApp Channel](https://whatsapp.com/channel/0029Vb8PWpz1XquUOnGPUM2p)). A `ThemeConfig` maps to a flat set of `--ngxsmk-*` CSS custom properties that every `@ngxsmk/core` component reads. Ships 4 presets, light/dark/system strategies, and runtime theme switching via `NgxsmkThemeService`.
4
4
 
5
5
  ## Compatibility
6
6
 
@@ -109,6 +109,12 @@ function staticVars(theme) {
109
109
  '--ngxsmk-focus-ring': 'var(--ngxsmk-shadow-focus)',
110
110
  '--ngxsmk-focus-ring-error': '0 0 0 2px color-mix(in srgb, var(--ngxsmk-color-error) 15%, transparent), ' +
111
111
  '0 0 0 4px color-mix(in srgb, var(--ngxsmk-color-error) 45%, transparent)',
112
+ // Mobile viewport & safe-area tokens (iOS / Android / Ionic)
113
+ '--ngxsmk-safe-area-top': 'env(safe-area-inset-top, 0px)',
114
+ '--ngxsmk-safe-area-bottom': 'env(safe-area-inset-bottom, 0px)',
115
+ '--ngxsmk-safe-area-left': 'env(safe-area-inset-left, 0px)',
116
+ '--ngxsmk-safe-area-right': 'env(safe-area-inset-right, 0px)',
117
+ '--ngxsmk-touch-target-min': '44px',
112
118
  // Component-specific token defaults
113
119
  ...Object.values(COMPONENT_TOKEN_DEFAULTS).reduce((merged, tokens) => ({ ...merged, ...tokens }), {}),
114
120
  };
@@ -187,12 +193,17 @@ function lightVars(theme) {
187
193
  '--ngxsmk-color-on-surface': '#0A1317',
188
194
  '--ngxsmk-color-surface-variant': theme.neutral[100],
189
195
  '--ngxsmk-color-on-surface-variant': theme.neutral[500],
196
+ '--ngxsmk-color-surface-muted': theme.neutral[50],
197
+ '--ngxsmk-color-surface-elevated': '#FFFFFF',
198
+ '--ngxsmk-color-surface-overlay': '#FFFFFF',
199
+ '--ngxsmk-color-on-surface-muted': theme.neutral[400],
190
200
  '--ngxsmk-color-surface-hover': 'rgb(5 54 89 / 0.05)',
191
201
  '--ngxsmk-color-surface-active': 'rgb(5 54 89 / 0.1)',
192
202
  '--ngxsmk-color-surface-container': '#FFFFFF',
193
203
  '--ngxsmk-color-outline': 'rgb(5 54 89 / 0.1)',
194
204
  '--ngxsmk-color-outline-strong': theme.neutral[200],
195
205
  '--ngxsmk-color-outline-variant': 'rgb(5 54 89 / 0.06)',
206
+ '--ngxsmk-color-outline-subtle': 'rgb(5 54 89 / 0.05)',
196
207
  // Elevation ladder
197
208
  '--ngxsmk-color-surface-1': '#FFFFFF',
198
209
  '--ngxsmk-color-surface-2': theme.neutral[50],
@@ -254,12 +265,17 @@ function darkVars(theme) {
254
265
  '--ngxsmk-color-on-surface': '#DFE2E5',
255
266
  '--ngxsmk-color-surface-variant': '#28292C',
256
267
  '--ngxsmk-color-on-surface-variant': '#AAAFB5',
268
+ '--ngxsmk-color-surface-muted': '#141416',
269
+ '--ngxsmk-color-surface-elevated': '#28292C',
270
+ '--ngxsmk-color-surface-overlay': '#2F3136',
271
+ '--ngxsmk-color-on-surface-muted': '#777C85',
257
272
  '--ngxsmk-color-surface-hover': 'rgb(255 255 255 / 0.05)',
258
273
  '--ngxsmk-color-surface-active': 'rgb(255 255 255 / 0.1)',
259
274
  '--ngxsmk-color-surface-container': '#28292C',
260
275
  '--ngxsmk-color-outline': 'rgb(242 244 246 / 0.1)',
261
276
  '--ngxsmk-color-outline-strong': '#494D53',
262
277
  '--ngxsmk-color-outline-variant': 'rgb(242 244 246 / 0.06)',
278
+ '--ngxsmk-color-outline-subtle': 'rgb(242 244 246 / 0.05)',
263
279
  // Elevation ladder
264
280
  '--ngxsmk-color-surface-1': theme.neutral[800],
265
281
  '--ngxsmk-color-surface-2': theme.neutral[700],
@@ -353,4 +369,4 @@ export function buildThemeCss(config) {
353
369
  ].join('\n\n');
354
370
  return `/* Generated by @ngxsmk/theme — do not edit by hand. */\n${root}\n\n${darkBlock}\n\n${reducedMotion}\n`;
355
371
  }
356
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUvc3JjL2xpYi9jc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLGVBQWUsRUFDZixXQUFXLEVBQ1gsU0FBUyxFQUNULE9BQU8sRUFDUCxPQUFPLEVBQ1AsUUFBUSxHQUNULE1BQU0sVUFBVSxDQUFDO0FBSWxCLFNBQVMsU0FBUyxDQUFDLE1BQWMsRUFBRSxLQUFpQjtJQUNsRCxNQUFNLElBQUksR0FBUyxFQUFFLENBQUM7SUFDdEIsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsa0JBQWtCLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsK0VBQStFO0FBQy9FLE1BQU0sd0JBQXdCLEdBQXlCO0lBQ3JELE1BQU0sRUFBRTtRQUNOLG9CQUFvQixFQUFFLDZCQUE2QjtRQUNuRCx1QkFBdUIsRUFBRSxnQ0FBZ0M7UUFDekQsNkJBQTZCLEVBQUUseUJBQXlCO1FBQ3hELDZCQUE2QixFQUFFLEtBQUs7UUFDcEMsd0JBQXdCLEVBQUUsMkJBQTJCO1FBQ3JELGtDQUFrQyxFQUFFLEtBQUs7S0FDMUM7SUFDRCxJQUFJLEVBQUU7UUFDSixrQkFBa0IsRUFBRSw2QkFBNkI7UUFDakQsc0JBQXNCLEVBQUUseUJBQXlCO1FBQ2pELHNCQUFzQixFQUFFLHlCQUF5QjtRQUNqRCw0QkFBNEIsRUFBRSw2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QUEwQztZQUMxQyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUNwQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSw0RUFBNEU7SUFDNUUseUVBQXlFO0lBQ3pFLE1BQU0sV0FBVyxHQUFTO1FBQ3hCLDBCQUEwQixFQUFFLEtBQUs7UUFDakMscUJBQXFCLEVBQUUsTUFBTTtRQUM3QixzQkFBc0IsRUFBRSxNQUFNO0tBQy9CLENBQUM7SUFDRixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDOUMsV0FBVyxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNsRCxDQUFDO0lBQ0QsTUFBTSxhQUFhLEdBQUc7UUFDcEIsOENBQThDLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLO1FBQ3BGLEtBQUssQ0FBQyxtREFBbUQsRUFBRSxXQUFXLENBQUM7S0FDeEUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDZixPQUFPLDREQUE0RCxJQUFJLE9BQU8sU0FBUyxPQUFPLGFBQWEsSUFBSSxDQUFDO0FBQ2xILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXJpdmVTY2FsZSwgcm90YXRlSHVlLCBzaGlmdExpZ2h0bmVzcyB9IGZyb20gJy4vY29sb3InO1xuaW1wb3J0IHsgcmVzb2x2ZVRoZW1lIH0gZnJvbSAnLi9kZWZpbmUtY29uZmlnJztcbmltcG9ydCB7IENvbG9yU2NhbGUsIFJlc29sdmVkVGhlbWUsIFRoZW1lQ29uZmlnLCBUeXBlUm9sZVNpemUsIFR5cGVTdHlsZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgQ09OVFJPTF9IRUlHSFQsXG4gIENPTlRST0xfSEVJR0hUUyxcbiAgRk9OVF9XRUlHSFQsXG4gIElDT05fU0laRSxcbiAgTEVBRElORyxcbiAgT1BBQ0lUWSxcbiAgVFJBQ0tJTkcsXG59IGZyb20gJy4vdG9rZW5zJztcblxudHlwZSBWYXJzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuZnVuY3Rpb24gc2NhbGVWYXJzKHByZWZpeDogc3RyaW5nLCBzY2FsZTogQ29sb3JTY2FsZSk6IFZhcnMge1xuICBjb25zdCB2YXJzOiBWYXJzID0ge307XG4gIGZvciAoY29uc3QgW3N0ZXAsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzY2FsZSkpIHtcbiAgICB2YXJzW2AtLW5neHNtay1jb2xvci0ke3ByZWZpeH0tJHtzdGVwfWBdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhcnM7XG59XG5cbi8qKiBEZWZhdWx0IENTUyBjdXN0b20gcHJvcGVydGllcyBmb3IgZWFjaCBjb21wb25lbnQsIGVtaXR0ZWQgb25jZSBpbiA6cm9vdC4gKi9cbmNvbnN0IENPTVBPTkVOVF9UT0tFTl9ERUZBVUxUUzogUmVjb3JkPHN0cmluZywgVmFycz4gPSB7XG4gIGJ1dHRvbjoge1xuICAgICctLW5neHNtay1idXR0b24tYmcnOiAndmFyKC0tbmd4c21rLWNvbG9yLXByaW1hcnkpJyxcbiAgICAnLS1uZ3hzbWstYnV0dG9uLWNvbG9yJzogJ3ZhcigtLW5neHNtay1jb2xvci1vbi1wcmltYXJ5KScsXG4gICAgJy0tbmd4c21rLWJ1dHRvbi1mb250LWZhbWlseSc6ICd2YXIoLS1uZ3hzbWstZm9udC1zYW5zKScsXG4gICAgJy0tbmd4c21rLWJ1dHRvbi1mb250LXdlaWdodCc6ICc1MDAnLFxuICAgICctLW5neHNtay1idXR0b24tcmFkaXVzJzogJ3ZhcigtLW5neHNtay1yYWRpdXMtYmFzZSknLFxuICAgICctLW5neHNtay1idXR0b24tZGlzYWJsZWQtb3BhY2l0eSc6ICcwLjUnLFxuICB9LFxuICBjYXJkOiB7XG4gICAgJy0tbmd4c21rLWNhcmQtYmcnOiAndmFyKC0tbmd4c21rLWNvbG9yLXN1cmZhY2UpJyxcbiAgICAnLS1uZ3hzbWstY2FyZC1yYWRpdXMnOiAndmFyKC0tbmd4c21rLXJhZGl1cy14bCknLFxuICAgICctLW5neHNtay1jYXJkLXNoYWRvdyc6ICd2YXIoLS1uZ3hzbWstc2hhZG93LXNtKScsXG4gICAgJy0tbmd4c21rLWNhcmQtYm9yZGVyLWNvbG9yJzogJ3ZhcigtLW5neHNtay1jb2xvci1vdXRsaW5lKScsXG4gIH0sXG4gIGFjY29yZGlvbjoge1xuICAgICctLW5neHNtay1hY2NvcmRpb24tYmcnOiAndmFyKC0tbmd4c21rLWNvbG9yLXN1cmZhY2UpJyxcbiAgICAnLS1uZ3hzbWstYWNjb3JkaW9uLXJhZGl1cyc6ICd2YXIoLS1uZ3hzbWstcmFkaXVzLWxnKScsXG4gICAgJy0tbmd4c21rLWFjY29yZGlvbi1ib3JkZXItY29sb3InOiAndmFyKC0tbmd4c21rLWNvbG9yLW91dGxpbmUpJyxcbiAgfSxcbiAgcHJvZ3Jlc3M6IHtcbiAgICAnLS1uZ3hzbWstcHJvZ3Jlc3MtaGVpZ2h0JzogJzAuNXJlbScsXG4gICAgJy0tbmd4c21rLXByb2dyZXNzLWJnJzogJ3ZhcigtLW5neHNtay1jb2xvci1zdXJmYWNlLXZhcmlhbnQpJyxcbiAgICAnLS1uZ3hzbWstcHJvZ3Jlc3MtY29sb3InOiAndmFyKC0tbmd4c21rLWNvbG9yLXByaW1hcnkpJyxcbiAgICAnLS1uZ3hzbWstcHJvZ3Jlc3MtcmFkaXVzJzogJ3ZhcigtLW5neHNtay1yYWRpdXMtZnVsbCknLFxuICB9LFxuICBzd2l0Y2g6IHtcbiAgICAnLS1uZ3hzbWstc3dpdGNoLXdpZHRoJzogJzIuMjVyZW0nLFxuICAgICctLW5neHNtay1zd2l0Y2gtaGVpZ2h0JzogJzEuMjVyZW0nLFxuICAgICctLW5neHNtay1zd2l0Y2gtcmFkaXVzJzogJ3ZhcigtLW5neHNtay1yYWRpdXMtZnVsbCknLFxuICAgICctLW5neHNtay1zd2l0Y2gtYmcnOiAndmFyKC0tbmd4c21rLWNvbG9yLW91dGxpbmUtc3Ryb25nKScsXG4gICAgJy0tbmd4c21rLXN3aXRjaC10aHVtYi1zaXplJzogJzAuODc1cmVtJyxcbiAgICAnLS1uZ3hzbWstc3dpdGNoLXRodW1iLWJnJzogJ3ZhcigtLW5neHNtay1jb2xvci1zdXJmYWNlKScsXG4gICAgJy0tbmd4c21rLXN3aXRjaC1jaGVja2VkLWJnJzogJ3ZhcigtLW5neHNtay1jb2xvci1wcmltYXJ5KScsXG4gIH0sXG4gIHNwcmVhZHNoZWV0OiB7XG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWJnJzogJ3ZhcigtLW5neHNtay1jb2xvci1zdXJmYWNlKScsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWhlYWRlci1iZyc6ICd2YXIoLS1uZ3hzbWstY29sb3Itc3VyZmFjZS12YXJpYW50KScsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWhlYWRlci1jb2xvcic6ICd2YXIoLS1uZ3hzbWstY29sb3Itb24tc3VyZmFjZS12YXJpYW50KScsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWJvcmRlcic6ICd2YXIoLS1uZ3hzbWstY29sb3Itb3V0bGluZSknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1ncmlkLWNvbG9yJzogJ3ZhcigtLW5neHNtay1jb2xvci1vdXRsaW5lLXZhcmlhbnQpJyxcbiAgICAnLS1uZ3hzbWstc3ByZWFkc2hlZXQtaG92ZXItYmcnOiAndmFyKC0tbmd4c21rLWNvbG9yLXN1cmZhY2UtaG92ZXIpJyxcbiAgICAnLS1uZ3hzbWstc3ByZWFkc2hlZXQtc2VsZWN0ZWQtYmcnOlxuICAgICAgJ2NvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1uZ3hzbWstY29sb3ItcHJpbWFyeSkgMTIlLCB0cmFuc3BhcmVudCknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1hY3RpdmUtYm9yZGVyJzogJ3ZhcigtLW5neHNtay1jb2xvci1wcmltYXJ5KScsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWZvbnQnOiAndmFyKC0tbmd4c21rLWZvbnQtc2FucyknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1mb250LW1vbm8nOiAndmFyKC0tbmd4c21rLWZvbnQtbW9ubyknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1yb3ctaGVpZ2h0JzogJzIuMjVyZW0nLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1oZWFkZXItaGVpZ2h0JzogJzIuNXJlbScsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWNlbGwtcGFkZGluZyc6ICc2cHggMTBweCcsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWNlbGwtZm9udC1zaXplJzogJ3ZhcigtLW5neHNtay10ZXh0LWJvZHktc20tc2l6ZSknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1zY3JvbGxiYXItc2l6ZSc6ICc4cHgnLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1zaGFkb3cnOiAndmFyKC0tbmd4c21rLXNoYWRvdy1zbSknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1yYWRpdXMnOiAndmFyKC0tbmd4c21rLXJhZGl1cy1sZyknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1lZGl0LWJnJzogJ3ZhcigtLW5neHNtay1jb2xvci1zdXJmYWNlKScsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWVkaXQtYm9yZGVyJzogJ3ZhcigtLW5neHNtay1jb2xvci1wcmltYXJ5KScsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LXJvdy1ob3Zlci1iZyc6ICd2YXIoLS1uZ3hzbWstY29sb3Itc3VyZmFjZS1ob3ZlciknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1jb2wtaG92ZXItYmcnOlxuICAgICAgJ2NvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1uZ3hzbWstY29sb3ItcHJpbWFyeSkgNiUsIHRyYW5zcGFyZW50KScsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWZyb3plbi1zaGFkb3cnOiAnMnB4IDAgNHB4IHJnYmEoMCwwLDAsMC4wOCknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1zZWxlY3Rpb24tcmFuZ2UnOlxuICAgICAgJ2NvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1uZ3hzbWstY29sb3ItcHJpbWFyeSkgOCUsIHRyYW5zcGFyZW50KScsXG4gIH0sXG4gIGlucHV0R3JvdXA6IHtcbiAgICAnLS1uZ3hzbWstaW5wdXQtZ3JvdXAtYmcnOiAndmFyKC0tbmd4c21rLWNvbG9yLXN1cmZhY2UpJyxcbiAgICAnLS1uZ3hzbWstaW5wdXQtZ3JvdXAtYm9yZGVyJzogJ3ZhcigtLW5neHNtay1jb2xvci1vdXRsaW5lLXN0cm9uZyknLFxuICAgICctLW5neHNtay1pbnB1dC1ncm91cC1yYWRpdXMnOiAndmFyKC0tbmd4c21rLXJhZGl1cy1tZCknLFxuICAgICctLW5neHNtay1pbnB1dC1ncm91cC1zaGFkb3cnOiAnbm9uZScsXG4gICAgJy0tbmd4c21rLWlucHV0LWdyb3VwLWZvY3VzLWJvcmRlcic6ICd2YXIoLS1uZ3hzbWstY29sb3ItcHJpbWFyeSknLFxuICAgICctLW5neHNtay1pbnB1dC1ncm91cC1mb2N1cy1zaGFkb3cnOlxuICAgICAgJzAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbmd4c21rLWNvbG9yLXByaW1hcnkpIDE1JSwgdHJhbnNwYXJlbnQpJyxcbiAgICAnLS1uZ3hzbWstaW5wdXQtZ3JvdXAtZXJyb3ItYm9yZGVyJzogJ3ZhcigtLW5neHNtay1jb2xvci1lcnJvciknLFxuICAgICctLW5neHNtay1pbnB1dC1ncm91cC1lcnJvci1mb2N1cy1zaGFkb3cnOlxuICAgICAgJzAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbmd4c21rLWNvbG9yLWVycm9yKSAxNSUsIHRyYW5zcGFyZW50KScsXG4gICAgJy0tbmd4c21rLWlucHV0LWdyb3VwLXN1Y2Nlc3MtYm9yZGVyJzogJ3ZhcigtLW5neHNtay1jb2xvci1zdWNjZXNzKScsXG4gICAgJy0tbmd4c21rLWlucHV0LWdyb3VwLXdhcm5pbmctYm9yZGVyJzogJ3ZhcigtLW5neHNtay1jb2xvci13YXJuaW5nKScsXG4gICAgJy0tbmd4c21rLWlucHV0LWdyb3VwLWhlaWdodCc6ICcyLjVyZW0nLFxuICAgICctLW5neHNtay1pbnB1dC1ncm91cC1wYWRkaW5nJzogJzAuNzVyZW0nLFxuICAgICctLW5neHNtay1pbnB1dC1ncm91cC1nYXAnOiAndmFyKC0tbmd4c21rLXNwYWNlLTIpJyxcbiAgICAnLS1uZ3hzbWstaW5wdXQtZ3JvdXAtZm9udCc6ICd2YXIoLS1uZ3hzbWstZm9udC1zYW5zKScsXG4gIH0sXG59O1xuXG4vKiogVG9rZW5zIHRoYXQgZG8gbm90IGNoYW5nZSBiZXR3ZWVuIGxpZ2h0IGFuZCBkYXJrIG1vZGUuICovXG5mdW5jdGlvbiBzdGF0aWNWYXJzKHRoZW1lOiBSZXNvbHZlZFRoZW1lKTogVmFycyB7XG4gIGNvbnN0IHZhcnM6IFZhcnMgPSB7XG4gICAgLi4uc2NhbGVWYXJzKCdicmFuZCcsIHRoZW1lLmJyYW5kKSxcbiAgICAuLi5zY2FsZVZhcnMoJ3NlY29uZGFyeScsIHRoZW1lLnNlY29uZGFyeSksXG4gICAgLi4uc2NhbGVWYXJzKCduZXV0cmFsJywgdGhlbWUubmV1dHJhbCksXG4gICAgJy0tbmd4c21rLWZvbnQtc2Fucyc6IHRoZW1lLmZvbnRGYW1pbHkuc2FucyxcbiAgICAnLS1uZ3hzbWstZm9udC1tb25vJzogdGhlbWUuZm9udEZhbWlseS5tb25vLFxuICAgICctLW5neHNtay1yYWRpdXMtYmFzZSc6IHRoZW1lLnJhZGl1c1t0aGVtZS5yYWRpdXNCYXNlXSxcbiAgICAnLS1uZ3hzbWstY29udHJvbC1oZWlnaHQnOiBDT05UUk9MX0hFSUdIVCxcblxuICAgIC8vIE1vdGlvbiBUb2tlbnNcbiAgICAnLS1uZ3hzbWstbW90aW9uLWR1cmF0aW9uJzogJ3ZhcigtLW5neHNtay1kdXJhdGlvbi1ub3JtYWwpJyxcbiAgICAnLS1uZ3hzbWstbW90aW9uLWVhc2UnOiAndmFyKC0tbmd4c21rLWVhc2UtaW4tb3V0KScsXG5cbiAgICAvLyBJbnRlcmFjdGl2ZS1zdGF0ZSBtb3Rpb246IHNoYXJlZCBsaWZ0L3ByZXNzIHRyYW5zZm9ybXMuIE5ldXRyYWxpemVkIHRvXG4gICAgLy8gYG5vbmVgIHVuZGVyIHByZWZlcnMtcmVkdWNlZC1tb3Rpb24gKHNlZSBidWlsZFRoZW1lQ3NzKS5cbiAgICAnLS1uZ3hzbWstaG92ZXItbGlmdCc6ICd0cmFuc2xhdGVZKC0xcHgpJyxcbiAgICAnLS1uZ3hzbWstcHJlc3Mtc2NhbGUnOiAnc2NhbGUoMC45OCknLFxuXG4gICAgLy8gRm9jdXMgcmluZzogVEhFIGZvY3VzIGluZGljYXRvciBmb3IgZXZlcnkgY29tcG9uZW50LiBBbGlhc2VzIHRoZVxuICAgIC8vIG1vZGUtYXdhcmUgLS1uZ3hzbWstc2hhZG93LWZvY3VzOyB0aGUgZXJyb3IgdmFyaWFudCBkZXJpdmVzIGZyb20gdGhlXG4gICAgLy8gc2VtYW50aWMgZXJyb3Igcm9sZSBzbyBpbnZhbGlkIGNvbnRyb2xzIHJpbmcgcmVkIGluIGJvdGggbW9kZXMuXG4gICAgJy0tbmd4c21rLWZvY3VzLXJpbmcnOiAndmFyKC0tbmd4c21rLXNoYWRvdy1mb2N1cyknLFxuICAgICctLW5neHNtay1mb2N1cy1yaW5nLWVycm9yJzpcbiAgICAgICcwIDAgMCAycHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW5neHNtay1jb2xvci1lcnJvcikgMTUlLCB0cmFuc3BhcmVudCksICcgK1xuICAgICAgJzAgMCAwIDRweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbmd4c21rLWNvbG9yLWVycm9yKSA0NSUsIHRyYW5zcGFyZW50KScsXG5cbiAgICAvLyBDb21wb25lbnQtc3BlY2lmaWMgdG9rZW4gZGVmYXVsdHNcbiAgICAuLi5PYmplY3QudmFsdWVzKENPTVBPTkVOVF9UT0tFTl9ERUZBVUxUUykucmVkdWNlKFxuICAgICAgKG1lcmdlZCwgdG9rZW5zKSA9PiAoeyAuLi5tZXJnZWQsIC4uLnRva2VucyB9KSxcbiAgICAgIHt9IGFzIFZhcnMsXG4gICAgKSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhDT05UUk9MX0hFSUdIVFMpKSB7XG4gICAgdmFyc1tgLS1uZ3hzbWstY29udHJvbC1oZWlnaHQtJHtrZXl9YF0gPSB2YWx1ZTtcbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhPUEFDSVRZKSkge1xuICAgIHZhcnNbYC0tbmd4c21rLW9wYWNpdHktJHtrZXl9YF0gPSB2YWx1ZTtcbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhJQ09OX1NJWkUpKSB7XG4gICAgdmFyc1tgLS1uZ3hzbWstaWNvbi0ke2tleX1gXSA9IHZhbHVlO1xuICB9XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKFRSQUNLSU5HKSkge1xuICAgIHZhcnNbYC0tbmd4c21rLXRyYWNraW5nLSR7a2V5fWBdID0gdmFsdWU7XG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoRk9OVF9XRUlHSFQpKSB7XG4gICAgdmFyc1tgLS1uZ3hzbWstZm9udC13ZWlnaHQtJHtrZXl9YF0gPSB2YWx1ZTtcbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhMRUFESU5HKSkge1xuICAgIHZhcnNbYC0tbmd4c21rLWxlYWRpbmctJHtrZXl9YF0gPSB2YWx1ZTtcbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGVtZS5zcGFjaW5nKSkge1xuICAgIHZhcnNbYC0tbmd4c21rLXNwYWNlLSR7a2V5fWBdID0gdmFsdWU7XG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhlbWUucmFkaXVzKSkge1xuICAgIHZhcnNbYC0tbmd4c21rLXJhZGl1cy0ke2tleX1gXSA9IHZhbHVlO1xuICB9XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoZW1lLnNoYWRvdykpIHtcbiAgICB2YXJzW2AtLW5neHNtay1zaGFkb3ctJHtrZXl9YF0gPSB2YWx1ZTtcbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGVtZS5kdXJhdGlvbikpIHtcbiAgICB2YXJzW2AtLW5neHNtay1kdXJhdGlvbi0ke2tleX1gXSA9IHZhbHVlO1xuICB9XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoZW1lLmVhc2luZykpIHtcbiAgICB2YXJzW2AtLW5neHNtay1lYXNlLSR7a2V5fWBdID0gdmFsdWU7XG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhlbWUuekluZGV4KSkge1xuICAgIHZhcnNbYC0tbmd4c21rLXotJHtrZXl9YF0gPSB2YWx1ZTtcbiAgfVxuXG4gIGNvbnN0IHNpemVzID0geyBsYXJnZTogJ2xnJywgbWVkaXVtOiAnbWQnLCBzbWFsbDogJ3NtJyB9IGFzIGNvbnN0O1xuICBmb3IgKGNvbnN0IFtyb2xlLCBzdHlsZXNdIG9mIE9iamVjdC5lbnRyaWVzKHRoZW1lLnR5cG9ncmFwaHkpKSB7XG4gICAgZm9yIChjb25zdCBbc2l6ZSwgc3VmZml4XSBvZiBPYmplY3QuZW50cmllcyhzaXplcykpIHtcbiAgICAgIGNvbnN0IHN0eWxlOiBUeXBlU3R5bGUgPSBzdHlsZXNbc2l6ZSBhcyBUeXBlUm9sZVNpemVdO1xuICAgICAgdmFyc1tgLS1uZ3hzbWstdGV4dC0ke3JvbGV9LSR7c3VmZml4fS1zaXplYF0gPSBzdHlsZS5zaXplO1xuICAgICAgdmFyc1tgLS1uZ3hzbWstdGV4dC0ke3JvbGV9LSR7c3VmZml4fS1saW5lYF0gPSBzdHlsZS5saW5lSGVpZ2h0O1xuICAgICAgdmFyc1tgLS1uZ3hzbWstdGV4dC0ke3JvbGV9LSR7c3VmZml4fS13ZWlnaHRgXSA9IHN0eWxlLndlaWdodDtcbiAgICB9XG4gIH1cblxuICAvLyBFeHRyYS1zbWFsbCBib2R5IHRleHQgZm9yIGRlbnNlIG1ldGFkYXRhIHJvd3M7IGJlbG93IHRoZSBzbWFsbGVzdFxuICAvLyBUeXBlUm9sZVNpemUgc28gaXQgaXMgZW1pdHRlZCBvdXRzaWRlIHRoZSByb2xlIGxvb3AuXG4gIHZhcnNbJy0tbmd4c21rLXRleHQtYm9keS14cy1zaXplJ10gPSAnMC42ODc1cmVtJztcbiAgdmFyc1snLS1uZ3hzbWstdGV4dC1ib2R5LXhzLWxpbmUnXSA9ICcxcmVtJztcbiAgdmFyc1snLS1uZ3hzbWstdGV4dC1ib2R5LXhzLXdlaWdodCddID0gJzQwMCc7XG5cbiAgcmV0dXJuIHZhcnM7XG59XG5cbi8qKiBTZW1hbnRpYyByb2xlIHRva2VucyBmb3IgbGlnaHQgbW9kZS4gKi9cbmZ1bmN0aW9uIGxpZ2h0VmFycyh0aGVtZTogUmVzb2x2ZWRUaGVtZSk6IFZhcnMge1xuICBjb25zdCB2YXJzOiBWYXJzID0ge1xuICAgICdjb2xvci1zY2hlbWUnOiAnbGlnaHQnLFxuXG4gICAgJy0tbmd4c21rLWNvbG9yLXByaW1hcnknOiB0aGVtZS5icmFuZEJhc2UsXG4gICAgJy0tbmd4c21rLWNvbG9yLW9uLXByaW1hcnknOiAnI0ZGRkZGRicsXG4gICAgJy0tbmd4c21rLWNvbG9yLXByaW1hcnktaG92ZXInOiBzaGlmdExpZ2h0bmVzcyh0aGVtZS5icmFuZEJhc2UsIC04KSxcbiAgICAnLS1uZ3hzbWstY29sb3ItcHJpbWFyeS1hY3RpdmUnOiBzaGlmdExpZ2h0bmVzcyh0aGVtZS5icmFuZEJhc2UsIC0xNCksXG4gICAgJy0tbmd4c21rLWNvbG9yLXByaW1hcnktY29udGFpbmVyJzogdGhlbWUuYnJhbmRbMTAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3Itb24tcHJpbWFyeS1jb250YWluZXInOiB0aGVtZS5icmFuZFs5MDBdLFxuXG4gICAgJy0tbmd4c21rLWNvbG9yLXNlY29uZGFyeSc6IHRoZW1lLnNlY29uZGFyeUJhc2UsXG4gICAgJy0tbmd4c21rLWNvbG9yLW9uLXNlY29uZGFyeSc6ICcjRkZGRkZGJyxcbiAgICAnLS1uZ3hzbWstY29sb3Itc2Vjb25kYXJ5LWhvdmVyJzogc2hpZnRMaWdodG5lc3ModGhlbWUuc2Vjb25kYXJ5QmFzZSwgLTgpLFxuICAgICctLW5neHNtay1jb2xvci1zZWNvbmRhcnktYWN0aXZlJzogc2hpZnRMaWdodG5lc3ModGhlbWUuc2Vjb25kYXJ5QmFzZSwgLTE0KSxcbiAgICAnLS1uZ3hzbWstY29sb3Itc2Vjb25kYXJ5LWNvbnRhaW5lcic6IHRoZW1lLnNlY29uZGFyeVsxMDBdLFxuICAgICctLW5neHNtay1jb2xvci1vbi1zZWNvbmRhcnktY29udGFpbmVyJzogdGhlbWUuc2Vjb25kYXJ5WzkwMF0sXG5cbiAgICAvLyBEZWZhdWx0IGxpZ2h0IHRoZW1lOiBjb29sLWdyZXkgYm9keSwgd2hpdGUgY2FyZHMgZmxvYXRpbmcgb24gdG9wLCBoYWlybGluZSBib3JkZXJzLlxuICAgICctLW5neHNtay1jb2xvci1iYWNrZ3JvdW5kJzogdGhlbWUubmV1dHJhbFs1MF0sXG4gICAgJy0tbmd4c21rLWNvbG9yLW9uLWJhY2tncm91bmQnOiAnIzBBMTMxNycsXG4gICAgJy0tbmd4c21rLWNvbG9yLXN1cmZhY2UnOiAnI0ZGRkZGRicsXG4gICAgJy0tbmd4c21rLWNvbG9yLW9uLXN1cmZhY2UnOiAnIzBBMTMxNycsXG4gICAgJy0tbmd4c21rLWNvbG9yLXN1cmZhY2UtdmFyaWFudCc6IHRoZW1lLm5ldXRyYWxbMTAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3Itb24tc3VyZmFjZS12YXJpYW50JzogdGhlbWUubmV1dHJhbFs1MDBdLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLWhvdmVyJzogJ3JnYig1IDU0IDg5IC8gMC4wNSknLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLWFjdGl2ZSc6ICdyZ2IoNSA1NCA4OSAvIDAuMSknLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLWNvbnRhaW5lcic6ICcjRkZGRkZGJyxcbiAgICAnLS1uZ3hzbWstY29sb3Itb3V0bGluZSc6ICdyZ2IoNSA1NCA4OSAvIDAuMSknLFxuICAgICctLW5neHNtay1jb2xvci1vdXRsaW5lLXN0cm9uZyc6IHRoZW1lLm5ldXRyYWxbMjAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3Itb3V0bGluZS12YXJpYW50JzogJ3JnYig1IDU0IDg5IC8gMC4wNiknLFxuXG4gICAgLy8gRWxldmF0aW9uIGxhZGRlclxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLTEnOiAnI0ZGRkZGRicsXG4gICAgJy0tbmd4c21rLWNvbG9yLXN1cmZhY2UtMic6IHRoZW1lLm5ldXRyYWxbNTBdLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLTMnOiB0aGVtZS5uZXV0cmFsWzEwMF0sXG4gICAgJy0tbmd4c21rLWNvbG9yLXN1cmZhY2UtNCc6IHRoZW1lLm5ldXRyYWxbMjAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3Itc3VyZmFjZS01JzogdGhlbWUubmV1dHJhbFszMDBdLFxuXG4gICAgJy0tbmd4c21rLWNvbG9yLXJpbmcnOiB0aGVtZS5icmFuZEJhc2UsXG4gICAgJy0tbmd4c21rLWNvbG9yLWJhY2tkcm9wJzogJ3JnYigxIDE4IDQwIC8gMC40KScsXG4gICAgJy0tbmd4c21rLXNoYWRvdy1mb2N1cyc6IGAwIDAgMCAycHggJHt0aGVtZS5icmFuZFsxMDBdfSwgMCAwIDAgNHB4IGNvbG9yLW1peChpbiBzcmdiLCAke3RoZW1lLmJyYW5kQmFzZX0gNDUlLCB0cmFuc3BhcmVudClgLFxuXG4gICAgLy8gQ2F0ZWdvcmljYWwgY2hhcnQgcGFsZXR0ZSDigJQgYSBmaXhlZCA4LWh1ZSBxdWFsaXRhdGl2ZSBzZXQgKE5PVCBkZXJpdmVkXG4gICAgLy8gZnJvbSB0aGUgYnJhbmQsIHNvIGFkamFjZW50IHNlcmllcyBzdGF5IGRpc3Rpbmd1aXNoYWJsZSBhY3Jvc3MgdGhlbWVzKSxcbiAgICAvLyBzdGVwcGVkIGZvciB0aGUgbGlnaHQgc3VyZmFjZS4gVmFsaWRhdGVkIGZvciB0aGUgbGlnaHQgY2hhcnQgc3VyZmFjZTpcbiAgICAvLyBDVkQgd29yc3QtYWRqYWNlbnQgzpRFIDI0LjIsIGNocm9tYS9saWdodG5lc3MgaW4tYmFuZC4gQ2hhcnRzIHJlYWQgdGhlc2VcbiAgICAvLyB2aWEgZ2V0Q29tcHV0ZWRTdHlsZTsgY29uc3VtZXJzIGNhbiBvdmVycmlkZSBhbnkgc2xvdCB0byByZWJyYW5kIHNlcmllcy5cbiAgICAnLS1uZ3hzbWstY2hhcnQtMSc6ICcjMkE3OEQ2JyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtMic6ICcjMUJBRjdBJyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtMyc6ICcjRURBMTAwJyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtNCc6ICcjMDA4MzAwJyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtNSc6ICcjNEEzQUE3JyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtNic6ICcjRTM0OTQ4JyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtNyc6ICcjRTg3QkE0JyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtOCc6ICcjRUI2ODM0JyxcbiAgfTtcblxuICBjb25zdCB0ZXJ0aWFyeSA9IGRlcml2ZVNjYWxlKHJvdGF0ZUh1ZSh0aGVtZS5icmFuZEJhc2UsIDY0KSk7XG4gIHZhcnNbJy0tbmd4c21rLWNvbG9yLXRlcnRpYXJ5J10gPSB0ZXJ0aWFyeVs1MDBdO1xuICB2YXJzWyctLW5neHNtay1jb2xvci1vbi10ZXJ0aWFyeSddID0gJyNGRkZGRkYnO1xuICB2YXJzWyctLW5neHNtay1jb2xvci10ZXJ0aWFyeS1jb250YWluZXInXSA9IHRlcnRpYXJ5WzEwMF07XG4gIHZhcnNbJy0tbmd4c21rLWNvbG9yLW9uLXRlcnRpYXJ5LWNvbnRhaW5lciddID0gdGVydGlhcnlbOTAwXTtcblxuICBmb3IgKGNvbnN0IFtuYW1lLCBoZXhdIG9mIE9iamVjdC5lbnRyaWVzKHRoZW1lLnNlbWFudGljKSkge1xuICAgIGNvbnN0IHNjYWxlID0gZGVyaXZlU2NhbGUoaGV4KTtcbiAgICB2YXJzW2AtLW5neHNtay1jb2xvci0ke25hbWV9YF0gPSBoZXg7XG4gICAgdmFyc1tgLS1uZ3hzbWstY29sb3Itb24tJHtuYW1lfWBdID0gJyNGRkZGRkYnO1xuICAgIHZhcnNbYC0tbmd4c21rLWNvbG9yLSR7bmFtZX0tY29udGFpbmVyYF0gPSBzY2FsZVsxMDBdO1xuICAgIHZhcnNbYC0tbmd4c21rLWNvbG9yLW9uLSR7bmFtZX0tY29udGFpbmVyYF0gPSBzY2FsZVs4MDBdO1xuICB9XG5cbiAgcmV0dXJuIHsgLi4udmFycywgLi4udGhlbWUub3ZlcnJpZGVzLmxpZ2h0IH07XG59XG5cbi8qKiBTZW1hbnRpYyByb2xlIHRva2VucyBmb3IgZGFyayBtb2RlLiAqL1xuZnVuY3Rpb24gZGFya1ZhcnModGhlbWU6IFJlc29sdmVkVGhlbWUpOiBWYXJzIHtcbiAgY29uc3QgdmFyczogVmFycyA9IHtcbiAgICAnY29sb3Itc2NoZW1lJzogJ2RhcmsnLFxuXG4gICAgJy0tbmd4c21rLWNvbG9yLXByaW1hcnknOiB0aGVtZS5icmFuZFs0MDBdLFxuICAgICctLW5neHNtay1jb2xvci1vbi1wcmltYXJ5JzogJyNGRkZGRkYnLFxuICAgICctLW5neHNtay1jb2xvci1wcmltYXJ5LWhvdmVyJzogdGhlbWUuYnJhbmRbMzAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3ItcHJpbWFyeS1hY3RpdmUnOiB0aGVtZS5icmFuZFsyMDBdLFxuICAgICctLW5neHNtay1jb2xvci1wcmltYXJ5LWNvbnRhaW5lcic6IHRoZW1lLmJyYW5kWzkwMF0sXG4gICAgJy0tbmd4c21rLWNvbG9yLW9uLXByaW1hcnktY29udGFpbmVyJzogdGhlbWUuYnJhbmRbMTAwXSxcblxuICAgICctLW5neHNtay1jb2xvci1zZWNvbmRhcnknOiB0aGVtZS5zZWNvbmRhcnlbNDAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3Itb24tc2Vjb25kYXJ5JzogJyNGRkZGRkYnLFxuICAgICctLW5neHNtay1jb2xvci1zZWNvbmRhcnktaG92ZXInOiB0aGVtZS5zZWNvbmRhcnlbMzAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3Itc2Vjb25kYXJ5LWFjdGl2ZSc6IHRoZW1lLnNlY29uZGFyeVsyMDBdLFxuICAgICctLW5neHNtay1jb2xvci1zZWNvbmRhcnktY29udGFpbmVyJzogdGhlbWUuc2Vjb25kYXJ5WzkwMF0sXG4gICAgJy0tbmd4c21rLWNvbG9yLW9uLXNlY29uZGFyeS1jb250YWluZXInOiB0aGVtZS5zZWNvbmRhcnlbMTAwXSxcblxuICAgIC8vIERlZmF1bHQgZGFyayB0aGVtZTogbmVhci1uZXV0cmFsIGNoYXJjb2FsIGJvZHksIHNsaWdodGx5IGxpZ2h0ZXIgY2FyZCxcbiAgICAvLyBsaWdodGVyIHN0aWxsIGZvciBwb3BvdmVyczsgaGFpcmxpbmUgbGlnaHQtb24tZGFyayBib3JkZXJzLlxuICAgICctLW5neHNtay1jb2xvci1iYWNrZ3JvdW5kJzogJyMxMTExMTInLFxuICAgICctLW5neHNtay1jb2xvci1vbi1iYWNrZ3JvdW5kJzogJyNERkUyRTUnLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlJzogJyMxRjFGMjInLFxuICAgICctLW5neHNtay1jb2xvci1vbi1zdXJmYWNlJzogJyNERkUyRTUnLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLXZhcmlhbnQnOiAnIzI4MjkyQycsXG4gICAgJy0tbmd4c21rLWNvbG9yLW9uLXN1cmZhY2UtdmFyaWFudCc6ICcjQUFBRkI1JyxcbiAgICAnLS1uZ3hzbWstY29sb3Itc3VyZmFjZS1ob3Zlcic6ICdyZ2IoMjU1IDI1NSAyNTUgLyAwLjA1KScsXG4gICAgJy0tbmd4c21rLWNvbG9yLXN1cmZhY2UtYWN0aXZlJzogJ3JnYigyNTUgMjU1IDI1NSAvIDAuMSknLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLWNvbnRhaW5lcic6ICcjMjgyOTJDJyxcbiAgICAnLS1uZ3hzbWstY29sb3Itb3V0bGluZSc6ICdyZ2IoMjQyIDI0NCAyNDYgLyAwLjEpJyxcbiAgICAnLS1uZ3hzbWstY29sb3Itb3V0bGluZS1zdHJvbmcnOiAnIzQ5NEQ1MycsXG4gICAgJy0tbmd4c21rLWNvbG9yLW91dGxpbmUtdmFyaWFudCc6ICdyZ2IoMjQyIDI0NCAyNDYgLyAwLjA2KScsXG5cbiAgICAvLyBFbGV2YXRpb24gbGFkZGVyXG4gICAgJy0tbmd4c21rLWNvbG9yLXN1cmZhY2UtMSc6IHRoZW1lLm5ldXRyYWxbODAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3Itc3VyZmFjZS0yJzogdGhlbWUubmV1dHJhbFs3MDBdLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLTMnOiB0aGVtZS5uZXV0cmFsWzYwMF0sXG4gICAgJy0tbmd4c21rLWNvbG9yLXN1cmZhY2UtNCc6IHRoZW1lLm5ldXRyYWxbNTAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3Itc3VyZmFjZS01JzogdGhlbWUubmV1dHJhbFs0MDBdLFxuXG4gICAgJy0tbmd4c21rLWNvbG9yLXJpbmcnOiB0aGVtZS5icmFuZFs0MDBdLFxuICAgICctLW5neHNtay1jb2xvci1iYWNrZHJvcCc6ICdyZ2IoMTcgMTcgMTggLyAwLjYpJyxcbiAgICAnLS1uZ3hzbWstc2hhZG93LWZvY3VzJzogYDAgMCAwIDJweCBjb2xvci1taXgoaW4gc3JnYiwgJHt0aGVtZS5icmFuZFs0MDBdfSAyNSUsIHRyYW5zcGFyZW50KSwgMCAwIDAgNHB4IGNvbG9yLW1peChpbiBzcmdiLCAke3RoZW1lLmJyYW5kWzQwMF19IDQ1JSwgdHJhbnNwYXJlbnQpYCxcblxuICAgIC8vIENhdGVnb3JpY2FsIGNoYXJ0IHBhbGV0dGUg4oCUIHRoZSBzYW1lIGVpZ2h0IGh1ZXMgYXMgbGlnaHQsIHJlLXN0ZXBwZWQgZm9yXG4gICAgLy8gdGhlIGRhcmsgc3VyZmFjZSAobm90IGEgZGlmZmVyZW50IHBhbGV0dGUpLiBWYWxpZGF0ZWQgZm9yIHRoZSBkYXJrIGNoYXJ0XG4gICAgLy8gc3VyZmFjZTogYWxsIHNsb3RzIOKJpSAzOjEgY29udHJhc3QsIENWRCB3b3JzdC1hZGphY2VudCDOlEUgMTAuMyAoZmxvb3IgYmFuZCxcbiAgICAvLyByZWxpZXMgb24gdGhlIGxlZ2VuZC9sYWJlbHMgY2hhcnRzIGFscmVhZHkgcmVuZGVyIGZvciBzZWNvbmRhcnkgZW5jb2RpbmcpLlxuICAgICctLW5neHNtay1jaGFydC0xJzogJyMzOTg3RTUnLFxuICAgICctLW5neHNtay1jaGFydC0yJzogJyMxOTlFNzAnLFxuICAgICctLW5neHNtay1jaGFydC0zJzogJyNDOTg1MDAnLFxuICAgICctLW5neHNtay1jaGFydC00JzogJyMwMDgzMDAnLFxuICAgICctLW5neHNtay1jaGFydC01JzogJyM5MDg1RTknLFxuICAgICctLW5neHNtay1jaGFydC02JzogJyNFNjY3NjcnLFxuICAgICctLW5neHNtay1jaGFydC03JzogJyNENTUxODEnLFxuICAgICctLW5neHNtay1jaGFydC04JzogJyNEOTU5MjYnLFxuICB9O1xuXG4gIGNvbnN0IHRlcnRpYXJ5ID0gZGVyaXZlU2NhbGUocm90YXRlSHVlKHRoZW1lLmJyYW5kQmFzZSwgNjQpKTtcbiAgdmFyc1snLS1uZ3hzbWstY29sb3ItdGVydGlhcnknXSA9IHRlcnRpYXJ5WzQwMF07XG4gIHZhcnNbJy0tbmd4c21rLWNvbG9yLW9uLXRlcnRpYXJ5J10gPSB0ZXJ0aWFyeVs5NTBdO1xuICB2YXJzWyctLW5neHNtay1jb2xvci10ZXJ0aWFyeS1jb250YWluZXInXSA9IHRlcnRpYXJ5WzkwMF07XG4gIHZhcnNbJy0tbmd4c21rLWNvbG9yLW9uLXRlcnRpYXJ5LWNvbnRhaW5lciddID0gdGVydGlhcnlbMTAwXTtcblxuICBmb3IgKGNvbnN0IFtuYW1lLCBoZXhdIG9mIE9iamVjdC5lbnRyaWVzKHRoZW1lLnNlbWFudGljKSkge1xuICAgIGNvbnN0IHNjYWxlID0gZGVyaXZlU2NhbGUoaGV4KTtcbiAgICB2YXJzW2AtLW5neHNtay1jb2xvci0ke25hbWV9YF0gPSBzY2FsZVs0MDBdO1xuICAgIHZhcnNbYC0tbmd4c21rLWNvbG9yLW9uLSR7bmFtZX1gXSA9IHNjYWxlWzk1MF07XG4gICAgdmFyc1tgLS1uZ3hzbWstY29sb3ItJHtuYW1lfS1jb250YWluZXJgXSA9IHNjYWxlWzk1MF07XG4gICAgdmFyc1tgLS1uZ3hzbWstY29sb3Itb24tJHtuYW1lfS1jb250YWluZXJgXSA9IHNjYWxlWzMwMF07XG4gIH1cblxuICByZXR1cm4geyAuLi52YXJzLCAuLi50aGVtZS5vdmVycmlkZXMuZGFyayB9O1xufVxuXG5mdW5jdGlvbiBibG9jayhzZWxlY3Rvcjogc3RyaW5nLCB2YXJzOiBWYXJzLCBpbmRlbnQgPSAnJyk6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzID0gT2JqZWN0LmVudHJpZXModmFycykubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBgJHtpbmRlbnR9ICAke25hbWV9OiAke3ZhbHVlfTtgKTtcbiAgcmV0dXJuIGAke2luZGVudH0ke3NlbGVjdG9yfSB7XFxuJHtsaW5lcy5qb2luKCdcXG4nKX1cXG4ke2luZGVudH19YDtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSB0aGVtZSBjb25maWcgaW50byBhIENTUyBzdHlsZXNoZWV0IG9mIGAtLW5neHNtay0qYCBjdXN0b21cbiAqIHByb3BlcnRpZXMuIEVtaXRzIHN0YXRpYyB0b2tlbnMgcGx1cyBsaWdodC1tb2RlIHJvbGVzIG9uIGA6cm9vdGAsIGFuZFxuICogZGFyay1tb2RlIHJvbGVzIGFjY29yZGluZyB0byB0aGUgY29uZmlndXJlZCBkYXJrLW1vZGUgc3RyYXRlZ3kuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRoZW1lQ3NzKGNvbmZpZzogVGhlbWVDb25maWcgfCBSZXNvbHZlZFRoZW1lKTogc3RyaW5nIHtcbiAgY29uc3QgdGhlbWUgPVxuICAgICdicmFuZCcgaW4gY29uZmlnICYmICdzcGFjaW5nJyBpbiAoY29uZmlnIGFzIG9iamVjdClcbiAgICAgID8gKGNvbmZpZyBhcyBSZXNvbHZlZFRoZW1lKVxuICAgICAgOiByZXNvbHZlVGhlbWUoY29uZmlnIGFzIFRoZW1lQ29uZmlnKTtcblxuICBjb25zdCByb290ID0gYmxvY2soJzpyb290JywgeyAuLi5zdGF0aWNWYXJzKHRoZW1lKSwgLi4ubGlnaHRWYXJzKHRoZW1lKSB9KTtcbiAgY29uc3QgZGFyayA9IGRhcmtWYXJzKHRoZW1lKTtcblxuICBsZXQgZGFya0Jsb2NrOiBzdHJpbmc7XG4gIHN3aXRjaCAodGhlbWUuZGFya01vZGUuc3RyYXRlZ3kpIHtcbiAgICBjYXNlICdtZWRpYSc6XG4gICAgICBkYXJrQmxvY2sgPSBgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xcbiR7YmxvY2soJzpyb290JywgZGFyaywgJyAgJyl9XFxufWA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzeXN0ZW0nOiB7XG4gICAgICAvLyBgbGlnaHQtZGFyaygpYCBzdXBwb3J0IGlzIHBlci1wcm9wZXJ0eTsgdGhlIGNsYXNzIGJsb2NrIHN0aWxsIHNlcnZlc1xuICAgICAgLy8gYXMgdGhlIG92ZXJyaWRlIGhvb2ssIHNvIGBzeXN0ZW1gIGJlaGF2ZXMgYXMgbWVkaWEgKyBjbGFzcy5cbiAgICAgIGNvbnN0IGNuID0gdGhlbWUuZGFya01vZGUuY2xhc3NOYW1lO1xuICAgICAgZGFya0Jsb2NrID0gW1xuICAgICAgICBgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xcbiR7YmxvY2soJzpyb290JywgZGFyaywgJyAgJyl9XFxufWAsXG4gICAgICAgIGJsb2NrKGA6cm9vdC4ke2NufSwgOnJvb3QuJHtjbn0gYm9keSwgLiR7Y259YCwgZGFyayksXG4gICAgICBdLmpvaW4oJ1xcblxcbicpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8vIGA6cm9vdC48Y2xhc3M+YCAoc3BlY2lmaWNpdHkgMCwyLDApIHBsdXMgYSBgYm9keWAgdmFyaWFudCBkZWZlbmQgdGhlXG4gICAgICAvLyBkYXJrIHRva2VucyBhZ2FpbnN0IHRoaXJkLXBhcnR5IHN0eWxlc2hlZXRzIHRoYXQgcmVkZWZpbmUgYC0tbmd4c21rLSpgXG4gICAgICAvLyBvbiBhIHBsYWluIGA6cm9vdGAgKDAsMSwwKSDigJQgdGhvc2Ugd291bGQgb3RoZXJ3aXNlIHdpbiBieSBzb3VyY2Ugb3JkZXJcbiAgICAgIC8vIHdoZW4gaW5qZWN0ZWQgaW50byA8aGVhZD4gYWZ0ZXIgdGhpcyBzaGVldC4gVGhlIGJhcmUgYC48Y2xhc3M+YCBrZWVwc1xuICAgICAgLy8gc2NvcGVkIChub24tcm9vdCkgZGFyayByZWdpb25zIHdvcmtpbmcuXG4gICAgICBjb25zdCBjbiA9IHRoZW1lLmRhcmtNb2RlLmNsYXNzTmFtZTtcbiAgICAgIGRhcmtCbG9jayA9IGJsb2NrKGA6cm9vdC4ke2NufSwgOnJvb3QuJHtjbn0gYm9keSwgLiR7Y259YCwgZGFyayk7XG4gICAgfVxuICB9XG5cbiAgLy8gWmVybyBldmVyeSBkdXJhdGlvbiB0b2tlbiAoY29tcG9uZW50cyBhbmltYXRlIHdpdGggLS1uZ3hzbWstZHVyYXRpb24tKlxuICAvLyBkaXJlY3RseSkgYW5kIG5ldXRyYWxpemUgdGhlIHNoYXJlZCB0cmFuc2Zvcm1zIHNvIEFMTCB0b2tlbi1kcml2ZW4gbW90aW9uXG4gIC8vIHN0b3BzLiBgLm5neHNtay1yZWR1Y2UtbW90aW9uYCBvZmZlcnMgdGhlIHNhbWUgYXMgYW4gYXBwLWxldmVsIG9wdC1pbi5cbiAgY29uc3QgcmVkdWNlZFZhcnM6IFZhcnMgPSB7XG4gICAgJy0tbmd4c21rLW1vdGlvbi1kdXJhdGlvbic6ICcwbXMnLFxuICAgICctLW5neHNtay1ob3Zlci1saWZ0JzogJ25vbmUnLFxuICAgICctLW5neHNtay1wcmVzcy1zY2FsZSc6ICdub25lJyxcbiAgfTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhlbWUuZHVyYXRpb24pKSB7XG4gICAgcmVkdWNlZFZhcnNbYC0tbmd4c21rLWR1cmF0aW9uLSR7a2V5fWBdID0gJzBtcyc7XG4gIH1cbiAgY29uc3QgcmVkdWNlZE1vdGlvbiA9IFtcbiAgICBgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4ke2Jsb2NrKCc6cm9vdCcsIHJlZHVjZWRWYXJzLCAnICAnKX1cXG59YCxcbiAgICBibG9jaygnOnJvb3Qubmd4c21rLXJlZHVjZS1tb3Rpb24sIC5uZ3hzbWstcmVkdWNlLW1vdGlvbicsIHJlZHVjZWRWYXJzKSxcbiAgXS5qb2luKCdcXG5cXG4nKTtcbiAgcmV0dXJuIGAvKiBHZW5lcmF0ZWQgYnkgQG5neHNtay90aGVtZSDigJQgZG8gbm90IGVkaXQgYnkgaGFuZC4gKi9cXG4ke3Jvb3R9XFxuXFxuJHtkYXJrQmxvY2t9XFxuXFxuJHtyZWR1Y2VkTW90aW9ufVxcbmA7XG59XG4iXX0=
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUvc3JjL2xpYi9jc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLGVBQWUsRUFDZixXQUFXLEVBQ1gsU0FBUyxFQUNULE9BQU8sRUFDUCxPQUFPLEVBQ1AsUUFBUSxHQUNULE1BQU0sVUFBVSxDQUFDO0FBSWxCLFNBQVMsU0FBUyxDQUFDLE1BQWMsRUFBRSxLQUFpQjtJQUNsRCxNQUFNLElBQUksR0FBUyxFQUFFLENBQUM7SUFDdEIsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsa0JBQWtCLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsK0VBQStFO0FBQy9FLE1BQU0sd0JBQXdCLEdBQXlCO0lBQ3JELE1BQU0sRUFBRTtRQUNOLG9CQUFvQixFQUFFLDZCQUE2QjtRQUNuRCx1QkFBdUIsRUFBRSxnQ0FBZ0M7UUFDekQsNkJBQTZCLEVBQUUseUJBQXlCO1FBQ3hELDZCQUE2QixFQUFFLEtBQUs7UUFDcEMsd0JBQXdCLEVBQUUsMkJBQTJCO1FBQ3JELGtDQUFrQyxFQUFFLEtBQUs7S0FDMUM7SUFDRCxJQUFJLEVBQUU7UUFDSixrQkFBa0IsRUFBRSw2QkFBNkI7UUFDakQsc0JBQXNCLEVBQUUseUJBQXlCO1FBQ2pELHNCQUFzQixFQUFFLHlCQUF5QjtRQUNqRCw0QkFBNEIsRUFBRSw2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QUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLO1FBQ3BGLEtBQUssQ0FBQyxtREFBbUQsRUFBRSxXQUFXLENBQUM7S0FDeEUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDZixPQUFPLDREQUE0RCxJQUFJLE9BQU8sU0FBUyxPQUFPLGFBQWEsSUFBSSxDQUFDO0FBQ2xILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXJpdmVTY2FsZSwgcm90YXRlSHVlLCBzaGlmdExpZ2h0bmVzcyB9IGZyb20gJy4vY29sb3InO1xuaW1wb3J0IHsgcmVzb2x2ZVRoZW1lIH0gZnJvbSAnLi9kZWZpbmUtY29uZmlnJztcbmltcG9ydCB7IENvbG9yU2NhbGUsIFJlc29sdmVkVGhlbWUsIFRoZW1lQ29uZmlnLCBUeXBlUm9sZVNpemUsIFR5cGVTdHlsZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgQ09OVFJPTF9IRUlHSFQsXG4gIENPTlRST0xfSEVJR0hUUyxcbiAgRk9OVF9XRUlHSFQsXG4gIElDT05fU0laRSxcbiAgTEVBRElORyxcbiAgT1BBQ0lUWSxcbiAgVFJBQ0tJTkcsXG59IGZyb20gJy4vdG9rZW5zJztcblxudHlwZSBWYXJzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuZnVuY3Rpb24gc2NhbGVWYXJzKHByZWZpeDogc3RyaW5nLCBzY2FsZTogQ29sb3JTY2FsZSk6IFZhcnMge1xuICBjb25zdCB2YXJzOiBWYXJzID0ge307XG4gIGZvciAoY29uc3QgW3N0ZXAsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzY2FsZSkpIHtcbiAgICB2YXJzW2AtLW5neHNtay1jb2xvci0ke3ByZWZpeH0tJHtzdGVwfWBdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhcnM7XG59XG5cbi8qKiBEZWZhdWx0IENTUyBjdXN0b20gcHJvcGVydGllcyBmb3IgZWFjaCBjb21wb25lbnQsIGVtaXR0ZWQgb25jZSBpbiA6cm9vdC4gKi9cbmNvbnN0IENPTVBPTkVOVF9UT0tFTl9ERUZBVUxUUzogUmVjb3JkPHN0cmluZywgVmFycz4gPSB7XG4gIGJ1dHRvbjoge1xuICAgICctLW5neHNtay1idXR0b24tYmcnOiAndmFyKC0tbmd4c21rLWNvbG9yLXByaW1hcnkpJyxcbiAgICAnLS1uZ3hzbWstYnV0dG9uLWNvbG9yJzogJ3ZhcigtLW5neHNtay1jb2xvci1vbi1wcmltYXJ5KScsXG4gICAgJy0tbmd4c21rLWJ1dHRvbi1mb250LWZhbWlseSc6ICd2YXIoLS1uZ3hzbWstZm9udC1zYW5zKScsXG4gICAgJy0tbmd4c21rLWJ1dHRvbi1mb250LXdlaWdodCc6ICc1MDAnLFxuICAgICctLW5neHNtay1idXR0b24tcmFkaXVzJzogJ3ZhcigtLW5neHNtay1yYWRpdXMtYmFzZSknLFxuICAgICctLW5neHNtay1idXR0b24tZGlzYWJsZWQtb3BhY2l0eSc6ICcwLjUnLFxuICB9LFxuICBjYXJkOiB7XG4gICAgJy0tbmd4c21rLWNhcmQtYmcnOiAndmFyKC0tbmd4c21rLWNvbG9yLXN1cmZhY2UpJyxcbiAgICAnLS1uZ3hzbWstY2FyZC1yYWRpdXMnOiAndmFyKC0tbmd4c21rLXJhZGl1cy14bCknLFxuICAgICctLW5neHNtay1jYXJkLXNoYWRvdyc6ICd2YXIoLS1uZ3hzbWstc2hhZG93LXNtKScsXG4gICAgJy0tbmd4c21rLWNhcmQtYm9yZGVyLWNvbG9yJzogJ3ZhcigtLW5neHNtay1jb2xvci1vdXRsaW5lKScsXG4gIH0sXG4gIGFjY29yZGlvbjoge1xuICAgICctLW5neHNtay1hY2NvcmRpb24tYmcnOiAndmFyKC0tbmd4c21rLWNvbG9yLXN1cmZhY2UpJyxcbiAgICAnLS1uZ3hzbWstYWNjb3JkaW9uLXJhZGl1cyc6ICd2YXIoLS1uZ3hzbWstcmFkaXVzLWxnKScsXG4gICAgJy0tbmd4c21rLWFjY29yZGlvbi1ib3JkZXItY29sb3InOiAndmFyKC0tbmd4c21rLWNvbG9yLW91dGxpbmUpJyxcbiAgfSxcbiAgcHJvZ3Jlc3M6IHtcbiAgICAnLS1uZ3hzbWstcHJvZ3Jlc3MtaGVpZ2h0JzogJzAuNXJlbScsXG4gICAgJy0tbmd4c21rLXByb2dyZXNzLWJnJzogJ3ZhcigtLW5neHNtay1jb2xvci1zdXJmYWNlLXZhcmlhbnQpJyxcbiAgICAnLS1uZ3hzbWstcHJvZ3Jlc3MtY29sb3InOiAndmFyKC0tbmd4c21rLWNvbG9yLXByaW1hcnkpJyxcbiAgICAnLS1uZ3hzbWstcHJvZ3Jlc3MtcmFkaXVzJzogJ3ZhcigtLW5neHNtay1yYWRpdXMtZnVsbCknLFxuICB9LFxuICBzd2l0Y2g6IHtcbiAgICAnLS1uZ3hzbWstc3dpdGNoLXdpZHRoJzogJzIuMjVyZW0nLFxuICAgICctLW5neHNtay1zd2l0Y2gtaGVpZ2h0JzogJzEuMjVyZW0nLFxuICAgICctLW5neHNtay1zd2l0Y2gtcmFkaXVzJzogJ3ZhcigtLW5neHNtay1yYWRpdXMtZnVsbCknLFxuICAgICctLW5neHNtay1zd2l0Y2gtYmcnOiAndmFyKC0tbmd4c21rLWNvbG9yLW91dGxpbmUtc3Ryb25nKScsXG4gICAgJy0tbmd4c21rLXN3aXRjaC10aHVtYi1zaXplJzogJzAuODc1cmVtJyxcbiAgICAnLS1uZ3hzbWstc3dpdGNoLXRodW1iLWJnJzogJ3ZhcigtLW5neHNtay1jb2xvci1zdXJmYWNlKScsXG4gICAgJy0tbmd4c21rLXN3aXRjaC1jaGVja2VkLWJnJzogJ3ZhcigtLW5neHNtay1jb2xvci1wcmltYXJ5KScsXG4gIH0sXG4gIHNwcmVhZHNoZWV0OiB7XG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWJnJzogJ3ZhcigtLW5neHNtay1jb2xvci1zdXJmYWNlKScsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWhlYWRlci1iZyc6ICd2YXIoLS1uZ3hzbWstY29sb3Itc3VyZmFjZS12YXJpYW50KScsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWhlYWRlci1jb2xvcic6ICd2YXIoLS1uZ3hzbWstY29sb3Itb24tc3VyZmFjZS12YXJpYW50KScsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWJvcmRlcic6ICd2YXIoLS1uZ3hzbWstY29sb3Itb3V0bGluZSknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1ncmlkLWNvbG9yJzogJ3ZhcigtLW5neHNtay1jb2xvci1vdXRsaW5lLXZhcmlhbnQpJyxcbiAgICAnLS1uZ3hzbWstc3ByZWFkc2hlZXQtaG92ZXItYmcnOiAndmFyKC0tbmd4c21rLWNvbG9yLXN1cmZhY2UtaG92ZXIpJyxcbiAgICAnLS1uZ3hzbWstc3ByZWFkc2hlZXQtc2VsZWN0ZWQtYmcnOlxuICAgICAgJ2NvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1uZ3hzbWstY29sb3ItcHJpbWFyeSkgMTIlLCB0cmFuc3BhcmVudCknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1hY3RpdmUtYm9yZGVyJzogJ3ZhcigtLW5neHNtay1jb2xvci1wcmltYXJ5KScsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWZvbnQnOiAndmFyKC0tbmd4c21rLWZvbnQtc2FucyknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1mb250LW1vbm8nOiAndmFyKC0tbmd4c21rLWZvbnQtbW9ubyknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1yb3ctaGVpZ2h0JzogJzIuMjVyZW0nLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1oZWFkZXItaGVpZ2h0JzogJzIuNXJlbScsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWNlbGwtcGFkZGluZyc6ICc2cHggMTBweCcsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWNlbGwtZm9udC1zaXplJzogJ3ZhcigtLW5neHNtay10ZXh0LWJvZHktc20tc2l6ZSknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1zY3JvbGxiYXItc2l6ZSc6ICc4cHgnLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1zaGFkb3cnOiAndmFyKC0tbmd4c21rLXNoYWRvdy1zbSknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1yYWRpdXMnOiAndmFyKC0tbmd4c21rLXJhZGl1cy1sZyknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1lZGl0LWJnJzogJ3ZhcigtLW5neHNtay1jb2xvci1zdXJmYWNlKScsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWVkaXQtYm9yZGVyJzogJ3ZhcigtLW5neHNtay1jb2xvci1wcmltYXJ5KScsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LXJvdy1ob3Zlci1iZyc6ICd2YXIoLS1uZ3hzbWstY29sb3Itc3VyZmFjZS1ob3ZlciknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1jb2wtaG92ZXItYmcnOlxuICAgICAgJ2NvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1uZ3hzbWstY29sb3ItcHJpbWFyeSkgNiUsIHRyYW5zcGFyZW50KScsXG4gICAgJy0tbmd4c21rLXNwcmVhZHNoZWV0LWZyb3plbi1zaGFkb3cnOiAnMnB4IDAgNHB4IHJnYmEoMCwwLDAsMC4wOCknLFxuICAgICctLW5neHNtay1zcHJlYWRzaGVldC1zZWxlY3Rpb24tcmFuZ2UnOlxuICAgICAgJ2NvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1uZ3hzbWstY29sb3ItcHJpbWFyeSkgOCUsIHRyYW5zcGFyZW50KScsXG4gIH0sXG4gIGlucHV0R3JvdXA6IHtcbiAgICAnLS1uZ3hzbWstaW5wdXQtZ3JvdXAtYmcnOiAndmFyKC0tbmd4c21rLWNvbG9yLXN1cmZhY2UpJyxcbiAgICAnLS1uZ3hzbWstaW5wdXQtZ3JvdXAtYm9yZGVyJzogJ3ZhcigtLW5neHNtay1jb2xvci1vdXRsaW5lLXN0cm9uZyknLFxuICAgICctLW5neHNtay1pbnB1dC1ncm91cC1yYWRpdXMnOiAndmFyKC0tbmd4c21rLXJhZGl1cy1tZCknLFxuICAgICctLW5neHNtay1pbnB1dC1ncm91cC1zaGFkb3cnOiAnbm9uZScsXG4gICAgJy0tbmd4c21rLWlucHV0LWdyb3VwLWZvY3VzLWJvcmRlcic6ICd2YXIoLS1uZ3hzbWstY29sb3ItcHJpbWFyeSknLFxuICAgICctLW5neHNtay1pbnB1dC1ncm91cC1mb2N1cy1zaGFkb3cnOlxuICAgICAgJzAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbmd4c21rLWNvbG9yLXByaW1hcnkpIDE1JSwgdHJhbnNwYXJlbnQpJyxcbiAgICAnLS1uZ3hzbWstaW5wdXQtZ3JvdXAtZXJyb3ItYm9yZGVyJzogJ3ZhcigtLW5neHNtay1jb2xvci1lcnJvciknLFxuICAgICctLW5neHNtay1pbnB1dC1ncm91cC1lcnJvci1mb2N1cy1zaGFkb3cnOlxuICAgICAgJzAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbmd4c21rLWNvbG9yLWVycm9yKSAxNSUsIHRyYW5zcGFyZW50KScsXG4gICAgJy0tbmd4c21rLWlucHV0LWdyb3VwLXN1Y2Nlc3MtYm9yZGVyJzogJ3ZhcigtLW5neHNtay1jb2xvci1zdWNjZXNzKScsXG4gICAgJy0tbmd4c21rLWlucHV0LWdyb3VwLXdhcm5pbmctYm9yZGVyJzogJ3ZhcigtLW5neHNtay1jb2xvci13YXJuaW5nKScsXG4gICAgJy0tbmd4c21rLWlucHV0LWdyb3VwLWhlaWdodCc6ICcyLjVyZW0nLFxuICAgICctLW5neHNtay1pbnB1dC1ncm91cC1wYWRkaW5nJzogJzAuNzVyZW0nLFxuICAgICctLW5neHNtay1pbnB1dC1ncm91cC1nYXAnOiAndmFyKC0tbmd4c21rLXNwYWNlLTIpJyxcbiAgICAnLS1uZ3hzbWstaW5wdXQtZ3JvdXAtZm9udCc6ICd2YXIoLS1uZ3hzbWstZm9udC1zYW5zKScsXG4gIH0sXG59O1xuXG4vKiogVG9rZW5zIHRoYXQgZG8gbm90IGNoYW5nZSBiZXR3ZWVuIGxpZ2h0IGFuZCBkYXJrIG1vZGUuICovXG5mdW5jdGlvbiBzdGF0aWNWYXJzKHRoZW1lOiBSZXNvbHZlZFRoZW1lKTogVmFycyB7XG4gIGNvbnN0IHZhcnM6IFZhcnMgPSB7XG4gICAgLi4uc2NhbGVWYXJzKCdicmFuZCcsIHRoZW1lLmJyYW5kKSxcbiAgICAuLi5zY2FsZVZhcnMoJ3NlY29uZGFyeScsIHRoZW1lLnNlY29uZGFyeSksXG4gICAgLi4uc2NhbGVWYXJzKCduZXV0cmFsJywgdGhlbWUubmV1dHJhbCksXG4gICAgJy0tbmd4c21rLWZvbnQtc2Fucyc6IHRoZW1lLmZvbnRGYW1pbHkuc2FucyxcbiAgICAnLS1uZ3hzbWstZm9udC1tb25vJzogdGhlbWUuZm9udEZhbWlseS5tb25vLFxuICAgICctLW5neHNtay1yYWRpdXMtYmFzZSc6IHRoZW1lLnJhZGl1c1t0aGVtZS5yYWRpdXNCYXNlXSxcbiAgICAnLS1uZ3hzbWstY29udHJvbC1oZWlnaHQnOiBDT05UUk9MX0hFSUdIVCxcblxuICAgIC8vIE1vdGlvbiBUb2tlbnNcbiAgICAnLS1uZ3hzbWstbW90aW9uLWR1cmF0aW9uJzogJ3ZhcigtLW5neHNtay1kdXJhdGlvbi1ub3JtYWwpJyxcbiAgICAnLS1uZ3hzbWstbW90aW9uLWVhc2UnOiAndmFyKC0tbmd4c21rLWVhc2UtaW4tb3V0KScsXG5cbiAgICAvLyBJbnRlcmFjdGl2ZS1zdGF0ZSBtb3Rpb246IHNoYXJlZCBsaWZ0L3ByZXNzIHRyYW5zZm9ybXMuIE5ldXRyYWxpemVkIHRvXG4gICAgLy8gYG5vbmVgIHVuZGVyIHByZWZlcnMtcmVkdWNlZC1tb3Rpb24gKHNlZSBidWlsZFRoZW1lQ3NzKS5cbiAgICAnLS1uZ3hzbWstaG92ZXItbGlmdCc6ICd0cmFuc2xhdGVZKC0xcHgpJyxcbiAgICAnLS1uZ3hzbWstcHJlc3Mtc2NhbGUnOiAnc2NhbGUoMC45OCknLFxuXG4gICAgLy8gRm9jdXMgcmluZzogVEhFIGZvY3VzIGluZGljYXRvciBmb3IgZXZlcnkgY29tcG9uZW50LiBBbGlhc2VzIHRoZVxuICAgIC8vIG1vZGUtYXdhcmUgLS1uZ3hzbWstc2hhZG93LWZvY3VzOyB0aGUgZXJyb3IgdmFyaWFudCBkZXJpdmVzIGZyb20gdGhlXG4gICAgLy8gc2VtYW50aWMgZXJyb3Igcm9sZSBzbyBpbnZhbGlkIGNvbnRyb2xzIHJpbmcgcmVkIGluIGJvdGggbW9kZXMuXG4gICAgJy0tbmd4c21rLWZvY3VzLXJpbmcnOiAndmFyKC0tbmd4c21rLXNoYWRvdy1mb2N1cyknLFxuICAgICctLW5neHNtay1mb2N1cy1yaW5nLWVycm9yJzpcbiAgICAgICcwIDAgMCAycHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW5neHNtay1jb2xvci1lcnJvcikgMTUlLCB0cmFuc3BhcmVudCksICcgK1xuICAgICAgJzAgMCAwIDRweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbmd4c21rLWNvbG9yLWVycm9yKSA0NSUsIHRyYW5zcGFyZW50KScsXG5cbiAgICAvLyBNb2JpbGUgdmlld3BvcnQgJiBzYWZlLWFyZWEgdG9rZW5zIChpT1MgLyBBbmRyb2lkIC8gSW9uaWMpXG4gICAgJy0tbmd4c21rLXNhZmUtYXJlYS10b3AnOiAnZW52KHNhZmUtYXJlYS1pbnNldC10b3AsIDBweCknLFxuICAgICctLW5neHNtay1zYWZlLWFyZWEtYm90dG9tJzogJ2VudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tLCAwcHgpJyxcbiAgICAnLS1uZ3hzbWstc2FmZS1hcmVhLWxlZnQnOiAnZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0LCAwcHgpJyxcbiAgICAnLS1uZ3hzbWstc2FmZS1hcmVhLXJpZ2h0JzogJ2VudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQsIDBweCknLFxuICAgICctLW5neHNtay10b3VjaC10YXJnZXQtbWluJzogJzQ0cHgnLFxuXG4gICAgLy8gQ29tcG9uZW50LXNwZWNpZmljIHRva2VuIGRlZmF1bHRzXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhDT01QT05FTlRfVE9LRU5fREVGQVVMVFMpLnJlZHVjZShcbiAgICAgIChtZXJnZWQsIHRva2VucykgPT4gKHsgLi4ubWVyZ2VkLCAuLi50b2tlbnMgfSksXG4gICAgICB7fSBhcyBWYXJzLFxuICAgICksXG4gIH07XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoQ09OVFJPTF9IRUlHSFRTKSkge1xuICAgIHZhcnNbYC0tbmd4c21rLWNvbnRyb2wtaGVpZ2h0LSR7a2V5fWBdID0gdmFsdWU7XG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoT1BBQ0lUWSkpIHtcbiAgICB2YXJzW2AtLW5neHNtay1vcGFjaXR5LSR7a2V5fWBdID0gdmFsdWU7XG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoSUNPTl9TSVpFKSkge1xuICAgIHZhcnNbYC0tbmd4c21rLWljb24tJHtrZXl9YF0gPSB2YWx1ZTtcbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhUUkFDS0lORykpIHtcbiAgICB2YXJzW2AtLW5neHNtay10cmFja2luZy0ke2tleX1gXSA9IHZhbHVlO1xuICB9XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKEZPTlRfV0VJR0hUKSkge1xuICAgIHZhcnNbYC0tbmd4c21rLWZvbnQtd2VpZ2h0LSR7a2V5fWBdID0gdmFsdWU7XG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoTEVBRElORykpIHtcbiAgICB2YXJzW2AtLW5neHNtay1sZWFkaW5nLSR7a2V5fWBdID0gdmFsdWU7XG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhlbWUuc3BhY2luZykpIHtcbiAgICB2YXJzW2AtLW5neHNtay1zcGFjZS0ke2tleX1gXSA9IHZhbHVlO1xuICB9XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoZW1lLnJhZGl1cykpIHtcbiAgICB2YXJzW2AtLW5neHNtay1yYWRpdXMtJHtrZXl9YF0gPSB2YWx1ZTtcbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGVtZS5zaGFkb3cpKSB7XG4gICAgdmFyc1tgLS1uZ3hzbWstc2hhZG93LSR7a2V5fWBdID0gdmFsdWU7XG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhlbWUuZHVyYXRpb24pKSB7XG4gICAgdmFyc1tgLS1uZ3hzbWstZHVyYXRpb24tJHtrZXl9YF0gPSB2YWx1ZTtcbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGVtZS5lYXNpbmcpKSB7XG4gICAgdmFyc1tgLS1uZ3hzbWstZWFzZS0ke2tleX1gXSA9IHZhbHVlO1xuICB9XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoZW1lLnpJbmRleCkpIHtcbiAgICB2YXJzW2AtLW5neHNtay16LSR7a2V5fWBdID0gdmFsdWU7XG4gIH1cblxuICBjb25zdCBzaXplcyA9IHsgbGFyZ2U6ICdsZycsIG1lZGl1bTogJ21kJywgc21hbGw6ICdzbScgfSBhcyBjb25zdDtcbiAgZm9yIChjb25zdCBbcm9sZSwgc3R5bGVzXSBvZiBPYmplY3QuZW50cmllcyh0aGVtZS50eXBvZ3JhcGh5KSkge1xuICAgIGZvciAoY29uc3QgW3NpemUsIHN1ZmZpeF0gb2YgT2JqZWN0LmVudHJpZXMoc2l6ZXMpKSB7XG4gICAgICBjb25zdCBzdHlsZTogVHlwZVN0eWxlID0gc3R5bGVzW3NpemUgYXMgVHlwZVJvbGVTaXplXTtcbiAgICAgIHZhcnNbYC0tbmd4c21rLXRleHQtJHtyb2xlfS0ke3N1ZmZpeH0tc2l6ZWBdID0gc3R5bGUuc2l6ZTtcbiAgICAgIHZhcnNbYC0tbmd4c21rLXRleHQtJHtyb2xlfS0ke3N1ZmZpeH0tbGluZWBdID0gc3R5bGUubGluZUhlaWdodDtcbiAgICAgIHZhcnNbYC0tbmd4c21rLXRleHQtJHtyb2xlfS0ke3N1ZmZpeH0td2VpZ2h0YF0gPSBzdHlsZS53ZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLy8gRXh0cmEtc21hbGwgYm9keSB0ZXh0IGZvciBkZW5zZSBtZXRhZGF0YSByb3dzOyBiZWxvdyB0aGUgc21hbGxlc3RcbiAgLy8gVHlwZVJvbGVTaXplIHNvIGl0IGlzIGVtaXR0ZWQgb3V0c2lkZSB0aGUgcm9sZSBsb29wLlxuICB2YXJzWyctLW5neHNtay10ZXh0LWJvZHkteHMtc2l6ZSddID0gJzAuNjg3NXJlbSc7XG4gIHZhcnNbJy0tbmd4c21rLXRleHQtYm9keS14cy1saW5lJ10gPSAnMXJlbSc7XG4gIHZhcnNbJy0tbmd4c21rLXRleHQtYm9keS14cy13ZWlnaHQnXSA9ICc0MDAnO1xuXG4gIHJldHVybiB2YXJzO1xufVxuXG4vKiogU2VtYW50aWMgcm9sZSB0b2tlbnMgZm9yIGxpZ2h0IG1vZGUuICovXG5mdW5jdGlvbiBsaWdodFZhcnModGhlbWU6IFJlc29sdmVkVGhlbWUpOiBWYXJzIHtcbiAgY29uc3QgdmFyczogVmFycyA9IHtcbiAgICAnY29sb3Itc2NoZW1lJzogJ2xpZ2h0JyxcblxuICAgICctLW5neHNtay1jb2xvci1wcmltYXJ5JzogdGhlbWUuYnJhbmRCYXNlLFxuICAgICctLW5neHNtay1jb2xvci1vbi1wcmltYXJ5JzogJyNGRkZGRkYnLFxuICAgICctLW5neHNtay1jb2xvci1wcmltYXJ5LWhvdmVyJzogc2hpZnRMaWdodG5lc3ModGhlbWUuYnJhbmRCYXNlLCAtOCksXG4gICAgJy0tbmd4c21rLWNvbG9yLXByaW1hcnktYWN0aXZlJzogc2hpZnRMaWdodG5lc3ModGhlbWUuYnJhbmRCYXNlLCAtMTQpLFxuICAgICctLW5neHNtay1jb2xvci1wcmltYXJ5LWNvbnRhaW5lcic6IHRoZW1lLmJyYW5kWzEwMF0sXG4gICAgJy0tbmd4c21rLWNvbG9yLW9uLXByaW1hcnktY29udGFpbmVyJzogdGhlbWUuYnJhbmRbOTAwXSxcblxuICAgICctLW5neHNtay1jb2xvci1zZWNvbmRhcnknOiB0aGVtZS5zZWNvbmRhcnlCYXNlLFxuICAgICctLW5neHNtay1jb2xvci1vbi1zZWNvbmRhcnknOiAnI0ZGRkZGRicsXG4gICAgJy0tbmd4c21rLWNvbG9yLXNlY29uZGFyeS1ob3Zlcic6IHNoaWZ0TGlnaHRuZXNzKHRoZW1lLnNlY29uZGFyeUJhc2UsIC04KSxcbiAgICAnLS1uZ3hzbWstY29sb3Itc2Vjb25kYXJ5LWFjdGl2ZSc6IHNoaWZ0TGlnaHRuZXNzKHRoZW1lLnNlY29uZGFyeUJhc2UsIC0xNCksXG4gICAgJy0tbmd4c21rLWNvbG9yLXNlY29uZGFyeS1jb250YWluZXInOiB0aGVtZS5zZWNvbmRhcnlbMTAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3Itb24tc2Vjb25kYXJ5LWNvbnRhaW5lcic6IHRoZW1lLnNlY29uZGFyeVs5MDBdLFxuXG4gICAgLy8gRGVmYXVsdCBsaWdodCB0aGVtZTogY29vbC1ncmV5IGJvZHksIHdoaXRlIGNhcmRzIGZsb2F0aW5nIG9uIHRvcCwgaGFpcmxpbmUgYm9yZGVycy5cbiAgICAnLS1uZ3hzbWstY29sb3ItYmFja2dyb3VuZCc6IHRoZW1lLm5ldXRyYWxbNTBdLFxuICAgICctLW5neHNtay1jb2xvci1vbi1iYWNrZ3JvdW5kJzogJyMwQTEzMTcnLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlJzogJyNGRkZGRkYnLFxuICAgICctLW5neHNtay1jb2xvci1vbi1zdXJmYWNlJzogJyMwQTEzMTcnLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLXZhcmlhbnQnOiB0aGVtZS5uZXV0cmFsWzEwMF0sXG4gICAgJy0tbmd4c21rLWNvbG9yLW9uLXN1cmZhY2UtdmFyaWFudCc6IHRoZW1lLm5ldXRyYWxbNTAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3Itc3VyZmFjZS1tdXRlZCc6IHRoZW1lLm5ldXRyYWxbNTBdLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLWVsZXZhdGVkJzogJyNGRkZGRkYnLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLW92ZXJsYXknOiAnI0ZGRkZGRicsXG4gICAgJy0tbmd4c21rLWNvbG9yLW9uLXN1cmZhY2UtbXV0ZWQnOiB0aGVtZS5uZXV0cmFsWzQwMF0sXG4gICAgJy0tbmd4c21rLWNvbG9yLXN1cmZhY2UtaG92ZXInOiAncmdiKDUgNTQgODkgLyAwLjA1KScsXG4gICAgJy0tbmd4c21rLWNvbG9yLXN1cmZhY2UtYWN0aXZlJzogJ3JnYig1IDU0IDg5IC8gMC4xKScsXG4gICAgJy0tbmd4c21rLWNvbG9yLXN1cmZhY2UtY29udGFpbmVyJzogJyNGRkZGRkYnLFxuICAgICctLW5neHNtay1jb2xvci1vdXRsaW5lJzogJ3JnYig1IDU0IDg5IC8gMC4xKScsXG4gICAgJy0tbmd4c21rLWNvbG9yLW91dGxpbmUtc3Ryb25nJzogdGhlbWUubmV1dHJhbFsyMDBdLFxuICAgICctLW5neHNtay1jb2xvci1vdXRsaW5lLXZhcmlhbnQnOiAncmdiKDUgNTQgODkgLyAwLjA2KScsXG4gICAgJy0tbmd4c21rLWNvbG9yLW91dGxpbmUtc3VidGxlJzogJ3JnYig1IDU0IDg5IC8gMC4wNSknLFxuXG4gICAgLy8gRWxldmF0aW9uIGxhZGRlclxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLTEnOiAnI0ZGRkZGRicsXG4gICAgJy0tbmd4c21rLWNvbG9yLXN1cmZhY2UtMic6IHRoZW1lLm5ldXRyYWxbNTBdLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLTMnOiB0aGVtZS5uZXV0cmFsWzEwMF0sXG4gICAgJy0tbmd4c21rLWNvbG9yLXN1cmZhY2UtNCc6IHRoZW1lLm5ldXRyYWxbMjAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3Itc3VyZmFjZS01JzogdGhlbWUubmV1dHJhbFszMDBdLFxuXG4gICAgJy0tbmd4c21rLWNvbG9yLXJpbmcnOiB0aGVtZS5icmFuZEJhc2UsXG4gICAgJy0tbmd4c21rLWNvbG9yLWJhY2tkcm9wJzogJ3JnYigxIDE4IDQwIC8gMC40KScsXG4gICAgJy0tbmd4c21rLXNoYWRvdy1mb2N1cyc6IGAwIDAgMCAycHggJHt0aGVtZS5icmFuZFsxMDBdfSwgMCAwIDAgNHB4IGNvbG9yLW1peChpbiBzcmdiLCAke3RoZW1lLmJyYW5kQmFzZX0gNDUlLCB0cmFuc3BhcmVudClgLFxuXG4gICAgLy8gQ2F0ZWdvcmljYWwgY2hhcnQgcGFsZXR0ZSDigJQgYSBmaXhlZCA4LWh1ZSBxdWFsaXRhdGl2ZSBzZXQgKE5PVCBkZXJpdmVkXG4gICAgLy8gZnJvbSB0aGUgYnJhbmQsIHNvIGFkamFjZW50IHNlcmllcyBzdGF5IGRpc3Rpbmd1aXNoYWJsZSBhY3Jvc3MgdGhlbWVzKSxcbiAgICAvLyBzdGVwcGVkIGZvciB0aGUgbGlnaHQgc3VyZmFjZS4gVmFsaWRhdGVkIGZvciB0aGUgbGlnaHQgY2hhcnQgc3VyZmFjZTpcbiAgICAvLyBDVkQgd29yc3QtYWRqYWNlbnQgzpRFIDI0LjIsIGNocm9tYS9saWdodG5lc3MgaW4tYmFuZC4gQ2hhcnRzIHJlYWQgdGhlc2VcbiAgICAvLyB2aWEgZ2V0Q29tcHV0ZWRTdHlsZTsgY29uc3VtZXJzIGNhbiBvdmVycmlkZSBhbnkgc2xvdCB0byByZWJyYW5kIHNlcmllcy5cbiAgICAnLS1uZ3hzbWstY2hhcnQtMSc6ICcjMkE3OEQ2JyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtMic6ICcjMUJBRjdBJyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtMyc6ICcjRURBMTAwJyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtNCc6ICcjMDA4MzAwJyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtNSc6ICcjNEEzQUE3JyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtNic6ICcjRTM0OTQ4JyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtNyc6ICcjRTg3QkE0JyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtOCc6ICcjRUI2ODM0JyxcbiAgfTtcblxuICBjb25zdCB0ZXJ0aWFyeSA9IGRlcml2ZVNjYWxlKHJvdGF0ZUh1ZSh0aGVtZS5icmFuZEJhc2UsIDY0KSk7XG4gIHZhcnNbJy0tbmd4c21rLWNvbG9yLXRlcnRpYXJ5J10gPSB0ZXJ0aWFyeVs1MDBdO1xuICB2YXJzWyctLW5neHNtay1jb2xvci1vbi10ZXJ0aWFyeSddID0gJyNGRkZGRkYnO1xuICB2YXJzWyctLW5neHNtay1jb2xvci10ZXJ0aWFyeS1jb250YWluZXInXSA9IHRlcnRpYXJ5WzEwMF07XG4gIHZhcnNbJy0tbmd4c21rLWNvbG9yLW9uLXRlcnRpYXJ5LWNvbnRhaW5lciddID0gdGVydGlhcnlbOTAwXTtcblxuICBmb3IgKGNvbnN0IFtuYW1lLCBoZXhdIG9mIE9iamVjdC5lbnRyaWVzKHRoZW1lLnNlbWFudGljKSkge1xuICAgIGNvbnN0IHNjYWxlID0gZGVyaXZlU2NhbGUoaGV4KTtcbiAgICB2YXJzW2AtLW5neHNtay1jb2xvci0ke25hbWV9YF0gPSBoZXg7XG4gICAgdmFyc1tgLS1uZ3hzbWstY29sb3Itb24tJHtuYW1lfWBdID0gJyNGRkZGRkYnO1xuICAgIHZhcnNbYC0tbmd4c21rLWNvbG9yLSR7bmFtZX0tY29udGFpbmVyYF0gPSBzY2FsZVsxMDBdO1xuICAgIHZhcnNbYC0tbmd4c21rLWNvbG9yLW9uLSR7bmFtZX0tY29udGFpbmVyYF0gPSBzY2FsZVs4MDBdO1xuICB9XG5cbiAgcmV0dXJuIHsgLi4udmFycywgLi4udGhlbWUub3ZlcnJpZGVzLmxpZ2h0IH07XG59XG5cbi8qKiBTZW1hbnRpYyByb2xlIHRva2VucyBmb3IgZGFyayBtb2RlLiAqL1xuZnVuY3Rpb24gZGFya1ZhcnModGhlbWU6IFJlc29sdmVkVGhlbWUpOiBWYXJzIHtcbiAgY29uc3QgdmFyczogVmFycyA9IHtcbiAgICAnY29sb3Itc2NoZW1lJzogJ2RhcmsnLFxuXG4gICAgJy0tbmd4c21rLWNvbG9yLXByaW1hcnknOiB0aGVtZS5icmFuZFs0MDBdLFxuICAgICctLW5neHNtay1jb2xvci1vbi1wcmltYXJ5JzogJyNGRkZGRkYnLFxuICAgICctLW5neHNtay1jb2xvci1wcmltYXJ5LWhvdmVyJzogdGhlbWUuYnJhbmRbMzAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3ItcHJpbWFyeS1hY3RpdmUnOiB0aGVtZS5icmFuZFsyMDBdLFxuICAgICctLW5neHNtay1jb2xvci1wcmltYXJ5LWNvbnRhaW5lcic6IHRoZW1lLmJyYW5kWzkwMF0sXG4gICAgJy0tbmd4c21rLWNvbG9yLW9uLXByaW1hcnktY29udGFpbmVyJzogdGhlbWUuYnJhbmRbMTAwXSxcblxuICAgICctLW5neHNtay1jb2xvci1zZWNvbmRhcnknOiB0aGVtZS5zZWNvbmRhcnlbNDAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3Itb24tc2Vjb25kYXJ5JzogJyNGRkZGRkYnLFxuICAgICctLW5neHNtay1jb2xvci1zZWNvbmRhcnktaG92ZXInOiB0aGVtZS5zZWNvbmRhcnlbMzAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3Itc2Vjb25kYXJ5LWFjdGl2ZSc6IHRoZW1lLnNlY29uZGFyeVsyMDBdLFxuICAgICctLW5neHNtay1jb2xvci1zZWNvbmRhcnktY29udGFpbmVyJzogdGhlbWUuc2Vjb25kYXJ5WzkwMF0sXG4gICAgJy0tbmd4c21rLWNvbG9yLW9uLXNlY29uZGFyeS1jb250YWluZXInOiB0aGVtZS5zZWNvbmRhcnlbMTAwXSxcblxuICAgIC8vIERlZmF1bHQgZGFyayB0aGVtZTogbmVhci1uZXV0cmFsIGNoYXJjb2FsIGJvZHksIHNsaWdodGx5IGxpZ2h0ZXIgY2FyZCxcbiAgICAvLyBsaWdodGVyIHN0aWxsIGZvciBwb3BvdmVyczsgaGFpcmxpbmUgbGlnaHQtb24tZGFyayBib3JkZXJzLlxuICAgICctLW5neHNtay1jb2xvci1iYWNrZ3JvdW5kJzogJyMxMTExMTInLFxuICAgICctLW5neHNtay1jb2xvci1vbi1iYWNrZ3JvdW5kJzogJyNERkUyRTUnLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlJzogJyMxRjFGMjInLFxuICAgICctLW5neHNtay1jb2xvci1vbi1zdXJmYWNlJzogJyNERkUyRTUnLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLXZhcmlhbnQnOiAnIzI4MjkyQycsXG4gICAgJy0tbmd4c21rLWNvbG9yLW9uLXN1cmZhY2UtdmFyaWFudCc6ICcjQUFBRkI1JyxcbiAgICAnLS1uZ3hzbWstY29sb3Itc3VyZmFjZS1tdXRlZCc6ICcjMTQxNDE2JyxcbiAgICAnLS1uZ3hzbWstY29sb3Itc3VyZmFjZS1lbGV2YXRlZCc6ICcjMjgyOTJDJyxcbiAgICAnLS1uZ3hzbWstY29sb3Itc3VyZmFjZS1vdmVybGF5JzogJyMyRjMxMzYnLFxuICAgICctLW5neHNtay1jb2xvci1vbi1zdXJmYWNlLW11dGVkJzogJyM3NzdDODUnLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLWhvdmVyJzogJ3JnYigyNTUgMjU1IDI1NSAvIDAuMDUpJyxcbiAgICAnLS1uZ3hzbWstY29sb3Itc3VyZmFjZS1hY3RpdmUnOiAncmdiKDI1NSAyNTUgMjU1IC8gMC4xKScsXG4gICAgJy0tbmd4c21rLWNvbG9yLXN1cmZhY2UtY29udGFpbmVyJzogJyMyODI5MkMnLFxuICAgICctLW5neHNtay1jb2xvci1vdXRsaW5lJzogJ3JnYigyNDIgMjQ0IDI0NiAvIDAuMSknLFxuICAgICctLW5neHNtay1jb2xvci1vdXRsaW5lLXN0cm9uZyc6ICcjNDk0RDUzJyxcbiAgICAnLS1uZ3hzbWstY29sb3Itb3V0bGluZS12YXJpYW50JzogJ3JnYigyNDIgMjQ0IDI0NiAvIDAuMDYpJyxcbiAgICAnLS1uZ3hzbWstY29sb3Itb3V0bGluZS1zdWJ0bGUnOiAncmdiKDI0MiAyNDQgMjQ2IC8gMC4wNSknLFxuXG4gICAgLy8gRWxldmF0aW9uIGxhZGRlclxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLTEnOiB0aGVtZS5uZXV0cmFsWzgwMF0sXG4gICAgJy0tbmd4c21rLWNvbG9yLXN1cmZhY2UtMic6IHRoZW1lLm5ldXRyYWxbNzAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3Itc3VyZmFjZS0zJzogdGhlbWUubmV1dHJhbFs2MDBdLFxuICAgICctLW5neHNtay1jb2xvci1zdXJmYWNlLTQnOiB0aGVtZS5uZXV0cmFsWzUwMF0sXG4gICAgJy0tbmd4c21rLWNvbG9yLXN1cmZhY2UtNSc6IHRoZW1lLm5ldXRyYWxbNDAwXSxcblxuICAgICctLW5neHNtay1jb2xvci1yaW5nJzogdGhlbWUuYnJhbmRbNDAwXSxcbiAgICAnLS1uZ3hzbWstY29sb3ItYmFja2Ryb3AnOiAncmdiKDE3IDE3IDE4IC8gMC42KScsXG4gICAgJy0tbmd4c21rLXNoYWRvdy1mb2N1cyc6IGAwIDAgMCAycHggY29sb3ItbWl4KGluIHNyZ2IsICR7dGhlbWUuYnJhbmRbNDAwXX0gMjUlLCB0cmFuc3BhcmVudCksIDAgMCAwIDRweCBjb2xvci1taXgoaW4gc3JnYiwgJHt0aGVtZS5icmFuZFs0MDBdfSA0NSUsIHRyYW5zcGFyZW50KWAsXG5cbiAgICAvLyBDYXRlZ29yaWNhbCBjaGFydCBwYWxldHRlIOKAlCB0aGUgc2FtZSBlaWdodCBodWVzIGFzIGxpZ2h0LCByZS1zdGVwcGVkIGZvclxuICAgIC8vIHRoZSBkYXJrIHN1cmZhY2UgKG5vdCBhIGRpZmZlcmVudCBwYWxldHRlKS4gVmFsaWRhdGVkIGZvciB0aGUgZGFyayBjaGFydFxuICAgIC8vIHN1cmZhY2U6IGFsbCBzbG90cyDiiaUgMzoxIGNvbnRyYXN0LCBDVkQgd29yc3QtYWRqYWNlbnQgzpRFIDEwLjMgKGZsb29yIGJhbmQsXG4gICAgLy8gcmVsaWVzIG9uIHRoZSBsZWdlbmQvbGFiZWxzIGNoYXJ0cyBhbHJlYWR5IHJlbmRlciBmb3Igc2Vjb25kYXJ5IGVuY29kaW5nKS5cbiAgICAnLS1uZ3hzbWstY2hhcnQtMSc6ICcjMzk4N0U1JyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtMic6ICcjMTk5RTcwJyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtMyc6ICcjQzk4NTAwJyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtNCc6ICcjMDA4MzAwJyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtNSc6ICcjOTA4NUU5JyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtNic6ICcjRTY2NzY3JyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtNyc6ICcjRDU1MTgxJyxcbiAgICAnLS1uZ3hzbWstY2hhcnQtOCc6ICcjRDk1OTI2JyxcbiAgfTtcblxuICBjb25zdCB0ZXJ0aWFyeSA9IGRlcml2ZVNjYWxlKHJvdGF0ZUh1ZSh0aGVtZS5icmFuZEJhc2UsIDY0KSk7XG4gIHZhcnNbJy0tbmd4c21rLWNvbG9yLXRlcnRpYXJ5J10gPSB0ZXJ0aWFyeVs0MDBdO1xuICB2YXJzWyctLW5neHNtay1jb2xvci1vbi10ZXJ0aWFyeSddID0gdGVydGlhcnlbOTUwXTtcbiAgdmFyc1snLS1uZ3hzbWstY29sb3ItdGVydGlhcnktY29udGFpbmVyJ10gPSB0ZXJ0aWFyeVs5MDBdO1xuICB2YXJzWyctLW5neHNtay1jb2xvci1vbi10ZXJ0aWFyeS1jb250YWluZXInXSA9IHRlcnRpYXJ5WzEwMF07XG5cbiAgZm9yIChjb25zdCBbbmFtZSwgaGV4XSBvZiBPYmplY3QuZW50cmllcyh0aGVtZS5zZW1hbnRpYykpIHtcbiAgICBjb25zdCBzY2FsZSA9IGRlcml2ZVNjYWxlKGhleCk7XG4gICAgdmFyc1tgLS1uZ3hzbWstY29sb3ItJHtuYW1lfWBdID0gc2NhbGVbNDAwXTtcbiAgICB2YXJzW2AtLW5neHNtay1jb2xvci1vbi0ke25hbWV9YF0gPSBzY2FsZVs5NTBdO1xuICAgIHZhcnNbYC0tbmd4c21rLWNvbG9yLSR7bmFtZX0tY29udGFpbmVyYF0gPSBzY2FsZVs5NTBdO1xuICAgIHZhcnNbYC0tbmd4c21rLWNvbG9yLW9uLSR7bmFtZX0tY29udGFpbmVyYF0gPSBzY2FsZVszMDBdO1xuICB9XG5cbiAgcmV0dXJuIHsgLi4udmFycywgLi4udGhlbWUub3ZlcnJpZGVzLmRhcmsgfTtcbn1cblxuZnVuY3Rpb24gYmxvY2soc2VsZWN0b3I6IHN0cmluZywgdmFyczogVmFycywgaW5kZW50ID0gJycpOiBzdHJpbmcge1xuICBjb25zdCBsaW5lcyA9IE9iamVjdC5lbnRyaWVzKHZhcnMpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gYCR7aW5kZW50fSAgJHtuYW1lfTogJHt2YWx1ZX07YCk7XG4gIHJldHVybiBgJHtpbmRlbnR9JHtzZWxlY3Rvcn0ge1xcbiR7bGluZXMuam9pbignXFxuJyl9XFxuJHtpbmRlbnR9fWA7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGEgdGhlbWUgY29uZmlnIGludG8gYSBDU1Mgc3R5bGVzaGVldCBvZiBgLS1uZ3hzbWstKmAgY3VzdG9tXG4gKiBwcm9wZXJ0aWVzLiBFbWl0cyBzdGF0aWMgdG9rZW5zIHBsdXMgbGlnaHQtbW9kZSByb2xlcyBvbiBgOnJvb3RgLCBhbmRcbiAqIGRhcmstbW9kZSByb2xlcyBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ3VyZWQgZGFyay1tb2RlIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUaGVtZUNzcyhjb25maWc6IFRoZW1lQ29uZmlnIHwgUmVzb2x2ZWRUaGVtZSk6IHN0cmluZyB7XG4gIGNvbnN0IHRoZW1lID1cbiAgICAnYnJhbmQnIGluIGNvbmZpZyAmJiAnc3BhY2luZycgaW4gKGNvbmZpZyBhcyBvYmplY3QpXG4gICAgICA/IChjb25maWcgYXMgUmVzb2x2ZWRUaGVtZSlcbiAgICAgIDogcmVzb2x2ZVRoZW1lKGNvbmZpZyBhcyBUaGVtZUNvbmZpZyk7XG5cbiAgY29uc3Qgcm9vdCA9IGJsb2NrKCc6cm9vdCcsIHsgLi4uc3RhdGljVmFycyh0aGVtZSksIC4uLmxpZ2h0VmFycyh0aGVtZSkgfSk7XG4gIGNvbnN0IGRhcmsgPSBkYXJrVmFycyh0aGVtZSk7XG5cbiAgbGV0IGRhcmtCbG9jazogc3RyaW5nO1xuICBzd2l0Y2ggKHRoZW1lLmRhcmtNb2RlLnN0cmF0ZWd5KSB7XG4gICAgY2FzZSAnbWVkaWEnOlxuICAgICAgZGFya0Jsb2NrID0gYEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcXG4ke2Jsb2NrKCc6cm9vdCcsIGRhcmssICcgICcpfVxcbn1gO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc3lzdGVtJzoge1xuICAgICAgLy8gYGxpZ2h0LWRhcmsoKWAgc3VwcG9ydCBpcyBwZXItcHJvcGVydHk7IHRoZSBjbGFzcyBibG9jayBzdGlsbCBzZXJ2ZXNcbiAgICAgIC8vIGFzIHRoZSBvdmVycmlkZSBob29rLCBzbyBgc3lzdGVtYCBiZWhhdmVzIGFzIG1lZGlhICsgY2xhc3MuXG4gICAgICBjb25zdCBjbiA9IHRoZW1lLmRhcmtNb2RlLmNsYXNzTmFtZTtcbiAgICAgIGRhcmtCbG9jayA9IFtcbiAgICAgICAgYEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcXG4ke2Jsb2NrKCc6cm9vdCcsIGRhcmssICcgICcpfVxcbn1gLFxuICAgICAgICBibG9jayhgOnJvb3QuJHtjbn0sIDpyb290LiR7Y259IGJvZHksIC4ke2NufWAsIGRhcmspLFxuICAgICAgXS5qb2luKCdcXG5cXG4nKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICAvLyBgOnJvb3QuPGNsYXNzPmAgKHNwZWNpZmljaXR5IDAsMiwwKSBwbHVzIGEgYGJvZHlgIHZhcmlhbnQgZGVmZW5kIHRoZVxuICAgICAgLy8gZGFyayB0b2tlbnMgYWdhaW5zdCB0aGlyZC1wYXJ0eSBzdHlsZXNoZWV0cyB0aGF0IHJlZGVmaW5lIGAtLW5neHNtay0qYFxuICAgICAgLy8gb24gYSBwbGFpbiBgOnJvb3RgICgwLDEsMCkg4oCUIHRob3NlIHdvdWxkIG90aGVyd2lzZSB3aW4gYnkgc291cmNlIG9yZGVyXG4gICAgICAvLyB3aGVuIGluamVjdGVkIGludG8gPGhlYWQ+IGFmdGVyIHRoaXMgc2hlZXQuIFRoZSBiYXJlIGAuPGNsYXNzPmAga2VlcHNcbiAgICAgIC8vIHNjb3BlZCAobm9uLXJvb3QpIGRhcmsgcmVnaW9ucyB3b3JraW5nLlxuICAgICAgY29uc3QgY24gPSB0aGVtZS5kYXJrTW9kZS5jbGFzc05hbWU7XG4gICAgICBkYXJrQmxvY2sgPSBibG9jayhgOnJvb3QuJHtjbn0sIDpyb290LiR7Y259IGJvZHksIC4ke2NufWAsIGRhcmspO1xuICAgIH1cbiAgfVxuXG4gIC8vIFplcm8gZXZlcnkgZHVyYXRpb24gdG9rZW4gKGNvbXBvbmVudHMgYW5pbWF0ZSB3aXRoIC0tbmd4c21rLWR1cmF0aW9uLSpcbiAgLy8gZGlyZWN0bHkpIGFuZCBuZXV0cmFsaXplIHRoZSBzaGFyZWQgdHJhbnNmb3JtcyBzbyBBTEwgdG9rZW4tZHJpdmVuIG1vdGlvblxuICAvLyBzdG9wcy4gYC5uZ3hzbWstcmVkdWNlLW1vdGlvbmAgb2ZmZXJzIHRoZSBzYW1lIGFzIGFuIGFwcC1sZXZlbCBvcHQtaW4uXG4gIGNvbnN0IHJlZHVjZWRWYXJzOiBWYXJzID0ge1xuICAgICctLW5neHNtay1tb3Rpb24tZHVyYXRpb24nOiAnMG1zJyxcbiAgICAnLS1uZ3hzbWstaG92ZXItbGlmdCc6ICdub25lJyxcbiAgICAnLS1uZ3hzbWstcHJlc3Mtc2NhbGUnOiAnbm9uZScsXG4gIH07XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoZW1lLmR1cmF0aW9uKSkge1xuICAgIHJlZHVjZWRWYXJzW2AtLW5neHNtay1kdXJhdGlvbi0ke2tleX1gXSA9ICcwbXMnO1xuICB9XG4gIGNvbnN0IHJlZHVjZWRNb3Rpb24gPSBbXG4gICAgYEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuJHtibG9jaygnOnJvb3QnLCByZWR1Y2VkVmFycywgJyAgJyl9XFxufWAsXG4gICAgYmxvY2soJzpyb290Lm5neHNtay1yZWR1Y2UtbW90aW9uLCAubmd4c21rLXJlZHVjZS1tb3Rpb24nLCByZWR1Y2VkVmFycyksXG4gIF0uam9pbignXFxuXFxuJyk7XG4gIHJldHVybiBgLyogR2VuZXJhdGVkIGJ5IEBuZ3hzbWsvdGhlbWUg4oCUIGRvIG5vdCBlZGl0IGJ5IGhhbmQuICovXFxuJHtyb290fVxcblxcbiR7ZGFya0Jsb2NrfVxcblxcbiR7cmVkdWNlZE1vdGlvbn1cXG5gO1xufVxuIl19
@@ -0,0 +1,30 @@
1
+ import { ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders, } from '@angular/core';
2
+ import { NgxsmkThemeService } from './theme.service';
3
+ import { violetPreset } from './presets';
4
+ /**
5
+ * Standalone provider for Angular 18-22+ applications that automatically
6
+ * synchronizes NGXSMK design tokens with Ionic 7/8 CSS variables on startup.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * export const appConfig: ApplicationConfig = {
11
+ * providers: [
12
+ * provideIonicAngular(),
13
+ * provideNgxsmkIonicTheme(),
14
+ * ]
15
+ * };
16
+ * ```
17
+ */
18
+ export function provideNgxsmkIonicTheme(config) {
19
+ return makeEnvironmentProviders([
20
+ {
21
+ provide: ENVIRONMENT_INITIALIZER,
22
+ multi: true,
23
+ useValue: () => {
24
+ const theme = inject(NgxsmkThemeService);
25
+ theme.applyIonicTheme(config ?? violetPreset);
26
+ },
27
+ },
28
+ ]);
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9uaWMtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS9zcmMvbGliL2lvbmljLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsTUFBTSxFQUNOLHdCQUF3QixHQUN6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBR3pDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsTUFBb0I7SUFDMUQsT0FBTyx3QkFBd0IsQ0FBQztRQUM5QjtZQUNFLE9BQU8sRUFBRSx1QkFBdUI7WUFDaEMsS0FBSyxFQUFFLElBQUk7WUFDWCxRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUNiLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUN6QyxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsQ0FBQztZQUNoRCxDQUFDO1NBQ0Y7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gIEVudmlyb25tZW50UHJvdmlkZXJzLFxuICBpbmplY3QsXG4gIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3hzbWtUaGVtZVNlcnZpY2UgfSBmcm9tICcuL3RoZW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgdmlvbGV0UHJlc2V0IH0gZnJvbSAnLi9wcmVzZXRzJztcbmltcG9ydCB7IFRoZW1lQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogU3RhbmRhbG9uZSBwcm92aWRlciBmb3IgQW5ndWxhciAxOC0yMisgYXBwbGljYXRpb25zIHRoYXQgYXV0b21hdGljYWxseVxuICogc3luY2hyb25pemVzIE5HWFNNSyBkZXNpZ24gdG9rZW5zIHdpdGggSW9uaWMgNy84IENTUyB2YXJpYWJsZXMgb24gc3RhcnR1cC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGV4cG9ydCBjb25zdCBhcHBDb25maWc6IEFwcGxpY2F0aW9uQ29uZmlnID0ge1xuICogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlSW9uaWNBbmd1bGFyKCksXG4gKiAgICAgcHJvdmlkZU5neHNta0lvbmljVGhlbWUoKSxcbiAqICAgXVxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZU5neHNta0lvbmljVGhlbWUoY29uZmlnPzogVGhlbWVDb25maWcpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VWYWx1ZTogKCkgPT4ge1xuICAgICAgICBjb25zdCB0aGVtZSA9IGluamVjdChOZ3hzbWtUaGVtZVNlcnZpY2UpO1xuICAgICAgICB0aGVtZS5hcHBseUlvbmljVGhlbWUoY29uZmlnID8/IHZpb2xldFByZXNldCk7XG4gICAgICB9LFxuICAgIH0sXG4gIF0pO1xufVxuIl19
@@ -33,7 +33,7 @@ export class NgxThemeInjectorService {
33
33
  if (!style) {
34
34
  style = this.document.createElement('style');
35
35
  style.id = STYLE_ID;
36
- head.appendChild(style);
36
+ head?.appendChild(style);
37
37
  }
38
38
  let css = buildThemeCss(config);
39
39
  if (adapter) {
@@ -41,7 +41,9 @@ export class NgxThemeInjectorService {
41
41
  const platformVars = adapter.vars(resolved);
42
42
  css += '\n' + this.buildAdapterCss(adapter.name, platformVars);
43
43
  }
44
- style.textContent = css;
44
+ if (style) {
45
+ style.textContent = css;
46
+ }
45
47
  }
46
48
  /**
47
49
  * Apply Ionic-specific token variables alongside the standard NGXSMK theme.
@@ -53,11 +55,14 @@ export class NgxThemeInjectorService {
53
55
  if (!style) {
54
56
  style = this.document.createElement('style');
55
57
  style.id = IONIC_STYLE_ID;
56
- head.appendChild(style);
58
+ head?.appendChild(style);
57
59
  }
58
60
  const resolved = resolveTheme(config);
59
- const vars = ionicVarsAdapter.vars(resolved);
60
- style.textContent = this.buildAdapterCss('ionic', vars);
61
+ const lightVars = ionicVarsAdapter.vars(resolved);
62
+ const darkVars = ionicVarsAdapter.darkVars ? ionicVarsAdapter.darkVars(resolved) : undefined;
63
+ if (style) {
64
+ style.textContent = this.buildAdapterCss('ionic', lightVars, darkVars);
65
+ }
61
66
  }
62
67
  /** Remove a runtime-applied theme, falling back to the build-time CSS. */
63
68
  clearTheme() {
@@ -67,9 +72,15 @@ export class NgxThemeInjectorService {
67
72
  clearIonicTheme() {
68
73
  this.document.getElementById(IONIC_STYLE_ID)?.remove();
69
74
  }
70
- buildAdapterCss(adapterName, vars) {
75
+ buildAdapterCss(adapterName, vars, darkVars) {
71
76
  const lines = Object.entries(vars).map(([k, v]) => ` ${k}: ${v};`);
72
- return `/* @ngxsmk/theme — ${adapterName} adapter */\n:root {\n${lines.join('\n')}\n}`;
77
+ let result = `/* @ngxsmk/theme — ${adapterName} adapter */\n:root {\n${lines.join('\n')}\n}`;
78
+ if (darkVars && Object.keys(darkVars).length > 0) {
79
+ const darkLines = Object.entries(darkVars).map(([k, v]) => ` ${k}: ${v};`);
80
+ result += `\n\n:root.dark, body.dark, html.dark, [data-theme="dark"] {\n${darkLines.join('\n')}\n}`;
81
+ result += `\n\n@media (prefers-color-scheme: dark) {\n :root:not(.light) {\n ${darkLines.join('\n ')}\n }\n}`;
82
+ }
83
+ return result;
73
84
  }
74
85
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: NgxThemeInjectorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
75
86
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: NgxThemeInjectorService, providedIn: 'root' }); }
@@ -78,4 +89,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
78
89
  type: Injectable,
79
90
  args: [{ providedIn: 'root' }]
80
91
  }] });
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtaW5qZWN0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lL3NyYy9saWIvdGhlbWUtaW5qZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUN0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFzQixnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUd2RSxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUM7QUFDaEMsTUFBTSxjQUFjLEdBQUcsb0JBQW9CLENBQUM7QUFFNUM7Ozs7Ozs7O0dBUUc7QUFFSCxNQUFNLE9BQU8sdUJBQXVCO0lBRHBDO1FBRW1CLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7S0E4RDlDO0lBNURDOzs7Ozs7O09BT0c7SUFDSCxVQUFVLENBQUMsTUFBbUIsRUFBRSxPQUE0QjtRQUMxRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNoQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQTRCLENBQUM7UUFDOUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdDLEtBQUssQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUVELElBQUksR0FBRyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVoQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUMsR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELEtBQUssQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlLENBQUMsTUFBbUI7UUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUE0QixDQUFDO1FBQ3BGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QyxLQUFLLENBQUMsRUFBRSxHQUFHLGNBQWMsQ0FBQztZQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxVQUFVO1FBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxlQUFlO1FBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVPLGVBQWUsQ0FBQyxXQUFtQixFQUFFLElBQTRCO1FBQ3ZFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEUsT0FBTyxzQkFBc0IsV0FBVyx5QkFBeUIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3pGLENBQUM7OEdBOURVLHVCQUF1QjtrSEFBdkIsdUJBQXVCLGNBRFYsTUFBTTs7MkZBQ25CLHVCQUF1QjtrQkFEbkMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGJ1aWxkVGhlbWVDc3MgfSBmcm9tICcuL2Nzcyc7XG5pbXBvcnQgeyByZXNvbHZlVGhlbWUgfSBmcm9tICcuL2RlZmluZS1jb25maWcnO1xuaW1wb3J0IHsgVG9rZW5PdXRwdXRBZGFwdGVyLCBpb25pY1ZhcnNBZGFwdGVyIH0gZnJvbSAnLi90b2tlbi1hZGFwdGVyJztcbmltcG9ydCB7IFRoZW1lQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IFNUWUxFX0lEID0gJ25neHNtay10aGVtZSc7XG5jb25zdCBJT05JQ19TVFlMRV9JRCA9ICduZ3hzbWstaW9uaWMtdGhlbWUnO1xuXG4vKipcbiAqIEluamVjdHMgZ2VuZXJhdGVkIHRoZW1lIENTUyBpbnRvIHRoZSBkb2N1bWVudCBhdCBydW50aW1lLlxuICpcbiAqIERlY291cGxlZCBmcm9tIGRhcmstbW9kZSBzd2l0Y2hpbmcgc28gY29uc3VtZXJzIHdobyBvbmx5IG5lZWRcbiAqIHRva2VuIGluamVjdGlvbiAoZS5nLiB0aGUgQ0xJIHRoZW1lLXByZXZpZXcpIGRvbid0IHB1bGwgaW5cbiAqIGNsYXNzLXRvZ2dsZSAvIGxvY2FsU3RvcmFnZSAvIG1hdGNoTWVkaWEgbG9naWMuXG4gKlxuICogU1NSLXNhZmU6IGFsbCBET00gYWNjZXNzIGdvZXMgdGhyb3VnaCB0aGUgaW5qZWN0ZWQgZG9jdW1lbnQuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTmd4VGhlbWVJbmplY3RvclNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAvKipcbiAgICogQXBwbHkgYSB0aGVtZSBhdCBydW50aW1lLiBHZW5lcmF0ZXMgdG9rZW4gQ1NTIGZyb20gdGhlIGNvbmZpZyBhbmQgc3dhcHNcbiAgICogaXQgaW50byBhIGRlZGljYXRlZCBgPHN0eWxlPmAgZWxlbWVudCwgb3ZlcnJpZGluZyB0aGUgYnVpbGQtdGltZSB0aGVtZS5cbiAgICpcbiAgICogQHBhcmFtIGFkYXB0ZXIgT3B0aW9uYWwgb3V0cHV0IGFkYXB0ZXIuIERlZmF1bHRzIHRvIHRoZSBzdGFuZGFyZCBOR1hTTUtcbiAgICogICBgLS1uZ3hzbWstKmAgQ1NTIHZhcmlhYmxlcy4gUGFzcyBgaW9uaWNWYXJzQWRhcHRlcmAgdG8gYWxzbyBnZW5lcmF0ZVxuICAgKiAgIGAtLWlvbi0qYCB2YXJpYWJsZXMgZm9yIElvbmljIGNvbXBvbmVudHMuXG4gICAqL1xuICBhcHBseVRoZW1lKGNvbmZpZzogVGhlbWVDb25maWcsIGFkYXB0ZXI/OiBUb2tlbk91dHB1dEFkYXB0ZXIpOiB2b2lkIHtcbiAgICBjb25zdCBoZWFkID0gdGhpcy5kb2N1bWVudC5oZWFkO1xuICAgIGxldCBzdHlsZSA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU1RZTEVfSUQpIGFzIEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghc3R5bGUpIHtcbiAgICAgIHN0eWxlID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgc3R5bGUuaWQgPSBTVFlMRV9JRDtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cblxuICAgIGxldCBjc3MgPSBidWlsZFRoZW1lQ3NzKGNvbmZpZyk7XG5cbiAgICBpZiAoYWRhcHRlcikge1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlVGhlbWUoY29uZmlnKTtcbiAgICAgIGNvbnN0IHBsYXRmb3JtVmFycyA9IGFkYXB0ZXIudmFycyhyZXNvbHZlZCk7XG4gICAgICBjc3MgKz0gJ1xcbicgKyB0aGlzLmJ1aWxkQWRhcHRlckNzcyhhZGFwdGVyLm5hbWUsIHBsYXRmb3JtVmFycyk7XG4gICAgfVxuXG4gICAgc3R5bGUudGV4dENvbnRlbnQgPSBjc3M7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgSW9uaWMtc3BlY2lmaWMgdG9rZW4gdmFyaWFibGVzIGFsb25nc2lkZSB0aGUgc3RhbmRhcmQgTkdYU01LIHRoZW1lLlxuICAgKiBHZW5lcmF0ZXMgYC0taW9uLSpgIHZhcmlhYmxlcyBkZXJpdmVkIGZyb20gdGhlIHNhbWUgYFRoZW1lQ29uZmlnYC5cbiAgICovXG4gIGFwcGx5SW9uaWNUaGVtZShjb25maWc6IFRoZW1lQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgaGVhZCA9IHRoaXMuZG9jdW1lbnQuaGVhZDtcbiAgICBsZXQgc3R5bGUgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElPTklDX1NUWUxFX0lEKSBhcyBIVE1MU3R5bGVFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBzdHlsZSA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgIHN0eWxlLmlkID0gSU9OSUNfU1RZTEVfSUQ7XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVUaGVtZShjb25maWcpO1xuICAgIGNvbnN0IHZhcnMgPSBpb25pY1ZhcnNBZGFwdGVyLnZhcnMocmVzb2x2ZWQpO1xuICAgIHN0eWxlLnRleHRDb250ZW50ID0gdGhpcy5idWlsZEFkYXB0ZXJDc3MoJ2lvbmljJywgdmFycyk7XG4gIH1cblxuICAvKiogUmVtb3ZlIGEgcnVudGltZS1hcHBsaWVkIHRoZW1lLCBmYWxsaW5nIGJhY2sgdG8gdGhlIGJ1aWxkLXRpbWUgQ1NTLiAqL1xuICBjbGVhclRoZW1lKCk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU1RZTEVfSUQpPy5yZW1vdmUoKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgdGhlIElvbmljIGFkYXB0ZXIgc3R5bGVzaGVldC4gKi9cbiAgY2xlYXJJb25pY1RoZW1lKCk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSU9OSUNfU1RZTEVfSUQpPy5yZW1vdmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRBZGFwdGVyQ3NzKGFkYXB0ZXJOYW1lOiBzdHJpbmcsIHZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGxpbmVzID0gT2JqZWN0LmVudHJpZXModmFycykubWFwKChbaywgdl0pID0+IGAgICR7a306ICR7dn07YCk7XG4gICAgcmV0dXJuIGAvKiBAbmd4c21rL3RoZW1lIOKAlCAke2FkYXB0ZXJOYW1lfSBhZGFwdGVyICovXFxuOnJvb3Qge1xcbiR7bGluZXMuam9pbignXFxuJyl9XFxufWA7XG4gIH1cbn1cbiJdfQ==
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtaW5qZWN0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lL3NyYy9saWIvdGhlbWUtaW5qZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUN0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFzQixnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUd2RSxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUM7QUFDaEMsTUFBTSxjQUFjLEdBQUcsb0JBQW9CLENBQUM7QUFFNUM7Ozs7Ozs7O0dBUUc7QUFFSCxNQUFNLE9BQU8sdUJBQXVCO0lBRHBDO1FBRW1CLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFhLENBQUM7S0E2RTFEO0lBM0VDOzs7Ozs7O09BT0c7SUFDSCxVQUFVLENBQUMsTUFBbUIsRUFBRSxPQUE0QjtRQUMxRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNoQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQTRCLENBQUM7UUFDOUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdDLEtBQUssQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDO1lBQ3BCLElBQUksRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUVELElB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LElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3BILENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOzhHQTdFVSx1QkFBdUI7a0hBQXZCLHVCQUF1QixjQURWLE1BQU07OzJGQUNuQix1QkFBdUI7a0JBRG5DLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBidWlsZFRoZW1lQ3NzIH0gZnJvbSAnLi9jc3MnO1xuaW1wb3J0IHsgcmVzb2x2ZVRoZW1lIH0gZnJvbSAnLi9kZWZpbmUtY29uZmlnJztcbmltcG9ydCB7IFRva2VuT3V0cHV0QWRhcHRlciwgaW9uaWNWYXJzQWRhcHRlciB9IGZyb20gJy4vdG9rZW4tYWRhcHRlcic7XG5pbXBvcnQgeyBUaGVtZUNvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBTVFlMRV9JRCA9ICduZ3hzbWstdGhlbWUnO1xuY29uc3QgSU9OSUNfU1RZTEVfSUQgPSAnbmd4c21rLWlvbmljLXRoZW1lJztcblxuLyoqXG4gKiBJbmplY3RzIGdlbmVyYXRlZCB0aGVtZSBDU1MgaW50byB0aGUgZG9jdW1lbnQgYXQgcnVudGltZS5cbiAqXG4gKiBEZWNvdXBsZWQgZnJvbSBkYXJrLW1vZGUgc3dpdGNoaW5nIHNvIGNvbnN1bWVycyB3aG8gb25seSBuZWVkXG4gKiB0b2tlbiBpbmplY3Rpb24gKGUuZy4gdGhlIENMSSB0aGVtZS1wcmV2aWV3KSBkb24ndCBwdWxsIGluXG4gKiBjbGFzcy10b2dnbGUgLyBsb2NhbFN0b3JhZ2UgLyBtYXRjaE1lZGlhIGxvZ2ljLlxuICpcbiAqIFNTUi1zYWZlOiBhbGwgRE9NIGFjY2VzcyBnb2VzIHRocm91Z2ggdGhlIGluamVjdGVkIGRvY3VtZW50LlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE5neFRoZW1lSW5qZWN0b3JTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCkgYXMgRG9jdW1lbnQ7XG5cbiAgLyoqXG4gICAqIEFwcGx5IGEgdGhlbWUgYXQgcnVudGltZS4gR2VuZXJhdGVzIHRva2VuIENTUyBmcm9tIHRoZSBjb25maWcgYW5kIHN3YXBzXG4gICAqIGl0IGludG8gYSBkZWRpY2F0ZWQgYDxzdHlsZT5gIGVsZW1lbnQsIG92ZXJyaWRpbmcgdGhlIGJ1aWxkLXRpbWUgdGhlbWUuXG4gICAqXG4gICAqIEBwYXJhbSBhZGFwdGVyIE9wdGlvbmFsIG91dHB1dCBhZGFwdGVyLiBEZWZhdWx0cyB0byB0aGUgc3RhbmRhcmQgTkdYU01LXG4gICAqICAgYC0tbmd4c21rLSpgIENTUyB2YXJpYWJsZXMuIFBhc3MgYGlvbmljVmFyc0FkYXB0ZXJgIHRvIGFsc28gZ2VuZXJhdGVcbiAgICogICBgLS1pb24tKmAgdmFyaWFibGVzIGZvciBJb25pYyBjb21wb25lbnRzLlxuICAgKi9cbiAgYXBwbHlUaGVtZShjb25maWc6IFRoZW1lQ29uZmlnLCBhZGFwdGVyPzogVG9rZW5PdXRwdXRBZGFwdGVyKTogdm9pZCB7XG4gICAgY29uc3QgaGVhZCA9IHRoaXMuZG9jdW1lbnQuaGVhZDtcbiAgICBsZXQgc3R5bGUgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNUWUxFX0lEKSBhcyBIVE1MU3R5bGVFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBzdHlsZSA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgIHN0eWxlLmlkID0gU1RZTEVfSUQ7XG4gICAgICBoZWFkPy5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuXG4gICAgbGV0IGNzcyA9IGJ1aWxkVGhlbWVDc3MoY29uZmlnKTtcblxuICAgIGlmIChhZGFwdGVyKSB7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVUaGVtZShjb25maWcpO1xuICAgICAgY29uc3QgcGxhdGZvcm1WYXJzID0gYWRhcHRlci52YXJzKHJlc29sdmVkKTtcbiAgICAgIGNzcyArPSAnXFxuJyArIHRoaXMuYnVpbGRBZGFwdGVyQ3NzKGFkYXB0ZXIubmFtZSwgcGxhdGZvcm1WYXJzKTtcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUpIHtcbiAgICAgIHN0eWxlLnRleHRDb250ZW50ID0gY3NzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBJb25pYy1zcGVjaWZpYyB0b2tlbiB2YXJpYWJsZXMgYWxvbmdzaWRlIHRoZSBzdGFuZGFyZCBOR1hTTUsgdGhlbWUuXG4gICAqIEdlbmVyYXRlcyBgLS1pb24tKmAgdmFyaWFibGVzIGRlcml2ZWQgZnJvbSB0aGUgc2FtZSBgVGhlbWVDb25maWdgLlxuICAgKi9cbiAgYXBwbHlJb25pY1RoZW1lKGNvbmZpZzogVGhlbWVDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBoZWFkID0gdGhpcy5kb2N1bWVudC5oZWFkO1xuICAgIGxldCBzdHlsZSA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSU9OSUNfU1RZTEVfSUQpIGFzIEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghc3R5bGUpIHtcbiAgICAgIHN0eWxlID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgc3R5bGUuaWQgPSBJT05JQ19TVFlMRV9JRDtcbiAgICAgIGhlYWQ/LmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVUaGVtZShjb25maWcpO1xuICAgIGNvbnN0IGxpZ2h0VmFycyA9IGlvbmljVmFyc0FkYXB0ZXIudmFycyhyZXNvbHZlZCk7XG4gICAgY29uc3QgZGFya1ZhcnMgPSBpb25pY1ZhcnNBZGFwdGVyLmRhcmtWYXJzID8gaW9uaWNWYXJzQWRhcHRlci5kYXJrVmFycyhyZXNvbHZlZCkgOiB1bmRlZmluZWQ7XG4gICAgaWYgKHN0eWxlKSB7XG4gICAgICBzdHlsZS50ZXh0Q29udGVudCA9IHRoaXMuYnVpbGRBZGFwdGVyQ3NzKCdpb25pYycsIGxpZ2h0VmFycywgZGFya1ZhcnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZW1vdmUgYSBydW50aW1lLWFwcGxpZWQgdGhlbWUsIGZhbGxpbmcgYmFjayB0byB0aGUgYnVpbGQtdGltZSBDU1MuICovXG4gIGNsZWFyVGhlbWUoKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChTVFlMRV9JRCk/LnJlbW92ZSgpO1xuICB9XG5cbiAgLyoqIFJlbW92ZSB0aGUgSW9uaWMgYWRhcHRlciBzdHlsZXNoZWV0LiAqL1xuICBjbGVhcklvbmljVGhlbWUoKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChJT05JQ19TVFlMRV9JRCk/LnJlbW92ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEFkYXB0ZXJDc3MoXG4gICAgYWRhcHRlck5hbWU6IHN0cmluZyxcbiAgICB2YXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIGRhcmtWYXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBsaW5lcyA9IE9iamVjdC5lbnRyaWVzKHZhcnMpLm1hcCgoW2ssIHZdKSA9PiBgICAke2t9OiAke3Z9O2ApO1xuICAgIGxldCByZXN1bHQgPSBgLyogQG5neHNtay90aGVtZSDigJQgJHthZGFwdGVyTmFtZX0gYWRhcHRlciAqL1xcbjpyb290IHtcXG4ke2xpbmVzLmpvaW4oJ1xcbicpfVxcbn1gO1xuICAgIGlmIChkYXJrVmFycyAmJiBPYmplY3Qua2V5cyhkYXJrVmFycykubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGFya0xpbmVzID0gT2JqZWN0LmVudHJpZXMoZGFya1ZhcnMpLm1hcCgoW2ssIHZdKSA9PiBgICAke2t9OiAke3Z9O2ApO1xuICAgICAgcmVzdWx0ICs9IGBcXG5cXG46cm9vdC5kYXJrLCBib2R5LmRhcmssIGh0bWwuZGFyaywgW2RhdGEtdGhlbWU9XCJkYXJrXCJdIHtcXG4ke2RhcmtMaW5lcy5qb2luKCdcXG4nKX1cXG59YDtcbiAgICAgIHJlc3VsdCArPSBgXFxuXFxuQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xcbiAgOnJvb3Q6bm90KC5saWdodCkge1xcbiAgJHtkYXJrTGluZXMuam9pbignXFxuICAnKX1cXG4gIH1cXG59YDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19