@dbx-tools/appkit 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/_cache-storage.d.ts +9 -0
- package/lib/src/_cache-storage.js +29 -7
- package/lib/src/appkit.js +2 -2
- package/lib/src/databricks.js +4 -30
- package/package.json +3 -3
- package/src/_cache-storage.ts +28 -6
- package/src/appkit.ts +1 -1
- package/src/databricks.ts +3 -35
|
@@ -15,6 +15,15 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { type CacheConfig } from "@databricks/appkit";
|
|
17
17
|
type CacheStorage = NonNullable<CacheConfig["storage"]>;
|
|
18
|
+
/** AppKit's internal persistent storage surface. */
|
|
19
|
+
export type PersistentStorageBase = CacheStorage & {
|
|
20
|
+
initialize(): Promise<void>;
|
|
21
|
+
initialized: boolean;
|
|
22
|
+
};
|
|
23
|
+
/** Soften `initialize()` so a migration failure is logged once, not thrown. */
|
|
24
|
+
export declare function softenInitialize(storage: PersistentStorageBase): void;
|
|
25
|
+
/** Verify the migrated cache table can serve the reads and writes AppKit needs. */
|
|
26
|
+
export declare function probeStorage(storage: PersistentStorageBase): Promise<void>;
|
|
18
27
|
/**
|
|
19
28
|
* Build a soft-fail Lakebase cache storage when a pool can be created and
|
|
20
29
|
* AppKit's PersistentStorage can be loaded. Returns `undefined` otherwise so
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
import { createRequire } from "node:module";
|
|
17
17
|
import { dirname, join } from "node:path";
|
|
18
18
|
import { createLakebasePool, getWorkspaceClient } from "@databricks/appkit";
|
|
19
|
-
import { error, log } from "@dbx-tools/shared-core";
|
|
19
|
+
import { error, hash, log } from "@dbx-tools/shared-core";
|
|
20
20
|
const logger = log.logger("cache-storage");
|
|
21
21
|
/** Process-wide dedupe for soft migration warnings. */
|
|
22
22
|
const loggedMigrationErrors = new Set();
|
|
@@ -24,10 +24,14 @@ const loggedMigrationErrors = new Set();
|
|
|
24
24
|
function isDebugEnabled() {
|
|
25
25
|
return log.isLevelEnabled("debug");
|
|
26
26
|
}
|
|
27
|
+
/** Whether a migration failed only because this role does not own an existing object. */
|
|
28
|
+
function isOwnershipMigrationError(err) {
|
|
29
|
+
return error.errorContext(err).hasMessage("must be owner");
|
|
30
|
+
}
|
|
27
31
|
let persistentStorageCtor = null;
|
|
28
32
|
/**
|
|
29
33
|
* Lazily resolve AppKit's internal `PersistentStorage` constructor. `null`
|
|
30
|
-
* means
|
|
34
|
+
* means not attempted yet; `undefined` means the lookup already failed.
|
|
31
35
|
*/
|
|
32
36
|
function loadPersistentStorage() {
|
|
33
37
|
if (persistentStorageCtor !== null) {
|
|
@@ -54,7 +58,7 @@ function loadPersistentStorage() {
|
|
|
54
58
|
}
|
|
55
59
|
}
|
|
56
60
|
/** Soften `initialize()` so a migration failure is logged once, not thrown. */
|
|
57
|
-
function softenInitialize(storage) {
|
|
61
|
+
export function softenInitialize(storage) {
|
|
58
62
|
const originalInitialize = storage.initialize.bind(storage);
|
|
59
63
|
let softInitPromise;
|
|
60
64
|
storage.initialize = async () => {
|
|
@@ -65,7 +69,8 @@ function softenInitialize(storage) {
|
|
|
65
69
|
await originalInitialize();
|
|
66
70
|
}
|
|
67
71
|
catch (err) {
|
|
68
|
-
|
|
72
|
+
if (!isOwnershipMigrationError(err))
|
|
73
|
+
throw err;
|
|
69
74
|
const message = error.errorMessage(err);
|
|
70
75
|
if (!loggedMigrationErrors.has(message)) {
|
|
71
76
|
loggedMigrationErrors.add(message);
|
|
@@ -80,12 +85,28 @@ function softenInitialize(storage) {
|
|
|
80
85
|
})();
|
|
81
86
|
try {
|
|
82
87
|
await softInitPromise;
|
|
83
|
-
}
|
|
84
|
-
finally {
|
|
85
88
|
storage.initialized = true;
|
|
86
89
|
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
softInitPromise = undefined;
|
|
92
|
+
throw err;
|
|
93
|
+
}
|
|
87
94
|
};
|
|
88
95
|
}
|
|
96
|
+
/** Verify the migrated cache table can serve the reads and writes AppKit needs. */
|
|
97
|
+
export async function probeStorage(storage) {
|
|
98
|
+
const key = `dbx-tools:cache-probe:${hash.id()}`;
|
|
99
|
+
try {
|
|
100
|
+
await storage.set(key, { value: key, expiry: Date.now() + 60_000 });
|
|
101
|
+
const result = await storage.get(key);
|
|
102
|
+
if (result?.value !== key) {
|
|
103
|
+
throw new Error("persistent cache probe returned an unexpected value");
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
await storage.delete(key).catch(() => undefined);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
89
110
|
/**
|
|
90
111
|
* Build a soft-fail Lakebase cache storage when a pool can be created and
|
|
91
112
|
* AppKit's PersistentStorage can be loaded. Returns `undefined` otherwise so
|
|
@@ -106,6 +127,7 @@ export async function createSoftPersistentStorage(cache) {
|
|
|
106
127
|
return undefined;
|
|
107
128
|
}
|
|
108
129
|
await storage.initialize();
|
|
130
|
+
await probeStorage(storage);
|
|
109
131
|
return storage;
|
|
110
132
|
}
|
|
111
133
|
catch (err) {
|
|
@@ -118,4 +140,4 @@ export async function createSoftPersistentStorage(cache) {
|
|
|
118
140
|
return undefined;
|
|
119
141
|
}
|
|
120
142
|
}
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2NhY2hlLXN0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX2NhY2hlLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBb0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXBELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFM0MsdURBQXVEO0FBQ3ZELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztBQUVoRCwwREFBMEQ7QUFDMUQsU0FBUyxjQUFjO0lBQ3JCLE9BQU8sR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBZ0JELElBQUkscUJBQXFCLEdBQW9ELElBQUksQ0FBQztBQUVsRjs7O0dBR0c7QUFDSCxTQUFTLHFCQUFxQjtJQUM1QixJQUFJLHFCQUFxQixLQUFLLElBQUksRUFBRSxDQUFDO1FBQ25DLE9BQU8scUJBQXFCLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FDckIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUM5Qyw2QkFBNkIsQ0FDOUIsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENB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QUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE1BQU0sT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzNCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRTtZQUNoRCxLQUFLLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7U0FDL0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNvZnQtZmFpbCBMYWtlYmFzZSBjYWNoZSBzdG9yYWdlIGZvciBBcHBLaXQncyBwZXJzaXN0ZW50IGNhY2hlLlxuICpcbiAqIEFwcEtpdCdzIGBQZXJzaXN0ZW50U3RvcmFnZS5pbml0aWFsaXplKClgIHJ1bnMgRERMIG1pZ3JhdGlvbnMgYW5kIHRocm93cyBvblxuICogYW55IHN0ZXAgZmFpbHVyZS4gV2l0aCBgY2FjaGUuc3RyaWN0UGVyc2lzdGVuY2U6IHRydWVgIHRoYXQgdGhyb3cgbWFrZXNcbiAqIGBDYWNoZU1hbmFnZXJgIHNpbGVudGx5IGRpc2FibGUgdGhlIGNhY2hlLiBUaGlzIHdyYXBzIHRoZSBzYW1lIHN0b3JhZ2UsXG4gKiBzdGlsbCBydW5zIGl0cyBtaWdyYXRpb25zLCBidXQgbG9ncyBhIGZhaWxlZCBzdGVwIGluc3RlYWQgb2YgdGhyb3dpbmcgc28gYVxuICogdXNhYmxlIHRhYmxlIGtlZXBzIHNlcnZpbmcuXG4gKlxuICogYFBlcnNpc3RlbnRTdG9yYWdlYCBpcyBub3Qgb24gQXBwS2l0J3MgcHVibGljIGV4cG9ydCBtYXAuIFRoZSBkZWVwIGxvYWQgaXNcbiAqIGxhenkgYW5kIGJlc3QtZWZmb3J0OiBpZiB0aGUgaW5zdGFsbGVkIEFwcEtpdCBsYXlvdXQgY2hhbmdlcywgdGhpcyByZXR1cm5zXG4gKiBgdW5kZWZpbmVkYCBhbmQgYGNyZWF0ZUFwcGAgbGVhdmVzIEFwcEtpdCBvbiBpdHMgZGVmYXVsdCBjYWNoZSBwYXRoLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgY3JlYXRlTGFrZWJhc2VQb29sLCBnZXRXb3Jrc3BhY2VDbGllbnQsIHR5cGUgQ2FjaGVDb25maWcgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBlcnJvciwgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImNhY2hlLXN0b3JhZ2VcIik7XG5cbi8qKiBQcm9jZXNzLXdpZGUgZGVkdXBlIGZvciBzb2Z0IG1pZ3JhdGlvbiB3YXJuaW5ncy4gKi9cbmNvbnN0IGxvZ2dlZE1pZ3JhdGlvbkVycm9ycyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4vKiogV2hldGhlciBgTE9HX0xFVkVMYCBpcyBjdXJyZW50bHkgYXQgb3IgYmVsb3cgZGVidWcuICovXG5mdW5jdGlvbiBpc0RlYnVnRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGxvZy5pc0xldmVsRW5hYmxlZChcImRlYnVnXCIpO1xufVxuXG50eXBlIExha2ViYXNlUG9vbCA9IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUxha2ViYXNlUG9vbD47XG50eXBlIENhY2hlU3RvcmFnZSA9IE5vbk51bGxhYmxlPENhY2hlQ29uZmlnW1wic3RvcmFnZVwiXT47XG5cbi8qKiBBcHBLaXQncyBpbnRlcm5hbCBwZXJzaXN0ZW50IHN0b3JhZ2Ugc3VyZmFjZS4gKi9cbnR5cGUgUGVyc2lzdGVudFN0b3JhZ2VCYXNlID0gQ2FjaGVTdG9yYWdlICYge1xuICBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD47XG4gIGluaXRpYWxpemVkOiBib29sZWFuO1xufTtcblxudHlwZSBQZXJzaXN0ZW50U3RvcmFnZUNvbnN0cnVjdG9yID0gbmV3IChcbiAgY29uZmlnOiBDYWNoZUNvbmZpZyxcbiAgcG9vbDogTGFrZWJhc2VQb29sLFxuKSA9PiBQZXJzaXN0ZW50U3RvcmFnZUJhc2U7XG5cbmxldCBwZXJzaXN0ZW50U3RvcmFnZUN0b3I6IFBlcnNpc3RlbnRTdG9yYWdlQ29uc3RydWN0b3IgfCB1bmRlZmluZWQgfCBudWxsID0gbnVsbDtcblxuLyoqXG4gKiBMYXppbHkgcmVzb2x2ZSBBcHBLaXQncyBpbnRlcm5hbCBgUGVyc2lzdGVudFN0b3JhZ2VgIGNvbnN0cnVjdG9yLiBgbnVsbGBcbiAqIG1lYW5zIHRoZSBsb29rdXAgYWxyZWFkeSBmYWlsZWQ7IGB1bmRlZmluZWRgIG1lYW5zIG5vdCBhdHRlbXB0ZWQgeWV0LlxuICovXG5mdW5jdGlvbiBsb2FkUGVyc2lzdGVudFN0b3JhZ2UoKTogUGVyc2lzdGVudFN0b3JhZ2VDb25zdHJ1Y3RvciB8IHVuZGVmaW5lZCB7XG4gIGlmIChwZXJzaXN0ZW50U3RvcmFnZUN0b3IgIT09IG51bGwpIHtcbiAgICByZXR1cm4gcGVyc2lzdGVudFN0b3JhZ2VDdG9yO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbiAgICBjb25zdCBtb2R1bGVQYXRoID0gam9pbihcbiAgICAgIGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwiQGRhdGFicmlja3MvYXBwa2l0XCIpKSxcbiAgICAgIFwiY2FjaGUvc3RvcmFnZS9wZXJzaXN0ZW50LmpzXCIsXG4gICAgKTtcbiAgICBjb25zdCBsb2FkZWQgPSByZXF1aXJlKG1vZHVsZVBhdGgpLlBlcnNpc3RlbnRTdG9yYWdlIGFzXG4gICAgICBQZXJzaXN0ZW50U3RvcmFnZUNvbnN0cnVjdG9yIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2YgbG9hZGVkICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInNvZnQgcGVyc2lzdGVudCBjYWNoZSBza2lwcGVkIChQZXJzaXN0ZW50U3RvcmFnZSBtaXNzaW5nKVwiKTtcbiAgICAgIHBlcnNpc3RlbnRTdG9yYWdlQ3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHBlcnNpc3RlbnRTdG9yYWdlQ3RvciA9IGxvYWRlZDtcbiAgICByZXR1cm4gbG9hZGVkO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJzb2Z0IHBlcnNpc3RlbnQgY2FjaGUgc2tpcHBlZCAoUGVyc2lzdGVudFN0b3JhZ2UgdW5hdmFpbGFibGUpXCIsIHtcbiAgICAgIGVycm9yOiBlcnJvci5lcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgICBwZXJzaXN0ZW50U3RvcmFnZUN0b3IgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKiogU29mdGVuIGBpbml0aWFsaXplKClgIHNvIGEgbWlncmF0aW9uIGZhaWx1cmUgaXMgbG9nZ2VkIG9uY2UsIG5vdCB0aHJvd24uICovXG5mdW5jdGlvbiBzb2Z0ZW5Jbml0aWFsaXplKHN0b3JhZ2U6IFBlcnNpc3RlbnRTdG9yYWdlQmFzZSk6IHZvaWQge1xuICBjb25zdCBvcmlnaW5hbEluaXRpYWxpemUgPSBzdG9yYWdlLmluaXRpYWxpemUuYmluZChzdG9yYWdlKTtcbiAgbGV0IHNvZnRJbml0UHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcblxuICBzdG9yYWdlLmluaXRpYWxpemUgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHN0b3JhZ2UuaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgICBzb2Z0SW5pdFByb21pc2UgPz89IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBvcmlnaW5hbEluaXRpYWxpemUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBzdG9yYWdlLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLmVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgICBpZiAoIWxvZ2dlZE1pZ3JhdGlvbkVycm9ycy5oYXMobWVzc2FnZSkpIHtcbiAgICAgICAgICBsb2dnZWRNaWdyYXRpb25FcnJvcnMuYWRkKG1lc3NhZ2UpO1xuICAgICAgICAgIGlmIChpc0RlYnVnRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJwZXJzaXN0ZW50IGNhY2hlIG1pZ3JhdGlvbiBmYWlsZWRcIiwgZXJyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oXCJwZXJzaXN0ZW50IGNhY2hlIG1pZ3JhdGlvbiBmYWlsZWRcIiwgeyBlcnJvcjogbWVzc2FnZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzb2Z0SW5pdFByb21pc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHN0b3JhZ2UuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHNvZnQtZmFpbCBMYWtlYmFzZSBjYWNoZSBzdG9yYWdlIHdoZW4gYSBwb29sIGNhbiBiZSBjcmVhdGVkIGFuZFxuICogQXBwS2l0J3MgUGVyc2lzdGVudFN0b3JhZ2UgY2FuIGJlIGxvYWRlZC4gUmV0dXJucyBgdW5kZWZpbmVkYCBvdGhlcndpc2Ugc29cbiAqIEFwcEtpdCBjYW4gZmFsbCB0aHJvdWdoIHRvIGl0cyBub3JtYWwgY2FjaGUgcGF0aC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNvZnRQZXJzaXN0ZW50U3RvcmFnZShcbiAgY2FjaGU6IENhY2hlQ29uZmlnIHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTxDYWNoZVN0b3JhZ2UgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgUGVyc2lzdGVudFN0b3JhZ2UgPSBsb2FkUGVyc2lzdGVudFN0b3JhZ2UoKTtcbiAgaWYgKCFQZXJzaXN0ZW50U3RvcmFnZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgcG9vbDogTGFrZWJhc2VQb29sIHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHBvb2wgPSBjcmVhdGVMYWtlYmFzZVBvb2woeyB3b3Jrc3BhY2VDbGllbnQ6IGdldFdvcmtzcGFjZUNsaWVudCh7fSkgfSk7XG4gICAgY29uc3Qgc3RvcmFnZSA9IG5ldyBQZXJzaXN0ZW50U3RvcmFnZShjYWNoZSA/PyB7fSwgcG9vbCk7XG4gICAgc29mdGVuSW5pdGlhbGl6ZShzdG9yYWdlKTtcbiAgICBpZiAoIShhd2FpdCBzdG9yYWdlLmhlYWx0aENoZWNrKCkpKSB7XG4gICAgICBhd2FpdCBzdG9yYWdlLmNsb3NlKCkuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgYXdhaXQgc3RvcmFnZS5pbml0aWFsaXplKCk7XG4gICAgcmV0dXJuIHN0b3JhZ2U7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInNvZnQgcGVyc2lzdGVudCBjYWNoZSB1bmF2YWlsYWJsZVwiLCB7XG4gICAgICBlcnJvcjogZXJyb3IuZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gICAgaWYgKHBvb2wpIHtcbiAgICAgIGF3YWl0IHBvb2wuZW5kKCkuY2F0Y2goKCkgPT4ge30pO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2NhY2hlLXN0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX2NhY2hlLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBb0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTNDLHVEQUF1RDtBQUN2RCxNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFFaEQsMERBQTBEO0FBQzFELFNBQVMsY0FBYztJQUNyQixPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELHlGQUF5RjtBQUN6RixTQUFTLHlCQUF5QixDQUFDLEdBQVk7SUFDN0MsT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBZ0JELElBQUkscUJBQXFCLEdBQW9ELElBQUksQ0FBQztBQUVsRjs7O0dBR0c7QUFDSCxTQUFTLHFCQUFxQjtJQUM1QixJQUFJLHFCQUFxQixLQUFLLElBQUksRUFBRSxDQUFDO1FBQ25DLE9BQU8scUJBQXFCLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLE1B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QUM7SUFDakIsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFO1lBQ2hELEtBQUssRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztTQUMvQixDQUFDLENBQUM7UUFDSCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU29mdC1mYWlsIExha2ViYXNlIGNhY2hlIHN0b3JhZ2UgZm9yIEFwcEtpdCdzIHBlcnNpc3RlbnQgY2FjaGUuXG4gKlxuICogQXBwS2l0J3MgYFBlcnNpc3RlbnRTdG9yYWdlLmluaXRpYWxpemUoKWAgcnVucyBEREwgbWlncmF0aW9ucyBhbmQgdGhyb3dzIG9uXG4gKiBhbnkgc3RlcCBmYWlsdXJlLiBXaXRoIGBjYWNoZS5zdHJpY3RQZXJzaXN0ZW5jZTogdHJ1ZWAgdGhhdCB0aHJvdyBtYWtlc1xuICogYENhY2hlTWFuYWdlcmAgc2lsZW50bHkgZGlzYWJsZSB0aGUgY2FjaGUuIFRoaXMgd3JhcHMgdGhlIHNhbWUgc3RvcmFnZSxcbiAqIHN0aWxsIHJ1bnMgaXRzIG1pZ3JhdGlvbnMsIGJ1dCBsb2dzIGEgZmFpbGVkIHN0ZXAgaW5zdGVhZCBvZiB0aHJvd2luZyBzbyBhXG4gKiB1c2FibGUgdGFibGUga2VlcHMgc2VydmluZy5cbiAqXG4gKiBgUGVyc2lzdGVudFN0b3JhZ2VgIGlzIG5vdCBvbiBBcHBLaXQncyBwdWJsaWMgZXhwb3J0IG1hcC4gVGhlIGRlZXAgbG9hZCBpc1xuICogbGF6eSBhbmQgYmVzdC1lZmZvcnQ6IGlmIHRoZSBpbnN0YWxsZWQgQXBwS2l0IGxheW91dCBjaGFuZ2VzLCB0aGlzIHJldHVybnNcbiAqIGB1bmRlZmluZWRgIGFuZCBgY3JlYXRlQXBwYCBsZWF2ZXMgQXBwS2l0IG9uIGl0cyBkZWZhdWx0IGNhY2hlIHBhdGguXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBjcmVhdGVMYWtlYmFzZVBvb2wsIGdldFdvcmtzcGFjZUNsaWVudCwgdHlwZSBDYWNoZUNvbmZpZyB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGVycm9yLCBoYXNoLCBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiY2FjaGUtc3RvcmFnZVwiKTtcblxuLyoqIFByb2Nlc3Mtd2lkZSBkZWR1cGUgZm9yIHNvZnQgbWlncmF0aW9uIHdhcm5pbmdzLiAqL1xuY29uc3QgbG9nZ2VkTWlncmF0aW9uRXJyb3JzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbi8qKiBXaGV0aGVyIGBMT0dfTEVWRUxgIGlzIGN1cnJlbnRseSBhdCBvciBiZWxvdyBkZWJ1Zy4gKi9cbmZ1bmN0aW9uIGlzRGVidWdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gbG9nLmlzTGV2ZWxFbmFibGVkKFwiZGVidWdcIik7XG59XG5cbi8qKiBXaGV0aGVyIGEgbWlncmF0aW9uIGZhaWxlZCBvbmx5IGJlY2F1c2UgdGhpcyByb2xlIGRvZXMgbm90IG93biBhbiBleGlzdGluZyBvYmplY3QuICovXG5mdW5jdGlvbiBpc093bmVyc2hpcE1pZ3JhdGlvbkVycm9yKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gZXJyb3IuZXJyb3JDb250ZXh0KGVycikuaGFzTWVzc2FnZShcIm11c3QgYmUgb3duZXJcIik7XG59XG5cbnR5cGUgTGFrZWJhc2VQb29sID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlTGFrZWJhc2VQb29sPjtcbnR5cGUgQ2FjaGVTdG9yYWdlID0gTm9uTnVsbGFibGU8Q2FjaGVDb25maWdbXCJzdG9yYWdlXCJdPjtcblxuLyoqIEFwcEtpdCdzIGludGVybmFsIHBlcnNpc3RlbnQgc3RvcmFnZSBzdXJmYWNlLiAqL1xuZXhwb3J0IHR5cGUgUGVyc2lzdGVudFN0b3JhZ2VCYXNlID0gQ2FjaGVTdG9yYWdlICYge1xuICBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD47XG4gIGluaXRpYWxpemVkOiBib29sZWFuO1xufTtcblxudHlwZSBQZXJzaXN0ZW50U3RvcmFnZUNvbnN0cnVjdG9yID0gbmV3IChcbiAgY29uZmlnOiBDYWNoZUNvbmZpZyxcbiAgcG9vbDogTGFrZWJhc2VQb29sLFxuKSA9PiBQZXJzaXN0ZW50U3RvcmFnZUJhc2U7XG5cbmxldCBwZXJzaXN0ZW50U3RvcmFnZUN0b3I6IFBlcnNpc3RlbnRTdG9yYWdlQ29uc3RydWN0b3IgfCB1bmRlZmluZWQgfCBudWxsID0gbnVsbDtcblxuLyoqXG4gKiBMYXppbHkgcmVzb2x2ZSBBcHBLaXQncyBpbnRlcm5hbCBgUGVyc2lzdGVudFN0b3JhZ2VgIGNvbnN0cnVjdG9yLiBgbnVsbGBcbiAqIG1lYW5zIG5vdCBhdHRlbXB0ZWQgeWV0OyBgdW5kZWZpbmVkYCBtZWFucyB0aGUgbG9va3VwIGFscmVhZHkgZmFpbGVkLlxuICovXG5mdW5jdGlvbiBsb2FkUGVyc2lzdGVudFN0b3JhZ2UoKTogUGVyc2lzdGVudFN0b3JhZ2VDb25zdHJ1Y3RvciB8IHVuZGVmaW5lZCB7XG4gIGlmIChwZXJzaXN0ZW50U3RvcmFnZUN0b3IgIT09IG51bGwpIHtcbiAgICByZXR1cm4gcGVyc2lzdGVudFN0b3JhZ2VDdG9yO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbiAgICBjb25zdCBtb2R1bGVQYXRoID0gam9pbihcbiAgICAgIGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwiQGRhdGFicmlja3MvYXBwa2l0XCIpKSxcbiAgICAgIFwiY2FjaGUvc3RvcmFnZS9wZXJzaXN0ZW50LmpzXCIsXG4gICAgKTtcbiAgICBjb25zdCBsb2FkZWQgPSByZXF1aXJlKG1vZHVsZVBhdGgpLlBlcnNpc3RlbnRTdG9yYWdlIGFzXG4gICAgICBQZXJzaXN0ZW50U3RvcmFnZUNvbnN0cnVjdG9yIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2YgbG9hZGVkICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInNvZnQgcGVyc2lzdGVudCBjYWNoZSBza2lwcGVkIChQZXJzaXN0ZW50U3RvcmFnZSBtaXNzaW5nKVwiKTtcbiAgICAgIHBlcnNpc3RlbnRTdG9yYWdlQ3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHBlcnNpc3RlbnRTdG9yYWdlQ3RvciA9IGxvYWRlZDtcbiAgICByZXR1cm4gbG9hZGVkO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJzb2Z0IHBlcnNpc3RlbnQgY2FjaGUgc2tpcHBlZCAoUGVyc2lzdGVudFN0b3JhZ2UgdW5hdmFpbGFibGUpXCIsIHtcbiAgICAgIGVycm9yOiBlcnJvci5lcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgICBwZXJzaXN0ZW50U3RvcmFnZUN0b3IgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKiogU29mdGVuIGBpbml0aWFsaXplKClgIHNvIGEgbWlncmF0aW9uIGZhaWx1cmUgaXMgbG9nZ2VkIG9uY2UsIG5vdCB0aHJvd24uICovXG5leHBvcnQgZnVuY3Rpb24gc29mdGVuSW5pdGlhbGl6ZShzdG9yYWdlOiBQZXJzaXN0ZW50U3RvcmFnZUJhc2UpOiB2b2lkIHtcbiAgY29uc3Qgb3JpZ2luYWxJbml0aWFsaXplID0gc3RvcmFnZS5pbml0aWFsaXplLmJpbmQoc3RvcmFnZSk7XG4gIGxldCBzb2Z0SW5pdFByb21pc2U6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG5cbiAgc3RvcmFnZS5pbml0aWFsaXplID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChzdG9yYWdlLmluaXRpYWxpemVkKSByZXR1cm47XG4gICAgc29mdEluaXRQcm9taXNlID8/PSAoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgb3JpZ2luYWxJbml0aWFsaXplKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCFpc093bmVyc2hpcE1pZ3JhdGlvbkVycm9yKGVycikpIHRocm93IGVycjtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLmVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgICBpZiAoIWxvZ2dlZE1pZ3JhdGlvbkVycm9ycy5oYXMobWVzc2FnZSkpIHtcbiAgICAgICAgICBsb2dnZWRNaWdyYXRpb25FcnJvcnMuYWRkKG1lc3NhZ2UpO1xuICAgICAgICAgIGlmIChpc0RlYnVnRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJwZXJzaXN0ZW50IGNhY2hlIG1pZ3JhdGlvbiBmYWlsZWRcIiwgZXJyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oXCJwZXJzaXN0ZW50IGNhY2hlIG1pZ3JhdGlvbiBmYWlsZWRcIiwgeyBlcnJvcjogbWVzc2FnZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzb2Z0SW5pdFByb21pc2U7XG4gICAgICBzdG9yYWdlLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNvZnRJbml0UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH07XG59XG5cbi8qKiBWZXJpZnkgdGhlIG1pZ3JhdGVkIGNhY2hlIHRhYmxlIGNhbiBzZXJ2ZSB0aGUgcmVhZHMgYW5kIHdyaXRlcyBBcHBLaXQgbmVlZHMuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvYmVTdG9yYWdlKHN0b3JhZ2U6IFBlcnNpc3RlbnRTdG9yYWdlQmFzZSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBrZXkgPSBgZGJ4LXRvb2xzOmNhY2hlLXByb2JlOiR7aGFzaC5pZCgpfWA7XG4gIHRyeSB7XG4gICAgYXdhaXQgc3RvcmFnZS5zZXQoa2V5LCB7IHZhbHVlOiBrZXksIGV4cGlyeTogRGF0ZS5ub3coKSArIDYwXzAwMCB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdG9yYWdlLmdldChrZXkpO1xuICAgIGlmIChyZXN1bHQ/LnZhbHVlICE9PSBrZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInBlcnNpc3RlbnQgY2FjaGUgcHJvYmUgcmV0dXJuZWQgYW4gdW5leHBlY3RlZCB2YWx1ZVwiKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgc3RvcmFnZS5kZWxldGUoa2V5KS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGQgYSBzb2Z0LWZhaWwgTGFrZWJhc2UgY2FjaGUgc3RvcmFnZSB3aGVuIGEgcG9vbCBjYW4gYmUgY3JlYXRlZCBhbmRcbiAqIEFwcEtpdCdzIFBlcnNpc3RlbnRTdG9yYWdlIGNhbiBiZSBsb2FkZWQuIFJldHVybnMgYHVuZGVmaW5lZGAgb3RoZXJ3aXNlIHNvXG4gKiBBcHBLaXQgY2FuIGZhbGwgdGhyb3VnaCB0byBpdHMgbm9ybWFsIGNhY2hlIHBhdGguXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTb2Z0UGVyc2lzdGVudFN0b3JhZ2UoXG4gIGNhY2hlOiBDYWNoZUNvbmZpZyB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8Q2FjaGVTdG9yYWdlIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IFBlcnNpc3RlbnRTdG9yYWdlID0gbG9hZFBlcnNpc3RlbnRTdG9yYWdlKCk7XG4gIGlmICghUGVyc2lzdGVudFN0b3JhZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IHBvb2w6IExha2ViYXNlUG9vbCB8IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBwb29sID0gY3JlYXRlTGFrZWJhc2VQb29sKHsgd29ya3NwYWNlQ2xpZW50OiBnZXRXb3Jrc3BhY2VDbGllbnQoe30pIH0pO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSBuZXcgUGVyc2lzdGVudFN0b3JhZ2UoY2FjaGUgPz8ge30sIHBvb2wpO1xuICAgIHNvZnRlbkluaXRpYWxpemUoc3RvcmFnZSk7XG4gICAgaWYgKCEoYXdhaXQgc3RvcmFnZS5oZWFsdGhDaGVjaygpKSkge1xuICAgICAgYXdhaXQgc3RvcmFnZS5jbG9zZSgpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGF3YWl0IHN0b3JhZ2UuaW5pdGlhbGl6ZSgpO1xuICAgIGF3YWl0IHByb2JlU3RvcmFnZShzdG9yYWdlKTtcbiAgICByZXR1cm4gc3RvcmFnZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwic29mdCBwZXJzaXN0ZW50IGNhY2hlIHVuYXZhaWxhYmxlXCIsIHtcbiAgICAgIGVycm9yOiBlcnJvci5lcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgICBpZiAocG9vbCkge1xuICAgICAgYXdhaXQgcG9vbC5lbmQoKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
package/lib/src/appkit.js
CHANGED
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
*/
|
|
29
29
|
import { createApp as appkitCreateApp, getExecutionContext, InitializationError, } from "@databricks/appkit";
|
|
30
30
|
import { async, log } from "@dbx-tools/shared-core";
|
|
31
|
-
import { createInterceptorContext, lifecycleBridge, } from "./interceptor.js";
|
|
32
31
|
import { createSoftPersistentStorage } from "./_cache-storage.js";
|
|
32
|
+
import { createInterceptorContext, lifecycleBridge, } from "./interceptor.js";
|
|
33
33
|
import { applyLakebaseEnv } from "./lakebase-resolver.js";
|
|
34
34
|
import { provisionCacheSchema } from "./provision.js";
|
|
35
35
|
const logger = log.logger("appkit");
|
|
@@ -301,4 +301,4 @@ export async function ensureInitialized() {
|
|
|
301
301
|
await createApp({ plugins: [], autoConfigure: false });
|
|
302
302
|
logger.debug("ensureInitialized: done");
|
|
303
303
|
}
|
|
304
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwa2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcGtpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUgsT0FBTyxFQUNMLFNBQVMsSUFBSSxlQUFlLEVBQzVCLG1CQUFtQixFQUNuQixtQkFBbUIsR0FDcEIsTUFBTSxvQkFBb0IsQ0FBQztBQUk1QixPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXBELE9BQU8sRUFDTCx3QkFBd0IsRUFHeEIsZUFBZSxHQUVoQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBMkIsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBNENwQyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUM7QUFDbkMsTUFBTSxzQkFBc0IsR0FBc0IsV0FBVyxDQUFDO0FBRTlEOzs7Ozs7R0FNRztBQUNILE1BQU0seUJBQXlCLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUU5QyxTQUFTLFVBQVUsQ0FDakIsTUFBc0MsRUFDdEMsSUFBWTtJQUVaLE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVELG9EQUFvRDtBQUNwRCxTQUFTLFdBQVcsQ0FBQyxNQUFtQztJQUN0RCxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FB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Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCO0lBQ3JDLElBQUksc0JBQXNCLEVBQUUsRUFBRSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN2RCxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUMzRCxNQUFNLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdkQsTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcEtpdCBydW50aW1lIGdsdWU6IHRoZSBhdXRvLWNvbmZpZ3VyaW5nIGBjcmVhdGVBcHBgIGRyb3AtaW4sIHBsdXMgdGhlXG4gKiBwZXItcmVxdWVzdCBleGVjdXRpb24gY29udGV4dCBoZWxwZXJzIGFuZCB0eXBlcyBkZXJpdmVkIGZyb20gaXQuXG4gKlxuICogYGNyZWF0ZUFwcGAgcnVucyBkYngtdG9vbHMgYXV0by1jb25maWd1cmF0aW9uLCB0aGVuIGRlbGVnYXRlcyB0byBBcHBLaXQncyBvd25cbiAqIGBjcmVhdGVBcHBgIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzIGFuZCB0aGUgc2FtZSB0eXBlZCBwbHVnaW4tZXhwb3J0IG1hcC5cbiAqIERyb3AgaXQgaW4gYXMgYSBvbmUtZm9yLW9uZSByZXBsYWNlbWVudDpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbGFrZWJhc2UsIHNlcnZlciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuICpcbiAqIGF3YWl0IGFwcGtpdC5jcmVhdGVBcHAoeyBwbHVnaW5zOiBbc2VydmVyKCksIGxha2ViYXNlKCldIH0pO1xuICogYGBgXG4gKlxuICogQXV0by1jb25maWd1cmF0aW9uIHJ1bnMgQkVGT1JFIGRlbGVnYXRpbmcgc28gcGx1Z2lucyBzZWUgYSBmdWxseSBwb3B1bGF0ZWRcbiAqIGBwcm9jZXNzLmVudmAgZHVyaW5nIHRoZWlyIHN5bmNocm9ub3VzIGBzZXR1cCgpYC4gTGFrZWJhc2UgUG9zdGdyZXMgcnVucyB3aGVuXG4gKiBhIGBsYWtlYmFzZWAgcGx1Z2luIGlzIHByZXNlbnQsIG9yIHdoZW4ge0BsaW5rIEF1dG9Db25maWd1cmVNb2RlfSBpcyBzZXRcbiAqIGV4cGxpY2l0bHkgb24gdGhlIGNvbmZpZyBvYmplY3QuXG4gKlxuICogYGdldEV4ZWN1dGlvbkNvbnRleHQoKWAgaXMgQXBwS2l0J3Mgb3duIGFjY2Vzc29yIGZvciB0aGUgT0JPLXNjb3BlZCB3b3Jrc3BhY2VcbiAqIGNsaWVudCArIHJlcXVlc3QgbWV0YWRhdGE7IHRoZSB3cmFwcGVycyBoZXJlIG1ha2UgaXQgc2FmZSB0byBjYWxsIG91dHNpZGUgYVxuICogcmVxdWVzdCBzY29wZSAoe0BsaW5rIHRyeUdldEV4ZWN1dGlvbkNvbnRleHR9KSBhbmQgdG8gbGF6aWx5IGJvb3QgYSBiYXJlIGFwcFxuICogKHtAbGluayBlbnN1cmVJbml0aWFsaXplZH0pLCBhbmQgcmUtZXhwb3J0IHRoZSBkZXJpdmVkIHR5cGVzIHNvIGFkZC1vblxuICogcGFja2FnZXMgY2FuIHR5cGUgYSBjb250ZXh0IC8gY2xpZW50IHdpdGhvdXQgcmUtZGVyaXZpbmcgdGhlbSBpbmxpbmUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7XG4gIGNyZWF0ZUFwcCBhcyBhcHBraXRDcmVhdGVBcHAsXG4gIGdldEV4ZWN1dGlvbkNvbnRleHQsXG4gIEluaXRpYWxpemF0aW9uRXJyb3IsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbi8vIEFwcEtpdCdzIHJvb3QgYmFycmVsIHJlLWV4cG9ydHMgYFBsdWdpbkRhdGFgIGJ1dCBub3QgYFBsdWdpbk1hcGA7IHRoZSBwYWNrYWdlXG4vLyBwdWJsaXNoZXMgdGhpcyBzdWJwYXRoIGZvciBleGFjdGx5IHRoYXQgdHlwZS5cbmltcG9ydCB0eXBlIHsgUGx1Z2luTWFwIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdC9kaXN0L3NoYXJlZC9zcmMvcGx1Z2luXCI7XG5pbXBvcnQgeyBhc3luYywgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuaW1wb3J0IHtcbiAgY3JlYXRlSW50ZXJjZXB0b3JDb250ZXh0LFxuICB0eXBlIEludGVyY2VwdG9yLFxuICB0eXBlIEludGVyY2VwdG9yUnVudGltZSxcbiAgbGlmZWN5Y2xlQnJpZGdlLFxuICB0eXBlIFJlc29sdmVkQXBwRW52LFxufSBmcm9tIFwiLi9pbnRlcmNlcHRvci50c1wiO1xuaW1wb3J0IHsgY3JlYXRlU29mdFBlcnNpc3RlbnRTdG9yYWdlIH0gZnJvbSBcIi4vX2NhY2hlLXN0b3JhZ2UudHNcIjtcbmltcG9ydCB7IGFwcGx5TGFrZWJhc2VFbnYsIHR5cGUgTGFrZWJhc2VDb25uZWN0aW9uIH0gZnJvbSBcIi4vbGFrZWJhc2UtcmVzb2x2ZXIudHNcIjtcbmltcG9ydCB7IHByb3Zpc2lvbkNhY2hlU2NoZW1hIH0gZnJvbSBcIi4vcHJvdmlzaW9uLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJhcHBraXRcIik7XG5cbnR5cGUgQXBwS2l0Q3JlYXRlQXBwQ29uZmlnID0gTm9uTnVsbGFibGU8UGFyYW1ldGVyczx0eXBlb2YgYXBwa2l0Q3JlYXRlQXBwPlswXT47XG50eXBlIEFwcEtpdFBsdWdpbnMgPSBOb25OdWxsYWJsZTxBcHBLaXRDcmVhdGVBcHBDb25maWdbXCJwbHVnaW5zXCJdPjtcblxuLyoqXG4gKiBXaGF0IGF1dG8tY29uZmlndXJhdGlvbiBkb2VzIGJlZm9yZSBBcHBLaXQgYm9vdHMuXG4gKlxuICogLSBgXCJwcm92aXNpb25cImA6IHJlc29sdmUgdGhlIExha2ViYXNlIGNvbm5lY3Rpb24gaW50byBgcHJvY2Vzcy5lbnZgLCB0aGVuXG4gKiAgIGdyYW50IHRoZSBBcHBLaXQgY2FjaGUgc2NoZW1hIHRvIHRoZSBjb25uZWN0aW5nIHJvbGUuXG4gKiAtIGBcImVudlwiYDogcmVzb2x2ZSB0aGUgTGFrZWJhc2UgY29ubmVjdGlvbiBpbnRvIGBwcm9jZXNzLmVudmAgb25seS5cbiAqXG4gKiBPbWl0IGl0IHRvIGdldCBgXCJwcm92aXNpb25cImAgZ2F0ZWQgb24gYSBgbGFrZWJhc2VgIHBsdWdpbiBiZWluZyByZWdpc3RlcmVkO1xuICogc2V0IGl0IGV4cGxpY2l0bHkgdG8gcnVuIHJlZ2FyZGxlc3Mgb2YgdGhlIHBsdWdpbiBsaXN0LCBvciBwYXNzIGBmYWxzZWAgdG9cbiAqIHNraXAgYXV0by1jb25maWd1cmF0aW9uIGVudGlyZWx5LlxuICpcbiAqIFNldCBpdCBFWFBMSUNJVExZIG9uIGFuIGFwcCB0aGF0IGhhcyBubyBgbGFrZWJhc2UoKWAgcGx1Z2luIGJ1dCBzdGlsbCB3YW50c1xuICogQXBwS2l0J3MgUEVSU0lTVEVOVCBjYWNoZS4gQXBwS2l0IHBpY2tzIExha2ViYXNlIGZvciBgQ2FjaGVNYW5hZ2VyYCBvbmx5IHdoZW5cbiAqIGBjcmVhdGVMYWtlYmFzZVBvb2woKWAgY2FuIGJ1aWxkIGEgcG9vbCwgYW5kIHRoYXQgcmVhZHMgYExBS0VCQVNFX0VORFBPSU5UYCAvXG4gKiBgUEdIT1NUYCAvIGBQR0RBVEFCQVNFYCBzdHJhaWdodCBmcm9tIGBwcm9jZXNzLmVudmAgLSBzbyB3aXRob3V0IHRoaXMgc3RlcCB0aGVcbiAqIGNhY2hlIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gaW4tbWVtb3J5LCBhbmQgYW55dGhpbmcgaXQgaG9sZHMgKGEgc2Vzc2lvblxuICogc2lnbmluZyBrZXksIGEgb25lLXRpbWUgY29kZSkgaXMgbG9zdCBvbiByZXN0YXJ0LiBgXCJlbnZcImAgaXMgdGhlIHJpZ2h0IG1vZGVcbiAqIHRoZXJlOiB0aGUgYXBwIFNQIGNhbm5vdCBncmFudCBvbiB0aGUgY2FjaGUgc2NoZW1hIGFueXdheS5cbiAqL1xuZXhwb3J0IHR5cGUgQXV0b0NvbmZpZ3VyZU1vZGUgPSBcImVudlwiIHwgXCJwcm92aXNpb25cIjtcblxuLyoqIEFwcEtpdCdzIGBjcmVhdGVBcHBgIGNvbmZpZyBwbHVzIHRoZSBkYngtdG9vbHMgYXV0by1jb25maWd1cmF0aW9uIHN3aXRjaC4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUFwcENvbmZpZzxUIGV4dGVuZHMgQXBwS2l0UGx1Z2lucyA9IEFwcEtpdFBsdWdpbnM+ID0gT21pdDxcbiAgQXBwS2l0Q3JlYXRlQXBwQ29uZmlnLFxuICBcInBsdWdpbnNcIiB8IFwib25QbHVnaW5zUmVhZHlcIlxuPiAmIHtcbiAgcGx1Z2lucz86IFQ7XG4gIG9uUGx1Z2luc1JlYWR5PzogKGFwcGtpdDogUGx1Z2luTWFwPFQ+KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEF1dG8tY29uZmlndXJhdGlvbiB0byBydW4gYmVmb3JlIEFwcEtpdCBib290cy4gRGVmYXVsdHMgdG8gYFwicHJvdmlzaW9uXCJgLiAqL1xuICBhdXRvQ29uZmlndXJlPzogQXV0b0NvbmZpZ3VyZU1vZGUgfCBmYWxzZTtcbiAgLyoqXG4gICAqIE9uZSBvciBtYW55IHtAbGluayBJbnRlcmNlcHRvcn1zIGhhbmRlZCBhbiB7QGxpbmsgSW50ZXJjZXB0b3JDb250ZXh0fSBvbmNlXG4gICAqIGF1dG8tY29uZmlndXJhdGlvbiBoYXMgY29tcHV0ZWQgdGhlIGVudi4gRWFjaCByZWNlaXZlcyB0aGUgcmVzb2x2ZWQgZW52LCBhblxuICAgKiBBcHBLaXQtbGlmZWN5Y2xlIGhvb2ssIGFuZCBgYmluZFByb2Nlc3NgIGZvciBjb25jdXJyZW50bHktc3R5bGUgc3VwZXJ2aXNpb24gLVxuICAgKiBzZWUgYC4vaW50ZXJjZXB0b3JgLiBUaGUgdHVubmVsIGlzIHRoZSBwcmltYXJ5IGNvbnN1bWVyLlxuICAgKi9cbiAgaW50ZXJjZXB0b3I/OiBJbnRlcmNlcHRvciB8IEludGVyY2VwdG9yW107XG59O1xuXG5jb25zdCBMQUtFQkFTRV9QTFVHSU4gPSBcImxha2ViYXNlXCI7XG5jb25zdCBERUZBVUxUX0FVVE9fQ09ORklHVVJFOiBBdXRvQ29uZmlndXJlTW9kZSA9IFwicHJvdmlzaW9uXCI7XG5cbi8qKlxuICogVXBwZXIgYm91bmQgb24gYm9vdC10aW1lIGF1dG8tY29uZmlndXJhdGlvbi4gSXQgcnVucyBhcyB0aGUgc2VydmljZSBwcmluY2lwYWxcbiAqIGJlZm9yZSBhbnkgcGx1Z2luIGlzIGNvbnN0cnVjdGVkLCBzbyBpdCBzaXRzIG91dHNpZGUgQXBwS2l0J3MgaW50ZXJjZXB0b3JcbiAqIGNoYWluIGFuZCBpbmhlcml0cyBubyB0aW1lb3V0LCByZXRyeSwgb3IgdGVsZW1ldHJ5IGZyb20gaXQuIFRoZSBidWRnZXQgY292ZXJzXG4gKiB0aGUgcmVzb2x2ZXIncyBvd24gd29yc3QgY2FzZSAoY3JlYXRlIGEgcHJvamVjdCwgdGhlbiB3YWl0IGZvciBpdHMgZW5kcG9pbnQpXG4gKiBwbHVzIHRoZSBjYWNoZS1zY2hlbWEgZ3JhbnRzLlxuICovXG5jb25zdCBBVVRPX0NPTkZJR1VSRV9USU1FT1VUX01TID0gMTEgKiA2MF8wMDA7XG5cbmZ1bmN0aW9uIHVzZXNQbHVnaW48VCBleHRlbmRzIEFwcEtpdFBsdWdpbnM+KFxuICBjb25maWc6IENyZWF0ZUFwcENvbmZpZzxUPiB8IHVuZGVmaW5lZCxcbiAgbmFtZTogc3RyaW5nLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKGNvbmZpZz8ucGx1Z2lucz8uc29tZSgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpKTtcbn1cblxuLyoqIFBsdWdpbiBuYW1lcyBmb3IgYm9vdCBsb2dzIChvcmRlciBwcmVzZXJ2ZWQpLiAqL1xuZnVuY3Rpb24gcGx1Z2luTmFtZXMoY29uZmlnOiBDcmVhdGVBcHBDb25maWcgfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gIHJldHVybiAoY29uZmlnPy5wbHVnaW5zID8/IFtdKS5tYXAoKGVudHJ5KSA9PiBlbnRyeS5uYW1lKTtcbn1cblxuLyoqXG4gKiBSdW4gZW5hYmxlZCBhdXRvLWNvbmZpZ3VyYXRpb24gc3RlcHMgd2l0aG91dCBjYWxsaW5nIEFwcEtpdCdzIGBjcmVhdGVBcHBgLlxuICpcbiAqIExha2ViYXNlIFBvc3RncmVzIHJlc29sdmVzIHdoZW4ge0BsaW5rIENyZWF0ZUFwcENvbmZpZy5hdXRvQ29uZmlndXJlfSBpcyBzZXRcbiAqIGV4cGxpY2l0bHkgb3IgYSBgbGFrZWJhc2VgIHBsdWdpbiBpcyBsaXN0ZWQgaW4gYGNvbmZpZy5wbHVnaW5zYC4gYHNpZ25hbGBcbiAqIGNhbmNlbHMgdGhlIHJlc29sdXRpb247IGl0IGlzIGNvbWJpbmVkIHdpdGggYW4gaW50ZXJuYWwgYm9vdCB0aW1lb3V0IGVpdGhlclxuICogd2F5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqXG4gKiAvLyBQb3B1bGF0ZSBQR0hPU1QgLyBQR0RBVEFCQVNFIC8gTEFLRUJBU0VfRU5EUE9JTlQgd2l0aG91dCBib290aW5nIEFwcEtpdC5cbiAqIGF3YWl0IGFwcGtpdC5hdXRvQ29uZmlndXJlKHsgYXV0b0NvbmZpZ3VyZTogXCJlbnZcIiB9KTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF1dG9Db25maWd1cmU8VCBleHRlbmRzIEFwcEtpdFBsdWdpbnM+KFxuICBjb25maWc/OiBDcmVhdGVBcHBDb25maWc8VD4sXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxMYWtlYmFzZUNvbm5lY3Rpb24gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgbW9kZSA9IGNvbmZpZz8uYXV0b0NvbmZpZ3VyZSA/PyBERUZBVUxUX0FVVE9fQ09ORklHVVJFO1xuICBjb25zdCBleHBsaWNpdCA9IGNvbmZpZz8uYXV0b0NvbmZpZ3VyZSAhPT0gdW5kZWZpbmVkO1xuICBjb25zdCBsYWtlYmFzZVBsdWdpblByZXNlbnQgPSB1c2VzUGx1Z2luKGNvbmZpZywgTEFLRUJBU0VfUExVR0lOKTtcbiAgY29uc3QgcGx1Z2lucyA9IHBsdWdpbk5hbWVzKGNvbmZpZyk7XG4gIGxvZ2dlci5kZWJ1ZyhcImF1dG9Db25maWd1cmU6IHN0YXJ0XCIsIHtcbiAgICBtb2RlLFxuICAgIGV4cGxpY2l0LFxuICAgIGxha2ViYXNlUGx1Z2luUHJlc2VudCxcbiAgICBwbHVnaW5zLFxuICAgIHRpbWVvdXRNczogQVVUT19DT05GSUdVUkVfVElNRU9VVF9NUyxcbiAgICBjYWxsZXJTaWduYWw6IEJvb2xlYW4oc2lnbmFsKSxcbiAgfSk7XG5cbiAgaWYgKG1vZGUgPT09IGZhbHNlIHx8ICEoZXhwbGljaXQgfHwgbGFrZWJhc2VQbHVnaW5QcmVzZW50KSkge1xuICAgIGNvbnN0IHNraXBwZWRSZWFzb24gPSBtb2RlID09PSBmYWxzZSA/IFwiZGlzYWJsZWRcIiA6IFwibm8gbGFrZWJhc2UgcGx1Z2luXCI7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYXV0b0NvbmZpZ3VyZTogc2tpcFwiLCB7IHNraXBwZWRSZWFzb24sIG1vZGUsIGxha2ViYXNlUGx1Z2luUHJlc2VudCwgcGx1Z2lucyB9KTtcbiAgICBsb2dnZXIuaW5mbyhcInJlYWR5XCIsIHtcbiAgICAgIGF1dG9Db25maWd1cmU6IG1vZGUsXG4gICAgICBsYWtlYmFzZVBsdWdpblByZXNlbnQsXG4gICAgICBwcm92aXNpb25lZDogZmFsc2UsXG4gICAgICBza2lwcGVkUmVhc29uLFxuICAgIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBhc3luYy50aWVBYm9ydFNpZ25hbChjb250cm9sbGVyLCBzaWduYWwpO1xuICBhc3luYy50aWVBYm9ydFNpZ25hbChjb250cm9sbGVyLCBBYm9ydFNpZ25hbC50aW1lb3V0KEFVVE9fQ09ORklHVVJFX1RJTUVPVVRfTVMpKTtcblxuICBjb25zdCBwcm92aXNpb24gPSBtb2RlID09PSBcInByb3Zpc2lvblwiO1xuICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlOiByZXNvbHZlIGxha2ViYXNlXCIsIHsgcHJvdmlzaW9uLCBtb2RlIH0pO1xuICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IGF1dG9Db25maWd1cmVMYWtlYmFzZShwcm92aXNpb24sIGNvbnRyb2xsZXIuc2lnbmFsKTtcbiAgbG9nZ2VyLmRlYnVnKFwiYXV0b0NvbmZpZ3VyZTogZG9uZVwiLCB7XG4gICAgbW9kZSxcbiAgICBsYWtlYmFzZVBsdWdpblByZXNlbnQsXG4gICAgcHJvdmlzaW9uZWQ6IHByb3Zpc2lvbixcbiAgICAuLi5yZWRhY3RMYWtlYmFzZUNvbm5lY3Rpb24ocmVzb2x2ZWQpLFxuICB9KTtcbiAgbG9nZ2VyLmluZm8oXCJyZWFkeVwiLCB7IGF1dG9Db25maWd1cmU6IG1vZGUsIGxha2ViYXNlUGx1Z2luUHJlc2VudCwgcHJvdmlzaW9uZWQ6IHByb3Zpc2lvbiB9KTtcbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmUgTGFrZWJhc2UgUG9zdGdyZXMgY29ubmVjdGlvbiBpbmZvLCB3cml0ZSB0aGUgcmVzb2x2ZWQgdmFsdWVzIHRvXG4gKiBgcHJvY2Vzcy5lbnZgLCBhbmQgcmV0dXJuIHRoZSByZWNvcmQuIFVzZWQgYnkge0BsaW5rIGF1dG9Db25maWd1cmV9OyBjYWxsXG4gKiB7QGxpbmsgYXBwbHlMYWtlYmFzZUVudn0gZGlyZWN0bHkgd2hlbiBmaW5lciBjb250cm9sIGlzIG5lZWRlZCAoYSBkaWZmZXJlbnRcbiAqIGBhdXRvQ3JlYXRlYCBwb2xpY3ksIG9yIGEgY2FsbGVyIHRoYXQgd2FudHMgdGhlIGVudiB3aXRob3V0IGJvb3RpbmcgQXBwS2l0KS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXV0b0NvbmZpZ3VyZUxha2ViYXNlKFxuICBwcm92aXNpb246IGJvb2xlYW4sXG4gIHNpZ25hbDogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPExha2ViYXNlQ29ubmVjdGlvbj4ge1xuICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlTGFrZWJhc2U6IGFwcGx5TGFrZWJhc2VFbnZcIik7XG4gIGNvbnN0IHsgcmVzb2x2ZWQsIHVzZXIgfSA9IGF3YWl0IGFwcGx5TGFrZWJhc2VFbnYodW5kZWZpbmVkLCBzaWduYWwpO1xuICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlTGFrZWJhc2U6IGVudiBhcHBsaWVkXCIsIHtcbiAgICAuLi5yZWRhY3RMYWtlYmFzZUNvbm5lY3Rpb24ocmVzb2x2ZWQpLFxuICAgIHVzZXIsXG4gICAgZW52OiB7XG4gICAgICBMQUtFQkFTRV9FTkRQT0lOVDogcHJvY2Vzcy5lbnYuTEFLRUJBU0VfRU5EUE9JTlQsXG4gICAgICBQR0hPU1Q6IHByb2Nlc3MuZW52LlBHSE9TVCxcbiAgICAgIFBHUE9SVDogcHJvY2Vzcy5lbnYuUEdQT1JULFxuICAgICAgUEdEQVRBQkFTRTogcHJvY2Vzcy5lbnYuUEdEQVRBQkFTRSxcbiAgICAgIFBHVVNFUjogcHJvY2Vzcy5lbnYuUEdVU0VSLFxuICAgICAgUEdTU0xNT0RFOiBwcm9jZXNzLmVudi5QR1NTTE1PREUsXG4gICAgfSxcbiAgfSk7XG4gIGxvZ2dlci5pbmZvKFwiZW52IHVwZGF0ZWRcIiwgeyAuLi5yZWRhY3RMYWtlYmFzZUNvbm5lY3Rpb24ocmVzb2x2ZWQpLCB1c2VyIH0pO1xuICBpZiAocHJvdmlzaW9uKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYXV0b0NvbmZpZ3VyZUxha2ViYXNlOiBwcm92aXNpb25DYWNoZVNjaGVtYVwiLCB7IHVzZXIgfSk7XG4gICAgYXdhaXQgcHJvdmlzaW9uQ2FjaGVTY2hlbWEodXNlciwgbG9nZ2VyKTtcbiAgICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlTGFrZWJhc2U6IHByb3Zpc2lvbkNhY2hlU2NoZW1hIGRvbmVcIik7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYXV0b0NvbmZpZ3VyZUxha2ViYXNlOiBza2lwIHByb3Zpc2lvbiAobW9kZT1lbnYpXCIpO1xuICB9XG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGBjcmVhdGVBcHBgIHNob3VsZCBpbmplY3Qgc29mdC1mYWlsIExha2ViYXNlIGNhY2hlIHN0b3JhZ2UuXG4gKlxuICogU2tpcHMgd2hlbiB0aGUgY2FsbGVyIGRpc2FibGVkIHRoZSBjYWNoZSwgYWxyZWFkeSBzdXBwbGllZCBhIHN0b3JhZ2VcbiAqIGJhY2tlbmQgKGluY2x1ZGluZyBpbi1tZW1vcnkpLCBvciBMYWtlYmFzZSBpcyBub3QgaW4gcGxheS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkSW5qZWN0U29mdFBlcnNpc3RlbnRDYWNoZShcbiAgY29uZmlnOiBDcmVhdGVBcHBDb25maWcgfCB1bmRlZmluZWQsXG4gIGxha2ViYXNlOiBMYWtlYmFzZUNvbm5lY3Rpb24gfCB1bmRlZmluZWQsXG4pOiBib29sZWFuIHtcbiAgY29uc3QgY2FjaGUgPSBjb25maWc/LmNhY2hlO1xuICBpZiAoY2FjaGU/LmVuYWJsZWQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gIGlmIChjYWNoZT8uc3RvcmFnZSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQm9vbGVhbihsYWtlYmFzZSkgfHwgdXNlc1BsdWdpbihjb25maWcsIExBS0VCQVNFX1BMVUdJTik7XG59XG5cbmZ1bmN0aW9uIHJlZGFjdExha2ViYXNlQ29ubmVjdGlvbihyZXNvbHZlZDogTGFrZWJhc2VDb25uZWN0aW9uKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4ge1xuICAgIHByb2plY3Q6IHJlc29sdmVkLnByb2plY3QsXG4gICAgYnJhbmNoOiByZXNvbHZlZC5icmFuY2gsXG4gICAgZW5kcG9pbnQ6IHJlc29sdmVkLmVuZHBvaW50LFxuICAgIGRhdGFiYXNlOiByZXNvbHZlZC5kYXRhYmFzZSxcbiAgICBob3N0OiByZXNvbHZlZC5ob3N0LFxuICAgIHBvcnQ6IHJlc29sdmVkLnBvcnQsXG4gICAgc3NsTW9kZTogcmVzb2x2ZWQuc3NsTW9kZSxcbiAgfTtcbn1cblxuLyoqIEJ1aWxkIHRoZSB7QGxpbmsgUmVzb2x2ZWRBcHBFbnZ9IGludGVyY2VwdG9ycyByZWFkLCBmcm9tIHRoZSBhdXRvLWNvbmZpZyByZXN1bHQuICovXG5mdW5jdGlvbiByZXNvbHZlZEFwcEVudihsYWtlYmFzZTogTGFrZWJhc2VDb25uZWN0aW9uIHwgdW5kZWZpbmVkKTogUmVzb2x2ZWRBcHBFbnYge1xuICByZXR1cm4ge1xuICAgIC4uLihsYWtlYmFzZSA/IHsgbGFrZWJhc2UgfSA6IHt9KSxcbiAgICAuLi4ocHJvY2Vzcy5lbnYuREFUQUJSSUNLU19IT1NUID8geyBkYXRhYnJpY2tzSG9zdDogcHJvY2Vzcy5lbnYuREFUQUJSSUNLU19IT1NUIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBOb3JtYWxpemUgdGhlIGBpbnRlcmNlcHRvcj86IEludGVyY2VwdG9yIHwgSW50ZXJjZXB0b3JbXWAgb3B0aW9uIHRvIGFuIGFycmF5LiAqL1xuZnVuY3Rpb24gaW50ZXJjZXB0b3JMaXN0KGludGVyY2VwdG9yOiBDcmVhdGVBcHBDb25maWdbXCJpbnRlcmNlcHRvclwiXSk6IEludGVyY2VwdG9yW10ge1xuICBpZiAoIWludGVyY2VwdG9yKSByZXR1cm4gW107XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGludGVyY2VwdG9yKSA/IGludGVyY2VwdG9yIDogW2ludGVyY2VwdG9yXTtcbn1cblxuLyoqXG4gKiBBdXRvLWNvbmZpZ3VyaW5nIGRyb3AtaW4gZm9yIEFwcEtpdCdzIGBjcmVhdGVBcHBgOiBzYW1lIGNvbmZpZywgc2FtZSB0eXBlZFxuICogcGx1Z2luLWV4cG9ydCBtYXAsIHdpdGgge0BsaW5rIGF1dG9Db25maWd1cmV9IHJ1biBmaXJzdC5cbiAqXG4gKiBXaGVuIHtAbGluayBDcmVhdGVBcHBDb25maWcuaW50ZXJjZXB0b3J9cyBhcmUgZ2l2ZW4sIGVhY2ggaXMgaW52b2tlZCB3aXRoIGFuXG4gKiB7QGxpbmsgSW50ZXJjZXB0b3JDb250ZXh0fSBBRlRFUiBhdXRvLWNvbmZpZ3VyYXRpb24gY29tcHV0ZXMgdGhlIGVudiBhbmQgQkVGT1JFXG4gKiBBcHBLaXQgYm9vdHMgLSBzbyBhbiBpbnRlcmNlcHRvciBjYW4gcmVhZCB0aGUgcmVzb2x2ZWQgY29ubmVjdGlvbiwgcmVnaXN0ZXJcbiAqIGxpZmVjeWNsZSBoYW5kbGVycywgYW5kIGBiaW5kUHJvY2Vzc2AgYSBjaGlsZC4gQSBoaWRkZW4ge0BsaW5rIGxpZmVjeWNsZUJyaWRnZX1cbiAqIHBsdWdpbiBpcyBpbmplY3RlZCBzbyB0aG9zZSBgb25MaWZlY3ljbGVgIGhhbmRsZXJzIGZpcmUgb24gdGhlIGdlbnVpbmUgQXBwS2l0XG4gKiBldmVudHM7IGl0IGhhcyBubyBleHBvcnRzLCBzbyB0aGUgcmV0dXJuZWQge0BsaW5rIFBsdWdpbk1hcH0gaXMgdW5jaGFuZ2VkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBsYWtlYmFzZSwgc2VydmVyIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgYXBwa2l0IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG4gKlxuICogY29uc3QgYXBwID0gYXdhaXQgYXBwa2l0LmNyZWF0ZUFwcCh7IHBsdWdpbnM6IFtzZXJ2ZXIoKSwgbGFrZWJhc2UoKV0gfSk7XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVBcHA8VCBleHRlbmRzIEFwcEtpdFBsdWdpbnM+KFxuICBjb25maWc/OiBDcmVhdGVBcHBDb25maWc8VD4sXG4pOiBQcm9taXNlPFBsdWdpbk1hcDxUPj4ge1xuICBjb25zdCBwbHVnaW5zID0gcGx1Z2luTmFtZXMoY29uZmlnKTtcbiAgY29uc3QgaW50ZXJjZXB0b3JzID0gaW50ZXJjZXB0b3JMaXN0KGNvbmZpZz8uaW50ZXJjZXB0b3IpO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IHN0YXJ0XCIsIHtcbiAgICBwbHVnaW5zLFxuICAgIHBsdWdpbkNvdW50OiBwbHVnaW5zLmxlbmd0aCxcbiAgICBpbnRlcmNlcHRvckNvdW50OiBpbnRlcmNlcHRvcnMubGVuZ3RoLFxuICAgIGF1dG9Db25maWd1cmU6IGNvbmZpZz8uYXV0b0NvbmZpZ3VyZSA/PyBcIihkZWZhdWx0KVwiLFxuICAgIGhhc09uUGx1Z2luc1JlYWR5OiB0eXBlb2YgY29uZmlnPy5vblBsdWdpbnNSZWFkeSA9PT0gXCJmdW5jdGlvblwiLFxuICB9KTtcblxuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IGF1dG9Db25maWd1cmVcIik7XG4gIGNvbnN0IGxha2ViYXNlID0gYXdhaXQgYXV0b0NvbmZpZ3VyZShjb25maWcpO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IGF1dG9Db25maWd1cmUgcmV0dXJuZWRcIiwge1xuICAgIGxha2ViYXNlOiBsYWtlYmFzZSA/IHJlZGFjdExha2ViYXNlQ29ubmVjdGlvbihsYWtlYmFzZSkgOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIGNvbnN0IGFwcENvbmZpZyA9IHsgLi4uY29uZmlnIH07XG4gIGRlbGV0ZSBhcHBDb25maWcuYXV0b0NvbmZpZ3VyZTtcbiAgZGVsZXRlIGFwcENvbmZpZy5pbnRlcmNlcHRvcjtcblxuICBpZiAoc2hvdWxkSW5qZWN0U29mdFBlcnNpc3RlbnRDYWNoZShjb25maWcsIGxha2ViYXNlKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogaW5qZWN0IHNvZnQgcGVyc2lzdGVudCBjYWNoZSBzdG9yYWdlXCIpO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSBhd2FpdCBjcmVhdGVTb2Z0UGVyc2lzdGVudFN0b3JhZ2UoY29uZmlnPy5jYWNoZSk7XG4gICAgaWYgKHN0b3JhZ2UpIHtcbiAgICAgIGFwcENvbmZpZy5jYWNoZSA9IHsgLi4uY29uZmlnPy5jYWNoZSwgc3RvcmFnZSB9O1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBzb2Z0IHBlcnNpc3RlbnQgY2FjaGUgc3RvcmFnZSByZWFkeVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBzb2Z0IHBlcnNpc3RlbnQgY2FjaGUgc3RvcmFnZSB1bmF2YWlsYWJsZVwiKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaW50ZXJjZXB0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogbm8gaW50ZXJjZXB0b3JzOyBkZWxlZ2F0aW5nIHRvIEFwcEtpdCBjcmVhdGVBcHBcIiwge1xuICAgICAgcGx1Z2luczogcGx1Z2luTmFtZXMoYXBwQ29uZmlnKSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcHBraXRDcmVhdGVBcHA8VD4oYXBwQ29uZmlnKTtcbiAgICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IEFwcEtpdCBjcmVhdGVBcHAgcmV0dXJuZWRcIiwge1xuICAgICAgZXhwb3J0S2V5czogT2JqZWN0LmtleXMocmVzdWx0ID8/IHt9KSxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gQnVpbGQgdGhlIGNvbnRleHQgZnJvbSB0aGUgY29tcHV0ZWQgZW52LCBydW4gZWFjaCBpbnRlcmNlcHRvciAodGhleSByZWdpc3RlclxuICAvLyBsaWZlY3ljbGUgaGFuZGxlcnMgKyBiaW5kIHByb2Nlc3NlcyksIHRoZW4gaW5qZWN0IHRoZSBicmlkZ2UgdGhhdCByZWxheXMgdGhlXG4gIC8vIFJFQUwgQXBwS2l0IGxpZmVjeWNsZSBpbnRvIGBydW50aW1lLmVtaXRMaWZlY3ljbGVgIGR1cmluZyBpdHMgYHNldHVwKClgLlxuICBjb25zdCBlbnYgPSByZXNvbHZlZEFwcEVudihsYWtlYmFzZSk7XG4gIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogaW50ZXJjZXB0b3IgY29udGV4dFwiLCB7XG4gICAgaGFzTGFrZWJhc2U6IEJvb2xlYW4oZW52Lmxha2ViYXNlKSxcbiAgICBkYXRhYnJpY2tzSG9zdDogZW52LmRhdGFicmlja3NIb3N0LFxuICAgIGludGVyY2VwdG9yQ291bnQ6IGludGVyY2VwdG9ycy5sZW5ndGgsXG4gIH0pO1xuICBjb25zdCBydW50aW1lOiBJbnRlcmNlcHRvclJ1bnRpbWUgPSBjcmVhdGVJbnRlcmNlcHRvckNvbnRleHQoZW52KTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnRlcmNlcHRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IHJ1biBpbnRlcmNlcHRvclwiLCB7IGluZGV4OiBpLCBvZjogaW50ZXJjZXB0b3JzLmxlbmd0aCB9KTtcbiAgICBhd2FpdCBpbnRlcmNlcHRvcnNbaV0hKHJ1bnRpbWUuY29udGV4dCk7XG4gICAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBpbnRlcmNlcHRvciBkb25lXCIsIHsgaW5kZXg6IGkgfSk7XG4gIH1cbiAgLy8gQXBwZW5kIHRoZSBicmlkZ2UgdG8gdGhlIHBsdWdpbnMgdHVwbGUuIEl0IGlzIGhpZGRlbiBhbmQgZXhwb3J0cyBub3RoaW5nLCBzb1xuICAvLyB0aGUgcmV0dXJuZWQgbWFwIHN0aWxsIG1hdGNoZXMgYFBsdWdpbk1hcDxUPmA7IHRoZSBjYXN0ICh0aHJvdWdoIGB1bmtub3duYCkgaXNcbiAgLy8gb25seSBiZWNhdXNlIGFwcGVuZGluZyB3aWRlbnMgdGhlIHR1cGxlIHR5cGUgYmV5b25kIGBUYC5cbiAgYXBwQ29uZmlnLnBsdWdpbnMgPSBbLi4uKGFwcENvbmZpZy5wbHVnaW5zID8/IFtdKSwgbGlmZWN5Y2xlQnJpZGdlKHsgcnVudGltZSB9KV0gYXMgdW5rbm93biBhcyBUO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IGxpZmVjeWNsZSBicmlkZ2UgaW5qZWN0ZWQ7IGRlbGVnYXRpbmcgdG8gQXBwS2l0IGNyZWF0ZUFwcFwiLCB7XG4gICAgcGx1Z2luczogcGx1Z2luTmFtZXMoYXBwQ29uZmlnKSxcbiAgfSk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwcGtpdENyZWF0ZUFwcDxUPihhcHBDb25maWcpO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IEFwcEtpdCBjcmVhdGVBcHAgcmV0dXJuZWRcIiwge1xuICAgIGV4cG9ydEtleXM6IE9iamVjdC5rZXlzKHJlc3VsdCA/PyB7fSksXG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFRoZSBBcHBLaXQgcGVyLXJlcXVlc3QgZXhlY3V0aW9uIGNvbnRleHQgcmV0dXJuZWQgYnkgYGdldEV4ZWN1dGlvbkNvbnRleHQoKWBcbiAqIC0gdGhlIE9CTy1zY29wZWQgd29ya3NwYWNlIGNsaWVudCBwbHVzIHRoZSBzdXJyb3VuZGluZyByZXF1ZXN0IG1ldGFkYXRhLlxuICogRGVyaXZlZCBmcm9tIEFwcEtpdCdzIG93biByZXR1cm4gdHlwZSBzbyBpdCB0cmFja3MgdGhlIGluc3RhbGxlZCB2ZXJzaW9uLCBhbmRcbiAqIHJlLWV4cG9ydGVkIGhlcmUgc28gYWRkLW9uIHBhY2thZ2VzIGNhbiB0eXBlIGEgY29udGV4dCBwYXJhbWV0ZXIgd2l0aG91dCBlYWNoXG4gKiByZS1kZXJpdmluZyB0aGUgc2FtZSBgUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RXhlY3V0aW9uQ29udGV4dD5gIGlubGluZS5cbiAqL1xuZXhwb3J0IHR5cGUgRXhlY3V0aW9uQ29udGV4dExpa2UgPSBSZXR1cm5UeXBlPHR5cGVvZiBnZXRFeGVjdXRpb25Db250ZXh0PjtcblxuLyoqXG4gKiBUaGUgYXV0aC1zY29wZWQgRGF0YWJyaWNrcyB3b3Jrc3BhY2UgY2xpZW50IGNhcnJpZWQgb24gYW5cbiAqIGBFeGVjdXRpb25Db250ZXh0TGlrZWAgKGBnZXRFeGVjdXRpb25Db250ZXh0KCkuY2xpZW50YCkuIFR5cGVkIHN0cnVjdHVyYWxseVxuICogb2ZmIEFwcEtpdCBzbyBjb25zdW1lcnMgZG9uJ3QgdGFrZSBhIGRpcmVjdCBgQGRhdGFicmlja3Mvc2RrLWV4cGVyaW1lbnRhbGBcbiAqIGRlcGVuZGVuY3kgLSB0aGUgZGVwIGZsb3dzIGluIHRyYW5zaXRpdmVseSB0aHJvdWdoIGBAZGF0YWJyaWNrcy9hcHBraXRgLlxuICovXG5leHBvcnQgdHlwZSBXb3Jrc3BhY2VDbGllbnRMaWtlID0gRXhlY3V0aW9uQ29udGV4dExpa2VbXCJjbGllbnRcIl07XG5cbi8qKlxuICogVGhlIGN1cnJlbnQgQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0LCBvciBgdW5kZWZpbmVkYCB3aGVuIEFwcEtpdCBpc24ndFxuICogaW5pdGlhbGl6ZWQgKG91dHNpZGUgYSByZXF1ZXN0IHNjb3BlKS4gU3dhbGxvd3MgQXBwS2l0J3NcbiAqIHtAbGluayBJbml0aWFsaXphdGlvbkVycm9yfTsgYW55IG90aGVyIGVycm9yIHByb3BhZ2F0ZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL3Nkay1leHBlcmltZW50YWxcIjtcbiAqXG4gKiAvLyBPQk8tc2NvcGVkIGluc2lkZSBhIHJlcXVlc3QsIHNlcnZpY2UgcHJpbmNpcGFsIGZyb20gYSBDTEkgb3Igc2NyaXB0LlxuICogY29uc3QgY2xpZW50ID0gYXBwa2l0LnRyeUdldEV4ZWN1dGlvbkNvbnRleHQoKT8uY2xpZW50ID8/IG5ldyBXb3Jrc3BhY2VDbGllbnQoe30pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ5R2V0RXhlY3V0aW9uQ29udGV4dCgpOiBFeGVjdXRpb25Db250ZXh0TGlrZSB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgY3R4ID0gZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICAgIGlmIChjdHg/LmNsaWVudCkge1xuICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBJbml0aWFsaXphdGlvbkVycm9yKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIGJhcmUgQXBwS2l0IGFwcCAobm8gcGx1Z2lucykgd2hlbiBub25lIGlzIHJ1bm5pbmcgeWV0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqXG4gKiBhd2FpdCBhcHBraXQuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAqIGNvbnN0IGNsaWVudCA9IGFwcGtpdC50cnlHZXRFeGVjdXRpb25Db250ZXh0KCk/LmNsaWVudDtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUluaXRpYWxpemVkKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAodHJ5R2V0RXhlY3V0aW9uQ29udGV4dCgpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiZW5zdXJlSW5pdGlhbGl6ZWQ6IGFscmVhZHkgaW5pdGlhbGl6ZWRcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhcImVuc3VyZUluaXRpYWxpemVkOiBib290aW5nIGJhcmUgQXBwS2l0IGFwcFwiKTtcbiAgYXdhaXQgY3JlYXRlQXBwKHsgcGx1Z2luczogW10sIGF1dG9Db25maWd1cmU6IGZhbHNlIH0pO1xuICBsb2dnZXIuZGVidWcoXCJlbnN1cmVJbml0aWFsaXplZDogZG9uZVwiKTtcbn1cbiJdfQ==
|
|
304
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwa2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcGtpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUgsT0FBTyxFQUNMLFNBQVMsSUFBSSxlQUFlLEVBQzVCLG1CQUFtQixFQUNuQixtQkFBbUIsR0FDcEIsTUFBTSxvQkFBb0IsQ0FBQztBQUk1QixPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXBELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xFLE9BQU8sRUFDTCx3QkFBd0IsRUFHeEIsZUFBZSxHQUVoQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBMkIsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBNENwQyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUM7QUFDbkMsTUFBTSxzQkFBc0IsR0FBc0IsV0FBVyxDQUFDO0FBRTlEOzs7Ozs7R0FNRztBQUNILE1BQU0seUJBQXlCLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUU5QyxTQUFTLFVBQVUsQ0FDakIsTUFBc0MsRUFDdEMsSUFBWTtJQUVaLE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVELG9EQUFvRDtBQUNwRCxTQUFTLFdBQVcsQ0FBQyxNQUFtQztJQUN0RCxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FB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Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCO0lBQ3JDLElBQUksc0JBQXNCLEVBQUUsRUFBRSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN2RCxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUMzRCxNQUFNLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdkQsTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcEtpdCBydW50aW1lIGdsdWU6IHRoZSBhdXRvLWNvbmZpZ3VyaW5nIGBjcmVhdGVBcHBgIGRyb3AtaW4sIHBsdXMgdGhlXG4gKiBwZXItcmVxdWVzdCBleGVjdXRpb24gY29udGV4dCBoZWxwZXJzIGFuZCB0eXBlcyBkZXJpdmVkIGZyb20gaXQuXG4gKlxuICogYGNyZWF0ZUFwcGAgcnVucyBkYngtdG9vbHMgYXV0by1jb25maWd1cmF0aW9uLCB0aGVuIGRlbGVnYXRlcyB0byBBcHBLaXQncyBvd25cbiAqIGBjcmVhdGVBcHBgIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzIGFuZCB0aGUgc2FtZSB0eXBlZCBwbHVnaW4tZXhwb3J0IG1hcC5cbiAqIERyb3AgaXQgaW4gYXMgYSBvbmUtZm9yLW9uZSByZXBsYWNlbWVudDpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbGFrZWJhc2UsIHNlcnZlciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuICpcbiAqIGF3YWl0IGFwcGtpdC5jcmVhdGVBcHAoeyBwbHVnaW5zOiBbc2VydmVyKCksIGxha2ViYXNlKCldIH0pO1xuICogYGBgXG4gKlxuICogQXV0by1jb25maWd1cmF0aW9uIHJ1bnMgQkVGT1JFIGRlbGVnYXRpbmcgc28gcGx1Z2lucyBzZWUgYSBmdWxseSBwb3B1bGF0ZWRcbiAqIGBwcm9jZXNzLmVudmAgZHVyaW5nIHRoZWlyIHN5bmNocm9ub3VzIGBzZXR1cCgpYC4gTGFrZWJhc2UgUG9zdGdyZXMgcnVucyB3aGVuXG4gKiBhIGBsYWtlYmFzZWAgcGx1Z2luIGlzIHByZXNlbnQsIG9yIHdoZW4ge0BsaW5rIEF1dG9Db25maWd1cmVNb2RlfSBpcyBzZXRcbiAqIGV4cGxpY2l0bHkgb24gdGhlIGNvbmZpZyBvYmplY3QuXG4gKlxuICogYGdldEV4ZWN1dGlvbkNvbnRleHQoKWAgaXMgQXBwS2l0J3Mgb3duIGFjY2Vzc29yIGZvciB0aGUgT0JPLXNjb3BlZCB3b3Jrc3BhY2VcbiAqIGNsaWVudCArIHJlcXVlc3QgbWV0YWRhdGE7IHRoZSB3cmFwcGVycyBoZXJlIG1ha2UgaXQgc2FmZSB0byBjYWxsIG91dHNpZGUgYVxuICogcmVxdWVzdCBzY29wZSAoe0BsaW5rIHRyeUdldEV4ZWN1dGlvbkNvbnRleHR9KSBhbmQgdG8gbGF6aWx5IGJvb3QgYSBiYXJlIGFwcFxuICogKHtAbGluayBlbnN1cmVJbml0aWFsaXplZH0pLCBhbmQgcmUtZXhwb3J0IHRoZSBkZXJpdmVkIHR5cGVzIHNvIGFkZC1vblxuICogcGFja2FnZXMgY2FuIHR5cGUgYSBjb250ZXh0IC8gY2xpZW50IHdpdGhvdXQgcmUtZGVyaXZpbmcgdGhlbSBpbmxpbmUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7XG4gIGNyZWF0ZUFwcCBhcyBhcHBraXRDcmVhdGVBcHAsXG4gIGdldEV4ZWN1dGlvbkNvbnRleHQsXG4gIEluaXRpYWxpemF0aW9uRXJyb3IsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbi8vIEFwcEtpdCdzIHJvb3QgYmFycmVsIHJlLWV4cG9ydHMgYFBsdWdpbkRhdGFgIGJ1dCBub3QgYFBsdWdpbk1hcGA7IHRoZSBwYWNrYWdlXG4vLyBwdWJsaXNoZXMgdGhpcyBzdWJwYXRoIGZvciBleGFjdGx5IHRoYXQgdHlwZS5cbmltcG9ydCB0eXBlIHsgUGx1Z2luTWFwIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdC9kaXN0L3NoYXJlZC9zcmMvcGx1Z2luXCI7XG5pbXBvcnQgeyBhc3luYywgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuaW1wb3J0IHsgY3JlYXRlU29mdFBlcnNpc3RlbnRTdG9yYWdlIH0gZnJvbSBcIi4vX2NhY2hlLXN0b3JhZ2UudHNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUludGVyY2VwdG9yQ29udGV4dCxcbiAgdHlwZSBJbnRlcmNlcHRvcixcbiAgdHlwZSBJbnRlcmNlcHRvclJ1bnRpbWUsXG4gIGxpZmVjeWNsZUJyaWRnZSxcbiAgdHlwZSBSZXNvbHZlZEFwcEVudixcbn0gZnJvbSBcIi4vaW50ZXJjZXB0b3IudHNcIjtcbmltcG9ydCB7IGFwcGx5TGFrZWJhc2VFbnYsIHR5cGUgTGFrZWJhc2VDb25uZWN0aW9uIH0gZnJvbSBcIi4vbGFrZWJhc2UtcmVzb2x2ZXIudHNcIjtcbmltcG9ydCB7IHByb3Zpc2lvbkNhY2hlU2NoZW1hIH0gZnJvbSBcIi4vcHJvdmlzaW9uLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJhcHBraXRcIik7XG5cbnR5cGUgQXBwS2l0Q3JlYXRlQXBwQ29uZmlnID0gTm9uTnVsbGFibGU8UGFyYW1ldGVyczx0eXBlb2YgYXBwa2l0Q3JlYXRlQXBwPlswXT47XG50eXBlIEFwcEtpdFBsdWdpbnMgPSBOb25OdWxsYWJsZTxBcHBLaXRDcmVhdGVBcHBDb25maWdbXCJwbHVnaW5zXCJdPjtcblxuLyoqXG4gKiBXaGF0IGF1dG8tY29uZmlndXJhdGlvbiBkb2VzIGJlZm9yZSBBcHBLaXQgYm9vdHMuXG4gKlxuICogLSBgXCJwcm92aXNpb25cImA6IHJlc29sdmUgdGhlIExha2ViYXNlIGNvbm5lY3Rpb24gaW50byBgcHJvY2Vzcy5lbnZgLCB0aGVuXG4gKiAgIGdyYW50IHRoZSBBcHBLaXQgY2FjaGUgc2NoZW1hIHRvIHRoZSBjb25uZWN0aW5nIHJvbGUuXG4gKiAtIGBcImVudlwiYDogcmVzb2x2ZSB0aGUgTGFrZWJhc2UgY29ubmVjdGlvbiBpbnRvIGBwcm9jZXNzLmVudmAgb25seS5cbiAqXG4gKiBPbWl0IGl0IHRvIGdldCBgXCJwcm92aXNpb25cImAgZ2F0ZWQgb24gYSBgbGFrZWJhc2VgIHBsdWdpbiBiZWluZyByZWdpc3RlcmVkO1xuICogc2V0IGl0IGV4cGxpY2l0bHkgdG8gcnVuIHJlZ2FyZGxlc3Mgb2YgdGhlIHBsdWdpbiBsaXN0LCBvciBwYXNzIGBmYWxzZWAgdG9cbiAqIHNraXAgYXV0by1jb25maWd1cmF0aW9uIGVudGlyZWx5LlxuICpcbiAqIFNldCBpdCBFWFBMSUNJVExZIG9uIGFuIGFwcCB0aGF0IGhhcyBubyBgbGFrZWJhc2UoKWAgcGx1Z2luIGJ1dCBzdGlsbCB3YW50c1xuICogQXBwS2l0J3MgUEVSU0lTVEVOVCBjYWNoZS4gQXBwS2l0IHBpY2tzIExha2ViYXNlIGZvciBgQ2FjaGVNYW5hZ2VyYCBvbmx5IHdoZW5cbiAqIGBjcmVhdGVMYWtlYmFzZVBvb2woKWAgY2FuIGJ1aWxkIGEgcG9vbCwgYW5kIHRoYXQgcmVhZHMgYExBS0VCQVNFX0VORFBPSU5UYCAvXG4gKiBgUEdIT1NUYCAvIGBQR0RBVEFCQVNFYCBzdHJhaWdodCBmcm9tIGBwcm9jZXNzLmVudmAgLSBzbyB3aXRob3V0IHRoaXMgc3RlcCB0aGVcbiAqIGNhY2hlIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gaW4tbWVtb3J5LCBhbmQgYW55dGhpbmcgaXQgaG9sZHMgKGEgc2Vzc2lvblxuICogc2lnbmluZyBrZXksIGEgb25lLXRpbWUgY29kZSkgaXMgbG9zdCBvbiByZXN0YXJ0LiBgXCJlbnZcImAgaXMgdGhlIHJpZ2h0IG1vZGVcbiAqIHRoZXJlOiB0aGUgYXBwIFNQIGNhbm5vdCBncmFudCBvbiB0aGUgY2FjaGUgc2NoZW1hIGFueXdheS5cbiAqL1xuZXhwb3J0IHR5cGUgQXV0b0NvbmZpZ3VyZU1vZGUgPSBcImVudlwiIHwgXCJwcm92aXNpb25cIjtcblxuLyoqIEFwcEtpdCdzIGBjcmVhdGVBcHBgIGNvbmZpZyBwbHVzIHRoZSBkYngtdG9vbHMgYXV0by1jb25maWd1cmF0aW9uIHN3aXRjaC4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUFwcENvbmZpZzxUIGV4dGVuZHMgQXBwS2l0UGx1Z2lucyA9IEFwcEtpdFBsdWdpbnM+ID0gT21pdDxcbiAgQXBwS2l0Q3JlYXRlQXBwQ29uZmlnLFxuICBcInBsdWdpbnNcIiB8IFwib25QbHVnaW5zUmVhZHlcIlxuPiAmIHtcbiAgcGx1Z2lucz86IFQ7XG4gIG9uUGx1Z2luc1JlYWR5PzogKGFwcGtpdDogUGx1Z2luTWFwPFQ+KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEF1dG8tY29uZmlndXJhdGlvbiB0byBydW4gYmVmb3JlIEFwcEtpdCBib290cy4gRGVmYXVsdHMgdG8gYFwicHJvdmlzaW9uXCJgLiAqL1xuICBhdXRvQ29uZmlndXJlPzogQXV0b0NvbmZpZ3VyZU1vZGUgfCBmYWxzZTtcbiAgLyoqXG4gICAqIE9uZSBvciBtYW55IHtAbGluayBJbnRlcmNlcHRvcn1zIGhhbmRlZCBhbiB7QGxpbmsgSW50ZXJjZXB0b3JDb250ZXh0fSBvbmNlXG4gICAqIGF1dG8tY29uZmlndXJhdGlvbiBoYXMgY29tcHV0ZWQgdGhlIGVudi4gRWFjaCByZWNlaXZlcyB0aGUgcmVzb2x2ZWQgZW52LCBhblxuICAgKiBBcHBLaXQtbGlmZWN5Y2xlIGhvb2ssIGFuZCBgYmluZFByb2Nlc3NgIGZvciBjb25jdXJyZW50bHktc3R5bGUgc3VwZXJ2aXNpb24gLVxuICAgKiBzZWUgYC4vaW50ZXJjZXB0b3JgLiBUaGUgdHVubmVsIGlzIHRoZSBwcmltYXJ5IGNvbnN1bWVyLlxuICAgKi9cbiAgaW50ZXJjZXB0b3I/OiBJbnRlcmNlcHRvciB8IEludGVyY2VwdG9yW107XG59O1xuXG5jb25zdCBMQUtFQkFTRV9QTFVHSU4gPSBcImxha2ViYXNlXCI7XG5jb25zdCBERUZBVUxUX0FVVE9fQ09ORklHVVJFOiBBdXRvQ29uZmlndXJlTW9kZSA9IFwicHJvdmlzaW9uXCI7XG5cbi8qKlxuICogVXBwZXIgYm91bmQgb24gYm9vdC10aW1lIGF1dG8tY29uZmlndXJhdGlvbi4gSXQgcnVucyBhcyB0aGUgc2VydmljZSBwcmluY2lwYWxcbiAqIGJlZm9yZSBhbnkgcGx1Z2luIGlzIGNvbnN0cnVjdGVkLCBzbyBpdCBzaXRzIG91dHNpZGUgQXBwS2l0J3MgaW50ZXJjZXB0b3JcbiAqIGNoYWluIGFuZCBpbmhlcml0cyBubyB0aW1lb3V0LCByZXRyeSwgb3IgdGVsZW1ldHJ5IGZyb20gaXQuIFRoZSBidWRnZXQgY292ZXJzXG4gKiB0aGUgcmVzb2x2ZXIncyBvd24gd29yc3QgY2FzZSAoY3JlYXRlIGEgcHJvamVjdCwgdGhlbiB3YWl0IGZvciBpdHMgZW5kcG9pbnQpXG4gKiBwbHVzIHRoZSBjYWNoZS1zY2hlbWEgZ3JhbnRzLlxuICovXG5jb25zdCBBVVRPX0NPTkZJR1VSRV9USU1FT1VUX01TID0gMTEgKiA2MF8wMDA7XG5cbmZ1bmN0aW9uIHVzZXNQbHVnaW48VCBleHRlbmRzIEFwcEtpdFBsdWdpbnM+KFxuICBjb25maWc6IENyZWF0ZUFwcENvbmZpZzxUPiB8IHVuZGVmaW5lZCxcbiAgbmFtZTogc3RyaW5nLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKGNvbmZpZz8ucGx1Z2lucz8uc29tZSgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpKTtcbn1cblxuLyoqIFBsdWdpbiBuYW1lcyBmb3IgYm9vdCBsb2dzIChvcmRlciBwcmVzZXJ2ZWQpLiAqL1xuZnVuY3Rpb24gcGx1Z2luTmFtZXMoY29uZmlnOiBDcmVhdGVBcHBDb25maWcgfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gIHJldHVybiAoY29uZmlnPy5wbHVnaW5zID8/IFtdKS5tYXAoKGVudHJ5KSA9PiBlbnRyeS5uYW1lKTtcbn1cblxuLyoqXG4gKiBSdW4gZW5hYmxlZCBhdXRvLWNvbmZpZ3VyYXRpb24gc3RlcHMgd2l0aG91dCBjYWxsaW5nIEFwcEtpdCdzIGBjcmVhdGVBcHBgLlxuICpcbiAqIExha2ViYXNlIFBvc3RncmVzIHJlc29sdmVzIHdoZW4ge0BsaW5rIENyZWF0ZUFwcENvbmZpZy5hdXRvQ29uZmlndXJlfSBpcyBzZXRcbiAqIGV4cGxpY2l0bHkgb3IgYSBgbGFrZWJhc2VgIHBsdWdpbiBpcyBsaXN0ZWQgaW4gYGNvbmZpZy5wbHVnaW5zYC4gYHNpZ25hbGBcbiAqIGNhbmNlbHMgdGhlIHJlc29sdXRpb247IGl0IGlzIGNvbWJpbmVkIHdpdGggYW4gaW50ZXJuYWwgYm9vdCB0aW1lb3V0IGVpdGhlclxuICogd2F5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqXG4gKiAvLyBQb3B1bGF0ZSBQR0hPU1QgLyBQR0RBVEFCQVNFIC8gTEFLRUJBU0VfRU5EUE9JTlQgd2l0aG91dCBib290aW5nIEFwcEtpdC5cbiAqIGF3YWl0IGFwcGtpdC5hdXRvQ29uZmlndXJlKHsgYXV0b0NvbmZpZ3VyZTogXCJlbnZcIiB9KTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF1dG9Db25maWd1cmU8VCBleHRlbmRzIEFwcEtpdFBsdWdpbnM+KFxuICBjb25maWc/OiBDcmVhdGVBcHBDb25maWc8VD4sXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxMYWtlYmFzZUNvbm5lY3Rpb24gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgbW9kZSA9IGNvbmZpZz8uYXV0b0NvbmZpZ3VyZSA/PyBERUZBVUxUX0FVVE9fQ09ORklHVVJFO1xuICBjb25zdCBleHBsaWNpdCA9IGNvbmZpZz8uYXV0b0NvbmZpZ3VyZSAhPT0gdW5kZWZpbmVkO1xuICBjb25zdCBsYWtlYmFzZVBsdWdpblByZXNlbnQgPSB1c2VzUGx1Z2luKGNvbmZpZywgTEFLRUJBU0VfUExVR0lOKTtcbiAgY29uc3QgcGx1Z2lucyA9IHBsdWdpbk5hbWVzKGNvbmZpZyk7XG4gIGxvZ2dlci5kZWJ1ZyhcImF1dG9Db25maWd1cmU6IHN0YXJ0XCIsIHtcbiAgICBtb2RlLFxuICAgIGV4cGxpY2l0LFxuICAgIGxha2ViYXNlUGx1Z2luUHJlc2VudCxcbiAgICBwbHVnaW5zLFxuICAgIHRpbWVvdXRNczogQVVUT19DT05GSUdVUkVfVElNRU9VVF9NUyxcbiAgICBjYWxsZXJTaWduYWw6IEJvb2xlYW4oc2lnbmFsKSxcbiAgfSk7XG5cbiAgaWYgKG1vZGUgPT09IGZhbHNlIHx8ICEoZXhwbGljaXQgfHwgbGFrZWJhc2VQbHVnaW5QcmVzZW50KSkge1xuICAgIGNvbnN0IHNraXBwZWRSZWFzb24gPSBtb2RlID09PSBmYWxzZSA/IFwiZGlzYWJsZWRcIiA6IFwibm8gbGFrZWJhc2UgcGx1Z2luXCI7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYXV0b0NvbmZpZ3VyZTogc2tpcFwiLCB7IHNraXBwZWRSZWFzb24sIG1vZGUsIGxha2ViYXNlUGx1Z2luUHJlc2VudCwgcGx1Z2lucyB9KTtcbiAgICBsb2dnZXIuaW5mbyhcInJlYWR5XCIsIHtcbiAgICAgIGF1dG9Db25maWd1cmU6IG1vZGUsXG4gICAgICBsYWtlYmFzZVBsdWdpblByZXNlbnQsXG4gICAgICBwcm92aXNpb25lZDogZmFsc2UsXG4gICAgICBza2lwcGVkUmVhc29uLFxuICAgIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBhc3luYy50aWVBYm9ydFNpZ25hbChjb250cm9sbGVyLCBzaWduYWwpO1xuICBhc3luYy50aWVBYm9ydFNpZ25hbChjb250cm9sbGVyLCBBYm9ydFNpZ25hbC50aW1lb3V0KEFVVE9fQ09ORklHVVJFX1RJTUVPVVRfTVMpKTtcblxuICBjb25zdCBwcm92aXNpb24gPSBtb2RlID09PSBcInByb3Zpc2lvblwiO1xuICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlOiByZXNvbHZlIGxha2ViYXNlXCIsIHsgcHJvdmlzaW9uLCBtb2RlIH0pO1xuICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IGF1dG9Db25maWd1cmVMYWtlYmFzZShwcm92aXNpb24sIGNvbnRyb2xsZXIuc2lnbmFsKTtcbiAgbG9nZ2VyLmRlYnVnKFwiYXV0b0NvbmZpZ3VyZTogZG9uZVwiLCB7XG4gICAgbW9kZSxcbiAgICBsYWtlYmFzZVBsdWdpblByZXNlbnQsXG4gICAgcHJvdmlzaW9uZWQ6IHByb3Zpc2lvbixcbiAgICAuLi5yZWRhY3RMYWtlYmFzZUNvbm5lY3Rpb24ocmVzb2x2ZWQpLFxuICB9KTtcbiAgbG9nZ2VyLmluZm8oXCJyZWFkeVwiLCB7IGF1dG9Db25maWd1cmU6IG1vZGUsIGxha2ViYXNlUGx1Z2luUHJlc2VudCwgcHJvdmlzaW9uZWQ6IHByb3Zpc2lvbiB9KTtcbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmUgTGFrZWJhc2UgUG9zdGdyZXMgY29ubmVjdGlvbiBpbmZvLCB3cml0ZSB0aGUgcmVzb2x2ZWQgdmFsdWVzIHRvXG4gKiBgcHJvY2Vzcy5lbnZgLCBhbmQgcmV0dXJuIHRoZSByZWNvcmQuIFVzZWQgYnkge0BsaW5rIGF1dG9Db25maWd1cmV9OyBjYWxsXG4gKiB7QGxpbmsgYXBwbHlMYWtlYmFzZUVudn0gZGlyZWN0bHkgd2hlbiBmaW5lciBjb250cm9sIGlzIG5lZWRlZCAoYSBkaWZmZXJlbnRcbiAqIGBhdXRvQ3JlYXRlYCBwb2xpY3ksIG9yIGEgY2FsbGVyIHRoYXQgd2FudHMgdGhlIGVudiB3aXRob3V0IGJvb3RpbmcgQXBwS2l0KS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXV0b0NvbmZpZ3VyZUxha2ViYXNlKFxuICBwcm92aXNpb246IGJvb2xlYW4sXG4gIHNpZ25hbDogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPExha2ViYXNlQ29ubmVjdGlvbj4ge1xuICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlTGFrZWJhc2U6IGFwcGx5TGFrZWJhc2VFbnZcIik7XG4gIGNvbnN0IHsgcmVzb2x2ZWQsIHVzZXIgfSA9IGF3YWl0IGFwcGx5TGFrZWJhc2VFbnYodW5kZWZpbmVkLCBzaWduYWwpO1xuICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlTGFrZWJhc2U6IGVudiBhcHBsaWVkXCIsIHtcbiAgICAuLi5yZWRhY3RMYWtlYmFzZUNvbm5lY3Rpb24ocmVzb2x2ZWQpLFxuICAgIHVzZXIsXG4gICAgZW52OiB7XG4gICAgICBMQUtFQkFTRV9FTkRQT0lOVDogcHJvY2Vzcy5lbnYuTEFLRUJBU0VfRU5EUE9JTlQsXG4gICAgICBQR0hPU1Q6IHByb2Nlc3MuZW52LlBHSE9TVCxcbiAgICAgIFBHUE9SVDogcHJvY2Vzcy5lbnYuUEdQT1JULFxuICAgICAgUEdEQVRBQkFTRTogcHJvY2Vzcy5lbnYuUEdEQVRBQkFTRSxcbiAgICAgIFBHVVNFUjogcHJvY2Vzcy5lbnYuUEdVU0VSLFxuICAgICAgUEdTU0xNT0RFOiBwcm9jZXNzLmVudi5QR1NTTE1PREUsXG4gICAgfSxcbiAgfSk7XG4gIGxvZ2dlci5pbmZvKFwiZW52IHVwZGF0ZWRcIiwgeyAuLi5yZWRhY3RMYWtlYmFzZUNvbm5lY3Rpb24ocmVzb2x2ZWQpLCB1c2VyIH0pO1xuICBpZiAocHJvdmlzaW9uKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYXV0b0NvbmZpZ3VyZUxha2ViYXNlOiBwcm92aXNpb25DYWNoZVNjaGVtYVwiLCB7IHVzZXIgfSk7XG4gICAgYXdhaXQgcHJvdmlzaW9uQ2FjaGVTY2hlbWEodXNlciwgbG9nZ2VyKTtcbiAgICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlTGFrZWJhc2U6IHByb3Zpc2lvbkNhY2hlU2NoZW1hIGRvbmVcIik7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYXV0b0NvbmZpZ3VyZUxha2ViYXNlOiBza2lwIHByb3Zpc2lvbiAobW9kZT1lbnYpXCIpO1xuICB9XG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGBjcmVhdGVBcHBgIHNob3VsZCBpbmplY3Qgc29mdC1mYWlsIExha2ViYXNlIGNhY2hlIHN0b3JhZ2UuXG4gKlxuICogU2tpcHMgd2hlbiB0aGUgY2FsbGVyIGRpc2FibGVkIHRoZSBjYWNoZSwgYWxyZWFkeSBzdXBwbGllZCBhIHN0b3JhZ2VcbiAqIGJhY2tlbmQgKGluY2x1ZGluZyBpbi1tZW1vcnkpLCBvciBMYWtlYmFzZSBpcyBub3QgaW4gcGxheS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkSW5qZWN0U29mdFBlcnNpc3RlbnRDYWNoZShcbiAgY29uZmlnOiBDcmVhdGVBcHBDb25maWcgfCB1bmRlZmluZWQsXG4gIGxha2ViYXNlOiBMYWtlYmFzZUNvbm5lY3Rpb24gfCB1bmRlZmluZWQsXG4pOiBib29sZWFuIHtcbiAgY29uc3QgY2FjaGUgPSBjb25maWc/LmNhY2hlO1xuICBpZiAoY2FjaGU/LmVuYWJsZWQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gIGlmIChjYWNoZT8uc3RvcmFnZSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQm9vbGVhbihsYWtlYmFzZSkgfHwgdXNlc1BsdWdpbihjb25maWcsIExBS0VCQVNFX1BMVUdJTik7XG59XG5cbmZ1bmN0aW9uIHJlZGFjdExha2ViYXNlQ29ubmVjdGlvbihyZXNvbHZlZDogTGFrZWJhc2VDb25uZWN0aW9uKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4ge1xuICAgIHByb2plY3Q6IHJlc29sdmVkLnByb2plY3QsXG4gICAgYnJhbmNoOiByZXNvbHZlZC5icmFuY2gsXG4gICAgZW5kcG9pbnQ6IHJlc29sdmVkLmVuZHBvaW50LFxuICAgIGRhdGFiYXNlOiByZXNvbHZlZC5kYXRhYmFzZSxcbiAgICBob3N0OiByZXNvbHZlZC5ob3N0LFxuICAgIHBvcnQ6IHJlc29sdmVkLnBvcnQsXG4gICAgc3NsTW9kZTogcmVzb2x2ZWQuc3NsTW9kZSxcbiAgfTtcbn1cblxuLyoqIEJ1aWxkIHRoZSB7QGxpbmsgUmVzb2x2ZWRBcHBFbnZ9IGludGVyY2VwdG9ycyByZWFkLCBmcm9tIHRoZSBhdXRvLWNvbmZpZyByZXN1bHQuICovXG5mdW5jdGlvbiByZXNvbHZlZEFwcEVudihsYWtlYmFzZTogTGFrZWJhc2VDb25uZWN0aW9uIHwgdW5kZWZpbmVkKTogUmVzb2x2ZWRBcHBFbnYge1xuICByZXR1cm4ge1xuICAgIC4uLihsYWtlYmFzZSA/IHsgbGFrZWJhc2UgfSA6IHt9KSxcbiAgICAuLi4ocHJvY2Vzcy5lbnYuREFUQUJSSUNLU19IT1NUID8geyBkYXRhYnJpY2tzSG9zdDogcHJvY2Vzcy5lbnYuREFUQUJSSUNLU19IT1NUIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBOb3JtYWxpemUgdGhlIGBpbnRlcmNlcHRvcj86IEludGVyY2VwdG9yIHwgSW50ZXJjZXB0b3JbXWAgb3B0aW9uIHRvIGFuIGFycmF5LiAqL1xuZnVuY3Rpb24gaW50ZXJjZXB0b3JMaXN0KGludGVyY2VwdG9yOiBDcmVhdGVBcHBDb25maWdbXCJpbnRlcmNlcHRvclwiXSk6IEludGVyY2VwdG9yW10ge1xuICBpZiAoIWludGVyY2VwdG9yKSByZXR1cm4gW107XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGludGVyY2VwdG9yKSA/IGludGVyY2VwdG9yIDogW2ludGVyY2VwdG9yXTtcbn1cblxuLyoqXG4gKiBBdXRvLWNvbmZpZ3VyaW5nIGRyb3AtaW4gZm9yIEFwcEtpdCdzIGBjcmVhdGVBcHBgOiBzYW1lIGNvbmZpZywgc2FtZSB0eXBlZFxuICogcGx1Z2luLWV4cG9ydCBtYXAsIHdpdGgge0BsaW5rIGF1dG9Db25maWd1cmV9IHJ1biBmaXJzdC5cbiAqXG4gKiBXaGVuIHtAbGluayBDcmVhdGVBcHBDb25maWcuaW50ZXJjZXB0b3J9cyBhcmUgZ2l2ZW4sIGVhY2ggaXMgaW52b2tlZCB3aXRoIGFuXG4gKiB7QGxpbmsgSW50ZXJjZXB0b3JDb250ZXh0fSBBRlRFUiBhdXRvLWNvbmZpZ3VyYXRpb24gY29tcHV0ZXMgdGhlIGVudiBhbmQgQkVGT1JFXG4gKiBBcHBLaXQgYm9vdHMgLSBzbyBhbiBpbnRlcmNlcHRvciBjYW4gcmVhZCB0aGUgcmVzb2x2ZWQgY29ubmVjdGlvbiwgcmVnaXN0ZXJcbiAqIGxpZmVjeWNsZSBoYW5kbGVycywgYW5kIGBiaW5kUHJvY2Vzc2AgYSBjaGlsZC4gQSBoaWRkZW4ge0BsaW5rIGxpZmVjeWNsZUJyaWRnZX1cbiAqIHBsdWdpbiBpcyBpbmplY3RlZCBzbyB0aG9zZSBgb25MaWZlY3ljbGVgIGhhbmRsZXJzIGZpcmUgb24gdGhlIGdlbnVpbmUgQXBwS2l0XG4gKiBldmVudHM7IGl0IGhhcyBubyBleHBvcnRzLCBzbyB0aGUgcmV0dXJuZWQge0BsaW5rIFBsdWdpbk1hcH0gaXMgdW5jaGFuZ2VkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBsYWtlYmFzZSwgc2VydmVyIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgYXBwa2l0IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG4gKlxuICogY29uc3QgYXBwID0gYXdhaXQgYXBwa2l0LmNyZWF0ZUFwcCh7IHBsdWdpbnM6IFtzZXJ2ZXIoKSwgbGFrZWJhc2UoKV0gfSk7XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVBcHA8VCBleHRlbmRzIEFwcEtpdFBsdWdpbnM+KFxuICBjb25maWc/OiBDcmVhdGVBcHBDb25maWc8VD4sXG4pOiBQcm9taXNlPFBsdWdpbk1hcDxUPj4ge1xuICBjb25zdCBwbHVnaW5zID0gcGx1Z2luTmFtZXMoY29uZmlnKTtcbiAgY29uc3QgaW50ZXJjZXB0b3JzID0gaW50ZXJjZXB0b3JMaXN0KGNvbmZpZz8uaW50ZXJjZXB0b3IpO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IHN0YXJ0XCIsIHtcbiAgICBwbHVnaW5zLFxuICAgIHBsdWdpbkNvdW50OiBwbHVnaW5zLmxlbmd0aCxcbiAgICBpbnRlcmNlcHRvckNvdW50OiBpbnRlcmNlcHRvcnMubGVuZ3RoLFxuICAgIGF1dG9Db25maWd1cmU6IGNvbmZpZz8uYXV0b0NvbmZpZ3VyZSA/PyBcIihkZWZhdWx0KVwiLFxuICAgIGhhc09uUGx1Z2luc1JlYWR5OiB0eXBlb2YgY29uZmlnPy5vblBsdWdpbnNSZWFkeSA9PT0gXCJmdW5jdGlvblwiLFxuICB9KTtcblxuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IGF1dG9Db25maWd1cmVcIik7XG4gIGNvbnN0IGxha2ViYXNlID0gYXdhaXQgYXV0b0NvbmZpZ3VyZShjb25maWcpO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IGF1dG9Db25maWd1cmUgcmV0dXJuZWRcIiwge1xuICAgIGxha2ViYXNlOiBsYWtlYmFzZSA/IHJlZGFjdExha2ViYXNlQ29ubmVjdGlvbihsYWtlYmFzZSkgOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIGNvbnN0IGFwcENvbmZpZyA9IHsgLi4uY29uZmlnIH07XG4gIGRlbGV0ZSBhcHBDb25maWcuYXV0b0NvbmZpZ3VyZTtcbiAgZGVsZXRlIGFwcENvbmZpZy5pbnRlcmNlcHRvcjtcblxuICBpZiAoc2hvdWxkSW5qZWN0U29mdFBlcnNpc3RlbnRDYWNoZShjb25maWcsIGxha2ViYXNlKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogaW5qZWN0IHNvZnQgcGVyc2lzdGVudCBjYWNoZSBzdG9yYWdlXCIpO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSBhd2FpdCBjcmVhdGVTb2Z0UGVyc2lzdGVudFN0b3JhZ2UoY29uZmlnPy5jYWNoZSk7XG4gICAgaWYgKHN0b3JhZ2UpIHtcbiAgICAgIGFwcENvbmZpZy5jYWNoZSA9IHsgLi4uY29uZmlnPy5jYWNoZSwgc3RvcmFnZSB9O1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBzb2Z0IHBlcnNpc3RlbnQgY2FjaGUgc3RvcmFnZSByZWFkeVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBzb2Z0IHBlcnNpc3RlbnQgY2FjaGUgc3RvcmFnZSB1bmF2YWlsYWJsZVwiKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaW50ZXJjZXB0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogbm8gaW50ZXJjZXB0b3JzOyBkZWxlZ2F0aW5nIHRvIEFwcEtpdCBjcmVhdGVBcHBcIiwge1xuICAgICAgcGx1Z2luczogcGx1Z2luTmFtZXMoYXBwQ29uZmlnKSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcHBraXRDcmVhdGVBcHA8VD4oYXBwQ29uZmlnKTtcbiAgICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IEFwcEtpdCBjcmVhdGVBcHAgcmV0dXJuZWRcIiwge1xuICAgICAgZXhwb3J0S2V5czogT2JqZWN0LmtleXMocmVzdWx0ID8/IHt9KSxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gQnVpbGQgdGhlIGNvbnRleHQgZnJvbSB0aGUgY29tcHV0ZWQgZW52LCBydW4gZWFjaCBpbnRlcmNlcHRvciAodGhleSByZWdpc3RlclxuICAvLyBsaWZlY3ljbGUgaGFuZGxlcnMgKyBiaW5kIHByb2Nlc3NlcyksIHRoZW4gaW5qZWN0IHRoZSBicmlkZ2UgdGhhdCByZWxheXMgdGhlXG4gIC8vIFJFQUwgQXBwS2l0IGxpZmVjeWNsZSBpbnRvIGBydW50aW1lLmVtaXRMaWZlY3ljbGVgIGR1cmluZyBpdHMgYHNldHVwKClgLlxuICBjb25zdCBlbnYgPSByZXNvbHZlZEFwcEVudihsYWtlYmFzZSk7XG4gIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogaW50ZXJjZXB0b3IgY29udGV4dFwiLCB7XG4gICAgaGFzTGFrZWJhc2U6IEJvb2xlYW4oZW52Lmxha2ViYXNlKSxcbiAgICBkYXRhYnJpY2tzSG9zdDogZW52LmRhdGFicmlja3NIb3N0LFxuICAgIGludGVyY2VwdG9yQ291bnQ6IGludGVyY2VwdG9ycy5sZW5ndGgsXG4gIH0pO1xuICBjb25zdCBydW50aW1lOiBJbnRlcmNlcHRvclJ1bnRpbWUgPSBjcmVhdGVJbnRlcmNlcHRvckNvbnRleHQoZW52KTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnRlcmNlcHRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IHJ1biBpbnRlcmNlcHRvclwiLCB7IGluZGV4OiBpLCBvZjogaW50ZXJjZXB0b3JzLmxlbmd0aCB9KTtcbiAgICBhd2FpdCBpbnRlcmNlcHRvcnNbaV0hKHJ1bnRpbWUuY29udGV4dCk7XG4gICAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBpbnRlcmNlcHRvciBkb25lXCIsIHsgaW5kZXg6IGkgfSk7XG4gIH1cbiAgLy8gQXBwZW5kIHRoZSBicmlkZ2UgdG8gdGhlIHBsdWdpbnMgdHVwbGUuIEl0IGlzIGhpZGRlbiBhbmQgZXhwb3J0cyBub3RoaW5nLCBzb1xuICAvLyB0aGUgcmV0dXJuZWQgbWFwIHN0aWxsIG1hdGNoZXMgYFBsdWdpbk1hcDxUPmA7IHRoZSBjYXN0ICh0aHJvdWdoIGB1bmtub3duYCkgaXNcbiAgLy8gb25seSBiZWNhdXNlIGFwcGVuZGluZyB3aWRlbnMgdGhlIHR1cGxlIHR5cGUgYmV5b25kIGBUYC5cbiAgYXBwQ29uZmlnLnBsdWdpbnMgPSBbLi4uKGFwcENvbmZpZy5wbHVnaW5zID8/IFtdKSwgbGlmZWN5Y2xlQnJpZGdlKHsgcnVudGltZSB9KV0gYXMgdW5rbm93biBhcyBUO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IGxpZmVjeWNsZSBicmlkZ2UgaW5qZWN0ZWQ7IGRlbGVnYXRpbmcgdG8gQXBwS2l0IGNyZWF0ZUFwcFwiLCB7XG4gICAgcGx1Z2luczogcGx1Z2luTmFtZXMoYXBwQ29uZmlnKSxcbiAgfSk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwcGtpdENyZWF0ZUFwcDxUPihhcHBDb25maWcpO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IEFwcEtpdCBjcmVhdGVBcHAgcmV0dXJuZWRcIiwge1xuICAgIGV4cG9ydEtleXM6IE9iamVjdC5rZXlzKHJlc3VsdCA/PyB7fSksXG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFRoZSBBcHBLaXQgcGVyLXJlcXVlc3QgZXhlY3V0aW9uIGNvbnRleHQgcmV0dXJuZWQgYnkgYGdldEV4ZWN1dGlvbkNvbnRleHQoKWBcbiAqIC0gdGhlIE9CTy1zY29wZWQgd29ya3NwYWNlIGNsaWVudCBwbHVzIHRoZSBzdXJyb3VuZGluZyByZXF1ZXN0IG1ldGFkYXRhLlxuICogRGVyaXZlZCBmcm9tIEFwcEtpdCdzIG93biByZXR1cm4gdHlwZSBzbyBpdCB0cmFja3MgdGhlIGluc3RhbGxlZCB2ZXJzaW9uLCBhbmRcbiAqIHJlLWV4cG9ydGVkIGhlcmUgc28gYWRkLW9uIHBhY2thZ2VzIGNhbiB0eXBlIGEgY29udGV4dCBwYXJhbWV0ZXIgd2l0aG91dCBlYWNoXG4gKiByZS1kZXJpdmluZyB0aGUgc2FtZSBgUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RXhlY3V0aW9uQ29udGV4dD5gIGlubGluZS5cbiAqL1xuZXhwb3J0IHR5cGUgRXhlY3V0aW9uQ29udGV4dExpa2UgPSBSZXR1cm5UeXBlPHR5cGVvZiBnZXRFeGVjdXRpb25Db250ZXh0PjtcblxuLyoqXG4gKiBUaGUgYXV0aC1zY29wZWQgRGF0YWJyaWNrcyB3b3Jrc3BhY2UgY2xpZW50IGNhcnJpZWQgb24gYW5cbiAqIGBFeGVjdXRpb25Db250ZXh0TGlrZWAgKGBnZXRFeGVjdXRpb25Db250ZXh0KCkuY2xpZW50YCkuIFR5cGVkIHN0cnVjdHVyYWxseVxuICogb2ZmIEFwcEtpdCBzbyBjb25zdW1lcnMgZG9uJ3QgdGFrZSBhIGRpcmVjdCBgQGRhdGFicmlja3Mvc2RrLWV4cGVyaW1lbnRhbGBcbiAqIGRlcGVuZGVuY3kgLSB0aGUgZGVwIGZsb3dzIGluIHRyYW5zaXRpdmVseSB0aHJvdWdoIGBAZGF0YWJyaWNrcy9hcHBraXRgLlxuICovXG5leHBvcnQgdHlwZSBXb3Jrc3BhY2VDbGllbnRMaWtlID0gRXhlY3V0aW9uQ29udGV4dExpa2VbXCJjbGllbnRcIl07XG5cbi8qKlxuICogVGhlIGN1cnJlbnQgQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0LCBvciBgdW5kZWZpbmVkYCB3aGVuIEFwcEtpdCBpc24ndFxuICogaW5pdGlhbGl6ZWQgKG91dHNpZGUgYSByZXF1ZXN0IHNjb3BlKS4gU3dhbGxvd3MgQXBwS2l0J3NcbiAqIHtAbGluayBJbml0aWFsaXphdGlvbkVycm9yfTsgYW55IG90aGVyIGVycm9yIHByb3BhZ2F0ZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL3Nkay1leHBlcmltZW50YWxcIjtcbiAqXG4gKiAvLyBPQk8tc2NvcGVkIGluc2lkZSBhIHJlcXVlc3QsIHNlcnZpY2UgcHJpbmNpcGFsIGZyb20gYSBDTEkgb3Igc2NyaXB0LlxuICogY29uc3QgY2xpZW50ID0gYXBwa2l0LnRyeUdldEV4ZWN1dGlvbkNvbnRleHQoKT8uY2xpZW50ID8/IG5ldyBXb3Jrc3BhY2VDbGllbnQoe30pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ5R2V0RXhlY3V0aW9uQ29udGV4dCgpOiBFeGVjdXRpb25Db250ZXh0TGlrZSB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgY3R4ID0gZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICAgIGlmIChjdHg/LmNsaWVudCkge1xuICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBJbml0aWFsaXphdGlvbkVycm9yKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIGJhcmUgQXBwS2l0IGFwcCAobm8gcGx1Z2lucykgd2hlbiBub25lIGlzIHJ1bm5pbmcgeWV0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqXG4gKiBhd2FpdCBhcHBraXQuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAqIGNvbnN0IGNsaWVudCA9IGFwcGtpdC50cnlHZXRFeGVjdXRpb25Db250ZXh0KCk/LmNsaWVudDtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUluaXRpYWxpemVkKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAodHJ5R2V0RXhlY3V0aW9uQ29udGV4dCgpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiZW5zdXJlSW5pdGlhbGl6ZWQ6IGFscmVhZHkgaW5pdGlhbGl6ZWRcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhcImVuc3VyZUluaXRpYWxpemVkOiBib290aW5nIGJhcmUgQXBwS2l0IGFwcFwiKTtcbiAgYXdhaXQgY3JlYXRlQXBwKHsgcGx1Z2luczogW10sIGF1dG9Db25maWd1cmU6IGZhbHNlIH0pO1xuICBsb2dnZXIuZGVidWcoXCJlbnN1cmVJbml0aWFsaXplZDogZG9uZVwiKTtcbn1cbiJdfQ==
|
package/lib/src/databricks.js
CHANGED
|
@@ -10,10 +10,9 @@
|
|
|
10
10
|
* @module
|
|
11
11
|
*/
|
|
12
12
|
import { Context } from "@databricks/sdk-experimental";
|
|
13
|
-
import { async,
|
|
14
|
-
const logger = log.logger("databricks");
|
|
13
|
+
import { async, env as envUtil } from "@dbx-tools/shared-core";
|
|
15
14
|
/** Highest valid TCP port number. */
|
|
16
|
-
export const MAX_TCP_PORT =
|
|
15
|
+
export const MAX_TCP_PORT = envUtil.MAX_TCP_PORT;
|
|
17
16
|
/**
|
|
18
17
|
* Detect the Databricks App runtime from environment shape: requires a
|
|
19
18
|
* non-empty `DATABRICKS_APP_NAME`, a `DATABRICKS_HOST` that parses as an
|
|
@@ -27,32 +26,7 @@ export const MAX_TCP_PORT = 65_535;
|
|
|
27
26
|
* const local = !databricks.isAppEnv();
|
|
28
27
|
*/
|
|
29
28
|
export function isAppEnv(env = process.env) {
|
|
30
|
-
|
|
31
|
-
const host = env.DATABRICKS_HOST?.trim();
|
|
32
|
-
const port = env.DATABRICKS_APP_PORT?.trim();
|
|
33
|
-
if (!appName || !host || !port) {
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
try {
|
|
37
|
-
const url = new URL(host);
|
|
38
|
-
if (!["http:", "https:"].includes(url.protocol)) {
|
|
39
|
-
logger.debug("app env rejected: host is not an http(s) URL");
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
logger.debug("app env rejected: host is not a URL");
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
const portNumber = object.toNumber(port);
|
|
48
|
-
if (portNumber === undefined ||
|
|
49
|
-
!Number.isInteger(portNumber) ||
|
|
50
|
-
portNumber < 1 ||
|
|
51
|
-
portNumber > MAX_TCP_PORT) {
|
|
52
|
-
logger.debug("app env rejected: DATABRICKS_APP_PORT is not a TCP port");
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
55
|
-
return true;
|
|
29
|
+
return envUtil.isAppEnv(env);
|
|
56
30
|
}
|
|
57
31
|
export function toContext(source, input) {
|
|
58
32
|
if (!(source instanceof AbortController)) {
|
|
@@ -107,4 +81,4 @@ function tieCancellationToken(controller, token) {
|
|
|
107
81
|
}
|
|
108
82
|
token.onCancellationRequested((reason) => controller.abort(reason));
|
|
109
83
|
}
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJyaWNrcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYnJpY2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFHSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUV4QyxxQ0FBcUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztBQUVuQzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsTUFBMEMsT0FBTyxDQUFDLEdBQUc7SUFDNUUsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLG1CQUFtQixFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2hELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDekMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLG1CQUFtQixFQUFFLElBQUksRUFBRSxDQUFDO0lBRTdDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2hELE1BQU0sQ0FBQyxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUM3RCxPQUFPLEtBQUssQ0FBQztRQUNmLENB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KG5vIEFwcEtpdCk6IGFkYXB0IFdIQVRXRyBjYW5jZWxsYXRpb25cbiAqIChgQWJvcnRTaWduYWxgIC8gYEFib3J0Q29udHJvbGxlcmApIGludG8gdGhlIFNESydzIGBDb250ZXh0YCAvXG4gKiBgQ2FuY2VsbGF0aW9uVG9rZW5gIHNoYXBlcyBzbyBhIHNpbmdsZSBgQWJvcnRDb250cm9sbGVyYCBjYW4gZHJpdmUgZXZlcnlcbiAqIGluLWZsaWdodCBTREsgY2FsbCwgcGx1cyBEYXRhYnJpY2tzIHJ1bnRpbWUtZW52aXJvbm1lbnQgZGV0ZWN0aW9uLlxuICpcbiAqIFNlcnZlci1vbmx5OiBsZWFucyBvbiB0aGUgRGF0YWJyaWNrcyBTREsgYENvbnRleHRgLiBMaXZlcyBpbiBub2RlLWFwcGtpdCBzb1xuICogdGhlIGJyb3dzZXItc2FmZSBzaGFyZWQtY29yZSBzdGF5cyBTREstZnJlZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDYW5jZWxsYXRpb25Ub2tlbiB9IGZyb20gXCJAZGF0YWJyaWNrcy9zZGstZXhwZXJpbWVudGFsXCI7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIkBkYXRhYnJpY2tzL3Nkay1leHBlcmltZW50YWxcIjtcbmltcG9ydCB7IGFzeW5jLCBsb2csIG9iamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJkYXRhYnJpY2tzXCIpO1xuXG4vKiogSGlnaGVzdCB2YWxpZCBUQ1AgcG9ydCBudW1iZXIuICovXG5leHBvcnQgY29uc3QgTUFYX1RDUF9QT1JUID0gNjVfNTM1O1xuXG4vKipcbiAqIERldGVjdCB0aGUgRGF0YWJyaWNrcyBBcHAgcnVudGltZSBmcm9tIGVudmlyb25tZW50IHNoYXBlOiByZXF1aXJlcyBhXG4gKiBub24tZW1wdHkgYERBVEFCUklDS1NfQVBQX05BTUVgLCBhIGBEQVRBQlJJQ0tTX0hPU1RgIHRoYXQgcGFyc2VzIGFzIGFuXG4gKiBgaHR0cGAvYGh0dHBzYCBVUkwsIGFuZCBhIGBEQVRBQlJJQ0tTX0FQUF9QT1JUYCB0aGF0IGlzIGEgdmFsaWQgVENQIHBvcnQuXG4gKiBSZWFkcyBgcHJvY2Vzcy5lbnZgIHdoZW4gbm8gYGVudmAgaXMgcGFzc2VkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBkYXRhYnJpY2tzIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG4gKlxuICogLy8gU2tpcCBidW5kbGUgLyBhcHAueWFtbCBkaXNjb3Zlcnkgd2hlbiB0aGUgYXBwIGlzIGFscmVhZHkgZGVwbG95ZWQuXG4gKiBjb25zdCBsb2NhbCA9ICFkYXRhYnJpY2tzLmlzQXBwRW52KCk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FwcEVudihlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gPSBwcm9jZXNzLmVudik6IGJvb2xlYW4ge1xuICBjb25zdCBhcHBOYW1lID0gZW52LkRBVEFCUklDS1NfQVBQX05BTUU/LnRyaW0oKTtcbiAgY29uc3QgaG9zdCA9IGVudi5EQVRBQlJJQ0tTX0hPU1Q/LnRyaW0oKTtcbiAgY29uc3QgcG9ydCA9IGVudi5EQVRBQlJJQ0tTX0FQUF9QT1JUPy50cmltKCk7XG5cbiAgaWYgKCFhcHBOYW1lIHx8ICFob3N0IHx8ICFwb3J0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGhvc3QpO1xuICAgIGlmICghW1wiaHR0cDpcIiwgXCJodHRwczpcIl0uaW5jbHVkZXModXJsLnByb3RvY29sKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiYXBwIGVudiByZWplY3RlZDogaG9zdCBpcyBub3QgYW4gaHR0cChzKSBVUkxcIik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICBsb2dnZXIuZGVidWcoXCJhcHAgZW52IHJlamVjdGVkOiBob3N0IGlzIG5vdCBhIFVSTFwiKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwb3J0TnVtYmVyID0gb2JqZWN0LnRvTnVtYmVyKHBvcnQpO1xuICBpZiAoXG4gICAgcG9ydE51bWJlciA9PT0gdW5kZWZpbmVkIHx8XG4gICAgIU51bWJlci5pc0ludGVnZXIocG9ydE51bWJlcikgfHxcbiAgICBwb3J0TnVtYmVyIDwgMSB8fFxuICAgIHBvcnROdW1iZXIgPiBNQVhfVENQX1BPUlRcbiAgKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYXBwIGVudiByZWplY3RlZDogREFUQUJSSUNLU19BUFBfUE9SVCBpcyBub3QgYSBUQ1AgcG9ydFwiKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIEVpdGhlciBhbiBTREsgYENvbnRleHRgIG9yIGEgV0hBVFdHIGBBYm9ydFNpZ25hbGAuICovXG5leHBvcnQgdHlwZSBDb250ZXh0TGlrZSA9IENvbnRleHQgfCBBYm9ydFNpZ25hbDtcblxuLyoqXG4gKiBXcmFwIGEgYENvbnRleHRgIChyZXR1cm5lZCBhcy1pcykgb3IgYEFib3J0U2lnbmFsYCAoYWRhcHRlZCkgYXMgYW4gU0RLIGBDb250ZXh0YC5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgZGF0YWJyaWNrcyB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgZ2V0V29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuICpcbiAqIGF3YWl0IGdldFdvcmtzcGFjZUNsaWVudCh7fSkuYXBpQ2xpZW50LnJlcXVlc3QoXG4gKiAgIHsgcGF0aDogXCIvYXBpLzIuMC9zZXJ2aW5nLWVuZHBvaW50c1wiLCBtZXRob2Q6IFwiR0VUXCIsIGhlYWRlcnM6IG5ldyBIZWFkZXJzKCksIHJhdzogZmFsc2UgfSxcbiAqICAgZGF0YWJyaWNrcy50b0NvbnRleHQocmVxdWVzdC5zaWduYWwpLFxuICogKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29udGV4dChpbnB1dDogQ29udGV4dExpa2UpOiBDb250ZXh0O1xuLyoqXG4gKiBEZXJpdmUgYW4gU0RLIGBDb250ZXh0YCBmcm9tIGBjb250cm9sbGVyLnNpZ25hbGAsIG9wdGlvbmFsbHkgdHlpbmcgYGlucHV0YFxuICogaW50byB0aGUgY29udHJvbGxlciBzbyB0aGUgY29udHJvbGxlciBiZWNvbWVzIHRoZSBzaW5nbGUgY2FuY2VsbGF0aW9uXG4gKiBzb3VyY2UgZm9yIGRvd25zdHJlYW0gU0RLIGNhbGxzOlxuICpcbiAqICAgLSBgQWJvcnRTaWduYWxgOiBhYm9ydGluZyBpdCBwcm9wYWdhdGVzIGludG8gYGNvbnRyb2xsZXJgIChhbmQgZnJvbSB0aGVyZVxuICogICAgIGludG8gZXZlcnkgU0RLIGNhbGwgeW91IHBhc3MgdGhlIHJldHVybmVkIGNvbnRleHQgdG8pLlxuICogICAtIGBDb250ZXh0YDogaXRzIGBjYW5jZWxsYXRpb25Ub2tlbmAgaXMgdGllZCBpbnRvIGBjb250cm9sbGVyYCwgYW5kIGl0c1xuICogICAgIG90aGVyIGZpZWxkcyAoYGxvZ2dlcmAsIGBvcE5hbWVgLCBgcm9vdENsYXNzTmFtZWAsIGByb290Rm5OYW1lYCwgYG9wSWRgKVxuICogICAgIGFyZSBwcmVzZXJ2ZWQgaW4gdGhlIHJldHVybmVkIGBDb250ZXh0YC4gVGhlIHJldHVybmVkIGNvbnRleHQnc1xuICogICAgIGBjYW5jZWxsYXRpb25Ub2tlbmAgaXMgcmVwbGFjZWQgd2l0aCBvbmUgYmFja2VkIGJ5IGBjb250cm9sbGVyLnNpZ25hbGAuXG4gKlxuICogVGhlIHRpZSBpcyBvbmUtd2F5IChwYXJlbnQgLT4gY2hpbGQpOiBhYm9ydGluZyBgY29udHJvbGxlcmAgZGlyZWN0bHkgZG9lc1xuICogTk9UIGNhbmNlbCBgaW5wdXRgLiBTbyBhIHJlcXVlc3QtbGV2ZWwgY2FuY2VsICh5b3VyIGxvb3AncyBgdHJ5L2ZpbmFsbHkge1xuICogY29udHJvbGxlci5hYm9ydCgpIH1gKSB3b24ndCB0ZWFyIGRvd24gYSBjYWxsZXItc3VwcGxpZWQgQWJvcnRTaWduYWwgaXRcbiAqIGRpZG4ndCBvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NvbnRleHQoY29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyLCBpbnB1dD86IENvbnRleHRMaWtlKTogQ29udGV4dDtcbmV4cG9ydCBmdW5jdGlvbiB0b0NvbnRleHQoc291cmNlOiBBYm9ydENvbnRyb2xsZXIgfCBDb250ZXh0TGlrZSwgaW5wdXQ/OiBDb250ZXh0TGlrZSk6IENvbnRleHQge1xuICBpZiAoIShzb3VyY2UgaW5zdGFuY2VvZiBBYm9ydENvbnRyb2xsZXIpKSB7XG4gICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIENvbnRleHQpIHJldHVybiBzb3VyY2U7XG4gICAgcmV0dXJuIG5ldyBDb250ZXh0KHsgY2FuY2VsbGF0aW9uVG9rZW46IHNpZ25hbFRvQ2FuY2VsbGF0aW9uVG9rZW4oc291cmNlKSB9KTtcbiAgfVxuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBBYm9ydFNpZ25hbCkge1xuICAgIGFzeW5jLnRpZUFib3J0U2lnbmFsKHNvdXJjZSwgaW5wdXQpO1xuICB9IGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgQ29udGV4dCkge1xuICAgIGNvbnN0IHRva2VuID0gaW5wdXQuY2FuY2VsbGF0aW9uVG9rZW47XG4gICAgaWYgKHRva2VuKSB0aWVDYW5jZWxsYXRpb25Ub2tlbihzb3VyY2UsIHRva2VuKTtcbiAgICBjb25zdCBtZXJnZWQgPSBpbnB1dC5jb3B5KCk7XG4gICAgbWVyZ2VkLnNldEl0ZW1zKHsgY2FuY2VsbGF0aW9uVG9rZW46IHNpZ25hbFRvQ2FuY2VsbGF0aW9uVG9rZW4oc291cmNlLnNpZ25hbCkgfSk7XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfVxuICByZXR1cm4gbmV3IENvbnRleHQoeyBjYW5jZWxsYXRpb25Ub2tlbjogc2lnbmFsVG9DYW5jZWxsYXRpb25Ub2tlbihzb3VyY2Uuc2lnbmFsKSB9KTtcbn1cblxuLyoqXG4gKiBBZGFwdCBhIFdIQVRXRyBgQWJvcnRTaWduYWxgIHRvIHRoZSBEYXRhYnJpY2tzIFNESydzIGBDYW5jZWxsYXRpb25Ub2tlbmBcbiAqIGludGVyZmFjZS4gVGhlIFNESydzIGBhcGktY2xpZW50LnRzYCBpbnRlcm5hbGx5IGNyZWF0ZXMgYW4gYEFib3J0Q29udHJvbGxlcmBcbiAqIGFuZCB3aXJlcyBgY2FuY2VsbGF0aW9uVG9rZW4ub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWRgIHRvIGl0LCBzbyB0aGlzIGFkYXB0ZXJcbiAqIGlzIHRoZSBvbmUtbGluZSBicmlkZ2UgZnJvbSBcInBsYXRmb3JtLXN0YW5kYXJkIGNhbmNlbGxhdGlvblwiIHRvIFwidGhlIFNES1xuICogYWJvcnRzIHRoZSBmZXRjaCBvbiB5b3VyIGJlaGFsZlwiLlxuICovXG5mdW5jdGlvbiBzaWduYWxUb0NhbmNlbGxhdGlvblRva2VuKHNpZ25hbDogQWJvcnRTaWduYWwpOiBDYW5jZWxsYXRpb25Ub2tlbiB7XG4gIHJldHVybiB7XG4gICAgZ2V0IGlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCkge1xuICAgICAgcmV0dXJuIHNpZ25hbC5hYm9ydGVkO1xuICAgIH0sXG4gICAgb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY2IpIHtcbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICBjYihzaWduYWwucmVhc29uKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiBjYihzaWduYWwucmVhc29uKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogVGllIHRoZSBTREsncyBgQ2FuY2VsbGF0aW9uVG9rZW5gIGludGVyZmFjZSBiYWNrIGludG8gYW4gYEFib3J0Q29udHJvbGxlcmAuXG4gKiBNaXJyb3JzIGBhc3luYy50aWVBYm9ydFNpZ25hbGAgYnV0IGZvciB0aGUgU0RLJ3MgY2FuY2VsbGF0aW9uIHNoYXBlLCB1c2VkXG4gKiB3aGVuIGEgY2FsbGVyIGhhbmRzIHVzIGEgcHJlLWJ1aWx0IGBDb250ZXh0YCB3aG9zZSB0b2tlbiB3ZSB3YW50IHRvIGZvbGQgaW50b1xuICogb3VyIG93biBjb250cm9sbGVyLlxuICovXG5mdW5jdGlvbiB0aWVDYW5jZWxsYXRpb25Ub2tlbihjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIsIHRva2VuOiBDYW5jZWxsYXRpb25Ub2tlbik6IHZvaWQge1xuICBpZiAodG9rZW4uaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQpIHtcbiAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRva2VuLm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKChyZWFzb24pID0+IGNvbnRyb2xsZXIuYWJvcnQocmVhc29uKSk7XG59XG4iXX0=
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJyaWNrcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYnJpY2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFHSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFL0QscUNBQXFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO0FBRWpEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxNQUEwQyxPQUFPLENBQUMsR0FBRztJQUM1RSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQW9DRCxNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQXFDLEVBQUUsS0FBbUI7SUFDbEYsSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDekMsSUFBSSxNQUFNLFlBQVksT0FBTztZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzdDLE9BQU8sSUFBSSxPQUFPLENBQUMsRUFBRSxpQkFBaUIsRUFBRSx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELElBQUksS0FBSyxZQUFZLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7U0FBTSxJQUFJLEtBQUssWUFBWSxPQUFPLEVBQUUsQ0FBQztRQUNwQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUM7UUFDdEMsSUFBSSxLQUFLO1lBQUUsb0JBQW9CLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9DLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUseUJBQXlCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxFQUFFLGlCQUFpQixFQUFFLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEYsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMseUJBQXlCLENBQUMsTUFBbUI7SUFDcEQsT0FBTztRQUNMLElBQUksdUJBQXVCO1lBQ3pCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUN4QixDQUFDO1FBQ0QsdUJBQXVCLENBQUMsRUFBRTtZQUN4QixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbkIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEIsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM1RSxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsb0JBQW9CLENBQUMsVUFBMkIsRUFBRSxLQUF3QjtJQUNqRixJQUFJLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ2xDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQixPQUFPO0lBQ1QsQ0FBQztJQUNELEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyaWMgRGF0YWJyaWNrcyBTREsgZ2x1ZSAobm8gQXBwS2l0KTogYWRhcHQgV0hBVFdHIGNhbmNlbGxhdGlvblxuICogKGBBYm9ydFNpZ25hbGAgLyBgQWJvcnRDb250cm9sbGVyYCkgaW50byB0aGUgU0RLJ3MgYENvbnRleHRgIC9cbiAqIGBDYW5jZWxsYXRpb25Ub2tlbmAgc2hhcGVzIHNvIGEgc2luZ2xlIGBBYm9ydENvbnRyb2xsZXJgIGNhbiBkcml2ZSBldmVyeVxuICogaW4tZmxpZ2h0IFNESyBjYWxsLCBwbHVzIERhdGFicmlja3MgcnVudGltZS1lbnZpcm9ubWVudCBkZXRlY3Rpb24uXG4gKlxuICogU2VydmVyLW9ubHk6IGxlYW5zIG9uIHRoZSBEYXRhYnJpY2tzIFNESyBgQ29udGV4dGAuIExpdmVzIGluIG5vZGUtYXBwa2l0IHNvXG4gKiB0aGUgYnJvd3Nlci1zYWZlIHNoYXJlZC1jb3JlIHN0YXlzIFNESy1mcmVlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENhbmNlbGxhdGlvblRva2VuIH0gZnJvbSBcIkBkYXRhYnJpY2tzL3Nkay1leHBlcmltZW50YWxcIjtcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiQGRhdGFicmlja3Mvc2RrLWV4cGVyaW1lbnRhbFwiO1xuaW1wb3J0IHsgYXN5bmMsIGVudiBhcyBlbnZVdGlsIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuLyoqIEhpZ2hlc3QgdmFsaWQgVENQIHBvcnQgbnVtYmVyLiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9UQ1BfUE9SVCA9IGVudlV0aWwuTUFYX1RDUF9QT1JUO1xuXG4vKipcbiAqIERldGVjdCB0aGUgRGF0YWJyaWNrcyBBcHAgcnVudGltZSBmcm9tIGVudmlyb25tZW50IHNoYXBlOiByZXF1aXJlcyBhXG4gKiBub24tZW1wdHkgYERBVEFCUklDS1NfQVBQX05BTUVgLCBhIGBEQVRBQlJJQ0tTX0hPU1RgIHRoYXQgcGFyc2VzIGFzIGFuXG4gKiBgaHR0cGAvYGh0dHBzYCBVUkwsIGFuZCBhIGBEQVRBQlJJQ0tTX0FQUF9QT1JUYCB0aGF0IGlzIGEgdmFsaWQgVENQIHBvcnQuXG4gKiBSZWFkcyBgcHJvY2Vzcy5lbnZgIHdoZW4gbm8gYGVudmAgaXMgcGFzc2VkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBkYXRhYnJpY2tzIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG4gKlxuICogLy8gU2tpcCBidW5kbGUgLyBhcHAueWFtbCBkaXNjb3Zlcnkgd2hlbiB0aGUgYXBwIGlzIGFscmVhZHkgZGVwbG95ZWQuXG4gKiBjb25zdCBsb2NhbCA9ICFkYXRhYnJpY2tzLmlzQXBwRW52KCk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FwcEVudihlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gPSBwcm9jZXNzLmVudik6IGJvb2xlYW4ge1xuICByZXR1cm4gZW52VXRpbC5pc0FwcEVudihlbnYpO1xufVxuXG4vKiogRWl0aGVyIGFuIFNESyBgQ29udGV4dGAgb3IgYSBXSEFUV0cgYEFib3J0U2lnbmFsYC4gKi9cbmV4cG9ydCB0eXBlIENvbnRleHRMaWtlID0gQ29udGV4dCB8IEFib3J0U2lnbmFsO1xuXG4vKipcbiAqIFdyYXAgYSBgQ29udGV4dGAgKHJldHVybmVkIGFzLWlzKSBvciBgQWJvcnRTaWduYWxgIChhZGFwdGVkKSBhcyBhbiBTREsgYENvbnRleHRgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBkYXRhYnJpY2tzIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyBnZXRXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKlxuICogYXdhaXQgZ2V0V29ya3NwYWNlQ2xpZW50KHt9KS5hcGlDbGllbnQucmVxdWVzdChcbiAqICAgeyBwYXRoOiBcIi9hcGkvMi4wL3NlcnZpbmctZW5kcG9pbnRzXCIsIG1ldGhvZDogXCJHRVRcIiwgaGVhZGVyczogbmV3IEhlYWRlcnMoKSwgcmF3OiBmYWxzZSB9LFxuICogICBkYXRhYnJpY2tzLnRvQ29udGV4dChyZXF1ZXN0LnNpZ25hbCksXG4gKiApO1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Db250ZXh0KGlucHV0OiBDb250ZXh0TGlrZSk6IENvbnRleHQ7XG4vKipcbiAqIERlcml2ZSBhbiBTREsgYENvbnRleHRgIGZyb20gYGNvbnRyb2xsZXIuc2lnbmFsYCwgb3B0aW9uYWxseSB0eWluZyBgaW5wdXRgXG4gKiBpbnRvIHRoZSBjb250cm9sbGVyIHNvIHRoZSBjb250cm9sbGVyIGJlY29tZXMgdGhlIHNpbmdsZSBjYW5jZWxsYXRpb25cbiAqIHNvdXJjZSBmb3IgZG93bnN0cmVhbSBTREsgY2FsbHM6XG4gKlxuICogICAtIGBBYm9ydFNpZ25hbGA6IGFib3J0aW5nIGl0IHByb3BhZ2F0ZXMgaW50byBgY29udHJvbGxlcmAgKGFuZCBmcm9tIHRoZXJlXG4gKiAgICAgaW50byBldmVyeSBTREsgY2FsbCB5b3UgcGFzcyB0aGUgcmV0dXJuZWQgY29udGV4dCB0bykuXG4gKiAgIC0gYENvbnRleHRgOiBpdHMgYGNhbmNlbGxhdGlvblRva2VuYCBpcyB0aWVkIGludG8gYGNvbnRyb2xsZXJgLCBhbmQgaXRzXG4gKiAgICAgb3RoZXIgZmllbGRzIChgbG9nZ2VyYCwgYG9wTmFtZWAsIGByb290Q2xhc3NOYW1lYCwgYHJvb3RGbk5hbWVgLCBgb3BJZGApXG4gKiAgICAgYXJlIHByZXNlcnZlZCBpbiB0aGUgcmV0dXJuZWQgYENvbnRleHRgLiBUaGUgcmV0dXJuZWQgY29udGV4dCdzXG4gKiAgICAgYGNhbmNlbGxhdGlvblRva2VuYCBpcyByZXBsYWNlZCB3aXRoIG9uZSBiYWNrZWQgYnkgYGNvbnRyb2xsZXIuc2lnbmFsYC5cbiAqXG4gKiBUaGUgdGllIGlzIG9uZS13YXkgKHBhcmVudCAtPiBjaGlsZCk6IGFib3J0aW5nIGBjb250cm9sbGVyYCBkaXJlY3RseSBkb2VzXG4gKiBOT1QgY2FuY2VsIGBpbnB1dGAuIFNvIGEgcmVxdWVzdC1sZXZlbCBjYW5jZWwgKHlvdXIgbG9vcCdzIGB0cnkvZmluYWxseSB7XG4gKiBjb250cm9sbGVyLmFib3J0KCkgfWApIHdvbid0IHRlYXIgZG93biBhIGNhbGxlci1zdXBwbGllZCBBYm9ydFNpZ25hbCBpdFxuICogZGlkbid0IG93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29udGV4dChjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIsIGlucHV0PzogQ29udGV4dExpa2UpOiBDb250ZXh0O1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29udGV4dChzb3VyY2U6IEFib3J0Q29udHJvbGxlciB8IENvbnRleHRMaWtlLCBpbnB1dD86IENvbnRleHRMaWtlKTogQ29udGV4dCB7XG4gIGlmICghKHNvdXJjZSBpbnN0YW5jZW9mIEFib3J0Q29udHJvbGxlcikpIHtcbiAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgQ29udGV4dCkgcmV0dXJuIHNvdXJjZTtcbiAgICByZXR1cm4gbmV3IENvbnRleHQoeyBjYW5jZWxsYXRpb25Ub2tlbjogc2lnbmFsVG9DYW5jZWxsYXRpb25Ub2tlbihzb3VyY2UpIH0pO1xuICB9XG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIEFib3J0U2lnbmFsKSB7XG4gICAgYXN5bmMudGllQWJvcnRTaWduYWwoc291cmNlLCBpbnB1dCk7XG4gIH0gZWxzZSBpZiAoaW5wdXQgaW5zdGFuY2VvZiBDb250ZXh0KSB7XG4gICAgY29uc3QgdG9rZW4gPSBpbnB1dC5jYW5jZWxsYXRpb25Ub2tlbjtcbiAgICBpZiAodG9rZW4pIHRpZUNhbmNlbGxhdGlvblRva2VuKHNvdXJjZSwgdG9rZW4pO1xuICAgIGNvbnN0IG1lcmdlZCA9IGlucHV0LmNvcHkoKTtcbiAgICBtZXJnZWQuc2V0SXRlbXMoeyBjYW5jZWxsYXRpb25Ub2tlbjogc2lnbmFsVG9DYW5jZWxsYXRpb25Ub2tlbihzb3VyY2Uuc2lnbmFsKSB9KTtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9XG4gIHJldHVybiBuZXcgQ29udGV4dCh7IGNhbmNlbGxhdGlvblRva2VuOiBzaWduYWxUb0NhbmNlbGxhdGlvblRva2VuKHNvdXJjZS5zaWduYWwpIH0pO1xufVxuXG4vKipcbiAqIEFkYXB0IGEgV0hBVFdHIGBBYm9ydFNpZ25hbGAgdG8gdGhlIERhdGFicmlja3MgU0RLJ3MgYENhbmNlbGxhdGlvblRva2VuYFxuICogaW50ZXJmYWNlLiBUaGUgU0RLJ3MgYGFwaS1jbGllbnQudHNgIGludGVybmFsbHkgY3JlYXRlcyBhbiBgQWJvcnRDb250cm9sbGVyYFxuICogYW5kIHdpcmVzIGBjYW5jZWxsYXRpb25Ub2tlbi5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZGAgdG8gaXQsIHNvIHRoaXMgYWRhcHRlclxuICogaXMgdGhlIG9uZS1saW5lIGJyaWRnZSBmcm9tIFwicGxhdGZvcm0tc3RhbmRhcmQgY2FuY2VsbGF0aW9uXCIgdG8gXCJ0aGUgU0RLXG4gKiBhYm9ydHMgdGhlIGZldGNoIG9uIHlvdXIgYmVoYWxmXCIuXG4gKi9cbmZ1bmN0aW9uIHNpZ25hbFRvQ2FuY2VsbGF0aW9uVG9rZW4oc2lnbmFsOiBBYm9ydFNpZ25hbCk6IENhbmNlbGxhdGlvblRva2VuIHtcbiAgcmV0dXJuIHtcbiAgICBnZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKSB7XG4gICAgICByZXR1cm4gc2lnbmFsLmFib3J0ZWQ7XG4gICAgfSxcbiAgICBvbkNhbmNlbGxhdGlvblJlcXVlc3RlZChjYikge1xuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGNiKHNpZ25hbC5yZWFzb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IGNiKHNpZ25hbC5yZWFzb24pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUaWUgdGhlIFNESydzIGBDYW5jZWxsYXRpb25Ub2tlbmAgaW50ZXJmYWNlIGJhY2sgaW50byBhbiBgQWJvcnRDb250cm9sbGVyYC5cbiAqIE1pcnJvcnMgYGFzeW5jLnRpZUFib3J0U2lnbmFsYCBidXQgZm9yIHRoZSBTREsncyBjYW5jZWxsYXRpb24gc2hhcGUsIHVzZWRcbiAqIHdoZW4gYSBjYWxsZXIgaGFuZHMgdXMgYSBwcmUtYnVpbHQgYENvbnRleHRgIHdob3NlIHRva2VuIHdlIHdhbnQgdG8gZm9sZCBpbnRvXG4gKiBvdXIgb3duIGNvbnRyb2xsZXIuXG4gKi9cbmZ1bmN0aW9uIHRpZUNhbmNlbGxhdGlvblRva2VuKGNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlciwgdG9rZW46IENhbmNlbGxhdGlvblRva2VuKTogdm9pZCB7XG4gIGlmICh0b2tlbi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCkge1xuICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdG9rZW4ub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKHJlYXNvbikgPT4gY29udHJvbGxlci5hYm9ydChyZWFzb24pKTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@databricks/sdk-experimental": "^0.17.0",
|
|
31
|
-
"@dbx-tools/core": "0.6.
|
|
32
|
-
"@dbx-tools/shared-core": "0.6.
|
|
31
|
+
"@dbx-tools/core": "0.6.73",
|
|
32
|
+
"@dbx-tools/shared-core": "0.6.73",
|
|
33
33
|
"yaml": "^2.9.0",
|
|
34
34
|
"zod": "4.3.6"
|
|
35
35
|
},
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"./package.json": "./package.json"
|
|
48
48
|
}
|
|
49
49
|
},
|
|
50
|
-
"version": "0.6.
|
|
50
|
+
"version": "0.6.73",
|
|
51
51
|
"types": "./lib/index.d.ts",
|
|
52
52
|
"type": "module",
|
|
53
53
|
"exports": {
|
package/src/_cache-storage.ts
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
import { createRequire } from "node:module";
|
|
18
18
|
import { dirname, join } from "node:path";
|
|
19
19
|
import { createLakebasePool, getWorkspaceClient, type CacheConfig } from "@databricks/appkit";
|
|
20
|
-
import { error, log } from "@dbx-tools/shared-core";
|
|
20
|
+
import { error, hash, log } from "@dbx-tools/shared-core";
|
|
21
21
|
|
|
22
22
|
const logger = log.logger("cache-storage");
|
|
23
23
|
|
|
@@ -29,11 +29,16 @@ function isDebugEnabled(): boolean {
|
|
|
29
29
|
return log.isLevelEnabled("debug");
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
/** Whether a migration failed only because this role does not own an existing object. */
|
|
33
|
+
function isOwnershipMigrationError(err: unknown): boolean {
|
|
34
|
+
return error.errorContext(err).hasMessage("must be owner");
|
|
35
|
+
}
|
|
36
|
+
|
|
32
37
|
type LakebasePool = ReturnType<typeof createLakebasePool>;
|
|
33
38
|
type CacheStorage = NonNullable<CacheConfig["storage"]>;
|
|
34
39
|
|
|
35
40
|
/** AppKit's internal persistent storage surface. */
|
|
36
|
-
type PersistentStorageBase = CacheStorage & {
|
|
41
|
+
export type PersistentStorageBase = CacheStorage & {
|
|
37
42
|
initialize(): Promise<void>;
|
|
38
43
|
initialized: boolean;
|
|
39
44
|
};
|
|
@@ -47,7 +52,7 @@ let persistentStorageCtor: PersistentStorageConstructor | undefined | null = nul
|
|
|
47
52
|
|
|
48
53
|
/**
|
|
49
54
|
* Lazily resolve AppKit's internal `PersistentStorage` constructor. `null`
|
|
50
|
-
* means
|
|
55
|
+
* means not attempted yet; `undefined` means the lookup already failed.
|
|
51
56
|
*/
|
|
52
57
|
function loadPersistentStorage(): PersistentStorageConstructor | undefined {
|
|
53
58
|
if (persistentStorageCtor !== null) {
|
|
@@ -78,7 +83,7 @@ function loadPersistentStorage(): PersistentStorageConstructor | undefined {
|
|
|
78
83
|
}
|
|
79
84
|
|
|
80
85
|
/** Soften `initialize()` so a migration failure is logged once, not thrown. */
|
|
81
|
-
function softenInitialize(storage: PersistentStorageBase): void {
|
|
86
|
+
export function softenInitialize(storage: PersistentStorageBase): void {
|
|
82
87
|
const originalInitialize = storage.initialize.bind(storage);
|
|
83
88
|
let softInitPromise: Promise<void> | undefined;
|
|
84
89
|
|
|
@@ -88,7 +93,7 @@ function softenInitialize(storage: PersistentStorageBase): void {
|
|
|
88
93
|
try {
|
|
89
94
|
await originalInitialize();
|
|
90
95
|
} catch (err) {
|
|
91
|
-
|
|
96
|
+
if (!isOwnershipMigrationError(err)) throw err;
|
|
92
97
|
const message = error.errorMessage(err);
|
|
93
98
|
if (!loggedMigrationErrors.has(message)) {
|
|
94
99
|
loggedMigrationErrors.add(message);
|
|
@@ -102,12 +107,28 @@ function softenInitialize(storage: PersistentStorageBase): void {
|
|
|
102
107
|
})();
|
|
103
108
|
try {
|
|
104
109
|
await softInitPromise;
|
|
105
|
-
} finally {
|
|
106
110
|
storage.initialized = true;
|
|
111
|
+
} catch (err) {
|
|
112
|
+
softInitPromise = undefined;
|
|
113
|
+
throw err;
|
|
107
114
|
}
|
|
108
115
|
};
|
|
109
116
|
}
|
|
110
117
|
|
|
118
|
+
/** Verify the migrated cache table can serve the reads and writes AppKit needs. */
|
|
119
|
+
export async function probeStorage(storage: PersistentStorageBase): Promise<void> {
|
|
120
|
+
const key = `dbx-tools:cache-probe:${hash.id()}`;
|
|
121
|
+
try {
|
|
122
|
+
await storage.set(key, { value: key, expiry: Date.now() + 60_000 });
|
|
123
|
+
const result = await storage.get(key);
|
|
124
|
+
if (result?.value !== key) {
|
|
125
|
+
throw new Error("persistent cache probe returned an unexpected value");
|
|
126
|
+
}
|
|
127
|
+
} finally {
|
|
128
|
+
await storage.delete(key).catch(() => undefined);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
111
132
|
/**
|
|
112
133
|
* Build a soft-fail Lakebase cache storage when a pool can be created and
|
|
113
134
|
* AppKit's PersistentStorage can be loaded. Returns `undefined` otherwise so
|
|
@@ -131,6 +152,7 @@ export async function createSoftPersistentStorage(
|
|
|
131
152
|
return undefined;
|
|
132
153
|
}
|
|
133
154
|
await storage.initialize();
|
|
155
|
+
await probeStorage(storage);
|
|
134
156
|
return storage;
|
|
135
157
|
} catch (err) {
|
|
136
158
|
logger.debug("soft persistent cache unavailable", {
|
package/src/appkit.ts
CHANGED
|
@@ -37,6 +37,7 @@ import {
|
|
|
37
37
|
import type { PluginMap } from "@databricks/appkit/dist/shared/src/plugin";
|
|
38
38
|
import { async, log } from "@dbx-tools/shared-core";
|
|
39
39
|
|
|
40
|
+
import { createSoftPersistentStorage } from "./_cache-storage.ts";
|
|
40
41
|
import {
|
|
41
42
|
createInterceptorContext,
|
|
42
43
|
type Interceptor,
|
|
@@ -44,7 +45,6 @@ import {
|
|
|
44
45
|
lifecycleBridge,
|
|
45
46
|
type ResolvedAppEnv,
|
|
46
47
|
} from "./interceptor.ts";
|
|
47
|
-
import { createSoftPersistentStorage } from "./_cache-storage.ts";
|
|
48
48
|
import { applyLakebaseEnv, type LakebaseConnection } from "./lakebase-resolver.ts";
|
|
49
49
|
import { provisionCacheSchema } from "./provision.ts";
|
|
50
50
|
|
package/src/databricks.ts
CHANGED
|
@@ -12,12 +12,10 @@
|
|
|
12
12
|
|
|
13
13
|
import type { CancellationToken } from "@databricks/sdk-experimental";
|
|
14
14
|
import { Context } from "@databricks/sdk-experimental";
|
|
15
|
-
import { async,
|
|
16
|
-
|
|
17
|
-
const logger = log.logger("databricks");
|
|
15
|
+
import { async, env as envUtil } from "@dbx-tools/shared-core";
|
|
18
16
|
|
|
19
17
|
/** Highest valid TCP port number. */
|
|
20
|
-
export const MAX_TCP_PORT =
|
|
18
|
+
export const MAX_TCP_PORT = envUtil.MAX_TCP_PORT;
|
|
21
19
|
|
|
22
20
|
/**
|
|
23
21
|
* Detect the Databricks App runtime from environment shape: requires a
|
|
@@ -32,37 +30,7 @@ export const MAX_TCP_PORT = 65_535;
|
|
|
32
30
|
* const local = !databricks.isAppEnv();
|
|
33
31
|
*/
|
|
34
32
|
export function isAppEnv(env: Record<string, string | undefined> = process.env): boolean {
|
|
35
|
-
|
|
36
|
-
const host = env.DATABRICKS_HOST?.trim();
|
|
37
|
-
const port = env.DATABRICKS_APP_PORT?.trim();
|
|
38
|
-
|
|
39
|
-
if (!appName || !host || !port) {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
try {
|
|
44
|
-
const url = new URL(host);
|
|
45
|
-
if (!["http:", "https:"].includes(url.protocol)) {
|
|
46
|
-
logger.debug("app env rejected: host is not an http(s) URL");
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
} catch {
|
|
50
|
-
logger.debug("app env rejected: host is not a URL");
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const portNumber = object.toNumber(port);
|
|
55
|
-
if (
|
|
56
|
-
portNumber === undefined ||
|
|
57
|
-
!Number.isInteger(portNumber) ||
|
|
58
|
-
portNumber < 1 ||
|
|
59
|
-
portNumber > MAX_TCP_PORT
|
|
60
|
-
) {
|
|
61
|
-
logger.debug("app env rejected: DATABRICKS_APP_PORT is not a TCP port");
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return true;
|
|
33
|
+
return envUtil.isAppEnv(env);
|
|
66
34
|
}
|
|
67
35
|
|
|
68
36
|
/** Either an SDK `Context` or a WHATWG `AbortSignal`. */
|