@dbx-tools/appkit 0.6.120 → 0.6.123
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/index.ts +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/src/appkit.js +4 -1
- package/lib/src/brand.d.ts +3 -0
- package/lib/src/brand.js +11 -0
- package/lib/src/interceptor.js +5 -2
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/src/appkit.ts +3 -0
- package/src/brand.ts +13 -0
- package/src/interceptor.ts +4 -1
package/index.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit";
|
|
6
6
|
export * as appkit from "./src/appkit.ts";
|
|
7
|
+
export * as brand from "./src/brand.ts";
|
|
7
8
|
export * as bundle from "./src/bundle.ts";
|
|
8
9
|
export * as databricks from "./src/databricks.ts";
|
|
9
10
|
export * as identity from "./src/identity.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/appkit";
|
|
2
2
|
export * as appkit from "./src/appkit.ts";
|
|
3
|
+
export * as brand from "./src/brand.ts";
|
|
3
4
|
export * as bundle from "./src/bundle.ts";
|
|
4
5
|
export * as databricks from "./src/databricks.ts";
|
|
5
6
|
export * as identity from "./src/identity.ts";
|
package/lib/index.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit";
|
|
5
5
|
export * as appkit from "./src/appkit.js";
|
|
6
|
+
export * as brand from "./src/brand.js";
|
|
6
7
|
export * as bundle from "./src/bundle.js";
|
|
7
8
|
export * as databricks from "./src/databricks.js";
|
|
8
9
|
export * as identity from "./src/identity.js";
|
|
@@ -15,4 +16,4 @@ export { bundleAppResourceSchema, flattenAppYamlEnv, flattenAppEnv, getBundlePat
|
|
|
15
16
|
export { ACCESS_TOKEN_HEADER, USER_ID_HEADER, USER_EMAIL_HEADER, IDENTITY_MODES, DEFAULT_IDENTITY_MODE } from "./src/identity.js";
|
|
16
17
|
export { LifecycleBridgePlugin, lifecycleBridge } from "./src/interceptor.js";
|
|
17
18
|
export { SSL_MODES } from "./src/pgaddress.js";
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssVUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFdBQVcsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssZ0JBQWdCLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxLQUFLLFNBQVMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUczRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxJLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuZXhwb3J0ICogYXMgYXBwa2l0IGZyb20gXCIuL3NyYy9hcHBraXQudHNcIjtcbmV4cG9ydCAqIGFzIGJyYW5kIGZyb20gXCIuL3NyYy9icmFuZC50c1wiO1xuZXhwb3J0ICogYXMgYnVuZGxlIGZyb20gXCIuL3NyYy9idW5kbGUudHNcIjtcbmV4cG9ydCAqIGFzIGRhdGFicmlja3MgZnJvbSBcIi4vc3JjL2RhdGFicmlja3MudHNcIjtcbmV4cG9ydCAqIGFzIGlkZW50aXR5IGZyb20gXCIuL3NyYy9pZGVudGl0eS50c1wiO1xuZXhwb3J0ICogYXMgaW50ZXJjZXB0b3IgZnJvbSBcIi4vc3JjL2ludGVyY2VwdG9yLnRzXCI7XG5leHBvcnQgKiBhcyBsYWtlYmFzZVJlc29sdmVyIGZyb20gXCIuL3NyYy9sYWtlYmFzZS1yZXNvbHZlci50c1wiO1xuZXhwb3J0ICogYXMgcGdhZGRyZXNzIGZyb20gXCIuL3NyYy9wZ2FkZHJlc3MudHNcIjtcbmV4cG9ydCAqIGFzIHBsdWdpbiBmcm9tIFwiLi9zcmMvcGx1Z2luLnRzXCI7XG5leHBvcnQgKiBhcyBwcm92aXNpb24gZnJvbSBcIi4vc3JjL3Byb3Zpc2lvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdXRvQ29uZmlndXJlTW9kZSwgQ3JlYXRlQXBwQ29uZmlnLCBFeGVjdXRpb25Db250ZXh0TGlrZSwgV29ya3NwYWNlQ2xpZW50TGlrZSB9IGZyb20gXCIuL3NyYy9hcHBraXQudHNcIjtcbmV4cG9ydCB7IGJ1bmRsZUFwcFJlc291cmNlU2NoZW1hLCBmbGF0dGVuQXBwWWFtbEVudiwgZmxhdHRlbkFwcEVudiwgZ2V0QnVuZGxlUGF0aCB9IGZyb20gXCIuL3NyYy9idW5kbGUudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVuZGxlVmFsaWRhdGVKc29uLCBDb25maWdGaWxlLCBDb25maWdNYXBWYWx1ZSwgQ29uZmlnU291cmNlLCBSZXNvbHZlQ29uZmlnVmFsdWVPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2J1bmRsZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBDb250ZXh0TGlrZSB9IGZyb20gXCIuL3NyYy9kYXRhYnJpY2tzLnRzXCI7XG5leHBvcnQgeyBBQ0NFU1NfVE9LRU5fSEVBREVSLCBVU0VSX0lEX0hFQURFUiwgVVNFUl9FTUFJTF9IRUFERVIsIElERU5USVRZX01PREVTLCBERUZBVUxUX0lERU5USVRZX01PREUgfSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCB0eXBlIHsgSWRlbnRpdHlNb2RlLCBIZWFkZXJCZWFyaW5nIH0gZnJvbSBcIi4vc3JjL2lkZW50aXR5LnRzXCI7XG5leHBvcnQgeyBMaWZlY3ljbGVCcmlkZ2VQbHVnaW4sIGxpZmVjeWNsZUJyaWRnZSB9IGZyb20gXCIuL3NyYy9pbnRlcmNlcHRvci50c1wiO1xuZXhwb3J0IHR5cGUgeyBMaWZlY3ljbGVFdmVudCwgTGlmZWN5Y2xlSGFuZGxlciwgUmVzb2x2ZWRBcHBFbnYsIEJpbmRhYmxlUHJvY2VzcywgSW50ZXJjZXB0b3JDb250ZXh0LCBJbnRlcmNlcHRvciwgSW50ZXJjZXB0b3JSdW50aW1lIH0gZnJvbSBcIi4vc3JjL2ludGVyY2VwdG9yLnRzXCI7XG5leHBvcnQgdHlwZSB7IExha2ViYXNlUmVzb2x2ZXJJbnB1dHMsIExha2ViYXNlQ29ubmVjdGlvbiB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1yZXNvbHZlci50c1wiO1xuZXhwb3J0IHsgU1NMX01PREVTIH0gZnJvbSBcIi4vc3JjL3BnYWRkcmVzcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBTc2xNb2RlLCBMYWtlYmFzZUNvbm5lY3Rpb25JbnB1dHMsIFBhcnNlZEFkZHJlc3MgfSBmcm9tIFwiLi9zcmMvcGdhZGRyZXNzLnRzXCI7XG5leHBvcnQgdHlwZSB7IFBsdWdpbkNvbnRleHRMaWtlIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuIl19
|
package/lib/src/appkit.js
CHANGED
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
import { createApp as appkitCreateApp, getExecutionContext, InitializationError, } from "@databricks/appkit";
|
|
30
30
|
import { async, log } from "@dbx-tools/shared-core";
|
|
31
31
|
import { createSoftPersistentStorage } from "./_cache-storage.js";
|
|
32
|
+
import { loadBrandContext } from "./brand.js";
|
|
32
33
|
import { createInterceptorContext, lifecycleBridge, } from "./interceptor.js";
|
|
33
34
|
import { applyLakebaseEnv } from "./lakebase-resolver.js";
|
|
34
35
|
import { provisionCacheSchema } from "./provision.js";
|
|
@@ -201,6 +202,8 @@ export async function createApp(config) {
|
|
|
201
202
|
hasOnPluginsReady: typeof config?.onPluginsReady === "function",
|
|
202
203
|
});
|
|
203
204
|
logger.debug("createApp: autoConfigure");
|
|
205
|
+
const brandContext = await loadBrandContext();
|
|
206
|
+
logger.debug("createApp: brand context loaded", { name: brandContext.name });
|
|
204
207
|
const lakebase = await autoConfigure(config);
|
|
205
208
|
logger.debug("createApp: autoConfigure returned", {
|
|
206
209
|
lakebase: lakebase ? redactLakebaseConnection(lakebase) : undefined,
|
|
@@ -301,4 +304,4 @@ export async function ensureInitialized() {
|
|
|
301
304
|
await createApp({ plugins: [], autoConfigure: false });
|
|
302
305
|
logger.debug("ensureInitialized: done");
|
|
303
306
|
}
|
|
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/PyB7fSksXG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFRoZSBBcHBLaXQgcGVyLXJlcXVlc3QgZXhlY3V0aW9uIGNvbnRleHQgcmV0dXJuZWQgYnkgYGdldEV4ZWN1dGlvbkNvbnRleHQoKWBcbiAqIC0gdGhlIE9CTy1zY29wZWQgd29ya3NwYWNlIGNsaWVudCBwbHVzIHRoZSBzdXJyb3VuZGluZyByZXF1ZXN0IG1ldGFkYXRhLlxuICogRGVyaXZlZCBmcm9tIEFwcEtpdCdzIG93biByZXR1cm4gdHlwZSBzbyBpdCB0cmFja3MgdGhlIGluc3RhbGxlZCB2ZXJzaW9uLCBhbmRcbiAqIHJlLWV4cG9ydGVkIGhlcmUgc28gYWRkLW9uIHBhY2thZ2VzIGNhbiB0eXBlIGEgY29udGV4dCBwYXJhbWV0ZXIgd2l0aG91dCBlYWNoXG4gKiByZS1kZXJpdmluZyB0aGUgc2FtZSBgUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RXhlY3V0aW9uQ29udGV4dD5gIGlubGluZS5cbiAqL1xuZXhwb3J0IHR5cGUgRXhlY3V0aW9uQ29udGV4dExpa2UgPSBSZXR1cm5UeXBlPHR5cGVvZiBnZXRFeGVjdXRpb25Db250ZXh0PjtcblxuLyoqXG4gKiBUaGUgYXV0aC1zY29wZWQgRGF0YWJyaWNrcyB3b3Jrc3BhY2UgY2xpZW50IGNhcnJpZWQgb24gYW5cbiAqIGBFeGVjdXRpb25Db250ZXh0TGlrZWAgKGBnZXRFeGVjdXRpb25Db250ZXh0KCkuY2xpZW50YCkuIFR5cGVkIHN0cnVjdHVyYWxseVxuICogb2ZmIEFwcEtpdCBzbyBjb25zdW1lcnMgZG9uJ3QgdGFrZSBhIGRpcmVjdCBgQGRhdGFicmlja3Mvc2RrLWV4cGVyaW1lbnRhbGBcbiAqIGRlcGVuZGVuY3kgLSB0aGUgZGVwIGZsb3dzIGluIHRyYW5zaXRpdmVseSB0aHJvdWdoIGBAZGF0YWJyaWNrcy9hcHBraXRgLlxuICovXG5leHBvcnQgdHlwZSBXb3Jrc3BhY2VDbGllbnRMaWtlID0gRXhlY3V0aW9uQ29udGV4dExpa2VbXCJjbGllbnRcIl07XG5cbi8qKlxuICogVGhlIGN1cnJlbnQgQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0LCBvciBgdW5kZWZpbmVkYCB3aGVuIEFwcEtpdCBpc24ndFxuICogaW5pdGlhbGl6ZWQgKG91dHNpZGUgYSByZXF1ZXN0IHNjb3BlKS4gU3dhbGxvd3MgQXBwS2l0J3NcbiAqIHtAbGluayBJbml0aWFsaXphdGlvbkVycm9yfTsgYW55IG90aGVyIGVycm9yIHByb3BhZ2F0ZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgY3JlYXRlV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuICpcbiAqIC8vIE9CTy1zY29wZWQgaW5zaWRlIGEgcmVxdWVzdCwgc2VydmljZSBwcmluY2lwYWwgZnJvbSBhIENMSSBvciBzY3JpcHQuXG4gKiBjb25zdCBjbGllbnQgPSBhcHBraXQudHJ5R2V0RXhlY3V0aW9uQ29udGV4dCgpPy5jbGllbnQgPz8gY3JlYXRlV29ya3NwYWNlQ2xpZW50KCk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cnlHZXRFeGVjdXRpb25Db250ZXh0KCk6IEV4ZWN1dGlvbkNvbnRleHRMaWtlIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjdHggPSBnZXRFeGVjdXRpb25Db250ZXh0KCk7XG4gICAgaWYgKGN0eD8uY2xpZW50KSB7XG4gICAgICByZXR1cm4gY3R4O1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEluaXRpYWxpemF0aW9uRXJyb3IpKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIGEgYmFyZSBBcHBLaXQgYXBwIChubyBwbHVnaW5zKSB3aGVuIG5vbmUgaXMgcnVubmluZyB5ZXQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuICpcbiAqIGF3YWl0IGFwcGtpdC5lbnN1cmVJbml0aWFsaXplZCgpO1xuICogY29uc3QgY2xpZW50ID0gYXBwa2l0LnRyeUdldEV4ZWN1dGlvbkNvbnRleHQoKT8uY2xpZW50O1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlSW5pdGlhbGl6ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICh0cnlHZXRFeGVjdXRpb25Db250ZXh0KCkpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJlbnN1cmVJbml0aWFsaXplZDogYWxyZWFkeSBpbml0aWFsaXplZFwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKFwiZW5zdXJlSW5pdGlhbGl6ZWQ6IGJvb3RpbmcgYmFyZSBBcHBLaXQgYXBwXCIpO1xuICBhd2FpdCBjcmVhdGVBcHAoeyBwbHVnaW5zOiBbXSwgYXV0b0NvbmZpZ3VyZTogZmFsc2UgfSk7XG4gIGxvZ2dlci5kZWJ1ZyhcImVuc3VyZUluaXRpYWxpemVkOiBkb25lXCIpO1xufVxuIl19
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwa2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcGtpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUgsT0FBTyxFQUNMLFNBQVMsSUFBSSxlQUFlLEVBQzVCLG1CQUFtQixFQUNuQixtQkFBbUIsR0FDcEIsTUFBTSxvQkFBb0IsQ0FBQztBQUk1QixPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXBELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5QyxPQUFPLEVBQ0wsd0JBQXdCLEVBR3hCLGVBQWUsR0FFaEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsZ0JBQWdCLEVBQTJCLE1BQU0sd0JBQXdCLENBQUM7QUFDbkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQTRDcEMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDO0FBQ25DLE1BQU0sc0JBQXNCLEdBQXNCLFdBQVcsQ0FBQztBQUU5RDs7Ozs7O0dBTUc7QUFDSCxNQUFNLHlCQUF5QixHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFFOUMsU0FBUyxVQUFVLENBQ2pCLE1BQXNDLEVBQ3RDLElBQVk7SUFFWixPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRCxvREFBb0Q7QUFDcEQsU0FBUyxXQUFXLENBQUMsTUFBbUM7SUFDdEQs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O0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQzVDLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQjtJQUNyQyxJQUFJLHNCQUFzQixFQUFFLEVBQUUsQ0FBQztRQUM3QixNQUFNLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDdkQsT0FBTztJQUNULENBQUM7SUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDM0QsTUFBTSxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcHBLaXQgcnVudGltZSBnbHVlOiB0aGUgYXV0by1jb25maWd1cmluZyBgY3JlYXRlQXBwYCBkcm9wLWluLCBwbHVzIHRoZVxuICogcGVyLXJlcXVlc3QgZXhlY3V0aW9uIGNvbnRleHQgaGVscGVycyBhbmQgdHlwZXMgZGVyaXZlZCBmcm9tIGl0LlxuICpcbiAqIGBjcmVhdGVBcHBgIHJ1bnMgZGJ4LXRvb2xzIGF1dG8tY29uZmlndXJhdGlvbiwgdGhlbiBkZWxlZ2F0ZXMgdG8gQXBwS2l0J3Mgb3duXG4gKiBgY3JlYXRlQXBwYCB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cyBhbmQgdGhlIHNhbWUgdHlwZWQgcGx1Z2luLWV4cG9ydCBtYXAuXG4gKiBEcm9wIGl0IGluIGFzIGEgb25lLWZvci1vbmUgcmVwbGFjZW1lbnQ6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGxha2ViYXNlLCBzZXJ2ZXIgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqXG4gKiBhd2FpdCBhcHBraXQuY3JlYXRlQXBwKHsgcGx1Z2luczogW3NlcnZlcigpLCBsYWtlYmFzZSgpXSB9KTtcbiAqIGBgYFxuICpcbiAqIEF1dG8tY29uZmlndXJhdGlvbiBydW5zIEJFRk9SRSBkZWxlZ2F0aW5nIHNvIHBsdWdpbnMgc2VlIGEgZnVsbHkgcG9wdWxhdGVkXG4gKiBgcHJvY2Vzcy5lbnZgIGR1cmluZyB0aGVpciBzeW5jaHJvbm91cyBgc2V0dXAoKWAuIExha2ViYXNlIFBvc3RncmVzIHJ1bnMgd2hlblxuICogYSBgbGFrZWJhc2VgIHBsdWdpbiBpcyBwcmVzZW50LCBvciB3aGVuIHtAbGluayBBdXRvQ29uZmlndXJlTW9kZX0gaXMgc2V0XG4gKiBleHBsaWNpdGx5IG9uIHRoZSBjb25maWcgb2JqZWN0LlxuICpcbiAqIGBnZXRFeGVjdXRpb25Db250ZXh0KClgIGlzIEFwcEtpdCdzIG93biBhY2Nlc3NvciBmb3IgdGhlIE9CTy1zY29wZWQgd29ya3NwYWNlXG4gKiBjbGllbnQgKyByZXF1ZXN0IG1ldGFkYXRhOyB0aGUgd3JhcHBlcnMgaGVyZSBtYWtlIGl0IHNhZmUgdG8gY2FsbCBvdXRzaWRlIGFcbiAqIHJlcXVlc3Qgc2NvcGUgKHtAbGluayB0cnlHZXRFeGVjdXRpb25Db250ZXh0fSkgYW5kIHRvIGxhemlseSBib290IGEgYmFyZSBhcHBcbiAqICh7QGxpbmsgZW5zdXJlSW5pdGlhbGl6ZWR9KSwgYW5kIHJlLWV4cG9ydCB0aGUgZGVyaXZlZCB0eXBlcyBzbyBhZGQtb25cbiAqIHBhY2thZ2VzIGNhbiB0eXBlIGEgY29udGV4dCAvIGNsaWVudCB3aXRob3V0IHJlLWRlcml2aW5nIHRoZW0gaW5saW5lLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBjcmVhdGVBcHAgYXMgYXBwa2l0Q3JlYXRlQXBwLFxuICBnZXRFeGVjdXRpb25Db250ZXh0LFxuICBJbml0aWFsaXphdGlvbkVycm9yLFxufSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4vLyBBcHBLaXQncyByb290IGJhcnJlbCByZS1leHBvcnRzIGBQbHVnaW5EYXRhYCBidXQgbm90IGBQbHVnaW5NYXBgOyB0aGUgcGFja2FnZVxuLy8gcHVibGlzaGVzIHRoaXMgc3VicGF0aCBmb3IgZXhhY3RseSB0aGF0IHR5cGUuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk1hcCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXQvZGlzdC9zaGFyZWQvc3JjL3BsdWdpblwiO1xuaW1wb3J0IHsgYXN5bmMsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbmltcG9ydCB7IGNyZWF0ZVNvZnRQZXJzaXN0ZW50U3RvcmFnZSB9IGZyb20gXCIuL19jYWNoZS1zdG9yYWdlLnRzXCI7XG5pbXBvcnQgeyBsb2FkQnJhbmRDb250ZXh0IH0gZnJvbSBcIi4vYnJhbmQudHNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUludGVyY2VwdG9yQ29udGV4dCxcbiAgdHlwZSBJbnRlcmNlcHRvcixcbiAgdHlwZSBJbnRlcmNlcHRvclJ1bnRpbWUsXG4gIGxpZmVjeWNsZUJyaWRnZSxcbiAgdHlwZSBSZXNvbHZlZEFwcEVudixcbn0gZnJvbSBcIi4vaW50ZXJjZXB0b3IudHNcIjtcbmltcG9ydCB7IGFwcGx5TGFrZWJhc2VFbnYsIHR5cGUgTGFrZWJhc2VDb25uZWN0aW9uIH0gZnJvbSBcIi4vbGFrZWJhc2UtcmVzb2x2ZXIudHNcIjtcbmltcG9ydCB7IHByb3Zpc2lvbkNhY2hlU2NoZW1hIH0gZnJvbSBcIi4vcHJvdmlzaW9uLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJhcHBraXRcIik7XG5cbnR5cGUgQXBwS2l0Q3JlYXRlQXBwQ29uZmlnID0gTm9uTnVsbGFibGU8UGFyYW1ldGVyczx0eXBlb2YgYXBwa2l0Q3JlYXRlQXBwPlswXT47XG50eXBlIEFwcEtpdFBsdWdpbnMgPSBOb25OdWxsYWJsZTxBcHBLaXRDcmVhdGVBcHBDb25maWdbXCJwbHVnaW5zXCJdPjtcblxuLyoqXG4gKiBXaGF0IGF1dG8tY29uZmlndXJhdGlvbiBkb2VzIGJlZm9yZSBBcHBLaXQgYm9vdHMuXG4gKlxuICogLSBgXCJwcm92aXNpb25cImA6IHJlc29sdmUgdGhlIExha2ViYXNlIGNvbm5lY3Rpb24gaW50byBgcHJvY2Vzcy5lbnZgLCB0aGVuXG4gKiAgIGdyYW50IHRoZSBBcHBLaXQgY2FjaGUgc2NoZW1hIHRvIHRoZSBjb25uZWN0aW5nIHJvbGUuXG4gKiAtIGBcImVudlwiYDogcmVzb2x2ZSB0aGUgTGFrZWJhc2UgY29ubmVjdGlvbiBpbnRvIGBwcm9jZXNzLmVudmAgb25seS5cbiAqXG4gKiBPbWl0IGl0IHRvIGdldCBgXCJwcm92aXNpb25cImAgZ2F0ZWQgb24gYSBgbGFrZWJhc2VgIHBsdWdpbiBiZWluZyByZWdpc3RlcmVkO1xuICogc2V0IGl0IGV4cGxpY2l0bHkgdG8gcnVuIHJlZ2FyZGxlc3Mgb2YgdGhlIHBsdWdpbiBsaXN0LCBvciBwYXNzIGBmYWxzZWAgdG9cbiAqIHNraXAgYXV0by1jb25maWd1cmF0aW9uIGVudGlyZWx5LlxuICpcbiAqIFNldCBpdCBFWFBMSUNJVExZIG9uIGFuIGFwcCB0aGF0IGhhcyBubyBgbGFrZWJhc2UoKWAgcGx1Z2luIGJ1dCBzdGlsbCB3YW50c1xuICogQXBwS2l0J3MgUEVSU0lTVEVOVCBjYWNoZS4gQXBwS2l0IHBpY2tzIExha2ViYXNlIGZvciBgQ2FjaGVNYW5hZ2VyYCBvbmx5IHdoZW5cbiAqIGBjcmVhdGVMYWtlYmFzZVBvb2woKWAgY2FuIGJ1aWxkIGEgcG9vbCwgYW5kIHRoYXQgcmVhZHMgYExBS0VCQVNFX0VORFBPSU5UYCAvXG4gKiBgUEdIT1NUYCAvIGBQR0RBVEFCQVNFYCBzdHJhaWdodCBmcm9tIGBwcm9jZXNzLmVudmAgLSBzbyB3aXRob3V0IHRoaXMgc3RlcCB0aGVcbiAqIGNhY2hlIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gaW4tbWVtb3J5LCBhbmQgYW55dGhpbmcgaXQgaG9sZHMgKGEgc2Vzc2lvblxuICogc2lnbmluZyBrZXksIGEgb25lLXRpbWUgY29kZSkgaXMgbG9zdCBvbiByZXN0YXJ0LiBgXCJlbnZcImAgaXMgdGhlIHJpZ2h0IG1vZGVcbiAqIHRoZXJlOiB0aGUgYXBwIFNQIGNhbm5vdCBncmFudCBvbiB0aGUgY2FjaGUgc2NoZW1hIGFueXdheS5cbiAqL1xuZXhwb3J0IHR5cGUgQXV0b0NvbmZpZ3VyZU1vZGUgPSBcImVudlwiIHwgXCJwcm92aXNpb25cIjtcblxuLyoqIEFwcEtpdCdzIGBjcmVhdGVBcHBgIGNvbmZpZyBwbHVzIHRoZSBkYngtdG9vbHMgYXV0by1jb25maWd1cmF0aW9uIHN3aXRjaC4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUFwcENvbmZpZzxUIGV4dGVuZHMgQXBwS2l0UGx1Z2lucyA9IEFwcEtpdFBsdWdpbnM+ID0gT21pdDxcbiAgQXBwS2l0Q3JlYXRlQXBwQ29uZmlnLFxuICBcInBsdWdpbnNcIiB8IFwib25QbHVnaW5zUmVhZHlcIlxuPiAmIHtcbiAgcGx1Z2lucz86IFQ7XG4gIG9uUGx1Z2luc1JlYWR5PzogKGFwcGtpdDogUGx1Z2luTWFwPFQ+KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEF1dG8tY29uZmlndXJhdGlvbiB0byBydW4gYmVmb3JlIEFwcEtpdCBib290cy4gRGVmYXVsdHMgdG8gYFwicHJvdmlzaW9uXCJgLiAqL1xuICBhdXRvQ29uZmlndXJlPzogQXV0b0NvbmZpZ3VyZU1vZGUgfCBmYWxzZTtcbiAgLyoqXG4gICAqIE9uZSBvciBtYW55IHtAbGluayBJbnRlcmNlcHRvcn1zIGhhbmRlZCBhbiB7QGxpbmsgSW50ZXJjZXB0b3JDb250ZXh0fSBvbmNlXG4gICAqIGF1dG8tY29uZmlndXJhdGlvbiBoYXMgY29tcHV0ZWQgdGhlIGVudi4gRWFjaCByZWNlaXZlcyB0aGUgcmVzb2x2ZWQgZW52LCBhblxuICAgKiBBcHBLaXQtbGlmZWN5Y2xlIGhvb2ssIGFuZCBgYmluZFByb2Nlc3NgIGZvciBjb25jdXJyZW50bHktc3R5bGUgc3VwZXJ2aXNpb24gLVxuICAgKiBzZWUgYC4vaW50ZXJjZXB0b3JgLiBUaGUgdHVubmVsIGlzIHRoZSBwcmltYXJ5IGNvbnN1bWVyLlxuICAgKi9cbiAgaW50ZXJjZXB0b3I/OiBJbnRlcmNlcHRvciB8IEludGVyY2VwdG9yW107XG59O1xuXG5jb25zdCBMQUtFQkFTRV9QTFVHSU4gPSBcImxha2ViYXNlXCI7XG5jb25zdCBERUZBVUxUX0FVVE9fQ09ORklHVVJFOiBBdXRvQ29uZmlndXJlTW9kZSA9IFwicHJvdmlzaW9uXCI7XG5cbi8qKlxuICogVXBwZXIgYm91bmQgb24gYm9vdC10aW1lIGF1dG8tY29uZmlndXJhdGlvbi4gSXQgcnVucyBhcyB0aGUgc2VydmljZSBwcmluY2lwYWxcbiAqIGJlZm9yZSBhbnkgcGx1Z2luIGlzIGNvbnN0cnVjdGVkLCBzbyBpdCBzaXRzIG91dHNpZGUgQXBwS2l0J3MgaW50ZXJjZXB0b3JcbiAqIGNoYWluIGFuZCBpbmhlcml0cyBubyB0aW1lb3V0LCByZXRyeSwgb3IgdGVsZW1ldHJ5IGZyb20gaXQuIFRoZSBidWRnZXQgY292ZXJzXG4gKiB0aGUgcmVzb2x2ZXIncyBvd24gd29yc3QgY2FzZSAoY3JlYXRlIGEgcHJvamVjdCwgdGhlbiB3YWl0IGZvciBpdHMgZW5kcG9pbnQpXG4gKiBwbHVzIHRoZSBjYWNoZS1zY2hlbWEgZ3JhbnRzLlxuICovXG5jb25zdCBBVVRPX0NPTkZJR1VSRV9USU1FT1VUX01TID0gMTEgKiA2MF8wMDA7XG5cbmZ1bmN0aW9uIHVzZXNQbHVnaW48VCBleHRlbmRzIEFwcEtpdFBsdWdpbnM+KFxuICBjb25maWc6IENyZWF0ZUFwcENvbmZpZzxUPiB8IHVuZGVmaW5lZCxcbiAgbmFtZTogc3RyaW5nLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKGNvbmZpZz8ucGx1Z2lucz8uc29tZSgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpKTtcbn1cblxuLyoqIFBsdWdpbiBuYW1lcyBmb3IgYm9vdCBsb2dzIChvcmRlciBwcmVzZXJ2ZWQpLiAqL1xuZnVuY3Rpb24gcGx1Z2luTmFtZXMoY29uZmlnOiBDcmVhdGVBcHBDb25maWcgfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gIHJldHVybiAoY29uZmlnPy5wbHVnaW5zID8/IFtdKS5tYXAoKGVudHJ5KSA9PiBlbnRyeS5uYW1lKTtcbn1cblxuLyoqXG4gKiBSdW4gZW5hYmxlZCBhdXRvLWNvbmZpZ3VyYXRpb24gc3RlcHMgd2l0aG91dCBjYWxsaW5nIEFwcEtpdCdzIGBjcmVhdGVBcHBgLlxuICpcbiAqIExha2ViYXNlIFBvc3RncmVzIHJlc29sdmVzIHdoZW4ge0BsaW5rIENyZWF0ZUFwcENvbmZpZy5hdXRvQ29uZmlndXJlfSBpcyBzZXRcbiAqIGV4cGxpY2l0bHkgb3IgYSBgbGFrZWJhc2VgIHBsdWdpbiBpcyBsaXN0ZWQgaW4gYGNvbmZpZy5wbHVnaW5zYC4gYHNpZ25hbGBcbiAqIGNhbmNlbHMgdGhlIHJlc29sdXRpb247IGl0IGlzIGNvbWJpbmVkIHdpdGggYW4gaW50ZXJuYWwgYm9vdCB0aW1lb3V0IGVpdGhlclxuICogd2F5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqXG4gKiAvLyBQb3B1bGF0ZSBQR0hPU1QgLyBQR0RBVEFCQVNFIC8gTEFLRUJBU0VfRU5EUE9JTlQgd2l0aG91dCBib290aW5nIEFwcEtpdC5cbiAqIGF3YWl0IGFwcGtpdC5hdXRvQ29uZmlndXJlKHsgYXV0b0NvbmZpZ3VyZTogXCJlbnZcIiB9KTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF1dG9Db25maWd1cmU8VCBleHRlbmRzIEFwcEtpdFBsdWdpbnM+KFxuICBjb25maWc/OiBDcmVhdGVBcHBDb25maWc8VD4sXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxMYWtlYmFzZUNvbm5lY3Rpb24gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgbW9kZSA9IGNvbmZpZz8uYXV0b0NvbmZpZ3VyZSA/PyBERUZBVUxUX0FVVE9fQ09ORklHVVJFO1xuICBjb25zdCBleHBsaWNpdCA9IGNvbmZpZz8uYXV0b0NvbmZpZ3VyZSAhPT0gdW5kZWZpbmVkO1xuICBjb25zdCBsYWtlYmFzZVBsdWdpblByZXNlbnQgPSB1c2VzUGx1Z2luKGNvbmZpZywgTEFLRUJBU0VfUExVR0lOKTtcbiAgY29uc3QgcGx1Z2lucyA9IHBsdWdpbk5hbWVzKGNvbmZpZyk7XG4gIGxvZ2dlci5kZWJ1ZyhcImF1dG9Db25maWd1cmU6IHN0YXJ0XCIsIHtcbiAgICBtb2RlLFxuICAgIGV4cGxpY2l0LFxuICAgIGxha2ViYXNlUGx1Z2luUHJlc2VudCxcbiAgICBwbHVnaW5zLFxuICAgIHRpbWVvdXRNczogQVVUT19DT05GSUdVUkVfVElNRU9VVF9NUyxcbiAgICBjYWxsZXJTaWduYWw6IEJvb2xlYW4oc2lnbmFsKSxcbiAgfSk7XG5cbiAgaWYgKG1vZGUgPT09IGZhbHNlIHx8ICEoZXhwbGljaXQgfHwgbGFrZWJhc2VQbHVnaW5QcmVzZW50KSkge1xuICAgIGNvbnN0IHNraXBwZWRSZWFzb24gPSBtb2RlID09PSBmYWxzZSA/IFwiZGlzYWJsZWRcIiA6IFwibm8gbGFrZWJhc2UgcGx1Z2luXCI7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYXV0b0NvbmZpZ3VyZTogc2tpcFwiLCB7IHNraXBwZWRSZWFzb24sIG1vZGUsIGxha2ViYXNlUGx1Z2luUHJlc2VudCwgcGx1Z2lucyB9KTtcbiAgICBsb2dnZXIuaW5mbyhcInJlYWR5XCIsIHtcbiAgICAgIGF1dG9Db25maWd1cmU6IG1vZGUsXG4gICAgICBsYWtlYmFzZVBsdWdpblByZXNlbnQsXG4gICAgICBwcm92aXNpb25lZDogZmFsc2UsXG4gICAgICBza2lwcGVkUmVhc29uLFxuICAgIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBhc3luYy50aWVBYm9ydFNpZ25hbChjb250cm9sbGVyLCBzaWduYWwpO1xuICBhc3luYy50aWVBYm9ydFNpZ25hbChjb250cm9sbGVyLCBBYm9ydFNpZ25hbC50aW1lb3V0KEFVVE9fQ09ORklHVVJFX1RJTUVPVVRfTVMpKTtcblxuICBjb25zdCBwcm92aXNpb24gPSBtb2RlID09PSBcInByb3Zpc2lvblwiO1xuICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlOiByZXNvbHZlIGxha2ViYXNlXCIsIHsgcHJvdmlzaW9uLCBtb2RlIH0pO1xuICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IGF1dG9Db25maWd1cmVMYWtlYmFzZShwcm92aXNpb24sIGNvbnRyb2xsZXIuc2lnbmFsKTtcbiAgbG9nZ2VyLmRlYnVnKFwiYXV0b0NvbmZpZ3VyZTogZG9uZVwiLCB7XG4gICAgbW9kZSxcbiAgICBsYWtlYmFzZVBsdWdpblByZXNlbnQsXG4gICAgcHJvdmlzaW9uZWQ6IHByb3Zpc2lvbixcbiAgICAuLi5yZWRhY3RMYWtlYmFzZUNvbm5lY3Rpb24ocmVzb2x2ZWQpLFxuICB9KTtcbiAgbG9nZ2VyLmluZm8oXCJyZWFkeVwiLCB7IGF1dG9Db25maWd1cmU6IG1vZGUsIGxha2ViYXNlUGx1Z2luUHJlc2VudCwgcHJvdmlzaW9uZWQ6IHByb3Zpc2lvbiB9KTtcbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmUgTGFrZWJhc2UgUG9zdGdyZXMgY29ubmVjdGlvbiBpbmZvLCB3cml0ZSB0aGUgcmVzb2x2ZWQgdmFsdWVzIHRvXG4gKiBgcHJvY2Vzcy5lbnZgLCBhbmQgcmV0dXJuIHRoZSByZWNvcmQuIFVzZWQgYnkge0BsaW5rIGF1dG9Db25maWd1cmV9OyBjYWxsXG4gKiB7QGxpbmsgYXBwbHlMYWtlYmFzZUVudn0gZGlyZWN0bHkgd2hlbiBmaW5lciBjb250cm9sIGlzIG5lZWRlZCAoYSBkaWZmZXJlbnRcbiAqIGBhdXRvQ3JlYXRlYCBwb2xpY3ksIG9yIGEgY2FsbGVyIHRoYXQgd2FudHMgdGhlIGVudiB3aXRob3V0IGJvb3RpbmcgQXBwS2l0KS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXV0b0NvbmZpZ3VyZUxha2ViYXNlKFxuICBwcm92aXNpb246IGJvb2xlYW4sXG4gIHNpZ25hbDogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPExha2ViYXNlQ29ubmVjdGlvbj4ge1xuICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlTGFrZWJhc2U6IGFwcGx5TGFrZWJhc2VFbnZcIik7XG4gIGNvbnN0IHsgcmVzb2x2ZWQsIHVzZXIgfSA9IGF3YWl0IGFwcGx5TGFrZWJhc2VFbnYodW5kZWZpbmVkLCBzaWduYWwpO1xuICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlTGFrZWJhc2U6IGVudiBhcHBsaWVkXCIsIHtcbiAgICAuLi5yZWRhY3RMYWtlYmFzZUNvbm5lY3Rpb24ocmVzb2x2ZWQpLFxuICAgIHVzZXIsXG4gICAgZW52OiB7XG4gICAgICBMQUtFQkFTRV9FTkRQT0lOVDogcHJvY2Vzcy5lbnYuTEFLRUJBU0VfRU5EUE9JTlQsXG4gICAgICBQR0hPU1Q6IHByb2Nlc3MuZW52LlBHSE9TVCxcbiAgICAgIFBHUE9SVDogcHJvY2Vzcy5lbnYuUEdQT1JULFxuICAgICAgUEdEQVRBQkFTRTogcHJvY2Vzcy5lbnYuUEdEQVRBQkFTRSxcbiAgICAgIFBHVVNFUjogcHJvY2Vzcy5lbnYuUEdVU0VSLFxuICAgICAgUEdTU0xNT0RFOiBwcm9jZXNzLmVudi5QR1NTTE1PREUsXG4gICAgfSxcbiAgfSk7XG4gIGxvZ2dlci5pbmZvKFwiZW52IHVwZGF0ZWRcIiwgeyAuLi5yZWRhY3RMYWtlYmFzZUNvbm5lY3Rpb24ocmVzb2x2ZWQpLCB1c2VyIH0pO1xuICBpZiAocHJvdmlzaW9uKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYXV0b0NvbmZpZ3VyZUxha2ViYXNlOiBwcm92aXNpb25DYWNoZVNjaGVtYVwiLCB7IHVzZXIgfSk7XG4gICAgYXdhaXQgcHJvdmlzaW9uQ2FjaGVTY2hlbWEodXNlciwgbG9nZ2VyKTtcbiAgICBsb2dnZXIuZGVidWcoXCJhdXRvQ29uZmlndXJlTGFrZWJhc2U6IHByb3Zpc2lvbkNhY2hlU2NoZW1hIGRvbmVcIik7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYXV0b0NvbmZpZ3VyZUxha2ViYXNlOiBza2lwIHByb3Zpc2lvbiAobW9kZT1lbnYpXCIpO1xuICB9XG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGBjcmVhdGVBcHBgIHNob3VsZCBpbmplY3Qgc29mdC1mYWlsIExha2ViYXNlIGNhY2hlIHN0b3JhZ2UuXG4gKlxuICogU2tpcHMgd2hlbiB0aGUgY2FsbGVyIGRpc2FibGVkIHRoZSBjYWNoZSwgYWxyZWFkeSBzdXBwbGllZCBhIHN0b3JhZ2VcbiAqIGJhY2tlbmQgKGluY2x1ZGluZyBpbi1tZW1vcnkpLCBvciBMYWtlYmFzZSBpcyBub3QgaW4gcGxheS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkSW5qZWN0U29mdFBlcnNpc3RlbnRDYWNoZShcbiAgY29uZmlnOiBDcmVhdGVBcHBDb25maWcgfCB1bmRlZmluZWQsXG4gIGxha2ViYXNlOiBMYWtlYmFzZUNvbm5lY3Rpb24gfCB1bmRlZmluZWQsXG4pOiBib29sZWFuIHtcbiAgY29uc3QgY2FjaGUgPSBjb25maWc/LmNhY2hlO1xuICBpZiAoY2FjaGU/LmVuYWJsZWQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gIGlmIChjYWNoZT8uc3RvcmFnZSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQm9vbGVhbihsYWtlYmFzZSkgfHwgdXNlc1BsdWdpbihjb25maWcsIExBS0VCQVNFX1BMVUdJTik7XG59XG5cbmZ1bmN0aW9uIHJlZGFjdExha2ViYXNlQ29ubmVjdGlvbihyZXNvbHZlZDogTGFrZWJhc2VDb25uZWN0aW9uKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4ge1xuICAgIHByb2plY3Q6IHJlc29sdmVkLnByb2plY3QsXG4gICAgYnJhbmNoOiByZXNvbHZlZC5icmFuY2gsXG4gICAgZW5kcG9pbnQ6IHJlc29sdmVkLmVuZHBvaW50LFxuICAgIGRhdGFiYXNlOiByZXNvbHZlZC5kYXRhYmFzZSxcbiAgICBob3N0OiByZXNvbHZlZC5ob3N0LFxuICAgIHBvcnQ6IHJlc29sdmVkLnBvcnQsXG4gICAgc3NsTW9kZTogcmVzb2x2ZWQuc3NsTW9kZSxcbiAgfTtcbn1cblxuLyoqIEJ1aWxkIHRoZSB7QGxpbmsgUmVzb2x2ZWRBcHBFbnZ9IGludGVyY2VwdG9ycyByZWFkLCBmcm9tIHRoZSBhdXRvLWNvbmZpZyByZXN1bHQuICovXG5mdW5jdGlvbiByZXNvbHZlZEFwcEVudihsYWtlYmFzZTogTGFrZWJhc2VDb25uZWN0aW9uIHwgdW5kZWZpbmVkKTogUmVzb2x2ZWRBcHBFbnYge1xuICByZXR1cm4ge1xuICAgIC4uLihsYWtlYmFzZSA/IHsgbGFrZWJhc2UgfSA6IHt9KSxcbiAgICAuLi4ocHJvY2Vzcy5lbnYuREFUQUJSSUNLU19IT1NUID8geyBkYXRhYnJpY2tzSG9zdDogcHJvY2Vzcy5lbnYuREFUQUJSSUNLU19IT1NUIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBOb3JtYWxpemUgdGhlIGBpbnRlcmNlcHRvcj86IEludGVyY2VwdG9yIHwgSW50ZXJjZXB0b3JbXWAgb3B0aW9uIHRvIGFuIGFycmF5LiAqL1xuZnVuY3Rpb24gaW50ZXJjZXB0b3JMaXN0KGludGVyY2VwdG9yOiBDcmVhdGVBcHBDb25maWdbXCJpbnRlcmNlcHRvclwiXSk6IEludGVyY2VwdG9yW10ge1xuICBpZiAoIWludGVyY2VwdG9yKSByZXR1cm4gW107XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGludGVyY2VwdG9yKSA/IGludGVyY2VwdG9yIDogW2ludGVyY2VwdG9yXTtcbn1cblxuLyoqXG4gKiBBdXRvLWNvbmZpZ3VyaW5nIGRyb3AtaW4gZm9yIEFwcEtpdCdzIGBjcmVhdGVBcHBgOiBzYW1lIGNvbmZpZywgc2FtZSB0eXBlZFxuICogcGx1Z2luLWV4cG9ydCBtYXAsIHdpdGgge0BsaW5rIGF1dG9Db25maWd1cmV9IHJ1biBmaXJzdC5cbiAqXG4gKiBXaGVuIHtAbGluayBDcmVhdGVBcHBDb25maWcuaW50ZXJjZXB0b3J9cyBhcmUgZ2l2ZW4sIGVhY2ggaXMgaW52b2tlZCB3aXRoIGFuXG4gKiB7QGxpbmsgSW50ZXJjZXB0b3JDb250ZXh0fSBBRlRFUiBhdXRvLWNvbmZpZ3VyYXRpb24gY29tcHV0ZXMgdGhlIGVudiBhbmQgQkVGT1JFXG4gKiBBcHBLaXQgYm9vdHMgLSBzbyBhbiBpbnRlcmNlcHRvciBjYW4gcmVhZCB0aGUgcmVzb2x2ZWQgY29ubmVjdGlvbiwgcmVnaXN0ZXJcbiAqIGxpZmVjeWNsZSBoYW5kbGVycywgYW5kIGBiaW5kUHJvY2Vzc2AgYSBjaGlsZC4gQSBoaWRkZW4ge0BsaW5rIGxpZmVjeWNsZUJyaWRnZX1cbiAqIHBsdWdpbiBpcyBpbmplY3RlZCBzbyB0aG9zZSBgb25MaWZlY3ljbGVgIGhhbmRsZXJzIGZpcmUgb24gdGhlIGdlbnVpbmUgQXBwS2l0XG4gKiBldmVudHM7IGl0IGhhcyBubyBleHBvcnRzLCBzbyB0aGUgcmV0dXJuZWQge0BsaW5rIFBsdWdpbk1hcH0gaXMgdW5jaGFuZ2VkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBsYWtlYmFzZSwgc2VydmVyIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgYXBwa2l0IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG4gKlxuICogY29uc3QgYXBwID0gYXdhaXQgYXBwa2l0LmNyZWF0ZUFwcCh7IHBsdWdpbnM6IFtzZXJ2ZXIoKSwgbGFrZWJhc2UoKV0gfSk7XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVBcHA8VCBleHRlbmRzIEFwcEtpdFBsdWdpbnM+KFxuICBjb25maWc/OiBDcmVhdGVBcHBDb25maWc8VD4sXG4pOiBQcm9taXNlPFBsdWdpbk1hcDxUPj4ge1xuICBjb25zdCBwbHVnaW5zID0gcGx1Z2luTmFtZXMoY29uZmlnKTtcbiAgY29uc3QgaW50ZXJjZXB0b3JzID0gaW50ZXJjZXB0b3JMaXN0KGNvbmZpZz8uaW50ZXJjZXB0b3IpO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IHN0YXJ0XCIsIHtcbiAgICBwbHVnaW5zLFxuICAgIHBsdWdpbkNvdW50OiBwbHVnaW5zLmxlbmd0aCxcbiAgICBpbnRlcmNlcHRvckNvdW50OiBpbnRlcmNlcHRvcnMubGVuZ3RoLFxuICAgIGF1dG9Db25maWd1cmU6IGNvbmZpZz8uYXV0b0NvbmZpZ3VyZSA/PyBcIihkZWZhdWx0KVwiLFxuICAgIGhhc09uUGx1Z2luc1JlYWR5OiB0eXBlb2YgY29uZmlnPy5vblBsdWdpbnNSZWFkeSA9PT0gXCJmdW5jdGlvblwiLFxuICB9KTtcblxuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IGF1dG9Db25maWd1cmVcIik7XG4gIGNvbnN0IGJyYW5kQ29udGV4dCA9IGF3YWl0IGxvYWRCcmFuZENvbnRleHQoKTtcbiAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBicmFuZCBjb250ZXh0IGxvYWRlZFwiLCB7IG5hbWU6IGJyYW5kQ29udGV4dC5uYW1lIH0pO1xuICBjb25zdCBsYWtlYmFzZSA9IGF3YWl0IGF1dG9Db25maWd1cmUoY29uZmlnKTtcbiAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBhdXRvQ29uZmlndXJlIHJldHVybmVkXCIsIHtcbiAgICBsYWtlYmFzZTogbGFrZWJhc2UgPyByZWRhY3RMYWtlYmFzZUNvbm5lY3Rpb24obGFrZWJhc2UpIDogdW5kZWZpbmVkLFxuICB9KTtcblxuICBjb25zdCBhcHBDb25maWcgPSB7IC4uLmNvbmZpZyB9O1xuICBkZWxldGUgYXBwQ29uZmlnLmF1dG9Db25maWd1cmU7XG4gIGRlbGV0ZSBhcHBDb25maWcuaW50ZXJjZXB0b3I7XG5cbiAgaWYgKHNob3VsZEluamVjdFNvZnRQZXJzaXN0ZW50Q2FjaGUoY29uZmlnLCBsYWtlYmFzZSkpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IGluamVjdCBzb2Z0IHBlcnNpc3RlbnQgY2FjaGUgc3RvcmFnZVwiKTtcbiAgICBjb25zdCBzdG9yYWdlID0gYXdhaXQgY3JlYXRlU29mdFBlcnNpc3RlbnRTdG9yYWdlKGNvbmZpZz8uY2FjaGUpO1xuICAgIGlmIChzdG9yYWdlKSB7XG4gICAgICBhcHBDb25maWcuY2FjaGUgPSB7IC4uLmNvbmZpZz8uY2FjaGUsIHN0b3JhZ2UgfTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogc29mdCBwZXJzaXN0ZW50IGNhY2hlIHN0b3JhZ2UgcmVhZHlcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogc29mdCBwZXJzaXN0ZW50IGNhY2hlIHN0b3JhZ2UgdW5hdmFpbGFibGVcIik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGludGVyY2VwdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IG5vIGludGVyY2VwdG9yczsgZGVsZWdhdGluZyB0byBBcHBLaXQgY3JlYXRlQXBwXCIsIHtcbiAgICAgIHBsdWdpbnM6IHBsdWdpbk5hbWVzKGFwcENvbmZpZyksXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBwa2l0Q3JlYXRlQXBwPFQ+KGFwcENvbmZpZyk7XG4gICAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBBcHBLaXQgY3JlYXRlQXBwIHJldHVybmVkXCIsIHtcbiAgICAgIGV4cG9ydEtleXM6IE9iamVjdC5rZXlzKHJlc3VsdCA/PyB7fSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIEJ1aWxkIHRoZSBjb250ZXh0IGZyb20gdGhlIGNvbXB1dGVkIGVudiwgcnVuIGVhY2ggaW50ZXJjZXB0b3IgKHRoZXkgcmVnaXN0ZXJcbiAgLy8gbGlmZWN5Y2xlIGhhbmRsZXJzICsgYmluZCBwcm9jZXNzZXMpLCB0aGVuIGluamVjdCB0aGUgYnJpZGdlIHRoYXQgcmVsYXlzIHRoZVxuICAvLyBSRUFMIEFwcEtpdCBsaWZlY3ljbGUgaW50byBgcnVudGltZS5lbWl0TGlmZWN5Y2xlYCBkdXJpbmcgaXRzIGBzZXR1cCgpYC5cbiAgY29uc3QgZW52ID0gcmVzb2x2ZWRBcHBFbnYobGFrZWJhc2UpO1xuICBsb2dnZXIuZGVidWcoXCJjcmVhdGVBcHA6IGludGVyY2VwdG9yIGNvbnRleHRcIiwge1xuICAgIGhhc0xha2ViYXNlOiBCb29sZWFuKGVudi5sYWtlYmFzZSksXG4gICAgZGF0YWJyaWNrc0hvc3Q6IGVudi5kYXRhYnJpY2tzSG9zdCxcbiAgICBpbnRlcmNlcHRvckNvdW50OiBpbnRlcmNlcHRvcnMubGVuZ3RoLFxuICB9KTtcbiAgY29uc3QgcnVudGltZTogSW50ZXJjZXB0b3JSdW50aW1lID0gY3JlYXRlSW50ZXJjZXB0b3JDb250ZXh0KGVudik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW50ZXJjZXB0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBydW4gaW50ZXJjZXB0b3JcIiwgeyBpbmRleDogaSwgb2Y6IGludGVyY2VwdG9ycy5sZW5ndGggfSk7XG4gICAgYXdhaXQgaW50ZXJjZXB0b3JzW2ldIShydW50aW1lLmNvbnRleHQpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZUFwcDogaW50ZXJjZXB0b3IgZG9uZVwiLCB7IGluZGV4OiBpIH0pO1xuICB9XG4gIC8vIEFwcGVuZCB0aGUgYnJpZGdlIHRvIHRoZSBwbHVnaW5zIHR1cGxlLiBJdCBpcyBoaWRkZW4gYW5kIGV4cG9ydHMgbm90aGluZywgc29cbiAgLy8gdGhlIHJldHVybmVkIG1hcCBzdGlsbCBtYXRjaGVzIGBQbHVnaW5NYXA8VD5gOyB0aGUgY2FzdCAodGhyb3VnaCBgdW5rbm93bmApIGlzXG4gIC8vIG9ubHkgYmVjYXVzZSBhcHBlbmRpbmcgd2lkZW5zIHRoZSB0dXBsZSB0eXBlIGJleW9uZCBgVGAuXG4gIGFwcENvbmZpZy5wbHVnaW5zID0gWy4uLihhcHBDb25maWcucGx1Z2lucyA/PyBbXSksIGxpZmVjeWNsZUJyaWRnZSh7IHJ1bnRpbWUgfSldIGFzIHVua25vd24gYXMgVDtcbiAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBsaWZlY3ljbGUgYnJpZGdlIGluamVjdGVkOyBkZWxlZ2F0aW5nIHRvIEFwcEtpdCBjcmVhdGVBcHBcIiwge1xuICAgIHBsdWdpbnM6IHBsdWdpbk5hbWVzKGFwcENvbmZpZyksXG4gIH0pO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcHBraXRDcmVhdGVBcHA8VD4oYXBwQ29uZmlnKTtcbiAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlQXBwOiBBcHBLaXQgY3JlYXRlQXBwIHJldHVybmVkXCIsIHtcbiAgICBleHBvcnRLZXlzOiBPYmplY3Qua2V5cyhyZXN1bHQgPz8ge30pLFxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGUgQXBwS2l0IHBlci1yZXF1ZXN0IGV4ZWN1dGlvbiBjb250ZXh0IHJldHVybmVkIGJ5IGBnZXRFeGVjdXRpb25Db250ZXh0KClgXG4gKiAtIHRoZSBPQk8tc2NvcGVkIHdvcmtzcGFjZSBjbGllbnQgcGx1cyB0aGUgc3Vycm91bmRpbmcgcmVxdWVzdCBtZXRhZGF0YS5cbiAqIERlcml2ZWQgZnJvbSBBcHBLaXQncyBvd24gcmV0dXJuIHR5cGUgc28gaXQgdHJhY2tzIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiwgYW5kXG4gKiByZS1leHBvcnRlZCBoZXJlIHNvIGFkZC1vbiBwYWNrYWdlcyBjYW4gdHlwZSBhIGNvbnRleHQgcGFyYW1ldGVyIHdpdGhvdXQgZWFjaFxuICogcmUtZGVyaXZpbmcgdGhlIHNhbWUgYFJldHVyblR5cGU8dHlwZW9mIGdldEV4ZWN1dGlvbkNvbnRleHQ+YCBpbmxpbmUuXG4gKi9cbmV4cG9ydCB0eXBlIEV4ZWN1dGlvbkNvbnRleHRMaWtlID0gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RXhlY3V0aW9uQ29udGV4dD47XG5cbi8qKlxuICogVGhlIGF1dGgtc2NvcGVkIERhdGFicmlja3Mgd29ya3NwYWNlIGNsaWVudCBjYXJyaWVkIG9uIGFuXG4gKiBgRXhlY3V0aW9uQ29udGV4dExpa2VgIChgZ2V0RXhlY3V0aW9uQ29udGV4dCgpLmNsaWVudGApLiBUeXBlZCBzdHJ1Y3R1cmFsbHlcbiAqIG9mZiBBcHBLaXQgc28gY29uc3VtZXJzIGRvbid0IHRha2UgYSBkaXJlY3QgYEBkYXRhYnJpY2tzL3Nkay1leHBlcmltZW50YWxgXG4gKiBkZXBlbmRlbmN5IC0gdGhlIGRlcCBmbG93cyBpbiB0cmFuc2l0aXZlbHkgdGhyb3VnaCBgQGRhdGFicmlja3MvYXBwa2l0YC5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya3NwYWNlQ2xpZW50TGlrZSA9IEV4ZWN1dGlvbkNvbnRleHRMaWtlW1wiY2xpZW50XCJdO1xuXG4vKipcbiAqIFRoZSBjdXJyZW50IEFwcEtpdCBleGVjdXRpb24gY29udGV4dCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBBcHBLaXQgaXNuJ3RcbiAqIGluaXRpYWxpemVkIChvdXRzaWRlIGEgcmVxdWVzdCBzY29wZSkuIFN3YWxsb3dzIEFwcEtpdCdzXG4gKiB7QGxpbmsgSW5pdGlhbGl6YXRpb25FcnJvcn07IGFueSBvdGhlciBlcnJvciBwcm9wYWdhdGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IGNyZWF0ZVdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqXG4gKiAvLyBPQk8tc2NvcGVkIGluc2lkZSBhIHJlcXVlc3QsIHNlcnZpY2UgcHJpbmNpcGFsIGZyb20gYSBDTEkgb3Igc2NyaXB0LlxuICogY29uc3QgY2xpZW50ID0gYXBwa2l0LnRyeUdldEV4ZWN1dGlvbkNvbnRleHQoKT8uY2xpZW50ID8/IGNyZWF0ZVdvcmtzcGFjZUNsaWVudCgpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ5R2V0RXhlY3V0aW9uQ29udGV4dCgpOiBFeGVjdXRpb25Db250ZXh0TGlrZSB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgY3R4ID0gZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICAgIGlmIChjdHg/LmNsaWVudCkge1xuICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBJbml0aWFsaXphdGlvbkVycm9yKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIGJhcmUgQXBwS2l0IGFwcCAobm8gcGx1Z2lucykgd2hlbiBub25lIGlzIHJ1bm5pbmcgeWV0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqXG4gKiBhd2FpdCBhcHBraXQuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAqIGNvbnN0IGNsaWVudCA9IGFwcGtpdC50cnlHZXRFeGVjdXRpb25Db250ZXh0KCk/LmNsaWVudDtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUluaXRpYWxpemVkKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAodHJ5R2V0RXhlY3V0aW9uQ29udGV4dCgpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiZW5zdXJlSW5pdGlhbGl6ZWQ6IGFscmVhZHkgaW5pdGlhbGl6ZWRcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhcImVuc3VyZUluaXRpYWxpemVkOiBib290aW5nIGJhcmUgQXBwS2l0IGFwcFwiKTtcbiAgYXdhaXQgY3JlYXRlQXBwKHsgcGx1Z2luczogW10sIGF1dG9Db25maWd1cmU6IGZhbHNlIH0pO1xuICBsb2dnZXIuZGVidWcoXCJlbnN1cmVJbml0aWFsaXplZDogZG9uZVwiKTtcbn1cbiJdfQ==
|
package/lib/src/brand.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { brand as coreBrand } from "@dbx-tools/core";
|
|
2
|
+
import { brand as sharedBrand } from "@dbx-tools/shared-core";
|
|
3
|
+
let activeBrandContext = sharedBrand.defaultBrandContext;
|
|
4
|
+
export async function loadBrandContext(cwd = process.cwd()) {
|
|
5
|
+
activeBrandContext = await coreBrand.loadBrandContext(cwd);
|
|
6
|
+
return activeBrandContext;
|
|
7
|
+
}
|
|
8
|
+
export function getBrandContext() {
|
|
9
|
+
return activeBrandContext;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnJhbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssSUFBSSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxJQUFJLFdBQVcsRUFBcUIsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRixJQUFJLGtCQUFrQixHQUFpQixXQUFXLENBQUMsbUJBQW1CLENBQUM7QUFFdkUsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxNQUFjLE9BQU8sQ0FBQyxHQUFHLEVBQUU7SUFDaEUsa0JBQWtCLEdBQUcsTUFBTSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0QsT0FBTyxrQkFBa0IsQ0FBQztBQUM1QixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWU7SUFDN0IsT0FBTyxrQkFBa0IsQ0FBQztBQUM1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYnJhbmQgYXMgY29yZUJyYW5kIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHsgYnJhbmQgYXMgc2hhcmVkQnJhbmQsIHR5cGUgQnJhbmRDb250ZXh0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxubGV0IGFjdGl2ZUJyYW5kQ29udGV4dDogQnJhbmRDb250ZXh0ID0gc2hhcmVkQnJhbmQuZGVmYXVsdEJyYW5kQ29udGV4dDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRCcmFuZENvbnRleHQoY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpKTogUHJvbWlzZTxCcmFuZENvbnRleHQ+IHtcbiAgYWN0aXZlQnJhbmRDb250ZXh0ID0gYXdhaXQgY29yZUJyYW5kLmxvYWRCcmFuZENvbnRleHQoY3dkKTtcbiAgcmV0dXJuIGFjdGl2ZUJyYW5kQ29udGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJyYW5kQ29udGV4dCgpOiBCcmFuZENvbnRleHQge1xuICByZXR1cm4gYWN0aXZlQnJhbmRDb250ZXh0O1xufVxuIl19
|
package/lib/src/interceptor.js
CHANGED
|
@@ -109,7 +109,10 @@ export function createInterceptorContext(env) {
|
|
|
109
109
|
const context = {
|
|
110
110
|
env,
|
|
111
111
|
onLifecycle,
|
|
112
|
-
onTeardown: (fn) =>
|
|
112
|
+
onTeardown: (fn) => {
|
|
113
|
+
bindProcessSignals();
|
|
114
|
+
teardownHandlers.add(fn);
|
|
115
|
+
},
|
|
113
116
|
broadcastSignal: broadcastProcessSignal,
|
|
114
117
|
bindProcess,
|
|
115
118
|
};
|
|
@@ -150,4 +153,4 @@ export class LifecycleBridgePlugin extends Plugin {
|
|
|
150
153
|
}
|
|
151
154
|
/** Factory for the injected {@link LifecycleBridgePlugin}. */
|
|
152
155
|
export const lifecycleBridge = toPlugin(LifecycleBridgePlugin);
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBR0gsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQThDLE1BQU0sb0JBQW9CLENBQUM7QUFDbEcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzdDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUF1RnpDLG1GQUFtRjtBQUNuRixNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztBQUVqQyw2RUFBNkU7QUFDN0UsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFVLENBQUM7QUFDbEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7QUFDakQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBYyxDQUFDO0FBQy9DLElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0FBRWhDLFNBQVMsZUFBZSxDQUFDLElBQVk7SUFDbkMsSUFBSSxtQkFBbUI7UUFBRSxPQUFPO0lBQ2hDLG1CQUFtQixHQUFHLElBQUksQ0FBQztJQUMzQixLQUFLLE1BQU0sT0FBTyxJQUFJLGdCQUFnQjtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2xELGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLEtBQUssTUFBTSxLQUFLLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLFVB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QzNCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQztJQUNILENBQUM7O0FBR0gsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGBjcmVhdGVBcHBgIElOVEVSQ0VQVE9SIGNvbnRleHQ6IGFuIGluLXByb2Nlc3MgaGFuZGxlIGFuIGFwcCBoYW5kcyB0b1xuICogYWRkLW9ucyAodGhlIHR1bm5lbCwgY2hpZWZseSkgc28gdGhleSBjYW4gcmVhZCB0aGUgZW52IGF1dG8tY29uZmlndXJhdGlvblxuICogY29tcHV0ZWQsIGhvb2sgQXBwS2l0J3MgbGlmZWN5Y2xlLCBhbmQgc3VwZXJ2aXNlIHNpYmxpbmcgY2hpbGQgcHJvY2Vzc2VzIGFzIG9uZVxuICogdW5pdCAtIGNvbmN1cnJlbnRseS1zdHlsZSwgd2hlcmUgYW55IGRlYXRoIHRha2VzIHRoZSB3aG9sZSBzZXQgZG93bi5cbiAqXG4gKiBBbiBpbnRlcmNlcHRvciBpcyBhIHBsYWluIGZ1bmN0aW9uIGAoY3R4KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPmAgcGFzc2VkIHRvXG4gKiBgYXBwa2l0LmNyZWF0ZUFwcGAncyBgaW50ZXJjZXB0b3JgIG9wdGlvbiAoXCJvbmUgb3IgbWFueVwiKS4gYGFwcGtpdC5jcmVhdGVBcHBgXG4gKiBydW5zIGVhY2ggb25lIEFGVEVSIGF1dG8tY29uZmlndXJhdGlvbiBoYXMgcG9wdWxhdGVkIGBwcm9jZXNzLmVudmAgYnV0IGFzIHBhcnRcbiAqIG9mIGJvb3RpbmcgdGhlIGFwcCwgc28gYW4gaW50ZXJjZXB0b3Igc2VlcyB0aGUgcmVzb2x2ZWQgY29ubmVjdGlvbiBhbmQgY2FuIGJpbmRcbiAqIHByb2Nlc3NlcyBiZWZvcmUgb3IgZHVyaW5nIHNldHVwLlxuICpcbiAqIFRoZSBuYW1lcyBoZXJlIG1pcnJvciBBcHBLaXQncyBvd24gdm9jYWJ1bGFyeSByYXRoZXIgdGhhbiBpbnZlbnRpbmcgcGFyYWxsZWxcbiAqIG9uZXM6IHtAbGluayBMaWZlY3ljbGVFdmVudH0gYW5kIHtAbGluayBJbnRlcmNlcHRvckNvbnRleHQub25MaWZlY3ljbGV9IGFyZSB0aGVcbiAqIGV4YWN0IHNoYXBlIG9mIGBQbHVnaW5Db250ZXh0Lm9uTGlmZWN5Y2xlYCAoYHNldHVwOmNvbXBsZXRlYCAvIGBzZXJ2ZXI6cmVhZHlgIC9cbiAqIGBzaHV0ZG93bmApLiBUaGUgYnJpZGdlIHRoYXQgbWFrZXMgdGhhdCBob29rIHJlYWNoYWJsZSBmcm9tIE9VVFNJREUgYSBwbHVnaW4gLVxuICogd2hlcmUgaW50ZXJjZXB0b3JzIHJ1biAtIGlzIHtAbGluayBsaWZlY3ljbGVCcmlkZ2V9LCBhIHRpbnkgaW50ZXJuYWwgcGx1Z2luXG4gKiBgYXBwa2l0LmNyZWF0ZUFwcGAgaW5qZWN0cyB0byBjYXB0dXJlIGB0aGlzLmNvbnRleHRgIGFuZCByZWxheSBpdHMgZXZlbnRzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IFBsdWdpbiwgdG9QbHVnaW4sIHR5cGUgQmFzZVBsdWdpbkNvbmZpZywgdHlwZSBQbHVnaW5NYW5pZmVzdCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IExha2ViYXNlQ29ubmVjdGlvbiB9IGZyb20gXCIuL2xha2ViYXNlLXJlc29sdmVyLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJpbnRlcmNlcHRvclwiKTtcblxuLyoqXG4gKiBBcHBLaXQncyBwbHVnaW4tbGlmZWN5Y2xlIGV2ZW50cywgdmVyYmF0aW0gZnJvbSBgUGx1Z2luQ29udGV4dGBcbiAqIChgbm9kZV9tb2R1bGVzL0BkYXRhYnJpY2tzL2FwcGtpdC8uLi4vY29yZS9wbHVnaW4tY29udGV4dC5kLnRzYCkuIFJlLWRlY2xhcmVkXG4gKiBzdHJ1Y3R1cmFsbHkgcmF0aGVyIHRoYW4gaW1wb3J0ZWQgYmVjYXVzZSBgUGx1Z2luQ29udGV4dGAgaXMgbm90IGluIHRoZVxuICogcGFja2FnZSdzIGBleHBvcnRzYCBtYXAgKHRoZSBzYW1lIHJlYXNvbiB7QGxpbmsgUGx1Z2luQ29udGV4dExpa2V9IGV4aXN0cyBpblxuICogYC4vcGx1Z2luYCkuXG4gKlxuICogLSBgc2V0dXA6Y29tcGxldGVgIC0gZXZlcnkgcGx1Z2luJ3MgYHNldHVwKClgIGhhcyByZXNvbHZlZC5cbiAqIC0gYHNlcnZlcjpyZWFkeWAgLSB0aGUgYHNlcnZlcigpYCBwbHVnaW4gaXMgbGlzdGVuaW5nIChuZXZlciBmaXJlcyBmb3IgYVxuICogICBzZXJ2ZXJsZXNzIGFwcCwgZS5nLiB0aGUgdHVubmVsIGdhdGUpLlxuICogLSBgc2h1dGRvd25gIC0gdGhlIGFwcCBpcyB0ZWFyaW5nIGRvd24uXG4gKi9cbmV4cG9ydCB0eXBlIExpZmVjeWNsZUV2ZW50ID0gXCJzZXR1cDpjb21wbGV0ZVwiIHwgXCJzZXJ2ZXI6cmVhZHlcIiB8IFwic2h1dGRvd25cIjtcblxuLyoqIEEgbGlmZWN5Y2xlIHN1YnNjcmliZXIuIEVycm9ycyBhcmUgbG9nZ2VkLCBub3QgcHJvcGFnYXRlZCAobWF0Y2hlcyBBcHBLaXQpLiAqL1xuZXhwb3J0IHR5cGUgTGlmZWN5Y2xlSGFuZGxlciA9ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIFRoZSBlbnYgYXV0by1jb25maWd1cmF0aW9uIHJlc29sdmVkIGJlZm9yZSBib290LCBleHBvc2VkIHRvIGludGVyY2VwdG9ycyBzb1xuICogdGhleSByZWFkIENPTVBVVEVEIHZhbHVlcyBpbnN0ZWFkIG9mIHJlLXJlYWRpbmcgYHByb2Nlc3MuZW52YCB0aGVtc2VsdmVzLlxuICpcbiAqIGBsYWtlYmFzZWAgaXMgdGhlIHJlc29sdmVkIFBvc3RncmVzIGNvbm5lY3Rpb24gd2hlbiBMYWtlYmFzZSBhdXRvLWNvbmZpZyByYW5cbiAqIChzZWUgYGFwcGtpdC5hdXRvQ29uZmlndXJlYCksIGVsc2UgYHVuZGVmaW5lZGAuIGBkYXRhYnJpY2tzSG9zdGAgaXMgdGhlXG4gKiB3b3Jrc3BhY2UgaG9zdCBhcyByZXNvbHZlZCBpbnRvIHRoZSBlbnZpcm9ubWVudCAoYERBVEFCUklDS1NfSE9TVGApLCB3aGljaCB0aGVcbiAqIHR1bm5lbCBpbnRlcmNlcHRvciBib3RoIHJlYWRzIGFuZCwgd2hlbiBpdCBtdXN0LCBzZXRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkQXBwRW52IHtcbiAgLyoqIFJlc29sdmVkIExha2ViYXNlIGNvbm5lY3Rpb24sIHdoZW4gYXV0by1jb25maWcgcmVzb2x2ZWQgb25lLiAqL1xuICByZWFkb25seSBsYWtlYmFzZT86IExha2ViYXNlQ29ubmVjdGlvbjtcbiAgLyoqIFJlc29sdmVkIERhdGFicmlja3Mgd29ya3NwYWNlIGhvc3QgKGBEQVRBQlJJQ0tTX0hPU1RgKSwgd2hlbiBrbm93bi4gKi9cbiAgcmVhZG9ubHkgZGF0YWJyaWNrc0hvc3Q/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwcm9jZXNzIHtAbGluayBJbnRlcmNlcHRvckNvbnRleHQuYmluZFByb2Nlc3N9IGNhbiBzdXBlcnZpc2UuIEEgYmFyZVxuICogYG5vZGU6Y2hpbGRfcHJvY2Vzc2AgYENoaWxkUHJvY2Vzc2AgKGUuZy4gcG9ydHIpIHNhdGlzZmllcyB0aGlzLCBhbmQgc28gZG9lc1xuICogYEBkYngtdG9vbHMvY29yZWAncyBgc3Bhd24oKWAgcmVzdWx0IChhIGBDaGlsZFByb2Nlc3NSZXN1bHRgIElTIGFcbiAqIGBDaGlsZFByb2Nlc3NgKSAtIG9uZSBjb2RlIHBhdGggaGFuZGxlcyBib3RoLlxuICovXG5leHBvcnQgdHlwZSBCaW5kYWJsZVByb2Nlc3MgPSBQaWNrPENoaWxkUHJvY2VzcywgXCJwaWRcIiB8IFwia2lsbFwiIHwgXCJraWxsZWRcIiB8IFwib25jZVwiPjtcblxuLyoqXG4gKiBUaGUgaGFuZGxlIHBhc3NlZCB0byBlYWNoIGludGVyY2VwdG9yLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqXG4gKiBhd2FpdCBhcHBraXQuY3JlYXRlQXBwKHtcbiAqICAgcGx1Z2luczogW3NlcnZlcigpXSxcbiAqICAgaW50ZXJjZXB0b3I6IChjdHgpID0+IHtcbiAqICAgICBjb25zdCBwb3J0ciA9IHNwYXduUG9ydHIoY3R4LmVudi5kYXRhYnJpY2tzSG9zdCk7XG4gKiAgICAgY3R4LmJpbmRQcm9jZXNzKHBvcnRyKTsgICAgICAgICAgICAvLyBhcHAgPC0+IHBvcnRyIGxpdmUvZGllIHRvZ2V0aGVyXG4gKiAgICAgY3R4Lm9uTGlmZWN5Y2xlKFwic2h1dGRvd25cIiwgKCkgPT4gcG9ydHIua2lsbChcIlNJR1RFUk1cIikpO1xuICogICB9LFxuICogfSk7XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJjZXB0b3JDb250ZXh0IHtcbiAgLyoqIFRoZSBlbnYgYXV0by1jb25maWd1cmF0aW9uIGNvbXB1dGVkIGJlZm9yZSBib290LiAqL1xuICByZWFkb25seSBlbnY6IFJlc29sdmVkQXBwRW52O1xuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIGFuIEFwcEtpdCBsaWZlY3ljbGUgZXZlbnQuIE1pcnJvcnMgYFBsdWdpbkNvbnRleHQub25MaWZlY3ljbGVgO1xuICAgKiB0aGUgaW5qZWN0ZWQge0BsaW5rIGxpZmVjeWNsZUJyaWRnZX0gcmVsYXlzIHRoZSByZWFsIGV2ZW50cyBoZXJlIG9uY2UgdGhlIGFwcFxuICAgKiBib290cy4gQSBoYW5kbGVyIHJlZ2lzdGVyZWQgZm9yIGFuIGV2ZW50IHRoYXQgYWxyZWFkeSBmaXJlZCBpcyBOT1QgY2FsbGVkXG4gICAqIHJldHJvYWN0aXZlbHkgKHNhbWUgc2VtYW50aWNzIGFzIEFwcEtpdCkuXG4gICAqL1xuICBvbkxpZmVjeWNsZShldmVudDogTGlmZWN5Y2xlRXZlbnQsIGZuOiBMaWZlY3ljbGVIYW5kbGVyKTogdm9pZDtcbiAgLyoqIFJlZ2lzdGVyIHN5bmNocm9ub3VzIGNsZWFudXAgdGhhdCBydW5zIGJlZm9yZSBhbnkgYm91bmQgcHJvY2VzcyBpcyBraWxsZWQuICovXG4gIG9uVGVhcmRvd24oZm46ICgpID0+IHZvaWQpOiB2b2lkO1xuICAvKipcbiAgICogQnJvYWRjYXN0IGEgdGVybWluYXRpb24gc2lnbmFsIGZyb20gdGhlIG1haW4gYXBwIHRvIGV2ZXJ5IGJvdW5kIHByb2Nlc3MuXG4gICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhpcyBwcm9jZXNzIHJlY2VpdmVzIGBTSUdJTlRgL2BTSUdURVJNYC9gU0lHSFVQYDtcbiAgICogZXhwb3NlZCBzbyBhbiBpbnRlcmNlcHRvciBjYW4gdHJpZ2dlciB0ZWFyZG93biBpdHNlbGYuXG4gICAqL1xuICBicm9hZGNhc3RTaWduYWwoc2lnbmFsOiBOb2RlSlMuU2lnbmFscyk6IHZvaWQ7XG4gIC8qKlxuICAgKiBTdXBlcnZpc2UgYSBjaGlsZCBwcm9jZXNzIGFsb25nc2lkZSB0aGUgYXBwLCBjb25jdXJyZW50bHktc3R5bGU6IHNpZ25hbHMgcGFzc1xuICAgKiB0aHJvdWdoLCBhbmQgaWYgRUlUSEVSIHRoZSBjaGlsZCBvciB0aGUgYXBwIGRpZXMgdGhlIHdob2xlIHNldCBjb21lcyBkb3duLlxuICAgKiBTYWZlIHRvIGNhbGwgZm9yIHNldmVyYWwgY2hpbGRyZW47IHRlYXJkb3duIGlzIGlkZW1wb3RlbnQuXG4gICAqL1xuICBiaW5kUHJvY2VzcyhjaGlsZDogQmluZGFibGVQcm9jZXNzKTogdm9pZDtcbn1cblxuLyoqIEEgc2luZ2xlIGludGVyY2VwdG9yLCBvciBzZXZlcmFsLiBUaGUgYGNyZWF0ZUFwcGAgYGludGVyY2VwdG9yPzpgIG9wdGlvbi4gKi9cbmV4cG9ydCB0eXBlIEludGVyY2VwdG9yID0gKGN0eDogSW50ZXJjZXB0b3JDb250ZXh0KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcblxuLyoqIEhvdyBsb25nIGJvdW5kIGNoaWxkcmVuIGdldCB0byBleGl0IG9uIGBTSUdURVJNYCBiZWZvcmUgdGhlIGFwcCBmb3JjZS1leGl0cy4gKi9cbmNvbnN0IFRFQVJET1dOX0dSQUNFX01TID0gMTBfMDAwO1xuXG4vKiogVGhlIHNpZ25hbHMgdGhhdCB0cmlnZ2VyIHRlYXJkb3duIHdoZW4gdGhlIE1BSU4gcHJvY2VzcyByZWNlaXZlcyB0aGVtLiAqL1xuY29uc3QgVEVBUkRPV05fU0lHTkFMUyA9IFtcIlNJR0lOVFwiLCBcIlNJR1RFUk1cIiwgXCJTSUdIVVBcIl0gYXMgY29uc3Q7XG5jb25zdCBib3VuZENoaWxkcmVuID0gbmV3IFNldDxCaW5kYWJsZVByb2Nlc3M+KCk7XG5jb25zdCB0ZWFyZG93bkhhbmRsZXJzID0gbmV3IFNldDwoKSA9PiB2b2lkPigpO1xubGV0IHByb2Nlc3NTaHV0dGluZ0Rvd24gPSBmYWxzZTtcbmxldCBwcm9jZXNzU2lnbmFsc0JvdW5kID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHRlYXJkb3duUHJvY2Vzcyhjb2RlOiBudW1iZXIpOiB2b2lkIHtcbiAgaWYgKHByb2Nlc3NTaHV0dGluZ0Rvd24pIHJldHVybjtcbiAgcHJvY2Vzc1NodXR0aW5nRG93biA9IHRydWU7XG4gIGZvciAoY29uc3QgaGFuZGxlciBvZiB0ZWFyZG93bkhhbmRsZXJzKSBoYW5kbGVyKCk7XG4gIHRlYXJkb3duSGFuZGxlcnMuY2xlYXIoKTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBib3VuZENoaWxkcmVuKSB7XG4gICAgaWYgKCFjaGlsZC5raWxsZWQpIGNoaWxkLmtpbGwoXCJTSUdURVJNXCIpO1xuICB9XG4gIGJvdW5kQ2hpbGRyZW4uY2xlYXIoKTtcbiAgc2V0VGltZW91dCgoKSA9PiBwcm9jZXNzLmV4aXQoY29kZSksIFRFQVJET1dOX0dSQUNFX01TKS51bnJlZigpO1xufVxuXG5mdW5jdGlvbiBicm9hZGNhc3RQcm9jZXNzU2lnbmFsKHNpZ25hbDogTm9kZUpTLlNpZ25hbHMpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBib3VuZENoaWxkcmVuKSB7XG4gICAgaWYgKCFjaGlsZC5raWxsZWQpIGNoaWxkLmtpbGwoc2lnbmFsKTtcbiAgfVxuICB0ZWFyZG93blByb2Nlc3MoMCk7XG59XG5cbmZ1bmN0aW9uIGJpbmRQcm9jZXNzU2lnbmFscygpOiB2b2lkIHtcbiAgaWYgKHByb2Nlc3NTaWduYWxzQm91bmQpIHJldHVybjtcbiAgcHJvY2Vzc1NpZ25hbHNCb3VuZCA9IHRydWU7XG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIFRFQVJET1dOX1NJR05BTFMpIHtcbiAgICBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4gYnJvYWRjYXN0UHJvY2Vzc1NpZ25hbChzaWduYWwpKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBtdXRhYmxlIG1hY2hpbmVyeSBiZWhpbmQgYW4ge0BsaW5rIEludGVyY2VwdG9yQ29udGV4dH0uIFNwbGl0IG91dCBzb1xuICoge0BsaW5rIGNyZWF0ZUludGVyY2VwdG9yQ29udGV4dH0gY2FuIGhhbmQgdGhlIHB1YmxpYyBjb250ZXh0IHRvIGludGVyY2VwdG9yc1xuICogd2hpbGUgYGFwcGtpdC5jcmVhdGVBcHBgIHJldGFpbnMgdGhlIGBlbWl0TGlmZWN5Y2xlYCBzaWRlLWNoYW5uZWwgdGhlIGJyaWRnZSBkcml2ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJjZXB0b3JSdW50aW1lIHtcbiAgLyoqIFRoZSBjb250ZXh0IGhhbmRlZCB0byBlYWNoIGludGVyY2VwdG9yLiAqL1xuICByZWFkb25seSBjb250ZXh0OiBJbnRlcmNlcHRvckNvbnRleHQ7XG4gIC8qKiBGaXJlIGEgbGlmZWN5Y2xlIGV2ZW50IHRvIGV2ZXJ5IHN1YnNjcmliZXIgKGNhbGxlZCBieSB7QGxpbmsgbGlmZWN5Y2xlQnJpZGdlfSkuICovXG4gIGVtaXRMaWZlY3ljbGUoZXZlbnQ6IExpZmVjeWNsZUV2ZW50KTogUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBCdWlsZCBhbiB7QGxpbmsgSW50ZXJjZXB0b3JDb250ZXh0fSArIGl0cyB7QGxpbmsgSW50ZXJjZXB0b3JSdW50aW1lfS5cbiAqXG4gKiBUZWFyZG93biBpcyB0aGUgZ2VuZXJhbGl6ZWQgYHN1cGVydmlzZUV4aXRgOiB0aGUgZmlyc3QgY2hpbGQgZXhpdCBvciBtYWluLXByb2Nlc3NcbiAqIHRlcm1pbmF0aW9uIHNpZ25hbCBmbGlwcyBhIG9uZS1zaG90IGd1YXJkLCBgU0lHVEVSTWBzIHRoZSBvdGhlciBib3VuZCBjaGlsZHJlbixcbiAqIHRoZW4gYHByb2Nlc3MuZXhpdGBzIGFmdGVyIHtAbGluayBURUFSRE9XTl9HUkFDRV9NU30gKGFuIGB1bnJlZmAnZCB0aW1lciwgc28gaXRcbiAqIG5ldmVyIGl0c2VsZiBob2xkcyB0aGUgbG9vcCBvcGVuKS4gVGhlIHByb2Nlc3Mtc2lnbmFsIGxpc3RlbmVycyBhcmUgaW5zdGFsbGVkXG4gKiBsYXppbHkgb24gdGhlIGZpcnN0IGBiaW5kUHJvY2Vzc2Agc28gYW4gYXBwIHRoYXQgYmluZHMgbm90aGluZyBpcyB1bnRvdWNoZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbnRlcmNlcHRvckNvbnRleHQoZW52OiBSZXNvbHZlZEFwcEVudik6IEludGVyY2VwdG9yUnVudGltZSB7XG4gIGNvbnN0IGhhbmRsZXJzID0gbmV3IE1hcDxMaWZlY3ljbGVFdmVudCwgTGlmZWN5Y2xlSGFuZGxlcltdPigpO1xuICBpZiAocHJvY2Vzc1NodXR0aW5nRG93biAmJiBib3VuZENoaWxkcmVuLnNpemUgPT09IDApIHByb2Nlc3NTaHV0dGluZ0Rvd24gPSBmYWxzZTtcbiAgaWYgKFxuICAgIHByb2Nlc3NTaWduYWxzQm91bmQgJiZcbiAgICBURUFSRE9XTl9TSUdOQUxTLmV2ZXJ5KChzaWduYWwpID0+IHByb2Nlc3MubGlzdGVuZXJDb3VudChzaWduYWwpID09PSAwKVxuICApIHtcbiAgICBwcm9jZXNzU2lnbmFsc0JvdW5kID0gZmFsc2U7XG4gIH1cblxuICBjb25zdCBiaW5kUHJvY2VzcyA9IChjaGlsZDogQmluZGFibGVQcm9jZXNzKTogdm9pZCA9PiB7XG4gICAgYmluZFByb2Nlc3NTaWduYWxzKCk7XG4gICAgYm91bmRDaGlsZHJlbi5hZGQoY2hpbGQpO1xuICAgIGNoaWxkLm9uY2UoXCJleGl0XCIsIChjb2RlKSA9PiB7XG4gICAgICBsb2dnZXIud2FybihcImJvdW5kIHByb2Nlc3MgZXhpdGVkOyB0ZWFyaW5nIGRvd24gdGhlIGFwcFwiLCB7IGNvZGUgfSk7XG4gICAgICB0ZWFyZG93blByb2Nlc3ModHlwZW9mIGNvZGUgPT09IFwibnVtYmVyXCIgPyBjb2RlIDogMSk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3Qgb25MaWZlY3ljbGUgPSAoZXZlbnQ6IExpZmVjeWNsZUV2ZW50LCBmbjogTGlmZWN5Y2xlSGFuZGxlcik6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGxpc3QgPSBoYW5kbGVycy5nZXQoZXZlbnQpO1xuICAgIGlmIChsaXN0KSBsaXN0LnB1c2goZm4pO1xuICAgIGVsc2UgaGFuZGxlcnMuc2V0KGV2ZW50LCBbZm5dKTtcbiAgfTtcblxuICBjb25zdCBlbWl0TGlmZWN5Y2xlID0gYXN5bmMgKGV2ZW50OiBMaWZlY3ljbGVFdmVudCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IGxpc3QgPSBoYW5kbGVycy5nZXQoZXZlbnQpO1xuICAgIGlmICghbGlzdCkgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgZm4gb2YgbGlzdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIE1hdGNoIEFwcEtpdDogYSBmYWlsaW5nIGxpZmVjeWNsZSBoYW5kbGVyIGlzIGxvZ2dlZCwgbmV2ZXIgZmF0YWwsIGFuZFxuICAgICAgICAvLyBuZXZlciBibG9ja3MgaXRzIHNpYmxpbmdzLlxuICAgICAgICBsb2dnZXIud2FybihcImxpZmVjeWNsZSBoYW5kbGVyIGZhaWxlZFwiLCB7IGV2ZW50LCBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY29udGV4dDogSW50ZXJjZXB0b3JDb250ZXh0ID0ge1xuICAgIGVudixcbiAgICBvbkxpZmVjeWNsZSxcbiAgICBvblRlYXJkb3duOiAoZm4pID0+IHRlYXJkb3duSGFuZGxlcnMuYWRkKGZuKSxcbiAgICBicm9hZGNhc3RTaWduYWw6IGJyb2FkY2FzdFByb2Nlc3NTaWduYWwsXG4gICAgYmluZFByb2Nlc3MsXG4gIH07XG5cbiAgcmV0dXJuIHsgY29udGV4dCwgZW1pdExpZmVjeWNsZSB9O1xufVxuXG4vKiogQ29uZmlnIGZvciB7QGxpbmsgTGlmZWN5Y2xlQnJpZGdlUGx1Z2lufTogdGhlIHNpbmsgaXRzIGNhcHR1cmVkIGV2ZW50cyBmbG93IHRvLiAqL1xuaW50ZXJmYWNlIExpZmVjeWNsZUJyaWRnZUNvbmZpZyBleHRlbmRzIEJhc2VQbHVnaW5Db25maWcge1xuICAvKiogVGhlIHJ1bnRpbWUgd2hvc2UgYGVtaXRMaWZlY3ljbGVgIHJlY2VpdmVzIHRoZSByZWFsIEFwcEtpdCBldmVudHMuICovXG4gIHJ1bnRpbWU/OiBJbnRlcmNlcHRvclJ1bnRpbWU7XG59XG5cbi8qKlxuICogU3RydWN0dXJhbCBzaGFwZSBvZiB0aGUgYFBsdWdpbkNvbnRleHQub25MaWZlY3ljbGVgIHdlIGJyaWRnZS4gTWlycm9ycyBvbmx5IHRoZVxuICogb25lIG1ldGhvZCB3ZSB0b3VjaCAobGlrZSB7QGxpbmsgUGx1Z2luQ29udGV4dExpa2V9IGluIGAuL3BsdWdpbmApLCBzaW5jZVxuICogQXBwS2l0J3MgYFBsdWdpbkNvbnRleHRgIGlzIG5vdCBpbXBvcnRhYmxlIGZyb20gdGhlIHBhY2thZ2UncyBgZXhwb3J0c2AuXG4gKi9cbmludGVyZmFjZSBMaWZlY3ljbGVDb250ZXh0TGlrZSB7XG4gIG9uTGlmZWN5Y2xlKGV2ZW50OiBMaWZlY3ljbGVFdmVudCwgZm46IExpZmVjeWNsZUhhbmRsZXIpOiB2b2lkO1xufVxuXG5mdW5jdGlvbiBoYXNPbkxpZmVjeWNsZShjb250ZXh0OiB1bmtub3duKTogY29udGV4dCBpcyBMaWZlY3ljbGVDb250ZXh0TGlrZSB7XG4gIHJldHVybiB0eXBlb2YgKGNvbnRleHQgYXMgTGlmZWN5Y2xlQ29udGV4dExpa2UgfCB1bmRlZmluZWQpPy5vbkxpZmVjeWNsZSA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcm5hbCBwbHVnaW4gYGFwcGtpdC5jcmVhdGVBcHBgIGluamVjdHMgdG8gbWFrZSBBcHBLaXQncyBsaWZlY3ljbGVcbiAqIHJlYWNoYWJsZSBmcm9tIGludGVyY2VwdG9yIGNvZGUuIE9uIGBzZXR1cCgpYCBpdCByZWFkcyBpdHMgb3duIGB0aGlzLmNvbnRleHRgXG4gKiAodGhlIHJlYWwgYFBsdWdpbkNvbnRleHRgKSBhbmQgZm9yd2FyZHMgZWFjaCB7QGxpbmsgTGlmZWN5Y2xlRXZlbnR9IHRvIHRoZVxuICogaW50ZXJjZXB0b3IgcnVudGltZSwgc28gYGN0eC5vbkxpZmVjeWNsZSguLi4pYCBoYW5kbGVycyBmaXJlIG9uIHRoZSBnZW51aW5lXG4gKiBldmVudHMuIEl0IG93bnMgbm8gcm91dGVzLCBjb25maWcgc3VyZmFjZSwgb3IgZXhwb3J0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIExpZmVjeWNsZUJyaWRnZVBsdWdpbiBleHRlbmRzIFBsdWdpbjxMaWZlY3ljbGVCcmlkZ2VDb25maWc+IHtcbiAgc3RhdGljIG1hbmlmZXN0ID0ge1xuICAgIG5hbWU6IFwiZGJ4VG9vbHNMaWZlY3ljbGVCcmlkZ2VcIixcbiAgICBkaXNwbGF5TmFtZTogXCJMaWZlY3ljbGUgQnJpZGdlXCIsXG4gICAgZGVzY3JpcHRpb246IFwiUmVsYXlzIEFwcEtpdCBsaWZlY3ljbGUgZXZlbnRzIHRvIHRoZSBjcmVhdGVBcHAgaW50ZXJjZXB0b3IgY29udGV4dC5cIixcbiAgICBzdGFiaWxpdHk6IFwiYmV0YVwiLFxuICAgIGhpZGRlbjogdHJ1ZSxcbiAgICByZXNvdXJjZXM6IHsgcmVxdWlyZWQ6IFtdLCBvcHRpb25hbDogW10gfSxcbiAgfSBzYXRpc2ZpZXMgUGx1Z2luTWFuaWZlc3Q8XCJkYnhUb29sc0xpZmVjeWNsZUJyaWRnZVwiPjtcblxuICBvdmVycmlkZSBhc3luYyBzZXR1cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBydW50aW1lID0gdGhpcy5jb25maWcucnVudGltZTtcbiAgICBpZiAoIXJ1bnRpbWUpIHJldHVybjtcbiAgICBpZiAoIWhhc09uTGlmZWN5Y2xlKHRoaXMuY29udGV4dCkpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIm5vIFBsdWdpbkNvbnRleHQub25MaWZlY3ljbGUgdG8gYnJpZGdlOyBpbnRlcmNlcHRvciBsaWZlY3ljbGUgZXZlbnRzIGluZXJ0XCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBldmVudHM6IExpZmVjeWNsZUV2ZW50W10gPSBbXCJzZXR1cDpjb21wbGV0ZVwiLCBcInNlcnZlcjpyZWFkeVwiLCBcInNodXRkb3duXCJdO1xuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICB0aGlzLmNvbnRleHQub25MaWZlY3ljbGUoZXZlbnQsICgpID0+IHJ1bnRpbWUuZW1pdExpZmVjeWNsZShldmVudCkpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogRmFjdG9yeSBmb3IgdGhlIGluamVjdGVkIHtAbGluayBMaWZlY3ljbGVCcmlkZ2VQbHVnaW59LiAqL1xuZXhwb3J0IGNvbnN0IGxpZmVjeWNsZUJyaWRnZSA9IHRvUGx1Z2luKExpZmVjeWNsZUJyaWRnZVBsdWdpbik7XG4iXX0=
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBR0gsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQThDLE1BQU0sb0JBQW9CLENBQUM7QUFDbEcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzdDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUF1RnpDLG1GQUFtRjtBQUNuRixNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztBQUVqQyw2RUFBNkU7QUFDN0UsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFVLENBQUM7QUFDbEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7QUFDakQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBYyxDQUFDO0FBQy9DLElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0FBRWhDLFNBQVMsZUFBZSxDQUFDLElBQVk7SUFDbkMsSUFBSSxtQkFBbUI7UUFBRSxPQUFPO0lBQ2hDLG1CQUFtQixHQUFHLElBQUksQ0FBQztJQUMzQixLQUFLLE1BQU0sT0FBTyxJQUFJLGdCQUFnQjtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2xELGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLEtBQUssTUFBTSxLQUFLLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLFVB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RixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQztJQUNILENBQUM7O0FBR0gsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGBjcmVhdGVBcHBgIElOVEVSQ0VQVE9SIGNvbnRleHQ6IGFuIGluLXByb2Nlc3MgaGFuZGxlIGFuIGFwcCBoYW5kcyB0b1xuICogYWRkLW9ucyAodGhlIHR1bm5lbCwgY2hpZWZseSkgc28gdGhleSBjYW4gcmVhZCB0aGUgZW52IGF1dG8tY29uZmlndXJhdGlvblxuICogY29tcHV0ZWQsIGhvb2sgQXBwS2l0J3MgbGlmZWN5Y2xlLCBhbmQgc3VwZXJ2aXNlIHNpYmxpbmcgY2hpbGQgcHJvY2Vzc2VzIGFzIG9uZVxuICogdW5pdCAtIGNvbmN1cnJlbnRseS1zdHlsZSwgd2hlcmUgYW55IGRlYXRoIHRha2VzIHRoZSB3aG9sZSBzZXQgZG93bi5cbiAqXG4gKiBBbiBpbnRlcmNlcHRvciBpcyBhIHBsYWluIGZ1bmN0aW9uIGAoY3R4KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPmAgcGFzc2VkIHRvXG4gKiBgYXBwa2l0LmNyZWF0ZUFwcGAncyBgaW50ZXJjZXB0b3JgIG9wdGlvbiAoXCJvbmUgb3IgbWFueVwiKS4gYGFwcGtpdC5jcmVhdGVBcHBgXG4gKiBydW5zIGVhY2ggb25lIEFGVEVSIGF1dG8tY29uZmlndXJhdGlvbiBoYXMgcG9wdWxhdGVkIGBwcm9jZXNzLmVudmAgYnV0IGFzIHBhcnRcbiAqIG9mIGJvb3RpbmcgdGhlIGFwcCwgc28gYW4gaW50ZXJjZXB0b3Igc2VlcyB0aGUgcmVzb2x2ZWQgY29ubmVjdGlvbiBhbmQgY2FuIGJpbmRcbiAqIHByb2Nlc3NlcyBiZWZvcmUgb3IgZHVyaW5nIHNldHVwLlxuICpcbiAqIFRoZSBuYW1lcyBoZXJlIG1pcnJvciBBcHBLaXQncyBvd24gdm9jYWJ1bGFyeSByYXRoZXIgdGhhbiBpbnZlbnRpbmcgcGFyYWxsZWxcbiAqIG9uZXM6IHtAbGluayBMaWZlY3ljbGVFdmVudH0gYW5kIHtAbGluayBJbnRlcmNlcHRvckNvbnRleHQub25MaWZlY3ljbGV9IGFyZSB0aGVcbiAqIGV4YWN0IHNoYXBlIG9mIGBQbHVnaW5Db250ZXh0Lm9uTGlmZWN5Y2xlYCAoYHNldHVwOmNvbXBsZXRlYCAvIGBzZXJ2ZXI6cmVhZHlgIC9cbiAqIGBzaHV0ZG93bmApLiBUaGUgYnJpZGdlIHRoYXQgbWFrZXMgdGhhdCBob29rIHJlYWNoYWJsZSBmcm9tIE9VVFNJREUgYSBwbHVnaW4gLVxuICogd2hlcmUgaW50ZXJjZXB0b3JzIHJ1biAtIGlzIHtAbGluayBsaWZlY3ljbGVCcmlkZ2V9LCBhIHRpbnkgaW50ZXJuYWwgcGx1Z2luXG4gKiBgYXBwa2l0LmNyZWF0ZUFwcGAgaW5qZWN0cyB0byBjYXB0dXJlIGB0aGlzLmNvbnRleHRgIGFuZCByZWxheSBpdHMgZXZlbnRzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IFBsdWdpbiwgdG9QbHVnaW4sIHR5cGUgQmFzZVBsdWdpbkNvbmZpZywgdHlwZSBQbHVnaW5NYW5pZmVzdCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IExha2ViYXNlQ29ubmVjdGlvbiB9IGZyb20gXCIuL2xha2ViYXNlLXJlc29sdmVyLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJpbnRlcmNlcHRvclwiKTtcblxuLyoqXG4gKiBBcHBLaXQncyBwbHVnaW4tbGlmZWN5Y2xlIGV2ZW50cywgdmVyYmF0aW0gZnJvbSBgUGx1Z2luQ29udGV4dGBcbiAqIChgbm9kZV9tb2R1bGVzL0BkYXRhYnJpY2tzL2FwcGtpdC8uLi4vY29yZS9wbHVnaW4tY29udGV4dC5kLnRzYCkuIFJlLWRlY2xhcmVkXG4gKiBzdHJ1Y3R1cmFsbHkgcmF0aGVyIHRoYW4gaW1wb3J0ZWQgYmVjYXVzZSBgUGx1Z2luQ29udGV4dGAgaXMgbm90IGluIHRoZVxuICogcGFja2FnZSdzIGBleHBvcnRzYCBtYXAgKHRoZSBzYW1lIHJlYXNvbiB7QGxpbmsgUGx1Z2luQ29udGV4dExpa2V9IGV4aXN0cyBpblxuICogYC4vcGx1Z2luYCkuXG4gKlxuICogLSBgc2V0dXA6Y29tcGxldGVgIC0gZXZlcnkgcGx1Z2luJ3MgYHNldHVwKClgIGhhcyByZXNvbHZlZC5cbiAqIC0gYHNlcnZlcjpyZWFkeWAgLSB0aGUgYHNlcnZlcigpYCBwbHVnaW4gaXMgbGlzdGVuaW5nIChuZXZlciBmaXJlcyBmb3IgYVxuICogICBzZXJ2ZXJsZXNzIGFwcCwgZS5nLiB0aGUgdHVubmVsIGdhdGUpLlxuICogLSBgc2h1dGRvd25gIC0gdGhlIGFwcCBpcyB0ZWFyaW5nIGRvd24uXG4gKi9cbmV4cG9ydCB0eXBlIExpZmVjeWNsZUV2ZW50ID0gXCJzZXR1cDpjb21wbGV0ZVwiIHwgXCJzZXJ2ZXI6cmVhZHlcIiB8IFwic2h1dGRvd25cIjtcblxuLyoqIEEgbGlmZWN5Y2xlIHN1YnNjcmliZXIuIEVycm9ycyBhcmUgbG9nZ2VkLCBub3QgcHJvcGFnYXRlZCAobWF0Y2hlcyBBcHBLaXQpLiAqL1xuZXhwb3J0IHR5cGUgTGlmZWN5Y2xlSGFuZGxlciA9ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIFRoZSBlbnYgYXV0by1jb25maWd1cmF0aW9uIHJlc29sdmVkIGJlZm9yZSBib290LCBleHBvc2VkIHRvIGludGVyY2VwdG9ycyBzb1xuICogdGhleSByZWFkIENPTVBVVEVEIHZhbHVlcyBpbnN0ZWFkIG9mIHJlLXJlYWRpbmcgYHByb2Nlc3MuZW52YCB0aGVtc2VsdmVzLlxuICpcbiAqIGBsYWtlYmFzZWAgaXMgdGhlIHJlc29sdmVkIFBvc3RncmVzIGNvbm5lY3Rpb24gd2hlbiBMYWtlYmFzZSBhdXRvLWNvbmZpZyByYW5cbiAqIChzZWUgYGFwcGtpdC5hdXRvQ29uZmlndXJlYCksIGVsc2UgYHVuZGVmaW5lZGAuIGBkYXRhYnJpY2tzSG9zdGAgaXMgdGhlXG4gKiB3b3Jrc3BhY2UgaG9zdCBhcyByZXNvbHZlZCBpbnRvIHRoZSBlbnZpcm9ubWVudCAoYERBVEFCUklDS1NfSE9TVGApLCB3aGljaCB0aGVcbiAqIHR1bm5lbCBpbnRlcmNlcHRvciBib3RoIHJlYWRzIGFuZCwgd2hlbiBpdCBtdXN0LCBzZXRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkQXBwRW52IHtcbiAgLyoqIFJlc29sdmVkIExha2ViYXNlIGNvbm5lY3Rpb24sIHdoZW4gYXV0by1jb25maWcgcmVzb2x2ZWQgb25lLiAqL1xuICByZWFkb25seSBsYWtlYmFzZT86IExha2ViYXNlQ29ubmVjdGlvbjtcbiAgLyoqIFJlc29sdmVkIERhdGFicmlja3Mgd29ya3NwYWNlIGhvc3QgKGBEQVRBQlJJQ0tTX0hPU1RgKSwgd2hlbiBrbm93bi4gKi9cbiAgcmVhZG9ubHkgZGF0YWJyaWNrc0hvc3Q/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwcm9jZXNzIHtAbGluayBJbnRlcmNlcHRvckNvbnRleHQuYmluZFByb2Nlc3N9IGNhbiBzdXBlcnZpc2UuIEEgYmFyZVxuICogYG5vZGU6Y2hpbGRfcHJvY2Vzc2AgYENoaWxkUHJvY2Vzc2AgKGUuZy4gcG9ydHIpIHNhdGlzZmllcyB0aGlzLCBhbmQgc28gZG9lc1xuICogYEBkYngtdG9vbHMvY29yZWAncyBgc3Bhd24oKWAgcmVzdWx0IChhIGBDaGlsZFByb2Nlc3NSZXN1bHRgIElTIGFcbiAqIGBDaGlsZFByb2Nlc3NgKSAtIG9uZSBjb2RlIHBhdGggaGFuZGxlcyBib3RoLlxuICovXG5leHBvcnQgdHlwZSBCaW5kYWJsZVByb2Nlc3MgPSBQaWNrPENoaWxkUHJvY2VzcywgXCJwaWRcIiB8IFwia2lsbFwiIHwgXCJraWxsZWRcIiB8IFwib25jZVwiPjtcblxuLyoqXG4gKiBUaGUgaGFuZGxlIHBhc3NlZCB0byBlYWNoIGludGVyY2VwdG9yLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqXG4gKiBhd2FpdCBhcHBraXQuY3JlYXRlQXBwKHtcbiAqICAgcGx1Z2luczogW3NlcnZlcigpXSxcbiAqICAgaW50ZXJjZXB0b3I6IChjdHgpID0+IHtcbiAqICAgICBjb25zdCBwb3J0ciA9IHNwYXduUG9ydHIoY3R4LmVudi5kYXRhYnJpY2tzSG9zdCk7XG4gKiAgICAgY3R4LmJpbmRQcm9jZXNzKHBvcnRyKTsgICAgICAgICAgICAvLyBhcHAgPC0+IHBvcnRyIGxpdmUvZGllIHRvZ2V0aGVyXG4gKiAgICAgY3R4Lm9uTGlmZWN5Y2xlKFwic2h1dGRvd25cIiwgKCkgPT4gcG9ydHIua2lsbChcIlNJR1RFUk1cIikpO1xuICogICB9LFxuICogfSk7XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJjZXB0b3JDb250ZXh0IHtcbiAgLyoqIFRoZSBlbnYgYXV0by1jb25maWd1cmF0aW9uIGNvbXB1dGVkIGJlZm9yZSBib290LiAqL1xuICByZWFkb25seSBlbnY6IFJlc29sdmVkQXBwRW52O1xuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIGFuIEFwcEtpdCBsaWZlY3ljbGUgZXZlbnQuIE1pcnJvcnMgYFBsdWdpbkNvbnRleHQub25MaWZlY3ljbGVgO1xuICAgKiB0aGUgaW5qZWN0ZWQge0BsaW5rIGxpZmVjeWNsZUJyaWRnZX0gcmVsYXlzIHRoZSByZWFsIGV2ZW50cyBoZXJlIG9uY2UgdGhlIGFwcFxuICAgKiBib290cy4gQSBoYW5kbGVyIHJlZ2lzdGVyZWQgZm9yIGFuIGV2ZW50IHRoYXQgYWxyZWFkeSBmaXJlZCBpcyBOT1QgY2FsbGVkXG4gICAqIHJldHJvYWN0aXZlbHkgKHNhbWUgc2VtYW50aWNzIGFzIEFwcEtpdCkuXG4gICAqL1xuICBvbkxpZmVjeWNsZShldmVudDogTGlmZWN5Y2xlRXZlbnQsIGZuOiBMaWZlY3ljbGVIYW5kbGVyKTogdm9pZDtcbiAgLyoqIFJlZ2lzdGVyIHN5bmNocm9ub3VzIGNsZWFudXAgdGhhdCBydW5zIGJlZm9yZSBhbnkgYm91bmQgcHJvY2VzcyBpcyBraWxsZWQuICovXG4gIG9uVGVhcmRvd24oZm46ICgpID0+IHZvaWQpOiB2b2lkO1xuICAvKipcbiAgICogQnJvYWRjYXN0IGEgdGVybWluYXRpb24gc2lnbmFsIGZyb20gdGhlIG1haW4gYXBwIHRvIGV2ZXJ5IGJvdW5kIHByb2Nlc3MuXG4gICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhpcyBwcm9jZXNzIHJlY2VpdmVzIGBTSUdJTlRgL2BTSUdURVJNYC9gU0lHSFVQYDtcbiAgICogZXhwb3NlZCBzbyBhbiBpbnRlcmNlcHRvciBjYW4gdHJpZ2dlciB0ZWFyZG93biBpdHNlbGYuXG4gICAqL1xuICBicm9hZGNhc3RTaWduYWwoc2lnbmFsOiBOb2RlSlMuU2lnbmFscyk6IHZvaWQ7XG4gIC8qKlxuICAgKiBTdXBlcnZpc2UgYSBjaGlsZCBwcm9jZXNzIGFsb25nc2lkZSB0aGUgYXBwLCBjb25jdXJyZW50bHktc3R5bGU6IHNpZ25hbHMgcGFzc1xuICAgKiB0aHJvdWdoLCBhbmQgaWYgRUlUSEVSIHRoZSBjaGlsZCBvciB0aGUgYXBwIGRpZXMgdGhlIHdob2xlIHNldCBjb21lcyBkb3duLlxuICAgKiBTYWZlIHRvIGNhbGwgZm9yIHNldmVyYWwgY2hpbGRyZW47IHRlYXJkb3duIGlzIGlkZW1wb3RlbnQuXG4gICAqL1xuICBiaW5kUHJvY2VzcyhjaGlsZDogQmluZGFibGVQcm9jZXNzKTogdm9pZDtcbn1cblxuLyoqIEEgc2luZ2xlIGludGVyY2VwdG9yLCBvciBzZXZlcmFsLiBUaGUgYGNyZWF0ZUFwcGAgYGludGVyY2VwdG9yPzpgIG9wdGlvbi4gKi9cbmV4cG9ydCB0eXBlIEludGVyY2VwdG9yID0gKGN0eDogSW50ZXJjZXB0b3JDb250ZXh0KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcblxuLyoqIEhvdyBsb25nIGJvdW5kIGNoaWxkcmVuIGdldCB0byBleGl0IG9uIGBTSUdURVJNYCBiZWZvcmUgdGhlIGFwcCBmb3JjZS1leGl0cy4gKi9cbmNvbnN0IFRFQVJET1dOX0dSQUNFX01TID0gMTBfMDAwO1xuXG4vKiogVGhlIHNpZ25hbHMgdGhhdCB0cmlnZ2VyIHRlYXJkb3duIHdoZW4gdGhlIE1BSU4gcHJvY2VzcyByZWNlaXZlcyB0aGVtLiAqL1xuY29uc3QgVEVBUkRPV05fU0lHTkFMUyA9IFtcIlNJR0lOVFwiLCBcIlNJR1RFUk1cIiwgXCJTSUdIVVBcIl0gYXMgY29uc3Q7XG5jb25zdCBib3VuZENoaWxkcmVuID0gbmV3IFNldDxCaW5kYWJsZVByb2Nlc3M+KCk7XG5jb25zdCB0ZWFyZG93bkhhbmRsZXJzID0gbmV3IFNldDwoKSA9PiB2b2lkPigpO1xubGV0IHByb2Nlc3NTaHV0dGluZ0Rvd24gPSBmYWxzZTtcbmxldCBwcm9jZXNzU2lnbmFsc0JvdW5kID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHRlYXJkb3duUHJvY2Vzcyhjb2RlOiBudW1iZXIpOiB2b2lkIHtcbiAgaWYgKHByb2Nlc3NTaHV0dGluZ0Rvd24pIHJldHVybjtcbiAgcHJvY2Vzc1NodXR0aW5nRG93biA9IHRydWU7XG4gIGZvciAoY29uc3QgaGFuZGxlciBvZiB0ZWFyZG93bkhhbmRsZXJzKSBoYW5kbGVyKCk7XG4gIHRlYXJkb3duSGFuZGxlcnMuY2xlYXIoKTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBib3VuZENoaWxkcmVuKSB7XG4gICAgaWYgKCFjaGlsZC5raWxsZWQpIGNoaWxkLmtpbGwoXCJTSUdURVJNXCIpO1xuICB9XG4gIGJvdW5kQ2hpbGRyZW4uY2xlYXIoKTtcbiAgc2V0VGltZW91dCgoKSA9PiBwcm9jZXNzLmV4aXQoY29kZSksIFRFQVJET1dOX0dSQUNFX01TKS51bnJlZigpO1xufVxuXG5mdW5jdGlvbiBicm9hZGNhc3RQcm9jZXNzU2lnbmFsKHNpZ25hbDogTm9kZUpTLlNpZ25hbHMpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBib3VuZENoaWxkcmVuKSB7XG4gICAgaWYgKCFjaGlsZC5raWxsZWQpIGNoaWxkLmtpbGwoc2lnbmFsKTtcbiAgfVxuICB0ZWFyZG93blByb2Nlc3MoMCk7XG59XG5cbmZ1bmN0aW9uIGJpbmRQcm9jZXNzU2lnbmFscygpOiB2b2lkIHtcbiAgaWYgKHByb2Nlc3NTaWduYWxzQm91bmQpIHJldHVybjtcbiAgcHJvY2Vzc1NpZ25hbHNCb3VuZCA9IHRydWU7XG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIFRFQVJET1dOX1NJR05BTFMpIHtcbiAgICBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4gYnJvYWRjYXN0UHJvY2Vzc1NpZ25hbChzaWduYWwpKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBtdXRhYmxlIG1hY2hpbmVyeSBiZWhpbmQgYW4ge0BsaW5rIEludGVyY2VwdG9yQ29udGV4dH0uIFNwbGl0IG91dCBzb1xuICoge0BsaW5rIGNyZWF0ZUludGVyY2VwdG9yQ29udGV4dH0gY2FuIGhhbmQgdGhlIHB1YmxpYyBjb250ZXh0IHRvIGludGVyY2VwdG9yc1xuICogd2hpbGUgYGFwcGtpdC5jcmVhdGVBcHBgIHJldGFpbnMgdGhlIGBlbWl0TGlmZWN5Y2xlYCBzaWRlLWNoYW5uZWwgdGhlIGJyaWRnZSBkcml2ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJjZXB0b3JSdW50aW1lIHtcbiAgLyoqIFRoZSBjb250ZXh0IGhhbmRlZCB0byBlYWNoIGludGVyY2VwdG9yLiAqL1xuICByZWFkb25seSBjb250ZXh0OiBJbnRlcmNlcHRvckNvbnRleHQ7XG4gIC8qKiBGaXJlIGEgbGlmZWN5Y2xlIGV2ZW50IHRvIGV2ZXJ5IHN1YnNjcmliZXIgKGNhbGxlZCBieSB7QGxpbmsgbGlmZWN5Y2xlQnJpZGdlfSkuICovXG4gIGVtaXRMaWZlY3ljbGUoZXZlbnQ6IExpZmVjeWNsZUV2ZW50KTogUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBCdWlsZCBhbiB7QGxpbmsgSW50ZXJjZXB0b3JDb250ZXh0fSArIGl0cyB7QGxpbmsgSW50ZXJjZXB0b3JSdW50aW1lfS5cbiAqXG4gKiBUZWFyZG93biBpcyB0aGUgZ2VuZXJhbGl6ZWQgYHN1cGVydmlzZUV4aXRgOiB0aGUgZmlyc3QgY2hpbGQgZXhpdCBvciBtYWluLXByb2Nlc3NcbiAqIHRlcm1pbmF0aW9uIHNpZ25hbCBmbGlwcyBhIG9uZS1zaG90IGd1YXJkLCBgU0lHVEVSTWBzIHRoZSBvdGhlciBib3VuZCBjaGlsZHJlbixcbiAqIHRoZW4gYHByb2Nlc3MuZXhpdGBzIGFmdGVyIHtAbGluayBURUFSRE9XTl9HUkFDRV9NU30gKGFuIGB1bnJlZmAnZCB0aW1lciwgc28gaXRcbiAqIG5ldmVyIGl0c2VsZiBob2xkcyB0aGUgbG9vcCBvcGVuKS4gVGhlIHByb2Nlc3Mtc2lnbmFsIGxpc3RlbmVycyBhcmUgaW5zdGFsbGVkXG4gKiBsYXppbHkgb24gdGhlIGZpcnN0IGBiaW5kUHJvY2Vzc2Agc28gYW4gYXBwIHRoYXQgYmluZHMgbm90aGluZyBpcyB1bnRvdWNoZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbnRlcmNlcHRvckNvbnRleHQoZW52OiBSZXNvbHZlZEFwcEVudik6IEludGVyY2VwdG9yUnVudGltZSB7XG4gIGNvbnN0IGhhbmRsZXJzID0gbmV3IE1hcDxMaWZlY3ljbGVFdmVudCwgTGlmZWN5Y2xlSGFuZGxlcltdPigpO1xuICBpZiAocHJvY2Vzc1NodXR0aW5nRG93biAmJiBib3VuZENoaWxkcmVuLnNpemUgPT09IDApIHByb2Nlc3NTaHV0dGluZ0Rvd24gPSBmYWxzZTtcbiAgaWYgKFxuICAgIHByb2Nlc3NTaWduYWxzQm91bmQgJiZcbiAgICBURUFSRE9XTl9TSUdOQUxTLmV2ZXJ5KChzaWduYWwpID0+IHByb2Nlc3MubGlzdGVuZXJDb3VudChzaWduYWwpID09PSAwKVxuICApIHtcbiAgICBwcm9jZXNzU2lnbmFsc0JvdW5kID0gZmFsc2U7XG4gIH1cblxuICBjb25zdCBiaW5kUHJvY2VzcyA9IChjaGlsZDogQmluZGFibGVQcm9jZXNzKTogdm9pZCA9PiB7XG4gICAgYmluZFByb2Nlc3NTaWduYWxzKCk7XG4gICAgYm91bmRDaGlsZHJlbi5hZGQoY2hpbGQpO1xuICAgIGNoaWxkLm9uY2UoXCJleGl0XCIsIChjb2RlKSA9PiB7XG4gICAgICBsb2dnZXIud2FybihcImJvdW5kIHByb2Nlc3MgZXhpdGVkOyB0ZWFyaW5nIGRvd24gdGhlIGFwcFwiLCB7IGNvZGUgfSk7XG4gICAgICB0ZWFyZG93blByb2Nlc3ModHlwZW9mIGNvZGUgPT09IFwibnVtYmVyXCIgPyBjb2RlIDogMSk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3Qgb25MaWZlY3ljbGUgPSAoZXZlbnQ6IExpZmVjeWNsZUV2ZW50LCBmbjogTGlmZWN5Y2xlSGFuZGxlcik6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGxpc3QgPSBoYW5kbGVycy5nZXQoZXZlbnQpO1xuICAgIGlmIChsaXN0KSBsaXN0LnB1c2goZm4pO1xuICAgIGVsc2UgaGFuZGxlcnMuc2V0KGV2ZW50LCBbZm5dKTtcbiAgfTtcblxuICBjb25zdCBlbWl0TGlmZWN5Y2xlID0gYXN5bmMgKGV2ZW50OiBMaWZlY3ljbGVFdmVudCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IGxpc3QgPSBoYW5kbGVycy5nZXQoZXZlbnQpO1xuICAgIGlmICghbGlzdCkgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgZm4gb2YgbGlzdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIE1hdGNoIEFwcEtpdDogYSBmYWlsaW5nIGxpZmVjeWNsZSBoYW5kbGVyIGlzIGxvZ2dlZCwgbmV2ZXIgZmF0YWwsIGFuZFxuICAgICAgICAvLyBuZXZlciBibG9ja3MgaXRzIHNpYmxpbmdzLlxuICAgICAgICBsb2dnZXIud2FybihcImxpZmVjeWNsZSBoYW5kbGVyIGZhaWxlZFwiLCB7IGV2ZW50LCBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY29udGV4dDogSW50ZXJjZXB0b3JDb250ZXh0ID0ge1xuICAgIGVudixcbiAgICBvbkxpZmVjeWNsZSxcbiAgICBvblRlYXJkb3duOiAoZm4pID0+IHtcbiAgICAgIGJpbmRQcm9jZXNzU2lnbmFscygpO1xuICAgICAgdGVhcmRvd25IYW5kbGVycy5hZGQoZm4pO1xuICAgIH0sXG4gICAgYnJvYWRjYXN0U2lnbmFsOiBicm9hZGNhc3RQcm9jZXNzU2lnbmFsLFxuICAgIGJpbmRQcm9jZXNzLFxuICB9O1xuXG4gIHJldHVybiB7IGNvbnRleHQsIGVtaXRMaWZlY3ljbGUgfTtcbn1cblxuLyoqIENvbmZpZyBmb3Ige0BsaW5rIExpZmVjeWNsZUJyaWRnZVBsdWdpbn06IHRoZSBzaW5rIGl0cyBjYXB0dXJlZCBldmVudHMgZmxvdyB0by4gKi9cbmludGVyZmFjZSBMaWZlY3ljbGVCcmlkZ2VDb25maWcgZXh0ZW5kcyBCYXNlUGx1Z2luQ29uZmlnIHtcbiAgLyoqIFRoZSBydW50aW1lIHdob3NlIGBlbWl0TGlmZWN5Y2xlYCByZWNlaXZlcyB0aGUgcmVhbCBBcHBLaXQgZXZlbnRzLiAqL1xuICBydW50aW1lPzogSW50ZXJjZXB0b3JSdW50aW1lO1xufVxuXG4vKipcbiAqIFN0cnVjdHVyYWwgc2hhcGUgb2YgdGhlIGBQbHVnaW5Db250ZXh0Lm9uTGlmZWN5Y2xlYCB3ZSBicmlkZ2UuIE1pcnJvcnMgb25seSB0aGVcbiAqIG9uZSBtZXRob2Qgd2UgdG91Y2ggKGxpa2Uge0BsaW5rIFBsdWdpbkNvbnRleHRMaWtlfSBpbiBgLi9wbHVnaW5gKSwgc2luY2VcbiAqIEFwcEtpdCdzIGBQbHVnaW5Db250ZXh0YCBpcyBub3QgaW1wb3J0YWJsZSBmcm9tIHRoZSBwYWNrYWdlJ3MgYGV4cG9ydHNgLlxuICovXG5pbnRlcmZhY2UgTGlmZWN5Y2xlQ29udGV4dExpa2Uge1xuICBvbkxpZmVjeWNsZShldmVudDogTGlmZWN5Y2xlRXZlbnQsIGZuOiBMaWZlY3ljbGVIYW5kbGVyKTogdm9pZDtcbn1cblxuZnVuY3Rpb24gaGFzT25MaWZlY3ljbGUoY29udGV4dDogdW5rbm93bik6IGNvbnRleHQgaXMgTGlmZWN5Y2xlQ29udGV4dExpa2Uge1xuICByZXR1cm4gdHlwZW9mIChjb250ZXh0IGFzIExpZmVjeWNsZUNvbnRleHRMaWtlIHwgdW5kZWZpbmVkKT8ub25MaWZlY3ljbGUgPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgcGx1Z2luIGBhcHBraXQuY3JlYXRlQXBwYCBpbmplY3RzIHRvIG1ha2UgQXBwS2l0J3MgbGlmZWN5Y2xlXG4gKiByZWFjaGFibGUgZnJvbSBpbnRlcmNlcHRvciBjb2RlLiBPbiBgc2V0dXAoKWAgaXQgcmVhZHMgaXRzIG93biBgdGhpcy5jb250ZXh0YFxuICogKHRoZSByZWFsIGBQbHVnaW5Db250ZXh0YCkgYW5kIGZvcndhcmRzIGVhY2gge0BsaW5rIExpZmVjeWNsZUV2ZW50fSB0byB0aGVcbiAqIGludGVyY2VwdG9yIHJ1bnRpbWUsIHNvIGBjdHgub25MaWZlY3ljbGUoLi4uKWAgaGFuZGxlcnMgZmlyZSBvbiB0aGUgZ2VudWluZVxuICogZXZlbnRzLiBJdCBvd25zIG5vIHJvdXRlcywgY29uZmlnIHN1cmZhY2UsIG9yIGV4cG9ydHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMaWZlY3ljbGVCcmlkZ2VQbHVnaW4gZXh0ZW5kcyBQbHVnaW48TGlmZWN5Y2xlQnJpZGdlQ29uZmlnPiB7XG4gIHN0YXRpYyBtYW5pZmVzdCA9IHtcbiAgICBuYW1lOiBcImRieFRvb2xzTGlmZWN5Y2xlQnJpZGdlXCIsXG4gICAgZGlzcGxheU5hbWU6IFwiTGlmZWN5Y2xlIEJyaWRnZVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlJlbGF5cyBBcHBLaXQgbGlmZWN5Y2xlIGV2ZW50cyB0byB0aGUgY3JlYXRlQXBwIGludGVyY2VwdG9yIGNvbnRleHQuXCIsXG4gICAgc3RhYmlsaXR5OiBcImJldGFcIixcbiAgICBoaWRkZW46IHRydWUsXG4gICAgcmVzb3VyY2VzOiB7IHJlcXVpcmVkOiBbXSwgb3B0aW9uYWw6IFtdIH0sXG4gIH0gc2F0aXNmaWVzIFBsdWdpbk1hbmlmZXN0PFwiZGJ4VG9vbHNMaWZlY3ljbGVCcmlkZ2VcIj47XG5cbiAgb3ZlcnJpZGUgYXN5bmMgc2V0dXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcnVudGltZSA9IHRoaXMuY29uZmlnLnJ1bnRpbWU7XG4gICAgaWYgKCFydW50aW1lKSByZXR1cm47XG4gICAgaWYgKCFoYXNPbkxpZmVjeWNsZSh0aGlzLmNvbnRleHQpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJubyBQbHVnaW5Db250ZXh0Lm9uTGlmZWN5Y2xlIHRvIGJyaWRnZTsgaW50ZXJjZXB0b3IgbGlmZWN5Y2xlIGV2ZW50cyBpbmVydFwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXZlbnRzOiBMaWZlY3ljbGVFdmVudFtdID0gW1wic2V0dXA6Y29tcGxldGVcIiwgXCJzZXJ2ZXI6cmVhZHlcIiwgXCJzaHV0ZG93blwiXTtcbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgdGhpcy5jb250ZXh0Lm9uTGlmZWN5Y2xlKGV2ZW50LCAoKSA9PiBydW50aW1lLmVtaXRMaWZlY3ljbGUoZXZlbnQpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIEZhY3RvcnkgZm9yIHRoZSBpbmplY3RlZCB7QGxpbmsgTGlmZWN5Y2xlQnJpZGdlUGx1Z2lufS4gKi9cbmV4cG9ydCBjb25zdCBsaWZlY3ljbGVCcmlkZ2UgPSB0b1BsdWdpbihMaWZlY3ljbGVCcmlkZ2VQbHVnaW4pO1xuIl19
|
package/lib/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/_cache-storage.ts","../src/appkit.ts","../src/bundle.ts","../src/databricks.ts","../src/identity.ts","../src/interceptor.ts","../src/lakebase-resolver.ts","../src/pgaddress.ts","../src/plugin.ts","../src/provision.ts","../index.ts"],"version":"5.9.3"}
|
|
1
|
+
{"root":["../src/_cache-storage.ts","../src/appkit.ts","../src/brand.ts","../src/bundle.ts","../src/databricks.ts","../src/identity.ts","../src/interceptor.ts","../src/lakebase-resolver.ts","../src/pgaddress.ts","../src/plugin.ts","../src/provision.ts","../index.ts"],"version":"5.9.3"}
|
package/package.json
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@databricks/appkit": "^0.60.0",
|
|
22
|
-
"@dbx-tools/test-polyglot": "0.6.
|
|
22
|
+
"@dbx-tools/test-polyglot": "0.6.123",
|
|
23
23
|
"@types/bun": "^1.3.14",
|
|
24
24
|
"@types/node": "^24.6.0",
|
|
25
25
|
"typescript": "^5.9.3"
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@databricks/sdk-experimental": "^0.17.0",
|
|
32
|
-
"@dbx-tools/core": "0.6.
|
|
33
|
-
"@dbx-tools/shared-core": "0.6.
|
|
32
|
+
"@dbx-tools/core": "0.6.123",
|
|
33
|
+
"@dbx-tools/shared-core": "0.6.123",
|
|
34
34
|
"zod": "4.3.6"
|
|
35
35
|
},
|
|
36
36
|
"main": "./lib/index.js",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"./package.json": "./package.json"
|
|
48
48
|
}
|
|
49
49
|
},
|
|
50
|
-
"version": "0.6.
|
|
50
|
+
"version": "0.6.123",
|
|
51
51
|
"types": "./lib/index.d.ts",
|
|
52
52
|
"type": "module",
|
|
53
53
|
"exports": {
|
package/src/appkit.ts
CHANGED
|
@@ -38,6 +38,7 @@ import type { PluginMap } from "@databricks/appkit/dist/shared/src/plugin";
|
|
|
38
38
|
import { async, log } from "@dbx-tools/shared-core";
|
|
39
39
|
|
|
40
40
|
import { createSoftPersistentStorage } from "./_cache-storage.ts";
|
|
41
|
+
import { loadBrandContext } from "./brand.ts";
|
|
41
42
|
import {
|
|
42
43
|
createInterceptorContext,
|
|
43
44
|
type Interceptor,
|
|
@@ -284,6 +285,8 @@ export async function createApp<T extends AppKitPlugins>(
|
|
|
284
285
|
});
|
|
285
286
|
|
|
286
287
|
logger.debug("createApp: autoConfigure");
|
|
288
|
+
const brandContext = await loadBrandContext();
|
|
289
|
+
logger.debug("createApp: brand context loaded", { name: brandContext.name });
|
|
287
290
|
const lakebase = await autoConfigure(config);
|
|
288
291
|
logger.debug("createApp: autoConfigure returned", {
|
|
289
292
|
lakebase: lakebase ? redactLakebaseConnection(lakebase) : undefined,
|
package/src/brand.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { brand as coreBrand } from "@dbx-tools/core";
|
|
2
|
+
import { brand as sharedBrand, type BrandContext } from "@dbx-tools/shared-core";
|
|
3
|
+
|
|
4
|
+
let activeBrandContext: BrandContext = sharedBrand.defaultBrandContext;
|
|
5
|
+
|
|
6
|
+
export async function loadBrandContext(cwd: string = process.cwd()): Promise<BrandContext> {
|
|
7
|
+
activeBrandContext = await coreBrand.loadBrandContext(cwd);
|
|
8
|
+
return activeBrandContext;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function getBrandContext(): BrandContext {
|
|
12
|
+
return activeBrandContext;
|
|
13
|
+
}
|
package/src/interceptor.ts
CHANGED
|
@@ -212,7 +212,10 @@ export function createInterceptorContext(env: ResolvedAppEnv): InterceptorRuntim
|
|
|
212
212
|
const context: InterceptorContext = {
|
|
213
213
|
env,
|
|
214
214
|
onLifecycle,
|
|
215
|
-
onTeardown: (fn) =>
|
|
215
|
+
onTeardown: (fn) => {
|
|
216
|
+
bindProcessSignals();
|
|
217
|
+
teardownHandlers.add(fn);
|
|
218
|
+
},
|
|
216
219
|
broadcastSignal: broadcastProcessSignal,
|
|
217
220
|
bindProcess,
|
|
218
221
|
};
|