angular-odata 0.99.5 → 0.101.0

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.
Files changed (71) hide show
  1. package/esm2020/lib/api.mjs +66 -56
  2. package/esm2020/lib/cache/cache.mjs +56 -4
  3. package/esm2020/lib/cache/memory.mjs +14 -4
  4. package/esm2020/lib/cache/storage.mjs +21 -2
  5. package/esm2020/lib/client.mjs +3 -3
  6. package/esm2020/lib/constants.mjs +2 -1
  7. package/esm2020/lib/helper.mjs +91 -86
  8. package/esm2020/lib/models/collection.mjs +102 -41
  9. package/esm2020/lib/models/model.mjs +20 -5
  10. package/esm2020/lib/models/options.mjs +159 -114
  11. package/esm2020/lib/module.mjs +4 -4
  12. package/esm2020/lib/options.mjs +6 -10
  13. package/esm2020/lib/resources/query/builder.mjs +4 -7
  14. package/esm2020/lib/resources/query/expressions/syntax.mjs +1 -1
  15. package/esm2020/lib/resources/query/handlers.mjs +97 -18
  16. package/esm2020/lib/resources/query/options.mjs +41 -35
  17. package/esm2020/lib/resources/resource.mjs +33 -68
  18. package/esm2020/lib/resources/responses/annotations.mjs +6 -6
  19. package/esm2020/lib/resources/responses/metadata.mjs +1 -1
  20. package/esm2020/lib/resources/responses/options.mjs +1 -2
  21. package/esm2020/lib/resources/responses/response.mjs +4 -4
  22. package/esm2020/lib/resources/types/batch.mjs +108 -97
  23. package/esm2020/lib/resources/types/entity-set.mjs +1 -1
  24. package/esm2020/lib/resources/types/function.mjs +9 -1
  25. package/esm2020/lib/schema/callable.mjs +6 -2
  26. package/esm2020/lib/schema/enum-type.mjs +5 -2
  27. package/esm2020/lib/schema/parsers/callable.mjs +11 -20
  28. package/esm2020/lib/schema/parsers/enum-type.mjs +16 -18
  29. package/esm2020/lib/schema/parsers/structured-type.mjs +15 -27
  30. package/esm2020/lib/schema/structured-type.mjs +10 -11
  31. package/esm2020/lib/services/factory.mjs +3 -3
  32. package/esm2020/lib/types.mjs +1 -1
  33. package/esm2020/lib/utils/arrays.mjs +10 -0
  34. package/esm2020/lib/utils/enums.mjs +3 -3
  35. package/esm2020/lib/utils/objects.mjs +10 -5
  36. package/esm2020/lib/utils/types.mjs +5 -1
  37. package/esm2020/lib/utils/urls.mjs +2 -2
  38. package/fesm2015/angular-odata.mjs +3220 -2938
  39. package/fesm2015/angular-odata.mjs.map +1 -1
  40. package/fesm2020/angular-odata.mjs +3229 -2946
  41. package/fesm2020/angular-odata.mjs.map +1 -1
  42. package/lib/cache/cache.d.ts +62 -1
  43. package/lib/cache/memory.d.ts +10 -0
  44. package/lib/cache/storage.d.ts +19 -0
  45. package/lib/constants.d.ts +1 -0
  46. package/lib/helper.d.ts +28 -57
  47. package/lib/models/collection.d.ts +9 -5
  48. package/lib/models/model.d.ts +9 -12
  49. package/lib/models/options.d.ts +11 -10
  50. package/lib/options.d.ts +5 -9
  51. package/lib/resources/query/builder.d.ts +1 -1
  52. package/lib/resources/query/handlers.d.ts +126 -3
  53. package/lib/resources/query/options.d.ts +7 -9
  54. package/lib/resources/resource.d.ts +5 -4
  55. package/lib/resources/responses/annotations.d.ts +12 -18
  56. package/lib/resources/responses/options.d.ts +2 -3
  57. package/lib/resources/responses/response.d.ts +1 -3
  58. package/lib/resources/types/batch.d.ts +8 -11
  59. package/lib/resources/types/entity-set.d.ts +1 -1
  60. package/lib/resources/types/function.d.ts +3 -0
  61. package/lib/schema/callable.d.ts +4 -4
  62. package/lib/schema/enum-type.d.ts +4 -4
  63. package/lib/schema/parsers/callable.d.ts +13 -11
  64. package/lib/schema/parsers/enum-type.d.ts +9 -7
  65. package/lib/schema/parsers/structured-type.d.ts +11 -11
  66. package/lib/schema/structured-type.d.ts +4 -4
  67. package/lib/types.d.ts +10 -12
  68. package/lib/utils/arrays.d.ts +3 -0
  69. package/lib/utils/enums.d.ts +2 -2
  70. package/lib/utils/types.d.ts +1 -0
  71. package/package.json +3 -3
@@ -8,29 +8,48 @@ export class ODataInStorageCache extends ODataCache {
8
8
  this.restore();
9
9
  window.addEventListener('beforeunload', () => this.store());
10
10
  }
11
+ /**
12
+ * Store the cache in the storage
13
+ */
11
14
  store() {
12
15
  this.storage.setItem(this.name, JSON.stringify(Array.from(this.entries.entries())));
13
16
  }
17
+ /**
18
+ * Restore the cache from the storage
19
+ */
14
20
  restore() {
15
21
  this.entries = new Map(JSON.parse(this.storage.getItem(this.name) || '[]'));
16
22
  }
23
+ /**
24
+ * Flush the cache and clean the storage
25
+ */
17
26
  flush() {
18
27
  super.flush();
19
28
  this.store();
20
29
  }
30
+ /**
31
+ * Store the response in the cache
32
+ * @param req The request with the resource to store the response
33
+ * @param res The response to store in the cache
34
+ */
21
35
  putResponse(req, res) {
22
36
  const scope = this.scope(req);
23
- const tags = this.tags(req, res);
37
+ const tags = this.tags(res);
24
38
  this.put(req.pathWithParams, res.toJSON(), {
25
39
  timeout: res.options.maxAge,
26
40
  scope,
27
41
  tags,
28
42
  });
29
43
  }
44
+ /**
45
+ * Restore the response from the cache
46
+ * @param req The request with the resource to get the response
47
+ * @returns The response from the cache
48
+ */
30
49
  getResponse(req) {
31
50
  const scope = this.scope(req);
32
51
  const data = this.get(req.pathWithParams, { scope });
33
52
  return data !== undefined ? ODataResponse.fromJSON(req, data) : undefined;
34
53
  }
35
54
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9jYWNoZS9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQW1CLE1BQU0sU0FBUyxDQUFDO0FBVXRELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxVQUFVO0lBSWpELFlBQVksRUFDVixJQUFJLEVBQ0osT0FBTyxHQUFHLGNBQWMsRUFDeEIsT0FBTyxHQUtSO1FBQ0MsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2xCLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUNuRCxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxDQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FDcEQsQ0FBQztJQUNKLENBQUM7SUFFUSxLQUFLO1FBQ1osS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFzQixFQUFFLEdBQXVCO1FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBZSxHQUFHLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN2RCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQzNCLEtBQUs7WUFDTCxJQUFJO1NBQ0wsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFzQjtRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQWUsR0FBRyxDQUFDLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFbkUsT0FBTyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzVFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9EYXRhUmVxdWVzdCwgT0RhdGFSZXNwb25zZSB9IGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBPRGF0YUNhY2hlLCBPRGF0YUNhY2hlRW50cnkgfSBmcm9tICcuL2NhY2hlJztcblxuaW50ZXJmYWNlIFJlc3BvbnNlSnNvbiB7XG4gIGJvZHk6IGFueSB8IG51bGw7XG4gIGhlYWRlcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH07XG4gIHN0YXR1czogbnVtYmVyO1xuICBzdGF0dXNUZXh0OiBzdHJpbmc7XG4gIHVybDogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGNsYXNzIE9EYXRhSW5TdG9yYWdlQ2FjaGUgZXh0ZW5kcyBPRGF0YUNhY2hlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBzdG9yYWdlOiBTdG9yYWdlO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBuYW1lLFxuICAgIHN0b3JhZ2UgPSBzZXNzaW9uU3RvcmFnZSxcbiAgICB0aW1lb3V0LFxuICB9OiB7XG4gICAgdGltZW91dD86IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgc3RvcmFnZT86IFN0b3JhZ2U7XG4gIH0pIHtcbiAgICBzdXBlcih7IHRpbWVvdXQgfSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnN0b3JhZ2UgPSBzdG9yYWdlO1xuICAgIHRoaXMucmVzdG9yZSgpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCAoKSA9PiB0aGlzLnN0b3JlKCkpO1xuICB9XG5cbiAgc3RvcmUoKSB7XG4gICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oXG4gICAgICB0aGlzLm5hbWUsXG4gICAgICBKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHRoaXMuZW50cmllcy5lbnRyaWVzKCkpKVxuICAgICk7XG4gIH1cblxuICByZXN0b3JlKCkge1xuICAgIHRoaXMuZW50cmllcyA9IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUNhY2hlRW50cnk8YW55Pj4oXG4gICAgICBKU09OLnBhcnNlKHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMubmFtZSkgfHwgJ1tdJylcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgZmx1c2goKSB7XG4gICAgc3VwZXIuZmx1c2goKTtcbiAgICB0aGlzLnN0b3JlKCk7XG4gIH1cblxuICBwdXRSZXNwb25zZShyZXE6IE9EYXRhUmVxdWVzdDxhbnk+LCByZXM6IE9EYXRhUmVzcG9uc2U8YW55Pikge1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zY29wZShyZXEpO1xuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLnRhZ3MocmVxLCByZXMpO1xuICAgIHRoaXMucHV0PFJlc3BvbnNlSnNvbj4ocmVxLnBhdGhXaXRoUGFyYW1zLCByZXMudG9KU09OKCksIHtcbiAgICAgIHRpbWVvdXQ6IHJlcy5vcHRpb25zLm1heEFnZSxcbiAgICAgIHNjb3BlLFxuICAgICAgdGFncyxcbiAgICB9KTtcbiAgfVxuXG4gIGdldFJlc3BvbnNlKHJlcTogT0RhdGFSZXF1ZXN0PGFueT4pOiBPRGF0YVJlc3BvbnNlPGFueT4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zY29wZShyZXEpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldDxSZXNwb25zZUpzb24+KHJlcS5wYXRoV2l0aFBhcmFtcywgeyBzY29wZSB9KTtcblxuICAgIHJldHVybiBkYXRhICE9PSB1bmRlZmluZWQgPyBPRGF0YVJlc3BvbnNlLmZyb21KU09OKHJlcSwgZGF0YSkgOiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9jYWNoZS9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQW1CLE1BQU0sU0FBUyxDQUFDO0FBVXRELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxVQUFVO0lBSWpELFlBQVksRUFDVixJQUFJLEVBQ0osT0FBTyxHQUFHLGNBQWMsRUFDeEIsT0FBTyxHQUtSO1FBQ0MsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDbEIsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQ25ELENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQ3BELENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDTSxLQUFLO1FBQ1osS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsR0FBc0IsRUFBRSxHQUF1QjtRQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBZSxHQUFHLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN2RCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQzNCLEtBQUs7WUFDTCxJQUFJO1NBQ0wsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsR0FBc0I7UUFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFlLEdBQUcsQ0FBQyxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRW5FLE9BQU8sSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM1RSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPRGF0YVJlcXVlc3QsIE9EYXRhUmVzcG9uc2UgfSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgT0RhdGFDYWNoZSwgT0RhdGFDYWNoZUVudHJ5IH0gZnJvbSAnLi9jYWNoZSc7XG5cbmludGVyZmFjZSBSZXNwb25zZUpzb24ge1xuICBib2R5OiBhbnkgfCBudWxsO1xuICBoZWFkZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9O1xuICBzdGF0dXM6IG51bWJlcjtcbiAgc3RhdHVzVGV4dDogc3RyaW5nO1xuICB1cmw6IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBjbGFzcyBPRGF0YUluU3RvcmFnZUNhY2hlIGV4dGVuZHMgT0RhdGFDYWNoZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc3RvcmFnZTogU3RvcmFnZTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgbmFtZSxcbiAgICBzdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2UsXG4gICAgdGltZW91dCxcbiAgfToge1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHN0b3JhZ2U/OiBTdG9yYWdlO1xuICB9KSB7XG4gICAgc3VwZXIoeyB0aW1lb3V0IH0pO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5zdG9yYWdlID0gc3RvcmFnZTtcbiAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgKCkgPT4gdGhpcy5zdG9yZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSB0aGUgY2FjaGUgaW4gdGhlIHN0b3JhZ2VcbiAgICovXG4gIHN0b3JlKCkge1xuICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKFxuICAgICAgdGhpcy5uYW1lLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMuZW50cmllcygpKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgdGhlIGNhY2hlIGZyb20gdGhlIHN0b3JhZ2VcbiAgICovXG4gIHJlc3RvcmUoKSB7XG4gICAgdGhpcy5lbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIE9EYXRhQ2FjaGVFbnRyeTxhbnk+PihcbiAgICAgIEpTT04ucGFyc2UodGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5uYW1lKSB8fCAnW10nKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggdGhlIGNhY2hlIGFuZCBjbGVhbiB0aGUgc3RvcmFnZVxuICAgKi9cbiAgb3ZlcnJpZGUgZmx1c2goKSB7XG4gICAgc3VwZXIuZmx1c2goKTtcbiAgICB0aGlzLnN0b3JlKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgdGhlIHJlc3BvbnNlIGluIHRoZSBjYWNoZVxuICAgKiBAcGFyYW0gcmVxIFRoZSByZXF1ZXN0IHdpdGggdGhlIHJlc291cmNlIHRvIHN0b3JlIHRoZSByZXNwb25zZVxuICAgKiBAcGFyYW0gcmVzIFRoZSByZXNwb25zZSB0byBzdG9yZSBpbiB0aGUgY2FjaGVcbiAgICovXG4gIHB1dFJlc3BvbnNlKHJlcTogT0RhdGFSZXF1ZXN0PGFueT4sIHJlczogT0RhdGFSZXNwb25zZTxhbnk+KSB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLnNjb3BlKHJlcSk7XG4gICAgY29uc3QgdGFncyA9IHRoaXMudGFncyhyZXMpO1xuICAgIHRoaXMucHV0PFJlc3BvbnNlSnNvbj4ocmVxLnBhdGhXaXRoUGFyYW1zLCByZXMudG9KU09OKCksIHtcbiAgICAgIHRpbWVvdXQ6IHJlcy5vcHRpb25zLm1heEFnZSxcbiAgICAgIHNjb3BlLFxuICAgICAgdGFncyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZSByZXNwb25zZSBmcm9tIHRoZSBjYWNoZSBcbiAgICogQHBhcmFtIHJlcSBUaGUgcmVxdWVzdCB3aXRoIHRoZSByZXNvdXJjZSB0byBnZXQgdGhlIHJlc3BvbnNlXG4gICAqIEByZXR1cm5zIFRoZSByZXNwb25zZSBmcm9tIHRoZSBjYWNoZVxuICAgKi9cbiAgZ2V0UmVzcG9uc2UocmVxOiBPRGF0YVJlcXVlc3Q8YW55Pik6IE9EYXRhUmVzcG9uc2U8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLnNjb3BlKHJlcSk7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0PFJlc3BvbnNlSnNvbj4ocmVxLnBhdGhXaXRoUGFyYW1zLCB7IHNjb3BlIH0pO1xuXG4gICAgcmV0dXJuIGRhdGEgIT09IHVuZGVmaW5lZCA/IE9EYXRhUmVzcG9uc2UuZnJvbUpTT04ocmVxLCBkYXRhKSA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -260,9 +260,9 @@ export class ODataClient {
260
260
  return this.request('PUT', resource, addBody(options, body));
261
261
  }
262
262
  }
263
- ODataClient.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ODataClient, deps: [{ token: i1.HttpClient }, { token: i2.ODataSettings }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
264
- ODataClient.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ODataClient, providedIn: 'root' });
265
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ODataClient, decorators: [{
263
+ ODataClient.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ODataClient, deps: [{ token: i1.HttpClient }, { token: i2.ODataSettings }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
264
+ ODataClient.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ODataClient, providedIn: 'root' });
265
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ODataClient, decorators: [{
266
266
  type: Injectable,
267
267
  args: [{
268
268
  providedIn: 'root',
@@ -59,6 +59,7 @@ export const BINARY = 'binary';
59
59
  export const BOUNDARY_PREFIX_SUFFIX = '--';
60
60
  export const BATCH_PREFIX = 'batch_';
61
61
  export const CHANGESET_PREFIX = 'changeset_';
62
+ export const DEFAULT_METADATA = 'minimal';
62
63
  export const DEFAULT_STRIP_METADATA = 'full';
63
64
  export const DEFAULT_FETCH_POLICY = 'network-only';
64
65
  export const DEFAULT_TIMEOUT = 60; // Time in seconds
@@ -82,4 +83,4 @@ export const COMPUTED = /.*Computed$/;
82
83
  export const OPTIMISTIC_CONCURRENCY = /.*OptimisticConcurrency$/;
83
84
  export const DESCRIPTION = /.*Description$/;
84
85
  export const LONG_DESCRIPTION = /.*LongDescription$/;
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUM7QUFFcEMsV0FBVztBQUNYLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDL0IsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUM7QUFFM0MsZUFBZTtBQUNmLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUM7QUFDMUMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsZUFBZSxDQUFDO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQztBQUM3QyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDO0FBQ2pDLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDL0IsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHO0lBQ25D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QUFDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQzlCLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUM7QUFDdEMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBRXZDLFNBQVM7QUFDVCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDO0FBRXJDLHNEQUFzRDtBQUN0RCx3R0FBd0c7QUFFeEcsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQztBQUN0QyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRywwQkFBMEIsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7QUFDNUMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgJElEID0gJyRpZCc7XG5leHBvcnQgY29uc3QgT0RBVEFfSUQgPSAnQG9kYXRhLmlkJztcblxuLy8gU0VHTUVOVFNcbmV4cG9ydCBjb25zdCAkTUVUQURBVEEgPSAnJG1ldGFkYXRhJztcbmV4cG9ydCBjb25zdCAkQkFUQ0ggPSAnJGJhdGNoJztcbmV4cG9ydCBjb25zdCAkUkVGID0gJyRyZWYnO1xuZXhwb3J0IGNvbnN0ICRWQUxVRSA9ICckdmFsdWUnO1xuZXhwb3J0IGNvbnN0ICRDT1VOVCA9ICckY291bnQnO1xuZXhwb3J0IGNvbnN0ICRRVUVSWSA9ICckcXVlcnknO1xuZXhwb3J0IGNvbnN0ICRJTkxJTkVDT1VOVCA9ICckaW5saW5lY291bnQnO1xuXG4vLyBIVFRQIEhFQURFUlNcbmV4cG9ydCBjb25zdCBJRl9NQVRDSF9IRUFERVIgPSAnSWYtTWF0Y2gnO1xuZXhwb3J0IGNvbnN0IElGX05PTkVfTUFUQ0hfSEVBREVSID0gJ0lmLU5vbmUtTWF0Y2gnO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfVFlQRSA9ICdDb250ZW50LVR5cGUnO1xuZXhwb3J0IGNvbnN0IENBQ0hFX0NPTlRST0wgPSAnQ2FjaGUtQ29udHJvbCc7XG5leHBvcnQgY29uc3QgSFRUUDExID0gJ0hUVFAvMS4xJztcbmV4cG9ydCBjb25zdCBBQ0NFUFQgPSAnQWNjZXB0JztcbmV4cG9ydCBjb25zdCBQUkVGRVIgPSAnUHJlZmVyJztcbmV4cG9ydCBjb25zdCBPREFUQV9WRVJTSU9OID0gJ09EYXRhLVZlcnNpb24nO1xuZXhwb3J0IGNvbnN0IE9EQVRBX1ZFUlNJT05fSEVBREVSUyA9IFtcbiAgT0RBVEFfVkVSU0lPTixcbiAgT0RBVEFfVkVSU0lPTi50b0xvd2VyQ2FzZSgpLFxuICAnZGF0YXNlcnZpY2V2ZXJzaW9uJyxcbl07XG5leHBvcnQgY29uc3QgRVRBR19IRUFERVIgPSAnRVRhZyc7XG5leHBvcnQgY29uc3QgRVRBR19IRUFERVJTID0gW0VUQUdfSEVBREVSLCBFVEFHX0hFQURFUi50b0xvd2VyQ2FzZSgpXTtcbmV4cG9ydCBjb25zdCBMT0NBVElPTl9IRUFERVIgPSAnTG9jYXRpb24nO1xuZXhwb3J0IGNvbnN0IExPQ0FUSU9OX0hFQURFUlMgPSBbXG4gIExPQ0FUSU9OX0hFQURFUixcbiAgTE9DQVRJT05fSEVBREVSLnRvTG93ZXJDYXNlKCksXG5dO1xuZXhwb3J0IGNvbnN0IE9EQVRBX0VOVElUWUlEID0gJ09EYXRhLUVudGl0eUlkJztcbmV4cG9ydCBjb25zdCBPREFUQV9FTlRJVFlJRF9IRUFERVJTID0gW1xuICBPREFUQV9FTlRJVFlJRCxcbiAgT0RBVEFfRU5USVRZSUQudG9Mb3dlckNhc2UoKSxcbl07XG5leHBvcnQgY29uc3QgUFJFRkVSRU5DRV9BUFBMSUVEID0gJ1ByZWZlcmVuY2UtQXBwbGllZCc7XG5leHBvcnQgY29uc3QgUFJFRkVSRU5DRV9BUFBMSUVEX0hFQURFUlMgPSBbXG4gIFBSRUZFUkVOQ0VfQVBQTElFRCxcbiAgUFJFRkVSRU5DRV9BUFBMSUVELnRvTG93ZXJDYXNlKCksXG5dO1xuZXhwb3J0IGNvbnN0IFJFVFJZX0FGVEVSID0gJ1JldHJ5LUFmdGVyJztcbmV4cG9ydCBjb25zdCBSRVRSWV9BRlRFUl9IRUFERVJTID0gW1JFVFJZX0FGVEVSLCBSRVRSWV9BRlRFUi50b0xvd2VyQ2FzZSgpXTtcblxuLy8gSFRUUCBIRUFERVIgVkFMVUVTXG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTiA9ICdhcHBsaWNhdGlvbi9qc29uJztcbmV4cG9ydCBjb25zdCBBUFBMSUNBVElPTl9IVFRQID0gJ2FwcGxpY2F0aW9uL2h0dHAnO1xuZXhwb3J0IGNvbnN0IFRFWFRfUExBSU4gPSAndGV4dC9wbGFpbic7XG5leHBvcnQgY29uc3QgTVVMVElQQVJUX01JWEVEID0gJ211bHRpcGFydC9taXhlZCc7XG5leHBvcnQgY29uc3QgTVVMVElQQVJUX01JWEVEX0JPVU5EQVJZID0gJ211bHRpcGFydC9taXhlZDtib3VuZGFyeT0nO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfVFJBTlNGRVJfRU5DT0RJTkcgPSAnQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyc7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9JRCA9ICdDb250ZW50LUlEJztcbmV4cG9ydCBjb25zdCBNQVhfQUdFID0gJ21heC1hZ2UnO1xuXG4vLyBWRVJTSU9OU1xuZXhwb3J0IGNvbnN0IFZFUlNJT05fNF8wID0gJzQuMCc7XG5leHBvcnQgY29uc3QgVkVSU0lPTl8zXzAgPSAnMy4wJztcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzJfMCA9ICcyLjAnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVkVSU0lPTiA9IFZFUlNJT05fNF8wO1xuXG5leHBvcnQgY29uc3QgQklOQVJZID0gJ2JpbmFyeSc7XG5leHBvcnQgY29uc3QgQk9VTkRBUllfUFJFRklYX1NVRkZJWCA9ICctLSc7XG5leHBvcnQgY29uc3QgQkFUQ0hfUFJFRklYID0gJ2JhdGNoXyc7XG5leHBvcnQgY29uc3QgQ0hBTkdFU0VUX1BSRUZJWCA9ICdjaGFuZ2VzZXRfJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NUUklQX01FVEFEQVRBID0gJ2Z1bGwnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRkVUQ0hfUE9MSUNZID0gJ25ldHdvcmstb25seSc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9USU1FT1VUID0gNjA7IC8vIFRpbWUgaW4gc2Vjb25kc1xuZXhwb3J0IGNvbnN0IENBTExBQkxFX0JJTkRJTkdfUEFSQU1FVEVSID0gJ2JpbmRpbmdQYXJhbWV0ZXInO1xuZXhwb3J0IGNvbnN0IFhTU0lfUFJFRklYID0gL15cXClcXF1cXH0nLD9cXG4vO1xuXG4vLyBVUkwgUEFSVFNcbmV4cG9ydCBjb25zdCBRVUVSWV9TRVBBUkFUT1IgPSAnPyc7XG5leHBvcnQgY29uc3QgUEFSQU1fU0VQQVJBVE9SID0gJyYnO1xuZXhwb3J0IGNvbnN0IFZBTFVFX1NFUEFSQVRPUiA9ICc9JztcbmV4cG9ydCBjb25zdCBQQVRIX1NFUEFSQVRPUiA9ICcvJztcbmV4cG9ydCBjb25zdCBPREFUQV9QQVJBTV9QUkVGSVggPSAnJCc7XG5leHBvcnQgY29uc3QgT0RBVEFfQUxJQVNfUFJFRklYID0gJ0AnO1xuXG5leHBvcnQgY29uc3QgTkVXTElORSA9ICdcXHJcXG4nO1xuZXhwb3J0IGNvbnN0IE5FV0xJTkVfUkVHRVhQID0gL1xccj9cXG4vO1xuZXhwb3J0IGNvbnN0IENBQ0hFX0tFWV9TRVBBUkFUT1IgPSAnOic7XG5cbi8vIE1vZGVsc1xuZXhwb3J0IGNvbnN0IENJRF9GSUVMRF9OQU1FID0gJ19jaWQnO1xuXG4vLyBTdGFuZGFyZCB2b2NhYnVsYXJpZXMgZm9yIGFubm90YXRpbmcgT0RhdGEgc2VydmljZXNcbi8vIGh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhLXZvY2FidWxhcmllcy92NC4wL2NzcHJkMDEvb2RhdGEtdm9jYWJ1bGFyaWVzLXY0LjAtY3NwcmQwMS5odG1sXG5cbmV4cG9ydCBjb25zdCBDT01QVVRFRCA9IC8uKkNvbXB1dGVkJC87XG5leHBvcnQgY29uc3QgT1BUSU1JU1RJQ19DT05DVVJSRU5DWSA9IC8uKk9wdGltaXN0aWNDb25jdXJyZW5jeSQvO1xuZXhwb3J0IGNvbnN0IERFU0NSSVBUSU9OID0gLy4qRGVzY3JpcHRpb24kLztcbmV4cG9ydCBjb25zdCBMT05HX0RFU0NSSVBUSU9OID0gLy4qTG9uZ0Rlc2NyaXB0aW9uJC87XG4iXX0=
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUM7QUFFcEMsV0FBVztBQUNYLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDL0IsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUM7QUFFM0MsZUFBZTtBQUNmLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUM7QUFDMUMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsZUFBZSxDQUFDO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQztBQUM3QyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDO0FBQ2pDLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDL0IsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHO0lBQ25D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QUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQUN0QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUM5QixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztBQUV2QyxTQUFTO0FBQ1QsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQztBQUVyQyxzREFBc0Q7QUFDdEQsd0dBQXdHO0FBRXhHLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUM7QUFDdEMsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsMEJBQTBCLENBQUM7QUFDakUsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDO0FBQzVDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0ICRJRCA9ICckaWQnO1xuZXhwb3J0IGNvbnN0IE9EQVRBX0lEID0gJ0BvZGF0YS5pZCc7XG5cbi8vIFNFR01FTlRTXG5leHBvcnQgY29uc3QgJE1FVEFEQVRBID0gJyRtZXRhZGF0YSc7XG5leHBvcnQgY29uc3QgJEJBVENIID0gJyRiYXRjaCc7XG5leHBvcnQgY29uc3QgJFJFRiA9ICckcmVmJztcbmV4cG9ydCBjb25zdCAkVkFMVUUgPSAnJHZhbHVlJztcbmV4cG9ydCBjb25zdCAkQ09VTlQgPSAnJGNvdW50JztcbmV4cG9ydCBjb25zdCAkUVVFUlkgPSAnJHF1ZXJ5JztcbmV4cG9ydCBjb25zdCAkSU5MSU5FQ09VTlQgPSAnJGlubGluZWNvdW50JztcblxuLy8gSFRUUCBIRUFERVJTXG5leHBvcnQgY29uc3QgSUZfTUFUQ0hfSEVBREVSID0gJ0lmLU1hdGNoJztcbmV4cG9ydCBjb25zdCBJRl9OT05FX01BVENIX0hFQURFUiA9ICdJZi1Ob25lLU1hdGNoJztcbmV4cG9ydCBjb25zdCBDT05URU5UX1RZUEUgPSAnQ29udGVudC1UeXBlJztcbmV4cG9ydCBjb25zdCBDQUNIRV9DT05UUk9MID0gJ0NhY2hlLUNvbnRyb2wnO1xuZXhwb3J0IGNvbnN0IEhUVFAxMSA9ICdIVFRQLzEuMSc7XG5leHBvcnQgY29uc3QgQUNDRVBUID0gJ0FjY2VwdCc7XG5leHBvcnQgY29uc3QgUFJFRkVSID0gJ1ByZWZlcic7XG5leHBvcnQgY29uc3QgT0RBVEFfVkVSU0lPTiA9ICdPRGF0YS1WZXJzaW9uJztcbmV4cG9ydCBjb25zdCBPREFUQV9WRVJTSU9OX0hFQURFUlMgPSBbXG4gIE9EQVRBX1ZFUlNJT04sXG4gIE9EQVRBX1ZFUlNJT04udG9Mb3dlckNhc2UoKSxcbiAgJ2RhdGFzZXJ2aWNldmVyc2lvbicsXG5dO1xuZXhwb3J0IGNvbnN0IEVUQUdfSEVBREVSID0gJ0VUYWcnO1xuZXhwb3J0IGNvbnN0IEVUQUdfSEVBREVSUyA9IFtFVEFHX0hFQURFUiwgRVRBR19IRUFERVIudG9Mb3dlckNhc2UoKV07XG5leHBvcnQgY29uc3QgTE9DQVRJT05fSEVBREVSID0gJ0xvY2F0aW9uJztcbmV4cG9ydCBjb25zdCBMT0NBVElPTl9IRUFERVJTID0gW1xuICBMT0NBVElPTl9IRUFERVIsXG4gIExPQ0FUSU9OX0hFQURFUi50b0xvd2VyQ2FzZSgpLFxuXTtcbmV4cG9ydCBjb25zdCBPREFUQV9FTlRJVFlJRCA9ICdPRGF0YS1FbnRpdHlJZCc7XG5leHBvcnQgY29uc3QgT0RBVEFfRU5USVRZSURfSEVBREVSUyA9IFtcbiAgT0RBVEFfRU5USVRZSUQsXG4gIE9EQVRBX0VOVElUWUlELnRvTG93ZXJDYXNlKCksXG5dO1xuZXhwb3J0IGNvbnN0IFBSRUZFUkVOQ0VfQVBQTElFRCA9ICdQcmVmZXJlbmNlLUFwcGxpZWQnO1xuZXhwb3J0IGNvbnN0IFBSRUZFUkVOQ0VfQVBQTElFRF9IRUFERVJTID0gW1xuICBQUkVGRVJFTkNFX0FQUExJRUQsXG4gIFBSRUZFUkVOQ0VfQVBQTElFRC50b0xvd2VyQ2FzZSgpLFxuXTtcbmV4cG9ydCBjb25zdCBSRVRSWV9BRlRFUiA9ICdSZXRyeS1BZnRlcic7XG5leHBvcnQgY29uc3QgUkVUUllfQUZURVJfSEVBREVSUyA9IFtSRVRSWV9BRlRFUiwgUkVUUllfQUZURVIudG9Mb3dlckNhc2UoKV07XG5cbi8vIEhUVFAgSEVBREVSIFZBTFVFU1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX0pTT04gPSAnYXBwbGljYXRpb24vanNvbic7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSFRUUCA9ICdhcHBsaWNhdGlvbi9odHRwJztcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOID0gJ3RleHQvcGxhaW4nO1xuZXhwb3J0IGNvbnN0IE1VTFRJUEFSVF9NSVhFRCA9ICdtdWx0aXBhcnQvbWl4ZWQnO1xuZXhwb3J0IGNvbnN0IE1VTFRJUEFSVF9NSVhFRF9CT1VOREFSWSA9ICdtdWx0aXBhcnQvbWl4ZWQ7Ym91bmRhcnk9JztcbmV4cG9ydCBjb25zdCBDT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HID0gJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfSUQgPSAnQ29udGVudC1JRCc7XG5leHBvcnQgY29uc3QgTUFYX0FHRSA9ICdtYXgtYWdlJztcblxuLy8gVkVSU0lPTlNcbmV4cG9ydCBjb25zdCBWRVJTSU9OXzRfMCA9ICc0LjAnO1xuZXhwb3J0IGNvbnN0IFZFUlNJT05fM18wID0gJzMuMCc7XG5leHBvcnQgY29uc3QgVkVSU0lPTl8yXzAgPSAnMi4wJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX1ZFUlNJT04gPSBWRVJTSU9OXzRfMDtcblxuZXhwb3J0IGNvbnN0IEJJTkFSWSA9ICdiaW5hcnknO1xuZXhwb3J0IGNvbnN0IEJPVU5EQVJZX1BSRUZJWF9TVUZGSVggPSAnLS0nO1xuZXhwb3J0IGNvbnN0IEJBVENIX1BSRUZJWCA9ICdiYXRjaF8nO1xuZXhwb3J0IGNvbnN0IENIQU5HRVNFVF9QUkVGSVggPSAnY2hhbmdlc2V0Xyc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9NRVRBREFUQSA9ICdtaW5pbWFsJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NUUklQX01FVEFEQVRBID0gJ2Z1bGwnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRkVUQ0hfUE9MSUNZID0gJ25ldHdvcmstb25seSc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9USU1FT1VUID0gNjA7IC8vIFRpbWUgaW4gc2Vjb25kc1xuZXhwb3J0IGNvbnN0IENBTExBQkxFX0JJTkRJTkdfUEFSQU1FVEVSID0gJ2JpbmRpbmdQYXJhbWV0ZXInO1xuZXhwb3J0IGNvbnN0IFhTU0lfUFJFRklYID0gL15cXClcXF1cXH0nLD9cXG4vO1xuXG4vLyBVUkwgUEFSVFNcbmV4cG9ydCBjb25zdCBRVUVSWV9TRVBBUkFUT1IgPSAnPyc7XG5leHBvcnQgY29uc3QgUEFSQU1fU0VQQVJBVE9SID0gJyYnO1xuZXhwb3J0IGNvbnN0IFZBTFVFX1NFUEFSQVRPUiA9ICc9JztcbmV4cG9ydCBjb25zdCBQQVRIX1NFUEFSQVRPUiA9ICcvJztcbmV4cG9ydCBjb25zdCBPREFUQV9QQVJBTV9QUkVGSVggPSAnJCc7XG5leHBvcnQgY29uc3QgT0RBVEFfQUxJQVNfUFJFRklYID0gJ0AnO1xuXG5leHBvcnQgY29uc3QgTkVXTElORSA9ICdcXHJcXG4nO1xuZXhwb3J0IGNvbnN0IE5FV0xJTkVfUkVHRVhQID0gL1xccj9cXG4vO1xuZXhwb3J0IGNvbnN0IENBQ0hFX0tFWV9TRVBBUkFUT1IgPSAnOic7XG5cbi8vIE1vZGVsc1xuZXhwb3J0IGNvbnN0IENJRF9GSUVMRF9OQU1FID0gJ19jaWQnO1xuXG4vLyBTdGFuZGFyZCB2b2NhYnVsYXJpZXMgZm9yIGFubm90YXRpbmcgT0RhdGEgc2VydmljZXNcbi8vIGh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhLXZvY2FidWxhcmllcy92NC4wL2NzcHJkMDEvb2RhdGEtdm9jYWJ1bGFyaWVzLXY0LjAtY3NwcmQwMS5odG1sXG5cbmV4cG9ydCBjb25zdCBDT01QVVRFRCA9IC8uKkNvbXB1dGVkJC87XG5leHBvcnQgY29uc3QgT1BUSU1JU1RJQ19DT05DVVJSRU5DWSA9IC8uKk9wdGltaXN0aWNDb25jdXJyZW5jeSQvO1xuZXhwb3J0IGNvbnN0IERFU0NSSVBUSU9OID0gLy4qRGVzY3JpcHRpb24kLztcbmV4cG9ydCBjb25zdCBMT05HX0RFU0NSSVBUSU9OID0gLy4qTG9uZ0Rlc2NyaXB0aW9uJC87XG4iXX0=
@@ -12,70 +12,69 @@ const ODataVersionBaseHelper = {
12
12
  property(data) {
13
13
  return this.VALUE in data ? data[this.VALUE] : data;
14
14
  },
15
- functions(value) {
16
- return Object.keys(value)
17
- .filter((k) => k.startsWith(this.ODATA_FUNCTION_PREFIX))
18
- .reduce((acc, key) => Object.assign(acc, { [key.substr(1)]: value[key] }), {});
15
+ functions(annots) {
16
+ const funcs = new Map();
17
+ [...annots.keys()]
18
+ .filter((key) => key.startsWith(this.ODATA_FUNCTION_PREFIX))
19
+ .forEach((key) => funcs.set(key.substring(this.ODATA_FUNCTION_PREFIX.length), annots.get(key)));
20
+ return funcs;
19
21
  },
20
- properties(value) {
21
- return Object.keys(value)
22
- .filter((k) => k.indexOf(this.ODATA_ANNOTATION_PREFIX) > 0)
23
- .reduce((acc, key) => {
24
- let name = key.substr(0, key.indexOf(this.ODATA_ANNOTATION_PREFIX));
25
- if (!(name in acc)) {
26
- acc[name] = {};
27
- }
28
- Object.assign(acc[name], {
29
- [key.substr(key.indexOf(this.ODATA_ANNOTATION_PREFIX))]: value[key],
30
- });
31
- return acc;
32
- }, {});
22
+ properties(annots) {
23
+ const props = new Map();
24
+ [...annots.keys()]
25
+ .filter((key) => key.indexOf(this.ODATA_ANNOTATION_PREFIX) > 0)
26
+ .forEach((key) => {
27
+ let name = key.substring(0, key.indexOf(this.ODATA_ANNOTATION_PREFIX));
28
+ let prop = props.has(name) ? props.get(name) : new Map();
29
+ prop.set(key.substring(key.indexOf(this.ODATA_ANNOTATION_PREFIX)), annots.get(key));
30
+ props.set(name, prop);
31
+ });
32
+ return props;
33
33
  },
34
- id(value, id) {
35
- if (id !== undefined)
36
- value[this.ODATA_ID] = id;
37
- return this.ODATA_ID in value
38
- ? value[this.ODATA_ID]
39
- : undefined;
34
+ id(annots) {
35
+ return annots instanceof Map
36
+ ? annots.get(this.ODATA_ID)
37
+ : annots[this.ODATA_ID];
40
38
  },
41
- etag(value, etag) {
42
- if (etag !== undefined)
43
- value[this.ODATA_ETAG] = etag;
44
- return this.ODATA_ETAG in value
45
- ? value[this.ODATA_ETAG]
46
- : undefined;
39
+ etag(annots) {
40
+ return annots instanceof Map
41
+ ? annots.get(this.ODATA_ETAG)
42
+ : annots[this.ODATA_ETAG];
47
43
  },
48
- type(value, type) {
49
- if (type !== undefined)
50
- value[this.ODATA_TYPE] = `#${type}`;
51
- if (!(this.ODATA_TYPE in value))
44
+ type(annots) {
45
+ let type = annots instanceof Map
46
+ ? annots.get(this.ODATA_TYPE)
47
+ : annots[this.ODATA_TYPE];
48
+ if (!type)
52
49
  return undefined;
53
- const t = value[this.ODATA_TYPE].substr(1);
54
- const matches = COLLECTION.exec(t);
50
+ type = type.substring(1);
51
+ const matches = COLLECTION.exec(type);
55
52
  if (matches)
56
53
  return matches[1].indexOf('.') === -1 ? `Edm.${matches[1]}` : matches[1];
57
- return t;
54
+ return type;
58
55
  },
59
- mediaEtag(value) {
60
- return this.ODATA_MEDIA_ETAG in value
61
- ? decodeURIComponent(value[this.ODATA_MEDIA_ETAG])
56
+ mediaEtag(annots) {
57
+ return annots.has(this.ODATA_MEDIA_ETAG)
58
+ ? decodeURIComponent(annots.get(this.ODATA_MEDIA_ETAG))
62
59
  : undefined;
63
60
  },
64
- metadataEtag(value) {
65
- return this.ODATA_METADATA_ETAG in value
66
- ? decodeURIComponent(value[this.ODATA_METADATA_ETAG])
61
+ metadataEtag(annots) {
62
+ return annots.has(this.ODATA_METADATA_ETAG)
63
+ ? decodeURIComponent(annots.get(this.ODATA_METADATA_ETAG))
67
64
  : undefined;
68
65
  },
69
- count(value) {
70
- return this.ODATA_COUNT in value
71
- ? Number(value[this.ODATA_COUNT])
66
+ count(annots) {
67
+ return annots.has(this.ODATA_COUNT)
68
+ ? Number(annots.get(this.ODATA_COUNT))
72
69
  : undefined;
73
70
  },
74
71
  annotations(value) {
75
- return Object.keys(value)
76
- .filter((key) => key.indexOf(this.ODATA_ANNOTATION_PREFIX) !== -1 ||
72
+ const annots = new Map();
73
+ Object.entries(value)
74
+ .filter(([key]) => key.indexOf(this.ODATA_ANNOTATION_PREFIX) !== -1 ||
77
75
  key.startsWith(this.ODATA_FUNCTION_PREFIX))
78
- .reduce((acc, key) => Object.assign(acc, { [key]: value[key] }), {});
76
+ .forEach(([key, value]) => annots.set(key, value));
77
+ return annots;
79
78
  },
80
79
  attributes(value, metadata) {
81
80
  return Object.entries(value)
@@ -89,39 +88,39 @@ const ODataVersionBaseHelper = {
89
88
  !k.startsWith(this.ODATA_FUNCTION_PREFIX)))
90
89
  .reduce((acc, e) => ({ ...acc, [e[0]]: e[1] }), {});
91
90
  },
92
- nextLink(value) {
93
- return this.ODATA_NEXTLINK in value
94
- ? decodeURIComponent(value[this.ODATA_NEXTLINK])
91
+ nextLink(annots) {
92
+ return annots.has(this.ODATA_NEXTLINK)
93
+ ? decodeURIComponent(annots.get(this.ODATA_NEXTLINK))
95
94
  : undefined;
96
95
  },
97
- readLink(value) {
98
- return this.ODATA_READLINK in value
99
- ? decodeURIComponent(value[this.ODATA_READLINK])
96
+ readLink(annots) {
97
+ return annots.has(this.ODATA_READLINK)
98
+ ? decodeURIComponent(annots.get(this.ODATA_READLINK))
100
99
  : undefined;
101
100
  },
102
- mediaReadLink(value) {
103
- return this.ODATA_MEDIA_READLINK in value
104
- ? decodeURIComponent(value[this.ODATA_MEDIA_READLINK])
101
+ mediaReadLink(annots) {
102
+ return annots.has(this.ODATA_MEDIA_READLINK)
103
+ ? decodeURIComponent(annots.get(this.ODATA_MEDIA_READLINK))
105
104
  : undefined;
106
105
  },
107
- editLink(value) {
108
- return this.ODATA_EDITLINK in value
109
- ? decodeURIComponent(value[this.ODATA_EDITLINK])
106
+ editLink(annots) {
107
+ return annots.has(this.ODATA_EDITLINK)
108
+ ? decodeURIComponent(annots.get(this.ODATA_EDITLINK))
110
109
  : undefined;
111
110
  },
112
- mediaEditLink(value) {
113
- return this.ODATA_MEDIA_EDITLINK in value
114
- ? decodeURIComponent(value[this.ODATA_MEDIA_EDITLINK])
111
+ mediaEditLink(annots) {
112
+ return annots.has(this.ODATA_MEDIA_EDITLINK)
113
+ ? decodeURIComponent(annots.get(this.ODATA_MEDIA_EDITLINK))
115
114
  : undefined;
116
115
  },
117
- deltaLink(value) {
118
- return this.ODATA_DELTALINK in value
119
- ? decodeURIComponent(value[this.ODATA_DELTALINK])
116
+ deltaLink(annots) {
117
+ return annots.has(this.ODATA_DELTALINK)
118
+ ? decodeURIComponent(annots.get(this.ODATA_DELTALINK))
120
119
  : undefined;
121
120
  },
122
- mediaContentType(value) {
123
- return this.ODATA_MEDIA_CONTENTTYPE in value
124
- ? decodeURIComponent(value[this.ODATA_MEDIA_CONTENTTYPE])
121
+ mediaContentType(annots) {
122
+ return annots.has(this.ODATA_MEDIA_CONTENTTYPE)
123
+ ? decodeURIComponent(annots.get(this.ODATA_MEDIA_CONTENTTYPE))
125
124
  : undefined;
126
125
  },
127
126
  };
@@ -140,7 +139,7 @@ export const ODataHelper = {
140
139
  //odata.etag: the ETag of the entity
141
140
  ODATA_ETAG: '@odata.etag',
142
141
  ODATA_METADATA_ETAG: '@odata.metadataEtag',
143
- //odata.type: the type of the containing {[name: string]: any} or targeted property if the type of the {[name: string]: any} or targeted property cannot be heuristically determined
142
+ //odata.type: the type of the containing {[key: string]: any} or targeted property if the type of the {[key: string]: any} or targeted property cannot be heuristically determined
144
143
  ODATA_TYPE: '@odata.type',
145
144
  //odata.nextLink: the next link of a collection with partial results
146
145
  ODATA_NEXTLINK: '@odata.nextLink',
@@ -171,15 +170,17 @@ export const ODataHelper = {
171
170
  //http://nb-mdp-dev01:57970/$metadata#categorias(children(children(children(children(children(children(children(children(children(children()))))))))))/$entity
172
171
  //http://nb-mdp-dev01:57970/$metadata#recursos/SIU.Documentos.Documento/$entity
173
172
  //http://nb-mdp-dev01:57970/$metadata#SIU.Api.Infrastructure.Storage.Backend.SiuUrls
174
- context(value) {
173
+ context(annots) {
175
174
  let ctx = {};
176
- if (this.ODATA_CONTEXT in value) {
177
- const str = value[this.ODATA_CONTEXT];
175
+ const str = annots instanceof Map
176
+ ? annots.get(this.ODATA_CONTEXT)
177
+ : annots[this.ODATA_CONTEXT];
178
+ if (typeof str === 'string') {
178
179
  let index = str.indexOf('$metadata');
179
- ctx.serviceRootUrl = str.substr(0, index);
180
+ ctx.serviceRootUrl = str.substring(0, index);
180
181
  index = str.indexOf('#');
181
- ctx.metadataUrl = str.substr(0, index);
182
- const parts = str.substr(index + 1).split('/');
182
+ ctx.metadataUrl = str.substring(0, index);
183
+ const parts = str.substring(index + 1).split('/');
183
184
  const col = COLLECTION.exec(parts[0]);
184
185
  if (col) {
185
186
  ctx.type = col[1];
@@ -223,15 +224,17 @@ export const ODataHelper = {
223
224
  ODATA_TYPE: 'odata.type',
224
225
  ODATA_COUNT: 'odata.count',
225
226
  VALUE: 'value',
226
- context(value) {
227
+ context(annots) {
227
228
  let ctx = {};
228
- if (this.ODATA_CONTEXT in value) {
229
- const str = value[this.ODATA_CONTEXT];
229
+ const str = annots instanceof Map
230
+ ? annots.get(this.ODATA_CONTEXT)
231
+ : annots[this.ODATA_CONTEXT];
232
+ if (typeof str === 'string') {
230
233
  let index = str.indexOf('$metadata');
231
- ctx.serviceRootUrl = str.substr(0, index);
234
+ ctx.serviceRootUrl = str.substring(0, index);
232
235
  index = str.indexOf('#');
233
- ctx.metadataUrl = str.substr(0, index);
234
- const parts = str.substr(index + 1).split('/');
236
+ ctx.metadataUrl = str.substring(0, index);
237
+ const parts = str.substring(index + 1).split('/');
235
238
  ctx.entitySet = parts[0];
236
239
  }
237
240
  return ctx;
@@ -252,9 +255,11 @@ export const ODataHelper = {
252
255
  ODATA_TYPE: 'type',
253
256
  VALUE: 'results',
254
257
  annotations(value) {
255
- if (this.ODATA_ANNOTATION in value)
256
- return value[this.ODATA_ANNOTATION];
257
- return value;
258
+ const annots = new Map();
259
+ if (this.ODATA_ANNOTATION in value) {
260
+ Object.entries(value[this.ODATA_ANNOTATION]).forEach(([key, value]) => annots.set(key, value));
261
+ }
262
+ return annots;
258
263
  },
259
264
  attributes(value, metadata) {
260
265
  return value;
@@ -265,4 +270,4 @@ export const ODataHelper = {
265
270
  }),
266
271
  //#endregion
267
272
  };
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL2hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLFdBQVcsRUFDWCxXQUFXLEVBQ1gsTUFBTSxFQUNOLFlBQVksR0FDYixNQUFNLGFBQWEsQ0FBQztBQUdyQixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcseUJBQXlCLENBQUM7QUFDcEQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGlDQUFpQyxDQUFDO0FBQzFELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxpQ0FBaUMsQ0FBQztBQWlEeEQsTUFBTSxzQkFBc0IsR0FBUTtJQUNsQyxNQUFNLENBQUMsSUFBNkI7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsUUFBUSxDQUFDLElBQTZCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsUUFBUSxDQUFDLElBQTZCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN0RCxDQUFDO0lBQ0QsU0FBUyxDQUFDLEtBQThCO1FBQ3RDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2FBQ3ZELE1BQU0sQ0FDTCxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFD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Q3BFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELFVBQVU7WUFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUN4QyxDQUFDO0tBQ0YsQ0FBQztJQUNGLFlBQVk7Q0FDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgVkVSU0lPTl8zXzAsXG4gIFZFUlNJT05fMl8wLFxuICBWRVJTSU9OXzRfMCxcbiAgJENPVU5ULFxuICAkSU5MSU5FQ09VTlQsXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9EYXRhTWV0YWRhdGFUeXBlIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBDT0xMRUNUSU9OID0gL0NvbGxlY3Rpb25cXCgoW1xcd1xcLl0rKVxcKS87XG5leHBvcnQgY29uc3QgUFJPUEVSVFkgPSAvKFtcXHdcXGRcXC1fXSspXFwoKFtcXCdcXHdcXGRcXC1fPV0rKVxcKS87XG5leHBvcnQgY29uc3QgRVhQQU5EID0gLyhbXFx3XFxkXFwtX10rKVxcKChbXFx3XFxkXFwsXFwoXFwpXSspXFwpLztcblxuZXhwb3J0IHR5cGUgT0RhdGFDb250ZXh0ID0ge1xuICBzZXJ2aWNlUm9vdFVybD86IHN0cmluZztcbiAgbWV0YWRhdGFVcmw/OiBzdHJpbmc7XG4gIGVudGl0eVNldD86IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBleHBhbmQ/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIHByb3BlcnR5Pzogc3RyaW5nO1xuICBlbnRpdHk/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBPRGF0YVZlcnNpb25IZWxwZXIge1xuICBWQUxVRTogc3RyaW5nO1xuICBPREFUQV9BTk5PVEFUSU9OX1BSRUZJWDogc3RyaW5nO1xuICBPREFUQV9GVU5DVElPTl9QUkVGSVg6IHN0cmluZztcbiAgT0RBVEFfSUQ6IHN0cmluZztcbiAgT0RBVEFfQ09VTlQ6IHN0cmluZztcbiAgT0RBVEFfRVRBRzogc3RyaW5nO1xuICBPREFUQV9DT05URVhUOiBzdHJpbmc7XG4gIE9EQVRBX01FRElBX0VUQUc6IHN0cmluZztcbiAgZW50aXR5KHZhbHVlOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSk6IGFueTtcbiAgZW50aXRpZXModmFsdWU6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KTogYW55O1xuICBwcm9wZXJ0eSh2YWx1ZTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pOiBhbnk7XG4gIGFubm90YXRpb25zKHZhbHVlOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuICBhdHRyaWJ1dGVzKHZhbHVlOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSwgbWV0YWRhdGE6IE9EYXRhTWV0YWRhdGFUeXBlKTogYW55O1xuICAvL0dldCBvciBTZXQgSWRcbiAgaWQodmFsdWU6IHsgW25hbWU6IHN0cmluZ106IGFueSB9LCBpZD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLy9HZXQgb3IgU2V0IEV0YWdcbiAgZXRhZyh2YWx1ZTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0sIGV0YWc/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8vR2V0IG9yIFNldCBUeXBlXG4gIHR5cGUodmFsdWU6IHsgW25hbWU6IHN0cmluZ106IGFueSB9LCB0eXBlPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb3VudCh2YWx1ZTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGNvbnRleHQodmFsdWU6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KTogT0RhdGFDb250ZXh0O1xuICBmdW5jdGlvbnModmFsdWU6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KTogeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG4gIHByb3BlcnRpZXModmFsdWU6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KTogeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG4gIG1lZGlhRXRhZyh2YWx1ZTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG1ldGFkYXRhRXRhZyh2YWx1ZTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG5leHRMaW5rKHZhbHVlOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVhZExpbmsodmFsdWU6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBtZWRpYVJlYWRMaW5rKHZhbHVlOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZWRpdExpbmsodmFsdWU6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBtZWRpYUVkaXRMaW5rKHZhbHVlOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbWVkaWFDb250ZW50VHlwZSh2YWx1ZTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRlbHRhTGluayh2YWx1ZTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvdW50UGFyYW0oKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmNvbnN0IE9EYXRhVmVyc2lvbkJhc2VIZWxwZXIgPSA8YW55PntcbiAgZW50aXR5KGRhdGE6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH0sXG4gIGVudGl0aWVzKGRhdGE6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KSB7XG4gICAgcmV0dXJuIGRhdGFbdGhpcy5WQUxVRV07XG4gIH0sXG4gIHByb3BlcnR5KGRhdGE6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KSB7XG4gICAgcmV0dXJuIHRoaXMuVkFMVUUgaW4gZGF0YSA/IGRhdGFbdGhpcy5WQUxVRV0gOiBkYXRhO1xuICB9LFxuICBmdW5jdGlvbnModmFsdWU6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlKVxuICAgICAgLmZpbHRlcigoaykgPT4gay5zdGFydHNXaXRoKHRoaXMuT0RBVEFfRlVOQ1RJT05fUFJFRklYKSlcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhY2MsIGtleSkgPT4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW2tleS5zdWJzdHIoMSldOiB2YWx1ZVtrZXldIH0pLFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgfSxcbiAgcHJvcGVydGllcyh2YWx1ZTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModmFsdWUpXG4gICAgICAuZmlsdGVyKChrKSA9PiBrLmluZGV4T2YodGhpcy5PREFUQV9BTk5PVEFUSU9OX1BSRUZJWCkgPiAwKVxuICAgICAgLnJlZHVjZSgoYWNjOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSwga2V5KSA9PiB7XG4gICAgICAgIGxldCBuYW1lID0ga2V5LnN1YnN0cigwLCBrZXkuaW5kZXhPZih0aGlzLk9EQVRBX0FOTk9UQVRJT05fUFJFRklYKSk7XG4gICAgICAgIGlmICghKG5hbWUgaW4gYWNjKSkge1xuICAgICAgICAgIGFjY1tuYW1lXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYWNjW25hbWVdLCB7XG4gICAgICAgICAgW2tleS5zdWJzdHIoa2V5LmluZGV4T2YodGhpcy5PREFUQV9BTk5PVEFUSU9OX1BSRUZJWCkpXTogdmFsdWVba2V5XSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG4gIH0sXG4gIGlkKHZhbHVlOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSwgaWQ/OiBzdHJpbmcpIHtcbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkgdmFsdWVbdGhpcy5PREFUQV9JRF0gPSBpZDtcbiAgICByZXR1cm4gdGhpcy5PREFUQV9JRCBpbiB2YWx1ZVxuICAgICAgPyAodmFsdWVbdGhpcy5PREFUQV9JRF0gYXMgc3RyaW5nKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIGV0YWcodmFsdWU6IHsgW25hbWU6IHN0cmluZ106IGFueSB9LCBldGFnPzogc3RyaW5nKSB7XG4gICAgaWYgKGV0YWcgIT09IHVuZGVmaW5lZCkgdmFsdWVbdGhpcy5PREFUQV9FVEFHXSA9IGV0YWc7XG4gICAgcmV0dXJuIHRoaXMuT0RBVEFfRVRBRyBpbiB2YWx1ZVxuICAgICAgPyAodmFsdWVbdGhpcy5PREFUQV9FVEFHXSBhcyBzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfSxcbiAgdHlwZSh2YWx1ZTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0sIHR5cGU/OiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZSAhPT0gdW5kZWZpbmVkKSB2YWx1ZVt0aGlzLk9EQVRBX1RZUEVdID0gYCMke3R5cGV9YDtcbiAgICBpZiAoISh0aGlzLk9EQVRBX1RZUEUgaW4gdmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHQgPSB2YWx1ZVt0aGlzLk9EQVRBX1RZUEVdLnN1YnN0cigxKTtcbiAgICBjb25zdCBtYXRjaGVzID0gQ09MTEVDVElPTi5leGVjKHQpO1xuICAgIGlmIChtYXRjaGVzKVxuICAgICAgcmV0dXJuIG1hdGNoZXNbMV0uaW5kZXhPZignLicpID09PSAtMSA/IGBFZG0uJHttYXRjaGVzWzFdfWAgOiBtYXRjaGVzWzFdO1xuICAgIHJldHVybiB0O1xuICB9LFxuICBtZWRpYUV0YWcodmFsdWU6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KSB7XG4gICAgcmV0dXJuIHRoaXMuT0RBVEFfTUVESUFfRVRBRyBpbiB2YWx1ZVxuICAgICAgPyBkZWNvZGVVUklDb21wb25lbnQodmFsdWVbdGhpcy5PREFUQV9NRURJQV9FVEFHXSBhcyBzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfSxcbiAgbWV0YWRhdGFFdGFnKHZhbHVlOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSkge1xuICAgIHJldHVybiB0aGlzLk9EQVRBX01FVEFEQVRBX0VUQUcgaW4gdmFsdWVcbiAgICAgID8gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlW3RoaXMuT0RBVEFfTUVUQURBVEFfRVRBR10gYXMgc3RyaW5nKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIGNvdW50KHZhbHVlOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSkge1xuICAgIHJldHVybiB0aGlzLk9EQVRBX0NPVU5UIGluIHZhbHVlXG4gICAgICA/IE51bWJlcih2YWx1ZVt0aGlzLk9EQVRBX0NPVU5UXSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9LFxuICBhbm5vdGF0aW9ucyh2YWx1ZTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModmFsdWUpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoa2V5KSA9PlxuICAgICAgICAgIGtleS5pbmRleE9mKHRoaXMuT0RBVEFfQU5OT1RBVElPTl9QUkVGSVgpICE9PSAtMSB8fFxuICAgICAgICAgIGtleS5zdGFydHNXaXRoKHRoaXMuT0RBVEFfRlVOQ1RJT05fUFJFRklYKVxuICAgICAgKVxuICAgICAgLnJlZHVjZSgoYWNjLCBrZXkpID0+IE9iamVjdC5hc3NpZ24oYWNjLCB7IFtrZXldOiB2YWx1ZVtrZXldIH0pLCB7fSk7XG4gIH0sXG4gIGF0dHJpYnV0ZXModmFsdWU6IHsgW25hbWU6IHN0cmluZ106IGFueSB9LCBtZXRhZGF0YTogT0RhdGFNZXRhZGF0YVR5cGUpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWUpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoW2tdKSA9PlxuICAgICAgICAgIG1ldGFkYXRhID09PSAnbm9uZScgfHxcbiAgICAgICAgICAobWV0YWRhdGEgPT09ICdtaW5pbWFsJyAmJlxuICAgICAgICAgICAgKGsuaW5kZXhPZih0aGlzLk9EQVRBX0FOTk9UQVRJT05fUFJFRklYKSA9PT0gLTEgfHxcbiAgICAgICAgICAgICAgay5zdGFydHNXaXRoKHRoaXMuT0RBVEFfQU5OT1RBVElPTl9QUkVGSVgpKSAmJlxuICAgICAgICAgICAgIWsuc3RhcnRzV2l0aCh0aGlzLk9EQVRBX0ZVTkNUSU9OX1BSRUZJWCkpIHx8XG4gICAgICAgICAgKG1ldGFkYXRhID09PSAnZnVsbCcgJiZcbiAgICAgICAgICAgIGsuaW5kZXhPZih0aGlzLk9EQVRBX0FOTk9UQVRJT05fUFJFRklYKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICFrLnN0YXJ0c1dpdGgodGhpcy5PREFUQV9GVU5DVElPTl9QUkVGSVgpKVxuICAgICAgKVxuICAgICAgLnJlZHVjZSgoYWNjLCBlKSA9PiAoeyAuLi5hY2MsIFtlWzBdXTogZVsxXSB9KSwge30pO1xuICB9LFxuICBuZXh0TGluayh2YWx1ZTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICByZXR1cm4gdGhpcy5PREFUQV9ORVhUTElOSyBpbiB2YWx1ZVxuICAgICAgPyBkZWNvZGVVUklDb21wb25lbnQodmFsdWVbdGhpcy5PREFUQV9ORVhUTElOS10gYXMgc3RyaW5nKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIHJlYWRMaW5rKHZhbHVlOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSkge1xuICAgIHJldHVybiB0aGlzLk9EQVRBX1JFQURMSU5LIGluIHZhbHVlXG4gICAgICA/IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZVt0aGlzLk9EQVRBX1JFQURMSU5LXSBhcyBzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfSxcbiAgbWVkaWFSZWFkTGluayh2YWx1ZTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICByZXR1cm4gdGhpcy5PREFUQV9NRURJQV9SRUFETElOSyBpbiB2YWx1ZVxuICAgICAgPyBkZWNvZGVVUklDb21wb25lbnQodmFsdWVbdGhpcy5PREFUQV9NRURJQV9SRUFETElOS10gYXMgc3RyaW5nKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIGVkaXRMaW5rKHZhbHVlOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSkge1xuICAgIHJldHVybiB0aGlzLk9EQVRBX0VESVRMSU5LIGluIHZhbHVlXG4gICAgICA/IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZVt0aGlzLk9EQVRBX0VESVRMSU5LXSBhcyBzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfSxcbiAgbWVkaWFFZGl0TGluayh2YWx1ZTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICByZXR1cm4gdGhpcy5PREFUQV9NRURJQV9FRElUTElOSyBpbiB2YWx1ZVxuICAgICAgPyBkZWNvZGVVUklDb21wb25lbnQodmFsdWVbdGhpcy5PREFUQV9NRURJQV9FRElUTElOS10gYXMgc3RyaW5nKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIGRlbHRhTGluayh2YWx1ZTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICByZXR1cm4gdGhpcy5PREFUQV9ERUxUQUxJTksgaW4gdmFsdWVcbiAgICAgID8gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlW3RoaXMuT0RBVEFfREVMVEFMSU5LXSBhcyBzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfSxcbiAgbWVkaWFDb250ZW50VHlwZSh2YWx1ZTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICByZXR1cm4gdGhpcy5PREFUQV9NRURJQV9DT05URU5UVFlQRSBpbiB2YWx1ZVxuICAgICAgPyBkZWNvZGVVUklDb21wb25lbnQodmFsdWVbdGhpcy5PREFUQV9NRURJQV9DT05URU5UVFlQRV0gYXMgc3RyaW5nKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgT0RhdGFIZWxwZXIgPSB7XG4gIC8vI3JlZ2lvbiBWZXJzaW9uIDQuMFxuICBbVkVSU0lPTl80XzBdOiA8T0RhdGFWZXJzaW9uSGVscGVyPk9iamVjdC5hc3NpZ24oe30sIE9EYXRhVmVyc2lvbkJhc2VIZWxwZXIsIHtcbiAgICBWQUxVRTogJ3ZhbHVlJyxcbiAgICBPREFUQV9BTk5PVEFUSU9OX1BSRUZJWDogJ0BvZGF0YScsXG4gICAgT0RBVEFfRlVOQ1RJT05fUFJFRklYOiAnIycsXG4gICAgLy9vZGF0YS5pZDogdGhlIElEIG9mIHRoZSBlbnRpdHlcbiAgICBPREFUQV9JRDogJ0BvZGF0YS5pZCcsXG4gICAgLy9vZGF0YS5jb3VudDogdGhlIHRvdGFsIGNvdW50IG9mIGEgY29sbGVjdGlvbiBvZiBlbnRpdGllcyBvciBjb2xsZWN0aW9uIG9mIGVudGl0eSByZWZlcmVuY2VzLCBpZiByZXF1ZXN0ZWQuXG4gICAgT0RBVEFfQ09VTlQ6ICdAb2RhdGEuY291bnQnLFxuICAgIC8vb2RhdGEuY29udGV4dDogdGhlIGNvbnRleHQgVVJMIGZvciBhIGNvbGxlY3Rpb24sIGVudGl0eSwgcHJpbWl0aXZlIHZhbHVlLCBvciBzZXJ2aWNlIGRvY3VtZW50LlxuICAgIE9EQVRBX0NPTlRFWFQ6ICdAb2RhdGEuY29udGV4dCcsXG4gICAgLy9vZGF0YS5ldGFnOiB0aGUgRVRhZyBvZiB0aGUgZW50aXR5XG4gICAgT0RBVEFfRVRBRzogJ0BvZGF0YS5ldGFnJyxcbiAgICBPREFUQV9NRVRBREFUQV9FVEFHOiAnQG9kYXRhLm1ldGFkYXRhRXRhZycsXG4gICAgLy9vZGF0YS50eXBlOiB0aGUgdHlwZSBvZiB0aGUgY29udGFpbmluZyB7W25hbWU6IHN0cmluZ106IGFueX0gb3IgdGFyZ2V0ZWQgcHJvcGVydHkgaWYgdGhlIHR5cGUgb2YgdGhlIHtbbmFtZTogc3RyaW5nXTogYW55fSBvciB0YXJnZXRlZCBwcm9wZXJ0eSBjYW5ub3QgYmUgaGV1cmlzdGljYWxseSBkZXRlcm1pbmVkXG4gICAgT0RBVEFfVFlQRTogJ0BvZGF0YS50eXBlJyxcbiAgICAvL29kYXRhLm5leHRMaW5rOiB0aGUgbmV4dCBsaW5rIG9mIGEgY29sbGVjdGlvbiB3aXRoIHBhcnRpYWwgcmVzdWx0c1xuICAgIE9EQVRBX05FWFRMSU5LOiAnQG9kYXRhLm5leHRMaW5rJyxcbiAgICAvL29kYXRhLmRlbHRhTGluazogdGhlIGRlbHRhIGxpbmsgZm9yIG9idGFpbmluZyBjaGFuZ2VzIHRvIHRoZSByZXN1bHQsIGlmIHJlcXVlc3RlZFxuICAgIE9EQVRBX0RFTFRBTElOSzogJ0BvZGF0YS5kZWx0YUxpbmsnLFxuICAgIC8vb2RhdGEucmVhZExpbms6IHRoZSBsaW5rIHVzZWQgdG8gcmVhZCB0aGUgZW50aXR5LCBpZiB0aGUgZWRpdCBsaW5rIGNhbm5vdCBiZSB1c2VkIHRvIHJlYWQgdGhlIGVudGl0eVxuICAgIE9EQVRBX1JFQURMSU5LOiAnQG9kYXRhLnJlYWRMaW5rJyxcbiAgICAvL29kYXRhLmVkaXRMaW5rOiB0aGUgbGluayB1c2VkIHRvIGVkaXQvdXBkYXRlIHRoZSBlbnRpdHksIGlmIHRoZSBlbnRpdHkgaXMgdXBkYXRhYmxlIGFuZCB0aGUgb2RhdGEuaWQgZG9lcyBub3QgcmVwcmVzZW50IGEgVVJMIHRoYXQgY2FuIGJlIHVzZWQgdG8gZWRpdCB0aGUgZW50aXR5XG4gICAgT0RBVEFfRURJVExJTks6ICdAb2RhdGEuZWRpdExpbmsnLFxuICAgIC8vb2RhdGEuYXNzb2NpYXRpb25MaW5rOiB0aGUgbGluayB1c2VkIHRvIGRlc2NyaWJlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGVudGl0eSBhbmQgcmVsYXRlZCBlbnRpdGllc1xuICAgIE9EQVRBX0FTU09DSUFUSU9OTElOSzogJ0BvZGF0YS5hc3NvY2lhdGlvbkxpbmsnLFxuICAgIC8vb2RhdGEubmF2aWdhdGlvbkxpbms6IHRoZSBsaW5rIHVzZWQgdG8gcmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhIG5hdmlnYXRpb24gcHJvcGVydHlcbiAgICBPREFUQV9OQVZJR0FUSU9OTElOSzogJ0BvZGF0YS5uYXZpZ2F0aW9uTGluaycsXG4gICAgLy9NZWRpYSBlbnRpdGllcyBhbmQgc3RyZWFtIHByb3BlcnRpZXMgbWF5IGluIGFkZGl0aW9uIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhbm5vdGF0aW9uczpcbiAgICAvL29kYXRhLm1lZGlhRXRhZzogdGhlIEVUYWcgb2YgdGhlIHN0cmVhbSwgYXMgYXBwcm9wcmlhdGVcbiAgICBPREFUQV9NRURJQV9FVEFHOiAnQG9kYXRhLm1lZGlhRXRhZycsXG4gICAgLy9vZGF0YS5tZWRpYUNvbnRlbnRUeXBlOiB0aGUgY29udGVudCB0eXBlIG9mIHRoZSBzdHJlYW1cbiAgICBPREFUQV9NRURJQV9DT05URU5UVFlQRTogJ0BvZGF0YS5tZWRpYUNvbnRlbnRUeXBlJyxcbiAgICAvL29kYXRhLm1lZGlhUmVhZExpbms6IHRoZSBsaW5rIHVzZWQgdG8gcmVhZCB0aGUgc3RyZWFtXG4gICAgT0RBVEFfTUVESUFfUkVBRExJTks6ICdAb2RhdGEubWVkaWFSZWFkTGluaycsXG4gICAgLy9vZGF0YS5tZWRpYUVkaXRMaW5rOiB0aGUgbGluayB1c2VkIHRvIGVkaXQvdXBkYXRlIHRoZSBzdHJlYW1cbiAgICBPREFUQV9NRURJQV9FRElUTElOSzogJ0BvZGF0YS5tZWRpYUVkaXRMaW5rJyxcbiAgICAvL2h0dHA6Ly9uYi1tZHAtZGV2MDE6NTc5NzAvJG1ldGFkYXRhI3JlY3Vyc29zLyRlbnRpdHlcbiAgICAvL2h0dHA6Ly9uYi1tZHAtZGV2MDE6NTc5NzAvJG1ldGFkYXRhI2NhdGVnb3JpYXNcbiAgICAvL2h0dHA6Ly9uYi1tZHAtZGV2MDE6NTc5NzAvJG1ldGFkYXRhI2p1emdhZG9zXG4gICAgLy9odHRwOi8vbmItbWRwLWRldjAxOjU3OTcwLyRtZXRhZGF0YSNDb2xsZWN0aW9uKFNJVS5SZWN1cnNvcy5SZWN1cnNvRW50cnkpXG4gICAgLy9odHRwOi8vbmItbWRwLWRldjAxOjU3OTcwLyRtZXRhZGF0YSNjYXRlZ29yaWFzLyRlbnRpdHlcbiAgICAvL2h0dHA6Ly9uYi1tZHAtZGV2MDE6NTc5NzAvJG1ldGFkYXRhI2NhdGVnb3JpYXMoY2hpbGRyZW4oY2hpbGRyZW4oY2hpbGRyZW4oY2hpbGRyZW4oY2hpbGRyZW4oY2hpbGRyZW4oY2hpbGRyZW4oY2hpbGRyZW4oY2hpbGRyZW4oY2hpbGRyZW4oKSkpKSkpKSkpKSkvJGVudGl0eVxuICAgIC8vaHR0cDovL25iLW1kcC1kZXYwMTo1Nzk3MC8kbWV0YWRhdGEjcmVjdXJzb3MvU0lVLkRvY3VtZW50b3MuRG9jdW1lbnRvLyRlbnRpdHlcbiAgICAvL2h0dHA6Ly9uYi1tZHAtZGV2MDE6NTc5NzAvJG1ldGFkYXRhI1NJVS5BcGkuSW5mcmFzdHJ1Y3R1cmUuU3RvcmFnZS5CYWNrZW5kLlNpdVVybHNcbiAgICBjb250ZXh0KHZhbHVlOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgbGV0IGN0eDogT0RhdGFDb250ZXh0ID0ge307XG4gICAgICBpZiAodGhpcy5PREFUQV9DT05URVhUIGluIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHN0ciA9IHZhbHVlW3RoaXMuT0RBVEFfQ09OVEVYVF0gYXMgc3RyaW5nO1xuICAgICAgICBsZXQgaW5kZXggPSBzdHIuaW5kZXhPZignJG1ldGFkYXRhJyk7XG4gICAgICAgIGN0eC5zZXJ2aWNlUm9vdFVybCA9IHN0ci5zdWJzdHIoMCwgaW5kZXgpO1xuICAgICAgICBpbmRleCA9IHN0ci5pbmRleE9mKCcjJyk7XG4gICAgICAgIGN0eC5tZXRhZGF0YVVybCA9IHN0ci5zdWJzdHIoMCwgaW5kZXgpO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHN0ci5zdWJzdHIoaW5kZXggKyAxKS5zcGxpdCgnLycpO1xuICAgICAgICBjb25zdCBjb2wgPSBDT0xMRUNUSU9OLmV4ZWMocGFydHNbMF0pO1xuICAgICAgICBpZiAoY29sKSB7XG4gICAgICAgICAgY3R4LnR5cGUgPSBjb2xbMV07XG4gICAgICAgIH0gZWxzZSBpZiAocGFydHNbMF0uaW5kZXhPZignLicpICE9PSAtMSkge1xuICAgICAgICAgIGN0eC50eXBlID0gcGFydHNbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBwYXJ0c1swXS5tYXRjaChQUk9QRVJUWSk7XG4gICAgICAgICAgY29uc3QgZXhwYW5kID0gcGFydHNbMF0ubWF0Y2goRVhQQU5EKTtcbiAgICAgICAgICBjdHguZW50aXR5ID0gcGFydHNbMV0gPT09ICckZW50aXR5JztcbiAgICAgICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgIGN0eC5lbnRpdHlTZXQgPSBwcm9wZXJ0eVsxXTtcbiAgICAgICAgICAgIGN0eC5rZXkgPSBwcm9wZXJ0eVsyXTtcbiAgICAgICAgICAgIGN0eC5wcm9wZXJ0eSA9IHBhcnRzWzFdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXhwYW5kKSB7XG4gICAgICAgICAgICBjdHguZW50aXR5U2V0ID0gZXhwYW5kWzFdO1xuICAgICAgICAgICAgY3R4LmV4cGFuZCA9IGV4cGFuZFsyXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3R4LmVudGl0eVNldCA9IHBhcnRzWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGN0eDtcbiAgICB9LFxuICAgIGNvdW50UGFyYW0oKSB7XG4gICAgICByZXR1cm4geyBbJENPVU5UXTogJ3RydWUnIH07XG4gICAgfSxcbiAgfSksXG4gIC8vI2VuZHJlZ2lvblxuICAvLyNyZWdpb24gVmVyc2lvbiAzLjBcbiAgW1ZFUlNJT05fM18wXTogPE9EYXRhVmVyc2lvbkhlbHBlcj5PYmplY3QuYXNzaWduKHt9LCBPRGF0YVZlcnNpb25CYXNlSGVscGVyLCB7XG4gICAgT0RBVEFfQU5OT1RBVElPTl9QUkVGSVg6ICdvZGF0YS4nLFxuICAgIE9EQVRBX0ZVTkNUSU9OX1BSRUZJWDogJycsXG4gICAgT0RBVEFfSUQ6ICdvZGF0YS5pZCcsXG4gICAgT0RBVEFfRVRBRzogJ29kYXRhLmV0YWcnLFxuICAgIE9EQVRBX0NPTlRFWFQ6ICdvZGF0YS5tZXRhZGF0YScsXG4gICAgT0RBVEFfTkVYVExJTks6ICdvZGF0YS5uZXh0TGluaycsXG4gICAgT0RBVEFfVFlQRTogJ29kYXRhLnR5cGUnLFxuICAgIE9EQVRBX0NPVU5UOiAnb2RhdGEuY291bnQnLFxuICAgIFZBTFVFOiAndmFsdWUnLFxuICAgIGNvbnRleHQodmFsdWU6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KSB7XG4gICAgICBsZXQgY3R4OiBPRGF0YUNvbnRleHQgPSB7fTtcbiAgICAgIGlmICh0aGlzLk9EQVRBX0NPTlRFWFQgaW4gdmFsdWUpIHtcbiAgICAgICAgY29uc3Qgc3RyID0gdmFsdWVbdGhpcy5PREFUQV9DT05URVhUXSBhcyBzdHJpbmc7XG4gICAgICAgIGxldCBpbmRleCA9IHN0ci5pbmRleE9mKCckbWV0YWRhdGEnKTtcbiAgICAgICAgY3R4LnNlcnZpY2VSb290VXJsID0gc3RyLnN1YnN0cigwLCBpbmRleCk7XG4gICAgICAgIGluZGV4ID0gc3RyLmluZGV4T2YoJyMnKTtcbiAgICAgICAgY3R4Lm1ldGFkYXRhVXJsID0gc3RyLnN1YnN0cigwLCBpbmRleCk7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gc3RyLnN1YnN0cihpbmRleCArIDEpLnNwbGl0KCcvJyk7XG4gICAgICAgIGN0eC5lbnRpdHlTZXQgPSBwYXJ0c1swXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjdHg7XG4gICAgfSxcbiAgICBjb3VudFBhcmFtKCkge1xuICAgICAgcmV0dXJuIHsgWyRJTkxJTkVDT1VOVF06ICdhbGxwYWdlcycgfTtcbiAgICB9LFxuICB9KSxcbiAgLy8jZW5kcmVnaW9uXG4gIC8vI3JlZ2lvbiBWZXJzaW9uIDIuMFxuICBbVkVSU0lPTl8yXzBdOiA8T0RhdGFWZXJzaW9uSGVscGVyPk9iamVjdC5hc3NpZ24oe30sIE9EYXRhVmVyc2lvbkJhc2VIZWxwZXIsIHtcbiAgICBPREFUQV9JRDogJ2lkJyxcbiAgICBPREFUQV9FVEFHOiAnZXRhZycsXG4gICAgT0RBVEFfQU5OT1RBVElPTjogJ19fbWV0YWRhdGEnLFxuICAgIE9EQVRBX05FWFRMSU5LOiAnX19uZXh0JyxcbiAgICBPREFUQV9DT1VOVDogJ19fY291bnQnLFxuICAgIE9EQVRBX0RFRkVSUkVEOiAnX19kZWZlcnJlZCcsXG4gICAgT0RBVEFfVFlQRTogJ3R5cGUnLFxuICAgIFZBTFVFOiAncmVzdWx0cycsXG4gICAgYW5ub3RhdGlvbnModmFsdWU6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KSB7XG4gICAgICBpZiAodGhpcy5PREFUQV9BTk5PVEFUSU9OIGluIHZhbHVlKSByZXR1cm4gdmFsdWVbdGhpcy5PREFUQV9BTk5PVEFUSU9OXTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIGF0dHJpYnV0ZXModmFsdWU6IHsgW25hbWU6IHN0cmluZ106IGFueSB9LCBtZXRhZGF0YTogT0RhdGFNZXRhZGF0YVR5cGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIGNvdW50UGFyYW0oKSB7XG4gICAgICByZXR1cm4geyBbJElOTElORUNPVU5UXTogJ2FsbHBhZ2VzJyB9O1xuICAgIH0sXG4gIH0pLFxuICAvLyNlbmRyZWdpb25cbn07XG4iXX0=
273
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL2hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLFdBQVcsRUFDWCxXQUFXLEVBQ1gsTUFBTSxFQUNOLFlBQVksR0FDYixNQUFNLGFBQWEsQ0FBQztBQUdyQixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcseUJBQXlCLENBQUM7QUFDcEQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGlDQUFpQyxDQUFDO0FBQzFELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxpQ0FBaUMsQ0FBQztBQWlEeEQsTUFBTSxzQkFBc0IsR0FBUTtJQUNsQyxNQUFNLENBQUMsSUFBNEI7UUFDakMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsUUFBUSxDQUFDLElBQTRCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsUUFBUSxDQUFDLElBQTRCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN0RCxDQUFDO0lBQ0QsU0FBUyxDQUFDLE1BQXdCO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7UUFDckMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNmLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQzthQUMzRCxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNmLEtBQUssQ0FBQyxHQUFHLENBQ1AsR0FBRyxDQUFD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cUJBQXFCO0lBQ3JCLENBQUMsV0FBVyxDQUFDLEVBQXNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLHNCQUFzQixFQUFFO1FBQzNFLFFBQVEsRUFBRSxJQUFJO1FBQ2QsVUFBVSxFQUFFLE1BQU07UUFDbEIsZ0JBQWdCLEVBQUUsWUFBWTtRQUM5QixjQUFjLEVBQUUsUUFBUTtRQUN4QixXQUFXLEVBQUUsU0FBUztRQUN0QixjQUFjLEVBQUUsWUFBWTtRQUM1QixVQUFVLEVBQUUsTUFBTTtRQUNsQixLQUFLLEVBQUUsU0FBUztRQUNoQixXQUFXLENBQUMsS0FBNkI7WUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztZQUN0QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLEVBQUU7Z0JBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUNwRSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FDdkIsQ0FBQzthQUNIO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELFVBQVUsQ0FBQyxLQUE2QixFQUFFLFFBQTJCO1lBQ25FLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELFVBQVU7WUFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUN4QyxDQUFDO0tBQ0YsQ0FBQztJQUNGLFlBQVk7Q0FDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgVkVSU0lPTl8zXzAsXG4gIFZFUlNJT05fMl8wLFxuICBWRVJTSU9OXzRfMCxcbiAgJENPVU5ULFxuICAkSU5MSU5FQ09VTlQsXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9EYXRhTWV0YWRhdGFUeXBlIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBDT0xMRUNUSU9OID0gL0NvbGxlY3Rpb25cXCgoW1xcd1xcLl0rKVxcKS87XG5leHBvcnQgY29uc3QgUFJPUEVSVFkgPSAvKFtcXHdcXGRcXC1fXSspXFwoKFtcXCdcXHdcXGRcXC1fPV0rKVxcKS87XG5leHBvcnQgY29uc3QgRVhQQU5EID0gLyhbXFx3XFxkXFwtX10rKVxcKChbXFx3XFxkXFwsXFwoXFwpXSspXFwpLztcblxuZXhwb3J0IHR5cGUgT0RhdGFDb250ZXh0ID0ge1xuICBzZXJ2aWNlUm9vdFVybD86IHN0cmluZztcbiAgbWV0YWRhdGFVcmw/OiBzdHJpbmc7XG4gIGVudGl0eVNldD86IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBleHBhbmQ/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIHByb3BlcnR5Pzogc3RyaW5nO1xuICBlbnRpdHk/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBPRGF0YVZlcnNpb25IZWxwZXIge1xuICBWQUxVRTogc3RyaW5nO1xuICBPREFUQV9BTk5PVEFUSU9OX1BSRUZJWDogc3RyaW5nO1xuICBPREFUQV9GVU5DVElPTl9QUkVGSVg6IHN0cmluZztcbiAgT0RBVEFfSUQ6IHN0cmluZztcbiAgT0RBVEFfVFlQRTogc3RyaW5nO1xuICBPREFUQV9DT1VOVDogc3RyaW5nO1xuICBPREFUQV9FVEFHOiBzdHJpbmc7XG4gIE9EQVRBX0NPTlRFWFQ6IHN0cmluZztcbiAgT0RBVEFfTUVESUFfRVRBRzogc3RyaW5nO1xuXG4gIGVudGl0eSh2YWx1ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IGFueTtcbiAgZW50aXRpZXModmFsdWU6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBhbnk7XG4gIHByb3BlcnR5KHZhbHVlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogYW55O1xuICBhbm5vdGF0aW9ucyh2YWx1ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IE1hcDxzdHJpbmcsIGFueT47XG4gIGF0dHJpYnV0ZXModmFsdWU6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIG1ldGFkYXRhOiBPRGF0YU1ldGFkYXRhVHlwZSk6IGFueTtcblxuICBjb250ZXh0KGFubm90czogTWFwPHN0cmluZywgYW55PiB8IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBPRGF0YUNvbnRleHQ7XG4gIGlkKGFubm90czogTWFwPHN0cmluZywgYW55PiB8IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGV0YWcoYW5ub3RzOiBNYXA8c3RyaW5nLCBhbnk+IHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdHlwZShhbm5vdHM6IE1hcDxzdHJpbmcsIGFueT4gfCB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb3VudChhbm5vdHM6IE1hcDxzdHJpbmcsIGFueT4pOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGZ1bmN0aW9ucyhhbm5vdHM6IE1hcDxzdHJpbmcsIGFueT4pOiBNYXA8c3RyaW5nLCBhbnk+O1xuICBwcm9wZXJ0aWVzKGFubm90czogTWFwPHN0cmluZywgYW55Pik6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIGFueT4+O1xuICBtZWRpYUV0YWcoYW5ub3RzOiBNYXA8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBtZXRhZGF0YUV0YWcoYW5ub3RzOiBNYXA8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBuZXh0TGluayhhbm5vdHM6IE1hcDxzdHJpbmcsIGFueT4pOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRMaW5rKGFubm90czogTWFwPHN0cmluZywgYW55Pik6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbWVkaWFSZWFkTGluayhhbm5vdHM6IE1hcDxzdHJpbmcsIGFueT4pOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGVkaXRMaW5rKGFubm90czogTWFwPHN0cmluZywgYW55Pik6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbWVkaWFFZGl0TGluayhhbm5vdHM6IE1hcDxzdHJpbmcsIGFueT4pOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG1lZGlhQ29udGVudFR5cGUoYW5ub3RzOiBNYXA8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkZWx0YUxpbmsoYW5ub3RzOiBNYXA8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb3VudFBhcmFtKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmNvbnN0IE9EYXRhVmVyc2lvbkJhc2VIZWxwZXIgPSA8YW55PntcbiAgZW50aXR5KGRhdGE6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfSxcbiAgZW50aXRpZXMoZGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIHJldHVybiBkYXRhW3RoaXMuVkFMVUVdO1xuICB9LFxuICBwcm9wZXJ0eShkYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gICAgcmV0dXJuIHRoaXMuVkFMVUUgaW4gZGF0YSA/IGRhdGFbdGhpcy5WQUxVRV0gOiBkYXRhO1xuICB9LFxuICBmdW5jdGlvbnMoYW5ub3RzOiBNYXA8c3RyaW5nLCBhbnk+KSB7XG4gICAgY29uc3QgZnVuY3MgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICAgIFsuLi5hbm5vdHMua2V5cygpXVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkuc3RhcnRzV2l0aCh0aGlzLk9EQVRBX0ZVTkNUSU9OX1BSRUZJWCkpXG4gICAgICAuZm9yRWFjaCgoa2V5KSA9PlxuICAgICAgICBmdW5jcy5zZXQoXG4gICAgICAgICAga2V5LnN1YnN0cmluZyh0aGlzLk9EQVRBX0ZVTkNUSU9OX1BSRUZJWC5sZW5ndGgpLFxuICAgICAgICAgIGFubm90cy5nZXQoa2V5KVxuICAgICAgICApXG4gICAgICApO1xuICAgIHJldHVybiBmdW5jcztcbiAgfSxcbiAgcHJvcGVydGllcyhhbm5vdHM6IE1hcDxzdHJpbmcsIGFueT4pIHtcbiAgICBjb25zdCBwcm9wcyA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBhbnk+PigpO1xuICAgIFsuLi5hbm5vdHMua2V5cygpXVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkuaW5kZXhPZih0aGlzLk9EQVRBX0FOTk9UQVRJT05fUFJFRklYKSA+IDApXG4gICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGxldCBuYW1lID0ga2V5LnN1YnN0cmluZygwLCBrZXkuaW5kZXhPZih0aGlzLk9EQVRBX0FOTk9UQVRJT05fUFJFRklYKSk7XG4gICAgICAgIGxldCBwcm9wID0gcHJvcHMuaGFzKG5hbWUpID8gcHJvcHMuZ2V0KG5hbWUpISA6IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgICAgIHByb3Auc2V0KFxuICAgICAgICAgIGtleS5zdWJzdHJpbmcoa2V5LmluZGV4T2YodGhpcy5PREFUQV9BTk5PVEFUSU9OX1BSRUZJWCkpLFxuICAgICAgICAgIGFubm90cy5nZXQoa2V5KVxuICAgICAgICApO1xuICAgICAgICBwcm9wcy5zZXQobmFtZSwgcHJvcCk7XG4gICAgICB9KTtcbiAgICByZXR1cm4gcHJvcHM7XG4gIH0sXG4gIGlkKGFubm90czogTWFwPHN0cmluZywgYW55PiB8IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgICByZXR1cm4gYW5ub3RzIGluc3RhbmNlb2YgTWFwXG4gICAgICA/IGFubm90cy5nZXQodGhpcy5PREFUQV9JRClcbiAgICAgIDogYW5ub3RzW3RoaXMuT0RBVEFfSURdO1xuICB9LFxuICBldGFnKGFubm90czogTWFwPHN0cmluZywgYW55PiB8IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgICByZXR1cm4gYW5ub3RzIGluc3RhbmNlb2YgTWFwXG4gICAgICA/IGFubm90cy5nZXQodGhpcy5PREFUQV9FVEFHKVxuICAgICAgOiBhbm5vdHNbdGhpcy5PREFUQV9FVEFHXTtcbiAgfSxcbiAgdHlwZShhbm5vdHM6IE1hcDxzdHJpbmcsIGFueT4gfCB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gICAgbGV0IHR5cGUgPVxuICAgICAgYW5ub3RzIGluc3RhbmNlb2YgTWFwXG4gICAgICAgID8gYW5ub3RzLmdldCh0aGlzLk9EQVRBX1RZUEUpXG4gICAgICAgIDogYW5ub3RzW3RoaXMuT0RBVEFfVFlQRV07XG4gICAgaWYgKCF0eXBlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHR5cGUgPSB0eXBlLnN1YnN0cmluZygxKTtcbiAgICBjb25zdCBtYXRjaGVzID0gQ09MTEVDVElPTi5leGVjKHR5cGUpO1xuICAgIGlmIChtYXRjaGVzKVxuICAgICAgcmV0dXJuIG1hdGNoZXNbMV0uaW5kZXhPZignLicpID09PSAtMSA/IGBFZG0uJHttYXRjaGVzWzFdfWAgOiBtYXRjaGVzWzFdO1xuICAgIHJldHVybiB0eXBlO1xuICB9LFxuICBtZWRpYUV0YWcoYW5ub3RzOiBNYXA8c3RyaW5nLCBhbnk+KSB7XG4gICAgcmV0dXJuIGFubm90cy5oYXModGhpcy5PREFUQV9NRURJQV9FVEFHKVxuICAgICAgPyBkZWNvZGVVUklDb21wb25lbnQoYW5ub3RzLmdldCh0aGlzLk9EQVRBX01FRElBX0VUQUcpIGFzIHN0cmluZylcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9LFxuICBtZXRhZGF0YUV0YWcoYW5ub3RzOiBNYXA8c3RyaW5nLCBhbnk+KSB7XG4gICAgcmV0dXJuIGFubm90cy5oYXModGhpcy5PREFUQV9NRVRBREFUQV9FVEFHKVxuICAgICAgPyBkZWNvZGVVUklDb21wb25lbnQoYW5ub3RzLmdldCh0aGlzLk9EQVRBX01FVEFEQVRBX0VUQUcpIGFzIHN0cmluZylcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9LFxuICBjb3VudChhbm5vdHM6IE1hcDxzdHJpbmcsIGFueT4pIHtcbiAgICByZXR1cm4gYW5ub3RzLmhhcyh0aGlzLk9EQVRBX0NPVU5UKVxuICAgICAgPyBOdW1iZXIoYW5ub3RzLmdldCh0aGlzLk9EQVRBX0NPVU5UKSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9LFxuICBhbm5vdGF0aW9ucyh2YWx1ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIGNvbnN0IGFubm90cyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgT2JqZWN0LmVudHJpZXModmFsdWUpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoW2tleV0pID0+XG4gICAgICAgICAga2V5LmluZGV4T2YodGhpcy5PREFUQV9BTk5PVEFUSU9OX1BSRUZJWCkgIT09IC0xIHx8XG4gICAgICAgICAga2V5LnN0YXJ0c1dpdGgodGhpcy5PREFUQV9GVU5DVElPTl9QUkVGSVgpXG4gICAgICApXG4gICAgICAuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBhbm5vdHMuc2V0KGtleSwgdmFsdWUpKTtcbiAgICByZXR1cm4gYW5ub3RzO1xuICB9LFxuICBhdHRyaWJ1dGVzKHZhbHVlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBtZXRhZGF0YTogT0RhdGFNZXRhZGF0YVR5cGUpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWUpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoW2tdKSA9PlxuICAgICAgICAgIG1ldGFkYXRhID09PSAnbm9uZScgfHxcbiAgICAgICAgICAobWV0YWRhdGEgPT09ICdtaW5pbWFsJyAmJlxuICAgICAgICAgICAgKGsuaW5kZXhPZih0aGlzLk9EQVRBX0FOTk9UQVRJT05fUFJFRklYKSA9PT0gLTEgfHxcbiAgICAgICAgICAgICAgay5zdGFydHNXaXRoKHRoaXMuT0RBVEFfQU5OT1RBVElPTl9QUkVGSVgpKSAmJlxuICAgICAgICAgICAgIWsuc3RhcnRzV2l0aCh0aGlzLk9EQVRBX0ZVTkNUSU9OX1BSRUZJWCkpIHx8XG4gICAgICAgICAgKG1ldGFkYXRhID09PSAnZnVsbCcgJiZcbiAgICAgICAgICAgIGsuaW5kZXhPZih0aGlzLk9EQVRBX0FOTk9UQVRJT05fUFJFRklYKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICFrLnN0YXJ0c1dpdGgodGhpcy5PREFUQV9GVU5DVElPTl9QUkVGSVgpKVxuICAgICAgKVxuICAgICAgLnJlZHVjZSgoYWNjLCBlKSA9PiAoeyAuLi5hY2MsIFtlWzBdXTogZVsxXSB9KSwge30pO1xuICB9LFxuICBuZXh0TGluayhhbm5vdHM6IE1hcDxzdHJpbmcsIGFueT4pIHtcbiAgICByZXR1cm4gYW5ub3RzLmhhcyh0aGlzLk9EQVRBX05FWFRMSU5LKVxuICAgICAgPyBkZWNvZGVVUklDb21wb25lbnQoYW5ub3RzLmdldCh0aGlzLk9EQVRBX05FWFRMSU5LKSBhcyBzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfSxcbiAgcmVhZExpbmsoYW5ub3RzOiBNYXA8c3RyaW5nLCBhbnk+KSB7XG4gICAgcmV0dXJuIGFubm90cy5oYXModGhpcy5PREFUQV9SRUFETElOSylcbiAgICAgID8gZGVjb2RlVVJJQ29tcG9uZW50KGFubm90cy5nZXQodGhpcy5PREFUQV9SRUFETElOSykgYXMgc3RyaW5nKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIG1lZGlhUmVhZExpbmsoYW5ub3RzOiBNYXA8c3RyaW5nLCBhbnk+KSB7XG4gICAgcmV0dXJuIGFubm90cy5oYXModGhpcy5PREFUQV9NRURJQV9SRUFETElOSylcbiAgICAgID8gZGVjb2RlVVJJQ29tcG9uZW50KGFubm90cy5nZXQodGhpcy5PREFUQV9NRURJQV9SRUFETElOSykgYXMgc3RyaW5nKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIGVkaXRMaW5rKGFubm90czogTWFwPHN0cmluZywgYW55Pikge1xuICAgIHJldHVybiBhbm5vdHMuaGFzKHRoaXMuT0RBVEFfRURJVExJTkspXG4gICAgICA/IGRlY29kZVVSSUNvbXBvbmVudChhbm5vdHMuZ2V0KHRoaXMuT0RBVEFfRURJVExJTkspIGFzIHN0cmluZylcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9LFxuICBtZWRpYUVkaXRMaW5rKGFubm90czogTWFwPHN0cmluZywgYW55Pikge1xuICAgIHJldHVybiBhbm5vdHMuaGFzKHRoaXMuT0RBVEFfTUVESUFfRURJVExJTkspXG4gICAgICA/IGRlY29kZVVSSUNvbXBvbmVudChhbm5vdHMuZ2V0KHRoaXMuT0RBVEFfTUVESUFfRURJVExJTkspIGFzIHN0cmluZylcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9LFxuICBkZWx0YUxpbmsoYW5ub3RzOiBNYXA8c3RyaW5nLCBhbnk+KSB7XG4gICAgcmV0dXJuIGFubm90cy5oYXModGhpcy5PREFUQV9ERUxUQUxJTkspXG4gICAgICA/IGRlY29kZVVSSUNvbXBvbmVudChhbm5vdHMuZ2V0KHRoaXMuT0RBVEFfREVMVEFMSU5LKSBhcyBzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfSxcbiAgbWVkaWFDb250ZW50VHlwZShhbm5vdHM6IE1hcDxzdHJpbmcsIGFueT4pIHtcbiAgICByZXR1cm4gYW5ub3RzLmhhcyh0aGlzLk9EQVRBX01FRElBX0NPTlRFTlRUWVBFKVxuICAgICAgPyBkZWNvZGVVUklDb21wb25lbnQoYW5ub3RzLmdldCh0aGlzLk9EQVRBX01FRElBX0NPTlRFTlRUWVBFKSBhcyBzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBPRGF0YUhlbHBlciA9IHtcbiAgLy8jcmVnaW9uIFZlcnNpb24gNC4wXG4gIFtWRVJTSU9OXzRfMF06IDxPRGF0YVZlcnNpb25IZWxwZXI+T2JqZWN0LmFzc2lnbih7fSwgT0RhdGFWZXJzaW9uQmFzZUhlbHBlciwge1xuICAgIFZBTFVFOiAndmFsdWUnLFxuICAgIE9EQVRBX0FOTk9UQVRJT05fUFJFRklYOiAnQG9kYXRhJyxcbiAgICBPREFUQV9GVU5DVElPTl9QUkVGSVg6ICcjJyxcbiAgICAvL29kYXRhLmlkOiB0aGUgSUQgb2YgdGhlIGVudGl0eVxuICAgIE9EQVRBX0lEOiAnQG9kYXRhLmlkJyxcbiAgICAvL29kYXRhLmNvdW50OiB0aGUgdG90YWwgY291bnQgb2YgYSBjb2xsZWN0aW9uIG9mIGVudGl0aWVzIG9yIGNvbGxlY3Rpb24gb2YgZW50aXR5IHJlZmVyZW5jZXMsIGlmIHJlcXVlc3RlZC5cbiAgICBPREFUQV9DT1VOVDogJ0BvZGF0YS5jb3VudCcsXG4gICAgLy9vZGF0YS5jb250ZXh0OiB0aGUgY29udGV4dCBVUkwgZm9yIGEgY29sbGVjdGlvbiwgZW50aXR5LCBwcmltaXRpdmUgdmFsdWUsIG9yIHNlcnZpY2UgZG9jdW1lbnQuXG4gICAgT0RBVEFfQ09OVEVYVDogJ0BvZGF0YS5jb250ZXh0JyxcbiAgICAvL29kYXRhLmV0YWc6IHRoZSBFVGFnIG9mIHRoZSBlbnRpdHlcbiAgICBPREFUQV9FVEFHOiAnQG9kYXRhLmV0YWcnLFxuICAgIE9EQVRBX01FVEFEQVRBX0VUQUc6ICdAb2RhdGEubWV0YWRhdGFFdGFnJyxcbiAgICAvL29kYXRhLnR5cGU6IHRoZSB0eXBlIG9mIHRoZSBjb250YWluaW5nIHtba2V5OiBzdHJpbmddOiBhbnl9IG9yIHRhcmdldGVkIHByb3BlcnR5IGlmIHRoZSB0eXBlIG9mIHRoZSB7W2tleTogc3RyaW5nXTogYW55fSBvciB0YXJnZXRlZCBwcm9wZXJ0eSBjYW5ub3QgYmUgaGV1cmlzdGljYWxseSBkZXRlcm1pbmVkXG4gICAgT0RBVEFfVFlQRTogJ0BvZGF0YS50eXBlJyxcbiAgICAvL29kYXRhLm5leHRMaW5rOiB0aGUgbmV4dCBsaW5rIG9mIGEgY29sbGVjdGlvbiB3aXRoIHBhcnRpYWwgcmVzdWx0c1xuICAgIE9EQVRBX05FWFRMSU5LOiAnQG9kYXRhLm5leHRMaW5rJyxcbiAgICAvL29kYXRhLmRlbHRhTGluazogdGhlIGRlbHRhIGxpbmsgZm9yIG9idGFpbmluZyBjaGFuZ2VzIHRvIHRoZSByZXN1bHQsIGlmIHJlcXVlc3RlZFxuICAgIE9EQVRBX0RFTFRBTElOSzogJ0BvZGF0YS5kZWx0YUxpbmsnLFxuICAgIC8vb2RhdGEucmVhZExpbms6IHRoZSBsaW5rIHVzZWQgdG8gcmVhZCB0aGUgZW50aXR5LCBpZiB0aGUgZWRpdCBsaW5rIGNhbm5vdCBiZSB1c2VkIHRvIHJlYWQgdGhlIGVudGl0eVxuICAgIE9EQVRBX1JFQURMSU5LOiAnQG9kYXRhLnJlYWRMaW5rJyxcbiAgICAvL29kYXRhLmVkaXRMaW5rOiB0aGUgbGluayB1c2VkIHRvIGVkaXQvdXBkYXRlIHRoZSBlbnRpdHksIGlmIHRoZSBlbnRpdHkgaXMgdXBkYXRhYmxlIGFuZCB0aGUgb2RhdGEuaWQgZG9lcyBub3QgcmVwcmVzZW50IGEgVVJMIHRoYXQgY2FuIGJlIHVzZWQgdG8gZWRpdCB0aGUgZW50aXR5XG4gICAgT0RBVEFfRURJVExJTks6ICdAb2RhdGEuZWRpdExpbmsnLFxuICAgIC8vb2RhdGEuYXNzb2NpYXRpb25MaW5rOiB0aGUgbGluayB1c2VkIHRvIGRlc2NyaWJlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGVudGl0eSBhbmQgcmVsYXRlZCBlbnRpdGllc1xuICAgIE9EQVRBX0FTU09DSUFUSU9OTElOSzogJ0BvZGF0YS5hc3NvY2lhdGlvbkxpbmsnLFxuICAgIC8vb2RhdGEubmF2aWdhdGlvbkxpbms6IHRoZSBsaW5rIHVzZWQgdG8gcmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhIG5hdmlnYXRpb24gcHJvcGVydHlcbiAgICBPREFUQV9OQVZJR0FUSU9OTElOSzogJ0BvZGF0YS5uYXZpZ2F0aW9uTGluaycsXG4gICAgLy9NZWRpYSBlbnRpdGllcyBhbmQgc3RyZWFtIHByb3BlcnRpZXMgbWF5IGluIGFkZGl0aW9uIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhbm5vdGF0aW9uczpcbiAgICAvL29kYXRhLm1lZGlhRXRhZzogdGhlIEVUYWcgb2YgdGhlIHN0cmVhbSwgYXMgYXBwcm9wcmlhdGVcbiAgICBPREFUQV9NRURJQV9FVEFHOiAnQG9kYXRhLm1lZGlhRXRhZycsXG4gICAgLy9vZGF0YS5tZWRpYUNvbnRlbnRUeXBlOiB0aGUgY29udGVudCB0eXBlIG9mIHRoZSBzdHJlYW1cbiAgICBPREFUQV9NRURJQV9DT05URU5UVFlQRTogJ0BvZGF0YS5tZWRpYUNvbnRlbnRUeXBlJyxcbiAgICAvL29kYXRhLm1lZGlhUmVhZExpbms6IHRoZSBsaW5rIHVzZWQgdG8gcmVhZCB0aGUgc3RyZWFtXG4gICAgT0RBVEFfTUVESUFfUkVBRExJTks6ICdAb2RhdGEubWVkaWFSZWFkTGluaycsXG4gICAgLy9vZGF0YS5tZWRpYUVkaXRMaW5rOiB0aGUgbGluayB1c2VkIHRvIGVkaXQvdXBkYXRlIHRoZSBzdHJlYW1cbiAgICBPREFUQV9NRURJQV9FRElUTElOSzogJ0BvZGF0YS5tZWRpYUVkaXRMaW5rJyxcbiAgICAvL2h0dHA6Ly9uYi1tZHAtZGV2MDE6NTc5NzAvJG1ldGFkYXRhI3JlY3Vyc29zLyRlbnRpdHlcbiAgICAvL2h0dHA6Ly9uYi1tZHAtZGV2MDE6NTc5NzAvJG1ldGFkYXRhI2NhdGVnb3JpYXNcbiAgICAvL2h0dHA6Ly9uYi1tZHAtZGV2MDE6NTc5NzAvJG1ldGFkYXRhI2p1emdhZG9zXG4gICAgLy9odHRwOi8vbmItbWRwLWRldjAxOjU3OTcwLyRtZXRhZGF0YSNDb2xsZWN0aW9uKFNJVS5SZWN1cnNvcy5SZWN1cnNvRW50cnkpXG4gICAgLy9odHRwOi8vbmItbWRwLWRldjAxOjU3OTcwLyRtZXRhZGF0YSNjYXRlZ29yaWFzLyRlbnRpdHlcbiAgICAvL2h0dHA6Ly9uYi1tZHAtZGV2MDE6NTc5NzAvJG1ldGFkYXRhI2NhdGVnb3JpYXMoY2hpbGRyZW4oY2hpbGRyZW4oY2hpbGRyZW4oY2hpbGRyZW4oY2hpbGRyZW4oY2hpbGRyZW4oY2hpbGRyZW4oY2hpbGRyZW4oY2hpbGRyZW4oY2hpbGRyZW4oKSkpKSkpKSkpKSkvJGVudGl0eVxuICAgIC8vaHR0cDovL25iLW1kcC1kZXYwMTo1Nzk3MC8kbWV0YWRhdGEjcmVjdXJzb3MvU0lVLkRvY3VtZW50b3MuRG9jdW1lbnRvLyRlbnRpdHlcbiAgICAvL2h0dHA6Ly9uYi1tZHAtZGV2MDE6NTc5NzAvJG1ldGFkYXRhI1NJVS5BcGkuSW5mcmFzdHJ1Y3R1cmUuU3RvcmFnZS5CYWNrZW5kLlNpdVVybHNcbiAgICBjb250ZXh0KGFubm90czogTWFwPHN0cmluZywgYW55PiB8IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgICAgIGxldCBjdHg6IE9EYXRhQ29udGV4dCA9IHt9O1xuICAgICAgY29uc3Qgc3RyID1cbiAgICAgICAgYW5ub3RzIGluc3RhbmNlb2YgTWFwXG4gICAgICAgICAgPyBhbm5vdHMuZ2V0KHRoaXMuT0RBVEFfQ09OVEVYVClcbiAgICAgICAgICA6IGFubm90c1t0aGlzLk9EQVRBX0NPTlRFWFRdO1xuICAgICAgaWYgKHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGxldCBpbmRleCA9IHN0ci5pbmRleE9mKCckbWV0YWRhdGEnKTtcbiAgICAgICAgY3R4LnNlcnZpY2VSb290VXJsID0gc3RyLnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgICAgIGluZGV4ID0gc3RyLmluZGV4T2YoJyMnKTtcbiAgICAgICAgY3R4Lm1ldGFkYXRhVXJsID0gc3RyLnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gc3RyLnN1YnN0cmluZyhpbmRleCArIDEpLnNwbGl0KCcvJyk7XG4gICAgICAgIGNvbnN0IGNvbCA9IENPTExFQ1RJT04uZXhlYyhwYXJ0c1swXSk7XG4gICAgICAgIGlmIChjb2wpIHtcbiAgICAgICAgICBjdHgudHlwZSA9IGNvbFsxXTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0c1swXS5pbmRleE9mKCcuJykgIT09IC0xKSB7XG4gICAgICAgICAgY3R4LnR5cGUgPSBwYXJ0c1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHBhcnRzWzBdLm1hdGNoKFBST1BFUlRZKTtcbiAgICAgICAgICBjb25zdCBleHBhbmQgPSBwYXJ0c1swXS5tYXRjaChFWFBBTkQpO1xuICAgICAgICAgIGN0eC5lbnRpdHkgPSBwYXJ0c1sxXSA9PT0gJyRlbnRpdHknO1xuICAgICAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgY3R4LmVudGl0eVNldCA9IHByb3BlcnR5WzFdO1xuICAgICAgICAgICAgY3R4LmtleSA9IHByb3BlcnR5WzJdO1xuICAgICAgICAgICAgY3R4LnByb3BlcnR5ID0gcGFydHNbMV07XG4gICAgICAgICAgfSBlbHNlIGlmIChleHBhbmQpIHtcbiAgICAgICAgICAgIGN0eC5lbnRpdHlTZXQgPSBleHBhbmRbMV07XG4gICAgICAgICAgICBjdHguZXhwYW5kID0gZXhwYW5kWzJdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdHguZW50aXR5U2V0ID0gcGFydHNbMF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY3R4O1xuICAgIH0sXG4gICAgY291bnRQYXJhbSgpIHtcbiAgICAgIHJldHVybiB7IFskQ09VTlRdOiAndHJ1ZScgfTtcbiAgICB9LFxuICB9KSxcbiAgLy8jZW5kcmVnaW9uXG4gIC8vI3JlZ2lvbiBWZXJzaW9uIDMuMFxuICBbVkVSU0lPTl8zXzBdOiA8T0RhdGFWZXJzaW9uSGVscGVyPk9iamVjdC5hc3NpZ24oe30sIE9EYXRhVmVyc2lvbkJhc2VIZWxwZXIsIHtcbiAgICBPREFUQV9BTk5PVEFUSU9OX1BSRUZJWDogJ29kYXRhLicsXG4gICAgT0RBVEFfRlVOQ1RJT05fUFJFRklYOiAnJyxcbiAgICBPREFUQV9JRDogJ29kYXRhLmlkJyxcbiAgICBPREFUQV9FVEFHOiAnb2RhdGEuZXRhZycsXG4gICAgT0RBVEFfQ09OVEVYVDogJ29kYXRhLm1ldGFkYXRhJyxcbiAgICBPREFUQV9ORVhUTElOSzogJ29kYXRhLm5leHRMaW5rJyxcbiAgICBPREFUQV9UWVBFOiAnb2RhdGEudHlwZScsXG4gICAgT0RBVEFfQ09VTlQ6ICdvZGF0YS5jb3VudCcsXG4gICAgVkFMVUU6ICd2YWx1ZScsXG4gICAgY29udGV4dChhbm5vdHM6IE1hcDxzdHJpbmcsIGFueT4gfCB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gICAgICBsZXQgY3R4OiBPRGF0YUNvbnRleHQgPSB7fTtcbiAgICAgIGNvbnN0IHN0ciA9XG4gICAgICAgIGFubm90cyBpbnN0YW5jZW9mIE1hcFxuICAgICAgICAgID8gYW5ub3RzLmdldCh0aGlzLk9EQVRBX0NPTlRFWFQpXG4gICAgICAgICAgOiBhbm5vdHNbdGhpcy5PREFUQV9DT05URVhUXTtcbiAgICAgIGlmICh0eXBlb2Ygc3RyID09PSAnc3RyaW5nJykge1xuICAgICAgICBsZXQgaW5kZXggPSBzdHIuaW5kZXhPZignJG1ldGFkYXRhJyk7XG4gICAgICAgIGN0eC5zZXJ2aWNlUm9vdFVybCA9IHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICBpbmRleCA9IHN0ci5pbmRleE9mKCcjJyk7XG4gICAgICAgIGN0eC5tZXRhZGF0YVVybCA9IHN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHN0ci5zdWJzdHJpbmcoaW5kZXggKyAxKS5zcGxpdCgnLycpO1xuICAgICAgICBjdHguZW50aXR5U2V0ID0gcGFydHNbMF07XG4gICAgICB9XG4gICAgICByZXR1cm4gY3R4O1xuICAgIH0sXG4gICAgY291bnRQYXJhbSgpIHtcbiAgICAgIHJldHVybiB7IFskSU5MSU5FQ09VTlRdOiAnYWxscGFnZXMnIH07XG4gICAgfSxcbiAgfSksXG4gIC8vI2VuZHJlZ2lvblxuICAvLyNyZWdpb24gVmVyc2lvbiAyLjBcbiAgW1ZFUlNJT05fMl8wXTogPE9EYXRhVmVyc2lvbkhlbHBlcj5PYmplY3QuYXNzaWduKHt9LCBPRGF0YVZlcnNpb25CYXNlSGVscGVyLCB7XG4gICAgT0RBVEFfSUQ6ICdpZCcsXG4gICAgT0RBVEFfRVRBRzogJ2V0YWcnLFxuICAgIE9EQVRBX0FOTk9UQVRJT046ICdfX21ldGFkYXRhJyxcbiAgICBPREFUQV9ORVhUTElOSzogJ19fbmV4dCcsXG4gICAgT0RBVEFfQ09VTlQ6ICdfX2NvdW50JyxcbiAgICBPREFUQV9ERUZFUlJFRDogJ19fZGVmZXJyZWQnLFxuICAgIE9EQVRBX1RZUEU6ICd0eXBlJyxcbiAgICBWQUxVRTogJ3Jlc3VsdHMnLFxuICAgIGFubm90YXRpb25zKHZhbHVlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gICAgICBjb25zdCBhbm5vdHMgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICAgICAgaWYgKHRoaXMuT0RBVEFfQU5OT1RBVElPTiBpbiB2YWx1ZSkge1xuICAgICAgICBPYmplY3QuZW50cmllcyh2YWx1ZVt0aGlzLk9EQVRBX0FOTk9UQVRJT05dKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+XG4gICAgICAgICAgYW5ub3RzLnNldChrZXksIHZhbHVlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFubm90cztcbiAgICB9LFxuICAgIGF0dHJpYnV0ZXModmFsdWU6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIG1ldGFkYXRhOiBPRGF0YU1ldGFkYXRhVHlwZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgY291bnRQYXJhbSgpIHtcbiAgICAgIHJldHVybiB7IFskSU5MSU5FQ09VTlRdOiAnYWxscGFnZXMnIH07XG4gICAgfSxcbiAgfSksXG4gIC8vI2VuZHJlZ2lvblxufTtcbiJdfQ==