velocious 1.0.349 → 1.0.350

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -293,13 +293,6 @@ import FrontendModelBaseResource from "velocious/build/src/frontend-model-resour
293
293
  class UserResource extends FrontendModelBaseResource {
294
294
  static resourceConfig() {
295
295
  return {
296
- abilities: {
297
- create: "create",
298
- destroy: "destroy",
299
- find: "read",
300
- index: "read",
301
- update: "update"
302
- },
303
296
  attributes: ["id", "name", "email"],
304
297
  relationships: {
305
298
  projects: {type: "hasMany", model: "Project"}
@@ -323,6 +316,15 @@ export default new Configuration({
323
316
 
324
317
  `frontendModels` entries must be `FrontendModelBaseResource` subclasses. Built-in CRUD/find/index/serialize behavior lives in the base class, and app resources override only the pieces they actually need.
325
318
 
319
+ Resources expose the full CRUD ability set (`create`, `destroy`, `read`, `update`) by default. To restrict the API surface — for example to a read-only resource — declare an explicit subset:
320
+
321
+ ```js
322
+ class AuditLogResource extends FrontendModelBaseResource {
323
+ static abilities = ["read"]
324
+ static attributes = ["id", "message", "createdAt"]
325
+ }
326
+ ```
327
+
326
328
  Generate classes:
327
329
 
328
330
  ```bash
@@ -1 +1 @@
1
- {"version":3,"file":"resource-definition.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/resource-definition.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wEAHW,OAAO,2BAA2B,EAAE,2BAA2B,GAC7D,MAAM,CAAC,MAAM,EAAE,OAAO,yBAAyB,CAAC,CAc5D;AAED;;;GAGG;AACH,8DAHW,OAAO,GACL,KAAK,IAAI,OAAO,yBAAyB,CAIrD;AAED;;;GAGG;AACH,6EAHW,OAAO,GACL,OAAO,yBAAyB,GAAG,IAAI,CAInD;AAED;;;GAGG;AACH,qFAHW,OAAO,GACL,OAAO,2BAA2B,EAAE,4CAA4C,GAAG,IAAI,CAMnG;AAuLD;;;;GAIG;AACH,qDAJW,MAAM,sBACN,OAAO,GACL,MAAM,CAUlB;AAED;;;;;;GAMG;AACH,8FALG;IAAqB,WAAW,EAAxB,MAAM;IACO,SAAS,EAAtB,MAAM;IACQ,kBAAkB,EAAhC,OAAO;CACf,GAAU,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,GAAG,IAAI,CA2BrG;AAED;;;;;GAKG;AACH,oFAJG;IAAgF,eAAe,EAAvF,OAAO,2BAA2B,EAAE,2BAA2B,EAAE;IACpD,WAAW,EAAxB,MAAM;CACd,GAAU;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,GAAG,QAAQ,CAAA;CAAC,GAAG,IAAI,CA8DxJ;sCAxVqC,6CAA6C"}
1
+ {"version":3,"file":"resource-definition.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/resource-definition.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wEAHW,OAAO,2BAA2B,EAAE,2BAA2B,GAC7D,MAAM,CAAC,MAAM,EAAE,OAAO,yBAAyB,CAAC,CAc5D;AAED;;;GAGG;AACH,8DAHW,OAAO,GACL,KAAK,IAAI,OAAO,yBAAyB,CAIrD;AAED;;;GAGG;AACH,6EAHW,OAAO,GACL,OAAO,yBAAyB,GAAG,IAAI,CAInD;AAED;;;GAGG;AACH,qFAHW,OAAO,GACL,OAAO,2BAA2B,EAAE,4CAA4C,GAAG,IAAI,CAMnG;AAkMD;;;;GAIG;AACH,qDAJW,MAAM,sBACN,OAAO,GACL,MAAM,CAUlB;AAED;;;;;;GAMG;AACH,8FALG;IAAqB,WAAW,EAAxB,MAAM;IACO,SAAS,EAAtB,MAAM;IACQ,kBAAkB,EAAhC,OAAO;CACf,GAAU,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,GAAG,IAAI,CA2BrG;AAED;;;;;GAKG;AACH,oFAJG;IAAgF,eAAe,EAAvF,OAAO,2BAA2B,EAAE,2BAA2B,EAAE;IACpD,WAAW,EAAxB,MAAM;CACd,GAAU;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,GAAG,QAAQ,CAAA;CAAC,GAAG,IAAI,CA8DxJ;sCAnWqC,6CAA6C"}
@@ -78,22 +78,23 @@ function normalizeFrontendModelResourceConfiguration(resourceConfiguration) {
78
78
  * @returns {Record<string, string>} - Normalized abilities config.
79
79
  */
80
80
  function normalizeFrontendModelResourceAbilities(abilities) {
81
- if (!abilities) {
82
- return { find: "read", index: "read" };
81
+ if (abilities === undefined) {
82
+ return defaultCrudAbilities();
83
83
  }
84
84
  if (!Array.isArray(abilities)) {
85
85
  throw new Error("Resource abilities must be an array of action names. Object form is no longer supported.");
86
86
  }
87
- /** @type {Record<string, string>} */
88
- const normalized = {};
89
87
  if (abilities.includes("manage")) {
90
- normalized.create = "manage";
91
- normalized.destroy = "manage";
92
- normalized.find = "manage";
93
- normalized.index = "manage";
94
- normalized.update = "manage";
95
- return normalized;
88
+ return {
89
+ create: "manage",
90
+ destroy: "manage",
91
+ find: "manage",
92
+ index: "manage",
93
+ update: "manage"
94
+ };
96
95
  }
96
+ /** @type {Record<string, string>} */
97
+ const normalized = {};
97
98
  if (abilities.includes("create"))
98
99
  normalized.create = "create";
99
100
  if (abilities.includes("destroy"))
@@ -106,6 +107,16 @@ function normalizeFrontendModelResourceAbilities(abilities) {
106
107
  normalized.update = "update";
107
108
  return normalized;
108
109
  }
110
+ /** @returns {Record<string, string>} - Default CRUD ability map. */
111
+ function defaultCrudAbilities() {
112
+ return {
113
+ create: "create",
114
+ destroy: "destroy",
115
+ find: "read",
116
+ index: "read",
117
+ update: "update"
118
+ };
119
+ }
109
120
  /**
110
121
  * @param {import("../configuration-types.js").FrontendModelResourceConfiguration} resourceConfiguration - Raw resource configuration.
111
122
  * @returns {{builtInCollectionCommands: Record<string, string>, builtInMemberCommands: Record<string, string>, collectionCommands: Record<string, string>, memberCommands: Record<string, string>}} - Normalized command configuration.
@@ -305,4 +316,4 @@ function normalizeFrontendModelResourcePathForMatch(path) {
305
316
  }
306
317
  return withLeadingSlash;
307
318
  }
308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZC1tb2RlbHMvcmVzb3VyY2UtZGVmaW5pdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyx5QkFBeUIsTUFBTSw2Q0FBNkMsQ0FBQTtBQUNuRixPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUN2RCxPQUFPLEVBQUMsd0NBQXdDLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQTtBQUV4Rjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsdUNBQXVDLENBQUMsY0FBYztJQUNwRSxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsY0FBYyxDQUFBO0lBRS9DLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUN6RixDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELE9BQU8sRUFBRSxDQUFBO0FBQ1gsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxzQ0FBc0MsQ0FBQyxLQUFLO0lBQzFELE9BQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxJQUFJLENBQUMsS0FBSyxLQUFLLHlCQUF5QixJQUFJLEtBQUssQ0FBQyxTQUFTLFlBQVkseUJBQXlCLENBQUMsQ0FBQTtBQUNySSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHdDQUF3QyxDQUFDLGtCQUFrQjtJQUN6RSxPQUFPLHNDQUFzQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFDL0YsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxnREFBZ0QsQ0FBQyxrQkFBa0I7SUFDakYsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLGtCQUFrQixDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFNUUsT0FBTywyQ0FBMkMsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFBO0FBQ3pGLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLDJDQUEyQyxDQUFDLHFCQUFxQjtJQUN4RSxNQUFNLFFBQVEsR0FBRyxrQ0FBa0MsQ0FBQyxDQUFDLEVBQUMsR0FBRyxxQkFBcUIsRUFBQyxDQUFDLENBQUE7SUFFaEYsS0FBSyxNQUFNLEdBQUcsSUFBSTtRQUNoQixXQUFXO1FBQ1gsWUFBWTtRQUNaLGFBQWE7UUFDYiwyQkFBMkI7UUFDM0IsdUJBQXVCO1FBQ3ZCLG9CQUFvQjtRQUNwQixVQUFVO1FBQ1YsZ0JBQWdCO1FBQ2hCLFdBQVc7UUFDWCxZQUFZO1FBQ1osZUFBZTtRQUNmLFFBQVE7S0FDVCxFQUFFLENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN0QixDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRXZCLE1BQU0sa0JBQWtCLEdBQUcsc0NBQXNDLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUV4RixPQUFPO1FBQ0wsR0FBRyxxQkFBcUI7UUFDeEIsU0FBUyxFQUFFLHVDQUF1QyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQztRQUNuRix5QkFBeUIsRUFBRSxrQkFBa0IsQ0FBQyx5QkFBeUI7UUFDdkUscUJBQXFCLEVBQUUsa0JBQWtCLENBQUMscUJBQXFCO1FBQy9ELGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLGtCQUFrQjtRQUN6RCxjQUFjLEVBQUUsa0JBQWtCLENBQUMsY0FBYztLQUNsRCxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsdUNBQXVDLENBQUMsU0FBUztJQUN4RCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixPQUFPLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUE7SUFDdEMsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQywwRkFBMEYsQ0FBQyxDQUFBO0lBQzdHLENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO0lBRXJCLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2pDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFBO1FBQzVCLFVBQVUsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFBO1FBQzdCLFVBQVUsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFBO1FBQzFCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFBO1FBQzNCLFVBQVUsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFBO1FBRTVCLE9BQU8sVUFBVSxDQUFBO0lBQ25CLENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQUUsVUFBVSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUE7SUFDOUQsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUFFLFVBQVUsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFBO0lBQ2pFLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQy9CLFVBQVUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO1FBQ3hCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFBO0lBQzNCLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQUUsVUFBVSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUE7SUFFOUQsT0FBTyxVQUFVLENBQUE7QUFDbkIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsc0NBQXNDLENBQUMscUJBQXFCO0lBQ25FLE1BQU0seUJBQXlCLEdBQUcscUJBQXFCLENBQUMseUJBQXlCLENBQUE7SUFDakYsTUFBTSxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQyxxQkFBcUIsQ0FBQTtJQUN6RSxNQUFNLHdCQUF3QixHQUFHLHFCQUFxQixDQUFDLGtCQUFrQixDQUFBO0lBQ3pFLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCLENBQUMsY0FBYyxDQUFBO0lBQ2pFLE1BQU0sbUNBQW1DLEdBQUcscUNBQXFDLENBQUM7UUFDaEYsZUFBZSxFQUFFO1lBQ2YsTUFBTSxFQUFFLFFBQVE7WUFDaEIsS0FBSyxFQUFFLE9BQU87U0FDZjtRQUNELGNBQWMsRUFBRSx5QkFBeUI7UUFDekMsU0FBUyxFQUFFLG1CQUFtQjtLQUMvQixDQUFDLENBQUE7SUFDRixNQUFNLCtCQUErQixHQUFHLHFDQUFxQyxDQUFDO1FBQzVFLGVBQWUsRUFBRTtZQUNmLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLE9BQU8sRUFBRSxTQUFTO1lBQ2xCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLElBQUksRUFBRSxNQUFNO1lBQ1osTUFBTSxFQUFFLFFBQVE7WUFDaEIsR0FBRyxFQUFFLEtBQUs7U0FDWDtRQUNELGNBQWMsRUFBRSxxQkFBcUI7UUFDckMsU0FBUyxFQUFFLGVBQWU7S0FDM0IsQ0FBQyxDQUFBO0lBRUYsT0FBTztRQUNMLHlCQUF5QixFQUFFLG1DQUFtQztRQUM5RCxxQkFBcUIsRUFBRSwrQkFBK0I7UUFDdEQsa0JBQWtCLEVBQUUsb0NBQW9DLENBQUMsRUFBQyxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFDLENBQUM7UUFDcEksY0FBYyxFQUFFLG9DQUFvQyxDQUFDLEVBQUMsY0FBYyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUMsQ0FBQztLQUN6SCxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMscUNBQXFDLENBQUMsRUFBQyxlQUFlLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBQztJQUN6RixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsT0FBTyxlQUFlLENBQUE7SUFDeEIsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFNBQVMsNkVBQTZFLENBQUMsQ0FBQTtJQUM1RyxDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFBO0lBRTdCLEtBQUssTUFBTSxXQUFXLElBQUksY0FBYyxFQUFFLENBQUM7UUFDekMsTUFBTSxrQkFBa0IsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFdkQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsV0FBVyxTQUFTLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDOUYsQ0FBQztRQUVELGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxHQUFHLHdDQUF3QyxDQUFDO1lBQ3pFLFdBQVcsRUFBRSxrQkFBa0I7WUFDL0IsV0FBVyxFQUFFLGtCQUFrQjtZQUMvQixTQUFTO1NBQ1YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELE9BQU8sa0JBQWtCLENBQUE7QUFDM0IsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxvQ0FBb0MsQ0FBQyxFQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUM7SUFDdkUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxDQUFBO0lBQ1gsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFNBQVMsNkVBQTZFLENBQUMsQ0FBQTtJQUM1RyxDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFBO0lBRTdCLEtBQUssTUFBTSxVQUFVLElBQUksY0FBYyxFQUFFLENBQUM7UUFDeEMsTUFBTSxtQkFBbUIsR0FBRyx3Q0FBd0MsQ0FBQztZQUNuRSxXQUFXLEVBQUUsVUFBVTtZQUN2QixXQUFXLEVBQUUsVUFBVTtZQUN2QixTQUFTO1NBQ1YsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQTtRQUVwRixrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLFdBQVcsQ0FBQTtJQUN2RCxDQUFDO0lBRUQsT0FBTyxrQkFBa0IsQ0FBQTtBQUMzQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCO0lBQ3JFLE1BQU0scUJBQXFCLEdBQUcsZ0RBQWdELENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUVsRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQ2hGLENBQUM7SUFFRCxPQUFPLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7QUFDM0YsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUM7SUFDeEYsTUFBTSxxQkFBcUIsR0FBRyxnREFBZ0QsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0lBRWxHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELFNBQVMsRUFBRSxDQUFDLENBQUE7SUFDaEYsQ0FBQztJQUVELEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDM0QsR0FBRyxxQkFBcUIsQ0FBQyx5QkFBeUI7UUFDbEQsR0FBRyxxQkFBcUIsQ0FBQyxxQkFBcUI7S0FDL0MsQ0FBQyxFQUFFLENBQUM7UUFDSCxJQUFJLHFCQUFxQixLQUFLLFNBQVM7WUFBRSxTQUFRO1FBRWpELE1BQU0sb0JBQW9CLEdBQUcsd0NBQXdDLENBQUM7WUFDcEUsV0FBVyxFQUFFLHFCQUFxQjtZQUNsQyxXQUFXLEVBQUUsaUdBQWlHLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDdkgsU0FBUztTQUNWLENBQUMsQ0FBQTtRQUVGLElBQUksV0FBVyxLQUFLLG9CQUFvQixFQUFFLENBQUM7WUFDekMsT0FBTyxpR0FBaUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ25ILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsaUNBQWlDLENBQUMsRUFBQyxlQUFlLEVBQUUsV0FBVyxFQUFDO0lBQzlFLE1BQU0scUJBQXFCLEdBQUcsMENBQTBDLENBQUMsV0FBVyxDQUFDLENBQUE7SUFFckYsS0FBSyxNQUFNLGNBQWMsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUM3QyxNQUFNLFNBQVMsR0FBRyx1Q0FBdUMsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUV6RSxLQUFLLE1BQU0sU0FBUyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQy9DLE1BQU0scUJBQXFCLEdBQUcsZ0RBQWdELENBQUMsa0JBQWtCLENBQUMsQ0FBQTtZQUVsRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDM0IsU0FBUTtZQUNWLENBQUM7WUFFRCxNQUFNLFlBQVksR0FBRywwQ0FBMEMsQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFBO1lBQ3pILE1BQU0sY0FBYyxHQUFHLEdBQUcsWUFBWSxHQUFHLENBQUE7WUFFekMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxTQUFRO1lBQ1YsQ0FBQztZQUVELE1BQU0sWUFBWSxHQUFHLHFCQUFxQjtpQkFDdkMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7aUJBQzVCLEtBQUssQ0FBQyxHQUFHLENBQUM7aUJBQ1YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBRWxCLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSx3QkFBd0IsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLGtCQUFrQixDQUFDO3FCQUN0RixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFFN0QsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO29CQUM3QixPQUFPO3dCQUNMLFdBQVcsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7d0JBQ3hDLFVBQVUsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLFNBQVM7d0JBQ1QsWUFBWTt3QkFDWixLQUFLLEVBQUUsWUFBWTtxQkFDcEIsQ0FBQTtnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQztxQkFDOUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBRTdELElBQUksb0JBQW9CLEVBQUUsQ0FBQztvQkFDekIsT0FBTzt3QkFDTCxXQUFXLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO3dCQUNwQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM3QyxVQUFVLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO3dCQUNuQyxTQUFTO3dCQUNULFlBQVk7d0JBQ1osS0FBSyxFQUFFLFFBQVE7cUJBQ2hCLENBQUE7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsMENBQTBDLENBQUMsSUFBSTtJQUN0RCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQTtJQUVqRSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxPQUFPLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVELE9BQU8sZ0JBQWdCLENBQUE7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlIGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuaW1wb3J0IHt2YWxpZGF0ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmROYW1lfSBmcm9tIFwiLi9yZXNvdXJjZS1jb25maWctdmFsaWRhdGlvbi5qc1wiXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkJhY2tlbmRQcm9qZWN0Q29uZmlndXJhdGlvbn0gYmFja2VuZFByb2plY3QgLSBCYWNrZW5kIHByb2plY3QgY29uZmlnLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHR5cGVvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlPn0gLSBSZXNvdXJjZSBkZWZpbml0aW9ucyBrZXllZCBieSBtb2RlbCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlc0ZvckJhY2tlbmRQcm9qZWN0KGJhY2tlbmRQcm9qZWN0KSB7XG4gIGNvbnN0IHJlc291cmNlcyA9IGJhY2tlbmRQcm9qZWN0LmZyb250ZW5kTW9kZWxzXG5cbiAgaWYgKHJlc291cmNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFyZXNvdXJjZXMgfHwgdHlwZW9mIHJlc291cmNlcyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBiYWNrZW5kIHByb2plY3QgZnJvbnRlbmRNb2RlbHMgb2JqZWN0IGJ1dCBnb3Q6ICR7cmVzb3VyY2VzfWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc291cmNlc1xuICB9XG5cbiAgcmV0dXJuIHt9XG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSByZXNvdXJjZSBkZWZpbml0aW9uLlxuICogQHJldHVybnMge3ZhbHVlIGlzIHR5cGVvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlfSAtIFdoZXRoZXIgdmFsdWUgaXMgYSByZXNvdXJjZSBjbGFzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxSZXNvdXJjZURlZmluaXRpb25Jc0NsYXNzKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiAmJiAodmFsdWUgPT09IEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2UgfHwgdmFsdWUucHJvdG90eXBlIGluc3RhbmNlb2YgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3Vua25vd259IHJlc291cmNlRGVmaW5pdGlvbiAtIFJlc291cmNlIGRlZmluaXRpb24uXG4gKiBAcmV0dXJucyB7dHlwZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2UgfCBudWxsfSAtIFJlc291cmNlIGNsYXNzIHdoZW4gZGVmaW5pdGlvbiBpcyBjbGFzcy1iYXNlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzRnJvbURlZmluaXRpb24ocmVzb3VyY2VEZWZpbml0aW9uKSB7XG4gIHJldHVybiBmcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uSXNDbGFzcyhyZXNvdXJjZURlZmluaXRpb24pID8gcmVzb3VyY2VEZWZpbml0aW9uIDogbnVsbFxufVxuXG4vKipcbiAqIEBwYXJhbSB7dW5rbm93bn0gcmVzb3VyY2VEZWZpbml0aW9uIC0gUmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLk5vcm1hbGl6ZWRGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uIHwgbnVsbH0gLSBOb3JtYWxpemVkIHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24ocmVzb3VyY2VEZWZpbml0aW9uKSB7XG4gIGlmICghZnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvbklzQ2xhc3MocmVzb3VyY2VEZWZpbml0aW9uKSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4gbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbihyZXNvdXJjZURlZmluaXRpb24ucmVzb3VyY2VDb25maWcoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbn0gcmVzb3VyY2VDb25maWd1cmF0aW9uIC0gUmF3IHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Ob3JtYWxpemVkRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbn0gLSBOb3JtYWxpemVkIHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb24ocmVzb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gIGNvbnN0IHJlc3RBcmdzID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqLyAoey4uLnJlc291cmNlQ29uZmlndXJhdGlvbn0pXG5cbiAgZm9yIChjb25zdCBrZXkgb2YgW1xuICAgIFwiYWJpbGl0aWVzXCIsXG4gICAgXCJhdHRyaWJ1dGVzXCIsXG4gICAgXCJhdHRhY2htZW50c1wiLFxuICAgIFwiYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kc1wiLFxuICAgIFwiYnVpbHRJbk1lbWJlckNvbW1hbmRzXCIsXG4gICAgXCJjb2xsZWN0aW9uQ29tbWFuZHNcIixcbiAgICBcImNvbW1hbmRzXCIsXG4gICAgXCJtZW1iZXJDb21tYW5kc1wiLFxuICAgIFwibW9kZWxOYW1lXCIsXG4gICAgXCJwcmltYXJ5S2V5XCIsXG4gICAgXCJyZWxhdGlvbnNoaXBzXCIsXG4gICAgXCJzZXJ2ZXJcIlxuICBdKSB7XG4gICAgZGVsZXRlIHJlc3RBcmdzW2tleV1cbiAgfVxuXG4gIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgY29uc3Qgbm9ybWFsaXplZENvbW1hbmRzID0gbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlQ29tbWFuZHMocmVzb3VyY2VDb25maWd1cmF0aW9uKVxuXG4gIHJldHVybiB7XG4gICAgLi4ucmVzb3VyY2VDb25maWd1cmF0aW9uLFxuICAgIGFiaWxpdGllczogbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlQWJpbGl0aWVzKHJlc291cmNlQ29uZmlndXJhdGlvbi5hYmlsaXRpZXMpLFxuICAgIGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHM6IG5vcm1hbGl6ZWRDb21tYW5kcy5idWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzLFxuICAgIGJ1aWx0SW5NZW1iZXJDb21tYW5kczogbm9ybWFsaXplZENvbW1hbmRzLmJ1aWx0SW5NZW1iZXJDb21tYW5kcyxcbiAgICBjb2xsZWN0aW9uQ29tbWFuZHM6IG5vcm1hbGl6ZWRDb21tYW5kcy5jb2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgbWVtYmVyQ29tbWFuZHM6IG5vcm1hbGl6ZWRDb21tYW5kcy5tZW1iZXJDb21tYW5kc1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHVuZGVmaW5lZH0gYWJpbGl0aWVzIC0gUmVzb3VyY2UgYWJpbGl0aWVzIGNvbmZpZyAoY2FtZWxDYXNlIGFjdGlvbiBsaXN0KS5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAtIE5vcm1hbGl6ZWQgYWJpbGl0aWVzIGNvbmZpZy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlQWJpbGl0aWVzKGFiaWxpdGllcykge1xuICBpZiAoIWFiaWxpdGllcykge1xuICAgIHJldHVybiB7ZmluZDogXCJyZWFkXCIsIGluZGV4OiBcInJlYWRcIn1cbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShhYmlsaXRpZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUmVzb3VyY2UgYWJpbGl0aWVzIG11c3QgYmUgYW4gYXJyYXkgb2YgYWN0aW9uIG5hbWVzLiBPYmplY3QgZm9ybSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLlwiKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBub3JtYWxpemVkID0ge31cblxuICBpZiAoYWJpbGl0aWVzLmluY2x1ZGVzKFwibWFuYWdlXCIpKSB7XG4gICAgbm9ybWFsaXplZC5jcmVhdGUgPSBcIm1hbmFnZVwiXG4gICAgbm9ybWFsaXplZC5kZXN0cm95ID0gXCJtYW5hZ2VcIlxuICAgIG5vcm1hbGl6ZWQuZmluZCA9IFwibWFuYWdlXCJcbiAgICBub3JtYWxpemVkLmluZGV4ID0gXCJtYW5hZ2VcIlxuICAgIG5vcm1hbGl6ZWQudXBkYXRlID0gXCJtYW5hZ2VcIlxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRcbiAgfVxuXG4gIGlmIChhYmlsaXRpZXMuaW5jbHVkZXMoXCJjcmVhdGVcIikpIG5vcm1hbGl6ZWQuY3JlYXRlID0gXCJjcmVhdGVcIlxuICBpZiAoYWJpbGl0aWVzLmluY2x1ZGVzKFwiZGVzdHJveVwiKSkgbm9ybWFsaXplZC5kZXN0cm95ID0gXCJkZXN0cm95XCJcbiAgaWYgKGFiaWxpdGllcy5pbmNsdWRlcyhcInJlYWRcIikpIHtcbiAgICBub3JtYWxpemVkLmZpbmQgPSBcInJlYWRcIlxuICAgIG5vcm1hbGl6ZWQuaW5kZXggPSBcInJlYWRcIlxuICB9XG4gIGlmIChhYmlsaXRpZXMuaW5jbHVkZXMoXCJ1cGRhdGVcIikpIG5vcm1hbGl6ZWQudXBkYXRlID0gXCJ1cGRhdGVcIlxuXG4gIHJldHVybiBub3JtYWxpemVkXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb259IHJlc291cmNlQ29uZmlndXJhdGlvbiAtIFJhdyByZXNvdXJjZSBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge3tidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBidWlsdEluTWVtYmVyQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGNvbGxlY3Rpb25Db21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgbWVtYmVyQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz59fSAtIE5vcm1hbGl6ZWQgY29tbWFuZCBjb25maWd1cmF0aW9uLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kcyhyZXNvdXJjZUNvbmZpZ3VyYXRpb24pIHtcbiAgY29uc3QgYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyA9IHJlc291cmNlQ29uZmlndXJhdGlvbi5idWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzXG4gIGNvbnN0IGJ1aWx0SW5NZW1iZXJDb21tYW5kcyA9IHJlc291cmNlQ29uZmlndXJhdGlvbi5idWlsdEluTWVtYmVyQ29tbWFuZHNcbiAgY29uc3QgY3VzdG9tQ29sbGVjdGlvbkNvbW1hbmRzID0gcmVzb3VyY2VDb25maWd1cmF0aW9uLmNvbGxlY3Rpb25Db21tYW5kc1xuICBjb25zdCBjdXN0b21NZW1iZXJDb21tYW5kcyA9IHJlc291cmNlQ29uZmlndXJhdGlvbi5tZW1iZXJDb21tYW5kc1xuICBjb25zdCBub3JtYWxpemVkQnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxCdWlsdEluQ29tbWFuZHMoe1xuICAgIGNvbW1hbmREZWZhdWx0czoge1xuICAgICAgY3JlYXRlOiBcImNyZWF0ZVwiLFxuICAgICAgaW5kZXg6IFwiaW5kZXhcIlxuICAgIH0sXG4gICAgY29tbWFuZHNDb25maWc6IGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgbW9kZWxOYW1lOiBcIkNvbGxlY3Rpb25Db21tYW5kXCJcbiAgfSlcbiAgY29uc3Qgbm9ybWFsaXplZEJ1aWx0SW5NZW1iZXJDb21tYW5kcyA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxCdWlsdEluQ29tbWFuZHMoe1xuICAgIGNvbW1hbmREZWZhdWx0czoge1xuICAgICAgYXR0YWNoOiBcImF0dGFjaFwiLFxuICAgICAgZGVzdHJveTogXCJkZXN0cm95XCIsXG4gICAgICBkb3dubG9hZDogXCJkb3dubG9hZFwiLFxuICAgICAgZmluZDogXCJmaW5kXCIsXG4gICAgICB1cGRhdGU6IFwidXBkYXRlXCIsXG4gICAgICB1cmw6IFwidXJsXCJcbiAgICB9LFxuICAgIGNvbW1hbmRzQ29uZmlnOiBidWlsdEluTWVtYmVyQ29tbWFuZHMsXG4gICAgbW9kZWxOYW1lOiBcIk1lbWJlckNvbW1hbmRcIlxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kczogbm9ybWFsaXplZEJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgYnVpbHRJbk1lbWJlckNvbW1hbmRzOiBub3JtYWxpemVkQnVpbHRJbk1lbWJlckNvbW1hbmRzLFxuICAgIGNvbGxlY3Rpb25Db21tYW5kczogbm9ybWFsaXplRnJvbnRlbmRNb2RlbEN1c3RvbUNvbW1hbmRzKHtjb21tYW5kc0NvbmZpZzogY3VzdG9tQ29sbGVjdGlvbkNvbW1hbmRzLCBtb2RlbE5hbWU6IFwiQ29sbGVjdGlvbkNvbW1hbmRcIn0pLFxuICAgIG1lbWJlckNvbW1hbmRzOiBub3JtYWxpemVGcm9udGVuZE1vZGVsQ3VzdG9tQ29tbWFuZHMoe2NvbW1hbmRzQ29uZmlnOiBjdXN0b21NZW1iZXJDb21tYW5kcywgbW9kZWxOYW1lOiBcIk1lbWJlckNvbW1hbmRcIn0pXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gYXJncy5jb21tYW5kRGVmYXVsdHMgLSBCdWlsdC1pbiBkZWZhdWx0IGNvbW1hbmQgbmFtZXMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgdW5kZWZpbmVkfSBhcmdzLmNvbW1hbmRzQ29uZmlnIC0gQnVpbHQtaW4gY29tbWFuZHMgY29uZmlnIChjYW1lbENhc2UgY29tbWFuZCB0eXBlIGxpc3QpLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubW9kZWxOYW1lIC0gRGlhZ25vc3RpYyBtb2RlbCBuYW1lLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gTm9ybWFsaXplZCBidWlsdC1pbiBjb21tYW5kIGNvbmZpZy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbEJ1aWx0SW5Db21tYW5kcyh7Y29tbWFuZERlZmF1bHRzLCBjb21tYW5kc0NvbmZpZywgbW9kZWxOYW1lfSkge1xuICBpZiAoIWNvbW1hbmRzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNvbW1hbmREZWZhdWx0c1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGNvbW1hbmRzQ29uZmlnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHttb2RlbE5hbWV9IGNvbmZpZ3VyYXRpb24gbXVzdCB1c2UgdGhlIGFycmF5IGZvcm0uIE9iamVjdCBmb3JtIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuYClcbiAgfVxuXG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgY29uc3Qgbm9ybWFsaXplZENvbW1hbmRzID0ge31cblxuICBmb3IgKGNvbnN0IGNvbW1hbmRUeXBlIG9mIGNvbW1hbmRzQ29uZmlnKSB7XG4gICAgY29uc3QgZGVmYXVsdENvbW1hbmROYW1lID0gY29tbWFuZERlZmF1bHRzW2NvbW1hbmRUeXBlXVxuXG4gICAgaWYgKCFkZWZhdWx0Q29tbWFuZE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBidWlsdC1pbiBmcm9udGVuZCBtb2RlbCBjb21tYW5kICcke2NvbW1hbmRUeXBlfScgZm9yICR7bW9kZWxOYW1lfWApXG4gICAgfVxuXG4gICAgbm9ybWFsaXplZENvbW1hbmRzW2NvbW1hbmRUeXBlXSA9IHZhbGlkYXRlRnJvbnRlbmRNb2RlbFJlc291cmNlQ29tbWFuZE5hbWUoe1xuICAgICAgY29tbWFuZE5hbWU6IGRlZmF1bHRDb21tYW5kTmFtZSxcbiAgICAgIGNvbW1hbmRUeXBlOiBkZWZhdWx0Q29tbWFuZE5hbWUsXG4gICAgICBtb2RlbE5hbWVcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRDb21tYW5kc1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHVuZGVmaW5lZH0gYXJncy5jb21tYW5kc0NvbmZpZyAtIEN1c3RvbSBjb21tYW5kcyBjb25maWcgKGNhbWVsQ2FzZSBtZXRob2QtbmFtZSBsaXN0KS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1vZGVsTmFtZSAtIERpYWdub3N0aWMgbW9kZWwgbmFtZS5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAtIE5vcm1hbGl6ZWQgY3VzdG9tIGNvbW1hbmQgY29uZmlnIChjYW1lbENhc2UgbWV0aG9kIG5hbWUg4oaSIGtlYmFiLWNhc2UgY29tbWFuZCBzbHVnKS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbEN1c3RvbUNvbW1hbmRzKHtjb21tYW5kc0NvbmZpZywgbW9kZWxOYW1lfSkge1xuICBpZiAoIWNvbW1hbmRzQ29uZmlnKSB7XG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoY29tbWFuZHNDb25maWcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke21vZGVsTmFtZX0gY29uZmlndXJhdGlvbiBtdXN0IHVzZSB0aGUgYXJyYXkgZm9ybS4gT2JqZWN0IGZvcm0gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5gKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBub3JtYWxpemVkQ29tbWFuZHMgPSB7fVxuXG4gIGZvciAoY29uc3QgbWV0aG9kTmFtZSBvZiBjb21tYW5kc0NvbmZpZykge1xuICAgIGNvbnN0IHZhbGlkYXRlZE1ldGhvZE5hbWUgPSB2YWxpZGF0ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmROYW1lKHtcbiAgICAgIGNvbW1hbmROYW1lOiBtZXRob2ROYW1lLFxuICAgICAgY29tbWFuZFR5cGU6IG1ldGhvZE5hbWUsXG4gICAgICBtb2RlbE5hbWVcbiAgICB9KVxuICAgIGNvbnN0IGNvbW1hbmRTbHVnID0gaW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKHZhbGlkYXRlZE1ldGhvZE5hbWUpKVxuXG4gICAgbm9ybWFsaXplZENvbW1hbmRzW3ZhbGlkYXRlZE1ldGhvZE5hbWVdID0gY29tbWFuZFNsdWdcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkQ29tbWFuZHNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lIC0gTW9kZWwgY2xhc3MgbmFtZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gcmVzb3VyY2VEZWZpbml0aW9uIC0gUmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gTm9ybWFsaXplZCByZXNvdXJjZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlUGF0aChtb2RlbE5hbWUsIHJlc291cmNlRGVmaW5pdGlvbikge1xuICBjb25zdCByZXNvdXJjZUNvbmZpZ3VyYXRpb24gPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24ocmVzb3VyY2VEZWZpbml0aW9uKVxuXG4gIGlmICghcmVzb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZyb250ZW5kIG1vZGVsIHJlc291cmNlIGRlZmluaXRpb24gZm9yICR7bW9kZWxOYW1lfWApXG4gIH1cblxuICByZXR1cm4gYC8ke2luZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24ucGx1cmFsaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShtb2RlbE5hbWUpKSl9YFxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY29tbWFuZE5hbWUgLSBDb21tYW5kIHBhdGggc2VnbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1vZGVsTmFtZSAtIE1vZGVsIGNsYXNzIG5hbWUuXG4gKiBAcGFyYW0ge3Vua25vd259IGFyZ3MucmVzb3VyY2VEZWZpbml0aW9uIC0gUmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHtcImRlc3Ryb3lcIiB8IFwiZmluZFwiIHwgXCJpbmRleFwiIHwgXCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImF0dGFjaFwiIHwgXCJkb3dubG9hZFwiIHwgXCJ1cmxcIiB8IG51bGx9IC0gRnJvbnRlbmQgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbEFjdGlvbkZvckNvbW1hbmQoe2NvbW1hbmROYW1lLCBtb2RlbE5hbWUsIHJlc291cmNlRGVmaW5pdGlvbn0pIHtcbiAgY29uc3QgcmVzb3VyY2VDb25maWd1cmF0aW9uID0gZnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbkZyb21EZWZpbml0aW9uKHJlc291cmNlRGVmaW5pdGlvbilcblxuICBpZiAoIXJlc291cmNlQ29uZmlndXJhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmcm9udGVuZCBtb2RlbCByZXNvdXJjZSBkZWZpbml0aW9uIGZvciAke21vZGVsTmFtZX1gKVxuICB9XG5cbiAgZm9yIChjb25zdCBbYWN0aW9uLCBjb25maWd1cmVkQ29tbWFuZE5hbWVdIG9mIE9iamVjdC5lbnRyaWVzKHtcbiAgICAuLi5yZXNvdXJjZUNvbmZpZ3VyYXRpb24uYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyxcbiAgICAuLi5yZXNvdXJjZUNvbmZpZ3VyYXRpb24uYnVpbHRJbk1lbWJlckNvbW1hbmRzXG4gIH0pKSB7XG4gICAgaWYgKGNvbmZpZ3VyZWRDb21tYW5kTmFtZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZVxuXG4gICAgY29uc3QgdmFsaWRhdGVkQ29tbWFuZE5hbWUgPSB2YWxpZGF0ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmROYW1lKHtcbiAgICAgIGNvbW1hbmROYW1lOiBjb25maWd1cmVkQ29tbWFuZE5hbWUsXG4gICAgICBjb21tYW5kVHlwZTogLyoqIEB0eXBlIHtcImF0dGFjaFwiIHwgXCJjcmVhdGVcIiB8IFwiZGVzdHJveVwiIHwgXCJkb3dubG9hZFwiIHwgXCJmaW5kXCIgfCBcImluZGV4XCIgfCBcInVwZGF0ZVwiIHwgXCJ1cmxcIn0gKi8gKGFjdGlvbiksXG4gICAgICBtb2RlbE5hbWVcbiAgICB9KVxuXG4gICAgaWYgKGNvbW1hbmROYW1lID09PSB2YWxpZGF0ZWRDb21tYW5kTmFtZSkge1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7XCJhdHRhY2hcIiB8IFwiY3JlYXRlXCIgfCBcImRlc3Ryb3lcIiB8IFwiZG93bmxvYWRcIiB8IFwiZmluZFwiIHwgXCJpbmRleFwiIHwgXCJ1cGRhdGVcIiB8IFwidXJsXCJ9ICovIChhY3Rpb24pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5CYWNrZW5kUHJvamVjdENvbmZpZ3VyYXRpb25bXX0gYXJncy5iYWNrZW5kUHJvamVjdHMgLSBCYWNrZW5kIHByb2plY3RzIHRvIHNjYW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jdXJyZW50UGF0aCAtIFJlcXVlc3QgcGF0aCB3aXRob3V0IHF1ZXJ5LlxuICogQHJldHVybnMge3tjb21tYW5kTmFtZTogc3RyaW5nLCBtZW1iZXJJZD86IHN0cmluZywgbWV0aG9kTmFtZTogc3RyaW5nLCBtb2RlbE5hbWU6IHN0cmluZywgcmVzb3VyY2VQYXRoOiBzdHJpbmcsIHNjb3BlOiBcImNvbGxlY3Rpb25cIiB8IFwibWVtYmVyXCJ9IHwgbnVsbH0gLSBNYXRjaGVkIGN1c3RvbSBjb21tYW5kIG1ldGFkYXRhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbEN1c3RvbUNvbW1hbmRGb3JQYXRoKHtiYWNrZW5kUHJvamVjdHMsIGN1cnJlbnRQYXRofSkge1xuICBjb25zdCBub3JtYWxpemVkQ3VycmVudFBhdGggPSBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VQYXRoRm9yTWF0Y2goY3VycmVudFBhdGgpXG5cbiAgZm9yIChjb25zdCBiYWNrZW5kUHJvamVjdCBvZiBiYWNrZW5kUHJvamVjdHMpIHtcbiAgICBjb25zdCByZXNvdXJjZXMgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VzRm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpXG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsTmFtZSBpbiByZXNvdXJjZXMpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlRGVmaW5pdGlvbiA9IHJlc291cmNlc1ttb2RlbE5hbWVdXG4gICAgICBjb25zdCByZXNvdXJjZUNvbmZpZ3VyYXRpb24gPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24ocmVzb3VyY2VEZWZpbml0aW9uKVxuXG4gICAgICBpZiAoIXJlc291cmNlQ29uZmlndXJhdGlvbikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNvdXJjZVBhdGggPSBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VQYXRoRm9yTWF0Y2goZnJvbnRlbmRNb2RlbFJlc291cmNlUGF0aChtb2RlbE5hbWUsIHJlc291cmNlRGVmaW5pdGlvbikpXG4gICAgICBjb25zdCBleHBlY3RlZFByZWZpeCA9IGAke3Jlc291cmNlUGF0aH0vYFxuXG4gICAgICBpZiAoIW5vcm1hbGl6ZWRDdXJyZW50UGF0aC5zdGFydHNXaXRoKGV4cGVjdGVkUHJlZml4KSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXRoU2VnbWVudHMgPSBub3JtYWxpemVkQ3VycmVudFBhdGhcbiAgICAgICAgLnNsaWNlKGV4cGVjdGVkUHJlZml4Lmxlbmd0aClcbiAgICAgICAgLnNwbGl0KFwiL1wiKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG5cbiAgICAgIGlmIChwYXRoU2VnbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRDb2xsZWN0aW9uQ29tbWFuZCA9IE9iamVjdC5lbnRyaWVzKHJlc291cmNlQ29uZmlndXJhdGlvbi5jb2xsZWN0aW9uQ29tbWFuZHMpXG4gICAgICAgICAgLmZpbmQoKFssIGNvbW1hbmROYW1lXSkgPT4gY29tbWFuZE5hbWUgPT09IHBhdGhTZWdtZW50c1swXSlcblxuICAgICAgICBpZiAobWF0Y2hlZENvbGxlY3Rpb25Db21tYW5kKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbW1hbmROYW1lOiBtYXRjaGVkQ29sbGVjdGlvbkNvbW1hbmRbMV0sXG4gICAgICAgICAgICBtZXRob2ROYW1lOiBtYXRjaGVkQ29sbGVjdGlvbkNvbW1hbmRbMF0sXG4gICAgICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgICAgICByZXNvdXJjZVBhdGgsXG4gICAgICAgICAgICBzY29wZTogXCJjb2xsZWN0aW9uXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZE1lbWJlckNvbW1hbmQgPSBPYmplY3QuZW50cmllcyhyZXNvdXJjZUNvbmZpZ3VyYXRpb24ubWVtYmVyQ29tbWFuZHMpXG4gICAgICAgICAgLmZpbmQoKFssIGNvbW1hbmROYW1lXSkgPT4gY29tbWFuZE5hbWUgPT09IHBhdGhTZWdtZW50c1sxXSlcblxuICAgICAgICBpZiAobWF0Y2hlZE1lbWJlckNvbW1hbmQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29tbWFuZE5hbWU6IG1hdGNoZWRNZW1iZXJDb21tYW5kWzFdLFxuICAgICAgICAgICAgbWVtYmVySWQ6IGRlY29kZVVSSUNvbXBvbmVudChwYXRoU2VnbWVudHNbMF0pLFxuICAgICAgICAgICAgbWV0aG9kTmFtZTogbWF0Y2hlZE1lbWJlckNvbW1hbmRbMF0sXG4gICAgICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgICAgICByZXNvdXJjZVBhdGgsXG4gICAgICAgICAgICBzY29wZTogXCJtZW1iZXJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBQYXRoIHZhbHVlLlxuICogQHJldHVybnMge3N0cmluZ30gLSBOb3JtYWxpemVkIHBhdGggd2l0aCBsZWFkaW5nIHNsYXNoIGFuZCBubyB0cmFpbGluZyBzbGFzaC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlUGF0aEZvck1hdGNoKHBhdGgpIHtcbiAgY29uc3Qgd2l0aExlYWRpbmdTbGFzaCA9IHBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogYC8ke3BhdGh9YFxuXG4gIGlmICh3aXRoTGVhZGluZ1NsYXNoLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gd2l0aExlYWRpbmdTbGFzaC5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gIH1cblxuICByZXR1cm4gd2l0aExlYWRpbmdTbGFzaFxufVxuIl19
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZC1tb2RlbHMvcmVzb3VyY2UtZGVmaW5pdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyx5QkFBeUIsTUFBTSw2Q0FBNkMsQ0FBQTtBQUNuRixPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUN2RCxPQUFPLEVBQUMsd0NBQXdDLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQTtBQUV4Rjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsdUNBQXVDLENBQUMsY0FBYztJQUNwRSxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsY0FBYyxDQUFBO0lBRS9DLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUN6RixDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELE9BQU8sRUFBRSxDQUFBO0FBQ1gsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxzQ0FBc0MsQ0FBQyxLQUFLO0lBQzFELE9BQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxJQUFJLENBQUMsS0FBSyxLQUFLLHlCQUF5QixJQUFJLEtBQUssQ0FBQyxTQUFTLFlBQVkseUJBQXlCLENBQUMsQ0FBQTtBQUNySSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHdDQUF3QyxDQUFDLGtCQUFrQjtJQUN6RSxPQUFPLHNDQUFzQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFDL0Ys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SSxvQkFBb0IsRUFBRSxDQUFDO29CQUN6QixPQUFPO3dCQUNMLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7d0JBQ3BDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzdDLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7d0JBQ25DLFNBQVM7d0JBQ1QsWUFBWTt3QkFDWixLQUFLLEVBQUUsUUFBUTtxQkFDaEIsQ0FBQTtnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUywwQ0FBMEMsQ0FBQyxJQUFJO0lBQ3RELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFBO0lBRWpFLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQTtBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2UgZnJvbSBcIi4uL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5pbXBvcnQge3ZhbGlkYXRlRnJvbnRlbmRNb2RlbFJlc291cmNlQ29tbWFuZE5hbWV9IGZyb20gXCIuL3Jlc291cmNlLWNvbmZpZy12YWxpZGF0aW9uLmpzXCJcblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuQmFja2VuZFByb2plY3RDb25maWd1cmF0aW9ufSBiYWNrZW5kUHJvamVjdCAtIEJhY2tlbmQgcHJvamVjdCBjb25maWcuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgdHlwZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2U+fSAtIFJlc291cmNlIGRlZmluaXRpb25zIGtleWVkIGJ5IG1vZGVsIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsUmVzb3VyY2VzRm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpIHtcbiAgY29uc3QgcmVzb3VyY2VzID0gYmFja2VuZFByb2plY3QuZnJvbnRlbmRNb2RlbHNcblxuICBpZiAocmVzb3VyY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXJlc291cmNlcyB8fCB0eXBlb2YgcmVzb3VyY2VzICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJhY2tlbmQgcHJvamVjdCBmcm9udGVuZE1vZGVscyBvYmplY3QgYnV0IGdvdDogJHtyZXNvdXJjZXN9YClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzb3VyY2VzXG4gIH1cblxuICByZXR1cm4ge31cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHJlc291cmNlIGRlZmluaXRpb24uXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgdHlwZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2V9IC0gV2hldGhlciB2YWx1ZSBpcyBhIHJlc291cmNlIGNsYXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvbklzQ2xhc3ModmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmICh2YWx1ZSA9PT0gRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSB8fCB2YWx1ZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7dW5rbm93bn0gcmVzb3VyY2VEZWZpbml0aW9uIC0gUmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHt0eXBlb2YgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSB8IG51bGx9IC0gUmVzb3VyY2UgY2xhc3Mgd2hlbiBkZWZpbml0aW9uIGlzIGNsYXNzLWJhc2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NGcm9tRGVmaW5pdGlvbihyZXNvdXJjZURlZmluaXRpb24pIHtcbiAgcmV0dXJuIGZyb250ZW5kTW9kZWxSZXNvdXJjZURlZmluaXRpb25Jc0NsYXNzKHJlc291cmNlRGVmaW5pdGlvbikgPyByZXNvdXJjZURlZmluaXRpb24gOiBudWxsXG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3dufSByZXNvdXJjZURlZmluaXRpb24gLSBSZXNvdXJjZSBkZWZpbml0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuTm9ybWFsaXplZEZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb24gfCBudWxsfSAtIE5vcm1hbGl6ZWQgcmVzb3VyY2UgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25Gcm9tRGVmaW5pdGlvbihyZXNvdXJjZURlZmluaXRpb24pIHtcbiAgaWYgKCFmcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uSXNDbGFzcyhyZXNvdXJjZURlZmluaXRpb24pKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uKHJlc291cmNlRGVmaW5pdGlvbi5yZXNvdXJjZUNvbmZpZygpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9ufSByZXNvdXJjZUNvbmZpZ3VyYXRpb24gLSBSYXcgcmVzb3VyY2UgY29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLk5vcm1hbGl6ZWRGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9ufSAtIE5vcm1hbGl6ZWQgcmVzb3VyY2UgY29uZmlndXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbihyZXNvdXJjZUNvbmZpZ3VyYXRpb24pIHtcbiAgY29uc3QgcmVzdEFyZ3MgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGFueT59ICovICh7Li4ucmVzb3VyY2VDb25maWd1cmF0aW9ufSlcblxuICBmb3IgKGNvbnN0IGtleSBvZiBbXG4gICAgXCJhYmlsaXRpZXNcIixcbiAgICBcImF0dHJpYnV0ZXNcIixcbiAgICBcImF0dGFjaG1lbnRzXCIsXG4gICAgXCJidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzXCIsXG4gICAgXCJidWlsdEluTWVtYmVyQ29tbWFuZHNcIixcbiAgICBcImNvbGxlY3Rpb25Db21tYW5kc1wiLFxuICAgIFwiY29tbWFuZHNcIixcbiAgICBcIm1lbWJlckNvbW1hbmRzXCIsXG4gICAgXCJtb2RlbE5hbWVcIixcbiAgICBcInByaW1hcnlLZXlcIixcbiAgICBcInJlbGF0aW9uc2hpcHNcIixcbiAgICBcInNlcnZlclwiXG4gIF0pIHtcbiAgICBkZWxldGUgcmVzdEFyZ3Nba2V5XVxuICB9XG5cbiAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICBjb25zdCBub3JtYWxpemVkQ29tbWFuZHMgPSBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kcyhyZXNvdXJjZUNvbmZpZ3VyYXRpb24pXG5cbiAgcmV0dXJuIHtcbiAgICAuLi5yZXNvdXJjZUNvbmZpZ3VyYXRpb24sXG4gICAgYWJpbGl0aWVzOiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VBYmlsaXRpZXMocmVzb3VyY2VDb25maWd1cmF0aW9uLmFiaWxpdGllcyksXG4gICAgYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kczogbm9ybWFsaXplZENvbW1hbmRzLmJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgYnVpbHRJbk1lbWJlckNvbW1hbmRzOiBub3JtYWxpemVkQ29tbWFuZHMuYnVpbHRJbk1lbWJlckNvbW1hbmRzLFxuICAgIGNvbGxlY3Rpb25Db21tYW5kczogbm9ybWFsaXplZENvbW1hbmRzLmNvbGxlY3Rpb25Db21tYW5kcyxcbiAgICBtZW1iZXJDb21tYW5kczogbm9ybWFsaXplZENvbW1hbmRzLm1lbWJlckNvbW1hbmRzXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgdW5kZWZpbmVkfSBhYmlsaXRpZXMgLSBSZXNvdXJjZSBhYmlsaXRpZXMgY29uZmlnIChjYW1lbENhc2UgYWN0aW9uIGxpc3QpLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gTm9ybWFsaXplZCBhYmlsaXRpZXMgY29uZmlnLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VBYmlsaXRpZXMoYWJpbGl0aWVzKSB7XG4gIGlmIChhYmlsaXRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBkZWZhdWx0Q3J1ZEFiaWxpdGllcygpXG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoYWJpbGl0aWVzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlJlc291cmNlIGFiaWxpdGllcyBtdXN0IGJlIGFuIGFycmF5IG9mIGFjdGlvbiBuYW1lcy4gT2JqZWN0IGZvcm0gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cIilcbiAgfVxuXG4gIGlmIChhYmlsaXRpZXMuaW5jbHVkZXMoXCJtYW5hZ2VcIikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlOiBcIm1hbmFnZVwiLFxuICAgICAgZGVzdHJveTogXCJtYW5hZ2VcIixcbiAgICAgIGZpbmQ6IFwibWFuYWdlXCIsXG4gICAgICBpbmRleDogXCJtYW5hZ2VcIixcbiAgICAgIHVwZGF0ZTogXCJtYW5hZ2VcIlxuICAgIH1cbiAgfVxuXG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgY29uc3Qgbm9ybWFsaXplZCA9IHt9XG5cbiAgaWYgKGFiaWxpdGllcy5pbmNsdWRlcyhcImNyZWF0ZVwiKSkgbm9ybWFsaXplZC5jcmVhdGUgPSBcImNyZWF0ZVwiXG4gIGlmIChhYmlsaXRpZXMuaW5jbHVkZXMoXCJkZXN0cm95XCIpKSBub3JtYWxpemVkLmRlc3Ryb3kgPSBcImRlc3Ryb3lcIlxuICBpZiAoYWJpbGl0aWVzLmluY2x1ZGVzKFwicmVhZFwiKSkge1xuICAgIG5vcm1hbGl6ZWQuZmluZCA9IFwicmVhZFwiXG4gICAgbm9ybWFsaXplZC5pbmRleCA9IFwicmVhZFwiXG4gIH1cbiAgaWYgKGFiaWxpdGllcy5pbmNsdWRlcyhcInVwZGF0ZVwiKSkgbm9ybWFsaXplZC51cGRhdGUgPSBcInVwZGF0ZVwiXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAtIERlZmF1bHQgQ1JVRCBhYmlsaXR5IG1hcC4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRDcnVkQWJpbGl0aWVzKCkge1xuICByZXR1cm4ge1xuICAgIGNyZWF0ZTogXCJjcmVhdGVcIixcbiAgICBkZXN0cm95OiBcImRlc3Ryb3lcIixcbiAgICBmaW5kOiBcInJlYWRcIixcbiAgICBpbmRleDogXCJyZWFkXCIsXG4gICAgdXBkYXRlOiBcInVwZGF0ZVwiXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbn0gcmVzb3VyY2VDb25maWd1cmF0aW9uIC0gUmF3IHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7e2J1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGJ1aWx0SW5NZW1iZXJDb21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgY29sbGVjdGlvbkNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBtZW1iZXJDb21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPn19IC0gTm9ybWFsaXplZCBjb21tYW5kIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmRzKHJlc291cmNlQ29uZmlndXJhdGlvbikge1xuICBjb25zdCBidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzID0gcmVzb3VyY2VDb25maWd1cmF0aW9uLmJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHNcbiAgY29uc3QgYnVpbHRJbk1lbWJlckNvbW1hbmRzID0gcmVzb3VyY2VDb25maWd1cmF0aW9uLmJ1aWx0SW5NZW1iZXJDb21tYW5kc1xuICBjb25zdCBjdXN0b21Db2xsZWN0aW9uQ29tbWFuZHMgPSByZXNvdXJjZUNvbmZpZ3VyYXRpb24uY29sbGVjdGlvbkNvbW1hbmRzXG4gIGNvbnN0IGN1c3RvbU1lbWJlckNvbW1hbmRzID0gcmVzb3VyY2VDb25maWd1cmF0aW9uLm1lbWJlckNvbW1hbmRzXG4gIGNvbnN0IG5vcm1hbGl6ZWRCdWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzID0gbm9ybWFsaXplRnJvbnRlbmRNb2RlbEJ1aWx0SW5Db21tYW5kcyh7XG4gICAgY29tbWFuZERlZmF1bHRzOiB7XG4gICAgICBjcmVhdGU6IFwiY3JlYXRlXCIsXG4gICAgICBpbmRleDogXCJpbmRleFwiXG4gICAgfSxcbiAgICBjb21tYW5kc0NvbmZpZzogYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyxcbiAgICBtb2RlbE5hbWU6IFwiQ29sbGVjdGlvbkNvbW1hbmRcIlxuICB9KVxuICBjb25zdCBub3JtYWxpemVkQnVpbHRJbk1lbWJlckNvbW1hbmRzID0gbm9ybWFsaXplRnJvbnRlbmRNb2RlbEJ1aWx0SW5Db21tYW5kcyh7XG4gICAgY29tbWFuZERlZmF1bHRzOiB7XG4gICAgICBhdHRhY2g6IFwiYXR0YWNoXCIsXG4gICAgICBkZXN0cm95OiBcImRlc3Ryb3lcIixcbiAgICAgIGRvd25sb2FkOiBcImRvd25sb2FkXCIsXG4gICAgICBmaW5kOiBcImZpbmRcIixcbiAgICAgIHVwZGF0ZTogXCJ1cGRhdGVcIixcbiAgICAgIHVybDogXCJ1cmxcIlxuICAgIH0sXG4gICAgY29tbWFuZHNDb25maWc6IGJ1aWx0SW5NZW1iZXJDb21tYW5kcyxcbiAgICBtb2RlbE5hbWU6IFwiTWVtYmVyQ29tbWFuZFwiXG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzOiBub3JtYWxpemVkQnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyxcbiAgICBidWlsdEluTWVtYmVyQ29tbWFuZHM6IG5vcm1hbGl6ZWRCdWlsdEluTWVtYmVyQ29tbWFuZHMsXG4gICAgY29sbGVjdGlvbkNvbW1hbmRzOiBub3JtYWxpemVGcm9udGVuZE1vZGVsQ3VzdG9tQ29tbWFuZHMoe2NvbW1hbmRzQ29uZmlnOiBjdXN0b21Db2xsZWN0aW9uQ29tbWFuZHMsIG1vZGVsTmFtZTogXCJDb2xsZWN0aW9uQ29tbWFuZFwifSksXG4gICAgbWVtYmVyQ29tbWFuZHM6IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxDdXN0b21Db21tYW5kcyh7Y29tbWFuZHNDb25maWc6IGN1c3RvbU1lbWJlckNvbW1hbmRzLCBtb2RlbE5hbWU6IFwiTWVtYmVyQ29tbWFuZFwifSlcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBhcmdzLmNvbW1hbmREZWZhdWx0cyAtIEJ1aWx0LWluIGRlZmF1bHQgY29tbWFuZCBuYW1lcy5cbiAqIEBwYXJhbSB7c3RyaW5nW10gfCB1bmRlZmluZWR9IGFyZ3MuY29tbWFuZHNDb25maWcgLSBCdWlsdC1pbiBjb21tYW5kcyBjb25maWcgKGNhbWVsQ2FzZSBjb21tYW5kIHR5cGUgbGlzdCkuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tb2RlbE5hbWUgLSBEaWFnbm9zdGljIG1vZGVsIG5hbWUuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gLSBOb3JtYWxpemVkIGJ1aWx0LWluIGNvbW1hbmQgY29uZmlnLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9udGVuZE1vZGVsQnVpbHRJbkNvbW1hbmRzKHtjb21tYW5kRGVmYXVsdHMsIGNvbW1hbmRzQ29uZmlnLCBtb2RlbE5hbWV9KSB7XG4gIGlmICghY29tbWFuZHNDb25maWcpIHtcbiAgICByZXR1cm4gY29tbWFuZERlZmF1bHRzXG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoY29tbWFuZHNDb25maWcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke21vZGVsTmFtZX0gY29uZmlndXJhdGlvbiBtdXN0IHVzZSB0aGUgYXJyYXkgZm9ybS4gT2JqZWN0IGZvcm0gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5gKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBub3JtYWxpemVkQ29tbWFuZHMgPSB7fVxuXG4gIGZvciAoY29uc3QgY29tbWFuZFR5cGUgb2YgY29tbWFuZHNDb25maWcpIHtcbiAgICBjb25zdCBkZWZhdWx0Q29tbWFuZE5hbWUgPSBjb21tYW5kRGVmYXVsdHNbY29tbWFuZFR5cGVdXG5cbiAgICBpZiAoIWRlZmF1bHRDb21tYW5kTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGJ1aWx0LWluIGZyb250ZW5kIG1vZGVsIGNvbW1hbmQgJyR7Y29tbWFuZFR5cGV9JyBmb3IgJHttb2RlbE5hbWV9YClcbiAgICB9XG5cbiAgICBub3JtYWxpemVkQ29tbWFuZHNbY29tbWFuZFR5cGVdID0gdmFsaWRhdGVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kTmFtZSh7XG4gICAgICBjb21tYW5kTmFtZTogZGVmYXVsdENvbW1hbmROYW1lLFxuICAgICAgY29tbWFuZFR5cGU6IGRlZmF1bHRDb21tYW5kTmFtZSxcbiAgICAgIG1vZGVsTmFtZVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZENvbW1hbmRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgdW5kZWZpbmVkfSBhcmdzLmNvbW1hbmRzQ29uZmlnIC0gQ3VzdG9tIGNvbW1hbmRzIGNvbmZpZyAoY2FtZWxDYXNlIG1ldGhvZC1uYW1lIGxpc3QpLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubW9kZWxOYW1lIC0gRGlhZ25vc3RpYyBtb2RlbCBuYW1lLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gTm9ybWFsaXplZCBjdXN0b20gY29tbWFuZCBjb25maWcgKGNhbWVsQ2FzZSBtZXRob2QgbmFtZSDihpIga2ViYWItY2FzZSBjb21tYW5kIHNsdWcpLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9udGVuZE1vZGVsQ3VzdG9tQ29tbWFuZHMoe2NvbW1hbmRzQ29uZmlnLCBtb2RlbE5hbWV9KSB7XG4gIGlmICghY29tbWFuZHNDb25maWcpIHtcbiAgICByZXR1cm4ge31cbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShjb21tYW5kc0NvbmZpZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bW9kZWxOYW1lfSBjb25maWd1cmF0aW9uIG11c3QgdXNlIHRoZSBhcnJheSBmb3JtLiBPYmplY3QgZm9ybSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLmApXG4gIH1cblxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IG5vcm1hbGl6ZWRDb21tYW5kcyA9IHt9XG5cbiAgZm9yIChjb25zdCBtZXRob2ROYW1lIG9mIGNvbW1hbmRzQ29uZmlnKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkTWV0aG9kTmFtZSA9IHZhbGlkYXRlRnJvbnRlbmRNb2RlbFJlc291cmNlQ29tbWFuZE5hbWUoe1xuICAgICAgY29tbWFuZE5hbWU6IG1ldGhvZE5hbWUsXG4gICAgICBjb21tYW5kVHlwZTogbWV0aG9kTmFtZSxcbiAgICAgIG1vZGVsTmFtZVxuICAgIH0pXG4gICAgY29uc3QgY29tbWFuZFNsdWcgPSBpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUodmFsaWRhdGVkTWV0aG9kTmFtZSkpXG5cbiAgICBub3JtYWxpemVkQ29tbWFuZHNbdmFsaWRhdGVkTWV0aG9kTmFtZV0gPSBjb21tYW5kU2x1Z1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRDb21tYW5kc1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgLSBNb2RlbCBjbGFzcyBuYW1lLlxuICogQHBhcmFtIHt1bmtub3dufSByZXNvdXJjZURlZmluaXRpb24gLSBSZXNvdXJjZSBkZWZpbml0aW9uLlxuICogQHJldHVybnMge3N0cmluZ30gLSBOb3JtYWxpemVkIHJlc291cmNlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsUmVzb3VyY2VQYXRoKG1vZGVsTmFtZSwgcmVzb3VyY2VEZWZpbml0aW9uKSB7XG4gIGNvbnN0IHJlc291cmNlQ29uZmlndXJhdGlvbiA9IGZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25Gcm9tRGVmaW5pdGlvbihyZXNvdXJjZURlZmluaXRpb24pXG5cbiAgaWYgKCFyZXNvdXJjZUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZnJvbnRlbmQgbW9kZWwgcmVzb3VyY2UgZGVmaW5pdGlvbiBmb3IgJHttb2RlbE5hbWV9YClcbiAgfVxuXG4gIHJldHVybiBgLyR7aW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi5wbHVyYWxpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKG1vZGVsTmFtZSkpKX1gXG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jb21tYW5kTmFtZSAtIENvbW1hbmQgcGF0aCBzZWdtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubW9kZWxOYW1lIC0gTW9kZWwgY2xhc3MgbmFtZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gYXJncy5yZXNvdXJjZURlZmluaXRpb24gLSBSZXNvdXJjZSBkZWZpbml0aW9uLlxuICogQHJldHVybnMge1wiZGVzdHJveVwiIHwgXCJmaW5kXCIgfCBcImluZGV4XCIgfCBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiYXR0YWNoXCIgfCBcImRvd25sb2FkXCIgfCBcInVybFwiIHwgbnVsbH0gLSBGcm9udGVuZCBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsQWN0aW9uRm9yQ29tbWFuZCh7Y29tbWFuZE5hbWUsIG1vZGVsTmFtZSwgcmVzb3VyY2VEZWZpbml0aW9ufSkge1xuICBjb25zdCByZXNvdXJjZUNvbmZpZ3VyYXRpb24gPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24ocmVzb3VyY2VEZWZpbml0aW9uKVxuXG4gIGlmICghcmVzb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZyb250ZW5kIG1vZGVsIHJlc291cmNlIGRlZmluaXRpb24gZm9yICR7bW9kZWxOYW1lfWApXG4gIH1cblxuICBmb3IgKGNvbnN0IFthY3Rpb24sIGNvbmZpZ3VyZWRDb21tYW5kTmFtZV0gb2YgT2JqZWN0LmVudHJpZXMoe1xuICAgIC4uLnJlc291cmNlQ29uZmlndXJhdGlvbi5idWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzLFxuICAgIC4uLnJlc291cmNlQ29uZmlndXJhdGlvbi5idWlsdEluTWVtYmVyQ29tbWFuZHNcbiAgfSkpIHtcbiAgICBpZiAoY29uZmlndXJlZENvbW1hbmROYW1lID09PSB1bmRlZmluZWQpIGNvbnRpbnVlXG5cbiAgICBjb25zdCB2YWxpZGF0ZWRDb21tYW5kTmFtZSA9IHZhbGlkYXRlRnJvbnRlbmRNb2RlbFJlc291cmNlQ29tbWFuZE5hbWUoe1xuICAgICAgY29tbWFuZE5hbWU6IGNvbmZpZ3VyZWRDb21tYW5kTmFtZSxcbiAgICAgIGNvbW1hbmRUeXBlOiAvKiogQHR5cGUge1wiYXR0YWNoXCIgfCBcImNyZWF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcImRvd25sb2FkXCIgfCBcImZpbmRcIiB8IFwiaW5kZXhcIiB8IFwidXBkYXRlXCIgfCBcInVybFwifSAqLyAoYWN0aW9uKSxcbiAgICAgIG1vZGVsTmFtZVxuICAgIH0pXG5cbiAgICBpZiAoY29tbWFuZE5hbWUgPT09IHZhbGlkYXRlZENvbW1hbmROYW1lKSB7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtcImF0dGFjaFwiIHwgXCJjcmVhdGVcIiB8IFwiZGVzdHJveVwiIHwgXCJkb3dubG9hZFwiIHwgXCJmaW5kXCIgfCBcImluZGV4XCIgfCBcInVwZGF0ZVwiIHwgXCJ1cmxcIn0gKi8gKGFjdGlvbilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkJhY2tlbmRQcm9qZWN0Q29uZmlndXJhdGlvbltdfSBhcmdzLmJhY2tlbmRQcm9qZWN0cyAtIEJhY2tlbmQgcHJvamVjdHMgdG8gc2Nhbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmN1cnJlbnRQYXRoIC0gUmVxdWVzdCBwYXRoIHdpdGhvdXQgcXVlcnkuXG4gKiBAcmV0dXJucyB7e2NvbW1hbmROYW1lOiBzdHJpbmcsIG1lbWJlcklkPzogc3RyaW5nLCBtZXRob2ROYW1lOiBzdHJpbmcsIG1vZGVsTmFtZTogc3RyaW5nLCByZXNvdXJjZVBhdGg6IHN0cmluZywgc2NvcGU6IFwiY29sbGVjdGlvblwiIHwgXCJtZW1iZXJcIn0gfCBudWxsfSAtIE1hdGNoZWQgY3VzdG9tIGNvbW1hbmQgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsQ3VzdG9tQ29tbWFuZEZvclBhdGgoe2JhY2tlbmRQcm9qZWN0cywgY3VycmVudFBhdGh9KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRDdXJyZW50UGF0aCA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZVBhdGhGb3JNYXRjaChjdXJyZW50UGF0aClcblxuICBmb3IgKGNvbnN0IGJhY2tlbmRQcm9qZWN0IG9mIGJhY2tlbmRQcm9qZWN0cykge1xuICAgIGNvbnN0IHJlc291cmNlcyA9IGZyb250ZW5kTW9kZWxSZXNvdXJjZXNGb3JCYWNrZW5kUHJvamVjdChiYWNrZW5kUHJvamVjdClcblxuICAgIGZvciAoY29uc3QgbW9kZWxOYW1lIGluIHJlc291cmNlcykge1xuICAgICAgY29uc3QgcmVzb3VyY2VEZWZpbml0aW9uID0gcmVzb3VyY2VzW21vZGVsTmFtZV1cbiAgICAgIGNvbnN0IHJlc291cmNlQ29uZmlndXJhdGlvbiA9IGZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25Gcm9tRGVmaW5pdGlvbihyZXNvdXJjZURlZmluaXRpb24pXG5cbiAgICAgIGlmICghcmVzb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc291cmNlUGF0aCA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZVBhdGhGb3JNYXRjaChmcm9udGVuZE1vZGVsUmVzb3VyY2VQYXRoKG1vZGVsTmFtZSwgcmVzb3VyY2VEZWZpbml0aW9uKSlcbiAgICAgIGNvbnN0IGV4cGVjdGVkUHJlZml4ID0gYCR7cmVzb3VyY2VQYXRofS9gXG5cbiAgICAgIGlmICghbm9ybWFsaXplZEN1cnJlbnRQYXRoLnN0YXJ0c1dpdGgoZXhwZWN0ZWRQcmVmaXgpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IG5vcm1hbGl6ZWRDdXJyZW50UGF0aFxuICAgICAgICAuc2xpY2UoZXhwZWN0ZWRQcmVmaXgubGVuZ3RoKVxuICAgICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcblxuICAgICAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZENvbGxlY3Rpb25Db21tYW5kID0gT2JqZWN0LmVudHJpZXMocmVzb3VyY2VDb25maWd1cmF0aW9uLmNvbGxlY3Rpb25Db21tYW5kcylcbiAgICAgICAgICAuZmluZCgoWywgY29tbWFuZE5hbWVdKSA9PiBjb21tYW5kTmFtZSA9PT0gcGF0aFNlZ21lbnRzWzBdKVxuXG4gICAgICAgIGlmIChtYXRjaGVkQ29sbGVjdGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29tbWFuZE5hbWU6IG1hdGNoZWRDb2xsZWN0aW9uQ29tbWFuZFsxXSxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IG1hdGNoZWRDb2xsZWN0aW9uQ29tbWFuZFswXSxcbiAgICAgICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgICAgIHJlc291cmNlUGF0aCxcbiAgICAgICAgICAgIHNjb3BlOiBcImNvbGxlY3Rpb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBjb25zdCBtYXRjaGVkTWVtYmVyQ29tbWFuZCA9IE9iamVjdC5lbnRyaWVzKHJlc291cmNlQ29uZmlndXJhdGlvbi5tZW1iZXJDb21tYW5kcylcbiAgICAgICAgICAuZmluZCgoWywgY29tbWFuZE5hbWVdKSA9PiBjb21tYW5kTmFtZSA9PT0gcGF0aFNlZ21lbnRzWzFdKVxuXG4gICAgICAgIGlmIChtYXRjaGVkTWVtYmVyQ29tbWFuZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb21tYW5kTmFtZTogbWF0Y2hlZE1lbWJlckNvbW1hbmRbMV0sXG4gICAgICAgICAgICBtZW1iZXJJZDogZGVjb2RlVVJJQ29tcG9uZW50KHBhdGhTZWdtZW50c1swXSksXG4gICAgICAgICAgICBtZXRob2ROYW1lOiBtYXRjaGVkTWVtYmVyQ29tbWFuZFswXSxcbiAgICAgICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgICAgIHJlc291cmNlUGF0aCxcbiAgICAgICAgICAgIHNjb3BlOiBcIm1lbWJlclwiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFBhdGggdmFsdWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIE5vcm1hbGl6ZWQgcGF0aCB3aXRoIGxlYWRpbmcgc2xhc2ggYW5kIG5vIHRyYWlsaW5nIHNsYXNoLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VQYXRoRm9yTWF0Y2gocGF0aCkge1xuICBjb25zdCB3aXRoTGVhZGluZ1NsYXNoID0gcGF0aC5zdGFydHNXaXRoKFwiL1wiKSA/IHBhdGggOiBgLyR7cGF0aH1gXG5cbiAgaWYgKHdpdGhMZWFkaW5nU2xhc2gubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiB3aXRoTGVhZGluZ1NsYXNoLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgfVxuXG4gIHJldHVybiB3aXRoTGVhZGluZ1NsYXNoXG59XG4iXX0=
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "velocious": "build/bin/velocious.js"
4
4
  },
5
5
  "name": "velocious",
6
- "version": "1.0.349",
6
+ "version": "1.0.350",
7
7
  "main": "build/index.js",
8
8
  "types": "build/index.d.ts",
9
9
  "files": [