@dbx-tools/appkit-web-search 0.6.223 → 0.6.224
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 +47 -26
- package/index.ts +2 -2
- package/lib/index.d.ts +2 -2
- package/lib/index.js +2 -2
- package/lib/src/fetch.d.ts +2 -2
- package/lib/src/fetch.js +6 -4
- package/lib/src/html-text.d.ts +4 -8
- package/lib/src/html-text.js +27 -36
- package/lib/src/plugin.d.ts +24 -27
- package/lib/src/plugin.js +30 -35
- package/lib/src/runtime.d.ts +29 -28
- package/lib/src/runtime.js +38 -40
- package/lib/src/scrape.d.ts +5 -3
- package/lib/src/scrape.js +17 -22
- package/lib/src/search.d.ts +2 -2
- package/lib/src/search.js +10 -7
- package/lib/src/tool.d.ts +11 -5
- package/lib/src/tool.js +22 -16
- package/package.json +10 -6
- package/src/fetch.ts +5 -3
- package/src/html-text.ts +28 -37
- package/src/plugin.ts +32 -39
- package/src/runtime.ts +61 -39
- package/src/scrape.ts +16 -20
- package/src/search.ts +14 -5
- package/src/tool.ts +28 -16
package/lib/src/plugin.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AppKit plugin (registered name: `web-search`) that owns the resolved
|
|
3
3
|
* web-search runtime - the URL policy, result / length caps, timeout, and
|
|
4
|
-
* default approval gate
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* AppKit's cache / retry / timeout / telemetry chain.
|
|
4
|
+
* default approval gate its tools read. Registering it resolves and logs the
|
|
5
|
+
* effective config (which URL policy is in force, the caps) so a
|
|
6
|
+
* misconfiguration is visible in the boot logs rather than on the first
|
|
7
|
+
* search. The plugin's `execute()` is captured by its own runtime so every
|
|
8
|
+
* outbound call picks up AppKit's cache / retry / timeout / telemetry chain.
|
|
10
9
|
*
|
|
11
10
|
* The plugin also implements AppKit's `ToolProvider`, so an AppKit agent gets
|
|
12
|
-
* `web_search` / `web_fetch` without going through Mastra
|
|
13
|
-
*
|
|
11
|
+
* `web_search` / `web_fetch` without going through Mastra. App-integrated
|
|
12
|
+
* Mastra agents consume this provider through `plugins["web-search"].toolkit()`;
|
|
13
|
+
* standalone factories in `tool.ts` use their own explicit runtime or config.
|
|
14
14
|
*
|
|
15
15
|
* @module
|
|
16
16
|
*/
|
|
@@ -19,7 +19,7 @@ import { defineTool, executeFromRegistry, toolsFromRegistry, } from "@databricks
|
|
|
19
19
|
import { log, string } from "@dbx-tools/shared-core";
|
|
20
20
|
import { MODEL_ENV, SERVING_ENDPOINT_ENV, WEB_SEARCH_CONFIG_SCHEMA, } from "./config.js";
|
|
21
21
|
import { runWebFetch } from "./fetch.js";
|
|
22
|
-
import {
|
|
22
|
+
import { createWebSearchRuntime } from "./runtime.js";
|
|
23
23
|
import { webFetchRequestSchema, webSearchRequestSchema, WEB_FETCH_TOOL_DESCRIPTION, WEB_SEARCH_TOOL_DESCRIPTION, } from "./schema.js";
|
|
24
24
|
import { resolveWebSearchContext, runWebSearch } from "./search.js";
|
|
25
25
|
const logger = log.logger("web-search");
|
|
@@ -84,6 +84,8 @@ export class WebSearchPlugin extends Plugin {
|
|
|
84
84
|
},
|
|
85
85
|
config: { schema: WEB_SEARCH_CONFIG_SCHEMA },
|
|
86
86
|
};
|
|
87
|
+
/** Runtime owned exclusively by this plugin instance. */
|
|
88
|
+
runtime = createWebSearchRuntime(this.config, (fn, settings) => this.execute(fn, settings));
|
|
87
89
|
/**
|
|
88
90
|
* Promote the serving endpoint to a required resource once a deployment
|
|
89
91
|
* pins one, through plugin config or either environment name. Left optional
|
|
@@ -127,13 +129,12 @@ export class WebSearchPlugin extends Plugin {
|
|
|
127
129
|
}),
|
|
128
130
|
};
|
|
129
131
|
/**
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
132
|
+
* Log the effective policy so an active allow-list and caps are obvious at
|
|
133
|
+
* boot. Runtime construction already resolved config and captured this
|
|
134
|
+
* plugin's interceptor chain.
|
|
133
135
|
*/
|
|
134
136
|
async setup() {
|
|
135
|
-
const { config } =
|
|
136
|
-
setWebSearchExecutor((fn, settings) => this.execute(fn, settings));
|
|
137
|
+
const { config } = this.runtime;
|
|
137
138
|
logger.info("ready", {
|
|
138
139
|
model: config.model ?? `fallbacks:[${config.modelFallbacks.join(", ")}]`,
|
|
139
140
|
modelSource: config.modelSource,
|
|
@@ -146,23 +147,15 @@ export class WebSearchPlugin extends Plugin {
|
|
|
146
147
|
});
|
|
147
148
|
}
|
|
148
149
|
/**
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
* idempotent: there is no connection to drain, only the memo to clear.
|
|
150
|
+
* No runtime resources require draining. The instance-owned config and
|
|
151
|
+
* executor become unreachable with this plugin.
|
|
152
152
|
*/
|
|
153
|
-
|
|
154
|
-
|
|
153
|
+
shutdown() {
|
|
154
|
+
return;
|
|
155
155
|
}
|
|
156
|
-
/**
|
|
157
|
-
* Abort in-flight work. AppKit's graceful shutdown only invokes this hook -
|
|
158
|
-
* it never calls {@link shutdown} - so the runtime memo is dropped from here
|
|
159
|
-
* to keep a restarted app from calling through a torn-down `execute()`. The
|
|
160
|
-
* teardown is synchronous and idempotent, so the un-awaited call costs
|
|
161
|
-
* nothing.
|
|
162
|
-
*/
|
|
156
|
+
/** Abort in-flight work owned by this plugin instance. */
|
|
163
157
|
abortActiveOperations() {
|
|
164
158
|
super.abortActiveOperations();
|
|
165
|
-
void this.shutdown();
|
|
166
159
|
}
|
|
167
160
|
/** AppKit `ToolProvider`: the tool definitions offered to an agent. */
|
|
168
161
|
getAgentTools() {
|
|
@@ -180,22 +173,22 @@ export class WebSearchPlugin extends Plugin {
|
|
|
180
173
|
return {
|
|
181
174
|
/**
|
|
182
175
|
* Run a web search directly (bypassing the agent tool). Resolves the
|
|
183
|
-
* OBO client from the active execution context and reads
|
|
184
|
-
* runtime config
|
|
176
|
+
* OBO client from the active execution context and reads this plugin's
|
|
177
|
+
* runtime config.
|
|
185
178
|
*/
|
|
186
179
|
search: (request, signal) => this.search(request, signal),
|
|
187
180
|
/**
|
|
188
181
|
* Fetch one URL directly (bypassing the agent tool). Enforces the
|
|
189
|
-
* configured URL policy.
|
|
182
|
+
* configured URL policy.
|
|
190
183
|
*/
|
|
191
184
|
fetch: (request, signal) => this.fetch(request, signal),
|
|
192
185
|
};
|
|
193
186
|
}
|
|
194
187
|
async search(request, signal) {
|
|
195
|
-
return runWebSearch(request,
|
|
188
|
+
return runWebSearch(request, this.runtime, await resolveWebSearchContext(), signal);
|
|
196
189
|
}
|
|
197
190
|
async fetch(request, signal) {
|
|
198
|
-
return runWebFetch(request,
|
|
191
|
+
return runWebFetch(request, this.runtime, signal);
|
|
199
192
|
}
|
|
200
193
|
}
|
|
201
194
|
/**
|
|
@@ -204,12 +197,14 @@ export class WebSearchPlugin extends Plugin {
|
|
|
204
197
|
* @example
|
|
205
198
|
* ```ts
|
|
206
199
|
* import { createApp, server } from "@databricks/appkit";
|
|
207
|
-
* import { plugin as webSearchPlugin
|
|
200
|
+
* import { plugin as webSearchPlugin } from "@dbx-tools/appkit-web-search";
|
|
208
201
|
* import { agents, plugin as mastraPlugin } from "@dbx-tools/appkit-mastra";
|
|
209
202
|
*
|
|
210
203
|
* const researcher = agents.createAgent({
|
|
211
204
|
* instructions: "Research questions with web_search, then read sources with web_fetch.",
|
|
212
|
-
* tools
|
|
205
|
+
* async tools(plugins) {
|
|
206
|
+
* return { ...(await plugins["web-search"].toolkit()) };
|
|
207
|
+
* },
|
|
213
208
|
* });
|
|
214
209
|
*
|
|
215
210
|
* await createApp({
|
|
@@ -222,4 +217,4 @@ export class WebSearchPlugin extends Plugin {
|
|
|
222
217
|
* ```
|
|
223
218
|
*/
|
|
224
219
|
export const webSearch = toPlugin(WebSearchPlugin);
|
|
225
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixRQUFRLEdBR1QsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsVUFBVSxFQUNWLG1CQUFtQixFQUNuQixpQkFBaUIsR0FJbEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFDTCxTQUFTLEVBQ1Qsb0JBQW9CLEVBQ3BCLHdCQUF3QixHQUV6QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoRyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QiwwQkFBMEIsRUFDMUIsMkJBQTJCLEdBQzVCLE1BQU0sYUFBYSxDQUFDO0FBT3JCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUV4Qzs7Ozs7O0dBTUc7QUFDSCxNQUFNLHlCQUF5QixHQUFHO0lBQ2hDLElBQUksRUFBRSxZQUFZLENBQUMsZ0JBQWdCO0lBQ25DLEtBQUssRUFBRSxxQkFBcUI7SUFDNUIsV0FBVyxFQUFFLHFCQUFxQjtJQUNsQyxXQUFXLEVBQ1QseUZBQXlGO1FBQ3pGLG9FQUFvRTtJQUN0RSxVQUFVLEVBQUUsV0FBVztJQUN2QixNQUFNLEVBQUU7UUFDTixJQUFJLEVBQUU7WUFDSixHQUFHLEVBQUUs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S0FBSyxFQUFFLENBQUMsT0FBd0IsRUFBRSxNQUFvQixFQUEyQixFQUFFLENBQ2pGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztTQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBeUIsRUFBRSxNQUFvQjtRQUNsRSxPQUFPLFlBQVksQ0FDakIsT0FBTyxFQUNQLG1CQUFtQixFQUFFLENBQUMsTUFBTSxFQUM1QixNQUFNLHVCQUF1QixFQUFFLEVBQy9CLE1BQU0sQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBd0IsRUFBRSxNQUFvQjtRQUNoRSxPQUFPLFdBQVcsQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEUsQ0FBQzs7QUFHSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcEtpdCBwbHVnaW4gKHJlZ2lzdGVyZWQgbmFtZTogYHdlYi1zZWFyY2hgKSB0aGF0IG93bnMgdGhlIHJlc29sdmVkXG4gKiB3ZWItc2VhcmNoIHJ1bnRpbWUgLSB0aGUgVVJMIHBvbGljeSwgcmVzdWx0IC8gbGVuZ3RoIGNhcHMsIHRpbWVvdXQsIGFuZFxuICogZGVmYXVsdCBhcHByb3ZhbCBnYXRlIHRoZSB7QGxpbmsgd2ViU2VhcmNoVG9vbH0gLyB7QGxpbmsgd2ViRmV0Y2hUb29sfVxuICogcmVhZC4gUmVnaXN0ZXJpbmcgaXQgcmVzb2x2ZXMgYW5kIGxvZ3MgdGhlIGVmZmVjdGl2ZSBjb25maWcgKHdoaWNoIFVSTFxuICogcG9saWN5IGlzIGluIGZvcmNlLCB0aGUgY2Fwcykgc28gYSBtaXNjb25maWd1cmF0aW9uIGlzIHZpc2libGUgaW4gdGhlIGJvb3RcbiAqIGxvZ3MgcmF0aGVyIHRoYW4gb24gdGhlIGZpcnN0IHNlYXJjaCwgYW5kIGluc3RhbGxzIHRoZSBwbHVnaW4nc1xuICogYGV4ZWN1dGUoKWAgYXMgdGhlIHJ1bnRpbWUncyBleGVjdXRvciBzbyBldmVyeSBvdXRib3VuZCBjYWxsIHBpY2tzIHVwXG4gKiBBcHBLaXQncyBjYWNoZSAvIHJldHJ5IC8gdGltZW91dCAvIHRlbGVtZXRyeSBjaGFpbi5cbiAqXG4gKiBUaGUgcGx1Z2luIGFsc28gaW1wbGVtZW50cyBBcHBLaXQncyBgVG9vbFByb3ZpZGVyYCwgc28gYW4gQXBwS2l0IGFnZW50IGdldHNcbiAqIGB3ZWJfc2VhcmNoYCAvIGB3ZWJfZmV0Y2hgIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCBNYXN0cmE7IHRoZSBNYXN0cmEgdG9vbHMgaW5cbiAqIGB0b29sLnRzYCBhcmUgdGhlIG90aGVyIGhhbGYgYW5kIHNoYXJlIHRoZSBzYW1lIHJ1bnRpbWUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7XG4gIFBsdWdpbixcbiAgUmVzb3VyY2VUeXBlLFxuICB0b1BsdWdpbixcbiAgdHlwZSBQbHVnaW5NYW5pZmVzdCxcbiAgdHlwZSBSZXNvdXJjZVJlcXVpcmVtZW50LFxufSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQge1xuICBkZWZpbmVUb29sLFxuICBleGVjdXRlRnJvbVJlZ2lzdHJ5LFxuICB0b29sc0Zyb21SZWdpc3RyeSxcbiAgdHlwZSBBZ2VudFRvb2xEZWZpbml0aW9uLFxuICB0eXBlIFRvb2xQcm92aWRlcixcbiAgdHlwZSBUb29sUmVnaXN0cnksXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXQvYmV0YVwiO1xuaW1wb3J0IHsgbG9nLCBzdHJpbmcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgTU9ERUxfRU5WLFxuICBTRVJWSU5HX0VORFBPSU5UX0VOVixcbiAgV0VCX1NFQVJDSF9DT05GSUdfU0NIRU1BLFxuICB0eXBlIFdlYlNlYXJjaFBsdWdpbkNvbmZpZyxcbn0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBydW5XZWJGZXRjaCB9IGZyb20gXCIuL2ZldGNoLnRzXCI7XG5pbXBvcnQgeyBnZXRXZWJTZWFyY2hSdW50aW1lLCByZXNldFdlYlNlYXJjaFJ1bnRpbWUsIHNldFdlYlNlYXJjaEV4ZWN1dG9yIH0gZnJvbSBcIi4vcnVudGltZS50c1wiO1xuaW1wb3J0IHtcbiAgd2ViRmV0Y2hSZXF1ZXN0U2NoZW1hLFxuICB3ZWJTZWFyY2hSZXF1ZXN0U2NoZW1hLFxuICBXRUJfRkVUQ0hfVE9PTF9ERVNDUklQVElPTixcbiAgV0VCX1NFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxufSBmcm9tIFwiLi9zY2hlbWEudHNcIjtcbmltcG9ydCB0eXBlIHtcbiAgV2ViRmV0Y2hSZXF1ZXN0LFxuICBXZWJGZXRjaFJlc3VsdCxcbiAgV2ViU2VhcmNoUmVxdWVzdCxcbiAgV2ViU2VhcmNoUmVzdWx0LFxufSBmcm9tIFwiLi9zY2hlbWEudHNcIjtcbmltcG9ydCB7IHJlc29sdmVXZWJTZWFyY2hDb250ZXh0LCBydW5XZWJTZWFyY2ggfSBmcm9tIFwiLi9zZWFyY2gudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIndlYi1zZWFyY2hcIik7XG5cbi8qKlxuICogVGhlIE1vZGVsIFNlcnZpbmcgZW5kcG9pbnQgdGhlIG5hdGl2ZSB3ZWItc2VhcmNoIHRvb2wgcnVucyBvbi4gRGVjbGFyZWRcbiAqIG9wdGlvbmFsIGJlY2F1c2UgdGhlIHBsdWdpbiByZXNvbHZlcyBhIHdlYi1zZWFyY2gtY2FwYWJsZSBlbmRwb2ludCBmcm9tIHRoZVxuICogbGl2ZSBjYXRhbG9ndWUgd2hlbiBub3RoaW5nIGlzIHBpbm5lZDsge0BsaW5rIFdlYlNlYXJjaFBsdWdpbi5nZXRSZXNvdXJjZVJlcXVpcmVtZW50c31cbiAqIHByb21vdGVzIGl0IHRvIHJlcXVpcmVkIG9uY2UgYSBkZXBsb3ltZW50IG5hbWVzIG9uZS4gYENBTl9RVUVSWWAgaXMgdGhlXG4gKiB3ZWFrZXN0IHBlcm1pc3Npb24gdGhhdCBjYW4gaW52b2tlIGFuIGVuZHBvaW50LlxuICovXG5jb25zdCBTRVJWSU5HX0VORFBPSU5UX1JFU09VUkNFID0ge1xuICB0eXBlOiBSZXNvdXJjZVR5cGUuU0VSVklOR19FTkRQT0lOVCxcbiAgYWxpYXM6IFwiV2ViIFNlYXJjaCBFbmRwb2ludFwiLFxuICByZXNvdXJjZUtleTogXCJ3ZWItc2VhcmNoLWVuZHBvaW50XCIsXG4gIGRlc2NyaXB0aW9uOlxuICAgIFwiTW9kZWwgU2VydmluZyBlbmRwb2ludCBydW5uaW5nIHRoZSBuYXRpdmUgd2ViLXNlYXJjaCB0b29sLiBPcHRpb25hbDogcmVzb2x2ZWQgZnJvbSB0aGUgXCIgK1xuICAgIFwid29ya3NwYWNlIGNhdGFsb2d1ZSAoR2VtaW5pLCB0aGVuIEdQVCkgd2hlbiBubyBlbmRwb2ludCBpcyBwaW5uZWQuXCIsXG4gIHBlcm1pc3Npb246IFwiQ0FOX1FVRVJZXCIsXG4gIGZpZWxkczoge1xuICAgIG5hbWU6IHtcbiAgICAgIGVudjogU0VSVklOR19FTkRQT0lOVF9FTlYsXG4gICAgICBkZXNjcmlwdGlvbjogYFNlcnZpbmcgZW5kcG9pbnQgbmFtZSBmb3Igd2ViIHNlYXJjaC4gJHtNT0RFTF9FTlZ9IG92ZXJyaWRlcyBpdC5gLFxuICAgICAgZGlzY292ZXJ5OiB7XG4gICAgICAgIHR5cGU6IFwiY2xpXCIsXG4gICAgICAgIGNsaUNvbW1hbmQ6IFwiZGF0YWJyaWNrcyBzZXJ2aW5nLWVuZHBvaW50cyBsaXN0IC0tcHJvZmlsZSA8UFJPRklMRT4gLS1vdXRwdXQganNvblwiLFxuICAgICAgICBzZWxlY3RGaWVsZDogXCIubmFtZVwiLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufSBzYXRpc2ZpZXMgT21pdDxSZXNvdXJjZVJlcXVpcmVtZW50LCBcInJlcXVpcmVkXCI+O1xuXG4vKipcbiAqIEFwcEtpdCBwbHVnaW4gdGhhdCByZXNvbHZlcyBhbmQgaG9sZHMgdGhlIHdlYi1zZWFyY2ggcnVudGltZSBjb25maWcgdXNlZFxuICogYnkgdGhlIGB3ZWJfc2VhcmNoYCAvIGB3ZWJfZmV0Y2hgIHRvb2xzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY3JlYXRlQXBwLCBzZXJ2ZXIgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyBwbHVnaW4gYXMgd2ViU2VhcmNoUGx1Z2luIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0LXdlYi1zZWFyY2hcIjtcbiAqXG4gKiBhd2FpdCBjcmVhdGVBcHAoe1xuICogICBwbHVnaW5zOiBbXG4gKiAgICAgc2VydmVyKCksXG4gKiAgICAgd2ViU2VhcmNoUGx1Z2luLndlYlNlYXJjaCh7XG4gKiAgICAgICBtb2RlbDogXCJnZW1pbmlcIixcbiAqICAgICAgIHVybFBvbGljeTogXCJhbGxvd2xpc3RcIixcbiAqICAgICAgIGFsbG93ZWRVcmxzOiBbXCIqLmRhdGFicmlja3MuY29tXCJdLFxuICogICAgIH0pLFxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFdlYlNlYXJjaFBsdWdpbiBleHRlbmRzIFBsdWdpbjxXZWJTZWFyY2hQbHVnaW5Db25maWc+IGltcGxlbWVudHMgVG9vbFByb3ZpZGVyIHtcbiAgc3RhdGljIG1hbmlmZXN0ID0ge1xuICAgIG5hbWU6IFwid2ViLXNlYXJjaFwiLFxuICAgIGRpc3BsYXlOYW1lOiBcIldlYiBTZWFyY2hcIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiU2VhcmNoZXMgdGhlIHdlYiB0aHJvdWdoIHRoZSBEYXRhYnJpY2tzIG5hdGl2ZSB3ZWItc2VhcmNoIHRvb2wgb24gaXRzIG93biBcIiArXG4gICAgICBcIndlYi1jYXBhYmxlIHNlcnZpbmcgZW5kcG9pbnQsIGFuZCBmZXRjaGVzIHBhZ2VzIHZpYSBnb3Qtc2NyYXBpbmcsIGJlaGluZCBhbiBcIiArXG4gICAgICBcIm9wdGlvbmFsIFVSTCBhbGxvdy1saXN0IGFuZCBwZXItdG9vbCBhcHByb3ZhbCBnYXRpbmcuXCIsXG4gICAgc3RhYmlsaXR5OiBcImJldGFcIixcbiAgICByZXNvdXJjZXM6IHtcbiAgICAgIHJlcXVpcmVkOiBbXSxcbiAgICAgIG9wdGlvbmFsOiBbU0VSVklOR19FTkRQT0lOVF9SRVNPVVJDRV0sXG4gICAgfSxcbiAgICBjb25maWc6IHsgc2NoZW1hOiBXRUJfU0VBUkNIX0NPTkZJR19TQ0hFTUEgfSxcbiAgfSBzYXRpc2ZpZXMgUGx1Z2luTWFuaWZlc3Q8XCJ3ZWItc2VhcmNoXCI+O1xuXG4gIC8qKlxuICAgKiBQcm9tb3RlIHRoZSBzZXJ2aW5nIGVuZHBvaW50IHRvIGEgcmVxdWlyZWQgcmVzb3VyY2Ugb25jZSBhIGRlcGxveW1lbnRcbiAgICogcGlucyBvbmUsIHRocm91Z2ggcGx1Z2luIGNvbmZpZyBvciBlaXRoZXIgZW52aXJvbm1lbnQgbmFtZS4gTGVmdCBvcHRpb25hbFxuICAgKiBvdGhlcndpc2UsIGJlY2F1c2UgdGhlIHBsdWdpbiBwaWNrcyBhIHdlYi1zZWFyY2gtY2FwYWJsZSBlbmRwb2ludCBvdXQgb2ZcbiAgICogdGhlIGxpdmUgY2F0YWxvZ3VlIG9uIGl0cyBvd24uXG4gICAqL1xuICBzdGF0aWMgZ2V0UmVzb3VyY2VSZXF1aXJlbWVudHMoY29uZmlnOiBXZWJTZWFyY2hQbHVnaW5Db25maWcpOiBSZXNvdXJjZVJlcXVpcmVtZW50W10ge1xuICAgIGNvbnN0IHBpbm5lZCA9XG4gICAgICBzdHJpbmcudHJpbVRvTnVsbChjb25maWcubW9kZWwpID8/XG4gICAgICBzdHJpbmcudHJpbVRvTnVsbChwcm9jZXNzLmVudltNT0RFTF9FTlZdKSA/P1xuICAgICAgc3RyaW5nLnRyaW1Ub051bGwocHJvY2Vzcy5lbnZbU0VSVklOR19FTkRQT0lOVF9FTlZdKTtcbiAgICByZXR1cm4gcGlubmVkID09PSBudWxsID8gW10gOiBbeyAuLi5TRVJWSU5HX0VORFBPSU5UX1JFU09VUkNFLCByZXF1aXJlZDogdHJ1ZSB9XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdG9vbHMgdGhpcyBwbHVnaW4gb2ZmZXJzIHRvIGFuIEFwcEtpdCBhZ2VudC4gQm90aCBhcmUgcmVhZHMgYW5kIGJvdGhcbiAgICogcnVuIHVuZGVyIHRoZSBjYWxsZXIncyBpZGVudGl0eS5cbiAgICpcbiAgICogTmVpdGhlciBpcyBgYXV0b0luaGVyaXRhYmxlYC4gYHdlYl9mZXRjaGAgcmVhY2hlcyBhIFVSTCB0aGUgbW9kZWwgY2hvc2UsXG4gICAqIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIGluc2lkZSB0aGUgd29ya3NwYWNlIG5ldHdvcmssIHNvIGl0IG11c3Qgb25seVxuICAgKiBhcHBlYXIgaW4gYW4gYWdlbnQgdGhhdCBhc2tlZCBmb3IgaXQgYW5kIGFjY2VwdGVkIHRoZSBVUkwgcG9saWN5IHRoYXRcbiAgICogY29tZXMgd2l0aCBpdC4gYHdlYl9zZWFyY2hgIGlzIHNhZmVyIGJ1dCBzdGlsbCBzcGVuZHMgc2VydmluZyB0b2tlbnMgb25cbiAgICogZXZlcnkgY2FsbCwgc28gaXQgaXMgb3B0LWluIGZvciBjb3N0IHJhdGhlciB0aGFuIGZvciBzYWZldHkuXG4gICAqXG4gICAqIGBleGVjdXRlYCByZS1wYXJzZXMgaXRzIGFyZ3VtZW50cyB3aXRoIHRoZSBsb2NhbCBzY2hlbWE6IEFwcEtpdCB2YWxpZGF0ZXNcbiAgICogYWdhaW5zdCB0aGUgc2FtZSBzY2hlbWEgZmlyc3QsIGJ1dCByZS1wYXJzaW5nIGlzIHdoYXQgZ2l2ZXMgdGhlIGJvZHkgdHlwZWRcbiAgICogYXJndW1lbnRzIGluc3RlYWQgb2YgYHVua25vd25gLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB0b29sczogVG9vbFJlZ2lzdHJ5ID0ge1xuICAgIHdlYl9zZWFyY2g6IGRlZmluZVRvb2woe1xuICAgICAgZGVzY3JpcHRpb246IFdFQl9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTixcbiAgICAgIHNjaGVtYTogd2ViU2VhcmNoUmVxdWVzdFNjaGVtYSxcbiAgICAgIGFubm90YXRpb25zOiB7IGVmZmVjdDogXCJyZWFkXCIsIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgfSxcbiAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICBleGVjdXRlOiBhc3luYyAoYXJncywgc2lnbmFsKSA9PiB0aGlzLnNlYXJjaCh3ZWJTZWFyY2hSZXF1ZXN0U2NoZW1hLnBhcnNlKGFyZ3MpLCBzaWduYWwpLFxuICAgIH0pLFxuICAgIHdlYl9mZXRjaDogZGVmaW5lVG9vbCh7XG4gICAgICBkZXNjcmlwdGlvbjogV0VCX0ZFVENIX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgICBzY2hlbWE6IHdlYkZldGNoUmVxdWVzdFNjaGVtYSxcbiAgICAgIGFubm90YXRpb25zOiB7IGVmZmVjdDogXCJyZWFkXCIsIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgfSxcbiAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICBleGVjdXRlOiBhc3luYyAoYXJncywgc2lnbmFsKSA9PiB0aGlzLmZldGNoKHdlYkZldGNoUmVxdWVzdFNjaGVtYS5wYXJzZShhcmdzKSwgc2lnbmFsKSxcbiAgICB9KSxcbiAgfTtcblxuICAvKipcbiAgICogUHJpbWUgdGhlIHNoYXJlZCBydW50aW1lIGZyb20gdGhpcyBwbHVnaW4ncyBjb25maWcgKG92ZXIgZW52KSwgcm91dGUgdGhlXG4gICAqIHRvb2xzJyBvdXRib3VuZCBjYWxscyB0aHJvdWdoIHRoaXMgcGx1Z2luJ3MgaW50ZXJjZXB0b3IgY2hhaW4sIGFuZCBsb2cgdGhlXG4gICAqIGVmZmVjdGl2ZSBwb2xpY3kgc28gYW4gYWN0aXZlIGFsbG93LWxpc3QgLyBjYXBzIGFyZSBvYnZpb3VzIGF0IGJvb3QuXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBzZXR1cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGNvbmZpZyB9ID0gZ2V0V2ViU2VhcmNoUnVudGltZSh0aGlzLmNvbmZpZyk7XG4gICAgc2V0V2ViU2VhcmNoRXhlY3V0b3IoKGZuLCBzZXR0aW5ncykgPT4gdGhpcy5leGVjdXRlKGZuLCBzZXR0aW5ncykpO1xuICAgIGxvZ2dlci5pbmZvKFwicmVhZHlcIiwge1xuICAgICAgbW9kZWw6IGNvbmZpZy5tb2RlbCA/PyBgZmFsbGJhY2tzOlske2NvbmZpZy5tb2RlbEZhbGxiYWNrcy5qb2luKFwiLCBcIil9XWAsXG4gICAgICBtb2RlbFNvdXJjZTogY29uZmlnLm1vZGVsU291cmNlLFxuICAgICAgdXJsUG9saWN5OiBjb25maWcudXJsUG9saWN5LFxuICAgICAgLi4uKGNvbmZpZy5hbGxvd0xpc3QucmVzdHJpY3RlZCA/IHsgYWxsb3dlZFVybHM6IGNvbmZpZy5hbGxvd0xpc3QucGF0dGVybnMgfSA6IHt9KSxcbiAgICAgIG1heENpdGF0aW9uczogY29uZmlnLm1heENpdGF0aW9ucyxcbiAgICAgIGZldGNoTWF4TGVuZ3RoOiBjb25maWcuZmV0Y2hNYXhMZW5ndGgsXG4gICAgICBhcHByb3ZhbDogY29uZmlnLmFwcHJvdmFsLm1vZGUsXG4gICAgICBzY3JhcGVGYWxsYmFjazogY29uZmlnLnNjcmFwZUZhbGxiYWNrLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERyb3AgdGhlIHNoYXJlZCBydW50aW1lIHNvIGEgcmVzdGFydGVkIGFwcCByZS1yZXNvbHZlcyBjb25maWcgYW5kIGRvZXMgbm90XG4gICAqIGtlZXAgY2FsbGluZyB0aHJvdWdoIGEgdG9ybi1kb3duIHBsdWdpbidzIGBleGVjdXRlKClgLiBCb3VuZGVkIGFuZFxuICAgKiBpZGVtcG90ZW50OiB0aGVyZSBpcyBubyBjb25uZWN0aW9uIHRvIGRyYWluLCBvbmx5IHRoZSBtZW1vIHRvIGNsZWFyLlxuICAgKi9cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmVzZXRXZWJTZWFyY2hSdW50aW1lKCk7XG4gIH1cblxuICAvKipcbiAgICogQWJvcnQgaW4tZmxpZ2h0IHdvcmsuIEFwcEtpdCdzIGdyYWNlZnVsIHNodXRkb3duIG9ubHkgaW52b2tlcyB0aGlzIGhvb2sgLVxuICAgKiBpdCBuZXZlciBjYWxscyB7QGxpbmsgc2h1dGRvd259IC0gc28gdGhlIHJ1bnRpbWUgbWVtbyBpcyBkcm9wcGVkIGZyb20gaGVyZVxuICAgKiB0byBrZWVwIGEgcmVzdGFydGVkIGFwcCBmcm9tIGNhbGxpbmcgdGhyb3VnaCBhIHRvcm4tZG93biBgZXhlY3V0ZSgpYC4gVGhlXG4gICAqIHRlYXJkb3duIGlzIHN5bmNocm9ub3VzIGFuZCBpZGVtcG90ZW50LCBzbyB0aGUgdW4tYXdhaXRlZCBjYWxsIGNvc3RzXG4gICAqIG5vdGhpbmcuXG4gICAqL1xuICBvdmVycmlkZSBhYm9ydEFjdGl2ZU9wZXJhdGlvbnMoKTogdm9pZCB7XG4gICAgc3VwZXIuYWJvcnRBY3RpdmVPcGVyYXRpb25zKCk7XG4gICAgdm9pZCB0aGlzLnNodXRkb3duKCk7XG4gIH1cblxuICAvKiogQXBwS2l0IGBUb29sUHJvdmlkZXJgOiB0aGUgdG9vbCBkZWZpbml0aW9ucyBvZmZlcmVkIHRvIGFuIGFnZW50LiAqL1xuICBnZXRBZ2VudFRvb2xzKCk6IEFnZW50VG9vbERlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIHRvb2xzRnJvbVJlZ2lzdHJ5KHRoaXMudG9vbHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcEtpdCBgVG9vbFByb3ZpZGVyYDogcnVuIG9uZSB0b29sIGNhbGwuIEFyZ3VtZW50cyBhcmUgdmFsaWRhdGVkIGFnYWluc3RcbiAgICogdGhlIHRvb2wncyBzY2hlbWEgZmlyc3QsIGFuZCBhIHZhbGlkYXRpb24gZmFpbHVyZSBjb21lcyBiYWNrIGFzIGFuXG4gICAqIExMTS1mcmllbmRseSBzdHJpbmcgc28gdGhlIG1vZGVsIGNhbiBjb3JyZWN0IGl0c2VsZiBvbiB0aGUgbmV4dCB0dXJuLlxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZUFnZW50VG9vbChuYW1lOiBzdHJpbmcsIGFyZ3M6IHVua25vd24sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIGV4ZWN1dGVGcm9tUmVnaXN0cnkodGhpcy50b29scywgbmFtZSwgYXJncywgc2lnbmFsKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGV4cG9ydHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8qKlxuICAgICAgICogUnVuIGEgd2ViIHNlYXJjaCBkaXJlY3RseSAoYnlwYXNzaW5nIHRoZSBhZ2VudCB0b29sKS4gUmVzb2x2ZXMgdGhlXG4gICAgICAgKiBPQk8gY2xpZW50IGZyb20gdGhlIGFjdGl2ZSBleGVjdXRpb24gY29udGV4dCBhbmQgcmVhZHMgdGhlIHNoYXJlZFxuICAgICAgICogcnVudGltZSBjb25maWcgcHJpbWVkIGF0IHNldHVwLlxuICAgICAgICovXG4gICAgICBzZWFyY2g6IChyZXF1ZXN0OiBXZWJTZWFyY2hSZXF1ZXN0LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8V2ViU2VhcmNoUmVzdWx0PiA9PlxuICAgICAgICB0aGlzLnNlYXJjaChyZXF1ZXN0LCBzaWduYWwpLFxuICAgICAgLyoqXG4gICAgICAgKiBGZXRjaCBvbmUgVVJMIGRpcmVjdGx5IChieXBhc3NpbmcgdGhlIGFnZW50IHRvb2wpLiBFbmZvcmNlcyB0aGVcbiAgICAgICAqIGNvbmZpZ3VyZWQgVVJMIHBvbGljeS4gUmVhZHMgdGhlIHNoYXJlZCBydW50aW1lIGNvbmZpZy5cbiAgICAgICAqL1xuICAgICAgZmV0Y2g6IChyZXF1ZXN0OiBXZWJGZXRjaFJlcXVlc3QsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxXZWJGZXRjaFJlc3VsdD4gPT5cbiAgICAgICAgdGhpcy5mZXRjaChyZXF1ZXN0LCBzaWduYWwpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlYXJjaChyZXF1ZXN0OiBXZWJTZWFyY2hSZXF1ZXN0LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8V2ViU2VhcmNoUmVzdWx0PiB7XG4gICAgcmV0dXJuIHJ1bldlYlNlYXJjaChcbiAgICAgIHJlcXVlc3QsXG4gICAgICBnZXRXZWJTZWFyY2hSdW50aW1lKCkuY29uZmlnLFxuICAgICAgYXdhaXQgcmVzb2x2ZVdlYlNlYXJjaENvbnRleHQoKSxcbiAgICAgIHNpZ25hbCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaChyZXF1ZXN0OiBXZWJGZXRjaFJlcXVlc3QsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxXZWJGZXRjaFJlc3VsdD4ge1xuICAgIHJldHVybiBydW5XZWJGZXRjaChyZXF1ZXN0LCBnZXRXZWJTZWFyY2hSdW50aW1lKCkuY29uZmlnLCBzaWduYWwpO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIHdlYi1zZWFyY2ggcnVudGltZSB3aXRoIEFwcEtpdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNyZWF0ZUFwcCwgc2VydmVyIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgcGx1Z2luIGFzIHdlYlNlYXJjaFBsdWdpbiwgdG9vbCBhcyB3ZWJUb29sIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0LXdlYi1zZWFyY2hcIjtcbiAqIGltcG9ydCB7IGFnZW50cywgcGx1Z2luIGFzIG1hc3RyYVBsdWdpbiB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFcIjtcbiAqXG4gKiBjb25zdCByZXNlYXJjaGVyID0gYWdlbnRzLmNyZWF0ZUFnZW50KHtcbiAqICAgaW5zdHJ1Y3Rpb25zOiBcIlJlc2VhcmNoIHF1ZXN0aW9ucyB3aXRoIHdlYl9zZWFyY2gsIHRoZW4gcmVhZCBzb3VyY2VzIHdpdGggd2ViX2ZldGNoLlwiLFxuICogICB0b29sczogKCkgPT4gKHsgd2ViX3NlYXJjaDogd2ViVG9vbC53ZWJTZWFyY2hUb29sKCksIHdlYl9mZXRjaDogd2ViVG9vbC53ZWJGZXRjaFRvb2woKSB9KSxcbiAqIH0pO1xuICpcbiAqIGF3YWl0IGNyZWF0ZUFwcCh7XG4gKiAgIHBsdWdpbnM6IFtcbiAqICAgICBzZXJ2ZXIoKSxcbiAqICAgICB3ZWJTZWFyY2hQbHVnaW4ud2ViU2VhcmNoKHsgbW9kZWw6IFwiZ2VtaW5pXCIgfSksXG4gKiAgICAgbWFzdHJhUGx1Z2luLm1hc3RyYSh7IGFnZW50czogcmVzZWFyY2hlciB9KSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCB3ZWJTZWFyY2ggPSB0b1BsdWdpbihXZWJTZWFyY2hQbHVnaW4pO1xuIl19
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixRQUFRLEdBR1QsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsVUFBVSxFQUNWLG1CQUFtQixFQUNuQixpQkFBaUIsR0FJbEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFDTCxTQUFTLEVBQ1Qsb0JBQW9CLEVBQ3BCLHdCQUF3QixHQUV6QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxzQkFBc0IsRUFBeUIsTUFBTSxjQUFjLENBQUM7QUFDN0UsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIsMEJBQTBCLEVBQzFCLDJCQUEyQixHQUM1QixNQUFNLGFBQWEsQ0FBQztBQU9yQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXBFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFeEM7Ozs7OztHQU1HO0FBQ0gsTUFBTSx5QkFBeUIsR0FBRztJQUNoQyxJQUFJLEVBQUUsWUFBWSxDQUFDLGdCQUFnQjtJQUNuQyxLQUFLLEVBQUUscUJBQXFCO0lBQzVCLFdBQVcsRUFBRSxxQkFBcUI7SUFDbEMsV0FBVyxFQUNULHlGQUF5RjtRQUN6RixvRUFBb0U7SUFDdEUsVUFBVSxFQUFFLFdBQVc7SUFDdkIsTUFBTSxFQUFFO1FBQ04sSUFBSSxFQUFFO1lBQ0osR0FBRyxFQUFFLG9CQUFvQjtZQUN6QixXQUFXLEVBQUUs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QyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztTQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBeUIsRUFBRSxNQUFvQjtRQUNsRSxPQUFPLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVPLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBd0IsRUFBRSxNQUFvQjtRQUNoRSxPQUFPLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDOztBQUdIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcHBLaXQgcGx1Z2luIChyZWdpc3RlcmVkIG5hbWU6IGB3ZWItc2VhcmNoYCkgdGhhdCBvd25zIHRoZSByZXNvbHZlZFxuICogd2ViLXNlYXJjaCBydW50aW1lIC0gdGhlIFVSTCBwb2xpY3ksIHJlc3VsdCAvIGxlbmd0aCBjYXBzLCB0aW1lb3V0LCBhbmRcbiAqIGRlZmF1bHQgYXBwcm92YWwgZ2F0ZSBpdHMgdG9vbHMgcmVhZC4gUmVnaXN0ZXJpbmcgaXQgcmVzb2x2ZXMgYW5kIGxvZ3MgdGhlXG4gKiBlZmZlY3RpdmUgY29uZmlnICh3aGljaCBVUkwgcG9saWN5IGlzIGluIGZvcmNlLCB0aGUgY2Fwcykgc28gYVxuICogbWlzY29uZmlndXJhdGlvbiBpcyB2aXNpYmxlIGluIHRoZSBib290IGxvZ3MgcmF0aGVyIHRoYW4gb24gdGhlIGZpcnN0XG4gKiBzZWFyY2guIFRoZSBwbHVnaW4ncyBgZXhlY3V0ZSgpYCBpcyBjYXB0dXJlZCBieSBpdHMgb3duIHJ1bnRpbWUgc28gZXZlcnlcbiAqIG91dGJvdW5kIGNhbGwgcGlja3MgdXAgQXBwS2l0J3MgY2FjaGUgLyByZXRyeSAvIHRpbWVvdXQgLyB0ZWxlbWV0cnkgY2hhaW4uXG4gKlxuICogVGhlIHBsdWdpbiBhbHNvIGltcGxlbWVudHMgQXBwS2l0J3MgYFRvb2xQcm92aWRlcmAsIHNvIGFuIEFwcEtpdCBhZ2VudCBnZXRzXG4gKiBgd2ViX3NlYXJjaGAgLyBgd2ViX2ZldGNoYCB3aXRob3V0IGdvaW5nIHRocm91Z2ggTWFzdHJhLiBBcHAtaW50ZWdyYXRlZFxuICogTWFzdHJhIGFnZW50cyBjb25zdW1lIHRoaXMgcHJvdmlkZXIgdGhyb3VnaCBgcGx1Z2luc1tcIndlYi1zZWFyY2hcIl0udG9vbGtpdCgpYDtcbiAqIHN0YW5kYWxvbmUgZmFjdG9yaWVzIGluIGB0b29sLnRzYCB1c2UgdGhlaXIgb3duIGV4cGxpY2l0IHJ1bnRpbWUgb3IgY29uZmlnLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBQbHVnaW4sXG4gIFJlc291cmNlVHlwZSxcbiAgdG9QbHVnaW4sXG4gIHR5cGUgUGx1Z2luTWFuaWZlc3QsXG4gIHR5cGUgUmVzb3VyY2VSZXF1aXJlbWVudCxcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHtcbiAgZGVmaW5lVG9vbCxcbiAgZXhlY3V0ZUZyb21SZWdpc3RyeSxcbiAgdG9vbHNGcm9tUmVnaXN0cnksXG4gIHR5cGUgQWdlbnRUb29sRGVmaW5pdGlvbixcbiAgdHlwZSBUb29sUHJvdmlkZXIsXG4gIHR5cGUgVG9vbFJlZ2lzdHJ5LFxufSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0L2JldGFcIjtcbmltcG9ydCB7IGxvZywgc3RyaW5nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIE1PREVMX0VOVixcbiAgU0VSVklOR19FTkRQT0lOVF9FTlYsXG4gIFdFQl9TRUFSQ0hfQ09ORklHX1NDSEVNQSxcbiAgdHlwZSBXZWJTZWFyY2hQbHVnaW5Db25maWcsXG59IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgcnVuV2ViRmV0Y2ggfSBmcm9tIFwiLi9mZXRjaC50c1wiO1xuaW1wb3J0IHsgY3JlYXRlV2ViU2VhcmNoUnVudGltZSwgdHlwZSBXZWJTZWFyY2hSdW50aW1lIH0gZnJvbSBcIi4vcnVudGltZS50c1wiO1xuaW1wb3J0IHtcbiAgd2ViRmV0Y2hSZXF1ZXN0U2NoZW1hLFxuICB3ZWJTZWFyY2hSZXF1ZXN0U2NoZW1hLFxuICBXRUJfRkVUQ0hfVE9PTF9ERVNDUklQVElPTixcbiAgV0VCX1NFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxufSBmcm9tIFwiLi9zY2hlbWEudHNcIjtcbmltcG9ydCB0eXBlIHtcbiAgV2ViRmV0Y2hSZXF1ZXN0LFxuICBXZWJGZXRjaFJlc3VsdCxcbiAgV2ViU2VhcmNoUmVxdWVzdCxcbiAgV2ViU2VhcmNoUmVzdWx0LFxufSBmcm9tIFwiLi9zY2hlbWEudHNcIjtcbmltcG9ydCB7IHJlc29sdmVXZWJTZWFyY2hDb250ZXh0LCBydW5XZWJTZWFyY2ggfSBmcm9tIFwiLi9zZWFyY2gudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIndlYi1zZWFyY2hcIik7XG5cbi8qKlxuICogVGhlIE1vZGVsIFNlcnZpbmcgZW5kcG9pbnQgdGhlIG5hdGl2ZSB3ZWItc2VhcmNoIHRvb2wgcnVucyBvbi4gRGVjbGFyZWRcbiAqIG9wdGlvbmFsIGJlY2F1c2UgdGhlIHBsdWdpbiByZXNvbHZlcyBhIHdlYi1zZWFyY2gtY2FwYWJsZSBlbmRwb2ludCBmcm9tIHRoZVxuICogbGl2ZSBjYXRhbG9ndWUgd2hlbiBub3RoaW5nIGlzIHBpbm5lZDsge0BsaW5rIFdlYlNlYXJjaFBsdWdpbi5nZXRSZXNvdXJjZVJlcXVpcmVtZW50c31cbiAqIHByb21vdGVzIGl0IHRvIHJlcXVpcmVkIG9uY2UgYSBkZXBsb3ltZW50IG5hbWVzIG9uZS4gYENBTl9RVUVSWWAgaXMgdGhlXG4gKiB3ZWFrZXN0IHBlcm1pc3Npb24gdGhhdCBjYW4gaW52b2tlIGFuIGVuZHBvaW50LlxuICovXG5jb25zdCBTRVJWSU5HX0VORFBPSU5UX1JFU09VUkNFID0ge1xuICB0eXBlOiBSZXNvdXJjZVR5cGUuU0VSVklOR19FTkRQT0lOVCxcbiAgYWxpYXM6IFwiV2ViIFNlYXJjaCBFbmRwb2ludFwiLFxuICByZXNvdXJjZUtleTogXCJ3ZWItc2VhcmNoLWVuZHBvaW50XCIsXG4gIGRlc2NyaXB0aW9uOlxuICAgIFwiTW9kZWwgU2VydmluZyBlbmRwb2ludCBydW5uaW5nIHRoZSBuYXRpdmUgd2ViLXNlYXJjaCB0b29sLiBPcHRpb25hbDogcmVzb2x2ZWQgZnJvbSB0aGUgXCIgK1xuICAgIFwid29ya3NwYWNlIGNhdGFsb2d1ZSAoR2VtaW5pLCB0aGVuIEdQVCkgd2hlbiBubyBlbmRwb2ludCBpcyBwaW5uZWQuXCIsXG4gIHBlcm1pc3Npb246IFwiQ0FOX1FVRVJZXCIsXG4gIGZpZWxkczoge1xuICAgIG5hbWU6IHtcbiAgICAgIGVudjogU0VSVklOR19FTkRQT0lOVF9FTlYsXG4gICAgICBkZXNjcmlwdGlvbjogYFNlcnZpbmcgZW5kcG9pbnQgbmFtZSBmb3Igd2ViIHNlYXJjaC4gJHtNT0RFTF9FTlZ9IG92ZXJyaWRlcyBpdC5gLFxuICAgICAgZGlzY292ZXJ5OiB7XG4gICAgICAgIHR5cGU6IFwiY2xpXCIsXG4gICAgICAgIGNsaUNvbW1hbmQ6IFwiZGF0YWJyaWNrcyBzZXJ2aW5nLWVuZHBvaW50cyBsaXN0IC0tcHJvZmlsZSA8UFJPRklMRT4gLS1vdXRwdXQganNvblwiLFxuICAgICAgICBzZWxlY3RGaWVsZDogXCIubmFtZVwiLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufSBzYXRpc2ZpZXMgT21pdDxSZXNvdXJjZVJlcXVpcmVtZW50LCBcInJlcXVpcmVkXCI+O1xuXG4vKipcbiAqIEFwcEtpdCBwbHVnaW4gdGhhdCByZXNvbHZlcyBhbmQgaG9sZHMgdGhlIHdlYi1zZWFyY2ggcnVudGltZSBjb25maWcgdXNlZFxuICogYnkgdGhlIGB3ZWJfc2VhcmNoYCAvIGB3ZWJfZmV0Y2hgIHRvb2xzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY3JlYXRlQXBwLCBzZXJ2ZXIgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyBwbHVnaW4gYXMgd2ViU2VhcmNoUGx1Z2luIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0LXdlYi1zZWFyY2hcIjtcbiAqXG4gKiBhd2FpdCBjcmVhdGVBcHAoe1xuICogICBwbHVnaW5zOiBbXG4gKiAgICAgc2VydmVyKCksXG4gKiAgICAgd2ViU2VhcmNoUGx1Z2luLndlYlNlYXJjaCh7XG4gKiAgICAgICBtb2RlbDogXCJnZW1pbmlcIixcbiAqICAgICAgIHVybFBvbGljeTogXCJhbGxvd2xpc3RcIixcbiAqICAgICAgIGFsbG93ZWRVcmxzOiBbXCIqLmRhdGFicmlja3MuY29tXCJdLFxuICogICAgIH0pLFxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFdlYlNlYXJjaFBsdWdpbiBleHRlbmRzIFBsdWdpbjxXZWJTZWFyY2hQbHVnaW5Db25maWc+IGltcGxlbWVudHMgVG9vbFByb3ZpZGVyIHtcbiAgc3RhdGljIG1hbmlmZXN0ID0ge1xuICAgIG5hbWU6IFwid2ViLXNlYXJjaFwiLFxuICAgIGRpc3BsYXlOYW1lOiBcIldlYiBTZWFyY2hcIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiU2VhcmNoZXMgdGhlIHdlYiB0aHJvdWdoIHRoZSBEYXRhYnJpY2tzIG5hdGl2ZSB3ZWItc2VhcmNoIHRvb2wgb24gaXRzIG93biBcIiArXG4gICAgICBcIndlYi1jYXBhYmxlIHNlcnZpbmcgZW5kcG9pbnQsIGFuZCBmZXRjaGVzIHBhZ2VzIHZpYSBnb3Qtc2NyYXBpbmcsIGJlaGluZCBhbiBcIiArXG4gICAgICBcIm9wdGlvbmFsIFVSTCBhbGxvdy1saXN0IGFuZCBwZXItdG9vbCBhcHByb3ZhbCBnYXRpbmcuXCIsXG4gICAgc3RhYmlsaXR5OiBcImJldGFcIixcbiAgICByZXNvdXJjZXM6IHtcbiAgICAgIHJlcXVpcmVkOiBbXSxcbiAgICAgIG9wdGlvbmFsOiBbU0VSVklOR19FTkRQT0lOVF9SRVNPVVJDRV0sXG4gICAgfSxcbiAgICBjb25maWc6IHsgc2NoZW1hOiBXRUJfU0VBUkNIX0NPTkZJR19TQ0hFTUEgfSxcbiAgfSBzYXRpc2ZpZXMgUGx1Z2luTWFuaWZlc3Q8XCJ3ZWItc2VhcmNoXCI+O1xuXG4gIC8qKiBSdW50aW1lIG93bmVkIGV4Y2x1c2l2ZWx5IGJ5IHRoaXMgcGx1Z2luIGluc3RhbmNlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJ1bnRpbWU6IFdlYlNlYXJjaFJ1bnRpbWUgPSBjcmVhdGVXZWJTZWFyY2hSdW50aW1lKHRoaXMuY29uZmlnLCAoZm4sIHNldHRpbmdzKSA9PlxuICAgIHRoaXMuZXhlY3V0ZShmbiwgc2V0dGluZ3MpLFxuICApO1xuXG4gIC8qKlxuICAgKiBQcm9tb3RlIHRoZSBzZXJ2aW5nIGVuZHBvaW50IHRvIGEgcmVxdWlyZWQgcmVzb3VyY2Ugb25jZSBhIGRlcGxveW1lbnRcbiAgICogcGlucyBvbmUsIHRocm91Z2ggcGx1Z2luIGNvbmZpZyBvciBlaXRoZXIgZW52aXJvbm1lbnQgbmFtZS4gTGVmdCBvcHRpb25hbFxuICAgKiBvdGhlcndpc2UsIGJlY2F1c2UgdGhlIHBsdWdpbiBwaWNrcyBhIHdlYi1zZWFyY2gtY2FwYWJsZSBlbmRwb2ludCBvdXQgb2ZcbiAgICogdGhlIGxpdmUgY2F0YWxvZ3VlIG9uIGl0cyBvd24uXG4gICAqL1xuICBzdGF0aWMgZ2V0UmVzb3VyY2VSZXF1aXJlbWVudHMoY29uZmlnOiBXZWJTZWFyY2hQbHVnaW5Db25maWcpOiBSZXNvdXJjZVJlcXVpcmVtZW50W10ge1xuICAgIGNvbnN0IHBpbm5lZCA9XG4gICAgICBzdHJpbmcudHJpbVRvTnVsbChjb25maWcubW9kZWwpID8/XG4gICAgICBzdHJpbmcudHJpbVRvTnVsbChwcm9jZXNzLmVudltNT0RFTF9FTlZdKSA/P1xuICAgICAgc3RyaW5nLnRyaW1Ub051bGwocHJvY2Vzcy5lbnZbU0VSVklOR19FTkRQT0lOVF9FTlZdKTtcbiAgICByZXR1cm4gcGlubmVkID09PSBudWxsID8gW10gOiBbeyAuLi5TRVJWSU5HX0VORFBPSU5UX1JFU09VUkNFLCByZXF1aXJlZDogdHJ1ZSB9XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdG9vbHMgdGhpcyBwbHVnaW4gb2ZmZXJzIHRvIGFuIEFwcEtpdCBhZ2VudC4gQm90aCBhcmUgcmVhZHMgYW5kIGJvdGhcbiAgICogcnVuIHVuZGVyIHRoZSBjYWxsZXIncyBpZGVudGl0eS5cbiAgICpcbiAgICogTmVpdGhlciBpcyBgYXV0b0luaGVyaXRhYmxlYC4gYHdlYl9mZXRjaGAgcmVhY2hlcyBhIFVSTCB0aGUgbW9kZWwgY2hvc2UsXG4gICAqIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIGluc2lkZSB0aGUgd29ya3NwYWNlIG5ldHdvcmssIHNvIGl0IG11c3Qgb25seVxuICAgKiBhcHBlYXIgaW4gYW4gYWdlbnQgdGhhdCBhc2tlZCBmb3IgaXQgYW5kIGFjY2VwdGVkIHRoZSBVUkwgcG9saWN5IHRoYXRcbiAgICogY29tZXMgd2l0aCBpdC4gYHdlYl9zZWFyY2hgIGlzIHNhZmVyIGJ1dCBzdGlsbCBzcGVuZHMgc2VydmluZyB0b2tlbnMgb25cbiAgICogZXZlcnkgY2FsbCwgc28gaXQgaXMgb3B0LWluIGZvciBjb3N0IHJhdGhlciB0aGFuIGZvciBzYWZldHkuXG4gICAqXG4gICAqIGBleGVjdXRlYCByZS1wYXJzZXMgaXRzIGFyZ3VtZW50cyB3aXRoIHRoZSBsb2NhbCBzY2hlbWE6IEFwcEtpdCB2YWxpZGF0ZXNcbiAgICogYWdhaW5zdCB0aGUgc2FtZSBzY2hlbWEgZmlyc3QsIGJ1dCByZS1wYXJzaW5nIGlzIHdoYXQgZ2l2ZXMgdGhlIGJvZHkgdHlwZWRcbiAgICogYXJndW1lbnRzIGluc3RlYWQgb2YgYHVua25vd25gLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB0b29sczogVG9vbFJlZ2lzdHJ5ID0ge1xuICAgIHdlYl9zZWFyY2g6IGRlZmluZVRvb2woe1xuICAgICAgZGVzY3JpcHRpb246IFdFQl9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTixcbiAgICAgIHNjaGVtYTogd2ViU2VhcmNoUmVxdWVzdFNjaGVtYSxcbiAgICAgIGFubm90YXRpb25zOiB7IGVmZmVjdDogXCJyZWFkXCIsIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgfSxcbiAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICBleGVjdXRlOiBhc3luYyAoYXJncywgc2lnbmFsKSA9PiB0aGlzLnNlYXJjaCh3ZWJTZWFyY2hSZXF1ZXN0U2NoZW1hLnBhcnNlKGFyZ3MpLCBzaWduYWwpLFxuICAgIH0pLFxuICAgIHdlYl9mZXRjaDogZGVmaW5lVG9vbCh7XG4gICAgICBkZXNjcmlwdGlvbjogV0VCX0ZFVENIX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgICBzY2hlbWE6IHdlYkZldGNoUmVxdWVzdFNjaGVtYSxcbiAgICAgIGFubm90YXRpb25zOiB7IGVmZmVjdDogXCJyZWFkXCIsIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgfSxcbiAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICBleGVjdXRlOiBhc3luYyAoYXJncywgc2lnbmFsKSA9PiB0aGlzLmZldGNoKHdlYkZldGNoUmVxdWVzdFNjaGVtYS5wYXJzZShhcmdzKSwgc2lnbmFsKSxcbiAgICB9KSxcbiAgfTtcblxuICAvKipcbiAgICogTG9nIHRoZSBlZmZlY3RpdmUgcG9saWN5IHNvIGFuIGFjdGl2ZSBhbGxvdy1saXN0IGFuZCBjYXBzIGFyZSBvYnZpb3VzIGF0XG4gICAqIGJvb3QuIFJ1bnRpbWUgY29uc3RydWN0aW9uIGFscmVhZHkgcmVzb2x2ZWQgY29uZmlnIGFuZCBjYXB0dXJlZCB0aGlzXG4gICAqIHBsdWdpbidzIGludGVyY2VwdG9yIGNoYWluLlxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgc2V0dXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IHRoaXMucnVudGltZTtcbiAgICBsb2dnZXIuaW5mbyhcInJlYWR5XCIsIHtcbiAgICAgIG1vZGVsOiBjb25maWcubW9kZWwgPz8gYGZhbGxiYWNrczpbJHtjb25maWcubW9kZWxGYWxsYmFja3Muam9pbihcIiwgXCIpfV1gLFxuICAgICAgbW9kZWxTb3VyY2U6IGNvbmZpZy5tb2RlbFNvdXJjZSxcbiAgICAgIHVybFBvbGljeTogY29uZmlnLnVybFBvbGljeSxcbiAgICAgIC4uLihjb25maWcuYWxsb3dMaXN0LnJlc3RyaWN0ZWQgPyB7IGFsbG93ZWRVcmxzOiBjb25maWcuYWxsb3dMaXN0LnBhdHRlcm5zIH0gOiB7fSksXG4gICAgICBtYXhDaXRhdGlvbnM6IGNvbmZpZy5tYXhDaXRhdGlvbnMsXG4gICAgICBmZXRjaE1heExlbmd0aDogY29uZmlnLmZldGNoTWF4TGVuZ3RoLFxuICAgICAgYXBwcm92YWw6IGNvbmZpZy5hcHByb3ZhbC5tb2RlLFxuICAgICAgc2NyYXBlRmFsbGJhY2s6IGNvbmZpZy5zY3JhcGVGYWxsYmFjayxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBObyBydW50aW1lIHJlc291cmNlcyByZXF1aXJlIGRyYWluaW5nLiBUaGUgaW5zdGFuY2Utb3duZWQgY29uZmlnIGFuZFxuICAgKiBleGVjdXRvciBiZWNvbWUgdW5yZWFjaGFibGUgd2l0aCB0aGlzIHBsdWdpbi5cbiAgICovXG4gIHNodXRkb3duKCk6IHZvaWQge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKiBBYm9ydCBpbi1mbGlnaHQgd29yayBvd25lZCBieSB0aGlzIHBsdWdpbiBpbnN0YW5jZS4gKi9cbiAgb3ZlcnJpZGUgYWJvcnRBY3RpdmVPcGVyYXRpb25zKCk6IHZvaWQge1xuICAgIHN1cGVyLmFib3J0QWN0aXZlT3BlcmF0aW9ucygpO1xuICB9XG5cbiAgLyoqIEFwcEtpdCBgVG9vbFByb3ZpZGVyYDogdGhlIHRvb2wgZGVmaW5pdGlvbnMgb2ZmZXJlZCB0byBhbiBhZ2VudC4gKi9cbiAgZ2V0QWdlbnRUb29scygpOiBBZ2VudFRvb2xEZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0b29sc0Zyb21SZWdpc3RyeSh0aGlzLnRvb2xzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBLaXQgYFRvb2xQcm92aWRlcmA6IHJ1biBvbmUgdG9vbCBjYWxsLiBBcmd1bWVudHMgYXJlIHZhbGlkYXRlZCBhZ2FpbnN0XG4gICAqIHRoZSB0b29sJ3Mgc2NoZW1hIGZpcnN0LCBhbmQgYSB2YWxpZGF0aW9uIGZhaWx1cmUgY29tZXMgYmFjayBhcyBhblxuICAgKiBMTE0tZnJpZW5kbHkgc3RyaW5nIHNvIHRoZSBtb2RlbCBjYW4gY29ycmVjdCBpdHNlbGYgb24gdGhlIG5leHQgdHVybi5cbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVBZ2VudFRvb2wobmFtZTogc3RyaW5nLCBhcmdzOiB1bmtub3duLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIHJldHVybiBleGVjdXRlRnJvbVJlZ2lzdHJ5KHRoaXMudG9vbHMsIG5hbWUsIGFyZ3MsIHNpZ25hbCk7XG4gIH1cblxuICBvdmVycmlkZSBleHBvcnRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvKipcbiAgICAgICAqIFJ1biBhIHdlYiBzZWFyY2ggZGlyZWN0bHkgKGJ5cGFzc2luZyB0aGUgYWdlbnQgdG9vbCkuIFJlc29sdmVzIHRoZVxuICAgICAgICogT0JPIGNsaWVudCBmcm9tIHRoZSBhY3RpdmUgZXhlY3V0aW9uIGNvbnRleHQgYW5kIHJlYWRzIHRoaXMgcGx1Z2luJ3NcbiAgICAgICAqIHJ1bnRpbWUgY29uZmlnLlxuICAgICAgICovXG4gICAgICBzZWFyY2g6IChyZXF1ZXN0OiBXZWJTZWFyY2hSZXF1ZXN0LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8V2ViU2VhcmNoUmVzdWx0PiA9PlxuICAgICAgICB0aGlzLnNlYXJjaChyZXF1ZXN0LCBzaWduYWwpLFxuICAgICAgLyoqXG4gICAgICAgKiBGZXRjaCBvbmUgVVJMIGRpcmVjdGx5IChieXBhc3NpbmcgdGhlIGFnZW50IHRvb2wpLiBFbmZvcmNlcyB0aGVcbiAgICAgICAqIGNvbmZpZ3VyZWQgVVJMIHBvbGljeS5cbiAgICAgICAqL1xuICAgICAgZmV0Y2g6IChyZXF1ZXN0OiBXZWJGZXRjaFJlcXVlc3QsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxXZWJGZXRjaFJlc3VsdD4gPT5cbiAgICAgICAgdGhpcy5mZXRjaChyZXF1ZXN0LCBzaWduYWwpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlYXJjaChyZXF1ZXN0OiBXZWJTZWFyY2hSZXF1ZXN0LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8V2ViU2VhcmNoUmVzdWx0PiB7XG4gICAgcmV0dXJuIHJ1bldlYlNlYXJjaChyZXF1ZXN0LCB0aGlzLnJ1bnRpbWUsIGF3YWl0IHJlc29sdmVXZWJTZWFyY2hDb250ZXh0KCksIHNpZ25hbCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoKHJlcXVlc3Q6IFdlYkZldGNoUmVxdWVzdCwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFdlYkZldGNoUmVzdWx0PiB7XG4gICAgcmV0dXJuIHJ1bldlYkZldGNoKHJlcXVlc3QsIHRoaXMucnVudGltZSwgc2lnbmFsKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVyIHRoZSB3ZWItc2VhcmNoIHJ1bnRpbWUgd2l0aCBBcHBLaXQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjcmVhdGVBcHAsIHNlcnZlciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IHBsdWdpbiBhcyB3ZWJTZWFyY2hQbHVnaW4gfSBmcm9tIFwiQGRieC10b29scy9hcHBraXQtd2ViLXNlYXJjaFwiO1xuICogaW1wb3J0IHsgYWdlbnRzLCBwbHVnaW4gYXMgbWFzdHJhUGx1Z2luIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYVwiO1xuICpcbiAqIGNvbnN0IHJlc2VhcmNoZXIgPSBhZ2VudHMuY3JlYXRlQWdlbnQoe1xuICogICBpbnN0cnVjdGlvbnM6IFwiUmVzZWFyY2ggcXVlc3Rpb25zIHdpdGggd2ViX3NlYXJjaCwgdGhlbiByZWFkIHNvdXJjZXMgd2l0aCB3ZWJfZmV0Y2guXCIsXG4gKiAgIGFzeW5jIHRvb2xzKHBsdWdpbnMpIHtcbiAqICAgICByZXR1cm4geyAuLi4oYXdhaXQgcGx1Z2luc1tcIndlYi1zZWFyY2hcIl0udG9vbGtpdCgpKSB9O1xuICogICB9LFxuICogfSk7XG4gKlxuICogYXdhaXQgY3JlYXRlQXBwKHtcbiAqICAgcGx1Z2luczogW1xuICogICAgIHNlcnZlcigpLFxuICogICAgIHdlYlNlYXJjaFBsdWdpbi53ZWJTZWFyY2goeyBtb2RlbDogXCJnZW1pbmlcIiB9KSxcbiAqICAgICBtYXN0cmFQbHVnaW4ubWFzdHJhKHsgYWdlbnRzOiByZXNlYXJjaGVyIH0pLFxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHdlYlNlYXJjaCA9IHRvUGx1Z2luKFdlYlNlYXJjaFBsdWdpbik7XG4iXX0=
|
package/lib/src/runtime.d.ts
CHANGED
|
@@ -1,20 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* the plugin and the `web_search` / `web_fetch` tools, so both read one
|
|
4
|
-
* resolved allow-list / cap / timeout set. The first caller (normally the
|
|
5
|
-
* plugin at setup) primes it from the plugin's config; later callers (the
|
|
6
|
-
* tools' `execute`) reuse it.
|
|
2
|
+
* Web-search runtime construction and execution helpers.
|
|
7
3
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* get AppKit's cache / retry / timeout / telemetry chain. Without a
|
|
12
|
-
* registered plugin (a direct call from a script or a test) the calls still
|
|
13
|
-
* run, just without interceptors.
|
|
14
|
-
*
|
|
15
|
-
* Unlike the email runtime there is no connection to pool - the backend is
|
|
16
|
-
* stateless HTTP per call - so the runtime holds only the resolved config and
|
|
17
|
-
* that executor.
|
|
4
|
+
* Each plugin instance owns one runtime. Standalone tool factories create their
|
|
5
|
+
* own runtime, so separate apps and direct consumers cannot overwrite each
|
|
6
|
+
* other's policy or executor.
|
|
18
7
|
*
|
|
19
8
|
* @module
|
|
20
9
|
*/
|
|
@@ -27,29 +16,41 @@ import type { WebSearchExecutionSettings } from "./defaults.ts";
|
|
|
27
16
|
* `{ ok: false }`.
|
|
28
17
|
*/
|
|
29
18
|
export type WebSearchExecutor = <T>(fn: (signal?: AbortSignal) => Promise<T>, settings: WebSearchExecutionSettings) => Promise<ExecutionResult<T>>;
|
|
30
|
-
/** The
|
|
19
|
+
/** The resolved config plus the executor outbound calls run through. */
|
|
31
20
|
export interface WebSearchRuntime {
|
|
32
21
|
config: ResolvedWebSearchConfig;
|
|
33
22
|
execute: WebSearchExecutor;
|
|
34
23
|
}
|
|
24
|
+
/** Runtime-aware operation input, retaining resolved-config compatibility. */
|
|
25
|
+
export type WebSearchRuntimeInput = WebSearchRuntime | ResolvedWebSearchConfig;
|
|
26
|
+
/** Build an isolated runtime for one plugin instance or standalone tool set. */
|
|
27
|
+
export declare function createWebSearchRuntime(overrides?: WebSearchPluginConfig, execute?: WebSearchExecutor): WebSearchRuntime;
|
|
28
|
+
/** Build an isolated runtime from config that has already been resolved. */
|
|
29
|
+
export declare function createResolvedWebSearchRuntime(config: ResolvedWebSearchConfig, execute?: WebSearchExecutor): WebSearchRuntime;
|
|
30
|
+
/** Normalize an explicit runtime or legacy resolved config for one operation. */
|
|
31
|
+
export declare function toWebSearchRuntime(input: WebSearchRuntimeInput): WebSearchRuntime;
|
|
35
32
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* instance.
|
|
33
|
+
* Build an isolated standalone runtime.
|
|
34
|
+
*
|
|
35
|
+
* @deprecated Use {@link createWebSearchRuntime}. This compatibility helper
|
|
36
|
+
* returns a new runtime on every call and never reads or updates plugin state.
|
|
41
37
|
*/
|
|
42
38
|
export declare function getWebSearchRuntime(overrides?: WebSearchPluginConfig): WebSearchRuntime;
|
|
39
|
+
/** Install an executor on an explicit runtime. */
|
|
40
|
+
export declare function setWebSearchExecutor(runtime: WebSearchRuntime, execute: WebSearchExecutor): void;
|
|
41
|
+
/**
|
|
42
|
+
* @deprecated Process-global executor registration is no longer supported.
|
|
43
|
+
* Pass a runtime as the first argument or provide the executor to
|
|
44
|
+
* {@link createWebSearchRuntime}.
|
|
45
|
+
*/
|
|
46
|
+
export declare function setWebSearchExecutor(execute: WebSearchExecutor): never;
|
|
43
47
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* a re-registered plugin does not leave the tools bound to a dead instance.
|
|
48
|
+
* @deprecated Plugin runtimes are instance-owned and need no global reset.
|
|
49
|
+
* This compatibility helper is intentionally a no-op.
|
|
47
50
|
*/
|
|
48
|
-
export declare function setWebSearchExecutor(execute: WebSearchExecutor): void;
|
|
49
|
-
/** Drop the memoized runtime so the next {@link getWebSearchRuntime} rebuilds it. */
|
|
50
51
|
export declare function resetWebSearchRuntime(): void;
|
|
51
52
|
/**
|
|
52
|
-
* Run one idempotent read through the
|
|
53
|
+
* Run one idempotent read through the runtime executor and unwrap it.
|
|
53
54
|
*
|
|
54
55
|
* `execute()` never throws, so a failed call arrives as `{ ok: false }` with
|
|
55
56
|
* a status the interceptors already sanitized; it is logged here and re-raised
|
|
@@ -58,4 +59,4 @@ export declare function resetWebSearchRuntime(): void;
|
|
|
58
59
|
* run, a request teardown); it is merged with the signal the timeout
|
|
59
60
|
* interceptor supplies so either one unwinds the I/O.
|
|
60
61
|
*/
|
|
61
|
-
export declare function executeRead<T>(operation: string, settings: WebSearchExecutionSettings, fn: (signal?: AbortSignal) => Promise<T>, signal?: AbortSignal): Promise<T>;
|
|
62
|
+
export declare function executeRead<T>(runtime: WebSearchRuntime, operation: string, settings: WebSearchExecutionSettings, fn: (signal?: AbortSignal) => Promise<T>, signal?: AbortSignal): Promise<T>;
|
package/lib/src/runtime.js
CHANGED
|
@@ -1,20 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* the plugin and the `web_search` / `web_fetch` tools, so both read one
|
|
4
|
-
* resolved allow-list / cap / timeout set. The first caller (normally the
|
|
5
|
-
* plugin at setup) primes it from the plugin's config; later callers (the
|
|
6
|
-
* tools' `execute`) reuse it.
|
|
2
|
+
* Web-search runtime construction and execution helpers.
|
|
7
3
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* get AppKit's cache / retry / timeout / telemetry chain. Without a
|
|
12
|
-
* registered plugin (a direct call from a script or a test) the calls still
|
|
13
|
-
* run, just without interceptors.
|
|
14
|
-
*
|
|
15
|
-
* Unlike the email runtime there is no connection to pool - the backend is
|
|
16
|
-
* stateless HTTP per call - so the runtime holds only the resolved config and
|
|
17
|
-
* that executor.
|
|
4
|
+
* Each plugin instance owns one runtime. Standalone tool factories create their
|
|
5
|
+
* own runtime, so separate apps and direct consumers cannot overwrite each
|
|
6
|
+
* other's policy or executor.
|
|
18
7
|
*
|
|
19
8
|
* @module
|
|
20
9
|
*/
|
|
@@ -23,39 +12,49 @@ import { execution, log } from "@dbx-tools/shared-core";
|
|
|
23
12
|
import { resolveWebSearchConfig, } from "./config.js";
|
|
24
13
|
const logger = log.logger("web-search/runtime");
|
|
25
14
|
/**
|
|
26
|
-
* Executor used
|
|
27
|
-
*
|
|
28
|
-
*
|
|
15
|
+
* Executor used by standalone runtimes: run the call directly, mapping a throw
|
|
16
|
+
* onto the same {@link ExecutionResult} shape so call sites branch on `ok`
|
|
17
|
+
* either way.
|
|
29
18
|
*/
|
|
30
19
|
const directExecute = execution.directExecutor();
|
|
31
|
-
|
|
20
|
+
/** Build an isolated runtime for one plugin instance or standalone tool set. */
|
|
21
|
+
export function createWebSearchRuntime(overrides, execute = directExecute) {
|
|
22
|
+
return { config: resolveWebSearchConfig(overrides), execute };
|
|
23
|
+
}
|
|
24
|
+
/** Build an isolated runtime from config that has already been resolved. */
|
|
25
|
+
export function createResolvedWebSearchRuntime(config, execute = directExecute) {
|
|
26
|
+
return { config, execute };
|
|
27
|
+
}
|
|
28
|
+
/** Normalize an explicit runtime or legacy resolved config for one operation. */
|
|
29
|
+
export function toWebSearchRuntime(input) {
|
|
30
|
+
return "execute" in input ? input : createResolvedWebSearchRuntime(input);
|
|
31
|
+
}
|
|
32
32
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* instance.
|
|
33
|
+
* Build an isolated standalone runtime.
|
|
34
|
+
*
|
|
35
|
+
* @deprecated Use {@link createWebSearchRuntime}. This compatibility helper
|
|
36
|
+
* returns a new runtime on every call and never reads or updates plugin state.
|
|
38
37
|
*/
|
|
39
38
|
export function getWebSearchRuntime(overrides) {
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
return createWebSearchRuntime(overrides);
|
|
40
|
+
}
|
|
41
|
+
export function setWebSearchExecutor(runtimeOrExecute, execute) {
|
|
42
|
+
if (typeof runtimeOrExecute === "function") {
|
|
43
|
+
throw new TypeError("setWebSearchExecutor requires an explicit runtime; use createWebSearchRuntime(config, executor)");
|
|
42
44
|
}
|
|
43
|
-
|
|
45
|
+
if (!execute)
|
|
46
|
+
throw new TypeError("setWebSearchExecutor requires an executor");
|
|
47
|
+
runtimeOrExecute.execute = execute;
|
|
44
48
|
}
|
|
45
49
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* a re-registered plugin does not leave the tools bound to a dead instance.
|
|
50
|
+
* @deprecated Plugin runtimes are instance-owned and need no global reset.
|
|
51
|
+
* This compatibility helper is intentionally a no-op.
|
|
49
52
|
*/
|
|
50
|
-
export function setWebSearchExecutor(execute) {
|
|
51
|
-
getWebSearchRuntime().execute = execute;
|
|
52
|
-
}
|
|
53
|
-
/** Drop the memoized runtime so the next {@link getWebSearchRuntime} rebuilds it. */
|
|
54
53
|
export function resetWebSearchRuntime() {
|
|
55
|
-
|
|
54
|
+
return;
|
|
56
55
|
}
|
|
57
56
|
/**
|
|
58
|
-
* Run one idempotent read through the
|
|
57
|
+
* Run one idempotent read through the runtime executor and unwrap it.
|
|
59
58
|
*
|
|
60
59
|
* `execute()` never throws, so a failed call arrives as `{ ok: false }` with
|
|
61
60
|
* a status the interceptors already sanitized; it is logged here and re-raised
|
|
@@ -64,12 +63,11 @@ export function resetWebSearchRuntime() {
|
|
|
64
63
|
* run, a request teardown); it is merged with the signal the timeout
|
|
65
64
|
* interceptor supplies so either one unwinds the I/O.
|
|
66
65
|
*/
|
|
67
|
-
export async function executeRead(operation, settings, fn, signal) {
|
|
68
|
-
const { execute } = getWebSearchRuntime();
|
|
66
|
+
export async function executeRead(runtime, operation, settings, fn, signal) {
|
|
69
67
|
return execution.run({
|
|
70
68
|
operation,
|
|
71
69
|
settings,
|
|
72
|
-
execute,
|
|
70
|
+
execute: runtime.execute,
|
|
73
71
|
fn,
|
|
74
72
|
signal,
|
|
75
73
|
canceled: ExecutionError.canceled,
|
|
@@ -85,4 +83,4 @@ export async function executeRead(operation, settings, fn, signal) {
|
|
|
85
83
|
},
|
|
86
84
|
});
|
|
87
85
|
}
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFDTCxzQkFBc0IsR0FHdkIsTUFBTSxhQUFhLENBQUM7QUFHckIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBcUJoRDs7OztHQUlHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLGNBQWMsRUFBOEIsQ0FBQztBQUU3RSxnRkFBZ0Y7QUFDaEYsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxTQUFpQyxFQUNqQyxVQUE2QixhQUFhO0lBRTFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsc0JBQXNCLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDaEUsQ0FBQztBQUVELDRFQUE0RTtBQUM1RSxNQUFNLFVBQVUsOEJBQThCLENBQzVDLE1BQStCLEVBQy9CLFVBQTZCLGFBQWE7SUFFMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUM3QixDQUFDO0FBRUQsaUZBQWlGO0FBQ2pGLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUE0QjtJQUM3RCxPQUFPLFNBQVMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFNBQWlDO0lBQ25FLE9BQU8sc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQVVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsZ0JBQXNELEVBQ3RELE9BQTJCO0lBRTNCLElBQUksT0FBTyxnQkFBZ0IsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUMzQyxNQUFNLElBQUksU0FBUyxDQUNqQixpR0FBaUcsQ0FDbEcsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLENBQUMsT0FBTztRQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsMkNBQTJDLENBQUMsQ0FBQztJQUMvRSxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLE9BQU87QUFDVCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQy9CLE9BQXlCLEVBQ3pCLFNBQWlCLEVBQ2pCLFFBQW9DLEVBQ3BDLEVBQXdDLEVBQ3hDLE1BQW9CO0lBRXBCLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUNuQixTQUFTO1FBQ1QsUUFBUTtRQUNSLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixFQUFFO1FBQ0YsTUFBTTtRQUNOLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUTtRQUNqQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUM5QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7Z0JBQzVCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtnQkFDdEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxPQUFPO2FBQ3ZCLENBQUMsQ0FBQztZQUNILE9BQU8sSUFBSSxjQUFjLENBQUMsZUFBZSxPQUFPLENBQUMsU0FBUyxTQUFTLEVBQUU7Z0JBQ25FLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFO2FBQ2xFLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXZWItc2VhcmNoIHJ1bnRpbWUgY29uc3RydWN0aW9uIGFuZCBleGVjdXRpb24gaGVscGVycy5cbiAqXG4gKiBFYWNoIHBsdWdpbiBpbnN0YW5jZSBvd25zIG9uZSBydW50aW1lLiBTdGFuZGFsb25lIHRvb2wgZmFjdG9yaWVzIGNyZWF0ZSB0aGVpclxuICogb3duIHJ1bnRpbWUsIHNvIHNlcGFyYXRlIGFwcHMgYW5kIGRpcmVjdCBjb25zdW1lcnMgY2Fubm90IG92ZXJ3cml0ZSBlYWNoXG4gKiBvdGhlcidzIHBvbGljeSBvciBleGVjdXRvci5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgRXhlY3V0aW9uRXJyb3IsIHR5cGUgRXhlY3V0aW9uUmVzdWx0IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgZXhlY3V0aW9uLCBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgcmVzb2x2ZVdlYlNlYXJjaENvbmZpZyxcbiAgdHlwZSBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZyxcbiAgdHlwZSBXZWJTZWFyY2hQbHVnaW5Db25maWcsXG59IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHR5cGUgeyBXZWJTZWFyY2hFeGVjdXRpb25TZXR0aW5ncyB9IGZyb20gXCIuL2RlZmF1bHRzLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJ3ZWItc2VhcmNoL3J1bnRpbWVcIik7XG5cbi8qKlxuICogUnVucyBvbmUgb3V0Ym91bmQgY2FsbCB0aHJvdWdoIEFwcEtpdCdzIGludGVyY2VwdG9yIGNoYWluLiBNYXRjaGVzXG4gKiBgUGx1Z2luLmV4ZWN1dGUoKWAsIHdoaWNoIG5ldmVyIHRocm93czogYSBmYWlsdXJlIGNvbWVzIGJhY2sgYXNcbiAqIGB7IG9rOiBmYWxzZSB9YC5cbiAqL1xuZXhwb3J0IHR5cGUgV2ViU2VhcmNoRXhlY3V0b3IgPSA8VD4oXG4gIGZuOiAoc2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8VD4sXG4gIHNldHRpbmdzOiBXZWJTZWFyY2hFeGVjdXRpb25TZXR0aW5ncyxcbikgPT4gUHJvbWlzZTxFeGVjdXRpb25SZXN1bHQ8VD4+O1xuXG4vKiogVGhlIHJlc29sdmVkIGNvbmZpZyBwbHVzIHRoZSBleGVjdXRvciBvdXRib3VuZCBjYWxscyBydW4gdGhyb3VnaC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViU2VhcmNoUnVudGltZSB7XG4gIGNvbmZpZzogUmVzb2x2ZWRXZWJTZWFyY2hDb25maWc7XG4gIGV4ZWN1dGU6IFdlYlNlYXJjaEV4ZWN1dG9yO1xufVxuXG4vKiogUnVudGltZS1hd2FyZSBvcGVyYXRpb24gaW5wdXQsIHJldGFpbmluZyByZXNvbHZlZC1jb25maWcgY29tcGF0aWJpbGl0eS4gKi9cbmV4cG9ydCB0eXBlIFdlYlNlYXJjaFJ1bnRpbWVJbnB1dCA9IFdlYlNlYXJjaFJ1bnRpbWUgfCBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZztcblxuLyoqXG4gKiBFeGVjdXRvciB1c2VkIGJ5IHN0YW5kYWxvbmUgcnVudGltZXM6IHJ1biB0aGUgY2FsbCBkaXJlY3RseSwgbWFwcGluZyBhIHRocm93XG4gKiBvbnRvIHRoZSBzYW1lIHtAbGluayBFeGVjdXRpb25SZXN1bHR9IHNoYXBlIHNvIGNhbGwgc2l0ZXMgYnJhbmNoIG9uIGBva2BcbiAqIGVpdGhlciB3YXkuXG4gKi9cbmNvbnN0IGRpcmVjdEV4ZWN1dGUgPSBleGVjdXRpb24uZGlyZWN0RXhlY3V0b3I8V2ViU2VhcmNoRXhlY3V0aW9uU2V0dGluZ3M+KCk7XG5cbi8qKiBCdWlsZCBhbiBpc29sYXRlZCBydW50aW1lIGZvciBvbmUgcGx1Z2luIGluc3RhbmNlIG9yIHN0YW5kYWxvbmUgdG9vbCBzZXQuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2ViU2VhcmNoUnVudGltZShcbiAgb3ZlcnJpZGVzPzogV2ViU2VhcmNoUGx1Z2luQ29uZmlnLFxuICBleGVjdXRlOiBXZWJTZWFyY2hFeGVjdXRvciA9IGRpcmVjdEV4ZWN1dGUsXG4pOiBXZWJTZWFyY2hSdW50aW1lIHtcbiAgcmV0dXJuIHsgY29uZmlnOiByZXNvbHZlV2ViU2VhcmNoQ29uZmlnKG92ZXJyaWRlcyksIGV4ZWN1dGUgfTtcbn1cblxuLyoqIEJ1aWxkIGFuIGlzb2xhdGVkIHJ1bnRpbWUgZnJvbSBjb25maWcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc29sdmVkV2ViU2VhcmNoUnVudGltZShcbiAgY29uZmlnOiBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZyxcbiAgZXhlY3V0ZTogV2ViU2VhcmNoRXhlY3V0b3IgPSBkaXJlY3RFeGVjdXRlLFxuKTogV2ViU2VhcmNoUnVudGltZSB7XG4gIHJldHVybiB7IGNvbmZpZywgZXhlY3V0ZSB9O1xufVxuXG4vKiogTm9ybWFsaXplIGFuIGV4cGxpY2l0IHJ1bnRpbWUgb3IgbGVnYWN5IHJlc29sdmVkIGNvbmZpZyBmb3Igb25lIG9wZXJhdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1dlYlNlYXJjaFJ1bnRpbWUoaW5wdXQ6IFdlYlNlYXJjaFJ1bnRpbWVJbnB1dCk6IFdlYlNlYXJjaFJ1bnRpbWUge1xuICByZXR1cm4gXCJleGVjdXRlXCIgaW4gaW5wdXQgPyBpbnB1dCA6IGNyZWF0ZVJlc29sdmVkV2ViU2VhcmNoUnVudGltZShpbnB1dCk7XG59XG5cbi8qKlxuICogQnVpbGQgYW4gaXNvbGF0ZWQgc3RhbmRhbG9uZSBydW50aW1lLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgY3JlYXRlV2ViU2VhcmNoUnVudGltZX0uIFRoaXMgY29tcGF0aWJpbGl0eSBoZWxwZXJcbiAqIHJldHVybnMgYSBuZXcgcnVudGltZSBvbiBldmVyeSBjYWxsIGFuZCBuZXZlciByZWFkcyBvciB1cGRhdGVzIHBsdWdpbiBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlYlNlYXJjaFJ1bnRpbWUob3ZlcnJpZGVzPzogV2ViU2VhcmNoUGx1Z2luQ29uZmlnKTogV2ViU2VhcmNoUnVudGltZSB7XG4gIHJldHVybiBjcmVhdGVXZWJTZWFyY2hSdW50aW1lKG92ZXJyaWRlcyk7XG59XG5cbi8qKiBJbnN0YWxsIGFuIGV4ZWN1dG9yIG9uIGFuIGV4cGxpY2l0IHJ1bnRpbWUuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0V2ViU2VhcmNoRXhlY3V0b3IocnVudGltZTogV2ViU2VhcmNoUnVudGltZSwgZXhlY3V0ZTogV2ViU2VhcmNoRXhlY3V0b3IpOiB2b2lkO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBQcm9jZXNzLWdsb2JhbCBleGVjdXRvciByZWdpc3RyYXRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cbiAqIFBhc3MgYSBydW50aW1lIGFzIHRoZSBmaXJzdCBhcmd1bWVudCBvciBwcm92aWRlIHRoZSBleGVjdXRvciB0b1xuICoge0BsaW5rIGNyZWF0ZVdlYlNlYXJjaFJ1bnRpbWV9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0V2ViU2VhcmNoRXhlY3V0b3IoZXhlY3V0ZTogV2ViU2VhcmNoRXhlY3V0b3IpOiBuZXZlcjtcbmV4cG9ydCBmdW5jdGlvbiBzZXRXZWJTZWFyY2hFeGVjdXRvcihcbiAgcnVudGltZU9yRXhlY3V0ZTogV2ViU2VhcmNoUnVudGltZSB8IFdlYlNlYXJjaEV4ZWN1dG9yLFxuICBleGVjdXRlPzogV2ViU2VhcmNoRXhlY3V0b3IsXG4pOiB2b2lkIHtcbiAgaWYgKHR5cGVvZiBydW50aW1lT3JFeGVjdXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgXCJzZXRXZWJTZWFyY2hFeGVjdXRvciByZXF1aXJlcyBhbiBleHBsaWNpdCBydW50aW1lOyB1c2UgY3JlYXRlV2ViU2VhcmNoUnVudGltZShjb25maWcsIGV4ZWN1dG9yKVwiLFxuICAgICk7XG4gIH1cbiAgaWYgKCFleGVjdXRlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2V0V2ViU2VhcmNoRXhlY3V0b3IgcmVxdWlyZXMgYW4gZXhlY3V0b3JcIik7XG4gIHJ1bnRpbWVPckV4ZWN1dGUuZXhlY3V0ZSA9IGV4ZWN1dGU7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgUGx1Z2luIHJ1bnRpbWVzIGFyZSBpbnN0YW5jZS1vd25lZCBhbmQgbmVlZCBubyBnbG9iYWwgcmVzZXQuXG4gKiBUaGlzIGNvbXBhdGliaWxpdHkgaGVscGVyIGlzIGludGVudGlvbmFsbHkgYSBuby1vcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0V2ViU2VhcmNoUnVudGltZSgpOiB2b2lkIHtcbiAgcmV0dXJuO1xufVxuXG4vKipcbiAqIFJ1biBvbmUgaWRlbXBvdGVudCByZWFkIHRocm91Z2ggdGhlIHJ1bnRpbWUgZXhlY3V0b3IgYW5kIHVud3JhcCBpdC5cbiAqXG4gKiBgZXhlY3V0ZSgpYCBuZXZlciB0aHJvd3MsIHNvIGEgZmFpbGVkIGNhbGwgYXJyaXZlcyBhcyBgeyBvazogZmFsc2UgfWAgd2l0aFxuICogYSBzdGF0dXMgdGhlIGludGVyY2VwdG9ycyBhbHJlYWR5IHNhbml0aXplZDsgaXQgaXMgbG9nZ2VkIGhlcmUgYW5kIHJlLXJhaXNlZFxuICogYXMgYSBzdGFibGUge0BsaW5rIEV4ZWN1dGlvbkVycm9yfSBzbyBhbiB1cHN0cmVhbSBtZXNzYWdlIG5ldmVyIGJlY29tZXMgdGhlXG4gKiBjYWxsZXIncyBlcnJvciB0ZXh0LiBgc2lnbmFsYCBpcyB0aGUgY2FsbGVyJ3Mgb3duIGNhbmNlbGxhdGlvbiAoYW4gYWdlbnRcbiAqIHJ1biwgYSByZXF1ZXN0IHRlYXJkb3duKTsgaXQgaXMgbWVyZ2VkIHdpdGggdGhlIHNpZ25hbCB0aGUgdGltZW91dFxuICogaW50ZXJjZXB0b3Igc3VwcGxpZXMgc28gZWl0aGVyIG9uZSB1bndpbmRzIHRoZSBJL08uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlUmVhZDxUPihcbiAgcnVudGltZTogV2ViU2VhcmNoUnVudGltZSxcbiAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gIHNldHRpbmdzOiBXZWJTZWFyY2hFeGVjdXRpb25TZXR0aW5ncyxcbiAgZm46IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxUPixcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIGV4ZWN1dGlvbi5ydW4oe1xuICAgIG9wZXJhdGlvbixcbiAgICBzZXR0aW5ncyxcbiAgICBleGVjdXRlOiBydW50aW1lLmV4ZWN1dGUsXG4gICAgZm4sXG4gICAgc2lnbmFsLFxuICAgIGNhbmNlbGVkOiBFeGVjdXRpb25FcnJvci5jYW5jZWxlZCxcbiAgICBmYWlsZWQ6IChmYWlsdXJlKSA9PiB7XG4gICAgICBsb2dnZXIud2FybihcImV4ZWN1dGlvbi1mYWlsZWRcIiwge1xuICAgICAgICBvcGVyYXRpb246IGZhaWx1cmUub3BlcmF0aW9uLFxuICAgICAgICBzdGF0dXM6IGZhaWx1cmUuc3RhdHVzLFxuICAgICAgICBlcnJvcjogZmFpbHVyZS5tZXNzYWdlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IEV4ZWN1dGlvbkVycm9yKGB3ZWItc2VhcmNoOiAke2ZhaWx1cmUub3BlcmF0aW9ufSBmYWlsZWRgLCB7XG4gICAgICAgIGNvbnRleHQ6IHsgb3BlcmF0aW9uOiBmYWlsdXJlLm9wZXJhdGlvbiwgc3RhdHVzOiBmYWlsdXJlLnN0YXR1cyB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
|
package/lib/src/scrape.d.ts
CHANGED
|
@@ -17,8 +17,10 @@
|
|
|
17
17
|
*
|
|
18
18
|
* @module
|
|
19
19
|
*/
|
|
20
|
-
import type
|
|
21
|
-
import type { WebSearchRequest, WebSearchResult } from "./schema.ts";
|
|
20
|
+
import { type WebSearchRuntimeInput } from "./runtime.ts";
|
|
21
|
+
import type { WebSearchCitation, WebSearchRequest, WebSearchResult } from "./schema.ts";
|
|
22
|
+
/** Parse DDG HTML result blocks into citations (title, url, snippet). */
|
|
23
|
+
export declare function parseDdgHtml(html: string): WebSearchCitation[];
|
|
22
24
|
/**
|
|
23
25
|
* Run a scraping search over DuckDuckGo. Returns the same
|
|
24
26
|
* {@link WebSearchResult} shape as the native path, with `model` set to
|
|
@@ -26,4 +28,4 @@ import type { WebSearchRequest, WebSearchResult } from "./schema.ts";
|
|
|
26
28
|
* Citations are filtered through the configured URL allow-list. `signal`
|
|
27
29
|
* cancels the in-flight request.
|
|
28
30
|
*/
|
|
29
|
-
export declare function runScrapeSearch(request: WebSearchRequest,
|
|
31
|
+
export declare function runScrapeSearch(request: WebSearchRequest, runtimeOrConfig: WebSearchRuntimeInput, signal?: AbortSignal): Promise<WebSearchResult>;
|
package/lib/src/scrape.js
CHANGED
|
@@ -18,10 +18,11 @@
|
|
|
18
18
|
* @module
|
|
19
19
|
*/
|
|
20
20
|
import { log } from "@dbx-tools/shared-core";
|
|
21
|
+
import { load } from "cheerio";
|
|
21
22
|
import { gotScraping } from "got-scraping";
|
|
22
23
|
import { scrapeSearchExecuteDefaults, toCallSettings } from "./defaults.js";
|
|
23
24
|
import { htmlFragmentToText } from "./html-text.js";
|
|
24
|
-
import { executeRead } from "./runtime.js";
|
|
25
|
+
import { executeRead, toWebSearchRuntime } from "./runtime.js";
|
|
25
26
|
const logger = log.logger("web-search/scrape");
|
|
26
27
|
/** DuckDuckGo's no-JS HTML results endpoint (queried via GET). */
|
|
27
28
|
const DDG_HTML_URL = "https://html.duckduckgo.com/html/";
|
|
@@ -42,27 +43,19 @@ function unwrapDdgUrl(href) {
|
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
45
|
/** Parse DDG HTML result blocks into citations (title, url, snippet). */
|
|
45
|
-
function parseDdgHtml(html) {
|
|
46
|
+
export function parseDdgHtml(html) {
|
|
47
|
+
const $ = load(html);
|
|
46
48
|
const citations = [];
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const snippets = [];
|
|
52
|
-
let sm;
|
|
53
|
-
while ((sm = snippetRe.exec(html)) !== null)
|
|
54
|
-
snippets.push(htmlFragmentToText(sm[1] ?? ""));
|
|
55
|
-
let am;
|
|
56
|
-
let i = 0;
|
|
57
|
-
while ((am = anchorRe.exec(html)) !== null) {
|
|
58
|
-
const url = unwrapDdgUrl(am[1] ?? "");
|
|
59
|
-
const title = htmlFragmentToText(am[2] ?? "");
|
|
49
|
+
$("a.result__a").each((_index, element) => {
|
|
50
|
+
const anchor = $(element);
|
|
51
|
+
const url = unwrapDdgUrl(anchor.attr("href") ?? "");
|
|
52
|
+
const title = htmlFragmentToText(anchor.html() ?? "");
|
|
60
53
|
if (!url || !title)
|
|
61
|
-
|
|
62
|
-
const
|
|
54
|
+
return;
|
|
55
|
+
const snippetElement = anchor.closest(".result").find(".result__snippet").first();
|
|
56
|
+
const snippet = htmlFragmentToText(snippetElement.html() ?? "");
|
|
63
57
|
citations.push({ url, title, ...(snippet ? { snippet } : {}) });
|
|
64
|
-
|
|
65
|
-
}
|
|
58
|
+
});
|
|
66
59
|
return citations;
|
|
67
60
|
}
|
|
68
61
|
/**
|
|
@@ -72,8 +65,10 @@ function parseDdgHtml(html) {
|
|
|
72
65
|
* Citations are filtered through the configured URL allow-list. `signal`
|
|
73
66
|
* cancels the in-flight request.
|
|
74
67
|
*/
|
|
75
|
-
export async function runScrapeSearch(request,
|
|
76
|
-
const
|
|
68
|
+
export async function runScrapeSearch(request, runtimeOrConfig, signal) {
|
|
69
|
+
const runtime = toWebSearchRuntime(runtimeOrConfig);
|
|
70
|
+
const { config } = runtime;
|
|
71
|
+
const page = await executeRead(runtime, "scrape-search", toCallSettings(scrapeSearchExecuteDefaults, config.timeoutMs, [
|
|
77
72
|
"web-search",
|
|
78
73
|
"scrape",
|
|
79
74
|
request.query,
|
|
@@ -110,4 +105,4 @@ export async function runScrapeSearch(request, config, signal) {
|
|
|
110
105
|
});
|
|
111
106
|
return { query: request.query, answer, citations, model: "scrape:duckduckgo" };
|
|
112
107
|
}
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyYXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmFwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRzNDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUUvQyxrRUFBa0U7QUFDbEUsTUFBTSxZQUFZLEdBQUcsbUNBQW1DLENBQUM7QUFFekQ7OztHQUdHO0FBQ0gsU0FBUyxZQUFZLENBQUMsSUFBWTtJQUNoQyxJQUFJLENBQUM7UUFDSCxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztRQUNsRCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLE1BQU07WUFBRSxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pGLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDO0FBRUQseUVBQXlFO0FB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cmFwaW5nIGZhbGxiYWNrIGZvciBgd2ViX3NlYXJjaGAsIHVzZWQgT05MWSB3aGVuIHRoZVxuICogd29ya3NwYWNlIGhhcyBubyBEYXRhYnJpY2tzIHdlYi1zZWFyY2gtY2FwYWJsZSBtb2RlbCBkZXBsb3llZCAobm8gR1BUIC9cbiAqIEdlbWluaSBzZXJ2aW5nIGVuZHBvaW50KS4gVGhlIG5hdGl2ZSBEYXRhYnJpY2tzIHdlYi1zZWFyY2ggdG9vbCBpcyBhbHdheXNcbiAqIHByZWZlcnJlZCAoc2VlIGBzZWFyY2gudHNgKTsgdGhpcyBleGlzdHMgc28gdGhlIHRvb2wgc3RpbGwgcmV0dXJucyB1c2VmdWxcbiAqIHJlc3VsdHMgaW4gYW4gZW52aXJvbm1lbnQgdGhhdCBjYW4ndCBydW4gaXQsIHJhdGhlciB0aGFuIGVycm9yaW5nIG9uIGV2ZXJ5XG4gKiBjYWxsLlxuICpcbiAqIEl0IHF1ZXJpZXMgRHVja0R1Y2tHbydzIG5vLUpTIEhUTUwgZW5kcG9pbnQgdGhyb3VnaCBgZ290LXNjcmFwaW5nYFxuICogKGJyb3dzZXItbGlrZSBmaW5nZXJwcmludHMgc28gdGhlIHJlcXVlc3QgaXNuJ3QgYmxvY2tlZCkgdmlhIGEgR0VUIHdpdGggdGhlXG4gKiBxdWVyeSBpbiB0aGUgcXVlcnkgc3RyaW5nIC0gYSBQT1NUIHRvIHRoZSBzYW1lIGVuZHBvaW50IHRyaXBzIERERydzIGJvdFxuICogY2hhbGxlbmdlIChIVFRQIDIwMiksIHdoaWxlIHRoZSBHRVQgcmV0dXJucyBub3JtYWwgcmVzdWx0IG1hcmt1cC4gSXQgdGhlblxuICogcGFyc2VzIHRoZSByZXN1bHQgYW5jaG9ycyArIHNuaXBwZXRzLiBVbmxpa2UgdGhlIG5hdGl2ZSB0b29sIHRoZXJlIGlzIG5vXG4gKiBtb2RlbCBzeW50aGVzaXppbmcgYW4gYW5zd2VyLCBzbyBgYW5zd2VyYCBpcyBhIHNob3J0IGxlYWQtaW4gb3ZlciB0aGUgdG9wXG4gKiBzbmlwcGV0cyBhbmQgdGhlIHN1YnN0YW5jZSByaWRlcyBpbiBgY2l0YXRpb25zYCAtIHRoZSBjYWxsaW5nIGFnZW50IHJlYWRzXG4gKiB0aG9zZSBhbmQgd3JpdGVzIGl0cyBvd24gYW5zd2VyLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgZ290U2NyYXBpbmcgfSBmcm9tIFwiZ290LXNjcmFwaW5nXCI7XG5pbXBvcnQgdHlwZSB7IFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBzY3JhcGVTZWFyY2hFeGVjdXRlRGVmYXVsdHMsIHRvQ2FsbFNldHRpbmdzIH0gZnJvbSBcIi4vZGVmYXVsdHMudHNcIjtcbmltcG9ydCB7IGh0bWxGcmFnbWVudFRvVGV4dCB9IGZyb20gXCIuL2h0bWwtdGV4dC50c1wiO1xuaW1wb3J0IHsgZXhlY3V0ZVJlYWQgfSBmcm9tIFwiLi9ydW50aW1lLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdlYlNlYXJjaENpdGF0aW9uLCBXZWJTZWFyY2hSZXF1ZXN0LCBXZWJTZWFyY2hSZXN1bHQgfSBmcm9tIFwiLi9zY2hlbWEudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIndlYi1zZWFyY2gvc2NyYXBlXCIpO1xuXG4vKiogRHVja0R1Y2tHbydzIG5vLUpTIEhUTUwgcmVzdWx0cyBlbmRwb2ludCAocXVlcmllZCB2aWEgR0VUKS4gKi9cbmNvbnN0IERER19IVE1MX1VSTCA9IFwiaHR0cHM6Ly9odG1sLmR1Y2tkdWNrZ28uY29tL2h0bWwvXCI7XG5cbi8qKlxuICogRERHIHdyYXBzIHJlc3VsdCBVUkxzIGluIGEgcmVkaXJlY3QgKGAvL2R1Y2tkdWNrZ28uY29tL2wvP3VkZGc9PGVuY29kZWQ+YCkuXG4gKiBVbndyYXAgdG8gdGhlIHJlYWwgZGVzdGluYXRpb247IGxlYXZlIGFscmVhZHktYWJzb2x1dGUgVVJMcyB1bnRvdWNoZWQuXG4gKi9cbmZ1bmN0aW9uIHVud3JhcERkZ1VybChocmVmOiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHUgPSBuZXcgVVJMKGhyZWYsIFwiaHR0cHM6Ly9kdWNrZHVja2dvLmNvbVwiKTtcbiAgICBjb25zdCB0YXJnZXQgPSB1LnNlYXJjaFBhcmFtcy5nZXQoXCJ1ZGRnXCIpO1xuICAgIGlmICh0YXJnZXQpIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodGFyZ2V0KTtcbiAgICByZXR1cm4gdS5wcm90b2NvbCA9PT0gXCJodHRwOlwiIHx8IHUucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIgPyB1LnRvU3RyaW5nKCkgOiBocmVmO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gaHJlZjtcbiAgfVxufVxuXG4vKiogUGFyc2UgRERHIEhUTUwgcmVzdWx0IGJsb2NrcyBpbnRvIGNpdGF0aW9ucyAodGl0bGUsIHVybCwgc25pcHBldCkuICovXG5mdW5jdGlvbiBwYXJzZURkZ0h0bWwoaHRtbDogc3RyaW5nKTogV2ViU2VhcmNoQ2l0YXRpb25bXSB7XG4gIGNvbnN0IGNpdGF0aW9uczogV2ViU2VhcmNoQ2l0YXRpb25bXSA9IFtdO1xuICAvLyBFYWNoIHJlc3VsdDogYW4gYW5jaG9yIHdpdGggY2xhc3MgcmVzdWx0X19hICh0aXRsZSArIGhyZWYpIGFuZCBhIHNuaXBwZXRcbiAgLy8gd2l0aCBjbGFzcyByZXN1bHRfX3NuaXBwZXQuIE1hdGNoIGFuY2hvcnMsIHRoZW4gdGhlIGZvbGxvd2luZyBzbmlwcGV0LlxuICBjb25zdCBhbmNob3JSZSA9IC88YVtePl0qY2xhc3M9XCJbXlwiXSpyZXN1bHRfX2FbXlwiXSpcIltePl0qaHJlZj1cIihbXlwiXSspXCJbXj5dKj4oW1xcc1xcU10qPyk8XFwvYT4vZztcbiAgY29uc3Qgc25pcHBldFJlID0gLzxhW14+XSpjbGFzcz1cIlteXCJdKnJlc3VsdF9fc25pcHBldFteXCJdKlwiW14+XSo+KFtcXHNcXFNdKj8pPFxcL2E+L2c7XG4gIGNvbnN0IHNuaXBwZXRzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgc206IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG4gIHdoaWxlICgoc20gPSBzbmlwcGV0UmUuZXhlYyhodG1sKSkgIT09IG51bGwpIHNuaXBwZXRzLnB1c2goaHRtbEZyYWdtZW50VG9UZXh0KHNtWzFdID8/IFwiXCIpKTtcbiAgbGV0IGFtOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xuICBsZXQgaSA9IDA7XG4gIHdoaWxlICgoYW0gPSBhbmNob3JSZS5leGVjKGh0bWwpKSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHVybCA9IHVud3JhcERkZ1VybChhbVsxXSA/PyBcIlwiKTtcbiAgICBjb25zdCB0aXRsZSA9IGh0bWxGcmFnbWVudFRvVGV4dChhbVsyXSA/PyBcIlwiKTtcbiAgICBpZiAoIXVybCB8fCAhdGl0bGUpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHNuaXBwZXQgPSBzbmlwcGV0c1tpXSA/PyBcIlwiO1xuICAgIGNpdGF0aW9ucy5wdXNoKHsgdXJsLCB0aXRsZSwgLi4uKHNuaXBwZXQgPyB7IHNuaXBwZXQgfSA6IHt9KSB9KTtcbiAgICBpICs9IDE7XG4gIH1cbiAgcmV0dXJuIGNpdGF0aW9ucztcbn1cblxuLyoqXG4gKiBSdW4gYSBzY3JhcGluZyBzZWFyY2ggb3ZlciBEdWNrRHVja0dvLiBSZXR1cm5zIHRoZSBzYW1lXG4gKiB7QGxpbmsgV2ViU2VhcmNoUmVzdWx0fSBzaGFwZSBhcyB0aGUgbmF0aXZlIHBhdGgsIHdpdGggYG1vZGVsYCBzZXQgdG9cbiAqIGBcInNjcmFwZTpkdWNrZHVja2dvXCJgIHNvIGNhbGxlcnMgY2FuIHRlbGwgaG93IHRoZSByZXN1bHQgd2FzIHByb2R1Y2VkLlxuICogQ2l0YXRpb25zIGFyZSBmaWx0ZXJlZCB0aHJvdWdoIHRoZSBjb25maWd1cmVkIFVSTCBhbGxvdy1saXN0LiBgc2lnbmFsYFxuICogY2FuY2VscyB0aGUgaW4tZmxpZ2h0IHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5TY3JhcGVTZWFyY2goXG4gIHJlcXVlc3Q6IFdlYlNlYXJjaFJlcXVlc3QsXG4gIGNvbmZpZzogUmVzb2x2ZWRXZWJTZWFyY2hDb25maWcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxXZWJTZWFyY2hSZXN1bHQ+IHtcbiAgY29uc3QgcGFnZSA9IGF3YWl0IGV4ZWN1dGVSZWFkKFxuICAgIFwic2NyYXBlLXNlYXJjaFwiLFxuICAgIHRvQ2FsbFNldHRpbmdzKHNjcmFwZVNlYXJjaEV4ZWN1dGVEZWZhdWx0cywgY29uZmlnLnRpbWVvdXRNcywgW1xuICAgICAgXCJ3ZWItc2VhcmNoXCIsXG4gICAgICBcInNjcmFwZVwiLFxuICAgICAgcmVxdWVzdC5xdWVyeSxcbiAgICBdKSxcbiAgICBhc3luYyAoZXhlY3V0ZVNpZ25hbCk6IFByb21pc2U8eyBib2R5OiBzdHJpbmc7IHN0YXR1c0NvZGU6IG51bWJlciB9PiA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdvdFNjcmFwaW5nKHtcbiAgICAgICAgdXJsOiBgJHtEREdfSFRNTF9VUkx9P3E9JHtlbmNvZGVVUklDb21wb25lbnQocmVxdWVzdC5xdWVyeSl9YCxcbiAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAvLyBnb3QncyBvd24gdGltZW91dCBhYm9ydHMgdGhlIHNvY2tldCBhbmQgcmVwb3J0cyB3aGljaCBwaGFzZSB0aW1lZFxuICAgICAgICAvLyBvdXQ7IHRoZSBpbnRlcmNlcHRvciB0aW1lb3V0IGJvdW5kcyB0aGUgd2hvbGUgYXR0ZW1wdCBhcm91bmQgaXQuXG4gICAgICAgIHRpbWVvdXQ6IHsgcmVxdWVzdDogY29uZmlnLnRpbWVvdXRNcyB9LFxuICAgICAgICB0aHJvd0h0dHBFcnJvcnM6IGZhbHNlLFxuICAgICAgICBmb2xsb3dSZWRpcmVjdDogdHJ1ZSxcbiAgICAgICAgLi4uKGV4ZWN1dGVTaWduYWwgPyB7IHNpZ25hbDogZXhlY3V0ZVNpZ25hbCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBib2R5OiB0eXBlb2YgcmVzcG9uc2UuYm9keSA9PT0gXCJzdHJpbmdcIiA/IHJlc3BvbnNlLmJvZHkgOiBTdHJpbmcocmVzcG9uc2UuYm9keSA/PyBcIlwiKSxcbiAgICAgICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBzaWduYWwsXG4gICk7XG4gIGNvbnN0IGFsbCA9IHBhcnNlRGRnSHRtbChwYWdlLmJvZHkpO1xuICBjb25zdCBwZXJtaXR0ZWQgPSBhbGwuZmlsdGVyKChjKSA9PiBjb25maWcuYWxsb3dMaXN0LmFsbG93cyhjLnVybCkpO1xuICBjb25zdCBjaXRhdGlvbnMgPSBwZXJtaXR0ZWQuc2xpY2UoMCwgY29uZmlnLm1heENpdGF0aW9ucyk7XG4gIGNvbnN0IGFuc3dlciA9XG4gICAgY2l0YXRpb25zLmxlbmd0aCA+IDBcbiAgICAgID8gYFdlYiByZXN1bHRzIGZvciBcIiR7cmVxdWVzdC5xdWVyeX1cIiAobm8gRGF0YWJyaWNrcyB3ZWItc2VhcmNoIG1vZGVsIGlzIGRlcGxveWVkIGluIHRoaXMgd29ya3NwYWNlLCBzbyB0aGVzZSBhcmUgdW5zeW50aGVzaXplZCBzZWFyY2ggcmVzdWx0cyAtIHJlYWQgdGhlIGNpdGF0aW9ucyk6XFxuXFxuYCArXG4gICAgICAgIGNpdGF0aW9uc1xuICAgICAgICAgIC5tYXAoKGMsIG4pID0+IGAke24gKyAxfS4gJHtjLnRpdGxlfSR7Yy5zbmlwcGV0ID8gYCAtICR7Yy5zbmlwcGV0fWAgOiBcIlwifSAoJHtjLnVybH0pYClcbiAgICAgICAgICAuam9pbihcIlxcblwiKVxuICAgICAgOiBgTm8gd2ViIHJlc3VsdHMgZm91bmQgZm9yIFwiJHtyZXF1ZXN0LnF1ZXJ5fVwiLmA7XG4gIGxvZ2dlci5kZWJ1ZyhcInNjcmFwZWRcIiwge1xuICAgIHF1ZXJ5OiByZXF1ZXN0LnF1ZXJ5LFxuICAgIGZvdW5kOiBhbGwubGVuZ3RoLFxuICAgIHJldHVybmVkOiBjaXRhdGlvbnMubGVuZ3RoLFxuICAgIHN0YXR1czogcGFnZS5zdGF0dXNDb2RlLFxuICB9KTtcbiAgcmV0dXJuIHsgcXVlcnk6IHJlcXVlc3QucXVlcnksIGFuc3dlciwgY2l0YXRpb25zLCBtb2RlbDogXCJzY3JhcGU6ZHVja2R1Y2tnb1wiIH07XG59XG4iXX0=
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyYXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmFwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQThCLE1BQU0sY0FBYyxDQUFDO0FBRzNGLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUUvQyxrRUFBa0U7QUFDbEUsTUFBTSxZQUFZLEdBQUcsbUNBQW1DLENBQUM7QUFFekQ7OztHQUdHO0FBQ0gsU0FBUyxZQUFZLENBQUMsSUFBWTtJQUNoQyxJQUFJLENBQUM7UUFDSCxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztRQUNsRCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLE1BQU07WUFBRSxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pGLENBQUM7SUFBQyxNQUFNLENBQUM7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cmFwaW5nIGZhbGxiYWNrIGZvciBgd2ViX3NlYXJjaGAsIHVzZWQgT05MWSB3aGVuIHRoZVxuICogd29ya3NwYWNlIGhhcyBubyBEYXRhYnJpY2tzIHdlYi1zZWFyY2gtY2FwYWJsZSBtb2RlbCBkZXBsb3llZCAobm8gR1BUIC9cbiAqIEdlbWluaSBzZXJ2aW5nIGVuZHBvaW50KS4gVGhlIG5hdGl2ZSBEYXRhYnJpY2tzIHdlYi1zZWFyY2ggdG9vbCBpcyBhbHdheXNcbiAqIHByZWZlcnJlZCAoc2VlIGBzZWFyY2gudHNgKTsgdGhpcyBleGlzdHMgc28gdGhlIHRvb2wgc3RpbGwgcmV0dXJucyB1c2VmdWxcbiAqIHJlc3VsdHMgaW4gYW4gZW52aXJvbm1lbnQgdGhhdCBjYW4ndCBydW4gaXQsIHJhdGhlciB0aGFuIGVycm9yaW5nIG9uIGV2ZXJ5XG4gKiBjYWxsLlxuICpcbiAqIEl0IHF1ZXJpZXMgRHVja0R1Y2tHbydzIG5vLUpTIEhUTUwgZW5kcG9pbnQgdGhyb3VnaCBgZ290LXNjcmFwaW5nYFxuICogKGJyb3dzZXItbGlrZSBmaW5nZXJwcmludHMgc28gdGhlIHJlcXVlc3QgaXNuJ3QgYmxvY2tlZCkgdmlhIGEgR0VUIHdpdGggdGhlXG4gKiBxdWVyeSBpbiB0aGUgcXVlcnkgc3RyaW5nIC0gYSBQT1NUIHRvIHRoZSBzYW1lIGVuZHBvaW50IHRyaXBzIERERydzIGJvdFxuICogY2hhbGxlbmdlIChIVFRQIDIwMiksIHdoaWxlIHRoZSBHRVQgcmV0dXJucyBub3JtYWwgcmVzdWx0IG1hcmt1cC4gSXQgdGhlblxuICogcGFyc2VzIHRoZSByZXN1bHQgYW5jaG9ycyArIHNuaXBwZXRzLiBVbmxpa2UgdGhlIG5hdGl2ZSB0b29sIHRoZXJlIGlzIG5vXG4gKiBtb2RlbCBzeW50aGVzaXppbmcgYW4gYW5zd2VyLCBzbyBgYW5zd2VyYCBpcyBhIHNob3J0IGxlYWQtaW4gb3ZlciB0aGUgdG9wXG4gKiBzbmlwcGV0cyBhbmQgdGhlIHN1YnN0YW5jZSByaWRlcyBpbiBgY2l0YXRpb25zYCAtIHRoZSBjYWxsaW5nIGFnZW50IHJlYWRzXG4gKiB0aG9zZSBhbmQgd3JpdGVzIGl0cyBvd24gYW5zd2VyLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgbG9hZCB9IGZyb20gXCJjaGVlcmlvXCI7XG5pbXBvcnQgeyBnb3RTY3JhcGluZyB9IGZyb20gXCJnb3Qtc2NyYXBpbmdcIjtcbmltcG9ydCB7IHNjcmFwZVNlYXJjaEV4ZWN1dGVEZWZhdWx0cywgdG9DYWxsU2V0dGluZ3MgfSBmcm9tIFwiLi9kZWZhdWx0cy50c1wiO1xuaW1wb3J0IHsgaHRtbEZyYWdtZW50VG9UZXh0IH0gZnJvbSBcIi4vaHRtbC10ZXh0LnRzXCI7XG5pbXBvcnQgeyBleGVjdXRlUmVhZCwgdG9XZWJTZWFyY2hSdW50aW1lLCB0eXBlIFdlYlNlYXJjaFJ1bnRpbWVJbnB1dCB9IGZyb20gXCIuL3J1bnRpbWUudHNcIjtcbmltcG9ydCB0eXBlIHsgV2ViU2VhcmNoQ2l0YXRpb24sIFdlYlNlYXJjaFJlcXVlc3QsIFdlYlNlYXJjaFJlc3VsdCB9IGZyb20gXCIuL3NjaGVtYS50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwid2ViLXNlYXJjaC9zY3JhcGVcIik7XG5cbi8qKiBEdWNrRHVja0dvJ3Mgbm8tSlMgSFRNTCByZXN1bHRzIGVuZHBvaW50IChxdWVyaWVkIHZpYSBHRVQpLiAqL1xuY29uc3QgRERHX0hUTUxfVVJMID0gXCJodHRwczovL2h0bWwuZHVja2R1Y2tnby5jb20vaHRtbC9cIjtcblxuLyoqXG4gKiBEREcgd3JhcHMgcmVzdWx0IFVSTHMgaW4gYSByZWRpcmVjdCAoYC8vZHVja2R1Y2tnby5jb20vbC8/dWRkZz08ZW5jb2RlZD5gKS5cbiAqIFVud3JhcCB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbjsgbGVhdmUgYWxyZWFkeS1hYnNvbHV0ZSBVUkxzIHVudG91Y2hlZC5cbiAqL1xuZnVuY3Rpb24gdW53cmFwRGRnVXJsKGhyZWY6IHN0cmluZyk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgdSA9IG5ldyBVUkwoaHJlZiwgXCJodHRwczovL2R1Y2tkdWNrZ28uY29tXCIpO1xuICAgIGNvbnN0IHRhcmdldCA9IHUuc2VhcmNoUGFyYW1zLmdldChcInVkZGdcIik7XG4gICAgaWYgKHRhcmdldCkgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0YXJnZXQpO1xuICAgIHJldHVybiB1LnByb3RvY29sID09PSBcImh0dHA6XCIgfHwgdS5wcm90b2NvbCA9PT0gXCJodHRwczpcIiA/IHUudG9TdHJpbmcoKSA6IGhyZWY7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBocmVmO1xuICB9XG59XG5cbi8qKiBQYXJzZSBEREcgSFRNTCByZXN1bHQgYmxvY2tzIGludG8gY2l0YXRpb25zICh0aXRsZSwgdXJsLCBzbmlwcGV0KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURkZ0h0bWwoaHRtbDogc3RyaW5nKTogV2ViU2VhcmNoQ2l0YXRpb25bXSB7XG4gIGNvbnN0ICQgPSBsb2FkKGh0bWwpO1xuICBjb25zdCBjaXRhdGlvbnM6IFdlYlNlYXJjaENpdGF0aW9uW10gPSBbXTtcbiAgJChcImEucmVzdWx0X19hXCIpLmVhY2goKF9pbmRleCwgZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGFuY2hvciA9ICQoZWxlbWVudCk7XG4gICAgY29uc3QgdXJsID0gdW53cmFwRGRnVXJsKGFuY2hvci5hdHRyKFwiaHJlZlwiKSA/PyBcIlwiKTtcbiAgICBjb25zdCB0aXRsZSA9IGh0bWxGcmFnbWVudFRvVGV4dChhbmNob3IuaHRtbCgpID8/IFwiXCIpO1xuICAgIGlmICghdXJsIHx8ICF0aXRsZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNuaXBwZXRFbGVtZW50ID0gYW5jaG9yLmNsb3Nlc3QoXCIucmVzdWx0XCIpLmZpbmQoXCIucmVzdWx0X19zbmlwcGV0XCIpLmZpcnN0KCk7XG4gICAgY29uc3Qgc25pcHBldCA9IGh0bWxGcmFnbWVudFRvVGV4dChzbmlwcGV0RWxlbWVudC5odG1sKCkgPz8gXCJcIik7XG4gICAgY2l0YXRpb25zLnB1c2goeyB1cmwsIHRpdGxlLCAuLi4oc25pcHBldCA/IHsgc25pcHBldCB9IDoge30pIH0pO1xuICB9KTtcbiAgcmV0dXJuIGNpdGF0aW9ucztcbn1cblxuLyoqXG4gKiBSdW4gYSBzY3JhcGluZyBzZWFyY2ggb3ZlciBEdWNrRHVja0dvLiBSZXR1cm5zIHRoZSBzYW1lXG4gKiB7QGxpbmsgV2ViU2VhcmNoUmVzdWx0fSBzaGFwZSBhcyB0aGUgbmF0aXZlIHBhdGgsIHdpdGggYG1vZGVsYCBzZXQgdG9cbiAqIGBcInNjcmFwZTpkdWNrZHVja2dvXCJgIHNvIGNhbGxlcnMgY2FuIHRlbGwgaG93IHRoZSByZXN1bHQgd2FzIHByb2R1Y2VkLlxuICogQ2l0YXRpb25zIGFyZSBmaWx0ZXJlZCB0aHJvdWdoIHRoZSBjb25maWd1cmVkIFVSTCBhbGxvdy1saXN0LiBgc2lnbmFsYFxuICogY2FuY2VscyB0aGUgaW4tZmxpZ2h0IHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5TY3JhcGVTZWFyY2goXG4gIHJlcXVlc3Q6IFdlYlNlYXJjaFJlcXVlc3QsXG4gIHJ1bnRpbWVPckNvbmZpZzogV2ViU2VhcmNoUnVudGltZUlucHV0LFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8V2ViU2VhcmNoUmVzdWx0PiB7XG4gIGNvbnN0IHJ1bnRpbWUgPSB0b1dlYlNlYXJjaFJ1bnRpbWUocnVudGltZU9yQ29uZmlnKTtcbiAgY29uc3QgeyBjb25maWcgfSA9IHJ1bnRpbWU7XG4gIGNvbnN0IHBhZ2UgPSBhd2FpdCBleGVjdXRlUmVhZChcbiAgICBydW50aW1lLFxuICAgIFwic2NyYXBlLXNlYXJjaFwiLFxuICAgIHRvQ2FsbFNldHRpbmdzKHNjcmFwZVNlYXJjaEV4ZWN1dGVEZWZhdWx0cywgY29uZmlnLnRpbWVvdXRNcywgW1xuICAgICAgXCJ3ZWItc2VhcmNoXCIsXG4gICAgICBcInNjcmFwZVwiLFxuICAgICAgcmVxdWVzdC5xdWVyeSxcbiAgICBdKSxcbiAgICBhc3luYyAoZXhlY3V0ZVNpZ25hbCk6IFByb21pc2U8eyBib2R5OiBzdHJpbmc7IHN0YXR1c0NvZGU6IG51bWJlciB9PiA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdvdFNjcmFwaW5nKHtcbiAgICAgICAgdXJsOiBgJHtEREdfSFRNTF9VUkx9P3E9JHtlbmNvZGVVUklDb21wb25lbnQocmVxdWVzdC5xdWVyeSl9YCxcbiAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAvLyBnb3QncyBvd24gdGltZW91dCBhYm9ydHMgdGhlIHNvY2tldCBhbmQgcmVwb3J0cyB3aGljaCBwaGFzZSB0aW1lZFxuICAgICAgICAvLyBvdXQ7IHRoZSBpbnRlcmNlcHRvciB0aW1lb3V0IGJvdW5kcyB0aGUgd2hvbGUgYXR0ZW1wdCBhcm91bmQgaXQuXG4gICAgICAgIHRpbWVvdXQ6IHsgcmVxdWVzdDogY29uZmlnLnRpbWVvdXRNcyB9LFxuICAgICAgICB0aHJvd0h0dHBFcnJvcnM6IGZhbHNlLFxuICAgICAgICBmb2xsb3dSZWRpcmVjdDogdHJ1ZSxcbiAgICAgICAgLi4uKGV4ZWN1dGVTaWduYWwgPyB7IHNpZ25hbDogZXhlY3V0ZVNpZ25hbCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBib2R5OiB0eXBlb2YgcmVzcG9uc2UuYm9keSA9PT0gXCJzdHJpbmdcIiA/IHJlc3BvbnNlLmJvZHkgOiBTdHJpbmcocmVzcG9uc2UuYm9keSA/PyBcIlwiKSxcbiAgICAgICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBzaWduYWwsXG4gICk7XG4gIGNvbnN0IGFsbCA9IHBhcnNlRGRnSHRtbChwYWdlLmJvZHkpO1xuICBjb25zdCBwZXJtaXR0ZWQgPSBhbGwuZmlsdGVyKChjKSA9PiBjb25maWcuYWxsb3dMaXN0LmFsbG93cyhjLnVybCkpO1xuICBjb25zdCBjaXRhdGlvbnMgPSBwZXJtaXR0ZWQuc2xpY2UoMCwgY29uZmlnLm1heENpdGF0aW9ucyk7XG4gIGNvbnN0IGFuc3dlciA9XG4gICAgY2l0YXRpb25zLmxlbmd0aCA+IDBcbiAgICAgID8gYFdlYiByZXN1bHRzIGZvciBcIiR7cmVxdWVzdC5xdWVyeX1cIiAobm8gRGF0YWJyaWNrcyB3ZWItc2VhcmNoIG1vZGVsIGlzIGRlcGxveWVkIGluIHRoaXMgd29ya3NwYWNlLCBzbyB0aGVzZSBhcmUgdW5zeW50aGVzaXplZCBzZWFyY2ggcmVzdWx0cyAtIHJlYWQgdGhlIGNpdGF0aW9ucyk6XFxuXFxuYCArXG4gICAgICAgIGNpdGF0aW9uc1xuICAgICAgICAgIC5tYXAoKGMsIG4pID0+IGAke24gKyAxfS4gJHtjLnRpdGxlfSR7Yy5zbmlwcGV0ID8gYCAtICR7Yy5zbmlwcGV0fWAgOiBcIlwifSAoJHtjLnVybH0pYClcbiAgICAgICAgICAuam9pbihcIlxcblwiKVxuICAgICAgOiBgTm8gd2ViIHJlc3VsdHMgZm91bmQgZm9yIFwiJHtyZXF1ZXN0LnF1ZXJ5fVwiLmA7XG4gIGxvZ2dlci5kZWJ1ZyhcInNjcmFwZWRcIiwge1xuICAgIHF1ZXJ5OiByZXF1ZXN0LnF1ZXJ5LFxuICAgIGZvdW5kOiBhbGwubGVuZ3RoLFxuICAgIHJldHVybmVkOiBjaXRhdGlvbnMubGVuZ3RoLFxuICAgIHN0YXR1czogcGFnZS5zdGF0dXNDb2RlLFxuICB9KTtcbiAgcmV0dXJuIHsgcXVlcnk6IHJlcXVlc3QucXVlcnksIGFuc3dlciwgY2l0YXRpb25zLCBtb2RlbDogXCJzY3JhcGU6ZHVja2R1Y2tnb1wiIH07XG59XG4iXX0=
|