@dbx-tools/databricks 0.6.51 → 0.6.53

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.
@@ -12,7 +12,7 @@
12
12
  *
13
13
  * @module
14
14
  */
15
- import { hash } from "@dbx-tools/shared-core";
15
+ import { hash, object } from "@dbx-tools/shared-core";
16
16
  import { BaseFileSystem, baseFS, FileSystemError, posixPath, } from "@dbx-tools/shared-fs";
17
17
  import { isHomeRelativePath, normalizeDatabricksRoot, resolveDatabricksFilesBackend, resolveDatabricksRoot, } from "./databricks-path.js";
18
18
  import { getWorkspaceClient } from "./workspace.js";
@@ -152,7 +152,7 @@ export class DatabricksFileSystem extends BaseFileSystem {
152
152
  return this.dispatch(resolvedPath, {
153
153
  dbfs: async (client) => {
154
154
  const info = await client.dbfs.getStatus({ path: resolvedPath });
155
- const modified = toDate(info.modification_time);
155
+ const modified = object.toDate(info.modification_time);
156
156
  return {
157
157
  name: posixPath.basename(info.path ?? resolvedPath) || fallbackName,
158
158
  type: info.is_dir ? "directory" : "file",
@@ -166,8 +166,8 @@ export class DatabricksFileSystem extends BaseFileSystem {
166
166
  return {
167
167
  name: posixPath.basename(info.path ?? resolvedPath) || fallbackName,
168
168
  type: info.object_type === "DIRECTORY" ? "directory" : "file",
169
- createdAt: toDate(info.created_at),
170
- modifiedAt: toDate(info.modified_at),
169
+ createdAt: object.toDate(info.created_at),
170
+ modifiedAt: object.toDate(info.modified_at),
171
171
  };
172
172
  },
173
173
  volumes: (client) => this.statVolumePath(client, resolvedPath, fallbackName),
@@ -219,7 +219,7 @@ export class DatabricksFileSystem extends BaseFileSystem {
219
219
  async statVolumePath(client, absolutePath, fallbackName) {
220
220
  try {
221
221
  const metadata = await client.files.getMetadata({ file_path: absolutePath });
222
- const modified = parseHttpDate(metadata["last-modified"]);
222
+ const modified = object.toDate(metadata["last-modified"]);
223
223
  return {
224
224
  name: fallbackName,
225
225
  type: "file",
@@ -318,13 +318,4 @@ function bufferToReadableStream(buffer) {
318
318
  },
319
319
  });
320
320
  }
321
- function toDate(value) {
322
- return value === undefined ? undefined : new Date(value);
323
- }
324
- function parseHttpDate(value) {
325
- if (!value)
326
- return undefined;
327
- const parsed = Date.parse(value);
328
- return Number.isFinite(parsed) ? new Date(parsed) : undefined;
329
- }
330
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJyaWNrcy1mcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYnJpY2tzLWZzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFHSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxNQUFNLEVBQ04sZUFBZSxFQUNmLFNBQVMsR0FLVixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLDZCQUE2QixFQUM3QixxQkFBcUIsR0FFdEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBRXZDLG1GQUFtRjtBQUNuRixNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQStDNUI7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGNBQTRCO0lBQzVELE1BQU0sQ0FBOEI7SUFDM0IsWUFBWSxDQUE4QjtJQUUzRCxZQUFZLE9BQW9DO1FBQzlDLE1BQU0sSUFBSSxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbkYsS0FBSyxDQUFDO1lBQ0osRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksY0FBYyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3BELE9BQU8sRUFBRSxZQUFZO1lBQ3JCLElBQUk7WUFDSixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7WUFDMUIsVUFBVSxFQUFFLE9BQU8sQ0FB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S0FBSyxDQUFDLENBQUM7SUFDakMsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERhdGFicmlja3Mge0BsaW5rIEZpbGVTeXN0ZW19IGJhY2tlZCBieSB7QGxpbmsgV29ya3NwYWNlQ2xpZW50fS5cbiAqXG4gKiBFeHRlbmRzIHtAbGluayBCYXNlRmlsZVN5c3RlbX0uIFJvdXRlcyBJL08gYnkgYWJzb2x1dGUgcGF0aDpcbiAqIC0gYC9Xb3Jrc3BhY2VgLCBgL1VzZXJzYCwgYC9SZXBvc2AsIGAvU2hhcmVkYCDihpIgd29ya3NwYWNlIG9iamVjdHMgQVBJXG4gKiAtIGAvVm9sdW1lcy8uLi5gIChvciBgY2F0YWxvZy5zY2hlbWEudm9sdW1lYCByb290cykg4oaSIFVuaXR5IENhdGFsb2cgRmlsZXMgQVBJXG4gKiAtIGAvZGJmcy8uLi5gIOKGkiBEQkZTIEFQSVxuICpcbiAqIEV2ZXJ5IHByaW1pdGl2ZSBwaWNrcyBpdHMgQVBJIHRocm91Z2gge0BsaW5rIERhdGFicmlja3NGaWxlU3lzdGVtLmRpc3BhdGNofVxuICogcmF0aGVyIHRoYW4gcmUtYnJhbmNoaW5nIGJ5IGhhbmQsIGFuZCBlcnJvciBub3JtYWxpemF0aW9uIGlzIGluaGVyaXRlZCBmcm9tXG4gKiB7QGxpbmsgQmFzZUZpbGVTeXN0ZW19LCBzbyBhIHByaW1pdGl2ZSBoZXJlIGlzIGp1c3QgdGhlIFNESyBjYWxsLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3Mvc2RrLWV4cGVyaW1lbnRhbFwiO1xuaW1wb3J0IHsgaGFzaCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICBCYXNlRmlsZVN5c3RlbSxcbiAgYmFzZUZTLFxuICBGaWxlU3lzdGVtRXJyb3IsXG4gIHBvc2l4UGF0aCxcbiAgdHlwZSBDb3B5T3B0aW9ucyxcbiAgdHlwZSBGaWxlRW50cnksXG4gIHR5cGUgRmlsZVN0YXQsXG4gIHR5cGUgV3JpdGVGaWxlT3B0aW9ucyxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWZzXCI7XG5pbXBvcnQge1xuICBpc0hvbWVSZWxhdGl2ZVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFicmlja3NSb290LFxuICByZXNvbHZlRGF0YWJyaWNrc0ZpbGVzQmFja2VuZCxcbiAgcmVzb2x2ZURhdGFicmlja3NSb290LFxuICB0eXBlIERhdGFicmlja3NGaWxlc0JhY2tlbmQsXG59IGZyb20gXCIuL2RhdGFicmlja3MtcGF0aC50c1wiO1xuaW1wb3J0IHsgZ2V0V29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIi4vd29ya3NwYWNlLnRzXCI7XG5cbmNvbnN0IERCRlNfUkVBRF9DSFVOS19CWVRFUyA9IDEwMjQgKiAxMDI0O1xuY29uc3QgREJGU19QVVRfTUFYX0JZVEVTID0gMTAyNCAqIDEwMjQ7XG5cbi8qKiBTZWdtZW50cyBpbiBgL1ZvbHVtZXMvPGNhdGFsb2c+LzxzY2hlbWE+Lzx2b2x1bWU+YCwgcHJvdmlzaW9uZWQgb3V0IG9mIGJhbmQuICovXG5jb25zdCBWT0xVTUVfUk9PVF9ERVBUSCA9IDQ7XG5cbi8qKlxuICogT25lIGhhbmRsZXIgcGVyIERhdGFicmlja3MgQVBJLCBrZXllZCBieSB7QGxpbmsgRGF0YWJyaWNrc0ZpbGVzQmFja2VuZH0gc29cbiAqIGFkZGluZyBhIGJhY2tlbmQgaXMgYSBjb21waWxlIGVycm9yIHVudGlsIGV2ZXJ5IGNhbGwgc2l0ZSBoYW5kbGVzIGl0LlxuICovXG50eXBlIEJhY2tlbmRIYW5kbGVyczxUPiA9IFJlY29yZDxEYXRhYnJpY2tzRmlsZXNCYWNrZW5kLCAoY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQpID0+IFByb21pc2U8VD4+O1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIERhdGFicmlja3NGaWxlU3lzdGVtfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJyaWNrc0ZpbGVTeXN0ZW1PcHRpb25zIHtcbiAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyLiBEZWZhdWx0cyB0byBhIHN0YWJsZSBoYXNoIG9mIHRoZSBub3JtYWxpemVkIHJvb3QuICovXG4gIGlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaWxlc3lzdGVtIHJvb3QuIEFjY2VwdHM6XG4gICAqIC0gYC9Wb2x1bWVzL2NhdGFsb2cvc2NoZW1hL3ZvbHVtZWAgKGFsc28gYC9Wb2x1bWUvLi4uYClcbiAgICogLSBgY2F0YWxvZy5zY2hlbWEudm9sdW1lYFxuICAgKiAtIGB+YCAvIGB+Ly4uLmAg4oaSIGAvV29ya3NwYWNlL1VzZXJzLzx1c2VyTmFtZT4vLi4uYCAobmVlZHMge0BsaW5rIHVzZXJOYW1lfSxcbiAgICogICBvciB1c2Uge0BsaW5rIERhdGFicmlja3NGaWxlU3lzdGVtLmNyZWF0ZX0pXG4gICAqIC0gYC9Xb3Jrc3BhY2UvLi4uYCwgYC9Vc2Vycy8uLi5gLCBgL1JlcG9zLy4uLmAsIGAvU2hhcmVkLy4uLmBcbiAgICogLSBgL2RiZnMvLi4uYFxuICAgKi9cbiAgcm9vdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2VybmFtZSBmb3IgZXhwYW5kaW5nIGB+YC4gV2hlbiBvbWl0dGVkIGFuZCB7QGxpbmsgcm9vdH0gaXMgaG9tZS1yZWxhdGl2ZSxcbiAgICogcHJlZmVyIHtAbGluayBEYXRhYnJpY2tzRmlsZVN5c3RlbS5jcmVhdGV9IHdoaWNoIHJlc29sdmVzIGl0IHZpYVxuICAgKiBgZ2V0Q3VycmVudFVzZXJOYW1lYC5cbiAgICovXG4gIHVzZXJOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEYXRhYnJpY2tzIHdvcmtzcGFjZSBjbGllbnQuIERlZmF1bHRzIHRvIGB0cnlHZXRXb3Jrc3BhY2VDbGllbnQoKWAsIG90aGVyd2lzZVxuICAgKiBhIGRlZmF1bHQge0BsaW5rIFdvcmtzcGFjZUNsaWVudH0gZnJvbSBlbnYgLyBwcm9maWxlIGF1dGguXG4gICAqL1xuICBjbGllbnQ/OiBXb3Jrc3BhY2VDbGllbnQ7XG5cbiAgLyoqIEJsb2NrIGFsbCB3cml0ZSBvcGVyYXRpb25zLiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUge0BsaW5rIHJvb3R9IChhbmQgcGFyZW50cykgZHVyaW5nIGluaXQuIERlZmF1bHRzIHRvIGZhbHNlICh2b2x1bWVcbiAgICogYW5kIHdvcmtzcGFjZSByb290cyBhcmUgdXN1YWxseSBwcm92aXNpb25lZCBvdXQgb2YgYmFuZCkuXG4gICAqL1xuICBjcmVhdGVSb290PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiB7QGxpbmsgRmlsZVN5c3RlbX0gaW1wbGVtZW50YXRpb24gb3ZlciBEYXRhYnJpY2tzIHdvcmtzcGFjZSBmaWxlcywgVUNcbiAqIHZvbHVtZXMsIGFuZCBEQkZTLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgZnMgPSBuZXcgRGF0YWJyaWNrc0ZpbGVTeXN0ZW0oeyByb290OiBcIm1haW4uZGVmYXVsdC5hc3NldHNcIiB9KTtcbiAqIGF3YWl0IGZzLndyaXRlRmlsZShcIm5vdGVzL2hlbGxvLnR4dFwiLCBcImhpXCIpO1xuICpcbiAqIGNvbnN0IGhvbWUgPSBhd2FpdCBEYXRhYnJpY2tzRmlsZVN5c3RlbS5jcmVhdGUoeyByb290OiBcIn5cIiB9KTtcbiAqIGNvbnN0IGxpc3RpbmcgPSBhd2FpdCBob21lLnJlYWRkaXIoXCIuXCIpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhYnJpY2tzRmlsZVN5c3RlbSBleHRlbmRzIEJhc2VGaWxlU3lzdGVtPFwiZGF0YWJyaWNrc1wiPiB7XG4gIHByaXZhdGUgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50T3B0aW9uOiBXb3Jrc3BhY2VDbGllbnQgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogRGF0YWJyaWNrc0ZpbGVTeXN0ZW1PcHRpb25zKSB7XG4gICAgY29uc3Qgcm9vdCA9IG5vcm1hbGl6ZURhdGFicmlja3NSb290KG9wdGlvbnMucm9vdCwgeyB1c2VyTmFtZTogb3B0aW9ucy51c2VyTmFtZSB9KTtcbiAgICBzdXBlcih7XG4gICAgICBpZDogb3B0aW9ucy5pZCA/PyBgZGF0YWJyaWNrcy0ke2hhc2guZm52SGFzaChyb290KX1gLFxuICAgICAgYmFja2VuZDogXCJkYXRhYnJpY2tzXCIsXG4gICAgICByb290LFxuICAgICAgcmVhZE9ubHk6IG9wdGlvbnMucmVhZE9ubHksXG4gICAgICBjcmVhdGVSb290OiBvcHRpb25zLmNyZWF0ZVJvb3QgPz8gZmFsc2UsXG4gICAgfSk7XG4gICAgdGhpcy5jbGllbnRPcHRpb24gPSBvcHRpb25zLmNsaWVudDtcbiAgICB0aGlzLmNsaWVudCA9IG9wdGlvbnMuY2xpZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIHtAbGluayBEYXRhYnJpY2tzRmlsZVN5c3RlbX0sIHJlc29sdmluZyBgfmAgcm9vdHMgdmlhIHRoZVxuICAgKiB3b3Jrc3BhY2UgY3VycmVudCB1c2VyIHdoZW4gbmVlZGVkLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRpb25zOiBEYXRhYnJpY2tzRmlsZVN5c3RlbU9wdGlvbnMpOiBQcm9taXNlPERhdGFicmlja3NGaWxlU3lzdGVtPiB7XG4gICAgaWYgKCFpc0hvbWVSZWxhdGl2ZVBhdGgob3B0aW9ucy5yb290KSB8fCBvcHRpb25zLnVzZXJOYW1lPy50cmltKCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0YWJyaWNrc0ZpbGVTeXN0ZW0ob3B0aW9ucyk7XG4gICAgfVxuICAgIGNvbnN0IGNsaWVudCA9IG9wdGlvbnMuY2xpZW50ID8/IChhd2FpdCBnZXRXb3Jrc3BhY2VDbGllbnQoKSk7XG4gICAgY29uc3Qgcm9vdCA9IGF3YWl0IHJlc29sdmVEYXRhYnJpY2tzUm9vdChvcHRpb25zLnJvb3QsIHsgY2xpZW50IH0pO1xuICAgIHJldHVybiBuZXcgRGF0YWJyaWNrc0ZpbGVTeXN0ZW0oeyAuLi5vcHRpb25zLCByb290LCBjbGllbnQgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgb25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY2xpZW50ID0gdGhpcy5jbGllbnRPcHRpb24gPz8gKGF3YWl0IGdldFdvcmtzcGFjZUNsaWVudCgpKTtcbiAgfVxuXG4gIC8qKiBSdW4gdGhlIGhhbmRsZXIgZm9yIGBhYnNvbHV0ZVBhdGhgJ3MgRGF0YWJyaWNrcyBBUEkgd2l0aCB0aGUgbGl2ZSBjbGllbnQuICovXG4gIHByaXZhdGUgZGlzcGF0Y2g8VD4oYWJzb2x1dGVQYXRoOiBzdHJpbmcsIGhhbmRsZXJzOiBCYWNrZW5kSGFuZGxlcnM8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIXRoaXMuY2xpZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUVycm9yKFxuICAgICAgICBcIklPX0VSUk9SXCIsXG4gICAgICAgIFwiRGF0YWJyaWNrcyBmaWxlc3lzdGVtIGlzIG5vdCBpbml0aWFsaXplZCAobm8gV29ya3NwYWNlQ2xpZW50KVwiLFxuICAgICAgICBhYnNvbHV0ZVBhdGgsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlcnNbcmVzb2x2ZURhdGFicmlja3NGaWxlc0JhY2tlbmQoYWJzb2x1dGVQYXRoKV0odGhpcy5jbGllbnQpO1xuICB9XG5cbiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4gIC8qIFByaW1pdGl2ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlUm9vdERpcmVjdG9yeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZURpcmVjdG9yeUF0KHRoaXMucm9vdCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgcmVhZEJ5dGVzQXQocmVzb2x2ZWRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLmRpc3BhdGNoPEJ1ZmZlcj4ocmVzb2x2ZWRQYXRoLCB7XG4gICAgICBkYmZzOiAoY2xpZW50KSA9PiB0aGlzLnJlYWREYmZzRmlsZShjbGllbnQsIHJlc29sdmVkUGF0aCksXG4gICAgICB3b3Jrc3BhY2U6IGFzeW5jIChjbGllbnQpID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQud29ya3NwYWNlLmV4cG9ydCh7IHBhdGg6IHJlc29sdmVkUGF0aCwgZm9ybWF0OiBcIkFVVE9cIiB9KTtcbiAgICAgICAgcmV0dXJuIGRlY29kZUJhc2U2NChyZXNwb25zZS5jb250ZW50KTtcbiAgICAgIH0sXG4gICAgICB2b2x1bWVzOiBhc3luYyAoY2xpZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmZpbGVzLmRvd25sb2FkKHsgZmlsZV9wYXRoOiByZXNvbHZlZFBhdGggfSk7XG4gICAgICAgIHJldHVybiByZWFkUmVzcG9uc2VCb2R5KFxuICAgICAgICAgIHJlc3BvbnNlLmNvbnRlbnRzIGFzIGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4gfCB1bmRlZmluZWQsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIuYnVmZmVyLCBidWZmZXIuYnl0ZU9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHdyaXRlQnl0ZXNBdChcbiAgICByZXNvbHZlZFBhdGg6IHN0cmluZyxcbiAgICBjb250ZW50OiBVaW50OEFycmF5LFxuICAgIG9wdGlvbnM6IFJlcXVpcmVkPFdyaXRlRmlsZU9wdGlvbnM+LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShjb250ZW50KTtcbiAgICBjb25zdCBvdmVyd3JpdGUgPSBvcHRpb25zLm92ZXJ3cml0ZTtcbiAgICBhd2FpdCB0aGlzLmRpc3BhdGNoPHVua25vd24+KHJlc29sdmVkUGF0aCwge1xuICAgICAgZGJmczogKGNsaWVudCkgPT4gdGhpcy53cml0ZURiZnNGaWxlKGNsaWVudCwgcmVzb2x2ZWRQYXRoLCBidWZmZXIsIG92ZXJ3cml0ZSksXG4gICAgICB3b3Jrc3BhY2U6IChjbGllbnQpID0+XG4gICAgICAgIGNsaWVudC53b3Jrc3BhY2UuaW1wb3J0KHtcbiAgICAgICAgICBwYXRoOiByZXNvbHZlZFBhdGgsXG4gICAgICAgICAgZm9ybWF0OiBcIkFVVE9cIixcbiAgICAgICAgICBjb250ZW50OiBidWZmZXIudG9TdHJpbmcoXCJiYXNlNjRcIiksXG4gICAgICAgICAgb3ZlcndyaXRlLFxuICAgICAgICB9KSxcbiAgICAgIHZvbHVtZXM6IChjbGllbnQpID0+XG4gICAgICAgIGNsaWVudC5maWxlcy51cGxvYWQoe1xuICAgICAgICAgIGZpbGVfcGF0aDogcmVzb2x2ZWRQYXRoLFxuICAgICAgICAgIGNvbnRlbnRzOiBidWZmZXJUb1JlYWRhYmxlU3RyZWFtKGJ1ZmZlcikgYXMgbmV2ZXIsXG4gICAgICAgICAgb3ZlcndyaXRlLFxuICAgICAgICB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBkZWxldGVGaWxlQXQocmVzb2x2ZWRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmRpc3BhdGNoPHVua25vd24+KHJlc29sdmVkUGF0aCwge1xuICAgICAgZGJmczogKGNsaWVudCkgPT4gY2xpZW50LmRiZnMuZGVsZXRlKHsgcGF0aDogcmVzb2x2ZWRQYXRoLCByZWN1cnNpdmU6IGZhbHNlIH0pLFxuICAgICAgd29ya3NwYWNlOiAoY2xpZW50KSA9PiBjbGllbnQud29ya3NwYWNlLmRlbGV0ZSh7IHBhdGg6IHJlc29sdmVkUGF0aCwgcmVjdXJzaXZlOiBmYWxzZSB9KSxcbiAgICAgIHZvbHVtZXM6IChjbGllbnQpID0+IGNsaWVudC5maWxlcy5kZWxldGUoeyBmaWxlX3BhdGg6IHJlc29sdmVkUGF0aCB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBjcmVhdGVEaXJlY3RvcnlBdChyZXNvbHZlZFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2g8dW5rbm93bj4ocmVzb2x2ZWRQYXRoLCB7XG4gICAgICBkYmZzOiAoY2xpZW50KSA9PiBjbGllbnQuZGJmcy5ta2RpcnMoeyBwYXRoOiByZXNvbHZlZFBhdGggfSksXG4gICAgICB3b3Jrc3BhY2U6IChjbGllbnQpID0+IGNsaWVudC53b3Jrc3BhY2UubWtkaXJzKHsgcGF0aDogcmVzb2x2ZWRQYXRoIH0pLFxuICAgICAgdm9sdW1lczogKGNsaWVudCkgPT4gdGhpcy5jcmVhdGVWb2x1bWVEaXJlY3RvcmllcyhjbGllbnQsIHJlc29sdmVkUGF0aCksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgcmVtb3ZlRGlyZWN0b3J5QXQocmVzb2x2ZWRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmRpc3BhdGNoPHVua25vd24+KHJlc29sdmVkUGF0aCwge1xuICAgICAgZGJmczogKGNsaWVudCkgPT4gY2xpZW50LmRiZnMuZGVsZXRlKHsgcGF0aDogcmVzb2x2ZWRQYXRoLCByZWN1cnNpdmU6IGZhbHNlIH0pLFxuICAgICAgd29ya3NwYWNlOiAoY2xpZW50KSA9PiBjbGllbnQud29ya3NwYWNlLmRlbGV0ZSh7IHBhdGg6IHJlc29sdmVkUGF0aCwgcmVjdXJzaXZlOiBmYWxzZSB9KSxcbiAgICAgIHZvbHVtZXM6IChjbGllbnQpID0+IGNsaWVudC5maWxlcy5kZWxldGVEaXJlY3RvcnkoeyBkaXJlY3RvcnlfcGF0aDogcmVzb2x2ZWRQYXRoIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGxpc3REaXJlY3RvcnlBdChyZXNvbHZlZFBhdGg6IHN0cmluZyk6IFByb21pc2U8RmlsZUVudHJ5W10+IHtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaDxGaWxlRW50cnlbXT4ocmVzb2x2ZWRQYXRoLCB7XG4gICAgICBkYmZzOiAoY2xpZW50KSA9PlxuICAgICAgICBjb2xsZWN0KGNsaWVudC5kYmZzLmxpc3QoeyBwYXRoOiByZXNvbHZlZFBhdGggfSksIChpbmZvKSA9PiAoe1xuICAgICAgICAgIG5hbWU6IHBvc2l4UGF0aC5iYXNlbmFtZShpbmZvLnBhdGggPz8gXCJcIiksXG4gICAgICAgICAgdHlwZTogaW5mby5pc19kaXIgPyBcImRpcmVjdG9yeVwiIDogXCJmaWxlXCIsXG4gICAgICAgICAgc2l6ZTogaW5mby5maWxlX3NpemUsXG4gICAgICAgIH0pKSxcbiAgICAgIHdvcmtzcGFjZTogKGNsaWVudCkgPT5cbiAgICAgICAgY29sbGVjdChjbGllbnQud29ya3NwYWNlLmxpc3QoeyBwYXRoOiByZXNvbHZlZFBhdGggfSksIChpbmZvKSA9PiAoe1xuICAgICAgICAgIG5hbWU6IHBvc2l4UGF0aC5iYXNlbmFtZShpbmZvLnBhdGggPz8gXCJcIiksXG4gICAgICAgICAgdHlwZTogaW5mby5vYmplY3RfdHlwZSA9PT0gXCJESVJFQ1RPUllcIiA/IFwiZGlyZWN0b3J5XCIgOiBcImZpbGVcIixcbiAgICAgICAgfSkpLFxuICAgICAgdm9sdW1lczogKGNsaWVudCkgPT5cbiAgICAgICAgY29sbGVjdChjbGllbnQuZmlsZXMubGlzdERpcmVjdG9yeUNvbnRlbnRzKHsgZGlyZWN0b3J5X3BhdGg6IHJlc29sdmVkUGF0aCB9KSwgKGVudHJ5KSA9PiAoe1xuICAgICAgICAgIG5hbWU6IGVudHJ5Lm5hbWUgPz8gcG9zaXhQYXRoLmJhc2VuYW1lKGVudHJ5LnBhdGggPz8gXCJcIiksXG4gICAgICAgICAgdHlwZTogZW50cnkuaXNfZGlyZWN0b3J5ID8gXCJkaXJlY3RvcnlcIiA6IFwiZmlsZVwiLFxuICAgICAgICAgIHNpemU6IGVudHJ5LmZpbGVfc2l6ZSxcbiAgICAgICAgfSkpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHN0YXRBdChyZXNvbHZlZFBhdGg6IHN0cmluZyk6IFByb21pc2U8T21pdDxGaWxlU3RhdCwgXCJwYXRoXCI+PiB7XG4gICAgY29uc3QgZmFsbGJhY2tOYW1lID0gcG9zaXhQYXRoLmJhc2VuYW1lKHJlc29sdmVkUGF0aCkgfHwgcG9zaXhQYXRoLmJhc2VuYW1lKHRoaXMucm9vdCk7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2g8T21pdDxGaWxlU3RhdCwgXCJwYXRoXCI+PihyZXNvbHZlZFBhdGgsIHtcbiAgICAgIGRiZnM6IGFzeW5jIChjbGllbnQpID0+IHtcbiAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IGNsaWVudC5kYmZzLmdldFN0YXR1cyh7IHBhdGg6IHJlc29sdmVkUGF0aCB9KTtcbiAgICAgICAgY29uc3QgbW9kaWZpZWQgPSB0b0RhdGUoaW5mby5tb2RpZmljYXRpb25fdGltZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogcG9zaXhQYXRoLmJhc2VuYW1lKGluZm8ucGF0aCA/PyByZXNvbHZlZFBhdGgpIHx8IGZhbGxiYWNrTmFtZSxcbiAgICAgICAgICB0eXBlOiBpbmZvLmlzX2RpciA/IFwiZGlyZWN0b3J5XCIgOiBcImZpbGVcIixcbiAgICAgICAgICBzaXplOiBpbmZvLmZpbGVfc2l6ZSxcbiAgICAgICAgICBjcmVhdGVkQXQ6IG1vZGlmaWVkLFxuICAgICAgICAgIG1vZGlmaWVkQXQ6IG1vZGlmaWVkLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHdvcmtzcGFjZTogYXN5bmMgKGNsaWVudCkgPT4ge1xuICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgY2xpZW50LndvcmtzcGFjZS5nZXRTdGF0dXMoeyBwYXRoOiByZXNvbHZlZFBhdGggfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogcG9zaXhQYXRoLmJhc2VuYW1lKGluZm8ucGF0aCA/PyByZXNvbHZlZFBhdGgpIHx8IGZhbGxiYWNrTmFtZSxcbiAgICAgICAgICB0eXBlOiBpbmZvLm9iamVjdF90eXBlID09PSBcIkRJUkVDVE9SWVwiID8gXCJkaXJlY3RvcnlcIiA6IFwiZmlsZVwiLFxuICAgICAgICAgIGNyZWF0ZWRBdDogdG9EYXRlKGluZm8uY3JlYXRlZF9hdCksXG4gICAgICAgICAgbW9kaWZpZWRBdDogdG9EYXRlKGluZm8ubW9kaWZpZWRfYXQpLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHZvbHVtZXM6IChjbGllbnQpID0+IHRoaXMuc3RhdFZvbHVtZVBhdGgoY2xpZW50LCByZXNvbHZlZFBhdGgsIGZhbGxiYWNrTmFtZSksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdHJ5TW92ZUZpbGVBdChcbiAgICBzb3VyY2VQYXRoOiBzdHJpbmcsXG4gICAgZGVzdGluYXRpb25QYXRoOiBzdHJpbmcsXG4gICAgX29wdGlvbnM6IFJlcXVpcmVkPENvcHlPcHRpb25zPixcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gT25seSBEQkZTIGV4cG9zZXMgYSBzZXJ2ZXItc2lkZSBtb3ZlOyBldmVyeXRoaW5nIGVsc2UgZmFsbHMgYmFjayB0byB0aGVcbiAgICAvLyBwb3J0YWJsZSBjb3B5ICsgZGVsZXRlIGluIEJhc2VGaWxlU3lzdGVtLlxuICAgIGlmIChcbiAgICAgIHJlc29sdmVEYXRhYnJpY2tzRmlsZXNCYWNrZW5kKHNvdXJjZVBhdGgpICE9PSBcImRiZnNcIiB8fFxuICAgICAgcmVzb2x2ZURhdGFicmlja3NGaWxlc0JhY2tlbmQoZGVzdGluYXRpb25QYXRoKSAhPT0gXCJkYmZzXCJcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5kaXNwYXRjaDx1bmtub3duPihzb3VyY2VQYXRoLCB7XG4gICAgICBkYmZzOiAoY2xpZW50KSA9PlxuICAgICAgICBjbGllbnQuZGJmcy5tb3ZlKHsgc291cmNlX3BhdGg6IHNvdXJjZVBhdGgsIGRlc3RpbmF0aW9uX3BhdGg6IGRlc3RpbmF0aW9uUGF0aCB9KSxcbiAgICAgIHdvcmtzcGFjZTogdW5yZWFjaGFibGVCYWNrZW5kLFxuICAgICAgdm9sdW1lczogdW5yZWFjaGFibGVCYWNrZW5kLFxuICAgIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4gIC8qIEJhY2tlbmQtc3BlY2lmaWMgSS9PICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuICAvKipcbiAgICogVUMgYGNyZWF0ZURpcmVjdG9yeWAgaXMgc2luZ2xlLWxldmVsLCBzbyB3YWxrIHRoZSBwYXRoIGNyZWF0aW5nIGVhY2ggbGV2ZWxcbiAgICogYmVsb3cgdGhlIHZvbHVtZSBpdHNlbGYuIEEgbGV2ZWwgdGhhdCBhbHJlYWR5IGV4aXN0cyBpcyBub3QgYW4gZXJyb3IuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNyZWF0ZVZvbHVtZURpcmVjdG9yaWVzKFxuICAgIGNsaWVudDogV29ya3NwYWNlQ2xpZW50LFxuICAgIGFic29sdXRlUGF0aDogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXJ0cyA9IGFic29sdXRlUGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGxldCBjdXJyZW50ID0gXCJcIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjdXJyZW50ID0gYCR7Y3VycmVudH0vJHtwYXJ0c1tpXX1gO1xuICAgICAgaWYgKGkgPCBWT0xVTUVfUk9PVF9ERVBUSCkgY29udGludWU7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjbGllbnQuZmlsZXMuY3JlYXRlRGlyZWN0b3J5KHsgZGlyZWN0b3J5X3BhdGg6IGN1cnJlbnQgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gQWxyZWFkeSBwcmVzZW50IGlzIGZpbmU7IGFueXRoaW5nIGVsc2UgaXMgYSByZWFsIGZhaWx1cmUuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgY2xpZW50LmZpbGVzLmdldERpcmVjdG9yeU1ldGFkYXRhKHsgZGlyZWN0b3J5X3BhdGg6IGN1cnJlbnQgfSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBTdGF0IGEgVUMgcGF0aDogZmlsZSBtZXRhZGF0YSBmaXJzdCwgdGhlbiBhIGRpcmVjdG9yeSBwcm9iZS4gKi9cbiAgcHJpdmF0ZSBhc3luYyBzdGF0Vm9sdW1lUGF0aChcbiAgICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCxcbiAgICBhYnNvbHV0ZVBhdGg6IHN0cmluZyxcbiAgICBmYWxsYmFja05hbWU6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxPbWl0PEZpbGVTdGF0LCBcInBhdGhcIj4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCBjbGllbnQuZmlsZXMuZ2V0TWV0YWRhdGEoeyBmaWxlX3BhdGg6IGFic29sdXRlUGF0aCB9KTtcbiAgICAgIGNvbnN0IG1vZGlmaWVkID0gcGFyc2VIdHRwRGF0ZShtZXRhZGF0YVtcImxhc3QtbW9kaWZpZWRcIl0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZmFsbGJhY2tOYW1lLFxuICAgICAgICB0eXBlOiBcImZpbGVcIixcbiAgICAgICAgc2l6ZTogTnVtYmVyKG1ldGFkYXRhW1wiY29udGVudC1sZW5ndGhcIl0gPz8gMCksXG4gICAgICAgIGNyZWF0ZWRBdDogbW9kaWZpZWQsXG4gICAgICAgIG1vZGlmaWVkQXQ6IG1vZGlmaWVkLFxuICAgICAgICBtaW1lVHlwZTogbWV0YWRhdGFbXCJjb250ZW50LXR5cGVcIl0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGZpbGVFcnIpIHtcbiAgICAgIC8vIEEgZGlyZWN0b3J5IGhhcyBubyBmaWxlIG1ldGFkYXRhLCBhbmQgYW4gdW5yZWFkYWJsZSBvbmUgcmVwb3J0cyBhc1xuICAgICAgLy8gbWlzc2luZyAvIGRlbmllZCAtIGJvdGggYXJlIHdvcnRoIGEgZGlyZWN0b3J5IHByb2JlIGJlZm9yZSBmYWlsaW5nLlxuICAgICAgY29uc3QgY29kZSA9IGJhc2VGUy5tYXBGaWxlU3lzdGVtRXJyb3IoZmlsZUVyciwgYWJzb2x1dGVQYXRoKS5jb2RlO1xuICAgICAgaWYgKGNvZGUgIT09IFwiTk9UX0ZPVU5EXCIgJiYgY29kZSAhPT0gXCJQRVJNSVNTSU9OX0RFTklFRFwiKSB0aHJvdyBmaWxlRXJyO1xuICAgICAgYXdhaXQgY2xpZW50LmZpbGVzLmdldERpcmVjdG9yeU1ldGFkYXRhKHsgZGlyZWN0b3J5X3BhdGg6IGFic29sdXRlUGF0aCB9KTtcbiAgICAgIHJldHVybiB7IG5hbWU6IGZhbGxiYWNrTmFtZSwgdHlwZTogXCJkaXJlY3RvcnlcIiB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVhZERiZnNGaWxlKGNsaWVudDogV29ya3NwYWNlQ2xpZW50LCBhYnNvbHV0ZVBhdGg6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5kYmZzLnJlYWQoe1xuICAgICAgICBwYXRoOiBhYnNvbHV0ZVBhdGgsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgbGVuZ3RoOiBEQkZTX1JFQURfQ0hVTktfQllURVMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNodW5rID0gZGVjb2RlQmFzZTY0KHJlc3BvbnNlLmRhdGEpO1xuICAgICAgaWYgKGNodW5rLmxlbmd0aCA9PT0gMCkgYnJlYWs7XG4gICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICBvZmZzZXQgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgaWYgKGNodW5rLmxlbmd0aCA8IERCRlNfUkVBRF9DSFVOS19CWVRFUykgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdyaXRlRGJmc0ZpbGUoXG4gICAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4gICAgYWJzb2x1dGVQYXRoOiBzdHJpbmcsXG4gICAgYnVmZmVyOiBCdWZmZXIsXG4gICAgb3ZlcndyaXRlOiBib29sZWFuLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoYnVmZmVyLmxlbmd0aCA8PSBEQkZTX1BVVF9NQVhfQllURVMpIHtcbiAgICAgIGF3YWl0IGNsaWVudC5kYmZzLnB1dCh7XG4gICAgICAgIHBhdGg6IGFic29sdXRlUGF0aCxcbiAgICAgICAgY29udGVudHM6IGJ1ZmZlci50b1N0cmluZyhcImJhc2U2NFwiKSxcbiAgICAgICAgb3ZlcndyaXRlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBjbGllbnQuZGJmcy5jcmVhdGUoeyBwYXRoOiBhYnNvbHV0ZVBhdGgsIG92ZXJ3cml0ZSB9KTtcbiAgICBjb25zdCBoYW5kbGUgPSBjcmVhdGVkLmhhbmRsZTtcbiAgICBpZiAoaGFuZGxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXJyb3IoXCJJT19FUlJPUlwiLCBcIkRCRlMgdXBsb2FkIGhhbmRsZSBtaXNzaW5nXCIsIGFic29sdXRlUGF0aCk7XG4gICAgfVxuICAgIGZvciAobGV0IG9mZnNldCA9IDA7IG9mZnNldCA8IGJ1ZmZlci5sZW5ndGg7IG9mZnNldCArPSBEQkZTX1BVVF9NQVhfQllURVMpIHtcbiAgICAgIGNvbnN0IHNsaWNlID0gYnVmZmVyLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgREJGU19QVVRfTUFYX0JZVEVTKTtcbiAgICAgIGF3YWl0IGNsaWVudC5kYmZzLmFkZEJsb2NrKHsgaGFuZGxlLCBkYXRhOiBzbGljZS50b1N0cmluZyhcImJhc2U2NFwiKSB9KTtcbiAgICB9XG4gICAgYXdhaXQgY2xpZW50LmRiZnMuY2xvc2UoeyBoYW5kbGUgfSk7XG4gIH1cbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKiBEcmFpbiBhbiBTREsgYXN5bmMgaXRlcmFibGUgaW50byBhIG1hcHBlZCBhcnJheS4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbGxlY3Q8UywgVD4oc291cmNlOiBBc3luY0l0ZXJhYmxlPFM+LCBtYXA6IChpdGVtOiBTKSA9PiBUKTogUHJvbWlzZTxUW10+IHtcbiAgY29uc3QgaXRlbXM6IFRbXSA9IFtdO1xuICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2Ygc291cmNlKSBpdGVtcy5wdXNoKG1hcChpdGVtKSk7XG4gIHJldHVybiBpdGVtcztcbn1cblxuLyoqIEhhbmRsZXIgZm9yIGEgYmFja2VuZCBhIGNhbGwgc2l0ZSBoYXMgYWxyZWFkeSBydWxlZCBvdXQuICovXG5mdW5jdGlvbiB1bnJlYWNoYWJsZUJhY2tlbmQoKTogUHJvbWlzZTxuZXZlcj4ge1xuICB0aHJvdyBuZXcgRmlsZVN5c3RlbUVycm9yKFwiTk9UX1NVUFBPUlRFRFwiLCBcIlVuc3VwcG9ydGVkIERhdGFicmlja3MgYmFja2VuZCBmb3IgdGhpcyBvcGVyYXRpb25cIik7XG59XG5cbmZ1bmN0aW9uIGRlY29kZUJhc2U2NChkYXRhOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBCdWZmZXIge1xuICBpZiAoIWRhdGEpIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gIHJldHVybiBCdWZmZXIuZnJvbShkYXRhLCBcImJhc2U2NFwiKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZFJlc3BvbnNlQm9keShcbiAgY29udGVudHM6IGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4gfCB1bmRlZmluZWQsXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBpZiAoIWNvbnRlbnRzKSByZXR1cm4gQnVmZmVyLmFsbG9jKDApO1xuICBjb25zdCByZWFkZXIgPSBjb250ZW50cy5nZXRSZWFkZXIoKTtcbiAgY29uc3QgY2h1bmtzOiBVaW50OEFycmF5W10gPSBbXTtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgIGlmIChkb25lKSBicmVhaztcbiAgICBpZiAodmFsdWUpIGNodW5rcy5wdXNoKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MubWFwKChjaHVuaykgPT4gQnVmZmVyLmZyb20oY2h1bmspKSk7XG59XG5cbmZ1bmN0aW9uIGJ1ZmZlclRvUmVhZGFibGVTdHJlYW0oYnVmZmVyOiBCdWZmZXIpOiBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+IHtcbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pih7XG4gICAgc3RhcnQoY29udHJvbGxlcikge1xuICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGJ1ZmZlcikpO1xuICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgIH0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB0b0RhdGUodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCk6IERhdGUgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG5ldyBEYXRlKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VIdHRwRGF0ZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gIGlmICghdmFsdWUpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHBhcnNlZCA9IERhdGUucGFyc2UodmFsdWUpO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBuZXcgRGF0ZShwYXJzZWQpIDogdW5kZWZpbmVkO1xufVxuIl19
321
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJyaWNrcy1mcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYnJpY2tzLWZzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFHSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFDTCxjQUFjLEVBQ2QsTUFBTSxFQUNOLGVBQWUsRUFDZixTQUFTLEdBS1YsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2Qiw2QkFBNkIsRUFDN0IscUJBQXFCLEdBRXRCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUV2QyxtRkFBbUY7QUFDbkYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUErQzVCOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxjQUE0QjtJQUM1RCxNQUFNLENBQThCO0lBQzNCLFlBQVksQ0FBOEI7SUFFM0QsWUFBWSxPQUFvQztRQUM5QyxNQUFNLElBQUksR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLEtBQUssQ0FBQztZQUNKLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLGNBQWMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwRCxPQUFPLEVBQUUsWUFBWTtZQUNyQixJQUFJO1lBQ0osUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQzFCLFVBQVUsRUFB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QUFDO0FBQ3JDLENBQUM7QUFFRCxLQUFLLFVBQVUsZ0JBQWdCLENBQzdCLFFBQTJEO0lBRTNELElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNwQyxNQUFNLE1BQU0sR0FBaUIsRUFBRSxDQUFDO0lBQ2hDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDWixNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVDLElBQUksSUFBSTtZQUFFLE1BQU07UUFDaEIsSUFBSSxLQUFLO1lBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLE1BQWM7SUFDNUMsT0FBTyxJQUFJLGNBQWMsQ0FBYTtRQUNwQyxLQUFLLENBQUMsVUFBVTtZQUNkLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMzQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckIsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERhdGFicmlja3Mge0BsaW5rIEZpbGVTeXN0ZW19IGJhY2tlZCBieSB7QGxpbmsgV29ya3NwYWNlQ2xpZW50fS5cbiAqXG4gKiBFeHRlbmRzIHtAbGluayBCYXNlRmlsZVN5c3RlbX0uIFJvdXRlcyBJL08gYnkgYWJzb2x1dGUgcGF0aDpcbiAqIC0gYC9Xb3Jrc3BhY2VgLCBgL1VzZXJzYCwgYC9SZXBvc2AsIGAvU2hhcmVkYCDihpIgd29ya3NwYWNlIG9iamVjdHMgQVBJXG4gKiAtIGAvVm9sdW1lcy8uLi5gIChvciBgY2F0YWxvZy5zY2hlbWEudm9sdW1lYCByb290cykg4oaSIFVuaXR5IENhdGFsb2cgRmlsZXMgQVBJXG4gKiAtIGAvZGJmcy8uLi5gIOKGkiBEQkZTIEFQSVxuICpcbiAqIEV2ZXJ5IHByaW1pdGl2ZSBwaWNrcyBpdHMgQVBJIHRocm91Z2gge0BsaW5rIERhdGFicmlja3NGaWxlU3lzdGVtLmRpc3BhdGNofVxuICogcmF0aGVyIHRoYW4gcmUtYnJhbmNoaW5nIGJ5IGhhbmQsIGFuZCBlcnJvciBub3JtYWxpemF0aW9uIGlzIGluaGVyaXRlZCBmcm9tXG4gKiB7QGxpbmsgQmFzZUZpbGVTeXN0ZW19LCBzbyBhIHByaW1pdGl2ZSBoZXJlIGlzIGp1c3QgdGhlIFNESyBjYWxsLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3Mvc2RrLWV4cGVyaW1lbnRhbFwiO1xuaW1wb3J0IHsgaGFzaCwgb2JqZWN0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIEJhc2VGaWxlU3lzdGVtLFxuICBiYXNlRlMsXG4gIEZpbGVTeXN0ZW1FcnJvcixcbiAgcG9zaXhQYXRoLFxuICB0eXBlIENvcHlPcHRpb25zLFxuICB0eXBlIEZpbGVFbnRyeSxcbiAgdHlwZSBGaWxlU3RhdCxcbiAgdHlwZSBXcml0ZUZpbGVPcHRpb25zLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZnNcIjtcbmltcG9ydCB7XG4gIGlzSG9tZVJlbGF0aXZlUGF0aCxcbiAgbm9ybWFsaXplRGF0YWJyaWNrc1Jvb3QsXG4gIHJlc29sdmVEYXRhYnJpY2tzRmlsZXNCYWNrZW5kLFxuICByZXNvbHZlRGF0YWJyaWNrc1Jvb3QsXG4gIHR5cGUgRGF0YWJyaWNrc0ZpbGVzQmFja2VuZCxcbn0gZnJvbSBcIi4vZGF0YWJyaWNrcy1wYXRoLnRzXCI7XG5pbXBvcnQgeyBnZXRXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiLi93b3Jrc3BhY2UudHNcIjtcblxuY29uc3QgREJGU19SRUFEX0NIVU5LX0JZVEVTID0gMTAyNCAqIDEwMjQ7XG5jb25zdCBEQkZTX1BVVF9NQVhfQllURVMgPSAxMDI0ICogMTAyNDtcblxuLyoqIFNlZ21lbnRzIGluIGAvVm9sdW1lcy88Y2F0YWxvZz4vPHNjaGVtYT4vPHZvbHVtZT5gLCBwcm92aXNpb25lZCBvdXQgb2YgYmFuZC4gKi9cbmNvbnN0IFZPTFVNRV9ST09UX0RFUFRIID0gNDtcblxuLyoqXG4gKiBPbmUgaGFuZGxlciBwZXIgRGF0YWJyaWNrcyBBUEksIGtleWVkIGJ5IHtAbGluayBEYXRhYnJpY2tzRmlsZXNCYWNrZW5kfSBzb1xuICogYWRkaW5nIGEgYmFja2VuZCBpcyBhIGNvbXBpbGUgZXJyb3IgdW50aWwgZXZlcnkgY2FsbCBzaXRlIGhhbmRsZXMgaXQuXG4gKi9cbnR5cGUgQmFja2VuZEhhbmRsZXJzPFQ+ID0gUmVjb3JkPERhdGFicmlja3NGaWxlc0JhY2tlbmQsIChjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCkgPT4gUHJvbWlzZTxUPj47XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgRGF0YWJyaWNrc0ZpbGVTeXN0ZW19LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYnJpY2tzRmlsZVN5c3RlbU9wdGlvbnMge1xuICAvKiogVW5pcXVlIGlkZW50aWZpZXIuIERlZmF1bHRzIHRvIGEgc3RhYmxlIGhhc2ggb2YgdGhlIG5vcm1hbGl6ZWQgcm9vdC4gKi9cbiAgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbGVzeXN0ZW0gcm9vdC4gQWNjZXB0czpcbiAgICogLSBgL1ZvbHVtZXMvY2F0YWxvZy9zY2hlbWEvdm9sdW1lYCAoYWxzbyBgL1ZvbHVtZS8uLi5gKVxuICAgKiAtIGBjYXRhbG9nLnNjaGVtYS52b2x1bWVgXG4gICAqIC0gYH5gIC8gYH4vLi4uYCDihpIgYC9Xb3Jrc3BhY2UvVXNlcnMvPHVzZXJOYW1lPi8uLi5gIChuZWVkcyB7QGxpbmsgdXNlck5hbWV9LFxuICAgKiAgIG9yIHVzZSB7QGxpbmsgRGF0YWJyaWNrc0ZpbGVTeXN0ZW0uY3JlYXRlfSlcbiAgICogLSBgL1dvcmtzcGFjZS8uLi5gLCBgL1VzZXJzLy4uLmAsIGAvUmVwb3MvLi4uYCwgYC9TaGFyZWQvLi4uYFxuICAgKiAtIGAvZGJmcy8uLi5gXG4gICAqL1xuICByb290OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZXJuYW1lIGZvciBleHBhbmRpbmcgYH5gLiBXaGVuIG9taXR0ZWQgYW5kIHtAbGluayByb290fSBpcyBob21lLXJlbGF0aXZlLFxuICAgKiBwcmVmZXIge0BsaW5rIERhdGFicmlja3NGaWxlU3lzdGVtLmNyZWF0ZX0gd2hpY2ggcmVzb2x2ZXMgaXQgdmlhXG4gICAqIGBnZXRDdXJyZW50VXNlck5hbWVgLlxuICAgKi9cbiAgdXNlck5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERhdGFicmlja3Mgd29ya3NwYWNlIGNsaWVudC4gRGVmYXVsdHMgdG8gYHRyeUdldFdvcmtzcGFjZUNsaWVudCgpYCwgb3RoZXJ3aXNlXG4gICAqIGEgZGVmYXVsdCB7QGxpbmsgV29ya3NwYWNlQ2xpZW50fSBmcm9tIGVudiAvIHByb2ZpbGUgYXV0aC5cbiAgICovXG4gIGNsaWVudD86IFdvcmtzcGFjZUNsaWVudDtcblxuICAvKiogQmxvY2sgYWxsIHdyaXRlIG9wZXJhdGlvbnMuIERlZmF1bHRzIHRvIGZhbHNlLiAqL1xuICByZWFkT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB7QGxpbmsgcm9vdH0gKGFuZCBwYXJlbnRzKSBkdXJpbmcgaW5pdC4gRGVmYXVsdHMgdG8gZmFsc2UgKHZvbHVtZVxuICAgKiBhbmQgd29ya3NwYWNlIHJvb3RzIGFyZSB1c3VhbGx5IHByb3Zpc2lvbmVkIG91dCBvZiBiYW5kKS5cbiAgICovXG4gIGNyZWF0ZVJvb3Q/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIHtAbGluayBGaWxlU3lzdGVtfSBpbXBsZW1lbnRhdGlvbiBvdmVyIERhdGFicmlja3Mgd29ya3NwYWNlIGZpbGVzLCBVQ1xuICogdm9sdW1lcywgYW5kIERCRlMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCBmcyA9IG5ldyBEYXRhYnJpY2tzRmlsZVN5c3RlbSh7IHJvb3Q6IFwibWFpbi5kZWZhdWx0LmFzc2V0c1wiIH0pO1xuICogYXdhaXQgZnMud3JpdGVGaWxlKFwibm90ZXMvaGVsbG8udHh0XCIsIFwiaGlcIik7XG4gKlxuICogY29uc3QgaG9tZSA9IGF3YWl0IERhdGFicmlja3NGaWxlU3lzdGVtLmNyZWF0ZSh7IHJvb3Q6IFwiflwiIH0pO1xuICogY29uc3QgbGlzdGluZyA9IGF3YWl0IGhvbWUucmVhZGRpcihcIi5cIik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFicmlja3NGaWxlU3lzdGVtIGV4dGVuZHMgQmFzZUZpbGVTeXN0ZW08XCJkYXRhYnJpY2tzXCI+IHtcbiAgcHJpdmF0ZSBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBjbGllbnRPcHRpb246IFdvcmtzcGFjZUNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBEYXRhYnJpY2tzRmlsZVN5c3RlbU9wdGlvbnMpIHtcbiAgICBjb25zdCByb290ID0gbm9ybWFsaXplRGF0YWJyaWNrc1Jvb3Qob3B0aW9ucy5yb290LCB7IHVzZXJOYW1lOiBvcHRpb25zLnVzZXJOYW1lIH0pO1xuICAgIHN1cGVyKHtcbiAgICAgIGlkOiBvcHRpb25zLmlkID8/IGBkYXRhYnJpY2tzLSR7aGFzaC5mbnZIYXNoKHJvb3QpfWAsXG4gICAgICBiYWNrZW5kOiBcImRhdGFicmlja3NcIixcbiAgICAgIHJvb3QsXG4gICAgICByZWFkT25seTogb3B0aW9ucy5yZWFkT25seSxcbiAgICAgIGNyZWF0ZVJvb3Q6IG9wdGlvbnMuY3JlYXRlUm9vdCA/PyBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLmNsaWVudE9wdGlvbiA9IG9wdGlvbnMuY2xpZW50O1xuICAgIHRoaXMuY2xpZW50ID0gb3B0aW9ucy5jbGllbnQ7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEge0BsaW5rIERhdGFicmlja3NGaWxlU3lzdGVtfSwgcmVzb2x2aW5nIGB+YCByb290cyB2aWEgdGhlXG4gICAqIHdvcmtzcGFjZSBjdXJyZW50IHVzZXIgd2hlbiBuZWVkZWQuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdGlvbnM6IERhdGFicmlja3NGaWxlU3lzdGVtT3B0aW9ucyk6IFByb21pc2U8RGF0YWJyaWNrc0ZpbGVTeXN0ZW0+IHtcbiAgICBpZiAoIWlzSG9tZVJlbGF0aXZlUGF0aChvcHRpb25zLnJvb3QpIHx8IG9wdGlvbnMudXNlck5hbWU/LnRyaW0oKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRhYnJpY2tzRmlsZVN5c3RlbShvcHRpb25zKTtcbiAgICB9XG4gICAgY29uc3QgY2xpZW50ID0gb3B0aW9ucy5jbGllbnQgPz8gKGF3YWl0IGdldFdvcmtzcGFjZUNsaWVudCgpKTtcbiAgICBjb25zdCByb290ID0gYXdhaXQgcmVzb2x2ZURhdGFicmlja3NSb290KG9wdGlvbnMucm9vdCwgeyBjbGllbnQgfSk7XG4gICAgcmV0dXJuIG5ldyBEYXRhYnJpY2tzRmlsZVN5c3RlbSh7IC4uLm9wdGlvbnMsIHJvb3QsIGNsaWVudCB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBvbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jbGllbnQgPSB0aGlzLmNsaWVudE9wdGlvbiA/PyAoYXdhaXQgZ2V0V29ya3NwYWNlQ2xpZW50KCkpO1xuICB9XG5cbiAgLyoqIFJ1biB0aGUgaGFuZGxlciBmb3IgYGFic29sdXRlUGF0aGAncyBEYXRhYnJpY2tzIEFQSSB3aXRoIHRoZSBsaXZlIGNsaWVudC4gKi9cbiAgcHJpdmF0ZSBkaXNwYXRjaDxUPihhYnNvbHV0ZVBhdGg6IHN0cmluZywgaGFuZGxlcnM6IEJhY2tlbmRIYW5kbGVyczxUPik6IFByb21pc2U8VD4ge1xuICAgIGlmICghdGhpcy5jbGllbnQpIHtcbiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXJyb3IoXG4gICAgICAgIFwiSU9fRVJST1JcIixcbiAgICAgICAgXCJEYXRhYnJpY2tzIGZpbGVzeXN0ZW0gaXMgbm90IGluaXRpYWxpemVkIChubyBXb3Jrc3BhY2VDbGllbnQpXCIsXG4gICAgICAgIGFic29sdXRlUGF0aCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBoYW5kbGVyc1tyZXNvbHZlRGF0YWJyaWNrc0ZpbGVzQmFja2VuZChhYnNvbHV0ZVBhdGgpXSh0aGlzLmNsaWVudCk7XG4gIH1cblxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgLyogUHJpbWl0aXZlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBjcmVhdGVSb290RGlyZWN0b3J5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY3JlYXRlRGlyZWN0b3J5QXQodGhpcy5yb290KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyByZWFkQnl0ZXNBdChyZXNvbHZlZFBhdGg6IHN0cmluZyk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMuZGlzcGF0Y2g8QnVmZmVyPihyZXNvbHZlZFBhdGgsIHtcbiAgICAgIGRiZnM6IChjbGllbnQpID0+IHRoaXMucmVhZERiZnNGaWxlKGNsaWVudCwgcmVzb2x2ZWRQYXRoKSxcbiAgICAgIHdvcmtzcGFjZTogYXN5bmMgKGNsaWVudCkgPT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC53b3Jrc3BhY2UuZXhwb3J0KHsgcGF0aDogcmVzb2x2ZWRQYXRoLCBmb3JtYXQ6IFwiQVVUT1wiIH0pO1xuICAgICAgICByZXR1cm4gZGVjb2RlQmFzZTY0KHJlc3BvbnNlLmNvbnRlbnQpO1xuICAgICAgfSxcbiAgICAgIHZvbHVtZXM6IGFzeW5jIChjbGllbnQpID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZmlsZXMuZG93bmxvYWQoeyBmaWxlX3BhdGg6IHJlc29sdmVkUGF0aCB9KTtcbiAgICAgICAgcmV0dXJuIHJlYWRSZXNwb25zZUJvZHkoXG4gICAgICAgICAgcmVzcG9uc2UuY29udGVudHMgYXMgZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5PiB8IHVuZGVmaW5lZCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgd3JpdGVCeXRlc0F0KFxuICAgIHJlc29sdmVkUGF0aDogc3RyaW5nLFxuICAgIGNvbnRlbnQ6IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9uczogUmVxdWlyZWQ8V3JpdGVGaWxlT3B0aW9ucz4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGNvbnRlbnQpO1xuICAgIGNvbnN0IG92ZXJ3cml0ZSA9IG9wdGlvbnMub3ZlcndyaXRlO1xuICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2g8dW5rbm93bj4ocmVzb2x2ZWRQYXRoLCB7XG4gICAgICBkYmZzOiAoY2xpZW50KSA9PiB0aGlzLndyaXRlRGJmc0ZpbGUoY2xpZW50LCByZXNvbHZlZFBhdGgsIGJ1ZmZlciwgb3ZlcndyaXRlKSxcbiAgICAgIHdvcmtzcGFjZTogKGNsaWVudCkgPT5cbiAgICAgICAgY2xpZW50LndvcmtzcGFjZS5pbXBvcnQoe1xuICAgICAgICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgICBmb3JtYXQ6IFwiQVVUT1wiLFxuICAgICAgICAgIGNvbnRlbnQ6IGJ1ZmZlci50b1N0cmluZyhcImJhc2U2NFwiKSxcbiAgICAgICAgICBvdmVyd3JpdGUsXG4gICAgICAgIH0pLFxuICAgICAgdm9sdW1lczogKGNsaWVudCkgPT5cbiAgICAgICAgY2xpZW50LmZpbGVzLnVwbG9hZCh7XG4gICAgICAgICAgZmlsZV9wYXRoOiByZXNvbHZlZFBhdGgsXG4gICAgICAgICAgY29udGVudHM6IGJ1ZmZlclRvUmVhZGFibGVTdHJlYW0oYnVmZmVyKSBhcyBuZXZlcixcbiAgICAgICAgICBvdmVyd3JpdGUsXG4gICAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGRlbGV0ZUZpbGVBdChyZXNvbHZlZFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2g8dW5rbm93bj4ocmVzb2x2ZWRQYXRoLCB7XG4gICAgICBkYmZzOiAoY2xpZW50KSA9PiBjbGllbnQuZGJmcy5kZWxldGUoeyBwYXRoOiByZXNvbHZlZFBhdGgsIHJlY3Vyc2l2ZTogZmFsc2UgfSksXG4gICAgICB3b3Jrc3BhY2U6IChjbGllbnQpID0+IGNsaWVudC53b3Jrc3BhY2UuZGVsZXRlKHsgcGF0aDogcmVzb2x2ZWRQYXRoLCByZWN1cnNpdmU6IGZhbHNlIH0pLFxuICAgICAgdm9sdW1lczogKGNsaWVudCkgPT4gY2xpZW50LmZpbGVzLmRlbGV0ZSh7IGZpbGVfcGF0aDogcmVzb2x2ZWRQYXRoIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZURpcmVjdG9yeUF0KHJlc29sdmVkUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5kaXNwYXRjaDx1bmtub3duPihyZXNvbHZlZFBhdGgsIHtcbiAgICAgIGRiZnM6IChjbGllbnQpID0+IGNsaWVudC5kYmZzLm1rZGlycyh7IHBhdGg6IHJlc29sdmVkUGF0aCB9KSxcbiAgICAgIHdvcmtzcGFjZTogKGNsaWVudCkgPT4gY2xpZW50LndvcmtzcGFjZS5ta2RpcnMoeyBwYXRoOiByZXNvbHZlZFBhdGggfSksXG4gICAgICB2b2x1bWVzOiAoY2xpZW50KSA9PiB0aGlzLmNyZWF0ZVZvbHVtZURpcmVjdG9yaWVzKGNsaWVudCwgcmVzb2x2ZWRQYXRoKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyByZW1vdmVEaXJlY3RvcnlBdChyZXNvbHZlZFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2g8dW5rbm93bj4ocmVzb2x2ZWRQYXRoLCB7XG4gICAgICBkYmZzOiAoY2xpZW50KSA9PiBjbGllbnQuZGJmcy5kZWxldGUoeyBwYXRoOiByZXNvbHZlZFBhdGgsIHJlY3Vyc2l2ZTogZmFsc2UgfSksXG4gICAgICB3b3Jrc3BhY2U6IChjbGllbnQpID0+IGNsaWVudC53b3Jrc3BhY2UuZGVsZXRlKHsgcGF0aDogcmVzb2x2ZWRQYXRoLCByZWN1cnNpdmU6IGZhbHNlIH0pLFxuICAgICAgdm9sdW1lczogKGNsaWVudCkgPT4gY2xpZW50LmZpbGVzLmRlbGV0ZURpcmVjdG9yeSh7IGRpcmVjdG9yeV9wYXRoOiByZXNvbHZlZFBhdGggfSksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgbGlzdERpcmVjdG9yeUF0KHJlc29sdmVkUGF0aDogc3RyaW5nKTogUHJvbWlzZTxGaWxlRW50cnlbXT4ge1xuICAgIHJldHVybiB0aGlzLmRpc3BhdGNoPEZpbGVFbnRyeVtdPihyZXNvbHZlZFBhdGgsIHtcbiAgICAgIGRiZnM6IChjbGllbnQpID0+XG4gICAgICAgIGNvbGxlY3QoY2xpZW50LmRiZnMubGlzdCh7IHBhdGg6IHJlc29sdmVkUGF0aCB9KSwgKGluZm8pID0+ICh7XG4gICAgICAgICAgbmFtZTogcG9zaXhQYXRoLmJhc2VuYW1lKGluZm8ucGF0aCA/PyBcIlwiKSxcbiAgICAgICAgICB0eXBlOiBpbmZvLmlzX2RpciA/IFwiZGlyZWN0b3J5XCIgOiBcImZpbGVcIixcbiAgICAgICAgICBzaXplOiBpbmZvLmZpbGVfc2l6ZSxcbiAgICAgICAgfSkpLFxuICAgICAgd29ya3NwYWNlOiAoY2xpZW50KSA9PlxuICAgICAgICBjb2xsZWN0KGNsaWVudC53b3Jrc3BhY2UubGlzdCh7IHBhdGg6IHJlc29sdmVkUGF0aCB9KSwgKGluZm8pID0+ICh7XG4gICAgICAgICAgbmFtZTogcG9zaXhQYXRoLmJhc2VuYW1lKGluZm8ucGF0aCA/PyBcIlwiKSxcbiAgICAgICAgICB0eXBlOiBpbmZvLm9iamVjdF90eXBlID09PSBcIkRJUkVDVE9SWVwiID8gXCJkaXJlY3RvcnlcIiA6IFwiZmlsZVwiLFxuICAgICAgICB9KSksXG4gICAgICB2b2x1bWVzOiAoY2xpZW50KSA9PlxuICAgICAgICBjb2xsZWN0KGNsaWVudC5maWxlcy5saXN0RGlyZWN0b3J5Q29udGVudHMoeyBkaXJlY3RvcnlfcGF0aDogcmVzb2x2ZWRQYXRoIH0pLCAoZW50cnkpID0+ICh7XG4gICAgICAgICAgbmFtZTogZW50cnkubmFtZSA/PyBwb3NpeFBhdGguYmFzZW5hbWUoZW50cnkucGF0aCA/PyBcIlwiKSxcbiAgICAgICAgICB0eXBlOiBlbnRyeS5pc19kaXJlY3RvcnkgPyBcImRpcmVjdG9yeVwiIDogXCJmaWxlXCIsXG4gICAgICAgICAgc2l6ZTogZW50cnkuZmlsZV9zaXplLFxuICAgICAgICB9KSksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgc3RhdEF0KHJlc29sdmVkUGF0aDogc3RyaW5nKTogUHJvbWlzZTxPbWl0PEZpbGVTdGF0LCBcInBhdGhcIj4+IHtcbiAgICBjb25zdCBmYWxsYmFja05hbWUgPSBwb3NpeFBhdGguYmFzZW5hbWUocmVzb2x2ZWRQYXRoKSB8fCBwb3NpeFBhdGguYmFzZW5hbWUodGhpcy5yb290KTtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaDxPbWl0PEZpbGVTdGF0LCBcInBhdGhcIj4+KHJlc29sdmVkUGF0aCwge1xuICAgICAgZGJmczogYXN5bmMgKGNsaWVudCkgPT4ge1xuICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgY2xpZW50LmRiZnMuZ2V0U3RhdHVzKHsgcGF0aDogcmVzb2x2ZWRQYXRoIH0pO1xuICAgICAgICBjb25zdCBtb2RpZmllZCA9IG9iamVjdC50b0RhdGUoaW5mby5tb2RpZmljYXRpb25fdGltZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogcG9zaXhQYXRoLmJhc2VuYW1lKGluZm8ucGF0aCA/PyByZXNvbHZlZFBhdGgpIHx8IGZhbGxiYWNrTmFtZSxcbiAgICAgICAgICB0eXBlOiBpbmZvLmlzX2RpciA/IFwiZGlyZWN0b3J5XCIgOiBcImZpbGVcIixcbiAgICAgICAgICBzaXplOiBpbmZvLmZpbGVfc2l6ZSxcbiAgICAgICAgICBjcmVhdGVkQXQ6IG1vZGlmaWVkLFxuICAgICAgICAgIG1vZGlmaWVkQXQ6IG1vZGlmaWVkLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHdvcmtzcGFjZTogYXN5bmMgKGNsaWVudCkgPT4ge1xuICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgY2xpZW50LndvcmtzcGFjZS5nZXRTdGF0dXMoeyBwYXRoOiByZXNvbHZlZFBhdGggfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogcG9zaXhQYXRoLmJhc2VuYW1lKGluZm8ucGF0aCA/PyByZXNvbHZlZFBhdGgpIHx8IGZhbGxiYWNrTmFtZSxcbiAgICAgICAgICB0eXBlOiBpbmZvLm9iamVjdF90eXBlID09PSBcIkRJUkVDVE9SWVwiID8gXCJkaXJlY3RvcnlcIiA6IFwiZmlsZVwiLFxuICAgICAgICAgIGNyZWF0ZWRBdDogb2JqZWN0LnRvRGF0ZShpbmZvLmNyZWF0ZWRfYXQpLFxuICAgICAgICAgIG1vZGlmaWVkQXQ6IG9iamVjdC50b0RhdGUoaW5mby5tb2RpZmllZF9hdCksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgdm9sdW1lczogKGNsaWVudCkgPT4gdGhpcy5zdGF0Vm9sdW1lUGF0aChjbGllbnQsIHJlc29sdmVkUGF0aCwgZmFsbGJhY2tOYW1lKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB0cnlNb3ZlRmlsZUF0KFxuICAgIHNvdXJjZVBhdGg6IHN0cmluZyxcbiAgICBkZXN0aW5hdGlvblBhdGg6IHN0cmluZyxcbiAgICBfb3B0aW9uczogUmVxdWlyZWQ8Q29weU9wdGlvbnM+LFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBPbmx5IERCRlMgZXhwb3NlcyBhIHNlcnZlci1zaWRlIG1vdmU7IGV2ZXJ5dGhpbmcgZWxzZSBmYWxscyBiYWNrIHRvIHRoZVxuICAgIC8vIHBvcnRhYmxlIGNvcHkgKyBkZWxldGUgaW4gQmFzZUZpbGVTeXN0ZW0uXG4gICAgaWYgKFxuICAgICAgcmVzb2x2ZURhdGFicmlja3NGaWxlc0JhY2tlbmQoc291cmNlUGF0aCkgIT09IFwiZGJmc1wiIHx8XG4gICAgICByZXNvbHZlRGF0YWJyaWNrc0ZpbGVzQmFja2VuZChkZXN0aW5hdGlvblBhdGgpICE9PSBcImRiZnNcIlxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmRpc3BhdGNoPHVua25vd24+KHNvdXJjZVBhdGgsIHtcbiAgICAgIGRiZnM6IChjbGllbnQpID0+XG4gICAgICAgIGNsaWVudC5kYmZzLm1vdmUoeyBzb3VyY2VfcGF0aDogc291cmNlUGF0aCwgZGVzdGluYXRpb25fcGF0aDogZGVzdGluYXRpb25QYXRoIH0pLFxuICAgICAgd29ya3NwYWNlOiB1bnJlYWNoYWJsZUJhY2tlbmQsXG4gICAgICB2b2x1bWVzOiB1bnJlYWNoYWJsZUJhY2tlbmQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgLyogQmFja2VuZC1zcGVjaWZpYyBJL08gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4gIC8qKlxuICAgKiBVQyBgY3JlYXRlRGlyZWN0b3J5YCBpcyBzaW5nbGUtbGV2ZWwsIHNvIHdhbGsgdGhlIHBhdGggY3JlYXRpbmcgZWFjaCBsZXZlbFxuICAgKiBiZWxvdyB0aGUgdm9sdW1lIGl0c2VsZi4gQSBsZXZlbCB0aGF0IGFscmVhZHkgZXhpc3RzIGlzIG5vdCBhbiBlcnJvci5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlVm9sdW1lRGlyZWN0b3JpZXMoXG4gICAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4gICAgYWJzb2x1dGVQYXRoOiBzdHJpbmcsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcnRzID0gYWJzb2x1dGVQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgbGV0IGN1cnJlbnQgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGN1cnJlbnQgPSBgJHtjdXJyZW50fS8ke3BhcnRzW2ldfWA7XG4gICAgICBpZiAoaSA8IFZPTFVNRV9ST09UX0RFUFRIKSBjb250aW51ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGNsaWVudC5maWxlcy5jcmVhdGVEaXJlY3RvcnkoeyBkaXJlY3RvcnlfcGF0aDogY3VycmVudCB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBBbHJlYWR5IHByZXNlbnQgaXMgZmluZTsgYW55dGhpbmcgZWxzZSBpcyBhIHJlYWwgZmFpbHVyZS5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBjbGllbnQuZmlsZXMuZ2V0RGlyZWN0b3J5TWV0YWRhdGEoeyBkaXJlY3RvcnlfcGF0aDogY3VycmVudCB9KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFN0YXQgYSBVQyBwYXRoOiBmaWxlIG1ldGFkYXRhIGZpcnN0LCB0aGVuIGEgZGlyZWN0b3J5IHByb2JlLiAqL1xuICBwcml2YXRlIGFzeW5jIHN0YXRWb2x1bWVQYXRoKFxuICAgIGNsaWVudDogV29ya3NwYWNlQ2xpZW50LFxuICAgIGFic29sdXRlUGF0aDogc3RyaW5nLFxuICAgIGZhbGxiYWNrTmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPE9taXQ8RmlsZVN0YXQsIFwicGF0aFwiPj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IGNsaWVudC5maWxlcy5nZXRNZXRhZGF0YSh7IGZpbGVfcGF0aDogYWJzb2x1dGVQYXRoIH0pO1xuICAgICAgY29uc3QgbW9kaWZpZWQgPSBvYmplY3QudG9EYXRlKG1ldGFkYXRhW1wibGFzdC1tb2RpZmllZFwiXSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBmYWxsYmFja05hbWUsXG4gICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICBzaXplOiBOdW1iZXIobWV0YWRhdGFbXCJjb250ZW50LWxlbmd0aFwiXSA/PyAwKSxcbiAgICAgICAgY3JlYXRlZEF0OiBtb2RpZmllZCxcbiAgICAgICAgbW9kaWZpZWRBdDogbW9kaWZpZWQsXG4gICAgICAgIG1pbWVUeXBlOiBtZXRhZGF0YVtcImNvbnRlbnQtdHlwZVwiXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZmlsZUVycikge1xuICAgICAgLy8gQSBkaXJlY3RvcnkgaGFzIG5vIGZpbGUgbWV0YWRhdGEsIGFuZCBhbiB1bnJlYWRhYmxlIG9uZSByZXBvcnRzIGFzXG4gICAgICAvLyBtaXNzaW5nIC8gZGVuaWVkIC0gYm90aCBhcmUgd29ydGggYSBkaXJlY3RvcnkgcHJvYmUgYmVmb3JlIGZhaWxpbmcuXG4gICAgICBjb25zdCBjb2RlID0gYmFzZUZTLm1hcEZpbGVTeXN0ZW1FcnJvcihmaWxlRXJyLCBhYnNvbHV0ZVBhdGgpLmNvZGU7XG4gICAgICBpZiAoY29kZSAhPT0gXCJOT1RfRk9VTkRcIiAmJiBjb2RlICE9PSBcIlBFUk1JU1NJT05fREVOSUVEXCIpIHRocm93IGZpbGVFcnI7XG4gICAgICBhd2FpdCBjbGllbnQuZmlsZXMuZ2V0RGlyZWN0b3J5TWV0YWRhdGEoeyBkaXJlY3RvcnlfcGF0aDogYWJzb2x1dGVQYXRoIH0pO1xuICAgICAgcmV0dXJuIHsgbmFtZTogZmFsbGJhY2tOYW1lLCB0eXBlOiBcImRpcmVjdG9yeVwiIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWFkRGJmc0ZpbGUoY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsIGFic29sdXRlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmRiZnMucmVhZCh7XG4gICAgICAgIHBhdGg6IGFic29sdXRlUGF0aCxcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBsZW5ndGg6IERCRlNfUkVBRF9DSFVOS19CWVRFUyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2h1bmsgPSBkZWNvZGVCYXNlNjQocmVzcG9uc2UuZGF0YSk7XG4gICAgICBpZiAoY2h1bmsubGVuZ3RoID09PSAwKSBicmVhaztcbiAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgIG9mZnNldCArPSBjaHVuay5sZW5ndGg7XG4gICAgICBpZiAoY2h1bmsubGVuZ3RoIDwgREJGU19SRUFEX0NIVU5LX0JZVEVTKSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd3JpdGVEYmZzRmlsZShcbiAgICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCxcbiAgICBhYnNvbHV0ZVBhdGg6IHN0cmluZyxcbiAgICBidWZmZXI6IEJ1ZmZlcixcbiAgICBvdmVyd3JpdGU6IGJvb2xlYW4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChidWZmZXIubGVuZ3RoIDw9IERCRlNfUFVUX01BWF9CWVRFUykge1xuICAgICAgYXdhaXQgY2xpZW50LmRiZnMucHV0KHtcbiAgICAgICAgcGF0aDogYWJzb2x1dGVQYXRoLFxuICAgICAgICBjb250ZW50czogYnVmZmVyLnRvU3RyaW5nKFwiYmFzZTY0XCIpLFxuICAgICAgICBvdmVyd3JpdGUsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3JlYXRlZCA9IGF3YWl0IGNsaWVudC5kYmZzLmNyZWF0ZSh7IHBhdGg6IGFic29sdXRlUGF0aCwgb3ZlcndyaXRlIH0pO1xuICAgIGNvbnN0IGhhbmRsZSA9IGNyZWF0ZWQuaGFuZGxlO1xuICAgIGlmIChoYW5kbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FcnJvcihcIklPX0VSUk9SXCIsIFwiREJGUyB1cGxvYWQgaGFuZGxlIG1pc3NpbmdcIiwgYWJzb2x1dGVQYXRoKTtcbiAgICB9XG4gICAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgYnVmZmVyLmxlbmd0aDsgb2Zmc2V0ICs9IERCRlNfUFVUX01BWF9CWVRFUykge1xuICAgICAgY29uc3Qgc2xpY2UgPSBidWZmZXIuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBEQkZTX1BVVF9NQVhfQllURVMpO1xuICAgICAgYXdhaXQgY2xpZW50LmRiZnMuYWRkQmxvY2soeyBoYW5kbGUsIGRhdGE6IHNsaWNlLnRvU3RyaW5nKFwiYmFzZTY0XCIpIH0pO1xuICAgIH1cbiAgICBhd2FpdCBjbGllbnQuZGJmcy5jbG9zZSh7IGhhbmRsZSB9KTtcbiAgfVxufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqIERyYWluIGFuIFNESyBhc3luYyBpdGVyYWJsZSBpbnRvIGEgbWFwcGVkIGFycmF5LiAqL1xuYXN5bmMgZnVuY3Rpb24gY29sbGVjdDxTLCBUPihzb3VyY2U6IEFzeW5jSXRlcmFibGU8Uz4sIG1hcDogKGl0ZW06IFMpID0+IFQpOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCBpdGVtczogVFtdID0gW107XG4gIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiBzb3VyY2UpIGl0ZW1zLnB1c2gobWFwKGl0ZW0pKTtcbiAgcmV0dXJuIGl0ZW1zO1xufVxuXG4vKiogSGFuZGxlciBmb3IgYSBiYWNrZW5kIGEgY2FsbCBzaXRlIGhhcyBhbHJlYWR5IHJ1bGVkIG91dC4gKi9cbmZ1bmN0aW9uIHVucmVhY2hhYmxlQmFja2VuZCgpOiBQcm9taXNlPG5ldmVyPiB7XG4gIHRocm93IG5ldyBGaWxlU3lzdGVtRXJyb3IoXCJOT1RfU1VQUE9SVEVEXCIsIFwiVW5zdXBwb3J0ZWQgRGF0YWJyaWNrcyBiYWNrZW5kIGZvciB0aGlzIG9wZXJhdGlvblwiKTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlQmFzZTY0KGRhdGE6IHN0cmluZyB8IHVuZGVmaW5lZCk6IEJ1ZmZlciB7XG4gIGlmICghZGF0YSkgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGRhdGEsIFwiYmFzZTY0XCIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUmVzcG9uc2VCb2R5KFxuICBjb250ZW50czogZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5PiB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8QnVmZmVyPiB7XG4gIGlmICghY29udGVudHMpIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gIGNvbnN0IHJlYWRlciA9IGNvbnRlbnRzLmdldFJlYWRlcigpO1xuICBjb25zdCBjaHVua3M6IFVpbnQ4QXJyYXlbXSA9IFtdO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgaWYgKGRvbmUpIGJyZWFrO1xuICAgIGlmICh2YWx1ZSkgY2h1bmtzLnB1c2godmFsdWUpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcy5tYXAoKGNodW5rKSA9PiBCdWZmZXIuZnJvbShjaHVuaykpKTtcbn1cblxuZnVuY3Rpb24gYnVmZmVyVG9SZWFkYWJsZVN0cmVhbShidWZmZXI6IEJ1ZmZlcik6IGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4ge1xuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+KHtcbiAgICBzdGFydChjb250cm9sbGVyKSB7XG4gICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSk7XG4gICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
package/package.json CHANGED
@@ -24,10 +24,10 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@databricks/sdk-experimental": "^0.17.0",
27
- "@dbx-tools/appkit": "0.6.51",
28
- "@dbx-tools/core": "0.6.51",
29
- "@dbx-tools/shared-core": "0.6.51",
30
- "@dbx-tools/shared-fs": "0.6.51"
27
+ "@dbx-tools/appkit": "0.6.53",
28
+ "@dbx-tools/core": "0.6.53",
29
+ "@dbx-tools/shared-core": "0.6.53",
30
+ "@dbx-tools/shared-fs": "0.6.53"
31
31
  },
32
32
  "main": "./lib/index.js",
33
33
  "license": "UNLICENSED",
@@ -43,7 +43,7 @@
43
43
  "./package.json": "./package.json"
44
44
  }
45
45
  },
46
- "version": "0.6.51",
46
+ "version": "0.6.53",
47
47
  "types": "./lib/index.d.ts",
48
48
  "type": "module",
49
49
  "exports": {
@@ -14,7 +14,7 @@
14
14
  */
15
15
 
16
16
  import { WorkspaceClient } from "@databricks/sdk-experimental";
17
- import { hash } from "@dbx-tools/shared-core";
17
+ import { hash, object } from "@dbx-tools/shared-core";
18
18
  import {
19
19
  BaseFileSystem,
20
20
  baseFS,
@@ -245,7 +245,7 @@ export class DatabricksFileSystem extends BaseFileSystem<"databricks"> {
245
245
  return this.dispatch<Omit<FileStat, "path">>(resolvedPath, {
246
246
  dbfs: async (client) => {
247
247
  const info = await client.dbfs.getStatus({ path: resolvedPath });
248
- const modified = toDate(info.modification_time);
248
+ const modified = object.toDate(info.modification_time);
249
249
  return {
250
250
  name: posixPath.basename(info.path ?? resolvedPath) || fallbackName,
251
251
  type: info.is_dir ? "directory" : "file",
@@ -259,8 +259,8 @@ export class DatabricksFileSystem extends BaseFileSystem<"databricks"> {
259
259
  return {
260
260
  name: posixPath.basename(info.path ?? resolvedPath) || fallbackName,
261
261
  type: info.object_type === "DIRECTORY" ? "directory" : "file",
262
- createdAt: toDate(info.created_at),
263
- modifiedAt: toDate(info.modified_at),
262
+ createdAt: object.toDate(info.created_at),
263
+ modifiedAt: object.toDate(info.modified_at),
264
264
  };
265
265
  },
266
266
  volumes: (client) => this.statVolumePath(client, resolvedPath, fallbackName),
@@ -327,7 +327,7 @@ export class DatabricksFileSystem extends BaseFileSystem<"databricks"> {
327
327
  ): Promise<Omit<FileStat, "path">> {
328
328
  try {
329
329
  const metadata = await client.files.getMetadata({ file_path: absolutePath });
330
- const modified = parseHttpDate(metadata["last-modified"]);
330
+ const modified = object.toDate(metadata["last-modified"]);
331
331
  return {
332
332
  name: fallbackName,
333
333
  type: "file",
@@ -432,13 +432,3 @@ function bufferToReadableStream(buffer: Buffer): globalThis.ReadableStream<Uint8
432
432
  },
433
433
  });
434
434
  }
435
-
436
- function toDate(value: number | undefined): Date | undefined {
437
- return value === undefined ? undefined : new Date(value);
438
- }
439
-
440
- function parseHttpDate(value: string | undefined): Date | undefined {
441
- if (!value) return undefined;
442
- const parsed = Date.parse(value);
443
- return Number.isFinite(parsed) ? new Date(parsed) : undefined;
444
- }