@dbx-tools/shared-search 0.9.138 → 0.9.139
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -10
- package/index.ts +2 -2
- package/lib/index.d.ts +2 -2
- package/lib/index.js +3 -3
- package/lib/src/search-schemas.d.ts +15 -1
- package/lib/src/search-schemas.js +19 -1
- package/package.json +1 -1
- package/src/search-schemas.ts +22 -0
package/README.md
CHANGED
|
@@ -50,14 +50,10 @@ const request: SearchRequest = searchSchemas.searchRequestSchema.parse({
|
|
|
50
50
|
```ts
|
|
51
51
|
import { searchSchemas } from "@dbx-tools/shared-search";
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
});
|
|
58
|
-
if (!response.ok) throw new Error(`Search failed with ${response.status}`);
|
|
59
|
-
const result = searchSchemas.searchResultSchema.parse(await response.json());
|
|
60
|
-
const titles = result.hits.map((hit) => hit.fields.title);
|
|
53
|
+
export function resultTitles(payload: unknown): unknown[] {
|
|
54
|
+
const result = searchSchemas.searchResultSchema.parse(payload);
|
|
55
|
+
return result.hits.map((hit) => hit.fields.title);
|
|
56
|
+
}
|
|
61
57
|
```
|
|
62
58
|
|
|
63
59
|
`searchHitSchema` returns the requested columns under `fields`, keyed by column
|
|
@@ -67,10 +63,11 @@ carries the `index` it came from.
|
|
|
67
63
|
## Read the index catalog
|
|
68
64
|
|
|
69
65
|
```ts
|
|
70
|
-
import {
|
|
66
|
+
import { getPluginClientConfig } from "@databricks/appkit-ui";
|
|
67
|
+
import { SEARCH_PLUGIN_NAME, searchSchemas } from "@dbx-tools/shared-search";
|
|
71
68
|
|
|
72
69
|
const config = searchSchemas.searchClientConfigSchema.parse(
|
|
73
|
-
|
|
70
|
+
getPluginClientConfig(SEARCH_PLUGIN_NAME),
|
|
74
71
|
);
|
|
75
72
|
```
|
|
76
73
|
|
|
@@ -87,6 +84,9 @@ index management, Mastra tools, and the AppKit plugin. Use
|
|
|
87
84
|
|
|
88
85
|
## Package exports
|
|
89
86
|
|
|
87
|
+
- `SEARCH_PLUGIN_NAME`, `SEARCH_DEFAULT_BASE_PATH`, and `SEARCH_ROUTES` own the
|
|
88
|
+
extension plugin's browser-safe route contract; `searchSchemas.searchRoute`
|
|
89
|
+
joins a published base path with those route segments.
|
|
90
90
|
- `searchSchemas`: `searchModeSchema`, `searchRequestSchema`, `searchHitSchema`,
|
|
91
91
|
`searchResultSchema`, `universalSearchRequestSchema`, `searchDocumentSchema`,
|
|
92
92
|
`upsertResultSchema`, `searchIndexInfoSchema`, `searchClientConfigSchema`, and
|
package/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/shared-search";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.139";
|
|
7
7
|
export * as searchSchemas from "./src/search-schemas.ts";
|
|
8
|
-
export { searchModeSchema, aiSearchQueryTypeSchema, searchRequestSchema, searchHitSchema, searchResultSchema, universalSearchRequestSchema, searchDocumentSchema, upsertResultSchema, searchIndexInfoSchema, searchClientConfigSchema, createIndexRequestSchema, syncIndexRequestSchema, indexInfoSchema } from "./src/search-schemas.ts";
|
|
8
|
+
export { SEARCH_PLUGIN_NAME, SEARCH_DEFAULT_BASE_PATH, SEARCH_ROUTES, searchModeSchema, aiSearchQueryTypeSchema, searchRequestSchema, searchHitSchema, searchResultSchema, universalSearchRequestSchema, searchDocumentSchema, upsertResultSchema, searchIndexInfoSchema, searchClientConfigSchema, createIndexRequestSchema, syncIndexRequestSchema, indexInfoSchema } from "./src/search-schemas.ts";
|
|
9
9
|
export type { SearchMode, AiSearchQueryType, SearchRequest, SearchHit, SearchResult, UniversalSearchRequest, SearchDocument, UpsertResult, SearchIndexInfo, SearchClientConfig, CreateIndexRequest, SyncIndexRequest, IndexInfo } from "./src/search-schemas.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/shared-search";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.139";
|
|
3
3
|
export * as searchSchemas from "./src/search-schemas.ts";
|
|
4
|
-
export { searchModeSchema, aiSearchQueryTypeSchema, searchRequestSchema, searchHitSchema, searchResultSchema, universalSearchRequestSchema, searchDocumentSchema, upsertResultSchema, searchIndexInfoSchema, searchClientConfigSchema, createIndexRequestSchema, syncIndexRequestSchema, indexInfoSchema } from "./src/search-schemas.ts";
|
|
4
|
+
export { SEARCH_PLUGIN_NAME, SEARCH_DEFAULT_BASE_PATH, SEARCH_ROUTES, searchModeSchema, aiSearchQueryTypeSchema, searchRequestSchema, searchHitSchema, searchResultSchema, universalSearchRequestSchema, searchDocumentSchema, upsertResultSchema, searchIndexInfoSchema, searchClientConfigSchema, createIndexRequestSchema, syncIndexRequestSchema, indexInfoSchema } from "./src/search-schemas.ts";
|
|
5
5
|
export type { SearchMode, AiSearchQueryType, SearchRequest, SearchHit, SearchResult, UniversalSearchRequest, SearchDocument, UpsertResult, SearchIndexInfo, SearchClientConfig, CreateIndexRequest, SyncIndexRequest, IndexInfo } from "./src/search-schemas.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/shared-search";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.139";
|
|
6
6
|
export * as searchSchemas from "./src/search-schemas.js";
|
|
7
|
-
export { searchModeSchema, aiSearchQueryTypeSchema, searchRequestSchema, searchHitSchema, searchResultSchema, universalSearchRequestSchema, searchDocumentSchema, upsertResultSchema, searchIndexInfoSchema, searchClientConfigSchema, createIndexRequestSchema, syncIndexRequestSchema, indexInfoSchema } from "./src/search-schemas.js";
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
export { SEARCH_PLUGIN_NAME, SEARCH_DEFAULT_BASE_PATH, SEARCH_ROUTES, searchModeSchema, aiSearchQueryTypeSchema, searchRequestSchema, searchHitSchema, searchResultSchema, universalSearchRequestSchema, searchDocumentSchema, upsertResultSchema, searchIndexInfoSchema, searchClientConfigSchema, createIndexRequestSchema, syncIndexRequestSchema, indexInfoSchema } from "./src/search-schemas.js";
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxhQUFhLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsNEJBQTRCLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL3NoYXJlZC1zZWFyY2hcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS4xMzlcIjtcbmV4cG9ydCAqIGFzIHNlYXJjaFNjaGVtYXMgZnJvbSBcIi4vc3JjL3NlYXJjaC1zY2hlbWFzLnRzXCI7XG5leHBvcnQgeyBTRUFSQ0hfUExVR0lOX05BTUUsIFNFQVJDSF9ERUZBVUxUX0JBU0VfUEFUSCwgU0VBUkNIX1JPVVRFUywgc2VhcmNoTW9kZVNjaGVtYSwgYWlTZWFyY2hRdWVyeVR5cGVTY2hlbWEsIHNlYXJjaFJlcXVlc3RTY2hlbWEsIHNlYXJjaEhpdFNjaGVtYSwgc2VhcmNoUmVzdWx0U2NoZW1hLCB1bml2ZXJzYWxTZWFyY2hSZXF1ZXN0U2NoZW1hLCBzZWFyY2hEb2N1bWVudFNjaGVtYSwgdXBzZXJ0UmVzdWx0U2NoZW1hLCBzZWFyY2hJbmRleEluZm9TY2hlbWEsIHNlYXJjaENsaWVudENvbmZpZ1NjaGVtYSwgY3JlYXRlSW5kZXhSZXF1ZXN0U2NoZW1hLCBzeW5jSW5kZXhSZXF1ZXN0U2NoZW1hLCBpbmRleEluZm9TY2hlbWEgfSBmcm9tIFwiLi9zcmMvc2VhcmNoLXNjaGVtYXMudHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VhcmNoTW9kZSwgQWlTZWFyY2hRdWVyeVR5cGUsIFNlYXJjaFJlcXVlc3QsIFNlYXJjaEhpdCwgU2VhcmNoUmVzdWx0LCBVbml2ZXJzYWxTZWFyY2hSZXF1ZXN0LCBTZWFyY2hEb2N1bWVudCwgVXBzZXJ0UmVzdWx0LCBTZWFyY2hJbmRleEluZm8sIFNlYXJjaENsaWVudENvbmZpZywgQ3JlYXRlSW5kZXhSZXF1ZXN0LCBTeW5jSW5kZXhSZXF1ZXN0LCBJbmRleEluZm8gfSBmcm9tIFwiLi9zcmMvc2VhcmNoLXNjaGVtYXMudHNcIjtcbiJdfQ==
|
|
@@ -22,6 +22,20 @@
|
|
|
22
22
|
* @module
|
|
23
23
|
*/
|
|
24
24
|
import { z } from "zod";
|
|
25
|
+
/** AppKit plugin name used to publish and read the search browser client config. */
|
|
26
|
+
export declare const SEARCH_PLUGIN_NAME = "search";
|
|
27
|
+
/** Default AppKit mount path for the search extension routes. */
|
|
28
|
+
export declare const SEARCH_DEFAULT_BASE_PATH = "/api/search";
|
|
29
|
+
/** Shared server route segments owned by the search plugin contract. */
|
|
30
|
+
export declare const SEARCH_ROUTES: {
|
|
31
|
+
readonly universal: "/universal";
|
|
32
|
+
readonly indexes: "/indexes";
|
|
33
|
+
readonly documents: "/documents";
|
|
34
|
+
readonly index: "/index";
|
|
35
|
+
readonly indexSync: "/index/sync";
|
|
36
|
+
};
|
|
37
|
+
/** Join a published search base path with one shared route segment. */
|
|
38
|
+
export declare function searchRoute(basePath: string, route: string): string;
|
|
25
39
|
/**
|
|
26
40
|
* How a query is matched. `hybrid` (the default) fuses vector similarity with
|
|
27
41
|
* BM25 keyword ranking - the right choice for most search boxes and for source
|
|
@@ -132,7 +146,7 @@ export declare const searchClientConfigSchema: z.ZodObject<{
|
|
|
132
146
|
}, z.core.$strip>>;
|
|
133
147
|
defaultIndex: z.ZodOptional<z.ZodString>;
|
|
134
148
|
pageSize: z.ZodNumber;
|
|
135
|
-
basePath: z.ZodString
|
|
149
|
+
basePath: z.ZodDefault<z.ZodString>;
|
|
136
150
|
}, z.core.$strip>;
|
|
137
151
|
/** The plugin's client config ({@link searchClientConfigSchema}). */
|
|
138
152
|
export type SearchClientConfig = z.infer<typeof searchClientConfigSchema>;
|
|
@@ -22,6 +22,22 @@
|
|
|
22
22
|
* @module
|
|
23
23
|
*/
|
|
24
24
|
import { z } from "zod";
|
|
25
|
+
/** AppKit plugin name used to publish and read the search browser client config. */
|
|
26
|
+
export const SEARCH_PLUGIN_NAME = "search";
|
|
27
|
+
/** Default AppKit mount path for the search extension routes. */
|
|
28
|
+
export const SEARCH_DEFAULT_BASE_PATH = `/api/${SEARCH_PLUGIN_NAME}`;
|
|
29
|
+
/** Shared server route segments owned by the search plugin contract. */
|
|
30
|
+
export const SEARCH_ROUTES = {
|
|
31
|
+
universal: "/universal",
|
|
32
|
+
indexes: "/indexes",
|
|
33
|
+
documents: "/documents",
|
|
34
|
+
index: "/index",
|
|
35
|
+
indexSync: "/index/sync",
|
|
36
|
+
};
|
|
37
|
+
/** Join a published search base path with one shared route segment. */
|
|
38
|
+
export function searchRoute(basePath, route) {
|
|
39
|
+
return `${basePath.replace(/\/+$/, "")}/${route.replace(/^\/+/, "")}`;
|
|
40
|
+
}
|
|
25
41
|
/**
|
|
26
42
|
* How a query is matched. `hybrid` (the default) fuses vector similarity with
|
|
27
43
|
* BM25 keyword ranking - the right choice for most search boxes and for source
|
|
@@ -140,6 +156,8 @@ export const searchClientConfigSchema = z.object({
|
|
|
140
156
|
pageSize: z.number().int().describe("Default number of hits a search returns."),
|
|
141
157
|
basePath: z
|
|
142
158
|
.string()
|
|
159
|
+
.startsWith("/")
|
|
160
|
+
.default(SEARCH_DEFAULT_BASE_PATH)
|
|
143
161
|
.describe("Base path the search routes are mounted under (e.g. /api/search)."),
|
|
144
162
|
});
|
|
145
163
|
/**
|
|
@@ -203,4 +221,4 @@ export const indexInfoSchema = z.object({
|
|
|
203
221
|
.optional()
|
|
204
222
|
.describe("True for a DIRECT_ACCESS index that stores caller-supplied vectors."),
|
|
205
223
|
});
|
|
206
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXNjaGVtYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VhcmNoLXNjaGVtYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUM7S0FDOUIsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztLQUNyQyxRQUFRLENBQ1Asb0tBQW9LLENBQ3JLLENBQUM7QUFJSixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDO0tBQ3JDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7S0FDcEMsUUFBUSxDQUFDLDREQUE0RCxDQUFDLENBQUM7QUFJMUUsb0VBQW9FO0FBQ3BFLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUE0QjtJQUM5RCxJQUFJLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDcEMsSUFBSSxJQUFJLEtBQUssU0FBUztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQzNDLElBQUksSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUN2QyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsMERBQTBEO0FBQzFELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDMUMsS0FBSyxFQUFFLENBQUM7U0FDTCxNQUFNLEVBQUU7U0FDUixRQUFRLENBQ1AsOEZBQThGLENBQy9GO0lBQ0gsS0FBSyxFQUFFLENBQUM7U0FDTCxNQUFNLEVBQUU7U0FDUixRQUFRLEVBQUU7U0FDVixRQUFRLENBQ1AsNEpBQTRKLENBQzdKO0lBQ0gsS0FBSyxFQUFF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QztJQUNoRyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxxQ0FBcUMsQ0FBQztJQUNyRixZQUFZLEVBQUUsQ0FBQztTQUNaLE9BQU8sRUFBRTtTQUNULFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FBQyxxRUFBcUUsQ0FBQztDQUNuRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdpcmUtZm9ybWF0IGNvbnRyYWN0IGZvciB0aGUgQUkgU2VhcmNoIGFkZC1vbjogdGhlIHF1ZXJ5IGEgY2FsbGVyIChhIFVJXG4gKiBzZWFyY2ggYm94LCBhIE1hc3RyYSB0b29sLCBhIHVuaXZlcnNhbC1zZWFyY2ggcm91dGUpIHNlbmRzIGFuZCB0aGUgaGl0cyBpdFxuICogZ2V0cyBiYWNrLCBwbHVzIHRoZSBkb2N1bWVudCBzaGFwZSB1c2VkIHRvIGFkZCAvIHVwZGF0ZSBpbmRleCBjb250ZW50cy5cbiAqXG4gKiBQdXJlICh6b2QgKyBpbmZlcnJlZCB0eXBlcywgbm8gTm9kZS1vbmx5IGltcG9ydHMpIHNvIHRoZSBzZXJ2ZXItc2lkZSBjbGllbnRcbiAqIGluIGBAZGJ4LXRvb2xzL3NlYXJjaGAsIHRoZSBNYXN0cmEgdG9vbCwgdGhlIGBQT1NUIC9hcGkvc2VhcmNoYCByb3V0ZSxcbiAqIGFuZCB0aGUgUmVhY3Qgc2VhcmNoIGJveCBhbGwgdmFsaWRhdGUgLyB0eXBlIGFnYWluc3QgT05FIGRlZmluaXRpb24uXG4gKlxuICogXCJBSSBTZWFyY2hcIiBpcyBEYXRhYnJpY2tzJyBjdXJyZW50IG5hbWUgZm9yIFZlY3RvciBTZWFyY2g6IGFuIGluZGV4IGJ1aWx0XG4gKiBmcm9tIGEgRGVsdGEgdGFibGUgKG9yIHdyaXR0ZW4gZGlyZWN0bHkpIHRoYXQgYW5zd2VycyBhIG5hdHVyYWwtbGFuZ3VhZ2VcbiAqIHF1ZXJ5IHdpdGggdGhlIG1vc3QgcmVsZXZhbnQgcm93cywgY29tYmluaW5nIHZlY3RvciBzaW1pbGFyaXR5IHdpdGggQk0yNVxuICoga2V5d29yZCBtYXRjaGluZyAoaHlicmlkKS4gVGhpcyBjb250cmFjdCBpcyBpbmRleC1hZ25vc3RpYyAtIGl0IG5hbWVzIHRoZVxuICogaW5kZXggYnkgaXRzIFVuaXR5IENhdGFsb2cgcGF0aCBhbmQgcmV0dXJucyBoaXRzIGFzIGB7IGlkLCBzY29yZSwgZmllbGRzIH1gXG4gKiBzbyB0aGUgc2FtZSBzaGFwZSBzZXJ2ZXMgYW4gYXV0b2NvbXBsZXRlIGJveCwgYSBkb2NzIGxvb2t1cCwgYW5kIGFcbiAqIGZlZGVyYXRlZCBzZWFyY2ggYWNyb3NzIG1hbnkgaW5kZXhlcy5cbiAqXG4gKiBBcnJheSBmaWVsZHMgaW50ZW50aW9uYWxseSBhdm9pZCBgLm1pbigpYCAvIGAubm9uZW1wdHkoKWA6IHRob3NlIGVtaXRcbiAqIGBtaW5JdGVtc2AgaW4gdGhlIEpTT04gc2NoZW1hLCB3aGljaCBzb21lIE1vZGVsIFNlcnZpbmcgZW5kcG9pbnRzIHJlamVjdFxuICogd2hlbiB0aGUgc2NoZW1hIGlzIGZvcndhcmRlZCBhcyBhIHRvb2wgZGVmaW5pdGlvbi5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuLyoqXG4gKiBIb3cgYSBxdWVyeSBpcyBtYXRjaGVkLiBgaHlicmlkYCAodGhlIGRlZmF1bHQpIGZ1c2VzIHZlY3RvciBzaW1pbGFyaXR5IHdpdGhcbiAqIEJNMjUga2V5d29yZCByYW5raW5nIC0gdGhlIHJpZ2h0IGNob2ljZSBmb3IgbW9zdCBzZWFyY2ggYm94ZXMgYW5kIGZvciBzb3VyY2VcbiAqIGRhdGEgd2l0aCBleGFjdCBpZGVudGlmaWVycyAoU0tVcywgZXJyb3IgY29kZXMpLiBgdmVjdG9yYCBpcyBwdXJlIHNlbWFudGljXG4gKiBzaW1pbGFyaXR5OyBga2V5d29yZGAgaXMgcHVyZSBCTTI1IGZ1bGwtdGV4dCAoQmV0YSBvbiBEYXRhYnJpY2tzKS4gVGhlXG4gKiB2YWx1ZSBtYXBzIG9udG8gdGhlIHNlcnZpbmcgQVBJJ3MgYHF1ZXJ5X3R5cGVgIChgQU5OYCAvIGBIWUJSSURgKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlYXJjaE1vZGVTY2hlbWEgPSB6XG4gIC5lbnVtKFtcImh5YnJpZFwiLCBcInZlY3RvclwiLCBcImtleXdvcmRcIl0pXG4gIC5kZXNjcmliZShcbiAgICBcIk1hdGNoIHN0cmF0ZWd5OiAnaHlicmlkJyBmdXNlcyBzZW1hbnRpYyBzaW1pbGFyaXR5IHdpdGgga2V5d29yZCByYW5raW5nIChkZWZhdWx0LCBiZXN0IGZvciBtb3N0IHNlYXJjaGVzKSwgJ3ZlY3RvcicgaXMgcHVyZSBzZW1hbnRpYywgJ2tleXdvcmQnIGlzIHB1cmUgZnVsbC10ZXh0LlwiLFxuICApO1xuXG5leHBvcnQgdHlwZSBTZWFyY2hNb2RlID0gei5pbmZlcjx0eXBlb2Ygc2VhcmNoTW9kZVNjaGVtYT47XG5cbmV4cG9ydCBjb25zdCBhaVNlYXJjaFF1ZXJ5VHlwZVNjaGVtYSA9IHpcbiAgLmVudW0oW1wiYW5uXCIsIFwiaHlicmlkXCIsIFwiZnVsbF90ZXh0XCJdKVxuICAuZGVzY3JpYmUoXCJBcHBLaXQgQUkgU2VhcmNoIHF1ZXJ5X3R5cGUgdmFsdWVzIG1hcHBlZCBmcm9tIFNlYXJjaE1vZGUuXCIpO1xuXG5leHBvcnQgdHlwZSBBaVNlYXJjaFF1ZXJ5VHlwZSA9IHouaW5mZXI8dHlwZW9mIGFpU2VhcmNoUXVlcnlUeXBlU2NoZW1hPjtcblxuLyoqIE1hcCB0aGUgZGJ4LXRvb2xzIGV4dGVuc2lvbiB2b2NhYnVsYXJ5IG9udG8gQXBwS2l0IEFJIFNlYXJjaC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0FpU2VhcmNoUXVlcnlUeXBlKG1vZGU6IFNlYXJjaE1vZGUgfCB1bmRlZmluZWQpOiBBaVNlYXJjaFF1ZXJ5VHlwZSB8IHVuZGVmaW5lZCB7XG4gIGlmIChtb2RlID09PSBcInZlY3RvclwiKSByZXR1cm4gXCJhbm5cIjtcbiAgaWYgKG1vZGUgPT09IFwia2V5d29yZFwiKSByZXR1cm4gXCJmdWxsX3RleHRcIjtcbiAgaWYgKG1vZGUgPT09IFwiaHlicmlkXCIpIHJldHVybiBcImh5YnJpZFwiO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiogU2NoZW1hIGZvciBhIHNlYXJjaCByZXF1ZXN0IGFnYWluc3QgYSBzaW5nbGUgaW5kZXguICovXG5leHBvcnQgY29uc3Qgc2VhcmNoUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgcXVlcnk6IHpcbiAgICAuc3RyaW5nKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIldoYXQgdG8gc2VhcmNoIGZvciwgYXMgbmF0dXJhbCBsYW5ndWFnZSBvciBrZXl3b3Jkcy4gUHJlZml4IGZyYWdtZW50cyB3b3JrIGZvciBhdXRvY29tcGxldGUuXCIsXG4gICAgKSxcbiAgaW5kZXg6IHpcbiAgICAuc3RyaW5nKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiVW5pdHkgQ2F0YWxvZyBuYW1lIG9mIHRoZSBpbmRleCB0byBzZWFyY2ggKGNhdGFsb2cuc2NoZW1hLmluZGV4KS4gRGVmYXVsdHMgdG8gdGhlIHBsdWdpbidzIGNvbmZpZ3VyZWQgaW5kZXguIEFjY2VwdHMgYSBzaG9ydCBhbGlhcyB3aGVuIG9uZSBpcyBjb25maWd1cmVkLlwiLFxuICAgICksXG4gIGxpbWl0OiB6XG4gICAgLm51bWJlcigpXG4gICAgLmludCgpXG4gICAgLnBvc2l0aXZlKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcIk1heGltdW0gbnVtYmVyIG9mIGhpdHMgdG8gcmV0dXJuLiBEZWZhdWx0cyB0byB0aGUgcGx1Z2luJ3MgY29uZmlndXJlZCBwYWdlIHNpemUuXCIpLFxuICBtb2RlOiBzZWFyY2hNb2RlU2NoZW1hLm9wdGlvbmFsKCksXG4gIGNvbHVtbnM6IHpcbiAgICAuYXJyYXkoei5zdHJpbmcoKSlcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiV2hpY2ggZG9jdW1lbnQgY29sdW1ucyB0byByZXR1cm4gcGVyIGhpdC4gRGVmYXVsdHMgdG8gdGhlIHBsdWdpbidzIGNvbmZpZ3VyZWQgY29sdW1ucyAob3IgYWxsIGluZGV4ZWQgY29sdW1ucykuXCIsXG4gICAgKSxcbiAgZmlsdGVyOiB6XG4gICAgLnJlY29yZChcbiAgICAgIHouc3RyaW5nKCksXG4gICAgICB6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm51bWJlcigpLCB6LmJvb2xlYW4oKSwgei5hcnJheSh6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm51bWJlcigpXSkpXSksXG4gICAgKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJBcHBLaXQgQUkgU2VhcmNoIGF0dHJpYnV0ZSBmaWx0ZXJzIGFzIHsgY29sdW1uOiBzY2FsYXJPckFycmF5IH0uIENvbWJpbmVkIHdpdGggQU5ELlwiLFxuICAgICksXG4gIHNjb3JlVGhyZXNob2xkOiB6XG4gICAgLm51bWJlcigpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJEcm9wIGhpdHMgd2hvc2UgcmVsZXZhbmNlIHNjb3JlIGlzIGJlbG93IHRoaXMgdmFsdWUuXCIpLFxufSk7XG5cbi8qKiBBIHZhbGlkYXRlZCBzZWFyY2ggcmVxdWVzdCAoe0BsaW5rIHNlYXJjaFJlcXVlc3RTY2hlbWF9KS4gKi9cbmV4cG9ydCB0eXBlIFNlYXJjaFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBzZWFyY2hSZXF1ZXN0U2NoZW1hPjtcblxuLyoqIFNjaGVtYSBmb3IgYSBzaW5nbGUgc2VhcmNoIGhpdC4gKi9cbmV4cG9ydCBjb25zdCBzZWFyY2hIaXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIGRvY3VtZW50J3MgcHJpbWFyeS1rZXkgdmFsdWUuXCIpLFxuICBzY29yZTogei5udW1iZXIoKS5kZXNjcmliZShcIlJlbGV2YW5jZSBzY29yZTsgaGlnaGVyIGlzIG1vcmUgcmVsZXZhbnQuXCIpLFxuICBmaWVsZHM6IHpcbiAgICAucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKVxuICAgIC5kZXNjcmliZShcIlRoZSByZXR1cm5lZCBjb2x1bW5zIGZvciB0aGlzIGRvY3VtZW50LCBrZXllZCBieSBjb2x1bW4gbmFtZS5cIiksXG4gIGluZGV4OiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJXaGljaCBpbmRleCB0aGUgaGl0IGNhbWUgZnJvbSAoc2V0IG9uIHVuaXZlcnNhbC9mZWRlcmF0ZWQgcmVzdWx0cykuXCIpLFxufSk7XG5cbi8qKiBBIHNpbmdsZSBzZWFyY2ggaGl0ICh7QGxpbmsgc2VhcmNoSGl0U2NoZW1hfSkuICovXG5leHBvcnQgdHlwZSBTZWFyY2hIaXQgPSB6LmluZmVyPHR5cGVvZiBzZWFyY2hIaXRTY2hlbWE+O1xuXG4vKiogU2NoZW1hIGZvciB0aGUgcmVzdWx0IG9mIGEgc2VhcmNoLiAqL1xuZXhwb3J0IGNvbnN0IHNlYXJjaFJlc3VsdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgcXVlcnk6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJFY2hvIG9mIHRoZSBxdWVyeSB0aGF0IHdhcyBzZWFyY2hlZC5cIiksXG4gIGhpdHM6IHouYXJyYXkoc2VhcmNoSGl0U2NoZW1hKS5kZXNjcmliZShcIk1hdGNoaW5nIGRvY3VtZW50cywgbW9zdCByZWxldmFudCBmaXJzdC5cIiksXG4gIGluZGV4OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgaW5kZXggc2VhcmNoZWQgKG9taXR0ZWQgZm9yIGEgdW5pdmVyc2FsIHNlYXJjaCkuXCIpLFxuICBjb3VudDogei5udW1iZXIoKS5pbnQoKS5kZXNjcmliZShcIk51bWJlciBvZiBoaXRzIHJldHVybmVkLlwiKSxcbn0pO1xuXG4vKiogVGhlIG91dGNvbWUgb2YgYSBzZWFyY2ggKHtAbGluayBzZWFyY2hSZXN1bHRTY2hlbWF9KS4gKi9cbmV4cG9ydCB0eXBlIFNlYXJjaFJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIHNlYXJjaFJlc3VsdFNjaGVtYT47XG5cbi8qKiBTY2hlbWEgZm9yIGEgdW5pdmVyc2FsIChmZWRlcmF0ZWQpIHNlYXJjaCBhY3Jvc3Mgc2V2ZXJhbCBpbmRleGVzIGF0IG9uY2UuICovXG5leHBvcnQgY29uc3QgdW5pdmVyc2FsU2VhcmNoUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgcXVlcnk6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJXaGF0IHRvIHNlYXJjaCBmb3IgYWNyb3NzIGV2ZXJ5IGNvbmZpZ3VyZWQgaW5kZXguXCIpLFxuICBpbmRleGVzOiB6XG4gICAgLmFycmF5KHouc3RyaW5nKCkpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJXaGljaCBpbmRleGVzIHRvIHNlYXJjaC4gRGVmYXVsdHMgdG8gZXZlcnkgaW5kZXggdGhlIHBsdWdpbiBrbm93cyBhYm91dC5cIiksXG4gIGxpbWl0OiB6XG4gICAgLm51bWJlcigpXG4gICAgLmludCgpXG4gICAgLnBvc2l0aXZlKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcIk1heGltdW0gaGl0cyBQRVIgaW5kZXggYmVmb3JlIHJlc3VsdHMgYXJlIG1lcmdlZCBhbmQgcmUtcmFua2VkLlwiKSxcbiAgbW9kZTogc2VhcmNoTW9kZVNjaGVtYS5vcHRpb25hbCgpLFxufSk7XG5cbi8qKiBBIHZhbGlkYXRlZCB1bml2ZXJzYWwtc2VhcmNoIHJlcXVlc3QgKHtAbGluayB1bml2ZXJzYWxTZWFyY2hSZXF1ZXN0U2NoZW1hfSkuICovXG5leHBvcnQgdHlwZSBVbml2ZXJzYWxTZWFyY2hSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgdW5pdmVyc2FsU2VhcmNoUmVxdWVzdFNjaGVtYT47XG5cbi8qKiBTY2hlbWEgZm9yIGEgZG9jdW1lbnQgd3JpdHRlbiB0byBhIGRpcmVjdC1hY2Nlc3MgaW5kZXguICovXG5leHBvcnQgY29uc3Qgc2VhcmNoRG9jdW1lbnRTY2hlbWEgPSB6XG4gIC5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpXG4gIC5kZXNjcmliZShcIkEgZG9jdW1lbnQgYXMgeyBjb2x1bW46IHZhbHVlIH0uIE11c3QgaW5jbHVkZSB0aGUgaW5kZXggcHJpbWFyeS1rZXkgY29sdW1uLlwiKTtcblxuLyoqIEEgZG9jdW1lbnQgd3JpdHRlbiB0byBhbiBpbmRleCAoe0BsaW5rIHNlYXJjaERvY3VtZW50U2NoZW1hfSkuICovXG5leHBvcnQgdHlwZSBTZWFyY2hEb2N1bWVudCA9IHouaW5mZXI8dHlwZW9mIHNlYXJjaERvY3VtZW50U2NoZW1hPjtcblxuLyoqIFNjaGVtYSBmb3IgdGhlIHJlc3VsdCBvZiBhZGRpbmcgLyB1cGRhdGluZyBkb2N1bWVudHMuICovXG5leHBvcnQgY29uc3QgdXBzZXJ0UmVzdWx0U2NoZW1hID0gei5vYmplY3Qoe1xuICBpbmRleDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBpbmRleCB0aGUgZG9jdW1lbnRzIHdlcmUgd3JpdHRlbiB0by5cIiksXG4gIGNvdW50OiB6Lm51bWJlcigpLmludCgpLmRlc2NyaWJlKFwiTnVtYmVyIG9mIGRvY3VtZW50cyBhY2NlcHRlZC5cIiksXG59KTtcblxuLyoqIFRoZSBvdXRjb21lIG9mIGFuIGFkZC1kb2N1bWVudHMgY2FsbCAoe0BsaW5rIHVwc2VydFJlc3VsdFNjaGVtYX0pLiAqL1xuZXhwb3J0IHR5cGUgVXBzZXJ0UmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgdXBzZXJ0UmVzdWx0U2NoZW1hPjtcblxuLyoqXG4gKiBTY2hlbWEgZm9yIHRoZSBib290LXRpbWUgaW5kZXggY2F0YWxvZ3VlIGEgVUkgcmVhZHMgdG8gcG9wdWxhdGUgYSBzZWFyY2ggYm94XG4gKiAodGhlIHBheWxvYWQgb2YgdGhlIHBsdWdpbidzIGNsaWVudCBjb25maWcgLyBgR0VUIC9hcGkvc2VhcmNoL2luZGV4ZXNgKS4gQW5cbiAqIGVudHJ5IG5hbWVzIGFuIGluZGV4LCBhbiBvcHRpb25hbCBzaG9ydCBhbGlhcywgYW5kIHRoZSBjb2x1bW5zIHdvcnRoXG4gKiBzaG93aW5nLCBzbyBhIHNlYXJjaCBib3ggbmVlZHMgbm8gc2VydmVyIHJvdW5kLXRyaXAgdG8gcmVuZGVyLlxuICovXG5leHBvcnQgY29uc3Qgc2VhcmNoSW5kZXhJbmZvU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVW5pdHkgQ2F0YWxvZyBuYW1lIG9mIHRoZSBpbmRleCAoY2F0YWxvZy5zY2hlbWEuaW5kZXgpLlwiKSxcbiAgYWxpYXM6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlNob3J0IGFsaWFzIHRoZSBwbHVnaW4gYWNjZXB0cyBpbiBwbGFjZSBvZiBgbmFtZWAuXCIpLFxuICBwcmltYXJ5S2V5OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgaW5kZXgncyBwcmltYXJ5LWtleSBjb2x1bW4sIHdoZW4ga25vd24uXCIpLFxuICBjb2x1bW5zOiB6XG4gICAgLmFycmF5KHouc3RyaW5nKCkpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJDb2x1bW5zIHJldHVybmVkIGJ5IGRlZmF1bHQsIGluIGRpc3BsYXkgb3JkZXIuXCIpLFxuICBpc0RlZmF1bHQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUcnVlIGZvciB0aGUgcGx1Z2luJ3MgZGVmYXVsdCBpbmRleC5cIiksXG59KTtcblxuLyoqIE9uZSBlbnRyeSBpbiB0aGUgaW5kZXggY2F0YWxvZ3VlICh7QGxpbmsgc2VhcmNoSW5kZXhJbmZvU2NoZW1hfSkuICovXG5leHBvcnQgdHlwZSBTZWFyY2hJbmRleEluZm8gPSB6LmluZmVyPHR5cGVvZiBzZWFyY2hJbmRleEluZm9TY2hlbWE+O1xuXG4vKiogU2NoZW1hIGZvciB0aGUgcGx1Z2luJ3MgY2xpZW50IGNvbmZpZyBzdXJmYWNlZCB0byBhIFVJLiAqL1xuZXhwb3J0IGNvbnN0IHNlYXJjaENsaWVudENvbmZpZ1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgaW5kZXhlczogei5hcnJheShzZWFyY2hJbmRleEluZm9TY2hlbWEpLmRlc2NyaWJlKFwiSW5kZXhlcyB0aGUgc2VhcmNoIFVJIG1heSBxdWVyeS5cIiksXG4gIGRlZmF1bHRJbmRleDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIGluZGV4IGEgc2VhcmNoIGJveCBzZWxlY3RzIGJ5IGRlZmF1bHQuXCIpLFxuICBwYWdlU2l6ZTogei5udW1iZXIoKS5pbnQoKS5kZXNjcmliZShcIkRlZmF1bHQgbnVtYmVyIG9mIGhpdHMgYSBzZWFyY2ggcmV0dXJucy5cIiksXG4gIGJhc2VQYXRoOiB6XG4gICAgLnN0cmluZygpXG4gICAgLmRlc2NyaWJlKFwiQmFzZSBwYXRoIHRoZSBzZWFyY2ggcm91dGVzIGFyZSBtb3VudGVkIHVuZGVyIChlLmcuIC9hcGkvc2VhcmNoKS5cIiksXG59KTtcblxuLyoqIFRoZSBwbHVnaW4ncyBjbGllbnQgY29uZmlnICh7QGxpbmsgc2VhcmNoQ2xpZW50Q29uZmlnU2NoZW1hfSkuICovXG5leHBvcnQgdHlwZSBTZWFyY2hDbGllbnRDb25maWcgPSB6LmluZmVyPHR5cGVvZiBzZWFyY2hDbGllbnRDb25maWdTY2hlbWE+O1xuXG4vKipcbiAqIFNjaGVtYSBmb3IgY3JlYXRpbmcgYW4gaW5kZXggKHRoZSBgY3JlYXRlX2luZGV4YCB0b29sIGlucHV0IC8gdGhlXG4gKiBgUE9TVCAvYXBpL3NlYXJjaC9pbmRleGAgYm9keSkuIFR3byBzaGFwZXMsIGJvdGggaW5mZXJyaW5nIGFnZ3Jlc3NpdmVseTpcbiAqIHBhc3MgYHNvdXJjZVRhYmxlYCBmb3IgYSBEZWx0YSBTeW5jIGluZGV4IChEYXRhYnJpY2tzIGNvbXB1dGVzIGVtYmVkZGluZ3MgYW5kXG4gKiBrZWVwcyBpdCBzeW5jZWQpIG9yIGBlbWJlZGRpbmdEaW1lbnNpb25gIGZvciBhIGRpcmVjdC1hY2Nlc3MgaW5kZXggeW91IHdyaXRlXG4gKiB2ZWN0b3JzIHRvIHlvdXJzZWxmLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlSW5kZXhSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVW5pdHkgQ2F0YWxvZyBuYW1lIGZvciB0aGUgbmV3IGluZGV4IChjYXRhbG9nLnNjaGVtYS5pbmRleCkuXCIpLFxuICBzb3VyY2VUYWJsZTogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJEZWx0YSB0YWJsZSAoY2F0YWxvZy5zY2hlbWEudGFibGUpIHRvIGJ1aWxkIGEgc3luY2VkIGluZGV4IGZyb20uIFByb3ZpZGUgdGhpcyBPUiBlbWJlZGRpbmdEaW1lbnNpb24uXCIsXG4gICAgKSxcbiAgcHJpbWFyeUtleTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUHJpbWFyeS1rZXkgY29sdW1uLiBEZWZhdWx0cyB0byAnaWQnLlwiKSxcbiAgZW1iZWRkaW5nU291cmNlQ29sdW1uOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIlRleHQgY29sdW1uIGVtYmVkZGluZ3MgYXJlIGNvbXB1dGVkIGZyb20gKERlbHRhIFN5bmMpLiBEZWZhdWx0cyB0byB0aGUgZmlyc3Qgb2YgdGV4dC9jb250ZW50L2JvZHkuXCIsXG4gICAgKSxcbiAgZW1iZWRkaW5nTW9kZWw6IHpcbiAgICAuc3RyaW5nKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiRW1iZWRkaW5nIG1vZGVsIGVuZHBvaW50IChuYW1lIG9yIGxvb3NlIG5hbWUpLiBEZWZhdWx0cyB0byB0aGUgYXBwJ3MgZW1iZWRkaW5nIG1vZGVsLCBvciB0aGUgYmVzdCBlbWJlZGRpbmcgZW5kcG9pbnQgaW4gdGhlIHdvcmtzcGFjZS5cIixcbiAgICApLFxuICBlbmRwb2ludDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJWZWN0b3IgU2VhcmNoIGVuZHBvaW50IHRvIGhvc3QgdGhlIGluZGV4IG9uLiBEZWZhdWx0cyB0byB0aGUgYXBwJ3MgY29uZmlndXJlZCBlbmRwb2ludC5cIixcbiAgICApLFxuICBlbWJlZGRpbmdEaW1lbnNpb246IHpcbiAgICAubnVtYmVyKClcbiAgICAuaW50KClcbiAgICAucG9zaXRpdmUoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFwiRm9yIGEgZGlyZWN0LWFjY2VzcyBpbmRleCAobm8gc291cmNlIHRhYmxlKTogdGhlIGVtYmVkZGluZyB2ZWN0b3IgZGltZW5zaW9uLlwiKSxcbiAgcGlwZWxpbmVUeXBlOiB6XG4gICAgLmVudW0oW1wiVFJJR0dFUkVEXCIsIFwiQ09OVElOVU9VU1wiXSlcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiRGVsdGEgU3luYyBtb2RlOiAnVFJJR0dFUkVEJyAoZGVmYXVsdCkgc3luY3Mgb24gZGVtYW5kOyAnQ09OVElOVU9VUycga2VlcHMgdGhlIGluZGV4IGZyZXNoLlwiLFxuICAgICksXG4gIGNvbHVtbnNUb1N5bmM6IHpcbiAgICAuYXJyYXkoei5zdHJpbmcoKSlcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcIkV4dHJhIGNvbHVtbnMgdG8gc3luYyBhbG9uZ3NpZGUgdGhlIGVtYmVkZGluZyBzb3VyY2UgY29sdW1uIChEZWx0YSBTeW5jKS5cIiksXG59KTtcblxuLyoqIEEgdmFsaWRhdGVkIGNyZWF0ZS1pbmRleCByZXF1ZXN0ICh7QGxpbmsgY3JlYXRlSW5kZXhSZXF1ZXN0U2NoZW1hfSkuICovXG5leHBvcnQgdHlwZSBDcmVhdGVJbmRleFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBjcmVhdGVJbmRleFJlcXVlc3RTY2hlbWE+O1xuXG4vKiogU2NoZW1hIGZvciB0aGUgYHN5bmNfaW5kZXhgIHRvb2wgaW5wdXQgLyB0aGUgYFBPU1QgL2FwaS9zZWFyY2gvaW5kZXgvc3luY2AgYm9keS4gKi9cbmV4cG9ydCBjb25zdCBzeW5jSW5kZXhSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICBpbmRleDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiVGhlIGluZGV4IHRvIHN5bmMgKG5hbWUgb3IgY29uZmlndXJlZCBhbGlhcykuIERlZmF1bHRzIHRvIHRoZSBhcHAncyBkZWZhdWx0IGluZGV4IHdoZW4gb21pdHRlZC5cIixcbiAgICApXG4gICAgLm9wdGlvbmFsKCksXG59KTtcblxuLyoqIEEgdmFsaWRhdGVkIHN5bmMtaW5kZXggcmVxdWVzdCAoe0BsaW5rIHN5bmNJbmRleFJlcXVlc3RTY2hlbWF9KS4gKi9cbmV4cG9ydCB0eXBlIFN5bmNJbmRleFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBzeW5jSW5kZXhSZXF1ZXN0U2NoZW1hPjtcblxuLyoqIFNjaGVtYSBmb3IgYSByZXNvbHZlZCBpbmRleCBkZWZpbml0aW9uICh0aGUgY3JlYXRlL2dldCByZXN1bHQpLiAqL1xuZXhwb3J0IGNvbnN0IGluZGV4SW5mb1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKS5kZXNjcmliZShcIlVuaXR5IENhdGFsb2cgbmFtZSBvZiB0aGUgaW5kZXguXCIpLFxuICBlbmRwb2ludDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIFZlY3RvciBTZWFyY2ggZW5kcG9pbnQgaG9zdGluZyB0aGUgaW5kZXguXCIpLFxuICBwcmltYXJ5S2V5OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgaW5kZXgncyBwcmltYXJ5LWtleSBjb2x1bW4uXCIpLFxuICBjb2x1bW5zOiB6LmFycmF5KHouc3RyaW5nKCkpLmRlc2NyaWJlKFwiQ29sdW1ucyBhdmFpbGFibGUgb24gdGhlIGluZGV4LlwiKSxcbiAgcmVhZHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVHJ1ZSB3aGVuIHRoZSBpbmRleCBoYXMgZmluaXNoZWQgcHJvdmlzaW9uaW5nIGFuZCBjYW4gYmUgcXVlcmllZC5cIiksXG4gIHJvd0NvdW50OiB6Lm51bWJlcigpLmludCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJOdW1iZXIgb2YgaW5kZXhlZCByb3dzLCB3aGVuIGtub3duLlwiKSxcbiAgZGlyZWN0QWNjZXNzOiB6XG4gICAgLmJvb2xlYW4oKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFwiVHJ1ZSBmb3IgYSBESVJFQ1RfQUNDRVNTIGluZGV4IHRoYXQgc3RvcmVzIGNhbGxlci1zdXBwbGllZCB2ZWN0b3JzLlwiKSxcbn0pO1xuXG4vKiogQSByZXNvbHZlZCBpbmRleCBkZWZpbml0aW9uICh7QGxpbmsgaW5kZXhJbmZvU2NoZW1hfSkuICovXG5leHBvcnQgdHlwZSBJbmRleEluZm8gPSB6LmluZmVyPHR5cGVvZiBpbmRleEluZm9TY2hlbWE+O1xuIl19
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXNjaGVtYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VhcmNoLXNjaGVtYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLG9GQUFvRjtBQUNwRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUM7QUFFM0MsaUVBQWlFO0FBQ2pFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLFFBQVEsa0JBQWtCLEVBQUUsQ0FBQztBQUVyRSx3RUFBd0U7QUFDeEUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQzNCLFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLE9BQU8sRUFBRSxVQUFVO0lBQ25CLFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLEtBQUssRUFBRSxRQUFRO0lBQ2YsU0FBUyxFQUFFLGFBQWE7Q0FDaEIsQ0FBQztBQUVYLHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsV0FBVyxDQUFDLFFBQWdCLEVBQUUsS0FBYTtJQUN6RCxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN4RSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQztLQUM5QixJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ3JDLFFBQVEsQ0FDUCxvS0FBb0ssQ0FDckssQ0FBQztBQUlKLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUM7S0FDckMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztLQUNwQyxRQUFRLENB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RSxDQUFDO1NBQ0wsTUFBTSxFQUFFO1NBQ1IsUUFBUSxDQUNQLGlHQUFpRyxDQUNsRztTQUNBLFFBQVEsRUFBRTtDQUNkLENBQUMsQ0FBQztBQUtILHNFQUFzRTtBQUN0RSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN0QyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxrQ0FBa0MsQ0FBQztJQUM3RCxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQywrQ0FBK0MsQ0FBQztJQUN6RixVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsQ0FBQztJQUM3RSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsaUNBQWlDLENBQUM7SUFDeEUsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsbUVBQW1FLENBQUM7SUFDaEcsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMscUNBQXFDLENBQUM7SUFDckYsWUFBWSxFQUFFLENBQUM7U0FDWixPQUFPLEVBQUU7U0FDVCxRQUFRLEVBQUU7U0FDVixRQUFRLENBQUMscUVBQXFFLENBQUM7Q0FDbkYsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXaXJlLWZvcm1hdCBjb250cmFjdCBmb3IgdGhlIEFJIFNlYXJjaCBhZGQtb246IHRoZSBxdWVyeSBhIGNhbGxlciAoYSBVSVxuICogc2VhcmNoIGJveCwgYSBNYXN0cmEgdG9vbCwgYSB1bml2ZXJzYWwtc2VhcmNoIHJvdXRlKSBzZW5kcyBhbmQgdGhlIGhpdHMgaXRcbiAqIGdldHMgYmFjaywgcGx1cyB0aGUgZG9jdW1lbnQgc2hhcGUgdXNlZCB0byBhZGQgLyB1cGRhdGUgaW5kZXggY29udGVudHMuXG4gKlxuICogUHVyZSAoem9kICsgaW5mZXJyZWQgdHlwZXMsIG5vIE5vZGUtb25seSBpbXBvcnRzKSBzbyB0aGUgc2VydmVyLXNpZGUgY2xpZW50XG4gKiBpbiBgQGRieC10b29scy9zZWFyY2hgLCB0aGUgTWFzdHJhIHRvb2wsIHRoZSBgUE9TVCAvYXBpL3NlYXJjaGAgcm91dGUsXG4gKiBhbmQgdGhlIFJlYWN0IHNlYXJjaCBib3ggYWxsIHZhbGlkYXRlIC8gdHlwZSBhZ2FpbnN0IE9ORSBkZWZpbml0aW9uLlxuICpcbiAqIFwiQUkgU2VhcmNoXCIgaXMgRGF0YWJyaWNrcycgY3VycmVudCBuYW1lIGZvciBWZWN0b3IgU2VhcmNoOiBhbiBpbmRleCBidWlsdFxuICogZnJvbSBhIERlbHRhIHRhYmxlIChvciB3cml0dGVuIGRpcmVjdGx5KSB0aGF0IGFuc3dlcnMgYSBuYXR1cmFsLWxhbmd1YWdlXG4gKiBxdWVyeSB3aXRoIHRoZSBtb3N0IHJlbGV2YW50IHJvd3MsIGNvbWJpbmluZyB2ZWN0b3Igc2ltaWxhcml0eSB3aXRoIEJNMjVcbiAqIGtleXdvcmQgbWF0Y2hpbmcgKGh5YnJpZCkuIFRoaXMgY29udHJhY3QgaXMgaW5kZXgtYWdub3N0aWMgLSBpdCBuYW1lcyB0aGVcbiAqIGluZGV4IGJ5IGl0cyBVbml0eSBDYXRhbG9nIHBhdGggYW5kIHJldHVybnMgaGl0cyBhcyBgeyBpZCwgc2NvcmUsIGZpZWxkcyB9YFxuICogc28gdGhlIHNhbWUgc2hhcGUgc2VydmVzIGFuIGF1dG9jb21wbGV0ZSBib3gsIGEgZG9jcyBsb29rdXAsIGFuZCBhXG4gKiBmZWRlcmF0ZWQgc2VhcmNoIGFjcm9zcyBtYW55IGluZGV4ZXMuXG4gKlxuICogQXJyYXkgZmllbGRzIGludGVudGlvbmFsbHkgYXZvaWQgYC5taW4oKWAgLyBgLm5vbmVtcHR5KClgOiB0aG9zZSBlbWl0XG4gKiBgbWluSXRlbXNgIGluIHRoZSBKU09OIHNjaGVtYSwgd2hpY2ggc29tZSBNb2RlbCBTZXJ2aW5nIGVuZHBvaW50cyByZWplY3RcbiAqIHdoZW4gdGhlIHNjaGVtYSBpcyBmb3J3YXJkZWQgYXMgYSB0b29sIGRlZmluaXRpb24uXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8qKiBBcHBLaXQgcGx1Z2luIG5hbWUgdXNlZCB0byBwdWJsaXNoIGFuZCByZWFkIHRoZSBzZWFyY2ggYnJvd3NlciBjbGllbnQgY29uZmlnLiAqL1xuZXhwb3J0IGNvbnN0IFNFQVJDSF9QTFVHSU5fTkFNRSA9IFwic2VhcmNoXCI7XG5cbi8qKiBEZWZhdWx0IEFwcEtpdCBtb3VudCBwYXRoIGZvciB0aGUgc2VhcmNoIGV4dGVuc2lvbiByb3V0ZXMuICovXG5leHBvcnQgY29uc3QgU0VBUkNIX0RFRkFVTFRfQkFTRV9QQVRIID0gYC9hcGkvJHtTRUFSQ0hfUExVR0lOX05BTUV9YDtcblxuLyoqIFNoYXJlZCBzZXJ2ZXIgcm91dGUgc2VnbWVudHMgb3duZWQgYnkgdGhlIHNlYXJjaCBwbHVnaW4gY29udHJhY3QuICovXG5leHBvcnQgY29uc3QgU0VBUkNIX1JPVVRFUyA9IHtcbiAgdW5pdmVyc2FsOiBcIi91bml2ZXJzYWxcIixcbiAgaW5kZXhlczogXCIvaW5kZXhlc1wiLFxuICBkb2N1bWVudHM6IFwiL2RvY3VtZW50c1wiLFxuICBpbmRleDogXCIvaW5kZXhcIixcbiAgaW5kZXhTeW5jOiBcIi9pbmRleC9zeW5jXCIsXG59IGFzIGNvbnN0O1xuXG4vKiogSm9pbiBhIHB1Ymxpc2hlZCBzZWFyY2ggYmFzZSBwYXRoIHdpdGggb25lIHNoYXJlZCByb3V0ZSBzZWdtZW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlYXJjaFJvdXRlKGJhc2VQYXRoOiBzdHJpbmcsIHJvdXRlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7YmFzZVBhdGgucmVwbGFjZSgvXFwvKyQvLCBcIlwiKX0vJHtyb3V0ZS5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpfWA7XG59XG5cbi8qKlxuICogSG93IGEgcXVlcnkgaXMgbWF0Y2hlZC4gYGh5YnJpZGAgKHRoZSBkZWZhdWx0KSBmdXNlcyB2ZWN0b3Igc2ltaWxhcml0eSB3aXRoXG4gKiBCTTI1IGtleXdvcmQgcmFua2luZyAtIHRoZSByaWdodCBjaG9pY2UgZm9yIG1vc3Qgc2VhcmNoIGJveGVzIGFuZCBmb3Igc291cmNlXG4gKiBkYXRhIHdpdGggZXhhY3QgaWRlbnRpZmllcnMgKFNLVXMsIGVycm9yIGNvZGVzKS4gYHZlY3RvcmAgaXMgcHVyZSBzZW1hbnRpY1xuICogc2ltaWxhcml0eTsgYGtleXdvcmRgIGlzIHB1cmUgQk0yNSBmdWxsLXRleHQgKEJldGEgb24gRGF0YWJyaWNrcykuIFRoZVxuICogdmFsdWUgbWFwcyBvbnRvIHRoZSBzZXJ2aW5nIEFQSSdzIGBxdWVyeV90eXBlYCAoYEFOTmAgLyBgSFlCUklEYCkuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWFyY2hNb2RlU2NoZW1hID0gelxuICAuZW51bShbXCJoeWJyaWRcIiwgXCJ2ZWN0b3JcIiwgXCJrZXl3b3JkXCJdKVxuICAuZGVzY3JpYmUoXG4gICAgXCJNYXRjaCBzdHJhdGVneTogJ2h5YnJpZCcgZnVzZXMgc2VtYW50aWMgc2ltaWxhcml0eSB3aXRoIGtleXdvcmQgcmFua2luZyAoZGVmYXVsdCwgYmVzdCBmb3IgbW9zdCBzZWFyY2hlcyksICd2ZWN0b3InIGlzIHB1cmUgc2VtYW50aWMsICdrZXl3b3JkJyBpcyBwdXJlIGZ1bGwtdGV4dC5cIixcbiAgKTtcblxuZXhwb3J0IHR5cGUgU2VhcmNoTW9kZSA9IHouaW5mZXI8dHlwZW9mIHNlYXJjaE1vZGVTY2hlbWE+O1xuXG5leHBvcnQgY29uc3QgYWlTZWFyY2hRdWVyeVR5cGVTY2hlbWEgPSB6XG4gIC5lbnVtKFtcImFublwiLCBcImh5YnJpZFwiLCBcImZ1bGxfdGV4dFwiXSlcbiAgLmRlc2NyaWJlKFwiQXBwS2l0IEFJIFNlYXJjaCBxdWVyeV90eXBlIHZhbHVlcyBtYXBwZWQgZnJvbSBTZWFyY2hNb2RlLlwiKTtcblxuZXhwb3J0IHR5cGUgQWlTZWFyY2hRdWVyeVR5cGUgPSB6LmluZmVyPHR5cGVvZiBhaVNlYXJjaFF1ZXJ5VHlwZVNjaGVtYT47XG5cbi8qKiBNYXAgdGhlIGRieC10b29scyBleHRlbnNpb24gdm9jYWJ1bGFyeSBvbnRvIEFwcEtpdCBBSSBTZWFyY2guICovXG5leHBvcnQgZnVuY3Rpb24gdG9BaVNlYXJjaFF1ZXJ5VHlwZShtb2RlOiBTZWFyY2hNb2RlIHwgdW5kZWZpbmVkKTogQWlTZWFyY2hRdWVyeVR5cGUgfCB1bmRlZmluZWQge1xuICBpZiAobW9kZSA9PT0gXCJ2ZWN0b3JcIikgcmV0dXJuIFwiYW5uXCI7XG4gIGlmIChtb2RlID09PSBcImtleXdvcmRcIikgcmV0dXJuIFwiZnVsbF90ZXh0XCI7XG4gIGlmIChtb2RlID09PSBcImh5YnJpZFwiKSByZXR1cm4gXCJoeWJyaWRcIjtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIFNjaGVtYSBmb3IgYSBzZWFyY2ggcmVxdWVzdCBhZ2FpbnN0IGEgc2luZ2xlIGluZGV4LiAqL1xuZXhwb3J0IGNvbnN0IHNlYXJjaFJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHF1ZXJ5OiB6XG4gICAgLnN0cmluZygpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJXaGF0IHRvIHNlYXJjaCBmb3IsIGFzIG5hdHVyYWwgbGFuZ3VhZ2Ugb3Iga2V5d29yZHMuIFByZWZpeCBmcmFnbWVudHMgd29yayBmb3IgYXV0b2NvbXBsZXRlLlwiLFxuICAgICksXG4gIGluZGV4OiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIlVuaXR5IENhdGFsb2cgbmFtZSBvZiB0aGUgaW5kZXggdG8gc2VhcmNoIChjYXRhbG9nLnNjaGVtYS5pbmRleCkuIERlZmF1bHRzIHRvIHRoZSBwbHVnaW4ncyBjb25maWd1cmVkIGluZGV4LiBBY2NlcHRzIGEgc2hvcnQgYWxpYXMgd2hlbiBvbmUgaXMgY29uZmlndXJlZC5cIixcbiAgICApLFxuICBsaW1pdDogelxuICAgIC5udW1iZXIoKVxuICAgIC5pbnQoKVxuICAgIC5wb3NpdGl2ZSgpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJNYXhpbXVtIG51bWJlciBvZiBoaXRzIHRvIHJldHVybi4gRGVmYXVsdHMgdG8gdGhlIHBsdWdpbidzIGNvbmZpZ3VyZWQgcGFnZSBzaXplLlwiKSxcbiAgbW9kZTogc2VhcmNoTW9kZVNjaGVtYS5vcHRpb25hbCgpLFxuICBjb2x1bW5zOiB6XG4gICAgLmFycmF5KHouc3RyaW5nKCkpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIldoaWNoIGRvY3VtZW50IGNvbHVtbnMgdG8gcmV0dXJuIHBlciBoaXQuIERlZmF1bHRzIHRvIHRoZSBwbHVnaW4ncyBjb25maWd1cmVkIGNvbHVtbnMgKG9yIGFsbCBpbmRleGVkIGNvbHVtbnMpLlwiLFxuICAgICksXG4gIGZpbHRlcjogelxuICAgIC5yZWNvcmQoXG4gICAgICB6LnN0cmluZygpLFxuICAgICAgei51bmlvbihbei5zdHJpbmcoKSwgei5udW1iZXIoKSwgei5ib29sZWFuKCksIHouYXJyYXkoei51bmlvbihbei5zdHJpbmcoKSwgei5udW1iZXIoKV0pKV0pLFxuICAgIClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiQXBwS2l0IEFJIFNlYXJjaCBhdHRyaWJ1dGUgZmlsdGVycyBhcyB7IGNvbHVtbjogc2NhbGFyT3JBcnJheSB9LiBDb21iaW5lZCB3aXRoIEFORC5cIixcbiAgICApLFxuICBzY29yZVRocmVzaG9sZDogelxuICAgIC5udW1iZXIoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFwiRHJvcCBoaXRzIHdob3NlIHJlbGV2YW5jZSBzY29yZSBpcyBiZWxvdyB0aGlzIHZhbHVlLlwiKSxcbn0pO1xuXG4vKiogQSB2YWxpZGF0ZWQgc2VhcmNoIHJlcXVlc3QgKHtAbGluayBzZWFyY2hSZXF1ZXN0U2NoZW1hfSkuICovXG5leHBvcnQgdHlwZSBTZWFyY2hSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2Ygc2VhcmNoUmVxdWVzdFNjaGVtYT47XG5cbi8qKiBTY2hlbWEgZm9yIGEgc2luZ2xlIHNlYXJjaCBoaXQuICovXG5leHBvcnQgY29uc3Qgc2VhcmNoSGl0U2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBkb2N1bWVudCdzIHByaW1hcnkta2V5IHZhbHVlLlwiKSxcbiAgc2NvcmU6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJSZWxldmFuY2Ugc2NvcmU7IGhpZ2hlciBpcyBtb3JlIHJlbGV2YW50LlwiKSxcbiAgZmllbGRzOiB6XG4gICAgLnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSlcbiAgICAuZGVzY3JpYmUoXCJUaGUgcmV0dXJuZWQgY29sdW1ucyBmb3IgdGhpcyBkb2N1bWVudCwga2V5ZWQgYnkgY29sdW1uIG5hbWUuXCIpLFxuICBpbmRleDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFwiV2hpY2ggaW5kZXggdGhlIGhpdCBjYW1lIGZyb20gKHNldCBvbiB1bml2ZXJzYWwvZmVkZXJhdGVkIHJlc3VsdHMpLlwiKSxcbn0pO1xuXG4vKiogQSBzaW5nbGUgc2VhcmNoIGhpdCAoe0BsaW5rIHNlYXJjaEhpdFNjaGVtYX0pLiAqL1xuZXhwb3J0IHR5cGUgU2VhcmNoSGl0ID0gei5pbmZlcjx0eXBlb2Ygc2VhcmNoSGl0U2NoZW1hPjtcblxuLyoqIFNjaGVtYSBmb3IgdGhlIHJlc3VsdCBvZiBhIHNlYXJjaC4gKi9cbmV4cG9ydCBjb25zdCBzZWFyY2hSZXN1bHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHF1ZXJ5OiB6LnN0cmluZygpLmRlc2NyaWJlKFwiRWNobyBvZiB0aGUgcXVlcnkgdGhhdCB3YXMgc2VhcmNoZWQuXCIpLFxuICBoaXRzOiB6LmFycmF5KHNlYXJjaEhpdFNjaGVtYSkuZGVzY3JpYmUoXCJNYXRjaGluZyBkb2N1bWVudHMsIG1vc3QgcmVsZXZhbnQgZmlyc3QuXCIpLFxuICBpbmRleDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIGluZGV4IHNlYXJjaGVkIChvbWl0dGVkIGZvciBhIHVuaXZlcnNhbCBzZWFyY2gpLlwiKSxcbiAgY291bnQ6IHoubnVtYmVyKCkuaW50KCkuZGVzY3JpYmUoXCJOdW1iZXIgb2YgaGl0cyByZXR1cm5lZC5cIiksXG59KTtcblxuLyoqIFRoZSBvdXRjb21lIG9mIGEgc2VhcmNoICh7QGxpbmsgc2VhcmNoUmVzdWx0U2NoZW1hfSkuICovXG5leHBvcnQgdHlwZSBTZWFyY2hSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBzZWFyY2hSZXN1bHRTY2hlbWE+O1xuXG4vKiogU2NoZW1hIGZvciBhIHVuaXZlcnNhbCAoZmVkZXJhdGVkKSBzZWFyY2ggYWNyb3NzIHNldmVyYWwgaW5kZXhlcyBhdCBvbmNlLiAqL1xuZXhwb3J0IGNvbnN0IHVuaXZlcnNhbFNlYXJjaFJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHF1ZXJ5OiB6LnN0cmluZygpLmRlc2NyaWJlKFwiV2hhdCB0byBzZWFyY2ggZm9yIGFjcm9zcyBldmVyeSBjb25maWd1cmVkIGluZGV4LlwiKSxcbiAgaW5kZXhlczogelxuICAgIC5hcnJheSh6LnN0cmluZygpKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFwiV2hpY2ggaW5kZXhlcyB0byBzZWFyY2guIERlZmF1bHRzIHRvIGV2ZXJ5IGluZGV4IHRoZSBwbHVnaW4ga25vd3MgYWJvdXQuXCIpLFxuICBsaW1pdDogelxuICAgIC5udW1iZXIoKVxuICAgIC5pbnQoKVxuICAgIC5wb3NpdGl2ZSgpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJNYXhpbXVtIGhpdHMgUEVSIGluZGV4IGJlZm9yZSByZXN1bHRzIGFyZSBtZXJnZWQgYW5kIHJlLXJhbmtlZC5cIiksXG4gIG1vZGU6IHNlYXJjaE1vZGVTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuXG4vKiogQSB2YWxpZGF0ZWQgdW5pdmVyc2FsLXNlYXJjaCByZXF1ZXN0ICh7QGxpbmsgdW5pdmVyc2FsU2VhcmNoUmVxdWVzdFNjaGVtYX0pLiAqL1xuZXhwb3J0IHR5cGUgVW5pdmVyc2FsU2VhcmNoUmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIHVuaXZlcnNhbFNlYXJjaFJlcXVlc3RTY2hlbWE+O1xuXG4vKiogU2NoZW1hIGZvciBhIGRvY3VtZW50IHdyaXR0ZW4gdG8gYSBkaXJlY3QtYWNjZXNzIGluZGV4LiAqL1xuZXhwb3J0IGNvbnN0IHNlYXJjaERvY3VtZW50U2NoZW1hID0gelxuICAucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKVxuICAuZGVzY3JpYmUoXCJBIGRvY3VtZW50IGFzIHsgY29sdW1uOiB2YWx1ZSB9LiBNdXN0IGluY2x1ZGUgdGhlIGluZGV4IHByaW1hcnkta2V5IGNvbHVtbi5cIik7XG5cbi8qKiBBIGRvY3VtZW50IHdyaXR0ZW4gdG8gYW4gaW5kZXggKHtAbGluayBzZWFyY2hEb2N1bWVudFNjaGVtYX0pLiAqL1xuZXhwb3J0IHR5cGUgU2VhcmNoRG9jdW1lbnQgPSB6LmluZmVyPHR5cGVvZiBzZWFyY2hEb2N1bWVudFNjaGVtYT47XG5cbi8qKiBTY2hlbWEgZm9yIHRoZSByZXN1bHQgb2YgYWRkaW5nIC8gdXBkYXRpbmcgZG9jdW1lbnRzLiAqL1xuZXhwb3J0IGNvbnN0IHVwc2VydFJlc3VsdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaW5kZXg6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgaW5kZXggdGhlIGRvY3VtZW50cyB3ZXJlIHdyaXR0ZW4gdG8uXCIpLFxuICBjb3VudDogei5udW1iZXIoKS5pbnQoKS5kZXNjcmliZShcIk51bWJlciBvZiBkb2N1bWVudHMgYWNjZXB0ZWQuXCIpLFxufSk7XG5cbi8qKiBUaGUgb3V0Y29tZSBvZiBhbiBhZGQtZG9jdW1lbnRzIGNhbGwgKHtAbGluayB1cHNlcnRSZXN1bHRTY2hlbWF9KS4gKi9cbmV4cG9ydCB0eXBlIFVwc2VydFJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIHVwc2VydFJlc3VsdFNjaGVtYT47XG5cbi8qKlxuICogU2NoZW1hIGZvciB0aGUgYm9vdC10aW1lIGluZGV4IGNhdGFsb2d1ZSBhIFVJIHJlYWRzIHRvIHBvcHVsYXRlIGEgc2VhcmNoIGJveFxuICogKHRoZSBwYXlsb2FkIG9mIHRoZSBwbHVnaW4ncyBjbGllbnQgY29uZmlnIC8gYEdFVCAvYXBpL3NlYXJjaC9pbmRleGVzYCkuIEFuXG4gKiBlbnRyeSBuYW1lcyBhbiBpbmRleCwgYW4gb3B0aW9uYWwgc2hvcnQgYWxpYXMsIGFuZCB0aGUgY29sdW1ucyB3b3J0aFxuICogc2hvd2luZywgc28gYSBzZWFyY2ggYm94IG5lZWRzIG5vIHNlcnZlciByb3VuZC10cmlwIHRvIHJlbmRlci5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlYXJjaEluZGV4SW5mb1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKS5kZXNjcmliZShcIlVuaXR5IENhdGFsb2cgbmFtZSBvZiB0aGUgaW5kZXggKGNhdGFsb2cuc2NoZW1hLmluZGV4KS5cIiksXG4gIGFsaWFzOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJTaG9ydCBhbGlhcyB0aGUgcGx1Z2luIGFjY2VwdHMgaW4gcGxhY2Ugb2YgYG5hbWVgLlwiKSxcbiAgcHJpbWFyeUtleTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIGluZGV4J3MgcHJpbWFyeS1rZXkgY29sdW1uLCB3aGVuIGtub3duLlwiKSxcbiAgY29sdW1uczogelxuICAgIC5hcnJheSh6LnN0cmluZygpKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFwiQ29sdW1ucyByZXR1cm5lZCBieSBkZWZhdWx0LCBpbiBkaXNwbGF5IG9yZGVyLlwiKSxcbiAgaXNEZWZhdWx0OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVHJ1ZSBmb3IgdGhlIHBsdWdpbidzIGRlZmF1bHQgaW5kZXguXCIpLFxufSk7XG5cbi8qKiBPbmUgZW50cnkgaW4gdGhlIGluZGV4IGNhdGFsb2d1ZSAoe0BsaW5rIHNlYXJjaEluZGV4SW5mb1NjaGVtYX0pLiAqL1xuZXhwb3J0IHR5cGUgU2VhcmNoSW5kZXhJbmZvID0gei5pbmZlcjx0eXBlb2Ygc2VhcmNoSW5kZXhJbmZvU2NoZW1hPjtcblxuLyoqIFNjaGVtYSBmb3IgdGhlIHBsdWdpbidzIGNsaWVudCBjb25maWcgc3VyZmFjZWQgdG8gYSBVSS4gKi9cbmV4cG9ydCBjb25zdCBzZWFyY2hDbGllbnRDb25maWdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGluZGV4ZXM6IHouYXJyYXkoc2VhcmNoSW5kZXhJbmZvU2NoZW1hKS5kZXNjcmliZShcIkluZGV4ZXMgdGhlIHNlYXJjaCBVSSBtYXkgcXVlcnkuXCIpLFxuICBkZWZhdWx0SW5kZXg6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBpbmRleCBhIHNlYXJjaCBib3ggc2VsZWN0cyBieSBkZWZhdWx0LlwiKSxcbiAgcGFnZVNpemU6IHoubnVtYmVyKCkuaW50KCkuZGVzY3JpYmUoXCJEZWZhdWx0IG51bWJlciBvZiBoaXRzIGEgc2VhcmNoIHJldHVybnMuXCIpLFxuICBiYXNlUGF0aDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5zdGFydHNXaXRoKFwiL1wiKVxuICAgIC5kZWZhdWx0KFNFQVJDSF9ERUZBVUxUX0JBU0VfUEFUSClcbiAgICAuZGVzY3JpYmUoXCJCYXNlIHBhdGggdGhlIHNlYXJjaCByb3V0ZXMgYXJlIG1vdW50ZWQgdW5kZXIgKGUuZy4gL2FwaS9zZWFyY2gpLlwiKSxcbn0pO1xuXG4vKiogVGhlIHBsdWdpbidzIGNsaWVudCBjb25maWcgKHtAbGluayBzZWFyY2hDbGllbnRDb25maWdTY2hlbWF9KS4gKi9cbmV4cG9ydCB0eXBlIFNlYXJjaENsaWVudENvbmZpZyA9IHouaW5mZXI8dHlwZW9mIHNlYXJjaENsaWVudENvbmZpZ1NjaGVtYT47XG5cbi8qKlxuICogU2NoZW1hIGZvciBjcmVhdGluZyBhbiBpbmRleCAodGhlIGBjcmVhdGVfaW5kZXhgIHRvb2wgaW5wdXQgLyB0aGVcbiAqIGBQT1NUIC9hcGkvc2VhcmNoL2luZGV4YCBib2R5KS4gVHdvIHNoYXBlcywgYm90aCBpbmZlcnJpbmcgYWdncmVzc2l2ZWx5OlxuICogcGFzcyBgc291cmNlVGFibGVgIGZvciBhIERlbHRhIFN5bmMgaW5kZXggKERhdGFicmlja3MgY29tcHV0ZXMgZW1iZWRkaW5ncyBhbmRcbiAqIGtlZXBzIGl0IHN5bmNlZCkgb3IgYGVtYmVkZGluZ0RpbWVuc2lvbmAgZm9yIGEgZGlyZWN0LWFjY2VzcyBpbmRleCB5b3Ugd3JpdGVcbiAqIHZlY3RvcnMgdG8geW91cnNlbGYuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVJbmRleFJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJVbml0eSBDYXRhbG9nIG5hbWUgZm9yIHRoZSBuZXcgaW5kZXggKGNhdGFsb2cuc2NoZW1hLmluZGV4KS5cIiksXG4gIHNvdXJjZVRhYmxlOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIkRlbHRhIHRhYmxlIChjYXRhbG9nLnNjaGVtYS50YWJsZSkgdG8gYnVpbGQgYSBzeW5jZWQgaW5kZXggZnJvbS4gUHJvdmlkZSB0aGlzIE9SIGVtYmVkZGluZ0RpbWVuc2lvbi5cIixcbiAgICApLFxuICBwcmltYXJ5S2V5OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJQcmltYXJ5LWtleSBjb2x1bW4uIERlZmF1bHRzIHRvICdpZCcuXCIpLFxuICBlbWJlZGRpbmdTb3VyY2VDb2x1bW46IHpcbiAgICAuc3RyaW5nKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiVGV4dCBjb2x1bW4gZW1iZWRkaW5ncyBhcmUgY29tcHV0ZWQgZnJvbSAoRGVsdGEgU3luYykuIERlZmF1bHRzIHRvIHRoZSBmaXJzdCBvZiB0ZXh0L2NvbnRlbnQvYm9keS5cIixcbiAgICApLFxuICBlbWJlZGRpbmdNb2RlbDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJFbWJlZGRpbmcgbW9kZWwgZW5kcG9pbnQgKG5hbWUgb3IgbG9vc2UgbmFtZSkuIERlZmF1bHRzIHRvIHRoZSBhcHAncyBlbWJlZGRpbmcgbW9kZWwsIG9yIHRoZSBiZXN0IGVtYmVkZGluZyBlbmRwb2ludCBpbiB0aGUgd29ya3NwYWNlLlwiLFxuICAgICksXG4gIGVuZHBvaW50OiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIlZlY3RvciBTZWFyY2ggZW5kcG9pbnQgdG8gaG9zdCB0aGUgaW5kZXggb24uIERlZmF1bHRzIHRvIHRoZSBhcHAncyBjb25maWd1cmVkIGVuZHBvaW50LlwiLFxuICAgICksXG4gIGVtYmVkZGluZ0RpbWVuc2lvbjogelxuICAgIC5udW1iZXIoKVxuICAgIC5pbnQoKVxuICAgIC5wb3NpdGl2ZSgpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJGb3IgYSBkaXJlY3QtYWNjZXNzIGluZGV4IChubyBzb3VyY2UgdGFibGUpOiB0aGUgZW1iZWRkaW5nIHZlY3RvciBkaW1lbnNpb24uXCIpLFxuICBwaXBlbGluZVR5cGU6IHpcbiAgICAuZW51bShbXCJUUklHR0VSRURcIiwgXCJDT05USU5VT1VTXCJdKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJEZWx0YSBTeW5jIG1vZGU6ICdUUklHR0VSRUQnIChkZWZhdWx0KSBzeW5jcyBvbiBkZW1hbmQ7ICdDT05USU5VT1VTJyBrZWVwcyB0aGUgaW5kZXggZnJlc2guXCIsXG4gICAgKSxcbiAgY29sdW1uc1RvU3luYzogelxuICAgIC5hcnJheSh6LnN0cmluZygpKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFwiRXh0cmEgY29sdW1ucyB0byBzeW5jIGFsb25nc2lkZSB0aGUgZW1iZWRkaW5nIHNvdXJjZSBjb2x1bW4gKERlbHRhIFN5bmMpLlwiKSxcbn0pO1xuXG4vKiogQSB2YWxpZGF0ZWQgY3JlYXRlLWluZGV4IHJlcXVlc3QgKHtAbGluayBjcmVhdGVJbmRleFJlcXVlc3RTY2hlbWF9KS4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUluZGV4UmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIGNyZWF0ZUluZGV4UmVxdWVzdFNjaGVtYT47XG5cbi8qKiBTY2hlbWEgZm9yIHRoZSBgc3luY19pbmRleGAgdG9vbCBpbnB1dCAvIHRoZSBgUE9TVCAvYXBpL3NlYXJjaC9pbmRleC9zeW5jYCBib2R5LiAqL1xuZXhwb3J0IGNvbnN0IHN5bmNJbmRleFJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGluZGV4OiB6XG4gICAgLnN0cmluZygpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJUaGUgaW5kZXggdG8gc3luYyAobmFtZSBvciBjb25maWd1cmVkIGFsaWFzKS4gRGVmYXVsdHMgdG8gdGhlIGFwcCdzIGRlZmF1bHQgaW5kZXggd2hlbiBvbWl0dGVkLlwiLFxuICAgIClcbiAgICAub3B0aW9uYWwoKSxcbn0pO1xuXG4vKiogQSB2YWxpZGF0ZWQgc3luYy1pbmRleCByZXF1ZXN0ICh7QGxpbmsgc3luY0luZGV4UmVxdWVzdFNjaGVtYX0pLiAqL1xuZXhwb3J0IHR5cGUgU3luY0luZGV4UmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIHN5bmNJbmRleFJlcXVlc3RTY2hlbWE+O1xuXG4vKiogU2NoZW1hIGZvciBhIHJlc29sdmVkIGluZGV4IGRlZmluaXRpb24gKHRoZSBjcmVhdGUvZ2V0IHJlc3VsdCkuICovXG5leHBvcnQgY29uc3QgaW5kZXhJbmZvU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVW5pdHkgQ2F0YWxvZyBuYW1lIG9mIHRoZSBpbmRleC5cIiksXG4gIGVuZHBvaW50OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJUaGUgVmVjdG9yIFNlYXJjaCBlbmRwb2ludCBob3N0aW5nIHRoZSBpbmRleC5cIiksXG4gIHByaW1hcnlLZXk6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBpbmRleCdzIHByaW1hcnkta2V5IGNvbHVtbi5cIiksXG4gIGNvbHVtbnM6IHouYXJyYXkoei5zdHJpbmcoKSkuZGVzY3JpYmUoXCJDb2x1bW5zIGF2YWlsYWJsZSBvbiB0aGUgaW5kZXguXCIpLFxuICByZWFkeTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJUcnVlIHdoZW4gdGhlIGluZGV4IGhhcyBmaW5pc2hlZCBwcm92aXNpb25pbmcgYW5kIGNhbiBiZSBxdWVyaWVkLlwiKSxcbiAgcm93Q291bnQ6IHoubnVtYmVyKCkuaW50KCkub3B0aW9uYWwoKS5kZXNjcmliZShcIk51bWJlciBvZiBpbmRleGVkIHJvd3MsIHdoZW4ga25vd24uXCIpLFxuICBkaXJlY3RBY2Nlc3M6IHpcbiAgICAuYm9vbGVhbigpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJUcnVlIGZvciBhIERJUkVDVF9BQ0NFU1MgaW5kZXggdGhhdCBzdG9yZXMgY2FsbGVyLXN1cHBsaWVkIHZlY3RvcnMuXCIpLFxufSk7XG5cbi8qKiBBIHJlc29sdmVkIGluZGV4IGRlZmluaXRpb24gKHtAbGluayBpbmRleEluZm9TY2hlbWF9KS4gKi9cbmV4cG9ydCB0eXBlIEluZGV4SW5mbyA9IHouaW5mZXI8dHlwZW9mIGluZGV4SW5mb1NjaGVtYT47XG4iXX0=
|
package/package.json
CHANGED
package/src/search-schemas.ts
CHANGED
|
@@ -24,6 +24,26 @@
|
|
|
24
24
|
|
|
25
25
|
import { z } from "zod";
|
|
26
26
|
|
|
27
|
+
/** AppKit plugin name used to publish and read the search browser client config. */
|
|
28
|
+
export const SEARCH_PLUGIN_NAME = "search";
|
|
29
|
+
|
|
30
|
+
/** Default AppKit mount path for the search extension routes. */
|
|
31
|
+
export const SEARCH_DEFAULT_BASE_PATH = `/api/${SEARCH_PLUGIN_NAME}`;
|
|
32
|
+
|
|
33
|
+
/** Shared server route segments owned by the search plugin contract. */
|
|
34
|
+
export const SEARCH_ROUTES = {
|
|
35
|
+
universal: "/universal",
|
|
36
|
+
indexes: "/indexes",
|
|
37
|
+
documents: "/documents",
|
|
38
|
+
index: "/index",
|
|
39
|
+
indexSync: "/index/sync",
|
|
40
|
+
} as const;
|
|
41
|
+
|
|
42
|
+
/** Join a published search base path with one shared route segment. */
|
|
43
|
+
export function searchRoute(basePath: string, route: string): string {
|
|
44
|
+
return `${basePath.replace(/\/+$/, "")}/${route.replace(/^\/+/, "")}`;
|
|
45
|
+
}
|
|
46
|
+
|
|
27
47
|
/**
|
|
28
48
|
* How a query is matched. `hybrid` (the default) fuses vector similarity with
|
|
29
49
|
* BM25 keyword ranking - the right choice for most search boxes and for source
|
|
@@ -187,6 +207,8 @@ export const searchClientConfigSchema = z.object({
|
|
|
187
207
|
pageSize: z.number().int().describe("Default number of hits a search returns."),
|
|
188
208
|
basePath: z
|
|
189
209
|
.string()
|
|
210
|
+
.startsWith("/")
|
|
211
|
+
.default(SEARCH_DEFAULT_BASE_PATH)
|
|
190
212
|
.describe("Base path the search routes are mounted under (e.g. /api/search)."),
|
|
191
213
|
});
|
|
192
214
|
|