@dbx-tools/model 0.6.72 → 0.6.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/src/resolve.d.ts +4 -5
- package/lib/src/resolve.js +6 -7
- package/package.json +4 -4
- package/src/resolve.ts +5 -6
package/lib/src/resolve.d.ts
CHANGED
|
@@ -132,11 +132,10 @@ export declare function searchModels(client: WorkspaceClientLike, host: string,
|
|
|
132
132
|
* point for any consumer that holds a `WorkspaceClient` and just wants a usable
|
|
133
133
|
* model name - a Lakeflow job, a one-off script, or the Mastra plugin alike.
|
|
134
134
|
*
|
|
135
|
-
* Cheap exit: when an `explicit` name is given
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* message instead of a silent fallback.
|
|
135
|
+
* Cheap exit: when an `explicit` name is given, `fuzzy` is off, and tool
|
|
136
|
+
* capability is not required, the catalogue is never fetched. Catalogue
|
|
137
|
+
* fetches otherwise fail loud: network / auth errors propagate so the caller
|
|
138
|
+
* sees the real SDK message instead of a silent fallback.
|
|
140
139
|
*
|
|
141
140
|
* @param host - Workspace host used as the cache key. Pass the value resolved
|
|
142
141
|
* from `client.config.getHost()`.
|
package/lib/src/resolve.js
CHANGED
|
@@ -150,17 +150,16 @@ export async function searchModels(client, host, input = {}) {
|
|
|
150
150
|
* point for any consumer that holds a `WorkspaceClient` and just wants a usable
|
|
151
151
|
* model name - a Lakeflow job, a one-off script, or the Mastra plugin alike.
|
|
152
152
|
*
|
|
153
|
-
* Cheap exit: when an `explicit` name is given
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
* message instead of a silent fallback.
|
|
153
|
+
* Cheap exit: when an `explicit` name is given, `fuzzy` is off, and tool
|
|
154
|
+
* capability is not required, the catalogue is never fetched. Catalogue
|
|
155
|
+
* fetches otherwise fail loud: network / auth errors propagate so the caller
|
|
156
|
+
* sees the real SDK message instead of a silent fallback.
|
|
158
157
|
*
|
|
159
158
|
* @param host - Workspace host used as the cache key. Pass the value resolved
|
|
160
159
|
* from `client.config.getHost()`.
|
|
161
160
|
*/
|
|
162
161
|
export async function selectModel(client, host, input = {}) {
|
|
163
|
-
if (input.explicit !== undefined && input.fuzzy === false) {
|
|
162
|
+
if (input.explicit !== undefined && input.fuzzy === false && !input.requiresTools) {
|
|
164
163
|
return { modelId: input.explicit, source: "explicit" };
|
|
165
164
|
}
|
|
166
165
|
const endpoints = await listServingEndpoints(client, host, {
|
|
@@ -252,4 +251,4 @@ function pickFirstAvailable(candidates, endpoints) {
|
|
|
252
251
|
}
|
|
253
252
|
return candidates[0] ?? FALLBACK_MODEL_IDS[0];
|
|
254
253
|
}
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXNvbHZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQ0wsUUFBUSxHQUtULE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixzQkFBc0IsR0FJdkIsTUFBTSxjQUFjLENBQUM7QUF1RHRCOzs7OztHQUtHO0FBQ0gsU0FBUyxXQUFXLENBQUMsS0FBeUI7SUFDNUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLFNBQTRDLEVBQzVDLFFBQW9CLEVBQUU7SUFFdEIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sUUFBUSxHQUNaLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO0lBRXpGLHlFQUF5RTtJQUN6RSw2Q0FBNkM7SUFDN0MsTUFBTSxVQUFVLEdBQWtCLEVBQUUsQ0FBQztJQUNyQyxLQUFLLE1BQU0sVUFBVSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLEtBQUssTUFBTSxRQUFR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RSxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsT0FBTyxtQ0FBbUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGtCQUFrQixDQUN6QixVQUE2QixFQUM3QixTQUE0QztJQUU1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN0RCxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ25DLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFFLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV29ya3NwYWNlLWF3YXJlIG1vZGVsIHNlbGVjdGlvbi5cbiAqXG4gKiBHaXZlbiBhIGNhbGxlcidzIGludGVudCAtIGEgc2VhcmNoIHN0cmluZywgYSBjYXBhYmlsaXR5IHtAbGluayBNb2RlbENsYXNzfVxuICogY2VpbGluZywgYm90aCwgb3Igbm90aGluZyAtIHRoZSB0b29sa2l0IHJldHVybnMgbWF0Y2hpbmcgZW5kcG9pbnRzIHJhbmtlZCBieVxuICogbWF0Y2ggcXVhbGl0eSB0aGVuIGNsYXNzLCBvciBjb2xsYXBzZXMgdG8gdGhlIHNpbmdsZSBiZXN0IGlkIHRoZSB3b3Jrc3BhY2VcbiAqIGFjdHVhbGx5IGhhcywgZGVncmFkaW5nIGZyb20gXCJiZXN0IGluIHJhbmdlXCIgZG93biB0byB0aGUgc3RhdGljIGZhbGxiYWNrXG4gKiBmbG9vci4gU2VsZWN0aW9uIGlzIGNoYXQtb25seTogZW1iZWRkaW5nIGVuZHBvaW50cyBzdXJmYWNlIG9ubHkgd2hlblxuICogYG1vZGVsQ2xhc3NgIGlzIGV4cGxpY2l0bHkge0BsaW5rIE1vZGVsQ2xhc3MuRW1iZWRkaW5nfS5cbiAqXG4gKiBUd28gc2hhcGVzIG9mIHNlbGVjdGlvbiwgZWFjaCBpbiBhIHB1cmUgZm9ybSAob3ZlciBhbiBlbmRwb2ludCBsaXN0IHRoZVxuICogY2FsbGVyIGFscmVhZHkgaG9sZHMpIGFuZCBhbiBJL08gd3JhcHBlciAodGhhdCBsaXN0cyBgL3NlcnZpbmctZW5kcG9pbnRzYFxuICogZmlyc3QpOiByYW5raW5nLCB3aGljaCByZXR1cm5zIGEgbWF0Y2gtIHRoZW4gY2xhc3Mtb3JkZXJlZCBsaXN0LCBhbmRcbiAqIHNpbmdsZS1zZWxlY3Rpb24sIHdoaWNoIGNvbGxhcHNlcyB0byBvbmUgaWQgcGx1cyBob3cgaXQgd2FzIHJlYWNoZWQgYW5kXG4gKiBsYXllcnMgdGhlIG9wZXJhdG9yLXBpbm5lZCBmYWxsYmFjayAvIHN0YXRpYy1mbG9vciBzYWZldHkgbmV0IG9uIHRvcC4gQSBjaGF0XG4gKiBgbW9kZWxDbGFzc2AgYWN0cyBhcyBhIGNlaWxpbmc6IHRoYXQgYmFuZCBhbmQgdGhlIGxlc3MtY2FwYWJsZSBjaGF0IGJhbmRzXG4gKiBiZWxvdyBpdCBhcmUgZWxpZ2libGUgKHNlZSB7QGxpbmsgY2xhc3Nlc0F0T3JCZWxvd30pLCBzbyBhIGBjaGF0LWJhbGFuY2VkYFxuICogYXNrIGNhbiBmYWxsIHRvIGBjaGF0LWZhc3RgIGJ1dCBuZXZlciBlc2NhbGF0ZSB0byBgY2hhdC10aGlua2luZ2AuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IG9iamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICBjbGFzc2lmeSxcbiAgbW9kZWwsXG4gIHR5cGUgTW9kZWxRdWVyeSxcbiAgdHlwZSBSYW5rZWRNb2RlbCxcbiAgdHlwZSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcblxuaW1wb3J0IHsgQ0hBVF9DTEFTU19PUkRFUiwgY2xhc3Nlc0F0T3JCZWxvdywgTU9ERUxfQ0xBU1NfT1JERVIgfSBmcm9tIFwiLi9jbGFzc2VzLnRzXCI7XG5pbXBvcnQgeyBGQUxMQkFDS19NT0RFTF9JRFMsIG1vZGVsc0ZvckNsYXNzIH0gZnJvbSBcIi4vZmFsbGJhY2sudHNcIjtcbmltcG9ydCB7XG4gIGxpc3RTZXJ2aW5nRW5kcG9pbnRzLFxuICBzZWFyY2hTZXJ2aW5nRW5kcG9pbnRzLFxuICB0eXBlIFJlc29sdmVkTW9kZWwsXG4gIHR5cGUgUmVzb2x2ZU1vZGVsT3B0aW9ucyxcbiAgdHlwZSBXb3Jrc3BhY2VDbGllbnRMaWtlLFxufSBmcm9tIFwiLi9zZXJ2aW5nLnRzXCI7XG5cbnR5cGUgTW9kZWxDbGFzcyA9IG1vZGVsLk1vZGVsQ2xhc3M7XG5cbi8qKiBDYWxsZXIgaW50ZW50IHBhc3NlZCB0byB7QGxpbmsgcmVzb2x2ZU1vZGVsfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZU1vZGVsSW5wdXQge1xuICAvKipcbiAgICogRXhwbGljaXQgbW9kZWwgaWQgLyBsb29zZSBuYW1lIChwZXItcmVxdWVzdCBvdmVycmlkZSwgYWdlbnQgLyBwbHVnaW5cbiAgICogZGVmYXVsdCwgb3IgZW52IHZhcikuIFdoZW4gc2V0IGl0IHdpbnMgb3ZlciBgbW9kZWxDbGFzc2AgYW5kIGBmYWxsYmFja3NgLlxuICAgKi9cbiAgZXhwbGljaXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGdXp6eS1tYXRjaCBhbiBgZXhwbGljaXRgIG5hbWUgYWdhaW5zdCB0aGUgbGl2ZSBjYXRhbG9ndWUgc28gbG9vc2UgbmFtZXNcbiAgICogbGlrZSBgXCJjbGF1ZGUgc29ubmV0XCJgIHJlc29sdmUuIERlZmF1bHQgYHRydWVgLiBXaGVuIGBmYWxzZWAgdGhlIGV4cGxpY2l0XG4gICAqIGlucHV0IGlzIHJldHVybmVkIHZlcmJhdGltIChEYXRhYnJpY2tzIHN1cmZhY2VzIHRoZSBjYW5vbmljYWwgNDA0IGlmIGl0XG4gICAqIGRvZXNuJ3QgZXhpc3QpLlxuICAgKi9cbiAgZnV6enk/OiBib29sZWFuO1xuICAvKiogRnVzZS5qcyB0aHJlc2hvbGQgZm9yd2FyZGVkIHRvIHRoZSBmdXp6eSBgc2VhcmNoYCBtYXRjaCAoe0BsaW5rIHNlYXJjaFNlcnZpbmdFbmRwb2ludHN9KS4gKi9cbiAgdGhyZXNob2xkPzogbnVtYmVyO1xuICAvKiogUmVxdWlyZSBhIG1vZGVsIHRoYXQgc3VwcG9ydHMgYSBjb21wbGV0ZSBmdW5jdGlvbi10b29sIHJvdW5kLXRyaXAuICovXG4gIHJlcXVpcmVzVG9vbHM/OiBib29sZWFuO1xuICAvKipcbiAgICogQ2hhdCBjYXBhYmlsaXR5IGNsYXNzIHRvIHJlc29sdmUgd2hlbiBubyBgZXhwbGljaXRgIGlkIGlzIGdpdmVuLiBUaGUgbGl2ZVxuICAgKiBjYXRhbG9ndWUgaXMgY2xhc3NpZmllZCBieSBpdHMgRm91bmRhdGlvbiBNb2RlbCBBUEkgc2NvcmVzIGFuZCB0aGUgdG9wXG4gICAqIGF2YWlsYWJsZSBtb2RlbCBpbiB0aGUgY2xhc3MgKGFuZCB0aGUgY2hhdCBiYW5kcyBiZWxvdyBpdCkgd2lucywgZmFsbGluZ1xuICAgKiBiYWNrIHRvIHRoZSBjbGFzcydzIHNtYWxsIHN0YXRpYyBsaXN0LlxuICAgKi9cbiAgbW9kZWxDbGFzcz86IE1vZGVsQ2xhc3M7XG4gIC8qKlxuICAgKiBPcGVyYXRvci1zdXBwbGllZCBmYWxsYmFjayBpZHMgdHJpZWQgKmZpcnN0KiBpbiB0aGUgbm8tZXhwbGljaXQsIG5vLWNsYXNzXG4gICAqIHBhdGggKGUuZy4gYSByZWd1bGF0ZWQgd29ya3NwYWNlIHBpbm5lZCB0byBhbiBhcHByb3ZlZCBzdWJzZXQpLCBhaGVhZCBvZlxuICAgKiB0aGUgYXV0by1jbGFzc2lmaWVkIGNhdGFsb2d1ZS5cbiAgICovXG4gIGZhbGxiYWNrcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKiogT3V0Y29tZSBvZiB7QGxpbmsgcmVzb2x2ZU1vZGVsfTogdGhlIGNob3NlbiBpZCBwbHVzIGhvdyBpdCB3YXMgcmVhY2hlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRNb2RlbFNlbGVjdGlvbiB7XG4gIG1vZGVsSWQ6IHN0cmluZztcbiAgc291cmNlOiBcImV4cGxpY2l0XCIgfCBcImZ1enp5LW1hdGNoXCIgfCBcImNsYXNzXCIgfCBcImZhbGxiYWNrXCI7XG59XG5cbi8qKiBJbnRlbnQgKyBjYXRhbG9ndWUga25vYnMgcGFzc2VkIHRvIHtAbGluayBzZWxlY3RNb2RlbH0uICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdE1vZGVsSW5wdXQgZXh0ZW5kcyBSZXNvbHZlTW9kZWxJbnB1dCB7XG4gIC8qKiBUVEwgb3ZlcnJpZGUgZm9yIHRoZSBjYWNoZWQgYC9zZXJ2aW5nLWVuZHBvaW50c2AgbGlzdGluZywgaW4gbXMuICovXG4gIHR0bE1zPzogbnVtYmVyO1xufVxuXG4vKiogVFRMIG92ZXJyaWRlIG1lcmdlZCBpbnRvIGEge0BsaW5rIE1vZGVsUXVlcnl9IGZvciB7QGxpbmsgc2VhcmNoTW9kZWxzfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoTW9kZWxzSW5wdXQgZXh0ZW5kcyBNb2RlbFF1ZXJ5IHtcbiAgLyoqIFRUTCBvdmVycmlkZSBmb3IgdGhlIGNhY2hlZCBgL3NlcnZpbmctZW5kcG9pbnRzYCBsaXN0aW5nLCBpbiBtcy4gKi9cbiAgdHRsTXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUm91bmQgYSBGdXNlIHNjb3JlIHRvIHRoZSBkaXNwbGF5IHByZWNpc2lvbiBzbyB2ZXJzaW9uIHNpYmxpbmdzIHRoYXQgbWF0Y2ggYVxuICogdG9rZW4gaWRlbnRpY2FsbHkgKGUuZy4gYG9wdXMtNC03YCB2cyBgb3B1cy00LThgIGZvciB0aGUgcXVlcnkgYFwib3B1c1wiYCkgdGllXG4gKiBvbiBtYXRjaCBhbmQgbGV0IHRoZSBjbGFzcyAvIHdpdGhpbi1jbGFzcyByYW5rIGRlY2lkZSAtIHdoaWNoIGlzIHdoYXRcbiAqIHN1cmZhY2VzIHRoZSBuZXdlciwgaGlnaGVyLXF1YWxpdHkgc2libGluZy5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hCdWNrZXQoc2NvcmU6IG51bWJlciB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLnJvdW5kKChzY29yZSA/PyAwKSAqIDEwMDApO1xufVxuXG4vKipcbiAqIFJhbmsgdGhlIGxpdmUgY2F0YWxvZ3VlIGFnYWluc3QgYSB7QGxpbmsgTW9kZWxRdWVyeX0sIGJlc3QtZmlyc3QuXG4gKlxuICogQ2FuZGlkYXRlcyBhcmUgdGhlIGNsYXNzaWZpZWQgZW5kcG9pbnRzIGluIHRoZSBlbGlnaWJsZSBjbGFzc2VzOlxuICoge0BsaW5rIGNsYXNzZXNBdE9yQmVsb3d9IHRoZSByZXF1ZXN0ZWQgYG1vZGVsQ2xhc3NgLCBvciAtIHdoZW4gbm9uZSBpcyBnaXZlblxuICogLSB0aGUgY2hhdCBiYW5kcyBvbmx5ICh7QGxpbmsgQ0hBVF9DTEFTU19PUkRFUn0pLCBzbyBhIGdlbmVyYWwgYXNrIG5ldmVyXG4gKiBzdXJmYWNlcyBhbiBlbWJlZGRpbmcgZW5kcG9pbnQuIEVhY2ggY2xhc3MgYnVja2V0IGlzIGFscmVhZHkgYmVzdC1maXJzdCBmcm9tXG4gKiB7QGxpbmsgY2xhc3NpZnkuY2xhc3NpZnlFbmRwb2ludHN9LiBSYW5raW5nIGlzICoqbWF0Y2ggdGhlbiBjbGFzcyoqOlxuICpcbiAqIDEuIFdpdGggYSBgc2VhcmNoYCwgb25seSBlbmRwb2ludHMgbWF0Y2hpbmcgaXQgc3Vydml2ZSwgb3JkZXJlZCBieSBtYXRjaFxuICogICAgZGlzdGFuY2UgKGJ1Y2tldGVkIHZpYSB7QGxpbmsgbWF0Y2hCdWNrZXR9IHNvIG5lYXItaWRlbnRpY2FsIHNjb3JlcyB0aWUpLFxuICogICAgdGhlbiBieSBjbGFzcyAobW9yZSBjYXBhYmxlIGZpcnN0KSwgdGhlbiBieSB0aGUgc3RhYmxlIHdpdGhpbi1jbGFzcyByYW5rLlxuICogMi4gV2l0aG91dCBhIGBzZWFyY2hgLCB0aGUgY2xhc3MtdGhlbi1yYW5rIGNhbmRpZGF0ZSBvcmRlciBzdGFuZHMuXG4gKlxuICogQSBgbGltaXRgIHRydW5jYXRlcyB0aGUgcmVzdWx0LiBSZXR1cm5zIGBbXWAgd2hlbiBub3RoaW5nIGlzIGVsaWdpYmxlIG9yXG4gKiBtYXRjaGVzIC0gY2FsbGVycyBsYXllciB0aGVpciBvd24gZmFsbGJhY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5rTW9kZWxzKFxuICBlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbiAgcXVlcnk6IE1vZGVsUXVlcnkgPSB7fSxcbik6IFJhbmtlZE1vZGVsW10ge1xuICBjb25zdCBjbGFzc2lmaWVkID0gY2xhc3NpZnkuY2xhc3NpZnlFbmRwb2ludHMoZW5kcG9pbnRzKTtcbiAgY29uc3QgZWxpZ2libGUgPVxuICAgIHF1ZXJ5Lm1vZGVsQ2xhc3MgIT09IHVuZGVmaW5lZCA/IGNsYXNzZXNBdE9yQmVsb3cocXVlcnkubW9kZWxDbGFzcykgOiBDSEFUX0NMQVNTX09SREVSO1xuXG4gIC8vIEZsYXR0ZW4gZWxpZ2libGUgY2xhc3NlcyBpbiBjYXBhYmlsaXR5IG9yZGVyLCBjYXJyeWluZyBlYWNoIGVuZHBvaW50J3NcbiAgLy8gY2xhc3M7IGJ1Y2tldCBvcmRlciBpcyBhbHJlYWR5IGJlc3QtZmlyc3QuXG4gIGNvbnN0IGNhbmRpZGF0ZXM6IFJhbmtlZE1vZGVsW10gPSBbXTtcbiAgZm9yIChjb25zdCBtb2RlbENsYXNzIG9mIGVsaWdpYmxlKSB7XG4gICAgZm9yIChjb25zdCBlbmRwb2ludCBvZiBjbGFzc2lmaWVkW21vZGVsQ2xhc3NdKSB7XG4gICAgICBpZiAocXVlcnkucmVxdWlyZXNUb29scyAmJiAhY2xhc3NpZnkuZW5kcG9pbnRDYXBhYmlsaXRpZXMoZW5kcG9pbnQpLnRvb2xzKSBjb250aW51ZTtcbiAgICAgIGNhbmRpZGF0ZXMucHVzaCh7IGVuZHBvaW50LCBtb2RlbENsYXNzIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlYXJjaCA9IHF1ZXJ5LnNlYXJjaD8udHJpbSgpO1xuICBsZXQgcmFua2VkOiBSYW5rZWRNb2RlbFtdO1xuICBpZiAoc2VhcmNoKSB7XG4gICAgY29uc3Qgc2NvcmVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIHNlYXJjaFNlcnZpbmdFbmRwb2ludHMoXG4gICAgICBzZWFyY2gsXG4gICAgICBjYW5kaWRhdGVzLm1hcCgoYykgPT4gYy5lbmRwb2ludCksXG4gICAgICBxdWVyeS50aHJlc2hvbGQgIT09IHVuZGVmaW5lZCA/IHsgdGhyZXNob2xkOiBxdWVyeS50aHJlc2hvbGQgfSA6IHt9LFxuICAgICkpIHtcbiAgICAgIHNjb3Jlcy5zZXQobWF0Y2guZW5kcG9pbnQubmFtZSwgbWF0Y2guc2NvcmUpO1xuICAgIH1cbiAgICAvLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgIGlzIHN0YWJsZSwgc28gZW5kcG9pbnRzIGVxdWFsIG9uIG1hdGNoIGFuZCBjbGFzc1xuICAgIC8vIGtlZXAgdGhlaXIgYmVzdC1maXJzdCB3aXRoaW4tY2xhc3Mgb3JkZXIuXG4gICAgcmFua2VkID0gY2FuZGlkYXRlc1xuICAgICAgLmZpbHRlcigoYykgPT4gc2NvcmVzLmhhcyhjLmVuZHBvaW50Lm5hbWUpKVxuICAgICAgLm1hcCgoYykgPT4gKHsgLi4uYywgc2NvcmU6IHNjb3Jlcy5nZXQoYy5lbmRwb2ludC5uYW1lKSB9KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ5TWF0Y2ggPSBtYXRjaEJ1Y2tldChhLnNjb3JlKSAtIG1hdGNoQnVja2V0KGIuc2NvcmUpO1xuICAgICAgICBpZiAoYnlNYXRjaCAhPT0gMCkgcmV0dXJuIGJ5TWF0Y2g7XG4gICAgICAgIHJldHVybiBNT0RFTF9DTEFTU19PUkRFUi5pbmRleE9mKGEubW9kZWxDbGFzcykgLSBNT0RFTF9DTEFTU19PUkRFUi5pbmRleE9mKGIubW9kZWxDbGFzcyk7XG4gICAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByYW5rZWQgPSBjYW5kaWRhdGVzO1xuICB9XG5cbiAgcmV0dXJuIHF1ZXJ5LmxpbWl0ICE9PSB1bmRlZmluZWQgPyByYW5rZWQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgcXVlcnkubGltaXQpKSA6IHJhbmtlZDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZSB7QGxpbmsgcmFua01vZGVsc30gdG8gYSBzaW5nbGUgaWQ6IHRoZSBjbG9zZXN0IGVuZHBvaW50IHRvIGBzZWFyY2hgXG4gKiBpbiBhIGNhdGFsb2d1ZSBzbmFwc2hvdCwgb3IgdGhlIGlucHV0IHZlcmJhdGltIHdoZW4gbm90aGluZyBzY29yZXMgd2l0aGluIHRoZVxuICogdGhyZXNob2xkLlxuICpcbiAqIFRoZSByYW5rLWJhc2VkIGNvdW50ZXJwYXJ0IHRvIHRoZSBGdXNlLW9ubHkge0BsaW5rIHJlc29sdmVNb2RlbElkfTogZXF1YWxcbiAqIG1hdGNoIHNjb3JlcyBhcmUgYnJva2VuIGJ5IGNsYXNzIGFuZCB0aGVuIHdpdGhpbi1jbGFzcyB2ZXJzaW9uLCBzbyBhIGxvb3NlXG4gKiBgXCJvcHVzXCJgIHByZWZlcnMgYG9wdXMtNWAgb3ZlciBgb3B1cy00LTdgIGluc3RlYWQgb2YgcGlja2luZyB3aGljaGV2ZXJcbiAqIHNpYmxpbmcgRnVzZSBoYXBwZW5lZCB0byBvcmRlciBmaXJzdC4gUmV0dXJuaW5nIHRoZSBpbnB1dCB1bm1hdGNoZWQgKHJhdGhlclxuICogdGhhbiBhIG5lYXIgbmVpZ2hib3VyKSBpcyBkZWxpYmVyYXRlIC0gYSBkZWxpYmVyYXRlIGVuZHBvaW50IGlkIGlzIG5ldmVyXG4gKiBzaWxlbnRseSByZXdyaXR0ZW4sIGFuZCBEYXRhYnJpY2tzIHN1cmZhY2VzIGEgY2xlYW4gNDA0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFua01vZGVsSWQoXG4gIGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLFxuICBzZWFyY2g6IHN0cmluZyxcbiAgb3B0aW9uczogUmVzb2x2ZU1vZGVsT3B0aW9ucyA9IHt9LFxuKTogUmVzb2x2ZWRNb2RlbCB7XG4gIGNvbnN0IFt0b3BdID0gcmFua01vZGVscyhlbmRwb2ludHMsIHtcbiAgICBzZWFyY2gsXG4gICAgbGltaXQ6IDEsXG4gICAgLi4uKG9wdGlvbnMudGhyZXNob2xkICE9PSB1bmRlZmluZWQgPyB7IHRocmVzaG9sZDogb3B0aW9ucy50aHJlc2hvbGQgfSA6IHt9KSxcbiAgICAuLi4ob3B0aW9ucy5yZXF1aXJlc1Rvb2xzICE9PSB1bmRlZmluZWQgPyB7IHJlcXVpcmVzVG9vbHM6IG9wdGlvbnMucmVxdWlyZXNUb29scyB9IDoge30pLFxuICB9KTtcbiAgaWYgKCF0b3ApIHJldHVybiB7IG1vZGVsSWQ6IHNlYXJjaCwgbWF0Y2hlZDogZmFsc2UgfTtcbiAgcmV0dXJuIHsgbW9kZWxJZDogdG9wLmVuZHBvaW50Lm5hbWUsIG1hdGNoZWQ6IHRydWUsIHNjb3JlOiB0b3Auc2NvcmUgfTtcbn1cblxuLyoqXG4gKiB7QGxpbmsgcmFua01vZGVsSWR9IGFnYWluc3QgYSBjYXRhbG9ndWUgdGhlIGNhbGxlciBtYXkgYmUgaG9sZGluZyBzdGFsZTpcbiAqIG1hdGNoIHRoZSBsb2FkZWQgc25hcHNob3QsIGFuZCBvbiBhIG1pc3MgcmVsb2FkIG9uY2Ugd2l0aCBgZm9yY2VgIGFuZCBtYXRjaFxuICogYWdhaW4uIFRoYXQgd2F5IGEgbW9kZWwgZGVwbG95ZWQgYWZ0ZXIgdGhlIGNhdGFsb2d1ZSB3YXMgY2FjaGVkIHN0aWxsXG4gKiByZXNvbHZlcyBvbiBmaXJzdCB1c2UsIHdpdGhvdXQgYSByZXN0YXJ0IGFuZCB3aXRob3V0IGdpdmluZyB1cCBjYWNoaW5nLlxuICpcbiAqIFRoZSBjYXRhbG9ndWUgYXJyaXZlcyBhcyBhIGxvYWRlciByYXRoZXIgdGhhbiBhIGNsaWVudCBzbyB0aGUgY2FsbGVyIGtlZXBzXG4gKiBvd25lcnNoaXAgb2YgKmhvdyogaXQgaXMgY2FjaGVkIC0ge0BsaW5rIGxpc3RTZXJ2aW5nRW5kcG9pbnRzfSBhbmQgaXRzXG4gKiBgQ2FjaGVNYW5hZ2VyYCwgYSBwbGFpbiBwcm9jZXNzLWxpZmV0aW1lIGZpZWxkIGluIGEgQ0xJLCBvciBhIHRlc3QgZG91YmxlLlxuICogT25seSBvbmUgcmVsb2FkIGlzIGF0dGVtcHRlZDogYSBnZW51aW5lbHkgdW5rbm93biBuYW1lIHNob3VsZCBmYWlsIGZhc3RcbiAqIHJhdGhlciB0aGFuIHJlLWxpc3Qgb24gZXZlcnkgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gbG9hZCAtIFJldHVybnMgdGhlIGNhdGFsb2d1ZTsgYGZvcmNlYCBhc2tzIGl0IHRvIGJ5cGFzcyBpdHMgY2FjaGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByYW5rTW9kZWxJZExpdmUoXG4gIGxvYWQ6IChmb3JjZTogYm9vbGVhbikgPT4gUHJvbWlzZTxyZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10+LFxuICBzZWFyY2g6IHN0cmluZyxcbiAgb3B0aW9uczogUmVzb2x2ZU1vZGVsT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxSZXNvbHZlZE1vZGVsPiB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmFua01vZGVsSWQoYXdhaXQgbG9hZChmYWxzZSksIHNlYXJjaCwgb3B0aW9ucyk7XG4gIGlmIChyZXNvbHZlZC5tYXRjaGVkKSByZXR1cm4gcmVzb2x2ZWQ7XG4gIHJldHVybiByYW5rTW9kZWxJZChhd2FpdCBsb2FkKHRydWUpLCBzZWFyY2gsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJhbmsgYSB3b3Jrc3BhY2UncyBjYXRhbG9ndWUgaW4gb25lIGNhbGw6IGxpc3QgaXRzIGAvc2VydmluZy1lbmRwb2ludHNgXG4gKiAoY2FjaGVkKSBhbmQgcnVuIHtAbGluayByYW5rTW9kZWxzfSBvdmVyIHRoZSByZXN1bHQuIFRoZSBsaXN0IGNvdW50ZXJwYXJ0IHRvXG4gKiB7QGxpbmsgc2VsZWN0TW9kZWx9LCBmb3IgYSBjb25zdW1lciB0aGF0IHdhbnRzIHRoZSBmdWxsIHJhbmtlZCBzZXQgKGEgbW9kZWxcbiAqIHBpY2tlciwgYSBDTEkpIHJhdGhlciB0aGFuIGEgc2luZ2xlIGlkLiBDYXRhbG9ndWUgZmV0Y2hlcyBmYWlsIGxvdWQ6IG5ldHdvcmtcbiAqIC8gYXV0aCBlcnJvcnMgcHJvcGFnYXRlIHNvIHRoZSBjYWxsZXIgc2VlcyB0aGUgcmVhbCBTREsgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gaG9zdCAtIFdvcmtzcGFjZSBob3N0IHVzZWQgYXMgdGhlIGNhY2hlIGtleS4gUGFzcyB0aGUgdmFsdWUgcmVzb2x2ZWRcbiAqICAgZnJvbSBgY2xpZW50LmNvbmZpZy5nZXRIb3N0KClgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VhcmNoTW9kZWxzKFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudExpa2UsXG4gIGhvc3Q6IHN0cmluZyxcbiAgaW5wdXQ6IFNlYXJjaE1vZGVsc0lucHV0ID0ge30sXG4pOiBQcm9taXNlPFJhbmtlZE1vZGVsW10+IHtcbiAgY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgbGlzdFNlcnZpbmdFbmRwb2ludHMoXG4gICAgY2xpZW50LFxuICAgIGhvc3QsXG4gICAgaW5wdXQudHRsTXMgIT09IHVuZGVmaW5lZCA/IHsgdHRsTXM6IGlucHV0LnR0bE1zIH0gOiB7fSxcbiAgKTtcbiAgcmV0dXJuIHJhbmtNb2RlbHMoZW5kcG9pbnRzLCBpbnB1dCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIG1vZGVsIGlkIGZvciBhIHdvcmtzcGFjZSBpbiBvbmUgY2FsbDogbGlzdCBpdHMgYC9zZXJ2aW5nLWVuZHBvaW50c2BcbiAqIChjYWNoZWQpIGFuZCBydW4ge0BsaW5rIHJlc29sdmVNb2RlbH0gb3ZlciB0aGUgcmVzdWx0LiBUaGlzIGlzIHRoZSBlbnRyeVxuICogcG9pbnQgZm9yIGFueSBjb25zdW1lciB0aGF0IGhvbGRzIGEgYFdvcmtzcGFjZUNsaWVudGAgYW5kIGp1c3Qgd2FudHMgYSB1c2FibGVcbiAqIG1vZGVsIG5hbWUgLSBhIExha2VmbG93IGpvYiwgYSBvbmUtb2ZmIHNjcmlwdCwgb3IgdGhlIE1hc3RyYSBwbHVnaW4gYWxpa2UuXG4gKlxuICogQ2hlYXAgZXhpdDogd2hlbiBhbiBgZXhwbGljaXRgIG5hbWUgaXMgZ2l2ZW4gYW5kIGBmdXp6eWAgaXMgb2ZmLCB0aGVcbiAqIGNhdGFsb2d1ZSBpcyBuZXZlciBmZXRjaGVkIC0gdGhlIG5hbWUgaXMgcmV0dXJuZWQgdmVyYmF0aW0gYW5kIERhdGFicmlja3NcbiAqIHN1cmZhY2VzIHRoZSBjYW5vbmljYWwgNDA0IGlmIGl0IGRvZXNuJ3QgZXhpc3QuIENhdGFsb2d1ZSBmZXRjaGVzIG90aGVyd2lzZVxuICogZmFpbCBsb3VkOiBuZXR3b3JrIC8gYXV0aCBlcnJvcnMgcHJvcGFnYXRlIHNvIHRoZSBjYWxsZXIgc2VlcyB0aGUgcmVhbCBTREtcbiAqIG1lc3NhZ2UgaW5zdGVhZCBvZiBhIHNpbGVudCBmYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0gaG9zdCAtIFdvcmtzcGFjZSBob3N0IHVzZWQgYXMgdGhlIGNhY2hlIGtleS4gUGFzcyB0aGUgdmFsdWUgcmVzb2x2ZWRcbiAqICAgZnJvbSBgY2xpZW50LmNvbmZpZy5nZXRIb3N0KClgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VsZWN0TW9kZWwoXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50TGlrZSxcbiAgaG9zdDogc3RyaW5nLFxuICBpbnB1dDogU2VsZWN0TW9kZWxJbnB1dCA9IHt9LFxuKTogUHJvbWlzZTxSZXNvbHZlZE1vZGVsU2VsZWN0aW9uPiB7XG4gIGlmIChpbnB1dC5leHBsaWNpdCAhPT0gdW5kZWZpbmVkICYmIGlucHV0LmZ1enp5ID09PSBmYWxzZSkge1xuICAgIHJldHVybiB7IG1vZGVsSWQ6IGlucHV0LmV4cGxpY2l0LCBzb3VyY2U6IFwiZXhwbGljaXRcIiB9O1xuICB9XG4gIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGxpc3RTZXJ2aW5nRW5kcG9pbnRzKGNsaWVudCwgaG9zdCwge1xuICAgIC4uLihpbnB1dC50dGxNcyAhPT0gdW5kZWZpbmVkID8geyB0dGxNczogaW5wdXQudHRsTXMgfSA6IHt9KSxcbiAgfSk7XG4gIHJldHVybiByZXNvbHZlTW9kZWwoZW5kcG9pbnRzLCBpbnB1dCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHNpbmdsZSBtb2RlbCBpZCBmcm9tIHRoZSBsaXZlIGNhdGFsb2d1ZSBhbmQgY2FsbGVyIGludGVudCxcbiAqIGRlbGVnYXRpbmcgdGhlIGxpdmUgc2VsZWN0aW9uIHRvIHtAbGluayByYW5rTW9kZWxzfSB3aXRoIGBsaW1pdDogMWAuXG4gKlxuICogMS4gKipFeHBsaWNpdCBhc2sqKjogd2l0aCBgZnV6enlgIG9mZiwgcmV0dXJuZWQgdmVyYmF0aW07IG90aGVyd2lzZVxuICogICAgZnV6enktcmFua2VkIHdpdGhpbiB0aGUgKG9wdGlvbmFsKSBjbGFzcyBjZWlsaW5nIGFuZCB0aGUgYmVzdCB0YWtlbixcbiAqICAgIGZhbGxpbmcgYmFjayB0byB0aGUgaW5wdXQgdmVyYmF0aW0gd2hlbiBub3RoaW5nIG1hdGNoZXMuXG4gKiAyLiAqKk5vIGV4cGxpY2l0IGFzayoqOiBhbiBvcGVyYXRvci1waW5uZWQgYGZhbGxiYWNrYCB0aGF0IGV4aXN0cyBpbiB0aGUgbGl2ZVxuICogICAgY2F0YWxvZ3VlIHdpbnMgZmlyc3Q7IHRoZW4gdGhlIHJhbmtlZCBsaXZlIGNhdGFsb2d1ZSAoY2xhc3MgY2VpbGluZ1xuICogICAgYXBwbGllZCk7IHRoZW4gdGhlIHN0YXRpYyB7QGxpbmsgRkFMTEJBQ0tfTU9ERUxfSURTfSBmbG9vciB3aGVuIHRoZVxuICogICAgY2F0YWxvZ3VlIHlpZWxkcyBub3RoaW5nIGluIHJhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsKFxuICBlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbiAgaW5wdXQ6IFJlc29sdmVNb2RlbElucHV0ID0ge30sXG4pOiBSZXNvbHZlZE1vZGVsU2VsZWN0aW9uIHtcbiAgaWYgKGlucHV0LmV4cGxpY2l0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaW5wdXQuZnV6enkgPT09IGZhbHNlKSB7XG4gICAgICBpZiAoaW5wdXQucmVxdWlyZXNUb29scykgYXNzZXJ0VG9vbFN1cHBvcnQoZW5kcG9pbnRzLCBpbnB1dC5leHBsaWNpdCk7XG4gICAgICByZXR1cm4geyBtb2RlbElkOiBpbnB1dC5leHBsaWNpdCwgc291cmNlOiBcImV4cGxpY2l0XCIgfTtcbiAgICB9XG4gICAgY29uc3QgW3RvcF0gPSByYW5rTW9kZWxzKGVuZHBvaW50cywgYnVpbGRRdWVyeShpbnB1dCwgaW5wdXQuZXhwbGljaXQpKTtcbiAgICBpZiAoaW5wdXQucmVxdWlyZXNUb29scyAmJiAhdG9wKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHRvb2wtY2FwYWJsZSBtb2RlbCBtYXRjaGVzIFwiJHtpbnB1dC5leHBsaWNpdH1cImApO1xuICAgIH1cbiAgICByZXR1cm4geyBtb2RlbElkOiB0b3A/LmVuZHBvaW50Lm5hbWUgPz8gaW5wdXQuZXhwbGljaXQsIHNvdXJjZTogXCJmdXp6eS1tYXRjaFwiIH07XG4gIH1cblxuICAvLyBPcGVyYXRvci1waW5uZWQgZmFsbGJhY2tzIHdpbiB3aGVuIHByZXNlbnQgYW5kIGxpdmUgKGUuZy4gYSByZWd1bGF0ZWRcbiAgLy8gd29ya3NwYWNlIHJlc3RyaWN0ZWQgdG8gYW4gYXBwcm92ZWQgc3Vic2V0KS5cbiAgaWYgKGlucHV0Lm1vZGVsQ2xhc3MgPT09IHVuZGVmaW5lZCAmJiBpbnB1dC5mYWxsYmFja3MgJiYgaW5wdXQuZmFsbGJhY2tzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBwcmVzZW50ID0gbmV3IFNldChcbiAgICAgIGVuZHBvaW50c1xuICAgICAgICAuZmlsdGVyKChlbmRwb2ludCkgPT4gIWlucHV0LnJlcXVpcmVzVG9vbHMgfHwgY2xhc3NpZnkuZW5kcG9pbnRDYXBhYmlsaXRpZXMoZW5kcG9pbnQpLnRvb2xzKVxuICAgICAgICAubWFwKChlbmRwb2ludCkgPT4gZW5kcG9pbnQubmFtZSksXG4gICAgKTtcbiAgICBjb25zdCBwaW5uZWQgPSBpbnB1dC5mYWxsYmFja3MuZmluZCgoaWQpID0+IHByZXNlbnQuaGFzKGlkKSk7XG4gICAgaWYgKHBpbm5lZCkgcmV0dXJuIHsgbW9kZWxJZDogcGlubmVkLCBzb3VyY2U6IFwiZmFsbGJhY2tcIiB9O1xuICB9XG5cbiAgY29uc3Qgc291cmNlID0gaW5wdXQubW9kZWxDbGFzcyAhPT0gdW5kZWZpbmVkID8gXCJjbGFzc1wiIDogXCJmYWxsYmFja1wiO1xuICBjb25zdCBbdG9wXSA9IHJhbmtNb2RlbHMoZW5kcG9pbnRzLCBidWlsZFF1ZXJ5KGlucHV0LCB1bmRlZmluZWQpKTtcbiAgaWYgKHRvcCkgcmV0dXJuIHsgbW9kZWxJZDogdG9wLmVuZHBvaW50Lm5hbWUsIHNvdXJjZSB9O1xuXG4gIC8vIExpdmUgY2F0YWxvZ3VlIHlpZWxkZWQgbm90aGluZyBpbiByYW5nZTogd2FsayB0aGUgc3RhdGljIGZsb29yLlxuICBjb25zdCBmbG9vclNvdXJjZSA9XG4gICAgaW5wdXQubW9kZWxDbGFzcyAhPT0gdW5kZWZpbmVkID8gbW9kZWxzRm9yQ2xhc3MoaW5wdXQubW9kZWxDbGFzcykgOiAoaW5wdXQuZmFsbGJhY2tzID8/IFtdKTtcbiAgY29uc3QgZmxvb3IgPSBvYmplY3Quc2VxdWVuY2UoZmxvb3JTb3VyY2UpLmNvbmNhdChGQUxMQkFDS19NT0RFTF9JRFMpLmRpc3RpbmN0KCkudG9BcnJheSgpO1xuICBpZiAoaW5wdXQucmVxdWlyZXNUb29scykge1xuICAgIGNvbnN0IGF2YWlsYWJsZSA9IG5ldyBTZXQoXG4gICAgICBlbmRwb2ludHNcbiAgICAgICAgLmZpbHRlcigoZW5kcG9pbnQpID0+IGNsYXNzaWZ5LmVuZHBvaW50Q2FwYWJpbGl0aWVzKGVuZHBvaW50KS50b29scylcbiAgICAgICAgLm1hcCgoZW5kcG9pbnQpID0+IGVuZHBvaW50Lm5hbWUpLFxuICAgICk7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBmbG9vci5maW5kKChpZCkgPT4gYXZhaWxhYmxlLmhhcyhpZCkpO1xuICAgIGlmICghc2VsZWN0ZWQpIHRocm93IG5ldyBFcnJvcihcIk5vIHRvb2wtY2FwYWJsZSBtb2RlbCBpcyBhdmFpbGFibGVcIik7XG4gICAgcmV0dXJuIHsgbW9kZWxJZDogc2VsZWN0ZWQsIHNvdXJjZSB9O1xuICB9XG4gIHJldHVybiB7IG1vZGVsSWQ6IHBpY2tGaXJzdEF2YWlsYWJsZShmbG9vciwgZW5kcG9pbnRzKSwgc291cmNlIH07XG59XG5cbi8qKiBCdWlsZCBhIHtAbGluayBNb2RlbFF1ZXJ5fSBmcm9tIHtAbGluayBSZXNvbHZlTW9kZWxJbnB1dH0gZm9yIHRoZSBgbGltaXQ6IDFgIGRlbGVnYXRpb24uICovXG5mdW5jdGlvbiBidWlsZFF1ZXJ5KGlucHV0OiBSZXNvbHZlTW9kZWxJbnB1dCwgc2VhcmNoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBNb2RlbFF1ZXJ5IHtcbiAgcmV0dXJuIHtcbiAgICAuLi4oc2VhcmNoICE9PSB1bmRlZmluZWQgPyB7IHNlYXJjaCB9IDoge30pLFxuICAgIC4uLihpbnB1dC5tb2RlbENsYXNzICE9PSB1bmRlZmluZWQgPyB7IG1vZGVsQ2xhc3M6IGlucHV0Lm1vZGVsQ2xhc3MgfSA6IHt9KSxcbiAgICAuLi4oaW5wdXQucmVxdWlyZXNUb29scyAhPT0gdW5kZWZpbmVkID8geyByZXF1aXJlc1Rvb2xzOiBpbnB1dC5yZXF1aXJlc1Rvb2xzIH0gOiB7fSksXG4gICAgLi4uKGlucHV0LnRocmVzaG9sZCAhPT0gdW5kZWZpbmVkID8geyB0aHJlc2hvbGQ6IGlucHV0LnRocmVzaG9sZCB9IDoge30pLFxuICAgIGxpbWl0OiAxLFxuICB9O1xufVxuXG4vKiogVGhyb3cgd2hlbiBhbiBleHBsaWNpdCBpZCBpcyBhYnNlbnQgb3Igbm90IHZlcmlmaWVkIGZvciBmdW5jdGlvbiB0b29scy4gKi9cbmZ1bmN0aW9uIGFzc2VydFRvb2xTdXBwb3J0KGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLCBtb2RlbElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgZW5kcG9pbnQgPSBlbmRwb2ludHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PT0gbW9kZWxJZCk7XG4gIGlmICghZW5kcG9pbnQgfHwgIWNsYXNzaWZ5LmVuZHBvaW50Q2FwYWJpbGl0aWVzKGVuZHBvaW50KS50b29scykge1xuICAgIHRocm93IG5ldyBFcnJvcihgTW9kZWwgXCIke21vZGVsSWR9XCIgZG9lcyBub3Qgc3VwcG9ydCBmdW5jdGlvbiB0b29sc2ApO1xuICB9XG59XG5cbi8qKlxuICogRmluZCB0aGUgZmlyc3QgaWQgaW4gYGNhbmRpZGF0ZXNgIHdob3NlIGVuZHBvaW50IGlzIHByZXNlbnQgaW4gYGVuZHBvaW50c2AuXG4gKiBSZXR1cm5zIHRoZSB0b3AgY2FuZGlkYXRlIHdoZW4gdGhlIHdvcmtzcGFjZSBoYXMgbm9uZSBvZiB0aGVtIHNvIGNhbGxlcnNcbiAqIGFsd2F5cyBnZXQgYSBzdHJpbmc7IGFuIG9mZmxpbmUgd29ya3NwYWNlIHRoZW4gcmVjZWl2ZXMgYSBjbGVhbiA0MDQgZnJvbVxuICogRGF0YWJyaWNrcyBpbnN0ZWFkIG9mIGEgbWFsZm9ybWVkIGNvbmZpZy5cbiAqL1xuZnVuY3Rpb24gcGlja0ZpcnN0QXZhaWxhYmxlKFxuICBjYW5kaWRhdGVzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgZW5kcG9pbnRzOiByZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10sXG4pOiBzdHJpbmcge1xuICBjb25zdCBwcmVzZW50ID0gbmV3IFNldChlbmRwb2ludHMubWFwKChlKSA9PiBlLm5hbWUpKTtcbiAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgY2FuZGlkYXRlcykge1xuICAgIGlmIChwcmVzZW50LmhhcyhjYW5kaWRhdGUpKSByZXR1cm4gY2FuZGlkYXRlO1xuICB9XG4gIHJldHVybiBjYW5kaWRhdGVzWzBdID8/IEZBTExCQUNLX01PREVMX0lEU1swXSE7XG59XG4iXX0=
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXNvbHZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQ0wsUUFBUSxHQUtULE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixzQkFBc0IsR0FJdkIsTUFBTSxjQUFjLENBQUM7QUF1RHRCOzs7OztHQUtHO0FBQ0gsU0FBUyxXQUFXLENBQUMsS0FBeUI7SUFDNUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLFNBQTRDLEVBQzVDLFFBQW9CLEVBQUU7SUFFdEIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sUUFBUSxHQUNaLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO0lBRXpGLHlFQUF5RTtJQUN6RSw2Q0FBNkM7SUFDN0MsTUFBTSxVQUFVLEdBQWtCLEVBQUUsQ0FBQztJQUNyQyxLQUFLLE1BQU0sVUFBVSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLEtBQUssTUFBTSxRQUFR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Q0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoRSxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsT0FBTyxtQ0FBbUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGtCQUFrQixDQUN6QixVQUE2QixFQUM3QixTQUE0QztJQUU1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN0RCxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ25DLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFFLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV29ya3NwYWNlLWF3YXJlIG1vZGVsIHNlbGVjdGlvbi5cbiAqXG4gKiBHaXZlbiBhIGNhbGxlcidzIGludGVudCAtIGEgc2VhcmNoIHN0cmluZywgYSBjYXBhYmlsaXR5IHtAbGluayBNb2RlbENsYXNzfVxuICogY2VpbGluZywgYm90aCwgb3Igbm90aGluZyAtIHRoZSB0b29sa2l0IHJldHVybnMgbWF0Y2hpbmcgZW5kcG9pbnRzIHJhbmtlZCBieVxuICogbWF0Y2ggcXVhbGl0eSB0aGVuIGNsYXNzLCBvciBjb2xsYXBzZXMgdG8gdGhlIHNpbmdsZSBiZXN0IGlkIHRoZSB3b3Jrc3BhY2VcbiAqIGFjdHVhbGx5IGhhcywgZGVncmFkaW5nIGZyb20gXCJiZXN0IGluIHJhbmdlXCIgZG93biB0byB0aGUgc3RhdGljIGZhbGxiYWNrXG4gKiBmbG9vci4gU2VsZWN0aW9uIGlzIGNoYXQtb25seTogZW1iZWRkaW5nIGVuZHBvaW50cyBzdXJmYWNlIG9ubHkgd2hlblxuICogYG1vZGVsQ2xhc3NgIGlzIGV4cGxpY2l0bHkge0BsaW5rIE1vZGVsQ2xhc3MuRW1iZWRkaW5nfS5cbiAqXG4gKiBUd28gc2hhcGVzIG9mIHNlbGVjdGlvbiwgZWFjaCBpbiBhIHB1cmUgZm9ybSAob3ZlciBhbiBlbmRwb2ludCBsaXN0IHRoZVxuICogY2FsbGVyIGFscmVhZHkgaG9sZHMpIGFuZCBhbiBJL08gd3JhcHBlciAodGhhdCBsaXN0cyBgL3NlcnZpbmctZW5kcG9pbnRzYFxuICogZmlyc3QpOiByYW5raW5nLCB3aGljaCByZXR1cm5zIGEgbWF0Y2gtIHRoZW4gY2xhc3Mtb3JkZXJlZCBsaXN0LCBhbmRcbiAqIHNpbmdsZS1zZWxlY3Rpb24sIHdoaWNoIGNvbGxhcHNlcyB0byBvbmUgaWQgcGx1cyBob3cgaXQgd2FzIHJlYWNoZWQgYW5kXG4gKiBsYXllcnMgdGhlIG9wZXJhdG9yLXBpbm5lZCBmYWxsYmFjayAvIHN0YXRpYy1mbG9vciBzYWZldHkgbmV0IG9uIHRvcC4gQSBjaGF0XG4gKiBgbW9kZWxDbGFzc2AgYWN0cyBhcyBhIGNlaWxpbmc6IHRoYXQgYmFuZCBhbmQgdGhlIGxlc3MtY2FwYWJsZSBjaGF0IGJhbmRzXG4gKiBiZWxvdyBpdCBhcmUgZWxpZ2libGUgKHNlZSB7QGxpbmsgY2xhc3Nlc0F0T3JCZWxvd30pLCBzbyBhIGBjaGF0LWJhbGFuY2VkYFxuICogYXNrIGNhbiBmYWxsIHRvIGBjaGF0LWZhc3RgIGJ1dCBuZXZlciBlc2NhbGF0ZSB0byBgY2hhdC10aGlua2luZ2AuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IG9iamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICBjbGFzc2lmeSxcbiAgbW9kZWwsXG4gIHR5cGUgTW9kZWxRdWVyeSxcbiAgdHlwZSBSYW5rZWRNb2RlbCxcbiAgdHlwZSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcblxuaW1wb3J0IHsgQ0hBVF9DTEFTU19PUkRFUiwgY2xhc3Nlc0F0T3JCZWxvdywgTU9ERUxfQ0xBU1NfT1JERVIgfSBmcm9tIFwiLi9jbGFzc2VzLnRzXCI7XG5pbXBvcnQgeyBGQUxMQkFDS19NT0RFTF9JRFMsIG1vZGVsc0ZvckNsYXNzIH0gZnJvbSBcIi4vZmFsbGJhY2sudHNcIjtcbmltcG9ydCB7XG4gIGxpc3RTZXJ2aW5nRW5kcG9pbnRzLFxuICBzZWFyY2hTZXJ2aW5nRW5kcG9pbnRzLFxuICB0eXBlIFJlc29sdmVkTW9kZWwsXG4gIHR5cGUgUmVzb2x2ZU1vZGVsT3B0aW9ucyxcbiAgdHlwZSBXb3Jrc3BhY2VDbGllbnRMaWtlLFxufSBmcm9tIFwiLi9zZXJ2aW5nLnRzXCI7XG5cbnR5cGUgTW9kZWxDbGFzcyA9IG1vZGVsLk1vZGVsQ2xhc3M7XG5cbi8qKiBDYWxsZXIgaW50ZW50IHBhc3NlZCB0byB7QGxpbmsgcmVzb2x2ZU1vZGVsfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZU1vZGVsSW5wdXQge1xuICAvKipcbiAgICogRXhwbGljaXQgbW9kZWwgaWQgLyBsb29zZSBuYW1lIChwZXItcmVxdWVzdCBvdmVycmlkZSwgYWdlbnQgLyBwbHVnaW5cbiAgICogZGVmYXVsdCwgb3IgZW52IHZhcikuIFdoZW4gc2V0IGl0IHdpbnMgb3ZlciBgbW9kZWxDbGFzc2AgYW5kIGBmYWxsYmFja3NgLlxuICAgKi9cbiAgZXhwbGljaXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGdXp6eS1tYXRjaCBhbiBgZXhwbGljaXRgIG5hbWUgYWdhaW5zdCB0aGUgbGl2ZSBjYXRhbG9ndWUgc28gbG9vc2UgbmFtZXNcbiAgICogbGlrZSBgXCJjbGF1ZGUgc29ubmV0XCJgIHJlc29sdmUuIERlZmF1bHQgYHRydWVgLiBXaGVuIGBmYWxzZWAgdGhlIGV4cGxpY2l0XG4gICAqIGlucHV0IGlzIHJldHVybmVkIHZlcmJhdGltIChEYXRhYnJpY2tzIHN1cmZhY2VzIHRoZSBjYW5vbmljYWwgNDA0IGlmIGl0XG4gICAqIGRvZXNuJ3QgZXhpc3QpLlxuICAgKi9cbiAgZnV6enk/OiBib29sZWFuO1xuICAvKiogRnVzZS5qcyB0aHJlc2hvbGQgZm9yd2FyZGVkIHRvIHRoZSBmdXp6eSBgc2VhcmNoYCBtYXRjaCAoe0BsaW5rIHNlYXJjaFNlcnZpbmdFbmRwb2ludHN9KS4gKi9cbiAgdGhyZXNob2xkPzogbnVtYmVyO1xuICAvKiogUmVxdWlyZSBhIG1vZGVsIHRoYXQgc3VwcG9ydHMgYSBjb21wbGV0ZSBmdW5jdGlvbi10b29sIHJvdW5kLXRyaXAuICovXG4gIHJlcXVpcmVzVG9vbHM/OiBib29sZWFuO1xuICAvKipcbiAgICogQ2hhdCBjYXBhYmlsaXR5IGNsYXNzIHRvIHJlc29sdmUgd2hlbiBubyBgZXhwbGljaXRgIGlkIGlzIGdpdmVuLiBUaGUgbGl2ZVxuICAgKiBjYXRhbG9ndWUgaXMgY2xhc3NpZmllZCBieSBpdHMgRm91bmRhdGlvbiBNb2RlbCBBUEkgc2NvcmVzIGFuZCB0aGUgdG9wXG4gICAqIGF2YWlsYWJsZSBtb2RlbCBpbiB0aGUgY2xhc3MgKGFuZCB0aGUgY2hhdCBiYW5kcyBiZWxvdyBpdCkgd2lucywgZmFsbGluZ1xuICAgKiBiYWNrIHRvIHRoZSBjbGFzcydzIHNtYWxsIHN0YXRpYyBsaXN0LlxuICAgKi9cbiAgbW9kZWxDbGFzcz86IE1vZGVsQ2xhc3M7XG4gIC8qKlxuICAgKiBPcGVyYXRvci1zdXBwbGllZCBmYWxsYmFjayBpZHMgdHJpZWQgKmZpcnN0KiBpbiB0aGUgbm8tZXhwbGljaXQsIG5vLWNsYXNzXG4gICAqIHBhdGggKGUuZy4gYSByZWd1bGF0ZWQgd29ya3NwYWNlIHBpbm5lZCB0byBhbiBhcHByb3ZlZCBzdWJzZXQpLCBhaGVhZCBvZlxuICAgKiB0aGUgYXV0by1jbGFzc2lmaWVkIGNhdGFsb2d1ZS5cbiAgICovXG4gIGZhbGxiYWNrcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKiogT3V0Y29tZSBvZiB7QGxpbmsgcmVzb2x2ZU1vZGVsfTogdGhlIGNob3NlbiBpZCBwbHVzIGhvdyBpdCB3YXMgcmVhY2hlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRNb2RlbFNlbGVjdGlvbiB7XG4gIG1vZGVsSWQ6IHN0cmluZztcbiAgc291cmNlOiBcImV4cGxpY2l0XCIgfCBcImZ1enp5LW1hdGNoXCIgfCBcImNsYXNzXCIgfCBcImZhbGxiYWNrXCI7XG59XG5cbi8qKiBJbnRlbnQgKyBjYXRhbG9ndWUga25vYnMgcGFzc2VkIHRvIHtAbGluayBzZWxlY3RNb2RlbH0uICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdE1vZGVsSW5wdXQgZXh0ZW5kcyBSZXNvbHZlTW9kZWxJbnB1dCB7XG4gIC8qKiBUVEwgb3ZlcnJpZGUgZm9yIHRoZSBjYWNoZWQgYC9zZXJ2aW5nLWVuZHBvaW50c2AgbGlzdGluZywgaW4gbXMuICovXG4gIHR0bE1zPzogbnVtYmVyO1xufVxuXG4vKiogVFRMIG92ZXJyaWRlIG1lcmdlZCBpbnRvIGEge0BsaW5rIE1vZGVsUXVlcnl9IGZvciB7QGxpbmsgc2VhcmNoTW9kZWxzfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoTW9kZWxzSW5wdXQgZXh0ZW5kcyBNb2RlbFF1ZXJ5IHtcbiAgLyoqIFRUTCBvdmVycmlkZSBmb3IgdGhlIGNhY2hlZCBgL3NlcnZpbmctZW5kcG9pbnRzYCBsaXN0aW5nLCBpbiBtcy4gKi9cbiAgdHRsTXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUm91bmQgYSBGdXNlIHNjb3JlIHRvIHRoZSBkaXNwbGF5IHByZWNpc2lvbiBzbyB2ZXJzaW9uIHNpYmxpbmdzIHRoYXQgbWF0Y2ggYVxuICogdG9rZW4gaWRlbnRpY2FsbHkgKGUuZy4gYG9wdXMtNC03YCB2cyBgb3B1cy00LThgIGZvciB0aGUgcXVlcnkgYFwib3B1c1wiYCkgdGllXG4gKiBvbiBtYXRjaCBhbmQgbGV0IHRoZSBjbGFzcyAvIHdpdGhpbi1jbGFzcyByYW5rIGRlY2lkZSAtIHdoaWNoIGlzIHdoYXRcbiAqIHN1cmZhY2VzIHRoZSBuZXdlciwgaGlnaGVyLXF1YWxpdHkgc2libGluZy5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hCdWNrZXQoc2NvcmU6IG51bWJlciB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLnJvdW5kKChzY29yZSA/PyAwKSAqIDEwMDApO1xufVxuXG4vKipcbiAqIFJhbmsgdGhlIGxpdmUgY2F0YWxvZ3VlIGFnYWluc3QgYSB7QGxpbmsgTW9kZWxRdWVyeX0sIGJlc3QtZmlyc3QuXG4gKlxuICogQ2FuZGlkYXRlcyBhcmUgdGhlIGNsYXNzaWZpZWQgZW5kcG9pbnRzIGluIHRoZSBlbGlnaWJsZSBjbGFzc2VzOlxuICoge0BsaW5rIGNsYXNzZXNBdE9yQmVsb3d9IHRoZSByZXF1ZXN0ZWQgYG1vZGVsQ2xhc3NgLCBvciAtIHdoZW4gbm9uZSBpcyBnaXZlblxuICogLSB0aGUgY2hhdCBiYW5kcyBvbmx5ICh7QGxpbmsgQ0hBVF9DTEFTU19PUkRFUn0pLCBzbyBhIGdlbmVyYWwgYXNrIG5ldmVyXG4gKiBzdXJmYWNlcyBhbiBlbWJlZGRpbmcgZW5kcG9pbnQuIEVhY2ggY2xhc3MgYnVja2V0IGlzIGFscmVhZHkgYmVzdC1maXJzdCBmcm9tXG4gKiB7QGxpbmsgY2xhc3NpZnkuY2xhc3NpZnlFbmRwb2ludHN9LiBSYW5raW5nIGlzICoqbWF0Y2ggdGhlbiBjbGFzcyoqOlxuICpcbiAqIDEuIFdpdGggYSBgc2VhcmNoYCwgb25seSBlbmRwb2ludHMgbWF0Y2hpbmcgaXQgc3Vydml2ZSwgb3JkZXJlZCBieSBtYXRjaFxuICogICAgZGlzdGFuY2UgKGJ1Y2tldGVkIHZpYSB7QGxpbmsgbWF0Y2hCdWNrZXR9IHNvIG5lYXItaWRlbnRpY2FsIHNjb3JlcyB0aWUpLFxuICogICAgdGhlbiBieSBjbGFzcyAobW9yZSBjYXBhYmxlIGZpcnN0KSwgdGhlbiBieSB0aGUgc3RhYmxlIHdpdGhpbi1jbGFzcyByYW5rLlxuICogMi4gV2l0aG91dCBhIGBzZWFyY2hgLCB0aGUgY2xhc3MtdGhlbi1yYW5rIGNhbmRpZGF0ZSBvcmRlciBzdGFuZHMuXG4gKlxuICogQSBgbGltaXRgIHRydW5jYXRlcyB0aGUgcmVzdWx0LiBSZXR1cm5zIGBbXWAgd2hlbiBub3RoaW5nIGlzIGVsaWdpYmxlIG9yXG4gKiBtYXRjaGVzIC0gY2FsbGVycyBsYXllciB0aGVpciBvd24gZmFsbGJhY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5rTW9kZWxzKFxuICBlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbiAgcXVlcnk6IE1vZGVsUXVlcnkgPSB7fSxcbik6IFJhbmtlZE1vZGVsW10ge1xuICBjb25zdCBjbGFzc2lmaWVkID0gY2xhc3NpZnkuY2xhc3NpZnlFbmRwb2ludHMoZW5kcG9pbnRzKTtcbiAgY29uc3QgZWxpZ2libGUgPVxuICAgIHF1ZXJ5Lm1vZGVsQ2xhc3MgIT09IHVuZGVmaW5lZCA/IGNsYXNzZXNBdE9yQmVsb3cocXVlcnkubW9kZWxDbGFzcykgOiBDSEFUX0NMQVNTX09SREVSO1xuXG4gIC8vIEZsYXR0ZW4gZWxpZ2libGUgY2xhc3NlcyBpbiBjYXBhYmlsaXR5IG9yZGVyLCBjYXJyeWluZyBlYWNoIGVuZHBvaW50J3NcbiAgLy8gY2xhc3M7IGJ1Y2tldCBvcmRlciBpcyBhbHJlYWR5IGJlc3QtZmlyc3QuXG4gIGNvbnN0IGNhbmRpZGF0ZXM6IFJhbmtlZE1vZGVsW10gPSBbXTtcbiAgZm9yIChjb25zdCBtb2RlbENsYXNzIG9mIGVsaWdpYmxlKSB7XG4gICAgZm9yIChjb25zdCBlbmRwb2ludCBvZiBjbGFzc2lmaWVkW21vZGVsQ2xhc3NdKSB7XG4gICAgICBpZiAocXVlcnkucmVxdWlyZXNUb29scyAmJiAhY2xhc3NpZnkuZW5kcG9pbnRDYXBhYmlsaXRpZXMoZW5kcG9pbnQpLnRvb2xzKSBjb250aW51ZTtcbiAgICAgIGNhbmRpZGF0ZXMucHVzaCh7IGVuZHBvaW50LCBtb2RlbENsYXNzIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlYXJjaCA9IHF1ZXJ5LnNlYXJjaD8udHJpbSgpO1xuICBsZXQgcmFua2VkOiBSYW5rZWRNb2RlbFtdO1xuICBpZiAoc2VhcmNoKSB7XG4gICAgY29uc3Qgc2NvcmVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIHNlYXJjaFNlcnZpbmdFbmRwb2ludHMoXG4gICAgICBzZWFyY2gsXG4gICAgICBjYW5kaWRhdGVzLm1hcCgoYykgPT4gYy5lbmRwb2ludCksXG4gICAgICBxdWVyeS50aHJlc2hvbGQgIT09IHVuZGVmaW5lZCA/IHsgdGhyZXNob2xkOiBxdWVyeS50aHJlc2hvbGQgfSA6IHt9LFxuICAgICkpIHtcbiAgICAgIHNjb3Jlcy5zZXQobWF0Y2guZW5kcG9pbnQubmFtZSwgbWF0Y2guc2NvcmUpO1xuICAgIH1cbiAgICAvLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgIGlzIHN0YWJsZSwgc28gZW5kcG9pbnRzIGVxdWFsIG9uIG1hdGNoIGFuZCBjbGFzc1xuICAgIC8vIGtlZXAgdGhlaXIgYmVzdC1maXJzdCB3aXRoaW4tY2xhc3Mgb3JkZXIuXG4gICAgcmFua2VkID0gY2FuZGlkYXRlc1xuICAgICAgLmZpbHRlcigoYykgPT4gc2NvcmVzLmhhcyhjLmVuZHBvaW50Lm5hbWUpKVxuICAgICAgLm1hcCgoYykgPT4gKHsgLi4uYywgc2NvcmU6IHNjb3Jlcy5nZXQoYy5lbmRwb2ludC5uYW1lKSB9KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ5TWF0Y2ggPSBtYXRjaEJ1Y2tldChhLnNjb3JlKSAtIG1hdGNoQnVja2V0KGIuc2NvcmUpO1xuICAgICAgICBpZiAoYnlNYXRjaCAhPT0gMCkgcmV0dXJuIGJ5TWF0Y2g7XG4gICAgICAgIHJldHVybiBNT0RFTF9DTEFTU19PUkRFUi5pbmRleE9mKGEubW9kZWxDbGFzcykgLSBNT0RFTF9DTEFTU19PUkRFUi5pbmRleE9mKGIubW9kZWxDbGFzcyk7XG4gICAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByYW5rZWQgPSBjYW5kaWRhdGVzO1xuICB9XG5cbiAgcmV0dXJuIHF1ZXJ5LmxpbWl0ICE9PSB1bmRlZmluZWQgPyByYW5rZWQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgcXVlcnkubGltaXQpKSA6IHJhbmtlZDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZSB7QGxpbmsgcmFua01vZGVsc30gdG8gYSBzaW5nbGUgaWQ6IHRoZSBjbG9zZXN0IGVuZHBvaW50IHRvIGBzZWFyY2hgXG4gKiBpbiBhIGNhdGFsb2d1ZSBzbmFwc2hvdCwgb3IgdGhlIGlucHV0IHZlcmJhdGltIHdoZW4gbm90aGluZyBzY29yZXMgd2l0aGluIHRoZVxuICogdGhyZXNob2xkLlxuICpcbiAqIFRoZSByYW5rLWJhc2VkIGNvdW50ZXJwYXJ0IHRvIHRoZSBGdXNlLW9ubHkge0BsaW5rIHJlc29sdmVNb2RlbElkfTogZXF1YWxcbiAqIG1hdGNoIHNjb3JlcyBhcmUgYnJva2VuIGJ5IGNsYXNzIGFuZCB0aGVuIHdpdGhpbi1jbGFzcyB2ZXJzaW9uLCBzbyBhIGxvb3NlXG4gKiBgXCJvcHVzXCJgIHByZWZlcnMgYG9wdXMtNWAgb3ZlciBgb3B1cy00LTdgIGluc3RlYWQgb2YgcGlja2luZyB3aGljaGV2ZXJcbiAqIHNpYmxpbmcgRnVzZSBoYXBwZW5lZCB0byBvcmRlciBmaXJzdC4gUmV0dXJuaW5nIHRoZSBpbnB1dCB1bm1hdGNoZWQgKHJhdGhlclxuICogdGhhbiBhIG5lYXIgbmVpZ2hib3VyKSBpcyBkZWxpYmVyYXRlIC0gYSBkZWxpYmVyYXRlIGVuZHBvaW50IGlkIGlzIG5ldmVyXG4gKiBzaWxlbnRseSByZXdyaXR0ZW4sIGFuZCBEYXRhYnJpY2tzIHN1cmZhY2VzIGEgY2xlYW4gNDA0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFua01vZGVsSWQoXG4gIGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLFxuICBzZWFyY2g6IHN0cmluZyxcbiAgb3B0aW9uczogUmVzb2x2ZU1vZGVsT3B0aW9ucyA9IHt9LFxuKTogUmVzb2x2ZWRNb2RlbCB7XG4gIGNvbnN0IFt0b3BdID0gcmFua01vZGVscyhlbmRwb2ludHMsIHtcbiAgICBzZWFyY2gsXG4gICAgbGltaXQ6IDEsXG4gICAgLi4uKG9wdGlvbnMudGhyZXNob2xkICE9PSB1bmRlZmluZWQgPyB7IHRocmVzaG9sZDogb3B0aW9ucy50aHJlc2hvbGQgfSA6IHt9KSxcbiAgICAuLi4ob3B0aW9ucy5yZXF1aXJlc1Rvb2xzICE9PSB1bmRlZmluZWQgPyB7IHJlcXVpcmVzVG9vbHM6IG9wdGlvbnMucmVxdWlyZXNUb29scyB9IDoge30pLFxuICB9KTtcbiAgaWYgKCF0b3ApIHJldHVybiB7IG1vZGVsSWQ6IHNlYXJjaCwgbWF0Y2hlZDogZmFsc2UgfTtcbiAgcmV0dXJuIHsgbW9kZWxJZDogdG9wLmVuZHBvaW50Lm5hbWUsIG1hdGNoZWQ6IHRydWUsIHNjb3JlOiB0b3Auc2NvcmUgfTtcbn1cblxuLyoqXG4gKiB7QGxpbmsgcmFua01vZGVsSWR9IGFnYWluc3QgYSBjYXRhbG9ndWUgdGhlIGNhbGxlciBtYXkgYmUgaG9sZGluZyBzdGFsZTpcbiAqIG1hdGNoIHRoZSBsb2FkZWQgc25hcHNob3QsIGFuZCBvbiBhIG1pc3MgcmVsb2FkIG9uY2Ugd2l0aCBgZm9yY2VgIGFuZCBtYXRjaFxuICogYWdhaW4uIFRoYXQgd2F5IGEgbW9kZWwgZGVwbG95ZWQgYWZ0ZXIgdGhlIGNhdGFsb2d1ZSB3YXMgY2FjaGVkIHN0aWxsXG4gKiByZXNvbHZlcyBvbiBmaXJzdCB1c2UsIHdpdGhvdXQgYSByZXN0YXJ0IGFuZCB3aXRob3V0IGdpdmluZyB1cCBjYWNoaW5nLlxuICpcbiAqIFRoZSBjYXRhbG9ndWUgYXJyaXZlcyBhcyBhIGxvYWRlciByYXRoZXIgdGhhbiBhIGNsaWVudCBzbyB0aGUgY2FsbGVyIGtlZXBzXG4gKiBvd25lcnNoaXAgb2YgKmhvdyogaXQgaXMgY2FjaGVkIC0ge0BsaW5rIGxpc3RTZXJ2aW5nRW5kcG9pbnRzfSBhbmQgaXRzXG4gKiBgQ2FjaGVNYW5hZ2VyYCwgYSBwbGFpbiBwcm9jZXNzLWxpZmV0aW1lIGZpZWxkIGluIGEgQ0xJLCBvciBhIHRlc3QgZG91YmxlLlxuICogT25seSBvbmUgcmVsb2FkIGlzIGF0dGVtcHRlZDogYSBnZW51aW5lbHkgdW5rbm93biBuYW1lIHNob3VsZCBmYWlsIGZhc3RcbiAqIHJhdGhlciB0aGFuIHJlLWxpc3Qgb24gZXZlcnkgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gbG9hZCAtIFJldHVybnMgdGhlIGNhdGFsb2d1ZTsgYGZvcmNlYCBhc2tzIGl0IHRvIGJ5cGFzcyBpdHMgY2FjaGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByYW5rTW9kZWxJZExpdmUoXG4gIGxvYWQ6IChmb3JjZTogYm9vbGVhbikgPT4gUHJvbWlzZTxyZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10+LFxuICBzZWFyY2g6IHN0cmluZyxcbiAgb3B0aW9uczogUmVzb2x2ZU1vZGVsT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxSZXNvbHZlZE1vZGVsPiB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmFua01vZGVsSWQoYXdhaXQgbG9hZChmYWxzZSksIHNlYXJjaCwgb3B0aW9ucyk7XG4gIGlmIChyZXNvbHZlZC5tYXRjaGVkKSByZXR1cm4gcmVzb2x2ZWQ7XG4gIHJldHVybiByYW5rTW9kZWxJZChhd2FpdCBsb2FkKHRydWUpLCBzZWFyY2gsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJhbmsgYSB3b3Jrc3BhY2UncyBjYXRhbG9ndWUgaW4gb25lIGNhbGw6IGxpc3QgaXRzIGAvc2VydmluZy1lbmRwb2ludHNgXG4gKiAoY2FjaGVkKSBhbmQgcnVuIHtAbGluayByYW5rTW9kZWxzfSBvdmVyIHRoZSByZXN1bHQuIFRoZSBsaXN0IGNvdW50ZXJwYXJ0IHRvXG4gKiB7QGxpbmsgc2VsZWN0TW9kZWx9LCBmb3IgYSBjb25zdW1lciB0aGF0IHdhbnRzIHRoZSBmdWxsIHJhbmtlZCBzZXQgKGEgbW9kZWxcbiAqIHBpY2tlciwgYSBDTEkpIHJhdGhlciB0aGFuIGEgc2luZ2xlIGlkLiBDYXRhbG9ndWUgZmV0Y2hlcyBmYWlsIGxvdWQ6IG5ldHdvcmtcbiAqIC8gYXV0aCBlcnJvcnMgcHJvcGFnYXRlIHNvIHRoZSBjYWxsZXIgc2VlcyB0aGUgcmVhbCBTREsgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gaG9zdCAtIFdvcmtzcGFjZSBob3N0IHVzZWQgYXMgdGhlIGNhY2hlIGtleS4gUGFzcyB0aGUgdmFsdWUgcmVzb2x2ZWRcbiAqICAgZnJvbSBgY2xpZW50LmNvbmZpZy5nZXRIb3N0KClgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VhcmNoTW9kZWxzKFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudExpa2UsXG4gIGhvc3Q6IHN0cmluZyxcbiAgaW5wdXQ6IFNlYXJjaE1vZGVsc0lucHV0ID0ge30sXG4pOiBQcm9taXNlPFJhbmtlZE1vZGVsW10+IHtcbiAgY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgbGlzdFNlcnZpbmdFbmRwb2ludHMoXG4gICAgY2xpZW50LFxuICAgIGhvc3QsXG4gICAgaW5wdXQudHRsTXMgIT09IHVuZGVmaW5lZCA/IHsgdHRsTXM6IGlucHV0LnR0bE1zIH0gOiB7fSxcbiAgKTtcbiAgcmV0dXJuIHJhbmtNb2RlbHMoZW5kcG9pbnRzLCBpbnB1dCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIG1vZGVsIGlkIGZvciBhIHdvcmtzcGFjZSBpbiBvbmUgY2FsbDogbGlzdCBpdHMgYC9zZXJ2aW5nLWVuZHBvaW50c2BcbiAqIChjYWNoZWQpIGFuZCBydW4ge0BsaW5rIHJlc29sdmVNb2RlbH0gb3ZlciB0aGUgcmVzdWx0LiBUaGlzIGlzIHRoZSBlbnRyeVxuICogcG9pbnQgZm9yIGFueSBjb25zdW1lciB0aGF0IGhvbGRzIGEgYFdvcmtzcGFjZUNsaWVudGAgYW5kIGp1c3Qgd2FudHMgYSB1c2FibGVcbiAqIG1vZGVsIG5hbWUgLSBhIExha2VmbG93IGpvYiwgYSBvbmUtb2ZmIHNjcmlwdCwgb3IgdGhlIE1hc3RyYSBwbHVnaW4gYWxpa2UuXG4gKlxuICogQ2hlYXAgZXhpdDogd2hlbiBhbiBgZXhwbGljaXRgIG5hbWUgaXMgZ2l2ZW4sIGBmdXp6eWAgaXMgb2ZmLCBhbmQgdG9vbFxuICogY2FwYWJpbGl0eSBpcyBub3QgcmVxdWlyZWQsIHRoZSBjYXRhbG9ndWUgaXMgbmV2ZXIgZmV0Y2hlZC4gQ2F0YWxvZ3VlXG4gKiBmZXRjaGVzIG90aGVyd2lzZSBmYWlsIGxvdWQ6IG5ldHdvcmsgLyBhdXRoIGVycm9ycyBwcm9wYWdhdGUgc28gdGhlIGNhbGxlclxuICogc2VlcyB0aGUgcmVhbCBTREsgbWVzc2FnZSBpbnN0ZWFkIG9mIGEgc2lsZW50IGZhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSBob3N0IC0gV29ya3NwYWNlIGhvc3QgdXNlZCBhcyB0aGUgY2FjaGUga2V5LiBQYXNzIHRoZSB2YWx1ZSByZXNvbHZlZFxuICogICBmcm9tIGBjbGllbnQuY29uZmlnLmdldEhvc3QoKWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWxlY3RNb2RlbChcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnRMaWtlLFxuICBob3N0OiBzdHJpbmcsXG4gIGlucHV0OiBTZWxlY3RNb2RlbElucHV0ID0ge30sXG4pOiBQcm9taXNlPFJlc29sdmVkTW9kZWxTZWxlY3Rpb24+IHtcbiAgaWYgKGlucHV0LmV4cGxpY2l0ICE9PSB1bmRlZmluZWQgJiYgaW5wdXQuZnV6enkgPT09IGZhbHNlICYmICFpbnB1dC5yZXF1aXJlc1Rvb2xzKSB7XG4gICAgcmV0dXJuIHsgbW9kZWxJZDogaW5wdXQuZXhwbGljaXQsIHNvdXJjZTogXCJleHBsaWNpdFwiIH07XG4gIH1cbiAgY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgbGlzdFNlcnZpbmdFbmRwb2ludHMoY2xpZW50LCBob3N0LCB7XG4gICAgLi4uKGlucHV0LnR0bE1zICE9PSB1bmRlZmluZWQgPyB7IHR0bE1zOiBpbnB1dC50dGxNcyB9IDoge30pLFxuICB9KTtcbiAgcmV0dXJuIHJlc29sdmVNb2RlbChlbmRwb2ludHMsIGlucHV0KTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgc2luZ2xlIG1vZGVsIGlkIGZyb20gdGhlIGxpdmUgY2F0YWxvZ3VlIGFuZCBjYWxsZXIgaW50ZW50LFxuICogZGVsZWdhdGluZyB0aGUgbGl2ZSBzZWxlY3Rpb24gdG8ge0BsaW5rIHJhbmtNb2RlbHN9IHdpdGggYGxpbWl0OiAxYC5cbiAqXG4gKiAxLiAqKkV4cGxpY2l0IGFzayoqOiB3aXRoIGBmdXp6eWAgb2ZmLCByZXR1cm5lZCB2ZXJiYXRpbTsgb3RoZXJ3aXNlXG4gKiAgICBmdXp6eS1yYW5rZWQgd2l0aGluIHRoZSAob3B0aW9uYWwpIGNsYXNzIGNlaWxpbmcgYW5kIHRoZSBiZXN0IHRha2VuLFxuICogICAgZmFsbGluZyBiYWNrIHRvIHRoZSBpbnB1dCB2ZXJiYXRpbSB3aGVuIG5vdGhpbmcgbWF0Y2hlcy5cbiAqIDIuICoqTm8gZXhwbGljaXQgYXNrKio6IGFuIG9wZXJhdG9yLXBpbm5lZCBgZmFsbGJhY2tgIHRoYXQgZXhpc3RzIGluIHRoZSBsaXZlXG4gKiAgICBjYXRhbG9ndWUgd2lucyBmaXJzdDsgdGhlbiB0aGUgcmFua2VkIGxpdmUgY2F0YWxvZ3VlIChjbGFzcyBjZWlsaW5nXG4gKiAgICBhcHBsaWVkKTsgdGhlbiB0aGUgc3RhdGljIHtAbGluayBGQUxMQkFDS19NT0RFTF9JRFN9IGZsb29yIHdoZW4gdGhlXG4gKiAgICBjYXRhbG9ndWUgeWllbGRzIG5vdGhpbmcgaW4gcmFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTW9kZWwoXG4gIGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLFxuICBpbnB1dDogUmVzb2x2ZU1vZGVsSW5wdXQgPSB7fSxcbik6IFJlc29sdmVkTW9kZWxTZWxlY3Rpb24ge1xuICBpZiAoaW5wdXQuZXhwbGljaXQgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChpbnB1dC5mdXp6eSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChpbnB1dC5yZXF1aXJlc1Rvb2xzKSBhc3NlcnRUb29sU3VwcG9ydChlbmRwb2ludHMsIGlucHV0LmV4cGxpY2l0KTtcbiAgICAgIHJldHVybiB7IG1vZGVsSWQ6IGlucHV0LmV4cGxpY2l0LCBzb3VyY2U6IFwiZXhwbGljaXRcIiB9O1xuICAgIH1cbiAgICBjb25zdCBbdG9wXSA9IHJhbmtNb2RlbHMoZW5kcG9pbnRzLCBidWlsZFF1ZXJ5KGlucHV0LCBpbnB1dC5leHBsaWNpdCkpO1xuICAgIGlmIChpbnB1dC5yZXF1aXJlc1Rvb2xzICYmICF0b3ApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gdG9vbC1jYXBhYmxlIG1vZGVsIG1hdGNoZXMgXCIke2lucHV0LmV4cGxpY2l0fVwiYCk7XG4gICAgfVxuICAgIHJldHVybiB7IG1vZGVsSWQ6IHRvcD8uZW5kcG9pbnQubmFtZSA/PyBpbnB1dC5leHBsaWNpdCwgc291cmNlOiBcImZ1enp5LW1hdGNoXCIgfTtcbiAgfVxuXG4gIC8vIE9wZXJhdG9yLXBpbm5lZCBmYWxsYmFja3Mgd2luIHdoZW4gcHJlc2VudCBhbmQgbGl2ZSAoZS5nLiBhIHJlZ3VsYXRlZFxuICAvLyB3b3Jrc3BhY2UgcmVzdHJpY3RlZCB0byBhbiBhcHByb3ZlZCBzdWJzZXQpLlxuICBpZiAoaW5wdXQubW9kZWxDbGFzcyA9PT0gdW5kZWZpbmVkICYmIGlucHV0LmZhbGxiYWNrcyAmJiBpbnB1dC5mYWxsYmFja3MubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHByZXNlbnQgPSBuZXcgU2V0KFxuICAgICAgZW5kcG9pbnRzXG4gICAgICAgIC5maWx0ZXIoKGVuZHBvaW50KSA9PiAhaW5wdXQucmVxdWlyZXNUb29scyB8fCBjbGFzc2lmeS5lbmRwb2ludENhcGFiaWxpdGllcyhlbmRwb2ludCkudG9vbHMpXG4gICAgICAgIC5tYXAoKGVuZHBvaW50KSA9PiBlbmRwb2ludC5uYW1lKSxcbiAgICApO1xuICAgIGNvbnN0IHBpbm5lZCA9IGlucHV0LmZhbGxiYWNrcy5maW5kKChpZCkgPT4gcHJlc2VudC5oYXMoaWQpKTtcbiAgICBpZiAocGlubmVkKSByZXR1cm4geyBtb2RlbElkOiBwaW5uZWQsIHNvdXJjZTogXCJmYWxsYmFja1wiIH07XG4gIH1cblxuICBjb25zdCBzb3VyY2UgPSBpbnB1dC5tb2RlbENsYXNzICE9PSB1bmRlZmluZWQgPyBcImNsYXNzXCIgOiBcImZhbGxiYWNrXCI7XG4gIGNvbnN0IFt0b3BdID0gcmFua01vZGVscyhlbmRwb2ludHMsIGJ1aWxkUXVlcnkoaW5wdXQsIHVuZGVmaW5lZCkpO1xuICBpZiAodG9wKSByZXR1cm4geyBtb2RlbElkOiB0b3AuZW5kcG9pbnQubmFtZSwgc291cmNlIH07XG5cbiAgLy8gTGl2ZSBjYXRhbG9ndWUgeWllbGRlZCBub3RoaW5nIGluIHJhbmdlOiB3YWxrIHRoZSBzdGF0aWMgZmxvb3IuXG4gIGNvbnN0IGZsb29yU291cmNlID1cbiAgICBpbnB1dC5tb2RlbENsYXNzICE9PSB1bmRlZmluZWQgPyBtb2RlbHNGb3JDbGFzcyhpbnB1dC5tb2RlbENsYXNzKSA6IChpbnB1dC5mYWxsYmFja3MgPz8gW10pO1xuICBjb25zdCBmbG9vciA9IG9iamVjdC5zZXF1ZW5jZShmbG9vclNvdXJjZSkuY29uY2F0KEZBTExCQUNLX01PREVMX0lEUykuZGlzdGluY3QoKS50b0FycmF5KCk7XG4gIGlmIChpbnB1dC5yZXF1aXJlc1Rvb2xzKSB7XG4gICAgY29uc3QgYXZhaWxhYmxlID0gbmV3IFNldChcbiAgICAgIGVuZHBvaW50c1xuICAgICAgICAuZmlsdGVyKChlbmRwb2ludCkgPT4gY2xhc3NpZnkuZW5kcG9pbnRDYXBhYmlsaXRpZXMoZW5kcG9pbnQpLnRvb2xzKVxuICAgICAgICAubWFwKChlbmRwb2ludCkgPT4gZW5kcG9pbnQubmFtZSksXG4gICAgKTtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGZsb29yLmZpbmQoKGlkKSA9PiBhdmFpbGFibGUuaGFzKGlkKSk7XG4gICAgaWYgKCFzZWxlY3RlZCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gdG9vbC1jYXBhYmxlIG1vZGVsIGlzIGF2YWlsYWJsZVwiKTtcbiAgICByZXR1cm4geyBtb2RlbElkOiBzZWxlY3RlZCwgc291cmNlIH07XG4gIH1cbiAgcmV0dXJuIHsgbW9kZWxJZDogcGlja0ZpcnN0QXZhaWxhYmxlKGZsb29yLCBlbmRwb2ludHMpLCBzb3VyY2UgfTtcbn1cblxuLyoqIEJ1aWxkIGEge0BsaW5rIE1vZGVsUXVlcnl9IGZyb20ge0BsaW5rIFJlc29sdmVNb2RlbElucHV0fSBmb3IgdGhlIGBsaW1pdDogMWAgZGVsZWdhdGlvbi4gKi9cbmZ1bmN0aW9uIGJ1aWxkUXVlcnkoaW5wdXQ6IFJlc29sdmVNb2RlbElucHV0LCBzZWFyY2g6IHN0cmluZyB8IHVuZGVmaW5lZCk6IE1vZGVsUXVlcnkge1xuICByZXR1cm4ge1xuICAgIC4uLihzZWFyY2ggIT09IHVuZGVmaW5lZCA/IHsgc2VhcmNoIH0gOiB7fSksXG4gICAgLi4uKGlucHV0Lm1vZGVsQ2xhc3MgIT09IHVuZGVmaW5lZCA/IHsgbW9kZWxDbGFzczogaW5wdXQubW9kZWxDbGFzcyB9IDoge30pLFxuICAgIC4uLihpbnB1dC5yZXF1aXJlc1Rvb2xzICE9PSB1bmRlZmluZWQgPyB7IHJlcXVpcmVzVG9vbHM6IGlucHV0LnJlcXVpcmVzVG9vbHMgfSA6IHt9KSxcbiAgICAuLi4oaW5wdXQudGhyZXNob2xkICE9PSB1bmRlZmluZWQgPyB7IHRocmVzaG9sZDogaW5wdXQudGhyZXNob2xkIH0gOiB7fSksXG4gICAgbGltaXQ6IDEsXG4gIH07XG59XG5cbi8qKiBUaHJvdyB3aGVuIGFuIGV4cGxpY2l0IGlkIGlzIGFic2VudCBvciBub3QgdmVyaWZpZWQgZm9yIGZ1bmN0aW9uIHRvb2xzLiAqL1xuZnVuY3Rpb24gYXNzZXJ0VG9vbFN1cHBvcnQoZW5kcG9pbnRzOiByZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10sIG1vZGVsSWQ6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBlbmRwb2ludCA9IGVuZHBvaW50cy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09PSBtb2RlbElkKTtcbiAgaWYgKCFlbmRwb2ludCB8fCAhY2xhc3NpZnkuZW5kcG9pbnRDYXBhYmlsaXRpZXMoZW5kcG9pbnQpLnRvb2xzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCBcIiR7bW9kZWxJZH1cIiBkb2VzIG5vdCBzdXBwb3J0IGZ1bmN0aW9uIHRvb2xzYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBGaW5kIHRoZSBmaXJzdCBpZCBpbiBgY2FuZGlkYXRlc2Agd2hvc2UgZW5kcG9pbnQgaXMgcHJlc2VudCBpbiBgZW5kcG9pbnRzYC5cbiAqIFJldHVybnMgdGhlIHRvcCBjYW5kaWRhdGUgd2hlbiB0aGUgd29ya3NwYWNlIGhhcyBub25lIG9mIHRoZW0gc28gY2FsbGVyc1xuICogYWx3YXlzIGdldCBhIHN0cmluZzsgYW4gb2ZmbGluZSB3b3Jrc3BhY2UgdGhlbiByZWNlaXZlcyBhIGNsZWFuIDQwNCBmcm9tXG4gKiBEYXRhYnJpY2tzIGluc3RlYWQgb2YgYSBtYWxmb3JtZWQgY29uZmlnLlxuICovXG5mdW5jdGlvbiBwaWNrRmlyc3RBdmFpbGFibGUoXG4gIGNhbmRpZGF0ZXM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHByZXNlbnQgPSBuZXcgU2V0KGVuZHBvaW50cy5tYXAoKGUpID0+IGUubmFtZSkpO1xuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgaWYgKHByZXNlbnQuaGFzKGNhbmRpZGF0ZSkpIHJldHVybiBjYW5kaWRhdGU7XG4gIH1cbiAgcmV0dXJuIGNhbmRpZGF0ZXNbMF0gPz8gRkFMTEJBQ0tfTU9ERUxfSURTWzBdITtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@databricks/appkit": "^0.43.0",
|
|
27
|
-
"@dbx-tools/appkit": "0.6.
|
|
28
|
-
"@dbx-tools/shared-core": "0.6.
|
|
29
|
-
"@dbx-tools/shared-model": "0.6.
|
|
27
|
+
"@dbx-tools/appkit": "0.6.73",
|
|
28
|
+
"@dbx-tools/shared-core": "0.6.73",
|
|
29
|
+
"@dbx-tools/shared-model": "0.6.73",
|
|
30
30
|
"fuse.js": "^7.4.2"
|
|
31
31
|
},
|
|
32
32
|
"main": "./lib/index.js",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"./package.json": "./package.json"
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
|
-
"version": "0.6.
|
|
46
|
+
"version": "0.6.73",
|
|
47
47
|
"types": "./lib/index.d.ts",
|
|
48
48
|
"type": "module",
|
|
49
49
|
"exports": {
|
package/src/resolve.ts
CHANGED
|
@@ -245,11 +245,10 @@ export async function searchModels(
|
|
|
245
245
|
* point for any consumer that holds a `WorkspaceClient` and just wants a usable
|
|
246
246
|
* model name - a Lakeflow job, a one-off script, or the Mastra plugin alike.
|
|
247
247
|
*
|
|
248
|
-
* Cheap exit: when an `explicit` name is given
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
*
|
|
252
|
-
* message instead of a silent fallback.
|
|
248
|
+
* Cheap exit: when an `explicit` name is given, `fuzzy` is off, and tool
|
|
249
|
+
* capability is not required, the catalogue is never fetched. Catalogue
|
|
250
|
+
* fetches otherwise fail loud: network / auth errors propagate so the caller
|
|
251
|
+
* sees the real SDK message instead of a silent fallback.
|
|
253
252
|
*
|
|
254
253
|
* @param host - Workspace host used as the cache key. Pass the value resolved
|
|
255
254
|
* from `client.config.getHost()`.
|
|
@@ -259,7 +258,7 @@ export async function selectModel(
|
|
|
259
258
|
host: string,
|
|
260
259
|
input: SelectModelInput = {},
|
|
261
260
|
): Promise<ResolvedModelSelection> {
|
|
262
|
-
if (input.explicit !== undefined && input.fuzzy === false) {
|
|
261
|
+
if (input.explicit !== undefined && input.fuzzy === false && !input.requiresTools) {
|
|
263
262
|
return { modelId: input.explicit, source: "explicit" };
|
|
264
263
|
}
|
|
265
264
|
const endpoints = await listServingEndpoints(client, host, {
|