@mnaoumov/obsidian-lib 5.2.1 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/@types/obsidian-integration-testing.d.cts +1 -1
- package/dist/lib/cjs/__merged.cjs +8 -24
- package/dist/lib/cjs/__merged.d.cts +4 -4
- package/dist/lib/cjs/async-with-notice.cjs +7 -7
- package/dist/lib/cjs/backlink-index.cjs +3 -3
- package/dist/lib/cjs/callout.cjs +2 -2
- package/dist/lib/cjs/case-insensitive-file-index.cjs +5 -5
- package/dist/lib/cjs/community-plugins.cjs +3 -3
- package/dist/lib/cjs/components/async-error-handler-component.cjs +2 -2
- package/dist/lib/cjs/components/monkey-around-component.cjs +3 -3
- package/dist/lib/cjs/components/plugin-context-component.cjs +1 -3
- package/dist/lib/cjs/components/plugin-context-component.d.cts +1 -2
- package/dist/lib/cjs/components/plugin-gate-component.cjs +15 -15
- package/dist/lib/cjs/components/plugin-notice-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-suggestion-component.cjs +5 -5
- package/dist/lib/cjs/components/release-notes-component.cjs +2 -2
- package/dist/lib/cjs/components/rename-delete-handler-component.cjs +10 -10
- package/dist/lib/cjs/css-class.cjs +1 -2
- package/dist/lib/cjs/css-class.d.cts +3 -11
- package/dist/lib/cjs/dataview.cjs +4 -4
- package/dist/lib/cjs/debug.cjs +2 -22
- package/dist/lib/cjs/debug.d.cts +0 -5
- package/dist/lib/cjs/frontmatter.cjs +3 -3
- package/dist/lib/cjs/frontmatter.d.cts +1 -1
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/html-element.cjs +1 -1
- package/dist/lib/cjs/html-element.d.cts +1 -1
- package/dist/lib/cjs/i18n/i18n.cjs +1 -1
- package/dist/lib/cjs/i18n/i18n.d.cts +1 -1
- package/dist/lib/cjs/i18n/locales/en.cjs +2 -2
- package/dist/lib/cjs/i18n/locales/en.d.cts +1 -1
- package/dist/lib/cjs/i18n/locales/translations-map.d.cts +1 -1
- package/dist/lib/cjs/index.cjs +4 -4
- package/dist/lib/cjs/index.d.cts +1 -1
- package/dist/lib/cjs/library-styles.cjs +7 -14
- package/dist/lib/cjs/library-styles.d.cts +9 -23
- package/dist/lib/cjs/library.cjs +1 -4
- package/dist/lib/cjs/library.d.cts +3 -11
- package/dist/lib/cjs/link.cjs +3 -3
- package/dist/lib/cjs/markdown.cjs +3 -3
- package/dist/lib/cjs/metadata-cache.cjs +4 -4
- package/dist/lib/cjs/modals/alert.cjs +2 -2
- package/dist/lib/cjs/modals/confirm.cjs +3 -3
- package/dist/lib/cjs/modals/prompt.cjs +3 -3
- package/dist/lib/cjs/obsidian-lib-state.cjs +148 -0
- package/dist/lib/cjs/obsidian-lib-state.d.cts +30 -0
- package/dist/lib/cjs/path-settings.cjs +6 -6
- package/dist/lib/cjs/plugin/index.cjs +1 -4
- package/dist/lib/cjs/plugin/index.d.cts +0 -1
- package/dist/lib/cjs/plugin/plugin-api.cjs +3 -3
- package/dist/lib/cjs/plugin/plugin-api.d.cts +5 -41
- package/dist/lib/cjs/plugin/plugin-context.cjs +1 -6
- package/dist/lib/cjs/plugin/plugin-install-state.cjs +5 -5
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +1 -40
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +8 -62
- package/dist/lib/cjs/plugin/plugin.cjs +2 -2
- package/dist/lib/cjs/plugin/plugin.d.cts +1 -1
- package/dist/lib/cjs/popovers/popover.cjs +3 -3
- package/dist/lib/cjs/queue.cjs +4 -4
- package/dist/lib/cjs/resource-lock.cjs +9 -9
- package/dist/lib/cjs/vault-delete.cjs +2 -2
- package/dist/lib/cjs/vault-transaction.cjs +17 -2
- package/dist/lib/cjs/vault-transaction.d.cts +2 -1
- package/dist/lib/cjs/vault.cjs +2 -2
- package/dist/lib/esm/@types/obsidian-integration-testing.d.mts +1 -1
- package/dist/lib/esm/__merged.d.mts +4 -4
- package/dist/lib/esm/__merged.mjs +8 -24
- package/dist/lib/esm/async-with-notice.mjs +7 -7
- package/dist/lib/esm/backlink-index.mjs +3 -3
- package/dist/lib/esm/callout.mjs +2 -2
- package/dist/lib/esm/case-insensitive-file-index.mjs +5 -5
- package/dist/lib/esm/community-plugins.mjs +3 -3
- package/dist/lib/esm/components/async-error-handler-component.mjs +2 -2
- package/dist/lib/esm/components/monkey-around-component.mjs +3 -3
- package/dist/lib/esm/components/plugin-context-component.d.mts +1 -2
- package/dist/lib/esm/components/plugin-context-component.mjs +1 -3
- package/dist/lib/esm/components/plugin-gate-component.mjs +15 -15
- package/dist/lib/esm/components/plugin-notice-component.mjs +5 -5
- package/dist/lib/esm/components/plugin-suggestion-component.mjs +5 -5
- package/dist/lib/esm/components/release-notes-component.mjs +2 -2
- package/dist/lib/esm/components/rename-delete-handler-component.mjs +10 -10
- package/dist/lib/esm/css-class.d.mts +3 -11
- package/dist/lib/esm/css-class.mjs +1 -2
- package/dist/lib/esm/dataview.mjs +4 -4
- package/dist/lib/esm/debug.d.mts +0 -5
- package/dist/lib/esm/debug.mjs +3 -26
- package/dist/lib/esm/frontmatter.d.mts +1 -1
- package/dist/lib/esm/frontmatter.mjs +3 -3
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/html-element.d.mts +1 -1
- package/dist/lib/esm/html-element.mjs +1 -1
- package/dist/lib/esm/i18n/i18n.d.mts +1 -1
- package/dist/lib/esm/i18n/i18n.mjs +1 -1
- package/dist/lib/esm/i18n/locales/en.d.mts +1 -1
- package/dist/lib/esm/i18n/locales/en.mjs +2 -2
- package/dist/lib/esm/i18n/locales/translations-map.d.mts +1 -1
- package/dist/lib/esm/index.d.mts +1 -1
- package/dist/lib/esm/index.mjs +3 -3
- package/dist/lib/esm/library-styles.d.mts +9 -23
- package/dist/lib/esm/library-styles.mjs +7 -12
- package/dist/lib/esm/library.d.mts +3 -11
- package/dist/lib/esm/library.mjs +1 -3
- package/dist/lib/esm/link.mjs +3 -3
- package/dist/lib/esm/markdown.mjs +3 -3
- package/dist/lib/esm/metadata-cache.mjs +4 -4
- package/dist/lib/esm/modals/alert.mjs +2 -2
- package/dist/lib/esm/modals/confirm.mjs +3 -3
- package/dist/lib/esm/modals/prompt.mjs +3 -3
- package/dist/lib/esm/obsidian-lib-state.d.mts +30 -0
- package/dist/lib/esm/obsidian-lib-state.mjs +59 -0
- package/dist/lib/esm/path-settings.mjs +6 -6
- package/dist/lib/esm/plugin/index.d.mts +0 -1
- package/dist/lib/esm/plugin/index.mjs +1 -3
- package/dist/lib/esm/plugin/plugin-api.d.mts +5 -41
- package/dist/lib/esm/plugin/plugin-api.mjs +3 -3
- package/dist/lib/esm/plugin/plugin-context.mjs +1 -7
- package/dist/lib/esm/plugin/plugin-install-state.mjs +5 -5
- package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +8 -62
- package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +1 -37
- package/dist/lib/esm/plugin/plugin.d.mts +1 -1
- package/dist/lib/esm/plugin/plugin.mjs +2 -2
- package/dist/lib/esm/popovers/popover.mjs +3 -3
- package/dist/lib/esm/queue.mjs +4 -4
- package/dist/lib/esm/resource-lock.mjs +9 -9
- package/dist/lib/esm/vault-delete.mjs +2 -2
- package/dist/lib/esm/vault-transaction.d.mts +2 -1
- package/dist/lib/esm/vault-transaction.mjs +17 -2
- package/dist/lib/esm/vault.mjs +2 -2
- package/dist/styles.css +169 -169
- package/package.json +1 -1
- package/dist/lib/cjs/obsidian-dev-utils-state.cjs +0 -177
- package/dist/lib/cjs/obsidian-dev-utils-state.d.cts +0 -50
- package/dist/lib/cjs/plugin/plugin-api-schema.cjs +0 -127
- package/dist/lib/cjs/plugin/plugin-api-schema.d.cts +0 -37
- package/dist/lib/esm/obsidian-dev-utils-state.d.mts +0 -50
- package/dist/lib/esm/obsidian-dev-utils-state.mjs +0 -86
- package/dist/lib/esm/plugin/plugin-api-schema.d.mts +0 -37
- package/dist/lib/esm/plugin/plugin-api-schema.mjs +0 -41
- package/plugin/plugin-api-schema/package.json +0 -6
|
@@ -133,7 +133,7 @@ var import_obsidian = require('obsidian');
|
|
|
133
133
|
var import_css_class = require('../css-class.cjs');
|
|
134
134
|
var import_html_element = require('../html-element.cjs');
|
|
135
135
|
var import_i18n = require('../i18n/i18n.cjs');
|
|
136
|
-
var
|
|
136
|
+
var import_obsidian_lib_state = require('../obsidian-lib-state.cjs');
|
|
137
137
|
var import_plugin_context = require('../plugin/plugin-context.cjs');
|
|
138
138
|
var import_component_ex = require('./component-ex.cjs');
|
|
139
139
|
var import_monkey_around_component = require('./monkey-around-component.cjs');
|
|
@@ -331,7 +331,7 @@ class PluginNoticeComponent extends import_component_ex.ComponentEx {
|
|
|
331
331
|
appendCloseButton(params) {
|
|
332
332
|
const { contentEl, getNotice, onCloseClick } = params;
|
|
333
333
|
const closeButtonEl = contentEl.createEl("button", {
|
|
334
|
-
attr: { "aria-label": (0, import_i18n.t)(($) => $.
|
|
334
|
+
attr: { "aria-label": (0, import_i18n.t)(($) => $.obsidianLib.notices.closeAriaLabel) }
|
|
335
335
|
});
|
|
336
336
|
(0, import_plugin_context.addPluginCssClasses)(closeButtonEl, import_css_class.CssClass.PluginNoticeCloseButton);
|
|
337
337
|
closeButtonEl.addClasses([import_css_class.CssClass.ClickableIcon, import_css_class.CssClass.ModalHeaderButton]);
|
|
@@ -404,7 +404,7 @@ class PluginNoticeComponent extends import_component_ex.ComponentEx {
|
|
|
404
404
|
}
|
|
405
405
|
if (abortController) {
|
|
406
406
|
const cancelButton = new import_obsidian.ButtonComponent(createDiv());
|
|
407
|
-
cancelButton.setButtonText(cancelButtonText ?? (0, import_i18n.t)(($) => $.
|
|
407
|
+
cancelButton.setButtonText(cancelButtonText ?? (0, import_i18n.t)(($) => $.obsidianLib.buttons.cancel));
|
|
408
408
|
(0, import_plugin_context.addPluginCssClasses)(cancelButton.buttonEl, import_css_class.CssClass.CancelButton);
|
|
409
409
|
cancelButton.buttonEl.addEventListener("click", () => {
|
|
410
410
|
abortController.abort();
|
|
@@ -484,7 +484,7 @@ class PluginNoticeComponent extends import_component_ex.ComponentEx {
|
|
|
484
484
|
return this.getPermanentNotices().get(this.pluginName) ?? null;
|
|
485
485
|
}
|
|
486
486
|
getPermanentNotices() {
|
|
487
|
-
return (0,
|
|
487
|
+
return (0, import_obsidian_lib_state.getObsidianLibState)(PERMANENT_NOTICES_STATE_KEY, /* @__PURE__ */ new Map()).value;
|
|
488
488
|
}
|
|
489
489
|
/**
|
|
490
490
|
* Measures a leading `<plugin name>:` in a message, together with the whitespace around the colon and
|
|
@@ -687,4 +687,4 @@ function isTextNode(node) {
|
|
|
687
687
|
PluginNoticeComponent,
|
|
688
688
|
PluginNoticeMode
|
|
689
689
|
});
|
|
690
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCBtYW5hZ2VzIGRpc3BsYXlpbmcgbm90aWNlcyB0byB0aGUgdXNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFZhbHVlUHJvdmlkZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdmFsdWUtcHJvdmlkZXInO1xuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBzbmFwc2hvdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hcnJheSc7XG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi92YWx1ZS1wcm92aWRlcic7XG5pbXBvcnQge1xuICBCdXR0b25Db21wb25lbnQsXG4gIE5vdGljZSxcbiAgc2V0SWNvblxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IGFwcGVuZENvZGVCbG9jayB9IGZyb20gJy4uL2h0bWwtZWxlbWVudC50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSB9IGZyb20gJy4uL29ic2lkaWFuLWRldi11dGlscy1zdGF0ZS50cyc7XG5pbXBvcnQgeyBhZGRQbHVnaW5Dc3NDbGFzc2VzIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1jb250ZXh0LnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuaW1wb3J0IHsgTW9ua2V5QXJvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi9tb25rZXktYXJvdW5kLWNvbXBvbmVudC50cyc7XG5cbmNvbnN0IFBFUk1BTkVOVF9OT1RJQ0VTX1NUQVRFX0tFWSA9ICdwbHVnaW4tbm90aWNlLWNvbXBvbmVudDpwZXJtYW5lbnQtbm90aWNlcyc7XG5jb25zdCBQRVJNQU5FTlRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA9IDA7XG5jb25zdCBERUZBVUxUX0RFTEFZX0JFRk9SRV9TSE9XX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbi8vIE9ic2lkaWFuJ3Mgb3duIGRlZmF1bHQgbm90aWNlIGR1cmF0aW9uLCBhcHBsaWVkIGJ5IHRoZSBgTm90aWNlYCBjb25zdHJ1Y3RvciB3aGVuIG5vbmUgaXMgZ2l2ZW4uIEl0IGlzXG4vLyByZXBlYXRlZCBoZXJlIGJlY2F1c2UgcmVzdGFydGluZyB0aGUgY291bnRkb3duIG9uIGFuIGFwcGVuZCBnb2VzIHRocm91Z2ggYHNldEF1dG9IaWRlYCwgd2hpY2ggdGFrZXMgYW5cbi8vIGV4cGxpY2l0IGR1cmF0aW9uIGFuZCBzbyBjYW5ub3QgZmFsbCBiYWNrIHRvIHRoYXQgZGVmYXVsdCBpdHNlbGYuXG5jb25zdCBPQlNJRElBTl9ERUZBVUxUX05PVElDRV9EVVJBVElPTl9JTl9NSUxMSVNFQ09ORFMgPSA0MDAwO1xuXG4vLyBFbGVtZW50cyBhIHVzZXIgY2xpY2tzIHRvIGFjdCBvbiB0aGVtIHJhdGhlciB0aGFuIHRvIGRpc21pc3MgdGhlIG5vdGljZS4gQSBjbGljayBsYW5kaW5nIG9uIChvclxuLy8gaW5zaWRlKSBvbmUgb2YgdGhlc2UgaXMga2VwdCBmcm9tIGJ1YmJsaW5nIHRvIHRoZSBub3RpY2UsIHNvIHRoZSBub3RpY2Ugc3RheXMgb3Blbi5cbmNvbnN0IElOVEVSQUNUSVZFX0VMRU1FTlRfU0VMRUNUT1IgPSAnYSwgYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgbGFiZWwsIFtjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdLCBbcm9sZT1cImJ1dHRvblwiXSwgW3JvbGU9XCJsaW5rXCJdLCBbcm9sZT1cImNoZWNrYm94XCJdLCBbcm9sZT1cInRhYlwiXSwgW3JvbGU9XCJtZW51aXRlbVwiXSc7XG5cbi8qKlxuICogSG93IGEgbmV3IG5vdGljZSByZWxhdGVzIHRvIHRoZSBwbHVnaW4ncyBjdXJyZW50IG5vdGljZSDigJQgdGhlIG9uZSBvY2N1cHlpbmcgdGhlIHNpbmdsZSBwZXItcGx1Z2luXG4gKiBzbG90IHRoaXMgY29tcG9uZW50IGtlZXBzLlxuICpcbiAqIFJhdyBgbmV3IE5vdGljZSguLi4pYCBjYWxscyBhbHdheXMgcGlsZSB1cCwgd2hpY2ggaXMgcmFyZWx5IHdoYXQgYSBwbHVnaW4gd2FudHM6IHVzdWFsbHkgb25seSB0aGVcbiAqIGxhdGVzdCBtZXNzYWdlIG1hdHRlcnMuIFNvIHRoZSBzbG90IGV4aXN0cywgYW5kIHRoaXMgY2hvb3NlcyB3aGF0IGEgbmV3IG1lc3NhZ2UgZG9lcyB3aXRoIGl0LlxuICovXG5leHBvcnQgZW51bSBQbHVnaW5Ob3RpY2VNb2RlIHtcbiAgLyoqXG4gICAqIEFkZHMgdGhlIG1lc3NhZ2UgdG8gdGhlIGN1cnJlbnQgbm90aWNlLCBzbyBib3RoIG1lc3NhZ2VzIHN0YXkgdmlzaWJsZSBpbiBhIHNpbmdsZSBub3RpY2Ug4oCUIGZvciBhXG4gICAqIHJ1bm5pbmcgYWNjb3VudCBvZiBhbiBvcGVyYXRpb24uIFRoZSBjb3VudGRvd24gcmVzdGFydHMsIHNvIGFuIGFwcGVuZGVkIG1lc3NhZ2UgaXMgcmVhZGFibGUgZm9yIGFcbiAgICogZnVsbCBkdXJhdGlvbiByYXRoZXIgdGhhbiBpbmhlcml0aW5nIHRoZSByZW1haW5zIG9mIHRoZSBjdXJyZW50IG9uZS5cbiAgICpcbiAgICogRmFsbHMgYmFjayB0byB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZS5SZXBsYWNlfSB3aGVuIHRoZXJlIGlzIG5vIGN1cnJlbnQgbm90aWNlIG9uIHNjcmVlbiAoaXQgd2FzXG4gICAqIG5ldmVyIHNob3duLCBvciBpdCBoYXMgc2luY2UgYmVlbiBkaXNtaXNzZWQpLlxuICAgKi9cbiAgQXBwZW5kID0gJ2FwcGVuZCcsXG5cbiAgLyoqXG4gICAqIEhpZGVzIHRoZSBjdXJyZW50IG5vdGljZSBhbmQgc2hvd3MgdGhpcyBvbmUgaW4gaXRzIHBsYWNlLCBzbyBvbmx5IHRoZSBsYXRlc3QgbWVzc2FnZSBpcyBvbiBzY3JlZW4uXG4gICAqIFRoaXMgaXMgdGhlIGRlZmF1bHQsIGFuZCB0aGUgcmVhc29uIHRoZSBzbG90IGV4aXN0cy5cbiAgICovXG4gIFJlcGxhY2UgPSAncmVwbGFjZScsXG5cbiAgLyoqXG4gICAqIFNob3dzIHRoZSBtZXNzYWdlIGFzIGl0cyBvd24gbm90aWNlLCBsZWF2aW5nIHRoZSBjdXJyZW50IG9uZSBhbG9uZTogYm90aCBhcmUgb24gc2NyZWVuLCBwaWxlZCB1cFxuICAgKiBsaWtlIHBsYWluIGBuZXcgTm90aWNlKC4uLilgIGNhbGxzLiBBIHNlcGFyYXRlIG5vdGljZSBuZXZlciByZXBsYWNlcywgYW5kIGlzIG5ldmVyIHJlcGxhY2VkIGJ5LCBhXG4gICAqIHNsb3Qgbm90aWNlOyBhbnkgbnVtYmVyIG9mIHRoZW0gY29leGlzdC4gVGhleSBhcmUgc3RpbGwgaGlkZGVuIHRvZ2V0aGVyIG9uIHVubG9hZC5cbiAgICovXG4gIFNlcGFyYXRlID0gJ3NlcGFyYXRlJ1xufVxuXG4vKipcbiAqIFRoZSBldmVudCBwYXNzZWQgdG8ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLm9uQ2xvc2VDbGlja30gd2hlbiB0aGUgbm90aWNlJ3NcbiAqIGNsb3NlIChYKSBidXR0b24gaXMgY2xpY2tlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Ob3RpY2VDbG9zZUNsaWNrRXZlbnQge1xuICAvKipcbiAgICogQ2FuY2VscyB0aGUgY2xvc2UsIGxlYXZpbmcgdGhlIG5vdGljZSBvcGVuLlxuICAgKi9cbiAgY2FuY2VsOiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEgaGFuZGxlIHRvIGEgZGVsYXllZCBub3RpY2UgY3JlYXRlZCBieSB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2VBZnRlckRlbGF5fS4gSXQgaXMgYVxuICoge0BsaW5rIERpc3Bvc2FibGV9IChzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIGB1c2luZ2ApIHRoYXQgYWxzbyBsZXRzIHRoZSBjb250ZW50IGJlIHVwZGF0ZWQgd2hpbGUgdGhlXG4gKiBub3RpY2UgaXMgc2hvd24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50RGVsYXllZE5vdGljZSBleHRlbmRzIERpc3Bvc2FibGUge1xuICAvKipcbiAgICogUmVwbGFjZXMgdGhpcyBoYW5kbGUncyBtZXNzYWdlLCByZS1hcHBseWluZyB0aGUgcGx1Z2luLW5hbWUgcHJlZml4LCB0aGUgaW50ZXJhY3RpdmUtY2xpY2sgZ3VhcmQsIGFuZFxuICAgKiB0aGUgQ2FuY2VsIGJ1dHRvbi4gVXNlZnVsIGZvciByZXBvcnRpbmcgcHJvZ3Jlc3MuIElmIHRoZSBkZWxheSBoYXMgbm90IGVsYXBzZWQgeWV0LCB0aGUgbmV3IGNvbnRlbnRcbiAgICogYmVjb21lcyB3aGF0IGlzIHNob3duIG9uY2UgaXQgZG9lcy5cbiAgICpcbiAgICogT25seSB0aGlzIGhhbmRsZSdzIG93biBtZXNzYWdlIGlzIHJld3JpdHRlbjogd2hlbiB0aGUgbm90aWNlIHdhcyBqb2luZWQgcmF0aGVyIHRoYW4gb3BlbmVkIChzZWVcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VBZnRlckRlbGF5UGFyYW1zLm1vZGV9KSwgdGhlIG1lc3NhZ2VzIGFscmVhZHkgaW4gaXQgYXJlIGxlZnRcbiAgICogYWxvbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZW50IC0gVGhlIG5ldyBub3RpY2UgY29udGVudC5cbiAgICovXG4gIHNldENvbnRlbnQ6IChjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZUFmdGVyRGVsYXl9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VBZnRlckRlbGF5UGFyYW1zIHtcbiAgLyoqXG4gICAqIFdoZW4gcHJvdmlkZWQsIGEgQ2FuY2VsIGJ1dHRvbiBpcyBhcHBlbmRlZCB0byB0aGUgbm90aWNlOyBjbGlja2luZyBpdCBhYm9ydHMgdGhpcyBjb250cm9sbGVyLiBXaGVuXG4gICAqIG9taXR0ZWQsIG5vIENhbmNlbCBidXR0b24gaXMgc2hvd24uXG4gICAqL1xuICByZWFkb25seSBhYm9ydENvbnRyb2xsZXI/OiBBYm9ydENvbnRyb2xsZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IG9mIHRoZSBDYW5jZWwgYnV0dG9uIHNob3duIHdoZW4ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VBZnRlckRlbGF5UGFyYW1zLmFib3J0Q29udHJvbGxlcn1cbiAgICogaXMgcHJvdmlkZWQuIFdoZW4gb21pdHRlZCwgdGhlIGxvY2FsaXplZCBgQ2FuY2VsYCBsYWJlbCBpcyB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FuY2VsQnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5vdGljZSBjb250ZW50LCByZXNvbHZlZCBsYXppbHkgb25seSBpZiB0aGUgZGVsYXkgZWxhcHNlcyDigJQgc28gYW4gb3BlcmF0aW9uIHRoYXQgZmluaXNoZXNcbiAgICogc29vbmVyIG5ldmVyIGJ1aWxkcyBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IFZhbHVlUHJvdmlkZXI8RG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEhvdyBsb25nIHRoZSBvcGVyYXRpb24gbXVzdCBydW4gYmVmb3JlIHRoZSBub3RpY2UgaXMgc2hvd24uIE9wZXJhdGlvbnMgdGhhdCBmaW5pc2ggc29vbmVyIG5ldmVyXG4gICAqIHNob3cgYSBub3RpY2UsIGF2b2lkaW5nIGEgZGlzdHJhY3RpbmcgZmxhc2guXG4gICAqXG4gICAqIEBkZWZhdWx0IGA1MDBgXG4gICAqL1xuICByZWFkb25seSBkZWxheUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhpcyBub3RpY2UgcmVsYXRlcyB0byB0aGUgcGx1Z2luJ3MgY3VycmVudCBub3RpY2Ug4oCUIHNlZSB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZX0uXG4gICAqXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VNb2RlLlNlcGFyYXRlfSBpcyB3b3J0aCBjb25zaWRlcmluZyBmb3IgYSBsb25nIG9wZXJhdGlvbjogb24gdGhlIGRlZmF1bHRcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZU1vZGUuUmVwbGFjZX0gdGhlIHByb2dyZXNzIG5vdGljZSB0YWtlcyB0aGUgc2hhcmVkIHNsb3QsIHNvIGFueSBvcmRpbmFyeSBub3RpY2VcbiAgICogcmFpc2VkIHdoaWxlIHRoZSBvcGVyYXRpb24gcnVucyBoaWRlcyBpdCwgYW5kIHRoZSBwcm9ncmVzcyB0aGUgdXNlciB3YXMgd2F0Y2hpbmcgZG9lcyBub3QgY29tZSBiYWNrLlxuICAgKlxuICAgKiBXaGljaGV2ZXIgbW9kZSBpcyB1c2VkLCB0aGUgcmV0dXJuZWQgaGFuZGxlIG93bnMgb25seSBJVFMgbWVzc2FnZTogdXBkYXRpbmcgdGhlIGNvbnRlbnQgcmV3cml0ZXNcbiAgICogdGhhdCBtZXNzYWdlIGFsb25lLCBhbmQgZGlzcG9zaW5nIHRha2VzIGF3YXkgb25seSB0aGF0IG1lc3NhZ2Ugd2hlbiB0aGUgbm90aWNlIHdhcyBhbHJlYWR5IG9uXG4gICAqIHNjcmVlbiAoYSBub3RpY2UgdGhpcyBoYW5kbGUgb3BlbmVkIGlzIGhpZGRlbiBhcyBhIHdob2xlKS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIFBsdWdpbk5vdGljZU1vZGUuUmVwbGFjZX1cbiAgICovXG4gIHJlYWRvbmx5IG1vZGU/OiBQbHVnaW5Ob3RpY2VNb2RlO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgbm90aWNlIHNob3VsZCBzdGF5IHVudGlsIGl0IGlzIHJlcGxhY2VkLCB0aGUgcGx1Z2luIGlzIHJlbG9hZGVkLCBvciB0aGUgdXNlciBkaXNtaXNzZXMgaXQuXG4gICAqXG4gICAqIEEgcGVybWFuZW50IG5vdGljZSBpcyBzaG93biB3aXRoIGFuIGluZmluaXRlIGR1cmF0aW9uIGFuZCBpcyBub3QgaGlkZGVuIHdoZW4gdGhlIGNvbXBvbmVudCB1bmxvYWRzLCBzbyBpdCBjYW5cbiAgICogY29tbXVuaWNhdGUgc3RhdGUgdGhhdCBvdXRsaXZlcyB0aGUgcGx1Z2luIChlLmcuIGEgY2xlYW51cCB0aGF0IHJlcXVpcmVzIGEgcmVsb2FkKS4gVGhlcmUgaXMgYXQgbW9zdCBvbmUgcGVybWFuZW50XG4gICAqIG5vdGljZSBwZXIgcGx1Z2luOiBpdCBpcyBoaWRkZW4gYnkgdGhlIG5leHQge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlfSBjYWxsIGFuZCBkaXNtaXNzZWRcbiAgICogYXV0b21hdGljYWxseSB0aGUgbmV4dCB0aW1lIHRoZSBjb21wb25lbnQgbG9hZHMgKGkuZS4gd2hlbiB0aGUgcGx1Z2luIGlzIHJlLWVuYWJsZWQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc1Blcm1hbmVudD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEhvdyB0aGlzIG5vdGljZSByZWxhdGVzIHRvIHRoZSBwbHVnaW4ncyBjdXJyZW50IG5vdGljZSDigJQgc2VlIHtAbGluayBQbHVnaW5Ob3RpY2VNb2RlfS5cbiAgICpcbiAgICogQSBwZXJtYW5lbnQgbm90aWNlIGNhbm5vdCBiZSB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZS5TZXBhcmF0ZX0gKGl0IG5lZWRzIHRoZSBzaGFyZWQgc2xvdCBpdCBpc1xuICAgKiB0cmFja2VkIGluKSwgYW5kIGEgbm90aWNlIHRoYXQgZG9lcyBub3QgaGlkZSBvbiBjbGljayBtdXN0IGJlXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VNb2RlLlNlcGFyYXRlfSAoc28gYSBsYXRlciBub3RpY2UgbmV2ZXIgc2lsZW50bHkgcmVwbGFjZXMgaXQpOyBlaXRoZXJcbiAgICogY29udHJhZGljdGlvbiB0aHJvd3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBQbHVnaW5Ob3RpY2VNb2RlLlJlcGxhY2V9LCBvciB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZS5TZXBhcmF0ZX0gd2hlblxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuc2hvdWxkSGlkZU9uQ2xpY2t9IGlzIGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IG1vZGU/OiBQbHVnaW5Ob3RpY2VNb2RlO1xuXG4gIC8qKlxuICAgKiBBIGNhbGxiYWNrIGludm9rZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIGNsb3NlIChYKSBidXR0b24sIGJlZm9yZSB0aGUgbm90aWNlIGlzIGhpZGRlbi4gQ2FsbFxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ2xvc2VDbGlja0V2ZW50LmNhbmNlbH0gb24gdGhlIGV2ZW50IHRvIGNhbmNlbCB0aGUgY2xvc2UgYW5kIGtlZXAgdGhlIG5vdGljZVxuICAgKiBvcGVuIOKAlCBmb3IgZXhhbXBsZSBhZnRlciB5b3VyIG93biBjb25maXJtYXRpb24gZGVjbGluZXMuIEFuIGFzeW5jIGNhbGxiYWNrIGlzIGF3YWl0ZWQgYmVmb3JlIHRoZVxuICAgKiBub3RpY2UgaXMgaGlkZGVuLiBSdW5zIG9ubHkgd2hlbiBhIGNsb3NlIGJ1dHRvbiBpcyBzaG93biAoYm90aFxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuc2hvdWxkSGlkZU9uQ2xpY2t9IGA9IGZhbHNlYCBhbmRcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLnNob3VsZFNob3dDbG9zZUJ1dHRvbn0gYXJlIHNldCkuXG4gICAqL1xuICByZWFkb25seSBvbkNsb3NlQ2xpY2s/OiAoZXZlbnQ6IFBsdWdpbk5vdGljZUNsb3NlQ2xpY2tFdmVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogQSBjYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIG5vdGljZSBpcyBoaWRkZW4g4oCUIHdoZXRoZXIgYnkgdGhlIHVzZXIgY2xvc2luZyBpdCwgYnkgYSBsYXRlciByZXVzYWJsZVxuICAgKiBub3RpY2UgcmVwbGFjaW5nIGl0LCBieSBpdHMgZHVyYXRpb24gZWxhcHNpbmcsIG9yIG9uIGNvbXBvbmVudCB1bmxvYWQuIEl0IHJ1bnMgYXQgbW9zdCBvbmNlIHBlclxuICAgKiBub3RpY2UuIFRoZSB7QGxpbmsgUGx1Z2luTm90aWNlSGlkZUluZm99IGFyZ3VtZW50IGRpc3Rpbmd1aXNoZXMgYSB1c2VyIGNsb3NlICh0aGUgY2xvc2UgYnV0dG9uKSBmcm9tXG4gICAqIGEgcHJvZ3JhbW1hdGljIGhpZGUuIEFuIGFzeW5jIGNhbGxiYWNrIGlzIHJ1biBmaXJlLWFuZC1mb3JnZXQgKGl0cyByZWplY3Rpb24gc3VyZmFjZXMgdGhyb3VnaCB0aGVcbiAgICogYXN5bmMtZXJyb3IgcGlwZWxpbmUpLlxuICAgKi9cbiAgcmVhZG9ubHkgb25IaWRlPzogKGluZm86IFBsdWdpbk5vdGljZUhpZGVJbmZvKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGNsaWNraW5nIHRoZSBub3RpY2UgaGlkZXMgaXQuIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCksIHRoZSBub3RpY2UgZGlzbWlzc2VzIG9uIGNsaWNrIGxpa2VcbiAgICogYSBub3JtYWwgT2JzaWRpYW4gbm90aWNlLiBXaGVuIGBmYWxzZWAsIHRoZSBub3RpY2UgaXMgaGFyZCB0byBjbG9zZTogaXQgZG9lcyBub3QgZGlzbWlzcyBvbiBhbnkgc3RyYXlcbiAgICogY2xpY2ssIGFuZCBpbnN0ZWFkIHNob3dzIGEgY2xvc2UgKFgpIGJ1dHRvbiB0aGF0IGhpZGVzIGl0IGRpcmVjdGx5IChzZWVcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLnNob3VsZFNob3dDbG9zZUJ1dHRvbn0gYW5kXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5vbkNsb3NlQ2xpY2t9KS5cbiAgICpcbiAgICogQSBgc2hvdWxkSGlkZU9uQ2xpY2s6IGZhbHNlYCBub3RpY2UgaXMgc2hvd24gd2l0aCBhbiBpbmZpbml0ZSBkdXJhdGlvbiBhbmQgc3RhbmRzIG9uIGl0cyBvd25cbiAgICogKGltcGxpZXMge0BsaW5rIFBsdWdpbk5vdGljZU1vZGUuU2VwYXJhdGV9KSwgc28gYSBsYXRlciBub3RpY2UgbmV2ZXIgc2lsZW50bHkgcmVwbGFjZXMgaXQ7IHBhc3NpbmdcbiAgICogYW55IG90aGVyIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5tb2RlfSB0b2dldGhlciB3aXRoIGBzaG91bGRIaWRlT25DbGljazogZmFsc2VgXG4gICAqIHRocm93cy5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRIaWRlT25DbGljaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNsb3NlIChYKSBidXR0b24gaXMgc2hvd24gb24gYSBoYXJkLXRvLWNsb3NlIG5vdGljZVxuICAgKiAoe0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLnNob3VsZEhpZGVPbkNsaWNrfSBgPSBmYWxzZWApLiBXaGVuIGBmYWxzZWAsIG5vIGNsb3NlXG4gICAqIGJ1dHRvbiBpcyByZW5kZXJlZCBhbmQgdGhlIG5vdGljZSBjYW4gb25seSBiZSBoaWRkZW4gcHJvZ3JhbW1hdGljYWxseS4gSWdub3JlZCB1bmxlc3NcbiAgICogYHNob3VsZEhpZGVPbkNsaWNrYCBpcyBgZmFsc2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHdoeSBhIG5vdGljZSB3YXMgaGlkZGVuLCBwYXNzZWQgdG8ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLm9uSGlkZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTm90aWNlSGlkZUluZm8ge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgbm90aWNlIHdhcyBoaWRkZW4gYnkgdGhlIHVzZXIgY2xpY2tpbmcgaXRzIGNsb3NlIChYKSBidXR0b24gc3BlY2lmaWNhbGx5LiBBbHdheXMgaW1wbGllc1xuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlSGlkZUluZm8uaXNVc2VyQWN0aW9ufS5cbiAgICovXG4gIHJlYWRvbmx5IGlzQ2xvc2VCdXR0b25DbGlja2VkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBub3RpY2Ugd2FzIGhpZGRlbiBieSBhIHVzZXIgYWN0aW9uIOKAlCBjbGlja2luZyB0aGUgY2xvc2UgKFgpIGJ1dHRvbiwgb3IgY2xpY2tpbmcgYVxuICAgKiBkaXNtaXNzaWJsZSBub3RpY2UgdG8gZGlzbWlzcyBpdCDigJQgYXMgb3Bwb3NlZCB0byBwcm9ncmFtbWF0aWNhbGx5IChhIGxhdGVyIHJldXNhYmxlIG5vdGljZSByZXBsYWNpbmdcbiAgICogaXQsIGFuIGV4cGxpY2l0IGBoaWRlKClgLCB0aGUgZHVyYXRpb24gZWxhcHNpbmcsIG9yIGNvbXBvbmVudCB1bmxvYWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNVc2VyQWN0aW9uOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50QXBwZW5kQ2xvc2VCdXR0b25QYXJhbXMge1xuICByZWFkb25seSBjb250ZW50RWw6IEhUTUxFbGVtZW50O1xuICByZWFkb25seSBnZXROb3RpY2U6ICgpID0+IE5vdGljZSB8IG51bGw7XG4gIHJlYWRvbmx5IG9uQ2xvc2VDbGljaz86IChldmVudDogUGx1Z2luTm90aWNlQ2xvc2VDbGlja0V2ZW50KSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50QXBwZW5kVG9DdXJyZW50Tm90aWNlUGFyYW1zIHtcbiAgcmVhZG9ubHkgZHVyYXRpb25Jbk1pbGxpc2Vjb25kczogbnVsbCB8IG51bWJlcjtcbiAgcmVhZG9ubHkgbWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcbiAgcmVhZG9ubHkgb25IaWRlPzogKGluZm86IFBsdWdpbk5vdGljZUhpZGVJbmZvKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuICByZWFkb25seSBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGREZWxheWVkTm90aWNlTWVzc2FnZVBhcmFtcyB7XG4gIHJlYWRvbmx5IGFib3J0Q29udHJvbGxlcj86IEFib3J0Q29udHJvbGxlcjtcbiAgcmVhZG9ubHkgY2FuY2VsQnV0dG9uVGV4dD86IHN0cmluZztcbiAgcmVhZG9ubHkgY29udGVudDogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkTm90aWNlQ29udGVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgbm90aWNlIHRoaXMgY29udGVudCBiZWxvbmdzIHRvLCB1c2VkIGJ5IHRoZSBjbG9zZSBidXR0b24ncyBoYW5kbGVyLiBUaGUgbm90aWNlIGRvZXNcbiAgICogbm90IGV4aXN0IHlldCB3aGVuIHRoZSBjb250ZW50IGlzIGJ1aWx0LCBzbyBpdCBpcyByZXNvbHZlZCBsYXppbHkgYXQgY2xpY2sgdGltZS4gUmVxdWlyZWQgd2hlbiBhXG4gICAqIGNsb3NlIGJ1dHRvbiBpcyBzaG93bi5cbiAgICovXG4gIHJlYWRvbmx5IGdldE5vdGljZT86ICgpID0+IE5vdGljZSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgYWZ0ZXIgdGhlIHBsdWdpbiBuYW1lIHByZWZpeC5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEludm9rZWQgd2hlbiB0aGUgY2xvc2UgYnV0dG9uIGlzIGNsaWNrZWQ7IG1heSBjYW5jZWwgdGhlIGNsb3NlLiBTZWVcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLm9uQ2xvc2VDbGlja30uXG4gICAqL1xuICByZWFkb25seSBvbkNsb3NlQ2xpY2s/OiAoZXZlbnQ6IFBsdWdpbk5vdGljZUNsb3NlQ2xpY2tFdmVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbm90aWNlIGlzIGhhcmQgdG8gY2xvc2U6IHN0b3BzIGV2ZXJ5IGNsaWNrIGZyb20gZGlzbWlzc2luZyBpdCBhbmQsIHVubGVzcyBzdXBwcmVzc2VkIGJ5XG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZE5vdGljZUNvbnRlbnRQYXJhbXMuc2hvdWxkU2hvd0Nsb3NlQnV0dG9ufSwgYWRkcyBhIGNsb3NlIGJ1dHRvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZXNFeHBsaWNpdENsb3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbWVzc2FnZSBpcyBwcmVmaXhlZCB3aXRoIHRoZSBwbHVnaW4gbmFtZS4gT25seSBhIG1lc3NhZ2UgdGhhdCBvcGVucyBhIG5vdGljZSBpc1xuICAgKiBwcmVmaXhlZDsgYSBtZXNzYWdlIGFwcGVuZGVkIHRvIG9uZSBhbHJlYWR5IHNob3dpbmcgaXQgaXMgbm90LCBzbyB0aGUgbmFtZSBpcyBub3QgcmVwZWF0ZWQgb24gZXZlcnlcbiAgICogbGluZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRQcmVmaXhXaXRoUGx1Z2luTmFtZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSBjbG9zZSBidXR0b24gd2hlbiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGROb3RpY2VDb250ZW50UGFyYW1zLnJlcXVpcmVzRXhwbGljaXRDbG9zZX0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zIHtcbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGJ1aWx0IG1lc3NhZ2U6IHRoZSB3cmFwcGVyIGVsZW1lbnQgaG9sZGluZyBpdCwgYW5kIHRoZSBmcmFnbWVudCB0aGF0IGVsZW1lbnQgc2l0cyBpbi5cbiAqXG4gKiBUaGUgZWxlbWVudCBpcyBoYW5kZWQgYmFjayBiZWNhdXNlIGEgbm90aWNlIGNhbiBob2xkIHNldmVyYWwgb2YgdGhlbSAoc2VlIHtAbGluayBQbHVnaW5Ob3RpY2VNb2RlLkFwcGVuZH0pLFxuICogc28gd2hvZXZlciBvd25zIG9uZSBtZXNzYWdlIGhhcyB0byBiZSBhYmxlIHRvIHVwZGF0ZSBvciByZW1vdmUgZXhhY3RseSB0aGF0IG1lc3NhZ2UuIFRoZSByZWZlcmVuY2VcbiAqIHN0YXlzIHZhbGlkIG9uY2UgdGhlIGZyYWdtZW50IGlzIGhhbmRlZCB0byBgTm90aWNlYDogYXBwZW5kaW5nIGEgZnJhZ21lbnQgbW92ZXMgaXRzIGNoaWxkcmVuIHJhdGhlclxuICogdGhhbiBjb3B5aW5nIHRoZW0uXG4gKi9cbmludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnROb3RpY2VDb250ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHdyYXBwaW5nIHRoaXMgbWVzc2FnZSBhbG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnRFbDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBmcmFnbWVudCBob2xkaW5nIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnROb3RpY2VDb250ZW50LmNvbnRlbnRFbH0sIHJlYWR5IHRvIGhhbmQgdG8gYE5vdGljZWBcbiAgICogb3IgdG8gYXBwZW5kIGludG8gb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgZnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQ7XG59XG5cbi8qKlxuICogQSBtZXNzYWdlIHRoYXQgaGFzIGJlZW4gcHV0IG9uIHNjcmVlbiwgYW5kIHdoZXJlIGl0IGVuZGVkIHVwLlxuICovXG5pbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd25Ob3RpY2Uge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgaG9sZGluZyB0aGlzIG1lc3NhZ2UgYWxvbmUsIGluc2lkZSB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd25Ob3RpY2Uubm90aWNlfS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnRFbDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBtZXNzYWdlIGNyZWF0ZWQgdGhlIG5vdGljZSwgYXMgb3Bwb3NlZCB0byBqb2luaW5nIG9uZSB0aGF0IHdhcyBhbHJlYWR5IG9uIHNjcmVlbi5cbiAgICogT25seSB0aGUgY3JlYXRvciBtYXkgaGlkZSBpdDsgYSBqb2luZWQgbWVzc2FnZSBjYW4gbWVyZWx5IHJlbW92ZSBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBpc05vdGljZU93bmVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbm90aWNlIHRoZSBtZXNzYWdlIGlzIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90aWNlOiBOb3RpY2U7XG59XG5cbmludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlV2l0aER1cmF0aW9uUGFyYW1zIHtcbiAgcmVhZG9ubHkgZHVyYXRpb25Jbk1pbGxpc2Vjb25kczogbnVsbCB8IG51bWJlcjtcbiAgcmVhZG9ubHkgbWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcbiAgcmVhZG9ubHkgbW9kZTogUGx1Z2luTm90aWNlTW9kZTtcbiAgcmVhZG9ubHkgb25DbG9zZUNsaWNrOiAoKGV2ZW50OiBQbHVnaW5Ob3RpY2VDbG9zZUNsaWNrRXZlbnQpID0+IFByb21pc2FibGU8dm9pZD4pIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBvbkhpZGU6ICgoaW5mbzogUGx1Z2luTm90aWNlSGlkZUluZm8pID0+IFByb21pc2FibGU8dm9pZD4pIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSByZXF1aXJlc0V4cGxpY2l0Q2xvc2U6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNob3VsZFJlZ2lzdGVyQXNQZXJtYW5lbnQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNob3VsZFNob3dDbG9zZUJ1dHRvbjogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIHNob3dpbmcgcGx1Z2luIG5vdGljZXMuIEJ5IGRlZmF1bHQgYSBuZXcgbm90aWNlIGhpZGVzIHRoZSBwcmV2aW91cyBvbmUsIHNvIG9ubHkgdGhlIGxhdGVzdFxuICogbWVzc2FnZSBpcyBvbiBzY3JlZW47IHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5tb2RlfSBjaG9vc2VzIG90aGVyd2lzZSDigJQgc2VlXG4gKiB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZX0uXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIG5hbWUgKHNob3duIGFzIHByZWZpeCBpbiBub3RpY2VzKS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjbG9zZUJ1dHRvbkNsaWNrZWROb3RpY2VzID0gbmV3IFdlYWtTZXQ8Tm90aWNlPigpO1xuICBwcml2YXRlIG5vdGljZTogTm90aWNlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9ucyA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFuZGFsb25lTm90aWNlcyA9IG5ldyBTZXQ8Tm90aWNlPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHVzZXJDbGlja2VkTm90aWNlcyA9IG5ldyBXZWFrU2V0PE5vdGljZT4oKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogUGx1Z2luTm90aWNlQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnBsdWdpbk5hbWUgPSBwYXJhbXMucGx1Z2luTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNtaXNzZXMgdGhlIHBlcm1hbmVudCBub3RpY2UgbGVmdCBvdmVyIGZyb20gYSBwcmV2aW91cyBsb2FkIChlLmcuIGEgcHJldmlvdXMgcGx1Z2luIHNlc3Npb24pIG9uIGxvYWQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHN1cGVyLm9ubG9hZCgpO1xuICAgIGNvbnN0IHBlcm1hbmVudE5vdGljZSA9IHRoaXMuZ2V0UGVybWFuZW50Tm90aWNlKCk7XG4gICAgcGVybWFuZW50Tm90aWNlPy5oaWRlKCk7XG4gICAgdGhpcy5zZXRQZXJtYW5lbnROb3RpY2UobnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZXMgdGhlIGN1cnJlbnQgbm90aWNlIG9uIHVubG9hZCwgdW5sZXNzIGl0IGlzIHRoZSBwZXJtYW5lbnQgbm90aWNlICh3aGljaCBpcyBtZWFudCB0byBvdXRsaXZlIHRoZSBwbHVnaW4pLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIC8vIENhbmNlbCBhbnkgZGVsYXllZCBub3RpY2Ugd2hvc2UgdGltZXIgaGFzIG5vdCBmaXJlZCB5ZXQsIHNvIGl0IG5ldmVyIGFwcGVhcnMgYWZ0ZXIgdW5sb2FkLlxuICAgIGZvciAoY29uc3QgY2FuY2VsUGVuZGluZ1RpbWVyIG9mIHNuYXBzaG90KHRoaXMucGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9ucykpIHtcbiAgICAgIGNhbmNlbFBlbmRpbmdUaW1lcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZXRQZXJtYW5lbnROb3RpY2UoKSAhPT0gdGhpcy5ub3RpY2UpIHtcbiAgICAgIHRoaXMubm90aWNlPy5oaWRlKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RhbmRhbG9uZU5vdGljZSBvZiB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzKSB7XG4gICAgICBzdGFuZGFsb25lTm90aWNlLmhpZGUoKTtcbiAgICB9XG4gICAgdGhpcy5zdGFuZGFsb25lTm90aWNlcy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIGEgbm90aWNlIG1lc3NhZ2UgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZGlzcGxheS4gVGhlIG5vdGljZSBzaG93cyB0aGUgcGx1Z2luIG5hbWUgYWJvdmUgaXQsIHNvIGEgbGVhZGluZ1xuICAgKiBgPHBsdWdpbiBuYW1lPjpgIGluIHRoZSBtZXNzYWdlIGlzIGRyb3BwZWQgcmF0aGVyIHRoYW4gc2hvd24gdHdpY2UuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGRpc3BsYXlpbmcgdGhlIG5vdGljZS5cbiAgICogQHJldHVybnMgVGhlIG5vdGljZSBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgc2hvd05vdGljZShtZXNzYWdlOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nLCBvcHRpb25zPzogUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMpOiBOb3RpY2Uge1xuICAgIGNvbnN0IGlzUGVybWFuZW50ID0gb3B0aW9ucz8uaXNQZXJtYW5lbnQgPz8gZmFsc2U7XG4gICAgY29uc3Qgc2hvdWxkSGlkZU9uQ2xpY2sgPSBvcHRpb25zPy5zaG91bGRIaWRlT25DbGljayA/PyB0cnVlO1xuICAgIGNvbnN0IHJlcXVpcmVzRXhwbGljaXRDbG9zZSA9ICFzaG91bGRIaWRlT25DbGljaztcbiAgICBjb25zdCBtb2RlID0gb3B0aW9ucz8ubW9kZSA/PyAocmVxdWlyZXNFeHBsaWNpdENsb3NlID8gUGx1Z2luTm90aWNlTW9kZS5TZXBhcmF0ZSA6IFBsdWdpbk5vdGljZU1vZGUuUmVwbGFjZSk7XG5cbiAgICBpZiAob3B0aW9ucz8ubW9kZSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMubW9kZSAhPT0gUGx1Z2luTm90aWNlTW9kZS5TZXBhcmF0ZSAmJiByZXF1aXJlc0V4cGxpY2l0Q2xvc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBub3RpY2UgdGhhdCBkb2VzIG5vdCBoaWRlIG9uIGNsaWNrIG11c3QgYmUgc2hvd24gaW4gdGhlIHNlcGFyYXRlIG1vZGUuJyk7XG4gICAgfVxuICAgIGlmIChtb2RlID09PSBQbHVnaW5Ob3RpY2VNb2RlLlNlcGFyYXRlICYmIGlzUGVybWFuZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgcGVybWFuZW50IG5vdGljZSBjYW5ub3QgYmUgc2hvd24gaW4gdGhlIHNlcGFyYXRlIG1vZGUuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA9IGlzUGVybWFuZW50IHx8IHJlcXVpcmVzRXhwbGljaXRDbG9zZSA/IFBFUk1BTkVOVF9OT1RJQ0VfRFVSQVRJT05fSU5fTUlMTElTRUNPTkRTIDogbnVsbDtcbiAgICByZXR1cm4gdGhpcy5zaG93Tm90aWNlV2l0aER1cmF0aW9uKHtcbiAgICAgIGR1cmF0aW9uSW5NaWxsaXNlY29uZHMsXG4gICAgICBtZXNzYWdlLFxuICAgICAgbW9kZSxcbiAgICAgIG9uQ2xvc2VDbGljazogb3B0aW9ucz8ub25DbG9zZUNsaWNrLFxuICAgICAgb25IaWRlOiBvcHRpb25zPy5vbkhpZGUsXG4gICAgICByZXF1aXJlc0V4cGxpY2l0Q2xvc2UsXG4gICAgICBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50OiBpc1Blcm1hbmVudCxcbiAgICAgIHNob3VsZFNob3dDbG9zZUJ1dHRvbjogb3B0aW9ucz8uc2hvdWxkU2hvd0Nsb3NlQnV0dG9uID8/IHRydWVcbiAgICB9KS5ub3RpY2U7XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgYSBub3RpY2UgZGVzY3JpYmluZyBhIGxvbmctcnVubmluZyBvcGVyYXRpb24sIGJ1dCBvbmx5IG9uY2UgdGhlIG9wZXJhdGlvbiBoYXMgcnVuIGZvciBsb25nZXJcbiAgICogdGhhbiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZUFmdGVyRGVsYXlQYXJhbXMuZGVsYXlJbk1pbGxpc2Vjb25kc30g4oCUIHNvIG9wZXJhdGlvbnNcbiAgICogdGhhdCBmaW5pc2ggc29vbmVyIG5ldmVyIGZsYXNoIGEgbm90aWNlLiBUaGUgbm90aWNlIHN0YXlzIHVudGlsIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZX0gaXNcbiAgICogZGlzcG9zZWQgKHdoaWNoIGFsc28gY2FuY2VscyB0aGUgcGVuZGluZyB0aW1lciBpZiBpdCBoYXMgbm90IGZpcmVkIHlldCksIHNvIGl0IGNhbiBiZSB1c2VkIHdpdGhcbiAgICogYHVzaW5nYC4gV2hlbiBhbiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZUFmdGVyRGVsYXlQYXJhbXMuYWJvcnRDb250cm9sbGVyfSBpcyBnaXZlbiwgYVxuICAgKiBDYW5jZWwgYnV0dG9uIHRoYXQgYWJvcnRzIGl0IGlzIGFwcGVuZGVkIChhbmQsIGJlaW5nIGludGVyYWN0aXZlLCBkb2VzIG5vdCBkaXNtaXNzIHRoZSBub3RpY2UpLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiB1c2luZyBfbm90aWNlID0gcGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2VBZnRlckRlbGF5KHtcbiAgICogICBhYm9ydENvbnRyb2xsZXIsXG4gICAqICAgY29udGVudDogKCkgPT4gYnVpbGRQcm9ncmVzc0ZyYWdtZW50KClcbiAgICogfSk7XG4gICAqIGF3YWl0IHJ1bk9wZXJhdGlvbihhYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50RGVsYXllZE5vdGljZX0gdGhhdCBoaWRlcyB0aGUgbm90aWNlIChvciBjYW5jZWxzIHRoZSBwZW5kaW5nXG4gICAqIHRpbWVyKSB3aGVuIGRpc3Bvc2VkIGFuZCBsZXRzIHRoZSBjb250ZW50IGJlIHVwZGF0ZWQgd2hpbGUgaXQgaXMgc2hvd24uXG4gICAqL1xuICBwdWJsaWMgc2hvd05vdGljZUFmdGVyRGVsYXkocGFyYW1zOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcyk6IFBsdWdpbk5vdGljZUNvbXBvbmVudERlbGF5ZWROb3RpY2Uge1xuICAgIGNvbnN0IG1vZGUgPSBwYXJhbXMubW9kZSA/PyBQbHVnaW5Ob3RpY2VNb2RlLlJlcGxhY2U7XG4gICAgLy8gV2hlcmUgdGhpcyBtZXNzYWdlIGVuZGVkIHVwOiBhIG5vdGljZSBvZiBpdHMgb3duLCBvciBhIGNodW5rIGluc2lkZSBvbmUgdGhhdCB3YXMgYWxyZWFkeSB1cC4gSXRcbiAgICAvLyBkZWNpZGVzIHdoYXQgYHNldENvbnRlbnRgIHJld3JpdGVzIGFuZCB3aGF0IGRpc3Bvc2luZyB0YWtlcyBhd2F5LlxuICAgIGxldCBzaG93bjogbnVsbCB8IFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3duTm90aWNlID0gbnVsbDtcbiAgICBsZXQgaXNEaXNwb3NlZCA9IGZhbHNlO1xuICAgIGxldCB0aW1lcklkID0gMDtcbiAgICBsZXQgY3VycmVudENvbnRlbnQ6IFZhbHVlUHJvdmlkZXI8RG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZz4gPSBwYXJhbXMuY29udGVudDtcblxuICAgIGNvbnN0IGNhbmNlbFBlbmRpbmdUaW1lciA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgICB0aGlzLnBlbmRpbmdUaW1lckNhbmNlbGxhdGlvbnMuZGVsZXRlKGNhbmNlbFBlbmRpbmdUaW1lcik7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkRGVsYXllZE1lc3NhZ2UgPSAoY29udGVudDogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IERvY3VtZW50RnJhZ21lbnQgPT5cbiAgICAgIHRoaXMuYnVpbGREZWxheWVkTm90aWNlTWVzc2FnZShub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGREZWxheWVkTm90aWNlTWVzc2FnZVBhcmFtcz4oe1xuICAgICAgICBhYm9ydENvbnRyb2xsZXI6IHBhcmFtcy5hYm9ydENvbnRyb2xsZXIsXG4gICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IHBhcmFtcy5jYW5jZWxCdXR0b25UZXh0LFxuICAgICAgICBjb250ZW50XG4gICAgICB9KSk7XG5cbiAgICB0aW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2FuY2VsUGVuZGluZ1RpbWVyKCk7XG4gICAgICBpbnZva2VBc3luY1NhZmVseShhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIFJlc29sdmluZyB0aGUgY29udGVudCBpcyBhc3luY2hyb25vdXMsIGFuZCB0aGUgb3BlcmF0aW9uIHRoZSBub3RpY2UgZGVzY3JpYmVzIGtlZXBzIHJ1bm5pbmdcbiAgICAgICAgLy8gd2hpbGUgaXQgaGFwcGVucyDigJQgc28gYHNldENvbnRlbnRgIGNhbiBsYW5kIGluIGJldHdlZW4uIEl0IGNhbm5vdCByZXdyaXRlIGEgbm90aWNlIHRoYXQgZG9lc1xuICAgICAgICAvLyBub3QgZXhpc3QgeWV0LCBzbyByZXNvbHZlIGFnYWluIHdoZW5ldmVyIHRoYXQgaGFwcGVuczogdGhlIG5vdGljZSBtdXN0IG9wZW4gd2l0aCB0aGUgbWVzc2FnZVxuICAgICAgICAvLyB0aGUgY2FsbGVyIGxhc3QgYXNrZWQgZm9yLCBub3QgdGhlIG9uZSB0aGF0IHdhcyBjdXJyZW50IHdoZW4gcmVzb2x1dGlvbiBzdGFydGVkLlxuICAgICAgICBsZXQgcmVxdWVzdGVkQ29udGVudDogVmFsdWVQcm92aWRlcjxEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nPjtcbiAgICAgICAgbGV0IHJlc29sdmVkQ29udGVudDogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcbiAgICAgICAgZG8ge1xuICAgICAgICAgIHJlcXVlc3RlZENvbnRlbnQgPSBjdXJyZW50Q29udGVudDtcbiAgICAgICAgICByZXNvbHZlZENvbnRlbnQgPSBhd2FpdCByZXNvbHZlVmFsdWUocmVxdWVzdGVkQ29udGVudCwge30pO1xuICAgICAgICAgIC8vIFRoZSBoYW5kbGUgbWF5IGhhdmUgYmVlbiBkaXNwb3NlZCB3aGlsZSB0aGUgY29udGVudCB3YXMgYmVpbmcgcmVzb2x2ZWQ7IGRvbid0IHNob3cgYSBzdGFsZSBub3RpY2UuXG4gICAgICAgICAgaWYgKGlzRGlzcG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKHJlcXVlc3RlZENvbnRlbnQgIT09IGN1cnJlbnRDb250ZW50KTtcblxuICAgICAgICBzaG93biA9IHRoaXMuc2hvd05vdGljZVdpdGhEdXJhdGlvbih7XG4gICAgICAgICAgZHVyYXRpb25Jbk1pbGxpc2Vjb25kczogUEVSTUFORU5UX05PVElDRV9EVVJBVElPTl9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICAgICAgbWVzc2FnZTogYnVpbGREZWxheWVkTWVzc2FnZShyZXNvbHZlZENvbnRlbnQpLFxuICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgb25DbG9zZUNsaWNrOiB1bmRlZmluZWQsXG4gICAgICAgICAgb25IaWRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgcmVxdWlyZXNFeHBsaWNpdENsb3NlOiBmYWxzZSxcbiAgICAgICAgICBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50OiBmYWxzZSxcbiAgICAgICAgICBzaG91bGRTaG93Q2xvc2VCdXR0b246IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCBwYXJhbXMuZGVsYXlJbk1pbGxpc2Vjb25kcyA/PyBERUZBVUxUX0RFTEFZX0JFRk9SRV9TSE9XX0lOX01JTExJU0VDT05EUyk7XG5cbiAgICB0aGlzLnBlbmRpbmdUaW1lckNhbmNlbGxhdGlvbnMuYWRkKGNhbmNlbFBlbmRpbmdUaW1lcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2V0Q29udGVudDogKGNvbnRlbnQ6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgICAgY3VycmVudENvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICBpZiAoIXNob3duKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFN3YXBzIFRISVMgbWVzc2FnZSdzIGVsZW1lbnQgZm9yIGEgZnJlc2hseSBidWlsdCBvbmUsIHJhdGhlciB0aGFuIHJld3JpdGluZyB0aGUgd2hvbGUgbm90aWNlOlxuICAgICAgICAvLyBXaGVuIHRoZSBoYW5kbGUgam9pbmVkIGEgbm90aWNlIHRoYXQgd2FzIGFscmVhZHkgdXAsIHRoZSBvdGhlciBtZXNzYWdlcyBpbiBpdCBhcmUgbm90IGl0cyB0b1xuICAgICAgICAvLyBvdmVyd3JpdGUuIFJlYnVpbGRpbmcgYWxzbyByZS1hcHBsaWVzIHRoZSBwcmVmaXgsIHRoZSBpbnRlcmFjdGl2ZSBndWFyZCwgYW5kIHRoZSBDYW5jZWwgYnV0dG9uLlxuICAgICAgICBjb25zdCByZWJ1aWx0ID0gdGhpcy5idWlsZE5vdGljZUNvbnRlbnQoe1xuICAgICAgICAgIG1lc3NhZ2U6IGJ1aWxkRGVsYXllZE1lc3NhZ2UoY29udGVudCksXG4gICAgICAgICAgc2hvdWxkUHJlZml4V2l0aFBsdWdpbk5hbWU6IHNob3duLmlzTm90aWNlT3duZWRcbiAgICAgICAgfSk7XG4gICAgICAgIHNob3duLmNvbnRlbnRFbC5yZXBsYWNlV2l0aChyZWJ1aWx0LmZyYWdtZW50KTtcbiAgICAgICAgc2hvd24gPSB7IC4uLnNob3duLCBjb250ZW50RWw6IHJlYnVpbHQuY29udGVudEVsIH07XG4gICAgICB9LFxuICAgICAgW1N5bWJvbC5kaXNwb3NlXTogKCk6IHZvaWQgPT4ge1xuICAgICAgICBpc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICAgICAgY2FuY2VsUGVuZGluZ1RpbWVyKCk7XG4gICAgICAgIGlmICghc2hvd24pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gQSBub3RpY2UgdGhpcyBoYW5kbGUgb3BlbmVkIGdvZXMgYXdheSB3aXRoIGl0OyBhIG5vdGljZSBpdCBtZXJlbHkgam9pbmVkIGJlbG9uZ3MgdG8gd2hvZXZlclxuICAgICAgICAvLyBvcGVuZWQgaXQsIHNvIG9ubHkgdGhpcyBtZXNzYWdlIGlzIHRha2VuIG91dCBvZiBpdC5cbiAgICAgICAgaWYgKHNob3duLmlzTm90aWNlT3duZWQpIHtcbiAgICAgICAgICBzaG93bi5ub3RpY2UuaGlkZSgpO1xuICAgICAgICAgIHRoaXMuc3RhbmRhbG9uZU5vdGljZXMuZGVsZXRlKHNob3duLm5vdGljZSk7XG4gICAgICAgICAgaWYgKHRoaXMubm90aWNlID09PSBzaG93bi5ub3RpY2UpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWNlID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvd24uY29udGVudEVsLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmRzIGEgY2xvc2UgKFgpIGJ1dHRvbiB0byB0aGUgbm90aWNlIGNvbnRlbnQuIENsaWNraW5nIGl0IGZpcmVzXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRBcHBlbmRDbG9zZUJ1dHRvblBhcmFtcy5vbkNsb3NlQ2xpY2t9ICh3aGljaCBtYXkgY2FuY2VsIHRoZSBjbG9zZSk7IGlmXG4gICAqIG5vdCBjYW5jZWxsZWQsIGl0IGhpZGVzIHRoZSBub3RpY2UgYW5kIGRyb3BzIGl0IGZyb20gdGhlIHN0YW5kYWxvbmUtbm90aWNlIHRyYWNraW5nIHNldC4gVGhlIGhpZGUgaXNcbiAgICogbWFya2VkIGFzIGEgY2xvc2UtYnV0dG9uIGNsaWNrIHNvIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5vbkhpZGV9IGNhblxuICAgKiBkaXN0aW5ndWlzaCBpdC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBlbmRDbG9zZUJ1dHRvbihwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudEFwcGVuZENsb3NlQnV0dG9uUGFyYW1zKTogdm9pZCB7XG4gICAgY29uc3QgeyBjb250ZW50RWwsIGdldE5vdGljZSwgb25DbG9zZUNsaWNrIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgY2xvc2VCdXR0b25FbCA9IGNvbnRlbnRFbC5jcmVhdGVFbCgnYnV0dG9uJywge1xuICAgICAgYXR0cjogeyAnYXJpYS1sYWJlbCc6IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5ub3RpY2VzLmNsb3NlQXJpYUxhYmVsKSB9XG4gICAgfSk7XG4gICAgLy8gUmV1c2UgT2JzaWRpYW4ncyBtb2RhbCBjbG9zZS1idXR0b24gY2xhc3NlcyBzbyB0aGlzIGJ1dHRvbiBtYXRjaGVzIHRoZSBuYXRpdmUgbW9kYWwgY2xvc2UgYnV0dG9uXG4gICAgLy8gKGxvb2sgYW5kIGhvdmVyKTsgdGhlIHN0eWxlc2hlZXQgb25seSBwb3NpdGlvbnMgaXQgaW4gdGhlIG5vdGljZSBjb3JuZXIuXG4gICAgYWRkUGx1Z2luQ3NzQ2xhc3NlcyhjbG9zZUJ1dHRvbkVsLCBDc3NDbGFzcy5QbHVnaW5Ob3RpY2VDbG9zZUJ1dHRvbik7XG4gICAgY2xvc2VCdXR0b25FbC5hZGRDbGFzc2VzKFtDc3NDbGFzcy5DbGlja2FibGVJY29uLCBDc3NDbGFzcy5Nb2RhbEhlYWRlckJ1dHRvbl0pO1xuICAgIHNldEljb24oY2xvc2VCdXR0b25FbCwgJ3gnKTtcbiAgICBjbG9zZUJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCRldmVudCkgPT4ge1xuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgaXNDYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAgICAgYXdhaXQgb25DbG9zZUNsaWNrPy4oe1xuICAgICAgICAgIGNhbmNlbDogKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgaXNDYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIENhbiBiZSBjYW5jZWxsZWQgYnkgdGhlIHVzZXIuXG4gICAgICAgIGlmIChpc0NhbmNlbGxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub3RpY2UgPSBlbnN1cmVOb25OdWxsYWJsZShnZXROb3RpY2UoKSk7XG4gICAgICAgIHRoaXMuY2xvc2VCdXR0b25DbGlja2VkTm90aWNlcy5hZGQobm90aWNlKTtcbiAgICAgICAgbm90aWNlLmhpZGUoKTtcbiAgICAgICAgdGhpcy5zdGFuZGFsb25lTm90aWNlcy5kZWxldGUobm90aWNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBtZXNzYWdlIHRvIHRoZSBub3RpY2UgY3VycmVudGx5IGluIHRoZSBwZXItcGx1Z2luIHNsb3QsIHNvIGJvdGggbWVzc2FnZXMgc3RheSBvbiBzY3JlZW4gaW4gYVxuICAgKiBzaW5nbGUgbm90aWNlLlxuICAgKlxuICAgKiBUaGUgYXBwZW5kZWQgbWVzc2FnZSBjYXJyaWVzIG5vIHBsdWdpbi1uYW1lIHByZWZpeCDigJQgdGhlIG5vdGljZSBhbHJlYWR5IG9wZW5zIHdpdGggb25lLCBhbmRcbiAgICogcmVwZWF0aW5nIGl0IG9uIGV2ZXJ5IGxpbmUgcmVhZHMgYXMgbm9pc2UuIEl0IGlzIHdyYXBwZWQgbGlrZSBhbnkgb3RoZXIgbm90aWNlIGNvbnRlbnQsIHNvIGEgbGluayBvclxuICAgKiBidXR0b24gaW5zaWRlIGl0IHN0aWxsIGtlZXBzIHRoZSBub3RpY2Ugb3BlbiB3aGVuIGNsaWNrZWQuXG4gICAqXG4gICAqIEFwcGVuZGluZyByZXN0YXJ0cyB0aGUgbm90aWNlJ3MgY291bnRkb3duICh7QGxpbmsgTm90aWNlLnNldEF1dG9IaWRlfSksIHNvIHRoZSBuZXcgbWVzc2FnZSBnZXRzIGFcbiAgICogZnVsbCBkdXJhdGlvbiBpbnN0ZWFkIG9mIGluaGVyaXRpbmcgd2hhdCB3YXMgbGVmdCBvZiB0aGUgY3VycmVudCBvbmUg4oCUIGEgbGluZSBhcHBlbmRlZCBhIG1vbWVudFxuICAgKiBiZWZvcmUgdGhlIG5vdGljZSBleHBpcmVzIHdvdWxkIG90aGVyd2lzZSBmbGFzaCBhbmQgdmFuaXNoLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIFRoZSB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd25Ob3RpY2V9IGRlc2NyaWJpbmcgdGhlIGpvaW5lZCBub3RpY2UsIG9yIGBudWxsYCB3aGVuXG4gICAqIHRoZXJlIGlzIG5vdGhpbmcgb24gc2NyZWVuIHRvIGFwcGVuZCB0byDigJQgdGhlIHNsb3QgaXMgZW1wdHksIG9yIGl0cyBub3RpY2UgaGFzIHNpbmNlIGJlZW4gZGlzbWlzc2VkXG4gICAqIOKAlCBhbmQgdGhlIGNhbGxlciBzaG91bGQgc2hvdyBhIG5ldyBub3RpY2UgaW5zdGVhZC5cbiAgICovXG4gIHByaXZhdGUgYXBwZW5kVG9DdXJyZW50Tm90aWNlKHBhcmFtczogUGx1Z2luTm90aWNlQ29tcG9uZW50QXBwZW5kVG9DdXJyZW50Tm90aWNlUGFyYW1zKTogbnVsbCB8IFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3duTm90aWNlIHtcbiAgICBjb25zdCB7IGR1cmF0aW9uSW5NaWxsaXNlY29uZHMsIG1lc3NhZ2UsIG9uSGlkZSwgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGN1cnJlbnROb3RpY2UgPSB0aGlzLm5vdGljZTtcbiAgICAvLyBgaXNTaG93bmAgaXMgdGhlIHNhbWUgY2hlY2sgT2JzaWRpYW4ncyBvd24gYE5vdGljZS5oaWRlYCBtYWtlcyBiZWZvcmUgYW5pbWF0aW5nIGEgbm90aWNlIGF3YXksIHNvXG4gICAgLy8gaXQgaXMgZXhhY3RseSBcInN0aWxsIG9uIHNjcmVlblwiOiBhIG5vdGljZSB0aGF0IGV4cGlyZWQgb3Igd2FzIGRpc21pc3NlZCBoYXMgYmVlbiBkZXRhY2hlZC5cbiAgICBpZiAoIWN1cnJlbnROb3RpY2U/LmNvbnRhaW5lckVsLmlzU2hvd24oKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgeyBjb250ZW50RWwsIGZyYWdtZW50IH0gPSB0aGlzLmJ1aWxkTm90aWNlQ29udGVudCh7IG1lc3NhZ2UsIHNob3VsZFByZWZpeFdpdGhQbHVnaW5OYW1lOiBmYWxzZSB9KTtcbiAgICBjdXJyZW50Tm90aWNlLm1lc3NhZ2VFbC5hcHBlbmQoZnJhZ21lbnQpO1xuICAgIC8vIEEgYG51bGxgIGR1cmF0aW9uIG1lYW5zIFwiT2JzaWRpYW4ncyBvd24gZGVmYXVsdFwiLCB3aGljaCBvbmx5IHRoZSBjb25zdHJ1Y3RvciBhcHBsaWVzIOKAlCBzbyByZXN0YXJ0XG4gICAgLy8gdGhlIGNvdW50ZG93biB3aXRoIHRoYXQgc2FtZSBkZWZhdWx0IHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlIGN1cnJlbnQgb25lIHJ1bm5pbmcuXG4gICAgY3VycmVudE5vdGljZS5zZXRBdXRvSGlkZShkdXJhdGlvbkluTWlsbGlzZWNvbmRzID8/IE9CU0lESUFOX0RFRkFVTFRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyk7XG4gICAgdGhpcy53aXJlT25IaWRlKGN1cnJlbnROb3RpY2UsIG9uSGlkZSk7XG4gICAgLy8gT25seSBldmVyIHJlZ2lzdGVycywgbmV2ZXIgY2xlYXJzOiB0aGUgbm90aWNlIGJlaW5nIGFwcGVuZGVkIHRvIG1heSBhbHJlYWR5IGJlIHRoaXMgcGx1Z2luJ3NcbiAgICAvLyBwZXJtYW5lbnQgbm90aWNlLCBhbmQgYSBsYXRlciBhcHBlbmRlZCBtZXNzYWdlIGlzIG5vIHJlYXNvbiB0byBmb3JnZXQgdGhhdC5cbiAgICBpZiAoc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudCkge1xuICAgICAgdGhpcy5zZXRQZXJtYW5lbnROb3RpY2UoY3VycmVudE5vdGljZSk7XG4gICAgfVxuICAgIHJldHVybiB7IGNvbnRlbnRFbCwgaXNOb3RpY2VPd25lZDogZmFsc2UsIG5vdGljZTogY3VycmVudE5vdGljZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgbWVzc2FnZSBmb3IgYSBkZWxheWVkIG5vdGljZTogdGhlIHJlc29sdmVkIGNvbnRlbnQsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSBDYW5jZWxcbiAgICogYnV0dG9uIHRoYXQgYWJvcnRzIHRoZSBwcm92aWRlZCBjb250cm9sbGVyIHdoZW4gY2xpY2tlZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBEb2N1bWVudEZyYWdtZW50fSBob2xkaW5nIHRoZSBjb250ZW50IGFuZCwgaWYgcmVxdWVzdGVkLCBhIENhbmNlbCBidXR0b24uXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkRGVsYXllZE5vdGljZU1lc3NhZ2UocGFyYW1zOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlUGFyYW1zKTogRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgY29uc3QgeyBhYm9ydENvbnRyb2xsZXIsIGNhbmNlbEJ1dHRvblRleHQsIGNvbnRlbnQgfSA9IHBhcmFtcztcbiAgICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgZnJhZ21lbnQuYXBwZW5kVGV4dChjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnJhZ21lbnQuYXBwZW5kKGNvbnRlbnQpO1xuICAgIH1cblxuICAgIGlmIChhYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgIC8vIGBCdXR0b25Db21wb25lbnRgIHJlcXVpcmVzIGFuIGBIVE1MRWxlbWVudGAgcGFyZW50LCBzbyBidWlsZCBpdCBvbiBhIHRocm93YXdheVxuICAgICAgLy8gZGV0YWNoZWQgZWxlbWVudCBhbmQgbW92ZSBpdHMgYGJ1dHRvbkVsYCBpbnRvIHRoZSBmcmFnbWVudC5cbiAgICAgIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IG5ldyBCdXR0b25Db21wb25lbnQoY3JlYXRlRGl2KCkpO1xuICAgICAgY2FuY2VsQnV0dG9uLnNldEJ1dHRvblRleHQoY2FuY2VsQnV0dG9uVGV4dCA/PyB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMuYnV0dG9ucy5jYW5jZWwpKTtcbiAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoY2FuY2VsQnV0dG9uLmJ1dHRvbkVsLCBDc3NDbGFzcy5DYW5jZWxCdXR0b24pO1xuICAgICAgLy8gVGhlIGNsaWNrIGlzIHdpcmVkIHZpYSBgYWRkRXZlbnRMaXN0ZW5lcmAgcmF0aGVyIHRoYW4gYEJ1dHRvbkNvbXBvbmVudC5vbkNsaWNrYCBzbyBpdFxuICAgICAgLy8gYnViYmxlcyB0aHJvdWdoIHRoZSBpbnRlcmFjdGl2ZS1lbGVtZW50IGd1YXJkIChrZWVwaW5nIHRoZSBub3RpY2Ugb3BlbikgYW5kIHN0YXlzXG4gICAgICAvLyBkaXJlY3RseSBleGVyY2lzYWJsZSB2aWEgYSBkaXNwYXRjaGVkIERPTSBldmVudCBpbiB1bml0IHRlc3RzLlxuICAgICAgY2FuY2VsQnV0dG9uLmJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIH0pO1xuICAgICAgZnJhZ21lbnQuYXBwZW5kKGNhbmNlbEJ1dHRvbi5idXR0b25FbCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIG5vdGljZSBjb250ZW50IHdyYXBwZWQgaW4gYSBjb250YWluZXIgdGhhdCBrZWVwcyB0aGUgbm90aWNlIG9wZW4gd2hlbiBhbiBpbnRlcmFjdGl2ZVxuICAgKiBlbGVtZW50IGluc2lkZSBpdCBpcyBjbGlja2VkLiBPYnNpZGlhbiBkaXNtaXNzZXMgYSBub3RpY2Ugb24gYW55IGNsaWNrIHRoYXQgYnViYmxlcyB1cCB0byBpdHNcbiAgICogZWxlbWVudDsgdGhlIGNvbnRhaW5lciBpbnRlcmNlcHRzIGNsaWNrcyBvcmlnaW5hdGluZyBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IChhIGxpbmssIGJ1dHRvbixcbiAgICogaW5wdXQsIGV0Yy4pIGFuZCBzdG9wcyB0aGVtIHRoZXJlLCBzbyB0aGUgZWxlbWVudCdzIG93biBoYW5kbGVyIHN0aWxsIHJ1bnMgYnV0IHRoZSBub3RpY2Ugc3RheXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgVGhlIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnROb3RpY2VDb250ZW50fSBob2xkaW5nIHRoZSB3cmFwcGVkIG5vdGljZSBjb250ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZE5vdGljZUNvbnRlbnQocGFyYW1zOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZE5vdGljZUNvbnRlbnRQYXJhbXMpOiBQbHVnaW5Ob3RpY2VDb21wb25lbnROb3RpY2VDb250ZW50IHtcbiAgICBjb25zdCB7IGdldE5vdGljZSwgb25DbG9zZUNsaWNrLCByZXF1aXJlc0V4cGxpY2l0Q2xvc2UgPSBmYWxzZSwgc2hvdWxkUHJlZml4V2l0aFBsdWdpbk5hbWUgPSB0cnVlLCBzaG91bGRTaG93Q2xvc2VCdXR0b24gPSB0cnVlIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuc3RyaXBQbHVnaW5OYW1lUHJlZml4KHBhcmFtcy5tZXNzYWdlKTtcbiAgICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gICAgY29uc3QgY29udGVudEVsID0gZnJhZ21lbnQuY3JlYXRlRGl2KCk7XG4gICAgYWRkUGx1Z2luQ3NzQ2xhc3Nlcyhjb250ZW50RWwsIENzc0NsYXNzLlBsdWdpbk5vdGljZUNvbnRlbnQpO1xuICAgIGlmIChzaG91bGRQcmVmaXhXaXRoUGx1Z2luTmFtZSkge1xuICAgICAgY29udGVudEVsLmFwcGVuZCh0aGlzLmJ1aWxkUHJlZml4ZWRNZXNzYWdlKG1lc3NhZ2UpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgY29udGVudEVsLmFwcGVuZFRleHQobWVzc2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnRFbC5hcHBlbmQobWVzc2FnZSk7XG4gICAgfVxuICAgIGNvbnRlbnRFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgkZXZlbnQpID0+IHtcbiAgICAgIC8vIEEgaGFyZC10by1jbG9zZSBub3RpY2UgbXVzdCBub3QgZGlzbWlzcyBvbiBhbnkgc3RyYXkgY2xpY2s7IG9ubHkgaXRzIGNsb3NlIGJ1dHRvbiBtYXkgaGlkZSBpdC5cbiAgICAgIGlmIChyZXF1aXJlc0V4cGxpY2l0Q2xvc2UpIHtcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoJGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgJGV2ZW50LnRhcmdldC5jbG9zZXN0KElOVEVSQUNUSVZFX0VMRU1FTlRfU0VMRUNUT1IpKSB7XG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChyZXF1aXJlc0V4cGxpY2l0Q2xvc2UgJiYgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uKSB7XG4gICAgICB0aGlzLmFwcGVuZENsb3NlQnV0dG9uKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQbHVnaW5Ob3RpY2VDb21wb25lbnRBcHBlbmRDbG9zZUJ1dHRvblBhcmFtcz4oe1xuICAgICAgICBjb250ZW50RWwsXG4gICAgICAgIGdldE5vdGljZTogZW5zdXJlTm9uTnVsbGFibGUoZ2V0Tm90aWNlKSxcbiAgICAgICAgb25DbG9zZUNsaWNrXG4gICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiB7IGNvbnRlbnRFbCwgZnJhZ21lbnQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIG5vdGljZSBjb250ZW50LCBwcmVmaXhpbmcgdGhlIG1lc3NhZ2Ugd2l0aCB0aGUgcGx1Z2luIG5hbWUgaW4gYSBzdHlsZWQgZWxlbWVudCBzbyBpdCBpc1xuICAgKiB2aXN1YWxseSBkaXN0aW5ndWlzaGVkIGZyb20gdGhlIG1lc3NhZ2UgYm9keS5cbiAgICpcbiAgICogVGhlIG5hbWUgaXMgcmVuZGVyZWQgYXMgaW5saW5lIGNvZGUsIHRoZSB3YXkgZXZlcnkgcGx1Z2luIG5hbWUgaW4gdGhlIFVJIGlzLCBpbnNpZGUgYSBzcGFuIHRoYXQga2VlcHNcbiAgICogdGhlIHByZWZpeCdzIG93biBsYXlvdXQgYW5kIGFjY2VudCBjb2xvci5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5IGFmdGVyIHRoZSBwbHVnaW4gbmFtZSBwcmVmaXguXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERvY3VtZW50RnJhZ21lbnR9IHdpdGggdGhlIHN0eWxlZCBwbHVnaW4gbmFtZSBwcmVmaXggZm9sbG93ZWQgYnkgdGhlIG1lc3NhZ2UuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkUHJlZml4ZWRNZXNzYWdlKG1lc3NhZ2U6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gICAgY29uc3QgbmFtZUVsID0gY3JlYXRlU3BhbigpO1xuICAgIGFwcGVuZENvZGVCbG9jayhuYW1lRWwsIHRoaXMucGx1Z2luTmFtZSk7XG4gICAgYWRkUGx1Z2luQ3NzQ2xhc3NlcyhuYW1lRWwsIENzc0NsYXNzLlBsdWdpbk5vdGljZU5hbWUpO1xuICAgIGZyYWdtZW50LmFwcGVuZChuYW1lRWwpO1xuICAgIGlmICghdGhpcy5fbG9hZGVkKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCcgKHVubG9hZGVkKScpO1xuICAgIH1cbiAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCdcXG4nKTtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KG1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmQobWVzc2FnZSk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVybWFuZW50Tm90aWNlKCk6IE5vdGljZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmdldFBlcm1hbmVudE5vdGljZXMoKS5nZXQodGhpcy5wbHVnaW5OYW1lKSA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJtYW5lbnROb3RpY2VzKCk6IE1hcDxzdHJpbmcsIE5vdGljZT4ge1xuICAgIHJldHVybiBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGU8TWFwPHN0cmluZywgTm90aWNlPj4oUEVSTUFORU5UX05PVElDRVNfU1RBVEVfS0VZLCBuZXcgTWFwPHN0cmluZywgTm90aWNlPigpKS52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZWFzdXJlcyBhIGxlYWRpbmcgYDxwbHVnaW4gbmFtZT46YCBpbiBhIG1lc3NhZ2UsIHRvZ2V0aGVyIHdpdGggdGhlIHdoaXRlc3BhY2UgYXJvdW5kIHRoZSBjb2xvbiBhbmRcbiAgICogYWZ0ZXIgaXQuXG4gICAqXG4gICAqIEBwYXJhbSB0ZXh0IC0gVGhlIG1lc3NhZ2UgdGV4dC5cbiAgICogQHJldHVybnMgVGhlIGxlbmd0aCBvZiB0aGUgcHJlZml4LCBvciBgMGAgd2hlbiB0aGUgdGV4dCBkb2VzIG5vdCBvcGVuIHdpdGggdGhpcyBwbHVnaW4ncyBuYW1lIGFuZCBhXG4gICAqIGNvbG9uLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQbHVnaW5OYW1lUHJlZml4TGVuZ3RoKHRleHQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLnBsdWdpbk5hbWUgfHwgIXRleHQuc3RhcnRzV2l0aCh0aGlzLnBsdWdpbk5hbWUpKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY29uc3Qgc2VwYXJhdG9yTWF0Y2ggPSAvXlxccyo6XFxzKi8uZXhlYyh0ZXh0LnNsaWNlKHRoaXMucGx1Z2luTmFtZS5sZW5ndGgpKTtcbiAgICByZXR1cm4gc2VwYXJhdG9yTWF0Y2ggPyB0aGlzLnBsdWdpbk5hbWUubGVuZ3RoICsgc2VwYXJhdG9yTWF0Y2hbMF0ubGVuZ3RoIDogMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlcyBhIG5vdGljZSBoYXJkIHRvIGNsb3NlOiBtYXJrcyBpdHMgb3V0ZXIgZWxlbWVudCAoc28gdGhlIENTUyBuZXV0cmFsaXplcyBpdHMgcGFkZGluZykgYW5kXG4gICAqIGluc3RhbGxzIGEgY2FwdHVyZS1waGFzZSBjbGljayBndWFyZCB0aGF0IHN0b3BzIGV2ZXJ5IGNsaWNrIGV4Y2VwdCBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IChhXG4gICAqIGJ1dHRvbiwgbGluaywgdGhlIGNsb3NlIGJ1dHRvbiwgZXRjLikgZnJvbSByZWFjaGluZyBPYnNpZGlhbidzIG93biBkaXNtaXNzIGhhbmRsZXIg4oCUIHNvIGFuXG4gICAqIGludGVyYWN0aXZlIGNoaWxkJ3Mgb3duIGhhbmRsZXIgc3RpbGwgcnVucyB3aGlsZSBhIHN0cmF5IGNsaWNrIGNhbm5vdCBkaXNtaXNzIHRoZSBub3RpY2UuXG4gICAqXG4gICAqIEBwYXJhbSBub3RpY2UgLSBUaGUgbm90aWNlIHRvIGd1YXJkLlxuICAgKiBAcGFyYW0gcmVxdWlyZXNFeHBsaWNpdENsb3NlIC0gV2hldGhlciB0aGUgbm90aWNlIHJlcXVpcmVzIGV4cGxpY2l0IGNsb3NlOyB3aGVuIGBmYWxzZWAsIG5vdGhpbmcgaXNcbiAgICogaW5zdGFsbGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsRXhwbGljaXRDbG9zZUd1YXJkcyhub3RpY2U6IE5vdGljZSwgcmVxdWlyZXNFeHBsaWNpdENsb3NlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCFyZXF1aXJlc0V4cGxpY2l0Q2xvc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gVGhlIG91dGVyIGAubm90aWNlYCBlbGVtZW50IChgY29udGFpbmVyRWxgKSBjYXJyaWVzIE9ic2lkaWFuJ3MgZGlzbWlzcy1vbi1jbGljayBoYW5kbGVyIGFuZCB0aGVcbiAgICAvLyBwYWRkaW5nIGEgc3RyYXkgY2xpY2sgY291bGQgbGFuZCBvbjsgbWFyayBpdCBzbyB0aGUgc3R5bGVzaGVldCBkcm9wcyB0aGF0IHBhZGRpbmcuXG4gICAgYWRkUGx1Z2luQ3NzQ2xhc3Nlcyhub3RpY2UuY29udGFpbmVyRWwsIENzc0NsYXNzLlBsdWdpbk5vdGljZVJlcXVpcmVzRXhwbGljaXRDbG9zZSk7XG4gICAgLy8gU3RvcCBldmVyeSBjbGljayBvbiB0aGUgbm90aWNlIOKAlCBleGNlcHQgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCDigJQgZnJvbSByZWFjaGluZyBPYnNpZGlhbidzXG4gICAgLy8gZGlzbWlzcyBoYW5kbGVyLiBSZWdpc3RlcmVkIGluIHRoZSBjYXB0dXJlIHBoYXNlIG9uIHRoZSBvdXRlcm1vc3QgZWxlbWVudCBzbyBpdCBhbHdheXMgcnVucyBmaXJzdC5cbiAgICAvLyBMZXR0aW5nIGEgY2xpY2sgcmVhY2ggYW4gaW50ZXJhY3RpdmUgY2hpbGQgKGEgYnV0dG9uLCBsaW5rLCB0aGUgY2xvc2UgYnV0dG9uLCBldGMuKSBpcyB3aGF0IGtlZXBzXG4gICAgLy8gaXRzIG93biBoYW5kbGVyIHdvcmtpbmc7IHRoZSBidWJibGUtcGhhc2UgZ3VhcmQgb24gdGhlIGNvbnRlbnQgd3JhcHBlciB0aGVuIHN0b3BzIHRoYXQgY2xpY2sgZnJvbVxuICAgIC8vIGJ1YmJsaW5nIHVwIHRvIE9ic2lkaWFuJ3MgZGlzbWlzcyBoYW5kbGVyLCBzbyB0aGUgbm90aWNlIHN0aWxsIHN0YXlzIG9wZW4uXG4gICAgbm90aWNlLmNvbnRhaW5lckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCRldmVudCkgPT4ge1xuICAgICAgaWYgKCRldmVudC50YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50ICYmICRldmVudC50YXJnZXQuY2xvc2VzdChJTlRFUkFDVElWRV9FTEVNRU5UX1NFTEVDVE9SKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrcyBhIGNsaWNrIG9uIHRoZSBub3RpY2Ugc28ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLm9uSGlkZX0gY2FuIHJlcG9ydCBhXG4gICAqIHVzZXIgZGlzbWlzc2FsLiBPYnNpZGlhbiBoaWRlcyBhIGRpc21pc3NpYmxlIG5vdGljZSBzeW5jaHJvbm91c2x5IGR1cmluZyB0aGUgY2xpY2ssIHNvIGFcbiAgICogY2FwdHVyZS1waGFzZSBsaXN0ZW5lciBtYXJrcyB0aGUgbm90aWNlIGJlZm9yZSB0aGF0IGhpZGUgcnVuczsgdGhlIG1hcmsgaXMgY2xlYXJlZCBhZnRlciB0aGUgZXZlbnRcbiAgICogc28gYSBsYXRlciBwcm9ncmFtbWF0aWMgaGlkZSBpcyBub3QgbWlzYXR0cmlidXRlZC4gQSBjbG9zZS1idXR0b24gY2xpY2sgaXMgdHJhY2tlZCBzZXBhcmF0ZWx5IChzZWVcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudC5hcHBlbmRDbG9zZUJ1dHRvbn0pLlxuICAgKlxuICAgKiBAcGFyYW0gbm90aWNlIC0gVGhlIG5vdGljZSB0byB0cmFjay5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbFVzZXJDbGlja1RyYWNraW5nKG5vdGljZTogTm90aWNlKTogdm9pZCB7XG4gICAgbm90aWNlLmNvbnRhaW5lckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgLy8gT2JzaWRpYW4gZGlzbWlzc2VzIGEgZGlzbWlzc2libGUgbm90aWNlIHN5bmNocm9ub3VzbHkgZHVyaW5nIHRoaXMgY2xpY2ssIHNvIG1hcmsgaXQgbm93IChiZWZvcmVcbiAgICAgIC8vIHRoYXQgaGlkZSBydW5zKSBhbmQgY2xlYXIgaXQgb24gdGhlIG5leHQgbWljcm90YXNrIOKAlCBhZnRlciBhbnkgc3luY2hyb25vdXMgZGlzbWlzcywgYnV0IGJlZm9yZSBhXG4gICAgICAvLyBsYXRlciBwcm9ncmFtbWF0aWMgaGlkZSwgc28gdGhhdCBoaWRlIGlzIG5vdCBtaXNhdHRyaWJ1dGVkIGFzIGEgdXNlciBhY3Rpb24uXG4gICAgICB0aGlzLnVzZXJDbGlja2VkTm90aWNlcy5hZGQobm90aWNlKTtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy51c2VyQ2xpY2tlZE5vdGljZXMuZGVsZXRlKG5vdGljZSk7XG4gICAgICB9KTtcbiAgICB9LCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFBlcm1hbmVudE5vdGljZShub3RpY2U6IE5vdGljZSB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCBtYXAgPSB0aGlzLmdldFBlcm1hbmVudE5vdGljZXMoKTtcbiAgICBpZiAobm90aWNlKSB7XG4gICAgICBtYXAuc2V0KHRoaXMucGx1Z2luTmFtZSwgbm90aWNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFwLmRlbGV0ZSh0aGlzLnBsdWdpbk5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyBhIG5vdGljZSB3aXRoIHRoZSBnaXZlbiBkdXJhdGlvbiwgcGxhY2luZyBpdCBhY2NvcmRpbmcgdG8gaXRzIHtAbGluayBQbHVnaW5Ob3RpY2VNb2RlfTogYVxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZS5SZXBsYWNlfSBub3RpY2UgdGFrZXMgdGhlIHBlci1wbHVnaW4gc2xvdCAoaGlkaW5nIHdoYXRldmVyIHdhcyBpbiBpdCwgYW5kXG4gICAqIG9wdGlvbmFsbHkgcmVnaXN0ZXJpbmcgYXMgdGhpcyBwbHVnaW4ncyBwZXJtYW5lbnQgbm90aWNlKSwgYW4ge0BsaW5rIFBsdWdpbk5vdGljZU1vZGUuQXBwZW5kfSBvbmVcbiAgICogam9pbnMgdGhlIG5vdGljZSBhbHJlYWR5IGluIHRoZSBzbG90LCBhbmQgYSB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZS5TZXBhcmF0ZX0gb25lIGlzIHRyYWNrZWQgb24gaXRzXG4gICAqIG93biwgbGVhdmluZyB0aGUgc2xvdCB1bnRvdWNoZWQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgVGhlIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93bk5vdGljZX0gZGVzY3JpYmluZyB3aGVyZSB0aGUgbWVzc2FnZSBlbmRlZCB1cC5cbiAgICovXG4gIHByaXZhdGUgc2hvd05vdGljZVdpdGhEdXJhdGlvbihwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VXaXRoRHVyYXRpb25QYXJhbXMpOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93bk5vdGljZSB7XG4gICAgY29uc3QgeyBkdXJhdGlvbkluTWlsbGlzZWNvbmRzLCBtZXNzYWdlLCBtb2RlLCBvbkNsb3NlQ2xpY2ssIG9uSGlkZSwgcmVxdWlyZXNFeHBsaWNpdENsb3NlLCBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50LCBzaG91bGRTaG93Q2xvc2VCdXR0b24gfSA9IHBhcmFtcztcbiAgICAvLyBPYnNpZGlhbidzIGBOb3RpY2VgIHRyZWF0cyBhbiBvbWl0dGVkIGR1cmF0aW9uIGFzIGl0cyBkZWZhdWx0LCBzbyBtYXAgdGhlIGBudWxsYCBcIm5vIGV4cGxpY2l0XG4gICAgLy8gZHVyYXRpb25cIiB2YWx1ZSB0byBgdW5kZWZpbmVkYC5cbiAgICBjb25zdCBub3RpY2VEdXJhdGlvbkluTWlsbGlzZWNvbmRzID0gZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA/PyB1bmRlZmluZWQ7XG5cbiAgICBpZiAobW9kZSA9PT0gUGx1Z2luTm90aWNlTW9kZS5BcHBlbmQpIHtcbiAgICAgIGNvbnN0IGFwcGVuZGVkTm90aWNlID0gdGhpcy5hcHBlbmRUb0N1cnJlbnROb3RpY2Uobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFBsdWdpbk5vdGljZUNvbXBvbmVudEFwcGVuZFRvQ3VycmVudE5vdGljZVBhcmFtcz4oe1xuICAgICAgICBkdXJhdGlvbkluTWlsbGlzZWNvbmRzLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBvbkhpZGUsXG4gICAgICAgIHNob3VsZFJlZ2lzdGVyQXNQZXJtYW5lbnRcbiAgICAgIH0pKTtcbiAgICAgIGlmIChhcHBlbmRlZE5vdGljZSkge1xuICAgICAgICByZXR1cm4gYXBwZW5kZWROb3RpY2U7XG4gICAgICB9XG4gICAgICAvLyBOb3RoaW5nIG9uIHNjcmVlbiB0byBhcHBlbmQgdG8sIHNvIHRoaXMgbWVzc2FnZSBiZWNvbWVzIHRoZSBzbG90J3Mgbm90aWNlIGluc3RlYWQuXG4gICAgfVxuXG4gICAgY29uc3QgaGFzQ2xvc2VCdXR0b24gPSByZXF1aXJlc0V4cGxpY2l0Q2xvc2UgJiYgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uO1xuICAgIC8vIFRoZSBjbG9zZSBidXR0b24ncyBjbGljayBoYW5kbGVyIG5lZWRzIHRoZSBgTm90aWNlYCwgd2hpY2ggZG9lcyBub3QgZXhpc3QgdW50aWwgaXQgaXMgYnVpbHQgZnJvbVxuICAgIC8vIHRoaXMgY29udGVudDsgY2FwdHVyZSBpdCBsYXppbHkgdmlhIGEgaG9sZGVyIHJlc29sdmVkIGF0IGNsaWNrIHRpbWUuIFRoZSBnZXR0ZXIgaXMgY3JlYXRlZCBvbmx5XG4gICAgLy8gd2hlbiBhIGNsb3NlIGJ1dHRvbiBpcyBzaG93bi5cbiAgICBsZXQgYnVpbHROb3RpY2U6IE5vdGljZSB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IHsgY29udGVudEVsLCBmcmFnbWVudCB9ID0gdGhpcy5idWlsZE5vdGljZUNvbnRlbnQobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkTm90aWNlQ29udGVudFBhcmFtcz4oe1xuICAgICAgZ2V0Tm90aWNlOiBoYXNDbG9zZUJ1dHRvbiA/ICgpOiBOb3RpY2UgfCBudWxsID0+IGJ1aWx0Tm90aWNlIDogdW5kZWZpbmVkLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIG9uQ2xvc2VDbGljayxcbiAgICAgIHJlcXVpcmVzRXhwbGljaXRDbG9zZSxcbiAgICAgIHNob3VsZFNob3dDbG9zZUJ1dHRvblxuICAgIH0pKTtcblxuICAgIGlmIChtb2RlID09PSBQbHVnaW5Ob3RpY2VNb2RlLlNlcGFyYXRlKSB7XG4gICAgICBidWlsdE5vdGljZSA9IG5ldyBOb3RpY2UoZnJhZ21lbnQsIG5vdGljZUR1cmF0aW9uSW5NaWxsaXNlY29uZHMpO1xuICAgICAgdGhpcy5pbnN0YWxsRXhwbGljaXRDbG9zZUd1YXJkcyhidWlsdE5vdGljZSwgcmVxdWlyZXNFeHBsaWNpdENsb3NlKTtcbiAgICAgIHRoaXMuaW5zdGFsbFVzZXJDbGlja1RyYWNraW5nKGJ1aWx0Tm90aWNlKTtcbiAgICAgIHRoaXMud2lyZU9uSGlkZShidWlsdE5vdGljZSwgb25IaWRlKTtcbiAgICAgIHRoaXMuc3RhbmRhbG9uZU5vdGljZXMuYWRkKGJ1aWx0Tm90aWNlKTtcbiAgICAgIHJldHVybiB7IGNvbnRlbnRFbCwgaXNOb3RpY2VPd25lZDogdHJ1ZSwgbm90aWNlOiBidWlsdE5vdGljZSB9O1xuICAgIH1cblxuICAgIHRoaXMubm90aWNlPy5oaWRlKCk7XG4gICAgYnVpbHROb3RpY2UgPSBuZXcgTm90aWNlKGZyYWdtZW50LCBub3RpY2VEdXJhdGlvbkluTWlsbGlzZWNvbmRzKTtcbiAgICB0aGlzLm5vdGljZSA9IGJ1aWx0Tm90aWNlO1xuICAgIHRoaXMuaW5zdGFsbEV4cGxpY2l0Q2xvc2VHdWFyZHMoYnVpbHROb3RpY2UsIHJlcXVpcmVzRXhwbGljaXRDbG9zZSk7XG4gICAgdGhpcy5pbnN0YWxsVXNlckNsaWNrVHJhY2tpbmcoYnVpbHROb3RpY2UpO1xuICAgIHRoaXMud2lyZU9uSGlkZShidWlsdE5vdGljZSwgb25IaWRlKTtcblxuICAgIGlmIChzaG91bGRSZWdpc3RlckFzUGVybWFuZW50KSB7XG4gICAgICB0aGlzLnNldFBlcm1hbmVudE5vdGljZShidWlsdE5vdGljZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0UGVybWFuZW50Tm90aWNlKG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4geyBjb250ZW50RWwsIGlzTm90aWNlT3duZWQ6IHRydWUsIG5vdGljZTogYnVpbHROb3RpY2UgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcm9wcyBhIGxlYWRpbmcgYDxwbHVnaW4gbmFtZT46YCBmcm9tIGEgbWVzc2FnZS4gVGhlIG5vdGljZSBhbHJlYWR5IG9wZW5zIHdpdGggdGhlIHBsdWdpbiBuYW1lIGluIGl0c1xuICAgKiBvd24gc3R5bGVkIGhlYWRlciwgc28gYSBtZXNzYWdlIHRoYXQgcmVwZWF0cyBpdCByZWFkcyBhcyB0aGUgbmFtZSB0d2ljZS5cbiAgICpcbiAgICogQSBmcmFnbWVudCBpcyBtYXRjaGVkIG9uIGl0cyB0ZXh0LCBzbyBhIG5hbWUgd3JhcHBlZCBpbiBhbiBlbGVtZW50IChzdWNoIGFzIGlubGluZSBjb2RlKSBzdGlsbFxuICAgKiBjb3VudHM7IHRoZSBwcmVmaXggaXMgY3V0IG91dCBvZiBpdHMgdGV4dCBub2RlcywgYW5kIGFuIGVsZW1lbnQgaXQgbGVhdmVzIGVtcHR5IGlzIHJlbW92ZWQuIFRoZSBuYW1lXG4gICAqIGlzIG1hdGNoZWQgZXhhY3RseSwgYW5kIG9ubHkgYXQgdGhlIHN0YXJ0OiBhIG1lc3NhZ2UgdGhhdCBtZXJlbHkgbWVudGlvbnMgdGhlIG5hbWUgbGF0ZXIgaXMgbGVmdFxuICAgKiBhbG9uZS5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgVGhlIG1lc3NhZ2Ugd2l0aG91dCB0aGUgcHJlZml4LiBBIGZyYWdtZW50IGlzIGNoYW5nZWQgaW4gcGxhY2UgYW5kIHJldHVybmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBzdHJpcFBsdWdpbk5hbWVQcmVmaXgobWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlLnNsaWNlKHRoaXMuZ2V0UGx1Z2luTmFtZVByZWZpeExlbmd0aChtZXNzYWdlKSk7XG4gICAgfVxuXG4gICAgbGV0IHJlbWFpbmluZ0xlbmd0aCA9IHRoaXMuZ2V0UGx1Z2luTmFtZVByZWZpeExlbmd0aChtZXNzYWdlLnRleHRDb250ZW50KTtcbiAgICBpZiAocmVtYWluaW5nTGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRleHROb2RlIG9mIGdldFRleHROb2RlcyhtZXNzYWdlKSkge1xuICAgICAgaWYgKHRleHROb2RlLmRhdGEubGVuZ3RoID4gcmVtYWluaW5nTGVuZ3RoKSB7XG4gICAgICAgIHRleHROb2RlLmRhdGEgPSB0ZXh0Tm9kZS5kYXRhLnNsaWNlKHJlbWFpbmluZ0xlbmd0aCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVtYWluaW5nTGVuZ3RoIC09IHRleHROb2RlLmRhdGEubGVuZ3RoO1xuICAgICAgLy8gQ2xpbWIgdG8gdGhlIG91dGVybW9zdCBlbGVtZW50IGhvbGRpbmcgbm90aGluZyBidXQgdGhpcyB0ZXh0LCBzbyBubyBlbXB0eSB3cmFwcGVyIGlzIGxlZnQgYmVoaW5kLlxuICAgICAgLy8gQSBub2RlIGRpcmVjdGx5IGluIHRoZSBmcmFnbWVudCBoYXMgbm8gcGFyZW50IGVsZW1lbnQsIHdoaWNoIGlzIHdoZXJlIHRoZSBjbGltYiBzdG9wcy5cbiAgICAgIGxldCBlbXB0aWVkTm9kZTogQ2hpbGROb2RlID0gdGV4dE5vZGU7XG4gICAgICB3aGlsZSAoZW1wdGllZE5vZGUucGFyZW50RWxlbWVudD8uY2hpbGROb2Rlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZW1wdGllZE5vZGUgPSBlbXB0aWVkTm9kZS5wYXJlbnRFbGVtZW50O1xuICAgICAgfVxuICAgICAgZW1wdGllZE5vZGUucmVtb3ZlKCk7XG4gICAgICBpZiAocmVtYWluaW5nTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcyBhIG5vdGljZSdzIGBoaWRlYCBzbyB0aGUgZ2l2ZW4gY2FsbGJhY2sgcnVucyB0aGUgZmlyc3QgdGltZSB0aGUgbm90aWNlIGlzIGhpZGRlbiDigJQgYnkgdGhlXG4gICAqIHVzZXIsIGJ5IGEgcmVwbGFjaW5nIG5vdGljZSwgYnkgaXRzIGR1cmF0aW9uIGVsYXBzaW5nLCBvciBvbiB1bmxvYWQuIERvZXMgbm90aGluZyB3aGVuIG5vIGNhbGxiYWNrXG4gICAqIGlzIGdpdmVuLlxuICAgKlxuICAgKiBAcGFyYW0gbm90aWNlIC0gVGhlIG5vdGljZSB3aG9zZSBgaGlkZWAgdG8gd3JhcC5cbiAgICogQHBhcmFtIG9uSGlkZSAtIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugb24gdGhlIGZpcnN0IGhpZGUsIG9yIGB1bmRlZmluZWRgIHRvIHNraXAgd3JhcHBpbmcuXG4gICAqL1xuICBwcml2YXRlIHdpcmVPbkhpZGUobm90aWNlOiBOb3RpY2UsIG9uSGlkZTogKChpbmZvOiBQbHVnaW5Ob3RpY2VIaWRlSW5mbykgPT4gUHJvbWlzYWJsZTx2b2lkPikgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoIW9uSGlkZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBSdW4gYG9uSGlkZWAgdGhlIGZpcnN0IHRpbWUgdGhlIG5vdGljZSBpcyBoaWRkZW4uIEEgYG9uY2VgIHBhdGNoIG9uIGBoaWRlYCBpbnRlcmNlcHRzIGV4YWN0bHkgb25lXG4gICAgLy8gY2FsbCB0aGVuIHVuaW5zdGFsbHMgaXRzZWxmICh1bmxvYWRpbmcgdGhpcyBkZWRpY2F0ZWQgY29tcG9uZW50KSwgc28gdGhlcmUgaXMgbm8gbWFudWFsXG4gICAgLy8gc2luZ2xlLWZpcmUgYm9va2tlZXBpbmcgYW5kIG5vIGxpbmdlcmluZyBwYXRjaCBvbiB0aGUgdHJhbnNpZW50IG5vdGljZS4gVGhlIHVzZXItY2xvc2UgZmxhZ3Mgd2VyZVxuICAgIC8vIHNldCBiZWZvcmUgYGhpZGUoKWAgd2FzIGludm9rZWQgKHNlZSBgYXBwZW5kQ2xvc2VCdXR0b25gIC8gYGluc3RhbGxVc2VyQ2xpY2tUcmFja2luZ2ApLCBzbyB0aGV5XG4gICAgLy8gc3RpbGwgaG9sZCB3aGVuIHJlYWQgaGVyZSBhZnRlciBgZmFsbGJhY2soKWAuXG4gICAgY29uc3QgcGF0Y2hDb21wb25lbnQgPSBuZXcgTW9ua2V5QXJvdW5kQ29tcG9uZW50KCk7XG4gICAgcGF0Y2hDb21wb25lbnQubG9hZCgpO1xuICAgIHBhdGNoQ29tcG9uZW50LnJlZ2lzdGVyTWV0aG9kUGF0Y2goe1xuICAgICAgJG9iamVjdDogbm90aWNlLFxuICAgICAgbWV0aG9kTmFtZTogJ2hpZGUnLFxuICAgICAgb25jZTogdHJ1ZSxcbiAgICAgIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2sgfSkgPT4ge1xuICAgICAgICBmYWxsYmFjaygpO1xuICAgICAgICBjb25zdCBpc0Nsb3NlQnV0dG9uQ2xpY2tlZCA9IHRoaXMuY2xvc2VCdXR0b25DbGlja2VkTm90aWNlcy5oYXMobm90aWNlKTtcbiAgICAgICAgY29uc3QgaXNVc2VyQWN0aW9uID0gaXNDbG9zZUJ1dHRvbkNsaWNrZWQgfHwgdGhpcy51c2VyQ2xpY2tlZE5vdGljZXMuaGFzKG5vdGljZSk7XG4gICAgICAgIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBvbkhpZGUoeyBpc0Nsb3NlQnV0dG9uQ2xpY2tlZCwgaXNVc2VyQWN0aW9uIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3RzIHRoZSB0ZXh0IG5vZGVzIHVuZGVyIGEgbm9kZSwgaW4gZG9jdW1lbnQgb3JkZXIuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgbm9kZSB0byB3YWxrLlxuICogQHJldHVybnMgVGhlIHRleHQgbm9kZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFRleHROb2Rlcyhub2RlOiBOb2RlKTogVGV4dFtdIHtcbiAgY29uc3QgdGV4dE5vZGVzOiBUZXh0W10gPSBbXTtcbiAgZm9yIChjb25zdCBjaGlsZE5vZGUgb2Ygbm9kZS5jaGlsZE5vZGVzKSB7XG4gICAgaWYgKGlzVGV4dE5vZGUoY2hpbGROb2RlKSkge1xuICAgICAgdGV4dE5vZGVzLnB1c2goY2hpbGROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dE5vZGVzLnB1c2goLi4uZ2V0VGV4dE5vZGVzKGNoaWxkTm9kZSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGV4dE5vZGVzO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbm9kZSBpcyBhIHRleHQgbm9kZS4gSXQgcmVhZHMgdGhlIG5vZGUgdHlwZSByYXRoZXIgdGhhbiBgaW5zdGFuY2VvZiBUZXh0YCwgd2hpY2ggaXNcbiAqIGZhbHNlIGZvciBhIG5vZGUgZnJvbSBhIHBvcG91dCB3aW5kb3cncyByZWFsbS5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBub2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgbm9kZSBpcyBhIHRleHQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gaXNUZXh0Tm9kZShub2RlOiBOb2RlKTogbm9kZSBpcyBUZXh0IHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQSxtQkFBeUI7QUFDekIsbUJBQWtDO0FBQ2xDLDBCQUE0QztBQUM1Qyx5QkFBa0M7QUFDbEMsNEJBQTZCO0FBQzdCLHNCQUlPO0FBRVAsdUJBQXlCO0FBQ3pCLDBCQUFnQztBQUNoQyxrQkFBa0I7QUFDbEIsc0NBQXlDO0FBQ3pDLDRCQUFvQztBQUNwQywwQkFBNEI7QUFDNUIscUNBQXNDO0FBRXRDLE1BQU0sOEJBQThCO0FBQ3BDLE1BQU0sNENBQTRDO0FBQ2xELE1BQU0sNENBQTRDO0FBSWxELE1BQU0sbURBQW1EO0FBSXpELE1BQU0sK0JBQStCO0FBUzlCLElBQUssbUJBQUwsa0JBQUtBLHNCQUFMO0FBU0ws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
|
|
690
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCBtYW5hZ2VzIGRpc3BsYXlpbmcgbm90aWNlcyB0byB0aGUgdXNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFZhbHVlUHJvdmlkZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdmFsdWUtcHJvdmlkZXInO1xuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBzbmFwc2hvdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hcnJheSc7XG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi92YWx1ZS1wcm92aWRlcic7XG5pbXBvcnQge1xuICBCdXR0b25Db21wb25lbnQsXG4gIE5vdGljZSxcbiAgc2V0SWNvblxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IGFwcGVuZENvZGVCbG9jayB9IGZyb20gJy4uL2h0bWwtZWxlbWVudC50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGdldE9ic2lkaWFuTGliU3RhdGUgfSBmcm9tICcuLi9vYnNpZGlhbi1saWItc3RhdGUudHMnO1xuaW1wb3J0IHsgYWRkUGx1Z2luQ3NzQ2xhc3NlcyB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tY29udGV4dC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IE1vbmtleUFyb3VuZENvbXBvbmVudCB9IGZyb20gJy4vbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMnO1xuXG5jb25zdCBQRVJNQU5FTlRfTk9USUNFU19TVEFURV9LRVkgPSAncGx1Z2luLW5vdGljZS1jb21wb25lbnQ6cGVybWFuZW50LW5vdGljZXMnO1xuY29uc3QgUEVSTUFORU5UX05PVElDRV9EVVJBVElPTl9JTl9NSUxMSVNFQ09ORFMgPSAwO1xuY29uc3QgREVGQVVMVF9ERUxBWV9CRUZPUkVfU0hPV19JTl9NSUxMSVNFQ09ORFMgPSA1MDA7XG4vLyBPYnNpZGlhbidzIG93biBkZWZhdWx0IG5vdGljZSBkdXJhdGlvbiwgYXBwbGllZCBieSB0aGUgYE5vdGljZWAgY29uc3RydWN0b3Igd2hlbiBub25lIGlzIGdpdmVuLiBJdCBpc1xuLy8gcmVwZWF0ZWQgaGVyZSBiZWNhdXNlIHJlc3RhcnRpbmcgdGhlIGNvdW50ZG93biBvbiBhbiBhcHBlbmQgZ29lcyB0aHJvdWdoIGBzZXRBdXRvSGlkZWAsIHdoaWNoIHRha2VzIGFuXG4vLyBleHBsaWNpdCBkdXJhdGlvbiBhbmQgc28gY2Fubm90IGZhbGwgYmFjayB0byB0aGF0IGRlZmF1bHQgaXRzZWxmLlxuY29uc3QgT0JTSURJQU5fREVGQVVMVF9OT1RJQ0VfRFVSQVRJT05fSU5fTUlMTElTRUNPTkRTID0gNDAwMDtcblxuLy8gRWxlbWVudHMgYSB1c2VyIGNsaWNrcyB0byBhY3Qgb24gdGhlbSByYXRoZXIgdGhhbiB0byBkaXNtaXNzIHRoZSBub3RpY2UuIEEgY2xpY2sgbGFuZGluZyBvbiAob3Jcbi8vIGluc2lkZSkgb25lIG9mIHRoZXNlIGlzIGtlcHQgZnJvbSBidWJibGluZyB0byB0aGUgbm90aWNlLCBzbyB0aGUgbm90aWNlIHN0YXlzIG9wZW4uXG5jb25zdCBJTlRFUkFDVElWRV9FTEVNRU5UX1NFTEVDVE9SID0gJ2EsIGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGxhYmVsLCBbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXSwgW3JvbGU9XCJidXR0b25cIl0sIFtyb2xlPVwibGlua1wiXSwgW3JvbGU9XCJjaGVja2JveFwiXSwgW3JvbGU9XCJ0YWJcIl0sIFtyb2xlPVwibWVudWl0ZW1cIl0nO1xuXG4vKipcbiAqIEhvdyBhIG5ldyBub3RpY2UgcmVsYXRlcyB0byB0aGUgcGx1Z2luJ3MgY3VycmVudCBub3RpY2Ug4oCUIHRoZSBvbmUgb2NjdXB5aW5nIHRoZSBzaW5nbGUgcGVyLXBsdWdpblxuICogc2xvdCB0aGlzIGNvbXBvbmVudCBrZWVwcy5cbiAqXG4gKiBSYXcgYG5ldyBOb3RpY2UoLi4uKWAgY2FsbHMgYWx3YXlzIHBpbGUgdXAsIHdoaWNoIGlzIHJhcmVseSB3aGF0IGEgcGx1Z2luIHdhbnRzOiB1c3VhbGx5IG9ubHkgdGhlXG4gKiBsYXRlc3QgbWVzc2FnZSBtYXR0ZXJzLiBTbyB0aGUgc2xvdCBleGlzdHMsIGFuZCB0aGlzIGNob29zZXMgd2hhdCBhIG5ldyBtZXNzYWdlIGRvZXMgd2l0aCBpdC5cbiAqL1xuZXhwb3J0IGVudW0gUGx1Z2luTm90aWNlTW9kZSB7XG4gIC8qKlxuICAgKiBBZGRzIHRoZSBtZXNzYWdlIHRvIHRoZSBjdXJyZW50IG5vdGljZSwgc28gYm90aCBtZXNzYWdlcyBzdGF5IHZpc2libGUgaW4gYSBzaW5nbGUgbm90aWNlIOKAlCBmb3IgYVxuICAgKiBydW5uaW5nIGFjY291bnQgb2YgYW4gb3BlcmF0aW9uLiBUaGUgY291bnRkb3duIHJlc3RhcnRzLCBzbyBhbiBhcHBlbmRlZCBtZXNzYWdlIGlzIHJlYWRhYmxlIGZvciBhXG4gICAqIGZ1bGwgZHVyYXRpb24gcmF0aGVyIHRoYW4gaW5oZXJpdGluZyB0aGUgcmVtYWlucyBvZiB0aGUgY3VycmVudCBvbmUuXG4gICAqXG4gICAqIEZhbGxzIGJhY2sgdG8ge0BsaW5rIFBsdWdpbk5vdGljZU1vZGUuUmVwbGFjZX0gd2hlbiB0aGVyZSBpcyBubyBjdXJyZW50IG5vdGljZSBvbiBzY3JlZW4gKGl0IHdhc1xuICAgKiBuZXZlciBzaG93biwgb3IgaXQgaGFzIHNpbmNlIGJlZW4gZGlzbWlzc2VkKS5cbiAgICovXG4gIEFwcGVuZCA9ICdhcHBlbmQnLFxuXG4gIC8qKlxuICAgKiBIaWRlcyB0aGUgY3VycmVudCBub3RpY2UgYW5kIHNob3dzIHRoaXMgb25lIGluIGl0cyBwbGFjZSwgc28gb25seSB0aGUgbGF0ZXN0IG1lc3NhZ2UgaXMgb24gc2NyZWVuLlxuICAgKiBUaGlzIGlzIHRoZSBkZWZhdWx0LCBhbmQgdGhlIHJlYXNvbiB0aGUgc2xvdCBleGlzdHMuXG4gICAqL1xuICBSZXBsYWNlID0gJ3JlcGxhY2UnLFxuXG4gIC8qKlxuICAgKiBTaG93cyB0aGUgbWVzc2FnZSBhcyBpdHMgb3duIG5vdGljZSwgbGVhdmluZyB0aGUgY3VycmVudCBvbmUgYWxvbmU6IGJvdGggYXJlIG9uIHNjcmVlbiwgcGlsZWQgdXBcbiAgICogbGlrZSBwbGFpbiBgbmV3IE5vdGljZSguLi4pYCBjYWxscy4gQSBzZXBhcmF0ZSBub3RpY2UgbmV2ZXIgcmVwbGFjZXMsIGFuZCBpcyBuZXZlciByZXBsYWNlZCBieSwgYVxuICAgKiBzbG90IG5vdGljZTsgYW55IG51bWJlciBvZiB0aGVtIGNvZXhpc3QuIFRoZXkgYXJlIHN0aWxsIGhpZGRlbiB0b2dldGhlciBvbiB1bmxvYWQuXG4gICAqL1xuICBTZXBhcmF0ZSA9ICdzZXBhcmF0ZSdcbn1cblxuLyoqXG4gKiBUaGUgZXZlbnQgcGFzc2VkIHRvIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5vbkNsb3NlQ2xpY2t9IHdoZW4gdGhlIG5vdGljZSdzXG4gKiBjbG9zZSAoWCkgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTm90aWNlQ2xvc2VDbGlja0V2ZW50IHtcbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIGNsb3NlLCBsZWF2aW5nIHRoZSBub3RpY2Ugb3Blbi5cbiAgICovXG4gIGNhbmNlbDogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBBIGhhbmRsZSB0byBhIGRlbGF5ZWQgbm90aWNlIGNyZWF0ZWQgYnkge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlQWZ0ZXJEZWxheX0uIEl0IGlzIGFcbiAqIHtAbGluayBEaXNwb3NhYmxlfSAoc28gaXQgY2FuIGJlIHVzZWQgd2l0aCBgdXNpbmdgKSB0aGF0IGFsc28gbGV0cyB0aGUgY29udGVudCBiZSB1cGRhdGVkIHdoaWxlIHRoZVxuICogbm90aWNlIGlzIHNob3duLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudERlbGF5ZWROb3RpY2UgZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoaXMgaGFuZGxlJ3MgbWVzc2FnZSwgcmUtYXBwbHlpbmcgdGhlIHBsdWdpbi1uYW1lIHByZWZpeCwgdGhlIGludGVyYWN0aXZlLWNsaWNrIGd1YXJkLCBhbmRcbiAgICogdGhlIENhbmNlbCBidXR0b24uIFVzZWZ1bCBmb3IgcmVwb3J0aW5nIHByb2dyZXNzLiBJZiB0aGUgZGVsYXkgaGFzIG5vdCBlbGFwc2VkIHlldCwgdGhlIG5ldyBjb250ZW50XG4gICAqIGJlY29tZXMgd2hhdCBpcyBzaG93biBvbmNlIGl0IGRvZXMuXG4gICAqXG4gICAqIE9ubHkgdGhpcyBoYW5kbGUncyBvd24gbWVzc2FnZSBpcyByZXdyaXR0ZW46IHdoZW4gdGhlIG5vdGljZSB3YXMgam9pbmVkIHJhdGhlciB0aGFuIG9wZW5lZCAoc2VlXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcy5tb2RlfSksIHRoZSBtZXNzYWdlcyBhbHJlYWR5IGluIGl0IGFyZSBsZWZ0XG4gICAqIGFsb25lLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGVudCAtIFRoZSBuZXcgbm90aWNlIGNvbnRlbnQuXG4gICAqL1xuICBzZXRDb250ZW50OiAoY29udGVudDogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZykgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2VBZnRlckRlbGF5fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcyB7XG4gIC8qKlxuICAgKiBXaGVuIHByb3ZpZGVkLCBhIENhbmNlbCBidXR0b24gaXMgYXBwZW5kZWQgdG8gdGhlIG5vdGljZTsgY2xpY2tpbmcgaXQgYWJvcnRzIHRoaXMgY29udHJvbGxlci4gV2hlblxuICAgKiBvbWl0dGVkLCBubyBDYW5jZWwgYnV0dG9uIGlzIHNob3duLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRDb250cm9sbGVyPzogQWJvcnRDb250cm9sbGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBvZiB0aGUgQ2FuY2VsIGJ1dHRvbiBzaG93biB3aGVuIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcy5hYm9ydENvbnRyb2xsZXJ9XG4gICAqIGlzIHByb3ZpZGVkLiBXaGVuIG9taXR0ZWQsIHRoZSBsb2NhbGl6ZWQgYENhbmNlbGAgbGFiZWwgaXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpY2UgY29udGVudCwgcmVzb2x2ZWQgbGF6aWx5IG9ubHkgaWYgdGhlIGRlbGF5IGVsYXBzZXMg4oCUIHNvIGFuIG9wZXJhdGlvbiB0aGF0IGZpbmlzaGVzXG4gICAqIHNvb25lciBuZXZlciBidWlsZHMgaXQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBWYWx1ZVByb3ZpZGVyPERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0aGUgb3BlcmF0aW9uIG11c3QgcnVuIGJlZm9yZSB0aGUgbm90aWNlIGlzIHNob3duLiBPcGVyYXRpb25zIHRoYXQgZmluaXNoIHNvb25lciBuZXZlclxuICAgKiBzaG93IGEgbm90aWNlLCBhdm9pZGluZyBhIGRpc3RyYWN0aW5nIGZsYXNoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNTAwYFxuICAgKi9cbiAgcmVhZG9ubHkgZGVsYXlJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogSG93IHRoaXMgbm90aWNlIHJlbGF0ZXMgdG8gdGhlIHBsdWdpbidzIGN1cnJlbnQgbm90aWNlIOKAlCBzZWUge0BsaW5rIFBsdWdpbk5vdGljZU1vZGV9LlxuICAgKlxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZS5TZXBhcmF0ZX0gaXMgd29ydGggY29uc2lkZXJpbmcgZm9yIGEgbG9uZyBvcGVyYXRpb246IG9uIHRoZSBkZWZhdWx0XG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VNb2RlLlJlcGxhY2V9IHRoZSBwcm9ncmVzcyBub3RpY2UgdGFrZXMgdGhlIHNoYXJlZCBzbG90LCBzbyBhbnkgb3JkaW5hcnkgbm90aWNlXG4gICAqIHJhaXNlZCB3aGlsZSB0aGUgb3BlcmF0aW9uIHJ1bnMgaGlkZXMgaXQsIGFuZCB0aGUgcHJvZ3Jlc3MgdGhlIHVzZXIgd2FzIHdhdGNoaW5nIGRvZXMgbm90IGNvbWUgYmFjay5cbiAgICpcbiAgICogV2hpY2hldmVyIG1vZGUgaXMgdXNlZCwgdGhlIHJldHVybmVkIGhhbmRsZSBvd25zIG9ubHkgSVRTIG1lc3NhZ2U6IHVwZGF0aW5nIHRoZSBjb250ZW50IHJld3JpdGVzXG4gICAqIHRoYXQgbWVzc2FnZSBhbG9uZSwgYW5kIGRpc3Bvc2luZyB0YWtlcyBhd2F5IG9ubHkgdGhhdCBtZXNzYWdlIHdoZW4gdGhlIG5vdGljZSB3YXMgYWxyZWFkeSBvblxuICAgKiBzY3JlZW4gKGEgbm90aWNlIHRoaXMgaGFuZGxlIG9wZW5lZCBpcyBoaWRkZW4gYXMgYSB3aG9sZSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBQbHVnaW5Ob3RpY2VNb2RlLlJlcGxhY2V9XG4gICAqL1xuICByZWFkb25seSBtb2RlPzogUGx1Z2luTm90aWNlTW9kZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5vdGljZSBzaG91bGQgc3RheSB1bnRpbCBpdCBpcyByZXBsYWNlZCwgdGhlIHBsdWdpbiBpcyByZWxvYWRlZCwgb3IgdGhlIHVzZXIgZGlzbWlzc2VzIGl0LlxuICAgKlxuICAgKiBBIHBlcm1hbmVudCBub3RpY2UgaXMgc2hvd24gd2l0aCBhbiBpbmZpbml0ZSBkdXJhdGlvbiBhbmQgaXMgbm90IGhpZGRlbiB3aGVuIHRoZSBjb21wb25lbnQgdW5sb2Fkcywgc28gaXQgY2FuXG4gICAqIGNvbW11bmljYXRlIHN0YXRlIHRoYXQgb3V0bGl2ZXMgdGhlIHBsdWdpbiAoZS5nLiBhIGNsZWFudXAgdGhhdCByZXF1aXJlcyBhIHJlbG9hZCkuIFRoZXJlIGlzIGF0IG1vc3Qgb25lIHBlcm1hbmVudFxuICAgKiBub3RpY2UgcGVyIHBsdWdpbjogaXQgaXMgaGlkZGVuIGJ5IHRoZSBuZXh0IHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZX0gY2FsbCBhbmQgZGlzbWlzc2VkXG4gICAqIGF1dG9tYXRpY2FsbHkgdGhlIG5leHQgdGltZSB0aGUgY29tcG9uZW50IGxvYWRzIChpLmUuIHdoZW4gdGhlIHBsdWdpbiBpcyByZS1lbmFibGVkKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNQZXJtYW5lbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhpcyBub3RpY2UgcmVsYXRlcyB0byB0aGUgcGx1Z2luJ3MgY3VycmVudCBub3RpY2Ug4oCUIHNlZSB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZX0uXG4gICAqXG4gICAqIEEgcGVybWFuZW50IG5vdGljZSBjYW5ub3QgYmUge0BsaW5rIFBsdWdpbk5vdGljZU1vZGUuU2VwYXJhdGV9IChpdCBuZWVkcyB0aGUgc2hhcmVkIHNsb3QgaXQgaXNcbiAgICogdHJhY2tlZCBpbiksIGFuZCBhIG5vdGljZSB0aGF0IGRvZXMgbm90IGhpZGUgb24gY2xpY2sgbXVzdCBiZVxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZS5TZXBhcmF0ZX0gKHNvIGEgbGF0ZXIgbm90aWNlIG5ldmVyIHNpbGVudGx5IHJlcGxhY2VzIGl0KTsgZWl0aGVyXG4gICAqIGNvbnRyYWRpY3Rpb24gdGhyb3dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZS5SZXBsYWNlfSwgb3Ige0BsaW5rIFBsdWdpbk5vdGljZU1vZGUuU2VwYXJhdGV9IHdoZW5cbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLnNob3VsZEhpZGVPbkNsaWNrfSBpcyBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBtb2RlPzogUGx1Z2luTm90aWNlTW9kZTtcblxuICAvKipcbiAgICogQSBjYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBjbG9zZSAoWCkgYnV0dG9uLCBiZWZvcmUgdGhlIG5vdGljZSBpcyBoaWRkZW4uIENhbGxcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZUNsb3NlQ2xpY2tFdmVudC5jYW5jZWx9IG9uIHRoZSBldmVudCB0byBjYW5jZWwgdGhlIGNsb3NlIGFuZCBrZWVwIHRoZSBub3RpY2VcbiAgICogb3BlbiDigJQgZm9yIGV4YW1wbGUgYWZ0ZXIgeW91ciBvd24gY29uZmlybWF0aW9uIGRlY2xpbmVzLiBBbiBhc3luYyBjYWxsYmFjayBpcyBhd2FpdGVkIGJlZm9yZSB0aGVcbiAgICogbm90aWNlIGlzIGhpZGRlbi4gUnVucyBvbmx5IHdoZW4gYSBjbG9zZSBidXR0b24gaXMgc2hvd24gKGJvdGhcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLnNob3VsZEhpZGVPbkNsaWNrfSBgPSBmYWxzZWAgYW5kXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5zaG91bGRTaG93Q2xvc2VCdXR0b259IGFyZSBzZXQpLlxuICAgKi9cbiAgcmVhZG9ubHkgb25DbG9zZUNsaWNrPzogKGV2ZW50OiBQbHVnaW5Ob3RpY2VDbG9zZUNsaWNrRXZlbnQpID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSBub3RpY2UgaXMgaGlkZGVuIOKAlCB3aGV0aGVyIGJ5IHRoZSB1c2VyIGNsb3NpbmcgaXQsIGJ5IGEgbGF0ZXIgcmV1c2FibGVcbiAgICogbm90aWNlIHJlcGxhY2luZyBpdCwgYnkgaXRzIGR1cmF0aW9uIGVsYXBzaW5nLCBvciBvbiBjb21wb25lbnQgdW5sb2FkLiBJdCBydW5zIGF0IG1vc3Qgb25jZSBwZXJcbiAgICogbm90aWNlLiBUaGUge0BsaW5rIFBsdWdpbk5vdGljZUhpZGVJbmZvfSBhcmd1bWVudCBkaXN0aW5ndWlzaGVzIGEgdXNlciBjbG9zZSAodGhlIGNsb3NlIGJ1dHRvbikgZnJvbVxuICAgKiBhIHByb2dyYW1tYXRpYyBoaWRlLiBBbiBhc3luYyBjYWxsYmFjayBpcyBydW4gZmlyZS1hbmQtZm9yZ2V0IChpdHMgcmVqZWN0aW9uIHN1cmZhY2VzIHRocm91Z2ggdGhlXG4gICAqIGFzeW5jLWVycm9yIHBpcGVsaW5lKS5cbiAgICovXG4gIHJlYWRvbmx5IG9uSGlkZT86IChpbmZvOiBQbHVnaW5Ob3RpY2VIaWRlSW5mbykgPT4gUHJvbWlzYWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogV2hldGhlciBjbGlja2luZyB0aGUgbm90aWNlIGhpZGVzIGl0LiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpLCB0aGUgbm90aWNlIGRpc21pc3NlcyBvbiBjbGljayBsaWtlXG4gICAqIGEgbm9ybWFsIE9ic2lkaWFuIG5vdGljZS4gV2hlbiBgZmFsc2VgLCB0aGUgbm90aWNlIGlzIGhhcmQgdG8gY2xvc2U6IGl0IGRvZXMgbm90IGRpc21pc3Mgb24gYW55IHN0cmF5XG4gICAqIGNsaWNrLCBhbmQgaW5zdGVhZCBzaG93cyBhIGNsb3NlIChYKSBidXR0b24gdGhhdCBoaWRlcyBpdCBkaXJlY3RseSAoc2VlXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5zaG91bGRTaG93Q2xvc2VCdXR0b259IGFuZFxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMub25DbG9zZUNsaWNrfSkuXG4gICAqXG4gICAqIEEgYHNob3VsZEhpZGVPbkNsaWNrOiBmYWxzZWAgbm90aWNlIGlzIHNob3duIHdpdGggYW4gaW5maW5pdGUgZHVyYXRpb24gYW5kIHN0YW5kcyBvbiBpdHMgb3duXG4gICAqIChpbXBsaWVzIHtAbGluayBQbHVnaW5Ob3RpY2VNb2RlLlNlcGFyYXRlfSksIHNvIGEgbGF0ZXIgbm90aWNlIG5ldmVyIHNpbGVudGx5IHJlcGxhY2VzIGl0OyBwYXNzaW5nXG4gICAqIGFueSBvdGhlciB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMubW9kZX0gdG9nZXRoZXIgd2l0aCBgc2hvdWxkSGlkZU9uQ2xpY2s6IGZhbHNlYFxuICAgKiB0aHJvd3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSGlkZU9uQ2xpY2s/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjbG9zZSAoWCkgYnV0dG9uIGlzIHNob3duIG9uIGEgaGFyZC10by1jbG9zZSBub3RpY2VcbiAgICogKHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5zaG91bGRIaWRlT25DbGlja30gYD0gZmFsc2VgKS4gV2hlbiBgZmFsc2VgLCBubyBjbG9zZVxuICAgKiBidXR0b24gaXMgcmVuZGVyZWQgYW5kIHRoZSBub3RpY2UgY2FuIG9ubHkgYmUgaGlkZGVuIHByb2dyYW1tYXRpY2FsbHkuIElnbm9yZWQgdW5sZXNzXG4gICAqIGBzaG91bGRIaWRlT25DbGlja2AgaXMgYGZhbHNlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTaG93Q2xvc2VCdXR0b24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyB3aHkgYSBub3RpY2Ugd2FzIGhpZGRlbiwgcGFzc2VkIHRvIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5vbkhpZGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk5vdGljZUhpZGVJbmZvIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5vdGljZSB3YXMgaGlkZGVuIGJ5IHRoZSB1c2VyIGNsaWNraW5nIGl0cyBjbG9zZSAoWCkgYnV0dG9uIHNwZWNpZmljYWxseS4gQWx3YXlzIGltcGxpZXNcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZUhpZGVJbmZvLmlzVXNlckFjdGlvbn0uXG4gICAqL1xuICByZWFkb25seSBpc0Nsb3NlQnV0dG9uQ2xpY2tlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbm90aWNlIHdhcyBoaWRkZW4gYnkgYSB1c2VyIGFjdGlvbiDigJQgY2xpY2tpbmcgdGhlIGNsb3NlIChYKSBidXR0b24sIG9yIGNsaWNraW5nIGFcbiAgICogZGlzbWlzc2libGUgbm90aWNlIHRvIGRpc21pc3MgaXQg4oCUIGFzIG9wcG9zZWQgdG8gcHJvZ3JhbW1hdGljYWxseSAoYSBsYXRlciByZXVzYWJsZSBub3RpY2UgcmVwbGFjaW5nXG4gICAqIGl0LCBhbiBleHBsaWNpdCBgaGlkZSgpYCwgdGhlIGR1cmF0aW9uIGVsYXBzaW5nLCBvciBjb21wb25lbnQgdW5sb2FkKS5cbiAgICovXG4gIHJlYWRvbmx5IGlzVXNlckFjdGlvbjogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudEFwcGVuZENsb3NlQnV0dG9uUGFyYW1zIHtcbiAgcmVhZG9ubHkgY29udGVudEVsOiBIVE1MRWxlbWVudDtcbiAgcmVhZG9ubHkgZ2V0Tm90aWNlOiAoKSA9PiBOb3RpY2UgfCBudWxsO1xuICByZWFkb25seSBvbkNsb3NlQ2xpY2s/OiAoZXZlbnQ6IFBsdWdpbk5vdGljZUNsb3NlQ2xpY2tFdmVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPjtcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudEFwcGVuZFRvQ3VycmVudE5vdGljZVBhcmFtcyB7XG4gIHJlYWRvbmx5IGR1cmF0aW9uSW5NaWxsaXNlY29uZHM6IG51bGwgfCBudW1iZXI7XG4gIHJlYWRvbmx5IG1lc3NhZ2U6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG4gIHJlYWRvbmx5IG9uSGlkZT86IChpbmZvOiBQbHVnaW5Ob3RpY2VIaWRlSW5mbykgPT4gUHJvbWlzYWJsZTx2b2lkPjtcbiAgcmVhZG9ubHkgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkRGVsYXllZE5vdGljZU1lc3NhZ2VQYXJhbXMge1xuICByZWFkb25seSBhYm9ydENvbnRyb2xsZXI/OiBBYm9ydENvbnRyb2xsZXI7XG4gIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbnRlbnQ6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZE5vdGljZUNvbnRlbnRQYXJhbXMge1xuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIG5vdGljZSB0aGlzIGNvbnRlbnQgYmVsb25ncyB0bywgdXNlZCBieSB0aGUgY2xvc2UgYnV0dG9uJ3MgaGFuZGxlci4gVGhlIG5vdGljZSBkb2VzXG4gICAqIG5vdCBleGlzdCB5ZXQgd2hlbiB0aGUgY29udGVudCBpcyBidWlsdCwgc28gaXQgaXMgcmVzb2x2ZWQgbGF6aWx5IGF0IGNsaWNrIHRpbWUuIFJlcXVpcmVkIHdoZW4gYVxuICAgKiBjbG9zZSBidXR0b24gaXMgc2hvd24uXG4gICAqL1xuICByZWFkb25seSBnZXROb3RpY2U/OiAoKSA9PiBOb3RpY2UgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBkaXNwbGF5IGFmdGVyIHRoZSBwbHVnaW4gbmFtZSBwcmVmaXguXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW4gdGhlIGNsb3NlIGJ1dHRvbiBpcyBjbGlja2VkOyBtYXkgY2FuY2VsIHRoZSBjbG9zZS4gU2VlXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5vbkNsb3NlQ2xpY2t9LlxuICAgKi9cbiAgcmVhZG9ubHkgb25DbG9zZUNsaWNrPzogKGV2ZW50OiBQbHVnaW5Ob3RpY2VDbG9zZUNsaWNrRXZlbnQpID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5vdGljZSBpcyBoYXJkIHRvIGNsb3NlOiBzdG9wcyBldmVyeSBjbGljayBmcm9tIGRpc21pc3NpbmcgaXQgYW5kLCB1bmxlc3Mgc3VwcHJlc3NlZCBieVxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGROb3RpY2VDb250ZW50UGFyYW1zLnNob3VsZFNob3dDbG9zZUJ1dHRvbn0sIGFkZHMgYSBjbG9zZSBidXR0b24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzRXhwbGljaXRDbG9zZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG1lc3NhZ2UgaXMgcHJlZml4ZWQgd2l0aCB0aGUgcGx1Z2luIG5hbWUuIE9ubHkgYSBtZXNzYWdlIHRoYXQgb3BlbnMgYSBub3RpY2UgaXNcbiAgICogcHJlZml4ZWQ7IGEgbWVzc2FnZSBhcHBlbmRlZCB0byBvbmUgYWxyZWFkeSBzaG93aW5nIGl0IGlzIG5vdCwgc28gdGhlIG5hbWUgaXMgbm90IHJlcGVhdGVkIG9uIGV2ZXJ5XG4gICAqIGxpbmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUHJlZml4V2l0aFBsdWdpbk5hbWU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlbmRlciB0aGUgY2xvc2UgYnV0dG9uIHdoZW4ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkTm90aWNlQ29udGVudFBhcmFtcy5yZXF1aXJlc0V4cGxpY2l0Q2xvc2V9LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBidWlsdCBtZXNzYWdlOiB0aGUgd3JhcHBlciBlbGVtZW50IGhvbGRpbmcgaXQsIGFuZCB0aGUgZnJhZ21lbnQgdGhhdCBlbGVtZW50IHNpdHMgaW4uXG4gKlxuICogVGhlIGVsZW1lbnQgaXMgaGFuZGVkIGJhY2sgYmVjYXVzZSBhIG5vdGljZSBjYW4gaG9sZCBzZXZlcmFsIG9mIHRoZW0gKHNlZSB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZS5BcHBlbmR9KSxcbiAqIHNvIHdob2V2ZXIgb3ducyBvbmUgbWVzc2FnZSBoYXMgdG8gYmUgYWJsZSB0byB1cGRhdGUgb3IgcmVtb3ZlIGV4YWN0bHkgdGhhdCBtZXNzYWdlLiBUaGUgcmVmZXJlbmNlXG4gKiBzdGF5cyB2YWxpZCBvbmNlIHRoZSBmcmFnbWVudCBpcyBoYW5kZWQgdG8gYE5vdGljZWA6IGFwcGVuZGluZyBhIGZyYWdtZW50IG1vdmVzIGl0cyBjaGlsZHJlbiByYXRoZXJcbiAqIHRoYW4gY29weWluZyB0aGVtLlxuICovXG5pbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50Tm90aWNlQ29udGVudCB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB3cmFwcGluZyB0aGlzIG1lc3NhZ2UgYWxvbmUuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50RWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgZnJhZ21lbnQgaG9sZGluZyB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50Tm90aWNlQ29udGVudC5jb250ZW50RWx9LCByZWFkeSB0byBoYW5kIHRvIGBOb3RpY2VgXG4gICAqIG9yIHRvIGFwcGVuZCBpbnRvIG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IGZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50O1xufVxuXG4vKipcbiAqIEEgbWVzc2FnZSB0aGF0IGhhcyBiZWVuIHB1dCBvbiBzY3JlZW4sIGFuZCB3aGVyZSBpdCBlbmRlZCB1cC5cbiAqL1xuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3duTm90aWNlIHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IGhvbGRpbmcgdGhpcyBtZXNzYWdlIGFsb25lLCBpbnNpZGUge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3duTm90aWNlLm5vdGljZX0uXG4gICAqL1xuICByZWFkb25seSBjb250ZW50RWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgbWVzc2FnZSBjcmVhdGVkIHRoZSBub3RpY2UsIGFzIG9wcG9zZWQgdG8gam9pbmluZyBvbmUgdGhhdCB3YXMgYWxyZWFkeSBvbiBzY3JlZW4uXG4gICAqIE9ubHkgdGhlIGNyZWF0b3IgbWF5IGhpZGUgaXQ7IGEgam9pbmVkIG1lc3NhZ2UgY2FuIG1lcmVseSByZW1vdmUgaXRzZWxmLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNOb3RpY2VPd25lZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG5vdGljZSB0aGUgbWVzc2FnZSBpcyBpbi5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGljZTogTm90aWNlO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZVdpdGhEdXJhdGlvblBhcmFtcyB7XG4gIHJlYWRvbmx5IGR1cmF0aW9uSW5NaWxsaXNlY29uZHM6IG51bGwgfCBudW1iZXI7XG4gIHJlYWRvbmx5IG1lc3NhZ2U6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG4gIHJlYWRvbmx5IG1vZGU6IFBsdWdpbk5vdGljZU1vZGU7XG4gIHJlYWRvbmx5IG9uQ2xvc2VDbGljazogKChldmVudDogUGx1Z2luTm90aWNlQ2xvc2VDbGlja0V2ZW50KSA9PiBQcm9taXNhYmxlPHZvaWQ+KSB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgb25IaWRlOiAoKGluZm86IFBsdWdpbk5vdGljZUhpZGVJbmZvKSA9PiBQcm9taXNhYmxlPHZvaWQ+KSB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgcmVxdWlyZXNFeHBsaWNpdENsb3NlOiBib29sZWFuO1xuICByZWFkb25seSBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50OiBib29sZWFuO1xuICByZWFkb25seSBzaG91bGRTaG93Q2xvc2VCdXR0b246IGJvb2xlYW47XG59XG5cbi8qKlxuICogTWFuYWdlcyBzaG93aW5nIHBsdWdpbiBub3RpY2VzLiBCeSBkZWZhdWx0IGEgbmV3IG5vdGljZSBoaWRlcyB0aGUgcHJldmlvdXMgb25lLCBzbyBvbmx5IHRoZSBsYXRlc3RcbiAqIG1lc3NhZ2UgaXMgb24gc2NyZWVuOyB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMubW9kZX0gY2hvb3NlcyBvdGhlcndpc2Ug4oCUIHNlZVxuICoge0BsaW5rIFBsdWdpbk5vdGljZU1vZGV9LlxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luTm90aWNlQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBuYW1lIChzaG93biBhcyBwcmVmaXggaW4gbm90aWNlcykuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2xvc2VCdXR0b25DbGlja2VkTm90aWNlcyA9IG5ldyBXZWFrU2V0PE5vdGljZT4oKTtcbiAgcHJpdmF0ZSBub3RpY2U6IE5vdGljZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IHBlbmRpbmdUaW1lckNhbmNlbGxhdGlvbnMgPSBuZXcgU2V0PCgpID0+IHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhbmRhbG9uZU5vdGljZXMgPSBuZXcgU2V0PE5vdGljZT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSB1c2VyQ2xpY2tlZE5vdGljZXMgPSBuZXcgV2Vha1NldDxOb3RpY2U+KCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGx1Z2luIG5vdGljZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5wbHVnaW5OYW1lID0gcGFyYW1zLnBsdWdpbk5hbWU7XG4gIH1cblxuICAvKipcbiAgICogRGlzbWlzc2VzIHRoZSBwZXJtYW5lbnQgbm90aWNlIGxlZnQgb3ZlciBmcm9tIGEgcHJldmlvdXMgbG9hZCAoZS5nLiBhIHByZXZpb3VzIHBsdWdpbiBzZXNzaW9uKSBvbiBsb2FkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBzdXBlci5vbmxvYWQoKTtcbiAgICBjb25zdCBwZXJtYW5lbnROb3RpY2UgPSB0aGlzLmdldFBlcm1hbmVudE5vdGljZSgpO1xuICAgIHBlcm1hbmVudE5vdGljZT8uaGlkZSgpO1xuICAgIHRoaXMuc2V0UGVybWFuZW50Tm90aWNlKG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGVzIHRoZSBjdXJyZW50IG5vdGljZSBvbiB1bmxvYWQsIHVubGVzcyBpdCBpcyB0aGUgcGVybWFuZW50IG5vdGljZSAod2hpY2ggaXMgbWVhbnQgdG8gb3V0bGl2ZSB0aGUgcGx1Z2luKS5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbnVubG9hZCgpOiB2b2lkIHtcbiAgICAvLyBDYW5jZWwgYW55IGRlbGF5ZWQgbm90aWNlIHdob3NlIHRpbWVyIGhhcyBub3QgZmlyZWQgeWV0LCBzbyBpdCBuZXZlciBhcHBlYXJzIGFmdGVyIHVubG9hZC5cbiAgICBmb3IgKGNvbnN0IGNhbmNlbFBlbmRpbmdUaW1lciBvZiBzbmFwc2hvdCh0aGlzLnBlbmRpbmdUaW1lckNhbmNlbGxhdGlvbnMpKSB7XG4gICAgICBjYW5jZWxQZW5kaW5nVGltZXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ2V0UGVybWFuZW50Tm90aWNlKCkgIT09IHRoaXMubm90aWNlKSB7XG4gICAgICB0aGlzLm5vdGljZT8uaGlkZSgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHN0YW5kYWxvbmVOb3RpY2Ugb2YgdGhpcy5zdGFuZGFsb25lTm90aWNlcykge1xuICAgICAgc3RhbmRhbG9uZU5vdGljZS5oaWRlKCk7XG4gICAgfVxuICAgIHRoaXMuc3RhbmRhbG9uZU5vdGljZXMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyBhIG5vdGljZSBtZXNzYWdlIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkuIFRoZSBub3RpY2Ugc2hvd3MgdGhlIHBsdWdpbiBuYW1lIGFib3ZlIGl0LCBzbyBhIGxlYWRpbmdcbiAgICogYDxwbHVnaW4gbmFtZT46YCBpbiB0aGUgbWVzc2FnZSBpcyBkcm9wcGVkIHJhdGhlciB0aGFuIHNob3duIHR3aWNlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBkaXNwbGF5aW5nIHRoZSBub3RpY2UuXG4gICAqIEByZXR1cm5zIFRoZSBub3RpY2Ugb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIHNob3dOb3RpY2UobWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZywgb3B0aW9ucz86IFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zKTogTm90aWNlIHtcbiAgICBjb25zdCBpc1Blcm1hbmVudCA9IG9wdGlvbnM/LmlzUGVybWFuZW50ID8/IGZhbHNlO1xuICAgIGNvbnN0IHNob3VsZEhpZGVPbkNsaWNrID0gb3B0aW9ucz8uc2hvdWxkSGlkZU9uQ2xpY2sgPz8gdHJ1ZTtcbiAgICBjb25zdCByZXF1aXJlc0V4cGxpY2l0Q2xvc2UgPSAhc2hvdWxkSGlkZU9uQ2xpY2s7XG4gICAgY29uc3QgbW9kZSA9IG9wdGlvbnM/Lm1vZGUgPz8gKHJlcXVpcmVzRXhwbGljaXRDbG9zZSA/IFBsdWdpbk5vdGljZU1vZGUuU2VwYXJhdGUgOiBQbHVnaW5Ob3RpY2VNb2RlLlJlcGxhY2UpO1xuXG4gICAgaWYgKG9wdGlvbnM/Lm1vZGUgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLm1vZGUgIT09IFBsdWdpbk5vdGljZU1vZGUuU2VwYXJhdGUgJiYgcmVxdWlyZXNFeHBsaWNpdENsb3NlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Egbm90aWNlIHRoYXQgZG9lcyBub3QgaGlkZSBvbiBjbGljayBtdXN0IGJlIHNob3duIGluIHRoZSBzZXBhcmF0ZSBtb2RlLicpO1xuICAgIH1cbiAgICBpZiAobW9kZSA9PT0gUGx1Z2luTm90aWNlTW9kZS5TZXBhcmF0ZSAmJiBpc1Blcm1hbmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIHBlcm1hbmVudCBub3RpY2UgY2Fubm90IGJlIHNob3duIGluIHRoZSBzZXBhcmF0ZSBtb2RlLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uSW5NaWxsaXNlY29uZHMgPSBpc1Blcm1hbmVudCB8fCByZXF1aXJlc0V4cGxpY2l0Q2xvc2UgPyBQRVJNQU5FTlRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA6IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuc2hvd05vdGljZVdpdGhEdXJhdGlvbih7XG4gICAgICBkdXJhdGlvbkluTWlsbGlzZWNvbmRzLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIG1vZGUsXG4gICAgICBvbkNsb3NlQ2xpY2s6IG9wdGlvbnM/Lm9uQ2xvc2VDbGljayxcbiAgICAgIG9uSGlkZTogb3B0aW9ucz8ub25IaWRlLFxuICAgICAgcmVxdWlyZXNFeHBsaWNpdENsb3NlLFxuICAgICAgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudDogaXNQZXJtYW5lbnQsXG4gICAgICBzaG91bGRTaG93Q2xvc2VCdXR0b246IG9wdGlvbnM/LnNob3VsZFNob3dDbG9zZUJ1dHRvbiA/PyB0cnVlXG4gICAgfSkubm90aWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGEgbm90aWNlIGRlc2NyaWJpbmcgYSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uLCBidXQgb25seSBvbmNlIHRoZSBvcGVyYXRpb24gaGFzIHJ1biBmb3IgbG9uZ2VyXG4gICAqIHRoYW4ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VBZnRlckRlbGF5UGFyYW1zLmRlbGF5SW5NaWxsaXNlY29uZHN9IOKAlCBzbyBvcGVyYXRpb25zXG4gICAqIHRoYXQgZmluaXNoIHNvb25lciBuZXZlciBmbGFzaCBhIG5vdGljZS4gVGhlIG5vdGljZSBzdGF5cyB1bnRpbCB0aGUgcmV0dXJuZWQge0BsaW5rIERpc3Bvc2FibGV9IGlzXG4gICAqIGRpc3Bvc2VkICh3aGljaCBhbHNvIGNhbmNlbHMgdGhlIHBlbmRpbmcgdGltZXIgaWYgaXQgaGFzIG5vdCBmaXJlZCB5ZXQpLCBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoXG4gICAqIGB1c2luZ2AuIFdoZW4gYW4ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VBZnRlckRlbGF5UGFyYW1zLmFib3J0Q29udHJvbGxlcn0gaXMgZ2l2ZW4sIGFcbiAgICogQ2FuY2VsIGJ1dHRvbiB0aGF0IGFib3J0cyBpdCBpcyBhcHBlbmRlZCAoYW5kLCBiZWluZyBpbnRlcmFjdGl2ZSwgZG9lcyBub3QgZGlzbWlzcyB0aGUgbm90aWNlKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogdXNpbmcgX25vdGljZSA9IHBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlQWZ0ZXJEZWxheSh7XG4gICAqICAgYWJvcnRDb250cm9sbGVyLFxuICAgKiAgIGNvbnRlbnQ6ICgpID0+IGJ1aWxkUHJvZ3Jlc3NGcmFnbWVudCgpXG4gICAqIH0pO1xuICAgKiBhd2FpdCBydW5PcGVyYXRpb24oYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudERlbGF5ZWROb3RpY2V9IHRoYXQgaGlkZXMgdGhlIG5vdGljZSAob3IgY2FuY2VscyB0aGUgcGVuZGluZ1xuICAgKiB0aW1lcikgd2hlbiBkaXNwb3NlZCBhbmQgbGV0cyB0aGUgY29udGVudCBiZSB1cGRhdGVkIHdoaWxlIGl0IGlzIHNob3duLlxuICAgKi9cbiAgcHVibGljIHNob3dOb3RpY2VBZnRlckRlbGF5KHBhcmFtczogUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZUFmdGVyRGVsYXlQYXJhbXMpOiBQbHVnaW5Ob3RpY2VDb21wb25lbnREZWxheWVkTm90aWNlIHtcbiAgICBjb25zdCBtb2RlID0gcGFyYW1zLm1vZGUgPz8gUGx1Z2luTm90aWNlTW9kZS5SZXBsYWNlO1xuICAgIC8vIFdoZXJlIHRoaXMgbWVzc2FnZSBlbmRlZCB1cDogYSBub3RpY2Ugb2YgaXRzIG93biwgb3IgYSBjaHVuayBpbnNpZGUgb25lIHRoYXQgd2FzIGFscmVhZHkgdXAuIEl0XG4gICAgLy8gZGVjaWRlcyB3aGF0IGBzZXRDb250ZW50YCByZXdyaXRlcyBhbmQgd2hhdCBkaXNwb3NpbmcgdGFrZXMgYXdheS5cbiAgICBsZXQgc2hvd246IG51bGwgfCBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93bk5vdGljZSA9IG51bGw7XG4gICAgbGV0IGlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgICBsZXQgdGltZXJJZCA9IDA7XG4gICAgbGV0IGN1cnJlbnRDb250ZW50OiBWYWx1ZVByb3ZpZGVyPERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc+ID0gcGFyYW1zLmNvbnRlbnQ7XG5cbiAgICBjb25zdCBjYW5jZWxQZW5kaW5nVGltZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgdGhpcy5wZW5kaW5nVGltZXJDYW5jZWxsYXRpb25zLmRlbGV0ZShjYW5jZWxQZW5kaW5nVGltZXIpO1xuICAgIH07XG5cbiAgICBjb25zdCBidWlsZERlbGF5ZWRNZXNzYWdlID0gKGNvbnRlbnQ6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcpOiBEb2N1bWVudEZyYWdtZW50ID0+XG4gICAgICB0aGlzLmJ1aWxkRGVsYXllZE5vdGljZU1lc3NhZ2Uobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkRGVsYXllZE5vdGljZU1lc3NhZ2VQYXJhbXM+KHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyOiBwYXJhbXMuYWJvcnRDb250cm9sbGVyLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBwYXJhbXMuY2FuY2VsQnV0dG9uVGV4dCxcbiAgICAgICAgY29udGVudFxuICAgICAgfSkpO1xuXG4gICAgdGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNhbmNlbFBlbmRpbmdUaW1lcigpO1xuICAgICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBSZXNvbHZpbmcgdGhlIGNvbnRlbnQgaXMgYXN5bmNocm9ub3VzLCBhbmQgdGhlIG9wZXJhdGlvbiB0aGUgbm90aWNlIGRlc2NyaWJlcyBrZWVwcyBydW5uaW5nXG4gICAgICAgIC8vIHdoaWxlIGl0IGhhcHBlbnMg4oCUIHNvIGBzZXRDb250ZW50YCBjYW4gbGFuZCBpbiBiZXR3ZWVuLiBJdCBjYW5ub3QgcmV3cml0ZSBhIG5vdGljZSB0aGF0IGRvZXNcbiAgICAgICAgLy8gbm90IGV4aXN0IHlldCwgc28gcmVzb2x2ZSBhZ2FpbiB3aGVuZXZlciB0aGF0IGhhcHBlbnM6IHRoZSBub3RpY2UgbXVzdCBvcGVuIHdpdGggdGhlIG1lc3NhZ2VcbiAgICAgICAgLy8gdGhlIGNhbGxlciBsYXN0IGFza2VkIGZvciwgbm90IHRoZSBvbmUgdGhhdCB3YXMgY3VycmVudCB3aGVuIHJlc29sdXRpb24gc3RhcnRlZC5cbiAgICAgICAgbGV0IHJlcXVlc3RlZENvbnRlbnQ6IFZhbHVlUHJvdmlkZXI8RG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZz47XG4gICAgICAgIGxldCByZXNvbHZlZENvbnRlbnQ6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICByZXF1ZXN0ZWRDb250ZW50ID0gY3VycmVudENvbnRlbnQ7XG4gICAgICAgICAgcmVzb2x2ZWRDb250ZW50ID0gYXdhaXQgcmVzb2x2ZVZhbHVlKHJlcXVlc3RlZENvbnRlbnQsIHt9KTtcbiAgICAgICAgICAvLyBUaGUgaGFuZGxlIG1heSBoYXZlIGJlZW4gZGlzcG9zZWQgd2hpbGUgdGhlIGNvbnRlbnQgd2FzIGJlaW5nIHJlc29sdmVkOyBkb24ndCBzaG93IGEgc3RhbGUgbm90aWNlLlxuICAgICAgICAgIGlmIChpc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChyZXF1ZXN0ZWRDb250ZW50ICE9PSBjdXJyZW50Q29udGVudCk7XG5cbiAgICAgICAgc2hvd24gPSB0aGlzLnNob3dOb3RpY2VXaXRoRHVyYXRpb24oe1xuICAgICAgICAgIGR1cmF0aW9uSW5NaWxsaXNlY29uZHM6IFBFUk1BTkVOVF9OT1RJQ0VfRFVSQVRJT05fSU5fTUlMTElTRUNPTkRTLFxuICAgICAgICAgIG1lc3NhZ2U6IGJ1aWxkRGVsYXllZE1lc3NhZ2UocmVzb2x2ZWRDb250ZW50KSxcbiAgICAgICAgICBtb2RlLFxuICAgICAgICAgIG9uQ2xvc2VDbGljazogdW5kZWZpbmVkLFxuICAgICAgICAgIG9uSGlkZTogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlcXVpcmVzRXhwbGljaXRDbG9zZTogZmFsc2UsXG4gICAgICAgICAgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudDogZmFsc2UsXG4gICAgICAgICAgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgcGFyYW1zLmRlbGF5SW5NaWxsaXNlY29uZHMgPz8gREVGQVVMVF9ERUxBWV9CRUZPUkVfU0hPV19JTl9NSUxMSVNFQ09ORFMpO1xuXG4gICAgdGhpcy5wZW5kaW5nVGltZXJDYW5jZWxsYXRpb25zLmFkZChjYW5jZWxQZW5kaW5nVGltZXIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNldENvbnRlbnQ6IChjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAgIGN1cnJlbnRDb250ZW50ID0gY29udGVudDtcbiAgICAgICAgaWYgKCFzaG93bikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTd2FwcyBUSElTIG1lc3NhZ2UncyBlbGVtZW50IGZvciBhIGZyZXNobHkgYnVpbHQgb25lLCByYXRoZXIgdGhhbiByZXdyaXRpbmcgdGhlIHdob2xlIG5vdGljZTpcbiAgICAgICAgLy8gV2hlbiB0aGUgaGFuZGxlIGpvaW5lZCBhIG5vdGljZSB0aGF0IHdhcyBhbHJlYWR5IHVwLCB0aGUgb3RoZXIgbWVzc2FnZXMgaW4gaXQgYXJlIG5vdCBpdHMgdG9cbiAgICAgICAgLy8gb3ZlcndyaXRlLiBSZWJ1aWxkaW5nIGFsc28gcmUtYXBwbGllcyB0aGUgcHJlZml4LCB0aGUgaW50ZXJhY3RpdmUgZ3VhcmQsIGFuZCB0aGUgQ2FuY2VsIGJ1dHRvbi5cbiAgICAgICAgY29uc3QgcmVidWlsdCA9IHRoaXMuYnVpbGROb3RpY2VDb250ZW50KHtcbiAgICAgICAgICBtZXNzYWdlOiBidWlsZERlbGF5ZWRNZXNzYWdlKGNvbnRlbnQpLFxuICAgICAgICAgIHNob3VsZFByZWZpeFdpdGhQbHVnaW5OYW1lOiBzaG93bi5pc05vdGljZU93bmVkXG4gICAgICAgIH0pO1xuICAgICAgICBzaG93bi5jb250ZW50RWwucmVwbGFjZVdpdGgocmVidWlsdC5mcmFnbWVudCk7XG4gICAgICAgIHNob3duID0geyAuLi5zaG93biwgY29udGVudEVsOiByZWJ1aWx0LmNvbnRlbnRFbCB9O1xuICAgICAgfSxcbiAgICAgIFtTeW1ib2wuZGlzcG9zZV06ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaXNEaXNwb3NlZCA9IHRydWU7XG4gICAgICAgIGNhbmNlbFBlbmRpbmdUaW1lcigpO1xuICAgICAgICBpZiAoIXNob3duKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEEgbm90aWNlIHRoaXMgaGFuZGxlIG9wZW5lZCBnb2VzIGF3YXkgd2l0aCBpdDsgYSBub3RpY2UgaXQgbWVyZWx5IGpvaW5lZCBiZWxvbmdzIHRvIHdob2V2ZXJcbiAgICAgICAgLy8gb3BlbmVkIGl0LCBzbyBvbmx5IHRoaXMgbWVzc2FnZSBpcyB0YWtlbiBvdXQgb2YgaXQuXG4gICAgICAgIGlmIChzaG93bi5pc05vdGljZU93bmVkKSB7XG4gICAgICAgICAgc2hvd24ubm90aWNlLmhpZGUoKTtcbiAgICAgICAgICB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzLmRlbGV0ZShzaG93bi5ub3RpY2UpO1xuICAgICAgICAgIGlmICh0aGlzLm5vdGljZSA9PT0gc2hvd24ubm90aWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGljZSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNob3duLmNvbnRlbnRFbC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBhIGNsb3NlIChYKSBidXR0b24gdG8gdGhlIG5vdGljZSBjb250ZW50LiBDbGlja2luZyBpdCBmaXJlc1xuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50QXBwZW5kQ2xvc2VCdXR0b25QYXJhbXMub25DbG9zZUNsaWNrfSAod2hpY2ggbWF5IGNhbmNlbCB0aGUgY2xvc2UpOyBpZlxuICAgKiBub3QgY2FuY2VsbGVkLCBpdCBoaWRlcyB0aGUgbm90aWNlIGFuZCBkcm9wcyBpdCBmcm9tIHRoZSBzdGFuZGFsb25lLW5vdGljZSB0cmFja2luZyBzZXQuIFRoZSBoaWRlIGlzXG4gICAqIG1hcmtlZCBhcyBhIGNsb3NlLWJ1dHRvbiBjbGljayBzbyB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMub25IaWRlfSBjYW5cbiAgICogZGlzdGluZ3Vpc2ggaXQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICovXG4gIHByaXZhdGUgYXBwZW5kQ2xvc2VCdXR0b24ocGFyYW1zOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRBcHBlbmRDbG9zZUJ1dHRvblBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgY29udGVudEVsLCBnZXROb3RpY2UsIG9uQ2xvc2VDbGljayB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGNsb3NlQnV0dG9uRWwgPSBjb250ZW50RWwuY3JlYXRlRWwoJ2J1dHRvbicsIHtcbiAgICAgIGF0dHI6IHsgJ2FyaWEtbGFiZWwnOiB0KCgkKSA9PiAkLm9ic2lkaWFuTGliLm5vdGljZXMuY2xvc2VBcmlhTGFiZWwpIH1cbiAgICB9KTtcbiAgICAvLyBSZXVzZSBPYnNpZGlhbidzIG1vZGFsIGNsb3NlLWJ1dHRvbiBjbGFzc2VzIHNvIHRoaXMgYnV0dG9uIG1hdGNoZXMgdGhlIG5hdGl2ZSBtb2RhbCBjbG9zZSBidXR0b25cbiAgICAvLyAobG9vayBhbmQgaG92ZXIpOyB0aGUgc3R5bGVzaGVldCBvbmx5IHBvc2l0aW9ucyBpdCBpbiB0aGUgbm90aWNlIGNvcm5lci5cbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGNsb3NlQnV0dG9uRWwsIENzc0NsYXNzLlBsdWdpbk5vdGljZUNsb3NlQnV0dG9uKTtcbiAgICBjbG9zZUJ1dHRvbkVsLmFkZENsYXNzZXMoW0Nzc0NsYXNzLkNsaWNrYWJsZUljb24sIENzc0NsYXNzLk1vZGFsSGVhZGVyQnV0dG9uXSk7XG4gICAgc2V0SWNvbihjbG9zZUJ1dHRvbkVsLCAneCcpO1xuICAgIGNsb3NlQnV0dG9uRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoJGV2ZW50KSA9PiB7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpbnZva2VBc3luY1NhZmVseShhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCBpc0NhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICBhd2FpdCBvbkNsb3NlQ2xpY2s/Lih7XG4gICAgICAgICAgY2FuY2VsOiAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBpc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gQ2FuIGJlIGNhbmNlbGxlZCBieSB0aGUgdXNlci5cbiAgICAgICAgaWYgKGlzQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vdGljZSA9IGVuc3VyZU5vbk51bGxhYmxlKGdldE5vdGljZSgpKTtcbiAgICAgICAgdGhpcy5jbG9zZUJ1dHRvbkNsaWNrZWROb3RpY2VzLmFkZChub3RpY2UpO1xuICAgICAgICBub3RpY2UuaGlkZSgpO1xuICAgICAgICB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzLmRlbGV0ZShub3RpY2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG1lc3NhZ2UgdG8gdGhlIG5vdGljZSBjdXJyZW50bHkgaW4gdGhlIHBlci1wbHVnaW4gc2xvdCwgc28gYm90aCBtZXNzYWdlcyBzdGF5IG9uIHNjcmVlbiBpbiBhXG4gICAqIHNpbmdsZSBub3RpY2UuXG4gICAqXG4gICAqIFRoZSBhcHBlbmRlZCBtZXNzYWdlIGNhcnJpZXMgbm8gcGx1Z2luLW5hbWUgcHJlZml4IOKAlCB0aGUgbm90aWNlIGFscmVhZHkgb3BlbnMgd2l0aCBvbmUsIGFuZFxuICAgKiByZXBlYXRpbmcgaXQgb24gZXZlcnkgbGluZSByZWFkcyBhcyBub2lzZS4gSXQgaXMgd3JhcHBlZCBsaWtlIGFueSBvdGhlciBub3RpY2UgY29udGVudCwgc28gYSBsaW5rIG9yXG4gICAqIGJ1dHRvbiBpbnNpZGUgaXQgc3RpbGwga2VlcHMgdGhlIG5vdGljZSBvcGVuIHdoZW4gY2xpY2tlZC5cbiAgICpcbiAgICogQXBwZW5kaW5nIHJlc3RhcnRzIHRoZSBub3RpY2UncyBjb3VudGRvd24gKHtAbGluayBOb3RpY2Uuc2V0QXV0b0hpZGV9KSwgc28gdGhlIG5ldyBtZXNzYWdlIGdldHMgYVxuICAgKiBmdWxsIGR1cmF0aW9uIGluc3RlYWQgb2YgaW5oZXJpdGluZyB3aGF0IHdhcyBsZWZ0IG9mIHRoZSBjdXJyZW50IG9uZSDigJQgYSBsaW5lIGFwcGVuZGVkIGEgbW9tZW50XG4gICAqIGJlZm9yZSB0aGUgbm90aWNlIGV4cGlyZXMgd291bGQgb3RoZXJ3aXNlIGZsYXNoIGFuZCB2YW5pc2guXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgVGhlIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93bk5vdGljZX0gZGVzY3JpYmluZyB0aGUgam9pbmVkIG5vdGljZSwgb3IgYG51bGxgIHdoZW5cbiAgICogdGhlcmUgaXMgbm90aGluZyBvbiBzY3JlZW4gdG8gYXBwZW5kIHRvIOKAlCB0aGUgc2xvdCBpcyBlbXB0eSwgb3IgaXRzIG5vdGljZSBoYXMgc2luY2UgYmVlbiBkaXNtaXNzZWRcbiAgICog4oCUIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBzaG93IGEgbmV3IG5vdGljZSBpbnN0ZWFkLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBlbmRUb0N1cnJlbnROb3RpY2UocGFyYW1zOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRBcHBlbmRUb0N1cnJlbnROb3RpY2VQYXJhbXMpOiBudWxsIHwgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd25Ob3RpY2Uge1xuICAgIGNvbnN0IHsgZHVyYXRpb25Jbk1pbGxpc2Vjb25kcywgbWVzc2FnZSwgb25IaWRlLCBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50IH0gPSBwYXJhbXM7XG4gICAgY29uc3QgY3VycmVudE5vdGljZSA9IHRoaXMubm90aWNlO1xuICAgIC8vIGBpc1Nob3duYCBpcyB0aGUgc2FtZSBjaGVjayBPYnNpZGlhbidzIG93biBgTm90aWNlLmhpZGVgIG1ha2VzIGJlZm9yZSBhbmltYXRpbmcgYSBub3RpY2UgYXdheSwgc29cbiAgICAvLyBpdCBpcyBleGFjdGx5IFwic3RpbGwgb24gc2NyZWVuXCI6IGEgbm90aWNlIHRoYXQgZXhwaXJlZCBvciB3YXMgZGlzbWlzc2VkIGhhcyBiZWVuIGRldGFjaGVkLlxuICAgIGlmICghY3VycmVudE5vdGljZT8uY29udGFpbmVyRWwuaXNTaG93bigpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB7IGNvbnRlbnRFbCwgZnJhZ21lbnQgfSA9IHRoaXMuYnVpbGROb3RpY2VDb250ZW50KHsgbWVzc2FnZSwgc2hvdWxkUHJlZml4V2l0aFBsdWdpbk5hbWU6IGZhbHNlIH0pO1xuICAgIGN1cnJlbnROb3RpY2UubWVzc2FnZUVsLmFwcGVuZChmcmFnbWVudCk7XG4gICAgLy8gQSBgbnVsbGAgZHVyYXRpb24gbWVhbnMgXCJPYnNpZGlhbidzIG93biBkZWZhdWx0XCIsIHdoaWNoIG9ubHkgdGhlIGNvbnN0cnVjdG9yIGFwcGxpZXMg4oCUIHNvIHJlc3RhcnRcbiAgICAvLyB0aGUgY291bnRkb3duIHdpdGggdGhhdCBzYW1lIGRlZmF1bHQgcmF0aGVyIHRoYW4gbGVhdmluZyB0aGUgY3VycmVudCBvbmUgcnVubmluZy5cbiAgICBjdXJyZW50Tm90aWNlLnNldEF1dG9IaWRlKGR1cmF0aW9uSW5NaWxsaXNlY29uZHMgPz8gT0JTSURJQU5fREVGQVVMVF9OT1RJQ0VfRFVSQVRJT05fSU5fTUlMTElTRUNPTkRTKTtcbiAgICB0aGlzLndpcmVPbkhpZGUoY3VycmVudE5vdGljZSwgb25IaWRlKTtcbiAgICAvLyBPbmx5IGV2ZXIgcmVnaXN0ZXJzLCBuZXZlciBjbGVhcnM6IHRoZSBub3RpY2UgYmVpbmcgYXBwZW5kZWQgdG8gbWF5IGFscmVhZHkgYmUgdGhpcyBwbHVnaW4nc1xuICAgIC8vIHBlcm1hbmVudCBub3RpY2UsIGFuZCBhIGxhdGVyIGFwcGVuZGVkIG1lc3NhZ2UgaXMgbm8gcmVhc29uIHRvIGZvcmdldCB0aGF0LlxuICAgIGlmIChzaG91bGRSZWdpc3RlckFzUGVybWFuZW50KSB7XG4gICAgICB0aGlzLnNldFBlcm1hbmVudE5vdGljZShjdXJyZW50Tm90aWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgY29udGVudEVsLCBpc05vdGljZU93bmVkOiBmYWxzZSwgbm90aWNlOiBjdXJyZW50Tm90aWNlIH07XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBtZXNzYWdlIGZvciBhIGRlbGF5ZWQgbm90aWNlOiB0aGUgcmVzb2x2ZWQgY29udGVudCwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIENhbmNlbFxuICAgKiBidXR0b24gdGhhdCBhYm9ydHMgdGhlIHByb3ZpZGVkIGNvbnRyb2xsZXIgd2hlbiBjbGlja2VkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERvY3VtZW50RnJhZ21lbnR9IGhvbGRpbmcgdGhlIGNvbnRlbnQgYW5kLCBpZiByZXF1ZXN0ZWQsIGEgQ2FuY2VsIGJ1dHRvbi5cbiAgICovXG4gIHByaXZhdGUgYnVpbGREZWxheWVkTm90aWNlTWVzc2FnZShwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkRGVsYXllZE5vdGljZU1lc3NhZ2VQYXJhbXMpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICBjb25zdCB7IGFib3J0Q29udHJvbGxlciwgY2FuY2VsQnV0dG9uVGV4dCwgY29udGVudCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnQoKTtcbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmQoY29udGVudCk7XG4gICAgfVxuXG4gICAgaWYgKGFib3J0Q29udHJvbGxlcikge1xuICAgICAgLy8gYEJ1dHRvbkNvbXBvbmVudGAgcmVxdWlyZXMgYW4gYEhUTUxFbGVtZW50YCBwYXJlbnQsIHNvIGJ1aWxkIGl0IG9uIGEgdGhyb3dhd2F5XG4gICAgICAvLyBkZXRhY2hlZCBlbGVtZW50IGFuZCBtb3ZlIGl0cyBgYnV0dG9uRWxgIGludG8gdGhlIGZyYWdtZW50LlxuICAgICAgY29uc3QgY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbkNvbXBvbmVudChjcmVhdGVEaXYoKSk7XG4gICAgICBjYW5jZWxCdXR0b24uc2V0QnV0dG9uVGV4dChjYW5jZWxCdXR0b25UZXh0ID8/IHQoKCQpID0+ICQub2JzaWRpYW5MaWIuYnV0dG9ucy5jYW5jZWwpKTtcbiAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoY2FuY2VsQnV0dG9uLmJ1dHRvbkVsLCBDc3NDbGFzcy5DYW5jZWxCdXR0b24pO1xuICAgICAgLy8gVGhlIGNsaWNrIGlzIHdpcmVkIHZpYSBgYWRkRXZlbnRMaXN0ZW5lcmAgcmF0aGVyIHRoYW4gYEJ1dHRvbkNvbXBvbmVudC5vbkNsaWNrYCBzbyBpdFxuICAgICAgLy8gYnViYmxlcyB0aHJvdWdoIHRoZSBpbnRlcmFjdGl2ZS1lbGVtZW50IGd1YXJkIChrZWVwaW5nIHRoZSBub3RpY2Ugb3BlbikgYW5kIHN0YXlzXG4gICAgICAvLyBkaXJlY3RseSBleGVyY2lzYWJsZSB2aWEgYSBkaXNwYXRjaGVkIERPTSBldmVudCBpbiB1bml0IHRlc3RzLlxuICAgICAgY2FuY2VsQnV0dG9uLmJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIH0pO1xuICAgICAgZnJhZ21lbnQuYXBwZW5kKGNhbmNlbEJ1dHRvbi5idXR0b25FbCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIG5vdGljZSBjb250ZW50IHdyYXBwZWQgaW4gYSBjb250YWluZXIgdGhhdCBrZWVwcyB0aGUgbm90aWNlIG9wZW4gd2hlbiBhbiBpbnRlcmFjdGl2ZVxuICAgKiBlbGVtZW50IGluc2lkZSBpdCBpcyBjbGlja2VkLiBPYnNpZGlhbiBkaXNtaXNzZXMgYSBub3RpY2Ugb24gYW55IGNsaWNrIHRoYXQgYnViYmxlcyB1cCB0byBpdHNcbiAgICogZWxlbWVudDsgdGhlIGNvbnRhaW5lciBpbnRlcmNlcHRzIGNsaWNrcyBvcmlnaW5hdGluZyBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IChhIGxpbmssIGJ1dHRvbixcbiAgICogaW5wdXQsIGV0Yy4pIGFuZCBzdG9wcyB0aGVtIHRoZXJlLCBzbyB0aGUgZWxlbWVudCdzIG93biBoYW5kbGVyIHN0aWxsIHJ1bnMgYnV0IHRoZSBub3RpY2Ugc3RheXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgVGhlIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnROb3RpY2VDb250ZW50fSBob2xkaW5nIHRoZSB3cmFwcGVkIG5vdGljZSBjb250ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZE5vdGljZUNvbnRlbnQocGFyYW1zOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZE5vdGljZUNvbnRlbnRQYXJhbXMpOiBQbHVnaW5Ob3RpY2VDb21wb25lbnROb3RpY2VDb250ZW50IHtcbiAgICBjb25zdCB7IGdldE5vdGljZSwgb25DbG9zZUNsaWNrLCByZXF1aXJlc0V4cGxpY2l0Q2xvc2UgPSBmYWxzZSwgc2hvdWxkUHJlZml4V2l0aFBsdWdpbk5hbWUgPSB0cnVlLCBzaG91bGRTaG93Q2xvc2VCdXR0b24gPSB0cnVlIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuc3RyaXBQbHVnaW5OYW1lUHJlZml4KHBhcmFtcy5tZXNzYWdlKTtcbiAgICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gICAgY29uc3QgY29udGVudEVsID0gZnJhZ21lbnQuY3JlYXRlRGl2KCk7XG4gICAgYWRkUGx1Z2luQ3NzQ2xhc3Nlcyhjb250ZW50RWwsIENzc0NsYXNzLlBsdWdpbk5vdGljZUNvbnRlbnQpO1xuICAgIGlmIChzaG91bGRQcmVmaXhXaXRoUGx1Z2luTmFtZSkge1xuICAgICAgY29udGVudEVsLmFwcGVuZCh0aGlzLmJ1aWxkUHJlZml4ZWRNZXNzYWdlKG1lc3NhZ2UpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgY29udGVudEVsLmFwcGVuZFRleHQobWVzc2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnRFbC5hcHBlbmQobWVzc2FnZSk7XG4gICAgfVxuICAgIGNvbnRlbnRFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgkZXZlbnQpID0+IHtcbiAgICAgIC8vIEEgaGFyZC10by1jbG9zZSBub3RpY2UgbXVzdCBub3QgZGlzbWlzcyBvbiBhbnkgc3RyYXkgY2xpY2s7IG9ubHkgaXRzIGNsb3NlIGJ1dHRvbiBtYXkgaGlkZSBpdC5cbiAgICAgIGlmIChyZXF1aXJlc0V4cGxpY2l0Q2xvc2UpIHtcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoJGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgJGV2ZW50LnRhcmdldC5jbG9zZXN0KElOVEVSQUNUSVZFX0VMRU1FTlRfU0VMRUNUT1IpKSB7XG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChyZXF1aXJlc0V4cGxpY2l0Q2xvc2UgJiYgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uKSB7XG4gICAgICB0aGlzLmFwcGVuZENsb3NlQnV0dG9uKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQbHVnaW5Ob3RpY2VDb21wb25lbnRBcHBlbmRDbG9zZUJ1dHRvblBhcmFtcz4oe1xuICAgICAgICBjb250ZW50RWwsXG4gICAgICAgIGdldE5vdGljZTogZW5zdXJlTm9uTnVsbGFibGUoZ2V0Tm90aWNlKSxcbiAgICAgICAgb25DbG9zZUNsaWNrXG4gICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiB7IGNvbnRlbnRFbCwgZnJhZ21lbnQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIG5vdGljZSBjb250ZW50LCBwcmVmaXhpbmcgdGhlIG1lc3NhZ2Ugd2l0aCB0aGUgcGx1Z2luIG5hbWUgaW4gYSBzdHlsZWQgZWxlbWVudCBzbyBpdCBpc1xuICAgKiB2aXN1YWxseSBkaXN0aW5ndWlzaGVkIGZyb20gdGhlIG1lc3NhZ2UgYm9keS5cbiAgICpcbiAgICogVGhlIG5hbWUgaXMgcmVuZGVyZWQgYXMgaW5saW5lIGNvZGUsIHRoZSB3YXkgZXZlcnkgcGx1Z2luIG5hbWUgaW4gdGhlIFVJIGlzLCBpbnNpZGUgYSBzcGFuIHRoYXQga2VlcHNcbiAgICogdGhlIHByZWZpeCdzIG93biBsYXlvdXQgYW5kIGFjY2VudCBjb2xvci5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5IGFmdGVyIHRoZSBwbHVnaW4gbmFtZSBwcmVmaXguXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERvY3VtZW50RnJhZ21lbnR9IHdpdGggdGhlIHN0eWxlZCBwbHVnaW4gbmFtZSBwcmVmaXggZm9sbG93ZWQgYnkgdGhlIG1lc3NhZ2UuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkUHJlZml4ZWRNZXNzYWdlKG1lc3NhZ2U6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gICAgY29uc3QgbmFtZUVsID0gY3JlYXRlU3BhbigpO1xuICAgIGFwcGVuZENvZGVCbG9jayhuYW1lRWwsIHRoaXMucGx1Z2luTmFtZSk7XG4gICAgYWRkUGx1Z2luQ3NzQ2xhc3NlcyhuYW1lRWwsIENzc0NsYXNzLlBsdWdpbk5vdGljZU5hbWUpO1xuICAgIGZyYWdtZW50LmFwcGVuZChuYW1lRWwpO1xuICAgIGlmICghdGhpcy5fbG9hZGVkKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCcgKHVubG9hZGVkKScpO1xuICAgIH1cbiAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCdcXG4nKTtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KG1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmQobWVzc2FnZSk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVybWFuZW50Tm90aWNlKCk6IE5vdGljZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmdldFBlcm1hbmVudE5vdGljZXMoKS5nZXQodGhpcy5wbHVnaW5OYW1lKSA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJtYW5lbnROb3RpY2VzKCk6IE1hcDxzdHJpbmcsIE5vdGljZT4ge1xuICAgIHJldHVybiBnZXRPYnNpZGlhbkxpYlN0YXRlPE1hcDxzdHJpbmcsIE5vdGljZT4+KFBFUk1BTkVOVF9OT1RJQ0VTX1NUQVRFX0tFWSwgbmV3IE1hcDxzdHJpbmcsIE5vdGljZT4oKSkudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogTWVhc3VyZXMgYSBsZWFkaW5nIGA8cGx1Z2luIG5hbWU+OmAgaW4gYSBtZXNzYWdlLCB0b2dldGhlciB3aXRoIHRoZSB3aGl0ZXNwYWNlIGFyb3VuZCB0aGUgY29sb24gYW5kXG4gICAqIGFmdGVyIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gdGV4dCAtIFRoZSBtZXNzYWdlIHRleHQuXG4gICAqIEByZXR1cm5zIFRoZSBsZW5ndGggb2YgdGhlIHByZWZpeCwgb3IgYDBgIHdoZW4gdGhlIHRleHQgZG9lcyBub3Qgb3BlbiB3aXRoIHRoaXMgcGx1Z2luJ3MgbmFtZSBhbmQgYVxuICAgKiBjb2xvbi5cbiAgICovXG4gIHByaXZhdGUgZ2V0UGx1Z2luTmFtZVByZWZpeExlbmd0aCh0ZXh0OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5wbHVnaW5OYW1lIHx8ICF0ZXh0LnN0YXJ0c1dpdGgodGhpcy5wbHVnaW5OYW1lKSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IHNlcGFyYXRvck1hdGNoID0gL15cXHMqOlxccyovLmV4ZWModGV4dC5zbGljZSh0aGlzLnBsdWdpbk5hbWUubGVuZ3RoKSk7XG4gICAgcmV0dXJuIHNlcGFyYXRvck1hdGNoID8gdGhpcy5wbHVnaW5OYW1lLmxlbmd0aCArIHNlcGFyYXRvck1hdGNoWzBdLmxlbmd0aCA6IDA7XG4gIH1cblxuICAvKipcbiAgICogTWFrZXMgYSBub3RpY2UgaGFyZCB0byBjbG9zZTogbWFya3MgaXRzIG91dGVyIGVsZW1lbnQgKHNvIHRoZSBDU1MgbmV1dHJhbGl6ZXMgaXRzIHBhZGRpbmcpIGFuZFxuICAgKiBpbnN0YWxscyBhIGNhcHR1cmUtcGhhc2UgY2xpY2sgZ3VhcmQgdGhhdCBzdG9wcyBldmVyeSBjbGljayBleGNlcHQgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCAoYVxuICAgKiBidXR0b24sIGxpbmssIHRoZSBjbG9zZSBidXR0b24sIGV0Yy4pIGZyb20gcmVhY2hpbmcgT2JzaWRpYW4ncyBvd24gZGlzbWlzcyBoYW5kbGVyIOKAlCBzbyBhblxuICAgKiBpbnRlcmFjdGl2ZSBjaGlsZCdzIG93biBoYW5kbGVyIHN0aWxsIHJ1bnMgd2hpbGUgYSBzdHJheSBjbGljayBjYW5ub3QgZGlzbWlzcyB0aGUgbm90aWNlLlxuICAgKlxuICAgKiBAcGFyYW0gbm90aWNlIC0gVGhlIG5vdGljZSB0byBndWFyZC5cbiAgICogQHBhcmFtIHJlcXVpcmVzRXhwbGljaXRDbG9zZSAtIFdoZXRoZXIgdGhlIG5vdGljZSByZXF1aXJlcyBleHBsaWNpdCBjbG9zZTsgd2hlbiBgZmFsc2VgLCBub3RoaW5nIGlzXG4gICAqIGluc3RhbGxlZC5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbEV4cGxpY2l0Q2xvc2VHdWFyZHMobm90aWNlOiBOb3RpY2UsIHJlcXVpcmVzRXhwbGljaXRDbG9zZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghcmVxdWlyZXNFeHBsaWNpdENsb3NlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFRoZSBvdXRlciBgLm5vdGljZWAgZWxlbWVudCAoYGNvbnRhaW5lckVsYCkgY2FycmllcyBPYnNpZGlhbidzIGRpc21pc3Mtb24tY2xpY2sgaGFuZGxlciBhbmQgdGhlXG4gICAgLy8gcGFkZGluZyBhIHN0cmF5IGNsaWNrIGNvdWxkIGxhbmQgb247IG1hcmsgaXQgc28gdGhlIHN0eWxlc2hlZXQgZHJvcHMgdGhhdCBwYWRkaW5nLlxuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMobm90aWNlLmNvbnRhaW5lckVsLCBDc3NDbGFzcy5QbHVnaW5Ob3RpY2VSZXF1aXJlc0V4cGxpY2l0Q2xvc2UpO1xuICAgIC8vIFN0b3AgZXZlcnkgY2xpY2sgb24gdGhlIG5vdGljZSDigJQgZXhjZXB0IG9uIGFuIGludGVyYWN0aXZlIGVsZW1lbnQg4oCUIGZyb20gcmVhY2hpbmcgT2JzaWRpYW4nc1xuICAgIC8vIGRpc21pc3MgaGFuZGxlci4gUmVnaXN0ZXJlZCBpbiB0aGUgY2FwdHVyZSBwaGFzZSBvbiB0aGUgb3V0ZXJtb3N0IGVsZW1lbnQgc28gaXQgYWx3YXlzIHJ1bnMgZmlyc3QuXG4gICAgLy8gTGV0dGluZyBhIGNsaWNrIHJlYWNoIGFuIGludGVyYWN0aXZlIGNoaWxkIChhIGJ1dHRvbiwgbGluaywgdGhlIGNsb3NlIGJ1dHRvbiwgZXRjLikgaXMgd2hhdCBrZWVwc1xuICAgIC8vIGl0cyBvd24gaGFuZGxlciB3b3JraW5nOyB0aGUgYnViYmxlLXBoYXNlIGd1YXJkIG9uIHRoZSBjb250ZW50IHdyYXBwZXIgdGhlbiBzdG9wcyB0aGF0IGNsaWNrIGZyb21cbiAgICAvLyBidWJibGluZyB1cCB0byBPYnNpZGlhbidzIGRpc21pc3MgaGFuZGxlciwgc28gdGhlIG5vdGljZSBzdGlsbCBzdGF5cyBvcGVuLlxuICAgIG5vdGljZS5jb250YWluZXJFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgkZXZlbnQpID0+IHtcbiAgICAgIGlmICgkZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCAmJiAkZXZlbnQudGFyZ2V0LmNsb3Nlc3QoSU5URVJBQ1RJVkVfRUxFTUVOVF9TRUxFQ1RPUikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0sIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFja3MgYSBjbGljayBvbiB0aGUgbm90aWNlIHNvIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5vbkhpZGV9IGNhbiByZXBvcnQgYVxuICAgKiB1c2VyIGRpc21pc3NhbC4gT2JzaWRpYW4gaGlkZXMgYSBkaXNtaXNzaWJsZSBub3RpY2Ugc3luY2hyb25vdXNseSBkdXJpbmcgdGhlIGNsaWNrLCBzbyBhXG4gICAqIGNhcHR1cmUtcGhhc2UgbGlzdGVuZXIgbWFya3MgdGhlIG5vdGljZSBiZWZvcmUgdGhhdCBoaWRlIHJ1bnM7IHRoZSBtYXJrIGlzIGNsZWFyZWQgYWZ0ZXIgdGhlIGV2ZW50XG4gICAqIHNvIGEgbGF0ZXIgcHJvZ3JhbW1hdGljIGhpZGUgaXMgbm90IG1pc2F0dHJpYnV0ZWQuIEEgY2xvc2UtYnV0dG9uIGNsaWNrIGlzIHRyYWNrZWQgc2VwYXJhdGVseSAoc2VlXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnQuYXBwZW5kQ2xvc2VCdXR0b259KS5cbiAgICpcbiAgICogQHBhcmFtIG5vdGljZSAtIFRoZSBub3RpY2UgdG8gdHJhY2suXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxVc2VyQ2xpY2tUcmFja2luZyhub3RpY2U6IE5vdGljZSk6IHZvaWQge1xuICAgIG5vdGljZS5jb250YWluZXJFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIC8vIE9ic2lkaWFuIGRpc21pc3NlcyBhIGRpc21pc3NpYmxlIG5vdGljZSBzeW5jaHJvbm91c2x5IGR1cmluZyB0aGlzIGNsaWNrLCBzbyBtYXJrIGl0IG5vdyAoYmVmb3JlXG4gICAgICAvLyB0aGF0IGhpZGUgcnVucykgYW5kIGNsZWFyIGl0IG9uIHRoZSBuZXh0IG1pY3JvdGFzayDigJQgYWZ0ZXIgYW55IHN5bmNocm9ub3VzIGRpc21pc3MsIGJ1dCBiZWZvcmUgYVxuICAgICAgLy8gbGF0ZXIgcHJvZ3JhbW1hdGljIGhpZGUsIHNvIHRoYXQgaGlkZSBpcyBub3QgbWlzYXR0cmlidXRlZCBhcyBhIHVzZXIgYWN0aW9uLlxuICAgICAgdGhpcy51c2VyQ2xpY2tlZE5vdGljZXMuYWRkKG5vdGljZSk7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMudXNlckNsaWNrZWROb3RpY2VzLmRlbGV0ZShub3RpY2UpO1xuICAgICAgfSk7XG4gICAgfSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQZXJtYW5lbnROb3RpY2Uobm90aWNlOiBOb3RpY2UgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgbWFwID0gdGhpcy5nZXRQZXJtYW5lbnROb3RpY2VzKCk7XG4gICAgaWYgKG5vdGljZSkge1xuICAgICAgbWFwLnNldCh0aGlzLnBsdWdpbk5hbWUsIG5vdGljZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcC5kZWxldGUodGhpcy5wbHVnaW5OYW1lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgYSBub3RpY2Ugd2l0aCB0aGUgZ2l2ZW4gZHVyYXRpb24sIHBsYWNpbmcgaXQgYWNjb3JkaW5nIHRvIGl0cyB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZX06IGFcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZU1vZGUuUmVwbGFjZX0gbm90aWNlIHRha2VzIHRoZSBwZXItcGx1Z2luIHNsb3QgKGhpZGluZyB3aGF0ZXZlciB3YXMgaW4gaXQsIGFuZFxuICAgKiBvcHRpb25hbGx5IHJlZ2lzdGVyaW5nIGFzIHRoaXMgcGx1Z2luJ3MgcGVybWFuZW50IG5vdGljZSksIGFuIHtAbGluayBQbHVnaW5Ob3RpY2VNb2RlLkFwcGVuZH0gb25lXG4gICAqIGpvaW5zIHRoZSBub3RpY2UgYWxyZWFkeSBpbiB0aGUgc2xvdCwgYW5kIGEge0BsaW5rIFBsdWdpbk5vdGljZU1vZGUuU2VwYXJhdGV9IG9uZSBpcyB0cmFja2VkIG9uIGl0c1xuICAgKiBvd24sIGxlYXZpbmcgdGhlIHNsb3QgdW50b3VjaGVkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIFRoZSB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd25Ob3RpY2V9IGRlc2NyaWJpbmcgd2hlcmUgdGhlIG1lc3NhZ2UgZW5kZWQgdXAuXG4gICAqL1xuICBwcml2YXRlIHNob3dOb3RpY2VXaXRoRHVyYXRpb24ocGFyYW1zOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlV2l0aER1cmF0aW9uUGFyYW1zKTogUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd25Ob3RpY2Uge1xuICAgIGNvbnN0IHsgZHVyYXRpb25Jbk1pbGxpc2Vjb25kcywgbWVzc2FnZSwgbW9kZSwgb25DbG9zZUNsaWNrLCBvbkhpZGUsIHJlcXVpcmVzRXhwbGljaXRDbG9zZSwgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudCwgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uIH0gPSBwYXJhbXM7XG4gICAgLy8gT2JzaWRpYW4ncyBgTm90aWNlYCB0cmVhdHMgYW4gb21pdHRlZCBkdXJhdGlvbiBhcyBpdHMgZGVmYXVsdCwgc28gbWFwIHRoZSBgbnVsbGAgXCJubyBleHBsaWNpdFxuICAgIC8vIGR1cmF0aW9uXCIgdmFsdWUgdG8gYHVuZGVmaW5lZGAuXG4gICAgY29uc3Qgbm90aWNlRHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uSW5NaWxsaXNlY29uZHMgPz8gdW5kZWZpbmVkO1xuXG4gICAgaWYgKG1vZGUgPT09IFBsdWdpbk5vdGljZU1vZGUuQXBwZW5kKSB7XG4gICAgICBjb25zdCBhcHBlbmRlZE5vdGljZSA9IHRoaXMuYXBwZW5kVG9DdXJyZW50Tm90aWNlKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQbHVnaW5Ob3RpY2VDb21wb25lbnRBcHBlbmRUb0N1cnJlbnROb3RpY2VQYXJhbXM+KHtcbiAgICAgICAgZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgb25IaWRlLFxuICAgICAgICBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50XG4gICAgICB9KSk7XG4gICAgICBpZiAoYXBwZW5kZWROb3RpY2UpIHtcbiAgICAgICAgcmV0dXJuIGFwcGVuZGVkTm90aWNlO1xuICAgICAgfVxuICAgICAgLy8gTm90aGluZyBvbiBzY3JlZW4gdG8gYXBwZW5kIHRvLCBzbyB0aGlzIG1lc3NhZ2UgYmVjb21lcyB0aGUgc2xvdCdzIG5vdGljZSBpbnN0ZWFkLlxuICAgIH1cblxuICAgIGNvbnN0IGhhc0Nsb3NlQnV0dG9uID0gcmVxdWlyZXNFeHBsaWNpdENsb3NlICYmIHNob3VsZFNob3dDbG9zZUJ1dHRvbjtcbiAgICAvLyBUaGUgY2xvc2UgYnV0dG9uJ3MgY2xpY2sgaGFuZGxlciBuZWVkcyB0aGUgYE5vdGljZWAsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHVudGlsIGl0IGlzIGJ1aWx0IGZyb21cbiAgICAvLyB0aGlzIGNvbnRlbnQ7IGNhcHR1cmUgaXQgbGF6aWx5IHZpYSBhIGhvbGRlciByZXNvbHZlZCBhdCBjbGljayB0aW1lLiBUaGUgZ2V0dGVyIGlzIGNyZWF0ZWQgb25seVxuICAgIC8vIHdoZW4gYSBjbG9zZSBidXR0b24gaXMgc2hvd24uXG4gICAgbGV0IGJ1aWx0Tm90aWNlOiBOb3RpY2UgfCBudWxsID0gbnVsbDtcbiAgICBjb25zdCB7IGNvbnRlbnRFbCwgZnJhZ21lbnQgfSA9IHRoaXMuYnVpbGROb3RpY2VDb250ZW50KG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZE5vdGljZUNvbnRlbnRQYXJhbXM+KHtcbiAgICAgIGdldE5vdGljZTogaGFzQ2xvc2VCdXR0b24gPyAoKTogTm90aWNlIHwgbnVsbCA9PiBidWlsdE5vdGljZSA6IHVuZGVmaW5lZCxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBvbkNsb3NlQ2xpY2ssXG4gICAgICByZXF1aXJlc0V4cGxpY2l0Q2xvc2UsXG4gICAgICBzaG91bGRTaG93Q2xvc2VCdXR0b25cbiAgICB9KSk7XG5cbiAgICBpZiAobW9kZSA9PT0gUGx1Z2luTm90aWNlTW9kZS5TZXBhcmF0ZSkge1xuICAgICAgYnVpbHROb3RpY2UgPSBuZXcgTm90aWNlKGZyYWdtZW50LCBub3RpY2VEdXJhdGlvbkluTWlsbGlzZWNvbmRzKTtcbiAgICAgIHRoaXMuaW5zdGFsbEV4cGxpY2l0Q2xvc2VHdWFyZHMoYnVpbHROb3RpY2UsIHJlcXVpcmVzRXhwbGljaXRDbG9zZSk7XG4gICAgICB0aGlzLmluc3RhbGxVc2VyQ2xpY2tUcmFja2luZyhidWlsdE5vdGljZSk7XG4gICAgICB0aGlzLndpcmVPbkhpZGUoYnVpbHROb3RpY2UsIG9uSGlkZSk7XG4gICAgICB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzLmFkZChidWlsdE5vdGljZSk7XG4gICAgICByZXR1cm4geyBjb250ZW50RWwsIGlzTm90aWNlT3duZWQ6IHRydWUsIG5vdGljZTogYnVpbHROb3RpY2UgfTtcbiAgICB9XG5cbiAgICB0aGlzLm5vdGljZT8uaGlkZSgpO1xuICAgIGJ1aWx0Tm90aWNlID0gbmV3IE5vdGljZShmcmFnbWVudCwgbm90aWNlRHVyYXRpb25Jbk1pbGxpc2Vjb25kcyk7XG4gICAgdGhpcy5ub3RpY2UgPSBidWlsdE5vdGljZTtcbiAgICB0aGlzLmluc3RhbGxFeHBsaWNpdENsb3NlR3VhcmRzKGJ1aWx0Tm90aWNlLCByZXF1aXJlc0V4cGxpY2l0Q2xvc2UpO1xuICAgIHRoaXMuaW5zdGFsbFVzZXJDbGlja1RyYWNraW5nKGJ1aWx0Tm90aWNlKTtcbiAgICB0aGlzLndpcmVPbkhpZGUoYnVpbHROb3RpY2UsIG9uSGlkZSk7XG5cbiAgICBpZiAoc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudCkge1xuICAgICAgdGhpcy5zZXRQZXJtYW5lbnROb3RpY2UoYnVpbHROb3RpY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFBlcm1hbmVudE5vdGljZShudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgY29udGVudEVsLCBpc05vdGljZU93bmVkOiB0cnVlLCBub3RpY2U6IGJ1aWx0Tm90aWNlIH07XG4gIH1cblxuICAvKipcbiAgICogRHJvcHMgYSBsZWFkaW5nIGA8cGx1Z2luIG5hbWU+OmAgZnJvbSBhIG1lc3NhZ2UuIFRoZSBub3RpY2UgYWxyZWFkeSBvcGVucyB3aXRoIHRoZSBwbHVnaW4gbmFtZSBpbiBpdHNcbiAgICogb3duIHN0eWxlZCBoZWFkZXIsIHNvIGEgbWVzc2FnZSB0aGF0IHJlcGVhdHMgaXQgcmVhZHMgYXMgdGhlIG5hbWUgdHdpY2UuXG4gICAqXG4gICAqIEEgZnJhZ21lbnQgaXMgbWF0Y2hlZCBvbiBpdHMgdGV4dCwgc28gYSBuYW1lIHdyYXBwZWQgaW4gYW4gZWxlbWVudCAoc3VjaCBhcyBpbmxpbmUgY29kZSkgc3RpbGxcbiAgICogY291bnRzOyB0aGUgcHJlZml4IGlzIGN1dCBvdXQgb2YgaXRzIHRleHQgbm9kZXMsIGFuZCBhbiBlbGVtZW50IGl0IGxlYXZlcyBlbXB0eSBpcyByZW1vdmVkLiBUaGUgbmFtZVxuICAgKiBpcyBtYXRjaGVkIGV4YWN0bHksIGFuZCBvbmx5IGF0IHRoZSBzdGFydDogYSBtZXNzYWdlIHRoYXQgbWVyZWx5IG1lbnRpb25zIHRoZSBuYW1lIGxhdGVyIGlzIGxlZnRcbiAgICogYWxvbmUuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIFRoZSBtZXNzYWdlIHdpdGhvdXQgdGhlIHByZWZpeC4gQSBmcmFnbWVudCBpcyBjaGFuZ2VkIGluIHBsYWNlIGFuZCByZXR1cm5lZC5cbiAgICovXG4gIHByaXZhdGUgc3RyaXBQbHVnaW5OYW1lUHJlZml4KG1lc3NhZ2U6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcpOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZS5zbGljZSh0aGlzLmdldFBsdWdpbk5hbWVQcmVmaXhMZW5ndGgobWVzc2FnZSkpO1xuICAgIH1cblxuICAgIGxldCByZW1haW5pbmdMZW5ndGggPSB0aGlzLmdldFBsdWdpbk5hbWVQcmVmaXhMZW5ndGgobWVzc2FnZS50ZXh0Q29udGVudCk7XG4gICAgaWYgKHJlbWFpbmluZ0xlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0ZXh0Tm9kZSBvZiBnZXRUZXh0Tm9kZXMobWVzc2FnZSkpIHtcbiAgICAgIGlmICh0ZXh0Tm9kZS5kYXRhLmxlbmd0aCA+IHJlbWFpbmluZ0xlbmd0aCkge1xuICAgICAgICB0ZXh0Tm9kZS5kYXRhID0gdGV4dE5vZGUuZGF0YS5zbGljZShyZW1haW5pbmdMZW5ndGgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlbWFpbmluZ0xlbmd0aCAtPSB0ZXh0Tm9kZS5kYXRhLmxlbmd0aDtcbiAgICAgIC8vIENsaW1iIHRvIHRoZSBvdXRlcm1vc3QgZWxlbWVudCBob2xkaW5nIG5vdGhpbmcgYnV0IHRoaXMgdGV4dCwgc28gbm8gZW1wdHkgd3JhcHBlciBpcyBsZWZ0IGJlaGluZC5cbiAgICAgIC8vIEEgbm9kZSBkaXJlY3RseSBpbiB0aGUgZnJhZ21lbnQgaGFzIG5vIHBhcmVudCBlbGVtZW50LCB3aGljaCBpcyB3aGVyZSB0aGUgY2xpbWIgc3RvcHMuXG4gICAgICBsZXQgZW1wdGllZE5vZGU6IENoaWxkTm9kZSA9IHRleHROb2RlO1xuICAgICAgd2hpbGUgKGVtcHRpZWROb2RlLnBhcmVudEVsZW1lbnQ/LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGVtcHRpZWROb2RlID0gZW1wdGllZE5vZGUucGFyZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICAgIGVtcHRpZWROb2RlLnJlbW92ZSgpO1xuICAgICAgaWYgKHJlbWFpbmluZ0xlbmd0aCA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHMgYSBub3RpY2UncyBgaGlkZWAgc28gdGhlIGdpdmVuIGNhbGxiYWNrIHJ1bnMgdGhlIGZpcnN0IHRpbWUgdGhlIG5vdGljZSBpcyBoaWRkZW4g4oCUIGJ5IHRoZVxuICAgKiB1c2VyLCBieSBhIHJlcGxhY2luZyBub3RpY2UsIGJ5IGl0cyBkdXJhdGlvbiBlbGFwc2luZywgb3Igb24gdW5sb2FkLiBEb2VzIG5vdGhpbmcgd2hlbiBubyBjYWxsYmFja1xuICAgKiBpcyBnaXZlbi5cbiAgICpcbiAgICogQHBhcmFtIG5vdGljZSAtIFRoZSBub3RpY2Ugd2hvc2UgYGhpZGVgIHRvIHdyYXAuXG4gICAqIEBwYXJhbSBvbkhpZGUgLSBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIG9uIHRoZSBmaXJzdCBoaWRlLCBvciBgdW5kZWZpbmVkYCB0byBza2lwIHdyYXBwaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSB3aXJlT25IaWRlKG5vdGljZTogTm90aWNlLCBvbkhpZGU6ICgoaW5mbzogUGx1Z2luTm90aWNlSGlkZUluZm8pID0+IFByb21pc2FibGU8dm9pZD4pIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKCFvbkhpZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gUnVuIGBvbkhpZGVgIHRoZSBmaXJzdCB0aW1lIHRoZSBub3RpY2UgaXMgaGlkZGVuLiBBIGBvbmNlYCBwYXRjaCBvbiBgaGlkZWAgaW50ZXJjZXB0cyBleGFjdGx5IG9uZVxuICAgIC8vIGNhbGwgdGhlbiB1bmluc3RhbGxzIGl0c2VsZiAodW5sb2FkaW5nIHRoaXMgZGVkaWNhdGVkIGNvbXBvbmVudCksIHNvIHRoZXJlIGlzIG5vIG1hbnVhbFxuICAgIC8vIHNpbmdsZS1maXJlIGJvb2trZWVwaW5nIGFuZCBubyBsaW5nZXJpbmcgcGF0Y2ggb24gdGhlIHRyYW5zaWVudCBub3RpY2UuIFRoZSB1c2VyLWNsb3NlIGZsYWdzIHdlcmVcbiAgICAvLyBzZXQgYmVmb3JlIGBoaWRlKClgIHdhcyBpbnZva2VkIChzZWUgYGFwcGVuZENsb3NlQnV0dG9uYCAvIGBpbnN0YWxsVXNlckNsaWNrVHJhY2tpbmdgKSwgc28gdGhleVxuICAgIC8vIHN0aWxsIGhvbGQgd2hlbiByZWFkIGhlcmUgYWZ0ZXIgYGZhbGxiYWNrKClgLlxuICAgIGNvbnN0IHBhdGNoQ29tcG9uZW50ID0gbmV3IE1vbmtleUFyb3VuZENvbXBvbmVudCgpO1xuICAgIHBhdGNoQ29tcG9uZW50LmxvYWQoKTtcbiAgICBwYXRjaENvbXBvbmVudC5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAgICRvYmplY3Q6IG5vdGljZSxcbiAgICAgIG1ldGhvZE5hbWU6ICdoaWRlJyxcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgICBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrIH0pID0+IHtcbiAgICAgICAgZmFsbGJhY2soKTtcbiAgICAgICAgY29uc3QgaXNDbG9zZUJ1dHRvbkNsaWNrZWQgPSB0aGlzLmNsb3NlQnV0dG9uQ2xpY2tlZE5vdGljZXMuaGFzKG5vdGljZSk7XG4gICAgICAgIGNvbnN0IGlzVXNlckFjdGlvbiA9IGlzQ2xvc2VCdXR0b25DbGlja2VkIHx8IHRoaXMudXNlckNsaWNrZWROb3RpY2VzLmhhcyhub3RpY2UpO1xuICAgICAgICBpbnZva2VBc3luY1NhZmVseShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgb25IaWRlKHsgaXNDbG9zZUJ1dHRvbkNsaWNrZWQsIGlzVXNlckFjdGlvbiB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb2xsZWN0cyB0aGUgdGV4dCBub2RlcyB1bmRlciBhIG5vZGUsIGluIGRvY3VtZW50IG9yZGVyLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgdG8gd2Fsay5cbiAqIEByZXR1cm5zIFRoZSB0ZXh0IG5vZGVzLlxuICovXG5mdW5jdGlvbiBnZXRUZXh0Tm9kZXMobm9kZTogTm9kZSk6IFRleHRbXSB7XG4gIGNvbnN0IHRleHROb2RlczogVGV4dFtdID0gW107XG4gIGZvciAoY29uc3QgY2hpbGROb2RlIG9mIG5vZGUuY2hpbGROb2Rlcykge1xuICAgIGlmIChpc1RleHROb2RlKGNoaWxkTm9kZSkpIHtcbiAgICAgIHRleHROb2Rlcy5wdXNoKGNoaWxkTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRleHROb2Rlcy5wdXNoKC4uLmdldFRleHROb2RlcyhjaGlsZE5vZGUpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRleHROb2Rlcztcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIG5vZGUgaXMgYSB0ZXh0IG5vZGUuIEl0IHJlYWRzIHRoZSBub2RlIHR5cGUgcmF0aGVyIHRoYW4gYGluc3RhbmNlb2YgVGV4dGAsIHdoaWNoIGlzXG4gKiBmYWxzZSBmb3IgYSBub2RlIGZyb20gYSBwb3BvdXQgd2luZG93J3MgcmVhbG0uXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgbm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIG5vZGUgaXMgYSB0ZXh0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGlzVGV4dE5vZGUobm9kZTogTm9kZSk6IG5vZGUgaXMgVGV4dCB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUEsbUJBQXlCO0FBQ3pCLG1CQUFrQztBQUNsQywwQkFBNEM7QUFDNUMseUJBQWtDO0FBQ2xDLDRCQUE2QjtBQUM3QixzQkFJTztBQUVQLHVCQUF5QjtBQUN6QiwwQkFBZ0M7QUFDaEMsa0JBQWtCO0FBQ2xCLGdDQUFvQztBQUNwQyw0QkFBb0M7QUFDcEMsMEJBQTRCO0FBQzVCLHFDQUFzQztBQUV0QyxNQUFNLDhCQUE4QjtBQUNwQyxNQUFNLDRDQUE0QztBQUNsRCxNQUFNLDRDQUE0QztBQUlsRCxNQUFNLG1EQUFtRDtBQUl6RCxNQUFNLCtCQUErQjtBQVM5QixJQUFLLG1CQUFMLGtCQUFLQSxzQkFBTDtBQVNMLEVBQUFBLGtCQUFBLFlBQVM7QUFNVCxFQUFB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
|
|
@@ -223,7 +223,7 @@ class PluginSuggestionComponent extends import_component_ex.ComponentEx {
|
|
|
223
223
|
return;
|
|
224
224
|
}
|
|
225
225
|
const bannerEl = containerEl.createDiv({
|
|
226
|
-
cls: [import_css_class.CssClass.LibraryName, import_css_class.CssClass.
|
|
226
|
+
cls: [import_css_class.CssClass.LibraryName, import_css_class.CssClass.PluginSuggestionBanner]
|
|
227
227
|
});
|
|
228
228
|
(0, import_html_element.appendTextOrFragmentClone)(bannerEl.createDiv(), this.reason);
|
|
229
229
|
new import_obsidian.ButtonComponent(bannerEl).setButtonText(this.getActionButtonText(state)).setCta().onClick((0, import_async.convertAsyncToSync)(async () => {
|
|
@@ -232,7 +232,7 @@ class PluginSuggestionComponent extends import_component_ex.ComponentEx {
|
|
|
232
232
|
}
|
|
233
233
|
getActionButtonText(state) {
|
|
234
234
|
return (0, import_i18n.t)(
|
|
235
|
-
($) => state === SuggestedPluginState.InstalledButDisabled ? $.
|
|
235
|
+
($) => state === SuggestedPluginState.InstalledButDisabled ? $.obsidianLib.pluginSuggestion.enable : $.obsidianLib.pluginSuggestion.install
|
|
236
236
|
);
|
|
237
237
|
}
|
|
238
238
|
showSuggestionNotice() {
|
|
@@ -243,12 +243,12 @@ class PluginSuggestionComponent extends import_component_ex.ComponentEx {
|
|
|
243
243
|
const fragment = createFragment((fragmentEl) => {
|
|
244
244
|
(0, import_html_element.appendTextOrFragmentClone)(fragmentEl.createDiv(), this.reason);
|
|
245
245
|
const buttonsEl = fragmentEl.createDiv({
|
|
246
|
-
cls: [import_css_class.CssClass.LibraryName, import_css_class.CssClass.
|
|
246
|
+
cls: [import_css_class.CssClass.LibraryName, import_css_class.CssClass.PluginSuggestionNoticeButtons]
|
|
247
247
|
});
|
|
248
248
|
new import_obsidian.ButtonComponent(buttonsEl).setButtonText(this.getActionButtonText(state)).setCta().onClick((0, import_async.convertAsyncToSync)(async () => {
|
|
249
249
|
await this.installAndEnableSuggestedPlugin();
|
|
250
250
|
}));
|
|
251
|
-
new import_obsidian.ButtonComponent(buttonsEl).setButtonText((0, import_i18n.t)(($) => $.
|
|
251
|
+
new import_obsidian.ButtonComponent(buttonsEl).setButtonText((0, import_i18n.t)(($) => $.obsidianLib.pluginSuggestion.notNow)).onClick((0, import_async.convertAsyncToSync)(async () => {
|
|
252
252
|
await this.setSuggestionDeclined(true);
|
|
253
253
|
}));
|
|
254
254
|
});
|
|
@@ -260,4 +260,4 @@ class PluginSuggestionComponent extends import_component_ex.ComponentEx {
|
|
|
260
260
|
PluginSuggestionComponent,
|
|
261
261
|
SuggestedPluginState
|
|
262
262
|
});
|
|
263
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BsdWdpbi1zdWdnZXN0aW9uLWNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29tcG9uZW50IHRoYXQgc3VnZ2VzdHMgaW5zdGFsbGluZyBhbm90aGVyIGNvbW11bml0eSBwbHVnaW4gdGhlIGhvc3QgcGx1Z2luIG5lZWRzIGluIG9yZGVyIHRvIG9mZmVyXG4gKiBzb21lIG9mIGl0cyBiZWhhdmlvci5cbiAqXG4gKiBBIHN1Z2dlc3Rpb24gaXMgbm90IGEgZGVwZW5kZW5jeSDigJQgYnV0IGEgZGVwZW5kZW5jeSBpcyBub3cgYSB0aGluZyB0aGlzIGxpYnJhcnkgSEFTLCBzbyB0aGUgY2hvaWNlXG4gKiBiZXR3ZWVuIHRoZW0gaXMgYSByZWFsIG9uZS4gVXNlIGEgc3VnZ2VzdGlvbiB3aGVuIHRoZSBvdGhlciBwbHVnaW4gQUREUyBzb21ldGhpbmc6IHRoZSBob3N0IGtlZXBzXG4gKiB3b3JraW5nIHdpdGhvdXQgaXQsIHNpbXBseSB1bmFibGUgdG8gb2ZmZXIgd2hhdGV2ZXIgdGhhdCBwbHVnaW4gb3ducywgYW5kIHRoaXMgY29tcG9uZW50IGFza3Mgb25jZVxuICogd2hldGhlciB0aGUgdXNlciB3b3VsZCBsaWtlIGl0IGluc3RhbGxlZC4gVXNlIGBQbHVnaW5HYXRlQ29tcG9uZW50YCB3aGVuIHRoZSBob3N0J3MgYWR2ZXJ0aXNlZFxuICogYmVoYXZpb3IgaXMgbm90IHRoZXJlIGF0IGFsbCB3aXRob3V0IHRoZSBvdGhlciBwbHVnaW4uXG4gKlxuICogVGhpcyBmaWxlIHVzZWQgdG8gYXJndWUgdGhlIHN0cm9uZ2VyIHBvc2l0aW9uIOKAlCB0aGF0IHJlcXVpcmluZyBhbm90aGVyIHBsdWdpbiBzaG91bGQgbm90IGV4aXN0LCBiZWNhdXNlXG4gKiBcImludmVudGluZyBvbmUgYnkgcmVmdXNpbmcgdG8gbG9hZCB3b3VsZCBwdW5pc2ggdGhlIHVzZXIgZm9yIHNvbWV0aGluZyB0aGV5IG5ldmVyIGFncmVlZCB0b1wiLiBUaGF0IHdhc1xuICogd3JvbmcgYWJvdXQgd2hpY2ggb3B0aW9uIHB1bmlzaGVzIHRoZSB1c2VyLCBhbmQgdGhlIGNvdW50ZXItY2FzZSBpcyB3b3J0aCBrZWVwaW5nIHJhdGhlciB0aGFuIHF1aWV0bHlcbiAqIGRlbGV0aW5nLiBBIGxvYWQtYmVhcmluZyBwbHVnaW4gdGhlIHVzZXIgY2Fubm90IGlkZW50aWZ5IGlzIG5vdCBhIG5ldXRyYWwgb3V0Y29tZTogbW9udGhzIGxhdGVyIHRoZXlcbiAqIG1lZXQgaXQgaW4gdGhlaXIgcGx1Z2luIGxpc3QsIG5vdGhpbmcgaW4gT2JzaWRpYW4ncyBtYW5pZmVzdCBmb3JtYXQgc2F5cyBhbnl0aGluZyBkZXBlbmRzIG9uIGl0LCB0aGV5XG4gKiByZW1vdmUgaXQsIGFuZCB0aGUgZGFtYWdlIHN1cmZhY2VzIHdlZWtzIGFmdGVyIHRoYXQgd2l0aCBubyB3YXkgdG8gY29ubmVjdCB0aGUgdHdvLiBCZXNpZGUgdGhhdCwgYVxuICogbWFuZGF0b3J5IGRlcGVuZGVuY3kgdGhhdCBzdGF5cyBlbmFibGVkLWJ1dC1pbmVydCwgbmFtZXMgd2hhdCBpdCBpcyB3YWl0aW5nIGZvciwgaW5zdGFsbHMgaXQgaW4gb25lXG4gKiBjbGljayBhbmQgcmVzdW1lcyB3aXRob3V0IGEgcmVzdGFydCBpcyBub3QgYSBwdW5pc2htZW50IOKAlCBpdCBpcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiwgZGVsaXZlcmVkIHdoaWxlXG4gKiB0aGUgdXNlciBjYW4gc3RpbGwgYWN0IG9uIGl0LlxuICpcbiAqIFRoZSBhc2sgaXMgc3VyZmFjZWQgdHdpY2UsIGRlbGliZXJhdGVseSwgYmVjYXVzZSB0aGUgdHdvIHBsYWNlbWVudHMgYW5zd2VyIGRpZmZlcmVudCBxdWVzdGlvbnM6XG4gKiBhIG5vdGljZSBvbiBsb2FkIChcInlvdSBhcmUgbWlzc2luZyBzb21ldGhpbmcgeW91IHByb2JhYmx5IHdhbnRcIikgYW5kIGEgc2V0dGluZ3MtdGFiIGJhbm5lciAoXCJ0aGVcbiAqIHNldHRpbmdzIHlvdSBjYW1lIGxvb2tpbmcgZm9yIGxpdmUgaW4gYW5vdGhlciBwbHVnaW5cIikuIERlY2xpbmluZyBzaWxlbmNlcyBvbmx5IHRoZSBub3RpY2Ug4oCUIGEgdXNlclxuICogd2hvIG9wZW5zIHRoZSBzZXR0aW5ncyB0YWIgaXMgYXNraW5nIGFib3V0IHRoZSBmZWF0dXJlIHJpZ2h0IHRoZW4sIHNvIHRoZSBiYW5uZXIgc3RheXMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBjb252ZXJ0QXN5bmNUb1N5bmMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk5vdGljZUNvbXBvbmVudCB9IGZyb20gJy4vcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuXG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBhcHBlbmRUZXh0T3JGcmFnbWVudENsb25lIH0gZnJvbSAnLi4vaHRtbC1lbGVtZW50LnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHtcbiAgZ2V0SW5zdGFsbGVkUGx1Z2luU3RhdGUsXG4gIGluc3RhbGxBbmRFbmFibGVQbHVnaW4sXG4gIEluc3RhbGxlZFBsdWdpblN0YXRlXG59IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4taW5zdGFsbC1zdGF0ZS50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IENhbGxiYWNrTGF5b3V0UmVhZHlDb21wb25lbnQgfSBmcm9tICcuL2xheW91dC1yZWFkeS1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIEhvdyB0aGUgc3VnZ2VzdGVkIHBsdWdpbiBpcyBjdXJyZW50bHkgcHJlc2VudCBpbiB0aGUgdmF1bHQuXG4gKlxuICogVGhlIHNhbWUgdGhyZWUgc3RhdGVzIGEgbWFuZGF0b3J5IGRlcGVuZGVuY3kgaXMgaW4sIHNvIHRoaXMgaXMge0BsaW5rIEluc3RhbGxlZFBsdWdpblN0YXRlfSB1bmRlciB0aGVcbiAqIG5hbWUgdGhpcyBjb21wb25lbnQgaGFzIGFsd2F5cyB1c2VkIOKAlCBvbmUgZW51bSwgc28gYSBjYWxsZXIgaG9sZGluZyBhIHN0YXRlIGZyb20gZWl0aGVyIGNvbXBvbmVudCBjYW5cbiAqIGNvbXBhcmUgaXQgYWdhaW5zdCBlaXRoZXIgbmFtZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFN1Z2dlc3RlZFBsdWdpblN0YXRlID0gSW5zdGFsbGVkUGx1Z2luU3RhdGU7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGRlY2xpbmVkIHRoaXMgc3VnZ2VzdGlvbi5cbiAgICpcbiAgICogU3RvcmFnZSBiZWxvbmdzIHRvIHRoZSBob3N0IHBsdWdpbiAodHlwaWNhbGx5IG9uZSBvZiBpdHMgc2V0dGluZ3MpLCBiZWNhdXNlIHRoaXMgY29tcG9uZW50IGhhcyBub1xuICAgKiBgZGF0YS5qc29uYCBvZiBpdHMgb3duIGFuZCBhIGRlY2xpbmUgaGFzIHRvIG91dGxpdmUgYSByZWxvYWQuXG4gICAqXG4gICAqIE9ubHkgZXZlciBjYWxsZWQgb25jZSB7QGxpbmsgcGx1Z2luU2V0dGluZ3NDb21wb25lbnR9IHJlcG9ydHMgaXRzIHNldHRpbmdzIGxvYWRlZCwgc28gYW4gaW1wbGVtZW50YXRpb25cbiAgICogcmVhZGluZyBhIHNldHRpbmcgaXMgZ3VhcmFudGVlZCB0byByZWFkIHRoZSBzdG9yZWQgdmFsdWUgcmF0aGVyIHRoYW4gaXRzIGRlZmF1bHQuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBzdWdnZXN0aW9uIGhhcyBiZWVuIGRlY2xpbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNTdWdnZXN0aW9uRGVjbGluZWQ6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpY2UgY29tcG9uZW50IG9mIHRoZSBwbHVnaW4gbWFraW5nIHRoZSBzdWdnZXN0aW9uLCB1c2VkIHRvIHNob3cgdGhlIHN1Z2dlc3Rpb24gYW5kIGl0c1xuICAgKiBvdXRjb21lLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBjb21wb25lbnQgaG9sZGluZyB3aGF0ZXZlciB7QGxpbmsgaXNTdWdnZXN0aW9uRGVjbGluZWR9IHJlYWRzLlxuICAgKlxuICAgKiBUYWtlbiBhcyBhIHdob2xlIGNvbXBvbmVudCByYXRoZXIgdGhhbiBhcyBhIGJhcmUgXCJyZWFkeVwiIGZsYWcgc28gdGhlIGhvc3QgY2Fubm90IGZvcmdldCB0byB3aXJlIHRoZVxuICAgKiB3YWl0OiB0aGUgbm90aWNlIGlzIGRlY2lkZWQgb25seSBhZnRlciB0aGlzIGNvbXBvbmVudCBoYXMgcmVhZCBgZGF0YS5qc29uYC4gU2VlXG4gICAqIHtAbGluayBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2Uud2hlbkxvYWRlZEZyb21GaWxlfSBmb3Igd2h5IHRoZSByZWFkIGNhbm5vdCBzaW1wbHkgaGFwcGVuIGF0XG4gICAqIGxheW91dC1yZWFkeS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQaWNrPFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+LCAnd2hlbkxvYWRlZEZyb21GaWxlJz47XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhbGl6ZWQgc2VudGVuY2UgZXhwbGFpbmluZyB3aGF0IHRoZSBob3N0IHBsdWdpbiBjYW5ub3QgZG8gd2l0aG91dCB0aGUgc3VnZ2VzdGVkIHBsdWdpbi4gVGhlXG4gICAqIGhvc3QgcGx1Z2luIG93bnMgdGhpcyBzdHJpbmc6IG9ubHkgaXQga25vd3Mgd2hpY2ggb2YgaXRzIGZlYXR1cmVzIGFyZSBhZmZlY3RlZC5cbiAgICpcbiAgICogUGFzcyBhIHtAbGluayBEb2N1bWVudEZyYWdtZW50fSB0byBtYXJrIHVwIHBhcnQgb2YgdGhlIHNlbnRlbmNlLCBzdWNoIGFzIGEgcGx1Z2luIG5hbWUgcmVuZGVyZWQgYXNcbiAgICogY29kZS4gRWFjaCByZW5kZXIgYXBwZW5kcyBhIGZyZXNoIGNsb25lIG9mIGl0LCBiZWNhdXNlIHRoZSBub3RpY2UgYW5kIHRoZSBiYW5uZXIgZWFjaCBuZWVkIHRoZWlyIG93blxuICAgKiBjb3B5IGFuZCBhcHBlbmRpbmcgYSBmcmFnbWVudCBlbXB0aWVzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWNvcmRzIHRoZSB1c2VyJ3MgYW5zd2VyIHRvIHRoZSBzdWdnZXN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gaXNEZWNsaW5lZCAtIGB0cnVlYCB3aGVuIHRoZSB1c2VyIGRlY2xpbmVkLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGFuc3dlciBpcyBwZXJzaXN0ZWQuXG4gICAqL1xuICByZWFkb25seSBzZXRTdWdnZXN0aW9uRGVjbGluZWQ6IChpc0RlY2xpbmVkOiBib29sZWFuKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIHN1Z2dlc3RlZCBwbHVnaW4sIGFzIGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkuXG4gICAqL1xuICByZWFkb25seSBzdWdnZXN0ZWRQbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzdWdnZXN0ZWQgcGx1Z2luLCBzaG93biB0byB0aGUgdXNlci5cbiAgICovXG4gIHJlYWRvbmx5IHN1Z2dlc3RlZFBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBIb3cgdGhlIHN1Z2dlc3RlZCBwbHVnaW4gaXMgY3VycmVudGx5IHByZXNlbnQgaW4gdGhlIHZhdWx0LlxuICovXG5leHBvcnQgdHlwZSBTdWdnZXN0ZWRQbHVnaW5TdGF0ZSA9IEluc3RhbGxlZFBsdWdpblN0YXRlO1xuXG4vKipcbiAqIFN1Z2dlc3RzIGluc3RhbGxpbmcgYW5vdGhlciBjb21tdW5pdHkgcGx1Z2luLCB2aWEgYSBsb2FkLXRpbWUgbm90aWNlIGFuZCBhIHNldHRpbmdzLXRhYiBiYW5uZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcDogQXBwO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzU3VnZ2VzdGlvbkRlY2xpbmVkOiAoKSA9PiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbk5vdGljZUNvbXBvbmVudDogUGx1Z2luTm90aWNlQ29tcG9uZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQaWNrPFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+LCAnd2hlbkxvYWRlZEZyb21GaWxlJz47XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVhc29uOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNldFN1Z2dlc3Rpb25EZWNsaW5lZDogKGlzRGVjbGluZWQ6IGJvb2xlYW4pID0+IFByb21pc2FibGU8dm9pZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgc3VnZ2VzdGVkUGx1Z2luSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzdWdnZXN0ZWRQbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFBsdWdpblN1Z2dlc3Rpb25Db21wb25lbnR9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG4gICAgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudDtcbiAgICB0aGlzLnJlYXNvbiA9IHBhcmFtcy5yZWFzb247XG4gICAgdGhpcy5zdWdnZXN0ZWRQbHVnaW5JZCA9IHBhcmFtcy5zdWdnZXN0ZWRQbHVnaW5JZDtcbiAgICB0aGlzLnN1Z2dlc3RlZFBsdWdpbk5hbWUgPSBwYXJhbXMuc3VnZ2VzdGVkUGx1Z2luTmFtZTtcbiAgICB0aGlzLmlzU3VnZ2VzdGlvbkRlY2xpbmVkID0gcGFyYW1zLmlzU3VnZ2VzdGlvbkRlY2xpbmVkO1xuICAgIHRoaXMuc2V0U3VnZ2VzdGlvbkRlY2xpbmVkID0gcGFyYW1zLnNldFN1Z2dlc3Rpb25EZWNsaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBob3cgdGhlIHN1Z2dlc3RlZCBwbHVnaW4gaXMgY3VycmVudGx5IHByZXNlbnQgaW4gdGhlIHZhdWx0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUge0BsaW5rIFN1Z2dlc3RlZFBsdWdpblN0YXRlfS5cbiAgICovXG4gIHB1YmxpYyBnZXRTdWdnZXN0ZWRQbHVnaW5TdGF0ZSgpOiBTdWdnZXN0ZWRQbHVnaW5TdGF0ZSB7XG4gICAgcmV0dXJuIGdldEluc3RhbGxlZFBsdWdpblN0YXRlKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBwbHVnaW5JZDogdGhpcy5zdWdnZXN0ZWRQbHVnaW5JZFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbGxzICh3aGVuIG5lZWRlZCkgYW5kIGVuYWJsZXMgdGhlIHN1Z2dlc3RlZCBwbHVnaW4sIHJlcG9ydGluZyB0aGUgb3V0Y29tZSBhcyBhIG5vdGljZS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCwgb3Igb25jZSB0aGUgZmFpbHVyZSBoYXMgYmVlblxuICAgKiByZXBvcnRlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpbnN0YWxsQW5kRW5hYmxlU3VnZ2VzdGVkUGx1Z2luKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmdldFN1Z2dlc3RlZFBsdWdpblN0YXRlKCkgPT09IFN1Z2dlc3RlZFBsdWdpblN0YXRlLkVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCBpbnN0YWxsQW5kRW5hYmxlUGx1Z2luKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBwbHVnaW5JZDogdGhpcy5zdWdnZXN0ZWRQbHVnaW5JZCxcbiAgICAgIHBsdWdpbk5hbWU6IHRoaXMuc3VnZ2VzdGVkUGx1Z2luTmFtZSxcbiAgICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudDogdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnRcbiAgICB9KTtcblxuICAgIC8vIE9ubHkgYWZ0ZXIgdGhlIGluc3RhbGwgYWN0dWFsbHkgc3VjY2VlZGVkIOKAlCBgaW5zdGFsbEFuZEVuYWJsZVBsdWdpbmAgcmV0aHJvd3Mgb24gZmFpbHVyZSwgc28gYVxuICAgIC8vIGZhaWxlZCBhdHRlbXB0IGxlYXZlcyBhIHByZXZpb3VzIGRlY2xpbmUgc3RhbmRpbmcgcmF0aGVyIHRoYW4gc2lsZW50bHkgY2xlYXJpbmcgaXQuXG4gICAgYXdhaXQgdGhpcy5zZXRTdWdnZXN0aW9uRGVjbGluZWQoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQsIHNob3dpbmcgdGhlIHN1Z2dlc3Rpb24gbm90aWNlIG9uY2UgdGhlIGxheW91dCBpcyByZWFkeSBBTkQgdGhlIGhvc3QncyBzZXR0aW5nc1xuICAgKiBoYXZlIGJlZW4gcmVhZCBmcm9tIGRpc2suXG4gICAqXG4gICAqIEJvdGggd2FpdHMgbWF0dGVyLCBhbmQgbmVpdGhlciBpbXBsaWVzIHRoZSBvdGhlcjpcbiAgICpcbiAgICogLSBMYXlvdXQtcmVhZHksIGJlY2F1c2UgcGx1Z2lucyBsb2FkIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLCBzbyB0aGUgc3VnZ2VzdGVkIHBsdWdpbiBtYXkgd2VsbCBiZVxuICAgKiAgIGVuYWJsZWQgYSBtb21lbnQgYWZ0ZXIgdGhpcyBvbmUuIENoZWNraW5nIGVhcmxpZXIgd291bGQgc3VnZ2VzdCBpbnN0YWxsaW5nIHNvbWV0aGluZyB0aGUgdXNlclxuICAgKiAgIGFscmVhZHkgaGFzLlxuICAgKiAtIFNldHRpbmdzLWxvYWRlZCwgYmVjYXVzZSB7QGxpbmsgUGx1Z2luU3VnZ2VzdGlvbkNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zLmlzU3VnZ2VzdGlvbkRlY2xpbmVkfVxuICAgKiAgIHJlYWRzIGEgc2V0dGluZyBvZiB0aGUgaG9zdCwgYW5kIHRoZSBob3N0J3Mgc2V0dGluZ3MgY29tcG9uZW50IGlzIGEgU0lCTElORyB3aG9zZSBvd24gYXN5bmMgbG9hZCBpc1xuICAgKiAgIHN0aWxsIGluIGZsaWdodCBoZXJlLiBPbiBhIGxheW91dCB0aGF0IGlzIGFscmVhZHkgcmVhZHkg4oCUIGEgcnVudGltZSBlbmFibGUgZnJvbSB0aGUgQ29tbXVuaXR5XG4gICAqICAgUGx1Z2lucyB0YWIsIG9yIGEgcmUtZW5hYmxlIGFmdGVyIGFuIHVwZGF0ZSDigJQgdGhlIGxheW91dC1yZWFkeSBjYWxsYmFjayBmaXJlcyBpbW1lZGlhdGVseSwgc28gdGhlXG4gICAqICAgcmVhZCB3b3VsZCBzZWUgdGhlIGRlZmF1bHQgYGZhbHNlYCBhbmQgYXNrIGFnYWluIGEgdXNlciB3aG8gaGFzIGFscmVhZHkgZGVjbGluZWQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuYWRkQ2hpbGQoXG4gICAgICBuZXcgQ2FsbGJhY2tMYXlvdXRSZWFkeUNvbXBvbmVudCh0aGlzLmFwcCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50LndoZW5Mb2FkZWRGcm9tRmlsZSgpO1xuICAgICAgICBpZiAodGhpcy5pc1VubG9hZGVkKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dTdWdnZXN0aW9uTm90aWNlKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgc3VnZ2VzdGlvbiBiYW5uZXIgaW50byBhIHNldHRpbmdzLXRhYiBjb250YWluZXIsIHdpdGggYSBidXR0b24gdGhhdCBpbnN0YWxscyBhbmQgZW5hYmxlc1xuICAgKiB0aGUgc3VnZ2VzdGVkIHBsdWdpbi5cbiAgICpcbiAgICogUmVuZGVycyBub3RoaW5nIHdoZW4gdGhlIHN1Z2dlc3RlZCBwbHVnaW4gaXMgYWxyZWFkeSBlbmFibGVkLiBVbmxpa2UgdGhlIG5vdGljZSwgdGhlIGJhbm5lciBpZ25vcmVzIGFcbiAgICogcHJldmlvdXMgZGVjbGluZSDigJQgdGhlIHVzZXIgaXMgbG9va2luZyBhdCB0aGVzZSBzZXR0aW5ncyByaWdodCBub3csIHdoaWNoIGlzIGEgZnJlc2hlciBzaWduYWwgdGhhbiBhblxuICAgKiBhbnN3ZXIgdGhleSBnYXZlIGVhcmxpZXIuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBlbGVtZW50IHRvIHJlbmRlciB0aGUgYmFubmVyIGludG8uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyQmFubmVyKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdWdnZXN0ZWRQbHVnaW5TdGF0ZSgpO1xuICAgIGlmIChzdGF0ZSA9PT0gU3VnZ2VzdGVkUGx1Z2luU3RhdGUuRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhbm5lckVsID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KHtcbiAgICAgIGNsczogW0Nzc0NsYXNzLkxpYnJhcnlOYW1lLCBDc3NDbGFzcy5MZWdhY3lMaWJyYXJ5TmFtZSwgQ3NzQ2xhc3MuUGx1Z2luU3VnZ2VzdGlvbkJhbm5lcl1cbiAgICB9KTtcbiAgICBhcHBlbmRUZXh0T3JGcmFnbWVudENsb25lKGJhbm5lckVsLmNyZWF0ZURpdigpLCB0aGlzLnJlYXNvbik7XG5cbiAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGJhbm5lckVsKVxuICAgICAgLnNldEJ1dHRvblRleHQodGhpcy5nZXRBY3Rpb25CdXR0b25UZXh0KHN0YXRlKSlcbiAgICAgIC5zZXRDdGEoKVxuICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbnN0YWxsQW5kRW5hYmxlU3VnZ2VzdGVkUGx1Z2luKCk7XG4gICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGlvbkJ1dHRvblRleHQoc3RhdGU6IFN1Z2dlc3RlZFBsdWdpblN0YXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdCgoJCkgPT5cbiAgICAgIHN0YXRlID09PSBTdWdnZXN0ZWRQbHVnaW5TdGF0ZS5JbnN0YWxsZWRCdXREaXNhYmxlZFxuICAgICAgICA/ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5TdWdnZXN0aW9uLmVuYWJsZVxuICAgICAgICA6ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5TdWdnZXN0aW9uLmluc3RhbGxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93U3VnZ2VzdGlvbk5vdGljZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3VnZ2VzdGVkUGx1Z2luU3RhdGUoKTtcbiAgICBpZiAoc3RhdGUgPT09IFN1Z2dlc3RlZFBsdWdpblN0YXRlLkVuYWJsZWQgfHwgdGhpcy5pc1N1Z2dlc3Rpb25EZWNsaW5lZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudCgoZnJhZ21lbnRFbCkgPT4ge1xuICAgICAgYXBwZW5kVGV4dE9yRnJhZ21lbnRDbG9uZShmcmFnbWVudEVsLmNyZWF0ZURpdigpLCB0aGlzLnJlYXNvbik7XG4gICAgICBjb25zdCBidXR0b25zRWwgPSBmcmFnbWVudEVsLmNyZWF0ZURpdih7XG4gICAgICAgIGNsczogW0Nzc0NsYXNzLkxpYnJhcnlOYW1lLCBDc3NDbGFzcy5MZWdhY3lMaWJyYXJ5TmFtZSwgQ3NzQ2xhc3MuUGx1Z2luU3VnZ2VzdGlvbk5vdGljZUJ1dHRvbnNdXG4gICAgICB9KTtcblxuICAgICAgbmV3IEJ1dHRvbkNvbXBvbmVudChidXR0b25zRWwpXG4gICAgICAgIC5zZXRCdXR0b25UZXh0KHRoaXMuZ2V0QWN0aW9uQnV0dG9uVGV4dChzdGF0ZSkpXG4gICAgICAgIC5zZXRDdGEoKVxuICAgICAgICAub25DbGljayhjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbEFuZEVuYWJsZVN1Z2dlc3RlZFBsdWdpbigpO1xuICAgICAgICB9KSk7XG5cbiAgICAgIG5ldyBCdXR0b25Db21wb25lbnQoYnV0dG9uc0VsKVxuICAgICAgICAuc2V0QnV0dG9uVGV4dCh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luU3VnZ2VzdGlvbi5ub3ROb3cpKVxuICAgICAgICAub25DbGljayhjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2V0U3VnZ2VzdGlvbkRlY2xpbmVkKHRydWUpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKGZyYWdtZW50LCB7IHNob3VsZEhpZGVPbkNsaWNrOiBmYWxzZSB9KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUErQkEsbUJBQW1DO0FBQ25DLHNCQUFnQztBQUtoQyx1QkFBeUI7QUFDekIsMEJBQTBDO0FBQzFDLGtCQUFrQjtBQUNsQixrQ0FJTztBQUNQLDBCQUE0QjtBQUM1QixvQ0FBNkM7QUFTdEMsTUFBTSx1QkFBdUI7QUE2RTdCLE1BQU0sa0NBQWtDLGdDQUFZO0FBQUEsRUFDeEM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxRQUFvRDtBQUNyRSxVQUFNO0FB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
|
|
263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BsdWdpbi1zdWdnZXN0aW9uLWNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29tcG9uZW50IHRoYXQgc3VnZ2VzdHMgaW5zdGFsbGluZyBhbm90aGVyIGNvbW11bml0eSBwbHVnaW4gdGhlIGhvc3QgcGx1Z2luIG5lZWRzIGluIG9yZGVyIHRvIG9mZmVyXG4gKiBzb21lIG9mIGl0cyBiZWhhdmlvci5cbiAqXG4gKiBBIHN1Z2dlc3Rpb24gaXMgbm90IGEgZGVwZW5kZW5jeSDigJQgYnV0IGEgZGVwZW5kZW5jeSBpcyBub3cgYSB0aGluZyB0aGlzIGxpYnJhcnkgSEFTLCBzbyB0aGUgY2hvaWNlXG4gKiBiZXR3ZWVuIHRoZW0gaXMgYSByZWFsIG9uZS4gVXNlIGEgc3VnZ2VzdGlvbiB3aGVuIHRoZSBvdGhlciBwbHVnaW4gQUREUyBzb21ldGhpbmc6IHRoZSBob3N0IGtlZXBzXG4gKiB3b3JraW5nIHdpdGhvdXQgaXQsIHNpbXBseSB1bmFibGUgdG8gb2ZmZXIgd2hhdGV2ZXIgdGhhdCBwbHVnaW4gb3ducywgYW5kIHRoaXMgY29tcG9uZW50IGFza3Mgb25jZVxuICogd2hldGhlciB0aGUgdXNlciB3b3VsZCBsaWtlIGl0IGluc3RhbGxlZC4gVXNlIGBQbHVnaW5HYXRlQ29tcG9uZW50YCB3aGVuIHRoZSBob3N0J3MgYWR2ZXJ0aXNlZFxuICogYmVoYXZpb3IgaXMgbm90IHRoZXJlIGF0IGFsbCB3aXRob3V0IHRoZSBvdGhlciBwbHVnaW4uXG4gKlxuICogVGhpcyBmaWxlIHVzZWQgdG8gYXJndWUgdGhlIHN0cm9uZ2VyIHBvc2l0aW9uIOKAlCB0aGF0IHJlcXVpcmluZyBhbm90aGVyIHBsdWdpbiBzaG91bGQgbm90IGV4aXN0LCBiZWNhdXNlXG4gKiBcImludmVudGluZyBvbmUgYnkgcmVmdXNpbmcgdG8gbG9hZCB3b3VsZCBwdW5pc2ggdGhlIHVzZXIgZm9yIHNvbWV0aGluZyB0aGV5IG5ldmVyIGFncmVlZCB0b1wiLiBUaGF0IHdhc1xuICogd3JvbmcgYWJvdXQgd2hpY2ggb3B0aW9uIHB1bmlzaGVzIHRoZSB1c2VyLCBhbmQgdGhlIGNvdW50ZXItY2FzZSBpcyB3b3J0aCBrZWVwaW5nIHJhdGhlciB0aGFuIHF1aWV0bHlcbiAqIGRlbGV0aW5nLiBBIGxvYWQtYmVhcmluZyBwbHVnaW4gdGhlIHVzZXIgY2Fubm90IGlkZW50aWZ5IGlzIG5vdCBhIG5ldXRyYWwgb3V0Y29tZTogbW9udGhzIGxhdGVyIHRoZXlcbiAqIG1lZXQgaXQgaW4gdGhlaXIgcGx1Z2luIGxpc3QsIG5vdGhpbmcgaW4gT2JzaWRpYW4ncyBtYW5pZmVzdCBmb3JtYXQgc2F5cyBhbnl0aGluZyBkZXBlbmRzIG9uIGl0LCB0aGV5XG4gKiByZW1vdmUgaXQsIGFuZCB0aGUgZGFtYWdlIHN1cmZhY2VzIHdlZWtzIGFmdGVyIHRoYXQgd2l0aCBubyB3YXkgdG8gY29ubmVjdCB0aGUgdHdvLiBCZXNpZGUgdGhhdCwgYVxuICogbWFuZGF0b3J5IGRlcGVuZGVuY3kgdGhhdCBzdGF5cyBlbmFibGVkLWJ1dC1pbmVydCwgbmFtZXMgd2hhdCBpdCBpcyB3YWl0aW5nIGZvciwgaW5zdGFsbHMgaXQgaW4gb25lXG4gKiBjbGljayBhbmQgcmVzdW1lcyB3aXRob3V0IGEgcmVzdGFydCBpcyBub3QgYSBwdW5pc2htZW50IOKAlCBpdCBpcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiwgZGVsaXZlcmVkIHdoaWxlXG4gKiB0aGUgdXNlciBjYW4gc3RpbGwgYWN0IG9uIGl0LlxuICpcbiAqIFRoZSBhc2sgaXMgc3VyZmFjZWQgdHdpY2UsIGRlbGliZXJhdGVseSwgYmVjYXVzZSB0aGUgdHdvIHBsYWNlbWVudHMgYW5zd2VyIGRpZmZlcmVudCBxdWVzdGlvbnM6XG4gKiBhIG5vdGljZSBvbiBsb2FkIChcInlvdSBhcmUgbWlzc2luZyBzb21ldGhpbmcgeW91IHByb2JhYmx5IHdhbnRcIikgYW5kIGEgc2V0dGluZ3MtdGFiIGJhbm5lciAoXCJ0aGVcbiAqIHNldHRpbmdzIHlvdSBjYW1lIGxvb2tpbmcgZm9yIGxpdmUgaW4gYW5vdGhlciBwbHVnaW5cIikuIERlY2xpbmluZyBzaWxlbmNlcyBvbmx5IHRoZSBub3RpY2Ug4oCUIGEgdXNlclxuICogd2hvIG9wZW5zIHRoZSBzZXR0aW5ncyB0YWIgaXMgYXNraW5nIGFib3V0IHRoZSBmZWF0dXJlIHJpZ2h0IHRoZW4sIHNvIHRoZSBiYW5uZXIgc3RheXMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBjb252ZXJ0QXN5bmNUb1N5bmMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk5vdGljZUNvbXBvbmVudCB9IGZyb20gJy4vcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuXG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBhcHBlbmRUZXh0T3JGcmFnbWVudENsb25lIH0gZnJvbSAnLi4vaHRtbC1lbGVtZW50LnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHtcbiAgZ2V0SW5zdGFsbGVkUGx1Z2luU3RhdGUsXG4gIGluc3RhbGxBbmRFbmFibGVQbHVnaW4sXG4gIEluc3RhbGxlZFBsdWdpblN0YXRlXG59IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4taW5zdGFsbC1zdGF0ZS50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IENhbGxiYWNrTGF5b3V0UmVhZHlDb21wb25lbnQgfSBmcm9tICcuL2xheW91dC1yZWFkeS1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIEhvdyB0aGUgc3VnZ2VzdGVkIHBsdWdpbiBpcyBjdXJyZW50bHkgcHJlc2VudCBpbiB0aGUgdmF1bHQuXG4gKlxuICogVGhlIHNhbWUgdGhyZWUgc3RhdGVzIGEgbWFuZGF0b3J5IGRlcGVuZGVuY3kgaXMgaW4sIHNvIHRoaXMgaXMge0BsaW5rIEluc3RhbGxlZFBsdWdpblN0YXRlfSB1bmRlciB0aGVcbiAqIG5hbWUgdGhpcyBjb21wb25lbnQgaGFzIGFsd2F5cyB1c2VkIOKAlCBvbmUgZW51bSwgc28gYSBjYWxsZXIgaG9sZGluZyBhIHN0YXRlIGZyb20gZWl0aGVyIGNvbXBvbmVudCBjYW5cbiAqIGNvbXBhcmUgaXQgYWdhaW5zdCBlaXRoZXIgbmFtZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFN1Z2dlc3RlZFBsdWdpblN0YXRlID0gSW5zdGFsbGVkUGx1Z2luU3RhdGU7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGRlY2xpbmVkIHRoaXMgc3VnZ2VzdGlvbi5cbiAgICpcbiAgICogU3RvcmFnZSBiZWxvbmdzIHRvIHRoZSBob3N0IHBsdWdpbiAodHlwaWNhbGx5IG9uZSBvZiBpdHMgc2V0dGluZ3MpLCBiZWNhdXNlIHRoaXMgY29tcG9uZW50IGhhcyBub1xuICAgKiBgZGF0YS5qc29uYCBvZiBpdHMgb3duIGFuZCBhIGRlY2xpbmUgaGFzIHRvIG91dGxpdmUgYSByZWxvYWQuXG4gICAqXG4gICAqIE9ubHkgZXZlciBjYWxsZWQgb25jZSB7QGxpbmsgcGx1Z2luU2V0dGluZ3NDb21wb25lbnR9IHJlcG9ydHMgaXRzIHNldHRpbmdzIGxvYWRlZCwgc28gYW4gaW1wbGVtZW50YXRpb25cbiAgICogcmVhZGluZyBhIHNldHRpbmcgaXMgZ3VhcmFudGVlZCB0byByZWFkIHRoZSBzdG9yZWQgdmFsdWUgcmF0aGVyIHRoYW4gaXRzIGRlZmF1bHQuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBzdWdnZXN0aW9uIGhhcyBiZWVuIGRlY2xpbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNTdWdnZXN0aW9uRGVjbGluZWQ6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpY2UgY29tcG9uZW50IG9mIHRoZSBwbHVnaW4gbWFraW5nIHRoZSBzdWdnZXN0aW9uLCB1c2VkIHRvIHNob3cgdGhlIHN1Z2dlc3Rpb24gYW5kIGl0c1xuICAgKiBvdXRjb21lLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBjb21wb25lbnQgaG9sZGluZyB3aGF0ZXZlciB7QGxpbmsgaXNTdWdnZXN0aW9uRGVjbGluZWR9IHJlYWRzLlxuICAgKlxuICAgKiBUYWtlbiBhcyBhIHdob2xlIGNvbXBvbmVudCByYXRoZXIgdGhhbiBhcyBhIGJhcmUgXCJyZWFkeVwiIGZsYWcgc28gdGhlIGhvc3QgY2Fubm90IGZvcmdldCB0byB3aXJlIHRoZVxuICAgKiB3YWl0OiB0aGUgbm90aWNlIGlzIGRlY2lkZWQgb25seSBhZnRlciB0aGlzIGNvbXBvbmVudCBoYXMgcmVhZCBgZGF0YS5qc29uYC4gU2VlXG4gICAqIHtAbGluayBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2Uud2hlbkxvYWRlZEZyb21GaWxlfSBmb3Igd2h5IHRoZSByZWFkIGNhbm5vdCBzaW1wbHkgaGFwcGVuIGF0XG4gICAqIGxheW91dC1yZWFkeS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQaWNrPFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+LCAnd2hlbkxvYWRlZEZyb21GaWxlJz47XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhbGl6ZWQgc2VudGVuY2UgZXhwbGFpbmluZyB3aGF0IHRoZSBob3N0IHBsdWdpbiBjYW5ub3QgZG8gd2l0aG91dCB0aGUgc3VnZ2VzdGVkIHBsdWdpbi4gVGhlXG4gICAqIGhvc3QgcGx1Z2luIG93bnMgdGhpcyBzdHJpbmc6IG9ubHkgaXQga25vd3Mgd2hpY2ggb2YgaXRzIGZlYXR1cmVzIGFyZSBhZmZlY3RlZC5cbiAgICpcbiAgICogUGFzcyBhIHtAbGluayBEb2N1bWVudEZyYWdtZW50fSB0byBtYXJrIHVwIHBhcnQgb2YgdGhlIHNlbnRlbmNlLCBzdWNoIGFzIGEgcGx1Z2luIG5hbWUgcmVuZGVyZWQgYXNcbiAgICogY29kZS4gRWFjaCByZW5kZXIgYXBwZW5kcyBhIGZyZXNoIGNsb25lIG9mIGl0LCBiZWNhdXNlIHRoZSBub3RpY2UgYW5kIHRoZSBiYW5uZXIgZWFjaCBuZWVkIHRoZWlyIG93blxuICAgKiBjb3B5IGFuZCBhcHBlbmRpbmcgYSBmcmFnbWVudCBlbXB0aWVzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWNvcmRzIHRoZSB1c2VyJ3MgYW5zd2VyIHRvIHRoZSBzdWdnZXN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gaXNEZWNsaW5lZCAtIGB0cnVlYCB3aGVuIHRoZSB1c2VyIGRlY2xpbmVkLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGFuc3dlciBpcyBwZXJzaXN0ZWQuXG4gICAqL1xuICByZWFkb25seSBzZXRTdWdnZXN0aW9uRGVjbGluZWQ6IChpc0RlY2xpbmVkOiBib29sZWFuKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIHN1Z2dlc3RlZCBwbHVnaW4sIGFzIGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkuXG4gICAqL1xuICByZWFkb25seSBzdWdnZXN0ZWRQbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzdWdnZXN0ZWQgcGx1Z2luLCBzaG93biB0byB0aGUgdXNlci5cbiAgICovXG4gIHJlYWRvbmx5IHN1Z2dlc3RlZFBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBIb3cgdGhlIHN1Z2dlc3RlZCBwbHVnaW4gaXMgY3VycmVudGx5IHByZXNlbnQgaW4gdGhlIHZhdWx0LlxuICovXG5leHBvcnQgdHlwZSBTdWdnZXN0ZWRQbHVnaW5TdGF0ZSA9IEluc3RhbGxlZFBsdWdpblN0YXRlO1xuXG4vKipcbiAqIFN1Z2dlc3RzIGluc3RhbGxpbmcgYW5vdGhlciBjb21tdW5pdHkgcGx1Z2luLCB2aWEgYSBsb2FkLXRpbWUgbm90aWNlIGFuZCBhIHNldHRpbmdzLXRhYiBiYW5uZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcDogQXBwO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzU3VnZ2VzdGlvbkRlY2xpbmVkOiAoKSA9PiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbk5vdGljZUNvbXBvbmVudDogUGx1Z2luTm90aWNlQ29tcG9uZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQaWNrPFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+LCAnd2hlbkxvYWRlZEZyb21GaWxlJz47XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVhc29uOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNldFN1Z2dlc3Rpb25EZWNsaW5lZDogKGlzRGVjbGluZWQ6IGJvb2xlYW4pID0+IFByb21pc2FibGU8dm9pZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgc3VnZ2VzdGVkUGx1Z2luSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzdWdnZXN0ZWRQbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFBsdWdpblN1Z2dlc3Rpb25Db21wb25lbnR9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG4gICAgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudDtcbiAgICB0aGlzLnJlYXNvbiA9IHBhcmFtcy5yZWFzb247XG4gICAgdGhpcy5zdWdnZXN0ZWRQbHVnaW5JZCA9IHBhcmFtcy5zdWdnZXN0ZWRQbHVnaW5JZDtcbiAgICB0aGlzLnN1Z2dlc3RlZFBsdWdpbk5hbWUgPSBwYXJhbXMuc3VnZ2VzdGVkUGx1Z2luTmFtZTtcbiAgICB0aGlzLmlzU3VnZ2VzdGlvbkRlY2xpbmVkID0gcGFyYW1zLmlzU3VnZ2VzdGlvbkRlY2xpbmVkO1xuICAgIHRoaXMuc2V0U3VnZ2VzdGlvbkRlY2xpbmVkID0gcGFyYW1zLnNldFN1Z2dlc3Rpb25EZWNsaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBob3cgdGhlIHN1Z2dlc3RlZCBwbHVnaW4gaXMgY3VycmVudGx5IHByZXNlbnQgaW4gdGhlIHZhdWx0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUge0BsaW5rIFN1Z2dlc3RlZFBsdWdpblN0YXRlfS5cbiAgICovXG4gIHB1YmxpYyBnZXRTdWdnZXN0ZWRQbHVnaW5TdGF0ZSgpOiBTdWdnZXN0ZWRQbHVnaW5TdGF0ZSB7XG4gICAgcmV0dXJuIGdldEluc3RhbGxlZFBsdWdpblN0YXRlKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBwbHVnaW5JZDogdGhpcy5zdWdnZXN0ZWRQbHVnaW5JZFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbGxzICh3aGVuIG5lZWRlZCkgYW5kIGVuYWJsZXMgdGhlIHN1Z2dlc3RlZCBwbHVnaW4sIHJlcG9ydGluZyB0aGUgb3V0Y29tZSBhcyBhIG5vdGljZS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCwgb3Igb25jZSB0aGUgZmFpbHVyZSBoYXMgYmVlblxuICAgKiByZXBvcnRlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpbnN0YWxsQW5kRW5hYmxlU3VnZ2VzdGVkUGx1Z2luKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmdldFN1Z2dlc3RlZFBsdWdpblN0YXRlKCkgPT09IFN1Z2dlc3RlZFBsdWdpblN0YXRlLkVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCBpbnN0YWxsQW5kRW5hYmxlUGx1Z2luKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBwbHVnaW5JZDogdGhpcy5zdWdnZXN0ZWRQbHVnaW5JZCxcbiAgICAgIHBsdWdpbk5hbWU6IHRoaXMuc3VnZ2VzdGVkUGx1Z2luTmFtZSxcbiAgICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudDogdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnRcbiAgICB9KTtcblxuICAgIC8vIE9ubHkgYWZ0ZXIgdGhlIGluc3RhbGwgYWN0dWFsbHkgc3VjY2VlZGVkIOKAlCBgaW5zdGFsbEFuZEVuYWJsZVBsdWdpbmAgcmV0aHJvd3Mgb24gZmFpbHVyZSwgc28gYVxuICAgIC8vIGZhaWxlZCBhdHRlbXB0IGxlYXZlcyBhIHByZXZpb3VzIGRlY2xpbmUgc3RhbmRpbmcgcmF0aGVyIHRoYW4gc2lsZW50bHkgY2xlYXJpbmcgaXQuXG4gICAgYXdhaXQgdGhpcy5zZXRTdWdnZXN0aW9uRGVjbGluZWQoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQsIHNob3dpbmcgdGhlIHN1Z2dlc3Rpb24gbm90aWNlIG9uY2UgdGhlIGxheW91dCBpcyByZWFkeSBBTkQgdGhlIGhvc3QncyBzZXR0aW5nc1xuICAgKiBoYXZlIGJlZW4gcmVhZCBmcm9tIGRpc2suXG4gICAqXG4gICAqIEJvdGggd2FpdHMgbWF0dGVyLCBhbmQgbmVpdGhlciBpbXBsaWVzIHRoZSBvdGhlcjpcbiAgICpcbiAgICogLSBMYXlvdXQtcmVhZHksIGJlY2F1c2UgcGx1Z2lucyBsb2FkIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLCBzbyB0aGUgc3VnZ2VzdGVkIHBsdWdpbiBtYXkgd2VsbCBiZVxuICAgKiAgIGVuYWJsZWQgYSBtb21lbnQgYWZ0ZXIgdGhpcyBvbmUuIENoZWNraW5nIGVhcmxpZXIgd291bGQgc3VnZ2VzdCBpbnN0YWxsaW5nIHNvbWV0aGluZyB0aGUgdXNlclxuICAgKiAgIGFscmVhZHkgaGFzLlxuICAgKiAtIFNldHRpbmdzLWxvYWRlZCwgYmVjYXVzZSB7QGxpbmsgUGx1Z2luU3VnZ2VzdGlvbkNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zLmlzU3VnZ2VzdGlvbkRlY2xpbmVkfVxuICAgKiAgIHJlYWRzIGEgc2V0dGluZyBvZiB0aGUgaG9zdCwgYW5kIHRoZSBob3N0J3Mgc2V0dGluZ3MgY29tcG9uZW50IGlzIGEgU0lCTElORyB3aG9zZSBvd24gYXN5bmMgbG9hZCBpc1xuICAgKiAgIHN0aWxsIGluIGZsaWdodCBoZXJlLiBPbiBhIGxheW91dCB0aGF0IGlzIGFscmVhZHkgcmVhZHkg4oCUIGEgcnVudGltZSBlbmFibGUgZnJvbSB0aGUgQ29tbXVuaXR5XG4gICAqICAgUGx1Z2lucyB0YWIsIG9yIGEgcmUtZW5hYmxlIGFmdGVyIGFuIHVwZGF0ZSDigJQgdGhlIGxheW91dC1yZWFkeSBjYWxsYmFjayBmaXJlcyBpbW1lZGlhdGVseSwgc28gdGhlXG4gICAqICAgcmVhZCB3b3VsZCBzZWUgdGhlIGRlZmF1bHQgYGZhbHNlYCBhbmQgYXNrIGFnYWluIGEgdXNlciB3aG8gaGFzIGFscmVhZHkgZGVjbGluZWQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuYWRkQ2hpbGQoXG4gICAgICBuZXcgQ2FsbGJhY2tMYXlvdXRSZWFkeUNvbXBvbmVudCh0aGlzLmFwcCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50LndoZW5Mb2FkZWRGcm9tRmlsZSgpO1xuICAgICAgICBpZiAodGhpcy5pc1VubG9hZGVkKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dTdWdnZXN0aW9uTm90aWNlKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgc3VnZ2VzdGlvbiBiYW5uZXIgaW50byBhIHNldHRpbmdzLXRhYiBjb250YWluZXIsIHdpdGggYSBidXR0b24gdGhhdCBpbnN0YWxscyBhbmQgZW5hYmxlc1xuICAgKiB0aGUgc3VnZ2VzdGVkIHBsdWdpbi5cbiAgICpcbiAgICogUmVuZGVycyBub3RoaW5nIHdoZW4gdGhlIHN1Z2dlc3RlZCBwbHVnaW4gaXMgYWxyZWFkeSBlbmFibGVkLiBVbmxpa2UgdGhlIG5vdGljZSwgdGhlIGJhbm5lciBpZ25vcmVzIGFcbiAgICogcHJldmlvdXMgZGVjbGluZSDigJQgdGhlIHVzZXIgaXMgbG9va2luZyBhdCB0aGVzZSBzZXR0aW5ncyByaWdodCBub3csIHdoaWNoIGlzIGEgZnJlc2hlciBzaWduYWwgdGhhbiBhblxuICAgKiBhbnN3ZXIgdGhleSBnYXZlIGVhcmxpZXIuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBlbGVtZW50IHRvIHJlbmRlciB0aGUgYmFubmVyIGludG8uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyQmFubmVyKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdWdnZXN0ZWRQbHVnaW5TdGF0ZSgpO1xuICAgIGlmIChzdGF0ZSA9PT0gU3VnZ2VzdGVkUGx1Z2luU3RhdGUuRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhbm5lckVsID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KHtcbiAgICAgIGNsczogW0Nzc0NsYXNzLkxpYnJhcnlOYW1lLCBDc3NDbGFzcy5QbHVnaW5TdWdnZXN0aW9uQmFubmVyXVxuICAgIH0pO1xuICAgIGFwcGVuZFRleHRPckZyYWdtZW50Q2xvbmUoYmFubmVyRWwuY3JlYXRlRGl2KCksIHRoaXMucmVhc29uKTtcblxuICAgIG5ldyBCdXR0b25Db21wb25lbnQoYmFubmVyRWwpXG4gICAgICAuc2V0QnV0dG9uVGV4dCh0aGlzLmdldEFjdGlvbkJ1dHRvblRleHQoc3RhdGUpKVxuICAgICAgLnNldEN0YSgpXG4gICAgICAub25DbGljayhjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluc3RhbGxBbmRFbmFibGVTdWdnZXN0ZWRQbHVnaW4oKTtcbiAgICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aW9uQnV0dG9uVGV4dChzdGF0ZTogU3VnZ2VzdGVkUGx1Z2luU3RhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiB0KCgkKSA9PlxuICAgICAgc3RhdGUgPT09IFN1Z2dlc3RlZFBsdWdpblN0YXRlLkluc3RhbGxlZEJ1dERpc2FibGVkXG4gICAgICAgID8gJC5vYnNpZGlhbkxpYi5wbHVnaW5TdWdnZXN0aW9uLmVuYWJsZVxuICAgICAgICA6ICQub2JzaWRpYW5MaWIucGx1Z2luU3VnZ2VzdGlvbi5pbnN0YWxsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1N1Z2dlc3Rpb25Ob3RpY2UoKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN1Z2dlc3RlZFBsdWdpblN0YXRlKCk7XG4gICAgaWYgKHN0YXRlID09PSBTdWdnZXN0ZWRQbHVnaW5TdGF0ZS5FbmFibGVkIHx8IHRoaXMuaXNTdWdnZXN0aW9uRGVjbGluZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnQoKGZyYWdtZW50RWwpID0+IHtcbiAgICAgIGFwcGVuZFRleHRPckZyYWdtZW50Q2xvbmUoZnJhZ21lbnRFbC5jcmVhdGVEaXYoKSwgdGhpcy5yZWFzb24pO1xuICAgICAgY29uc3QgYnV0dG9uc0VsID0gZnJhZ21lbnRFbC5jcmVhdGVEaXYoe1xuICAgICAgICBjbHM6IFtDc3NDbGFzcy5MaWJyYXJ5TmFtZSwgQ3NzQ2xhc3MuUGx1Z2luU3VnZ2VzdGlvbk5vdGljZUJ1dHRvbnNdXG4gICAgICB9KTtcblxuICAgICAgbmV3IEJ1dHRvbkNvbXBvbmVudChidXR0b25zRWwpXG4gICAgICAgIC5zZXRCdXR0b25UZXh0KHRoaXMuZ2V0QWN0aW9uQnV0dG9uVGV4dChzdGF0ZSkpXG4gICAgICAgIC5zZXRDdGEoKVxuICAgICAgICAub25DbGljayhjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbEFuZEVuYWJsZVN1Z2dlc3RlZFBsdWdpbigpO1xuICAgICAgICB9KSk7XG5cbiAgICAgIG5ldyBCdXR0b25Db21wb25lbnQoYnV0dG9uc0VsKVxuICAgICAgICAuc2V0QnV0dG9uVGV4dCh0KCgkKSA9PiAkLm9ic2lkaWFuTGliLnBsdWdpblN1Z2dlc3Rpb24ubm90Tm93KSlcbiAgICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNldFN1Z2dlc3Rpb25EZWNsaW5lZCh0cnVlKTtcbiAgICAgICAgfSkpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZShmcmFnbWVudCwgeyBzaG91bGRIaWRlT25DbGljazogZmFsc2UgfSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBK0JBLG1CQUFtQztBQUNuQyxzQkFBZ0M7QUFLaEMsdUJBQXlCO0FBQ3pCLDBCQUEwQztBQUMxQyxrQkFBa0I7QUFDbEIsa0NBSU87QUFDUCwwQkFBNEI7QUFDNUIsb0NBQTZDO0FBU3RDLE1BQU0sdUJBQXVCO0FBNkU3QixNQUFNLGtDQUFrQyxnQ0FBWTtBQUFBLEVBQ3hDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9WLFlBQVksUUFBb0Q7QUFDckUsVUFBTTtBQUNOLFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssd0JBQXdCLE9BQU87QUFDcEMsU0FBSywwQkFBMEIsT0FBTztBQUN0QyxT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
|
|
@@ -197,7 +197,7 @@ class ReleaseNotesComponent extends import_component_ex.ComponentEx {
|
|
|
197
197
|
await (0, import_alert.alert)({
|
|
198
198
|
app: this.app,
|
|
199
199
|
message,
|
|
200
|
-
title: (0, import_html_element.createFragmentWithCodeBlocks)((0, import_i18n.t)(($) => $.
|
|
200
|
+
title: (0, import_html_element.createFragmentWithCodeBlocks)((0, import_i18n.t)(($) => $.obsidianLib.releaseNotes.title, { pluginName: (0, import_html_element.asCodeBlock)(this.pluginName) }))
|
|
201
201
|
});
|
|
202
202
|
}
|
|
203
203
|
}
|
|
@@ -205,4 +205,4 @@ class ReleaseNotesComponent extends import_component_ex.ComponentEx {
|
|
|
205
205
|
0 && (module.exports = {
|
|
206
206
|
ReleaseNotesComponent
|
|
207
207
|
});
|
|
208
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3JlbGVhc2Utbm90ZXMtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCBzaG93cyBhIHBsdWdpbidzIHJlbGVhc2Ugbm90ZXMgb25jZSwgd2hlbiB0aGUgd29ya3NwYWNlIGxheW91dCBpcyByZWFkeS5cbiAqXG4gKiBTZXZlcmFsIHBsdWdpbnMgaGFuZC1yb2xsZWQgdGhpcyBwb3B1cCwgYW5kIGV2ZXJ5IGNvcHkgaGFkIHRoZSBzYW1lIGRlZmVjdDogaXQgd2FzIHRpdGxlZCBvbmx5XG4gKiBgUmVsZWFzZSBub3Rlc2AsIG92ZXIgaGVhZGluZ3MgdGhhdCBhcmUgYmFyZSB2ZXJzaW9uIG51bWJlcnMsIHNvIG5vdGhpbmcgaW4gaXQgbmFtZWQgdGhlIHBsdWdpbi4gQSB1c2VyXG4gKiB3aXRoIGRvemVucyBvZiBwbHVnaW5zIGluc3RhbGxlZCBjb3VsZCBub3QgdGVsbCB3aG9zZSBwb3B1cCBpdCB3YXMuIFRoaXMgY29tcG9uZW50IGFsd2F5cyBuYW1lcyB0aGVcbiAqIHBsdWdpbiBpbiB0aGUgdGl0bGUuXG4gKlxuICogSXQgYWxzbyBvd25zIHRoZSB3YWl0IGV2ZXJ5IGNvcHkgbmVlZGVkLiBUaGUgbm90ZXMgYWxyZWFkeSBzaG93biBhcmUgc3RvcmVkIGluIHRoZSBob3N0J3Mgc2V0dGluZ3MsIGFuZFxuICogdGhlIGhvc3QncyBzZXR0aW5ncyBjb21wb25lbnQgaXMgYSBTSUJMSU5HIHdob3NlIG93biBhc3luYyBsb2FkIGlzIHN0aWxsIGluIGZsaWdodCB3aGVuIHRoZSBwbHVnaW4gaXNcbiAqIGVuYWJsZWQgYWZ0ZXIgdGhlIGxheW91dCBpcyByZWFkeS4gUmVhZGluZyB0aGUgbGlzdCB0aGVuIHNlZXMgdGhlIGRlZmF1bHQgZW1wdHkgb25lIGFuZCBzaG93cyBldmVyeSBub3RlXG4gKiBhZ2Fpbiwgb24gZXZlcnkgc3RhcnQuIFNlZSB7QGxpbmsgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlLndoZW5Mb2FkZWRGcm9tRmlsZX0uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBjb21wYXJlVmVyc2lvbnMgfSBmcm9tICdjb21wYXJlLXZlcnNpb25zJztcblxuaW1wb3J0IHR5cGUgeyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuXG5pbXBvcnQge1xuICBhc0NvZGVCbG9jayxcbiAgY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrc1xufSBmcm9tICcuLi9odG1sLWVsZW1lbnQudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyBhbGVydCB9IGZyb20gJy4uL21vZGFscy9hbGVydC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IENhbGxiYWNrTGF5b3V0UmVhZHlDb21wb25lbnQgfSBmcm9tICcuL2xheW91dC1yZWFkeS1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIFJlbGVhc2Ugbm90ZXMsIGtleWVkIGJ5IHRoZSBzZW1hbnRpYyB2ZXJzaW9uIHRoYXQgaW50cm9kdWNlZCBlYWNoIG9uZS5cbiAqL1xuZXhwb3J0IHR5cGUgUmVsZWFzZU5vdGVzID0gUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgRG9jdW1lbnRGcmFnbWVudD4+O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgUmVsZWFzZU5vdGVzQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWxlYXNlTm90ZXNDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZlcnNpb25zIHdob3NlIG5vdGVzIHRoZSB1c2VyIGhhcyBhbHJlYWR5IHNlZW4uXG4gICAqXG4gICAqIFN0b3JhZ2UgYmVsb25ncyB0byB0aGUgaG9zdCBwbHVnaW4sIHR5cGljYWxseSBhcyBvbmUgb2YgaXRzIHNldHRpbmdzLCBiZWNhdXNlIHRoaXMgY29tcG9uZW50IGhhcyBub1xuICAgKiBgZGF0YS5qc29uYCBvZiBpdHMgb3duIGFuZCB0aGUgbGlzdCBoYXMgdG8gb3V0bGl2ZSBhIHJlbG9hZC5cbiAgICpcbiAgICogT25seSBldmVyIGNhbGxlZCBvbmNlIHtAbGluayBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudH0gcmVwb3J0cyBpdHMgc2V0dGluZ3MgbG9hZGVkLCBzbyBhbiBpbXBsZW1lbnRhdGlvblxuICAgKiB0aGF0IHJlYWRzIGEgc2V0dGluZyByZWFkcyB0aGUgc3RvcmVkIHZhbHVlIHJhdGhlciB0aGFuIGl0cyBkZWZhdWx0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdmVyc2lvbnMgYWxyZWFkeSBzaG93bi5cbiAgICovXG4gIHJlYWRvbmx5IGdldFNob3duUmVsZWFzZU5vdGVWZXJzaW9uczogKCkgPT4gcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHBsdWdpbiwgc2hvd24gaW4gdGhlIHBvcHVwIHRpdGxlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZ3MgY29tcG9uZW50IGhvbGRpbmcgd2hhdGV2ZXIge0BsaW5rIGdldFNob3duUmVsZWFzZU5vdGVWZXJzaW9uc30gcmVhZHMuXG4gICAqXG4gICAqIFRha2VuIGFzIGEgd2hvbGUgY29tcG9uZW50IHJhdGhlciB0aGFuIGFzIGEgYmFyZSBcInJlYWR5XCIgZmxhZywgc28gdGhlIGhvc3QgY2Fubm90IGZvcmdldCB0byB3aXJlIHRoZVxuICAgKiB3YWl0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQ6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+O1xuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIHJlbGVhc2Ugbm90ZXMuXG4gICAqXG4gICAqIENhbGxlZCBhdCBsYXlvdXQgcmVhZHkgcmF0aGVyIHRoYW4gYXQgY29uc3RydWN0aW9uLCBzbyB0aGUgZnJhZ21lbnRzIGFyZSBidWlsdCBvbmx5IHdoZW4gdGhleSBtYXkgYmVcbiAgICogc2hvd24sIGFuZCBhIGxvY2FsaXplZCBzdHJpbmcgaXMgcmVhZCBhZnRlciB0aGUgaG9zdCdzIHRyYW5zbGF0aW9ucyBhcmUgc2V0IHVwLlxuICAgKlxuICAgKiBFdmVyeSBrZXkgbXVzdCBiZSBhIHZhbGlkIHNlbWFudGljIHZlcnNpb24uIFRoZSBub3RlcyBhcmUgc2hvd24gaW4gYXNjZW5kaW5nIHZlcnNpb24gb3JkZXIsIHdoYXRldmVyXG4gICAqIG9yZGVyIHRoZSBrZXlzIHdlcmUgd3JpdHRlbiBpbi5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlbGVhc2Ugbm90ZXMuXG4gICAqL1xuICByZWFkb25seSByZWxlYXNlTm90ZXNQcm92aWRlcjogKCkgPT4gUmVsZWFzZU5vdGVzO1xuXG4gIC8qKlxuICAgKiBSZWNvcmRzIHRoZSB2ZXJzaW9ucyB3aG9zZSBub3RlcyB0aGUgdXNlciBoYXMgbm93IHNlZW4uXG4gICAqXG4gICAqIENhbGxlZCBiZWZvcmUgdGhlIHBvcHVwIGlzIHNob3duLCB3aXRoIHRoZSBmdWxsIGxpc3Q6IHRoZSB2ZXJzaW9ucyBhbHJlYWR5IHNob3duIGZvbGxvd2VkIGJ5IHRoZSBvbmVzXG4gICAqIGFib3V0IHRvIGJlLlxuICAgKlxuICAgKiBAcGFyYW0gdmVyc2lvbnMgLSBUaGUgdmVyc2lvbnMgc2hvd24uXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgbGlzdCBpcyBwZXJzaXN0ZWQuXG4gICAqL1xuICByZWFkb25seSBzZXRTaG93blJlbGVhc2VOb3RlVmVyc2lvbnM6ICh2ZXJzaW9uczogcmVhZG9ubHkgc3RyaW5nW10pID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIERlY2lkZXMgd2hldGhlciB0aGUgcmVsZWFzZSBub3RlcyBtYXkgYmUgc2hvd24gbm93LlxuICAgKlxuICAgKiBXaGVuIGl0IHJldHVybnMgYGZhbHNlYCwgbm90aGluZyBpcyBzaG93biBhbmQgbm90aGluZyBpcyByZWNvcmRlZCwgc28gdGhlIG5vdGVzIGFyZSBzaG93biBhdCBhIGxhdGVyXG4gICAqIHN0YXJ0IG9uY2UgaXQgcmV0dXJucyBgdHJ1ZWAuIFVzZSBpdCB3aGVuIHRoZSBub3RlcyBvbmx5IG1ha2Ugc2Vuc2Ugd2hpbGUgc29tZSBmZWF0dXJlIGlzIG9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgbm90ZXMgbWF5IGJlIHNob3duLlxuICAgKiBAZGVmYXVsdCBBbHdheXMgYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd1JlbGVhc2VOb3Rlcz86ICgpID0+IFByb21pc2FibGU8Ym9vbGVhbj47XG59XG5cbi8qKlxuICogU2hvd3MgYSBwbHVnaW4ncyByZWxlYXNlIG5vdGVzIHRoYXQgdGhlIHVzZXIgaGFzIG5vdCBzZWVuIHlldCwgb25jZSB0aGUgd29ya3NwYWNlIGxheW91dCBpcyByZWFkeS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlbGVhc2VOb3Rlc0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHBsdWdpbiwgc2hvd24gaW4gdGhlIHBvcHVwIHRpdGxlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIGNvbXBvbmVudCB3aG9zZSBsb2FkIGlzIGF3YWl0ZWQgYmVmb3JlIHRoZSBzaG93biB2ZXJzaW9ucyBhcmUgcmVhZC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudDogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBnZXRTaG93blJlbGVhc2VOb3RlVmVyc2lvbnM6ICgpID0+IHJlYWRvbmx5IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbGVhc2VOb3Rlc1Byb3ZpZGVyOiAoKSA9PiBSZWxlYXNlTm90ZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2V0U2hvd25SZWxlYXNlTm90ZVZlcnNpb25zOiAodmVyc2lvbnM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IHNob3VsZFNob3dSZWxlYXNlTm90ZXM6ICgpID0+IFByb21pc2FibGU8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFJlbGVhc2VOb3Rlc0NvbXBvbmVudH0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFJlbGVhc2VOb3Rlc0NvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5nZXRTaG93blJlbGVhc2VOb3RlVmVyc2lvbnMgPSBwYXJhbXMuZ2V0U2hvd25SZWxlYXNlTm90ZVZlcnNpb25zO1xuICAgIHRoaXMucGx1Z2luTmFtZSA9IHBhcmFtcy5wbHVnaW5OYW1lO1xuICAgIHRoaXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQgPSBwYXJhbXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQ7XG4gICAgdGhpcy5yZWxlYXNlTm90ZXNQcm92aWRlciA9IHBhcmFtcy5yZWxlYXNlTm90ZXNQcm92aWRlcjtcbiAgICB0aGlzLnNldFNob3duUmVsZWFzZU5vdGVWZXJzaW9ucyA9IHBhcmFtcy5zZXRTaG93blJlbGVhc2VOb3RlVmVyc2lvbnM7XG4gICAgdGhpcy5zaG91bGRTaG93UmVsZWFzZU5vdGVzID0gcGFyYW1zLnNob3VsZFNob3dSZWxlYXNlTm90ZXMgPz8gKCgpOiBib29sZWFuID0+IHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQsIHNob3dpbmcgdGhlIHVuc2VlbiByZWxlYXNlIG5vdGVzIG9uY2UgdGhlIGxheW91dCBpcyByZWFkeSBBTkQgdGhlIGhvc3QncyBzZXR0aW5nc1xuICAgKiBoYXZlIGJlZW4gcmVhZCBmcm9tIGRpc2suXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuYWRkQ2hpbGQoXG4gICAgICBuZXcgQ2FsbGJhY2tMYXlvdXRSZWFkeUNvbXBvbmVudCh0aGlzLmFwcCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50LndoZW5Mb2FkZWRGcm9tRmlsZSgpO1xuICAgICAgICBpZiAodGhpcy5pc1VubG9hZGVkKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLnNob3dVbnNlZW5SZWxlYXNlTm90ZXMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyB0aGUgcmVsZWFzZSBub3RlcyB0aGUgdXNlciBoYXMgbm90IHNlZW4geWV0LCBhbmQgcmVjb3JkcyB0aGVtIGFzIHNlZW4uXG4gICAqXG4gICAqIERvZXMgbm90aGluZyB3aGVuIHtAbGluayBSZWxlYXNlTm90ZXNDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcy5zaG91bGRTaG93UmVsZWFzZU5vdGVzfSBkZWNsaW5lcywgb3Igd2hlblxuICAgKiBldmVyeSBub3RlIGhhcyBiZWVuIHNob3duIGFscmVhZHkuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcG9wdXAgaXMgY2xvc2VkLCBvciBhdCBvbmNlIHdoZW4gbm90aGluZyBpcyBzaG93bi5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBzaG93VW5zZWVuUmVsZWFzZU5vdGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghYXdhaXQgdGhpcy5zaG91bGRTaG93UmVsZWFzZU5vdGVzKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzaG93blZlcnNpb25zID0gdGhpcy5nZXRTaG93blJlbGVhc2VOb3RlVmVyc2lvbnMoKTtcbiAgICBjb25zdCBzaG93blZlcnNpb25TZXQgPSBuZXcgU2V0KHNob3duVmVyc2lvbnMpO1xuICAgIGNvbnN0IHVuc2VlblJlbGVhc2VOb3RlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMucmVsZWFzZU5vdGVzUHJvdmlkZXIoKSlcbiAgICAgIC5maWx0ZXIoKFt2ZXJzaW9uXSkgPT4gIXNob3duVmVyc2lvblNldC5oYXModmVyc2lvbikpXG4gICAgICAuc29ydCgoW3ZlcnNpb24xXSwgW3ZlcnNpb24yXSkgPT4gY29tcGFyZVZlcnNpb25zKHZlcnNpb24xLCB2ZXJzaW9uMikpO1xuXG4gICAgaWYgKHVuc2VlblJlbGVhc2VOb3Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlRnJhZ21lbnQoKTtcbiAgICBmb3IgKGNvbnN0IFt2ZXJzaW9uLCByZWxlYXNlTm90ZV0gb2YgdW5zZWVuUmVsZWFzZU5vdGVzKSB7XG4gICAgICBtZXNzYWdlLmNyZWF0ZUVsKCdoMycsIHsgdGV4dDogdmVyc2lvbiB9KTtcbiAgICAgIG1lc3NhZ2UuYXBwZW5kKHJlbGVhc2VOb3RlKTtcbiAgICB9XG5cbiAgICAvLyBSZWNvcmRlZCBiZWZvcmUgdGhlIHBvcHVwIGlzIHNob3duLCBzbyBhIHVzZXIgd2hvIHJlbG9hZHMgd2l0aG91dCBjbG9zaW5nIGl0IGlzIG5vdCBzaG93biBpdCBhZ2Fpbi5cbiAgICBhd2FpdCB0aGlzLnNldFNob3duUmVsZWFzZU5vdGVWZXJzaW9ucyhbLi4uc2hvd25WZXJzaW9ucywgLi4udW5zZWVuUmVsZWFzZU5vdGVzLm1hcCgoW3ZlcnNpb25dKSA9PiB2ZXJzaW9uKV0pO1xuXG4gICAgYXdhaXQgYWxlcnQoe1xuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICB0aXRsZTogY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrcyh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucmVsZWFzZU5vdGVzLnRpdGxlLCB7IHBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHRoaXMucGx1Z2luTmFtZSkgfSkpXG4gICAgfSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSw4QkFBZ0M7QUFJaEMsMEJBR087QUFDUCxrQkFBa0I7QUFDbEIsbUJBQXNCO0FBQ3RCLDBCQUE0QjtBQUM1QixvQ0FBNkM7QUFpRnRDLE1BQU0sOEJBQThCLGdDQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJbEM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBLEVBRUY7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPVixZQUFZLFFBQWdEO0FBQ2pFLFVBQU07QUFDTixTQUFLLE1BQU0sT0FBTztBQUNsQixTQUFLLDhCQUE4QixPQUFPO0FBQzFDLFNBQUssYUFBYSxPQUFPO0FBQ3pCLFNBQUssMEJBQTBCLE9BQU87QUFDdEMsU0FBSyx1QkFBdUIsT0FBTztBQUNuQyxTQUFLLDhCQUE4QixPQUFPO0FBQzFDLFNBQUsseUJBQXlCLE9BQU8sMkJBQTJCLE1BQWU7QUFBQSxFQUNqRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNZ0IsU0FBZTtBQUM3QixTQUFLO0FBQUEsTUFDSCxJQUFJLDJEQUE2QixLQUFLLEtBQUssWUFBWTtBQUNyRCxjQUFNLEtBQUssd0JBQXdCLG1CQUFtQjtBQUN0RCxZQUFJLEtBQUssV0FBVyxHQUFHO0FBQ3JCO0FBQUEsUUFDRjtBQUVBLGNBQU0sS0FBSyx1QkFBdUI7QUFBQSxNQUNwQyxDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVQSxNQUFnQix5QkFBd0M7QUFDdEQsUUFBSSxDQUFDLE1BQU0sS0FBSyx1QkFBdUIsR0FBRztBQUN4QztBQUFBLElBQ0Y7QUFFQSxVQUFNLGdCQUFnQixLQUFLLDRCQUE0QjtBQUN2RCxVQUFNLGtCQUFrQixJQUFJLElBQUksYUFBYTtBQUM3QyxVQUFNLHFCQUFxQixPQUFPLFFBQVEsS0FBSyxxQkFBcUIsQ0FBQyxFQUNsRSxPQUFPLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsRUFDbkQsS0FBSyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsUUFBUSxVQUFNLHlDQUFnQixVQUFVLFFBQVEsQ0FBQztBQUV2RSxRQUFJLG1CQUFtQixXQUFXLEdBQUc7QUFDbkM7QUFBQSxJQUNGO0FBRUEsVUFBTSxVQUFVLGVBQWU7QUFDL0IsZUFBVyxDQUFDLFNBQVMsV0FBVyxLQUFLLG9CQUFvQjtBQUN2RCxjQUFRLFNBQVMsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3hDLGNBQVEsT0FBTyxXQUFXO0FBQUEsSUFDNUI7QUFHQSxVQUFNLEtBQUssNEJBQTRCLENBQUMsR0FBRyxlQUFlLEdBQUcsbUJBQW1CLElBQUksQ0FBQyxDQUFDLE9BQU8sTUFBTSxPQUFPLENBQUMsQ0FBQztBQUU1RyxjQUFNLG9CQUFNO0FBQUEsTUFDVixLQUFLLEtBQUs7QUFBQSxNQUNWO0FBQUEsTUFDQSxXQUFPLHNEQUE2QixlQUFFLENBQUMsTUFBTSxFQUFFLGlCQUFpQixhQUFhLE9BQU8sRUFBRSxnQkFBWSxpQ0FBWSxLQUFLLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFBQSxJQUNuSSxDQUFDO0FBQUEsRUFDSDtBQUNGOyIsIm5hbWVzIjpbXX0=
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3JlbGVhc2Utbm90ZXMtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCBzaG93cyBhIHBsdWdpbidzIHJlbGVhc2Ugbm90ZXMgb25jZSwgd2hlbiB0aGUgd29ya3NwYWNlIGxheW91dCBpcyByZWFkeS5cbiAqXG4gKiBTZXZlcmFsIHBsdWdpbnMgaGFuZC1yb2xsZWQgdGhpcyBwb3B1cCwgYW5kIGV2ZXJ5IGNvcHkgaGFkIHRoZSBzYW1lIGRlZmVjdDogaXQgd2FzIHRpdGxlZCBvbmx5XG4gKiBgUmVsZWFzZSBub3Rlc2AsIG92ZXIgaGVhZGluZ3MgdGhhdCBhcmUgYmFyZSB2ZXJzaW9uIG51bWJlcnMsIHNvIG5vdGhpbmcgaW4gaXQgbmFtZWQgdGhlIHBsdWdpbi4gQSB1c2VyXG4gKiB3aXRoIGRvemVucyBvZiBwbHVnaW5zIGluc3RhbGxlZCBjb3VsZCBub3QgdGVsbCB3aG9zZSBwb3B1cCBpdCB3YXMuIFRoaXMgY29tcG9uZW50IGFsd2F5cyBuYW1lcyB0aGVcbiAqIHBsdWdpbiBpbiB0aGUgdGl0bGUuXG4gKlxuICogSXQgYWxzbyBvd25zIHRoZSB3YWl0IGV2ZXJ5IGNvcHkgbmVlZGVkLiBUaGUgbm90ZXMgYWxyZWFkeSBzaG93biBhcmUgc3RvcmVkIGluIHRoZSBob3N0J3Mgc2V0dGluZ3MsIGFuZFxuICogdGhlIGhvc3QncyBzZXR0aW5ncyBjb21wb25lbnQgaXMgYSBTSUJMSU5HIHdob3NlIG93biBhc3luYyBsb2FkIGlzIHN0aWxsIGluIGZsaWdodCB3aGVuIHRoZSBwbHVnaW4gaXNcbiAqIGVuYWJsZWQgYWZ0ZXIgdGhlIGxheW91dCBpcyByZWFkeS4gUmVhZGluZyB0aGUgbGlzdCB0aGVuIHNlZXMgdGhlIGRlZmF1bHQgZW1wdHkgb25lIGFuZCBzaG93cyBldmVyeSBub3RlXG4gKiBhZ2Fpbiwgb24gZXZlcnkgc3RhcnQuIFNlZSB7QGxpbmsgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlLndoZW5Mb2FkZWRGcm9tRmlsZX0uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBjb21wYXJlVmVyc2lvbnMgfSBmcm9tICdjb21wYXJlLXZlcnNpb25zJztcblxuaW1wb3J0IHR5cGUgeyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuXG5pbXBvcnQge1xuICBhc0NvZGVCbG9jayxcbiAgY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrc1xufSBmcm9tICcuLi9odG1sLWVsZW1lbnQudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyBhbGVydCB9IGZyb20gJy4uL21vZGFscy9hbGVydC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IENhbGxiYWNrTGF5b3V0UmVhZHlDb21wb25lbnQgfSBmcm9tICcuL2xheW91dC1yZWFkeS1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIFJlbGVhc2Ugbm90ZXMsIGtleWVkIGJ5IHRoZSBzZW1hbnRpYyB2ZXJzaW9uIHRoYXQgaW50cm9kdWNlZCBlYWNoIG9uZS5cbiAqL1xuZXhwb3J0IHR5cGUgUmVsZWFzZU5vdGVzID0gUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgRG9jdW1lbnRGcmFnbWVudD4+O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgUmVsZWFzZU5vdGVzQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWxlYXNlTm90ZXNDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZlcnNpb25zIHdob3NlIG5vdGVzIHRoZSB1c2VyIGhhcyBhbHJlYWR5IHNlZW4uXG4gICAqXG4gICAqIFN0b3JhZ2UgYmVsb25ncyB0byB0aGUgaG9zdCBwbHVnaW4sIHR5cGljYWxseSBhcyBvbmUgb2YgaXRzIHNldHRpbmdzLCBiZWNhdXNlIHRoaXMgY29tcG9uZW50IGhhcyBub1xuICAgKiBgZGF0YS5qc29uYCBvZiBpdHMgb3duIGFuZCB0aGUgbGlzdCBoYXMgdG8gb3V0bGl2ZSBhIHJlbG9hZC5cbiAgICpcbiAgICogT25seSBldmVyIGNhbGxlZCBvbmNlIHtAbGluayBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudH0gcmVwb3J0cyBpdHMgc2V0dGluZ3MgbG9hZGVkLCBzbyBhbiBpbXBsZW1lbnRhdGlvblxuICAgKiB0aGF0IHJlYWRzIGEgc2V0dGluZyByZWFkcyB0aGUgc3RvcmVkIHZhbHVlIHJhdGhlciB0aGFuIGl0cyBkZWZhdWx0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdmVyc2lvbnMgYWxyZWFkeSBzaG93bi5cbiAgICovXG4gIHJlYWRvbmx5IGdldFNob3duUmVsZWFzZU5vdGVWZXJzaW9uczogKCkgPT4gcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHBsdWdpbiwgc2hvd24gaW4gdGhlIHBvcHVwIHRpdGxlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZ3MgY29tcG9uZW50IGhvbGRpbmcgd2hhdGV2ZXIge0BsaW5rIGdldFNob3duUmVsZWFzZU5vdGVWZXJzaW9uc30gcmVhZHMuXG4gICAqXG4gICAqIFRha2VuIGFzIGEgd2hvbGUgY29tcG9uZW50IHJhdGhlciB0aGFuIGFzIGEgYmFyZSBcInJlYWR5XCIgZmxhZywgc28gdGhlIGhvc3QgY2Fubm90IGZvcmdldCB0byB3aXJlIHRoZVxuICAgKiB3YWl0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQ6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+O1xuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIHJlbGVhc2Ugbm90ZXMuXG4gICAqXG4gICAqIENhbGxlZCBhdCBsYXlvdXQgcmVhZHkgcmF0aGVyIHRoYW4gYXQgY29uc3RydWN0aW9uLCBzbyB0aGUgZnJhZ21lbnRzIGFyZSBidWlsdCBvbmx5IHdoZW4gdGhleSBtYXkgYmVcbiAgICogc2hvd24sIGFuZCBhIGxvY2FsaXplZCBzdHJpbmcgaXMgcmVhZCBhZnRlciB0aGUgaG9zdCdzIHRyYW5zbGF0aW9ucyBhcmUgc2V0IHVwLlxuICAgKlxuICAgKiBFdmVyeSBrZXkgbXVzdCBiZSBhIHZhbGlkIHNlbWFudGljIHZlcnNpb24uIFRoZSBub3RlcyBhcmUgc2hvd24gaW4gYXNjZW5kaW5nIHZlcnNpb24gb3JkZXIsIHdoYXRldmVyXG4gICAqIG9yZGVyIHRoZSBrZXlzIHdlcmUgd3JpdHRlbiBpbi5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlbGVhc2Ugbm90ZXMuXG4gICAqL1xuICByZWFkb25seSByZWxlYXNlTm90ZXNQcm92aWRlcjogKCkgPT4gUmVsZWFzZU5vdGVzO1xuXG4gIC8qKlxuICAgKiBSZWNvcmRzIHRoZSB2ZXJzaW9ucyB3aG9zZSBub3RlcyB0aGUgdXNlciBoYXMgbm93IHNlZW4uXG4gICAqXG4gICAqIENhbGxlZCBiZWZvcmUgdGhlIHBvcHVwIGlzIHNob3duLCB3aXRoIHRoZSBmdWxsIGxpc3Q6IHRoZSB2ZXJzaW9ucyBhbHJlYWR5IHNob3duIGZvbGxvd2VkIGJ5IHRoZSBvbmVzXG4gICAqIGFib3V0IHRvIGJlLlxuICAgKlxuICAgKiBAcGFyYW0gdmVyc2lvbnMgLSBUaGUgdmVyc2lvbnMgc2hvd24uXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgbGlzdCBpcyBwZXJzaXN0ZWQuXG4gICAqL1xuICByZWFkb25seSBzZXRTaG93blJlbGVhc2VOb3RlVmVyc2lvbnM6ICh2ZXJzaW9uczogcmVhZG9ubHkgc3RyaW5nW10pID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIERlY2lkZXMgd2hldGhlciB0aGUgcmVsZWFzZSBub3RlcyBtYXkgYmUgc2hvd24gbm93LlxuICAgKlxuICAgKiBXaGVuIGl0IHJldHVybnMgYGZhbHNlYCwgbm90aGluZyBpcyBzaG93biBhbmQgbm90aGluZyBpcyByZWNvcmRlZCwgc28gdGhlIG5vdGVzIGFyZSBzaG93biBhdCBhIGxhdGVyXG4gICAqIHN0YXJ0IG9uY2UgaXQgcmV0dXJucyBgdHJ1ZWAuIFVzZSBpdCB3aGVuIHRoZSBub3RlcyBvbmx5IG1ha2Ugc2Vuc2Ugd2hpbGUgc29tZSBmZWF0dXJlIGlzIG9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgbm90ZXMgbWF5IGJlIHNob3duLlxuICAgKiBAZGVmYXVsdCBBbHdheXMgYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd1JlbGVhc2VOb3Rlcz86ICgpID0+IFByb21pc2FibGU8Ym9vbGVhbj47XG59XG5cbi8qKlxuICogU2hvd3MgYSBwbHVnaW4ncyByZWxlYXNlIG5vdGVzIHRoYXQgdGhlIHVzZXIgaGFzIG5vdCBzZWVuIHlldCwgb25jZSB0aGUgd29ya3NwYWNlIGxheW91dCBpcyByZWFkeS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlbGVhc2VOb3Rlc0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHBsdWdpbiwgc2hvd24gaW4gdGhlIHBvcHVwIHRpdGxlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIGNvbXBvbmVudCB3aG9zZSBsb2FkIGlzIGF3YWl0ZWQgYmVmb3JlIHRoZSBzaG93biB2ZXJzaW9ucyBhcmUgcmVhZC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudDogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBnZXRTaG93blJlbGVhc2VOb3RlVmVyc2lvbnM6ICgpID0+IHJlYWRvbmx5IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbGVhc2VOb3Rlc1Byb3ZpZGVyOiAoKSA9PiBSZWxlYXNlTm90ZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2V0U2hvd25SZWxlYXNlTm90ZVZlcnNpb25zOiAodmVyc2lvbnM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IHNob3VsZFNob3dSZWxlYXNlTm90ZXM6ICgpID0+IFByb21pc2FibGU8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFJlbGVhc2VOb3Rlc0NvbXBvbmVudH0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFJlbGVhc2VOb3Rlc0NvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5nZXRTaG93blJlbGVhc2VOb3RlVmVyc2lvbnMgPSBwYXJhbXMuZ2V0U2hvd25SZWxlYXNlTm90ZVZlcnNpb25zO1xuICAgIHRoaXMucGx1Z2luTmFtZSA9IHBhcmFtcy5wbHVnaW5OYW1lO1xuICAgIHRoaXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQgPSBwYXJhbXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQ7XG4gICAgdGhpcy5yZWxlYXNlTm90ZXNQcm92aWRlciA9IHBhcmFtcy5yZWxlYXNlTm90ZXNQcm92aWRlcjtcbiAgICB0aGlzLnNldFNob3duUmVsZWFzZU5vdGVWZXJzaW9ucyA9IHBhcmFtcy5zZXRTaG93blJlbGVhc2VOb3RlVmVyc2lvbnM7XG4gICAgdGhpcy5zaG91bGRTaG93UmVsZWFzZU5vdGVzID0gcGFyYW1zLnNob3VsZFNob3dSZWxlYXNlTm90ZXMgPz8gKCgpOiBib29sZWFuID0+IHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQsIHNob3dpbmcgdGhlIHVuc2VlbiByZWxlYXNlIG5vdGVzIG9uY2UgdGhlIGxheW91dCBpcyByZWFkeSBBTkQgdGhlIGhvc3QncyBzZXR0aW5nc1xuICAgKiBoYXZlIGJlZW4gcmVhZCBmcm9tIGRpc2suXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuYWRkQ2hpbGQoXG4gICAgICBuZXcgQ2FsbGJhY2tMYXlvdXRSZWFkeUNvbXBvbmVudCh0aGlzLmFwcCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50LndoZW5Mb2FkZWRGcm9tRmlsZSgpO1xuICAgICAgICBpZiAodGhpcy5pc1VubG9hZGVkKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLnNob3dVbnNlZW5SZWxlYXNlTm90ZXMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyB0aGUgcmVsZWFzZSBub3RlcyB0aGUgdXNlciBoYXMgbm90IHNlZW4geWV0LCBhbmQgcmVjb3JkcyB0aGVtIGFzIHNlZW4uXG4gICAqXG4gICAqIERvZXMgbm90aGluZyB3aGVuIHtAbGluayBSZWxlYXNlTm90ZXNDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcy5zaG91bGRTaG93UmVsZWFzZU5vdGVzfSBkZWNsaW5lcywgb3Igd2hlblxuICAgKiBldmVyeSBub3RlIGhhcyBiZWVuIHNob3duIGFscmVhZHkuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcG9wdXAgaXMgY2xvc2VkLCBvciBhdCBvbmNlIHdoZW4gbm90aGluZyBpcyBzaG93bi5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBzaG93VW5zZWVuUmVsZWFzZU5vdGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghYXdhaXQgdGhpcy5zaG91bGRTaG93UmVsZWFzZU5vdGVzKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzaG93blZlcnNpb25zID0gdGhpcy5nZXRTaG93blJlbGVhc2VOb3RlVmVyc2lvbnMoKTtcbiAgICBjb25zdCBzaG93blZlcnNpb25TZXQgPSBuZXcgU2V0KHNob3duVmVyc2lvbnMpO1xuICAgIGNvbnN0IHVuc2VlblJlbGVhc2VOb3RlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMucmVsZWFzZU5vdGVzUHJvdmlkZXIoKSlcbiAgICAgIC5maWx0ZXIoKFt2ZXJzaW9uXSkgPT4gIXNob3duVmVyc2lvblNldC5oYXModmVyc2lvbikpXG4gICAgICAuc29ydCgoW3ZlcnNpb24xXSwgW3ZlcnNpb24yXSkgPT4gY29tcGFyZVZlcnNpb25zKHZlcnNpb24xLCB2ZXJzaW9uMikpO1xuXG4gICAgaWYgKHVuc2VlblJlbGVhc2VOb3Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlRnJhZ21lbnQoKTtcbiAgICBmb3IgKGNvbnN0IFt2ZXJzaW9uLCByZWxlYXNlTm90ZV0gb2YgdW5zZWVuUmVsZWFzZU5vdGVzKSB7XG4gICAgICBtZXNzYWdlLmNyZWF0ZUVsKCdoMycsIHsgdGV4dDogdmVyc2lvbiB9KTtcbiAgICAgIG1lc3NhZ2UuYXBwZW5kKHJlbGVhc2VOb3RlKTtcbiAgICB9XG5cbiAgICAvLyBSZWNvcmRlZCBiZWZvcmUgdGhlIHBvcHVwIGlzIHNob3duLCBzbyBhIHVzZXIgd2hvIHJlbG9hZHMgd2l0aG91dCBjbG9zaW5nIGl0IGlzIG5vdCBzaG93biBpdCBhZ2Fpbi5cbiAgICBhd2FpdCB0aGlzLnNldFNob3duUmVsZWFzZU5vdGVWZXJzaW9ucyhbLi4uc2hvd25WZXJzaW9ucywgLi4udW5zZWVuUmVsZWFzZU5vdGVzLm1hcCgoW3ZlcnNpb25dKSA9PiB2ZXJzaW9uKV0pO1xuXG4gICAgYXdhaXQgYWxlcnQoe1xuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICB0aXRsZTogY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrcyh0KCgkKSA9PiAkLm9ic2lkaWFuTGliLnJlbGVhc2VOb3Rlcy50aXRsZSwgeyBwbHVnaW5OYW1lOiBhc0NvZGVCbG9jayh0aGlzLnBsdWdpbk5hbWUpIH0pKVxuICAgIH0pO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFtQkEsOEJBQWdDO0FBSWhDLDBCQUdPO0FBQ1Asa0JBQWtCO0FBQ2xCLG1CQUFzQjtBQUN0QiwwQkFBNEI7QUFDNUIsb0NBQTZDO0FBaUZ0QyxNQUFNLDhCQUE4QixnQ0FBWTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSWxDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0E7QUFBQSxFQUVGO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxRQUFnRDtBQUNqRSxVQUFNO0FBQ04sU0FBSyxNQUFNLE9BQU87QUFDbEIsU0FBSyw4QkFBOEIsT0FBTztBQUMxQyxTQUFLLGFBQWEsT0FBTztBQUN6QixTQUFLLDBCQUEwQixPQUFPO0FBQ3RDLFNBQUssdUJBQXVCLE9BQU87QUFDbkMsU0FBSyw4QkFBOEIsT0FBTztBQUMxQyxTQUFLLHlCQUF5QixPQUFPLDJCQUEyQixNQUFlO0FBQUEsRUFDakY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTWdCLFNBQWU7QUFDN0IsU0FBSztBQUFBLE1BQ0gsSUFBSSwyREFBNkIsS0FBSyxLQUFLLFlBQVk7QUFDckQsY0FBTSxLQUFLLHdCQUF3QixtQkFBbUI7QUFDdEQsWUFBSSxLQUFLLFdBQVcsR0FBRztBQUNyQjtBQUFBLFFBQ0Y7QUFFQSxjQUFNLEtBQUssdUJBQXVCO0FBQUEsTUFDcEMsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVUEsTUFBZ0IseUJBQXdDO0FBQ3RELFFBQUksQ0FBQyxNQUFNLEtBQUssdUJBQXVCLEdBQUc7QUFDeEM7QUFBQSxJQUNGO0FBRUEsVUFBTSxnQkFBZ0IsS0FBSyw0QkFBNEI7QUFDdkQsVUFBTSxrQkFBa0IsSUFBSSxJQUFJLGFBQWE7QUFDN0MsVUFBTSxxQkFBcUIsT0FBTyxRQUFRLEtBQUsscUJBQXFCLENBQUMsRUFDbEUsT0FBTyxDQUFDLENBQUMsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLElBQUksT0FBTyxDQUFDLEVBQ25ELEtBQUssQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLFFBQVEsVUFBTSx5Q0FBZ0IsVUFBVSxRQUFRLENBQUM7QUFFdkUsUUFBSSxtQkFBbUIsV0FBVyxHQUFHO0FBQ25DO0FBQUEsSUFDRjtBQUVBLFVBQU0sVUFBVSxlQUFlO0FBQy9CLGVBQVcsQ0FBQyxTQUFTLFdBQVcsS0FBSyxvQkFBb0I7QUFDdkQsY0FBUSxTQUFTLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN4QyxjQUFRLE9BQU8sV0FBVztBQUFBLElBQzVCO0FBR0EsVUFBTSxLQUFLLDRCQUE0QixDQUFDLEdBQUcsZUFBZSxHQUFHLG1CQUFtQixJQUFJLENBQUMsQ0FBQyxPQUFPLE1BQU0sT0FBTyxDQUFDLENBQUM7QUFFNUcsY0FBTSxvQkFBTTtBQUFBLE1BQ1YsS0FBSyxLQUFLO0FBQUEsTUFDVjtBQUFBLE1BQ0EsV0FBTyxzREFBNkIsZUFBRSxDQUFDLE1BQU0sRUFBRSxZQUFZLGFBQWEsT0FBTyxFQUFFLGdCQUFZLGlDQUFZLEtBQUssVUFBVSxFQUFFLENBQUMsQ0FBQztBQUFBLElBQzlILENBQUM7QUFBQSxFQUNIO0FBQ0Y7IiwibmFtZXMiOltdfQ==
|