@dbx-tools/search 0.9.138 → 0.9.140

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
@@ -7,8 +7,8 @@
7
7
  *
8
8
  * The design goal is "one index, zero config": name a default index (or set
9
9
  * `DATABRICKS_VECTOR_SEARCH_INDEX`) and everything else - the columns to
10
- * return, the page size, the match mode, the mounted route path, the embedding
11
- * model used when creating an index - has a sensible default that can be
10
+ * return, the page size, the match mode, and the embedding model used when
11
+ * creating an index - has a sensible default that can be
12
12
  * overridden when a deployment needs to go deeper.
13
13
  *
14
14
  * Which index / endpoint is used follows the standard precedence: explicit
@@ -36,8 +36,6 @@ export const DEFAULT_MODE = "hybrid";
36
36
  export const DEFAULT_PAGE_SIZE = 10;
37
37
  /** Default per-call timeout for a search / index operation. */
38
38
  export const DEFAULT_TIMEOUT_MS = 30_000;
39
- /** Base path the plugin mounts its routes under, unless overridden. */
40
- export const DEFAULT_BASE_PATH = "/api/search";
41
39
  /** JSON Schema the plugin manifest publishes for {@link SearchPluginConfig}. */
42
40
  export const SEARCH_CONFIG_SCHEMA = {
43
41
  type: "object",
@@ -171,7 +169,6 @@ export function resolveSearchConfig(config = {}) {
171
169
  pageSize: configUtils.positiveInt(config.pageSize, "SEARCH_PAGE_SIZE", DEFAULT_PAGE_SIZE, configUtils.ENV_ONLY),
172
170
  mode: resolveMode(config.mode),
173
171
  ...object.optional("embeddingModel", configUtils.string(config.embeddingModel, "SEARCH_EMBEDDING_MODEL", configUtils.ENV_ONLY)),
174
- basePath: DEFAULT_BASE_PATH,
175
172
  timeoutMs: configUtils.positiveInt(config.timeoutMs, "SEARCH_TIMEOUT_MS", DEFAULT_TIMEOUT_MS, configUtils.ENV_ONLY),
176
173
  allowWrite: configUtils.boolean(config.allowWrite, "SEARCH_WRITE", configUtils.ENV_ONLY) ?? false,
177
174
  ...(config.ensureOnSetup ? { ensureOnSetup: config.ensureOnSetup } : {}),
@@ -199,4 +196,4 @@ export function resolveIndexName(config, reference) {
199
196
  export function indexConfigFor(config, name) {
200
197
  return config.indexes.find((i) => i.name === name || i.alias === name);
201
198
  }
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
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBeUIsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUk3RCxnRkFBZ0Y7QUFDaEYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQztBQUV4Qyw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsZ0NBQWdDLENBQUM7QUFFckUsb0ZBQW9GO0FBQ3BGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQztBQUU5QywyRkFBMkY7QUFDM0YsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFlLFFBQVEsQ0FBQztBQUVqRCx5RkFBeUY7QUFDekYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBRXBDLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUM7QUFvR3pDLGdGQUFnRjtBQUNoRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBZ0I7SUFDL0MsSUFBSSxFQUFFLFFBQVE7SUFDZCxvQkFBb0IsRUFBRSxJQUFJO0lBQzFCLFVBQVUsRUFBRTtRQUNWLEtBQUssRUFBRTtZQUNMLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLHVFQUF1RTtTQUNyRjtRQUNELE9BQU8sRUFBRTtZQUNQLElBQUksRUFBRSxPQUFPO1lBQ2IsV0FBVyxFQUFFLDRFQUE0RTtZQUN6RixLQUFLLEVBQUU7Z0JBQ0wsS0FBSyxFQUFFO29CQUNMLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFB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WSxJQUFJLElBQUksQ0FBQztBQUNyQyxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLE1BQU0sVUFBVSxjQUFjLENBQzVCLE1BQTRCLEVBQzVCLElBQVk7SUFFWixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ3pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBBSSBTZWFyY2ggcGx1Z2luOiB0aGUgdHlwZWRcbiAqIHtAbGluayBTZWFyY2hQbHVnaW5Db25maWd9ICh0aGUgcGx1Z2luJ3Mgc2xpY2Ugb2YgQXBwS2l0IGNvbmZpZyksIHRoZSBKU09OXG4gKiBTY2hlbWEgdGhlIG1hbmlmZXN0IHB1Ymxpc2hlcyBmb3IgaXQsIGFuZCB7QGxpbmsgcmVzb2x2ZVNlYXJjaENvbmZpZ31cbiAqIHdoaWNoIGxheWVycyB0aGF0IGNvbmZpZyBvdmVyIGVudmlyb25tZW50IGRlZmF1bHRzIGludG8gdGhlIGNvbmNyZXRlXG4gKiB7QGxpbmsgUmVzb2x2ZWRTZWFyY2hDb25maWd9IHRoZSBydW50aW1lLCBjbGllbnQsIHRvb2xzLCBhbmQgcm91dGVzIHJlYWQuXG4gKlxuICogVGhlIGRlc2lnbiBnb2FsIGlzIFwib25lIGluZGV4LCB6ZXJvIGNvbmZpZ1wiOiBuYW1lIGEgZGVmYXVsdCBpbmRleCAob3Igc2V0XG4gKiBgREFUQUJSSUNLU19WRUNUT1JfU0VBUkNIX0lOREVYYCkgYW5kIGV2ZXJ5dGhpbmcgZWxzZSAtIHRoZSBjb2x1bW5zIHRvXG4gKiByZXR1cm4sIHRoZSBwYWdlIHNpemUsIHRoZSBtYXRjaCBtb2RlLCBhbmQgdGhlIGVtYmVkZGluZyBtb2RlbCB1c2VkIHdoZW5cbiAqIGNyZWF0aW5nIGFuIGluZGV4IC0gaGFzIGEgc2Vuc2libGUgZGVmYXVsdCB0aGF0IGNhbiBiZVxuICogb3ZlcnJpZGRlbiB3aGVuIGEgZGVwbG95bWVudCBuZWVkcyB0byBnbyBkZWVwZXIuXG4gKlxuICogV2hpY2ggaW5kZXggLyBlbmRwb2ludCBpcyB1c2VkIGZvbGxvd3MgdGhlIHN0YW5kYXJkIHByZWNlZGVuY2U6IGV4cGxpY2l0XG4gKiBwbHVnaW4gY29uZmlnLCB0aGVuIGVudmlyb25tZW50LCB0aGVuIGEgZGVmYXVsdC5cbiAqXG4gKiBFbnYgZmFsbGJhY2tzOiBgREFUQUJSSUNLU19WRUNUT1JfU0VBUkNIX0lOREVYYCAodGhlIGRlZmF1bHQgaW5kZXgpLFxuICogYFNFQVJDSF9JTkRFWGAsIGBTRUFSQ0hfRU5EUE9JTlRgLCBgU0VBUkNIX0NPTFVNTlNgLFxuICogYFNFQVJDSF9QQUdFX1NJWkVgLCBgU0VBUkNIX01PREVgLCBgU0VBUkNIX0VNQkVERElOR19NT0RFTGAsXG4gKiBgU0VBUkNIX1RJTUVPVVRfTVNgLCBgU0VBUkNIX1dSSVRFYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVycm9yLCB0eXBlIEJhc2VQbHVnaW5Db25maWcgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBjb25maWdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7IG9iamVjdCwgc3RyaW5nVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBTZWFyY2hEb2N1bWVudCwgU2VhcmNoTW9kZSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1zZWFyY2hcIjtcbmltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTcgfSBmcm9tIFwianNvbi1zY2hlbWFcIjtcblxuLyoqIFRoZSBkZWZhdWx0IGluZGV4LCBob25vcmluZyBBcHBLaXQncyBzdGFuZGFyZCBWZWN0b3IgU2VhcmNoIGJpbmRpbmcgbmFtZS4gKi9cbmV4cG9ydCBjb25zdCBJTkRFWF9FTlYgPSBcIlNFQVJDSF9JTkRFWFwiO1xuXG4vKiogQXBwS2l0J3Mgc3RhbmRhcmQgZW52aXJvbm1lbnQgbmFtZSBmb3IgYSBWZWN0b3IgU2VhcmNoIGluZGV4IGJpbmRpbmcuICovXG5leHBvcnQgY29uc3QgREFUQUJSSUNLU19JTkRFWF9FTlYgPSBcIkRBVEFCUklDS1NfVkVDVE9SX1NFQVJDSF9JTkRFWFwiO1xuXG4vKiogRGVkaWNhdGVkIG92ZXJyaWRlIGZvciB0aGUgVmVjdG9yIFNlYXJjaCBzZXJ2aW5nIGVuZHBvaW50IHRoYXQgaG9zdHMgaW5kZXhlcy4gKi9cbmV4cG9ydCBjb25zdCBFTkRQT0lOVF9FTlYgPSBcIlNFQVJDSF9FTkRQT0lOVFwiO1xuXG4vKiogRGVmYXVsdCBtYXRjaCBtb2RlIHdoZW4gYSByZXF1ZXN0IGRvZXMgbm90IG5hbWUgb25lLiBIeWJyaWQgc3VpdHMgbW9zdCBzZWFyY2ggYm94ZXMuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NT0RFOiBTZWFyY2hNb2RlID0gXCJoeWJyaWRcIjtcblxuLyoqIERlZmF1bHQgbnVtYmVyIG9mIGhpdHMgYSBzZWFyY2ggcmV0dXJucyAoYSBnb29kIGF1dG9jb21wbGV0ZSAvIHJlc3VsdHMtbGlzdCBzaXplKS4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1BBR0VfU0laRSA9IDEwO1xuXG4vKiogRGVmYXVsdCBwZXItY2FsbCB0aW1lb3V0IGZvciBhIHNlYXJjaCAvIGluZGV4IG9wZXJhdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSAzMF8wMDA7XG5cbi8qKlxuICogQSBjb25maWd1cmVkIGluZGV4IHRoZSBwbHVnaW4ga25vd3MgYWJvdXQgYWhlYWQgb2YgdGltZS4gT25seSBgbmFtZWAgKG9yXG4gKiBgYWxpYXNgKSBpcyByZXF1aXJlZDsgdGhlIHJlc3QgaXMgcmVzb2x2ZWQgZnJvbSB0aGUgbGl2ZSBpbmRleCBkZWZpbml0aW9uXG4gKiB3aGVuIG9taXR0ZWQsIHNvIGEgZGVwbG95bWVudCBjYW4gcmVnaXN0ZXIgYHsgbmFtZSB9YCBhbmQgbGV0IHRoZSBwbHVnaW4gZmlsbFxuICogaW4gdGhlIHByaW1hcnkga2V5IGFuZCBjb2x1bW5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaEluZGV4Q29uZmlnIHtcbiAgLyoqIFVuaXR5IENhdGFsb2cgbmFtZSBvZiB0aGUgaW5kZXggKGNhdGFsb2cuc2NoZW1hLmluZGV4KS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogU2hvcnQgYWxpYXMgYSBjYWxsZXIgbWF5IHVzZSBpbiBwbGFjZSBvZiBgbmFtZWAgKGRlZmF1bHRzIHRvIHRoZSBsYXN0IG5hbWUgc2VnbWVudCkuICovXG4gIGFsaWFzPzogc3RyaW5nO1xuICAvKiogUHJpbWFyeS1rZXkgY29sdW1uLiBSZXNvbHZlZCBmcm9tIHRoZSBpbmRleCBkZWZpbml0aW9uIHdoZW4gb21pdHRlZC4gKi9cbiAgcHJpbWFyeUtleT86IHN0cmluZztcbiAgLyoqIENvbHVtbnMgdG8gcmV0dXJuIHBlciBoaXQsIGluIGRpc3BsYXkgb3JkZXIuIERlZmF1bHRzIHRvIGV2ZXJ5IGluZGV4ZWQgY29sdW1uLiAqL1xuICBjb2x1bW5zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIEFJIFNlYXJjaCBwbHVnaW4ncyBzbGljZSBvZiBBcHBLaXQgY29uZmlnLiBFdmVyeSBmaWVsZCBpcyBvcHRpb25hbCAtIHRoZVxuICogcGx1Z2luIHdvcmtzIHdpdGggbm90aGluZyBidXQgYW4gaW5kZXggbmFtZSBpbiB0aGUgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUGx1Z2luQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIC8qKiBUaGUgZGVmYXVsdCBpbmRleCBzZWFyY2hlZCB3aGVuIGEgcmVxdWVzdCBvbWl0cyBvbmUgKG5hbWUgb3IgYWxpYXMpLiAqL1xuICBpbmRleD86IHN0cmluZztcbiAgLyoqIEluZGV4ZXMgdGhlIHBsdWdpbiBzaG91bGQga25vdyBhYm91dCAoZm9yIGFsaWFzZXMsIHVuaXZlcnNhbCBzZWFyY2gsIGFuZCB0aGUgVUkgY2F0YWxvZ3VlKS4gKi9cbiAgaW5kZXhlcz86IEFycmF5PHN0cmluZyB8IFNlYXJjaEluZGV4Q29uZmlnPjtcbiAgLyoqIFRoZSBWZWN0b3IgU2VhcmNoIHNlcnZpbmcgZW5kcG9pbnQgaW5kZXhlcyBsaXZlIG9uIChvbmx5IG5lZWRlZCB0byBjcmVhdGUgYW4gaW5kZXgpLiAqL1xuICBlbmRwb2ludD86IHN0cmluZztcbiAgLyoqIERlZmF1bHQgY29sdW1ucyB0byByZXR1cm4gcGVyIGhpdC4gRmFsbHMgYmFjayB0byBlYWNoIGluZGV4J3Mgb3duIGNvbHVtbnMuICovXG4gIGNvbHVtbnM/OiBzdHJpbmdbXTtcbiAgLyoqIERlZmF1bHQgbnVtYmVyIG9mIGhpdHMgYSBzZWFyY2ggcmV0dXJucy4gKi9cbiAgcGFnZVNpemU/OiBudW1iZXI7XG4gIC8qKiBEZWZhdWx0IG1hdGNoIG1vZGUuICovXG4gIG1vZGU/OiBTZWFyY2hNb2RlO1xuICAvKiogRW1iZWRkaW5nIG1vZGVsIGVuZHBvaW50IHVzZWQgd2hlbiB0aGUgcGx1Z2luIENSRUFURVMgYSBEZWx0YSBTeW5jIGluZGV4LiBGdXp6eS1yZXNvbHZlZC4gKi9cbiAgZW1iZWRkaW5nTW9kZWw/OiBzdHJpbmc7XG4gIC8qKiBQZXItY2FsbCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICAvKiogRW5hYmxlIHRoZSB3cml0ZSBzdXJmYWNlIChgYWRkX2RvY3VtZW50c2AgdG9vbCArIGBQT1NUIC9kb2N1bWVudHNgKS4gT2ZmIGJ5IGRlZmF1bHQuICovXG4gIGFsbG93V3JpdGU/OiBib29sZWFuO1xuICAvKipcbiAgICogUHJvdmlzaW9uIGEgUkVBTCBpbmRleCBhdCBib290OiBlbnN1cmUgdGhlIGVuZHBvaW50ICsgaW5kZXggZXhpc3QgYW5kIHNlZWRcbiAgICogZG9jdW1lbnRzIHdoZW4gdGhlIGluZGV4IGlzIGVtcHR5LiBSdW5zIGluIHRoZSBiYWNrZ3JvdW5kIGR1cmluZyBgc2V0dXAoKWBcbiAgICogKGEgc2xvdyBmaXJzdC10aW1lIGVuZHBvaW50L2luZGV4IGJ1aWxkIG5ldmVyIGJsb2NrcyB0aGUgc2VydmVyKSB1c2luZyB0aGVcbiAgICogYm9vdC10aW1lIFNESyBhdXRoIChlbnYgLyBjb25maWcgcHJvZmlsZSkuIElkZW1wb3RlbnQgLSBzYWZlIGV2ZXJ5IGJvb3QuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IGlzIGEgTUFOQUdFRCBkaXJlY3QtYWNjZXNzIGluZGV4IChEYXRhYnJpY2tzIGVtYmVkcyB0aGUgdGV4dFxuICAgKiBjb2x1bW4pLCBzbyBgZG9jdW1lbnRzYCBhcmUgcGxhaW4gcm93cyBhbmQgc2VhcmNoLWJ5LXRleHQgd29ya3Mgd2l0aCBub1xuICAgKiBEZWx0YSB0YWJsZSwgbm8gd2FyZWhvdXNlLCBhbmQgbm8gdmVjdG9ycyB0byBjb21wdXRlLiBQb2ludCBpdCBhdCBhXG4gICAqIGBzb3VyY2VUYWJsZWAgdG8gcHJvdmlzaW9uIGEgRGVsdGEgU3luYyBpbmRleCBpbnN0ZWFkLlxuICAgKi9cbiAgZW5zdXJlT25TZXR1cD86IEVuc3VyZU9uU2V0dXBDb25maWc7XG59XG5cbi8qKiBCb290LXRpbWUgcHJvdmlzaW9uaW5nICsgc2VlZGluZyBmb3IgYSBzaW5nbGUgaW5kZXggKHNlZSBgZW5zdXJlT25TZXR1cGApLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnN1cmVPblNldHVwQ29uZmlnIHtcbiAgLyoqIFVDIG5hbWUgb2YgdGhlIGluZGV4IHRvIGVuc3VyZSAoY2F0YWxvZy5zY2hlbWEuaW5kZXgpLiBEZWZhdWx0cyB0byB0aGUgcGx1Z2luJ3MgYGluZGV4YC4gKi9cbiAgaW5kZXg/OiBzdHJpbmc7XG4gIC8qKiBWZWN0b3IgU2VhcmNoIGVuZHBvaW50IHRvIGhvc3QgaXQgb24uIERlZmF1bHRzIHRvIHRoZSBwbHVnaW4ncyBgZW5kcG9pbnRgLiAqL1xuICBlbmRwb2ludD86IHN0cmluZztcbiAgLyoqIFByaW1hcnkta2V5IGNvbHVtbi4gRGVmYXVsdHMgdG8gYGlkYC4gKi9cbiAgcHJpbWFyeUtleT86IHN0cmluZztcbiAgLyoqIFRleHQgY29sdW1uIERhdGFicmlja3MgZW1iZWRzIChtYW5hZ2VkIGRpcmVjdC1hY2Nlc3MpLiBEZWZhdWx0cyB0byBgdGV4dGAuICovXG4gIHRleHRDb2x1bW4/OiBzdHJpbmc7XG4gIC8qKiBFbWJlZGRpbmcgbW9kZWwgZW5kcG9pbnQuIEZ1enp5LW1hdGNoZWQ7IGRlZmF1bHRzIHRvIHRoZSBiZXN0IGVtYmVkZGluZyBlbmRwb2ludC4gKi9cbiAgZW1iZWRkaW5nTW9kZWw/OiBzdHJpbmc7XG4gIC8qKiBGb3IgYSBEZWx0YSBTeW5jIGluZGV4IGluc3RlYWQgb2YgbWFuYWdlZCBkaXJlY3QtYWNjZXNzOiB0aGUgc291cmNlIERlbHRhIHRhYmxlLiAqL1xuICBzb3VyY2VUYWJsZT86IHN0cmluZztcbiAgLyoqIENvbHVtbiAtPiB0eXBlIG1hcCBmb3IgdGhlIG1hbmFnZWQgZGlyZWN0LWFjY2VzcyBgc2NoZW1hX2pzb25gLiBJbmZlcnJlZCBmcm9tIGBkb2N1bWVudHNgIHdoZW4gb21pdHRlZC4gKi9cbiAgc2NoZW1hPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIERvY3VtZW50cyB0byBzZWVkIHdoZW4gdGhlIGluZGV4IGlzIGVtcHR5LiBQbGFpbiBgeyBpZCwgdGV4dCwgLi4uIH1gIHJvd3MgZm9yIGEgbWFuYWdlZCBpbmRleC4gKi9cbiAgZG9jdW1lbnRzPzogU2VhcmNoRG9jdW1lbnRbXTtcbiAgLyoqIE1heCB0aW1lIHRvIHdhaXQgZm9yIGVuZHBvaW50ICsgaW5kZXggcmVhZGluZXNzLiBEZWZhdWx0cyB0byAyMCBtaW51dGVzLiAqL1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG59XG5cbi8qKiBBIGZ1bGx5IHJlc29sdmVkIGluZGV4IGVudHJ5ICh0aGUgcGx1Z2luLWtub3duIGZvcm0pLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZEluZGV4Q29uZmlnIHtcbiAgbmFtZTogc3RyaW5nO1xuICBhbGlhczogc3RyaW5nO1xuICBwcmltYXJ5S2V5Pzogc3RyaW5nO1xuICBjb2x1bW5zPzogc3RyaW5nW107XG59XG5cbi8qKiBUaGUgY29uY3JldGUgY29uZmlnIHRoZSBydW50aW1lLCBjbGllbnQsIHRvb2xzLCBhbmQgcm91dGVzIHJlYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkU2VhcmNoQ29uZmlnIHtcbiAgZGVmYXVsdEluZGV4Pzogc3RyaW5nO1xuICBpbmRleGVzOiBSZXNvbHZlZEluZGV4Q29uZmlnW107XG4gIGVuZHBvaW50Pzogc3RyaW5nO1xuICBjb2x1bW5zPzogc3RyaW5nW107XG4gIHBhZ2VTaXplOiBudW1iZXI7XG4gIG1vZGU6IFNlYXJjaE1vZGU7XG4gIGVtYmVkZGluZ01vZGVsPzogc3RyaW5nO1xuICB0aW1lb3V0TXM6IG51bWJlcjtcbiAgYWxsb3dXcml0ZTogYm9vbGVhbjtcbiAgZW5zdXJlT25TZXR1cD86IEVuc3VyZU9uU2V0dXBDb25maWc7XG59XG5cbi8qKiBKU09OIFNjaGVtYSB0aGUgcGx1Z2luIG1hbmlmZXN0IHB1Ymxpc2hlcyBmb3Ige0BsaW5rIFNlYXJjaFBsdWdpbkNvbmZpZ30uICovXG5leHBvcnQgY29uc3QgU0VBUkNIX0NPTkZJR19TQ0hFTUE6IEpTT05TY2hlbWE3ID0ge1xuICB0eXBlOiBcIm9iamVjdFwiLFxuICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgcHJvcGVydGllczoge1xuICAgIGluZGV4OiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiRGVmYXVsdCBpbmRleCB0byBzZWFyY2ggKGNhdGFsb2cuc2NoZW1hLmluZGV4IG9yIGEgY29uZmlndXJlZCBhbGlhcykuXCIsXG4gICAgfSxcbiAgICBpbmRleGVzOiB7XG4gICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJJbmRleGVzIHRoZSBwbHVnaW4ga25vd3MgYWJvdXQsIGZvciBhbGlhc2VzLCB1bml2ZXJzYWwgc2VhcmNoLCBhbmQgdGhlIFVJLlwiLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IFtcIm5hbWVcIl0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIG5hbWU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBhbGlhczogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIHByaW1hcnlLZXk6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBjb2x1bW5zOiB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgZW5kcG9pbnQ6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJWZWN0b3IgU2VhcmNoIHNlcnZpbmcgZW5kcG9pbnQgaW5kZXhlcyBsaXZlIG9uIChuZWVkZWQgb25seSB0byBjcmVhdGUgb25lKS5cIixcbiAgICB9LFxuICAgIGNvbHVtbnM6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkRlZmF1bHQgY29sdW1ucyB0byByZXR1cm4uXCIsXG4gICAgfSxcbiAgICBwYWdlU2l6ZTogeyB0eXBlOiBcIm51bWJlclwiLCBkZXNjcmlwdGlvbjogXCJEZWZhdWx0IG51bWJlciBvZiBoaXRzIHBlciBzZWFyY2guXCIgfSxcbiAgICBtb2RlOiB7IGVudW06IFtcImh5YnJpZFwiLCBcInZlY3RvclwiLCBcImtleXdvcmRcIl0sIGRlc2NyaXB0aW9uOiBcIkRlZmF1bHQgbWF0Y2ggbW9kZS5cIiB9LFxuICAgIGVtYmVkZGluZ01vZGVsOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiRW1iZWRkaW5nIGVuZHBvaW50IHVzZWQgd2hlbiBjcmVhdGluZyBhIERlbHRhIFN5bmMgaW5kZXggKGZ1enp5LW1hdGNoZWQpLlwiLFxuICAgIH0sXG4gICAgdGltZW91dE1zOiB7IHR5cGU6IFwibnVtYmVyXCIsIGRlc2NyaXB0aW9uOiBcIlBlci1jYWxsIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLlwiIH0sXG4gICAgYWxsb3dXcml0ZToge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJFbmFibGUgdGhlIGRvY3VtZW50IHdyaXRlIHN1cmZhY2UgKGFkZF9kb2N1bWVudHMgdG9vbCArIHJvdXRlKS5cIixcbiAgICB9LFxuICAgIGVuc3VyZU9uU2V0dXA6IHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJQcm92aXNpb24gYSByZWFsIGluZGV4IGF0IGJvb3Q6IGVuc3VyZSB0aGUgZW5kcG9pbnQgKyBpbmRleCBleGlzdCBhbmQgc2VlZCBcIiArXG4gICAgICAgIFwiZG9jdW1lbnRzIHdoZW4gZW1wdHkuIFJ1bnMgaW4gdGhlIGJhY2tncm91bmQgZHVyaW5nIHNldHVwIHVzaW5nIGJvb3QtdGltZSBhdXRoLlwiLFxuICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGluZGV4OiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgZW5kcG9pbnQ6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICBwcmltYXJ5S2V5OiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgdGV4dENvbHVtbjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIGVtYmVkZGluZ01vZGVsOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgc291cmNlVGFibGU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICBzY2hlbWE6IHsgdHlwZTogXCJvYmplY3RcIiwgYWRkaXRpb25hbFByb3BlcnRpZXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgIGRvY3VtZW50czogeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwib2JqZWN0XCIsIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlIH0gfSxcbiAgICAgICAgdGltZW91dE1zOiB7IHR5cGU6IFwibnVtYmVyXCIgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn07XG5cbi8qKiBEZXJpdmUgdGhlIGRlZmF1bHQgYWxpYXMgZm9yIGFuIGluZGV4IG5hbWUgKGl0cyBsYXN0IGRvdHRlZCBzZWdtZW50KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0QWxpYXMobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBuYW1lLnNwbGl0KFwiLlwiKS5maWx0ZXIoQm9vbGVhbik7XG4gIHJldHVybiBzZWdtZW50cy5sZW5ndGggPiAwID8gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0gOiBuYW1lO1xufVxuXG4vKiogTm9ybWFsaXplIGEgY29uZmlnIGluZGV4IGVudHJ5IChzdHJpbmcgb3Igb2JqZWN0KSBpbnRvIGEge0BsaW5rIFJlc29sdmVkSW5kZXhDb25maWd9LiAqL1xuZnVuY3Rpb24gdG9SZXNvbHZlZEluZGV4KGVudHJ5OiBzdHJpbmcgfCBTZWFyY2hJbmRleENvbmZpZyk6IFJlc29sdmVkSW5kZXhDb25maWcgfCBudWxsIHtcbiAgY29uc3QgcmF3ID0gdHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiID8geyBuYW1lOiBlbnRyeSB9IDogZW50cnk7XG4gIGNvbnN0IG5hbWUgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKHJhdy5uYW1lKTtcbiAgaWYgKG5hbWUgPT09IG51bGwpIHJldHVybiBudWxsO1xuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgYWxpYXM6IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwocmF3LmFsaWFzKSA/PyBkZWZhdWx0QWxpYXMobmFtZSksXG4gICAgLi4uKHJhdy5wcmltYXJ5S2V5ID8geyBwcmltYXJ5S2V5OiByYXcucHJpbWFyeUtleSB9IDoge30pLFxuICAgIC4uLihyYXcuY29sdW1ucyAmJiByYXcuY29sdW1ucy5sZW5ndGggPiAwID8geyBjb2x1bW5zOiBbLi4ucmF3LmNvbHVtbnNdIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBQYXJzZSBhbmQgdmFsaWRhdGUgYSB7QGxpbmsgU2VhcmNoTW9kZX0gZnJvbSBjb25maWcgb3IgYW4gZW52IHZhci4gKi9cbmZ1bmN0aW9uIHJlc29sdmVNb2RlKGNvbmZpZ3VyZWQ6IFNlYXJjaE1vZGUgfCB1bmRlZmluZWQpOiBTZWFyY2hNb2RlIHtcbiAgY29uc3QgcmF3ID0gY29uZmlndXJlZCA/PyBjb25maWdVdGlscy50ZXh0KFwiU0VBUkNIX01PREVcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICBpZiAocmF3ID09PSB1bmRlZmluZWQpIHJldHVybiBERUZBVUxUX01PREU7XG4gIGlmIChyYXcgIT09IFwiaHlicmlkXCIgJiYgcmF3ICE9PSBcInZlY3RvclwiICYmIHJhdyAhPT0gXCJrZXl3b3JkXCIpIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKFxuICAgICAgJ21vZGUgbXVzdCBiZSBcImh5YnJpZFwiLCBcInZlY3RvclwiIG9yIFwia2V5d29yZFwiIChlbnY6IFNFQVJDSF9NT0RFKScsXG4gICAgICB7IGNvbnRleHQ6IHsgZmllbGQ6IFwibW9kZVwiLCBlbnZWYXI6IFwiU0VBUkNIX01PREVcIiB9IH0sXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmF3O1xufVxuXG4vKipcbiAqIFJlc29sdmUgcGx1Z2luIGNvbmZpZyBvdmVyIGVudmlyb25tZW50IGRlZmF1bHRzIGludG8gdGhlIGNvbmNyZXRlXG4gKiB7QGxpbmsgUmVzb2x2ZWRTZWFyY2hDb25maWd9LiBUaGUgZGVmYXVsdCBpbmRleCBpcyB1bmlvbmVkIGludG8gdGhlIGtub3duXG4gKiBpbmRleGVzIHNvIGl0IGFsd2F5cyBhcHBlYXJzIGluIHRoZSBjYXRhbG9ndWUsIGFsaWFzZXMgYXJlIGRlLWR1cGxpY2F0ZWQsXG4gKiBhbmQgYSBiYWQgbW9kZSB0aHJvd3MgYSB7QGxpbmsgQ29uZmlndXJhdGlvbkVycm9yfSBuYW1pbmcgdGhlIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNlYXJjaENvbmZpZyhjb25maWc6IFNlYXJjaFBsdWdpbkNvbmZpZyA9IHt9KTogUmVzb2x2ZWRTZWFyY2hDb25maWcge1xuICBjb25zdCBkZWZhdWx0SW5kZXhSYXcgPSBjb25maWdVdGlscy5zdHJpbmcoXG4gICAgY29uZmlnLmluZGV4LFxuICAgIFtJTkRFWF9FTlYsIERBVEFCUklDS1NfSU5ERVhfRU5WXSxcbiAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgKTtcblxuICBjb25zdCBjb25maWd1cmVkID0gKGNvbmZpZy5pbmRleGVzID8/IFtdKVxuICAgIC5tYXAodG9SZXNvbHZlZEluZGV4KVxuICAgIC5maWx0ZXIoKGVudHJ5KTogZW50cnkgaXMgUmVzb2x2ZWRJbmRleENvbmZpZyA9PiBlbnRyeSAhPT0gbnVsbCk7XG5cbiAgLy8gRW5zdXJlIHRoZSBkZWZhdWx0IGluZGV4IGlzIHJlcHJlc2VudGVkIGluIHRoZSBrbm93biBzZXQuXG4gIGlmIChkZWZhdWx0SW5kZXhSYXcgJiYgIWNvbmZpZ3VyZWQuc29tZSgoaSkgPT4gaS5uYW1lID09PSBkZWZhdWx0SW5kZXhSYXcpKSB7XG4gICAgY29uc3QgZW52Q29sdW1ucyA9IGNvbmZpZ1V0aWxzLmxpc3QoXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBcIlNFQVJDSF9DT0xVTU5TXCIsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgICApO1xuICAgIGNvbmZpZ3VyZWQudW5zaGlmdCh7XG4gICAgICBuYW1lOiBkZWZhdWx0SW5kZXhSYXcsXG4gICAgICBhbGlhczogZGVmYXVsdEFsaWFzKGRlZmF1bHRJbmRleFJhdyksXG4gICAgICAuLi4oZW52Q29sdW1ucy5sZW5ndGggPiAwID8geyBjb2x1bW5zOiBlbnZDb2x1bW5zIH0gOiB7fSksXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBzZWVuQWxpYXNlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBpbmRleGVzID0gY29uZmlndXJlZC5tYXAoKGVudHJ5KSA9PiB7XG4gICAgbGV0IGFsaWFzID0gZW50cnkuYWxpYXM7XG4gICAgd2hpbGUgKHNlZW5BbGlhc2VzLmhhcyhhbGlhcykpIGFsaWFzID0gYCR7YWxpYXN9X2A7XG4gICAgc2VlbkFsaWFzZXMuYWRkKGFsaWFzKTtcbiAgICByZXR1cm4geyAuLi5lbnRyeSwgYWxpYXMgfTtcbiAgfSk7XG5cbiAgY29uc3QgZGVmYXVsdEluZGV4ID0gZGVmYXVsdEluZGV4UmF3ID8/IGluZGV4ZXNbMF0/Lm5hbWU7XG4gIGNvbnN0IGNvbHVtbnMgPSBjb25maWdVdGlscy5saXN0KFxuICAgIGNvbmZpZy5jb2x1bW5zLFxuICAgIFwiU0VBUkNIX0NPTFVNTlNcIixcbiAgICB1bmRlZmluZWQsXG4gICAgY29uZmlnVXRpbHMuRU5WX09OTFksXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5vYmplY3Qub3B0aW9uYWwoXCJkZWZhdWx0SW5kZXhcIiwgZGVmYXVsdEluZGV4KSxcbiAgICBpbmRleGVzLFxuICAgIC4uLm9iamVjdC5vcHRpb25hbChcbiAgICAgIFwiZW5kcG9pbnRcIixcbiAgICAgIGNvbmZpZ1V0aWxzLnN0cmluZyhjb25maWcuZW5kcG9pbnQsIEVORFBPSU5UX0VOViwgY29uZmlnVXRpbHMuRU5WX09OTFkpLFxuICAgICksXG4gICAgLi4uKGNvbHVtbnMubGVuZ3RoID4gMCA/IHsgY29sdW1ucyB9IDoge30pLFxuICAgIHBhZ2VTaXplOiBjb25maWdVdGlscy5wb3NpdGl2ZUludChcbiAgICAgIGNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIFwiU0VBUkNIX1BBR0VfU0laRVwiLFxuICAgICAgREVGQVVMVF9QQUdFX1NJWkUsXG4gICAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgICApLFxuICAgIG1vZGU6IHJlc29sdmVNb2RlKGNvbmZpZy5tb2RlKSxcbiAgICAuLi5vYmplY3Qub3B0aW9uYWwoXG4gICAgICBcImVtYmVkZGluZ01vZGVsXCIsXG4gICAgICBjb25maWdVdGlscy5zdHJpbmcoY29uZmlnLmVtYmVkZGluZ01vZGVsLCBcIlNFQVJDSF9FTUJFRERJTkdfTU9ERUxcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpLFxuICAgICksXG4gICAgdGltZW91dE1zOiBjb25maWdVdGlscy5wb3NpdGl2ZUludChcbiAgICAgIGNvbmZpZy50aW1lb3V0TXMsXG4gICAgICBcIlNFQVJDSF9USU1FT1VUX01TXCIsXG4gICAgICBERUZBVUxUX1RJTUVPVVRfTVMsXG4gICAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgICApLFxuICAgIGFsbG93V3JpdGU6XG4gICAgICBjb25maWdVdGlscy5ib29sZWFuKGNvbmZpZy5hbGxvd1dyaXRlLCBcIlNFQVJDSF9XUklURVwiLCBjb25maWdVdGlscy5FTlZfT05MWSkgPz8gZmFsc2UsXG4gICAgLi4uKGNvbmZpZy5lbnN1cmVPblNldHVwID8geyBlbnN1cmVPblNldHVwOiBjb25maWcuZW5zdXJlT25TZXR1cCB9IDoge30pLFxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBjYWxsZXItc3VwcGxpZWQgaW5kZXggcmVmZXJlbmNlIChhIGZ1bGwgVUMgbmFtZSBvciBhIGNvbmZpZ3VyZWRcbiAqIGFsaWFzKSBpbnRvIGEgY29uY3JldGUgaW5kZXggbmFtZS4gRmFsbHMgYmFjayB0byB0aGUgZGVmYXVsdCBpbmRleCB3aGVuIHRoZVxuICogcmVmZXJlbmNlIGlzIGVtcHR5LiBSZXR1cm5zIGBudWxsYCB3aGVuIG5vdGhpbmcgY2FuIGJlIHJlc29sdmVkIHNvIGNhbGxlcnNcbiAqIHJhaXNlIGEgc3RhYmxlLCB1c2VyLWZhY2luZyBlcnJvciByYXRoZXIgdGhhbiBjYWxsaW5nIGEgcGhhbnRvbSBpbmRleC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbmRleE5hbWUoXG4gIGNvbmZpZzogUmVzb2x2ZWRTZWFyY2hDb25maWcsXG4gIHJlZmVyZW5jZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHJlZiA9IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwocmVmZXJlbmNlKTtcbiAgaWYgKHJlZiA9PT0gbnVsbCkgcmV0dXJuIGNvbmZpZy5kZWZhdWx0SW5kZXggPz8gbnVsbDtcbiAgY29uc3QgYnlBbGlhcyA9IGNvbmZpZy5pbmRleGVzLmZpbmQoKGkpID0+IGkuYWxpYXMgPT09IHJlZiB8fCBpLm5hbWUgPT09IHJlZik7XG4gIGlmIChieUFsaWFzKSByZXR1cm4gYnlBbGlhcy5uYW1lO1xuICAvLyBBY2NlcHQgYW4gdW5yZWdpc3RlcmVkIGJ1dCBmdWxseS1xdWFsaWZpZWQgVUMgbmFtZSAodGhyZWUgZG90dGVkIHBhcnRzKS5cbiAgaWYgKHJlZi5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aCA9PT0gMykgcmV0dXJuIHJlZjtcbiAgcmV0dXJuIGNvbmZpZy5kZWZhdWx0SW5kZXggPz8gbnVsbDtcbn1cblxuLyoqIFRoZSBrbm93biBjb25maWcgZm9yIGFuIGluZGV4IG5hbWUsIHdoZW4gdGhlIHBsdWdpbiB3YXMgdG9sZCBhYm91dCBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleENvbmZpZ0ZvcihcbiAgY29uZmlnOiBSZXNvbHZlZFNlYXJjaENvbmZpZyxcbiAgbmFtZTogc3RyaW5nLFxuKTogUmVzb2x2ZWRJbmRleENvbmZpZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjb25maWcuaW5kZXhlcy5maW5kKChpKSA9PiBpLm5hbWUgPT09IG5hbWUgfHwgaS5hbGlhcyA9PT0gbmFtZSk7XG59XG4iXX0=
@@ -33,7 +33,7 @@ import { Pool, type PoolClient, type PoolConfig } from "pg";
33
33
  * `store intelligence`. Postgres indexes a hyphenated word as the compound
34
34
  * lexeme PLUS each of its parts, but compiles a hyphenated QUERY to the
35
35
  * compound alone - so `store-intelligence` demands a `store-intellig` lexeme
36
- * that a document titled `racetrac-store-intelligence` does not have, and the
36
+ * that a document titled `sample-store-intelligence` does not have, and the
37
37
  * search silently returns nothing while `store intelligence` returns
38
38
  * everything. Same for `.` and `_` in a table reference.
39
39
  *
@@ -38,7 +38,7 @@ const RESERVED_COLUMNS = new Set(["id", "search_text", "document", "search_vecto
38
38
  * `store intelligence`. Postgres indexes a hyphenated word as the compound
39
39
  * lexeme PLUS each of its parts, but compiles a hyphenated QUERY to the
40
40
  * compound alone - so `store-intelligence` demands a `store-intellig` lexeme
41
- * that a document titled `racetrac-store-intelligence` does not have, and the
41
+ * that a document titled `sample-store-intelligence` does not have, and the
42
42
  * search silently returns nothing while `store intelligence` returns
43
43
  * everything. Same for `.` and `_` in a table reference.
44
44
  *
@@ -333,4 +333,4 @@ export class LakebaseSearchBackend {
333
333
  }
334
334
  }
335
335
  }
336
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFrZWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGFrZWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVE5RSxPQUFPLEVBQUUsSUFBSSxFQUFvQyxNQUFNLElBQUksQ0FBQztBQUU1RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFN0MsdUZBQXVGO0FBQ3ZGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRXJGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFhO0lBQ3pDLE9BQU87UUFDTCxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FDaEMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUNyRCxLQUFLLENBQ047S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQXdCLEVBQUUsV0FBc0IsR0FBRztJQUMzRSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2hFLENB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QUFFLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQVcsRUFBRSxDQUFDO1FBQ3RDLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExha2ViYXNlIChQb3N0Z3JlcykgZnVsbC10ZXh0IHJ1bnRpbWUgYmVoaW5kIGBsYWtlYmFzZUFpU2VhcmNoYC4gSXQgcHJvdmlzaW9uc1xuICogYSBzaW5nbGUgdGFibGUgcGVyIGluZGV4IGFsaWFzLCBpbmRleGVzIGEgZ2VuZXJhdGVkXG4gKiBgdHN2ZWN0b3JgLCBhbmQgYW5zd2VycyBxdWVyaWVzIHdpdGggYSBwcmVmaXggYHRvX3RzcXVlcnlgICsgYHRzX3JhbmtgLlxuICpcbiAqIFF1ZXJpZXMgYXJlIGNvbXBpbGVkIHJhdGhlciB0aGFuIHBhc3NlZCB0aHJvdWdoIGB3ZWJzZWFyY2hfdG9fdHNxdWVyeWAsXG4gKiBiZWNhdXNlIGEgc2VhcmNoIGJveCBuZWVkcyB0d28gdGhpbmdzIHRoYXQgZnVuY3Rpb24gZG9lcyBub3QgZ2l2ZTpcbiAqIHB1bmN0dWF0aW9uLWluc2Vuc2l0aXZpdHkgKHNvIGBzdG9yZS1pbnRlbGxpZ2VuY2VgIG1hdGNoZXMgdGhlIHNhbWUgcm93cyBhc1xuICogYHN0b3JlIGludGVsbGlnZW5jZWApIGFuZCBwcmVmaXggbWF0Y2hpbmcgKHNvIGBpbnRlbGAgcmVhY2hlc1xuICogYGludGVsbGlnZW5jZWApLiBTZWUge0BsaW5rIHRvU2VhcmNoVGVybXN9IC8ge0BsaW5rIHRvVHNRdWVyeX0uXG4gKlxuICogVGhlIHdob2xlIHBvaW50IGlzIHBhcml0eTogdGhpcyBiYWNrZW5kIHJldHVybnMgdGhlIEVYQUNUIHNhbWVcbiAqIGBAZGJ4LXRvb2xzL3NoYXJlZC1zZWFyY2hgIHNoYXBlcyAoYFNlYXJjaFJlc3VsdGAgLyBgU2VhcmNoSGl0YCAvXG4gKiBgVXBzZXJ0UmVzdWx0YCkgYXMgdGhlIFZlY3RvciBTZWFyY2ggYmFja2VuZCwgc28gdGhlIGNsaWVudCwgdGhlIE1hc3RyYVxuICogdG9vbHMsIHRoZSByb3V0ZXMsIGFuZCB0aGUgUmVhY3Qgc2VhcmNoIGJveCBjYW5ub3QgdGVsbCB3aGljaCBvbmUgYW5zd2VyZWQuXG4gKiBBIGhpdCdzIGBpZGAgaXMgdGhlIHByaW1hcnkga2V5LCBpdHMgYHNjb3JlYCBpcyB0aGUgdGV4dC1yYW5rLCBhbmQgYGZpZWxkc2BcbiAqIGlzIHRoZSBzdG9yZWQgZG9jdW1lbnQgbWludXMgdGhlIGludGVybmFsIGNvbHVtbnMuXG4gKlxuICogU3RhbmRhbG9uZSBjYWxsZXJzIGNhbiBzdXBwbHkgYSBgUG9vbENvbmZpZ2AgZmFjdG9yeSBhbmQgbGV0IHRoaXMgYmFja2VuZCBvd25cbiAqIHRoZSByZXN1bHRpbmcgcG9vbC4gQXBwS2l0IGludGVncmF0aW9ucyBpbnN0ZWFkIHN1cHBseSB0aGUgTGFrZWJhc2UgcGx1Z2luJ3NcbiAqIG1hbmFnZWQgcG9vbCBkaXJlY3RseSwgcHJlc2VydmluZyBpdHMgcm91dGluZyBhbmQgY3JlZGVudGlhbCByZWZyZXNoLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBFeGVjdXRpb25FcnJvciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IHBvc3RncmVzQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tIFwiQGRieC10b29scy9wb3N0Z3Jlc1wiO1xuaW1wb3J0IHsgYXN5bmNVdGlscywgbG9nLCBvYmplY3QsIHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHtcbiAgU2VhcmNoRG9jdW1lbnQsXG4gIFNlYXJjaEhpdCxcbiAgU2VhcmNoUmVxdWVzdCxcbiAgU2VhcmNoUmVzdWx0LFxuICBVcHNlcnRSZXN1bHQsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1zZWFyY2hcIjtcbmltcG9ydCB7IFBvb2wsIHR5cGUgUG9vbENsaWVudCwgdHlwZSBQb29sQ29uZmlnIH0gZnJvbSBcInBnXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJzZWFyY2gvbGFrZWJhc2VcIik7XG5cbi8qKiBUaGUgaW50ZXJuYWwgY29sdW1ucyBldmVyeSBzZWFyY2ggdGFibGUgY2FycmllcywgZXhjbHVkZWQgZnJvbSBhIGhpdCdzIGBmaWVsZHNgLiAqL1xuY29uc3QgUkVTRVJWRURfQ09MVU1OUyA9IG5ldyBTZXQoW1wiaWRcIiwgXCJzZWFyY2hfdGV4dFwiLCBcImRvY3VtZW50XCIsIFwic2VhcmNoX3ZlY3RvclwiXSk7XG5cbi8qKlxuICogU3BsaXQgYSBzZWFyY2gtYm94IHN0cmluZyBpbnRvIHRoZSB0ZXJtcyBhIHRzcXVlcnkgaXMgYnVpbHQgZnJvbSwgdXNpbmcgdGhlXG4gKiBzaGFyZWQgYEBkYngtdG9vbHMvc2hhcmVkLWNvcmVgIHRva2VuaXplciBzbyB0aGUgc3BsaXR0aW5nIHJ1bGVzIHN0YXlcbiAqIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgdG9vbGtpdC5cbiAqXG4gKiBTcGxpdHRpbmcgb24gcHVuY3R1YXRpb24gaXMgd2hhdCBtYWtlcyBgc3RvcmUtaW50ZWxsaWdlbmNlYCBiZWhhdmUgbGlrZVxuICogYHN0b3JlIGludGVsbGlnZW5jZWAuIFBvc3RncmVzIGluZGV4ZXMgYSBoeXBoZW5hdGVkIHdvcmQgYXMgdGhlIGNvbXBvdW5kXG4gKiBsZXhlbWUgUExVUyBlYWNoIG9mIGl0cyBwYXJ0cywgYnV0IGNvbXBpbGVzIGEgaHlwaGVuYXRlZCBRVUVSWSB0byB0aGVcbiAqIGNvbXBvdW5kIGFsb25lIC0gc28gYHN0b3JlLWludGVsbGlnZW5jZWAgZGVtYW5kcyBhIGBzdG9yZS1pbnRlbGxpZ2AgbGV4ZW1lXG4gKiB0aGF0IGEgZG9jdW1lbnQgdGl0bGVkIGByYWNldHJhYy1zdG9yZS1pbnRlbGxpZ2VuY2VgIGRvZXMgbm90IGhhdmUsIGFuZCB0aGVcbiAqIHNlYXJjaCBzaWxlbnRseSByZXR1cm5zIG5vdGhpbmcgd2hpbGUgYHN0b3JlIGludGVsbGlnZW5jZWAgcmV0dXJuc1xuICogZXZlcnl0aGluZy4gU2FtZSBmb3IgYC5gIGFuZCBgX2AgaW4gYSB0YWJsZSByZWZlcmVuY2UuXG4gKlxuICogYGNhbWVsQ2FzZTogZmFsc2VgIGlzIGxvYWQtYmVhcmluZyByYXRoZXIgdGhhbiBhIGRlZmF1bHQ6IHRoZSBjYW1lbENhc2VcbiAqIHNwbGl0dGVyIGFsc28gYnJlYWtzIGRpZ2l0IHJ1bnMsIHR1cm5pbmcgYGdwdDRgIGludG8gYGdwdGAgKyBgNGAgYW5kIGBzM2BcbiAqIGludG8gYHNgICsgYDNgLiBQb3N0Z3JlcyBpbmRleGVzIGVhY2ggb2YgdGhvc2UgYXMgT05FIGxleGVtZSwgc28gbm8gbGV4ZW1lXG4gKiBldmVyIHN0YXJ0cyB3aXRoIHRoZSB0cmFpbGluZyBkaWdpdHMgYW5kIHRoZSBwcmVjaXNlIHBhc3MgY291bGQgbm90IG1hdGNoXG4gKiB0aGVtLiBLZWVwaW5nIHB1bmN0dWF0aW9uIGFzIHRoZSBvbmx5IGJvdW5kYXJ5IG1pcnJvcnMgaG93IHRoZSBpbmRleCB3YXNcbiAqIGJ1aWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9TZWFyY2hUZXJtcyhxdWVyeTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgIC4uLnN0cmluZ1V0aWxzLnRva2VuaXplV2l0aE9wdGlvbnMoXG4gICAgICB7IGxvd2VyQ2FzZTogdHJ1ZSwgY2FtZWxDYXNlOiBmYWxzZSwgZGlzdGluY3Q6IHRydWUgfSxcbiAgICAgIHF1ZXJ5LFxuICAgICksXG4gIF07XG59XG5cbi8qKlxuICogQ29tcGlsZSB0ZXJtcyBpbnRvIGEgYHRvX3RzcXVlcnlgIGlucHV0IHdoZXJlIGV2ZXJ5IHRlcm0gaXMgYSBQUkVGSVgsIHNvIGFcbiAqIHBhcnRpYWxseSB0eXBlZCB3b3JkIHN0aWxsIG1hdGNoZXMgKGBpbnRlbDoqYCByZWFjaGVzIGBpbnRlbGxpZ2VuY2VgKS5cbiAqXG4gKiBUZXJtcyBjYXJyeSBvbmx5IGxldHRlcnMgYW5kIGRpZ2l0cyBieSBjb25zdHJ1Y3Rpb24sIHNvIG5vbmUgb2YgdHNxdWVyeSdzXG4gKiBvcGVyYXRvcnMgKGAmIHwgISAoICkgOiAqYCkgY2FuIHN1cnZpdmUgZnJvbSB1c2VyIGlucHV0IGludG8gdGhlIGNvbXBpbGVkXG4gKiBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1RzUXVlcnkodGVybXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBvcGVyYXRvcjogXCImXCIgfCBcInxcIiA9IFwiJlwiKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRlcm1zLm1hcCgodGVybSkgPT4gYCR7dGVybX06KmApLmpvaW4oYCAke29wZXJhdG9yfSBgKTtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIGEgc2luZ2xlLWluZGV4IExha2ViYXNlIHNlYXJjaCAobWlycm9ycyB0aGUgY2xpZW50J3MgYFNlYXJjaE9wdGlvbnNgKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFrZWJhc2VTZWFyY2hPcHRpb25zIHtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIGZpbHRlcj86IFNlYXJjaFJlcXVlc3RbXCJmaWx0ZXJcIl07XG4gIHNjb3JlVGhyZXNob2xkPzogbnVtYmVyO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuLyoqIE9uZSByYXcgc2VhcmNoIHJvdyBiZWZvcmUgaXQgaXMgc2hhcGVkIGludG8gYSB7QGxpbmsgU2VhcmNoSGl0fS4gKi9cbmludGVyZmFjZSBTZWFyY2hSb3cge1xuICBpZDogc3RyaW5nO1xuICBkb2N1bWVudDogdW5rbm93bjtcbiAgc2NvcmU6IG51bWJlcjtcbn1cblxuLyoqIFRoZSBtYW5hZ2VkLXBvb2wgc3VyZmFjZSBuZWVkZWQgYnkgdGhlIHNlYXJjaCBiYWNrZW5kLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYmFzZVNlYXJjaFBvb2wge1xuICBjb25uZWN0KCk6IFByb21pc2U8UG9vbENsaWVudD47XG59XG5cbnR5cGUgTGFrZWJhc2VQb29sU291cmNlID1cbiAgfCAoKCkgPT4gUHJvbWlzZTxQb29sQ29uZmlnPiB8IFBvb2xDb25maWcpXG4gIHwgTGFrZWJhc2VTZWFyY2hQb29sXG4gIHwgeyBtYW5hZ2VkUG9vbDogKCkgPT4gTGFrZWJhc2VTZWFyY2hQb29sIHwgbnVsbCB8IHVuZGVmaW5lZCB9O1xuXG4vKiogT3B0aW9ucyBmb3IgcHJvdmlzaW9uaW5nIGEgTGFrZWJhc2UtYmFja2VkIGluZGV4LiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYmFzZVByb3Zpc2lvbk9wdGlvbnMge1xuICAvKiogVGV4dCBjb2x1bW4gZW1iZWRkZWQgaW50byB0aGUgc2VhcmNoIHZlY3Rvci4gRGVmYXVsdHMgdG8gYHRleHRgLiAqL1xuICB0ZXh0Q29sdW1uPzogc3RyaW5nO1xuICAvKiogRG9jdW1lbnRzIHRvIHNlZWQgd2hlbiB0aGUgdGFibGUgaXMgZW1wdHkuICovXG4gIHNlZWQ/OiBTZWFyY2hEb2N1bWVudFtdO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuLyoqXG4gKiBBIFBvc3RncmVzIGZ1bGwtdGV4dCBiYWNrZW5kLiBPbmUgaW5zdGFuY2UgaXMgc2hhcmVkIGFjcm9zcyBpbmRleGVzOyBlYWNoXG4gKiBpbmRleCBtYXBzIHRvIGEgdGFibGUgd2hvc2UgbmFtZSBpcyBkZXJpdmVkIGZyb20gdGhlIGluZGV4IHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGNsYXNzIExha2ViYXNlU2VhcmNoQmFja2VuZCB7XG4gIHByaXZhdGUgcG9vbDogTGFrZWJhc2VTZWFyY2hQb29sIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHBvb2xQcm9taXNlOiBQcm9taXNlPExha2ViYXNlU2VhcmNoUG9vbD4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgb3duc1Bvb2wgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm92aXNpb25lZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9vbFNvdXJjZTogTGFrZWJhc2VQb29sU291cmNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hID0gXCJwdWJsaWNcIixcbiAgICAvKiogSG93IGEgcG9vbCBpcyBidWlsdCBmcm9tIHRoZSByZXNvbHZlZCBjb25maWcuIE92ZXJyaWRhYmxlIGZvciB0ZXN0cy4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvb2xGYWN0b3J5OiAoY29uZmlnOiBQb29sQ29uZmlnKSA9PiBQb29sID0gKGNvbmZpZykgPT4gbmV3IFBvb2woY29uZmlnKSxcbiAgKSB7fVxuXG4gIC8qKiBMYXppbHkgYnVpbGQgKGFuZCBjYWNoZSkgdGhlIHBnIHBvb2wgZnJvbSB0aGUgcmVzb2x2ZWQgTGFrZWJhc2UgY29uZmlnLiAqL1xuICBwcml2YXRlIGFzeW5jIGdldFBvb2woKTogUHJvbWlzZTxMYWtlYmFzZVNlYXJjaFBvb2w+IHtcbiAgICBpZiAodGhpcy5wb29sKSByZXR1cm4gdGhpcy5wb29sO1xuICAgIGlmIChcIm1hbmFnZWRQb29sXCIgaW4gdGhpcy5wb29sU291cmNlKSB7XG4gICAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDIwMDsgYXR0ZW1wdCArPSAxKSB7XG4gICAgICAgIHRoaXMucG9vbCA9IHRoaXMucG9vbFNvdXJjZS5tYW5hZ2VkUG9vbCgpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMucG9vbCkgcmV0dXJuIHRoaXMucG9vbDtcbiAgICAgICAgYXdhaXQgYXN5bmNVdGlscy5zbGVlcCg1MCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXhlY3V0aW9uRXJyb3IoXCJzZWFyY2ggKGxha2ViYXNlKTogbWFuYWdlZCBwb29sIGRpZCBub3QgaW5pdGlhbGl6ZVwiLCB7XG4gICAgICAgIGNvbnRleHQ6IHsgb3BlcmF0aW9uOiBcImNvbm5lY3RcIiB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5wb29sU291cmNlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMucG9vbCA9IHRoaXMucG9vbFNvdXJjZTtcbiAgICAgIHJldHVybiB0aGlzLnBvb2w7XG4gICAgfVxuICAgIGNvbnN0IHBnQ29uZmlnRmFjdG9yeSA9IHRoaXMucG9vbFNvdXJjZTtcbiAgICB0aGlzLnBvb2xQcm9taXNlID8/PSAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgcGdDb25maWdGYWN0b3J5KCk7XG4gICAgICBjb25zdCBwb29sID0gdGhpcy5wb29sRmFjdG9yeShwb3N0Z3Jlc0Nvbm5lY3Rpb25PcHRpb25zKGNvbmZpZykpO1xuICAgICAgdGhpcy5wb29sID0gcG9vbDtcbiAgICAgIHRoaXMub3duc1Bvb2wgPSB0cnVlO1xuICAgICAgcmV0dXJuIHBvb2w7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gdGhpcy5wb29sUHJvbWlzZTtcbiAgfVxuXG4gIC8qKiBDbG9zZSB0aGUgcG9vbCBzbyBhIHJlc3RhcnRlZCBhcHAgcmVidWlsZHMgaXQuICovXG4gIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBvb2wgPSB0aGlzLnBvb2w7XG4gICAgdGhpcy5wb29sID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucG9vbFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wcm92aXNpb25lZC5jbGVhcigpO1xuICAgIGlmIChwb29sICYmIHRoaXMub3duc1Bvb2wpIGF3YWl0IChwb29sIGFzIFBvb2wpLmVuZCgpO1xuICAgIHRoaXMub3duc1Bvb2wgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggYSBMYWtlYmFzZS1iYWNrZWQgaW5kZXguIFJldHVybnMgaGl0cyBzb3J0ZWQgbW9zdC1yZWxldmFudC1maXJzdCxcbiAgICogc2hhcGVkIGlkZW50aWNhbGx5IHRvIHRoZSBWZWN0b3IgU2VhcmNoIGJhY2tlbmQuXG4gICAqL1xuICBhc3luYyBzZWFyY2goXG4gICAgaW5kZXg6IHN0cmluZyxcbiAgICBxdWVyeTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IExha2ViYXNlU2VhcmNoT3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPFNlYXJjaFJlc3VsdD4ge1xuICAgIGNvbnN0IHRleHQgPSBzdHJpbmdVdGlscy50cmltVG9FbXB0eShxdWVyeSk7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlRm9yKGluZGV4KTtcbiAgICBjb25zdCBsaW1pdCA9IG9wdGlvbnMubGltaXQgPz8gMTA7XG4gICAgY29uc3QgcG9vbCA9IGF3YWl0IHRoaXMuZ2V0UG9vbCgpO1xuICAgIGNvbnN0IHRlcm1zID0gdG9TZWFyY2hUZXJtcyh0ZXh0KTtcblxuICAgIC8vIEFuIGVtcHR5IChvciBwdW5jdHVhdGlvbi1vbmx5KSBib3ggcmV0dXJucyByb3dzIHJhdGhlciB0aGFuIG5vdGhpbmcsIHNvXG4gICAgLy8gdGhlIFVJIHNob3dzIGNvbnRlbnQgYmVmb3JlIHRoZSB1c2VyIHR5cGVzIC0gYXMgYSBrZXl3b3JkIGluZGV4IHdvdWxkLlxuICAgIGlmICh0ZXJtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZmlsdGVyQ2xhdXNlKG9wdGlvbnMuZmlsdGVyLCAxKTtcbiAgICAgIGNvbnN0IGxpbWl0UG9zaXRpb24gPSBmaWx0ZXIucGFyYW1zLmxlbmd0aCArIDE7XG4gICAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMucXVlcnk8U2VhcmNoUm93PihcbiAgICAgICAgcG9vbCxcbiAgICAgICAgYFNFTEVDVCBpZCwgZG9jdW1lbnQsIDA6OmZsb2F0NCBBUyBzY29yZVxuICAgICAgICAgICBGUk9NICR7dGFibGV9XG4gICAgICAgICAgV0hFUkUgVFJVRSR7ZmlsdGVyLnNxbH1cbiAgICAgICAgICBPUkRFUiBCWSBpZFxuICAgICAgICAgIExJTUlUICQke2xpbWl0UG9zaXRpb259YCxcbiAgICAgICAgWy4uLmZpbHRlci5wYXJhbXMsIGxpbWl0XSxcbiAgICAgICAgb3B0aW9ucy5zaWduYWwsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMudG9SZXN1bHQodGV4dCwgaW5kZXgsIHJvd3MsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIFByZWNpc2UgcGFzczogZXZlcnkgdGVybSBtdXN0IG1hdGNoLCBlYWNoIGFzIGEgcHJlZml4LlxuICAgIGNvbnN0IHN0cmljdEZpbHRlciA9IHRoaXMuZmlsdGVyQ2xhdXNlKG9wdGlvbnMuZmlsdGVyLCAyKTtcbiAgICBjb25zdCBzdHJpY3RMaW1pdFBvc2l0aW9uID0gc3RyaWN0RmlsdGVyLnBhcmFtcy5sZW5ndGggKyAyO1xuICAgIGNvbnN0IHN0cmljdCA9IGF3YWl0IHRoaXMucXVlcnk8U2VhcmNoUm93PihcbiAgICAgIHBvb2wsXG4gICAgICBgU0VMRUNUIGlkLCBkb2N1bWVudCwgdHNfcmFuayhzZWFyY2hfdmVjdG9yLCB0b190c3F1ZXJ5KCdlbmdsaXNoJywgJDEpKSBBUyBzY29yZVxuICAgICAgICAgRlJPTSAke3RhYmxlfVxuICAgICAgICBXSEVSRSBzZWFyY2hfdmVjdG9yIEBAIHRvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAkMSlcbiAgICAgICAgICAke3N0cmljdEZpbHRlci5zcWx9XG4gICAgICAgIE9SREVSIEJZIHNjb3JlIERFU0NcbiAgICAgICAgTElNSVQgJCR7c3RyaWN0TGltaXRQb3NpdGlvbn1gLFxuICAgICAgW3RvVHNRdWVyeSh0ZXJtcyksIC4uLnN0cmljdEZpbHRlci5wYXJhbXMsIGxpbWl0XSxcbiAgICAgIG9wdGlvbnMuc2lnbmFsLFxuICAgICk7XG4gICAgaWYgKHN0cmljdC5yb3dzLmxlbmd0aCA+IDApIHJldHVybiB0aGlzLnRvUmVzdWx0KHRleHQsIGluZGV4LCBzdHJpY3Qucm93cywgb3B0aW9ucyk7XG5cbiAgICAvLyBOb3RoaW5nIG1hdGNoZWQgRVZFUlkgdGVybSwgc28gcmVsYXggcmF0aGVyIHRoYW4gcmV0dXJuIGFuIGVtcHR5IGJveDpcbiAgICAvLyBhbnkgb25lIHRlcm0gaXMgZW5vdWdoLCBhbmQgYW4gYElMSUtFYCBwYXNzIGFkZGl0aW9uYWxseSBjYXRjaGVzIGFcbiAgICAvLyBmcmFnbWVudCB0aGF0IGlzIG5vdCBhIHByZWZpeCAoYHRlbGxpZ2VuY2VgKSBvciBhIHRva2VuIHRoZSB0ZXh0LXNlYXJjaFxuICAgIC8vIHBhcnNlciBzcGxpdCBkaWZmZXJlbnRseSB0aGFuIGV4cGVjdGVkLiBTdWJzdHJpbmcgbWF0Y2hpbmcgY2Fubm90IHVzZVxuICAgIC8vIHRoZSBHSU4gaW5kZXgsIHdoaWNoIGlzIHdoeSBpdCBvbmx5IHJ1bnMgb25jZSB0aGUgaW5kZXhlZCBwYXNzIGZhaWxzLlxuICAgIGNvbnN0IHJlbGF4ZWRGaWx0ZXIgPSB0aGlzLmZpbHRlckNsYXVzZShvcHRpb25zLmZpbHRlciwgMyk7XG4gICAgY29uc3QgcmVsYXhlZExpbWl0UG9zaXRpb24gPSByZWxheGVkRmlsdGVyLnBhcmFtcy5sZW5ndGggKyAzO1xuICAgIGNvbnN0IHJlbGF4ZWQgPSBhd2FpdCB0aGlzLnF1ZXJ5PFNlYXJjaFJvdz4oXG4gICAgICBwb29sLFxuICAgICAgYFNFTEVDVCBpZCwgZG9jdW1lbnQsIHRzX3Jhbmsoc2VhcmNoX3ZlY3RvciwgdG9fdHNxdWVyeSgnZW5nbGlzaCcsICQxKSkgQVMgc2NvcmVcbiAgICAgICAgIEZST00gJHt0YWJsZX1cbiAgICAgICAgV0hFUkUgKHNlYXJjaF92ZWN0b3IgQEAgdG9fdHNxdWVyeSgnZW5nbGlzaCcsICQxKVxuICAgICAgICAgICBPUiBzZWFyY2hfdGV4dCBJTElLRSBBTlkoJDI6OnRleHRbXSkpXG4gICAgICAgICAgJHtyZWxheGVkRmlsdGVyLnNxbH1cbiAgICAgICAgT1JERVIgQlkgc2NvcmUgREVTQ1xuICAgICAgICBMSU1JVCAkJHtyZWxheGVkTGltaXRQb3NpdGlvbn1gLFxuICAgICAgW3RvVHNRdWVyeSh0ZXJtcywgXCJ8XCIpLCB0ZXJtcy5tYXAoKHRlcm0pID0+IGAlJHt0ZXJtfSVgKSwgLi4ucmVsYXhlZEZpbHRlci5wYXJhbXMsIGxpbWl0XSxcbiAgICAgIG9wdGlvbnMuc2lnbmFsLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMudG9SZXN1bHQodGV4dCwgaW5kZXgsIHJlbGF4ZWQucm93cywgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogU2hhcGUgcmF3IHJvd3MgaW50byB0aGUgYFNlYXJjaFJlc3VsdGAgYm90aCBiYWNrZW5kcyByZXR1cm4uICovXG4gIHByaXZhdGUgdG9SZXN1bHQoXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICBpbmRleDogc3RyaW5nLFxuICAgIHJvd3M6IFNlYXJjaFJvd1tdLFxuICAgIG9wdGlvbnM6IExha2ViYXNlU2VhcmNoT3B0aW9ucyxcbiAgKTogU2VhcmNoUmVzdWx0IHtcbiAgICBjb25zdCBoaXRzOiBTZWFyY2hIaXRbXSA9IHJvd3NcbiAgICAgIC5tYXAoKHJvdykgPT4gKHtcbiAgICAgICAgaWQ6IFN0cmluZyhyb3cuaWQpLFxuICAgICAgICBzY29yZTogTnVtYmVyKHJvdy5zY29yZSkgfHwgMCxcbiAgICAgICAgZmllbGRzOiB0aGlzLnRvRmllbGRzKHJvdy5kb2N1bWVudCksXG4gICAgICB9KSlcbiAgICAgIC5maWx0ZXIoKGhpdCkgPT4gb3B0aW9ucy5zY29yZVRocmVzaG9sZCA9PT0gdW5kZWZpbmVkIHx8IGhpdC5zY29yZSA+PSBvcHRpb25zLnNjb3JlVGhyZXNob2xkKTtcbiAgICByZXR1cm4geyBxdWVyeSwgaW5kZXgsIGhpdHMsIGNvdW50OiBoaXRzLmxlbmd0aCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSB0aGUgdGFibGUgKyBmdWxsLXRleHQgaW5kZXggZXhpc3QgYW5kIHNlZWQgZG9jdW1lbnRzIHdoZW4gZW1wdHkuXG4gICAqIElkZW1wb3RlbnQsIHNvIGl0IGlzIHNhZmUgdG8gY2FsbCBvbiBldmVyeSBib290LlxuICAgKi9cbiAgYXN5bmMgcHJvdmlzaW9uKGluZGV4OiBzdHJpbmcsIG9wdGlvbnM6IExha2ViYXNlUHJvdmlzaW9uT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGVGb3IoaW5kZXgpO1xuICAgIGNvbnN0IHBvb2wgPSBhd2FpdCB0aGlzLmdldFBvb2woKTtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVRhYmxlKHBvb2wsIHRhYmxlLCBvcHRpb25zLnNpZ25hbCk7XG5cbiAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMucXVlcnk8eyBjb3VudDogc3RyaW5nIH0+KFxuICAgICAgcG9vbCxcbiAgICAgIGBTRUxFQ1QgY291bnQoKik6OnRleHQgQVMgY291bnQgRlJPTSAke3RhYmxlfWAsXG4gICAgICBbXSxcbiAgICAgIG9wdGlvbnMuc2lnbmFsLFxuICAgICk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBOdW1iZXIocm93c1swXT8uY291bnQgPz8gXCIwXCIpO1xuICAgIGNvbnN0IHNlZWQgPSBvcHRpb25zLnNlZWQgPz8gW107XG4gICAgaWYgKGV4aXN0aW5nID09PSAwICYmIHNlZWQubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy51cHNlcnQocG9vbCwgdGFibGUsIHNlZWQsIG9wdGlvbnMudGV4dENvbHVtbiA/PyBcInRleHRcIiwgb3B0aW9ucy5zaWduYWwpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJpbmRleC1zZWVkZWRcIiwgeyBpbmRleCwgdGFibGUsIGNvdW50OiBzZWVkLmxlbmd0aCB9KTtcbiAgICAgIHJldHVybiBzZWVkLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgLyoqIEFkZCBvciB1cGRhdGUgZG9jdW1lbnRzIGJ5IHByaW1hcnkga2V5LiAqL1xuICBhc3luYyBhZGREb2N1bWVudHMoXG4gICAgaW5kZXg6IHN0cmluZyxcbiAgICBkb2N1bWVudHM6IFNlYXJjaERvY3VtZW50W10sXG4gICAgdGV4dENvbHVtbiA9IFwidGV4dFwiLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPFVwc2VydFJlc3VsdD4ge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZUZvcihpbmRleCk7XG4gICAgY29uc3QgcG9vbCA9IGF3YWl0IHRoaXMuZ2V0UG9vbCgpO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlVGFibGUocG9vbCwgdGFibGUsIHNpZ25hbCk7XG4gICAgYXdhaXQgdGhpcy51cHNlcnQocG9vbCwgdGFibGUsIGRvY3VtZW50cywgdGV4dENvbHVtbiwgc2lnbmFsKTtcbiAgICByZXR1cm4geyBpbmRleCwgY291bnQ6IGRvY3VtZW50cy5sZW5ndGggfTtcbiAgfVxuXG4gIC8qKiBEZWxldGUgZG9jdW1lbnRzIGJ5IHByaW1hcnkga2V5LiAqL1xuICBhc3luYyBkZWxldGVEb2N1bWVudHMoXG4gICAgaW5kZXg6IHN0cmluZyxcbiAgICBpZHM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4sXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8VXBzZXJ0UmVzdWx0PiB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlRm9yKGluZGV4KTtcbiAgICBjb25zdCBwb29sID0gYXdhaXQgdGhpcy5nZXRQb29sKCk7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShwb29sLCBgREVMRVRFIEZST00gJHt0YWJsZX0gV0hFUkUgaWQgPSBBTlkoJDEpYCwgW2lkcy5tYXAoU3RyaW5nKV0sIHNpZ25hbCk7XG4gICAgcmV0dXJuIHsgaW5kZXgsIGNvdW50OiBpZHMubGVuZ3RoIH07XG4gIH1cblxuICAvKiogQ3JlYXRlIHRoZSB0YWJsZSArIEdJTiBpbmRleCBvbmNlIHBlciB0YWJsZSAobWVtb2l6ZWQgYWNyb3NzIGNhbGxzKS4gKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVUYWJsZShcbiAgICBwb29sOiBMYWtlYmFzZVNlYXJjaFBvb2wsXG4gICAgdGFibGU6IHN0cmluZyxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMucHJvdmlzaW9uZWQuaGFzKHRhYmxlKSkgcmV0dXJuO1xuICAgIC8vIGBkb2N1bWVudGAgaG9sZHMgdGhlIHdob2xlIHJvdzsgYHNlYXJjaF90ZXh0YCBpcyB0aGUgaW5kZXhlZCB0ZXh0OyB0aGVcbiAgICAvLyBnZW5lcmF0ZWQgYHNlYXJjaF92ZWN0b3JgIGtlZXBzIHRoZSB0c3ZlY3RvciBpbiBsb2Nrc3RlcCB3aXRoIGl0IHNvIGFcbiAgICAvLyB3cml0ZSBuZXZlciBoYXMgdG8gY29tcHV0ZSB0aGUgdmVjdG9yIGJ5IGhhbmQuXG4gICAgYXdhaXQgdGhpcy5xdWVyeShwb29sLCBgQ1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTICR7dGhpcy5pZGVudCh0aGlzLnNjaGVtYSl9YCwgW10sIHNpZ25hbCk7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgIHBvb2wsXG4gICAgICBgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJHt0YWJsZX0gKFxuICAgICAgICAgaWQgdGV4dCBQUklNQVJZIEtFWSxcbiAgICAgICAgIHNlYXJjaF90ZXh0IHRleHQgTk9UIE5VTEwgREVGQVVMVCAnJyxcbiAgICAgICAgIGRvY3VtZW50IGpzb25iIE5PVCBOVUxMIERFRkFVTFQgJ3t9Jzo6anNvbmIsXG4gICAgICAgICBzZWFyY2hfdmVjdG9yIHRzdmVjdG9yIEdFTkVSQVRFRCBBTFdBWVMgQVMgKHRvX3RzdmVjdG9yKCdlbmdsaXNoJywgc2VhcmNoX3RleHQpKSBTVE9SRURcbiAgICAgICApYCxcbiAgICAgIFtdLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgIHBvb2wsXG4gICAgICBgQUxURVIgVEFCTEUgJHt0YWJsZX1cbiAgICAgICAgIEFERCBDT0xVTU4gSUYgTk9UIEVYSVNUUyBzZWFyY2hfdmVjdG9yIHRzdmVjdG9yXG4gICAgICAgICBHRU5FUkFURUQgQUxXQVlTIEFTICh0b190c3ZlY3RvcignZW5nbGlzaCcsIHNlYXJjaF90ZXh0KSkgU1RPUkVEYCxcbiAgICAgIFtdLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgIHBvb2wsXG4gICAgICBgQ1JFQVRFIElOREVYIElGIE5PVCBFWElTVFMgJHt0aGlzLmlkZW50KGAke3RoaXMuYmFyZU5hbWUodGFibGUpfV9mdHNgKX1cbiAgICAgICAgIE9OICR7dGFibGV9IFVTSU5HIGdpbiAoc2VhcmNoX3ZlY3RvcilgLFxuICAgICAgW10sXG4gICAgICBzaWduYWwsXG4gICAgKTtcbiAgICB0aGlzLnByb3Zpc2lvbmVkLmFkZCh0YWJsZSk7XG4gICAgbG9nZ2VyLmluZm8oXCJpbmRleC1jcmVhdGVkXCIsIHsgdGFibGUgfSk7XG4gIH1cblxuICAvKiogVXBzZXJ0IHJvd3M6IHRoZSB3aG9sZSBkb2N1bWVudCBhcyBqc29uYiArIGEgZmxhdHRlbmVkIHRleHQgYmxvYiB0byBpbmRleC4gKi9cbiAgcHJpdmF0ZSBhc3luYyB1cHNlcnQoXG4gICAgcG9vbDogTGFrZWJhc2VTZWFyY2hQb29sLFxuICAgIHRhYmxlOiBzdHJpbmcsXG4gICAgZG9jdW1lbnRzOiBTZWFyY2hEb2N1bWVudFtdLFxuICAgIHRleHRDb2x1bW46IHN0cmluZyxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBkb2Mgb2YgZG9jdW1lbnRzKSB7XG4gICAgICBjb25zdCBpZCA9IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoU3RyaW5nKGRvYy5pZCA/PyBkb2MuSUQgPz8gXCJcIikpID8/IHVuZGVmaW5lZDtcbiAgICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGVjdXRpb25FcnJvcihcInNlYXJjaCAobGFrZWJhc2UpOiBhIGRvY3VtZW50IGlzIG1pc3NpbmcgYW4gYGlkYFwiLCB7XG4gICAgICAgICAgY29udGV4dDogeyBvcGVyYXRpb246IFwiYWRkRG9jdW1lbnRzXCIgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGhpcy5zZWFyY2hUZXh0KGRvYywgdGV4dENvbHVtbik7XG4gICAgICBhd2FpdCB0aGlzLnF1ZXJ5KFxuICAgICAgICBwb29sLFxuICAgICAgICBgSU5TRVJUIElOVE8gJHt0YWJsZX0gKGlkLCBzZWFyY2hfdGV4dCwgZG9jdW1lbnQpXG4gICAgICAgICAgIFZBTFVFUyAoJDEsICQyLCAkMzo6anNvbmIpXG4gICAgICAgICBPTiBDT05GTElDVCAoaWQpIERPIFVQREFURVxuICAgICAgICAgICBTRVQgc2VhcmNoX3RleHQgPSBFWENMVURFRC5zZWFyY2hfdGV4dCwgZG9jdW1lbnQgPSBFWENMVURFRC5kb2N1bWVudGAsXG4gICAgICAgIFtpZCwgc2VhcmNoVGV4dCwgSlNPTi5zdHJpbmdpZnkoZG9jKV0sXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRoZSB0ZXh0IGEgcm93IGlzIGluZGV4ZWQgYnk6IHRoZSB0ZXh0IGNvbHVtbiBmaXJzdCwgdGhlbiBhbnkgb3RoZXIgc3RyaW5nIGZpZWxkLiAqL1xuICBwcml2YXRlIHNlYXJjaFRleHQoZG9jOiBTZWFyY2hEb2N1bWVudCwgdGV4dENvbHVtbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcmltYXJ5ID0gc3RyaW5nVXRpbHMudHJpbVRvRW1wdHkoU3RyaW5nKGRvY1t0ZXh0Q29sdW1uXSA/PyBcIlwiKSk7XG4gICAgY29uc3QgcmVzdCA9IE9iamVjdC5lbnRyaWVzKGRvYylcbiAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4ga2V5ICE9PSB0ZXh0Q29sdW1uICYmIGtleSAhPT0gXCJpZFwiICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgIC5tYXAoKFssIHZhbHVlXSkgPT4gdmFsdWUgYXMgc3RyaW5nKTtcbiAgICByZXR1cm4gW3ByaW1hcnksIC4uLnJlc3RdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgLyoqIEEgaGl0J3MgYGZpZWxkc2A6IHRoZSBzdG9yZWQgZG9jdW1lbnQgbWludXMgdGhlIHJlc2VydmVkL2ludGVybmFsIGtleXMuICovXG4gIHByaXZhdGUgdG9GaWVsZHMoZG9jdW1lbnQ6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgaWYgKCFvYmplY3QuaXNSZWNvcmQoZG9jdW1lbnQpKSByZXR1cm4ge307XG4gICAgY29uc3QgZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRvY3VtZW50KSkge1xuICAgICAgaWYgKFJFU0VSVkVEX0NPTFVNTlMuaGFzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgZmllbGRzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkcztcbiAgfVxuXG4gIC8qKiBDb21waWxlIEFwcEtpdCBzY2FsYXIvYXJyYXkgZmlsdGVycyBhZ2FpbnN0IHRoZSBzdG9yZWQgSlNPTiBkb2N1bWVudC4gKi9cbiAgcHJpdmF0ZSBmaWx0ZXJDbGF1c2UoXG4gICAgZmlsdGVyOiBTZWFyY2hSZXF1ZXN0W1wiZmlsdGVyXCJdLFxuICAgIHN0YXJ0UG9zaXRpb246IG51bWJlcixcbiAgKTogeyBzcWw6IHN0cmluZzsgcGFyYW1zOiB1bmtub3duW10gfSB7XG4gICAgaWYgKCFmaWx0ZXIgfHwgT2JqZWN0LmtleXMoZmlsdGVyKS5sZW5ndGggPT09IDApIHJldHVybiB7IHNxbDogXCJcIiwgcGFyYW1zOiBbXSB9O1xuICAgIGNvbnN0IGNsYXVzZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcGFyYW1zOiB1bmtub3duW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXIpKSB7XG4gICAgICBjb25zdCBrZXlQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBwYXJhbXMubGVuZ3RoO1xuICAgICAgcGFyYW1zLnB1c2goa2V5KTtcbiAgICAgIGNvbnN0IHZhbHVlUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgcGFyYW1zLmxlbmd0aDtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBwYXJhbXMucHVzaCh2YWx1ZS5tYXAoU3RyaW5nKSk7XG4gICAgICAgIGNsYXVzZXMucHVzaChgZG9jdW1lbnQgLT4+ICQke2tleVBvc2l0aW9ufSA9IEFOWSgkJHt2YWx1ZVBvc2l0aW9ufTo6dGV4dFtdKWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zLnB1c2goU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgIGNsYXVzZXMucHVzaChgZG9jdW1lbnQgLT4+ICQke2tleVBvc2l0aW9ufSA9ICQke3ZhbHVlUG9zaXRpb259YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHNxbDogYCBBTkQgJHtjbGF1c2VzLmpvaW4oXCIgQU5EIFwiKX1gLCBwYXJhbXMgfTtcbiAgfVxuXG4gIC8qKiBUaGUgZnVsbHktcXVhbGlmaWVkIHRhYmxlIG5hbWUgZm9yIGFuIGluZGV4IHJlZmVyZW5jZS4gKi9cbiAgcHJpdmF0ZSB0YWJsZUZvcihpbmRleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5pZGVudCh0aGlzLnNjaGVtYSl9LiR7dGhpcy5pZGVudCh0aGlzLmJhcmVOYW1lKGluZGV4KSl9YDtcbiAgfVxuXG4gIC8qKiBBIHNhZmUgYmFyZSB0YWJsZSBuYW1lIGRlcml2ZWQgZnJvbSBhbiBpbmRleCByZWZlcmVuY2UuICovXG4gIHByaXZhdGUgYmFyZU5hbWUocmVmZXJlbmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxhc3QgPSByZWZlcmVuY2Uuc3BsaXQoXCIuXCIpLmZpbHRlcihCb29sZWFuKS5wb3AoKSA/PyByZWZlcmVuY2U7XG4gICAgY29uc3Qgc2x1ZyA9IHN0cmluZ1V0aWxzLnRvU2x1ZyhsYXN0KS5yZXBsYWNlKC8tL2csIFwiX1wiKTtcbiAgICByZXR1cm4gc2x1Zy5sZW5ndGggPiAwID8gc2x1ZyA6IFwiZG9jdW1lbnRzXCI7XG4gIH1cblxuICAvKiogUXVvdGUgYSBQb3N0Z3JlcyBpZGVudGlmaWVyLiAqL1xuICBwcml2YXRlIGlkZW50KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcIiR7bmFtZS5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYDtcbiAgfVxuXG4gIC8qKiBSdW4gb25lIHF1ZXJ5IHVuZGVyIGV4dGVybmFsIGNhbmNlbGxhdGlvbi4gKi9cbiAgcHJpdmF0ZSBhc3luYyBxdWVyeTxUPihcbiAgICBwb29sOiBMYWtlYmFzZVNlYXJjaFBvb2wsXG4gICAgc3FsOiBzdHJpbmcsXG4gICAgcGFyYW1zOiB1bmtub3duW10sXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8eyByb3dzOiBUW10gfT4ge1xuICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHRocm93IEV4ZWN1dGlvbkVycm9yLmNhbmNlbGVkKCk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgcG9vbC5jb25uZWN0KCk7XG4gICAgbGV0IHJlbGVhc2VkID0gZmFsc2U7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHtcbiAgICAgIGlmIChyZWxlYXNlZCkgcmV0dXJuO1xuICAgICAgcmVsZWFzZWQgPSB0cnVlO1xuICAgICAgY2xpZW50LnJlbGVhc2UodHJ1ZSk7XG4gICAgfTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5xdWVyeShzcWwsIHBhcmFtcyk7XG4gICAgICByZXR1cm4geyByb3dzOiByZXN1bHQucm93cyBhcyBUW10gfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICBpZiAoIXJlbGVhc2VkKSBjbGllbnQucmVsZWFzZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
336
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFrZWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGFrZWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVE5RSxPQUFPLEVBQUUsSUFBSSxFQUFvQyxNQUFNLElBQUksQ0FBQztBQUU1RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFN0MsdUZBQXVGO0FBQ3ZGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRXJGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFhO0lBQ3pDLE9BQU87UUFDTCxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FDaEMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUNyRCxLQUFLLENBQ047S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQXdCLEVBQUUsV0FBc0IsR0FBRztJQUMzRSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2hFLENB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QUFFLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQVcsRUFBRSxDQUFDO1FBQ3RDLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExha2ViYXNlIChQb3N0Z3JlcykgZnVsbC10ZXh0IHJ1bnRpbWUgYmVoaW5kIGBsYWtlYmFzZUFpU2VhcmNoYC4gSXQgcHJvdmlzaW9uc1xuICogYSBzaW5nbGUgdGFibGUgcGVyIGluZGV4IGFsaWFzLCBpbmRleGVzIGEgZ2VuZXJhdGVkXG4gKiBgdHN2ZWN0b3JgLCBhbmQgYW5zd2VycyBxdWVyaWVzIHdpdGggYSBwcmVmaXggYHRvX3RzcXVlcnlgICsgYHRzX3JhbmtgLlxuICpcbiAqIFF1ZXJpZXMgYXJlIGNvbXBpbGVkIHJhdGhlciB0aGFuIHBhc3NlZCB0aHJvdWdoIGB3ZWJzZWFyY2hfdG9fdHNxdWVyeWAsXG4gKiBiZWNhdXNlIGEgc2VhcmNoIGJveCBuZWVkcyB0d28gdGhpbmdzIHRoYXQgZnVuY3Rpb24gZG9lcyBub3QgZ2l2ZTpcbiAqIHB1bmN0dWF0aW9uLWluc2Vuc2l0aXZpdHkgKHNvIGBzdG9yZS1pbnRlbGxpZ2VuY2VgIG1hdGNoZXMgdGhlIHNhbWUgcm93cyBhc1xuICogYHN0b3JlIGludGVsbGlnZW5jZWApIGFuZCBwcmVmaXggbWF0Y2hpbmcgKHNvIGBpbnRlbGAgcmVhY2hlc1xuICogYGludGVsbGlnZW5jZWApLiBTZWUge0BsaW5rIHRvU2VhcmNoVGVybXN9IC8ge0BsaW5rIHRvVHNRdWVyeX0uXG4gKlxuICogVGhlIHdob2xlIHBvaW50IGlzIHBhcml0eTogdGhpcyBiYWNrZW5kIHJldHVybnMgdGhlIEVYQUNUIHNhbWVcbiAqIGBAZGJ4LXRvb2xzL3NoYXJlZC1zZWFyY2hgIHNoYXBlcyAoYFNlYXJjaFJlc3VsdGAgLyBgU2VhcmNoSGl0YCAvXG4gKiBgVXBzZXJ0UmVzdWx0YCkgYXMgdGhlIFZlY3RvciBTZWFyY2ggYmFja2VuZCwgc28gdGhlIGNsaWVudCwgdGhlIE1hc3RyYVxuICogdG9vbHMsIHRoZSByb3V0ZXMsIGFuZCB0aGUgUmVhY3Qgc2VhcmNoIGJveCBjYW5ub3QgdGVsbCB3aGljaCBvbmUgYW5zd2VyZWQuXG4gKiBBIGhpdCdzIGBpZGAgaXMgdGhlIHByaW1hcnkga2V5LCBpdHMgYHNjb3JlYCBpcyB0aGUgdGV4dC1yYW5rLCBhbmQgYGZpZWxkc2BcbiAqIGlzIHRoZSBzdG9yZWQgZG9jdW1lbnQgbWludXMgdGhlIGludGVybmFsIGNvbHVtbnMuXG4gKlxuICogU3RhbmRhbG9uZSBjYWxsZXJzIGNhbiBzdXBwbHkgYSBgUG9vbENvbmZpZ2AgZmFjdG9yeSBhbmQgbGV0IHRoaXMgYmFja2VuZCBvd25cbiAqIHRoZSByZXN1bHRpbmcgcG9vbC4gQXBwS2l0IGludGVncmF0aW9ucyBpbnN0ZWFkIHN1cHBseSB0aGUgTGFrZWJhc2UgcGx1Z2luJ3NcbiAqIG1hbmFnZWQgcG9vbCBkaXJlY3RseSwgcHJlc2VydmluZyBpdHMgcm91dGluZyBhbmQgY3JlZGVudGlhbCByZWZyZXNoLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBFeGVjdXRpb25FcnJvciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IHBvc3RncmVzQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tIFwiQGRieC10b29scy9wb3N0Z3Jlc1wiO1xuaW1wb3J0IHsgYXN5bmNVdGlscywgbG9nLCBvYmplY3QsIHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHtcbiAgU2VhcmNoRG9jdW1lbnQsXG4gIFNlYXJjaEhpdCxcbiAgU2VhcmNoUmVxdWVzdCxcbiAgU2VhcmNoUmVzdWx0LFxuICBVcHNlcnRSZXN1bHQsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1zZWFyY2hcIjtcbmltcG9ydCB7IFBvb2wsIHR5cGUgUG9vbENsaWVudCwgdHlwZSBQb29sQ29uZmlnIH0gZnJvbSBcInBnXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJzZWFyY2gvbGFrZWJhc2VcIik7XG5cbi8qKiBUaGUgaW50ZXJuYWwgY29sdW1ucyBldmVyeSBzZWFyY2ggdGFibGUgY2FycmllcywgZXhjbHVkZWQgZnJvbSBhIGhpdCdzIGBmaWVsZHNgLiAqL1xuY29uc3QgUkVTRVJWRURfQ09MVU1OUyA9IG5ldyBTZXQoW1wiaWRcIiwgXCJzZWFyY2hfdGV4dFwiLCBcImRvY3VtZW50XCIsIFwic2VhcmNoX3ZlY3RvclwiXSk7XG5cbi8qKlxuICogU3BsaXQgYSBzZWFyY2gtYm94IHN0cmluZyBpbnRvIHRoZSB0ZXJtcyBhIHRzcXVlcnkgaXMgYnVpbHQgZnJvbSwgdXNpbmcgdGhlXG4gKiBzaGFyZWQgYEBkYngtdG9vbHMvc2hhcmVkLWNvcmVgIHRva2VuaXplciBzbyB0aGUgc3BsaXR0aW5nIHJ1bGVzIHN0YXlcbiAqIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgdG9vbGtpdC5cbiAqXG4gKiBTcGxpdHRpbmcgb24gcHVuY3R1YXRpb24gaXMgd2hhdCBtYWtlcyBgc3RvcmUtaW50ZWxsaWdlbmNlYCBiZWhhdmUgbGlrZVxuICogYHN0b3JlIGludGVsbGlnZW5jZWAuIFBvc3RncmVzIGluZGV4ZXMgYSBoeXBoZW5hdGVkIHdvcmQgYXMgdGhlIGNvbXBvdW5kXG4gKiBsZXhlbWUgUExVUyBlYWNoIG9mIGl0cyBwYXJ0cywgYnV0IGNvbXBpbGVzIGEgaHlwaGVuYXRlZCBRVUVSWSB0byB0aGVcbiAqIGNvbXBvdW5kIGFsb25lIC0gc28gYHN0b3JlLWludGVsbGlnZW5jZWAgZGVtYW5kcyBhIGBzdG9yZS1pbnRlbGxpZ2AgbGV4ZW1lXG4gKiB0aGF0IGEgZG9jdW1lbnQgdGl0bGVkIGBzYW1wbGUtc3RvcmUtaW50ZWxsaWdlbmNlYCBkb2VzIG5vdCBoYXZlLCBhbmQgdGhlXG4gKiBzZWFyY2ggc2lsZW50bHkgcmV0dXJucyBub3RoaW5nIHdoaWxlIGBzdG9yZSBpbnRlbGxpZ2VuY2VgIHJldHVybnNcbiAqIGV2ZXJ5dGhpbmcuIFNhbWUgZm9yIGAuYCBhbmQgYF9gIGluIGEgdGFibGUgcmVmZXJlbmNlLlxuICpcbiAqIGBjYW1lbENhc2U6IGZhbHNlYCBpcyBsb2FkLWJlYXJpbmcgcmF0aGVyIHRoYW4gYSBkZWZhdWx0OiB0aGUgY2FtZWxDYXNlXG4gKiBzcGxpdHRlciBhbHNvIGJyZWFrcyBkaWdpdCBydW5zLCB0dXJuaW5nIGBncHQ0YCBpbnRvIGBncHRgICsgYDRgIGFuZCBgczNgXG4gKiBpbnRvIGBzYCArIGAzYC4gUG9zdGdyZXMgaW5kZXhlcyBlYWNoIG9mIHRob3NlIGFzIE9ORSBsZXhlbWUsIHNvIG5vIGxleGVtZVxuICogZXZlciBzdGFydHMgd2l0aCB0aGUgdHJhaWxpbmcgZGlnaXRzIGFuZCB0aGUgcHJlY2lzZSBwYXNzIGNvdWxkIG5vdCBtYXRjaFxuICogdGhlbS4gS2VlcGluZyBwdW5jdHVhdGlvbiBhcyB0aGUgb25seSBib3VuZGFyeSBtaXJyb3JzIGhvdyB0aGUgaW5kZXggd2FzXG4gKiBidWlsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU2VhcmNoVGVybXMocXVlcnk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtcbiAgICAuLi5zdHJpbmdVdGlscy50b2tlbml6ZVdpdGhPcHRpb25zKFxuICAgICAgeyBsb3dlckNhc2U6IHRydWUsIGNhbWVsQ2FzZTogZmFsc2UsIGRpc3RpbmN0OiB0cnVlIH0sXG4gICAgICBxdWVyeSxcbiAgICApLFxuICBdO1xufVxuXG4vKipcbiAqIENvbXBpbGUgdGVybXMgaW50byBhIGB0b190c3F1ZXJ5YCBpbnB1dCB3aGVyZSBldmVyeSB0ZXJtIGlzIGEgUFJFRklYLCBzbyBhXG4gKiBwYXJ0aWFsbHkgdHlwZWQgd29yZCBzdGlsbCBtYXRjaGVzIChgaW50ZWw6KmAgcmVhY2hlcyBgaW50ZWxsaWdlbmNlYCkuXG4gKlxuICogVGVybXMgY2Fycnkgb25seSBsZXR0ZXJzIGFuZCBkaWdpdHMgYnkgY29uc3RydWN0aW9uLCBzbyBub25lIG9mIHRzcXVlcnknc1xuICogb3BlcmF0b3JzIChgJiB8ICEgKCApIDogKmApIGNhbiBzdXJ2aXZlIGZyb20gdXNlciBpbnB1dCBpbnRvIHRoZSBjb21waWxlZFxuICogc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Uc1F1ZXJ5KHRlcm1zOiByZWFkb25seSBzdHJpbmdbXSwgb3BlcmF0b3I6IFwiJlwiIHwgXCJ8XCIgPSBcIiZcIik6IHN0cmluZyB7XG4gIHJldHVybiB0ZXJtcy5tYXAoKHRlcm0pID0+IGAke3Rlcm19OipgKS5qb2luKGAgJHtvcGVyYXRvcn0gYCk7XG59XG5cbi8qKiBPcHRpb25zIGZvciBhIHNpbmdsZS1pbmRleCBMYWtlYmFzZSBzZWFyY2ggKG1pcnJvcnMgdGhlIGNsaWVudCdzIGBTZWFyY2hPcHRpb25zYCkuICovXG5leHBvcnQgaW50ZXJmYWNlIExha2ViYXNlU2VhcmNoT3B0aW9ucyB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBmaWx0ZXI/OiBTZWFyY2hSZXF1ZXN0W1wiZmlsdGVyXCJdO1xuICBzY29yZVRocmVzaG9sZD86IG51bWJlcjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKiBPbmUgcmF3IHNlYXJjaCByb3cgYmVmb3JlIGl0IGlzIHNoYXBlZCBpbnRvIGEge0BsaW5rIFNlYXJjaEhpdH0uICovXG5pbnRlcmZhY2UgU2VhcmNoUm93IHtcbiAgaWQ6IHN0cmluZztcbiAgZG9jdW1lbnQ6IHVua25vd247XG4gIHNjb3JlOiBudW1iZXI7XG59XG5cbi8qKiBUaGUgbWFuYWdlZC1wb29sIHN1cmZhY2UgbmVlZGVkIGJ5IHRoZSBzZWFyY2ggYmFja2VuZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFrZWJhc2VTZWFyY2hQb29sIHtcbiAgY29ubmVjdCgpOiBQcm9taXNlPFBvb2xDbGllbnQ+O1xufVxuXG50eXBlIExha2ViYXNlUG9vbFNvdXJjZSA9XG4gIHwgKCgpID0+IFByb21pc2U8UG9vbENvbmZpZz4gfCBQb29sQ29uZmlnKVxuICB8IExha2ViYXNlU2VhcmNoUG9vbFxuICB8IHsgbWFuYWdlZFBvb2w6ICgpID0+IExha2ViYXNlU2VhcmNoUG9vbCB8IG51bGwgfCB1bmRlZmluZWQgfTtcblxuLyoqIE9wdGlvbnMgZm9yIHByb3Zpc2lvbmluZyBhIExha2ViYXNlLWJhY2tlZCBpbmRleC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFrZWJhc2VQcm92aXNpb25PcHRpb25zIHtcbiAgLyoqIFRleHQgY29sdW1uIGVtYmVkZGVkIGludG8gdGhlIHNlYXJjaCB2ZWN0b3IuIERlZmF1bHRzIHRvIGB0ZXh0YC4gKi9cbiAgdGV4dENvbHVtbj86IHN0cmluZztcbiAgLyoqIERvY3VtZW50cyB0byBzZWVkIHdoZW4gdGhlIHRhYmxlIGlzIGVtcHR5LiAqL1xuICBzZWVkPzogU2VhcmNoRG9jdW1lbnRbXTtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKlxuICogQSBQb3N0Z3JlcyBmdWxsLXRleHQgYmFja2VuZC4gT25lIGluc3RhbmNlIGlzIHNoYXJlZCBhY3Jvc3MgaW5kZXhlczsgZWFjaFxuICogaW5kZXggbWFwcyB0byBhIHRhYmxlIHdob3NlIG5hbWUgaXMgZGVyaXZlZCBmcm9tIHRoZSBpbmRleCByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYWtlYmFzZVNlYXJjaEJhY2tlbmQge1xuICBwcml2YXRlIHBvb2w6IExha2ViYXNlU2VhcmNoUG9vbCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBwb29sUHJvbWlzZTogUHJvbWlzZTxMYWtlYmFzZVNlYXJjaFBvb2w+IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG93bnNQb29sID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdmlzaW9uZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvb2xTb3VyY2U6IExha2ViYXNlUG9vbFNvdXJjZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjaGVtYSA9IFwicHVibGljXCIsXG4gICAgLyoqIEhvdyBhIHBvb2wgaXMgYnVpbHQgZnJvbSB0aGUgcmVzb2x2ZWQgY29uZmlnLiBPdmVycmlkYWJsZSBmb3IgdGVzdHMuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb29sRmFjdG9yeTogKGNvbmZpZzogUG9vbENvbmZpZykgPT4gUG9vbCA9IChjb25maWcpID0+IG5ldyBQb29sKGNvbmZpZyksXG4gICkge31cblxuICAvKiogTGF6aWx5IGJ1aWxkIChhbmQgY2FjaGUpIHRoZSBwZyBwb29sIGZyb20gdGhlIHJlc29sdmVkIExha2ViYXNlIGNvbmZpZy4gKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRQb29sKCk6IFByb21pc2U8TGFrZWJhc2VTZWFyY2hQb29sPiB7XG4gICAgaWYgKHRoaXMucG9vbCkgcmV0dXJuIHRoaXMucG9vbDtcbiAgICBpZiAoXCJtYW5hZ2VkUG9vbFwiIGluIHRoaXMucG9vbFNvdXJjZSkge1xuICAgICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCAyMDA7IGF0dGVtcHQgKz0gMSkge1xuICAgICAgICB0aGlzLnBvb2wgPSB0aGlzLnBvb2xTb3VyY2UubWFuYWdlZFBvb2woKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLnBvb2wpIHJldHVybiB0aGlzLnBvb2w7XG4gICAgICAgIGF3YWl0IGFzeW5jVXRpbHMuc2xlZXAoNTApO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEV4ZWN1dGlvbkVycm9yKFwic2VhcmNoIChsYWtlYmFzZSk6IG1hbmFnZWQgcG9vbCBkaWQgbm90IGluaXRpYWxpemVcIiwge1xuICAgICAgICBjb250ZXh0OiB7IG9wZXJhdGlvbjogXCJjb25uZWN0XCIgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMucG9vbFNvdXJjZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnBvb2wgPSB0aGlzLnBvb2xTb3VyY2U7XG4gICAgICByZXR1cm4gdGhpcy5wb29sO1xuICAgIH1cbiAgICBjb25zdCBwZ0NvbmZpZ0ZhY3RvcnkgPSB0aGlzLnBvb2xTb3VyY2U7XG4gICAgdGhpcy5wb29sUHJvbWlzZSA/Pz0gKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHBnQ29uZmlnRmFjdG9yeSgpO1xuICAgICAgY29uc3QgcG9vbCA9IHRoaXMucG9vbEZhY3RvcnkocG9zdGdyZXNDb25uZWN0aW9uT3B0aW9ucyhjb25maWcpKTtcbiAgICAgIHRoaXMucG9vbCA9IHBvb2w7XG4gICAgICB0aGlzLm93bnNQb29sID0gdHJ1ZTtcbiAgICAgIHJldHVybiBwb29sO1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIHRoaXMucG9vbFByb21pc2U7XG4gIH1cblxuICAvKiogQ2xvc2UgdGhlIHBvb2wgc28gYSByZXN0YXJ0ZWQgYXBwIHJlYnVpbGRzIGl0LiAqL1xuICBhc3luYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwb29sID0gdGhpcy5wb29sO1xuICAgIHRoaXMucG9vbCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBvb2xQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucHJvdmlzaW9uZWQuY2xlYXIoKTtcbiAgICBpZiAocG9vbCAmJiB0aGlzLm93bnNQb29sKSBhd2FpdCAocG9vbCBhcyBQb29sKS5lbmQoKTtcbiAgICB0aGlzLm93bnNQb29sID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGEgTGFrZWJhc2UtYmFja2VkIGluZGV4LiBSZXR1cm5zIGhpdHMgc29ydGVkIG1vc3QtcmVsZXZhbnQtZmlyc3QsXG4gICAqIHNoYXBlZCBpZGVudGljYWxseSB0byB0aGUgVmVjdG9yIFNlYXJjaCBiYWNrZW5kLlxuICAgKi9cbiAgYXN5bmMgc2VhcmNoKFxuICAgIGluZGV4OiBzdHJpbmcsXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICBvcHRpb25zOiBMYWtlYmFzZVNlYXJjaE9wdGlvbnMgPSB7fSxcbiAgKTogUHJvbWlzZTxTZWFyY2hSZXN1bHQ+IHtcbiAgICBjb25zdCB0ZXh0ID0gc3RyaW5nVXRpbHMudHJpbVRvRW1wdHkocXVlcnkpO1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZUZvcihpbmRleCk7XG4gICAgY29uc3QgbGltaXQgPSBvcHRpb25zLmxpbWl0ID8/IDEwO1xuICAgIGNvbnN0IHBvb2wgPSBhd2FpdCB0aGlzLmdldFBvb2woKTtcbiAgICBjb25zdCB0ZXJtcyA9IHRvU2VhcmNoVGVybXModGV4dCk7XG5cbiAgICAvLyBBbiBlbXB0eSAob3IgcHVuY3R1YXRpb24tb25seSkgYm94IHJldHVybnMgcm93cyByYXRoZXIgdGhhbiBub3RoaW5nLCBzb1xuICAgIC8vIHRoZSBVSSBzaG93cyBjb250ZW50IGJlZm9yZSB0aGUgdXNlciB0eXBlcyAtIGFzIGEga2V5d29yZCBpbmRleCB3b3VsZC5cbiAgICBpZiAodGVybXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmZpbHRlckNsYXVzZShvcHRpb25zLmZpbHRlciwgMSk7XG4gICAgICBjb25zdCBsaW1pdFBvc2l0aW9uID0gZmlsdGVyLnBhcmFtcy5sZW5ndGggKyAxO1xuICAgICAgY29uc3QgeyByb3dzIH0gPSBhd2FpdCB0aGlzLnF1ZXJ5PFNlYXJjaFJvdz4oXG4gICAgICAgIHBvb2wsXG4gICAgICAgIGBTRUxFQ1QgaWQsIGRvY3VtZW50LCAwOjpmbG9hdDQgQVMgc2NvcmVcbiAgICAgICAgICAgRlJPTSAke3RhYmxlfVxuICAgICAgICAgIFdIRVJFIFRSVUUke2ZpbHRlci5zcWx9XG4gICAgICAgICAgT1JERVIgQlkgaWRcbiAgICAgICAgICBMSU1JVCAkJHtsaW1pdFBvc2l0aW9ufWAsXG4gICAgICAgIFsuLi5maWx0ZXIucGFyYW1zLCBsaW1pdF0sXG4gICAgICAgIG9wdGlvbnMuc2lnbmFsLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzLnRvUmVzdWx0KHRleHQsIGluZGV4LCByb3dzLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBQcmVjaXNlIHBhc3M6IGV2ZXJ5IHRlcm0gbXVzdCBtYXRjaCwgZWFjaCBhcyBhIHByZWZpeC5cbiAgICBjb25zdCBzdHJpY3RGaWx0ZXIgPSB0aGlzLmZpbHRlckNsYXVzZShvcHRpb25zLmZpbHRlciwgMik7XG4gICAgY29uc3Qgc3RyaWN0TGltaXRQb3NpdGlvbiA9IHN0cmljdEZpbHRlci5wYXJhbXMubGVuZ3RoICsgMjtcbiAgICBjb25zdCBzdHJpY3QgPSBhd2FpdCB0aGlzLnF1ZXJ5PFNlYXJjaFJvdz4oXG4gICAgICBwb29sLFxuICAgICAgYFNFTEVDVCBpZCwgZG9jdW1lbnQsIHRzX3Jhbmsoc2VhcmNoX3ZlY3RvciwgdG9fdHNxdWVyeSgnZW5nbGlzaCcsICQxKSkgQVMgc2NvcmVcbiAgICAgICAgIEZST00gJHt0YWJsZX1cbiAgICAgICAgV0hFUkUgc2VhcmNoX3ZlY3RvciBAQCB0b190c3F1ZXJ5KCdlbmdsaXNoJywgJDEpXG4gICAgICAgICAgJHtzdHJpY3RGaWx0ZXIuc3FsfVxuICAgICAgICBPUkRFUiBCWSBzY29yZSBERVNDXG4gICAgICAgIExJTUlUICQke3N0cmljdExpbWl0UG9zaXRpb259YCxcbiAgICAgIFt0b1RzUXVlcnkodGVybXMpLCAuLi5zdHJpY3RGaWx0ZXIucGFyYW1zLCBsaW1pdF0sXG4gICAgICBvcHRpb25zLnNpZ25hbCxcbiAgICApO1xuICAgIGlmIChzdHJpY3Qucm93cy5sZW5ndGggPiAwKSByZXR1cm4gdGhpcy50b1Jlc3VsdCh0ZXh0LCBpbmRleCwgc3RyaWN0LnJvd3MsIG9wdGlvbnMpO1xuXG4gICAgLy8gTm90aGluZyBtYXRjaGVkIEVWRVJZIHRlcm0sIHNvIHJlbGF4IHJhdGhlciB0aGFuIHJldHVybiBhbiBlbXB0eSBib3g6XG4gICAgLy8gYW55IG9uZSB0ZXJtIGlzIGVub3VnaCwgYW5kIGFuIGBJTElLRWAgcGFzcyBhZGRpdGlvbmFsbHkgY2F0Y2hlcyBhXG4gICAgLy8gZnJhZ21lbnQgdGhhdCBpcyBub3QgYSBwcmVmaXggKGB0ZWxsaWdlbmNlYCkgb3IgYSB0b2tlbiB0aGUgdGV4dC1zZWFyY2hcbiAgICAvLyBwYXJzZXIgc3BsaXQgZGlmZmVyZW50bHkgdGhhbiBleHBlY3RlZC4gU3Vic3RyaW5nIG1hdGNoaW5nIGNhbm5vdCB1c2VcbiAgICAvLyB0aGUgR0lOIGluZGV4LCB3aGljaCBpcyB3aHkgaXQgb25seSBydW5zIG9uY2UgdGhlIGluZGV4ZWQgcGFzcyBmYWlscy5cbiAgICBjb25zdCByZWxheGVkRmlsdGVyID0gdGhpcy5maWx0ZXJDbGF1c2Uob3B0aW9ucy5maWx0ZXIsIDMpO1xuICAgIGNvbnN0IHJlbGF4ZWRMaW1pdFBvc2l0aW9uID0gcmVsYXhlZEZpbHRlci5wYXJhbXMubGVuZ3RoICsgMztcbiAgICBjb25zdCByZWxheGVkID0gYXdhaXQgdGhpcy5xdWVyeTxTZWFyY2hSb3c+KFxuICAgICAgcG9vbCxcbiAgICAgIGBTRUxFQ1QgaWQsIGRvY3VtZW50LCB0c19yYW5rKHNlYXJjaF92ZWN0b3IsIHRvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAkMSkpIEFTIHNjb3JlXG4gICAgICAgICBGUk9NICR7dGFibGV9XG4gICAgICAgIFdIRVJFIChzZWFyY2hfdmVjdG9yIEBAIHRvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAkMSlcbiAgICAgICAgICAgT1Igc2VhcmNoX3RleHQgSUxJS0UgQU5ZKCQyOjp0ZXh0W10pKVxuICAgICAgICAgICR7cmVsYXhlZEZpbHRlci5zcWx9XG4gICAgICAgIE9SREVSIEJZIHNjb3JlIERFU0NcbiAgICAgICAgTElNSVQgJCR7cmVsYXhlZExpbWl0UG9zaXRpb259YCxcbiAgICAgIFt0b1RzUXVlcnkodGVybXMsIFwifFwiKSwgdGVybXMubWFwKCh0ZXJtKSA9PiBgJSR7dGVybX0lYCksIC4uLnJlbGF4ZWRGaWx0ZXIucGFyYW1zLCBsaW1pdF0sXG4gICAgICBvcHRpb25zLnNpZ25hbCxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnRvUmVzdWx0KHRleHQsIGluZGV4LCByZWxheGVkLnJvd3MsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqIFNoYXBlIHJhdyByb3dzIGludG8gdGhlIGBTZWFyY2hSZXN1bHRgIGJvdGggYmFja2VuZHMgcmV0dXJuLiAqL1xuICBwcml2YXRlIHRvUmVzdWx0KFxuICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgaW5kZXg6IHN0cmluZyxcbiAgICByb3dzOiBTZWFyY2hSb3dbXSxcbiAgICBvcHRpb25zOiBMYWtlYmFzZVNlYXJjaE9wdGlvbnMsXG4gICk6IFNlYXJjaFJlc3VsdCB7XG4gICAgY29uc3QgaGl0czogU2VhcmNoSGl0W10gPSByb3dzXG4gICAgICAubWFwKChyb3cpID0+ICh7XG4gICAgICAgIGlkOiBTdHJpbmcocm93LmlkKSxcbiAgICAgICAgc2NvcmU6IE51bWJlcihyb3cuc2NvcmUpIHx8IDAsXG4gICAgICAgIGZpZWxkczogdGhpcy50b0ZpZWxkcyhyb3cuZG9jdW1lbnQpLFxuICAgICAgfSkpXG4gICAgICAuZmlsdGVyKChoaXQpID0+IG9wdGlvbnMuc2NvcmVUaHJlc2hvbGQgPT09IHVuZGVmaW5lZCB8fCBoaXQuc2NvcmUgPj0gb3B0aW9ucy5zY29yZVRocmVzaG9sZCk7XG4gICAgcmV0dXJuIHsgcXVlcnksIGluZGV4LCBoaXRzLCBjb3VudDogaGl0cy5sZW5ndGggfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgdGhlIHRhYmxlICsgZnVsbC10ZXh0IGluZGV4IGV4aXN0IGFuZCBzZWVkIGRvY3VtZW50cyB3aGVuIGVtcHR5LlxuICAgKiBJZGVtcG90ZW50LCBzbyBpdCBpcyBzYWZlIHRvIGNhbGwgb24gZXZlcnkgYm9vdC5cbiAgICovXG4gIGFzeW5jIHByb3Zpc2lvbihpbmRleDogc3RyaW5nLCBvcHRpb25zOiBMYWtlYmFzZVByb3Zpc2lvbk9wdGlvbnMgPSB7fSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlRm9yKGluZGV4KTtcbiAgICBjb25zdCBwb29sID0gYXdhaXQgdGhpcy5nZXRQb29sKCk7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVUYWJsZShwb29sLCB0YWJsZSwgb3B0aW9ucy5zaWduYWwpO1xuXG4gICAgY29uc3QgeyByb3dzIH0gPSBhd2FpdCB0aGlzLnF1ZXJ5PHsgY291bnQ6IHN0cmluZyB9PihcbiAgICAgIHBvb2wsXG4gICAgICBgU0VMRUNUIGNvdW50KCopOjp0ZXh0IEFTIGNvdW50IEZST00gJHt0YWJsZX1gLFxuICAgICAgW10sXG4gICAgICBvcHRpb25zLnNpZ25hbCxcbiAgICApO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gTnVtYmVyKHJvd3NbMF0/LmNvdW50ID8/IFwiMFwiKTtcbiAgICBjb25zdCBzZWVkID0gb3B0aW9ucy5zZWVkID8/IFtdO1xuICAgIGlmIChleGlzdGluZyA9PT0gMCAmJiBzZWVkLmxlbmd0aCA+IDApIHtcbiAgICAgIGF3YWl0IHRoaXMudXBzZXJ0KHBvb2wsIHRhYmxlLCBzZWVkLCBvcHRpb25zLnRleHRDb2x1bW4gPz8gXCJ0ZXh0XCIsIG9wdGlvbnMuc2lnbmFsKTtcbiAgICAgIGxvZ2dlci5pbmZvKFwiaW5kZXgtc2VlZGVkXCIsIHsgaW5kZXgsIHRhYmxlLCBjb3VudDogc2VlZC5sZW5ndGggfSk7XG4gICAgICByZXR1cm4gc2VlZC5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBleGlzdGluZztcbiAgfVxuXG4gIC8qKiBBZGQgb3IgdXBkYXRlIGRvY3VtZW50cyBieSBwcmltYXJ5IGtleS4gKi9cbiAgYXN5bmMgYWRkRG9jdW1lbnRzKFxuICAgIGluZGV4OiBzdHJpbmcsXG4gICAgZG9jdW1lbnRzOiBTZWFyY2hEb2N1bWVudFtdLFxuICAgIHRleHRDb2x1bW4gPSBcInRleHRcIixcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTxVcHNlcnRSZXN1bHQ+IHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGVGb3IoaW5kZXgpO1xuICAgIGNvbnN0IHBvb2wgPSBhd2FpdCB0aGlzLmdldFBvb2woKTtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVRhYmxlKHBvb2wsIHRhYmxlLCBzaWduYWwpO1xuICAgIGF3YWl0IHRoaXMudXBzZXJ0KHBvb2wsIHRhYmxlLCBkb2N1bWVudHMsIHRleHRDb2x1bW4sIHNpZ25hbCk7XG4gICAgcmV0dXJuIHsgaW5kZXgsIGNvdW50OiBkb2N1bWVudHMubGVuZ3RoIH07XG4gIH1cblxuICAvKiogRGVsZXRlIGRvY3VtZW50cyBieSBwcmltYXJ5IGtleS4gKi9cbiAgYXN5bmMgZGVsZXRlRG9jdW1lbnRzKFxuICAgIGluZGV4OiBzdHJpbmcsXG4gICAgaWRzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+LFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPFVwc2VydFJlc3VsdD4ge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZUZvcihpbmRleCk7XG4gICAgY29uc3QgcG9vbCA9IGF3YWl0IHRoaXMuZ2V0UG9vbCgpO1xuICAgIGF3YWl0IHRoaXMucXVlcnkocG9vbCwgYERFTEVURSBGUk9NICR7dGFibGV9IFdIRVJFIGlkID0gQU5ZKCQxKWAsIFtpZHMubWFwKFN0cmluZyldLCBzaWduYWwpO1xuICAgIHJldHVybiB7IGluZGV4LCBjb3VudDogaWRzLmxlbmd0aCB9O1xuICB9XG5cbiAgLyoqIENyZWF0ZSB0aGUgdGFibGUgKyBHSU4gaW5kZXggb25jZSBwZXIgdGFibGUgKG1lbW9pemVkIGFjcm9zcyBjYWxscykuICovXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlVGFibGUoXG4gICAgcG9vbDogTGFrZWJhc2VTZWFyY2hQb29sLFxuICAgIHRhYmxlOiBzdHJpbmcsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnByb3Zpc2lvbmVkLmhhcyh0YWJsZSkpIHJldHVybjtcbiAgICAvLyBgZG9jdW1lbnRgIGhvbGRzIHRoZSB3aG9sZSByb3c7IGBzZWFyY2hfdGV4dGAgaXMgdGhlIGluZGV4ZWQgdGV4dDsgdGhlXG4gICAgLy8gZ2VuZXJhdGVkIGBzZWFyY2hfdmVjdG9yYCBrZWVwcyB0aGUgdHN2ZWN0b3IgaW4gbG9ja3N0ZXAgd2l0aCBpdCBzbyBhXG4gICAgLy8gd3JpdGUgbmV2ZXIgaGFzIHRvIGNvbXB1dGUgdGhlIHZlY3RvciBieSBoYW5kLlxuICAgIGF3YWl0IHRoaXMucXVlcnkocG9vbCwgYENSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyAke3RoaXMuaWRlbnQodGhpcy5zY2hlbWEpfWAsIFtdLCBzaWduYWwpO1xuICAgIGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICBwb29sLFxuICAgICAgYENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICR7dGFibGV9IChcbiAgICAgICAgIGlkIHRleHQgUFJJTUFSWSBLRVksXG4gICAgICAgICBzZWFyY2hfdGV4dCB0ZXh0IE5PVCBOVUxMIERFRkFVTFQgJycsXG4gICAgICAgICBkb2N1bWVudCBqc29uYiBOT1QgTlVMTCBERUZBVUxUICd7fSc6Ompzb25iLFxuICAgICAgICAgc2VhcmNoX3ZlY3RvciB0c3ZlY3RvciBHRU5FUkFURUQgQUxXQVlTIEFTICh0b190c3ZlY3RvcignZW5nbGlzaCcsIHNlYXJjaF90ZXh0KSkgU1RPUkVEXG4gICAgICAgKWAsXG4gICAgICBbXSxcbiAgICAgIHNpZ25hbCxcbiAgICApO1xuICAgIGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICBwb29sLFxuICAgICAgYEFMVEVSIFRBQkxFICR7dGFibGV9XG4gICAgICAgICBBREQgQ09MVU1OIElGIE5PVCBFWElTVFMgc2VhcmNoX3ZlY3RvciB0c3ZlY3RvclxuICAgICAgICAgR0VORVJBVEVEIEFMV0FZUyBBUyAodG9fdHN2ZWN0b3IoJ2VuZ2xpc2gnLCBzZWFyY2hfdGV4dCkpIFNUT1JFRGAsXG4gICAgICBbXSxcbiAgICAgIHNpZ25hbCxcbiAgICApO1xuICAgIGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICBwb29sLFxuICAgICAgYENSRUFURSBJTkRFWCBJRiBOT1QgRVhJU1RTICR7dGhpcy5pZGVudChgJHt0aGlzLmJhcmVOYW1lKHRhYmxlKX1fZnRzYCl9XG4gICAgICAgICBPTiAke3RhYmxlfSBVU0lORyBnaW4gKHNlYXJjaF92ZWN0b3IpYCxcbiAgICAgIFtdLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gICAgdGhpcy5wcm92aXNpb25lZC5hZGQodGFibGUpO1xuICAgIGxvZ2dlci5pbmZvKFwiaW5kZXgtY3JlYXRlZFwiLCB7IHRhYmxlIH0pO1xuICB9XG5cbiAgLyoqIFVwc2VydCByb3dzOiB0aGUgd2hvbGUgZG9jdW1lbnQgYXMganNvbmIgKyBhIGZsYXR0ZW5lZCB0ZXh0IGJsb2IgdG8gaW5kZXguICovXG4gIHByaXZhdGUgYXN5bmMgdXBzZXJ0KFxuICAgIHBvb2w6IExha2ViYXNlU2VhcmNoUG9vbCxcbiAgICB0YWJsZTogc3RyaW5nLFxuICAgIGRvY3VtZW50czogU2VhcmNoRG9jdW1lbnRbXSxcbiAgICB0ZXh0Q29sdW1uOiBzdHJpbmcsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgZG9jIG9mIGRvY3VtZW50cykge1xuICAgICAgY29uc3QgaWQgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKFN0cmluZyhkb2MuaWQgPz8gZG9jLklEID8/IFwiXCIpKSA/PyB1bmRlZmluZWQ7XG4gICAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXhlY3V0aW9uRXJyb3IoXCJzZWFyY2ggKGxha2ViYXNlKTogYSBkb2N1bWVudCBpcyBtaXNzaW5nIGFuIGBpZGBcIiwge1xuICAgICAgICAgIGNvbnRleHQ6IHsgb3BlcmF0aW9uOiBcImFkZERvY3VtZW50c1wiIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHRoaXMuc2VhcmNoVGV4dChkb2MsIHRleHRDb2x1bW4pO1xuICAgICAgYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgICAgcG9vbCxcbiAgICAgICAgYElOU0VSVCBJTlRPICR7dGFibGV9IChpZCwgc2VhcmNoX3RleHQsIGRvY3VtZW50KVxuICAgICAgICAgICBWQUxVRVMgKCQxLCAkMiwgJDM6Ompzb25iKVxuICAgICAgICAgT04gQ09ORkxJQ1QgKGlkKSBETyBVUERBVEVcbiAgICAgICAgICAgU0VUIHNlYXJjaF90ZXh0ID0gRVhDTFVERUQuc2VhcmNoX3RleHQsIGRvY3VtZW50ID0gRVhDTFVERUQuZG9jdW1lbnRgLFxuICAgICAgICBbaWQsIHNlYXJjaFRleHQsIEpTT04uc3RyaW5naWZ5KGRvYyldLFxuICAgICAgICBzaWduYWwsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgdGV4dCBhIHJvdyBpcyBpbmRleGVkIGJ5OiB0aGUgdGV4dCBjb2x1bW4gZmlyc3QsIHRoZW4gYW55IG90aGVyIHN0cmluZyBmaWVsZC4gKi9cbiAgcHJpdmF0ZSBzZWFyY2hUZXh0KGRvYzogU2VhcmNoRG9jdW1lbnQsIHRleHRDb2x1bW46IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJpbWFyeSA9IHN0cmluZ1V0aWxzLnRyaW1Ub0VtcHR5KFN0cmluZyhkb2NbdGV4dENvbHVtbl0gPz8gXCJcIikpO1xuICAgIGNvbnN0IHJlc3QgPSBPYmplY3QuZW50cmllcyhkb2MpXG4gICAgICAuZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+IGtleSAhPT0gdGV4dENvbHVtbiAmJiBrZXkgIT09IFwiaWRcIiAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpXG4gICAgICAubWFwKChbLCB2YWx1ZV0pID0+IHZhbHVlIGFzIHN0cmluZyk7XG4gICAgcmV0dXJuIFtwcmltYXJ5LCAuLi5yZXN0XS5maWx0ZXIoQm9vbGVhbikuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIC8qKiBBIGhpdCdzIGBmaWVsZHNgOiB0aGUgc3RvcmVkIGRvY3VtZW50IG1pbnVzIHRoZSByZXNlcnZlZC9pbnRlcm5hbCBrZXlzLiAqL1xuICBwcml2YXRlIHRvRmllbGRzKGRvY3VtZW50OiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGlmICghb2JqZWN0LmlzUmVjb3JkKGRvY3VtZW50KSkgcmV0dXJuIHt9O1xuICAgIGNvbnN0IGZpZWxkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkb2N1bWVudCkpIHtcbiAgICAgIGlmIChSRVNFUlZFRF9DT0xVTU5TLmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIGZpZWxkc1trZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBmaWVsZHM7XG4gIH1cblxuICAvKiogQ29tcGlsZSBBcHBLaXQgc2NhbGFyL2FycmF5IGZpbHRlcnMgYWdhaW5zdCB0aGUgc3RvcmVkIEpTT04gZG9jdW1lbnQuICovXG4gIHByaXZhdGUgZmlsdGVyQ2xhdXNlKFxuICAgIGZpbHRlcjogU2VhcmNoUmVxdWVzdFtcImZpbHRlclwiXSxcbiAgICBzdGFydFBvc2l0aW9uOiBudW1iZXIsXG4gICk6IHsgc3FsOiBzdHJpbmc7IHBhcmFtczogdW5rbm93bltdIH0ge1xuICAgIGlmICghZmlsdGVyIHx8IE9iamVjdC5rZXlzKGZpbHRlcikubGVuZ3RoID09PSAwKSByZXR1cm4geyBzcWw6IFwiXCIsIHBhcmFtczogW10gfTtcbiAgICBjb25zdCBjbGF1c2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHBhcmFtczogdW5rbm93bltdID0gW107XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmlsdGVyKSkge1xuICAgICAgY29uc3Qga2V5UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgcGFyYW1zLmxlbmd0aDtcbiAgICAgIHBhcmFtcy5wdXNoKGtleSk7XG4gICAgICBjb25zdCB2YWx1ZVBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIHBhcmFtcy5sZW5ndGg7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcGFyYW1zLnB1c2godmFsdWUubWFwKFN0cmluZykpO1xuICAgICAgICBjbGF1c2VzLnB1c2goYGRvY3VtZW50IC0+PiAkJHtrZXlQb3NpdGlvbn0gPSBBTlkoJCR7dmFsdWVQb3NpdGlvbn06OnRleHRbXSlgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtcy5wdXNoKFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICBjbGF1c2VzLnB1c2goYGRvY3VtZW50IC0+PiAkJHtrZXlQb3NpdGlvbn0gPSAkJHt2YWx1ZVBvc2l0aW9ufWApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBzcWw6IGAgQU5EICR7Y2xhdXNlcy5qb2luKFwiIEFORCBcIil9YCwgcGFyYW1zIH07XG4gIH1cblxuICAvKiogVGhlIGZ1bGx5LXF1YWxpZmllZCB0YWJsZSBuYW1lIGZvciBhbiBpbmRleCByZWZlcmVuY2UuICovXG4gIHByaXZhdGUgdGFibGVGb3IoaW5kZXg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuaWRlbnQodGhpcy5zY2hlbWEpfS4ke3RoaXMuaWRlbnQodGhpcy5iYXJlTmFtZShpbmRleCkpfWA7XG4gIH1cblxuICAvKiogQSBzYWZlIGJhcmUgdGFibGUgbmFtZSBkZXJpdmVkIGZyb20gYW4gaW5kZXggcmVmZXJlbmNlLiAqL1xuICBwcml2YXRlIGJhcmVOYW1lKHJlZmVyZW5jZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBsYXN0ID0gcmVmZXJlbmNlLnNwbGl0KFwiLlwiKS5maWx0ZXIoQm9vbGVhbikucG9wKCkgPz8gcmVmZXJlbmNlO1xuICAgIGNvbnN0IHNsdWcgPSBzdHJpbmdVdGlscy50b1NsdWcobGFzdCkucmVwbGFjZSgvLS9nLCBcIl9cIik7XG4gICAgcmV0dXJuIHNsdWcubGVuZ3RoID4gMCA/IHNsdWcgOiBcImRvY3VtZW50c1wiO1xuICB9XG5cbiAgLyoqIFF1b3RlIGEgUG9zdGdyZXMgaWRlbnRpZmllci4gKi9cbiAgcHJpdmF0ZSBpZGVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXCIke25hbWUucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImA7XG4gIH1cblxuICAvKiogUnVuIG9uZSBxdWVyeSB1bmRlciBleHRlcm5hbCBjYW5jZWxsYXRpb24uICovXG4gIHByaXZhdGUgYXN5bmMgcXVlcnk8VD4oXG4gICAgcG9vbDogTGFrZWJhc2VTZWFyY2hQb29sLFxuICAgIHNxbDogc3RyaW5nLFxuICAgIHBhcmFtczogdW5rbm93bltdLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPHsgcm93czogVFtdIH0+IHtcbiAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB0aHJvdyBFeGVjdXRpb25FcnJvci5jYW5jZWxlZCgpO1xuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHBvb2wuY29ubmVjdCgpO1xuICAgIGxldCByZWxlYXNlZCA9IGZhbHNlO1xuICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICBpZiAocmVsZWFzZWQpIHJldHVybjtcbiAgICAgIHJlbGVhc2VkID0gdHJ1ZTtcbiAgICAgIGNsaWVudC5yZWxlYXNlKHRydWUpO1xuICAgIH07XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQucXVlcnkoc3FsLCBwYXJhbXMpO1xuICAgICAgcmV0dXJuIHsgcm93czogcmVzdWx0LnJvd3MgYXMgVFtdIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgaWYgKCFyZWxlYXNlZCkgY2xpZW50LnJlbGVhc2UoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -6,9 +6,8 @@
6
6
  *
7
7
  * - a `search` / `universal_search` / (opt-in) `add_documents` tool set for
8
8
  * both Mastra and AppKit agents (autocomplete is a small-`limit` search);
9
- * - compatibility and extension routes under `/api/search`
10
- * (`POST /` search, `POST /universal` federated, `GET /indexes` catalogue,
11
- * and `POST /documents` when writes are enabled);
9
+ * - extension routes under `/api/search` (`POST /universal` federated,
10
+ * `GET /indexes` catalogue, and opt-in document/index lifecycle routes);
12
11
  * - a `clientConfig()` payload so a UI knows the indexes, default, and page
13
12
  * size at boot with no round-trip;
14
13
  * - `exports()` so app code can `appkit.search.search(...)` directly.