@dbx-tools/search 0.9.5 → 0.9.7

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/lib/src/config.js CHANGED
@@ -22,8 +22,8 @@
22
22
  * @module
23
23
  */
24
24
  import { ConfigurationError } from "@databricks/appkit";
25
- import { config as coreConfig } from "@dbx-tools/core";
26
- import { object, string } from "@dbx-tools/shared-core";
25
+ import { configUtils } from "@dbx-tools/core";
26
+ import { object, stringUtils } from "@dbx-tools/shared-core";
27
27
  /** The default index, honoring AppKit's standard Vector Search binding name. */
28
28
  export const INDEX_ENV = "SEARCH_INDEX";
29
29
  /** AppKit's standard environment name for a Vector Search index binding. */
@@ -113,19 +113,19 @@ export function defaultAlias(name) {
113
113
  /** Normalize a config index entry (string or object) into a {@link ResolvedIndexConfig}. */
114
114
  function toResolvedIndex(entry) {
115
115
  const raw = typeof entry === "string" ? { name: entry } : entry;
116
- const name = string.trimToNull(raw.name);
116
+ const name = stringUtils.trimToNull(raw.name);
117
117
  if (name === null)
118
118
  return null;
119
119
  return {
120
120
  name,
121
- alias: string.trimToNull(raw.alias) ?? defaultAlias(name),
121
+ alias: stringUtils.trimToNull(raw.alias) ?? defaultAlias(name),
122
122
  ...(raw.primaryKey ? { primaryKey: raw.primaryKey } : {}),
123
123
  ...(raw.columns && raw.columns.length > 0 ? { columns: [...raw.columns] } : {}),
124
124
  };
125
125
  }
126
126
  /** Parse and validate a {@link SearchMode} from config or an env var. */
127
127
  function resolveMode(configured) {
128
- const raw = configured ?? coreConfig.text("SEARCH_MODE", coreConfig.ENV_ONLY);
128
+ const raw = configured ?? configUtils.text("SEARCH_MODE", configUtils.ENV_ONLY);
129
129
  if (raw === undefined)
130
130
  return DEFAULT_MODE;
131
131
  if (raw !== "hybrid" && raw !== "vector" && raw !== "keyword") {
@@ -140,13 +140,13 @@ function resolveMode(configured) {
140
140
  * and a bad mode throws a {@link ConfigurationError} naming the field.
141
141
  */
142
142
  export function resolveSearchConfig(config = {}) {
143
- const defaultIndexRaw = coreConfig.string(config.index, [INDEX_ENV, DATABRICKS_INDEX_ENV], coreConfig.ENV_ONLY);
143
+ const defaultIndexRaw = configUtils.string(config.index, [INDEX_ENV, DATABRICKS_INDEX_ENV], configUtils.ENV_ONLY);
144
144
  const configured = (config.indexes ?? [])
145
145
  .map(toResolvedIndex)
146
146
  .filter((entry) => entry !== null);
147
147
  // Ensure the default index is represented in the known set.
148
148
  if (defaultIndexRaw && !configured.some((i) => i.name === defaultIndexRaw)) {
149
- const envColumns = coreConfig.list(undefined, "SEARCH_COLUMNS", undefined, coreConfig.ENV_ONLY);
149
+ const envColumns = configUtils.list(undefined, "SEARCH_COLUMNS", undefined, configUtils.ENV_ONLY);
150
150
  configured.unshift({
151
151
  name: defaultIndexRaw,
152
152
  alias: defaultAlias(defaultIndexRaw),
@@ -162,18 +162,18 @@ export function resolveSearchConfig(config = {}) {
162
162
  return { ...entry, alias };
163
163
  });
164
164
  const defaultIndex = defaultIndexRaw ?? indexes[0]?.name;
165
- const columns = coreConfig.list(config.columns, "SEARCH_COLUMNS", undefined, coreConfig.ENV_ONLY);
165
+ const columns = configUtils.list(config.columns, "SEARCH_COLUMNS", undefined, configUtils.ENV_ONLY);
166
166
  return {
167
167
  ...object.optional("defaultIndex", defaultIndex),
168
168
  indexes,
169
- ...object.optional("endpoint", coreConfig.string(config.endpoint, ENDPOINT_ENV, coreConfig.ENV_ONLY)),
169
+ ...object.optional("endpoint", configUtils.string(config.endpoint, ENDPOINT_ENV, configUtils.ENV_ONLY)),
170
170
  ...(columns.length > 0 ? { columns } : {}),
171
- pageSize: coreConfig.positiveInt(config.pageSize, "SEARCH_PAGE_SIZE", DEFAULT_PAGE_SIZE, coreConfig.ENV_ONLY),
171
+ pageSize: configUtils.positiveInt(config.pageSize, "SEARCH_PAGE_SIZE", DEFAULT_PAGE_SIZE, configUtils.ENV_ONLY),
172
172
  mode: resolveMode(config.mode),
173
- ...object.optional("embeddingModel", coreConfig.string(config.embeddingModel, "SEARCH_EMBEDDING_MODEL", coreConfig.ENV_ONLY)),
173
+ ...object.optional("embeddingModel", configUtils.string(config.embeddingModel, "SEARCH_EMBEDDING_MODEL", configUtils.ENV_ONLY)),
174
174
  basePath: DEFAULT_BASE_PATH,
175
- timeoutMs: coreConfig.positiveInt(config.timeoutMs, "SEARCH_TIMEOUT_MS", DEFAULT_TIMEOUT_MS, coreConfig.ENV_ONLY),
176
- allowWrite: coreConfig.boolean(config.allowWrite, "SEARCH_WRITE", coreConfig.ENV_ONLY) ?? false,
175
+ timeoutMs: configUtils.positiveInt(config.timeoutMs, "SEARCH_TIMEOUT_MS", DEFAULT_TIMEOUT_MS, configUtils.ENV_ONLY),
176
+ allowWrite: configUtils.boolean(config.allowWrite, "SEARCH_WRITE", configUtils.ENV_ONLY) ?? false,
177
177
  ...(config.ensureOnSetup ? { ensureOnSetup: config.ensureOnSetup } : {}),
178
178
  };
179
179
  }
@@ -184,7 +184,7 @@ export function resolveSearchConfig(config = {}) {
184
184
  * raise a stable, user-facing error rather than calling a phantom index.
185
185
  */
186
186
  export function resolveIndexName(config, reference) {
187
- const ref = string.trimToNull(reference);
187
+ const ref = stringUtils.trimToNull(reference);
188
188
  if (ref === null)
189
189
  return config.defaultIndex ?? null;
190
190
  const byAlias = config.indexes.find((i) => i.alias === ref || i.name === ref);
@@ -199,4 +199,4 @@ export function resolveIndexName(config, reference) {
199
199
  export function indexConfigFor(config, name) {
200
200
  return config.indexes.find((i) => i.name === name || i.alias === name);
201
201
  }
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBeUIsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsTUFBTSxJQUFJLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJeEQsZ0ZBQWdGO0FBQ2hGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUM7QUFFeEMsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGdDQUFnQyxDQUFDO0FBRXJFLG9GQUFvRjtBQUNwRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsaUJBQWlCLENBQUM7QUFFOUMsMkZBQTJGO0FBQzNGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBZSxRQUFRLENBQUM7QUFFakQseUZBQXlGO0FBQ3pGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUVwQywrREFBK0Q7QUFDL0QsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDO0FBRXpDLHVFQUF1RTtBQUN2RSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLENBQUM7QUFxRy9DLGdGQUFnRjtBQUNoRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBZ0I7SUFDL0MsSUFBSSxFQUFFLFFBQVE7SUFDZCxvQkFBb0IsRUFBRSxJQUFJO0lBQzFCLFVBQVUsRUFBRTtRQUNWLEtBQUssRUFBRTtZQUNMLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLHVFQUF1RTtTQUNyRjtRQUNELE9BQU8sRUFBRTtZQUNQLElBQUksRUFBRSxPQUFPO1lBQ2IsV0FBVyxFQUFFLDRF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LE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQzVELE9BQU8sTUFBTSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUM7QUFDckMsQ0FBQztBQUVELDZFQUE2RTtBQUM3RSxNQUFNLFVBQVUsY0FBYyxDQUM1QixNQUE0QixFQUM1QixJQUFZO0lBRVosT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQztBQUN6RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQUkgU2VhcmNoIHBsdWdpbjogdGhlIHR5cGVkXG4gKiB7QGxpbmsgU2VhcmNoUGx1Z2luQ29uZmlnfSAodGhlIHBsdWdpbidzIHNsaWNlIG9mIEFwcEtpdCBjb25maWcpLCB0aGUgSlNPTlxuICogU2NoZW1hIHRoZSBtYW5pZmVzdCBwdWJsaXNoZXMgZm9yIGl0LCBhbmQge0BsaW5rIHJlc29sdmVTZWFyY2hDb25maWd9XG4gKiB3aGljaCBsYXllcnMgdGhhdCBjb25maWcgb3ZlciBlbnZpcm9ubWVudCBkZWZhdWx0cyBpbnRvIHRoZSBjb25jcmV0ZVxuICoge0BsaW5rIFJlc29sdmVkU2VhcmNoQ29uZmlnfSB0aGUgcnVudGltZSwgY2xpZW50LCB0b29scywgYW5kIHJvdXRlcyByZWFkLlxuICpcbiAqIFRoZSBkZXNpZ24gZ29hbCBpcyBcIm9uZSBpbmRleCwgemVybyBjb25maWdcIjogbmFtZSBhIGRlZmF1bHQgaW5kZXggKG9yIHNldFxuICogYERBVEFCUklDS1NfVkVDVE9SX1NFQVJDSF9JTkRFWGApIGFuZCBldmVyeXRoaW5nIGVsc2UgLSB0aGUgY29sdW1ucyB0b1xuICogcmV0dXJuLCB0aGUgcGFnZSBzaXplLCB0aGUgbWF0Y2ggbW9kZSwgdGhlIG1vdW50ZWQgcm91dGUgcGF0aCwgdGhlIGVtYmVkZGluZ1xuICogbW9kZWwgdXNlZCB3aGVuIGNyZWF0aW5nIGFuIGluZGV4IC0gaGFzIGEgc2Vuc2libGUgZGVmYXVsdCB0aGF0IGNhbiBiZVxuICogb3ZlcnJpZGRlbiB3aGVuIGEgZGVwbG95bWVudCBuZWVkcyB0byBnbyBkZWVwZXIuXG4gKlxuICogV2hpY2ggaW5kZXggLyBlbmRwb2ludCBpcyB1c2VkIGZvbGxvd3MgdGhlIHN0YW5kYXJkIHByZWNlZGVuY2U6IGV4cGxpY2l0XG4gKiBwbHVnaW4gY29uZmlnLCB0aGVuIGVudmlyb25tZW50LCB0aGVuIGEgZGVmYXVsdC5cbiAqXG4gKiBFbnYgZmFsbGJhY2tzOiBgREFUQUJSSUNLU19WRUNUT1JfU0VBUkNIX0lOREVYYCAodGhlIGRlZmF1bHQgaW5kZXgpLFxuICogYFNFQVJDSF9JTkRFWGAsIGBTRUFSQ0hfRU5EUE9JTlRgLCBgU0VBUkNIX0NPTFVNTlNgLFxuICogYFNFQVJDSF9QQUdFX1NJWkVgLCBgU0VBUkNIX01PREVgLCBgU0VBUkNIX0VNQkVERElOR19NT0RFTGAsXG4gKiBgU0VBUkNIX1RJTUVPVVRfTVNgLCBgU0VBUkNIX1dSSVRFYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVycm9yLCB0eXBlIEJhc2VQbHVnaW5Db25maWcgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBjb25maWcgYXMgY29yZUNvbmZpZyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7IG9iamVjdCwgc3RyaW5nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgU2VhcmNoRG9jdW1lbnQsIFNlYXJjaE1vZGUgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtc2VhcmNoXCI7XG5pbXBvcnQgdHlwZSB7IEpTT05TY2hlbWE3IH0gZnJvbSBcImpzb24tc2NoZW1hXCI7XG5cbi8qKiBUaGUgZGVmYXVsdCBpbmRleCwgaG9ub3JpbmcgQXBwS2l0J3Mgc3RhbmRhcmQgVmVjdG9yIFNlYXJjaCBiaW5kaW5nIG5hbWUuICovXG5leHBvcnQgY29uc3QgSU5ERVhfRU5WID0gXCJTRUFSQ0hfSU5ERVhcIjtcblxuLyoqIEFwcEtpdCdzIHN0YW5kYXJkIGVudmlyb25tZW50IG5hbWUgZm9yIGEgVmVjdG9yIFNlYXJjaCBpbmRleCBiaW5kaW5nLiAqL1xuZXhwb3J0IGNvbnN0IERBVEFCUklDS1NfSU5ERVhfRU5WID0gXCJEQVRBQlJJQ0tTX1ZFQ1RPUl9TRUFSQ0hfSU5ERVhcIjtcblxuLyoqIERlZGljYXRlZCBvdmVycmlkZSBmb3IgdGhlIFZlY3RvciBTZWFyY2ggc2VydmluZyBlbmRwb2ludCB0aGF0IGhvc3RzIGluZGV4ZXMuICovXG5leHBvcnQgY29uc3QgRU5EUE9JTlRfRU5WID0gXCJTRUFSQ0hfRU5EUE9JTlRcIjtcblxuLyoqIERlZmF1bHQgbWF0Y2ggbW9kZSB3aGVuIGEgcmVxdWVzdCBkb2VzIG5vdCBuYW1lIG9uZS4gSHlicmlkIHN1aXRzIG1vc3Qgc2VhcmNoIGJveGVzLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTU9ERTogU2VhcmNoTW9kZSA9IFwiaHlicmlkXCI7XG5cbi8qKiBEZWZhdWx0IG51bWJlciBvZiBoaXRzIGEgc2VhcmNoIHJldHVybnMgKGEgZ29vZCBhdXRvY29tcGxldGUgLyByZXN1bHRzLWxpc3Qgc2l6ZSkuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9QQUdFX1NJWkUgPSAxMDtcblxuLyoqIERlZmF1bHQgcGVyLWNhbGwgdGltZW91dCBmb3IgYSBzZWFyY2ggLyBpbmRleCBvcGVyYXRpb24uICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9USU1FT1VUX01TID0gMzBfMDAwO1xuXG4vKiogQmFzZSBwYXRoIHRoZSBwbHVnaW4gbW91bnRzIGl0cyByb3V0ZXMgdW5kZXIsIHVubGVzcyBvdmVycmlkZGVuLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQkFTRV9QQVRIID0gXCIvYXBpL3NlYXJjaFwiO1xuXG4vKipcbiAqIEEgY29uZmlndXJlZCBpbmRleCB0aGUgcGx1Z2luIGtub3dzIGFib3V0IGFoZWFkIG9mIHRpbWUuIE9ubHkgYG5hbWVgIChvclxuICogYGFsaWFzYCkgaXMgcmVxdWlyZWQ7IHRoZSByZXN0IGlzIHJlc29sdmVkIGZyb20gdGhlIGxpdmUgaW5kZXggZGVmaW5pdGlvblxuICogd2hlbiBvbWl0dGVkLCBzbyBhIGRlcGxveW1lbnQgY2FuIHJlZ2lzdGVyIGB7IG5hbWUgfWAgYW5kIGxldCB0aGUgcGx1Z2luIGZpbGxcbiAqIGluIHRoZSBwcmltYXJ5IGtleSBhbmQgY29sdW1ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hJbmRleENvbmZpZyB7XG4gIC8qKiBVbml0eSBDYXRhbG9nIG5hbWUgb2YgdGhlIGluZGV4IChjYXRhbG9nLnNjaGVtYS5pbmRleCkuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFNob3J0IGFsaWFzIGEgY2FsbGVyIG1heSB1c2UgaW4gcGxhY2Ugb2YgYG5hbWVgIChkZWZhdWx0cyB0byB0aGUgbGFzdCBuYW1lIHNlZ21lbnQpLiAqL1xuICBhbGlhcz86IHN0cmluZztcbiAgLyoqIFByaW1hcnkta2V5IGNvbHVtbi4gUmVzb2x2ZWQgZnJvbSB0aGUgaW5kZXggZGVmaW5pdGlvbiB3aGVuIG9taXR0ZWQuICovXG4gIHByaW1hcnlLZXk/OiBzdHJpbmc7XG4gIC8qKiBDb2x1bW5zIHRvIHJldHVybiBwZXIgaGl0LCBpbiBkaXNwbGF5IG9yZGVyLiBEZWZhdWx0cyB0byBldmVyeSBpbmRleGVkIGNvbHVtbi4gKi9cbiAgY29sdW1ucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBBSSBTZWFyY2ggcGx1Z2luJ3Mgc2xpY2Ugb2YgQXBwS2l0IGNvbmZpZy4gRXZlcnkgZmllbGQgaXMgb3B0aW9uYWwgLSB0aGVcbiAqIHBsdWdpbiB3b3JrcyB3aXRoIG5vdGhpbmcgYnV0IGFuIGluZGV4IG5hbWUgaW4gdGhlIGVudmlyb25tZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFBsdWdpbkNvbmZpZyBleHRlbmRzIEJhc2VQbHVnaW5Db25maWcge1xuICAvKiogVGhlIGRlZmF1bHQgaW5kZXggc2VhcmNoZWQgd2hlbiBhIHJlcXVlc3Qgb21pdHMgb25lIChuYW1lIG9yIGFsaWFzKS4gKi9cbiAgaW5kZXg/OiBzdHJpbmc7XG4gIC8qKiBJbmRleGVzIHRoZSBwbHVnaW4gc2hvdWxkIGtub3cgYWJvdXQgKGZvciBhbGlhc2VzLCB1bml2ZXJzYWwgc2VhcmNoLCBhbmQgdGhlIFVJIGNhdGFsb2d1ZSkuICovXG4gIGluZGV4ZXM/OiBBcnJheTxzdHJpbmcgfCBTZWFyY2hJbmRleENvbmZpZz47XG4gIC8qKiBUaGUgVmVjdG9yIFNlYXJjaCBzZXJ2aW5nIGVuZHBvaW50IGluZGV4ZXMgbGl2ZSBvbiAob25seSBuZWVkZWQgdG8gY3JlYXRlIGFuIGluZGV4KS4gKi9cbiAgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIC8qKiBEZWZhdWx0IGNvbHVtbnMgdG8gcmV0dXJuIHBlciBoaXQuIEZhbGxzIGJhY2sgdG8gZWFjaCBpbmRleCdzIG93biBjb2x1bW5zLiAqL1xuICBjb2x1bW5zPzogc3RyaW5nW107XG4gIC8qKiBEZWZhdWx0IG51bWJlciBvZiBoaXRzIGEgc2VhcmNoIHJldHVybnMuICovXG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuICAvKiogRGVmYXVsdCBtYXRjaCBtb2RlLiAqL1xuICBtb2RlPzogU2VhcmNoTW9kZTtcbiAgLyoqIEVtYmVkZGluZyBtb2RlbCBlbmRwb2ludCB1c2VkIHdoZW4gdGhlIHBsdWdpbiBDUkVBVEVTIGEgRGVsdGEgU3luYyBpbmRleC4gRnV6enktcmVzb2x2ZWQuICovXG4gIGVtYmVkZGluZ01vZGVsPzogc3RyaW5nO1xuICAvKiogUGVyLWNhbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqIEVuYWJsZSB0aGUgd3JpdGUgc3VyZmFjZSAoYGFkZF9kb2N1bWVudHNgIHRvb2wgKyBgUE9TVCAvZG9jdW1lbnRzYCkuIE9mZiBieSBkZWZhdWx0LiAqL1xuICBhbGxvd1dyaXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFByb3Zpc2lvbiBhIFJFQUwgaW5kZXggYXQgYm9vdDogZW5zdXJlIHRoZSBlbmRwb2ludCArIGluZGV4IGV4aXN0IGFuZCBzZWVkXG4gICAqIGRvY3VtZW50cyB3aGVuIHRoZSBpbmRleCBpcyBlbXB0eS4gUnVucyBpbiB0aGUgYmFja2dyb3VuZCBkdXJpbmcgYHNldHVwKClgXG4gICAqIChhIHNsb3cgZmlyc3QtdGltZSBlbmRwb2ludC9pbmRleCBidWlsZCBuZXZlciBibG9ja3MgdGhlIHNlcnZlcikgdXNpbmcgdGhlXG4gICAqIGJvb3QtdGltZSBTREsgYXV0aCAoZW52IC8gY29uZmlnIHByb2ZpbGUpLiBJZGVtcG90ZW50IC0gc2FmZSBldmVyeSBib290LlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBpcyBhIE1BTkFHRUQgZGlyZWN0LWFjY2VzcyBpbmRleCAoRGF0YWJyaWNrcyBlbWJlZHMgdGhlIHRleHRcbiAgICogY29sdW1uKSwgc28gYGRvY3VtZW50c2AgYXJlIHBsYWluIHJvd3MgYW5kIHNlYXJjaC1ieS10ZXh0IHdvcmtzIHdpdGggbm9cbiAgICogRGVsdGEgdGFibGUsIG5vIHdhcmVob3VzZSwgYW5kIG5vIHZlY3RvcnMgdG8gY29tcHV0ZS4gUG9pbnQgaXQgYXQgYVxuICAgKiBgc291cmNlVGFibGVgIHRvIHByb3Zpc2lvbiBhIERlbHRhIFN5bmMgaW5kZXggaW5zdGVhZC5cbiAgICovXG4gIGVuc3VyZU9uU2V0dXA/OiBFbnN1cmVPblNldHVwQ29uZmlnO1xufVxuXG4vKiogQm9vdC10aW1lIHByb3Zpc2lvbmluZyArIHNlZWRpbmcgZm9yIGEgc2luZ2xlIGluZGV4IChzZWUgYGVuc3VyZU9uU2V0dXBgKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5zdXJlT25TZXR1cENvbmZpZyB7XG4gIC8qKiBVQyBuYW1lIG9mIHRoZSBpbmRleCB0byBlbnN1cmUgKGNhdGFsb2cuc2NoZW1hLmluZGV4KS4gRGVmYXVsdHMgdG8gdGhlIHBsdWdpbidzIGBpbmRleGAuICovXG4gIGluZGV4Pzogc3RyaW5nO1xuICAvKiogVmVjdG9yIFNlYXJjaCBlbmRwb2ludCB0byBob3N0IGl0IG9uLiBEZWZhdWx0cyB0byB0aGUgcGx1Z2luJ3MgYGVuZHBvaW50YC4gKi9cbiAgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIC8qKiBQcmltYXJ5LWtleSBjb2x1bW4uIERlZmF1bHRzIHRvIGBpZGAuICovXG4gIHByaW1hcnlLZXk/OiBzdHJpbmc7XG4gIC8qKiBUZXh0IGNvbHVtbiBEYXRhYnJpY2tzIGVtYmVkcyAobWFuYWdlZCBkaXJlY3QtYWNjZXNzKS4gRGVmYXVsdHMgdG8gYHRleHRgLiAqL1xuICB0ZXh0Q29sdW1uPzogc3RyaW5nO1xuICAvKiogRW1iZWRkaW5nIG1vZGVsIGVuZHBvaW50LiBGdXp6eS1tYXRjaGVkOyBkZWZhdWx0cyB0byB0aGUgYmVzdCBlbWJlZGRpbmcgZW5kcG9pbnQuICovXG4gIGVtYmVkZGluZ01vZGVsPzogc3RyaW5nO1xuICAvKiogRm9yIGEgRGVsdGEgU3luYyBpbmRleCBpbnN0ZWFkIG9mIG1hbmFnZWQgZGlyZWN0LWFjY2VzczogdGhlIHNvdXJjZSBEZWx0YSB0YWJsZS4gKi9cbiAgc291cmNlVGFibGU/OiBzdHJpbmc7XG4gIC8qKiBDb2x1bW4gLT4gdHlwZSBtYXAgZm9yIHRoZSBtYW5hZ2VkIGRpcmVjdC1hY2Nlc3MgYHNjaGVtYV9qc29uYC4gSW5mZXJyZWQgZnJvbSBgZG9jdW1lbnRzYCB3aGVuIG9taXR0ZWQuICovXG4gIHNjaGVtYT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBEb2N1bWVudHMgdG8gc2VlZCB3aGVuIHRoZSBpbmRleCBpcyBlbXB0eS4gUGxhaW4gYHsgaWQsIHRleHQsIC4uLiB9YCByb3dzIGZvciBhIG1hbmFnZWQgaW5kZXguICovXG4gIGRvY3VtZW50cz86IFNlYXJjaERvY3VtZW50W107XG4gIC8qKiBNYXggdGltZSB0byB3YWl0IGZvciBlbmRwb2ludCArIGluZGV4IHJlYWRpbmVzcy4gRGVmYXVsdHMgdG8gMjAgbWludXRlcy4gKi9cbiAgdGltZW91dE1zPzogbnVtYmVyO1xufVxuXG4vKiogQSBmdWxseSByZXNvbHZlZCBpbmRleCBlbnRyeSAodGhlIHBsdWdpbi1rbm93biBmb3JtKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRJbmRleENvbmZpZyB7XG4gIG5hbWU6IHN0cmluZztcbiAgYWxpYXM6IHN0cmluZztcbiAgcHJpbWFyeUtleT86IHN0cmluZztcbiAgY29sdW1ucz86IHN0cmluZ1tdO1xufVxuXG4vKiogVGhlIGNvbmNyZXRlIGNvbmZpZyB0aGUgcnVudGltZSwgY2xpZW50LCB0b29scywgYW5kIHJvdXRlcyByZWFkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFNlYXJjaENvbmZpZyB7XG4gIGRlZmF1bHRJbmRleD86IHN0cmluZztcbiAgaW5kZXhlczogUmVzb2x2ZWRJbmRleENvbmZpZ1tdO1xuICBlbmRwb2ludD86IHN0cmluZztcbiAgY29sdW1ucz86IHN0cmluZ1tdO1xuICBwYWdlU2l6ZTogbnVtYmVyO1xuICBtb2RlOiBTZWFyY2hNb2RlO1xuICBlbWJlZGRpbmdNb2RlbD86IHN0cmluZztcbiAgYmFzZVBhdGg6IHN0cmluZztcbiAgdGltZW91dE1zOiBudW1iZXI7XG4gIGFsbG93V3JpdGU6IGJvb2xlYW47XG4gIGVuc3VyZU9uU2V0dXA/OiBFbnN1cmVPblNldHVwQ29uZmlnO1xufVxuXG4vKiogSlNPTiBTY2hlbWEgdGhlIHBsdWdpbiBtYW5pZmVzdCBwdWJsaXNoZXMgZm9yIHtAbGluayBTZWFyY2hQbHVnaW5Db25maWd9LiAqL1xuZXhwb3J0IGNvbnN0IFNFQVJDSF9DT05GSUdfU0NIRU1BOiBKU09OU2NoZW1hNyA9IHtcbiAgdHlwZTogXCJvYmplY3RcIixcbiAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gIHByb3BlcnRpZXM6IHtcbiAgICBpbmRleDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkRlZmF1bHQgaW5kZXggdG8gc2VhcmNoIChjYXRhbG9nLnNjaGVtYS5pbmRleCBvciBhIGNvbmZpZ3VyZWQgYWxpYXMpLlwiLFxuICAgIH0sXG4gICAgaW5kZXhlczoge1xuICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiSW5kZXhlcyB0aGUgcGx1Z2luIGtub3dzIGFib3V0LCBmb3IgYWxpYXNlcywgdW5pdmVyc2FsIHNlYXJjaCwgYW5kIHRoZSBVSS5cIixcbiAgICAgIGl0ZW1zOiB7XG4gICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHJlcXVpcmVkOiBbXCJuYW1lXCJdLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBuYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgYWxpYXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBwcmltYXJ5S2V5OiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgY29sdW1uczogeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGVuZHBvaW50OiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVmVjdG9yIFNlYXJjaCBzZXJ2aW5nIGVuZHBvaW50IGluZGV4ZXMgbGl2ZSBvbiAobmVlZGVkIG9ubHkgdG8gY3JlYXRlIG9uZSkuXCIsXG4gICAgfSxcbiAgICBjb2x1bW5zOiB7XG4gICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICBkZXNjcmlwdGlvbjogXCJEZWZhdWx0IGNvbHVtbnMgdG8gcmV0dXJuLlwiLFxuICAgIH0sXG4gICAgcGFnZVNpemU6IHsgdHlwZTogXCJudW1iZXJcIiwgZGVzY3JpcHRpb246IFwiRGVmYXVsdCBudW1iZXIgb2YgaGl0cyBwZXIgc2VhcmNoLlwiIH0sXG4gICAgbW9kZTogeyBlbnVtOiBbXCJoeWJyaWRcIiwgXCJ2ZWN0b3JcIiwgXCJrZXl3b3JkXCJdLCBkZXNjcmlwdGlvbjogXCJEZWZhdWx0IG1hdGNoIG1vZGUuXCIgfSxcbiAgICBlbWJlZGRpbmdNb2RlbDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkVtYmVkZGluZyBlbmRwb2ludCB1c2VkIHdoZW4gY3JlYXRpbmcgYSBEZWx0YSBTeW5jIGluZGV4IChmdXp6eS1tYXRjaGVkKS5cIixcbiAgICB9LFxuICAgIHRpbWVvdXRNczogeyB0eXBlOiBcIm51bWJlclwiLCBkZXNjcmlwdGlvbjogXCJQZXItY2FsbCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy5cIiB9LFxuICAgIGFsbG93V3JpdGU6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiRW5hYmxlIHRoZSBkb2N1bWVudCB3cml0ZSBzdXJmYWNlIChhZGRfZG9jdW1lbnRzIHRvb2wgKyByb3V0ZSkuXCIsXG4gICAgfSxcbiAgICBlbnN1cmVPblNldHVwOiB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUHJvdmlzaW9uIGEgcmVhbCBpbmRleCBhdCBib290OiBlbnN1cmUgdGhlIGVuZHBvaW50ICsgaW5kZXggZXhpc3QgYW5kIHNlZWQgXCIgK1xuICAgICAgICBcImRvY3VtZW50cyB3aGVuIGVtcHR5LiBSdW5zIGluIHRoZSBiYWNrZ3JvdW5kIGR1cmluZyBzZXR1cCB1c2luZyBib290LXRpbWUgYXV0aC5cIixcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpbmRleDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIGVuZHBvaW50OiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgcHJpbWFyeUtleTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIHRleHRDb2x1bW46IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICBlbWJlZGRpbmdNb2RlbDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIHNvdXJjZVRhYmxlOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgc2NoZW1hOiB7IHR5cGU6IFwib2JqZWN0XCIsIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuICAgICAgICBkb2N1bWVudHM6IHsgdHlwZTogXCJhcnJheVwiLCBpdGVtczogeyB0eXBlOiBcIm9iamVjdFwiLCBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSB9IH0sXG4gICAgICAgIHRpbWVvdXRNczogeyB0eXBlOiBcIm51bWJlclwiIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59O1xuXG4vKiogRGVyaXZlIHRoZSBkZWZhdWx0IGFsaWFzIGZvciBhbiBpbmRleCBuYW1lIChpdHMgbGFzdCBkb3R0ZWQgc2VnbWVudCkuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdEFsaWFzKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gbmFtZS5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gc2VnbWVudHMubGVuZ3RoID4gMCA/IHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdIDogbmFtZTtcbn1cblxuLyoqIE5vcm1hbGl6ZSBhIGNvbmZpZyBpbmRleCBlbnRyeSAoc3RyaW5nIG9yIG9iamVjdCkgaW50byBhIHtAbGluayBSZXNvbHZlZEluZGV4Q29uZmlnfS4gKi9cbmZ1bmN0aW9uIHRvUmVzb2x2ZWRJbmRleChlbnRyeTogc3RyaW5nIHwgU2VhcmNoSW5kZXhDb25maWcpOiBSZXNvbHZlZEluZGV4Q29uZmlnIHwgbnVsbCB7XG4gIGNvbnN0IHJhdyA9IHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIiA/IHsgbmFtZTogZW50cnkgfSA6IGVudHJ5O1xuICBjb25zdCBuYW1lID0gc3RyaW5nLnRyaW1Ub051bGwocmF3Lm5hbWUpO1xuICBpZiAobmFtZSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB7XG4gICAgbmFtZSxcbiAgICBhbGlhczogc3RyaW5nLnRyaW1Ub051bGwocmF3LmFsaWFzKSA/PyBkZWZhdWx0QWxpYXMobmFtZSksXG4gICAgLi4uKHJhdy5wcmltYXJ5S2V5ID8geyBwcmltYXJ5S2V5OiByYXcucHJpbWFyeUtleSB9IDoge30pLFxuICAgIC4uLihyYXcuY29sdW1ucyAmJiByYXcuY29sdW1ucy5sZW5ndGggPiAwID8geyBjb2x1bW5zOiBbLi4ucmF3LmNvbHVtbnNdIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBQYXJzZSBhbmQgdmFsaWRhdGUgYSB7QGxpbmsgU2VhcmNoTW9kZX0gZnJvbSBjb25maWcgb3IgYW4gZW52IHZhci4gKi9cbmZ1bmN0aW9uIHJlc29sdmVNb2RlKGNvbmZpZ3VyZWQ6IFNlYXJjaE1vZGUgfCB1bmRlZmluZWQpOiBTZWFyY2hNb2RlIHtcbiAgY29uc3QgcmF3ID0gY29uZmlndXJlZCA/PyBjb3JlQ29uZmlnLnRleHQoXCJTRUFSQ0hfTU9ERVwiLCBjb3JlQ29uZmlnLkVOVl9PTkxZKTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gREVGQVVMVF9NT0RFO1xuICBpZiAocmF3ICE9PSBcImh5YnJpZFwiICYmIHJhdyAhPT0gXCJ2ZWN0b3JcIiAmJiByYXcgIT09IFwia2V5d29yZFwiKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcihcbiAgICAgICdtb2RlIG11c3QgYmUgXCJoeWJyaWRcIiwgXCJ2ZWN0b3JcIiBvciBcImtleXdvcmRcIiAoZW52OiBTRUFSQ0hfTU9ERSknLFxuICAgICAgeyBjb250ZXh0OiB7IGZpZWxkOiBcIm1vZGVcIiwgZW52VmFyOiBcIlNFQVJDSF9NT0RFXCIgfSB9LFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJhdztcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHBsdWdpbiBjb25maWcgb3ZlciBlbnZpcm9ubWVudCBkZWZhdWx0cyBpbnRvIHRoZSBjb25jcmV0ZVxuICoge0BsaW5rIFJlc29sdmVkU2VhcmNoQ29uZmlnfS4gVGhlIGRlZmF1bHQgaW5kZXggaXMgdW5pb25lZCBpbnRvIHRoZSBrbm93blxuICogaW5kZXhlcyBzbyBpdCBhbHdheXMgYXBwZWFycyBpbiB0aGUgY2F0YWxvZ3VlLCBhbGlhc2VzIGFyZSBkZS1kdXBsaWNhdGVkLFxuICogYW5kIGEgYmFkIG1vZGUgdGhyb3dzIGEge0BsaW5rIENvbmZpZ3VyYXRpb25FcnJvcn0gbmFtaW5nIHRoZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTZWFyY2hDb25maWcoY29uZmlnOiBTZWFyY2hQbHVnaW5Db25maWcgPSB7fSk6IFJlc29sdmVkU2VhcmNoQ29uZmlnIHtcbiAgY29uc3QgZGVmYXVsdEluZGV4UmF3ID0gY29yZUNvbmZpZy5zdHJpbmcoXG4gICAgY29uZmlnLmluZGV4LFxuICAgIFtJTkRFWF9FTlYsIERBVEFCUklDS1NfSU5ERVhfRU5WXSxcbiAgICBjb3JlQ29uZmlnLkVOVl9PTkxZLFxuICApO1xuXG4gIGNvbnN0IGNvbmZpZ3VyZWQgPSAoY29uZmlnLmluZGV4ZXMgPz8gW10pXG4gICAgLm1hcCh0b1Jlc29sdmVkSW5kZXgpXG4gICAgLmZpbHRlcigoZW50cnkpOiBlbnRyeSBpcyBSZXNvbHZlZEluZGV4Q29uZmlnID0+IGVudHJ5ICE9PSBudWxsKTtcblxuICAvLyBFbnN1cmUgdGhlIGRlZmF1bHQgaW5kZXggaXMgcmVwcmVzZW50ZWQgaW4gdGhlIGtub3duIHNldC5cbiAgaWYgKGRlZmF1bHRJbmRleFJhdyAmJiAhY29uZmlndXJlZC5zb21lKChpKSA9PiBpLm5hbWUgPT09IGRlZmF1bHRJbmRleFJhdykpIHtcbiAgICBjb25zdCBlbnZDb2x1bW5zID0gY29yZUNvbmZpZy5saXN0KHVuZGVmaW5lZCwgXCJTRUFSQ0hfQ09MVU1OU1wiLCB1bmRlZmluZWQsIGNvcmVDb25maWcuRU5WX09OTFkpO1xuICAgIGNvbmZpZ3VyZWQudW5zaGlmdCh7XG4gICAgICBuYW1lOiBkZWZhdWx0SW5kZXhSYXcsXG4gICAgICBhbGlhczogZGVmYXVsdEFsaWFzKGRlZmF1bHRJbmRleFJhdyksXG4gICAgICAuLi4oZW52Q29sdW1ucy5sZW5ndGggPiAwID8geyBjb2x1bW5zOiBlbnZDb2x1bW5zIH0gOiB7fSksXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBzZWVuQWxpYXNlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBpbmRleGVzID0gY29uZmlndXJlZC5tYXAoKGVudHJ5KSA9PiB7XG4gICAgbGV0IGFsaWFzID0gZW50cnkuYWxpYXM7XG4gICAgd2hpbGUgKHNlZW5BbGlhc2VzLmhhcyhhbGlhcykpIGFsaWFzID0gYCR7YWxpYXN9X2A7XG4gICAgc2VlbkFsaWFzZXMuYWRkKGFsaWFzKTtcbiAgICByZXR1cm4geyAuLi5lbnRyeSwgYWxpYXMgfTtcbiAgfSk7XG5cbiAgY29uc3QgZGVmYXVsdEluZGV4ID0gZGVmYXVsdEluZGV4UmF3ID8/IGluZGV4ZXNbMF0/Lm5hbWU7XG4gIGNvbnN0IGNvbHVtbnMgPSBjb3JlQ29uZmlnLmxpc3QoY29uZmlnLmNvbHVtbnMsIFwiU0VBUkNIX0NPTFVNTlNcIiwgdW5kZWZpbmVkLCBjb3JlQ29uZmlnLkVOVl9PTkxZKTtcblxuICByZXR1cm4ge1xuICAgIC4uLm9iamVjdC5vcHRpb25hbChcImRlZmF1bHRJbmRleFwiLCBkZWZhdWx0SW5kZXgpLFxuICAgIGluZGV4ZXMsXG4gICAgLi4ub2JqZWN0Lm9wdGlvbmFsKFxuICAgICAgXCJlbmRwb2ludFwiLFxuICAgICAgY29yZUNvbmZpZy5zdHJpbmcoY29uZmlnLmVuZHBvaW50LCBFTkRQT0lOVF9FTlYsIGNvcmVDb25maWcuRU5WX09OTFkpLFxuICAgICksXG4gICAgLi4uKGNvbHVtbnMubGVuZ3RoID4gMCA/IHsgY29sdW1ucyB9IDoge30pLFxuICAgIHBhZ2VTaXplOiBjb3JlQ29uZmlnLnBvc2l0aXZlSW50KFxuICAgICAgY29uZmlnLnBhZ2VTaXplLFxuICAgICAgXCJTRUFSQ0hfUEFHRV9TSVpFXCIsXG4gICAgICBERUZBVUxUX1BBR0VfU0laRSxcbiAgICAgIGNvcmVDb25maWcuRU5WX09OTFksXG4gICAgKSxcbiAgICBtb2RlOiByZXNvbHZlTW9kZShjb25maWcubW9kZSksXG4gICAgLi4ub2JqZWN0Lm9wdGlvbmFsKFxuICAgICAgXCJlbWJlZGRpbmdNb2RlbFwiLFxuICAgICAgY29yZUNvbmZpZy5zdHJpbmcoY29uZmlnLmVtYmVkZGluZ01vZGVsLCBcIlNFQVJDSF9FTUJFRERJTkdfTU9ERUxcIiwgY29yZUNvbmZpZy5FTlZfT05MWSksXG4gICAgKSxcbiAgICBiYXNlUGF0aDogREVGQVVMVF9CQVNFX1BBVEgsXG4gICAgdGltZW91dE1zOiBjb3JlQ29uZmlnLnBvc2l0aXZlSW50KFxuICAgICAgY29uZmlnLnRpbWVvdXRNcyxcbiAgICAgIFwiU0VBUkNIX1RJTUVPVVRfTVNcIixcbiAgICAgIERFRkFVTFRfVElNRU9VVF9NUyxcbiAgICAgIGNvcmVDb25maWcuRU5WX09OTFksXG4gICAgKSxcbiAgICBhbGxvd1dyaXRlOiBjb3JlQ29uZmlnLmJvb2xlYW4oY29uZmlnLmFsbG93V3JpdGUsIFwiU0VBUkNIX1dSSVRFXCIsIGNvcmVDb25maWcuRU5WX09OTFkpID8/IGZhbHNlLFxuICAgIC4uLihjb25maWcuZW5zdXJlT25TZXR1cCA/IHsgZW5zdXJlT25TZXR1cDogY29uZmlnLmVuc3VyZU9uU2V0dXAgfSA6IHt9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgY2FsbGVyLXN1cHBsaWVkIGluZGV4IHJlZmVyZW5jZSAoYSBmdWxsIFVDIG5hbWUgb3IgYSBjb25maWd1cmVkXG4gKiBhbGlhcykgaW50byBhIGNvbmNyZXRlIGluZGV4IG5hbWUuIEZhbGxzIGJhY2sgdG8gdGhlIGRlZmF1bHQgaW5kZXggd2hlbiB0aGVcbiAqIHJlZmVyZW5jZSBpcyBlbXB0eS4gUmV0dXJucyBgbnVsbGAgd2hlbiBub3RoaW5nIGNhbiBiZSByZXNvbHZlZCBzbyBjYWxsZXJzXG4gKiByYWlzZSBhIHN0YWJsZSwgdXNlci1mYWNpbmcgZXJyb3IgcmF0aGVyIHRoYW4gY2FsbGluZyBhIHBoYW50b20gaW5kZXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSW5kZXhOYW1lKFxuICBjb25maWc6IFJlc29sdmVkU2VhcmNoQ29uZmlnLFxuICByZWZlcmVuY2U6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCByZWYgPSBzdHJpbmcudHJpbVRvTnVsbChyZWZlcmVuY2UpO1xuICBpZiAocmVmID09PSBudWxsKSByZXR1cm4gY29uZmlnLmRlZmF1bHRJbmRleCA/PyBudWxsO1xuICBjb25zdCBieUFsaWFzID0gY29uZmlnLmluZGV4ZXMuZmluZCgoaSkgPT4gaS5hbGlhcyA9PT0gcmVmIHx8IGkubmFtZSA9PT0gcmVmKTtcbiAgaWYgKGJ5QWxpYXMpIHJldHVybiBieUFsaWFzLm5hbWU7XG4gIC8vIEFjY2VwdCBhbiB1bnJlZ2lzdGVyZWQgYnV0IGZ1bGx5LXF1YWxpZmllZCBVQyBuYW1lICh0aHJlZSBkb3R0ZWQgcGFydHMpLlxuICBpZiAocmVmLnNwbGl0KFwiLlwiKS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoID09PSAzKSByZXR1cm4gcmVmO1xuICByZXR1cm4gY29uZmlnLmRlZmF1bHRJbmRleCA/PyBudWxsO1xufVxuXG4vKiogVGhlIGtub3duIGNvbmZpZyBmb3IgYW4gaW5kZXggbmFtZSwgd2hlbiB0aGUgcGx1Z2luIHdhcyB0b2xkIGFib3V0IGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4Q29uZmlnRm9yKFxuICBjb25maWc6IFJlc29sdmVkU2VhcmNoQ29uZmlnLFxuICBuYW1lOiBzdHJpbmcsXG4pOiBSZXNvbHZlZEluZGV4Q29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGNvbmZpZy5pbmRleGVzLmZpbmQoKGkpID0+IGkubmFtZSA9PT0gbmFtZSB8fCBpLmFsaWFzID09PSBuYW1lKTtcbn1cbiJdfQ==
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBeUIsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUk3RCxnRkFBZ0Y7QUFDaEYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQztBQUV4Qyw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsZ0NBQWdDLENBQUM7QUFFckUsb0ZBQW9GO0FBQ3BGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQztBQUU5QywyRkFBMkY7QUFDM0YsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFlLFFBQVEsQ0FBQztBQUVqRCx5RkFBeUY7QUFDekYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBRXBDLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUM7QUFFekMsdUVBQXVFO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGFBQWEsQ0FBQztBQXFHL0MsZ0ZBQWdGO0FBQ2hGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFnQjtJQUMvQyxJQUFJLEVBQUUsUUFBUTtJQUNkLG9CQUFvQixFQUFFLElBQUk7SUFDMUIsVUFBVSxFQUFFO1FBQ1YsS0FBSyxFQUFFO1lBQ0wsSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQUUsdUVBQXVFO1NBQ3JGO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsSUFBSSxFQUFFLE9BQU87WUFDYixXQUFXLEVBQUUsNEVBQTRFO1lBQ3pG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Q0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQzVELE9BQU8sTUFBTSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUM7QUFDckMsQ0FBQztBQUVELDZFQUE2RTtBQUM3RSxNQUFNLFVBQVUsY0FBYyxDQUM1QixNQUE0QixFQUM1QixJQUFZO0lBRVosT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQztBQUN6RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQUkgU2VhcmNoIHBsdWdpbjogdGhlIHR5cGVkXG4gKiB7QGxpbmsgU2VhcmNoUGx1Z2luQ29uZmlnfSAodGhlIHBsdWdpbidzIHNsaWNlIG9mIEFwcEtpdCBjb25maWcpLCB0aGUgSlNPTlxuICogU2NoZW1hIHRoZSBtYW5pZmVzdCBwdWJsaXNoZXMgZm9yIGl0LCBhbmQge0BsaW5rIHJlc29sdmVTZWFyY2hDb25maWd9XG4gKiB3aGljaCBsYXllcnMgdGhhdCBjb25maWcgb3ZlciBlbnZpcm9ubWVudCBkZWZhdWx0cyBpbnRvIHRoZSBjb25jcmV0ZVxuICoge0BsaW5rIFJlc29sdmVkU2VhcmNoQ29uZmlnfSB0aGUgcnVudGltZSwgY2xpZW50LCB0b29scywgYW5kIHJvdXRlcyByZWFkLlxuICpcbiAqIFRoZSBkZXNpZ24gZ29hbCBpcyBcIm9uZSBpbmRleCwgemVybyBjb25maWdcIjogbmFtZSBhIGRlZmF1bHQgaW5kZXggKG9yIHNldFxuICogYERBVEFCUklDS1NfVkVDVE9SX1NFQVJDSF9JTkRFWGApIGFuZCBldmVyeXRoaW5nIGVsc2UgLSB0aGUgY29sdW1ucyB0b1xuICogcmV0dXJuLCB0aGUgcGFnZSBzaXplLCB0aGUgbWF0Y2ggbW9kZSwgdGhlIG1vdW50ZWQgcm91dGUgcGF0aCwgdGhlIGVtYmVkZGluZ1xuICogbW9kZWwgdXNlZCB3aGVuIGNyZWF0aW5nIGFuIGluZGV4IC0gaGFzIGEgc2Vuc2libGUgZGVmYXVsdCB0aGF0IGNhbiBiZVxuICogb3ZlcnJpZGRlbiB3aGVuIGEgZGVwbG95bWVudCBuZWVkcyB0byBnbyBkZWVwZXIuXG4gKlxuICogV2hpY2ggaW5kZXggLyBlbmRwb2ludCBpcyB1c2VkIGZvbGxvd3MgdGhlIHN0YW5kYXJkIHByZWNlZGVuY2U6IGV4cGxpY2l0XG4gKiBwbHVnaW4gY29uZmlnLCB0aGVuIGVudmlyb25tZW50LCB0aGVuIGEgZGVmYXVsdC5cbiAqXG4gKiBFbnYgZmFsbGJhY2tzOiBgREFUQUJSSUNLU19WRUNUT1JfU0VBUkNIX0lOREVYYCAodGhlIGRlZmF1bHQgaW5kZXgpLFxuICogYFNFQVJDSF9JTkRFWGAsIGBTRUFSQ0hfRU5EUE9JTlRgLCBgU0VBUkNIX0NPTFVNTlNgLFxuICogYFNFQVJDSF9QQUdFX1NJWkVgLCBgU0VBUkNIX01PREVgLCBgU0VBUkNIX0VNQkVERElOR19NT0RFTGAsXG4gKiBgU0VBUkNIX1RJTUVPVVRfTVNgLCBgU0VBUkNIX1dSSVRFYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVycm9yLCB0eXBlIEJhc2VQbHVnaW5Db25maWcgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBjb25maWdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7IG9iamVjdCwgc3RyaW5nVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBTZWFyY2hEb2N1bWVudCwgU2VhcmNoTW9kZSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1zZWFyY2hcIjtcbmltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTcgfSBmcm9tIFwianNvbi1zY2hlbWFcIjtcblxuLyoqIFRoZSBkZWZhdWx0IGluZGV4LCBob25vcmluZyBBcHBLaXQncyBzdGFuZGFyZCBWZWN0b3IgU2VhcmNoIGJpbmRpbmcgbmFtZS4gKi9cbmV4cG9ydCBjb25zdCBJTkRFWF9FTlYgPSBcIlNFQVJDSF9JTkRFWFwiO1xuXG4vKiogQXBwS2l0J3Mgc3RhbmRhcmQgZW52aXJvbm1lbnQgbmFtZSBmb3IgYSBWZWN0b3IgU2VhcmNoIGluZGV4IGJpbmRpbmcuICovXG5leHBvcnQgY29uc3QgREFUQUJSSUNLU19JTkRFWF9FTlYgPSBcIkRBVEFCUklDS1NfVkVDVE9SX1NFQVJDSF9JTkRFWFwiO1xuXG4vKiogRGVkaWNhdGVkIG92ZXJyaWRlIGZvciB0aGUgVmVjdG9yIFNlYXJjaCBzZXJ2aW5nIGVuZHBvaW50IHRoYXQgaG9zdHMgaW5kZXhlcy4gKi9cbmV4cG9ydCBjb25zdCBFTkRQT0lOVF9FTlYgPSBcIlNFQVJDSF9FTkRQT0lOVFwiO1xuXG4vKiogRGVmYXVsdCBtYXRjaCBtb2RlIHdoZW4gYSByZXF1ZXN0IGRvZXMgbm90IG5hbWUgb25lLiBIeWJyaWQgc3VpdHMgbW9zdCBzZWFyY2ggYm94ZXMuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NT0RFOiBTZWFyY2hNb2RlID0gXCJoeWJyaWRcIjtcblxuLyoqIERlZmF1bHQgbnVtYmVyIG9mIGhpdHMgYSBzZWFyY2ggcmV0dXJucyAoYSBnb29kIGF1dG9jb21wbGV0ZSAvIHJlc3VsdHMtbGlzdCBzaXplKS4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1BBR0VfU0laRSA9IDEwO1xuXG4vKiogRGVmYXVsdCBwZXItY2FsbCB0aW1lb3V0IGZvciBhIHNlYXJjaCAvIGluZGV4IG9wZXJhdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSAzMF8wMDA7XG5cbi8qKiBCYXNlIHBhdGggdGhlIHBsdWdpbiBtb3VudHMgaXRzIHJvdXRlcyB1bmRlciwgdW5sZXNzIG92ZXJyaWRkZW4uICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9CQVNFX1BBVEggPSBcIi9hcGkvc2VhcmNoXCI7XG5cbi8qKlxuICogQSBjb25maWd1cmVkIGluZGV4IHRoZSBwbHVnaW4ga25vd3MgYWJvdXQgYWhlYWQgb2YgdGltZS4gT25seSBgbmFtZWAgKG9yXG4gKiBgYWxpYXNgKSBpcyByZXF1aXJlZDsgdGhlIHJlc3QgaXMgcmVzb2x2ZWQgZnJvbSB0aGUgbGl2ZSBpbmRleCBkZWZpbml0aW9uXG4gKiB3aGVuIG9taXR0ZWQsIHNvIGEgZGVwbG95bWVudCBjYW4gcmVnaXN0ZXIgYHsgbmFtZSB9YCBhbmQgbGV0IHRoZSBwbHVnaW4gZmlsbFxuICogaW4gdGhlIHByaW1hcnkga2V5IGFuZCBjb2x1bW5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaEluZGV4Q29uZmlnIHtcbiAgLyoqIFVuaXR5IENhdGFsb2cgbmFtZSBvZiB0aGUgaW5kZXggKGNhdGFsb2cuc2NoZW1hLmluZGV4KS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogU2hvcnQgYWxpYXMgYSBjYWxsZXIgbWF5IHVzZSBpbiBwbGFjZSBvZiBgbmFtZWAgKGRlZmF1bHRzIHRvIHRoZSBsYXN0IG5hbWUgc2VnbWVudCkuICovXG4gIGFsaWFzPzogc3RyaW5nO1xuICAvKiogUHJpbWFyeS1rZXkgY29sdW1uLiBSZXNvbHZlZCBmcm9tIHRoZSBpbmRleCBkZWZpbml0aW9uIHdoZW4gb21pdHRlZC4gKi9cbiAgcHJpbWFyeUtleT86IHN0cmluZztcbiAgLyoqIENvbHVtbnMgdG8gcmV0dXJuIHBlciBoaXQsIGluIGRpc3BsYXkgb3JkZXIuIERlZmF1bHRzIHRvIGV2ZXJ5IGluZGV4ZWQgY29sdW1uLiAqL1xuICBjb2x1bW5zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIEFJIFNlYXJjaCBwbHVnaW4ncyBzbGljZSBvZiBBcHBLaXQgY29uZmlnLiBFdmVyeSBmaWVsZCBpcyBvcHRpb25hbCAtIHRoZVxuICogcGx1Z2luIHdvcmtzIHdpdGggbm90aGluZyBidXQgYW4gaW5kZXggbmFtZSBpbiB0aGUgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUGx1Z2luQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIC8qKiBUaGUgZGVmYXVsdCBpbmRleCBzZWFyY2hlZCB3aGVuIGEgcmVxdWVzdCBvbWl0cyBvbmUgKG5hbWUgb3IgYWxpYXMpLiAqL1xuICBpbmRleD86IHN0cmluZztcbiAgLyoqIEluZGV4ZXMgdGhlIHBsdWdpbiBzaG91bGQga25vdyBhYm91dCAoZm9yIGFsaWFzZXMsIHVuaXZlcnNhbCBzZWFyY2gsIGFuZCB0aGUgVUkgY2F0YWxvZ3VlKS4gKi9cbiAgaW5kZXhlcz86IEFycmF5PHN0cmluZyB8IFNlYXJjaEluZGV4Q29uZmlnPjtcbiAgLyoqIFRoZSBWZWN0b3IgU2VhcmNoIHNlcnZpbmcgZW5kcG9pbnQgaW5kZXhlcyBsaXZlIG9uIChvbmx5IG5lZWRlZCB0byBjcmVhdGUgYW4gaW5kZXgpLiAqL1xuICBlbmRwb2ludD86IHN0cmluZztcbiAgLyoqIERlZmF1bHQgY29sdW1ucyB0byByZXR1cm4gcGVyIGhpdC4gRmFsbHMgYmFjayB0byBlYWNoIGluZGV4J3Mgb3duIGNvbHVtbnMuICovXG4gIGNvbHVtbnM/OiBzdHJpbmdbXTtcbiAgLyoqIERlZmF1bHQgbnVtYmVyIG9mIGhpdHMgYSBzZWFyY2ggcmV0dXJucy4gKi9cbiAgcGFnZVNpemU/OiBudW1iZXI7XG4gIC8qKiBEZWZhdWx0IG1hdGNoIG1vZGUuICovXG4gIG1vZGU/OiBTZWFyY2hNb2RlO1xuICAvKiogRW1iZWRkaW5nIG1vZGVsIGVuZHBvaW50IHVzZWQgd2hlbiB0aGUgcGx1Z2luIENSRUFURVMgYSBEZWx0YSBTeW5jIGluZGV4LiBGdXp6eS1yZXNvbHZlZC4gKi9cbiAgZW1iZWRkaW5nTW9kZWw/OiBzdHJpbmc7XG4gIC8qKiBQZXItY2FsbCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICAvKiogRW5hYmxlIHRoZSB3cml0ZSBzdXJmYWNlIChgYWRkX2RvY3VtZW50c2AgdG9vbCArIGBQT1NUIC9kb2N1bWVudHNgKS4gT2ZmIGJ5IGRlZmF1bHQuICovXG4gIGFsbG93V3JpdGU/OiBib29sZWFuO1xuICAvKipcbiAgICogUHJvdmlzaW9uIGEgUkVBTCBpbmRleCBhdCBib290OiBlbnN1cmUgdGhlIGVuZHBvaW50ICsgaW5kZXggZXhpc3QgYW5kIHNlZWRcbiAgICogZG9jdW1lbnRzIHdoZW4gdGhlIGluZGV4IGlzIGVtcHR5LiBSdW5zIGluIHRoZSBiYWNrZ3JvdW5kIGR1cmluZyBgc2V0dXAoKWBcbiAgICogKGEgc2xvdyBmaXJzdC10aW1lIGVuZHBvaW50L2luZGV4IGJ1aWxkIG5ldmVyIGJsb2NrcyB0aGUgc2VydmVyKSB1c2luZyB0aGVcbiAgICogYm9vdC10aW1lIFNESyBhdXRoIChlbnYgLyBjb25maWcgcHJvZmlsZSkuIElkZW1wb3RlbnQgLSBzYWZlIGV2ZXJ5IGJvb3QuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IGlzIGEgTUFOQUdFRCBkaXJlY3QtYWNjZXNzIGluZGV4IChEYXRhYnJpY2tzIGVtYmVkcyB0aGUgdGV4dFxuICAgKiBjb2x1bW4pLCBzbyBgZG9jdW1lbnRzYCBhcmUgcGxhaW4gcm93cyBhbmQgc2VhcmNoLWJ5LXRleHQgd29ya3Mgd2l0aCBub1xuICAgKiBEZWx0YSB0YWJsZSwgbm8gd2FyZWhvdXNlLCBhbmQgbm8gdmVjdG9ycyB0byBjb21wdXRlLiBQb2ludCBpdCBhdCBhXG4gICAqIGBzb3VyY2VUYWJsZWAgdG8gcHJvdmlzaW9uIGEgRGVsdGEgU3luYyBpbmRleCBpbnN0ZWFkLlxuICAgKi9cbiAgZW5zdXJlT25TZXR1cD86IEVuc3VyZU9uU2V0dXBDb25maWc7XG59XG5cbi8qKiBCb290LXRpbWUgcHJvdmlzaW9uaW5nICsgc2VlZGluZyBmb3IgYSBzaW5nbGUgaW5kZXggKHNlZSBgZW5zdXJlT25TZXR1cGApLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnN1cmVPblNldHVwQ29uZmlnIHtcbiAgLyoqIFVDIG5hbWUgb2YgdGhlIGluZGV4IHRvIGVuc3VyZSAoY2F0YWxvZy5zY2hlbWEuaW5kZXgpLiBEZWZhdWx0cyB0byB0aGUgcGx1Z2luJ3MgYGluZGV4YC4gKi9cbiAgaW5kZXg/OiBzdHJpbmc7XG4gIC8qKiBWZWN0b3IgU2VhcmNoIGVuZHBvaW50IHRvIGhvc3QgaXQgb24uIERlZmF1bHRzIHRvIHRoZSBwbHVnaW4ncyBgZW5kcG9pbnRgLiAqL1xuICBlbmRwb2ludD86IHN0cmluZztcbiAgLyoqIFByaW1hcnkta2V5IGNvbHVtbi4gRGVmYXVsdHMgdG8gYGlkYC4gKi9cbiAgcHJpbWFyeUtleT86IHN0cmluZztcbiAgLyoqIFRleHQgY29sdW1uIERhdGFicmlja3MgZW1iZWRzIChtYW5hZ2VkIGRpcmVjdC1hY2Nlc3MpLiBEZWZhdWx0cyB0byBgdGV4dGAuICovXG4gIHRleHRDb2x1bW4/OiBzdHJpbmc7XG4gIC8qKiBFbWJlZGRpbmcgbW9kZWwgZW5kcG9pbnQuIEZ1enp5LW1hdGNoZWQ7IGRlZmF1bHRzIHRvIHRoZSBiZXN0IGVtYmVkZGluZyBlbmRwb2ludC4gKi9cbiAgZW1iZWRkaW5nTW9kZWw/OiBzdHJpbmc7XG4gIC8qKiBGb3IgYSBEZWx0YSBTeW5jIGluZGV4IGluc3RlYWQgb2YgbWFuYWdlZCBkaXJlY3QtYWNjZXNzOiB0aGUgc291cmNlIERlbHRhIHRhYmxlLiAqL1xuICBzb3VyY2VUYWJsZT86IHN0cmluZztcbiAgLyoqIENvbHVtbiAtPiB0eXBlIG1hcCBmb3IgdGhlIG1hbmFnZWQgZGlyZWN0LWFjY2VzcyBgc2NoZW1hX2pzb25gLiBJbmZlcnJlZCBmcm9tIGBkb2N1bWVudHNgIHdoZW4gb21pdHRlZC4gKi9cbiAgc2NoZW1hPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIERvY3VtZW50cyB0byBzZWVkIHdoZW4gdGhlIGluZGV4IGlzIGVtcHR5LiBQbGFpbiBgeyBpZCwgdGV4dCwgLi4uIH1gIHJvd3MgZm9yIGEgbWFuYWdlZCBpbmRleC4gKi9cbiAgZG9jdW1lbnRzPzogU2VhcmNoRG9jdW1lbnRbXTtcbiAgLyoqIE1heCB0aW1lIHRvIHdhaXQgZm9yIGVuZHBvaW50ICsgaW5kZXggcmVhZGluZXNzLiBEZWZhdWx0cyB0byAyMCBtaW51dGVzLiAqL1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG59XG5cbi8qKiBBIGZ1bGx5IHJlc29sdmVkIGluZGV4IGVudHJ5ICh0aGUgcGx1Z2luLWtub3duIGZvcm0pLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZEluZGV4Q29uZmlnIHtcbiAgbmFtZTogc3RyaW5nO1xuICBhbGlhczogc3RyaW5nO1xuICBwcmltYXJ5S2V5Pzogc3RyaW5nO1xuICBjb2x1bW5zPzogc3RyaW5nW107XG59XG5cbi8qKiBUaGUgY29uY3JldGUgY29uZmlnIHRoZSBydW50aW1lLCBjbGllbnQsIHRvb2xzLCBhbmQgcm91dGVzIHJlYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkU2VhcmNoQ29uZmlnIHtcbiAgZGVmYXVsdEluZGV4Pzogc3RyaW5nO1xuICBpbmRleGVzOiBSZXNvbHZlZEluZGV4Q29uZmlnW107XG4gIGVuZHBvaW50Pzogc3RyaW5nO1xuICBjb2x1bW5zPzogc3RyaW5nW107XG4gIHBhZ2VTaXplOiBudW1iZXI7XG4gIG1vZGU6IFNlYXJjaE1vZGU7XG4gIGVtYmVkZGluZ01vZGVsPzogc3RyaW5nO1xuICBiYXNlUGF0aDogc3RyaW5nO1xuICB0aW1lb3V0TXM6IG51bWJlcjtcbiAgYWxsb3dXcml0ZTogYm9vbGVhbjtcbiAgZW5zdXJlT25TZXR1cD86IEVuc3VyZU9uU2V0dXBDb25maWc7XG59XG5cbi8qKiBKU09OIFNjaGVtYSB0aGUgcGx1Z2luIG1hbmlmZXN0IHB1Ymxpc2hlcyBmb3Ige0BsaW5rIFNlYXJjaFBsdWdpbkNvbmZpZ30uICovXG5leHBvcnQgY29uc3QgU0VBUkNIX0NPTkZJR19TQ0hFTUE6IEpTT05TY2hlbWE3ID0ge1xuICB0eXBlOiBcIm9iamVjdFwiLFxuICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgcHJvcGVydGllczoge1xuICAgIGluZGV4OiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiRGVmYXVsdCBpbmRleCB0byBzZWFyY2ggKGNhdGFsb2cuc2NoZW1hLmluZGV4IG9yIGEgY29uZmlndXJlZCBhbGlhcykuXCIsXG4gICAgfSxcbiAgICBpbmRleGVzOiB7XG4gICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJJbmRleGVzIHRoZSBwbHVnaW4ga25vd3MgYWJvdXQsIGZvciBhbGlhc2VzLCB1bml2ZXJzYWwgc2VhcmNoLCBhbmQgdGhlIFVJLlwiLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IFtcIm5hbWVcIl0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIG5hbWU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBhbGlhczogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIHByaW1hcnlLZXk6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBjb2x1bW5zOiB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgZW5kcG9pbnQ6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJWZWN0b3IgU2VhcmNoIHNlcnZpbmcgZW5kcG9pbnQgaW5kZXhlcyBsaXZlIG9uIChuZWVkZWQgb25seSB0byBjcmVhdGUgb25lKS5cIixcbiAgICB9LFxuICAgIGNvbHVtbnM6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkRlZmF1bHQgY29sdW1ucyB0byByZXR1cm4uXCIsXG4gICAgfSxcbiAgICBwYWdlU2l6ZTogeyB0eXBlOiBcIm51bWJlclwiLCBkZXNjcmlwdGlvbjogXCJEZWZhdWx0IG51bWJlciBvZiBoaXRzIHBlciBzZWFyY2guXCIgfSxcbiAgICBtb2RlOiB7IGVudW06IFtcImh5YnJpZFwiLCBcInZlY3RvclwiLCBcImtleXdvcmRcIl0sIGRlc2NyaXB0aW9uOiBcIkRlZmF1bHQgbWF0Y2ggbW9kZS5cIiB9LFxuICAgIGVtYmVkZGluZ01vZGVsOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiRW1iZWRkaW5nIGVuZHBvaW50IHVzZWQgd2hlbiBjcmVhdGluZyBhIERlbHRhIFN5bmMgaW5kZXggKGZ1enp5LW1hdGNoZWQpLlwiLFxuICAgIH0sXG4gICAgdGltZW91dE1zOiB7IHR5cGU6IFwibnVtYmVyXCIsIGRlc2NyaXB0aW9uOiBcIlBlci1jYWxsIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLlwiIH0sXG4gICAgYWxsb3dXcml0ZToge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJFbmFibGUgdGhlIGRvY3VtZW50IHdyaXRlIHN1cmZhY2UgKGFkZF9kb2N1bWVudHMgdG9vbCArIHJvdXRlKS5cIixcbiAgICB9LFxuICAgIGVuc3VyZU9uU2V0dXA6IHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJQcm92aXNpb24gYSByZWFsIGluZGV4IGF0IGJvb3Q6IGVuc3VyZSB0aGUgZW5kcG9pbnQgKyBpbmRleCBleGlzdCBhbmQgc2VlZCBcIiArXG4gICAgICAgIFwiZG9jdW1lbnRzIHdoZW4gZW1wdHkuIFJ1bnMgaW4gdGhlIGJhY2tncm91bmQgZHVyaW5nIHNldHVwIHVzaW5nIGJvb3QtdGltZSBhdXRoLlwiLFxuICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGluZGV4OiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgZW5kcG9pbnQ6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICBwcmltYXJ5S2V5OiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgdGV4dENvbHVtbjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIGVtYmVkZGluZ01vZGVsOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgc291cmNlVGFibGU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICBzY2hlbWE6IHsgdHlwZTogXCJvYmplY3RcIiwgYWRkaXRpb25hbFByb3BlcnRpZXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgIGRvY3VtZW50czogeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwib2JqZWN0XCIsIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlIH0gfSxcbiAgICAgICAgdGltZW91dE1zOiB7IHR5cGU6IFwibnVtYmVyXCIgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn07XG5cbi8qKiBEZXJpdmUgdGhlIGRlZmF1bHQgYWxpYXMgZm9yIGFuIGluZGV4IG5hbWUgKGl0cyBsYXN0IGRvdHRlZCBzZWdtZW50KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0QWxpYXMobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBuYW1lLnNwbGl0KFwiLlwiKS5maWx0ZXIoQm9vbGVhbik7XG4gIHJldHVybiBzZWdtZW50cy5sZW5ndGggPiAwID8gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0gOiBuYW1lO1xufVxuXG4vKiogTm9ybWFsaXplIGEgY29uZmlnIGluZGV4IGVudHJ5IChzdHJpbmcgb3Igb2JqZWN0KSBpbnRvIGEge0BsaW5rIFJlc29sdmVkSW5kZXhDb25maWd9LiAqL1xuZnVuY3Rpb24gdG9SZXNvbHZlZEluZGV4KGVudHJ5OiBzdHJpbmcgfCBTZWFyY2hJbmRleENvbmZpZyk6IFJlc29sdmVkSW5kZXhDb25maWcgfCBudWxsIHtcbiAgY29uc3QgcmF3ID0gdHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiID8geyBuYW1lOiBlbnRyeSB9IDogZW50cnk7XG4gIGNvbnN0IG5hbWUgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKHJhdy5uYW1lKTtcbiAgaWYgKG5hbWUgPT09IG51bGwpIHJldHVybiBudWxsO1xuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgYWxpYXM6IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwocmF3LmFsaWFzKSA/PyBkZWZhdWx0QWxpYXMobmFtZSksXG4gICAgLi4uKHJhdy5wcmltYXJ5S2V5ID8geyBwcmltYXJ5S2V5OiByYXcucHJpbWFyeUtleSB9IDoge30pLFxuICAgIC4uLihyYXcuY29sdW1ucyAmJiByYXcuY29sdW1ucy5sZW5ndGggPiAwID8geyBjb2x1bW5zOiBbLi4ucmF3LmNvbHVtbnNdIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBQYXJzZSBhbmQgdmFsaWRhdGUgYSB7QGxpbmsgU2VhcmNoTW9kZX0gZnJvbSBjb25maWcgb3IgYW4gZW52IHZhci4gKi9cbmZ1bmN0aW9uIHJlc29sdmVNb2RlKGNvbmZpZ3VyZWQ6IFNlYXJjaE1vZGUgfCB1bmRlZmluZWQpOiBTZWFyY2hNb2RlIHtcbiAgY29uc3QgcmF3ID0gY29uZmlndXJlZCA/PyBjb25maWdVdGlscy50ZXh0KFwiU0VBUkNIX01PREVcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICBpZiAocmF3ID09PSB1bmRlZmluZWQpIHJldHVybiBERUZBVUxUX01PREU7XG4gIGlmIChyYXcgIT09IFwiaHlicmlkXCIgJiYgcmF3ICE9PSBcInZlY3RvclwiICYmIHJhdyAhPT0gXCJrZXl3b3JkXCIpIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKFxuICAgICAgJ21vZGUgbXVzdCBiZSBcImh5YnJpZFwiLCBcInZlY3RvclwiIG9yIFwia2V5d29yZFwiIChlbnY6IFNFQVJDSF9NT0RFKScsXG4gICAgICB7IGNvbnRleHQ6IHsgZmllbGQ6IFwibW9kZVwiLCBlbnZWYXI6IFwiU0VBUkNIX01PREVcIiB9IH0sXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmF3O1xufVxuXG4vKipcbiAqIFJlc29sdmUgcGx1Z2luIGNvbmZpZyBvdmVyIGVudmlyb25tZW50IGRlZmF1bHRzIGludG8gdGhlIGNvbmNyZXRlXG4gKiB7QGxpbmsgUmVzb2x2ZWRTZWFyY2hDb25maWd9LiBUaGUgZGVmYXVsdCBpbmRleCBpcyB1bmlvbmVkIGludG8gdGhlIGtub3duXG4gKiBpbmRleGVzIHNvIGl0IGFsd2F5cyBhcHBlYXJzIGluIHRoZSBjYXRhbG9ndWUsIGFsaWFzZXMgYXJlIGRlLWR1cGxpY2F0ZWQsXG4gKiBhbmQgYSBiYWQgbW9kZSB0aHJvd3MgYSB7QGxpbmsgQ29uZmlndXJhdGlvbkVycm9yfSBuYW1pbmcgdGhlIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNlYXJjaENvbmZpZyhjb25maWc6IFNlYXJjaFBsdWdpbkNvbmZpZyA9IHt9KTogUmVzb2x2ZWRTZWFyY2hDb25maWcge1xuICBjb25zdCBkZWZhdWx0SW5kZXhSYXcgPSBjb25maWdVdGlscy5zdHJpbmcoXG4gICAgY29uZmlnLmluZGV4LFxuICAgIFtJTkRFWF9FTlYsIERBVEFCUklDS1NfSU5ERVhfRU5WXSxcbiAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgKTtcblxuICBjb25zdCBjb25maWd1cmVkID0gKGNvbmZpZy5pbmRleGVzID8/IFtdKVxuICAgIC5tYXAodG9SZXNvbHZlZEluZGV4KVxuICAgIC5maWx0ZXIoKGVudHJ5KTogZW50cnkgaXMgUmVzb2x2ZWRJbmRleENvbmZpZyA9PiBlbnRyeSAhPT0gbnVsbCk7XG5cbiAgLy8gRW5zdXJlIHRoZSBkZWZhdWx0IGluZGV4IGlzIHJlcHJlc2VudGVkIGluIHRoZSBrbm93biBzZXQuXG4gIGlmIChkZWZhdWx0SW5kZXhSYXcgJiYgIWNvbmZpZ3VyZWQuc29tZSgoaSkgPT4gaS5uYW1lID09PSBkZWZhdWx0SW5kZXhSYXcpKSB7XG4gICAgY29uc3QgZW52Q29sdW1ucyA9IGNvbmZpZ1V0aWxzLmxpc3QoXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBcIlNFQVJDSF9DT0xVTU5TXCIsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgICApO1xuICAgIGNvbmZpZ3VyZWQudW5zaGlmdCh7XG4gICAgICBuYW1lOiBkZWZhdWx0SW5kZXhSYXcsXG4gICAgICBhbGlhczogZGVmYXVsdEFsaWFzKGRlZmF1bHRJbmRleFJhdyksXG4gICAgICAuLi4oZW52Q29sdW1ucy5sZW5ndGggPiAwID8geyBjb2x1bW5zOiBlbnZDb2x1bW5zIH0gOiB7fSksXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBzZWVuQWxpYXNlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBpbmRleGVzID0gY29uZmlndXJlZC5tYXAoKGVudHJ5KSA9PiB7XG4gICAgbGV0IGFsaWFzID0gZW50cnkuYWxpYXM7XG4gICAgd2hpbGUgKHNlZW5BbGlhc2VzLmhhcyhhbGlhcykpIGFsaWFzID0gYCR7YWxpYXN9X2A7XG4gICAgc2VlbkFsaWFzZXMuYWRkKGFsaWFzKTtcbiAgICByZXR1cm4geyAuLi5lbnRyeSwgYWxpYXMgfTtcbiAgfSk7XG5cbiAgY29uc3QgZGVmYXVsdEluZGV4ID0gZGVmYXVsdEluZGV4UmF3ID8/IGluZGV4ZXNbMF0/Lm5hbWU7XG4gIGNvbnN0IGNvbHVtbnMgPSBjb25maWdVdGlscy5saXN0KFxuICAgIGNvbmZpZy5jb2x1bW5zLFxuICAgIFwiU0VBUkNIX0NPTFVNTlNcIixcbiAgICB1bmRlZmluZWQsXG4gICAgY29uZmlnVXRpbHMuRU5WX09OTFksXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5vYmplY3Qub3B0aW9uYWwoXCJkZWZhdWx0SW5kZXhcIiwgZGVmYXVsdEluZGV4KSxcbiAgICBpbmRleGVzLFxuICAgIC4uLm9iamVjdC5vcHRpb25hbChcbiAgICAgIFwiZW5kcG9pbnRcIixcbiAgICAgIGNvbmZpZ1V0aWxzLnN0cmluZyhjb25maWcuZW5kcG9pbnQsIEVORFBPSU5UX0VOViwgY29uZmlnVXRpbHMuRU5WX09OTFkpLFxuICAgICksXG4gICAgLi4uKGNvbHVtbnMubGVuZ3RoID4gMCA/IHsgY29sdW1ucyB9IDoge30pLFxuICAgIHBhZ2VTaXplOiBjb25maWdVdGlscy5wb3NpdGl2ZUludChcbiAgICAgIGNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIFwiU0VBUkNIX1BBR0VfU0laRVwiLFxuICAgICAgREVGQVVMVF9QQUdFX1NJWkUsXG4gICAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgICApLFxuICAgIG1vZGU6IHJlc29sdmVNb2RlKGNvbmZpZy5tb2RlKSxcbiAgICAuLi5vYmplY3Qub3B0aW9uYWwoXG4gICAgICBcImVtYmVkZGluZ01vZGVsXCIsXG4gICAgICBjb25maWdVdGlscy5zdHJpbmcoY29uZmlnLmVtYmVkZGluZ01vZGVsLCBcIlNFQVJDSF9FTUJFRERJTkdfTU9ERUxcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpLFxuICAgICksXG4gICAgYmFzZVBhdGg6IERFRkFVTFRfQkFTRV9QQVRILFxuICAgIHRpbWVvdXRNczogY29uZmlnVXRpbHMucG9zaXRpdmVJbnQoXG4gICAgICBjb25maWcudGltZW91dE1zLFxuICAgICAgXCJTRUFSQ0hfVElNRU9VVF9NU1wiLFxuICAgICAgREVGQVVMVF9USU1FT1VUX01TLFxuICAgICAgY29uZmlnVXRpbHMuRU5WX09OTFksXG4gICAgKSxcbiAgICBhbGxvd1dyaXRlOlxuICAgICAgY29uZmlnVXRpbHMuYm9vbGVhbihjb25maWcuYWxsb3dXcml0ZSwgXCJTRUFSQ0hfV1JJVEVcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpID8/IGZhbHNlLFxuICAgIC4uLihjb25maWcuZW5zdXJlT25TZXR1cCA/IHsgZW5zdXJlT25TZXR1cDogY29uZmlnLmVuc3VyZU9uU2V0dXAgfSA6IHt9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgY2FsbGVyLXN1cHBsaWVkIGluZGV4IHJlZmVyZW5jZSAoYSBmdWxsIFVDIG5hbWUgb3IgYSBjb25maWd1cmVkXG4gKiBhbGlhcykgaW50byBhIGNvbmNyZXRlIGluZGV4IG5hbWUuIEZhbGxzIGJhY2sgdG8gdGhlIGRlZmF1bHQgaW5kZXggd2hlbiB0aGVcbiAqIHJlZmVyZW5jZSBpcyBlbXB0eS4gUmV0dXJucyBgbnVsbGAgd2hlbiBub3RoaW5nIGNhbiBiZSByZXNvbHZlZCBzbyBjYWxsZXJzXG4gKiByYWlzZSBhIHN0YWJsZSwgdXNlci1mYWNpbmcgZXJyb3IgcmF0aGVyIHRoYW4gY2FsbGluZyBhIHBoYW50b20gaW5kZXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSW5kZXhOYW1lKFxuICBjb25maWc6IFJlc29sdmVkU2VhcmNoQ29uZmlnLFxuICByZWZlcmVuY2U6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCByZWYgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKHJlZmVyZW5jZSk7XG4gIGlmIChyZWYgPT09IG51bGwpIHJldHVybiBjb25maWcuZGVmYXVsdEluZGV4ID8/IG51bGw7XG4gIGNvbnN0IGJ5QWxpYXMgPSBjb25maWcuaW5kZXhlcy5maW5kKChpKSA9PiBpLmFsaWFzID09PSByZWYgfHwgaS5uYW1lID09PSByZWYpO1xuICBpZiAoYnlBbGlhcykgcmV0dXJuIGJ5QWxpYXMubmFtZTtcbiAgLy8gQWNjZXB0IGFuIHVucmVnaXN0ZXJlZCBidXQgZnVsbHktcXVhbGlmaWVkIFVDIG5hbWUgKHRocmVlIGRvdHRlZCBwYXJ0cykuXG4gIGlmIChyZWYuc3BsaXQoXCIuXCIpLmZpbHRlcihCb29sZWFuKS5sZW5ndGggPT09IDMpIHJldHVybiByZWY7XG4gIHJldHVybiBjb25maWcuZGVmYXVsdEluZGV4ID8/IG51bGw7XG59XG5cbi8qKiBUaGUga25vd24gY29uZmlnIGZvciBhbiBpbmRleCBuYW1lLCB3aGVuIHRoZSBwbHVnaW4gd2FzIHRvbGQgYWJvdXQgaXQuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhDb25maWdGb3IoXG4gIGNvbmZpZzogUmVzb2x2ZWRTZWFyY2hDb25maWcsXG4gIG5hbWU6IHN0cmluZyxcbik6IFJlc29sdmVkSW5kZXhDb25maWcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gY29uZmlnLmluZGV4ZXMuZmluZCgoaSkgPT4gaS5uYW1lID09PSBuYW1lIHx8IGkuYWxpYXMgPT09IG5hbWUpO1xufVxuIl19
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Shared translation from the browser-safe {@link CreateIndexRequest} wire
3
+ * shape onto the client's {@link CreateIndexOptions}. Lives in its own module
4
+ * because both the Mastra `create_index` tool (`tool.ts`) and the AppKit tool
5
+ * provider (`plugin.ts`) build the same options object, and the mapping (which
6
+ * optional fields to spread, folding in the abort signal) is easy to let drift
7
+ * between the two.
8
+ *
9
+ * @module
10
+ */
11
+ /**
12
+ * Map a validated {@link CreateIndexRequest} onto {@link CreateIndexOptions},
13
+ * spreading only the fields that were supplied so the client's own defaults
14
+ * (endpoint, embedding model, primary key, text column) still apply, and
15
+ * folding in the caller's abort signal.
16
+ */
17
+ export function toCreateIndexOptions(request, signal) {
18
+ return {
19
+ ...(request.sourceTable ? { sourceTable: request.sourceTable } : {}),
20
+ ...(request.primaryKey ? { primaryKey: request.primaryKey } : {}),
21
+ ...(request.embeddingSourceColumn
22
+ ? { embeddingSourceColumn: request.embeddingSourceColumn }
23
+ : {}),
24
+ ...(request.embeddingModel ? { embeddingModel: request.embeddingModel } : {}),
25
+ ...(request.endpoint ? { endpoint: request.endpoint } : {}),
26
+ ...(request.embeddingDimension !== undefined
27
+ ? { embeddingDimension: request.embeddingDimension }
28
+ : {}),
29
+ ...(request.pipelineType ? { pipelineType: request.pipelineType } : {}),
30
+ ...(request.columnsToSync ? { columnsToSync: request.columnsToSync } : {}),
31
+ ...(signal ? { signal } : {}),
32
+ };
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUtIOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxPQUEyQixFQUMzQixNQUFvQjtJQUVwQixPQUFPO1FBQ0wsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BFLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRSxHQUFHLENBQUMsT0FBTyxDQUFDLHFCQUFxQjtZQUMvQixDQUFDLENBQUMsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLENBQUMscUJBQXFCLEVBQUU7WUFDMUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM3RSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0QsR0FBRyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsS0FBSyxTQUFTO1lBQzFDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtZQUNwRCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZFLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDOUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNoYXJlZCB0cmFuc2xhdGlvbiBmcm9tIHRoZSBicm93c2VyLXNhZmUge0BsaW5rIENyZWF0ZUluZGV4UmVxdWVzdH0gd2lyZVxuICogc2hhcGUgb250byB0aGUgY2xpZW50J3Mge0BsaW5rIENyZWF0ZUluZGV4T3B0aW9uc30uIExpdmVzIGluIGl0cyBvd24gbW9kdWxlXG4gKiBiZWNhdXNlIGJvdGggdGhlIE1hc3RyYSBgY3JlYXRlX2luZGV4YCB0b29sIChgdG9vbC50c2ApIGFuZCB0aGUgQXBwS2l0IHRvb2xcbiAqIHByb3ZpZGVyIChgcGx1Z2luLnRzYCkgYnVpbGQgdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QsIGFuZCB0aGUgbWFwcGluZyAod2hpY2hcbiAqIG9wdGlvbmFsIGZpZWxkcyB0byBzcHJlYWQsIGZvbGRpbmcgaW4gdGhlIGFib3J0IHNpZ25hbCkgaXMgZWFzeSB0byBsZXQgZHJpZnRcbiAqIGJldHdlZW4gdGhlIHR3by5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDcmVhdGVJbmRleFJlcXVlc3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtc2VhcmNoXCI7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZUluZGV4T3B0aW9ucyB9IGZyb20gXCIuL2NsaWVudC50c1wiO1xuXG4vKipcbiAqIE1hcCBhIHZhbGlkYXRlZCB7QGxpbmsgQ3JlYXRlSW5kZXhSZXF1ZXN0fSBvbnRvIHtAbGluayBDcmVhdGVJbmRleE9wdGlvbnN9LFxuICogc3ByZWFkaW5nIG9ubHkgdGhlIGZpZWxkcyB0aGF0IHdlcmUgc3VwcGxpZWQgc28gdGhlIGNsaWVudCdzIG93biBkZWZhdWx0c1xuICogKGVuZHBvaW50LCBlbWJlZGRpbmcgbW9kZWwsIHByaW1hcnkga2V5LCB0ZXh0IGNvbHVtbikgc3RpbGwgYXBwbHksIGFuZFxuICogZm9sZGluZyBpbiB0aGUgY2FsbGVyJ3MgYWJvcnQgc2lnbmFsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DcmVhdGVJbmRleE9wdGlvbnMoXG4gIHJlcXVlc3Q6IENyZWF0ZUluZGV4UmVxdWVzdCxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBDcmVhdGVJbmRleE9wdGlvbnMge1xuICByZXR1cm4ge1xuICAgIC4uLihyZXF1ZXN0LnNvdXJjZVRhYmxlID8geyBzb3VyY2VUYWJsZTogcmVxdWVzdC5zb3VyY2VUYWJsZSB9IDoge30pLFxuICAgIC4uLihyZXF1ZXN0LnByaW1hcnlLZXkgPyB7IHByaW1hcnlLZXk6IHJlcXVlc3QucHJpbWFyeUtleSB9IDoge30pLFxuICAgIC4uLihyZXF1ZXN0LmVtYmVkZGluZ1NvdXJjZUNvbHVtblxuICAgICAgPyB7IGVtYmVkZGluZ1NvdXJjZUNvbHVtbjogcmVxdWVzdC5lbWJlZGRpbmdTb3VyY2VDb2x1bW4gfVxuICAgICAgOiB7fSksXG4gICAgLi4uKHJlcXVlc3QuZW1iZWRkaW5nTW9kZWwgPyB7IGVtYmVkZGluZ01vZGVsOiByZXF1ZXN0LmVtYmVkZGluZ01vZGVsIH0gOiB7fSksXG4gICAgLi4uKHJlcXVlc3QuZW5kcG9pbnQgPyB7IGVuZHBvaW50OiByZXF1ZXN0LmVuZHBvaW50IH0gOiB7fSksXG4gICAgLi4uKHJlcXVlc3QuZW1iZWRkaW5nRGltZW5zaW9uICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBlbWJlZGRpbmdEaW1lbnNpb246IHJlcXVlc3QuZW1iZWRkaW5nRGltZW5zaW9uIH1cbiAgICAgIDoge30pLFxuICAgIC4uLihyZXF1ZXN0LnBpcGVsaW5lVHlwZSA/IHsgcGlwZWxpbmVUeXBlOiByZXF1ZXN0LnBpcGVsaW5lVHlwZSB9IDoge30pLFxuICAgIC4uLihyZXF1ZXN0LmNvbHVtbnNUb1N5bmMgPyB7IGNvbHVtbnNUb1N5bmM6IHJlcXVlc3QuY29sdW1uc1RvU3luYyB9IDoge30pLFxuICAgIC4uLihzaWduYWwgPyB7IHNpZ25hbCB9IDoge30pLFxuICB9O1xufVxuIl19
@@ -4,8 +4,8 @@
4
4
  * @module
5
5
  */
6
6
  import { lakebase, Plugin, toPlugin, ValidationError, } from "@databricks/appkit";
7
- import { plugin as appkitPlugin } from "@dbx-tools/appkit";
8
- import { log, object, string } from "@dbx-tools/shared-core";
7
+ import { pluginRegistry } from "@dbx-tools/appkit";
8
+ import { log, object, stringUtils } from "@dbx-tools/shared-core";
9
9
  import { LakebaseSearchBackend } from "./lakebase.js";
10
10
  const logger = log.logger("search/lakebase-plugin");
11
11
  const CONFIG_SCHEMA = {
@@ -49,8 +49,8 @@ export class LakebaseAiSearchPlugin extends Plugin {
49
49
  const indexes = this.indexes();
50
50
  for (const index of indexes)
51
51
  this.validateAuth(index);
52
- const lake = appkitPlugin.require(this.context, lakebase, this);
53
- this.backend = new LakebaseSearchBackend({ managedPool: () => lake.exports().pool }, string.trimToNull(this.config.schema) ?? "public");
52
+ const lake = pluginRegistry.require(this.context, lakebase, this);
53
+ this.backend = new LakebaseSearchBackend({ managedPool: () => lake.exports().pool }, stringUtils.trimToNull(this.config.schema) ?? "public");
54
54
  for (const index of indexes) {
55
55
  await this.backend.provision(index.indexName, {
56
56
  textColumn: index.config.textColumn ?? "text",
@@ -59,7 +59,7 @@ export class LakebaseAiSearchPlugin extends Plugin {
59
59
  }
60
60
  logger.info("ready", {
61
61
  indexes: this.indexes().map((index) => index.alias),
62
- schema: string.trimToNull(this.config.schema) ?? "public",
62
+ schema: stringUtils.trimToNull(this.config.schema) ?? "public",
63
63
  });
64
64
  }
65
65
  injectRoutes(router) {
@@ -176,7 +176,7 @@ export class LakebaseAiSearchPlugin extends Plugin {
176
176
  indexes() {
177
177
  return Object.entries(this.config.indexes ?? {}).map(([alias, config]) => ({
178
178
  alias,
179
- indexName: string.trimToNull(config.indexName) ?? alias,
179
+ indexName: stringUtils.trimToNull(config.indexName) ?? alias,
180
180
  config,
181
181
  }));
182
182
  }
@@ -208,4 +208,4 @@ export class LakebaseAiSearchPlugin extends Plugin {
208
208
  }
209
209
  /** AppKit-compatible Lakebase AI Search provider. */
210
210
  export const lakebaseAiSearch = toPlugin(LakebaseAiSearchPlugin);
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFrZWJhc2UtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xha2ViYXNlLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLGVBQWUsR0FJaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUUsTUFBTSxJQUFJLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFzQnBELE1BQU0sYUFBYSxHQUFnQjtJQUNqQyxJQUFJLEVBQUUsUUFBUTtJQUNkLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQztJQUNyQixVQUFVLEVBQUU7UUFDVixPQUFPLEVBQUU7WUFDUCxJQUFJLEVBQUUsUUFBUTtZQUNkLG9CQUFvQixFQUFFO2dCQUNwQixJQUFJLEVBQUUsUUFBUTtnQkFDZCxVQUFVLEVBQUU7b0JBQ1YsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtvQkFDN0IsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUU7b0JBQ3JELFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7b0JBQzlCLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUNsQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFO29CQUMxRCxVQUFV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b3ZpZGVyIGJhY2tlZCBieSBMYWtlYmFzZSBmdWxsLXRleHQgc2VhcmNoLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBsYWtlYmFzZSxcbiAgUGx1Z2luLFxuICB0b1BsdWdpbixcbiAgVmFsaWRhdGlvbkVycm9yLFxuICB0eXBlIEJhc2VQbHVnaW5Db25maWcsXG4gIHR5cGUgSUFwcFJvdXRlcixcbiAgdHlwZSBQbHVnaW5NYW5pZmVzdCxcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBJbmRleENvbmZpZywgU2VhcmNoUmVxdWVzdCwgU2VhcmNoUmVzcG9uc2UgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0L2JldGFcIjtcbmltcG9ydCB7IHBsdWdpbiBhcyBhcHBraXRQbHVnaW4gfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7IGxvZywgb2JqZWN0LCBzdHJpbmcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBTZWFyY2hEb2N1bWVudCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1zZWFyY2hcIjtcbmltcG9ydCB0eXBlIGV4cHJlc3MgZnJvbSBcImV4cHJlc3NcIjtcbmltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTcgfSBmcm9tIFwianNvbi1zY2hlbWFcIjtcbmltcG9ydCB7IExha2ViYXNlU2VhcmNoQmFja2VuZCB9IGZyb20gXCIuL2xha2ViYXNlLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJzZWFyY2gvbGFrZWJhc2UtcGx1Z2luXCIpO1xuXG4vKiogUGVyLWFsaWFzIExha2ViYXNlIHNlYXJjaCBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYmFzZUFpU2VhcmNoSW5kZXhDb25maWcgZXh0ZW5kcyBPbWl0PFxuICBJbmRleENvbmZpZyxcbiAgXCJlbWJlZGRpbmdGblwiIHwgXCJlbmRwb2ludE5hbWVcIiB8IFwicGFnaW5hdGlvblwiIHwgXCJyZXJhbmtlclwiXG4+IHtcbiAgLyoqIERvY3VtZW50cyB1c2VkIHRvIHNlZWQgYW4gZW1wdHkgZnVsbC10ZXh0IHRhYmxlIGR1cmluZyBzZXR1cC4gKi9cbiAgZG9jdW1lbnRzPzogU2VhcmNoRG9jdW1lbnRbXTtcbiAgLyoqIERvY3VtZW50IGZpZWxkIGluZGV4ZWQgZmlyc3QuIERlZmF1bHRzIHRvIGB0ZXh0YC4gKi9cbiAgdGV4dENvbHVtbj86IHN0cmluZztcbn1cblxuLyoqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBMYWtlYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBBcHBLaXQgQUkgU2VhcmNoLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYmFzZUFpU2VhcmNoQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIGluZGV4ZXM/OiBSZWNvcmQ8c3RyaW5nLCBMYWtlYmFzZUFpU2VhcmNoSW5kZXhDb25maWc+O1xuICAvKiogUG9zdGdyZVNRTCBzY2hlbWEgdGhhdCBvd25zIHRoZSBnZW5lcmF0ZWQgZnVsbC10ZXh0IHRhYmxlcy4gKi9cbiAgc2NoZW1hPzogc3RyaW5nO1xuICAvKiogRW5hYmxlIHRoZSBkb2N1bWVudCB1cHNlcnQgcm91dGUgYW5kIGV4cG9ydGVkIG1ldGhvZC4gKi9cbiAgYWxsb3dXcml0ZT86IGJvb2xlYW47XG59XG5cbmNvbnN0IENPTkZJR19TQ0hFTUE6IEpTT05TY2hlbWE3ID0ge1xuICB0eXBlOiBcIm9iamVjdFwiLFxuICByZXF1aXJlZDogW1wiaW5kZXhlc1wiXSxcbiAgcHJvcGVydGllczoge1xuICAgIGluZGV4ZXM6IHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgaW5kZXhOYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICBjb2x1bW5zOiB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgbnVtUmVzdWx0czogeyB0eXBlOiBcIm51bWJlclwiIH0sXG4gICAgICAgICAgcXVlcnlUeXBlOiB7IGVudW06IFtcImZ1bGxfdGV4dFwiXSB9LFxuICAgICAgICAgIGF1dGg6IHsgZW51bTogW1wic2VydmljZS1wcmluY2lwYWxcIiwgXCJvbi1iZWhhbGYtb2YtdXNlclwiXSB9LFxuICAgICAgICAgIHRleHRDb2x1bW46IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgIGRvY3VtZW50czogeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwib2JqZWN0XCIgfSB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgYWxsb3dXcml0ZTogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICB9LFxufTtcblxuaW50ZXJmYWNlIFJlc29sdmVkTGFrZWJhc2VJbmRleCB7XG4gIGFsaWFzOiBzdHJpbmc7XG4gIGluZGV4TmFtZTogc3RyaW5nO1xuICBjb25maWc6IExha2ViYXNlQWlTZWFyY2hJbmRleENvbmZpZztcbn1cblxuZnVuY3Rpb24gcm91dGVQYXJhbSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyAodmFsdWVbMF0gPz8gXCJcIikgOiB2YWx1ZTtcbn1cblxuLyoqIExha2ViYXNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBuYXRpdmUgQXBwS2l0IGBhaVNlYXJjaGAgY29udHJhY3QuICovXG5leHBvcnQgY2xhc3MgTGFrZWJhc2VBaVNlYXJjaFBsdWdpbiBleHRlbmRzIFBsdWdpbjxMYWtlYmFzZUFpU2VhcmNoQ29uZmlnPiB7XG4gIHN0YXRpYyBtYW5pZmVzdCA9IHtcbiAgICBuYW1lOiBcImFpU2VhcmNoXCIsXG4gICAgZGlzcGxheU5hbWU6IFwiTGFrZWJhc2UgQUkgU2VhcmNoXCIsXG4gICAgZGVzY3JpcHRpb246IFwiQXBwS2l0IEFJIFNlYXJjaCBjb250cmFjdCBiYWNrZWQgYnkgUG9zdGdyZVNRTCBmdWxsLXRleHQgc2VhcmNoXCIsXG4gICAgc3RhYmlsaXR5OiBcImJldGFcIixcbiAgICByZXNvdXJjZXM6IHsgcmVxdWlyZWQ6IFtdLCBvcHRpb25hbDogW10gfSxcbiAgICBjb25maWc6IHsgc2NoZW1hOiBDT05GSUdfU0NIRU1BIH0sXG4gIH0gc2F0aXNmaWVzIFBsdWdpbk1hbmlmZXN0PFwiYWlTZWFyY2hcIj47XG5cbiAgZGVjbGFyZSBwcm90ZWN0ZWQgY29uZmlnOiBMYWtlYmFzZUFpU2VhcmNoQ29uZmlnO1xuICBwcml2YXRlIGJhY2tlbmQ6IExha2ViYXNlU2VhcmNoQmFja2VuZCB8IHVuZGVmaW5lZDtcblxuICBvdmVycmlkZSBhc3luYyBzZXR1cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpbmRleGVzID0gdGhpcy5pbmRleGVzKCk7XG4gICAgZm9yIChjb25zdCBpbmRleCBvZiBpbmRleGVzKSB0aGlzLnZhbGlkYXRlQXV0aChpbmRleCk7XG4gICAgY29uc3QgbGFrZSA9IGFwcGtpdFBsdWdpbi5yZXF1aXJlKHRoaXMuY29udGV4dCwgbGFrZWJhc2UsIHRoaXMpO1xuICAgIHRoaXMuYmFja2VuZCA9IG5ldyBMYWtlYmFzZVNlYXJjaEJhY2tlbmQoXG4gICAgICB7IG1hbmFnZWRQb29sOiAoKSA9PiBsYWtlLmV4cG9ydHMoKS5wb29sIH0sXG4gICAgICBzdHJpbmcudHJpbVRvTnVsbCh0aGlzLmNvbmZpZy5zY2hlbWEpID8/IFwicHVibGljXCIsXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuYmFja2VuZC5wcm92aXNpb24oaW5kZXguaW5kZXhOYW1lLCB7XG4gICAgICAgIHRleHRDb2x1bW46IGluZGV4LmNvbmZpZy50ZXh0Q29sdW1uID8/IFwidGV4dFwiLFxuICAgICAgICAuLi4oaW5kZXguY29uZmlnLmRvY3VtZW50cyA/IHsgc2VlZDogaW5kZXguY29uZmlnLmRvY3VtZW50cyB9IDoge30pLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGxvZ2dlci5pbmZvKFwicmVhZHlcIiwge1xuICAgICAgaW5kZXhlczogdGhpcy5pbmRleGVzKCkubWFwKChpbmRleCkgPT4gaW5kZXguYWxpYXMpLFxuICAgICAgc2NoZW1hOiBzdHJpbmcudHJpbVRvTnVsbCh0aGlzLmNvbmZpZy5zY2hlbWEpID8/IFwicHVibGljXCIsXG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBpbmplY3RSb3V0ZXMocm91dGVyOiBJQXBwUm91dGVyKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwicXVlcnlcIixcbiAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICBwYXRoOiBcIi86YWxpYXMvcXVlcnlcIixcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXE6IGV4cHJlc3MuUmVxdWVzdCwgcmVzOiBleHByZXNzLlJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYWxpYXMgPSByb3V0ZVBhcmFtKHJlcS5wYXJhbXMuYWxpYXMpO1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXNvbHZlSW5kZXgoYWxpYXMpO1xuICAgICAgICAgIGNvbnN0IHsgY29sdW1uczogX3VudHJ1c3RlZENvbHVtbnMsIC4uLnJlcXVlc3QgfSA9IG9iamVjdC5pc1JlY29yZChyZXEuYm9keSlcbiAgICAgICAgICAgID8gcmVxLmJvZHlcbiAgICAgICAgICAgIDoge307XG4gICAgICAgICAgcmVzLmpzb24oYXdhaXQgdGhpcy5yb3V0ZVJ1bnRpbWUoaW5kZXgsIHJlcSkucXVlcnkoYWxpYXMsIHJlcXVlc3QgYXMgU2VhcmNoUmVxdWVzdCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHtcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiU2VhcmNoIGZhaWxlZFwiLFxuICAgICAgICAgICAgcGx1Z2luOiB0aGlzLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwiZ2V0Q29uZmlnXCIsXG4gICAgICBtZXRob2Q6IFwiZ2V0XCIsXG4gICAgICBwYXRoOiBcIi86YWxpYXMvY29uZmlnXCIsXG4gICAgICBoYW5kbGVyOiBhc3luYyAocmVxOiBleHByZXNzLlJlcXVlc3QsIHJlczogZXhwcmVzcy5SZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzb2x2ZUluZGV4KHJvdXRlUGFyYW0ocmVxLnBhcmFtcy5hbGlhcykpO1xuICAgICAgICByZXMuanNvbih7XG4gICAgICAgICAgYWxpYXM6IGluZGV4LmFsaWFzLFxuICAgICAgICAgIGNvbHVtbnM6IGluZGV4LmNvbmZpZy5jb2x1bW5zLFxuICAgICAgICAgIHF1ZXJ5VHlwZTogXCJmdWxsX3RleHRcIixcbiAgICAgICAgICBudW1SZXN1bHRzOiBpbmRleC5jb25maWcubnVtUmVzdWx0cyA/PyAyMCxcbiAgICAgICAgICByZXJhbmtlcjogZmFsc2UsXG4gICAgICAgICAgcGFnaW5hdGlvbjogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5jb25maWcuYWxsb3dXcml0ZSkge1xuICAgICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgICAgbmFtZTogXCJhZGREb2N1bWVudHNcIixcbiAgICAgICAgbWV0aG9kOiBcInBvc3RcIixcbiAgICAgICAgcGF0aDogXCIvOmFsaWFzL2RvY3VtZW50c1wiLFxuICAgICAgICBoYW5kbGVyOiBhc3luYyAocmVxOiBleHByZXNzLlJlcXVlc3QsIHJlczogZXhwcmVzcy5SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFsaWFzID0gcm91dGVQYXJhbShyZXEucGFyYW1zLmFsaWFzKTtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzb2x2ZUluZGV4KGFsaWFzKTtcbiAgICAgICAgICBjb25zdCBkb2N1bWVudHMgPSBBcnJheS5pc0FycmF5KHJlcS5ib2R5Py5kb2N1bWVudHMpXG4gICAgICAgICAgICA/IHJlcS5ib2R5LmRvY3VtZW50cy5maWx0ZXIob2JqZWN0LmlzUmVjb3JkKVxuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICByZXMuanNvbihhd2FpdCB0aGlzLnJvdXRlUnVudGltZShpbmRleCwgcmVxKS5hZGREb2N1bWVudHMoYWxpYXMsIGRvY3VtZW50cykpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFF1ZXJ5IG9uZSBjb25maWd1cmVkIExha2ViYXNlIGZ1bGwtdGV4dCBpbmRleCB1c2luZyBBcHBLaXQncyByZXNwb25zZSBzaGFwZS4gKi9cbiAgYXN5bmMgcXVlcnkoXG4gICAgYWxpYXM6IHN0cmluZyxcbiAgICByZXF1ZXN0OiBTZWFyY2hSZXF1ZXN0LFxuICApOiBQcm9taXNlPFNlYXJjaFJlc3BvbnNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ge1xuICAgIGlmICghcmVxdWVzdC5xdWVyeVRleHQpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXCJMYWtlYmFzZSBBSSBTZWFyY2ggcmVxdWlyZXMgcXVlcnlUZXh0XCIpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5xdWVyeVZlY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcIkxha2ViYXNlIEFJIFNlYXJjaCBkb2VzIG5vdCBhY2NlcHQgcXVlcnlWZWN0b3JcIik7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnF1ZXJ5VHlwZSAmJiByZXF1ZXN0LnF1ZXJ5VHlwZSAhPT0gXCJmdWxsX3RleHRcIikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcIkxha2ViYXNlIEFJIFNlYXJjaCBzdXBwb3J0cyBvbmx5IGZ1bGxfdGV4dCBxdWVyaWVzXCIpO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzb2x2ZUluZGV4KGFsaWFzKTtcbiAgICBjb25zdCBzdGFydGVkQXQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVpcmVCYWNrZW5kKCkuc2VhcmNoKGluZGV4LmluZGV4TmFtZSwgcmVxdWVzdC5xdWVyeVRleHQsIHtcbiAgICAgIGxpbWl0OiByZXF1ZXN0Lm51bVJlc3VsdHMgPz8gaW5kZXguY29uZmlnLm51bVJlc3VsdHMgPz8gMjAsXG4gICAgICAuLi4ocmVxdWVzdC5maWx0ZXJzID8geyBmaWx0ZXI6IHJlcXVlc3QuZmlsdGVycyB9IDoge30pLFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbHVtbnMgPSByZXF1ZXN0LmNvbHVtbnMgPz8gaW5kZXguY29uZmlnLmNvbHVtbnM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3VsdHM6IHJlc3VsdC5oaXRzLm1hcCgoaGl0KSA9PiAoe1xuICAgICAgICBzY29yZTogaGl0LnNjb3JlLFxuICAgICAgICBkYXRhOiB0aGlzLnByb2plY3QoeyBpZDogaGl0LmlkLCAuLi5oaXQuZmllbGRzIH0sIGNvbHVtbnMpLFxuICAgICAgfSkpLFxuICAgICAgdG90YWxDb3VudDogcmVzdWx0LmNvdW50LFxuICAgICAgcXVlcnlUaW1lTXM6IE1hdGgubWF4KDAsIHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRlZEF0KSxcbiAgICAgIHF1ZXJ5VHlwZTogXCJmdWxsX3RleHRcIixcbiAgICAgIG5leHRQYWdlVG9rZW46IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBBZGQgb3IgdXBkYXRlIGRvY3VtZW50cyBpbiBvbmUgY29uZmlndXJlZCBMYWtlYmFzZSBmdWxsLXRleHQgaW5kZXguICovXG4gIGFzeW5jIGFkZERvY3VtZW50cyhhbGlhczogc3RyaW5nLCBkb2N1bWVudHM6IFNlYXJjaERvY3VtZW50W10pIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmFsbG93V3JpdGUpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXCJMYWtlYmFzZSBBSSBTZWFyY2ggd3JpdGVzIGFyZSBkaXNhYmxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc29sdmVJbmRleChhbGlhcyk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZUJhY2tlbmQoKS5hZGREb2N1bWVudHMoXG4gICAgICBpbmRleC5pbmRleE5hbWUsXG4gICAgICBkb2N1bWVudHMuZmlsdGVyKG9iamVjdC5pc1JlY29yZCksXG4gICAgICBpbmRleC5jb25maWcudGV4dENvbHVtbiA/PyBcInRleHRcIixcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgY2xpZW50Q29uZmlnKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpbmRleGVzOiB0aGlzLmluZGV4ZXMoKS5tYXAoKGluZGV4KSA9PiAoe1xuICAgICAgICBhbGlhczogaW5kZXguYWxpYXMsXG4gICAgICAgIHF1ZXJ5VHlwZTogXCJmdWxsX3RleHRcIiBhcyBjb25zdCxcbiAgICAgICAgcGFnaW5hdGlvbjogZmFsc2UsXG4gICAgICB9KSksXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3ZpZGVyS2luZDogXCJsYWtlYmFzZVwiIGFzIGNvbnN0LFxuICAgICAgcXVlcnk6IHRoaXMucXVlcnkuYmluZCh0aGlzKSxcbiAgICAgIGFkZERvY3VtZW50czogdGhpcy5hZGREb2N1bWVudHMuYmluZCh0aGlzKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5iYWNrZW5kPy5jbG9zZSgpO1xuICAgIHRoaXMuYmFja2VuZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgaW5kZXhlcygpOiBSZXNvbHZlZExha2ViYXNlSW5kZXhbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuY29uZmlnLmluZGV4ZXMgPz8ge30pLm1hcCgoW2FsaWFzLCBjb25maWddKSA9PiAoe1xuICAgICAgYWxpYXMsXG4gICAgICBpbmRleE5hbWU6IHN0cmluZy50cmltVG9OdWxsKGNvbmZpZy5pbmRleE5hbWUpID8/IGFsaWFzLFxuICAgICAgY29uZmlnLFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUluZGV4KGFsaWFzOiBzdHJpbmcpOiBSZXNvbHZlZExha2ViYXNlSW5kZXgge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleGVzKCkuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuYWxpYXMgPT09IGFsaWFzKTtcbiAgICBpZiAoIWluZGV4KSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBVbmtub3duIEFJIFNlYXJjaCBpbmRleCBhbGlhcyBcIiR7YWxpYXN9XCJgKTtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlQXV0aChpbmRleDogUmVzb2x2ZWRMYWtlYmFzZUluZGV4KTogdm9pZCB7XG4gICAgY29uc3QgYXV0aCA9IChpbmRleC5jb25maWcgYXMgeyBhdXRoPzogdW5rbm93biB9KS5hdXRoO1xuICAgIGlmIChhdXRoICE9PSB1bmRlZmluZWQgJiYgYXV0aCAhPT0gXCJzZXJ2aWNlLXByaW5jaXBhbFwiICYmIGF1dGggIT09IFwib24tYmVoYWxmLW9mLXVzZXJcIikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVW5rbm93biBBSSBTZWFyY2ggYXV0aCBtb2RlIGZvciBcIiR7aW5kZXguYWxpYXN9XCJgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJvdXRlUnVudGltZShpbmRleDogUmVzb2x2ZWRMYWtlYmFzZUluZGV4LCByZXE6IGV4cHJlc3MuUmVxdWVzdCk6IHRoaXMge1xuICAgIHJldHVybiBpbmRleC5jb25maWcuYXV0aCA9PT0gXCJvbi1iZWhhbGYtb2YtdXNlclwiID8gdGhpcy5hc1VzZXIocmVxKSA6IHRoaXM7XG4gIH1cblxuICBwcml2YXRlIHJlcXVpcmVCYWNrZW5kKCk6IExha2ViYXNlU2VhcmNoQmFja2VuZCB7XG4gICAgaWYgKCF0aGlzLmJhY2tlbmQpIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXCJMYWtlYmFzZSBBSSBTZWFyY2ggaXMgbm90IGluaXRpYWxpemVkXCIpO1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQ7XG4gIH1cblxuICBwcml2YXRlIHByb2plY3QoXG4gICAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgY29sdW1uczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBpZiAoIWNvbHVtbnM/Lmxlbmd0aCkgcmV0dXJuIGRhdGE7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIGNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbiBpbiBkYXRhKS5tYXAoKGNvbHVtbikgPT4gW2NvbHVtbiwgZGF0YVtjb2x1bW5dXSksXG4gICAgKTtcbiAgfVxufVxuXG4vKiogQXBwS2l0LWNvbXBhdGlibGUgTGFrZWJhc2UgQUkgU2VhcmNoIHByb3ZpZGVyLiAqL1xuZXhwb3J0IGNvbnN0IGxha2ViYXNlQWlTZWFyY2ggPSB0b1BsdWdpbihMYWtlYmFzZUFpU2VhcmNoUGx1Z2luKTtcbiJdfQ==
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFrZWJhc2UtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xha2ViYXNlLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLGVBQWUsR0FJaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQXNCcEQsTUFBTSxhQUFhLEdBQWdCO0lBQ2pDLElBQUksRUFBRSxRQUFRO0lBQ2QsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDO0lBQ3JCLFVBQVUsRUFBRTtRQUNWLE9BQU8sRUFBRTtZQUNQLElBQUksRUFBRSxRQUFRO1lBQ2Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLElBQUksRUFBRSxRQUFRO2dCQUNkLFVBQVUsRUFBRTtvQkFDVixTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO29CQUM3QixPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRTtvQkFDckQsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtvQkFDOUIsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQ2xDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDLEVBQUU7b0JBQzFELFVBQVUsRUFBRSxFQUFF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a2VkIGJ5IExha2ViYXNlIGZ1bGwtdGV4dCBzZWFyY2guXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7XG4gIGxha2ViYXNlLFxuICBQbHVnaW4sXG4gIHRvUGx1Z2luLFxuICBWYWxpZGF0aW9uRXJyb3IsXG4gIHR5cGUgQmFzZVBsdWdpbkNvbmZpZyxcbiAgdHlwZSBJQXBwUm91dGVyLFxuICB0eXBlIFBsdWdpbk1hbmlmZXN0LFxufSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEluZGV4Q29uZmlnLCBTZWFyY2hSZXF1ZXN0LCBTZWFyY2hSZXNwb25zZSB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXQvYmV0YVwiO1xuaW1wb3J0IHsgcGx1Z2luUmVnaXN0cnkgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7IGxvZywgb2JqZWN0LCBzdHJpbmdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IFNlYXJjaERvY3VtZW50IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLXNlYXJjaFwiO1xuaW1wb3J0IHR5cGUgZXhwcmVzcyBmcm9tIFwiZXhwcmVzc1wiO1xuaW1wb3J0IHR5cGUgeyBKU09OU2NoZW1hNyB9IGZyb20gXCJqc29uLXNjaGVtYVwiO1xuaW1wb3J0IHsgTGFrZWJhc2VTZWFyY2hCYWNrZW5kIH0gZnJvbSBcIi4vbGFrZWJhc2UudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcInNlYXJjaC9sYWtlYmFzZS1wbHVnaW5cIik7XG5cbi8qKiBQZXItYWxpYXMgTGFrZWJhc2Ugc2VhcmNoIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIExha2ViYXNlQWlTZWFyY2hJbmRleENvbmZpZyBleHRlbmRzIE9taXQ8XG4gIEluZGV4Q29uZmlnLFxuICBcImVtYmVkZGluZ0ZuXCIgfCBcImVuZHBvaW50TmFtZVwiIHwgXCJwYWdpbmF0aW9uXCIgfCBcInJlcmFua2VyXCJcbj4ge1xuICAvKiogRG9jdW1lbnRzIHVzZWQgdG8gc2VlZCBhbiBlbXB0eSBmdWxsLXRleHQgdGFibGUgZHVyaW5nIHNldHVwLiAqL1xuICBkb2N1bWVudHM/OiBTZWFyY2hEb2N1bWVudFtdO1xuICAvKiogRG9jdW1lbnQgZmllbGQgaW5kZXhlZCBmaXJzdC4gRGVmYXVsdHMgdG8gYHRleHRgLiAqL1xuICB0ZXh0Q29sdW1uPzogc3RyaW5nO1xufVxuXG4vKiogQ29uZmlndXJhdGlvbiBmb3IgdGhlIExha2ViYXNlIGltcGxlbWVudGF0aW9uIG9mIEFwcEtpdCBBSSBTZWFyY2guICovXG5leHBvcnQgaW50ZXJmYWNlIExha2ViYXNlQWlTZWFyY2hDb25maWcgZXh0ZW5kcyBCYXNlUGx1Z2luQ29uZmlnIHtcbiAgaW5kZXhlcz86IFJlY29yZDxzdHJpbmcsIExha2ViYXNlQWlTZWFyY2hJbmRleENvbmZpZz47XG4gIC8qKiBQb3N0Z3JlU1FMIHNjaGVtYSB0aGF0IG93bnMgdGhlIGdlbmVyYXRlZCBmdWxsLXRleHQgdGFibGVzLiAqL1xuICBzY2hlbWE/OiBzdHJpbmc7XG4gIC8qKiBFbmFibGUgdGhlIGRvY3VtZW50IHVwc2VydCByb3V0ZSBhbmQgZXhwb3J0ZWQgbWV0aG9kLiAqL1xuICBhbGxvd1dyaXRlPzogYm9vbGVhbjtcbn1cblxuY29uc3QgQ09ORklHX1NDSEVNQTogSlNPTlNjaGVtYTcgPSB7XG4gIHR5cGU6IFwib2JqZWN0XCIsXG4gIHJlcXVpcmVkOiBbXCJpbmRleGVzXCJdLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgaW5kZXhlczoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBpbmRleE5hbWU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgIGNvbHVtbnM6IHsgdHlwZTogXCJhcnJheVwiLCBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0gfSxcbiAgICAgICAgICBudW1SZXN1bHRzOiB7IHR5cGU6IFwibnVtYmVyXCIgfSxcbiAgICAgICAgICBxdWVyeVR5cGU6IHsgZW51bTogW1wiZnVsbF90ZXh0XCJdIH0sXG4gICAgICAgICAgYXV0aDogeyBlbnVtOiBbXCJzZXJ2aWNlLXByaW5jaXBhbFwiLCBcIm9uLWJlaGFsZi1vZi11c2VyXCJdIH0sXG4gICAgICAgICAgdGV4dENvbHVtbjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgZG9jdW1lbnRzOiB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJvYmplY3RcIiB9IH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICBhbGxvd1dyaXRlOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gIH0sXG59O1xuXG5pbnRlcmZhY2UgUmVzb2x2ZWRMYWtlYmFzZUluZGV4IHtcbiAgYWxpYXM6IHN0cmluZztcbiAgaW5kZXhOYW1lOiBzdHJpbmc7XG4gIGNvbmZpZzogTGFrZWJhc2VBaVNlYXJjaEluZGV4Q29uZmlnO1xufVxuXG5mdW5jdGlvbiByb3V0ZVBhcmFtKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/ICh2YWx1ZVswXSA/PyBcIlwiKSA6IHZhbHVlO1xufVxuXG4vKiogTGFrZWJhc2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIG5hdGl2ZSBBcHBLaXQgYGFpU2VhcmNoYCBjb250cmFjdC4gKi9cbmV4cG9ydCBjbGFzcyBMYWtlYmFzZUFpU2VhcmNoUGx1Z2luIGV4dGVuZHMgUGx1Z2luPExha2ViYXNlQWlTZWFyY2hDb25maWc+IHtcbiAgc3RhdGljIG1hbmlmZXN0ID0ge1xuICAgIG5hbWU6IFwiYWlTZWFyY2hcIixcbiAgICBkaXNwbGF5TmFtZTogXCJMYWtlYmFzZSBBSSBTZWFyY2hcIixcbiAgICBkZXNjcmlwdGlvbjogXCJBcHBLaXQgQUkgU2VhcmNoIGNvbnRyYWN0IGJhY2tlZCBieSBQb3N0Z3JlU1FMIGZ1bGwtdGV4dCBzZWFyY2hcIixcbiAgICBzdGFiaWxpdHk6IFwiYmV0YVwiLFxuICAgIHJlc291cmNlczogeyByZXF1aXJlZDogW10sIG9wdGlvbmFsOiBbXSB9LFxuICAgIGNvbmZpZzogeyBzY2hlbWE6IENPTkZJR19TQ0hFTUEgfSxcbiAgfSBzYXRpc2ZpZXMgUGx1Z2luTWFuaWZlc3Q8XCJhaVNlYXJjaFwiPjtcblxuICBkZWNsYXJlIHByb3RlY3RlZCBjb25maWc6IExha2ViYXNlQWlTZWFyY2hDb25maWc7XG4gIHByaXZhdGUgYmFja2VuZDogTGFrZWJhc2VTZWFyY2hCYWNrZW5kIHwgdW5kZWZpbmVkO1xuXG4gIG92ZXJyaWRlIGFzeW5jIHNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGluZGV4ZXMgPSB0aGlzLmluZGV4ZXMoKTtcbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHRoaXMudmFsaWRhdGVBdXRoKGluZGV4KTtcbiAgICBjb25zdCBsYWtlID0gcGx1Z2luUmVnaXN0cnkucmVxdWlyZSh0aGlzLmNvbnRleHQsIGxha2ViYXNlLCB0aGlzKTtcbiAgICB0aGlzLmJhY2tlbmQgPSBuZXcgTGFrZWJhc2VTZWFyY2hCYWNrZW5kKFxuICAgICAgeyBtYW5hZ2VkUG9vbDogKCkgPT4gbGFrZS5leHBvcnRzKCkucG9vbCB9LFxuICAgICAgc3RyaW5nVXRpbHMudHJpbVRvTnVsbCh0aGlzLmNvbmZpZy5zY2hlbWEpID8/IFwicHVibGljXCIsXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuYmFja2VuZC5wcm92aXNpb24oaW5kZXguaW5kZXhOYW1lLCB7XG4gICAgICAgIHRleHRDb2x1bW46IGluZGV4LmNvbmZpZy50ZXh0Q29sdW1uID8/IFwidGV4dFwiLFxuICAgICAgICAuLi4oaW5kZXguY29uZmlnLmRvY3VtZW50cyA/IHsgc2VlZDogaW5kZXguY29uZmlnLmRvY3VtZW50cyB9IDoge30pLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGxvZ2dlci5pbmZvKFwicmVhZHlcIiwge1xuICAgICAgaW5kZXhlczogdGhpcy5pbmRleGVzKCkubWFwKChpbmRleCkgPT4gaW5kZXguYWxpYXMpLFxuICAgICAgc2NoZW1hOiBzdHJpbmdVdGlscy50cmltVG9OdWxsKHRoaXMuY29uZmlnLnNjaGVtYSkgPz8gXCJwdWJsaWNcIixcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGluamVjdFJvdXRlcyhyb3V0ZXI6IElBcHBSb3V0ZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlKHJvdXRlciwge1xuICAgICAgbmFtZTogXCJxdWVyeVwiLFxuICAgICAgbWV0aG9kOiBcInBvc3RcIixcbiAgICAgIHBhdGg6IFwiLzphbGlhcy9xdWVyeVwiLFxuICAgICAgaGFuZGxlcjogYXN5bmMgKHJlcTogZXhwcmVzcy5SZXF1ZXN0LCByZXM6IGV4cHJlc3MuUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBhbGlhcyA9IHJvdXRlUGFyYW0ocmVxLnBhcmFtcy5hbGlhcyk7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc29sdmVJbmRleChhbGlhcyk7XG4gICAgICAgICAgY29uc3QgeyBjb2x1bW5zOiBfdW50cnVzdGVkQ29sdW1ucywgLi4ucmVxdWVzdCB9ID0gb2JqZWN0LmlzUmVjb3JkKHJlcS5ib2R5KVxuICAgICAgICAgICAgPyByZXEuYm9keVxuICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgICByZXMuanNvbihhd2FpdCB0aGlzLnJvdXRlUnVudGltZShpbmRleCwgcmVxKS5xdWVyeShhbGlhcywgcmVxdWVzdCBhcyBTZWFyY2hSZXF1ZXN0KSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oe1xuICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJTZWFyY2ggZmFpbGVkXCIsXG4gICAgICAgICAgICBwbHVnaW46IHRoaXMubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKHJvdXRlciwge1xuICAgICAgbmFtZTogXCJnZXRDb25maWdcIixcbiAgICAgIG1ldGhvZDogXCJnZXRcIixcbiAgICAgIHBhdGg6IFwiLzphbGlhcy9jb25maWdcIixcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXE6IGV4cHJlc3MuUmVxdWVzdCwgcmVzOiBleHByZXNzLlJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXNvbHZlSW5kZXgocm91dGVQYXJhbShyZXEucGFyYW1zLmFsaWFzKSk7XG4gICAgICAgIHJlcy5qc29uKHtcbiAgICAgICAgICBhbGlhczogaW5kZXguYWxpYXMsXG4gICAgICAgICAgY29sdW1uczogaW5kZXguY29uZmlnLmNvbHVtbnMsXG4gICAgICAgICAgcXVlcnlUeXBlOiBcImZ1bGxfdGV4dFwiLFxuICAgICAgICAgIG51bVJlc3VsdHM6IGluZGV4LmNvbmZpZy5udW1SZXN1bHRzID8/IDIwLFxuICAgICAgICAgIHJlcmFua2VyOiBmYWxzZSxcbiAgICAgICAgICBwYWdpbmF0aW9uOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGlmICh0aGlzLmNvbmZpZy5hbGxvd1dyaXRlKSB7XG4gICAgICB0aGlzLnJvdXRlKHJvdXRlciwge1xuICAgICAgICBuYW1lOiBcImFkZERvY3VtZW50c1wiLFxuICAgICAgICBtZXRob2Q6IFwicG9zdFwiLFxuICAgICAgICBwYXRoOiBcIi86YWxpYXMvZG9jdW1lbnRzXCIsXG4gICAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXE6IGV4cHJlc3MuUmVxdWVzdCwgcmVzOiBleHByZXNzLlJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWxpYXMgPSByb3V0ZVBhcmFtKHJlcS5wYXJhbXMuYWxpYXMpO1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXNvbHZlSW5kZXgoYWxpYXMpO1xuICAgICAgICAgIGNvbnN0IGRvY3VtZW50cyA9IEFycmF5LmlzQXJyYXkocmVxLmJvZHk/LmRvY3VtZW50cylcbiAgICAgICAgICAgID8gcmVxLmJvZHkuZG9jdW1lbnRzLmZpbHRlcihvYmplY3QuaXNSZWNvcmQpXG4gICAgICAgICAgICA6IFtdO1xuICAgICAgICAgIHJlcy5qc29uKGF3YWl0IHRoaXMucm91dGVSdW50aW1lKGluZGV4LCByZXEpLmFkZERvY3VtZW50cyhhbGlhcywgZG9jdW1lbnRzKSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogUXVlcnkgb25lIGNvbmZpZ3VyZWQgTGFrZWJhc2UgZnVsbC10ZXh0IGluZGV4IHVzaW5nIEFwcEtpdCdzIHJlc3BvbnNlIHNoYXBlLiAqL1xuICBhc3luYyBxdWVyeShcbiAgICBhbGlhczogc3RyaW5nLFxuICAgIHJlcXVlc3Q6IFNlYXJjaFJlcXVlc3QsXG4gICk6IFByb21pc2U8U2VhcmNoUmVzcG9uc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiB7XG4gICAgaWYgKCFyZXF1ZXN0LnF1ZXJ5VGV4dCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcIkxha2ViYXNlIEFJIFNlYXJjaCByZXF1aXJlcyBxdWVyeVRleHRcIik7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnF1ZXJ5VmVjdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFwiTGFrZWJhc2UgQUkgU2VhcmNoIGRvZXMgbm90IGFjY2VwdCBxdWVyeVZlY3RvclwiKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QucXVlcnlUeXBlICYmIHJlcXVlc3QucXVlcnlUeXBlICE9PSBcImZ1bGxfdGV4dFwiKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFwiTGFrZWJhc2UgQUkgU2VhcmNoIHN1cHBvcnRzIG9ubHkgZnVsbF90ZXh0IHF1ZXJpZXNcIik7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXNvbHZlSW5kZXgoYWxpYXMpO1xuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWlyZUJhY2tlbmQoKS5zZWFyY2goaW5kZXguaW5kZXhOYW1lLCByZXF1ZXN0LnF1ZXJ5VGV4dCwge1xuICAgICAgbGltaXQ6IHJlcXVlc3QubnVtUmVzdWx0cyA/PyBpbmRleC5jb25maWcubnVtUmVzdWx0cyA/PyAyMCxcbiAgICAgIC4uLihyZXF1ZXN0LmZpbHRlcnMgPyB7IGZpbHRlcjogcmVxdWVzdC5maWx0ZXJzIH0gOiB7fSksXG4gICAgfSk7XG4gICAgY29uc3QgY29sdW1ucyA9IHJlcXVlc3QuY29sdW1ucyA/PyBpbmRleC5jb25maWcuY29sdW1ucztcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdWx0czogcmVzdWx0LmhpdHMubWFwKChoaXQpID0+ICh7XG4gICAgICAgIHNjb3JlOiBoaXQuc2NvcmUsXG4gICAgICAgIGRhdGE6IHRoaXMucHJvamVjdCh7IGlkOiBoaXQuaWQsIC4uLmhpdC5maWVsZHMgfSwgY29sdW1ucyksXG4gICAgICB9KSksXG4gICAgICB0b3RhbENvdW50OiByZXN1bHQuY291bnQsXG4gICAgICBxdWVyeVRpbWVNczogTWF0aC5tYXgoMCwgcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydGVkQXQpLFxuICAgICAgcXVlcnlUeXBlOiBcImZ1bGxfdGV4dFwiLFxuICAgICAgbmV4dFBhZ2VUb2tlbjogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEFkZCBvciB1cGRhdGUgZG9jdW1lbnRzIGluIG9uZSBjb25maWd1cmVkIExha2ViYXNlIGZ1bGwtdGV4dCBpbmRleC4gKi9cbiAgYXN5bmMgYWRkRG9jdW1lbnRzKGFsaWFzOiBzdHJpbmcsIGRvY3VtZW50czogU2VhcmNoRG9jdW1lbnRbXSkge1xuICAgIGlmICghdGhpcy5jb25maWcuYWxsb3dXcml0ZSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcIkxha2ViYXNlIEFJIFNlYXJjaCB3cml0ZXMgYXJlIGRpc2FibGVkXCIpO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzb2x2ZUluZGV4KGFsaWFzKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlQmFja2VuZCgpLmFkZERvY3VtZW50cyhcbiAgICAgIGluZGV4LmluZGV4TmFtZSxcbiAgICAgIGRvY3VtZW50cy5maWx0ZXIob2JqZWN0LmlzUmVjb3JkKSxcbiAgICAgIGluZGV4LmNvbmZpZy50ZXh0Q29sdW1uID8/IFwidGV4dFwiLFxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBjbGllbnRDb25maWcoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluZGV4ZXM6IHRoaXMuaW5kZXhlcygpLm1hcCgoaW5kZXgpID0+ICh7XG4gICAgICAgIGFsaWFzOiBpbmRleC5hbGlhcyxcbiAgICAgICAgcXVlcnlUeXBlOiBcImZ1bGxfdGV4dFwiIGFzIGNvbnN0LFxuICAgICAgICBwYWdpbmF0aW9uOiBmYWxzZSxcbiAgICAgIH0pKSxcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0cygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvdmlkZXJLaW5kOiBcImxha2ViYXNlXCIgYXMgY29uc3QsXG4gICAgICBxdWVyeTogdGhpcy5xdWVyeS5iaW5kKHRoaXMpLFxuICAgICAgYWRkRG9jdW1lbnRzOiB0aGlzLmFkZERvY3VtZW50cy5iaW5kKHRoaXMpLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmJhY2tlbmQ/LmNsb3NlKCk7XG4gICAgdGhpcy5iYWNrZW5kID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmRleGVzKCk6IFJlc29sdmVkTGFrZWJhc2VJbmRleFtdIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5jb25maWcuaW5kZXhlcyA/PyB7fSkubWFwKChbYWxpYXMsIGNvbmZpZ10pID0+ICh7XG4gICAgICBhbGlhcyxcbiAgICAgIGluZGV4TmFtZTogc3RyaW5nVXRpbHMudHJpbVRvTnVsbChjb25maWcuaW5kZXhOYW1lKSA/PyBhbGlhcyxcbiAgICAgIGNvbmZpZyxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVJbmRleChhbGlhczogc3RyaW5nKTogUmVzb2x2ZWRMYWtlYmFzZUluZGV4IHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXhlcygpLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmFsaWFzID09PSBhbGlhcyk7XG4gICAgaWYgKCFpbmRleCkgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVW5rbm93biBBSSBTZWFyY2ggaW5kZXggYWxpYXMgXCIke2FsaWFzfVwiYCk7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUF1dGgoaW5kZXg6IFJlc29sdmVkTGFrZWJhc2VJbmRleCk6IHZvaWQge1xuICAgIGNvbnN0IGF1dGggPSAoaW5kZXguY29uZmlnIGFzIHsgYXV0aD86IHVua25vd24gfSkuYXV0aDtcbiAgICBpZiAoYXV0aCAhPT0gdW5kZWZpbmVkICYmIGF1dGggIT09IFwic2VydmljZS1wcmluY2lwYWxcIiAmJiBhdXRoICE9PSBcIm9uLWJlaGFsZi1vZi11c2VyXCIpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFVua25vd24gQUkgU2VhcmNoIGF1dGggbW9kZSBmb3IgXCIke2luZGV4LmFsaWFzfVwiYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByb3V0ZVJ1bnRpbWUoaW5kZXg6IFJlc29sdmVkTGFrZWJhc2VJbmRleCwgcmVxOiBleHByZXNzLlJlcXVlc3QpOiB0aGlzIHtcbiAgICByZXR1cm4gaW5kZXguY29uZmlnLmF1dGggPT09IFwib24tYmVoYWxmLW9mLXVzZXJcIiA/IHRoaXMuYXNVc2VyKHJlcSkgOiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSByZXF1aXJlQmFja2VuZCgpOiBMYWtlYmFzZVNlYXJjaEJhY2tlbmQge1xuICAgIGlmICghdGhpcy5iYWNrZW5kKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFwiTGFrZWJhc2UgQUkgU2VhcmNoIGlzIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9qZWN0KFxuICAgIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIGNvbHVtbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgaWYgKCFjb2x1bW5zPy5sZW5ndGgpIHJldHVybiBkYXRhO1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBjb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4gaW4gZGF0YSkubWFwKChjb2x1bW4pID0+IFtjb2x1bW4sIGRhdGFbY29sdW1uXV0pLFxuICAgICk7XG4gIH1cbn1cblxuLyoqIEFwcEtpdC1jb21wYXRpYmxlIExha2ViYXNlIEFJIFNlYXJjaCBwcm92aWRlci4gKi9cbmV4cG9ydCBjb25zdCBsYWtlYmFzZUFpU2VhcmNoID0gdG9QbHVnaW4oTGFrZWJhc2VBaVNlYXJjaFBsdWdpbik7XG4iXX0=