obsidian-dev-utils 100.1.0 → 100.2.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.
@@ -238,6 +238,7 @@ function defineEslintConfigs(options = {}) {
238
238
  ...getEslintCommentsConfigs(context),
239
239
  ...getObsidianDevUtilsPluginConfigs(context),
240
240
  ...getNodeCompatConfigs(context),
241
+ ...getNodeBuiltinsConfigs(context),
241
242
  ...getIntegrationTestConfigs(),
242
243
  ...getManifestConfigs(),
243
244
  ...getLicenseConfigs(),
@@ -494,14 +495,6 @@ function getImportXConfigs(context) {
494
495
  }
495
496
  function getIntegrationTestConfigs() {
496
497
  return (0, import_config.defineConfig)([
497
- {
498
- // Integration tests run in a Node environment and legitimately read files / paths, so the Node-builtins bans do not apply to them.
499
- files: [(0, import_path.join)(import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.Src, import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.AnyPath, import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.AnyIntegrationTestTs)],
500
- rules: {
501
- "import-x/no-nodejs-modules": "off",
502
- "obsidianmd/no-nodejs-modules": "off"
503
- }
504
- },
505
498
  {
506
499
  /*
507
500
  * An integration test that drives the UI with `dispatchEvent(new KeyboardEvent(...))` produces an
@@ -561,6 +554,50 @@ function getManifestConfigs() {
561
554
  }
562
555
  ]);
563
556
  }
557
+ function getNodeBuiltinsConfigs(context) {
558
+ return (0, import_config.defineConfig)([
559
+ {
560
+ // Integration tests run in a Node environment and legitimately read files / paths, so the Node-builtins bans do not apply to them.
561
+ files: [(0, import_path.join)(import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.Src, import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.AnyPath, import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.AnyIntegrationTestTs)],
562
+ rules: {
563
+ "import-x/no-nodejs-modules": "off",
564
+ "obsidianmd/no-nodejs-modules": "off"
565
+ }
566
+ },
567
+ {
568
+ /*
569
+ * A `desktop-` prefixed module is desktop-only by convention (see L5 in `AGENTS.md`): it is reached only
570
+ * through a `Platform.isDesktopApp`-gated dynamic `import()` in its caller, so its static Node imports never
571
+ * load on mobile. Neither rule can see that gate, because it sits one file up — the correctly-written pattern
572
+ * reports anyway, and no author-side rewrite silences it.
573
+ *
574
+ * Exempting BY FILENAME rather than by a disable comment mirrors the `*.android.integration.test.ts` exemption
575
+ * in `getIntegrationTestConfigs`, and carries the same trade-off knowingly: the exemption keys off what
576
+ * the file is NAMED rather than what it does, so the prefix is load-bearing. A desktop-only module that skips
577
+ * the prefix keeps reporting, and a cross-platform module that wrongly takes it gets an exemption it should
578
+ * not have.
579
+ */
580
+ files: [(0, import_path.join)(import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.Src, import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.AnyPath, import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.AnyDesktopTs)],
581
+ rules: {
582
+ "import-x/no-nodejs-modules": "off",
583
+ "obsidianmd/no-nodejs-modules": "off"
584
+ }
585
+ },
586
+ {
587
+ /*
588
+ * A unit test runs under vitest in Node and is never bundled into `main.js`, so the Node-builtins bans do not
589
+ * apply to it either — the identical argument the integration-test block above already accepts. This also
590
+ * covers the SUT-grouped `*.desktop.test.ts` shape, which names the platform as a dot segment after the
591
+ * subject under test rather than as a `desktop-` prefix.
592
+ */
593
+ files: context.testFiles,
594
+ rules: {
595
+ "import-x/no-nodejs-modules": "off",
596
+ "obsidianmd/no-nodejs-modules": "off"
597
+ }
598
+ }
599
+ ]);
600
+ }
564
601
  function getNodeCompatConfigs(context) {
565
602
  const minimumNodeVersion = ">=16.16.0";
566
603
  return (0, import_config.defineConfig)([
@@ -1156,4 +1193,4 @@ function getUnicornConfigs(context) {
1156
1193
  EslintConfigContext,
1157
1194
  defineEslintConfigs
1158
1195
  });
1159
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgY29uZmlndXJhdGlvbiBmb3IgVHlwZVNjcmlwdCBwcm9qZWN0cyB3aXRoIHZhcmlvdXMgcGx1Z2lucy5cbiAqXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIEVTTGludCBjb25maWd1cmF0aW9ucyBmb3IgVHlwZVNjcmlwdCBwcm9qZWN0cywgaW50ZWdyYXRpbmcgbXVsdGlwbGUgRVNMaW50IHBsdWdpbnNcbiAqIHN1Y2ggYXMgYEB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJgLCBgQHR5cGVzY3JpcHQtZXNsaW50L2VzbGludC1wbHVnaW5gLFxuICogYGVzbGludC1wbHVnaW4tbW9kdWxlcy1uZXdsaW5lc2AsIGBAc3R5bGlzdGljL2VzbGludC1wbHVnaW5gLlxuICogSXQgc2V0cyB1cCBwYXJzZXJzLCBwbHVnaW5zLCBhbmQgcnVsZXMgZm9yIG1haW50YWluaW5nIGNvZGUgcXVhbGl0eSBhbmQgY29uc2lzdGVuY3kuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIERlY2xhcmF0aXZlIEVTTGludCBydWxlL3BsdWdpbiBjb25maWd1cmF0aW9uOyBjb3JyZWN0bmVzcyBpcyB2ZXJpZmllZCBieSBydW5uaW5nIEVTTGludCwgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgTGludGVyIH0gZnJvbSAnZXNsaW50JztcblxuLyogZXNsaW50LWRpc2FibGUgbm8tbWFnaWMtbnVtYmVycyAtLSBXZSBkaXNhYmxlZCBtYWdpYyBudW1iZXJzIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBhbGwgb3ZlciB0aGUgY29uZmlncy4gKi9cbmltcG9ydCBjb21tZW50c0NvbmZpZ3MgZnJvbSAnQGVzbGludC1jb21tdW5pdHkvZXNsaW50LXBsdWdpbi1lc2xpbnQtY29tbWVudHMvY29uZmlncyc7XG5pbXBvcnQgeyBpbmNsdWRlSWdub3JlRmlsZSB9IGZyb20gJ0Blc2xpbnQvY29uZmlnLWhlbHBlcnMnO1xuaW1wb3J0IGVzbGludCBmcm9tICdAZXNsaW50L2pzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1yZW5hbWUtZGVmYXVsdCAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgcGx1Z2luYCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IHN0eWxpc3RpYyBmcm9tICdAc3R5bGlzdGljL2VzbGludC1wbHVnaW4nO1xuaW1wb3J0IHsgY3JlYXRlVHlwZVNjcmlwdEltcG9ydFJlc29sdmVyIH0gZnJvbSAnZXNsaW50LWltcG9ydC1yZXNvbHZlci10eXBlc2NyaXB0JztcbmltcG9ydCB7IGZsYXRDb25maWdzIGFzIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncyB9IGZyb20gJ2VzbGludC1wbHVnaW4taW1wb3J0LXgnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBfZGVmYXVsdGAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCBub2RlUGx1Z2luIGZyb20gJ2VzbGludC1wbHVnaW4tbic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYHBsdWdpbmAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCBvYnNpZGlhbm1kIGZyb20gJ2VzbGludC1wbHVnaW4tb2JzaWRpYW5tZCc7XG5pbXBvcnQgeyBQbGFpblRleHRQYXJzZXIgfSBmcm9tICdlc2xpbnQtcGx1Z2luLW9ic2lkaWFubWQvZGlzdC9saWIvcGxhaW5UZXh0UGFyc2VyLmpzJztcbmltcG9ydCB7IGNvbmZpZ3MgYXMgcGVyZmVjdGlvbmlzdENvbmZpZ3MgfSBmcm9tICdlc2xpbnQtcGx1Z2luLXBlcmZlY3Rpb25pc3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBpbmRleGAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCB1bmljb3JuIGZyb20gJ2VzbGludC1wbHVnaW4tdW5pY29ybic7XG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tICdlc2xpbnQvY29uZmlnJztcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1yZW5hbWUtZGVmYXVsdCAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG5pbXBvcnQgdHNlc2xpbnQgZnJvbSAndHlwZXNjcmlwdC1lc2xpbnQnO1xuXG5pbXBvcnQgeyBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB9IGZyb20gJy4uLy4uL29ic2lkaWFuL3BsdWdpbi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnLi4vLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBnZXRSb290Rm9sZGVyIH0gZnJvbSAnLi4vcm9vdC50cyc7XG5pbXBvcnQgeyBub1Jlc3RyaWN0ZWRTeW50YXhSdWxlRW50cmllcyB9IGZyb20gJy4vZXNsaW50LW5vLXJlc3RyaWN0ZWQtc3ludGF4LnRzJztcbmltcG9ydCB7IGpzb25QbHVnaW4gfSBmcm9tICcuL2VzbGludC1ydWxlcy9tYW5pZmVzdC1oZWxwZXJzLnRzJztcbmltcG9ydCB7IG9ic2lkaWFuRGV2VXRpbHNQbHVnaW4gfSBmcm9tICcuL2VzbGludC1ydWxlcy9vYnNpZGlhbi1kZXYtdXRpbHMtcGx1Z2luLnRzJztcblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgZGVmaW5pbmcgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmluZUVzbGludENvbmZpZ3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBidWlsZHMgY3VzdG9tIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gY29udGV4dC5cbiAgICogQHJldHVybnMgVGhlIGN1c3RvbSBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gICAqL1xuICBjdXN0b21Db25maWdzPyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgZWRpdHMgdGhlIEVTTGludCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIEVTTGludCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG4gICAqL1xuICBlZGl0Q29udGV4dD8oY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhlIGNvbnRleHQgZm9yIGRlZmluaW5nIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVzbGludENvbmZpZ0NvbnRleHQge1xuICAvKipcbiAgICogVGhlIHJvb3QgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb290Q29uZmlnRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JpcHQgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NyaXB0RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc291cmNlRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXN0IGZpbGVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRlc3RGaWxlczogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogVGhlIGFsbCBmaWxlcy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGFsbCBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyBhbGxGaWxlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnRlc3RGaWxlcywgLi4udGhpcy5zY3JpcHRGaWxlcywgLi4udGhpcy5yb290Q29uZmlnRmlsZXMsIC4uLnRoaXMuc291cmNlRmlsZXNdO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGQgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYnVpbGRzIEVTTGludCBjb25maWd1cmF0aW9ucyBmb3IgVHlwZVNjcmlwdCBwcm9qZWN0cywgaW50ZWdyYXRpbmcgbXVsdGlwbGUgRVNMaW50IHBsdWdpbnNcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBkZWZpbmluZyBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRXNsaW50Q29uZmlncyhvcHRpb25zOiBEZWZpbmVFc2xpbnRDb25maWdzT3B0aW9ucyA9IHt9KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBFc2xpbnRDb25maWdDb250ZXh0KCk7XG4gIGNvbnRleHQucm9vdENvbmZpZ0ZpbGVzLnB1c2goXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQ29tbWl0bGludENvbmZpZ1RzLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkVzbGludENvbmZpZ010cyxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5WaXRlc3RDb25maWdUc1xuICApO1xuICBjb250ZXh0LnNjcmlwdEZpbGVzLnB1c2goXG4gICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TY3JpcHRzLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlUcylcbiAgKTtcbiAgY29udGV4dC5zb3VyY2VGaWxlcy5wdXNoKFxuICAgIGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3JjLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TcmMsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVRzeClcbiAgKTtcbiAgY29udGV4dC50ZXN0RmlsZXMucHVzaChcbiAgICBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlRlc3RzLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Nb2NrcywgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55UGF0aCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55VHMpLFxuICAgIGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3JjLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlUZXN0VHMpXG4gICk7XG5cbiAgaWYgKG9wdGlvbnMuZWRpdENvbnRleHQpIHtcbiAgICBvcHRpb25zLmVkaXRDb250ZXh0KGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgY3VzdG9tQ29uZmlncyA9IG9wdGlvbnMuY3VzdG9tQ29uZmlncz8uKGNvbnRleHQpID8/IFtdO1xuXG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgLi4uZ2V0R2l0SWdub3JlQ29uZmlncygpLFxuICAgIC8vIE9ic2lkaWFubWQgY29uZmlncyBydW4gZmlyc3Qgc28gb3VyIHN0cmljdGVyIHJ1bGVzIG92ZXJyaWRlIHRoZWlyIHJlbGF4ZWQgZGVmYXVsdHNcbiAgICAuLi5nZXRPYnNpZGlhbkxpbnRDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldEVzbGludENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VHNlc2xpbnRDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldFN0eWxpc3RpY0NvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0SW1wb3J0WENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0UGVyZmVjdGlvbmlzdENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VW5pY29ybkNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0RXNsaW50SW1wb3J0UmVzb2x2ZXJUeXBlc2NyaXB0Q29uZmlncygpLFxuICAgIC4uLmdldEVzbGludENvbW1lbnRzQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRPYnNpZGlhbkRldlV0aWxzUGx1Z2luQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXROb2RlQ29tcGF0Q29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRJbnRlZ3JhdGlvblRlc3RDb25maWdzKCksXG4gICAgLi4uZ2V0TWFuaWZlc3RDb25maWdzKCksXG4gICAgLi4uZ2V0TGljZW5zZUNvbmZpZ3MoKSxcbiAgICAuLi5jdXN0b21Db25maWdzXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEVzbGludENvbW1lbnRzQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLW5hbWVkLWFzLWRlZmF1bHQtbWVtYmVyIC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGByZWNvbW1lbmRlZGAgaXMgdG9vIGNvbmZ1c2luZy5cbiAgICAgIGV4dGVuZHM6IFtjb21tZW50c0NvbmZpZ3MucmVjb21tZW5kZWRdLFxuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdAZXNsaW50LWNvbW11bml0eS9lc2xpbnQtY29tbWVudHMvcmVxdWlyZS1kZXNjcmlwdGlvbic6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRFc2xpbnRDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBleHRlbmRzOiBbZXNsaW50LmNvbmZpZ3MucmVjb21tZW5kZWRdLFxuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdhY2Nlc3Nvci1wYWlycyc6ICdlcnJvcicsXG4gICAgICAgICdhcnJheS1jYWxsYmFjay1yZXR1cm4nOiAnZXJyb3InLFxuICAgICAgICAnY2FtZWxjYXNlJzogJ2Vycm9yJyxcbiAgICAgICAgJ2NhcGl0YWxpemVkLWNvbW1lbnRzJzogWydlcnJvcicsICdhbHdheXMnLCB7IGJsb2NrOiB7IGlnbm9yZVBhdHRlcm46ICd2OCcgfSB9XSxcbiAgICAgICAgJ2NvbXBsZXhpdHknOiAnZXJyb3InLFxuICAgICAgICAnY29uc2lzdGVudC10aGlzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2N1cmx5JzogJ2Vycm9yJyxcbiAgICAgICAgJ2RlZmF1bHQtY2FzZSc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LWNhc2UtbGFzdCc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LXBhcmFtLWxhc3QnOiAnZXJyb3InLFxuICAgICAgICAnZXFlcWVxJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtbmFtZS1tYXRjaGluZyc6ICdlcnJvcicsXG4gICAgICAgICdmdW5jLW5hbWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtc3R5bGUnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAnZGVjbGFyYXRpb24nLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93QXJyb3dGdW5jdGlvbnM6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnZ3JvdXBlZC1hY2Nlc3Nvci1wYWlycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdnZXRCZWZvcmVTZXQnXG4gICAgICAgIF0sXG4gICAgICAgICdndWFyZC1mb3ItaW4nOiAnZXJyb3InLFxuICAgICAgICAnbm8tYWxlcnQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tYXJyYXktY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tYml0d2lzZSc6ICdlcnJvcicsXG4gICAgICAgICduby1jYWxsZXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tY29uc29sZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICd3YXJuJyxcbiAgICAgICAgICAgICAgJ2Vycm9yJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ25vLWNvbnN0cnVjdG9yLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgICduby1kaXYtcmVnZXgnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZWxzZS1yZXR1cm4nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvd0Vsc2VJZjogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1lbXB0eS1mdW5jdGlvbic6ICdlcnJvcicsXG4gICAgICAgICduby1leHRlbmQtbmF0aXZlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWV4dHJhLWJpbmQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZXh0cmEtbGFiZWwnOiAnZXJyb3InLFxuICAgICAgICAnbm8taW1wbGljaXQtY29lcmNpb24nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvdzogW1xuICAgICAgICAgICAgICAnISEnXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnbm8taW1wbGllZC1ldmFsJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWlubmVyLWRlY2xhcmF0aW9ucyc6ICdlcnJvcicsXG4gICAgICAgICduby1pdGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICduby1sYWJlbC12YXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tbGFiZWxzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmUtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmVseS1pZic6ICdlcnJvcicsXG4gICAgICAgICduby1sb29wLWZ1bmMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tbWFnaWMtbnVtYmVycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRldGVjdE9iamVjdHM6IHRydWUsXG4gICAgICAgICAgICBlbmZvcmNlQ29uc3Q6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmU6IFtcbiAgICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1tdWx0aS1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tbXVsdGktc3RyJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lZ2F0ZWQtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lc3RlZC10ZXJuYXJ5JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy1mdW5jJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy13cmFwcGVycyc6ICdlcnJvcicsXG4gICAgICAgICduby1vYmplY3QtY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tb2N0YWwtZXNjYXBlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb21pc2UtZXhlY3V0b3ItcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb3RvJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXJlc3RyaWN0ZWQtc3ludGF4JzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgLi4ubm9SZXN0cmljdGVkU3ludGF4UnVsZUVudHJpZXNcbiAgICAgICAgXSxcbiAgICAgICAgJ25vLXJldHVybi1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2NyaXB0LXVybCc6ICdlcnJvcicsXG4gICAgICAgICduby1zZWxmLWNvbXBhcmUnOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2VxdWVuY2VzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXNoYWRvdyc6ICdlcnJvcicsXG4gICAgICAgICduby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdGhyb3ctbGl0ZXJhbCc6ICdlcnJvcicsXG4gICAgICAgICduby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVubmVlZGVkLXRlcm5hcnknOiAnZXJyb3InLFxuICAgICAgICAnbm8tdW5yZWFjaGFibGUtbG9vcCc6ICdlcnJvcicsXG4gICAgICAgICduby11bnVzZWQtZXhwcmVzc2lvbnMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdXNlbGVzcy1hc3NpZ25tZW50JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtY2FsbCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbXB1dGVkLWtleSc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbmNhdCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbnN0cnVjdG9yJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmVuYW1lJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXZhcic6ICdlcnJvcicsXG4gICAgICAgICduby12b2lkJzogJ2Vycm9yJyxcbiAgICAgICAgJ29iamVjdC1zaG9ydGhhbmQnOiAnZXJyb3InLFxuICAgICAgICAnb3BlcmF0b3ItYXNzaWdubWVudCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItYXJyb3ctY2FsbGJhY2snOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLWNvbnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1leHBvbmVudGlhdGlvbi1vcGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbmFtZWQtY2FwdHVyZS1ncm91cCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbnVtZXJpYy1saXRlcmFscyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItb2JqZWN0LWhhcy1vd24nOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLW9iamVjdC1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9ycyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItcmVnZXgtbGl0ZXJhbHMnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXJlc3QtcGFyYW1zJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXRlbXBsYXRlJzogJ2Vycm9yJyxcbiAgICAgICAgJ3JhZGl4JzogJ2Vycm9yJyxcbiAgICAgICAgJ3JlcXVpcmUtYXRvbWljLXVwZGF0ZXMnOiAnZXJyb3InLFxuICAgICAgICAncmVxdWlyZS1hd2FpdCc6ICdlcnJvcicsXG4gICAgICAgICdzeW1ib2wtZGVzY3JpcHRpb24nOiAnZXJyb3InLFxuICAgICAgICAndW5pY29kZS1ib20nOiAnZXJyb3InLFxuICAgICAgICAndmFycy1vbi10b3AnOiAnZXJyb3InLFxuICAgICAgICAneW9kYSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICduby1tYWdpYy1udW1iZXJzJzogJ29mZidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRFc2xpbnRJbXBvcnRSZXNvbHZlclR5cGVzY3JpcHRDb25maWdzKCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICdpbXBvcnQteC9yZXNvbHZlci1uZXh0JzogW1xuICAgICAgICAgIGNyZWF0ZVR5cGVTY3JpcHRJbXBvcnRSZXNvbHZlcih7XG4gICAgICAgICAgICBhbHdheXNUcnlUeXBlczogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRHaXRJZ25vcmVDb25maWdzKCk6IExpbnRlci5Db25maWdbXSB7XG4gIGNvbnN0IGdpdGlnbm9yZVBhdGggPSBqb2luKGdldFJvb3RGb2xkZXIoKSA/PyAnJywgJy5naXRpZ25vcmUnKTtcbiAgaWYgKCFleGlzdHNTeW5jKGdpdGlnbm9yZVBhdGgpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBbaW5jbHVkZUlnbm9yZUZpbGUoZ2l0aWdub3JlUGF0aCldO1xufVxuXG5mdW5jdGlvbiBnZXRJbXBvcnRYQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW1xuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MucmVjb21tZW5kZWQsXG4gICAgICAgIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncy50eXBlc2NyaXB0LFxuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MuZXJyb3JzLFxuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3Mud2FybmluZ3NcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvZXh0ZW5zaW9ucyc6IFsnZXJyb3InLCAnaWdub3JlUGFja2FnZXMnXSxcbiAgICAgICAgJ2ltcG9ydC14L2ZpcnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L2ltcG9ydHMtZmlyc3QnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbmV3bGluZS1hZnRlci1pbXBvcnQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYWJzb2x1dGUtcGF0aCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1hbWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYW5vbnltb3VzLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWNvbW1vbmpzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWN5Y2xlJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlcHJlY2F0ZWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZHVwbGljYXRlcyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1keW5hbWljLXJlcXVpcmUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZW1wdHktbmFtZWQtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWltcG9ydC1tb2R1bGUtZXhwb3J0cyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1tdXRhYmxlLWV4cG9ydHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbmFtZWQtZGVmYXVsdCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1uYW1lc3BhY2UnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVsYXRpdmUtcGFja2FnZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVzdHJpY3RlZC1wYXRocyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1zZWxmLWltcG9ydCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby11bmFzc2lnbmVkLWltcG9ydCc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICcqKi8qLmNzcycsXG4gICAgICAgICAgICAgICcqKi8qLnNhc3MnLFxuICAgICAgICAgICAgICAnKiovKi5zY3NzJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ2ltcG9ydC14L25vLXVudXNlZC1tb2R1bGVzJzogJ29mZicsXG4gICAgICAgICdpbXBvcnQteC9uby11c2VsZXNzLXBhdGgtc2VnbWVudHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8td2VicGFjay1sb2FkZXItc3ludGF4JzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuc2NyaXB0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IFtcbiAgICAgICAgLi4uY29udGV4dC5yb290Q29uZmlnRmlsZXMsXG4gICAgICAgIGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3JjLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYWluVHMpXG4gICAgICBdLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlZmF1bHQtZXhwb3J0JzogJ29mZidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRJbnRlZ3JhdGlvblRlc3RDb25maWdzKCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIC8vIEludGVncmF0aW9uIHRlc3RzIHJ1biBpbiBhIE5vZGUgZW52aXJvbm1lbnQgYW5kIGxlZ2l0aW1hdGVseSByZWFkIGZpbGVzIC8gcGF0aHMsIHNvIHRoZSBOb2RlLWJ1aWx0aW5zIGJhbnMgZG8gbm90IGFwcGx5IHRvIHRoZW0uXG4gICAgICBmaWxlczogW2pvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3JjLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlJbnRlZ3JhdGlvblRlc3RUcyldLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZicsXG4gICAgICAgICdvYnNpZGlhbm1kL25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIC8qXG4gICAgICAgKiBBbiBpbnRlZ3JhdGlvbiB0ZXN0IHRoYXQgZHJpdmVzIHRoZSBVSSB3aXRoIGBkaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KC4uLikpYCBwcm9kdWNlcyBhblxuICAgICAgICogVU5UUlVTVEVEIGV2ZW50LCBhbmQgT2JzaWRpYW4gYW5kIENvZGVNaXJyb3IgZ2F0ZSBvbiBgaXNUcnVzdGVkYCBcdTIwMTQgc28gdGhlIHRlc3QgY2FuIGV4ZXJjaXNlXG4gICAgICAgKiBub3RoaW5nIHdoaWxlIHN0aWxsIHBhc3NpbmcuIE9ubHkgaW50ZWdyYXRpb24gdGVzdHMgYXJlIGNvdmVyZWQ6IGEgdW5pdCB0ZXN0IGhhcyBubyByZWFsIGlucHV0XG4gICAgICAgKiBwaXBlbGluZSB0byByZWFjaCwgc28gZGlzcGF0Y2hpbmcgaXMgdGhlIG9ubHkgdGhpbmcgaXQgY2FuIGRvLlxuICAgICAgICpcbiAgICAgICAqIEFuZHJvaWQgaXMgZXhlbXB0IEJZIEZJTEVOQU1FIHJhdGhlciB0aGFuIGJ5IGEgZGlzYWJsZSBjb21tZW50LCBiZWNhdXNlIHRoZSBleGVtcHRpb24gaXMgYVxuICAgICAgICogcHJvcGVydHkgb2YgdGhlIHBsYXRmb3JtIHJhdGhlciB0aGFuIG9mIGFueSBvbmUgY2FsbCBzaXRlOiB0aGUgdHJ1c3RlZCBoZWxwZXJzIGFyZSBidWlsdCBvblxuICAgICAgICogYHdpbmRvdy5lbGVjdHJvbmAsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHRoZXJlLCBzbyBldmVyeSBkaXNwYXRjaCBpbiBzdWNoIGEgZmlsZSBpcyBsZWdpdGltYXRlIGFuZFxuICAgICAgICogYWx3YXlzIHdpbGwgYmUuIEEgYCouY3Jvc3MtcGxhdGZvcm0uKmAgZmlsZSBpcyBkZWxpYmVyYXRlbHkgTk9UIGV4ZW1wdCBcdTIwMTQgaXQgcnVucyBvbiBkZXNrdG9wIHRvbyxcbiAgICAgICAqIHdoZXJlIHRoZSB0cnVzdGVkIHBhdGggaXMgYXZhaWxhYmxlLCBzbyBpdCBzaG91bGQgYnJhbmNoIG9uIGBQbGF0Zm9ybS5pc0Rlc2t0b3BBcHBgIGFuZCBkaXNhYmxlXG4gICAgICAgKiB0aGUgcnVsZSBvbiB0aGUgbW9iaWxlIGFybSBhbG9uZS5cbiAgICAgICAqL1xuICAgICAgZmlsZXM6IFtqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlNyYywgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55UGF0aCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55SW50ZWdyYXRpb25UZXN0VHMpXSxcbiAgICAgIGlnbm9yZXM6IFtcbiAgICAgICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TcmMsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueUFuZHJvaWRJbnRlZ3JhdGlvblRlc3RUcyksXG4gICAgICAgIGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3JjLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlBbmRyb2lkQ2FwdHVyZUludGVncmF0aW9uVGVzdFRzKVxuICAgICAgXSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cyc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKlxuICogVGhlIENvbW11bml0eSBkaXJlY3RvcnkgcmVxdWlyZXMgYSByb290IGBMSUNFTlNFYCwgYW5kIGBvYnNpZGlhbm1kL3ZhbGlkYXRlLWxpY2Vuc2VgIGlzIHRoZSBvbmx5IGNoZWNrXG4gKiBvbiB3aGF0IGl0IHNheXM6IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG11c3Qgbm90IHN0aWxsIGJlIHRoZSBzYW1wbGUgcGx1Z2luJ3MsIGFuZCB0aGUgeWVhciBtdXN0IGJlXG4gKiBjdXJyZW50LiBCb3RoIG5lZWQgYFBsYWluVGV4dFBhcnNlcmAsIHdoaWNoIHRoZSBwbHVnaW4gZG9lcyBub3QgZXhwb3J0LCBzbyBpdCBpcyByZWFjaGVkIHRocm91Z2ggaXRzXG4gKiBidWlsZCBvdXRwdXQgLS0gdGhlIHBhY2thZ2UgZGVjbGFyZXMgbm8gYGV4cG9ydHNgIG1hcCBhbmQgc2hpcHMgYSBkZWNsYXJhdGlvbiBiZXNpZGUgdGhlIG1vZHVsZSwgc28gdGhlXG4gKiBkZWVwIHBhdGggcmVzb2x2ZXMsIGJ1dCBpdCBpcyB0aGUgb25lIGltcG9ydCBoZXJlIHRoYXQgYSBwYXRjaCByZWxlYXNlIHVwc3RyZWFtIGNvdWxkIGJyZWFrLlxuICpcbiAqIFRoZSBydWxlIGNvbXBhcmVzIHRoZSB5ZWFyIGFnYWluc3QgYG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKWAgYXQgbGludCB0aW1lLCBzbyBhIHJlcG8gZ29lcyByZWQgYXQgdGhlXG4gKiB0dXJuIG9mIHRoZSB5ZWFyIHVudGlsIGl0cyBMSUNFTlNFIGlzIGJ1bXBlZC4gYC5naXRodWIvd29ya2Zsb3dzL3VwZGF0ZS1saWNlbnNlLXllYXIueW1sYCBkb2VzIHRoYXQgb25cbiAqIDEgSmFudWFyeTsgYSByZXBvIGFkb3B0aW5nIHRoaXMgY29uZmlnIG5lZWRzIHRoZSBzYW1lIHdvcmtmbG93LCBvciB0aGUgeWVhciBjaGVjayB3aWxsIGZhaWwgaXRzIENJLlxuICovXG5mdW5jdGlvbiBnZXRMaWNlbnNlQ29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBmaWxlczogW09ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkxpY2Vuc2VdLFxuICAgICAgbGFuZ3VhZ2VPcHRpb25zOiB7XG4gICAgICAgIHBhcnNlcjogUGxhaW5UZXh0UGFyc2VyXG4gICAgICB9LFxuICAgICAgcGx1Z2luczoge1xuICAgICAgICBvYnNpZGlhbm1kXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ29ic2lkaWFubWQvdmFsaWRhdGUtbGljZW5zZSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKlxuICogVGhlIHJvb3QgYG1hbmlmZXN0Lmpzb25gIGlzIHdoYXQgdGhlIENvbW11bml0eSBkaXJlY3RvcnkncyBhdXRvbWF0ZWQgcmV2aWV3IGFjdHVhbGx5IHJlYWRzLCBhbmQgdW50aWxcbiAqIHRoaXMgY29uZmlnIGV4aXN0ZWQgbm8gbGludGVyIHJlYWQgaXQgYXQgYWxsOiBgb2JzaWRpYW5tZC92YWxpZGF0ZS1tYW5pZmVzdGAgcmVnaXN0ZXJzIGEgYFByb2dyYW1gXG4gKiB2aXNpdG9yIGFuZCBleHBlY3RzIGFuIEVTVHJlZSBgT2JqZWN0RXhwcmVzc2lvbmAsIHdoaWxlIGV2ZXJ5IEpTT04gcGFyc2VyIHRoYXQgc2hpcHMgcHJvZHVjZXMgc29tZXRoaW5nXG4gKiBlbHNlIC0tIGBAZXNsaW50L2pzb25gIHByb2R1Y2VzIE1vbW9hIChgRG9jdW1lbnRgKSwgYGpzb25jLWVzbGludC1wYXJzZXJgIHByb2R1Y2VzXG4gKiBgSlNPTk9iamVjdEV4cHJlc3Npb25gIC0tIHNvIHRoZSBydWxlIHNpbGVudGx5IG1hdGNoZXMgbm90aGluZyBubyBtYXR0ZXIgd2hpY2ggZmlsZXMgaXQgaXMgc2NvcGVkIHRvLlxuICogVGhlIGluLWhvdXNlIHJ1bGVzIGJlbG93IHZpc2l0IHRoZSBNb21vYSBBU1QgaW5zdGVhZC5cbiAqXG4gKiBgbWFuaWZlc3QuanNvbmAgaXMgc3RyaWN0IEpTT04sIHNvIGFuIGBlc2xpbnQtZGlzYWJsZWAgY29tbWVudCBpbiBpdCBpcyBhIHBhcnNlIGVycm9yIEFORCB3b3VsZCBzdG9wXG4gKiBPYnNpZGlhbiBsb2FkaW5nIHRoZSBwbHVnaW4uIFRoYXQgbWFrZXMgdGhlIGNvbmZpZyB0aGUgb25seSBwbGFjZSBhIGNoZWNrIGNhbiBiZSB3YWl2ZWQsIHdoaWNoIGlzIHdoeVxuICogdGhlc2UgYXJlIGZvdXIgcnVsZXMgcmF0aGVyIHRoYW4gb25lOiBhIHJlcG8gd2l0aCBhIGdyYW5kZmF0aGVyZWQgYGlkYCBjYW4gdHVybiBvZmYgYG1hbmlmZXN0LWlkYCBhbG9uZVxuICogYW5kIGtlZXAgdGhlIHJlc3QuXG4gKi9cbmZ1bmN0aW9uIGdldE1hbmlmZXN0Q29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBmaWxlczogW09ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbl0sXG4gICAgICBsYW5ndWFnZTogJ2pzb24vanNvbicsXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgICdqc29uJzoganNvblBsdWdpbixcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscyc6IG9ic2lkaWFuRGV2VXRpbHNQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL21hbmlmZXN0LWRlc2NyaXB0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9tYW5pZmVzdC1pZCc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbWFuaWZlc3QtbmFtZSc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbWFuaWZlc3Qtc2NoZW1hJzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldE5vZGVDb21wYXRDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICAvKlxuICAgKiBUaGUgbWluaW11bSBPYnNpZGlhbiBpbnN0YWxsZXIgdGhhdCBzdGlsbCByZWNlaXZlcyBhcHAgdXBkYXRlcyBhbmQgd29ya3MgaXMgMS4xLjksIHdoaWNoIHNoaXBzIEVsZWN0cm9uXG4gICAqIDIxLjMuMyBhbmQgcnVucyBOb2RlIDE2LjE2LjAuIFNoaXBwZWQgc291cmNlIG11c3QgdGhlcmVmb3JlIGF2b2lkIE5vZGUvRVMgcnVudGltZSBidWlsdGlucyB1bmF2YWlsYWJsZSBpblxuICAgKiB0aGF0IHZlcnNpb24uIFRlc3RzIGFuZCBzY3JpcHRzIGFyZSBkZXYtb25seSBhbmQgZXhlbXB0LlxuICAgKlxuICAgKiBTb3VyY2Ugb2YgdHJ1dGg6IGBvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nL21ldGFkYXRhLmpzb25gIFx1MjAxNCB0aGUgbmV3ZXN0IHJlbGVhc2UgY2FycnlpbmcgdGhlIGZpZWxkXG4gICAqICgxLjEzLjEpIGRlY2xhcmVzIGBtaW5SdW5uYWJsZUluc3RhbGxlclZlcnNpb246IFwiMS4xLjlcImAsIGFuZCB0aGF0IGluc3RhbGxlcidzIGBydW50aW1lVmVyc2lvbnNgIGdpdmVzIHRoZVxuICAgKiBFbGVjdHJvbiBhbmQgTm9kZSB2ZXJzaW9ucyBhYm92ZS4gUmUtZGVyaXZlIGZyb20gdGhlcmUgcmF0aGVyIHRoYW4gZWRpdGluZyB0aGlzIG51bWJlciBieSBoYW5kLlxuICAgKi9cbiAgY29uc3QgbWluaW11bU5vZGVWZXJzaW9uID0gJz49MTYuMTYuMCc7XG5cbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuc291cmNlRmlsZXMsXG4gICAgICBpZ25vcmVzOiBbXG4gICAgICAgIC4uLmNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgICAvLyBEZXYtb25seSB0b29saW5nIChidWlsZCwgbGludCwgdmVyc2lvbikgdW5kZXIgYHNyYy9zY3JpcHQtdXRpbHMvKipgIHJ1bnMgdmlhIGBqaXRpYCBpbiB0aGUgY29uc3VtZXIncyBOb2RlIGVudmlyb25tZW50IHdoZW4gYnVpbGRpbmcgYSBwbHVnaW4gYW5kIG5ldmVyIHNoaXBzIGludG8gdGhlIE9ic2lkaWFuIHJ1bnRpbWUsIHNvIHRoZSBOb2RlLTE2IGZsb29yIGRvZXMgbm90IGFwcGx5IHRvIGl0LlxuICAgICAgICBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlNjcmlwdFV0aWxzLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlUcylcbiAgICAgIF0sXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIG46IG5vZGVQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9lcy1idWlsdGlucyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZlcnNpb246IG1pbmltdW1Ob2RlVmVyc2lvblxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ24vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGBCbG9iYCBhbmQgYEZpbGVgIGFyZSBET00gd2ViIGdsb2JhbHMgYWx3YXlzIHByZXNlbnQgaW4gdGhlIE9ic2lkaWFuL0VsZWN0cm9uIHJlbmRlcmVyIChldmVyeSBzdXBwb3J0ZWQgQ2hyb21pdW0pLCBidXQgdGhlIHJ1bGUgYWxzbyBrbm93cyB0aGVtIGFzIE5vZGUncyBleHBlcmltZW50YWwgYnVpbHRpbnMgYW5kIGNhbm5vdCB0ZWxsIHdoaWNoIGlzIG1lYW50LiBJZ25vcmUgdGhlbSBnbG9iYWxseTsgZ2VudWluZWx5IG5ld2VyIEFQSXMgKGUuZy4gYEFib3J0U2lnbmFsLmFueWApIHN0YXkgZmxhZ2dlZC5cbiAgICAgICAgICAgIGlnbm9yZXM6IFtcbiAgICAgICAgICAgICAgJ0Jsb2InLFxuICAgICAgICAgICAgICAnRmlsZSdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB2ZXJzaW9uOiBtaW5pbXVtTm9kZVZlcnNpb25cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRPYnNpZGlhbkRldlV0aWxzUGx1Z2luQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscyc6IG9ic2lkaWFuRGV2VXRpbHNQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL25vLWFzeW5jLWNhbGxiYWNrLXRvLXVuc2FmZS1yZXR1cm4nOiAnZXJyb3InLFxuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL25vLXVudXNlZC1wYXJhbXMtbWVtYmVycyc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcyc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvcGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaCc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvcHJlZmVyLW5vb3AtYXN5bmMnOiAnZXJyb3InLFxuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL3JlYWRvbmx5LXBhcmFtcy1vcHRpb25zLXJlc3VsdC1tZW1iZXJzJzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9yZXF1aXJlLWNvbXBvbmVudC1zdWZmaXgnOiAnZXJyb3InLFxuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL3JlcXVpcmUtbWV0aG9kLXRlbXBsYXRlJzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9yZXF1aXJlLXN1cGVyLWNhbGwnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldE9ic2lkaWFuTGludENvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIGNvbnN0IG9ic2lkaWFuUmVjb21tZW5kZWRDb25maWdzID0gb2JzaWRpYW5tZC5jb25maWdzLnJlY29tbWVuZGVkO1xuXG4gIGNvbnN0IHNjb3BlZE9ic2lkaWFuUmVjb21tZW5kZWRDb25maWdzID0gb2JzaWRpYW5SZWNvbW1lbmRlZENvbmZpZ3MubWFwKChjb25maWcpID0+IHtcbiAgICBpZiAoY29uZmlnLmZpbGVzPy5pbmNsdWRlcygncGFja2FnZS5qc29uJykpIHtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGZpbGVzOiBjb250ZXh0LnNvdXJjZUZpbGVzXG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW3Njb3BlZE9ic2lkaWFuUmVjb21tZW5kZWRDb25maWdzXSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgb2JzaWRpYW5tZFxuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldFBlcmZlY3Rpb25pc3RDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFt7XG4gICAgZXh0ZW5kczogW3BlcmZlY3Rpb25pc3RDb25maWdzWydyZWNvbW1lbmRlZC1hbHBoYWJldGljYWwnXV0sXG4gICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKVxuICB9XSk7XG59XG5cbmZ1bmN0aW9uIGdldFN0eWxpc3RpY0NvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGV4dGVuZHM6IFtcbiAgICAgICAgc3R5bGlzdGljLmNvbmZpZ3MucmVjb21tZW5kZWQsXG4gICAgICAgIHN0eWxpc3RpYy5jb25maWdzLmN1c3RvbWl6ZSh7XG4gICAgICAgICAgYXJyb3dQYXJlbnM6IHRydWUsXG4gICAgICAgICAgYnJhY2VTdHlsZTogJzF0YnMnLFxuICAgICAgICAgIGNvbW1hRGFuZ2xlOiAnbmV2ZXInLFxuICAgICAgICAgIHNlbWk6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ0BzdHlsaXN0aWMvZ2VuZXJhdG9yLXN0YXItc3BhY2luZyc6ICdvZmYnLFxuICAgICAgICAnQHN0eWxpc3RpYy9pbmRlbnQnOiAnb2ZmJyxcbiAgICAgICAgJ0BzdHlsaXN0aWMvaW5kZW50LWJpbmFyeS1vcHMnOiAnb2ZmJyxcbiAgICAgICAgJ0BzdHlsaXN0aWMvanN4LW9uZS1leHByZXNzaW9uLXBlci1saW5lJzogJ29mZicsXG4gICAgICAgICdAc3R5bGlzdGljL25vLWV4dHJhLXNlbWknOiAnZXJyb3InLFxuICAgICAgICAnQHN0eWxpc3RpYy9vYmplY3QtY3VybHktbmV3bGluZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEV4cG9ydERlY2xhcmF0aW9uOiB7XG4gICAgICAgICAgICAgIG1pblByb3BlcnRpZXM6IDIsXG4gICAgICAgICAgICAgIG11bHRpbGluZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEltcG9ydERlY2xhcmF0aW9uOiB7XG4gICAgICAgICAgICAgIG1pblByb3BlcnRpZXM6IDIsXG4gICAgICAgICAgICAgIG11bHRpbGluZTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ0BzdHlsaXN0aWMvb3BlcmF0b3ItbGluZWJyZWFrJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ2JlZm9yZScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgICAgICAgICc9JzogJ2FmdGVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ0BzdHlsaXN0aWMvcXVvdGVzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ3NpbmdsZScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWxsb3dUZW1wbGF0ZUxpdGVyYWxzOiAnbmV2ZXInXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHNlc2xpbnRDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBleHRlbmRzOiBbXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICAgIC4uLnRzZXNsaW50LmNvbmZpZ3Muc3RyaWN0VHlwZUNoZWNrZWQsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICAgIC4uLnRzZXNsaW50LmNvbmZpZ3Muc3R5bGlzdGljVHlwZUNoZWNrZWRcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgbGFuZ3VhZ2VPcHRpb25zOiB7XG4gICAgICAgIHBhcnNlck9wdGlvbnM6IHtcbiAgICAgICAgICBlY21hRmVhdHVyZXM6IHtcbiAgICAgICAgICAgIGpzeDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvamVjdFNlcnZpY2U6IHRydWUsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHRzY29uZmlnUm9vdERpcmAgaXMgYSBgdHlwZXNjcmlwdC1lc2xpbnRgIHBhcnNlciBvcHRpb24uXG4gICAgICAgICAgdHNjb25maWdSb290RGlyOiBnZXRSb290Rm9sZGVyKCkgPz8gJydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUnOiAnZXJyb3InLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5JzogJ2Vycm9yJyxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9tZXRob2Qtc2lnbmF0dXJlLXN0eWxlJzogWydlcnJvcicsICdtZXRob2QnXSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlcyc6IFsnZXJyb3InLCB7XG4gICAgICAgICAgY2hlY2tUaGVuYWJsZXM6IHRydWVcbiAgICAgICAgfV0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGUnOiBbJ2Vycm9yJywge1xuICAgICAgICAgIGFsbG93QXNUaGlzUGFyYW1ldGVyOiB0cnVlXG4gICAgICAgIH1dLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXMnOiBbJ2Vycm9yJywge1xuICAgICAgICAgIGFsbG93ZWROYW1lczogW1xuICAgICAgICAgICAgJ3RoYXQnXG4gICAgICAgICAgXVxuICAgICAgICB9XSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGBhcmdzYCBpcyBhbiBFU0xpbnQgcnVsZSBvcHRpb24gbmFtZS5cbiAgICAgICAgICAgIGFyZ3M6ICdhbGwnLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYGFyZ3NJZ25vcmVQYXR0ZXJuYCBpcyBhIGB0eXBlc2NyaXB0LWVzbGludGAgcnVsZSBvcHRpb24gbmFtZS5cbiAgICAgICAgICAgIGFyZ3NJZ25vcmVQYXR0ZXJuOiAnXl8nLFxuICAgICAgICAgICAgY2F1Z2h0RXJyb3JzOiAnYWxsJyxcbiAgICAgICAgICAgIGNhdWdodEVycm9yc0lnbm9yZVBhdHRlcm46ICdeXycsXG4gICAgICAgICAgICBkZXN0cnVjdHVyZWRBcnJheUlnbm9yZVBhdHRlcm46ICdeXycsXG4gICAgICAgICAgICBpZ25vcmVSZXN0U2libGluZ3M6IHRydWUsXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgdmFyc0lnbm9yZVBhdHRlcm5gIGlzIGEgYHR5cGVzY3JpcHQtZXNsaW50YCBydWxlIG9wdGlvbiBuYW1lLlxuICAgICAgICAgICAgdmFyc0lnbm9yZVBhdHRlcm46ICdeXydcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLXJlYWRvbmx5JzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9kb3Qtbm90YXRpb24nOiBbJ2Vycm9yJywge1xuICAgICAgICAgIGFsbG93UHJpdmF0ZUNsYXNzUHJvcGVydHlBY2Nlc3M6IHRydWUsXG4gICAgICAgICAgYWxsb3dQcm90ZWN0ZWRDbGFzc1Byb3BlcnR5QWNjZXNzOiB0cnVlXG4gICAgICAgIH1dLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kJzogJ29mZidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgIHJlYWN0OiB7XG4gICAgICAgICAgdmVyc2lvbjogJ2RldGVjdCdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldFVuaWNvcm5Db25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBleHRlbmRzOiBbdW5pY29ybi5jb25maWdzLnJlY29tbWVuZGVkXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAvKlxuICAgICAgICAgKiBUaGVzZSBlbnRyaWVzIGFyZSBub3QgYWJicmV2aWF0aW9ucyB0byBiZSBleHBhbmRlZCBcdTIwMTQgdGhleSBhcmUgZXN0YWJsaXNoZWQgdm9jYWJ1bGFyeSBoZXJlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBCcmFuZDogYGRldmAsIGBsaWJgLCBgdXRpbGAvYHV0aWxzYCBzcGVsbCB0aGUgcHJvZHVjdCdzIG93biBuYW1lLiBMZWZ0IG9uLCB0aGUgcnVsZSByZXdyaXRlc1xuICAgICAgICAgKiBgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRoc2AgdG8gYE9ic2lkaWFuRGV2ZWxvcG1lbnRVdGlsaXRpZXNSZXBvUGF0aHNgIGFuZCBgZ2V0TGliRGVidWdnZXJgIHRvXG4gICAgICAgICAqIGBnZXRMaWJyYXJ5RGVidWdnZXJgLCByZW5hbWluZyBleHBvcnRlZCBBUEkgYWZ0ZXIgdGhlIHBhY2thZ2UgaXQgYmVsb25ncyB0by5cbiAgICAgICAgICpcbiAgICAgICAgICogQ29udmVudGlvbjogYHBhcmFtc2AgaXMgdGhlIHBhcmFtZXRlci1iYWcgY29udmVudGlvbiwgZW5mb3JjZWQgYnlcbiAgICAgICAgICogYG9ic2lkaWFuLWRldi11dGlscy9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoYCwgd2hpY2ggcmVxdWlyZXMgYmFnIHR5cGVzIHRvIGJlIG5hbWVkXG4gICAgICAgICAqIGA8T3duZXI+UGFyYW1zYCAvIGA8T3duZXI+T3B0aW9uc2AuIEV4cGFuZGluZyBpdCB0byBgUGFyYW1ldGVyc2Agd291bGQgcHV0IHRoZSB0d28gcnVsZXMgaW4gZGlyZWN0XG4gICAgICAgICAqIGNvbnRyYWRpY3Rpb24gYW5kIGJyZWFrIDMwMCsgZXhwb3J0ZWQgdHlwZSBuYW1lcy5cbiAgICAgICAgICpcbiAgICAgICAgICogUmVzZXJ2ZWQgd29yZHM6IGEgYmFyZSBgYXJnc2AsIGBmbmAsIGBzdHJgLCBgbW9kYCBvciBgZXZ0YCBleHBhbmRzIHRvIGFuIGlkZW50aWZpZXIgdGhhdCBpcyBhbHJlYWR5XG4gICAgICAgICAqIHRha2VuLCBzbyB0aGUgcnVsZSBzdWdnZXN0cyBgJGFyZ3VtZW50c2AsIGAkZnVuY3Rpb25gLCBhbmQgc28gb24uIFNwZWxsIHRob3NlIGAkYXJndW1lbnRzYCAvXG4gICAgICAgICAqIGAkZnVuY3Rpb25gIGluc3RlYWQgXHUyMDE0IGEgYCRgIHByZWZpeCByZWFkcyBiZXR0ZXIgdGhhbiBhIHRyYWlsaW5nIHVuZGVyc2NvcmUuIFRoaXMgaXMgZGVsaWJlcmF0ZWx5IE5PVFxuICAgICAgICAgKiBjb25maWd1cmVkIGFzIGEgY3VzdG9tIHJlcGxhY2VtZW50OiB1bmljb3JuIHN1YnN0aXR1dGVzIGF0IHRoZSB3b3JkIGxldmVsIGluc2lkZSBjb21wb3VuZCBuYW1lcywgc29cbiAgICAgICAgICogcmVkaXJlY3RpbmcgdGhlIHdob2xlIGVudHJ5IHR1cm5zIGBhc3luY0ZuYCBpbnRvIGBhc3luYyRmdW5jdGlvbmAuIENvbXBvdW5kcyB3YW50IHRoZSBwbGFpbiBleHBhbnNpb25cbiAgICAgICAgICogKGBhc3luY0Z1bmN0aW9uYCk7IG9ubHkgdGhlIGJhcmUsIGdlbnVpbmVseS1jb2xsaWRpbmcgaWRlbnRpZmllcnMgdGFrZSB0aGUgYCRgIGZvcm0uXG4gICAgICAgICAqXG4gICAgICAgICAqIERvbWFpbiB3b3JkczogYGRvY2AvYGRvY3NgLCBgZW52YCwgYGRpc3RgIGFuZCBgc3JjYCBhcmUgdGhlIGNsZWFyZXIgc3BlbGxpbmcgaW4gdGhpcyBjb2RlYmFzZS5cbiAgICAgICAgICogRXhwYW5kaW5nIGBkb2NgIGFsc28gcGlja3MgdGhlIHdyb25nIHdvcmQgXHUyMDE0IHRoZSBgYXBpLWRvYy0qYCBtb2R1bGVzIGdlbmVyYXRlIEFQSSAqZG9jdW1lbnRhdGlvbiosIG5vdFxuICAgICAgICAgKiBkb2N1bWVudHMuIGBzcmNgIGFkZGl0aW9uYWxseSBjb3JydXB0cyBjb2RlOiB0aGUgZml4ZXIgcmVuYW1lcyB0aGUgYFNyY2AgbWVtYmVyIG9mIHRoZSBleHBvcnRlZFxuICAgICAgICAgKiBgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHNgIC8gYE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHNgIGVudW1zIHdoaWxlIGxlYXZpbmcgZXZlcnkgYC5TcmNgIHJlZmVyZW5jZVxuICAgICAgICAgKiBkYW5nbGluZywgYmVjYXVzZSBgY2hlY2tQcm9wZXJ0aWVzYCBleGVtcHRzIHByb3BlcnR5IGFjY2Vzc2VzIGJ1dCBub3QgdGhlIGRlY2xhcmF0aW9ucyB0aGV5IHBvaW50IGF0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBEaXNhYmxpbmcgdGhlIHJlcGxhY2VtZW50IGVudHJpZXMgcHJvdGVjdHMgdGhlc2UgcGVybWFuZW50bHk7IGFuIGBhbGxvd0xpc3RgIHdvdWxkIGluc3RlYWQgbmVlZCBldmVyeVxuICAgICAgICAgKiBhZmZlY3RlZCBpZGVudGlmaWVyIGVudW1lcmF0ZWQgYnkgaGFuZCBhbmQgcmUtZW51bWVyYXRlZCBmb3IgZXZlcnkgbmV3IG9uZS5cbiAgICAgICAgICpcbiAgICAgICAgICogTk9URTogdGhpcyBydWxlJ3MgYXV0b2ZpeCBpcyBOT1QgcmVmZXJlbmNlLWF3YXJlIGZvciBkZWNsYXJhdGlvbnMgdGhhdCBwYXJ0aWNpcGF0ZSBpbiBhIGNvbnRyYWN0IFx1MjAxNFxuICAgICAgICAgKiBlbnVtIG1lbWJlcnMsIGludGVyZmFjZSBtZW1iZXJzLCBhbmQgVHlwZVNjcmlwdCBwYXJhbWV0ZXIgcHJvcGVydGllcyAoYGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHlcbiAgICAgICAgICogZWw6IEhUTUxFbGVtZW50KWApIGFyZSByZW5hbWVkIHdoaWxlIGB0aGlzLmVsYCBhbmQgYEVudW0uTWVtYmVyYCByZWZlcmVuY2VzIGFyZSBsZWZ0IGRhbmdsaW5nLiBBcHBseVxuICAgICAgICAgKiBpdHMgcmVwb3J0cyBieSBoYW5kOyBuZXZlciBydW4gYC0tZml4YCBvdmVyIGl0LlxuICAgICAgICAgKi9cbiAgICAgICAgLypcbiAgICAgICAgICogQSBnb29kIHJ1bGUsIGJ1dCBpdHMgZGVmYXVsdCBwcmVmaXhlcyBmb3JjZSB1bmdyYW1tYXRpY2FsIG5hbWVzOiBgbWVtYmVyUGFnZUV4aXN0c2Agd291bGQgYmVjb21lXG4gICAgICAgICAqIGBpc01lbWJlclBhZ2VFeGlzdHNgIHJhdGhlciB0aGFuIGBkb2VzTWVtYmVyUGFnZUV4aXN0YC4gVGhlc2UgZW50cmllcyBFWFRFTkQgdGhlIGRlZmF1bHRzIChgaXNgLFxuICAgICAgICAgKiBgaGFzYCwgYGNhbmAsIGBzaG91bGRgLCAuLi4pIHJhdGhlciB0aGFuIHJlcGxhY2luZyB0aGVtLCBzbyBhIGJvb2xlYW4gd2l0aCBubyBib29sZWFuLXJlYWRpbmcgcHJlZml4XG4gICAgICAgICAqIGF0IGFsbCBpcyBzdGlsbCByZWplY3RlZCAtLSB0aGUgcnVsZSBqdXN0IHN0b3BzIGluc2lzdGluZyB0aGUgcHJlZml4IGNvbWUgZnJvbSBhIHNob3J0ZXIgbGlzdC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGxpc3QgaXMgYmlkaXJlY3Rpb25hbDogYWRkaW5nIGEgcHJlZml4IGFsc28gYXNzZXJ0cyB0aGF0IGV2ZXJ5dGhpbmcgbmFtZWQgd2l0aCBpdCBJUyBhIGJvb2xlYW4uXG4gICAgICAgICAqIGBjaGVja2AgZWFybnMgaXRzIHBsYWNlIG9uIGJvdGggY291bnRzLCBzaW5jZSB0aGUgaGFuZGZ1bCBvZiBub24tYm9vbGVhbiBgY2hlY2sqYCBuYW1lcyBpdCBzdXJmYWNlZFxuICAgICAgICAgKiB3ZXJlIGdlbnVpbmVseSBtaXMtbmFtZWQgKHZvaWQgZnVuY3Rpb25zIHRoYXQgdGhyb3csIGEgcHJvYmUgcmV0dXJuaW5nIGFuIEhUVFAgc3RhdHVzKS4gYHRlc3RgIHdhc1xuICAgICAgICAgKiBtZWFzdXJlZCBhbmQgcmVqZWN0ZWQ6IGl0IHdvdWxkIHZhbGlkYXRlIGZpdmUgYHRlc3QqYCBsaW5rIHByZWRpY2F0ZXMgdGhhdCByZWFkIGJldHRlciBhcyBgaXMqYFxuICAgICAgICAgKiBhbnl3YXksIGF0IHRoZSBjb3N0IG9mIHJlbmFtaW5nIFNDUkVBTUlOR19DQVNFIHRlc3QgZml4dHVyZXMgYW5kIHRoZSBgdGVzdENvdmVyYWdlYC9gdGVzdFdhdGNoYFxuICAgICAgICAgKiBydW5uZXJzIHRoYXQgZGVsaWJlcmF0ZWx5IG1pcnJvciB0aGUgYHRlc3Q6Y292ZXJhZ2VgL2B0ZXN0OndhdGNoYCBucG0gc2NyaXB0cy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2NvbnNpc3RlbnQtYm9vbGVhbi1uYW1lJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJlZml4ZXM6IHtcbiAgICAgICAgICAgICAgYWxsb3dzOiB0cnVlLFxuICAgICAgICAgICAgICBjaGVjazogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGFpbnM6IHRydWUsXG4gICAgICAgICAgICAgIGRvZXM6IHRydWUsXG4gICAgICAgICAgICAgIGluY2x1ZGVzOiB0cnVlLFxuICAgICAgICAgICAgICBtdXN0OiB0cnVlLFxuICAgICAgICAgICAgICBuZWVkczogdHJ1ZSxcbiAgICAgICAgICAgICAgc3VwcG9ydHM6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8qXG4gICAgICAgICAqIFVuc2F0aXNmaWFibGUgYWxvbmdzaWRlIGBwZXJmZWN0aW9uaXN0L3NvcnQtY2xhc3Nlc2AsIHdoaWNoIGlzIGNvbmZpZ3VyZWQgaGVyZSBhcyBhIHBsYWluXG4gICAgICAgICAqIGFscGhhYmV0aWNhbCBzb3J0LiBUaGlzIHJ1bGUgd2FudHMgYSBjYXRlZ29yeSBvcmRlciAoYWxsIGZpZWxkcywgdGhlbiB0aGUgY29uc3RydWN0b3IsIHRoZW4gYWxsXG4gICAgICAgICAqIG1ldGhvZHMpLCBzbyB0aGUgZXh0cmVtZWx5IGNvbW1vbiBgcHJpdmF0ZSBfeGAgZmllbGQgcGFpcmVkIHdpdGggYSBgcHVibGljIGdldCB4KClgIGFjY2Vzc29yIGlzXG4gICAgICAgICAqIHJlamVjdGVkIGJ5IHdoaWNoZXZlciBydWxlIGxvc2VzOiBhbHBoYWJldGljYWxseSB0aGUgYWNjZXNzb3IgcHJlY2VkZXMgdGhlIGZpZWxkLCBieSBjYXRlZ29yeSB0aGVcbiAgICAgICAgICogZmllbGQgcHJlY2VkZXMgdGhlIGFjY2Vzc29yLiBVbmxpa2UgYHByZWZlci1nbG9iYWwtdGhpc2AgdGhlIGNsYXNoIHByb2R1Y2VzIG5vXG4gICAgICAgICAqIGBFU0xpbnRDaXJjdWxhckZpeGVzV2FybmluZ2AsIG9ubHkgYmVjYXVzZSB0aGlzIHJ1bGUgc2hpcHMgbm8gZml4ZXIgLS0gYm90aCBydWxlcyBhcmUgYGVycm9yYCwgc28gbm9cbiAgICAgICAgICogYXJyYW5nZW1lbnQgb2YgbWVtYmVycyBzYXRpc2ZpZXMgdGhlbSBib3RoLiBUaGUgYWxwaGFiZXRpY2FsIHNvcnQgaXMgdGhlIG9uZSBhbHJlYWR5IHJvbGxlZCBvdXRcbiAgICAgICAgICogYWNyb3NzIHRoZSBwbHVnaW5zIGNvbnN1bWluZyB0aGlzIGNvbmZpZywgc28gaXQga2VlcHMgcHJlY2VkZW5jZS4gUmUtZW5hYmxpbmcgdGhpcyBydWxlIHdvdWxkIG1lYW5cbiAgICAgICAgICogZ2l2aW5nIGBwZXJmZWN0aW9uaXN0L3NvcnQtY2xhc3Nlc2AgYSBtYXRjaGluZyBgZ3JvdXBzYCBvcHRpb24gYW5kIHJlb3JkZXJpbmcgZXZlcnkgY2xhc3MuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9jb25zaXN0ZW50LWNsYXNzLW1lbWJlci1vcmRlcic6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBFdmVyeSByZXBvcnQgaXMgYG5ldyBFcnJvcigpLnN0YWNrYCwgd2hpY2ggY2FwdHVyZXMgYSBzdGFjayB0cmFjZSBhbmQgbmV2ZXIgc3VyZmFjZXMgaXRzIG1lc3NhZ2UsXG4gICAgICAgICAqIG9yIGBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKWAsIHdob3NlIG1lc3NhZ2UgaXMgb3B0aW9uYWwgcHJlY2lzZWx5IGJlY2F1c2UgdGhlIGNvbGxlY3RlZCBlcnJvcnNcbiAgICAgICAgICogY2FycnkgdGhlIGRldGFpbC4gVGhlIHJ1bGUgY2Fubm90IHRlbGwgZWl0aGVyIGZyb20gYW4gZXJyb3IgdGhhdCBpcyBhY3R1YWxseSB0aHJvd24gYXQgYSB1c2VyLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vZXJyb3ItbWVzc2FnZSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBzdHlsZSBmb3IgYG5vZGU6cGF0aGAgaXMgYSBkZWZhdWx0IGltcG9ydCwgYnV0IHRoaXMgY29kZWJhc2UgaW1wb3J0cyBpdHMgbWVtYmVycyBieSBuYW1lXG4gICAgICAgICAqIHRocm91Z2hvdXQsIGNvbnNpc3RlbnRseSB3aXRoIGV2ZXJ5IG90aGVyIGBub2RlOmAgbW9kdWxlIGl0IHVzZXMuIENvbmZpZ3VyZSB0aGUgcnVsZSB0byBlbmZvcmNlIHRoZVxuICAgICAgICAgKiBzdHlsZSBhY3R1YWxseSBpbiB1c2UgcmF0aGVyIHRoYW4gYW5ub3RhdGUgMTcgc2l0ZXMgdGhhdCBhcmUgbm90IGdvaW5nIHRvIGNoYW5nZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2ltcG9ydC1zdHlsZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgICAvLyBLZXllZCBieSB0aGUgVU5QUkVGSVhFRCBtb2R1bGUgbmFtZTogdGhlIHJ1bGUncyBvd24gdGFibGUgdXNlcyBgcGF0aGAsIHNvIGEgYG5vZGU6cGF0aGAga2V5IG5ldmVyIG1hdGNoZXMuXG4gICAgICAgICAgICAgIHBhdGg6IHtcbiAgICAgICAgICAgICAgICBuYW1lZDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSBjb3VudHMgY29uc3RydWN0b3IgY2FsbHMgYW5kIGNvdW50cyB0aHJvdWdoIGFycmF5IGFuZCBvYmplY3QgbGl0ZXJhbHMsIHNvIGl0cyBkZWZhdWx0IG9mIDNcbiAgICAgICAgICogcmVwb3J0cyBvcmRpbmFyeSBjb21wb3NpdGlvbjogYFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignYm9vbScpKWAgaW5zaWRlIGFuIGFzc2VydGlvbiwgYSB0ZXN0IGZpeHR1cmVcbiAgICAgICAgICogYnVpbHQgYXMgYGNyZWF0ZVR5cGVJbmZvKHsgbWV0aG9kczogW2NyZWF0ZU1lbWJlckluZm8oeyAuLi4gfSldIH0pYCwgYHRoaXMuYWRkQ2hpbGQobmV3IEModGhpcy5hcHApKWBcbiAgICAgICAgICogaW5zaWRlIGEgcGFyYW1zIGJhZy4gUmFpc2luZyB0aGUgbGltaXQgYnkgb25lIGNsZWFycyBldmVyeSByZXBvcnQgaGVyZSB3aGlsZSBzdGlsbCBjYXRjaGluZyB0aGVcbiAgICAgICAgICogZ2VudWluZWx5IHVucmVhZGFibGUgbmVzdGluZyB0aGUgcnVsZSBpcyBmb3IuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9tYXgtbmVzdGVkLWNhbGxzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWF4OiA0XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAndW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiBQcm9wZXJ0eSBhbmQgbWVtYmVyIG5hbWVzIGFyZSBjaGVja2VkIHRvbywgc28gYW4gYWJicmV2aWF0aW9uIGNhbm5vdCBzdXJ2aXZlIGJ5IGxpdmluZyBvbiBhblxuICAgICAgICAgICAgICogb2JqZWN0IHJhdGhlciB0aGFuIGluIGEgdmFyaWFibGUuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogVGhlIHJ1bGUgaXMgcHVyZWx5IHN5bnRhY3RpYzogaXQgY2Fubm90IHRlbGwgYSBtZW1iZXIgd2UgZGVjbGFyZSBmcm9tIG9uZSBiZWxvbmdpbmcgdG8gYVxuICAgICAgICAgICAgICogZGVwZW5kZW5jeSwgYW5kIGl0IG9mZmVycyBubyBhdXRvZml4IGZvciBwcm9wZXJ0aWVzIChtZWFzdXJlZDogNjgxIGhpdHMsIDAgd2l0aCBhIGZpeGVyKS4gU2l0ZXNcbiAgICAgICAgICAgICAqIG5hbWluZyBhIGZvcmVpZ24gbWVtYmVyIC0tIGBEb21FbGVtZW50SW5mby5hdHRyYCwgYEV2YWxJbk9ic2lkaWFuUGFyYW1zLmZuYCwgYW5kIHRoZSBsaWtlIC0tIGFyZVxuICAgICAgICAgICAgICogdGhlcmVmb3JlIGltcG9zc2libGUgdG8gc2F0aXNmeSBhbmQgY2FycnkgYW4gaW5saW5lIGRpc2FibGUsIHNvIGV2ZXJ5dGhpbmcgc3RpbGwgcmVwb3J0ZWQgaXMgb3Vyc1xuICAgICAgICAgICAgICogdG8gcmVuYW1lLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFdoZW4gcmVuYW1pbmcgdGhlIHJlc3QsIG5vdGUgdGhhdCBgdHNjYCBhbG9uZSBpcyBOT1QgYSBzdWZmaWNpZW50IGdhdGU6IG9iamVjdC1saXRlcmFsIGtleXMgaW5cbiAgICAgICAgICAgICAqIGxvb3NlbHkgdHlwZWQgcG9zaXRpb25zIChgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbeyBiYXRjaGVkQXJndW1lbnRzOiAuLi4gfV0pYCkgYXJlIG5vdCBjb250ZXh0dWFsbHlcbiAgICAgICAgICAgICAqIHR5cGVkLCBzbyBhIHJlbmFtZSBsZWF2ZXMgdGhlbSBiZWhpbmQgYW5kIGJyZWFrcyB0aGUgc3VpdGUgd2hlcmUgdGhlIHR5cGUgY2hlY2tlciBzZWVzIG5vdGhpbmcuXG4gICAgICAgICAgICAgKiBSZW5hbWUgaW4gc21hbGwgYmF0Y2hlcyB3aXRoIHRoZSBmdWxsIHRlc3QgcnVuIGluIHRoZSBsb29wLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRoZSBkaXNhYmxlZCByZXBsYWNlbWVudHMgYmVsb3cgYXJlIGVzdGFibGlzaGVkIHZvY2FidWxhcnkgcmF0aGVyIHRoYW4gYWJicmV2aWF0aW9ucyB0byBiZVxuICAgICAgICAgICAgICogZXhwYW5kZWQuIGBlbGAgaXMgZXhlbXB0IGJlY2F1c2UgT2JzaWRpYW4gbmFtZXMgZXZlcnkgZWxlbWVudCBtZW1iZXIgdGhhdCB3YXkgLS0gYGNvbnRhaW5lckVsYCxcbiAgICAgICAgICAgICAqIGBjb250ZW50RWxgLCBgaW5wdXRFbGAsIGBzZWxlY3RFbGAgLS0gc28gZXhwYW5kaW5nIG91cnMgdG8gYCpFbGVtZW50YCB3b3VsZCBsZWF2ZSBvdXIgY29tcG9uZW50c1xuICAgICAgICAgICAgICogcmVhZGluZyBpbmNvbnNpc3RlbnRseSBiZXNpZGUgdGhlIE9ic2lkaWFuIG9uZXMgdGhleSBzaXQgbmV4dCB0by4gRGlzYWJsaW5nIHRoZSByZXBsYWNlbWVudCBhbHNvXG4gICAgICAgICAgICAgKiBjb3ZlcnMgY29tcG91bmQgbmFtZXMsIHdoaWNoIGlzIDcyIHNpdGVzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGVhY2ggbmVlZCBhbiBpbmxpbmUgZGlzYWJsZS5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBgcmVmYCBpcyBleGVtcHQgZm9yIHRoZSBzYW1lIHJlYXNvbjogYEFzeW5jRXZlbnRSZWZgIGlzIHRoZSBhc3luYyBjb3VudGVycGFydCBvZiBPYnNpZGlhbidzXG4gICAgICAgICAgICAgKiBgRXZlbnRSZWZgLCBoYW5kZWQgdG8gdGhlIHNhbWUgYG9mZnJlZmAgLyBgcmVnaXN0ZXJFdmVudGAgc2hhcGVzLCBzbyB0aGUgdHdvIG5hbWVzIGhhdmUgdG8gbWF0Y2hcbiAgICAgICAgICAgICAqIHRvIHJlYWQgYXMgYSBwYWlyLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjaGVja1Byb3BlcnRpZXM6IHRydWUsXG4gICAgICAgICAgICByZXBsYWNlbWVudHM6IHtcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICogYGF0dHJgIC8gYGF0dHJzYCBhcmUgT2JzaWRpYW4ncyBvd246IGBjcmVhdGVFbCgnYScsIHsgYXR0cjogeyAuLi4gfSB9KWAgdGFrZXMgdGhlbSBieSB0aG9zZVxuICAgICAgICAgICAgICAgKiBuYW1lcyBvbiBgRG9tRWxlbWVudEluZm9gLCBzbyBvdXJzIGhhdmUgdG8gbWF0Y2ggdG8gYmUgcGFzc2VkIHRocm91Z2guIGBwcm9wc2AgaXMgdGhlXG4gICAgICAgICAgICAgICAqIHVuaXZlcnNhbCBjb21wb25lbnQgdm9jYWJ1bGFyeSwgZXhlbXB0IGZvciB0aGUgc2FtZSByZWFzb24gYHBhcmFtc2AgaXMuXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBhdHRyOiBmYWxzZSxcbiAgICAgICAgICAgICAgYXR0cnM6IGZhbHNlLFxuICAgICAgICAgICAgICBkZXY6IGZhbHNlLFxuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgKiBFdmVyeSBgZGlyYCBoZXJlIGlzIGEgZmlsZXN5c3RlbSBkaXJlY3RvcnksIG5ldmVyIGEgZGlyZWN0aW9uLCBzbyB0aGUgcnVsZSBpcyBuYXJyb3dlZCB0byB0aGVcbiAgICAgICAgICAgICAgICogb25lIGV4cGFuc2lvbiByYXRoZXIgdGhhbiBsZWZ0IG9mZmVyaW5nIGEgY2hvaWNlIGl0IGNhbm5vdCBtYWtlLlxuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gVGhpcyBpcyB0aGUgcnVsZSdzIG93biByZXBsYWNlbWVudCBrZXksIHdoaWNoIGhhcyB0byBiZSBzcGVsbGVkIHRoZSB3YXkgdGhlIHJ1bGUgcmVhZHMgaXQuXG4gICAgICAgICAgICAgIGRpcjoge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBkb2M6IGZhbHNlLFxuICAgICAgICAgICAgICBkb2NzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZWw6IGZhbHNlLFxuICAgICAgICAgICAgICBlbnY6IGZhbHNlLFxuICAgICAgICAgICAgICBsaWI6IGZhbHNlLFxuICAgICAgICAgICAgICBwYXJhbXM6IGZhbHNlLFxuICAgICAgICAgICAgICBwcm9wczogZmFsc2UsXG4gICAgICAgICAgICAgIHJlZjogZmFsc2UsXG4gICAgICAgICAgICAgIHJlZnM6IGZhbHNlLFxuICAgICAgICAgICAgICBzcmM6IGZhbHNlLFxuICAgICAgICAgICAgICB1dGlsOiBmYWxzZSxcbiAgICAgICAgICAgICAgdXRpbHM6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgbmV4dCBzaXggcnVsZXMgYWxsIHN1Z2dlc3QgYW4gQVBJIG5ld2VyIHRoYW4gdGhpcyBwcm9qZWN0J3MgYGxpYmAgKGBFUzIwMjJgKSwgc28gZm9sbG93aW5nIGFueSBvZlxuICAgICAgICAgKiB0aGVtIGZhaWxzIHRvIGNvbXBpbGUuIFRoZSB0YXJnZXQgaXMgbm90IGFyYml0cmFyeTogYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcvbWV0YWRhdGEuanNvbmBcbiAgICAgICAgICogcmVjb3JkcyBgZWNtYVNjcmlwdFZlcnNpb246IFwiRVMyMDIyXCJgIGZvciBpbnN0YWxsZXIgMS4xLjksIHRoZSBvbGRlc3Qgb25lIHN0aWxsIGFibGUgdG8gcnVuIGN1cnJlbnRcbiAgICAgICAgICogT2JzaWRpYW4uIEVhY2ggaXMgb2ZmIGF0IHRoZSBjb25maWcgbGV2ZWwgcmF0aGVyIHRoYW4gYW5ub3RhdGVkIHBlciBzaXRlLCBiZWNhdXNlIG5vbmUgY2FuIGV2ZXIgYmVcbiAgICAgICAgICogc2F0aXNmaWVkIHdoaWxlIHRoYXQgZmxvb3IgaG9sZHMuIFJldmlzaXQgdGhlbSB0b2dldGhlciBpZiB0aGUgZmxvb3IgbW92ZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIGBBcnJheSN0b1JldmVyc2VkYCBhbmQgYEFycmF5I3RvU29ydGVkYCBhcmUgRVMyMDIzLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tYXJyYXktcmV2ZXJzZSc6ICdvZmYnLFxuICAgICAgICAndW5pY29ybi9uby1hcnJheS1zb3J0JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIGBjb250aW51ZWAgaW5zaWRlIGEgbmVzdGVkIGxvb3AgaXMgb3JkaW5hcnksIHJlYWRhYmxlIGNvbnRyb2wgZmxvdyBoZXJlLiBUaGUgcnVsZSdzIHJlbWVkeSBpcyB0b1xuICAgICAgICAgKiBleHRyYWN0IGV2ZXJ5IHN1Y2ggbG9vcCBpbnRvIGl0cyBvd24gZnVuY3Rpb24sIHdoaWNoIHNwcmVhZHMgb25lIGNvaGVyZW50IHRyYXZlcnNhbCBhY3Jvc3MgdHdvXG4gICAgICAgICAqIGRlY2xhcmF0aW9ucyB3aXRob3V0IG1ha2luZyBhbnl0aGluZyBjbGVhcmVyLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tYnJlYWstaW4tbmVzdGVkLWxvb3AnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHJ1bGUgY2Fubm90IHNlZSB0aHJvdWdoIGEgaG9pc3RlZCBmdW5jdGlvbiBkZWNsYXJhdGlvbiwgc28gaXQgdHJlYXRzIGEgYmluZGluZyB0aGF0IGEgbmVzdGVkXG4gICAgICAgICAqIGZ1bmN0aW9uIGFscmVhZHkgcmVhZCBhcyB1bnVzZWQgYmVmb3JlIHRoZSBleGl0LiBJbiBgcnVuV2l0aFRpbWVvdXRgIHRoYXQgaXMgYGxldCBpc0NvbXBsZXRlZGAsIHdoaWNoXG4gICAgICAgICAqIGBydW4oKWAgYW5kIGBpbm5lclRpbWVvdXQoKWAgYm90aCB0b3VjaCB3aGlsZSB0aGUgYFByb21pc2UucmFjZWAgYWJvdmUgdGhlIGV4aXQgaXMgc3RpbGwgcnVubmluZyAtLVxuICAgICAgICAgKiBtb3ZpbmcgdGhlIGRlY2xhcmF0aW9uIHBhc3QgdGhlIGV4aXQsIGFzIHRoZSBydWxlIGFza3MsIHdvdWxkIGxlYXZlIHRob3NlIHJlYWRzIGluIHRoZSB0ZW1wb3JhbCBkZWFkXG4gICAgICAgICAqIHpvbmUuIEl0cyBvd24gZml4ZXIgZGVjbGluZXMgYWxsIDE1IHNpdGVzIGZvciB0aGUgc2FtZSByZWFzb24gaXQgY2Fubm90IHByb3ZlIHRoZW0gc2FmZSwgc28gZm9sbG93aW5nXG4gICAgICAgICAqIHRoZSBydWxlIGlzIGVudGlyZWx5IG1hbnVhbC4gV2hhdCBpcyBsZWZ0IGFmdGVyIHRoYXQgaXMgcGxhY2VtZW50IHN0eWxlOiB0aGUgcmVtYWluaW5nIHJlcG9ydHMgYXJlXG4gICAgICAgICAqIG5hbWVkIGNvbnN0YW50cyBhbmQgZGVyaXZlZCBwYXRocyBkZWxpYmVyYXRlbHkgZ3JvdXBlZCBhdCB0aGUgdG9wIG9mIGEgZnVuY3Rpb24sIGFuZCBwdXNoaW5nIGVhY2ggb25lXG4gICAgICAgICAqIGJlbG93IHRoZSBmaXJzdCBndWFyZCBzcGxpdHMgYSBjb2hlc2l2ZSBibG9jayB0byBubyBiZW5lZml0LiBUaGUgdGhyZWUgc2l0ZXMgd2hlcmUgZGVmZXJyaW5nIHNraXBwZWRcbiAgICAgICAgICogcmVhbCB3b3JrIChhIHNlY29uZCBgY29tcHV0ZU5lZWRlZEV4cG9zdXJlYCB3YWxrLCBhIGB0b0pzb25gIHNlcmlhbGl6YXRpb24sIGFuIGBlbnN1cmVMZkVuZGluZ3NgIHBhc3MpXG4gICAgICAgICAqIHdlcmUgYXBwbGllZCBieSBoYW5kIGluc3RlYWQuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1kZWNsYXJhdGlvbnMtYmVmb3JlLWVhcmx5LWV4aXQnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogQXNzaWduaW5nIG9udG8gdGhlIGdsb2JhbCBvYmplY3QgaXMgaG93IHRoaXMgbGlicmFyeSBpbnN0YWxscyBhbmQgcmVzdG9yZXMgdGVzdCBkb3VibGVzLCBhbmQgaG93IGFcbiAgICAgICAgICogZmV3IE9ic2lkaWFuLXJ1bnRpbWUgZ2xvYmFscyBhcmUgcmVhY2hlZCBhdCBhbGwuIFRoZSBydWxlIGNhbm5vdCBzZXBhcmF0ZSB0aGF0IGZyb20gYW4gYWNjaWRlbnRhbFxuICAgICAgICAgKiBnbG9iYWwgd3JpdGUsIGFuZCBpdCBoYXMgbm8gZml4ZXIuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1nbG9iYWwtb2JqZWN0LXByb3BlcnR5LWFzc2lnbm1lbnQnOiAnb2ZmJyxcbiAgICAgICAgLy8gYG51bGxgIGlzIGxvYWQtYmVhcmluZyBoZXJlOiBhbiBvcHRpb25hbCBjb2xsYWJvcmF0b3IgaXMgbW9kZWxsZWQgYXMgYSByZXF1aXJlZCBgbnVsbCB8IFhgIGZpZWxkIHJhdGhlciB0aGFuIGFuIG9wdGlvbmFsIGBYYCwgc28gYG51bGxgIGFuZCBgdW5kZWZpbmVkYCBhcmUgbm90IGludGVyY2hhbmdlYWJsZS5cbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHJ1bGUncyBsaXN0IG9mIHN0YW5kYXJkIGBTeW1ib2xgIHByb3BlcnRpZXMgcHJlZGF0ZXMgZXhwbGljaXQgcmVzb3VyY2UgbWFuYWdlbWVudCwgc28gaXQgcmVwb3J0c1xuICAgICAgICAgKiBgU3ltYm9sLmRpc3Bvc2VgIGFuZCBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgYXMgbm9uLXN0YW5kYXJkLiBCb3RoIGFyZSBwYXJ0IG9mIHRoZSBsYW5ndWFnZSB0aGF0IHRoaXNcbiAgICAgICAgICogbGlicmFyeSBpcyBidWlsdCBvbiAtLSAxMTQgZmlsZXMgaGVyZSB1c2UgYHVzaW5nYCBkZWNsYXJhdGlvbnMsIGFuZCB0aGUgZGlzcG9zYWJsZSB0eXBlcyBhcmUgYVxuICAgICAgICAgKiBwdWJsaWMgcGFydCBvZiBpdHMgc3VyZmFjZSAtLSBzbyBhbGwgNTkgcmVwb3J0cyBhcmUgdGhlIHJ1bGUgYmVpbmcgb3V0IG9mIGRhdGUgcmF0aGVyIHRoYW4gYSBmaW5kaW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tbm9uc3RhbmRhcmQtYnVpbHRpbi1wcm9wZXJ0aWVzJzogJ29mZicsXG4gICAgICAgICd1bmljb3JuL25vLW51bGwnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVHlwZVNjcmlwdCdzIGV4cGxpY2l0IGB0aGlzYCBwYXJhbWV0ZXIgKGBmdW5jdGlvbiBnZXQodGhpczogSG9sZGVyKSB7IHJldHVybiB0aGlzLnZhbHVlOyB9YCkgbWFrZXNcbiAgICAgICAgICogYHRoaXNgIG91dHNpZGUgYSBjbGFzcyBib3RoIGxlZ2FsIGFuZCB0eXBlLWNoZWNrZWQsIGJ1dCB0aGUgcnVsZSBpcyBzeW50YWN0aWMgYW5kIGZsYWdzIGl0IGlkZW50aWNhbGx5XG4gICAgICAgICAqIHRvIGEgZ2VudWluZWx5IHVuYm91bmQgYHRoaXNgLiBJdCBoYXMgbm8gb3B0aW9ucyAoYHNjaGVtYTogW11gKSBhbmQgbm8gZml4ZXIsIHNvIHRoZXJlIGlzIG5vIHdheSB0b1xuICAgICAgICAgKiBzZXBhcmF0ZSB0aGUgaWRpb20gZnJvbSB0aGUgYnVnIGl0IHRhcmdldHMuIE1vc3QgaGl0cyBoZXJlIHdlcmUgdHlwZWQgYHRoaXNgIHBhcmFtZXRlcnMgYW5kIHRlc3RzIHRoYXRcbiAgICAgICAgICogZGVsaWJlcmF0ZWx5IGFzc2VydCBgdGhpc2AgYmluZGluZy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLXRoaXMtb3V0c2lkZS1vZi1jbGFzcyc6ICdvZmYnLFxuICAgICAgICAvLyBTYW1lIGNhbGwgYXMgaXRzIG9iamVjdCBjb3VudGVycGFydCBhYm92ZTogdGhlIGRlc3RydWN0dXJpbmcgZGVwdGggZmxhZ2dlZCBoZXJlIGlzIGRlbGliZXJhdGUgYW5kIHJlYWRzIHdlbGwuXG4gICAgICAgICd1bmljb3JuL25vLXVucmVhZGFibGUtYXJyYXktZGVzdHJ1Y3R1cmluZyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcmVwb3J0cyBhcmUgYWxsIGBmb3IgKGNvbnN0IGZpbGUgb2YgYXdhaXQgcmVhZGRpclBvc2l4KC4uLikpYCwgd2hpY2ggcmVhZHMgZXhhY3RseSBhcyBpbnRlbmRlZC5cbiAgICAgICAgICogSG9pc3RpbmcgdGhlIGF3YWl0ZWQgY2FsbCBpbnRvIGEgdmFyaWFibGUgbmFtZWQgYWZ0ZXIgdGhlIGxvb3AncyBvd24gaXRlcmFibGUgYWRkcyBhIGxpbmUgYW5kIGEgbmFtZVxuICAgICAgICAgKiB3aXRob3V0IGFkZGluZyBpbmZvcm1hdGlvbi5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLXVucmVhZGFibGUtZm9yLW9mLWV4cHJlc3Npb24nOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIG5lc3RlZCBkZXN0cnVjdHVyaW5nIHRoaXMgZmxhZ3MgaXMgZGVsaWJlcmF0ZSBoZXJlIGFuZCByZWFkcyB3ZWxsOiBwdWxsaW5nIGEgbWVtYmVyIG91dCBvZiBhXG4gICAgICAgICAqIHBhcmFtcyBiYWcgaW4gb25lIHN0ZXAgc3RhdGVzIHdoZXJlIHRoZSB2YWx1ZSBjb21lcyBmcm9tLCB3aGljaCBhIHNlY29uZCBpbnRlcm1lZGlhdGUgYmluZGluZyBvbmx5XG4gICAgICAgICAqIG9ic2N1cmVzLiBUaGUgcnVsZSB0YWtlcyBubyBvcHRpb25zLCBzbyB0aGVyZSBpcyBubyB3YXkgdG8ga2VlcCB0aGUgZGVwdGggbGltaXQgaXQgaXMgcmVhbGx5IGFmdGVyXG4gICAgICAgICAqIHdoaWxlIGFsbG93aW5nIHRoZSBzaGFwZSBpbiB1c2UuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby11bnJlYWRhYmxlLW9iamVjdC1kZXN0cnVjdHVyaW5nJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIGBjaGVja0FyZ3VtZW50c2Agc3RyaXBzIGB1bmRlZmluZWRgIGFyZ3VtZW50cywgd2hpY2ggc2hpZnRzIHRoZSByZW1haW5pbmcgcG9zaXRpb25hbCBhcmd1bWVudHMgaW50b1xuICAgICAgICAgKiB0aGUgd3Jvbmcgc2xvdHM7IGBjaGVja0Fycm93RnVuY3Rpb25Cb2R5YCByZW1vdmVzIGByZXR1cm4gdW5kZWZpbmVkO2AgZnJvbSBhcnJvdyBib2RpZXMgd2hvc2Ugb3RoZXJcbiAgICAgICAgICogYnJhbmNoZXMgZG8gcmV0dXJuIGEgdmFsdWUsIHdoaWNoIHZpb2xhdGVzIHRoZSBgbm9JbXBsaWNpdFJldHVybnNgIHNldHRpbmcgdGhpcyBwcm9qZWN0IGNvbXBpbGVzIHdpdGguXG4gICAgICAgICAqIFRoZSBydWxlJ3MgcmVtYWluaW5nIGNhc2VzIChhIGJhcmUgYHVuZGVmaW5lZGAgaW5pdGlhbGl6ZXIsIGByZXR1cm4gdW5kZWZpbmVkO2AgaW4gYSB2b2lkIGZ1bmN0aW9uKVxuICAgICAgICAgKiBhcmUgc3RpbGwgd29ydGggaGF2aW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tdXNlbGVzcy11bmRlZmluZWQnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjaGVja0FyZ3VtZW50czogZmFsc2UsXG4gICAgICAgICAgICBjaGVja0Fycm93RnVuY3Rpb25Cb2R5OiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgLy8gYEFycmF5LmZyb21Bc3luY2AgaXMgRVMyMDI0LiBTZWUgdGhlIEVTMjAyMiBmbG9vciBub3RlIGFib3ZlLlxuICAgICAgICAndW5pY29ybi9wcmVmZXItYXJyYXktZnJvbS1hc3luYyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBFdmVyeSBoaXQgaGVyZSBpcyBhIHByb21pc2UgZGVsaWJlcmF0ZWx5IE5PVCBhd2FpdGVkLCBhbmQgYGF3YWl0YCB3b3VsZCBjaGFuZ2Ugd2hhdCB0aGUgY29kZSBkb2VzLlxuICAgICAgICAgKiBgcmVzdWx0LmNhdGNoKHRocm93RGVsYXllZClgIGluIGBhc3luYy1ldmVudHMudHNgIGlzIHRoZSBmaXJlLWFuZC1mb3JnZXQgZXJyb3IgcGF0aCB0aGUgbW9kdWxlIGlzXG4gICAgICAgICAqIGJ1aWx0IG9uOyB0aGUgcmVzdCBob2xkIGFuIHVucmVzb2x2ZWQgcHJvbWlzZSBhbmQgYXNzZXJ0IHRoZSBjYWxsYmFjayBoYXMgbm90IGZpcmVkIHlldCwgc28gYXdhaXRpbmdcbiAgICAgICAgICogd291bGQgaGFuZyB0aGUgdGVzdCBvciBpbnZlcnQgd2hhdCBpdCBwcm92ZXMuIFRoZSBydWxlIGNhbm5vdCB0ZWxsIGEgZm9yZ290dGVuIGBhd2FpdGAgZnJvbSBhblxuICAgICAgICAgKiBpbnRlbnRpb25hbCBvbmUsIGFuZCB0aGlzIGNvZGViYXNlIHNjaGVkdWxlcyBmaXJlLWFuZC1mb3JnZXQgd29yayBhcyBhIGNvcmUgcGF0dGVybi5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1hd2FpdCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBBbGwgdGhyZWUgcmVwb3J0cyByZWFkIEhUTUwgb3V0IChgY29uc3QgaHRtbCA9IGVsLmlubmVySFRNTGApLCBuZXZlciB3cml0ZSBpdCwgYW5kIGZvciBhIHJlYWRcbiAgICAgICAgICogYGdldEhUTUwoKWAgcmV0dXJucyB0aGUgc2FtZSBzdHJpbmcuIFdoYXQgaXQgYWRkcyBpcyBzaGFkb3ctcm9vdCBzZXJpYWxpemF0aW9uIG9wdGlvbnMgdGhhdCBub3RoaW5nXG4gICAgICAgICAqIGhlcmUgYXNrcyBmb3IsIGluIGV4Y2hhbmdlIGZvciBhIG11Y2ggbmV3ZXIgcGxhdGZvcm0gZmxvb3IgdGhhbiBgaW5uZXJIVE1MYCAtLSBhIGJhZCB0cmFkZSBmb3IgYVxuICAgICAgICAgKiBsaWJyYXJ5IHRoYXQgaGFzIHRvIHJ1biBvbiB3aGF0ZXZlciBDaHJvbWl1bSB0aGUgaW5zdGFsbGVkIE9ic2lkaWFuIHNoaXBzLiBUaGUgcnVsZSdzIG90aGVyIGhhbGYsXG4gICAgICAgICAqIHJld3JpdGluZyB3cml0ZXMgdG8gdGhlIHNhbml0aXppbmcgYHNldEhUTUwoKWAsIHdvdWxkIGJlIHdvcnRoIGhhdmluZzsgaXQganVzdCBuZXZlciBmaXJlcyBoZXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLWh0bWwtbWV0aG9kcyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBPYnNpZGlhbidzIGBDb21wb25lbnRgIGhhcyBpdHMgb3duIGByZW1vdmVDaGlsZChjb21wb25lbnQpYCBmb3IgdGhlIGNvbXBvbmVudCBsaWZlY3ljbGUsIHVucmVsYXRlZFxuICAgICAgICAgKiB0byBgTm9kZSNyZW1vdmVDaGlsZGAuIFRoZSBydWxlIG1hdGNoZXMgb24gdGhlIG1ldGhvZCBuYW1lIGFsb25lLCBzbyBldmVyeSByZXBvcnQgaGVyZSBpcyBhXG4gICAgICAgICAqIGNvbXBvbmVudCBiZWluZyB1bmxvYWRlZCwgYW5kIGZvbGxvd2luZyB0aGUgYWR2aWNlIGNhbGxzIGEgYHJlbW92ZSgpYCB0aGF0IGRvZXMgbm90IGV4aXN0IC0tIHdoaWNoXG4gICAgICAgICAqIGlzIHdoYXQgYHRzY2Agc2FpZCB3aGVuIHRoZSBmaXhlciB3YXMgbGV0IGxvb3NlIG9uIHRoZW0uXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItZG9tLW5vZGUtcmVtb3ZlJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIERpcmVjdGx5IGNvbnRyYWRpY3RzIGBvYnNpZGlhbm1kL25vLWdsb2JhbC10aGlzYDogdGhpcyBydWxlIHJld3JpdGVzIGB3aW5kb3cueGAgdG8gYGdsb2JhbFRoaXMueGAsIGFuZFxuICAgICAgICAgKiB0aGF0IG9uZSBmb3JiaWRzIGBnbG9iYWxUaGlzYCBvdXRyaWdodC4gV2l0aCBib3RoIGVuYWJsZWQsIGAtLWZpeGAgYXBwbGllcyBvbmUgYW5kIHRoZW4gdGhlIG90aGVyXG4gICAgICAgICAqIHJldmVydHMgaXQsIHdoaWNoIEVTTGludCByZXBvcnRzIGFzIGBFU0xpbnRDaXJjdWxhckZpeGVzV2FybmluZ2AgYWNyb3NzIDI5IGZpbGVzLiBPYnNpZGlhbidzIG93blxuICAgICAgICAgKiBndWlkYW5jZSB3aW5zIGluIGFuIE9ic2lkaWFuIGxpYnJhcnksIHNvIHRoaXMgaXMgdGhlIHJ1bGUgdGhhdCBnaXZlcyB3YXkuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItZ2xvYmFsLXRoaXMnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogSXRlcmF0b3IgaGVscGVycyAoYEl0ZXJhdG9yI3NvbWVgIGFuZCBmcmllbmRzKSBhcmUgRVMyMDI1LCBzbyB0aGlzIGJlbG9uZ3Mgd2l0aCBgbm8tYXJyYXktcmV2ZXJzZWAgYW5kXG4gICAgICAgICAqIGBuby1hcnJheS1zb3J0YCBhYm92ZTogdGhlIHNhbWUgRVMyMDIyIGZsb29yIHJ1bGVzIGl0IG91dCwgYW5kIHRoZSBzYW1lIG5vdGUgYXBwbGllcyAtLSByZXZpc2l0IHRoZW1cbiAgICAgICAgICogdG9nZXRoZXIgaWYgdGhhdCBmbG9vciBtb3Zlcy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1pdGVyYXRvci1oZWxwZXJzJzogJ29mZicsXG4gICAgICAgIC8vIGBJdGVyYXRvciN0b0FycmF5YCBpcyBFUzIwMjUuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1pdGVyYXRvci10by1hcnJheSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgc3VnZ2VzdGVkIHJlcGxhY2VtZW50IGlzIGBNYXRoLnRydW5jKE51bWJlcih4KSlgLCB3aGljaCBpcyBsb25nZXIgdGhhbiBgcGFyc2VJbnQoeCwgMTApYCBhbmQgbm9cbiAgICAgICAgICogY2xlYXJlciwgYW5kIGl0IGlzIG5vdCB0aGUgc2FtZSBmdW5jdGlvbjogYHBhcnNlSW50YCBzdG9wcyBhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgY2Fubm90IGJlIHBhcnRcbiAgICAgICAgICogb2YgdGhlIG51bWJlciwgc28gYCcxMmFiYydgIHBhcnNlcyB0byAxMiB3aGVyZSBgTnVtYmVyYCB5aWVsZHMgYE5hTmAuIFR3byBvZiB0aGUgcmVwb3J0cyByZWFkIHVzZXJcbiAgICAgICAgICogaW5wdXQgdGhyb3VnaCB0aGF0IGRpZmZlcmVuY2UgLS0gdGhlIHBhZ2UtanVtcCBib3ggaW4gdGhlIERhdGF2aWV3IGhlbHBlciwgYW5kXG4gICAgICAgICAqIGBOdW1iZXJDb21wb25lbnQudmFsdWVGcm9tU3RyaW5nYCwgd2hvc2UgbGVuaWVudCBwYXJzZSBpcyBwYXJ0IG9mIGEgcHVibGlzaGVkIGNvbXBvbmVudCdzIGJlaGF2aW9yLlxuICAgICAgICAgKiBUaGUgcmVzdCBwYXJzZSBtYWNoaW5lLWdlbmVyYXRlZCBzdHJpbmdzLCB3aGVyZSB0aGUgdHdvIGFncmVlIGJ1dCB0aGUgc2hvcnRlciBzcGVsbGluZyBzdGlsbCB3aW5zLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLW51bWJlci1jb2VyY2lvbic6ICdvZmYnLFxuICAgICAgICAvLyBgUHJvbWlzZS53aXRoUmVzb2x2ZXJzYCBpcyBFUzIwMjQuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1wcm9taXNlLXdpdGgtcmVzb2x2ZXJzJzogJ29mZicsXG4gICAgICAgIC8vIGBTZXQjdW5pb25gIGFuZCBmcmllbmRzIGFyZSBFUzIwMjUuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1zZXQtbWV0aG9kcyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSByYW5rcyBvcGVyYW5kcyBieSBzeW50YWN0aWMgc2hhcGUsIG5vdCBjb3N0LCBzbyBldmVyeSByZXBvcnQgaGVyZSBzd2FwcyBvbmUgcHJvcGVydHkgcmVhZFxuICAgICAgICAgKiBhaGVhZCBvZiBhbm90aGVyIGFuZCBidXlzIG5vdGhpbmcuIEl0cyBvd24gbWVzc2FnZSBjb25jZWRlcyBpdCBjYW5ub3QgY2hlY2sgdGhlIHBhcnQgdGhhdCBtYXR0ZXJzIC0tXG4gICAgICAgICAqIFwiYWZ0ZXIgdmVyaWZ5aW5nIHNob3J0LWNpcmN1aXQgYmVoYXZpb3JcIiAtLSBhbmQgb25lIHJlcG9ydCBzaXRzIGRpcmVjdGx5IHVuZGVyIGEgY29tbWVudCByZWNvcmRpbmdcbiAgICAgICAgICogdGhhdCB0aGUgb3BlcmFuZHMgY2hhbmdlIGluc2lkZSBhIGByZW5hbWVgIGV2ZW50IGhhbmRsZXIsIHdoaWNoIGlzIHdoZXJlIG9yZGVyIHN0b3BzIGJlaW5nIGZyZWUuXG4gICAgICAgICAqIFRoZSBjdXJyZW50IG9yZGVycyBhbHNvIGNhcnJ5IGludGVudDogYSBudWxsIGd1YXJkIGJlZm9yZSB0aGUgdXNlIGl0IGd1YXJkcywgYW5kIHRoZSBjb25kaXRpb24gYmVpbmdcbiAgICAgICAgICogcmVwb3J0ZWQgYmVmb3JlIHRoZSBzdGF0ZSBpdCBjb250cmFkaWN0cy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1zaW1wbGUtY29uZGl0aW9uLWZpcnN0JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIGBVUkwuY2FuUGFyc2VgIHJlcXVpcmVzIE5vZGUgMTguMTcsIHdlbGwgYWJvdmUgdGhlIE5vZGUgMTYuMTYuMCBmbG9vciB0aGF0IHNoaXBwZWQgc291cmNlIHRhcmdldHNcbiAgICAgICAgICogKHNlZSBgbWluaW11bU5vZGVWZXJzaW9uYCBiZWxvdykuIFRoZSBydWxlIGNhbiB0aGVyZWZvcmUgbmV2ZXIgYmUgc2F0aXNmaWVkIGhlcmUsIHNvIGl0IGlzIG9mZiBhdCB0aGVcbiAgICAgICAgICogY29uZmlnIGxldmVsIHJhdGhlciB0aGFuIGFubm90YXRlZCBhdCBlYWNoIGNhbGwgc2l0ZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci11cmwtY2FuLXBhcnNlJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEV2ZXJ5IGFycmF5IHJlcG9ydGVkIGhlcmUgaG9sZHMgc3RyaW5ncywgd2hlcmUgdGhlIGRlZmF1bHQgc29ydCBpcyBhbHJlYWR5IHdlbGwgZGVmaW5lZCBhbmQgY29ycmVjdC5cbiAgICAgICAgICogQWRkaW5nIHRoZSBjb21wYXJhdG9yIHRoZSBydWxlIGFza3MgZm9yIHdvdWxkIG1lYW4gY2hvb3NpbmcgYmV0d2VlbiBjb2RlLXVuaXQgYW5kIGxvY2FsZSBvcmRlcmluZyxcbiAgICAgICAgICogc28gZm9sbG93aW5nIGl0IHdvdWxkIENIQU5HRSB0aGUgc29ydCByYXRoZXIgdGhhbiBkb2N1bWVudCBpdC4gVGhlIHJ1bGUgZWFybnMgaXRzIHBsYWNlIG9uIG51bWVyaWNcbiAgICAgICAgICogYXJyYXlzOyBpdCBkb2VzIG5vdCBoYXZlIGFueSBoZXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcmVxdWlyZS1hcnJheS1zb3J0LWNvbXBhcmUnOiAnb2ZmJyxcbiAgICAgICAgLy8gVGhlIGNvZGViYXNlIGFscmVhZHkgc3BlbGxzIGVuY29kaW5ncyB0aGUgd2F5IHRoZSBFbmNvZGluZyBTdGFuZGFyZCBkb2VzIChgdXRmLThgKSwgd2hpY2ggaXMgYWxzbyB3aGF0IGBUZXh0RGVjb2RlcmAgcmVwb3J0cy4gS2VlcCB0aGUgcnVsZSBlbmZvcmNpbmcgY29uc2lzdGVuY3ksIGp1c3QgaW4gdGhlIGRpcmVjdGlvbiBhbHJlYWR5IGluIHVzZS5cbiAgICAgICAgJ3VuaWNvcm4vdGV4dC1lbmNvZGluZy1pZGVudGlmaWVyLWNhc2UnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3aXRoRGFzaDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQnVpbGQvbGludC92ZXJzaW9uIHNjcmlwdHMgYXJlIENMSSBlbnRyeSBwb2ludHMsIHdoZXJlIGV4aXRpbmcgd2l0aCBhIHN0YXR1cyBjb2RlIGlzIHRoZSBpbnRlcmZhY2UuXG4gICAgICBmaWxlczogY29udGV4dC5zY3JpcHRGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICd1bmljb3JuL25vLXByb2Nlc3MtZXhpdCc6ICdvZmYnXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAvKlxuICAgICAgICogQSBtb2R1bGUtbGV2ZWwgZml4dHVyZSBhc3NpZ25lZCBmcm9tIGBiZWZvcmVFYWNoYCBpcyB0aGUgc3RhbmRhcmQgdGVzdCBzaGFwZTpcbiAgICAgICAqXG4gICAgICAgKiAgIGxldCBhcHA6IEFwcDtcbiAgICAgICAqICAgYmVmb3JlRWFjaCgoKSA9PiB7IGFwcCA9IEFwcC5jcmVhdGVDb25maWd1cmVkX18oKTsgfSk7XG4gICAgICAgKlxuICAgICAgICogVGhlIHJ1bGUgaXMgcmlnaHQgYWJvdXQgcHJvZHVjdGlvbiBjb2RlIC0tIG1vZHVsZSBzdGF0ZSByZWFzc2lnbmVkIGZyb20gaW5zaWRlIGEgZnVuY3Rpb24gaXMgd29ydGhcbiAgICAgICAqIGZsYWdnaW5nLCBhbmQgdGhlIGZpeCBpcyB0byBob2xkIGl0IGluIGEgYGNvbnN0YCBvYmplY3QgaW5zdGVhZC4gSW4gdGVzdHMgdGhhdCB3b3VsZCByZXBsYWNlIGV2ZXJ5XG4gICAgICAgKiBgYXBwYCB3aXRoIGBTVEFURS5hcHBgIGFuZCBtYWtlIGVhY2ggZmlsZSByZWFkIHdvcnNlIGZvciBubyBnYWluLCBzaW5jZSB0aGUgZml4dHVyZSBpcyByZXNldCBwZXIgdGVzdFxuICAgICAgICogYnkgZGVzaWduLiBTY29wZWQgb2ZmIGhlcmUgcmF0aGVyIHRoYW4gZGlzYWJsZWQgb3V0cmlnaHQsIHNvIHByb2R1Y3Rpb24gY29kZSBrZWVwcyB0aGUgY2hlY2suXG4gICAgICAgKi9cbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIFR3byBzaGFwZXMgaGVyZSBjYW5ub3QgZm9sbG93IHRoZSBhZHZpY2UuIEEgaGVscGVyIGRlZmluZWQgaW5zaWRlIGFuIGBldmFsSW5PYnNpZGlhbmAgY2FsbGJhY2tcbiAgICAgICAgICogY2Fubm90IGJlIGhvaXN0ZWQgYXQgYWxsOiB0aGUgY2FsbGJhY2sgaXMgc2VyaWFsaXplZCB3aXRoIGB0b1N0cmluZygpYCBhbmQgcnVucyBpbnNpZGUgT2JzaWRpYW4sIHNvXG4gICAgICAgICAqIGFueXRoaW5nIGxlZnQgYmVoaW5kIGluIHRoZSBtb2R1bGUgc2NvcGUgaXMgc2ltcGx5IG5vdCB0aGVyZS4gQW5kIGEgcGVyLXN1aXRlIGZhY3RvcnlcbiAgICAgICAgICogKGBjcmVhdGVDb21wb25lbnRgLCBgY3JlYXRlTW9ja1BsdWdpbmApIGlzIGRlbGliZXJhdGVseSBsb2NhbCwga2VlcGluZyBlYWNoIHN1aXRlJ3MgZml4dHVyZSBuZXh0IHRvXG4gICAgICAgICAqIHRoZSBhc3NlcnRpb25zIHRoYXQgcmVhZCBpdC4gUHJvZHVjdGlvbiBjb2RlIGtlZXBzIHRoZSBjaGVjay5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBBIHRlc3QgYmluZGluZyBpcyBuYW1lZCBhZnRlciB0aGUgdGhpbmcgaXQgY2FwdHVyZXMsIG5vdCBhZnRlciB3aGF0IGl0IGRvZXM6IGBjcmVhdGVFbGVtZW50U3B5YFxuICAgICAgICAgKiBob2xkcyB0aGUgc3B5IG9uIGBjcmVhdGVFbGVtZW50YCwgYW5kIGBjcmVhdGVQcm9ncmFtT3B0aW9uc2AgaG9sZHMgdGhlIG9wdGlvbnMgYGNyZWF0ZVByb2dyYW1gIHdhc1xuICAgICAgICAgKiBjYWxsZWQgd2l0aC4gVGhlIHZlcmIgYmVsb25ncyB0byB0aGUgbmFtZSBiZWluZyByZWZlcmVuY2VkLCBzbyB0aGUgcnVsZSByZWFkcyBpdCBhcyBhIGZ1bmN0aW9uIG5hbWVcbiAgICAgICAgICogdGhhdCBpcyBub3QgYSBmdW5jdGlvbi4gTGVmdCBvbiBmb3IgcHJvZHVjdGlvbiBjb2RlLCB3aGVyZSB0aGUgY29tcGxhaW50IGlzIHRoZSByaWdodCBvbmUuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1ub24tZnVuY3Rpb24tdmVyYi1wcmVmaXgnOiAnb2ZmJyxcbiAgICAgICAgJ3VuaWNvcm4vbm8tdG9wLWxldmVsLWFzc2lnbm1lbnQtaW4tZnVuY3Rpb24nOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbi8qIGVzbGludC1lbmFibGUgbm8tbWFnaWMtbnVtYmVycyAtLSBXZSBkaXNhYmxlZCBtYWdpYyBudW1iZXJzIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBhbGwgb3ZlciB0aGUgY29uZmlncy4gKi9cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QSxRQU16QyxnQ0FBZ0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9oQyxzQ0FBc0M7QUFBQTtBQUFBLFFBRXRDLHlDQUF5QztBQUFBLFVBQ3ZDO0FBQUEsVUFDQTtBQUFBLFlBQ0UsVUFBVTtBQUFBLFVBQ1o7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUE7QUFBQSxNQUVFLE9BQU8sUUFBUTtBQUFBLE1BQ2YsT0FBTztBQUFBLFFBQ0wsMkJBQTJCO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBQUEsSUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQVlFLE9BQU8sUUFBUTtBQUFBLE1BQ2YsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRTCx1Q0FBdUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU92Qyx1Q0FBdUM7QUFBQSxRQUN2QywrQ0FBK0M7QUFBQSxNQUNqRDtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFsiY29tbWVudHNDb25maWdzIiwgImVzbGludCIsICJlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MiLCAib2JzaWRpYW5tZCIsICJub2RlUGx1Z2luIiwgInBlcmZlY3Rpb25pc3RDb25maWdzIiwgInN0eWxpc3RpYyIsICJ0c2VzbGludCIsICJ1bmljb3JuIl0KfQo=
1196
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgY29uZmlndXJhdGlvbiBmb3IgVHlwZVNjcmlwdCBwcm9qZWN0cyB3aXRoIHZhcmlvdXMgcGx1Z2lucy5cbiAqXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIEVTTGludCBjb25maWd1cmF0aW9ucyBmb3IgVHlwZVNjcmlwdCBwcm9qZWN0cywgaW50ZWdyYXRpbmcgbXVsdGlwbGUgRVNMaW50IHBsdWdpbnNcbiAqIHN1Y2ggYXMgYEB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJgLCBgQHR5cGVzY3JpcHQtZXNsaW50L2VzbGludC1wbHVnaW5gLFxuICogYGVzbGludC1wbHVnaW4tbW9kdWxlcy1uZXdsaW5lc2AsIGBAc3R5bGlzdGljL2VzbGludC1wbHVnaW5gLlxuICogSXQgc2V0cyB1cCBwYXJzZXJzLCBwbHVnaW5zLCBhbmQgcnVsZXMgZm9yIG1haW50YWluaW5nIGNvZGUgcXVhbGl0eSBhbmQgY29uc2lzdGVuY3kuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIERlY2xhcmF0aXZlIEVTTGludCBydWxlL3BsdWdpbiBjb25maWd1cmF0aW9uOyBjb3JyZWN0bmVzcyBpcyB2ZXJpZmllZCBieSBydW5uaW5nIEVTTGludCwgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgTGludGVyIH0gZnJvbSAnZXNsaW50JztcblxuLyogZXNsaW50LWRpc2FibGUgbm8tbWFnaWMtbnVtYmVycyAtLSBXZSBkaXNhYmxlZCBtYWdpYyBudW1iZXJzIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBhbGwgb3ZlciB0aGUgY29uZmlncy4gKi9cbmltcG9ydCBjb21tZW50c0NvbmZpZ3MgZnJvbSAnQGVzbGludC1jb21tdW5pdHkvZXNsaW50LXBsdWdpbi1lc2xpbnQtY29tbWVudHMvY29uZmlncyc7XG5pbXBvcnQgeyBpbmNsdWRlSWdub3JlRmlsZSB9IGZyb20gJ0Blc2xpbnQvY29uZmlnLWhlbHBlcnMnO1xuaW1wb3J0IGVzbGludCBmcm9tICdAZXNsaW50L2pzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1yZW5hbWUtZGVmYXVsdCAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgcGx1Z2luYCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IHN0eWxpc3RpYyBmcm9tICdAc3R5bGlzdGljL2VzbGludC1wbHVnaW4nO1xuaW1wb3J0IHsgY3JlYXRlVHlwZVNjcmlwdEltcG9ydFJlc29sdmVyIH0gZnJvbSAnZXNsaW50LWltcG9ydC1yZXNvbHZlci10eXBlc2NyaXB0JztcbmltcG9ydCB7IGZsYXRDb25maWdzIGFzIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncyB9IGZyb20gJ2VzbGludC1wbHVnaW4taW1wb3J0LXgnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBfZGVmYXVsdGAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCBub2RlUGx1Z2luIGZyb20gJ2VzbGludC1wbHVnaW4tbic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYHBsdWdpbmAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCBvYnNpZGlhbm1kIGZyb20gJ2VzbGludC1wbHVnaW4tb2JzaWRpYW5tZCc7XG5pbXBvcnQgeyBQbGFpblRleHRQYXJzZXIgfSBmcm9tICdlc2xpbnQtcGx1Z2luLW9ic2lkaWFubWQvZGlzdC9saWIvcGxhaW5UZXh0UGFyc2VyLmpzJztcbmltcG9ydCB7IGNvbmZpZ3MgYXMgcGVyZmVjdGlvbmlzdENvbmZpZ3MgfSBmcm9tICdlc2xpbnQtcGx1Z2luLXBlcmZlY3Rpb25pc3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBpbmRleGAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCB1bmljb3JuIGZyb20gJ2VzbGludC1wbHVnaW4tdW5pY29ybic7XG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tICdlc2xpbnQvY29uZmlnJztcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1yZW5hbWUtZGVmYXVsdCAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG5pbXBvcnQgdHNlc2xpbnQgZnJvbSAndHlwZXNjcmlwdC1lc2xpbnQnO1xuXG5pbXBvcnQgeyBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB9IGZyb20gJy4uLy4uL29ic2lkaWFuL3BsdWdpbi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnLi4vLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBnZXRSb290Rm9sZGVyIH0gZnJvbSAnLi4vcm9vdC50cyc7XG5pbXBvcnQgeyBub1Jlc3RyaWN0ZWRTeW50YXhSdWxlRW50cmllcyB9IGZyb20gJy4vZXNsaW50LW5vLXJlc3RyaWN0ZWQtc3ludGF4LnRzJztcbmltcG9ydCB7IGpzb25QbHVnaW4gfSBmcm9tICcuL2VzbGludC1ydWxlcy9tYW5pZmVzdC1oZWxwZXJzLnRzJztcbmltcG9ydCB7IG9ic2lkaWFuRGV2VXRpbHNQbHVnaW4gfSBmcm9tICcuL2VzbGludC1ydWxlcy9vYnNpZGlhbi1kZXYtdXRpbHMtcGx1Z2luLnRzJztcblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgZGVmaW5pbmcgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmluZUVzbGludENvbmZpZ3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBidWlsZHMgY3VzdG9tIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gY29udGV4dC5cbiAgICogQHJldHVybnMgVGhlIGN1c3RvbSBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gICAqL1xuICBjdXN0b21Db25maWdzPyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgZWRpdHMgdGhlIEVTTGludCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIEVTTGludCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG4gICAqL1xuICBlZGl0Q29udGV4dD8oY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhlIGNvbnRleHQgZm9yIGRlZmluaW5nIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVzbGludENvbmZpZ0NvbnRleHQge1xuICAvKipcbiAgICogVGhlIHJvb3QgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb290Q29uZmlnRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JpcHQgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NyaXB0RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc291cmNlRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXN0IGZpbGVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRlc3RGaWxlczogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogVGhlIGFsbCBmaWxlcy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGFsbCBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyBhbGxGaWxlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnRlc3RGaWxlcywgLi4udGhpcy5zY3JpcHRGaWxlcywgLi4udGhpcy5yb290Q29uZmlnRmlsZXMsIC4uLnRoaXMuc291cmNlRmlsZXNdO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGQgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYnVpbGRzIEVTTGludCBjb25maWd1cmF0aW9ucyBmb3IgVHlwZVNjcmlwdCBwcm9qZWN0cywgaW50ZWdyYXRpbmcgbXVsdGlwbGUgRVNMaW50IHBsdWdpbnNcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBkZWZpbmluZyBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRXNsaW50Q29uZmlncyhvcHRpb25zOiBEZWZpbmVFc2xpbnRDb25maWdzT3B0aW9ucyA9IHt9KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBFc2xpbnRDb25maWdDb250ZXh0KCk7XG4gIGNvbnRleHQucm9vdENvbmZpZ0ZpbGVzLnB1c2goXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQ29tbWl0bGludENvbmZpZ1RzLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkVzbGludENvbmZpZ010cyxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5WaXRlc3RDb25maWdUc1xuICApO1xuICBjb250ZXh0LnNjcmlwdEZpbGVzLnB1c2goXG4gICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TY3JpcHRzLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlUcylcbiAgKTtcbiAgY29udGV4dC5zb3VyY2VGaWxlcy5wdXNoKFxuICAgIGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3JjLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TcmMsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVRzeClcbiAgKTtcbiAgY29udGV4dC50ZXN0RmlsZXMucHVzaChcbiAgICBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlRlc3RzLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Nb2NrcywgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55UGF0aCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55VHMpLFxuICAgIGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3JjLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlUZXN0VHMpXG4gICk7XG5cbiAgaWYgKG9wdGlvbnMuZWRpdENvbnRleHQpIHtcbiAgICBvcHRpb25zLmVkaXRDb250ZXh0KGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgY3VzdG9tQ29uZmlncyA9IG9wdGlvbnMuY3VzdG9tQ29uZmlncz8uKGNvbnRleHQpID8/IFtdO1xuXG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgLi4uZ2V0R2l0SWdub3JlQ29uZmlncygpLFxuICAgIC8vIE9ic2lkaWFubWQgY29uZmlncyBydW4gZmlyc3Qgc28gb3VyIHN0cmljdGVyIHJ1bGVzIG92ZXJyaWRlIHRoZWlyIHJlbGF4ZWQgZGVmYXVsdHNcbiAgICAuLi5nZXRPYnNpZGlhbkxpbnRDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldEVzbGludENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VHNlc2xpbnRDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldFN0eWxpc3RpY0NvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0SW1wb3J0WENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0UGVyZmVjdGlvbmlzdENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VW5pY29ybkNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0RXNsaW50SW1wb3J0UmVzb2x2ZXJUeXBlc2NyaXB0Q29uZmlncygpLFxuICAgIC4uLmdldEVzbGludENvbW1lbnRzQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRPYnNpZGlhbkRldlV0aWxzUGx1Z2luQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXROb2RlQ29tcGF0Q29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXROb2RlQnVpbHRpbnNDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldEludGVncmF0aW9uVGVzdENvbmZpZ3MoKSxcbiAgICAuLi5nZXRNYW5pZmVzdENvbmZpZ3MoKSxcbiAgICAuLi5nZXRMaWNlbnNlQ29uZmlncygpLFxuICAgIC4uLmN1c3RvbUNvbmZpZ3NcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0RXNsaW50Q29tbWVudHNDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tbmFtZWQtYXMtZGVmYXVsdC1tZW1iZXIgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYHJlY29tbWVuZGVkYCBpcyB0b28gY29uZnVzaW5nLlxuICAgICAgZXh0ZW5kczogW2NvbW1lbnRzQ29uZmlncy5yZWNvbW1lbmRlZF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ0Blc2xpbnQtY29tbXVuaXR5L2VzbGludC1jb21tZW50cy9yZXF1aXJlLWRlc2NyaXB0aW9uJzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldEVzbGludENvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGV4dGVuZHM6IFtlc2xpbnQuY29uZmlncy5yZWNvbW1lbmRlZF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2FjY2Vzc29yLXBhaXJzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2FycmF5LWNhbGxiYWNrLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgICdjYW1lbGNhc2UnOiAnZXJyb3InLFxuICAgICAgICAnY2FwaXRhbGl6ZWQtY29tbWVudHMnOiBbJ2Vycm9yJywgJ2Fsd2F5cycsIHsgYmxvY2s6IHsgaWdub3JlUGF0dGVybjogJ3Y4JyB9IH1dLFxuICAgICAgICAnY29tcGxleGl0eSc6ICdlcnJvcicsXG4gICAgICAgICdjb25zaXN0ZW50LXRoaXMnOiAnZXJyb3InLFxuICAgICAgICAnY3VybHknOiAnZXJyb3InLFxuICAgICAgICAnZGVmYXVsdC1jYXNlJzogJ2Vycm9yJyxcbiAgICAgICAgJ2RlZmF1bHQtY2FzZS1sYXN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2RlZmF1bHQtcGFyYW0tbGFzdCc6ICdlcnJvcicsXG4gICAgICAgICdlcWVxZXEnOiAnZXJyb3InLFxuICAgICAgICAnZnVuYy1uYW1lLW1hdGNoaW5nJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtbmFtZXMnOiAnZXJyb3InLFxuICAgICAgICAnZnVuYy1zdHlsZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdkZWNsYXJhdGlvbicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWxsb3dBcnJvd0Z1bmN0aW9uczogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICdncm91cGVkLWFjY2Vzc29yLXBhaXJzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ2dldEJlZm9yZVNldCdcbiAgICAgICAgXSxcbiAgICAgICAgJ2d1YXJkLWZvci1pbic6ICdlcnJvcicsXG4gICAgICAgICduby1hbGVydCc6ICdlcnJvcicsXG4gICAgICAgICduby1hcnJheS1jb25zdHJ1Y3Rvcic6ICdlcnJvcicsXG4gICAgICAgICduby1iaXR3aXNlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWNhbGxlcic6ICdlcnJvcicsXG4gICAgICAgICduby1jb25zb2xlJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWxsb3c6IFtcbiAgICAgICAgICAgICAgJ3dhcm4nLFxuICAgICAgICAgICAgICAnZXJyb3InXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnbm8tY29uc3RydWN0b3ItcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWRpdi1yZWdleCc6ICdlcnJvcicsXG4gICAgICAgICduby1lbHNlLXJldHVybic6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93RWxzZUlmOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ25vLWVtcHR5LWZ1bmN0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWV4dGVuZC1uYXRpdmUnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZXh0cmEtYmluZCc6ICdlcnJvcicsXG4gICAgICAgICduby1leHRyYS1sYWJlbCc6ICdlcnJvcicsXG4gICAgICAgICduby1pbXBsaWNpdC1jb2VyY2lvbic6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICchISdcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1pbXBsaWVkLWV2YWwnOiAnZXJyb3InLFxuICAgICAgICAnbm8taW5uZXItZGVjbGFyYXRpb25zJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWl0ZXJhdG9yJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxhYmVsLXZhcic6ICdlcnJvcicsXG4gICAgICAgICduby1sYWJlbHMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tbG9uZS1ibG9ja3MnOiAnZXJyb3InLFxuICAgICAgICAnbm8tbG9uZWx5LWlmJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvb3AtZnVuYyc6ICdlcnJvcicsXG4gICAgICAgICduby1tYWdpYy1udW1iZXJzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGV0ZWN0T2JqZWN0czogdHJ1ZSxcbiAgICAgICAgICAgIGVuZm9yY2VDb25zdDogdHJ1ZSxcbiAgICAgICAgICAgIGlnbm9yZTogW1xuICAgICAgICAgICAgICAtMSxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ25vLW11bHRpLWFzc2lnbic6ICdlcnJvcicsXG4gICAgICAgICduby1tdWx0aS1zdHInOiAnZXJyb3InLFxuICAgICAgICAnbm8tbmVnYXRlZC1jb25kaXRpb24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tbmVzdGVkLXRlcm5hcnknOiAnZXJyb3InLFxuICAgICAgICAnbm8tbmV3LWZ1bmMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tbmV3LXdyYXBwZXJzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW9iamVjdC1jb25zdHJ1Y3Rvcic6ICdlcnJvcicsXG4gICAgICAgICduby1vY3RhbC1lc2NhcGUnOiAnZXJyb3InLFxuICAgICAgICAnbm8tcHJvbWlzZS1leGVjdXRvci1yZXR1cm4nOiAnZXJyb3InLFxuICAgICAgICAnbm8tcHJvdG8nOiAnZXJyb3InLFxuICAgICAgICAnbm8tcmVzdHJpY3RlZC1zeW50YXgnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAuLi5ub1Jlc3RyaWN0ZWRTeW50YXhSdWxlRW50cmllc1xuICAgICAgICBdLFxuICAgICAgICAnbm8tcmV0dXJuLWFzc2lnbic6ICdlcnJvcicsXG4gICAgICAgICduby1zY3JpcHQtdXJsJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXNlbGYtY29tcGFyZSc6ICdlcnJvcicsXG4gICAgICAgICduby1zZXF1ZW5jZXMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2hhZG93JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyc6ICdlcnJvcicsXG4gICAgICAgICduby10aHJvdy1saXRlcmFsJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tdW5uZWVkZWQtdGVybmFyeSc6ICdlcnJvcicsXG4gICAgICAgICduby11bnJlYWNoYWJsZS1sb29wJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVudXNlZC1leHByZXNzaW9ucyc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWFzc2lnbm1lbnQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdXNlbGVzcy1jYWxsJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtY29tcHV0ZWQta2V5JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtY29uY2F0JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tdXNlbGVzcy1yZW5hbWUnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdXNlbGVzcy1yZXR1cm4nOiAnZXJyb3InLFxuICAgICAgICAnbm8tdmFyJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXZvaWQnOiAnZXJyb3InLFxuICAgICAgICAnb2JqZWN0LXNob3J0aGFuZCc6ICdlcnJvcicsXG4gICAgICAgICdvcGVyYXRvci1hc3NpZ25tZW50JzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1hcnJvdy1jYWxsYmFjayc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItY29uc3QnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLWV4cG9uZW50aWF0aW9uLW9wZXJhdG9yJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1uYW1lZC1jYXB0dXJlLWdyb3VwJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1udW1lcmljLWxpdGVyYWxzJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1vYmplY3QtaGFzLW93bic6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItb2JqZWN0LXNwcmVhZCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1yZWdleC1saXRlcmFscyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItcmVzdC1wYXJhbXMnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXNwcmVhZCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItdGVtcGxhdGUnOiAnZXJyb3InLFxuICAgICAgICAncmFkaXgnOiAnZXJyb3InLFxuICAgICAgICAncmVxdWlyZS1hdG9taWMtdXBkYXRlcyc6ICdlcnJvcicsXG4gICAgICAgICdyZXF1aXJlLWF3YWl0JzogJ2Vycm9yJyxcbiAgICAgICAgJ3N5bWJvbC1kZXNjcmlwdGlvbic6ICdlcnJvcicsXG4gICAgICAgICd1bmljb2RlLWJvbSc6ICdlcnJvcicsXG4gICAgICAgICd2YXJzLW9uLXRvcCc6ICdlcnJvcicsXG4gICAgICAgICd5b2RhJzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ25vLW1hZ2ljLW51bWJlcnMnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldEVzbGludEltcG9ydFJlc29sdmVyVHlwZXNjcmlwdENvbmZpZ3MoKTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgJ2ltcG9ydC14L3Jlc29sdmVyLW5leHQnOiBbXG4gICAgICAgICAgY3JlYXRlVHlwZVNjcmlwdEltcG9ydFJlc29sdmVyKHtcbiAgICAgICAgICAgIGFsd2F5c1RyeVR5cGVzOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldEdpdElnbm9yZUNvbmZpZ3MoKTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgZ2l0aWdub3JlUGF0aCA9IGpvaW4oZ2V0Um9vdEZvbGRlcigpID8/ICcnLCAnLmdpdGlnbm9yZScpO1xuICBpZiAoIWV4aXN0c1N5bmMoZ2l0aWdub3JlUGF0aCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFtpbmNsdWRlSWdub3JlRmlsZShnaXRpZ25vcmVQYXRoKV07XG59XG5cbmZ1bmN0aW9uIGdldEltcG9ydFhDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBleHRlbmRzOiBbXG4gICAgICAgIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncy5yZWNvbW1lbmRlZCxcbiAgICAgICAgZXNsaW50UGx1Z2luSW1wb3J0WEZsYXRDb25maWdzLnR5cGVzY3JpcHQsXG4gICAgICAgIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncy5lcnJvcnMsXG4gICAgICAgIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncy53YXJuaW5nc1xuICAgICAgXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvY29uc2lzdGVudC10eXBlLXNwZWNpZmllci1zdHlsZSc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9leHRlbnNpb25zJzogWydlcnJvcicsICdpZ25vcmVQYWNrYWdlcyddLFxuICAgICAgICAnaW1wb3J0LXgvZmlyc3QnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvaW1wb3J0cy1maXJzdCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uZXdsaW5lLWFmdGVyLWltcG9ydCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1hYnNvbHV0ZS1wYXRoJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWFtZCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1hbm9ueW1vdXMtZGVmYXVsdC1leHBvcnQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tY29tbW9uanMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tY3ljbGUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZGVmYXVsdC1leHBvcnQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZGVwcmVjYXRlZCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1kdXBsaWNhdGVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWR5bmFtaWMtcmVxdWlyZSc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1lbXB0eS1uYW1lZC1ibG9ja3MnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8taW1wb3J0LW1vZHVsZS1leHBvcnRzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLW11dGFibGUtZXhwb3J0cyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1uYW1lZC1kZWZhdWx0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLW5hbWVzcGFjZSc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1ub2RlanMtbW9kdWxlcyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1yZWxhdGl2ZS1wYWNrYWdlcyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1yZXN0cmljdGVkLXBhdGhzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLXNlbGYtaW1wb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLXVuYXNzaWduZWQtaW1wb3J0JzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWxsb3c6IFtcbiAgICAgICAgICAgICAgJyoqLyouY3NzJyxcbiAgICAgICAgICAgICAgJyoqLyouc2FzcycsXG4gICAgICAgICAgICAgICcqKi8qLnNjc3MnXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnaW1wb3J0LXgvbm8tdW51c2VkLW1vZHVsZXMnOiAnb2ZmJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLXVzZWxlc3MtcGF0aC1zZWdtZW50cyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby13ZWJwYWNrLWxvYWRlci1zeW50YXgnOiAnZXJyb3InXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBmaWxlczogY29udGV4dC5zY3JpcHRGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdpbXBvcnQteC9uby1ub2RlanMtbW9kdWxlcyc6ICdvZmYnXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBmaWxlczogW1xuICAgICAgICAuLi5jb250ZXh0LnJvb3RDb25maWdGaWxlcyxcbiAgICAgICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TcmMsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1haW5UcylcbiAgICAgIF0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvbm8tZGVmYXVsdC1leHBvcnQnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldEludGVncmF0aW9uVGVzdENvbmZpZ3MoKTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgLypcbiAgICAgICAqIEFuIGludGVncmF0aW9uIHRlc3QgdGhhdCBkcml2ZXMgdGhlIFVJIHdpdGggYGRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoLi4uKSlgIHByb2R1Y2VzIGFuXG4gICAgICAgKiBVTlRSVVNURUQgZXZlbnQsIGFuZCBPYnNpZGlhbiBhbmQgQ29kZU1pcnJvciBnYXRlIG9uIGBpc1RydXN0ZWRgIFx1MjAxNCBzbyB0aGUgdGVzdCBjYW4gZXhlcmNpc2VcbiAgICAgICAqIG5vdGhpbmcgd2hpbGUgc3RpbGwgcGFzc2luZy4gT25seSBpbnRlZ3JhdGlvbiB0ZXN0cyBhcmUgY292ZXJlZDogYSB1bml0IHRlc3QgaGFzIG5vIHJlYWwgaW5wdXRcbiAgICAgICAqIHBpcGVsaW5lIHRvIHJlYWNoLCBzbyBkaXNwYXRjaGluZyBpcyB0aGUgb25seSB0aGluZyBpdCBjYW4gZG8uXG4gICAgICAgKlxuICAgICAgICogQW5kcm9pZCBpcyBleGVtcHQgQlkgRklMRU5BTUUgcmF0aGVyIHRoYW4gYnkgYSBkaXNhYmxlIGNvbW1lbnQsIGJlY2F1c2UgdGhlIGV4ZW1wdGlvbiBpcyBhXG4gICAgICAgKiBwcm9wZXJ0eSBvZiB0aGUgcGxhdGZvcm0gcmF0aGVyIHRoYW4gb2YgYW55IG9uZSBjYWxsIHNpdGU6IHRoZSB0cnVzdGVkIGhlbHBlcnMgYXJlIGJ1aWx0IG9uXG4gICAgICAgKiBgd2luZG93LmVsZWN0cm9uYCwgd2hpY2ggZG9lcyBub3QgZXhpc3QgdGhlcmUsIHNvIGV2ZXJ5IGRpc3BhdGNoIGluIHN1Y2ggYSBmaWxlIGlzIGxlZ2l0aW1hdGUgYW5kXG4gICAgICAgKiBhbHdheXMgd2lsbCBiZS4gQSBgKi5jcm9zcy1wbGF0Zm9ybS4qYCBmaWxlIGlzIGRlbGliZXJhdGVseSBOT1QgZXhlbXB0IFx1MjAxNCBpdCBydW5zIG9uIGRlc2t0b3AgdG9vLFxuICAgICAgICogd2hlcmUgdGhlIHRydXN0ZWQgcGF0aCBpcyBhdmFpbGFibGUsIHNvIGl0IHNob3VsZCBicmFuY2ggb24gYFBsYXRmb3JtLmlzRGVza3RvcEFwcGAgYW5kIGRpc2FibGVcbiAgICAgICAqIHRoZSBydWxlIG9uIHRoZSBtb2JpbGUgYXJtIGFsb25lLlxuICAgICAgICovXG4gICAgICBmaWxlczogW2pvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3JjLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlJbnRlZ3JhdGlvblRlc3RUcyldLFxuICAgICAgaWdub3JlczogW1xuICAgICAgICBqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlNyYywgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55UGF0aCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55QW5kcm9pZEludGVncmF0aW9uVGVzdFRzKSxcbiAgICAgICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TcmMsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueVBhdGgsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkFueUFuZHJvaWRDYXB0dXJlSW50ZWdyYXRpb25UZXN0VHMpXG4gICAgICBdLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9uby11bnRydXN0ZWQtaW5wdXQtZXZlbnRzJzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbi8qXG4gKiBUaGUgQ29tbXVuaXR5IGRpcmVjdG9yeSByZXF1aXJlcyBhIHJvb3QgYExJQ0VOU0VgLCBhbmQgYG9ic2lkaWFubWQvdmFsaWRhdGUtbGljZW5zZWAgaXMgdGhlIG9ubHkgY2hlY2tcbiAqIG9uIHdoYXQgaXQgc2F5czogdGhlIGNvcHlyaWdodCBob2xkZXIgbXVzdCBub3Qgc3RpbGwgYmUgdGhlIHNhbXBsZSBwbHVnaW4ncywgYW5kIHRoZSB5ZWFyIG11c3QgYmVcbiAqIGN1cnJlbnQuIEJvdGggbmVlZCBgUGxhaW5UZXh0UGFyc2VyYCwgd2hpY2ggdGhlIHBsdWdpbiBkb2VzIG5vdCBleHBvcnQsIHNvIGl0IGlzIHJlYWNoZWQgdGhyb3VnaCBpdHNcbiAqIGJ1aWxkIG91dHB1dCAtLSB0aGUgcGFja2FnZSBkZWNsYXJlcyBubyBgZXhwb3J0c2AgbWFwIGFuZCBzaGlwcyBhIGRlY2xhcmF0aW9uIGJlc2lkZSB0aGUgbW9kdWxlLCBzbyB0aGVcbiAqIGRlZXAgcGF0aCByZXNvbHZlcywgYnV0IGl0IGlzIHRoZSBvbmUgaW1wb3J0IGhlcmUgdGhhdCBhIHBhdGNoIHJlbGVhc2UgdXBzdHJlYW0gY291bGQgYnJlYWsuXG4gKlxuICogVGhlIHJ1bGUgY29tcGFyZXMgdGhlIHllYXIgYWdhaW5zdCBgbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpYCBhdCBsaW50IHRpbWUsIHNvIGEgcmVwbyBnb2VzIHJlZCBhdCB0aGVcbiAqIHR1cm4gb2YgdGhlIHllYXIgdW50aWwgaXRzIExJQ0VOU0UgaXMgYnVtcGVkLiBgLmdpdGh1Yi93b3JrZmxvd3MvdXBkYXRlLWxpY2Vuc2UteWVhci55bWxgIGRvZXMgdGhhdCBvblxuICogMSBKYW51YXJ5OyBhIHJlcG8gYWRvcHRpbmcgdGhpcyBjb25maWcgbmVlZHMgdGhlIHNhbWUgd29ya2Zsb3csIG9yIHRoZSB5ZWFyIGNoZWNrIHdpbGwgZmFpbCBpdHMgQ0kuXG4gKi9cbmZ1bmN0aW9uIGdldExpY2Vuc2VDb25maWdzKCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGZpbGVzOiBbT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTGljZW5zZV0sXG4gICAgICBsYW5ndWFnZU9wdGlvbnM6IHtcbiAgICAgICAgcGFyc2VyOiBQbGFpblRleHRQYXJzZXJcbiAgICAgIH0sXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIG9ic2lkaWFubWRcbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnb2JzaWRpYW5tZC92YWxpZGF0ZS1saWNlbnNlJzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbi8qXG4gKiBUaGUgcm9vdCBgbWFuaWZlc3QuanNvbmAgaXMgd2hhdCB0aGUgQ29tbXVuaXR5IGRpcmVjdG9yeSdzIGF1dG9tYXRlZCByZXZpZXcgYWN0dWFsbHkgcmVhZHMsIGFuZCB1bnRpbFxuICogdGhpcyBjb25maWcgZXhpc3RlZCBubyBsaW50ZXIgcmVhZCBpdCBhdCBhbGw6IGBvYnNpZGlhbm1kL3ZhbGlkYXRlLW1hbmlmZXN0YCByZWdpc3RlcnMgYSBgUHJvZ3JhbWBcbiAqIHZpc2l0b3IgYW5kIGV4cGVjdHMgYW4gRVNUcmVlIGBPYmplY3RFeHByZXNzaW9uYCwgd2hpbGUgZXZlcnkgSlNPTiBwYXJzZXIgdGhhdCBzaGlwcyBwcm9kdWNlcyBzb21ldGhpbmdcbiAqIGVsc2UgLS0gYEBlc2xpbnQvanNvbmAgcHJvZHVjZXMgTW9tb2EgKGBEb2N1bWVudGApLCBganNvbmMtZXNsaW50LXBhcnNlcmAgcHJvZHVjZXNcbiAqIGBKU09OT2JqZWN0RXhwcmVzc2lvbmAgLS0gc28gdGhlIHJ1bGUgc2lsZW50bHkgbWF0Y2hlcyBub3RoaW5nIG5vIG1hdHRlciB3aGljaCBmaWxlcyBpdCBpcyBzY29wZWQgdG8uXG4gKiBUaGUgaW4taG91c2UgcnVsZXMgYmVsb3cgdmlzaXQgdGhlIE1vbW9hIEFTVCBpbnN0ZWFkLlxuICpcbiAqIGBtYW5pZmVzdC5qc29uYCBpcyBzdHJpY3QgSlNPTiwgc28gYW4gYGVzbGludC1kaXNhYmxlYCBjb21tZW50IGluIGl0IGlzIGEgcGFyc2UgZXJyb3IgQU5EIHdvdWxkIHN0b3BcbiAqIE9ic2lkaWFuIGxvYWRpbmcgdGhlIHBsdWdpbi4gVGhhdCBtYWtlcyB0aGUgY29uZmlnIHRoZSBvbmx5IHBsYWNlIGEgY2hlY2sgY2FuIGJlIHdhaXZlZCwgd2hpY2ggaXMgd2h5XG4gKiB0aGVzZSBhcmUgZm91ciBydWxlcyByYXRoZXIgdGhhbiBvbmU6IGEgcmVwbyB3aXRoIGEgZ3JhbmRmYXRoZXJlZCBgaWRgIGNhbiB0dXJuIG9mZiBgbWFuaWZlc3QtaWRgIGFsb25lXG4gKiBhbmQga2VlcCB0aGUgcmVzdC5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFuaWZlc3RDb25maWdzKCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGZpbGVzOiBbT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFuaWZlc3RKc29uXSxcbiAgICAgIGxhbmd1YWdlOiAnanNvbi9qc29uJyxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgJ2pzb24nOiBqc29uUGx1Z2luLFxuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzJzogb2JzaWRpYW5EZXZVdGlsc1BsdWdpblxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvbWFuaWZlc3QtZGVzY3JpcHRpb24nOiAnZXJyb3InLFxuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL21hbmlmZXN0LWlkJzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9tYW5pZmVzdC1uYW1lJzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9tYW5pZmVzdC1zY2hlbWEnOiAnZXJyb3InXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuLypcbiAqIEV2ZXJ5IGZpbGUgc2V0IHRoYXQgaXMgZXhlbXB0IGZyb20gdGhlIE5vZGUtYnVpbHRpbnMgYmFucywgaW4gb25lIHBsYWNlLlxuICpcbiAqIFR3byBydWxlcyBiYW4gTm9kZSBidWlsdGlucywgYW5kIHRoZXkgYXJlIE5PVCBpbnRlcmNoYW5nZWFibGUuIGBpbXBvcnQteC9uby1ub2RlanMtbW9kdWxlc2AgaXMgb3VycywgaXQgaXNcbiAqIGFuIGVycm9yLCBhbmQgaXRzIHdhaXZlcnMgYXJlIHRvbGVyYXRlZCBieSB0aGUgY29tbXVuaXR5LWRpcmVjdG9yeSByZXZpZXcgcnVubmVyLiBgb2JzaWRpYW5tZC9uby1ub2RlanMtbW9kdWxlc2BcbiAqIGFycml2ZXMgdmlhIGBvYnNpZGlhbm1kLmNvbmZpZ3MucmVjb21tZW5kZWRgIChzZWUgYGdldE9ic2lkaWFuTGludENvbmZpZ3NgKSBhbmQgaXMgc3RyaWN0bHkgd2Vha2VyIG9uIHN0YXRpY1xuICogaW1wb3J0cyBcdTIwMTQgaXRzIG93biBzb3VyY2Ugc2F5cyBcIlN0YXRpYyBpbXBvcnQgZGVjbGFyYXRpb25zIGNhbiBuZXZlciBiZSBndWFyZGVkIGF0IHJ1bnRpbWVcIiwgc28gaXQgcmVwb3J0cyBldmVyeVxuICogYEltcG9ydERlY2xhcmF0aW9uYCBvZiBhIGJ1aWx0aW4gdW5jb25kaXRpb25hbGx5IGFuZCBvbmx5IGBpbXBvcnQoKWAgLyBgcmVxdWlyZSgpYCBnZXQgZ3VhcmQtYXdhcmVuZXNzLiBJdCBpc1xuICogYWxzbyBvbmUgdGhlIGNvbnN1bWVyIENBTk5PVCBXQUlWRTogdGhlIGRpcmVjdG9yeSBydW5uZXIgc2V0c1xuICogYGVzbGludC1jb21tZW50cy9uby1yZXN0cmljdGVkLWRpc2FibGU6IFsnZXJyb3InLCAnb2JzaWRpYW5tZC8qJywgLi4uXWAsIHdoaXRlbGlzdGluZyBvbmx5XG4gKiBgb2JzaWRpYW5tZC91aS9zZW50ZW5jZS1jYXNlYCwgc28gYW4gaW5saW5lIGRpc2FibGUgb2YgaXQgdHJhZGVzIGEgd2FybmluZyBmb3IgYW4gZXJyb3IgaW4gYSByZXZpZXcuIFRoYXQgaXMgd2h5XG4gKiBldmVyeSBleGVtcHRpb24gYmVsb3cgaGFzIHRvIGxpdmUgaGVyZSBpbiB0aGUgc2hhcmVkIGNvbmZpZyByYXRoZXIgdGhhbiBhcyBhIGNvbW1lbnQgYXQgdGhlIGNhbGwgc2l0ZS5cbiAqXG4gKiBPbmUgZnVydGhlciBleGVtcHRpb24gZGVsaWJlcmF0ZWx5IGxpdmVzIGVsc2V3aGVyZTogYGdldEltcG9ydFhDb25maWdzYCB0dXJucyBvZmYgb25seSBgaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXNgXG4gKiBmb3IgYGNvbnRleHQuc2NyaXB0RmlsZXNgLiBJdCBuZWVkcyBubyBgb2JzaWRpYW5tZGAgdHdpbiwgYmVjYXVzZSBgZ2V0T2JzaWRpYW5MaW50Q29uZmlnc2Agc2NvcGVzIHRoZSBvYnNpZGlhbm1kXG4gKiBydWxlcyB0byBgY29udGV4dC5zb3VyY2VGaWxlc2AsIHNvIHRoZXkgbmV2ZXIgcmVhY2ggc2NyaXB0cyBpbiB0aGUgZmlyc3QgcGxhY2UuXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVCdWlsdGluc0NvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIC8vIEludGVncmF0aW9uIHRlc3RzIHJ1biBpbiBhIE5vZGUgZW52aXJvbm1lbnQgYW5kIGxlZ2l0aW1hdGVseSByZWFkIGZpbGVzIC8gcGF0aHMsIHNvIHRoZSBOb2RlLWJ1aWx0aW5zIGJhbnMgZG8gbm90IGFwcGx5IHRvIHRoZW0uXG4gICAgICBmaWxlczogW2pvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3JjLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlQYXRoLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5BbnlJbnRlZ3JhdGlvblRlc3RUcyldLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZicsXG4gICAgICAgICdvYnNpZGlhbm1kL25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIC8qXG4gICAgICAgKiBBIGBkZXNrdG9wLWAgcHJlZml4ZWQgbW9kdWxlIGlzIGRlc2t0b3Atb25seSBieSBjb252ZW50aW9uIChzZWUgTDUgaW4gYEFHRU5UUy5tZGApOiBpdCBpcyByZWFjaGVkIG9ubHlcbiAgICAgICAqIHRocm91Z2ggYSBgUGxhdGZvcm0uaXNEZXNrdG9wQXBwYC1nYXRlZCBkeW5hbWljIGBpbXBvcnQoKWAgaW4gaXRzIGNhbGxlciwgc28gaXRzIHN0YXRpYyBOb2RlIGltcG9ydHMgbmV2ZXJcbiAgICAgICAqIGxvYWQgb24gbW9iaWxlLiBOZWl0aGVyIHJ1bGUgY2FuIHNlZSB0aGF0IGdhdGUsIGJlY2F1c2UgaXQgc2l0cyBvbmUgZmlsZSB1cCBcdTIwMTQgdGhlIGNvcnJlY3RseS13cml0dGVuIHBhdHRlcm5cbiAgICAgICAqIHJlcG9ydHMgYW55d2F5LCBhbmQgbm8gYXV0aG9yLXNpZGUgcmV3cml0ZSBzaWxlbmNlcyBpdC5cbiAgICAgICAqXG4gICAgICAgKiBFeGVtcHRpbmcgQlkgRklMRU5BTUUgcmF0aGVyIHRoYW4gYnkgYSBkaXNhYmxlIGNvbW1lbnQgbWlycm9ycyB0aGUgYCouYW5kcm9pZC5pbnRlZ3JhdGlvbi50ZXN0LnRzYCBleGVtcHRpb25cbiAgICAgICAqIGluIGBnZXRJbnRlZ3JhdGlvblRlc3RDb25maWdzYCwgYW5kIGNhcnJpZXMgdGhlIHNhbWUgdHJhZGUtb2ZmIGtub3dpbmdseTogdGhlIGV4ZW1wdGlvbiBrZXlzIG9mZiB3aGF0XG4gICAgICAgKiB0aGUgZmlsZSBpcyBOQU1FRCByYXRoZXIgdGhhbiB3aGF0IGl0IGRvZXMsIHNvIHRoZSBwcmVmaXggaXMgbG9hZC1iZWFyaW5nLiBBIGRlc2t0b3Atb25seSBtb2R1bGUgdGhhdCBza2lwc1xuICAgICAgICogdGhlIHByZWZpeCBrZWVwcyByZXBvcnRpbmcsIGFuZCBhIGNyb3NzLXBsYXRmb3JtIG1vZHVsZSB0aGF0IHdyb25nbHkgdGFrZXMgaXQgZ2V0cyBhbiBleGVtcHRpb24gaXQgc2hvdWxkXG4gICAgICAgKiBub3QgaGF2ZS5cbiAgICAgICAqL1xuICAgICAgZmlsZXM6IFtqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlNyYywgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55UGF0aCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55RGVza3RvcFRzKV0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnb2ZmJyxcbiAgICAgICAgJ29ic2lkaWFubWQvbm8tbm9kZWpzLW1vZHVsZXMnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLypcbiAgICAgICAqIEEgdW5pdCB0ZXN0IHJ1bnMgdW5kZXIgdml0ZXN0IGluIE5vZGUgYW5kIGlzIG5ldmVyIGJ1bmRsZWQgaW50byBgbWFpbi5qc2AsIHNvIHRoZSBOb2RlLWJ1aWx0aW5zIGJhbnMgZG8gbm90XG4gICAgICAgKiBhcHBseSB0byBpdCBlaXRoZXIgXHUyMDE0IHRoZSBpZGVudGljYWwgYXJndW1lbnQgdGhlIGludGVncmF0aW9uLXRlc3QgYmxvY2sgYWJvdmUgYWxyZWFkeSBhY2NlcHRzLiBUaGlzIGFsc29cbiAgICAgICAqIGNvdmVycyB0aGUgU1VULWdyb3VwZWQgYCouZGVza3RvcC50ZXN0LnRzYCBzaGFwZSwgd2hpY2ggbmFtZXMgdGhlIHBsYXRmb3JtIGFzIGEgZG90IHNlZ21lbnQgYWZ0ZXIgdGhlXG4gICAgICAgKiBzdWJqZWN0IHVuZGVyIHRlc3QgcmF0aGVyIHRoYW4gYXMgYSBgZGVza3RvcC1gIHByZWZpeC5cbiAgICAgICAqL1xuICAgICAgZmlsZXM6IGNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZicsXG4gICAgICAgICdvYnNpZGlhbm1kL25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXROb2RlQ29tcGF0Q29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgLypcbiAgICogVGhlIG1pbmltdW0gT2JzaWRpYW4gaW5zdGFsbGVyIHRoYXQgc3RpbGwgcmVjZWl2ZXMgYXBwIHVwZGF0ZXMgYW5kIHdvcmtzIGlzIDEuMS45LCB3aGljaCBzaGlwcyBFbGVjdHJvblxuICAgKiAyMS4zLjMgYW5kIHJ1bnMgTm9kZSAxNi4xNi4wLiBTaGlwcGVkIHNvdXJjZSBtdXN0IHRoZXJlZm9yZSBhdm9pZCBOb2RlL0VTIHJ1bnRpbWUgYnVpbHRpbnMgdW5hdmFpbGFibGUgaW5cbiAgICogdGhhdCB2ZXJzaW9uLiBUZXN0cyBhbmQgc2NyaXB0cyBhcmUgZGV2LW9ubHkgYW5kIGV4ZW1wdC5cbiAgICpcbiAgICogU291cmNlIG9mIHRydXRoOiBgb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZy9tZXRhZGF0YS5qc29uYCBcdTIwMTQgdGhlIG5ld2VzdCByZWxlYXNlIGNhcnJ5aW5nIHRoZSBmaWVsZFxuICAgKiAoMS4xMy4xKSBkZWNsYXJlcyBgbWluUnVubmFibGVJbnN0YWxsZXJWZXJzaW9uOiBcIjEuMS45XCJgLCBhbmQgdGhhdCBpbnN0YWxsZXIncyBgcnVudGltZVZlcnNpb25zYCBnaXZlcyB0aGVcbiAgICogRWxlY3Ryb24gYW5kIE5vZGUgdmVyc2lvbnMgYWJvdmUuIFJlLWRlcml2ZSBmcm9tIHRoZXJlIHJhdGhlciB0aGFuIGVkaXRpbmcgdGhpcyBudW1iZXIgYnkgaGFuZC5cbiAgICovXG4gIGNvbnN0IG1pbmltdW1Ob2RlVmVyc2lvbiA9ICc+PTE2LjE2LjAnO1xuXG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnNvdXJjZUZpbGVzLFxuICAgICAgaWdub3JlczogW1xuICAgICAgICAuLi5jb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgICAgLy8gRGV2LW9ubHkgdG9vbGluZyAoYnVpbGQsIGxpbnQsIHZlcnNpb24pIHVuZGVyIGBzcmMvc2NyaXB0LXV0aWxzLyoqYCBydW5zIHZpYSBgaml0aWAgaW4gdGhlIGNvbnN1bWVyJ3MgTm9kZSBlbnZpcm9ubWVudCB3aGVuIGJ1aWxkaW5nIGEgcGx1Z2luIGFuZCBuZXZlciBzaGlwcyBpbnRvIHRoZSBPYnNpZGlhbiBydW50aW1lLCBzbyB0aGUgTm9kZS0xNiBmbG9vciBkb2VzIG5vdCBhcHBseSB0byBpdC5cbiAgICAgICAgam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TY3JpcHRVdGlscywgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55UGF0aCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQW55VHMpXG4gICAgICBdLFxuICAgICAgcGx1Z2luczoge1xuICAgICAgICBuOiBub2RlUGx1Z2luXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ24vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvZXMtYnVpbHRpbnMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2ZXJzaW9uOiBtaW5pbXVtTm9kZVZlcnNpb25cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBgQmxvYmAgYW5kIGBGaWxlYCBhcmUgRE9NIHdlYiBnbG9iYWxzIGFsd2F5cyBwcmVzZW50IGluIHRoZSBPYnNpZGlhbi9FbGVjdHJvbiByZW5kZXJlciAoZXZlcnkgc3VwcG9ydGVkIENocm9taXVtKSwgYnV0IHRoZSBydWxlIGFsc28ga25vd3MgdGhlbSBhcyBOb2RlJ3MgZXhwZXJpbWVudGFsIGJ1aWx0aW5zIGFuZCBjYW5ub3QgdGVsbCB3aGljaCBpcyBtZWFudC4gSWdub3JlIHRoZW0gZ2xvYmFsbHk7IGdlbnVpbmVseSBuZXdlciBBUElzIChlLmcuIGBBYm9ydFNpZ25hbC5hbnlgKSBzdGF5IGZsYWdnZWQuXG4gICAgICAgICAgICBpZ25vcmVzOiBbXG4gICAgICAgICAgICAgICdCbG9iJyxcbiAgICAgICAgICAgICAgJ0ZpbGUnXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgdmVyc2lvbjogbWluaW11bU5vZGVWZXJzaW9uXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0T2JzaWRpYW5EZXZVdGlsc1BsdWdpbkNvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMnOiBvYnNpZGlhbkRldlV0aWxzUGx1Z2luXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9uby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9uby11bnVzZWQtcGFyYW1zLW1lbWJlcnMnOiAnZXJyb3InLFxuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL25vLXVzZWQtdW5kZXJzY29yZS12YXJpYWJsZXMnOiAnZXJyb3InLFxuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2gnOiAnZXJyb3InLFxuICAgICAgICAnb2JzaWRpYW4tZGV2LXV0aWxzL3ByZWZlci1ub29wLWFzeW5jJzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9yZWFkb25seS1wYXJhbXMtb3B0aW9ucy1yZXN1bHQtbWVtYmVycyc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvcmVxdWlyZS1jb21wb25lbnQtc3VmZml4JzogJ2Vycm9yJyxcbiAgICAgICAgJ29ic2lkaWFuLWRldi11dGlscy9yZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZSc6ICdlcnJvcicsXG4gICAgICAgICdvYnNpZGlhbi1kZXYtdXRpbHMvcmVxdWlyZS1zdXBlci1jYWxsJzogJ29mZidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRPYnNpZGlhbkxpbnRDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICBjb25zdCBvYnNpZGlhblJlY29tbWVuZGVkQ29uZmlncyA9IG9ic2lkaWFubWQuY29uZmlncy5yZWNvbW1lbmRlZDtcblxuICBjb25zdCBzY29wZWRPYnNpZGlhblJlY29tbWVuZGVkQ29uZmlncyA9IG9ic2lkaWFuUmVjb21tZW5kZWRDb25maWdzLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgaWYgKGNvbmZpZy5maWxlcz8uaW5jbHVkZXMoJ3BhY2thZ2UuanNvbicpKSB7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBmaWxlczogY29udGV4dC5zb3VyY2VGaWxlc1xuICAgIH07XG4gIH0pO1xuXG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGV4dGVuZHM6IFtzY29wZWRPYnNpZGlhblJlY29tbWVuZGVkQ29uZmlnc10sXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIG9ic2lkaWFubWRcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRQZXJmZWN0aW9uaXN0Q29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbe1xuICAgIGV4dGVuZHM6IFtwZXJmZWN0aW9uaXN0Q29uZmlnc1sncmVjb21tZW5kZWQtYWxwaGFiZXRpY2FsJ11dLFxuICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKClcbiAgfV0pO1xufVxuXG5mdW5jdGlvbiBnZXRTdHlsaXN0aWNDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBleHRlbmRzOiBbXG4gICAgICAgIHN0eWxpc3RpYy5jb25maWdzLnJlY29tbWVuZGVkLFxuICAgICAgICBzdHlsaXN0aWMuY29uZmlncy5jdXN0b21pemUoe1xuICAgICAgICAgIGFycm93UGFyZW5zOiB0cnVlLFxuICAgICAgICAgIGJyYWNlU3R5bGU6ICcxdGJzJyxcbiAgICAgICAgICBjb21tYURhbmdsZTogJ25ldmVyJyxcbiAgICAgICAgICBzZW1pOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICBdLFxuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdAc3R5bGlzdGljL2dlbmVyYXRvci1zdGFyLXNwYWNpbmcnOiAnb2ZmJyxcbiAgICAgICAgJ0BzdHlsaXN0aWMvaW5kZW50JzogJ29mZicsXG4gICAgICAgICdAc3R5bGlzdGljL2luZGVudC1iaW5hcnktb3BzJzogJ29mZicsXG4gICAgICAgICdAc3R5bGlzdGljL2pzeC1vbmUtZXhwcmVzc2lvbi1wZXItbGluZSc6ICdvZmYnLFxuICAgICAgICAnQHN0eWxpc3RpYy9uby1leHRyYS1zZW1pJzogJ2Vycm9yJyxcbiAgICAgICAgJ0BzdHlsaXN0aWMvb2JqZWN0LWN1cmx5LW5ld2xpbmUnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBFeHBvcnREZWNsYXJhdGlvbjoge1xuICAgICAgICAgICAgICBtaW5Qcm9wZXJ0aWVzOiAyLFxuICAgICAgICAgICAgICBtdWx0aWxpbmU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBJbXBvcnREZWNsYXJhdGlvbjoge1xuICAgICAgICAgICAgICBtaW5Qcm9wZXJ0aWVzOiAyLFxuICAgICAgICAgICAgICBtdWx0aWxpbmU6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICdAc3R5bGlzdGljL29wZXJhdG9yLWxpbmVicmVhayc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdiZWZvcmUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICAgICAgICAnPSc6ICdhZnRlcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICdAc3R5bGlzdGljL3F1b3Rlcyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdzaW5nbGUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93VGVtcGxhdGVMaXRlcmFsczogJ25ldmVyJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldFRzZXNsaW50Q29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tbmFtZWQtYXMtZGVmYXVsdC1tZW1iZXIgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYF9kZWZhdWx0YCBpcyB0b28gY29uZnVzaW5nLlxuICAgICAgICAuLi50c2VzbGludC5jb25maWdzLnN0cmljdFR5cGVDaGVja2VkLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tbmFtZWQtYXMtZGVmYXVsdC1tZW1iZXIgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYF9kZWZhdWx0YCBpcyB0b28gY29uZnVzaW5nLlxuICAgICAgICAuLi50c2VzbGludC5jb25maWdzLnN0eWxpc3RpY1R5cGVDaGVja2VkXG4gICAgICBdLFxuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIGxhbmd1YWdlT3B0aW9uczoge1xuICAgICAgICBwYXJzZXJPcHRpb25zOiB7XG4gICAgICAgICAgZWNtYUZlYXR1cmVzOiB7XG4gICAgICAgICAgICBqc3g6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByb2plY3RTZXJ2aWNlOiB0cnVlLFxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGB0c2NvbmZpZ1Jvb3REaXJgIGlzIGEgYHR5cGVzY3JpcHQtZXNsaW50YCBwYXJzZXIgb3B0aW9uLlxuICAgICAgICAgIHRzY29uZmlnUm9vdERpcjogZ2V0Um9vdEZvbGRlcigpID8/ICcnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LWZ1bmN0aW9uLXJldHVybi10eXBlJzogJ2Vycm9yJyxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tZW1iZXItYWNjZXNzaWJpbGl0eSc6ICdlcnJvcicsXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbWV0aG9kLXNpZ25hdHVyZS1zdHlsZSc6IFsnZXJyb3InLCAnbWV0aG9kJ10sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXMnOiBbJ2Vycm9yJywge1xuICAgICAgICAgIGNoZWNrVGhlbmFibGVzOiB0cnVlXG4gICAgICAgIH1dLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlJzogWydlcnJvcicsIHtcbiAgICAgICAgICBhbGxvd0FzVGhpc1BhcmFtZXRlcjogdHJ1ZVxuICAgICAgICB9XSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzJzogWydlcnJvcicsIHtcbiAgICAgICAgICBhbGxvd2VkTmFtZXM6IFtcbiAgICAgICAgICAgICd0aGF0J1xuICAgICAgICAgIF1cbiAgICAgICAgfV0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgYXJnc2AgaXMgYW4gRVNMaW50IHJ1bGUgb3B0aW9uIG5hbWUuXG4gICAgICAgICAgICBhcmdzOiAnYWxsJyxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGBhcmdzSWdub3JlUGF0dGVybmAgaXMgYSBgdHlwZXNjcmlwdC1lc2xpbnRgIHJ1bGUgb3B0aW9uIG5hbWUuXG4gICAgICAgICAgICBhcmdzSWdub3JlUGF0dGVybjogJ15fJyxcbiAgICAgICAgICAgIGNhdWdodEVycm9yczogJ2FsbCcsXG4gICAgICAgICAgICBjYXVnaHRFcnJvcnNJZ25vcmVQYXR0ZXJuOiAnXl8nLFxuICAgICAgICAgICAgZGVzdHJ1Y3R1cmVkQXJyYXlJZ25vcmVQYXR0ZXJuOiAnXl8nLFxuICAgICAgICAgICAgaWdub3JlUmVzdFNpYmxpbmdzOiB0cnVlLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHZhcnNJZ25vcmVQYXR0ZXJuYCBpcyBhIGB0eXBlc2NyaXB0LWVzbGludGAgcnVsZSBvcHRpb24gbmFtZS5cbiAgICAgICAgICAgIHZhcnNJZ25vcmVQYXR0ZXJuOiAnXl8nXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1yZWFkb25seSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvZG90LW5vdGF0aW9uJzogWydlcnJvcicsIHtcbiAgICAgICAgICBhbGxvd1ByaXZhdGVDbGFzc1Byb3BlcnR5QWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGFsbG93UHJvdGVjdGVkQ2xhc3NQcm9wZXJ0eUFjY2VzczogdHJ1ZVxuICAgICAgICB9XSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCc6ICdvZmYnXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHZlcnNpb246ICdkZXRlY3QnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRVbmljb3JuQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW3VuaWNvcm4uY29uZmlncy5yZWNvbW1lbmRlZF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlc2UgZW50cmllcyBhcmUgbm90IGFiYnJldmlhdGlvbnMgdG8gYmUgZXhwYW5kZWQgXHUyMDE0IHRoZXkgYXJlIGVzdGFibGlzaGVkIHZvY2FidWxhcnkgaGVyZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQnJhbmQ6IGBkZXZgLCBgbGliYCwgYHV0aWxgL2B1dGlsc2Agc3BlbGwgdGhlIHByb2R1Y3QncyBvd24gbmFtZS4gTGVmdCBvbiwgdGhlIHJ1bGUgcmV3cml0ZXNcbiAgICAgICAgICogYE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHNgIHRvIGBPYnNpZGlhbkRldmVsb3BtZW50VXRpbGl0aWVzUmVwb1BhdGhzYCBhbmQgYGdldExpYkRlYnVnZ2VyYCB0b1xuICAgICAgICAgKiBgZ2V0TGlicmFyeURlYnVnZ2VyYCwgcmVuYW1pbmcgZXhwb3J0ZWQgQVBJIGFmdGVyIHRoZSBwYWNrYWdlIGl0IGJlbG9uZ3MgdG8uXG4gICAgICAgICAqXG4gICAgICAgICAqIENvbnZlbnRpb246IGBwYXJhbXNgIGlzIHRoZSBwYXJhbWV0ZXItYmFnIGNvbnZlbnRpb24sIGVuZm9yY2VkIGJ5XG4gICAgICAgICAqIGBvYnNpZGlhbi1kZXYtdXRpbHMvcGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaGAsIHdoaWNoIHJlcXVpcmVzIGJhZyB0eXBlcyB0byBiZSBuYW1lZFxuICAgICAgICAgKiBgPE93bmVyPlBhcmFtc2AgLyBgPE93bmVyPk9wdGlvbnNgLiBFeHBhbmRpbmcgaXQgdG8gYFBhcmFtZXRlcnNgIHdvdWxkIHB1dCB0aGUgdHdvIHJ1bGVzIGluIGRpcmVjdFxuICAgICAgICAgKiBjb250cmFkaWN0aW9uIGFuZCBicmVhayAzMDArIGV4cG9ydGVkIHR5cGUgbmFtZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFJlc2VydmVkIHdvcmRzOiBhIGJhcmUgYGFyZ3NgLCBgZm5gLCBgc3RyYCwgYG1vZGAgb3IgYGV2dGAgZXhwYW5kcyB0byBhbiBpZGVudGlmaWVyIHRoYXQgaXMgYWxyZWFkeVxuICAgICAgICAgKiB0YWtlbiwgc28gdGhlIHJ1bGUgc3VnZ2VzdHMgYCRhcmd1bWVudHNgLCBgJGZ1bmN0aW9uYCwgYW5kIHNvIG9uLiBTcGVsbCB0aG9zZSBgJGFyZ3VtZW50c2AgL1xuICAgICAgICAgKiBgJGZ1bmN0aW9uYCBpbnN0ZWFkIFx1MjAxNCBhIGAkYCBwcmVmaXggcmVhZHMgYmV0dGVyIHRoYW4gYSB0cmFpbGluZyB1bmRlcnNjb3JlLiBUaGlzIGlzIGRlbGliZXJhdGVseSBOT1RcbiAgICAgICAgICogY29uZmlndXJlZCBhcyBhIGN1c3RvbSByZXBsYWNlbWVudDogdW5pY29ybiBzdWJzdGl0dXRlcyBhdCB0aGUgd29yZCBsZXZlbCBpbnNpZGUgY29tcG91bmQgbmFtZXMsIHNvXG4gICAgICAgICAqIHJlZGlyZWN0aW5nIHRoZSB3aG9sZSBlbnRyeSB0dXJucyBgYXN5bmNGbmAgaW50byBgYXN5bmMkZnVuY3Rpb25gLiBDb21wb3VuZHMgd2FudCB0aGUgcGxhaW4gZXhwYW5zaW9uXG4gICAgICAgICAqIChgYXN5bmNGdW5jdGlvbmApOyBvbmx5IHRoZSBiYXJlLCBnZW51aW5lbHktY29sbGlkaW5nIGlkZW50aWZpZXJzIHRha2UgdGhlIGAkYCBmb3JtLlxuICAgICAgICAgKlxuICAgICAgICAgKiBEb21haW4gd29yZHM6IGBkb2NgL2Bkb2NzYCwgYGVudmAsIGBkaXN0YCBhbmQgYHNyY2AgYXJlIHRoZSBjbGVhcmVyIHNwZWxsaW5nIGluIHRoaXMgY29kZWJhc2UuXG4gICAgICAgICAqIEV4cGFuZGluZyBgZG9jYCBhbHNvIHBpY2tzIHRoZSB3cm9uZyB3b3JkIFx1MjAxNCB0aGUgYGFwaS1kb2MtKmAgbW9kdWxlcyBnZW5lcmF0ZSBBUEkgKmRvY3VtZW50YXRpb24qLCBub3RcbiAgICAgICAgICogZG9jdW1lbnRzLiBgc3JjYCBhZGRpdGlvbmFsbHkgY29ycnVwdHMgY29kZTogdGhlIGZpeGVyIHJlbmFtZXMgdGhlIGBTcmNgIG1lbWJlciBvZiB0aGUgZXhwb3J0ZWRcbiAgICAgICAgICogYE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzYCAvIGBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzYCBlbnVtcyB3aGlsZSBsZWF2aW5nIGV2ZXJ5IGAuU3JjYCByZWZlcmVuY2VcbiAgICAgICAgICogZGFuZ2xpbmcsIGJlY2F1c2UgYGNoZWNrUHJvcGVydGllc2AgZXhlbXB0cyBwcm9wZXJ0eSBhY2Nlc3NlcyBidXQgbm90IHRoZSBkZWNsYXJhdGlvbnMgdGhleSBwb2ludCBhdC5cbiAgICAgICAgICpcbiAgICAgICAgICogRGlzYWJsaW5nIHRoZSByZXBsYWNlbWVudCBlbnRyaWVzIHByb3RlY3RzIHRoZXNlIHBlcm1hbmVudGx5OyBhbiBgYWxsb3dMaXN0YCB3b3VsZCBpbnN0ZWFkIG5lZWQgZXZlcnlcbiAgICAgICAgICogYWZmZWN0ZWQgaWRlbnRpZmllciBlbnVtZXJhdGVkIGJ5IGhhbmQgYW5kIHJlLWVudW1lcmF0ZWQgZm9yIGV2ZXJ5IG5ldyBvbmUuXG4gICAgICAgICAqXG4gICAgICAgICAqIE5PVEU6IHRoaXMgcnVsZSdzIGF1dG9maXggaXMgTk9UIHJlZmVyZW5jZS1hd2FyZSBmb3IgZGVjbGFyYXRpb25zIHRoYXQgcGFydGljaXBhdGUgaW4gYSBjb250cmFjdCBcdTIwMTRcbiAgICAgICAgICogZW51bSBtZW1iZXJzLCBpbnRlcmZhY2UgbWVtYmVycywgYW5kIFR5cGVTY3JpcHQgcGFyYW1ldGVyIHByb3BlcnRpZXMgKGBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5XG4gICAgICAgICAqIGVsOiBIVE1MRWxlbWVudClgKSBhcmUgcmVuYW1lZCB3aGlsZSBgdGhpcy5lbGAgYW5kIGBFbnVtLk1lbWJlcmAgcmVmZXJlbmNlcyBhcmUgbGVmdCBkYW5nbGluZy4gQXBwbHlcbiAgICAgICAgICogaXRzIHJlcG9ydHMgYnkgaGFuZDsgbmV2ZXIgcnVuIGAtLWZpeGAgb3ZlciBpdC5cbiAgICAgICAgICovXG4gICAgICAgIC8qXG4gICAgICAgICAqIEEgZ29vZCBydWxlLCBidXQgaXRzIGRlZmF1bHQgcHJlZml4ZXMgZm9yY2UgdW5ncmFtbWF0aWNhbCBuYW1lczogYG1lbWJlclBhZ2VFeGlzdHNgIHdvdWxkIGJlY29tZVxuICAgICAgICAgKiBgaXNNZW1iZXJQYWdlRXhpc3RzYCByYXRoZXIgdGhhbiBgZG9lc01lbWJlclBhZ2VFeGlzdGAuIFRoZXNlIGVudHJpZXMgRVhURU5EIHRoZSBkZWZhdWx0cyAoYGlzYCxcbiAgICAgICAgICogYGhhc2AsIGBjYW5gLCBgc2hvdWxkYCwgLi4uKSByYXRoZXIgdGhhbiByZXBsYWNpbmcgdGhlbSwgc28gYSBib29sZWFuIHdpdGggbm8gYm9vbGVhbi1yZWFkaW5nIHByZWZpeFxuICAgICAgICAgKiBhdCBhbGwgaXMgc3RpbGwgcmVqZWN0ZWQgLS0gdGhlIHJ1bGUganVzdCBzdG9wcyBpbnNpc3RpbmcgdGhlIHByZWZpeCBjb21lIGZyb20gYSBzaG9ydGVyIGxpc3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBsaXN0IGlzIGJpZGlyZWN0aW9uYWw6IGFkZGluZyBhIHByZWZpeCBhbHNvIGFzc2VydHMgdGhhdCBldmVyeXRoaW5nIG5hbWVkIHdpdGggaXQgSVMgYSBib29sZWFuLlxuICAgICAgICAgKiBgY2hlY2tgIGVhcm5zIGl0cyBwbGFjZSBvbiBib3RoIGNvdW50cywgc2luY2UgdGhlIGhhbmRmdWwgb2Ygbm9uLWJvb2xlYW4gYGNoZWNrKmAgbmFtZXMgaXQgc3VyZmFjZWRcbiAgICAgICAgICogd2VyZSBnZW51aW5lbHkgbWlzLW5hbWVkICh2b2lkIGZ1bmN0aW9ucyB0aGF0IHRocm93LCBhIHByb2JlIHJldHVybmluZyBhbiBIVFRQIHN0YXR1cykuIGB0ZXN0YCB3YXNcbiAgICAgICAgICogbWVhc3VyZWQgYW5kIHJlamVjdGVkOiBpdCB3b3VsZCB2YWxpZGF0ZSBmaXZlIGB0ZXN0KmAgbGluayBwcmVkaWNhdGVzIHRoYXQgcmVhZCBiZXR0ZXIgYXMgYGlzKmBcbiAgICAgICAgICogYW55d2F5LCBhdCB0aGUgY29zdCBvZiByZW5hbWluZyBTQ1JFQU1JTkdfQ0FTRSB0ZXN0IGZpeHR1cmVzIGFuZCB0aGUgYHRlc3RDb3ZlcmFnZWAvYHRlc3RXYXRjaGBcbiAgICAgICAgICogcnVubmVycyB0aGF0IGRlbGliZXJhdGVseSBtaXJyb3IgdGhlIGB0ZXN0OmNvdmVyYWdlYC9gdGVzdDp3YXRjaGAgbnBtIHNjcmlwdHMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9jb25zaXN0ZW50LWJvb2xlYW4tbmFtZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByZWZpeGVzOiB7XG4gICAgICAgICAgICAgIGFsbG93czogdHJ1ZSxcbiAgICAgICAgICAgICAgY2hlY2s6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRhaW5zOiB0cnVlLFxuICAgICAgICAgICAgICBkb2VzOiB0cnVlLFxuICAgICAgICAgICAgICBpbmNsdWRlczogdHJ1ZSxcbiAgICAgICAgICAgICAgbXVzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgbmVlZHM6IHRydWUsXG4gICAgICAgICAgICAgIHN1cHBvcnRzOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBVbnNhdGlzZmlhYmxlIGFsb25nc2lkZSBgcGVyZmVjdGlvbmlzdC9zb3J0LWNsYXNzZXNgLCB3aGljaCBpcyBjb25maWd1cmVkIGhlcmUgYXMgYSBwbGFpblxuICAgICAgICAgKiBhbHBoYWJldGljYWwgc29ydC4gVGhpcyBydWxlIHdhbnRzIGEgY2F0ZWdvcnkgb3JkZXIgKGFsbCBmaWVsZHMsIHRoZW4gdGhlIGNvbnN0cnVjdG9yLCB0aGVuIGFsbFxuICAgICAgICAgKiBtZXRob2RzKSwgc28gdGhlIGV4dHJlbWVseSBjb21tb24gYHByaXZhdGUgX3hgIGZpZWxkIHBhaXJlZCB3aXRoIGEgYHB1YmxpYyBnZXQgeCgpYCBhY2Nlc3NvciBpc1xuICAgICAgICAgKiByZWplY3RlZCBieSB3aGljaGV2ZXIgcnVsZSBsb3NlczogYWxwaGFiZXRpY2FsbHkgdGhlIGFjY2Vzc29yIHByZWNlZGVzIHRoZSBmaWVsZCwgYnkgY2F0ZWdvcnkgdGhlXG4gICAgICAgICAqIGZpZWxkIHByZWNlZGVzIHRoZSBhY2Nlc3Nvci4gVW5saWtlIGBwcmVmZXItZ2xvYmFsLXRoaXNgIHRoZSBjbGFzaCBwcm9kdWNlcyBub1xuICAgICAgICAgKiBgRVNMaW50Q2lyY3VsYXJGaXhlc1dhcm5pbmdgLCBvbmx5IGJlY2F1c2UgdGhpcyBydWxlIHNoaXBzIG5vIGZpeGVyIC0tIGJvdGggcnVsZXMgYXJlIGBlcnJvcmAsIHNvIG5vXG4gICAgICAgICAqIGFycmFuZ2VtZW50IG9mIG1lbWJlcnMgc2F0aXNmaWVzIHRoZW0gYm90aC4gVGhlIGFscGhhYmV0aWNhbCBzb3J0IGlzIHRoZSBvbmUgYWxyZWFkeSByb2xsZWQgb3V0XG4gICAgICAgICAqIGFjcm9zcyB0aGUgcGx1Z2lucyBjb25zdW1pbmcgdGhpcyBjb25maWcsIHNvIGl0IGtlZXBzIHByZWNlZGVuY2UuIFJlLWVuYWJsaW5nIHRoaXMgcnVsZSB3b3VsZCBtZWFuXG4gICAgICAgICAqIGdpdmluZyBgcGVyZmVjdGlvbmlzdC9zb3J0LWNsYXNzZXNgIGEgbWF0Y2hpbmcgYGdyb3Vwc2Agb3B0aW9uIGFuZCByZW9yZGVyaW5nIGV2ZXJ5IGNsYXNzLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vY29uc2lzdGVudC1jbGFzcy1tZW1iZXItb3JkZXInOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogRXZlcnkgcmVwb3J0IGlzIGBuZXcgRXJyb3IoKS5zdGFja2AsIHdoaWNoIGNhcHR1cmVzIGEgc3RhY2sgdHJhY2UgYW5kIG5ldmVyIHN1cmZhY2VzIGl0cyBtZXNzYWdlLFxuICAgICAgICAgKiBvciBgbmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycylgLCB3aG9zZSBtZXNzYWdlIGlzIG9wdGlvbmFsIHByZWNpc2VseSBiZWNhdXNlIHRoZSBjb2xsZWN0ZWQgZXJyb3JzXG4gICAgICAgICAqIGNhcnJ5IHRoZSBkZXRhaWwuIFRoZSBydWxlIGNhbm5vdCB0ZWxsIGVpdGhlciBmcm9tIGFuIGVycm9yIHRoYXQgaXMgYWN0dWFsbHkgdGhyb3duIGF0IGEgdXNlci5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2Vycm9yLW1lc3NhZ2UnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIGRlZmF1bHQgc3R5bGUgZm9yIGBub2RlOnBhdGhgIGlzIGEgZGVmYXVsdCBpbXBvcnQsIGJ1dCB0aGlzIGNvZGViYXNlIGltcG9ydHMgaXRzIG1lbWJlcnMgYnkgbmFtZVxuICAgICAgICAgKiB0aHJvdWdob3V0LCBjb25zaXN0ZW50bHkgd2l0aCBldmVyeSBvdGhlciBgbm9kZTpgIG1vZHVsZSBpdCB1c2VzLiBDb25maWd1cmUgdGhlIHJ1bGUgdG8gZW5mb3JjZSB0aGVcbiAgICAgICAgICogc3R5bGUgYWN0dWFsbHkgaW4gdXNlIHJhdGhlciB0aGFuIGFubm90YXRlIDE3IHNpdGVzIHRoYXQgYXJlIG5vdCBnb2luZyB0byBjaGFuZ2UuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9pbXBvcnQtc3R5bGUnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdHlsZXM6IHtcbiAgICAgICAgICAgICAgLy8gS2V5ZWQgYnkgdGhlIFVOUFJFRklYRUQgbW9kdWxlIG5hbWU6IHRoZSBydWxlJ3Mgb3duIHRhYmxlIHVzZXMgYHBhdGhgLCBzbyBhIGBub2RlOnBhdGhgIGtleSBuZXZlciBtYXRjaGVzLlxuICAgICAgICAgICAgICBwYXRoOiB7XG4gICAgICAgICAgICAgICAgbmFtZWQ6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHJ1bGUgY291bnRzIGNvbnN0cnVjdG9yIGNhbGxzIGFuZCBjb3VudHMgdGhyb3VnaCBhcnJheSBhbmQgb2JqZWN0IGxpdGVyYWxzLCBzbyBpdHMgZGVmYXVsdCBvZiAzXG4gICAgICAgICAqIHJlcG9ydHMgb3JkaW5hcnkgY29tcG9zaXRpb246IGBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ2Jvb20nKSlgIGluc2lkZSBhbiBhc3NlcnRpb24sIGEgdGVzdCBmaXh0dXJlXG4gICAgICAgICAqIGJ1aWx0IGFzIGBjcmVhdGVUeXBlSW5mbyh7IG1ldGhvZHM6IFtjcmVhdGVNZW1iZXJJbmZvKHsgLi4uIH0pXSB9KWAsIGB0aGlzLmFkZENoaWxkKG5ldyBDKHRoaXMuYXBwKSlgXG4gICAgICAgICAqIGluc2lkZSBhIHBhcmFtcyBiYWcuIFJhaXNpbmcgdGhlIGxpbWl0IGJ5IG9uZSBjbGVhcnMgZXZlcnkgcmVwb3J0IGhlcmUgd2hpbGUgc3RpbGwgY2F0Y2hpbmcgdGhlXG4gICAgICAgICAqIGdlbnVpbmVseSB1bnJlYWRhYmxlIG5lc3RpbmcgdGhlIHJ1bGUgaXMgZm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbWF4LW5lc3RlZC1jYWxscyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1heDogNFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ3VuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICogUHJvcGVydHkgYW5kIG1lbWJlciBuYW1lcyBhcmUgY2hlY2tlZCB0b28sIHNvIGFuIGFiYnJldmlhdGlvbiBjYW5ub3Qgc3Vydml2ZSBieSBsaXZpbmcgb24gYW5cbiAgICAgICAgICAgICAqIG9iamVjdCByYXRoZXIgdGhhbiBpbiBhIHZhcmlhYmxlLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRoZSBydWxlIGlzIHB1cmVseSBzeW50YWN0aWM6IGl0IGNhbm5vdCB0ZWxsIGEgbWVtYmVyIHdlIGRlY2xhcmUgZnJvbSBvbmUgYmVsb25naW5nIHRvIGFcbiAgICAgICAgICAgICAqIGRlcGVuZGVuY3ksIGFuZCBpdCBvZmZlcnMgbm8gYXV0b2ZpeCBmb3IgcHJvcGVydGllcyAobWVhc3VyZWQ6IDY4MSBoaXRzLCAwIHdpdGggYSBmaXhlcikuIFNpdGVzXG4gICAgICAgICAgICAgKiBuYW1pbmcgYSBmb3JlaWduIG1lbWJlciAtLSBgRG9tRWxlbWVudEluZm8uYXR0cmAsIGBFdmFsSW5PYnNpZGlhblBhcmFtcy5mbmAsIGFuZCB0aGUgbGlrZSAtLSBhcmVcbiAgICAgICAgICAgICAqIHRoZXJlZm9yZSBpbXBvc3NpYmxlIHRvIHNhdGlzZnkgYW5kIGNhcnJ5IGFuIGlubGluZSBkaXNhYmxlLCBzbyBldmVyeXRoaW5nIHN0aWxsIHJlcG9ydGVkIGlzIG91cnNcbiAgICAgICAgICAgICAqIHRvIHJlbmFtZS5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBXaGVuIHJlbmFtaW5nIHRoZSByZXN0LCBub3RlIHRoYXQgYHRzY2AgYWxvbmUgaXMgTk9UIGEgc3VmZmljaWVudCBnYXRlOiBvYmplY3QtbGl0ZXJhbCBrZXlzIGluXG4gICAgICAgICAgICAgKiBsb29zZWx5IHR5cGVkIHBvc2l0aW9ucyAoYGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW3sgYmF0Y2hlZEFyZ3VtZW50czogLi4uIH1dKWApIGFyZSBub3QgY29udGV4dHVhbGx5XG4gICAgICAgICAgICAgKiB0eXBlZCwgc28gYSByZW5hbWUgbGVhdmVzIHRoZW0gYmVoaW5kIGFuZCBicmVha3MgdGhlIHN1aXRlIHdoZXJlIHRoZSB0eXBlIGNoZWNrZXIgc2VlcyBub3RoaW5nLlxuICAgICAgICAgICAgICogUmVuYW1lIGluIHNtYWxsIGJhdGNoZXMgd2l0aCB0aGUgZnVsbCB0ZXN0IHJ1biBpbiB0aGUgbG9vcC5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBUaGUgZGlzYWJsZWQgcmVwbGFjZW1lbnRzIGJlbG93IGFyZSBlc3RhYmxpc2hlZCB2b2NhYnVsYXJ5IHJhdGhlciB0aGFuIGFiYnJldmlhdGlvbnMgdG8gYmVcbiAgICAgICAgICAgICAqIGV4cGFuZGVkLiBgZWxgIGlzIGV4ZW1wdCBiZWNhdXNlIE9ic2lkaWFuIG5hbWVzIGV2ZXJ5IGVsZW1lbnQgbWVtYmVyIHRoYXQgd2F5IC0tIGBjb250YWluZXJFbGAsXG4gICAgICAgICAgICAgKiBgY29udGVudEVsYCwgYGlucHV0RWxgLCBgc2VsZWN0RWxgIC0tIHNvIGV4cGFuZGluZyBvdXJzIHRvIGAqRWxlbWVudGAgd291bGQgbGVhdmUgb3VyIGNvbXBvbmVudHNcbiAgICAgICAgICAgICAqIHJlYWRpbmcgaW5jb25zaXN0ZW50bHkgYmVzaWRlIHRoZSBPYnNpZGlhbiBvbmVzIHRoZXkgc2l0IG5leHQgdG8uIERpc2FibGluZyB0aGUgcmVwbGFjZW1lbnQgYWxzb1xuICAgICAgICAgICAgICogY292ZXJzIGNvbXBvdW5kIG5hbWVzLCB3aGljaCBpcyA3MiBzaXRlcyB0aGF0IHdvdWxkIG90aGVyd2lzZSBlYWNoIG5lZWQgYW4gaW5saW5lIGRpc2FibGUuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogYHJlZmAgaXMgZXhlbXB0IGZvciB0aGUgc2FtZSByZWFzb246IGBBc3luY0V2ZW50UmVmYCBpcyB0aGUgYXN5bmMgY291bnRlcnBhcnQgb2YgT2JzaWRpYW4nc1xuICAgICAgICAgICAgICogYEV2ZW50UmVmYCwgaGFuZGVkIHRvIHRoZSBzYW1lIGBvZmZyZWZgIC8gYHJlZ2lzdGVyRXZlbnRgIHNoYXBlcywgc28gdGhlIHR3byBuYW1lcyBoYXZlIHRvIG1hdGNoXG4gICAgICAgICAgICAgKiB0byByZWFkIGFzIGEgcGFpci5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY2hlY2tQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICAgICAgcmVwbGFjZW1lbnRzOiB7XG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAqIGBhdHRyYCAvIGBhdHRyc2AgYXJlIE9ic2lkaWFuJ3Mgb3duOiBgY3JlYXRlRWwoJ2EnLCB7IGF0dHI6IHsgLi4uIH0gfSlgIHRha2VzIHRoZW0gYnkgdGhvc2VcbiAgICAgICAgICAgICAgICogbmFtZXMgb24gYERvbUVsZW1lbnRJbmZvYCwgc28gb3VycyBoYXZlIHRvIG1hdGNoIHRvIGJlIHBhc3NlZCB0aHJvdWdoLiBgcHJvcHNgIGlzIHRoZVxuICAgICAgICAgICAgICAgKiB1bml2ZXJzYWwgY29tcG9uZW50IHZvY2FidWxhcnksIGV4ZW1wdCBmb3IgdGhlIHNhbWUgcmVhc29uIGBwYXJhbXNgIGlzLlxuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgYXR0cjogZmFsc2UsXG4gICAgICAgICAgICAgIGF0dHJzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZGV2OiBmYWxzZSxcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICogRXZlcnkgYGRpcmAgaGVyZSBpcyBhIGZpbGVzeXN0ZW0gZGlyZWN0b3J5LCBuZXZlciBhIGRpcmVjdGlvbiwgc28gdGhlIHJ1bGUgaXMgbmFycm93ZWQgdG8gdGhlXG4gICAgICAgICAgICAgICAqIG9uZSBleHBhbnNpb24gcmF0aGVyIHRoYW4gbGVmdCBvZmZlcmluZyBhIGNob2ljZSBpdCBjYW5ub3QgbWFrZS5cbiAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIFRoaXMgaXMgdGhlIHJ1bGUncyBvd24gcmVwbGFjZW1lbnQga2V5LCB3aGljaCBoYXMgdG8gYmUgc3BlbGxlZCB0aGUgd2F5IHRoZSBydWxlIHJlYWRzIGl0LlxuICAgICAgICAgICAgICBkaXI6IHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRpcmVjdG9yeTogdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgZG9jOiBmYWxzZSxcbiAgICAgICAgICAgICAgZG9jczogZmFsc2UsXG4gICAgICAgICAgICAgIGVsOiBmYWxzZSxcbiAgICAgICAgICAgICAgZW52OiBmYWxzZSxcbiAgICAgICAgICAgICAgbGliOiBmYWxzZSxcbiAgICAgICAgICAgICAgcGFyYW1zOiBmYWxzZSxcbiAgICAgICAgICAgICAgcHJvcHM6IGZhbHNlLFxuICAgICAgICAgICAgICByZWY6IGZhbHNlLFxuICAgICAgICAgICAgICByZWZzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3JjOiBmYWxzZSxcbiAgICAgICAgICAgICAgdXRpbDogZmFsc2UsXG4gICAgICAgICAgICAgIHV0aWxzOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIG5leHQgc2l4IHJ1bGVzIGFsbCBzdWdnZXN0IGFuIEFQSSBuZXdlciB0aGFuIHRoaXMgcHJvamVjdCdzIGBsaWJgIChgRVMyMDIyYCksIHNvIGZvbGxvd2luZyBhbnkgb2ZcbiAgICAgICAgICogdGhlbSBmYWlscyB0byBjb21waWxlLiBUaGUgdGFyZ2V0IGlzIG5vdCBhcmJpdHJhcnk6IGBvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nL21ldGFkYXRhLmpzb25gXG4gICAgICAgICAqIHJlY29yZHMgYGVjbWFTY3JpcHRWZXJzaW9uOiBcIkVTMjAyMlwiYCBmb3IgaW5zdGFsbGVyIDEuMS45LCB0aGUgb2xkZXN0IG9uZSBzdGlsbCBhYmxlIHRvIHJ1biBjdXJyZW50XG4gICAgICAgICAqIE9ic2lkaWFuLiBFYWNoIGlzIG9mZiBhdCB0aGUgY29uZmlnIGxldmVsIHJhdGhlciB0aGFuIGFubm90YXRlZCBwZXIgc2l0ZSwgYmVjYXVzZSBub25lIGNhbiBldmVyIGJlXG4gICAgICAgICAqIHNhdGlzZmllZCB3aGlsZSB0aGF0IGZsb29yIGhvbGRzLiBSZXZpc2l0IHRoZW0gdG9nZXRoZXIgaWYgdGhlIGZsb29yIG1vdmVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBgQXJyYXkjdG9SZXZlcnNlZGAgYW5kIGBBcnJheSN0b1NvcnRlZGAgYXJlIEVTMjAyMy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLWFycmF5LXJldmVyc2UnOiAnb2ZmJyxcbiAgICAgICAgJ3VuaWNvcm4vbm8tYXJyYXktc29ydCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBgY29udGludWVgIGluc2lkZSBhIG5lc3RlZCBsb29wIGlzIG9yZGluYXJ5LCByZWFkYWJsZSBjb250cm9sIGZsb3cgaGVyZS4gVGhlIHJ1bGUncyByZW1lZHkgaXMgdG9cbiAgICAgICAgICogZXh0cmFjdCBldmVyeSBzdWNoIGxvb3AgaW50byBpdHMgb3duIGZ1bmN0aW9uLCB3aGljaCBzcHJlYWRzIG9uZSBjb2hlcmVudCB0cmF2ZXJzYWwgYWNyb3NzIHR3b1xuICAgICAgICAgKiBkZWNsYXJhdGlvbnMgd2l0aG91dCBtYWtpbmcgYW55dGhpbmcgY2xlYXJlci5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLWJyZWFrLWluLW5lc3RlZC1sb29wJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlIGNhbm5vdCBzZWUgdGhyb3VnaCBhIGhvaXN0ZWQgZnVuY3Rpb24gZGVjbGFyYXRpb24sIHNvIGl0IHRyZWF0cyBhIGJpbmRpbmcgdGhhdCBhIG5lc3RlZFxuICAgICAgICAgKiBmdW5jdGlvbiBhbHJlYWR5IHJlYWQgYXMgdW51c2VkIGJlZm9yZSB0aGUgZXhpdC4gSW4gYHJ1bldpdGhUaW1lb3V0YCB0aGF0IGlzIGBsZXQgaXNDb21wbGV0ZWRgLCB3aGljaFxuICAgICAgICAgKiBgcnVuKClgIGFuZCBgaW5uZXJUaW1lb3V0KClgIGJvdGggdG91Y2ggd2hpbGUgdGhlIGBQcm9taXNlLnJhY2VgIGFib3ZlIHRoZSBleGl0IGlzIHN0aWxsIHJ1bm5pbmcgLS1cbiAgICAgICAgICogbW92aW5nIHRoZSBkZWNsYXJhdGlvbiBwYXN0IHRoZSBleGl0LCBhcyB0aGUgcnVsZSBhc2tzLCB3b3VsZCBsZWF2ZSB0aG9zZSByZWFkcyBpbiB0aGUgdGVtcG9yYWwgZGVhZFxuICAgICAgICAgKiB6b25lLiBJdHMgb3duIGZpeGVyIGRlY2xpbmVzIGFsbCAxNSBzaXRlcyBmb3IgdGhlIHNhbWUgcmVhc29uIGl0IGNhbm5vdCBwcm92ZSB0aGVtIHNhZmUsIHNvIGZvbGxvd2luZ1xuICAgICAgICAgKiB0aGUgcnVsZSBpcyBlbnRpcmVseSBtYW51YWwuIFdoYXQgaXMgbGVmdCBhZnRlciB0aGF0IGlzIHBsYWNlbWVudCBzdHlsZTogdGhlIHJlbWFpbmluZyByZXBvcnRzIGFyZVxuICAgICAgICAgKiBuYW1lZCBjb25zdGFudHMgYW5kIGRlcml2ZWQgcGF0aHMgZGVsaWJlcmF0ZWx5IGdyb3VwZWQgYXQgdGhlIHRvcCBvZiBhIGZ1bmN0aW9uLCBhbmQgcHVzaGluZyBlYWNoIG9uZVxuICAgICAgICAgKiBiZWxvdyB0aGUgZmlyc3QgZ3VhcmQgc3BsaXRzIGEgY29oZXNpdmUgYmxvY2sgdG8gbm8gYmVuZWZpdC4gVGhlIHRocmVlIHNpdGVzIHdoZXJlIGRlZmVycmluZyBza2lwcGVkXG4gICAgICAgICAqIHJlYWwgd29yayAoYSBzZWNvbmQgYGNvbXB1dGVOZWVkZWRFeHBvc3VyZWAgd2FsaywgYSBgdG9Kc29uYCBzZXJpYWxpemF0aW9uLCBhbiBgZW5zdXJlTGZFbmRpbmdzYCBwYXNzKVxuICAgICAgICAgKiB3ZXJlIGFwcGxpZWQgYnkgaGFuZCBpbnN0ZWFkLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tZGVjbGFyYXRpb25zLWJlZm9yZS1lYXJseS1leGl0JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEFzc2lnbmluZyBvbnRvIHRoZSBnbG9iYWwgb2JqZWN0IGlzIGhvdyB0aGlzIGxpYnJhcnkgaW5zdGFsbHMgYW5kIHJlc3RvcmVzIHRlc3QgZG91YmxlcywgYW5kIGhvdyBhXG4gICAgICAgICAqIGZldyBPYnNpZGlhbi1ydW50aW1lIGdsb2JhbHMgYXJlIHJlYWNoZWQgYXQgYWxsLiBUaGUgcnVsZSBjYW5ub3Qgc2VwYXJhdGUgdGhhdCBmcm9tIGFuIGFjY2lkZW50YWxcbiAgICAgICAgICogZ2xvYmFsIHdyaXRlLCBhbmQgaXQgaGFzIG5vIGZpeGVyLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tZ2xvYmFsLW9iamVjdC1wcm9wZXJ0eS1hc3NpZ25tZW50JzogJ29mZicsXG4gICAgICAgIC8vIGBudWxsYCBpcyBsb2FkLWJlYXJpbmcgaGVyZTogYW4gb3B0aW9uYWwgY29sbGFib3JhdG9yIGlzIG1vZGVsbGVkIGFzIGEgcmVxdWlyZWQgYG51bGwgfCBYYCBmaWVsZCByYXRoZXIgdGhhbiBhbiBvcHRpb25hbCBgWGAsIHNvIGBudWxsYCBhbmQgYHVuZGVmaW5lZGAgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUuXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlJ3MgbGlzdCBvZiBzdGFuZGFyZCBgU3ltYm9sYCBwcm9wZXJ0aWVzIHByZWRhdGVzIGV4cGxpY2l0IHJlc291cmNlIG1hbmFnZW1lbnQsIHNvIGl0IHJlcG9ydHNcbiAgICAgICAgICogYFN5bWJvbC5kaXNwb3NlYCBhbmQgYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIGFzIG5vbi1zdGFuZGFyZC4gQm90aCBhcmUgcGFydCBvZiB0aGUgbGFuZ3VhZ2UgdGhhdCB0aGlzXG4gICAgICAgICAqIGxpYnJhcnkgaXMgYnVpbHQgb24gLS0gMTE0IGZpbGVzIGhlcmUgdXNlIGB1c2luZ2AgZGVjbGFyYXRpb25zLCBhbmQgdGhlIGRpc3Bvc2FibGUgdHlwZXMgYXJlIGFcbiAgICAgICAgICogcHVibGljIHBhcnQgb2YgaXRzIHN1cmZhY2UgLS0gc28gYWxsIDU5IHJlcG9ydHMgYXJlIHRoZSBydWxlIGJlaW5nIG91dCBvZiBkYXRlIHJhdGhlciB0aGFuIGEgZmluZGluZy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLW5vbnN0YW5kYXJkLWJ1aWx0aW4tcHJvcGVydGllcyc6ICdvZmYnLFxuICAgICAgICAndW5pY29ybi9uby1udWxsJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFR5cGVTY3JpcHQncyBleHBsaWNpdCBgdGhpc2AgcGFyYW1ldGVyIChgZnVuY3Rpb24gZ2V0KHRoaXM6IEhvbGRlcikgeyByZXR1cm4gdGhpcy52YWx1ZTsgfWApIG1ha2VzXG4gICAgICAgICAqIGB0aGlzYCBvdXRzaWRlIGEgY2xhc3MgYm90aCBsZWdhbCBhbmQgdHlwZS1jaGVja2VkLCBidXQgdGhlIHJ1bGUgaXMgc3ludGFjdGljIGFuZCBmbGFncyBpdCBpZGVudGljYWxseVxuICAgICAgICAgKiB0byBhIGdlbnVpbmVseSB1bmJvdW5kIGB0aGlzYC4gSXQgaGFzIG5vIG9wdGlvbnMgKGBzY2hlbWE6IFtdYCkgYW5kIG5vIGZpeGVyLCBzbyB0aGVyZSBpcyBubyB3YXkgdG9cbiAgICAgICAgICogc2VwYXJhdGUgdGhlIGlkaW9tIGZyb20gdGhlIGJ1ZyBpdCB0YXJnZXRzLiBNb3N0IGhpdHMgaGVyZSB3ZXJlIHR5cGVkIGB0aGlzYCBwYXJhbWV0ZXJzIGFuZCB0ZXN0cyB0aGF0XG4gICAgICAgICAqIGRlbGliZXJhdGVseSBhc3NlcnQgYHRoaXNgIGJpbmRpbmcuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby10aGlzLW91dHNpZGUtb2YtY2xhc3MnOiAnb2ZmJyxcbiAgICAgICAgLy8gU2FtZSBjYWxsIGFzIGl0cyBvYmplY3QgY291bnRlcnBhcnQgYWJvdmU6IHRoZSBkZXN0cnVjdHVyaW5nIGRlcHRoIGZsYWdnZWQgaGVyZSBpcyBkZWxpYmVyYXRlIGFuZCByZWFkcyB3ZWxsLlxuICAgICAgICAndW5pY29ybi9uby11bnJlYWRhYmxlLWFycmF5LWRlc3RydWN0dXJpbmcnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHJlcG9ydHMgYXJlIGFsbCBgZm9yIChjb25zdCBmaWxlIG9mIGF3YWl0IHJlYWRkaXJQb3NpeCguLi4pKWAsIHdoaWNoIHJlYWRzIGV4YWN0bHkgYXMgaW50ZW5kZWQuXG4gICAgICAgICAqIEhvaXN0aW5nIHRoZSBhd2FpdGVkIGNhbGwgaW50byBhIHZhcmlhYmxlIG5hbWVkIGFmdGVyIHRoZSBsb29wJ3Mgb3duIGl0ZXJhYmxlIGFkZHMgYSBsaW5lIGFuZCBhIG5hbWVcbiAgICAgICAgICogd2l0aG91dCBhZGRpbmcgaW5mb3JtYXRpb24uXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby11bnJlYWRhYmxlLWZvci1vZi1leHByZXNzaW9uJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBuZXN0ZWQgZGVzdHJ1Y3R1cmluZyB0aGlzIGZsYWdzIGlzIGRlbGliZXJhdGUgaGVyZSBhbmQgcmVhZHMgd2VsbDogcHVsbGluZyBhIG1lbWJlciBvdXQgb2YgYVxuICAgICAgICAgKiBwYXJhbXMgYmFnIGluIG9uZSBzdGVwIHN0YXRlcyB3aGVyZSB0aGUgdmFsdWUgY29tZXMgZnJvbSwgd2hpY2ggYSBzZWNvbmQgaW50ZXJtZWRpYXRlIGJpbmRpbmcgb25seVxuICAgICAgICAgKiBvYnNjdXJlcy4gVGhlIHJ1bGUgdGFrZXMgbm8gb3B0aW9ucywgc28gdGhlcmUgaXMgbm8gd2F5IHRvIGtlZXAgdGhlIGRlcHRoIGxpbWl0IGl0IGlzIHJlYWxseSBhZnRlclxuICAgICAgICAgKiB3aGlsZSBhbGxvd2luZyB0aGUgc2hhcGUgaW4gdXNlLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tdW5yZWFkYWJsZS1vYmplY3QtZGVzdHJ1Y3R1cmluZyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBgY2hlY2tBcmd1bWVudHNgIHN0cmlwcyBgdW5kZWZpbmVkYCBhcmd1bWVudHMsIHdoaWNoIHNoaWZ0cyB0aGUgcmVtYWluaW5nIHBvc2l0aW9uYWwgYXJndW1lbnRzIGludG9cbiAgICAgICAgICogdGhlIHdyb25nIHNsb3RzOyBgY2hlY2tBcnJvd0Z1bmN0aW9uQm9keWAgcmVtb3ZlcyBgcmV0dXJuIHVuZGVmaW5lZDtgIGZyb20gYXJyb3cgYm9kaWVzIHdob3NlIG90aGVyXG4gICAgICAgICAqIGJyYW5jaGVzIGRvIHJldHVybiBhIHZhbHVlLCB3aGljaCB2aW9sYXRlcyB0aGUgYG5vSW1wbGljaXRSZXR1cm5zYCBzZXR0aW5nIHRoaXMgcHJvamVjdCBjb21waWxlcyB3aXRoLlxuICAgICAgICAgKiBUaGUgcnVsZSdzIHJlbWFpbmluZyBjYXNlcyAoYSBiYXJlIGB1bmRlZmluZWRgIGluaXRpYWxpemVyLCBgcmV0dXJuIHVuZGVmaW5lZDtgIGluIGEgdm9pZCBmdW5jdGlvbilcbiAgICAgICAgICogYXJlIHN0aWxsIHdvcnRoIGhhdmluZy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLXVzZWxlc3MtdW5kZWZpbmVkJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2hlY2tBcmd1bWVudHM6IGZhbHNlLFxuICAgICAgICAgICAgY2hlY2tBcnJvd0Z1bmN0aW9uQm9keTogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8vIGBBcnJheS5mcm9tQXN5bmNgIGlzIEVTMjAyNC4gU2VlIHRoZSBFUzIwMjIgZmxvb3Igbm90ZSBhYm92ZS5cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLWFycmF5LWZyb20tYXN5bmMnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogRXZlcnkgaGl0IGhlcmUgaXMgYSBwcm9taXNlIGRlbGliZXJhdGVseSBOT1QgYXdhaXRlZCwgYW5kIGBhd2FpdGAgd291bGQgY2hhbmdlIHdoYXQgdGhlIGNvZGUgZG9lcy5cbiAgICAgICAgICogYHJlc3VsdC5jYXRjaCh0aHJvd0RlbGF5ZWQpYCBpbiBgYXN5bmMtZXZlbnRzLnRzYCBpcyB0aGUgZmlyZS1hbmQtZm9yZ2V0IGVycm9yIHBhdGggdGhlIG1vZHVsZSBpc1xuICAgICAgICAgKiBidWlsdCBvbjsgdGhlIHJlc3QgaG9sZCBhbiB1bnJlc29sdmVkIHByb21pc2UgYW5kIGFzc2VydCB0aGUgY2FsbGJhY2sgaGFzIG5vdCBmaXJlZCB5ZXQsIHNvIGF3YWl0aW5nXG4gICAgICAgICAqIHdvdWxkIGhhbmcgdGhlIHRlc3Qgb3IgaW52ZXJ0IHdoYXQgaXQgcHJvdmVzLiBUaGUgcnVsZSBjYW5ub3QgdGVsbCBhIGZvcmdvdHRlbiBgYXdhaXRgIGZyb20gYW5cbiAgICAgICAgICogaW50ZW50aW9uYWwgb25lLCBhbmQgdGhpcyBjb2RlYmFzZSBzY2hlZHVsZXMgZmlyZS1hbmQtZm9yZ2V0IHdvcmsgYXMgYSBjb3JlIHBhdHRlcm4uXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItYXdhaXQnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogQWxsIHRocmVlIHJlcG9ydHMgcmVhZCBIVE1MIG91dCAoYGNvbnN0IGh0bWwgPSBlbC5pbm5lckhUTUxgKSwgbmV2ZXIgd3JpdGUgaXQsIGFuZCBmb3IgYSByZWFkXG4gICAgICAgICAqIGBnZXRIVE1MKClgIHJldHVybnMgdGhlIHNhbWUgc3RyaW5nLiBXaGF0IGl0IGFkZHMgaXMgc2hhZG93LXJvb3Qgc2VyaWFsaXphdGlvbiBvcHRpb25zIHRoYXQgbm90aGluZ1xuICAgICAgICAgKiBoZXJlIGFza3MgZm9yLCBpbiBleGNoYW5nZSBmb3IgYSBtdWNoIG5ld2VyIHBsYXRmb3JtIGZsb29yIHRoYW4gYGlubmVySFRNTGAgLS0gYSBiYWQgdHJhZGUgZm9yIGFcbiAgICAgICAgICogbGlicmFyeSB0aGF0IGhhcyB0byBydW4gb24gd2hhdGV2ZXIgQ2hyb21pdW0gdGhlIGluc3RhbGxlZCBPYnNpZGlhbiBzaGlwcy4gVGhlIHJ1bGUncyBvdGhlciBoYWxmLFxuICAgICAgICAgKiByZXdyaXRpbmcgd3JpdGVzIHRvIHRoZSBzYW5pdGl6aW5nIGBzZXRIVE1MKClgLCB3b3VsZCBiZSB3b3J0aCBoYXZpbmc7IGl0IGp1c3QgbmV2ZXIgZmlyZXMgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1kb20tbm9kZS1odG1sLW1ldGhvZHMnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogT2JzaWRpYW4ncyBgQ29tcG9uZW50YCBoYXMgaXRzIG93biBgcmVtb3ZlQ2hpbGQoY29tcG9uZW50KWAgZm9yIHRoZSBjb21wb25lbnQgbGlmZWN5Y2xlLCB1bnJlbGF0ZWRcbiAgICAgICAgICogdG8gYE5vZGUjcmVtb3ZlQ2hpbGRgLiBUaGUgcnVsZSBtYXRjaGVzIG9uIHRoZSBtZXRob2QgbmFtZSBhbG9uZSwgc28gZXZlcnkgcmVwb3J0IGhlcmUgaXMgYVxuICAgICAgICAgKiBjb21wb25lbnQgYmVpbmcgdW5sb2FkZWQsIGFuZCBmb2xsb3dpbmcgdGhlIGFkdmljZSBjYWxscyBhIGByZW1vdmUoKWAgdGhhdCBkb2VzIG5vdCBleGlzdCAtLSB3aGljaFxuICAgICAgICAgKiBpcyB3aGF0IGB0c2NgIHNhaWQgd2hlbiB0aGUgZml4ZXIgd2FzIGxldCBsb29zZSBvbiB0aGVtLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLXJlbW92ZSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBEaXJlY3RseSBjb250cmFkaWN0cyBgb2JzaWRpYW5tZC9uby1nbG9iYWwtdGhpc2A6IHRoaXMgcnVsZSByZXdyaXRlcyBgd2luZG93LnhgIHRvIGBnbG9iYWxUaGlzLnhgLCBhbmRcbiAgICAgICAgICogdGhhdCBvbmUgZm9yYmlkcyBgZ2xvYmFsVGhpc2Agb3V0cmlnaHQuIFdpdGggYm90aCBlbmFibGVkLCBgLS1maXhgIGFwcGxpZXMgb25lIGFuZCB0aGVuIHRoZSBvdGhlclxuICAgICAgICAgKiByZXZlcnRzIGl0LCB3aGljaCBFU0xpbnQgcmVwb3J0cyBhcyBgRVNMaW50Q2lyY3VsYXJGaXhlc1dhcm5pbmdgIGFjcm9zcyAyOSBmaWxlcy4gT2JzaWRpYW4ncyBvd25cbiAgICAgICAgICogZ3VpZGFuY2Ugd2lucyBpbiBhbiBPYnNpZGlhbiBsaWJyYXJ5LCBzbyB0aGlzIGlzIHRoZSBydWxlIHRoYXQgZ2l2ZXMgd2F5LlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLWdsb2JhbC10aGlzJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEl0ZXJhdG9yIGhlbHBlcnMgKGBJdGVyYXRvciNzb21lYCBhbmQgZnJpZW5kcykgYXJlIEVTMjAyNSwgc28gdGhpcyBiZWxvbmdzIHdpdGggYG5vLWFycmF5LXJldmVyc2VgIGFuZFxuICAgICAgICAgKiBgbm8tYXJyYXktc29ydGAgYWJvdmU6IHRoZSBzYW1lIEVTMjAyMiBmbG9vciBydWxlcyBpdCBvdXQsIGFuZCB0aGUgc2FtZSBub3RlIGFwcGxpZXMgLS0gcmV2aXNpdCB0aGVtXG4gICAgICAgICAqIHRvZ2V0aGVyIGlmIHRoYXQgZmxvb3IgbW92ZXMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItaXRlcmF0b3ItaGVscGVycyc6ICdvZmYnLFxuICAgICAgICAvLyBgSXRlcmF0b3IjdG9BcnJheWAgaXMgRVMyMDI1LiBTZWUgdGhlIEVTMjAyMiBmbG9vciBub3RlIGFib3ZlLlxuICAgICAgICAndW5pY29ybi9wcmVmZXItaXRlcmF0b3ItdG8tYXJyYXknOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHN1Z2dlc3RlZCByZXBsYWNlbWVudCBpcyBgTWF0aC50cnVuYyhOdW1iZXIoeCkpYCwgd2hpY2ggaXMgbG9uZ2VyIHRoYW4gYHBhcnNlSW50KHgsIDEwKWAgYW5kIG5vXG4gICAgICAgICAqIGNsZWFyZXIsIGFuZCBpdCBpcyBub3QgdGhlIHNhbWUgZnVuY3Rpb246IGBwYXJzZUludGAgc3RvcHMgYXQgdGhlIGZpcnN0IGNoYXJhY3RlciB0aGF0IGNhbm5vdCBiZSBwYXJ0XG4gICAgICAgICAqIG9mIHRoZSBudW1iZXIsIHNvIGAnMTJhYmMnYCBwYXJzZXMgdG8gMTIgd2hlcmUgYE51bWJlcmAgeWllbGRzIGBOYU5gLiBUd28gb2YgdGhlIHJlcG9ydHMgcmVhZCB1c2VyXG4gICAgICAgICAqIGlucHV0IHRocm91Z2ggdGhhdCBkaWZmZXJlbmNlIC0tIHRoZSBwYWdlLWp1bXAgYm94IGluIHRoZSBEYXRhdmlldyBoZWxwZXIsIGFuZFxuICAgICAgICAgKiBgTnVtYmVyQ29tcG9uZW50LnZhbHVlRnJvbVN0cmluZ2AsIHdob3NlIGxlbmllbnQgcGFyc2UgaXMgcGFydCBvZiBhIHB1Ymxpc2hlZCBjb21wb25lbnQncyBiZWhhdmlvci5cbiAgICAgICAgICogVGhlIHJlc3QgcGFyc2UgbWFjaGluZS1nZW5lcmF0ZWQgc3RyaW5ncywgd2hlcmUgdGhlIHR3byBhZ3JlZSBidXQgdGhlIHNob3J0ZXIgc3BlbGxpbmcgc3RpbGwgd2lucy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1udW1iZXItY29lcmNpb24nOiAnb2ZmJyxcbiAgICAgICAgLy8gYFByb21pc2Uud2l0aFJlc29sdmVyc2AgaXMgRVMyMDI0LiBTZWUgdGhlIEVTMjAyMiBmbG9vciBub3RlIGFib3ZlLlxuICAgICAgICAndW5pY29ybi9wcmVmZXItcHJvbWlzZS13aXRoLXJlc29sdmVycyc6ICdvZmYnLFxuICAgICAgICAvLyBgU2V0I3VuaW9uYCBhbmQgZnJpZW5kcyBhcmUgRVMyMDI1LiBTZWUgdGhlIEVTMjAyMiBmbG9vciBub3RlIGFib3ZlLlxuICAgICAgICAndW5pY29ybi9wcmVmZXItc2V0LW1ldGhvZHMnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHJ1bGUgcmFua3Mgb3BlcmFuZHMgYnkgc3ludGFjdGljIHNoYXBlLCBub3QgY29zdCwgc28gZXZlcnkgcmVwb3J0IGhlcmUgc3dhcHMgb25lIHByb3BlcnR5IHJlYWRcbiAgICAgICAgICogYWhlYWQgb2YgYW5vdGhlciBhbmQgYnV5cyBub3RoaW5nLiBJdHMgb3duIG1lc3NhZ2UgY29uY2VkZXMgaXQgY2Fubm90IGNoZWNrIHRoZSBwYXJ0IHRoYXQgbWF0dGVycyAtLVxuICAgICAgICAgKiBcImFmdGVyIHZlcmlmeWluZyBzaG9ydC1jaXJjdWl0IGJlaGF2aW9yXCIgLS0gYW5kIG9uZSByZXBvcnQgc2l0cyBkaXJlY3RseSB1bmRlciBhIGNvbW1lbnQgcmVjb3JkaW5nXG4gICAgICAgICAqIHRoYXQgdGhlIG9wZXJhbmRzIGNoYW5nZSBpbnNpZGUgYSBgcmVuYW1lYCBldmVudCBoYW5kbGVyLCB3aGljaCBpcyB3aGVyZSBvcmRlciBzdG9wcyBiZWluZyBmcmVlLlxuICAgICAgICAgKiBUaGUgY3VycmVudCBvcmRlcnMgYWxzbyBjYXJyeSBpbnRlbnQ6IGEgbnVsbCBndWFyZCBiZWZvcmUgdGhlIHVzZSBpdCBndWFyZHMsIGFuZCB0aGUgY29uZGl0aW9uIGJlaW5nXG4gICAgICAgICAqIHJlcG9ydGVkIGJlZm9yZSB0aGUgc3RhdGUgaXQgY29udHJhZGljdHMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItc2ltcGxlLWNvbmRpdGlvbi1maXJzdCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBgVVJMLmNhblBhcnNlYCByZXF1aXJlcyBOb2RlIDE4LjE3LCB3ZWxsIGFib3ZlIHRoZSBOb2RlIDE2LjE2LjAgZmxvb3IgdGhhdCBzaGlwcGVkIHNvdXJjZSB0YXJnZXRzXG4gICAgICAgICAqIChzZWUgYG1pbmltdW1Ob2RlVmVyc2lvbmAgYmVsb3cpLiBUaGUgcnVsZSBjYW4gdGhlcmVmb3JlIG5ldmVyIGJlIHNhdGlzZmllZCBoZXJlLCBzbyBpdCBpcyBvZmYgYXQgdGhlXG4gICAgICAgICAqIGNvbmZpZyBsZXZlbCByYXRoZXIgdGhhbiBhbm5vdGF0ZWQgYXQgZWFjaCBjYWxsIHNpdGUuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItdXJsLWNhbi1wYXJzZSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBFdmVyeSBhcnJheSByZXBvcnRlZCBoZXJlIGhvbGRzIHN0cmluZ3MsIHdoZXJlIHRoZSBkZWZhdWx0IHNvcnQgaXMgYWxyZWFkeSB3ZWxsIGRlZmluZWQgYW5kIGNvcnJlY3QuXG4gICAgICAgICAqIEFkZGluZyB0aGUgY29tcGFyYXRvciB0aGUgcnVsZSBhc2tzIGZvciB3b3VsZCBtZWFuIGNob29zaW5nIGJldHdlZW4gY29kZS11bml0IGFuZCBsb2NhbGUgb3JkZXJpbmcsXG4gICAgICAgICAqIHNvIGZvbGxvd2luZyBpdCB3b3VsZCBDSEFOR0UgdGhlIHNvcnQgcmF0aGVyIHRoYW4gZG9jdW1lbnQgaXQuIFRoZSBydWxlIGVhcm5zIGl0cyBwbGFjZSBvbiBudW1lcmljXG4gICAgICAgICAqIGFycmF5czsgaXQgZG9lcyBub3QgaGF2ZSBhbnkgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3JlcXVpcmUtYXJyYXktc29ydC1jb21wYXJlJzogJ29mZicsXG4gICAgICAgIC8vIFRoZSBjb2RlYmFzZSBhbHJlYWR5IHNwZWxscyBlbmNvZGluZ3MgdGhlIHdheSB0aGUgRW5jb2RpbmcgU3RhbmRhcmQgZG9lcyAoYHV0Zi04YCksIHdoaWNoIGlzIGFsc28gd2hhdCBgVGV4dERlY29kZXJgIHJlcG9ydHMuIEtlZXAgdGhlIHJ1bGUgZW5mb3JjaW5nIGNvbnNpc3RlbmN5LCBqdXN0IGluIHRoZSBkaXJlY3Rpb24gYWxyZWFkeSBpbiB1c2UuXG4gICAgICAgICd1bmljb3JuL3RleHQtZW5jb2RpbmctaWRlbnRpZmllci1jYXNlJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgd2l0aERhc2g6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIEJ1aWxkL2xpbnQvdmVyc2lvbiBzY3JpcHRzIGFyZSBDTEkgZW50cnkgcG9pbnRzLCB3aGVyZSBleGl0aW5nIHdpdGggYSBzdGF0dXMgY29kZSBpcyB0aGUgaW50ZXJmYWNlLlxuICAgICAgZmlsZXM6IGNvbnRleHQuc2NyaXB0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAndW5pY29ybi9uby1wcm9jZXNzLWV4aXQnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLypcbiAgICAgICAqIEEgbW9kdWxlLWxldmVsIGZpeHR1cmUgYXNzaWduZWQgZnJvbSBgYmVmb3JlRWFjaGAgaXMgdGhlIHN0YW5kYXJkIHRlc3Qgc2hhcGU6XG4gICAgICAgKlxuICAgICAgICogICBsZXQgYXBwOiBBcHA7XG4gICAgICAgKiAgIGJlZm9yZUVhY2goKCkgPT4geyBhcHAgPSBBcHAuY3JlYXRlQ29uZmlndXJlZF9fKCk7IH0pO1xuICAgICAgICpcbiAgICAgICAqIFRoZSBydWxlIGlzIHJpZ2h0IGFib3V0IHByb2R1Y3Rpb24gY29kZSAtLSBtb2R1bGUgc3RhdGUgcmVhc3NpZ25lZCBmcm9tIGluc2lkZSBhIGZ1bmN0aW9uIGlzIHdvcnRoXG4gICAgICAgKiBmbGFnZ2luZywgYW5kIHRoZSBmaXggaXMgdG8gaG9sZCBpdCBpbiBhIGBjb25zdGAgb2JqZWN0IGluc3RlYWQuIEluIHRlc3RzIHRoYXQgd291bGQgcmVwbGFjZSBldmVyeVxuICAgICAgICogYGFwcGAgd2l0aCBgU1RBVEUuYXBwYCBhbmQgbWFrZSBlYWNoIGZpbGUgcmVhZCB3b3JzZSBmb3Igbm8gZ2Fpbiwgc2luY2UgdGhlIGZpeHR1cmUgaXMgcmVzZXQgcGVyIHRlc3RcbiAgICAgICAqIGJ5IGRlc2lnbi4gU2NvcGVkIG9mZiBoZXJlIHJhdGhlciB0aGFuIGRpc2FibGVkIG91dHJpZ2h0LCBzbyBwcm9kdWN0aW9uIGNvZGUga2VlcHMgdGhlIGNoZWNrLlxuICAgICAgICovXG4gICAgICBmaWxlczogY29udGV4dC50ZXN0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAvKlxuICAgICAgICAgKiBUd28gc2hhcGVzIGhlcmUgY2Fubm90IGZvbGxvdyB0aGUgYWR2aWNlLiBBIGhlbHBlciBkZWZpbmVkIGluc2lkZSBhbiBgZXZhbEluT2JzaWRpYW5gIGNhbGxiYWNrXG4gICAgICAgICAqIGNhbm5vdCBiZSBob2lzdGVkIGF0IGFsbDogdGhlIGNhbGxiYWNrIGlzIHNlcmlhbGl6ZWQgd2l0aCBgdG9TdHJpbmcoKWAgYW5kIHJ1bnMgaW5zaWRlIE9ic2lkaWFuLCBzb1xuICAgICAgICAgKiBhbnl0aGluZyBsZWZ0IGJlaGluZCBpbiB0aGUgbW9kdWxlIHNjb3BlIGlzIHNpbXBseSBub3QgdGhlcmUuIEFuZCBhIHBlci1zdWl0ZSBmYWN0b3J5XG4gICAgICAgICAqIChgY3JlYXRlQ29tcG9uZW50YCwgYGNyZWF0ZU1vY2tQbHVnaW5gKSBpcyBkZWxpYmVyYXRlbHkgbG9jYWwsIGtlZXBpbmcgZWFjaCBzdWl0ZSdzIGZpeHR1cmUgbmV4dCB0b1xuICAgICAgICAgKiB0aGUgYXNzZXJ0aW9ucyB0aGF0IHJlYWQgaXQuIFByb2R1Y3Rpb24gY29kZSBrZWVwcyB0aGUgY2hlY2suXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9jb25zaXN0ZW50LWZ1bmN0aW9uLXNjb3BpbmcnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogQSB0ZXN0IGJpbmRpbmcgaXMgbmFtZWQgYWZ0ZXIgdGhlIHRoaW5nIGl0IGNhcHR1cmVzLCBub3QgYWZ0ZXIgd2hhdCBpdCBkb2VzOiBgY3JlYXRlRWxlbWVudFNweWBcbiAgICAgICAgICogaG9sZHMgdGhlIHNweSBvbiBgY3JlYXRlRWxlbWVudGAsIGFuZCBgY3JlYXRlUHJvZ3JhbU9wdGlvbnNgIGhvbGRzIHRoZSBvcHRpb25zIGBjcmVhdGVQcm9ncmFtYCB3YXNcbiAgICAgICAgICogY2FsbGVkIHdpdGguIFRoZSB2ZXJiIGJlbG9uZ3MgdG8gdGhlIG5hbWUgYmVpbmcgcmVmZXJlbmNlZCwgc28gdGhlIHJ1bGUgcmVhZHMgaXQgYXMgYSBmdW5jdGlvbiBuYW1lXG4gICAgICAgICAqIHRoYXQgaXMgbm90IGEgZnVuY3Rpb24uIExlZnQgb24gZm9yIHByb2R1Y3Rpb24gY29kZSwgd2hlcmUgdGhlIGNvbXBsYWludCBpcyB0aGUgcmlnaHQgb25lLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tbm9uLWZ1bmN0aW9uLXZlcmItcHJlZml4JzogJ29mZicsXG4gICAgICAgICd1bmljb3JuL25vLXRvcC1sZXZlbC1hc3NpZ25tZW50LWluLWZ1bmN0aW9uJzogJ29mZidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLW1hZ2ljLW51bWJlcnMgLS0gV2UgZGlzYWJsZWQgbWFnaWMgbnVtYmVycyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgYWxsIG92ZXIgdGhlIGNvbmZpZ3MuICovXG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdCQSxxQkFBNEI7QUFDNUIsNEJBQWtDO0FBQ2xDLGdCQUFtQjtBQUVuQiwyQkFBc0I7QUFDdEIsK0NBQStDO0FBQy9DLG9DQUE4RDtBQUU5RCw2QkFBdUI7QUFFdkIsc0NBQXVCO0FBQ3ZCLDZCQUFnQztBQUNoQyx5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QUE7QUFBQTtBQUFBLFFBU3BDLGtDQUFrQztBQUFBO0FBQUEsUUFFbEMseUNBQXlDO0FBQUE7QUFBQSxRQUV6Qyw4QkFBOEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTOUIseUNBQXlDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTXpDLGdDQUFnQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT2hDLHNDQUFzQztBQUFBO0FBQUEsUUFFdEMseUNBQXlDO0FBQUEsVUFDdkM7QUFBQSxVQUNBO0FBQUEsWUFDRSxVQUFVO0FBQUEsVUFDWjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0E7QUFBQTtBQUFBLE1BRUUsT0FBTyxRQUFRO0FBQUEsTUFDZixPQUFPO0FBQUEsUUFDTCwyQkFBMkI7QUFBQSxNQUM3QjtBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BWUUsT0FBTyxRQUFRO0FBQUEsTUFDZixPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFMLHVDQUF1QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT3ZDLHVDQUF1QztBQUFBLFFBQ3ZDLCtDQUErQztBQUFBLE1BQ2pEO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJjb21tZW50c0NvbmZpZ3MiLCAiZXNsaW50IiwgImVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncyIsICJvYnNpZGlhbm1kIiwgIm5vZGVQbHVnaW4iLCAicGVyZmVjdGlvbmlzdENvbmZpZ3MiLCAic3R5bGlzdGljIiwgInRzZXNsaW50IiwgInVuaWNvcm4iXQp9Cg==
@@ -171,4 +171,4 @@ function readEntryData(archive, entry) {
171
171
  export {
172
172
  extractZipArchive
173
173
  };
174
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Rlc2t0b3AtemlwLWV4dHJhY3Rvci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEV4dHJhY3RzIGEgWklQIGFyY2hpdmUgdG8gZGlzayB1c2luZyBvbmx5IE5vZGUncyBgemxpYmAgXHUyMDE0IHdpdGggbm8gdGhpcmQtcGFydHkgdW56aXAgZGVwZW5kZW5jeS5cbiAqXG4gKiBJdCBleGlzdHMgZm9yIG9uZSBtZWFzdXJlZCByZWFzb24uIFRoZSBkZXBlbmRlbmN5IGl0IHJlcGxhY2VkIG9uIHRoaXMgcGF0aCwgYGFkbS16aXBgLCBidW5kbGVkXG4gKiByb3VnaGx5IDM0IEtCIG9mIG1pbmlmaWVkIEphdmFTY3JpcHQgaW50byBFVkVSWSBPYnNpZGlhbiBwbHVnaW4gYnVpbHQgd2l0aCB0aGlzIGxpYnJhcnk6IGEgcGx1Z2luXG4gKiBzaGlwcyBhIHNpbmdsZSBDSlMgYG1haW4uanNgLCBlc2J1aWxkIGhhcyBubyBjb2RlIHNwbGl0dGluZyB0byBwdXQgYSBkZXBlbmRlbmN5IGJlaGluZCwgYW5kIGFcbiAqIGBhd2FpdCBpbXBvcnQoKWAgb25seSBkZWZlcnMgZXZhbHVhdGlvbiBcdTIwMTQgdGhlIG1vZHVsZSBib2R5IGlzIGlubGluZWQgZWl0aGVyIHdheS4gYG5vZGU6emxpYmAgaXNcbiAqIGFscmVhZHkgYW4gZXNidWlsZCBleHRlcm5hbCwgc28gdGhlIHNhbWUgd29yayBub3cgY29zdHMgYSBwbHVnaW4gYnVuZGxlIG5vdGhpbmcgYXQgYWxsLiBBcmNoaXZlc1xuICogYXJlIHN0aWxsIFdSSVRURU4gd2l0aCBgYWRtLXppcGAgYXQgcmVsZWFzZSB0aW1lIChgc2NyaXB0LXV0aWxzL2RlbW8tdmF1bHQudHNgKSwgd2hpY2ggaXMgTm9kZS1zaWRlXG4gKiB0b29saW5nIGFuZCBuZXZlciByZWFjaGVzIGEgcGx1Z2luIGJ1bmRsZS5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgbmFycm93OiBpdCByZWFkcyBleGFjdGx5IHdoYXQgdGhhdCB3cml0ZXIgcHJvZHVjZXMgXHUyMDE0IHN0b3JlZCBhbmQgZGVmbGF0ZWQgZW50cmllcyBpbiBhblxuICogdW5lbmNyeXB0ZWQgYXJjaGl2ZSBiZWxvdyB0aGUgNCBHQiAvIDY1NTM1LWVudHJ5IFpJUDY0IHRocmVzaG9sZCBcdTIwMTQgYW5kIHJhaXNlcyBhIG5hbWVkIGVycm9yIGZvclxuICogYW55dGhpbmcgZWxzZSByYXRoZXIgdGhhbiBndWVzc2luZyBhdCBpdC4gU2l6ZXMgYW5kIG9mZnNldHMgYXJlIHRha2VuIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5LFxuICogd2hpY2ggaXMgYXV0aG9yaXRhdGl2ZSBldmVuIGZvciBhcmNoaXZlcyB3cml0dGVuIHdpdGggZGF0YSBkZXNjcmlwdG9ycy5cbiAqXG4gKiBUaGUgYG5vZGU6YCBpbXBvcnRzIGJlbG93IGFyZSBzYWZlIHRvIG1lcmVseSBFVkFMVUFURSBvbiBtb2JpbGUgXHUyMDE0IGByZXF1aXJlYCBoYW5kcyBiYWNrIGB1bmRlZmluZWRgXG4gKiB0aGVyZSBhbmQgbm90aGluZyByZWFkcyBpdCBhdCBsb2FkIHRpbWUgXHUyMDE0IHNvIHRoaXMgbW9kdWxlIGNhbiBzaXQgaW4gdGhlIGdlbmVyYXRlZCBiYXJyZWxzIHdpdGhvdXRcbiAqIGJyZWFraW5nIHRoZSBsaWJyYXJ5J3MgbG9hZCBvbiBBbmRyb2lkLiBPbmx5IHRoZSBjYWxscyBhcmUgZGVza3RvcC1vbmx5LlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzIC0tIERlc2t0b3Atb25seSBleHRyYWN0aW9uOyB0aGUgb25seSBjYWxsZXIgaXMgZ2F0ZWQgYnkgYFBsYXRmb3JtLmlzRGVza3RvcEFwcGAsIHNvIHRoZXNlIE5vZGUgQVBJcyBhcmUgbmV2ZXIgcmVhY2hlZCBvbiBtb2JpbGUuICovXG5pbXBvcnQgdHlwZSB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJztcblxuaW1wb3J0IHsgaW5mbGF0ZVJhd1N5bmMgfSBmcm9tICdub2RlOnpsaWInO1xuLyogZXNsaW50LWVuYWJsZSBpbXBvcnQteC9uby1ub2RlanMtbW9kdWxlcyAtLSBEZXNrdG9wLW9ubHkgZXh0cmFjdGlvbjsgdGhlIG9ubHkgY2FsbGVyIGlzIGdhdGVkIGJ5IGBQbGF0Zm9ybS5pc0Rlc2t0b3BBcHBgLCBzbyB0aGVzZSBOb2RlIEFQSXMgYXJlIG5ldmVyIHJlYWNoZWQgb24gbW9iaWxlLiAqL1xuXG5pbXBvcnQge1xuICBkaXJuYW1lLFxuICBqb2luXG59IGZyb20gJy4vcGF0aC50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGV4dHJhY3RaaXBBcmNoaXZlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRyYWN0WmlwQXJjaGl2ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcmF3IFpJUCBhcmNoaXZlIGJ5dGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgYXJjaGl2ZTogQnVmZmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZS1zeXN0ZW0gaW1wbGVtZW50YXRpb24gdGhlIGV4dHJhY3RlZCBlbnRyaWVzIGFyZSB3cml0dGVuIHdpdGguXG4gICAqXG4gICAqIEluamVjdGVkIHJhdGhlciB0aGFuIGltcG9ydGVkIHNvIHRoZSBjYWxsZXIgY2hvb3NlcyB3aGljaCBgZnNgIHdyaXRlcyB0aGUgZmlsZXMuIFRoZSBkZW1vLXZhdWx0XG4gICAqIG9wZW5lciBoYW5kcyBvdmVyIEVsZWN0cm9uJ3MgYG9yaWdpbmFsLWZzYCAoc2VlIHtAbGluayBaaXBFeHRyYWN0aW9uRmlsZVN5c3RlbX0pLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZVN5c3RlbTogWmlwRXh0cmFjdGlvbkZpbGVTeXN0ZW07XG5cbiAgLyoqXG4gICAqIFRoZSBkaXJlY3RvcnkgdG8gZXh0cmFjdCBpbnRvLiBDcmVhdGVkIGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0RGlyZWN0b3J5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHNsaWNlIG9mIGBub2RlOmZzYCBleHRyYWN0aW9uIG5lZWRzLlxuICpcbiAqIE9ubHkgdGhlIHR3byBXUklUSU5HIGNhbGxzIGFyZSByZXF1aXJlZCwgYW5kIHRoYXQgaXMgZGVsaWJlcmF0ZTogRWxlY3Ryb24ncyBhc2FyIGxheWVyIGludGVyY2VwdHNcbiAqIGBmc2AgUkVBRFMgKGFuZCBgZXhpc3RzU3luY2ApIG9uIGFueSBwYXRoIGNvbnRhaW5pbmcgYC5hc2FyYCwgd2hpY2ggYSBkZW1vIHZhdWx0IG1heSBsZWdpdGltYXRlbHlcbiAqIHNoaXAgYXMgYSBwbGFpbiBmaWxlLiBOZXZlciBwcm9iaW5nIHRoZSB0YXJnZXQgd2l0aCBhIHJlYWQga2VlcHMgdGhhdCBpbnRlcmNlcHRpb24gb3V0IG9mIHRoZVxuICogcGljdHVyZSBlbnRpcmVseSwgYW5kIGEgY2FsbGVyIHRoYXQgaGFuZHMgb3ZlciBFbGVjdHJvbidzIGBvcmlnaW5hbC1mc2AgaXMgc2FmZSBldmVuIGZyb20gdGhlXG4gKiB3cml0ZSBzaWRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFppcEV4dHJhY3Rpb25GaWxlU3lzdGVtIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBhbnkgbWlzc2luZyBwYXJlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFRoZSBkaXJlY3RvcnkgdG8gY3JlYXRlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgWmlwRXh0cmFjdGlvbk1rZGlyT3B0aW9uc30uXG4gICAqIEByZXR1cm5zIFRoZSBmaXJzdCBkaXJlY3RvcnkgY3JlYXRlZCwgaWYgYW55LlxuICAgKi9cbiAgbWtkaXJTeW5jKHBhdGg6IHN0cmluZywgb3B0aW9uczogWmlwRXh0cmFjdGlvbk1rZGlyT3B0aW9ucyk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV3JpdGVzIGEgZmlsZSwgb3ZlcndyaXRpbmcgaXQgaWYgaXQgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFRoZSBmaWxlIHRvIHdyaXRlLlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBieXRlcyB0byB3cml0ZS5cbiAgICovXG4gIHdyaXRlRmlsZVN5bmMocGF0aDogc3RyaW5nLCBkYXRhOiBCdWZmZXIpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBvcHRpb25zIHtAbGluayBaaXBFeHRyYWN0aW9uRmlsZVN5c3RlbS5ta2RpclN5bmN9IGlzIGFsd2F5cyBjYWxsZWQgd2l0aC5cbiAqXG4gKiBFeHRyYWN0aW9uIG5ldmVyIHByb2JlcyBmb3IgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCBzbyBldmVyeSBjYWxsIGhhcyB0byBjcmVhdGUgdGhlIG1pc3NpbmcgcGFyZW50c1xuICogaXRzZWxmIGFuZCB0b2xlcmF0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzIGFscmVhZHkgdGhlcmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWmlwRXh0cmFjdGlvbk1rZGlyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbHdheXMgYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjdXJzaXZlOiB0cnVlO1xufVxuXG5pbnRlcmZhY2UgWmlwRW50cnkge1xuICByZWFkb25seSBjb21wcmVzc2VkU2l6ZTogbnVtYmVyO1xuICByZWFkb25seSBjb21wcmVzc2lvbk1ldGhvZDogbnVtYmVyO1xuICByZWFkb25seSBsb2NhbEhlYWRlck9mZnNldDogbnVtYmVyO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbmNvbnN0IEVORF9PRl9DRU5UUkFMX0RJUkVDVE9SWV9TSUdOQVRVUkUgPSAweDA2XzA1XzRCXzUwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfSEVBREVSX1NJR05BVFVSRSA9IDB4MDJfMDFfNEJfNTA7XG5jb25zdCBMT0NBTF9GSUxFX0hFQURFUl9TSUdOQVRVUkUgPSAweDA0XzAzXzRCXzUwO1xuXG5jb25zdCBFTkRfT0ZfQ0VOVFJBTF9ESVJFQ1RPUllfU0laRSA9IDIyO1xuY29uc3QgTUFYX0FSQ0hJVkVfQ09NTUVOVF9MRU5HVEggPSA2NV81MzU7XG5cbi8vIEEgY291bnQgb3Igb2Zmc2V0IHNhdHVyYXRlZCB0byBhbGwtb25lcyBtZWFucyB0aGUgcmVhbCB2YWx1ZSBsaXZlcyBpbiBhIFpJUDY0IHJlY29yZCB0aGlzIHJlYWRlclxuLy8gRG9lcyBub3QgaW1wbGVtZW50LCBzbyB0aGUgZmllbGQgbXVzdCBuZXZlciBiZSByZWFkIGF0IGZhY2UgdmFsdWUuXG5jb25zdCBTQVRVUkFURURfVUlOVF8xNiA9IDY1XzUzNTtcbmNvbnN0IFNBVFVSQVRFRF9VSU5UXzMyID0gNF8yOTRfOTY3XzI5NTtcblxuLy8gRmllbGQgb2Zmc2V0cyB3aXRoaW4gdGhlIGVuZC1vZi1jZW50cmFsLWRpcmVjdG9yeSByZWNvcmQuXG5jb25zdCBBUkNISVZFX0VOVFJZX0NPVU5UX09GRlNFVCA9IDEwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfU1RBUlRfT0ZGU0VUID0gMTY7XG5cbi8vIEZpZWxkIG9mZnNldHMgd2l0aGluIGEgY2VudHJhbC1kaXJlY3RvcnkgaGVhZGVyLlxuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfRkxBR1NfT0ZGU0VUID0gODtcbmNvbnN0IENFTlRSQUxfRElSRUNUT1JZX0NPTVBSRVNTSU9OX01FVEhPRF9PRkZTRVQgPSAxMDtcbmNvbnN0IENFTlRSQUxfRElSRUNUT1JZX0NPTVBSRVNTRURfU0laRV9PRkZTRVQgPSAyMDtcbmNvbnN0IENFTlRSQUxfRElSRUNUT1JZX05BTUVfTEVOR1RIX09GRlNFVCA9IDI4O1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfRVhUUkFfTEVOR1RIX09GRlNFVCA9IDMwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfQ09NTUVOVF9MRU5HVEhfT0ZGU0VUID0gMzI7XG5jb25zdCBDRU5UUkFMX0RJUkVDVE9SWV9MT0NBTF9IRUFERVJfT0ZGU0VUX09GRlNFVCA9IDQyO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfSEVBREVSX1NJWkUgPSA0NjtcblxuLy8gRmllbGQgb2Zmc2V0cyB3aXRoaW4gYSBsb2NhbCBmaWxlIGhlYWRlci5cbmNvbnN0IExPQ0FMX0hFQURFUl9OQU1FX0xFTkdUSF9PRkZTRVQgPSAyNjtcbmNvbnN0IExPQ0FMX0hFQURFUl9FWFRSQV9MRU5HVEhfT0ZGU0VUID0gMjg7XG5jb25zdCBMT0NBTF9IRUFERVJfU0laRSA9IDMwO1xuXG5jb25zdCBDT01QUkVTU0lPTl9NRVRIT0RfU1RPUkVEID0gMDtcbmNvbnN0IENPTVBSRVNTSU9OX01FVEhPRF9ERUZMQVRFRCA9IDg7XG5cbi8vIEJpdCAwIG9mIHRoZSBnZW5lcmFsLXB1cnBvc2UgZmxhZ3MgbWFya3MgYW4gZW5jcnlwdGVkIGVudHJ5LCBhbmQgaXQgaXMgdGhlIGxvd2VzdCBiaXQgXHUyMDE0IHNvIHRoZVxuLy8gUmVtYWluZGVyIHRlc3RzIGl0IHdpdGhvdXQgcmVhY2hpbmcgZm9yIGEgYml0d2lzZSBvcGVyYXRvci5cbmNvbnN0IEVOQ1JZUFRFRF9GTEFHX0RJVklTT1IgPSAyO1xuXG5jb25zdCBFTlRSWV9OQU1FX1NFUEFSQVRPUiA9ICcvJztcbmNvbnN0IFdJTkRPV1NfRFJJVkVfUFJFRklYX1JFR19FWFAgPSAvXltBLVphLXpdOi87XG5cbi8qKlxuICogRXh0cmFjdHMgZXZlcnkgZW50cnkgb2YgYSBaSVAgYXJjaGl2ZSBpbnRvIGEgZGlyZWN0b3J5LlxuICpcbiAqIERpcmVjdG9yeSBlbnRyaWVzIGJlY29tZSBkaXJlY3RvcmllczsgYSBmaWxlIGVudHJ5J3MgcGFyZW50cyBhcmUgY3JlYXRlZCB3aGV0aGVyIG9yIG5vdCB0aGUgYXJjaGl2ZVxuICogZGVjbGFyZWQgdGhlbS4gQW4gZW50cnkgd2hvc2UgbmFtZSB3b3VsZCBlc2NhcGUge0BsaW5rIEV4dHJhY3RaaXBBcmNoaXZlUGFyYW1zLnRhcmdldERpcmVjdG9yeX0gaXNcbiAqIHJlZnVzZWQgcmF0aGVyIHRoYW4gd3JpdHRlbiAodGhlIFwiemlwIHNsaXBcIiB0cmF2ZXJzYWwpLCBhcyBpcyBhbiBlbmNyeXB0ZWQsIFpJUDY0LCBvclxuICogdW5rbm93bi1jb21wcmVzc2lvbiBhcmNoaXZlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEV4dHJhY3RaaXBBcmNoaXZlUGFyYW1zfS5cbiAqIEB0aHJvd3MgQW4ge0BsaW5rIEVycm9yfSBuYW1pbmcgdGhlIHJlYXNvbiB3aGVuIHRoZSBhcmNoaXZlIGNhbm5vdCBiZSByZWFkIGFzIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0WmlwQXJjaGl2ZShwYXJhbXM6IEV4dHJhY3RaaXBBcmNoaXZlUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBhcmNoaXZlLFxuICAgIGZpbGVTeXN0ZW0sXG4gICAgdGFyZ2V0RGlyZWN0b3J5XG4gIH0gPSBwYXJhbXM7XG5cbiAgZmlsZVN5c3RlbS5ta2RpclN5bmModGFyZ2V0RGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlYWRDZW50cmFsRGlyZWN0b3J5KGFyY2hpdmUpKSB7XG4gICAgYXNzZXJ0U2FmZUVudHJ5TmFtZShlbnRyeS5uYW1lKTtcblxuICAgIGlmIChlbnRyeS5uYW1lLmVuZHNXaXRoKEVOVFJZX05BTUVfU0VQQVJBVE9SKSkge1xuICAgICAgLy8gTmFtZWQgd2l0aG91dCBpdHMgdHJhaWxpbmcgc2VwYXJhdG9yLCBzbyB0aGUgY3JlYXRlZCBwYXRoIHJlYWRzIHRoZSBzYW1lIGFzIGV2ZXJ5IG90aGVyIG9uZS5cbiAgICAgIGZpbGVTeXN0ZW0ubWtkaXJTeW5jKGpvaW4odGFyZ2V0RGlyZWN0b3J5LCBlbnRyeS5uYW1lLnNsaWNlKDAsIC0xKSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cnlQYXRoID0gam9pbih0YXJnZXREaXJlY3RvcnksIGVudHJ5Lm5hbWUpO1xuICAgIGZpbGVTeXN0ZW0ubWtkaXJTeW5jKGRpcm5hbWUoZW50cnlQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZmlsZVN5c3RlbS53cml0ZUZpbGVTeW5jKGVudHJ5UGF0aCwgcmVhZEVudHJ5RGF0YShhcmNoaXZlLCBlbnRyeSkpO1xuICB9XG59XG5cbi8qKlxuICogUmVmdXNlcyBhbiBlbnRyeSBuYW1lIHRoYXQgd291bGQgcGxhY2UgdGhlIGV4dHJhY3RlZCBmaWxlIG91dHNpZGUgdGhlIHRhcmdldCBkaXJlY3RvcnkuXG4gKlxuICogQW4gYXJjaGl2ZSBpcyB1bnRydXN0ZWQgaW5wdXQgZXZlbiB3aGVuIHdlIHB1Ymxpc2hlZCBpdCBvdXJzZWx2ZXMsIGFuZCBldmVyeSBvbmUgb2YgdGhlc2Ugc2hhcGVzXG4gKiBlc2NhcGVzIHRoZSB0YXJnZXQ6IGFuIGFic29sdXRlIFBPU0lYIHBhdGgsIGEgV2luZG93cyBkcml2ZS1xdWFsaWZpZWQgcGF0aCwgYSBiYWNrc2xhc2ggKHdoaWNoIHRoZVxuICogWklQIHNwZWNpZmljYXRpb24gZm9yYmlkcyBhcyBhIHNlcGFyYXRvciwgc28gaXRzIG9ubHkgdXNlIGhlcmUgaXMgdG8gc211Z2dsZSBvbmUgcGFzdCBhXG4gKiBmb3J3YXJkLXNsYXNoIGNoZWNrKSwgYW5kIGEgYC4uYCBzZWdtZW50LlxuICpcbiAqIEBwYXJhbSBlbnRyeU5hbWUgLSBUaGUgZW50cnkgbmFtZSBhcyByZWNvcmRlZCBpbiB0aGUgYXJjaGl2ZS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0U2FmZUVudHJ5TmFtZShlbnRyeU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZW50cnlOYW1lLnN0YXJ0c1dpdGgoRU5UUllfTkFNRV9TRVBBUkFUT1IpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWZ1c2luZyB0byBleHRyYWN0IHRoZSBhYnNvbHV0ZSBhcmNoaXZlIGVudHJ5ICcke2VudHJ5TmFtZX0nLmApO1xuICB9XG5cbiAgaWYgKFdJTkRPV1NfRFJJVkVfUFJFRklYX1JFR19FWFAudGVzdChlbnRyeU5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWZ1c2luZyB0byBleHRyYWN0IHRoZSBkcml2ZS1xdWFsaWZpZWQgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeU5hbWV9Jy5gKTtcbiAgfVxuXG4gIGlmIChlbnRyeU5hbWUuaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVmdXNpbmcgdG8gZXh0cmFjdCB0aGUgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeU5hbWV9Jywgd2hpY2ggdXNlcyBhIGJhY2tzbGFzaCBzZXBhcmF0b3IuYCk7XG4gIH1cblxuICBpZiAoZW50cnlOYW1lLnNwbGl0KEVOVFJZX05BTUVfU0VQQVJBVE9SKS5pbmNsdWRlcygnLi4nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVmdXNpbmcgdG8gZXh0cmFjdCB0aGUgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeU5hbWV9Jywgd2hpY2ggcG9pbnRzIG91dHNpZGUgdGhlIHRhcmdldCBkaXJlY3RvcnkuYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBMb2NhdGVzIHRoZSBlbmQtb2YtY2VudHJhbC1kaXJlY3RvcnkgcmVjb3JkIGFuZCByZXR1cm5zIGl0cyBvZmZzZXQuXG4gKlxuICogVGhlIHJlY29yZCBzaXRzIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgYXJjaGl2ZSB1bmxlc3MgYSB0cmFpbGluZyBjb21tZW50IGZvbGxvd3MgaXQsIHNvIGl0IGlzIGZvdW5kXG4gKiBieSBzY2FubmluZyBiYWNrd2FyZHMgb3ZlciB0aGUgY29tbWVudCdzIG1heGltdW0gbGVuZ3RoIHJhdGhlciB0aGFuIGFzc3VtZWQgdG8gYmUgYXQgYSBmaXhlZCBwbGFjZS5cbiAqXG4gKiBAcGFyYW0gYXJjaGl2ZSAtIFRoZSByYXcgWklQIGFyY2hpdmUgYnl0ZXMuXG4gKiBAcmV0dXJucyBUaGUgcmVjb3JkJ3Mgb2Zmc2V0LlxuICovXG5mdW5jdGlvbiBmaW5kRW5kT2ZDZW50cmFsRGlyZWN0b3J5T2Zmc2V0KGFyY2hpdmU6IEJ1ZmZlcik6IG51bWJlciB7XG4gIGNvbnN0IGxhc3RQb3NzaWJsZU9mZnNldCA9IGFyY2hpdmUubGVuZ3RoIC0gRU5EX09GX0NFTlRSQUxfRElSRUNUT1JZX1NJWkU7XG4gIGNvbnN0IGZpcnN0UG9zc2libGVPZmZzZXQgPSBNYXRoLm1heCgwLCBsYXN0UG9zc2libGVPZmZzZXQgLSBNQVhfQVJDSElWRV9DT01NRU5UX0xFTkdUSCk7XG5cbiAgZm9yIChsZXQgb2Zmc2V0ID0gbGFzdFBvc3NpYmxlT2Zmc2V0OyBvZmZzZXQgPj0gZmlyc3RQb3NzaWJsZU9mZnNldDsgb2Zmc2V0LS0pIHtcbiAgICBpZiAoYXJjaGl2ZS5yZWFkVUludDMyTEUob2Zmc2V0KSA9PT0gRU5EX09GX0NFTlRSQUxfRElSRUNUT1JZX1NJR05BVFVSRSkge1xuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmNoaXZlIGlzIG5vdCBhIFpJUCBmaWxlOiBpdHMgZW5kLW9mLWNlbnRyYWwtZGlyZWN0b3J5IHJlY29yZCBpcyBtaXNzaW5nLicpO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBjZW50cmFsIGRpcmVjdG9yeSwgd2hpY2ggaXMgdGhlIGFyY2hpdmUncyBhdXRob3JpdGF0aXZlIGluZGV4IG9mIGl0cyBlbnRyaWVzLlxuICpcbiAqIEBwYXJhbSBhcmNoaXZlIC0gVGhlIHJhdyBaSVAgYXJjaGl2ZSBieXRlcy5cbiAqIEByZXR1cm5zIE9uZSB7QGxpbmsgWmlwRW50cnl9IHBlciBlbnRyeSwgaW4gdGhlIG9yZGVyIHRoZSBhcmNoaXZlIGxpc3RzIHRoZW0uXG4gKi9cbmZ1bmN0aW9uIHJlYWRDZW50cmFsRGlyZWN0b3J5KGFyY2hpdmU6IEJ1ZmZlcik6IFppcEVudHJ5W10ge1xuICBjb25zdCBlbmRPZkNlbnRyYWxEaXJlY3RvcnlPZmZzZXQgPSBmaW5kRW5kT2ZDZW50cmFsRGlyZWN0b3J5T2Zmc2V0KGFyY2hpdmUpO1xuICBjb25zdCBlbnRyeUNvdW50ID0gYXJjaGl2ZS5yZWFkVUludDE2TEUoZW5kT2ZDZW50cmFsRGlyZWN0b3J5T2Zmc2V0ICsgQVJDSElWRV9FTlRSWV9DT1VOVF9PRkZTRVQpO1xuICBsZXQgZW50cnlPZmZzZXQgPSBhcmNoaXZlLnJlYWRVSW50MzJMRShlbmRPZkNlbnRyYWxEaXJlY3RvcnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9TVEFSVF9PRkZTRVQpO1xuXG4gIGlmIChlbnRyeUNvdW50ID09PSBTQVRVUkFURURfVUlOVF8xNiB8fCBlbnRyeU9mZnNldCA9PT0gU0FUVVJBVEVEX1VJTlRfMzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1pJUDY0IGFyY2hpdmVzIGFyZSBub3Qgc3VwcG9ydGVkLicpO1xuICB9XG5cbiAgY29uc3QgZW50cmllczogWmlwRW50cnlbXSA9IFtdO1xuICBmb3IgKGxldCBlbnRyeUluZGV4ID0gMDsgZW50cnlJbmRleCA8IGVudHJ5Q291bnQ7IGVudHJ5SW5kZXgrKykge1xuICAgIGlmIChhcmNoaXZlLnJlYWRVSW50MzJMRShlbnRyeU9mZnNldCkgIT09IENFTlRSQUxfRElSRUNUT1JZX0hFQURFUl9TSUdOQVRVUkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyY2hpdmUncyBjZW50cmFsIGRpcmVjdG9yeSBpcyBjb3JydXB0IGF0IGVudHJ5ICR7U3RyaW5nKGVudHJ5SW5kZXgpfS5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBmbGFncyA9IGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5T2Zmc2V0ICsgQ0VOVFJBTF9ESVJFQ1RPUllfRkxBR1NfT0ZGU0VUKTtcbiAgICBpZiAoZmxhZ3MgJSBFTkNSWVBURURfRkxBR19ESVZJU09SID09PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY3J5cHRlZCBaSVAgYXJjaGl2ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcHJlc3NlZFNpemUgPSBhcmNoaXZlLnJlYWRVSW50MzJMRShlbnRyeU9mZnNldCArIENFTlRSQUxfRElSRUNUT1JZX0NPTVBSRVNTRURfU0laRV9PRkZTRVQpO1xuICAgIGNvbnN0IGxvY2FsSGVhZGVyT2Zmc2V0ID0gYXJjaGl2ZS5yZWFkVUludDMyTEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9MT0NBTF9IRUFERVJfT0ZGU0VUX09GRlNFVCk7XG4gICAgaWYgKGNvbXByZXNzZWRTaXplID09PSBTQVRVUkFURURfVUlOVF8zMiB8fCBsb2NhbEhlYWRlck9mZnNldCA9PT0gU0FUVVJBVEVEX1VJTlRfMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWklQNjQgYXJjaGl2ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZUxlbmd0aCA9IGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5T2Zmc2V0ICsgQ0VOVFJBTF9ESVJFQ1RPUllfTkFNRV9MRU5HVEhfT0ZGU0VUKTtcbiAgICBjb25zdCBuYW1lT2Zmc2V0ID0gZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9IRUFERVJfU0laRTtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgY29tcHJlc3NlZFNpemUsXG4gICAgICBjb21wcmVzc2lvbk1ldGhvZDogYXJjaGl2ZS5yZWFkVUludDE2TEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9DT01QUkVTU0lPTl9NRVRIT0RfT0ZGU0VUKSxcbiAgICAgIGxvY2FsSGVhZGVyT2Zmc2V0LFxuICAgICAgbmFtZTogYXJjaGl2ZS50b1N0cmluZygndXRmLTgnLCBuYW1lT2Zmc2V0LCBuYW1lT2Zmc2V0ICsgbmFtZUxlbmd0aClcbiAgICB9KTtcblxuICAgIGVudHJ5T2Zmc2V0ID0gbmFtZU9mZnNldFxuICAgICAgKyBuYW1lTGVuZ3RoXG4gICAgICArIGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5T2Zmc2V0ICsgQ0VOVFJBTF9ESVJFQ1RPUllfRVhUUkFfTEVOR1RIX09GRlNFVClcbiAgICAgICsgYXJjaGl2ZS5yZWFkVUludDE2TEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9DT01NRU5UX0xFTkdUSF9PRkZTRVQpO1xuICB9XG5cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5cbi8qKlxuICogUmVhZHMgYW5kIGRlY29tcHJlc3NlcyBvbmUgZW50cnkncyBieXRlcy5cbiAqXG4gKiBUaGUgZGF0YSdzIHN0YXJ0IGlzIGNvbXB1dGVkIGZyb20gdGhlIExPQ0FMIGhlYWRlciByYXRoZXIgdGhhbiB0aGUgY2VudHJhbCBvbmU6IHRoZSB0d28gY2FycnlcbiAqIGluZGVwZW5kZW50IG5hbWUgYW5kIGV4dHJhLWZpZWxkIGxlbmd0aHMsIGFuZCBvbmx5IHRoZSBsb2NhbCBwYWlyIGRlc2NyaWJlcyB3aGVyZSB0aGUgYnl0ZXNcbiAqIGFjdHVhbGx5IGJlZ2luLlxuICpcbiAqIEBwYXJhbSBhcmNoaXZlIC0gVGhlIHJhdyBaSVAgYXJjaGl2ZSBieXRlcy5cbiAqIEBwYXJhbSBlbnRyeSAtIFRoZSBlbnRyeSwgYXMgcmVhZCBmcm9tIHRoZSBjZW50cmFsIGRpcmVjdG9yeS5cbiAqIEByZXR1cm5zIFRoZSBlbnRyeSdzIHVuY29tcHJlc3NlZCBjb250ZW50LlxuICovXG5mdW5jdGlvbiByZWFkRW50cnlEYXRhKGFyY2hpdmU6IEJ1ZmZlciwgZW50cnk6IFppcEVudHJ5KTogQnVmZmVyIHtcbiAgaWYgKGFyY2hpdmUucmVhZFVJbnQzMkxFKGVudHJ5LmxvY2FsSGVhZGVyT2Zmc2V0KSAhPT0gTE9DQUxfRklMRV9IRUFERVJfU0lHTkFUVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeS5uYW1lfScgaGFzIGEgY29ycnVwdCBsb2NhbCBoZWFkZXIuYCk7XG4gIH1cblxuICBjb25zdCBkYXRhT2Zmc2V0ID0gZW50cnkubG9jYWxIZWFkZXJPZmZzZXRcbiAgICArIExPQ0FMX0hFQURFUl9TSVpFXG4gICAgKyBhcmNoaXZlLnJlYWRVSW50MTZMRShlbnRyeS5sb2NhbEhlYWRlck9mZnNldCArIExPQ0FMX0hFQURFUl9OQU1FX0xFTkdUSF9PRkZTRVQpXG4gICAgKyBhcmNoaXZlLnJlYWRVSW50MTZMRShlbnRyeS5sb2NhbEhlYWRlck9mZnNldCArIExPQ0FMX0hFQURFUl9FWFRSQV9MRU5HVEhfT0ZGU0VUKTtcbiAgY29uc3QgZGF0YUVuZCA9IGRhdGFPZmZzZXQgKyBlbnRyeS5jb21wcmVzc2VkU2l6ZTtcbiAgaWYgKGRhdGFFbmQgPiBhcmNoaXZlLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyY2hpdmUgaXMgdHJ1bmNhdGVkOiBlbnRyeSAnJHtlbnRyeS5uYW1lfScgcnVucyBwYXN0IGl0cyBlbmQuYCk7XG4gIH1cblxuICBjb25zdCBjb21wcmVzc2VkRGF0YSA9IGFyY2hpdmUuc3ViYXJyYXkoZGF0YU9mZnNldCwgZGF0YUVuZCk7XG4gIHN3aXRjaCAoZW50cnkuY29tcHJlc3Npb25NZXRob2QpIHtcbiAgICBjYXNlIENPTVBSRVNTSU9OX01FVEhPRF9ERUZMQVRFRDoge1xuICAgICAgcmV0dXJuIGluZmxhdGVSYXdTeW5jKGNvbXByZXNzZWREYXRhKTtcbiAgICB9XG4gICAgY2FzZSBDT01QUkVTU0lPTl9NRVRIT0RfU1RPUkVEOiB7XG4gICAgICByZXR1cm4gY29tcHJlc3NlZERhdGE7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyY2hpdmUgZW50cnkgJyR7ZW50cnkubmFtZX0nIHVzZXMgdW5zdXBwb3J0ZWQgY29tcHJlc3Npb24gbWV0aG9kICR7U3RyaW5nKGVudHJ5LmNvbXByZXNzaW9uTWV0aG9kKX0uYCk7XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEJBLFNBQVMsc0JBQXNCO0FBRy9CO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBeUVQLE1BQU0scUNB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
174
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Rlc2t0b3AtemlwLWV4dHJhY3Rvci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEV4dHJhY3RzIGEgWklQIGFyY2hpdmUgdG8gZGlzayB1c2luZyBvbmx5IE5vZGUncyBgemxpYmAgXHUyMDE0IHdpdGggbm8gdGhpcmQtcGFydHkgdW56aXAgZGVwZW5kZW5jeS5cbiAqXG4gKiBJdCBleGlzdHMgZm9yIG9uZSBtZWFzdXJlZCByZWFzb24uIFRoZSBkZXBlbmRlbmN5IGl0IHJlcGxhY2VkIG9uIHRoaXMgcGF0aCwgYGFkbS16aXBgLCBidW5kbGVkXG4gKiByb3VnaGx5IDM0IEtCIG9mIG1pbmlmaWVkIEphdmFTY3JpcHQgaW50byBFVkVSWSBPYnNpZGlhbiBwbHVnaW4gYnVpbHQgd2l0aCB0aGlzIGxpYnJhcnk6IGEgcGx1Z2luXG4gKiBzaGlwcyBhIHNpbmdsZSBDSlMgYG1haW4uanNgLCBlc2J1aWxkIGhhcyBubyBjb2RlIHNwbGl0dGluZyB0byBwdXQgYSBkZXBlbmRlbmN5IGJlaGluZCwgYW5kIGFcbiAqIGBhd2FpdCBpbXBvcnQoKWAgb25seSBkZWZlcnMgZXZhbHVhdGlvbiBcdTIwMTQgdGhlIG1vZHVsZSBib2R5IGlzIGlubGluZWQgZWl0aGVyIHdheS4gYG5vZGU6emxpYmAgaXNcbiAqIGFscmVhZHkgYW4gZXNidWlsZCBleHRlcm5hbCwgc28gdGhlIHNhbWUgd29yayBub3cgY29zdHMgYSBwbHVnaW4gYnVuZGxlIG5vdGhpbmcgYXQgYWxsLiBBcmNoaXZlc1xuICogYXJlIHN0aWxsIFdSSVRURU4gd2l0aCBgYWRtLXppcGAgYXQgcmVsZWFzZSB0aW1lIChgc2NyaXB0LXV0aWxzL2RlbW8tdmF1bHQudHNgKSwgd2hpY2ggaXMgTm9kZS1zaWRlXG4gKiB0b29saW5nIGFuZCBuZXZlciByZWFjaGVzIGEgcGx1Z2luIGJ1bmRsZS5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgbmFycm93OiBpdCByZWFkcyBleGFjdGx5IHdoYXQgdGhhdCB3cml0ZXIgcHJvZHVjZXMgXHUyMDE0IHN0b3JlZCBhbmQgZGVmbGF0ZWQgZW50cmllcyBpbiBhblxuICogdW5lbmNyeXB0ZWQgYXJjaGl2ZSBiZWxvdyB0aGUgNCBHQiAvIDY1NTM1LWVudHJ5IFpJUDY0IHRocmVzaG9sZCBcdTIwMTQgYW5kIHJhaXNlcyBhIG5hbWVkIGVycm9yIGZvclxuICogYW55dGhpbmcgZWxzZSByYXRoZXIgdGhhbiBndWVzc2luZyBhdCBpdC4gU2l6ZXMgYW5kIG9mZnNldHMgYXJlIHRha2VuIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5LFxuICogd2hpY2ggaXMgYXV0aG9yaXRhdGl2ZSBldmVuIGZvciBhcmNoaXZlcyB3cml0dGVuIHdpdGggZGF0YSBkZXNjcmlwdG9ycy5cbiAqXG4gKiBUaGUgYG5vZGU6YCBpbXBvcnRzIGJlbG93IGFyZSBzYWZlIHRvIG1lcmVseSBFVkFMVUFURSBvbiBtb2JpbGUgXHUyMDE0IGByZXF1aXJlYCBoYW5kcyBiYWNrIGB1bmRlZmluZWRgXG4gKiB0aGVyZSBhbmQgbm90aGluZyByZWFkcyBpdCBhdCBsb2FkIHRpbWUgXHUyMDE0IHNvIHRoaXMgbW9kdWxlIGNhbiBzaXQgaW4gdGhlIGdlbmVyYXRlZCBiYXJyZWxzIHdpdGhvdXRcbiAqIGJyZWFraW5nIHRoZSBsaWJyYXJ5J3MgbG9hZCBvbiBBbmRyb2lkLiBPbmx5IHRoZSBjYWxscyBhcmUgZGVza3RvcC1vbmx5LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQnVmZmVyIH0gZnJvbSAnbm9kZTpidWZmZXInO1xuXG5pbXBvcnQgeyBpbmZsYXRlUmF3U3luYyB9IGZyb20gJ25vZGU6emxpYic7XG5cbmltcG9ydCB7XG4gIGRpcm5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnLi9wYXRoLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZXh0cmFjdFppcEFyY2hpdmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dHJhY3RaaXBBcmNoaXZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSByYXcgWklQIGFyY2hpdmUgYnl0ZXMuXG4gICAqL1xuICByZWFkb25seSBhcmNoaXZlOiBCdWZmZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlLXN5c3RlbSBpbXBsZW1lbnRhdGlvbiB0aGUgZXh0cmFjdGVkIGVudHJpZXMgYXJlIHdyaXR0ZW4gd2l0aC5cbiAgICpcbiAgICogSW5qZWN0ZWQgcmF0aGVyIHRoYW4gaW1wb3J0ZWQgc28gdGhlIGNhbGxlciBjaG9vc2VzIHdoaWNoIGBmc2Agd3JpdGVzIHRoZSBmaWxlcy4gVGhlIGRlbW8tdmF1bHRcbiAgICogb3BlbmVyIGhhbmRzIG92ZXIgRWxlY3Ryb24ncyBgb3JpZ2luYWwtZnNgIChzZWUge0BsaW5rIFppcEV4dHJhY3Rpb25GaWxlU3lzdGVtfSkuXG4gICAqL1xuICByZWFkb25seSBmaWxlU3lzdGVtOiBaaXBFeHRyYWN0aW9uRmlsZVN5c3RlbTtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdG9yeSB0byBleHRyYWN0IGludG8uIENyZWF0ZWQgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gICAqL1xuICByZWFkb25seSB0YXJnZXREaXJlY3Rvcnk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc2xpY2Ugb2YgYG5vZGU6ZnNgIGV4dHJhY3Rpb24gbmVlZHMuXG4gKlxuICogT25seSB0aGUgdHdvIFdSSVRJTkcgY2FsbHMgYXJlIHJlcXVpcmVkLCBhbmQgdGhhdCBpcyBkZWxpYmVyYXRlOiBFbGVjdHJvbidzIGFzYXIgbGF5ZXIgaW50ZXJjZXB0c1xuICogYGZzYCBSRUFEUyAoYW5kIGBleGlzdHNTeW5jYCkgb24gYW55IHBhdGggY29udGFpbmluZyBgLmFzYXJgLCB3aGljaCBhIGRlbW8gdmF1bHQgbWF5IGxlZ2l0aW1hdGVseVxuICogc2hpcCBhcyBhIHBsYWluIGZpbGUuIE5ldmVyIHByb2JpbmcgdGhlIHRhcmdldCB3aXRoIGEgcmVhZCBrZWVwcyB0aGF0IGludGVyY2VwdGlvbiBvdXQgb2YgdGhlXG4gKiBwaWN0dXJlIGVudGlyZWx5LCBhbmQgYSBjYWxsZXIgdGhhdCBoYW5kcyBvdmVyIEVsZWN0cm9uJ3MgYG9yaWdpbmFsLWZzYCBpcyBzYWZlIGV2ZW4gZnJvbSB0aGVcbiAqIHdyaXRlIHNpZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWmlwRXh0cmFjdGlvbkZpbGVTeXN0ZW0ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIGFueSBtaXNzaW5nIHBhcmVudHMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gVGhlIGRpcmVjdG9yeSB0byBjcmVhdGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBaaXBFeHRyYWN0aW9uTWtkaXJPcHRpb25zfS5cbiAgICogQHJldHVybnMgVGhlIGZpcnN0IGRpcmVjdG9yeSBjcmVhdGVkLCBpZiBhbnkuXG4gICAqL1xuICBta2RpclN5bmMocGF0aDogc3RyaW5nLCBvcHRpb25zOiBaaXBFeHRyYWN0aW9uTWtkaXJPcHRpb25zKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXcml0ZXMgYSBmaWxlLCBvdmVyd3JpdGluZyBpdCBpZiBpdCBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gVGhlIGZpbGUgdG8gd3JpdGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGJ5dGVzIHRvIHdyaXRlLlxuICAgKi9cbiAgd3JpdGVGaWxlU3luYyhwYXRoOiBzdHJpbmcsIGRhdGE6IEJ1ZmZlcik6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhlIG9wdGlvbnMge0BsaW5rIFppcEV4dHJhY3Rpb25GaWxlU3lzdGVtLm1rZGlyU3luY30gaXMgYWx3YXlzIGNhbGxlZCB3aXRoLlxuICpcbiAqIEV4dHJhY3Rpb24gbmV2ZXIgcHJvYmVzIGZvciBhbiBleGlzdGluZyBkaXJlY3RvcnksIHNvIGV2ZXJ5IGNhbGwgaGFzIHRvIGNyZWF0ZSB0aGUgbWlzc2luZyBwYXJlbnRzXG4gKiBpdHNlbGYgYW5kIHRvbGVyYXRlIGEgZGlyZWN0b3J5IHRoYXQgaXMgYWxyZWFkeSB0aGVyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBaaXBFeHRyYWN0aW9uTWtkaXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFsd2F5cyBgdHJ1ZWAuXG4gICAqL1xuICByZWFkb25seSByZWN1cnNpdmU6IHRydWU7XG59XG5cbmludGVyZmFjZSBaaXBFbnRyeSB7XG4gIHJlYWRvbmx5IGNvbXByZXNzZWRTaXplOiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvbXByZXNzaW9uTWV0aG9kOiBudW1iZXI7XG4gIHJlYWRvbmx5IGxvY2FsSGVhZGVyT2Zmc2V0OiBudW1iZXI7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuY29uc3QgRU5EX09GX0NFTlRSQUxfRElSRUNUT1JZX1NJR05BVFVSRSA9IDB4MDZfMDVfNEJfNTA7XG5jb25zdCBDRU5UUkFMX0RJUkVDVE9SWV9IRUFERVJfU0lHTkFUVVJFID0gMHgwMl8wMV80Ql81MDtcbmNvbnN0IExPQ0FMX0ZJTEVfSEVBREVSX1NJR05BVFVSRSA9IDB4MDRfMDNfNEJfNTA7XG5cbmNvbnN0IEVORF9PRl9DRU5UUkFMX0RJUkVDVE9SWV9TSVpFID0gMjI7XG5jb25zdCBNQVhfQVJDSElWRV9DT01NRU5UX0xFTkdUSCA9IDY1XzUzNTtcblxuLy8gQSBjb3VudCBvciBvZmZzZXQgc2F0dXJhdGVkIHRvIGFsbC1vbmVzIG1lYW5zIHRoZSByZWFsIHZhbHVlIGxpdmVzIGluIGEgWklQNjQgcmVjb3JkIHRoaXMgcmVhZGVyXG4vLyBEb2VzIG5vdCBpbXBsZW1lbnQsIHNvIHRoZSBmaWVsZCBtdXN0IG5ldmVyIGJlIHJlYWQgYXQgZmFjZSB2YWx1ZS5cbmNvbnN0IFNBVFVSQVRFRF9VSU5UXzE2ID0gNjVfNTM1O1xuY29uc3QgU0FUVVJBVEVEX1VJTlRfMzIgPSA0XzI5NF85NjdfMjk1O1xuXG4vLyBGaWVsZCBvZmZzZXRzIHdpdGhpbiB0aGUgZW5kLW9mLWNlbnRyYWwtZGlyZWN0b3J5IHJlY29yZC5cbmNvbnN0IEFSQ0hJVkVfRU5UUllfQ09VTlRfT0ZGU0VUID0gMTA7XG5jb25zdCBDRU5UUkFMX0RJUkVDVE9SWV9TVEFSVF9PRkZTRVQgPSAxNjtcblxuLy8gRmllbGQgb2Zmc2V0cyB3aXRoaW4gYSBjZW50cmFsLWRpcmVjdG9yeSBoZWFkZXIuXG5jb25zdCBDRU5UUkFMX0RJUkVDVE9SWV9GTEFHU19PRkZTRVQgPSA4O1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfQ09NUFJFU1NJT05fTUVUSE9EX09GRlNFVCA9IDEwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfQ09NUFJFU1NFRF9TSVpFX09GRlNFVCA9IDIwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfTkFNRV9MRU5HVEhfT0ZGU0VUID0gMjg7XG5jb25zdCBDRU5UUkFMX0RJUkVDVE9SWV9FWFRSQV9MRU5HVEhfT0ZGU0VUID0gMzA7XG5jb25zdCBDRU5UUkFMX0RJUkVDVE9SWV9DT01NRU5UX0xFTkdUSF9PRkZTRVQgPSAzMjtcbmNvbnN0IENFTlRSQUxfRElSRUNUT1JZX0xPQ0FMX0hFQURFUl9PRkZTRVRfT0ZGU0VUID0gNDI7XG5jb25zdCBDRU5UUkFMX0RJUkVDVE9SWV9IRUFERVJfU0laRSA9IDQ2O1xuXG4vLyBGaWVsZCBvZmZzZXRzIHdpdGhpbiBhIGxvY2FsIGZpbGUgaGVhZGVyLlxuY29uc3QgTE9DQUxfSEVBREVSX05BTUVfTEVOR1RIX09GRlNFVCA9IDI2O1xuY29uc3QgTE9DQUxfSEVBREVSX0VYVFJBX0xFTkdUSF9PRkZTRVQgPSAyODtcbmNvbnN0IExPQ0FMX0hFQURFUl9TSVpFID0gMzA7XG5cbmNvbnN0IENPTVBSRVNTSU9OX01FVEhPRF9TVE9SRUQgPSAwO1xuY29uc3QgQ09NUFJFU1NJT05fTUVUSE9EX0RFRkxBVEVEID0gODtcblxuLy8gQml0IDAgb2YgdGhlIGdlbmVyYWwtcHVycG9zZSBmbGFncyBtYXJrcyBhbiBlbmNyeXB0ZWQgZW50cnksIGFuZCBpdCBpcyB0aGUgbG93ZXN0IGJpdCBcdTIwMTQgc28gdGhlXG4vLyBSZW1haW5kZXIgdGVzdHMgaXQgd2l0aG91dCByZWFjaGluZyBmb3IgYSBiaXR3aXNlIG9wZXJhdG9yLlxuY29uc3QgRU5DUllQVEVEX0ZMQUdfRElWSVNPUiA9IDI7XG5cbmNvbnN0IEVOVFJZX05BTUVfU0VQQVJBVE9SID0gJy8nO1xuY29uc3QgV0lORE9XU19EUklWRV9QUkVGSVhfUkVHX0VYUCA9IC9eW0EtWmEtel06LztcblxuLyoqXG4gKiBFeHRyYWN0cyBldmVyeSBlbnRyeSBvZiBhIFpJUCBhcmNoaXZlIGludG8gYSBkaXJlY3RvcnkuXG4gKlxuICogRGlyZWN0b3J5IGVudHJpZXMgYmVjb21lIGRpcmVjdG9yaWVzOyBhIGZpbGUgZW50cnkncyBwYXJlbnRzIGFyZSBjcmVhdGVkIHdoZXRoZXIgb3Igbm90IHRoZSBhcmNoaXZlXG4gKiBkZWNsYXJlZCB0aGVtLiBBbiBlbnRyeSB3aG9zZSBuYW1lIHdvdWxkIGVzY2FwZSB7QGxpbmsgRXh0cmFjdFppcEFyY2hpdmVQYXJhbXMudGFyZ2V0RGlyZWN0b3J5fSBpc1xuICogcmVmdXNlZCByYXRoZXIgdGhhbiB3cml0dGVuICh0aGUgXCJ6aXAgc2xpcFwiIHRyYXZlcnNhbCksIGFzIGlzIGFuIGVuY3J5cHRlZCwgWklQNjQsIG9yXG4gKiB1bmtub3duLWNvbXByZXNzaW9uIGFyY2hpdmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgRXh0cmFjdFppcEFyY2hpdmVQYXJhbXN9LlxuICogQHRocm93cyBBbiB7QGxpbmsgRXJyb3J9IG5hbWluZyB0aGUgcmVhc29uIHdoZW4gdGhlIGFyY2hpdmUgY2Fubm90IGJlIHJlYWQgYXMgd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RaaXBBcmNoaXZlKHBhcmFtczogRXh0cmFjdFppcEFyY2hpdmVQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIGFyY2hpdmUsXG4gICAgZmlsZVN5c3RlbSxcbiAgICB0YXJnZXREaXJlY3RvcnlcbiAgfSA9IHBhcmFtcztcblxuICBmaWxlU3lzdGVtLm1rZGlyU3luYyh0YXJnZXREaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgcmVhZENlbnRyYWxEaXJlY3RvcnkoYXJjaGl2ZSkpIHtcbiAgICBhc3NlcnRTYWZlRW50cnlOYW1lKGVudHJ5Lm5hbWUpO1xuXG4gICAgaWYgKGVudHJ5Lm5hbWUuZW5kc1dpdGgoRU5UUllfTkFNRV9TRVBBUkFUT1IpKSB7XG4gICAgICAvLyBOYW1lZCB3aXRob3V0IGl0cyB0cmFpbGluZyBzZXBhcmF0b3IsIHNvIHRoZSBjcmVhdGVkIHBhdGggcmVhZHMgdGhlIHNhbWUgYXMgZXZlcnkgb3RoZXIgb25lLlxuICAgICAgZmlsZVN5c3RlbS5ta2RpclN5bmMoam9pbih0YXJnZXREaXJlY3RvcnksIGVudHJ5Lm5hbWUuc2xpY2UoMCwgLTEpKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyeVBhdGggPSBqb2luKHRhcmdldERpcmVjdG9yeSwgZW50cnkubmFtZSk7XG4gICAgZmlsZVN5c3RlbS5ta2RpclN5bmMoZGlybmFtZShlbnRyeVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmaWxlU3lzdGVtLndyaXRlRmlsZVN5bmMoZW50cnlQYXRoLCByZWFkRW50cnlEYXRhKGFyY2hpdmUsIGVudHJ5KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWZ1c2VzIGFuIGVudHJ5IG5hbWUgdGhhdCB3b3VsZCBwbGFjZSB0aGUgZXh0cmFjdGVkIGZpbGUgb3V0c2lkZSB0aGUgdGFyZ2V0IGRpcmVjdG9yeS5cbiAqXG4gKiBBbiBhcmNoaXZlIGlzIHVudHJ1c3RlZCBpbnB1dCBldmVuIHdoZW4gd2UgcHVibGlzaGVkIGl0IG91cnNlbHZlcywgYW5kIGV2ZXJ5IG9uZSBvZiB0aGVzZSBzaGFwZXNcbiAqIGVzY2FwZXMgdGhlIHRhcmdldDogYW4gYWJzb2x1dGUgUE9TSVggcGF0aCwgYSBXaW5kb3dzIGRyaXZlLXF1YWxpZmllZCBwYXRoLCBhIGJhY2tzbGFzaCAod2hpY2ggdGhlXG4gKiBaSVAgc3BlY2lmaWNhdGlvbiBmb3JiaWRzIGFzIGEgc2VwYXJhdG9yLCBzbyBpdHMgb25seSB1c2UgaGVyZSBpcyB0byBzbXVnZ2xlIG9uZSBwYXN0IGFcbiAqIGZvcndhcmQtc2xhc2ggY2hlY2spLCBhbmQgYSBgLi5gIHNlZ21lbnQuXG4gKlxuICogQHBhcmFtIGVudHJ5TmFtZSAtIFRoZSBlbnRyeSBuYW1lIGFzIHJlY29yZGVkIGluIHRoZSBhcmNoaXZlLlxuICovXG5mdW5jdGlvbiBhc3NlcnRTYWZlRW50cnlOYW1lKGVudHJ5TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChlbnRyeU5hbWUuc3RhcnRzV2l0aChFTlRSWV9OQU1FX1NFUEFSQVRPUikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFJlZnVzaW5nIHRvIGV4dHJhY3QgdGhlIGFic29sdXRlIGFyY2hpdmUgZW50cnkgJyR7ZW50cnlOYW1lfScuYCk7XG4gIH1cblxuICBpZiAoV0lORE9XU19EUklWRV9QUkVGSVhfUkVHX0VYUC50ZXN0KGVudHJ5TmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFJlZnVzaW5nIHRvIGV4dHJhY3QgdGhlIGRyaXZlLXF1YWxpZmllZCBhcmNoaXZlIGVudHJ5ICcke2VudHJ5TmFtZX0nLmApO1xuICB9XG5cbiAgaWYgKGVudHJ5TmFtZS5pbmNsdWRlcygnXFxcXCcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWZ1c2luZyB0byBleHRyYWN0IHRoZSBhcmNoaXZlIGVudHJ5ICcke2VudHJ5TmFtZX0nLCB3aGljaCB1c2VzIGEgYmFja3NsYXNoIHNlcGFyYXRvci5gKTtcbiAgfVxuXG4gIGlmIChlbnRyeU5hbWUuc3BsaXQoRU5UUllfTkFNRV9TRVBBUkFUT1IpLmluY2x1ZGVzKCcuLicpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWZ1c2luZyB0byBleHRyYWN0IHRoZSBhcmNoaXZlIGVudHJ5ICcke2VudHJ5TmFtZX0nLCB3aGljaCBwb2ludHMgb3V0c2lkZSB0aGUgdGFyZ2V0IGRpcmVjdG9yeS5gKTtcbiAgfVxufVxuXG4vKipcbiAqIExvY2F0ZXMgdGhlIGVuZC1vZi1jZW50cmFsLWRpcmVjdG9yeSByZWNvcmQgYW5kIHJldHVybnMgaXRzIG9mZnNldC5cbiAqXG4gKiBUaGUgcmVjb3JkIHNpdHMgYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBhcmNoaXZlIHVubGVzcyBhIHRyYWlsaW5nIGNvbW1lbnQgZm9sbG93cyBpdCwgc28gaXQgaXMgZm91bmRcbiAqIGJ5IHNjYW5uaW5nIGJhY2t3YXJkcyBvdmVyIHRoZSBjb21tZW50J3MgbWF4aW11bSBsZW5ndGggcmF0aGVyIHRoYW4gYXNzdW1lZCB0byBiZSBhdCBhIGZpeGVkIHBsYWNlLlxuICpcbiAqIEBwYXJhbSBhcmNoaXZlIC0gVGhlIHJhdyBaSVAgYXJjaGl2ZSBieXRlcy5cbiAqIEByZXR1cm5zIFRoZSByZWNvcmQncyBvZmZzZXQuXG4gKi9cbmZ1bmN0aW9uIGZpbmRFbmRPZkNlbnRyYWxEaXJlY3RvcnlPZmZzZXQoYXJjaGl2ZTogQnVmZmVyKTogbnVtYmVyIHtcbiAgY29uc3QgbGFzdFBvc3NpYmxlT2Zmc2V0ID0gYXJjaGl2ZS5sZW5ndGggLSBFTkRfT0ZfQ0VOVFJBTF9ESVJFQ1RPUllfU0laRTtcbiAgY29uc3QgZmlyc3RQb3NzaWJsZU9mZnNldCA9IE1hdGgubWF4KDAsIGxhc3RQb3NzaWJsZU9mZnNldCAtIE1BWF9BUkNISVZFX0NPTU1FTlRfTEVOR1RIKTtcblxuICBmb3IgKGxldCBvZmZzZXQgPSBsYXN0UG9zc2libGVPZmZzZXQ7IG9mZnNldCA+PSBmaXJzdFBvc3NpYmxlT2Zmc2V0OyBvZmZzZXQtLSkge1xuICAgIGlmIChhcmNoaXZlLnJlYWRVSW50MzJMRShvZmZzZXQpID09PSBFTkRfT0ZfQ0VOVFJBTF9ESVJFQ1RPUllfU0lHTkFUVVJFKSB7XG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignVGhlIGFyY2hpdmUgaXMgbm90IGEgWklQIGZpbGU6IGl0cyBlbmQtb2YtY2VudHJhbC1kaXJlY3RvcnkgcmVjb3JkIGlzIG1pc3NpbmcuJyk7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGNlbnRyYWwgZGlyZWN0b3J5LCB3aGljaCBpcyB0aGUgYXJjaGl2ZSdzIGF1dGhvcml0YXRpdmUgaW5kZXggb2YgaXRzIGVudHJpZXMuXG4gKlxuICogQHBhcmFtIGFyY2hpdmUgLSBUaGUgcmF3IFpJUCBhcmNoaXZlIGJ5dGVzLlxuICogQHJldHVybnMgT25lIHtAbGluayBaaXBFbnRyeX0gcGVyIGVudHJ5LCBpbiB0aGUgb3JkZXIgdGhlIGFyY2hpdmUgbGlzdHMgdGhlbS5cbiAqL1xuZnVuY3Rpb24gcmVhZENlbnRyYWxEaXJlY3RvcnkoYXJjaGl2ZTogQnVmZmVyKTogWmlwRW50cnlbXSB7XG4gIGNvbnN0IGVuZE9mQ2VudHJhbERpcmVjdG9yeU9mZnNldCA9IGZpbmRFbmRPZkNlbnRyYWxEaXJlY3RvcnlPZmZzZXQoYXJjaGl2ZSk7XG4gIGNvbnN0IGVudHJ5Q291bnQgPSBhcmNoaXZlLnJlYWRVSW50MTZMRShlbmRPZkNlbnRyYWxEaXJlY3RvcnlPZmZzZXQgKyBBUkNISVZFX0VOVFJZX0NPVU5UX09GRlNFVCk7XG4gIGxldCBlbnRyeU9mZnNldCA9IGFyY2hpdmUucmVhZFVJbnQzMkxFKGVuZE9mQ2VudHJhbERpcmVjdG9yeU9mZnNldCArIENFTlRSQUxfRElSRUNUT1JZX1NUQVJUX09GRlNFVCk7XG5cbiAgaWYgKGVudHJ5Q291bnQgPT09IFNBVFVSQVRFRF9VSU5UXzE2IHx8IGVudHJ5T2Zmc2V0ID09PSBTQVRVUkFURURfVUlOVF8zMikge1xuICAgIHRocm93IG5ldyBFcnJvcignWklQNjQgYXJjaGl2ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuJyk7XG4gIH1cblxuICBjb25zdCBlbnRyaWVzOiBaaXBFbnRyeVtdID0gW107XG4gIGZvciAobGV0IGVudHJ5SW5kZXggPSAwOyBlbnRyeUluZGV4IDwgZW50cnlDb3VudDsgZW50cnlJbmRleCsrKSB7XG4gICAgaWYgKGFyY2hpdmUucmVhZFVJbnQzMkxFKGVudHJ5T2Zmc2V0KSAhPT0gQ0VOVFJBTF9ESVJFQ1RPUllfSEVBREVSX1NJR05BVFVSRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgYXJjaGl2ZSdzIGNlbnRyYWwgZGlyZWN0b3J5IGlzIGNvcnJ1cHQgYXQgZW50cnkgJHtTdHJpbmcoZW50cnlJbmRleCl9LmApO1xuICAgIH1cblxuICAgIGNvbnN0IGZsYWdzID0gYXJjaGl2ZS5yZWFkVUludDE2TEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9GTEFHU19PRkZTRVQpO1xuICAgIGlmIChmbGFncyAlIEVOQ1JZUFRFRF9GTEFHX0RJVklTT1IgPT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRW5jcnlwdGVkIFpJUCBhcmNoaXZlcyBhcmUgbm90IHN1cHBvcnRlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wcmVzc2VkU2l6ZSA9IGFyY2hpdmUucmVhZFVJbnQzMkxFKGVudHJ5T2Zmc2V0ICsgQ0VOVFJBTF9ESVJFQ1RPUllfQ09NUFJFU1NFRF9TSVpFX09GRlNFVCk7XG4gICAgY29uc3QgbG9jYWxIZWFkZXJPZmZzZXQgPSBhcmNoaXZlLnJlYWRVSW50MzJMRShlbnRyeU9mZnNldCArIENFTlRSQUxfRElSRUNUT1JZX0xPQ0FMX0hFQURFUl9PRkZTRVRfT0ZGU0VUKTtcbiAgICBpZiAoY29tcHJlc3NlZFNpemUgPT09IFNBVFVSQVRFRF9VSU5UXzMyIHx8IGxvY2FsSGVhZGVyT2Zmc2V0ID09PSBTQVRVUkFURURfVUlOVF8zMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdaSVA2NCBhcmNoaXZlcyBhcmUgbm90IHN1cHBvcnRlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lTGVuZ3RoID0gYXJjaGl2ZS5yZWFkVUludDE2TEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9OQU1FX0xFTkdUSF9PRkZTRVQpO1xuICAgIGNvbnN0IG5hbWVPZmZzZXQgPSBlbnRyeU9mZnNldCArIENFTlRSQUxfRElSRUNUT1JZX0hFQURFUl9TSVpFO1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBjb21wcmVzc2VkU2l6ZSxcbiAgICAgIGNvbXByZXNzaW9uTWV0aG9kOiBhcmNoaXZlLnJlYWRVSW50MTZMRShlbnRyeU9mZnNldCArIENFTlRSQUxfRElSRUNUT1JZX0NPTVBSRVNTSU9OX01FVEhPRF9PRkZTRVQpLFxuICAgICAgbG9jYWxIZWFkZXJPZmZzZXQsXG4gICAgICBuYW1lOiBhcmNoaXZlLnRvU3RyaW5nKCd1dGYtOCcsIG5hbWVPZmZzZXQsIG5hbWVPZmZzZXQgKyBuYW1lTGVuZ3RoKVxuICAgIH0pO1xuXG4gICAgZW50cnlPZmZzZXQgPSBuYW1lT2Zmc2V0XG4gICAgICArIG5hbWVMZW5ndGhcbiAgICAgICsgYXJjaGl2ZS5yZWFkVUludDE2TEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9FWFRSQV9MRU5HVEhfT0ZGU0VUKVxuICAgICAgKyBhcmNoaXZlLnJlYWRVSW50MTZMRShlbnRyeU9mZnNldCArIENFTlRSQUxfRElSRUNUT1JZX0NPTU1FTlRfTEVOR1RIX09GRlNFVCk7XG4gIH1cblxuICByZXR1cm4gZW50cmllcztcbn1cblxuLyoqXG4gKiBSZWFkcyBhbmQgZGVjb21wcmVzc2VzIG9uZSBlbnRyeSdzIGJ5dGVzLlxuICpcbiAqIFRoZSBkYXRhJ3Mgc3RhcnQgaXMgY29tcHV0ZWQgZnJvbSB0aGUgTE9DQUwgaGVhZGVyIHJhdGhlciB0aGFuIHRoZSBjZW50cmFsIG9uZTogdGhlIHR3byBjYXJyeVxuICogaW5kZXBlbmRlbnQgbmFtZSBhbmQgZXh0cmEtZmllbGQgbGVuZ3RocywgYW5kIG9ubHkgdGhlIGxvY2FsIHBhaXIgZGVzY3JpYmVzIHdoZXJlIHRoZSBieXRlc1xuICogYWN0dWFsbHkgYmVnaW4uXG4gKlxuICogQHBhcmFtIGFyY2hpdmUgLSBUaGUgcmF3IFpJUCBhcmNoaXZlIGJ5dGVzLlxuICogQHBhcmFtIGVudHJ5IC0gVGhlIGVudHJ5LCBhcyByZWFkIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5LlxuICogQHJldHVybnMgVGhlIGVudHJ5J3MgdW5jb21wcmVzc2VkIGNvbnRlbnQuXG4gKi9cbmZ1bmN0aW9uIHJlYWRFbnRyeURhdGEoYXJjaGl2ZTogQnVmZmVyLCBlbnRyeTogWmlwRW50cnkpOiBCdWZmZXIge1xuICBpZiAoYXJjaGl2ZS5yZWFkVUludDMyTEUoZW50cnkubG9jYWxIZWFkZXJPZmZzZXQpICE9PSBMT0NBTF9GSUxFX0hFQURFUl9TSUdOQVRVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBhcmNoaXZlIGVudHJ5ICcke2VudHJ5Lm5hbWV9JyBoYXMgYSBjb3JydXB0IGxvY2FsIGhlYWRlci5gKTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFPZmZzZXQgPSBlbnRyeS5sb2NhbEhlYWRlck9mZnNldFxuICAgICsgTE9DQUxfSEVBREVSX1NJWkVcbiAgICArIGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5LmxvY2FsSGVhZGVyT2Zmc2V0ICsgTE9DQUxfSEVBREVSX05BTUVfTEVOR1RIX09GRlNFVClcbiAgICArIGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5LmxvY2FsSGVhZGVyT2Zmc2V0ICsgTE9DQUxfSEVBREVSX0VYVFJBX0xFTkdUSF9PRkZTRVQpO1xuICBjb25zdCBkYXRhRW5kID0gZGF0YU9mZnNldCArIGVudHJ5LmNvbXByZXNzZWRTaXplO1xuICBpZiAoZGF0YUVuZCA+IGFyY2hpdmUubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgYXJjaGl2ZSBpcyB0cnVuY2F0ZWQ6IGVudHJ5ICcke2VudHJ5Lm5hbWV9JyBydW5zIHBhc3QgaXRzIGVuZC5gKTtcbiAgfVxuXG4gIGNvbnN0IGNvbXByZXNzZWREYXRhID0gYXJjaGl2ZS5zdWJhcnJheShkYXRhT2Zmc2V0LCBkYXRhRW5kKTtcbiAgc3dpdGNoIChlbnRyeS5jb21wcmVzc2lvbk1ldGhvZCkge1xuICAgIGNhc2UgQ09NUFJFU1NJT05fTUVUSE9EX0RFRkxBVEVEOiB7XG4gICAgICByZXR1cm4gaW5mbGF0ZVJhd1N5bmMoY29tcHJlc3NlZERhdGEpO1xuICAgIH1cbiAgICBjYXNlIENPTVBSRVNTSU9OX01FVEhPRF9TVE9SRUQ6IHtcbiAgICAgIHJldHVybiBjb21wcmVzc2VkRGF0YTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeS5uYW1lfScgdXNlcyB1bnN1cHBvcnRlZCBjb21wcmVzc2lvbiBtZXRob2QgJHtTdHJpbmcoZW50cnkuY29tcHJlc3Npb25NZXRob2QpfS5gKTtcbiAgICB9XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QkEsU0FBUyxzQkFBc0I7QUFFL0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUF5RVAsTUFBTSxxQ0FBcUM7QUFDM0MsTUFBTSxxQ0FBcUM7QUFDM0MsTUFBTSw4QkFBOEI7QUFFcEMsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSw2QkFBNkI7QUFJbkMsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxvQkFBb0I7QUFHMUIsTUFBTSw2QkFBNkI7QUFDbkMsTUFBTSxpQ0FBaUM7QUFHdkMsTUFBTSxpQ0FBaUM7QUFDdkMsTUFBTSw4Q0FBOEM7QUFDcEQsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSx1Q0FBdUM7QUFDN0MsTUFBTSx3Q0FBd0M7QUFDOUMsTUFBTSwwQ0FBMEM7QUFDaEQsTUFBTSwrQ0FBK0M7QUFDckQsTUFBTSxnQ0FBZ0M7QUFHdEMsTUFBTSxrQ0FBa0M7QUFDeEMsTUFBTSxtQ0FBbUM7QUFDekMsTUFBTSxvQkFBb0I7QUFFMUIsTUFB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