@ngrx/store-devtools 15.4.0 → 16.0.0-beta.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 (49) hide show
  1. package/esm2022/src/config.mjs +68 -0
  2. package/esm2022/src/devtools-dispatcher.mjs +12 -0
  3. package/esm2022/src/devtools.mjs +109 -0
  4. package/esm2022/src/extension.mjs +164 -0
  5. package/esm2022/src/instrument.mjs +23 -0
  6. package/{fesm2020 → fesm2022}/ngrx-store-devtools.mjs +19 -15
  7. package/fesm2022/ngrx-store-devtools.mjs.map +1 -0
  8. package/migrations/6_0_0/index.js +2 -2
  9. package/migrations/6_0_0/index.js.map +1 -1
  10. package/package.json +6 -12
  11. package/schematics/ng-add/index.js +4 -4
  12. package/schematics/ng-add/index.js.map +1 -1
  13. package/schematics/ng-add/schema.js +1 -1
  14. package/schematics-core/index.js +50 -61
  15. package/schematics-core/index.js.map +1 -1
  16. package/schematics-core/utility/ast-utils.js +3 -3
  17. package/schematics-core/utility/change.js +2 -2
  18. package/schematics-core/utility/config.js +1 -1
  19. package/schematics-core/utility/find-component.js +2 -2
  20. package/schematics-core/utility/find-module.js +2 -2
  21. package/schematics-core/utility/json-utilts.js +2 -2
  22. package/schematics-core/utility/libs-version.js +2 -2
  23. package/schematics-core/utility/libs-version.js.map +1 -1
  24. package/schematics-core/utility/ngrx-utils.js +3 -3
  25. package/schematics-core/utility/package.js +1 -1
  26. package/schematics-core/utility/parse-name.js +2 -2
  27. package/schematics-core/utility/project.js +1 -1
  28. package/schematics-core/utility/strings.js +1 -1
  29. package/schematics-core/utility/update.js +1 -1
  30. package/schematics-core/utility/visitors.js +7 -7
  31. package/src/actions.d.ts +1 -1
  32. package/src/config.d.ts +5 -5
  33. package/src/reducer.d.ts +4 -4
  34. package/esm2020/src/config.mjs +0 -63
  35. package/esm2020/src/devtools-dispatcher.mjs +0 -11
  36. package/esm2020/src/devtools.mjs +0 -108
  37. package/esm2020/src/extension.mjs +0 -163
  38. package/esm2020/src/instrument.mjs +0 -22
  39. package/fesm2015/ngrx-store-devtools.mjs +0 -984
  40. package/fesm2015/ngrx-store-devtools.mjs.map +0 -1
  41. package/fesm2020/ngrx-store-devtools.mjs.map +0 -1
  42. /package/{esm2020 → esm2022}/index.mjs +0 -0
  43. /package/{esm2020 → esm2022}/ngrx-store-devtools.mjs +0 -0
  44. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
  45. /package/{esm2020 → esm2022}/src/actions.mjs +0 -0
  46. /package/{esm2020 → esm2022}/src/index.mjs +0 -0
  47. /package/{esm2020 → esm2022}/src/provide-store-devtools.mjs +0 -0
  48. /package/{esm2020 → esm2022}/src/reducer.mjs +0 -0
  49. /package/{esm2020 → esm2022}/src/utils.mjs +0 -0
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- exports.__esModule = true;
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.platformVersion = void 0;
4
- exports.platformVersion = '^15.4.0';
4
+ exports.platformVersion = '^16.0.0-beta.0';
5
5
  //# sourceMappingURL=libs-version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"libs-version.js","sourceRoot":"","sources":["../../../../../modules/store-devtools/schematics-core/utility/libs-version.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG,SAAS,CAAC","sourcesContent":["export const platformVersion = '^15.4.0';\n"]}
1
+ {"version":3,"file":"libs-version.js","sourceRoot":"","sources":["../../../../../modules/store-devtools/schematics-core/utility/libs-version.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG,gBAAgB,CAAC","sourcesContent":["export const platformVersion = '^16.0.0-beta.0';\n"]}
@@ -35,7 +35,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
35
35
  }
36
36
  return to.concat(ar || Array.prototype.slice.call(from));
37
37
  };
38
- exports.__esModule = true;
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.getPrefix = exports.omit = exports.addReducerImportToNgModule = exports.addReducerToActionReducerMap = exports.addReducerToStateInterface = exports.addReducerToState = void 0;
40
40
  var ts = require("typescript");
41
41
  var stringUtils = require("./strings");
@@ -82,7 +82,7 @@ function addReducerToState(options) {
82
82
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
83
83
  finally {
84
84
  try {
85
- if (changes_1_1 && !changes_1_1.done && (_a = changes_1["return"])) _a.call(changes_1);
85
+ if (changes_1_1 && !changes_1_1.done && (_a = changes_1.return)) _a.call(changes_1);
86
86
  }
87
87
  finally { if (e_1) throw e_1.error; }
88
88
  }
@@ -223,7 +223,7 @@ function addReducerImportToNgModule(options) {
223
223
  catch (e_2_1) { e_2 = { error: e_2_1 }; }
224
224
  finally {
225
225
  try {
226
- if (changes_2_1 && !changes_2_1.done && (_a = changes_2["return"])) _a.call(changes_2);
226
+ if (changes_2_1 && !changes_2_1.done && (_a = changes_2.return)) _a.call(changes_2);
227
227
  }
228
228
  finally { if (e_2) throw e_2.error; }
229
229
  }
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- exports.__esModule = true;
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addPackageToPackageJson = void 0;
4
4
  /**
5
5
  * Adds a package to the package.json
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- exports.__esModule = true;
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseName = void 0;
4
4
  var core_1 = require("@angular-devkit/core");
5
5
  function parseName(path, name) {
@@ -7,7 +7,7 @@ function parseName(path, name) {
7
7
  var namePath = (0, core_1.dirname)((path + '/' + name));
8
8
  return {
9
9
  name: nameWithoutPath,
10
- path: (0, core_1.normalize)('/' + namePath)
10
+ path: (0, core_1.normalize)('/' + namePath),
11
11
  };
12
12
  }
13
13
  exports.parseName = parseName;
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- exports.__esModule = true;
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isLib = exports.getProjectPath = exports.getProject = void 0;
4
4
  var config_1 = require("./config");
5
5
  function getProject(host, options) {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- exports.__esModule = true;
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.featurePath = exports.group = exports.pluralize = exports.capitalize = exports.underscore = exports.classify = exports.camelize = exports.dasherize = exports.decamelize = void 0;
4
4
  /**
5
5
  * @license
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- exports.__esModule = true;
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.updatePackage = void 0;
4
4
  var schematics_1 = require("@angular-devkit/schematics");
5
5
  function updatePackage(name) {
@@ -5,7 +5,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
5
5
  function verb(n) { return function (v) { return step([n, v]); }; }
6
6
  function step(op) {
7
7
  if (f) throw new TypeError("Generator is already executing.");
8
- while (_) try {
8
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
9
9
  if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
10
10
  if (y = 0, t) op = [op[0] & 2, t.value];
11
11
  switch (op[0]) {
@@ -53,7 +53,7 @@ var __read = (this && this.__read) || function (o, n) {
53
53
  }
54
54
  return ar;
55
55
  };
56
- exports.__esModule = true;
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
57
  exports.visitDecorator = exports.visitNgModules = exports.visitComponents = exports.visitNgModuleExports = exports.visitNgModuleImports = exports.visitTemplates = exports.visitTSSourceFiles = void 0;
58
58
  var ts = require("typescript");
59
59
  var core_1 = require("@angular-devkit/core");
@@ -69,7 +69,7 @@ function visitTSSourceFiles(tree, visitor) {
69
69
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
70
70
  finally {
71
71
  try {
72
- if (_c && !_c.done && (_a = _b["return"])) _a.call(_b);
72
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
73
73
  }
74
74
  finally { if (e_1) throw e_1.error; }
75
75
  }
@@ -90,7 +90,7 @@ function visitTemplates(tree, visitor) {
90
90
  fileName: source.fileName,
91
91
  content: n.initializer.text,
92
92
  inline: true,
93
- start: templateStartIdx
93
+ start: templateStartIdx,
94
94
  }, tree);
95
95
  return;
96
96
  }
@@ -109,7 +109,7 @@ function visitTemplates(tree, visitor) {
109
109
  fileName: templatePath,
110
110
  content: fileContent.toString(),
111
111
  inline: false,
112
- start: 0
112
+ start: 0,
113
113
  }, tree);
114
114
  return;
115
115
  }
@@ -211,7 +211,7 @@ function visit(directory) {
211
211
  return [3 /*break*/, 7];
212
212
  case 6:
213
213
  try {
214
- if (_b && !_b.done && (_e = _a["return"])) _e.call(_a);
214
+ if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
215
215
  }
216
216
  finally { if (e_2) throw e_2.error; }
217
217
  return [7 /*endfinally*/];
@@ -239,7 +239,7 @@ function visit(directory) {
239
239
  return [3 /*break*/, 14];
240
240
  case 13:
241
241
  try {
242
- if (_d && !_d.done && (_f = _c["return"])) _f.call(_c);
242
+ if (_d && !_d.done && (_f = _c.return)) _f.call(_c);
243
243
  }
244
244
  finally { if (e_3) throw e_3.error; }
245
245
  return [7 /*endfinally*/];
package/src/actions.d.ts CHANGED
@@ -76,4 +76,4 @@ export declare class PauseRecording implements Action {
76
76
  readonly type = "PAUSE_RECORDING";
77
77
  constructor(status: boolean);
78
78
  }
79
- export declare type All = PerformAction | Refresh | Reset | Rollback | Commit | Sweep | ToggleAction | SetActionsActive | JumpToState | JumpToAction | ImportState | LockChanges | PauseRecording;
79
+ export type All = PerformAction | Refresh | Reset | Rollback | Commit | Sweep | ToggleAction | SetActionsActive | JumpToState | JumpToAction | ImportState | LockChanges | PauseRecording;
package/src/config.d.ts CHANGED
@@ -1,15 +1,15 @@
1
1
  import { ActionReducer, Action } from '@ngrx/store';
2
2
  import { InjectionToken } from '@angular/core';
3
- export declare type ActionSanitizer = (action: Action, id: number) => Action;
4
- export declare type StateSanitizer = (state: any, index: number) => any;
5
- export declare type SerializationOptions = {
3
+ export type ActionSanitizer = (action: Action, id: number) => Action;
4
+ export type StateSanitizer = (state: any, index: number) => any;
5
+ export type SerializationOptions = {
6
6
  options?: boolean | any;
7
7
  replacer?: (key: any, value: any) => {};
8
8
  reviver?: (key: any, value: any) => {};
9
9
  immutable?: any;
10
10
  refs?: Array<any>;
11
11
  };
12
- export declare type Predicate = (state: any, action: Action) => boolean;
12
+ export type Predicate = (state: any, action: Action) => boolean;
13
13
  /**
14
14
  * Chrome extension documentation
15
15
  * @see https://github.com/reduxjs/redux-devtools/blob/main/extension/docs/API/Arguments.md#features
@@ -115,7 +115,7 @@ export declare const STORE_DEVTOOLS_CONFIG: InjectionToken<StoreDevtoolsConfig>;
115
115
  * Used to provide a `StoreDevtoolsConfig` for the store-devtools.
116
116
  */
117
117
  export declare const INITIAL_OPTIONS: InjectionToken<StoreDevtoolsConfig>;
118
- export declare type StoreDevtoolsOptions = Partial<StoreDevtoolsConfig> | (() => Partial<StoreDevtoolsConfig>);
118
+ export type StoreDevtoolsOptions = Partial<StoreDevtoolsConfig> | (() => Partial<StoreDevtoolsConfig>);
119
119
  export declare function noMonitor(): null;
120
120
  export declare const DEFAULT_NAME = "NgRx Store DevTools";
121
121
  export declare function createConfig(optionsInput: StoreDevtoolsOptions): StoreDevtoolsConfig;
package/src/reducer.d.ts CHANGED
@@ -2,14 +2,14 @@ import { ErrorHandler } from '@angular/core';
2
2
  import { Action, ActionReducer, UPDATE, INIT } from '@ngrx/store';
3
3
  import * as DevtoolsActions from './actions';
4
4
  import { StoreDevtoolsConfig } from './config';
5
- export declare type InitAction = {
5
+ export type InitAction = {
6
6
  readonly type: typeof INIT;
7
7
  };
8
- export declare type UpdateReducerAction = {
8
+ export type UpdateReducerAction = {
9
9
  readonly type: typeof UPDATE;
10
10
  };
11
- export declare type CoreActions = InitAction | UpdateReducerAction;
12
- export declare type Actions = DevtoolsActions.All | CoreActions;
11
+ export type CoreActions = InitAction | UpdateReducerAction;
12
+ export type Actions = DevtoolsActions.All | CoreActions;
13
13
  export declare const INIT_ACTION: {
14
14
  type: "@ngrx/store/init";
15
15
  };
@@ -1,63 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- /**
3
- * Chrome extension documentation
4
- * @see https://github.com/reduxjs/redux-devtools/blob/main/extension/docs/API/Arguments.md
5
- * Firefox extension documentation
6
- * @see https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/API/Arguments.md
7
- */
8
- export class StoreDevtoolsConfig {
9
- constructor() {
10
- /**
11
- * Maximum allowed actions to be stored in the history tree (default: `false`)
12
- */
13
- this.maxAge = false;
14
- }
15
- }
16
- export const STORE_DEVTOOLS_CONFIG = new InjectionToken('@ngrx/store-devtools Options');
17
- /**
18
- * Used to provide a `StoreDevtoolsConfig` for the store-devtools.
19
- */
20
- export const INITIAL_OPTIONS = new InjectionToken('@ngrx/store-devtools Initial Config');
21
- export function noMonitor() {
22
- return null;
23
- }
24
- export const DEFAULT_NAME = 'NgRx Store DevTools';
25
- export function createConfig(optionsInput) {
26
- const DEFAULT_OPTIONS = {
27
- maxAge: false,
28
- monitor: noMonitor,
29
- actionSanitizer: undefined,
30
- stateSanitizer: undefined,
31
- name: DEFAULT_NAME,
32
- serialize: false,
33
- logOnly: false,
34
- autoPause: false,
35
- trace: false,
36
- traceLimit: 75,
37
- // Add all features explicitly. This prevent buggy behavior for
38
- // options like "lock" which might otherwise not show up.
39
- features: {
40
- pause: true,
41
- lock: true,
42
- persist: true,
43
- export: true,
44
- import: 'custom',
45
- jump: true,
46
- skip: true,
47
- reorder: true,
48
- dispatch: true,
49
- test: true, // Generate tests for the selected actions
50
- },
51
- };
52
- const options = typeof optionsInput === 'function' ? optionsInput() : optionsInput;
53
- const logOnly = options.logOnly
54
- ? { pause: true, export: true, test: true }
55
- : false;
56
- const features = options.features || logOnly || DEFAULT_OPTIONS.features;
57
- const config = Object.assign({}, DEFAULT_OPTIONS, { features }, options);
58
- if (config.maxAge && config.maxAge < 2) {
59
- throw new Error(`Devtools 'maxAge' cannot be less than 2, got ${config.maxAge}`);
60
- }
61
- return config;
62
- }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9zdG9yZS1kZXZ0b29scy9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUE4RC9DOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQUFoQztRQUNFOztXQUVHO1FBQ0gsV0FBTSxHQUFtQixLQUFLLENBQUM7SUEyQ2pDLENBQUM7Q0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUNyRCw4QkFBOEIsQ0FDL0IsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLElBQUksY0FBYyxDQUMvQyxxQ0FBcUMsQ0FDdEMsQ0FBQztBQU1GLE1BQU0sVUFBVSxTQUFTO0lBQ3ZCLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxxQkFBcUIsQ0FBQztBQUVsRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixZQUFrQztJQUVsQyxNQUFNLGVBQWUsR0FBd0I7UUFDM0MsTUFBTSxFQUFFLEtBQUs7UUFDYixPQUFPLEVBQUUsU0FBUztRQUNsQixlQUFlLEVBQUUsU0FBUztRQUMxQixjQUFjLEVBQUUsU0FBUztRQUN6QixJQUFJLEVBQUUsWUFBWTtRQUNsQixTQUFTLEVBQUUsS0FBSztRQUNoQixPQUFPLEVBQUUsS0FBSztRQUNkLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLEtBQUssRUFBRSxLQUFLO1FBQ1osVUFBVSxFQUFFLEVBQUU7UUFDZCwrREFBK0Q7UUFDL0QseURBQXlEO1FBQ3pELFFBQVEsRUFBRTtZQUNSLEtBQUssRUFBRSxJQUFJO1lBQ1gsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsSUFBSTtZQUNiLE1BQU0sRUFBRSxJQUFJO1lBQ1osTUFBTSxFQUFFLFFBQVE7WUFDaEIsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU8sRUFBRSxJQUFJO1lBQ2IsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsSUFBSSxFQUFFLDBDQUEwQztTQUN2RDtLQUNGLENBQUM7SUFFRixNQUFNLE9BQU8sR0FDWCxPQUFPLFlBQVksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDckUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU87UUFDN0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7UUFDM0MsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNWLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUM7SUFDekUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsZUFBZSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFekUsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0RBQWdELE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FDaEUsQ0FBQztLQUNIO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGlvblJlZHVjZXIsIEFjdGlvbiB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIEFjdGlvblNhbml0aXplciA9IChhY3Rpb246IEFjdGlvbiwgaWQ6IG51bWJlcikgPT4gQWN0aW9uO1xuZXhwb3J0IHR5cGUgU3RhdGVTYW5pdGl6ZXIgPSAoc3RhdGU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gYW55O1xuZXhwb3J0IHR5cGUgU2VyaWFsaXphdGlvbk9wdGlvbnMgPSB7XG4gIG9wdGlvbnM/OiBib29sZWFuIHwgYW55O1xuICByZXBsYWNlcj86IChrZXk6IGFueSwgdmFsdWU6IGFueSkgPT4ge307XG4gIHJldml2ZXI/OiAoa2V5OiBhbnksIHZhbHVlOiBhbnkpID0+IHt9O1xuICBpbW11dGFibGU/OiBhbnk7XG4gIHJlZnM/OiBBcnJheTxhbnk+O1xufTtcbmV4cG9ydCB0eXBlIFByZWRpY2F0ZSA9IChzdGF0ZTogYW55LCBhY3Rpb246IEFjdGlvbikgPT4gYm9vbGVhbjtcblxuLyoqXG4gKiBDaHJvbWUgZXh0ZW5zaW9uIGRvY3VtZW50YXRpb25cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlZHV4anMvcmVkdXgtZGV2dG9vbHMvYmxvYi9tYWluL2V4dGVuc2lvbi9kb2NzL0FQSS9Bcmd1bWVudHMubWQjZmVhdHVyZXNcbiAqIEZpcmVmb3ggZXh0ZW5zaW9uIGRvY3VtZW50YXRpb25cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3phbG1veGlzdXMvcmVkdXgtZGV2dG9vbHMtZXh0ZW5zaW9uL2Jsb2IvbWFzdGVyL2RvY3MvQVBJL0FyZ3VtZW50cy5tZCNmZWF0dXJlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERldlRvb2xzRmVhdHVyZU9wdGlvbnMge1xuICAvKipcbiAgICogU3RhcnQvcGF1c2UgcmVjb3JkaW5nIG9mIGRpc3BhdGNoZWQgYWN0aW9uc1xuICAgKi9cbiAgcGF1c2U/OiBib29sZWFuO1xuICAvKipcbiAgICogTG9jay91bmxvY2sgZGlzcGF0Y2hpbmcgYWN0aW9ucyBhbmQgc2lkZSBlZmZlY3RzXG4gICAqL1xuICBsb2NrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFBlcnNpc3Qgc3RhdGVzIG9uIHBhZ2UgcmVsb2FkaW5nXG4gICAqL1xuICBwZXJzaXN0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEV4cG9ydCBoaXN0b3J5IG9mIGFjdGlvbnMgaW4gYSBmaWxlXG4gICAqL1xuICBleHBvcnQ/OiBib29sZWFuO1xuICAvKipcbiAgICogSW1wb3J0IGhpc3Rvcnkgb2YgYWN0aW9ucyBmcm9tIGEgZmlsZVxuICAgKi9cbiAgaW1wb3J0PzogJ2N1c3RvbScgfCBib29sZWFuO1xuICAvKipcbiAgICogSnVtcCBiYWNrIGFuZCBmb3J0aCAodGltZSB0cmF2ZWxsaW5nKVxuICAgKi9cbiAganVtcD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTa2lwIChjYW5jZWwpIGFjdGlvbnNcbiAgICovXG4gIHNraXA/OiBib29sZWFuO1xuICAvKipcbiAgICogRHJhZyBhbmQgZHJvcCBhY3Rpb25zIGluIHRoZSBoaXN0b3J5IGxpc3RcbiAgICovXG4gIHJlb3JkZXI/OiBib29sZWFuO1xuICAvKipcbiAgICogRGlzcGF0Y2ggY3VzdG9tIGFjdGlvbnMgb3IgYWN0aW9uIGNyZWF0b3JzXG4gICAqL1xuICBkaXNwYXRjaD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0ZXN0cyBmb3IgdGhlIHNlbGVjdGVkIGFjdGlvbnNcbiAgICovXG4gIHRlc3Q/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENocm9tZSBleHRlbnNpb24gZG9jdW1lbnRhdGlvblxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVkdXhqcy9yZWR1eC1kZXZ0b29scy9ibG9iL21haW4vZXh0ZW5zaW9uL2RvY3MvQVBJL0FyZ3VtZW50cy5tZFxuICogRmlyZWZveCBleHRlbnNpb24gZG9jdW1lbnRhdGlvblxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vemFsbW94aXN1cy9yZWR1eC1kZXZ0b29scy1leHRlbnNpb24vYmxvYi9tYXN0ZXIvZG9jcy9BUEkvQXJndW1lbnRzLm1kXG4gKi9cbmV4cG9ydCBjbGFzcyBTdG9yZURldnRvb2xzQ29uZmlnIHtcbiAgLyoqXG4gICAqIE1heGltdW0gYWxsb3dlZCBhY3Rpb25zIHRvIGJlIHN0b3JlZCBpbiB0aGUgaGlzdG9yeSB0cmVlIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgbWF4QWdlOiBudW1iZXIgfCBmYWxzZSA9IGZhbHNlO1xuICBtb25pdG9yPzogQWN0aW9uUmVkdWNlcjxhbnksIGFueT47XG4gIC8qKlxuICAgKiBGdW5jdGlvbiB3aGljaCB0YWtlcyBgYWN0aW9uYCBvYmplY3QgYW5kIGlkIG51bWJlciBhcyBhcmd1bWVudHMsIGFuZCBzaG91bGQgcmV0dXJuIGBhY3Rpb25gIG9iamVjdCBiYWNrLlxuICAgKi9cbiAgYWN0aW9uU2FuaXRpemVyPzogQWN0aW9uU2FuaXRpemVyO1xuICAvKipcbiAgICogRnVuY3Rpb24gd2hpY2ggdGFrZXMgYHN0YXRlYCBvYmplY3QgYW5kIGluZGV4IGFzIGFyZ3VtZW50cywgYW5kIHNob3VsZCByZXR1cm4gYHN0YXRlYCBvYmplY3QgYmFjay5cbiAgICovXG4gIHN0YXRlU2FuaXRpemVyPzogU3RhdGVTYW5pdGl6ZXI7XG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2UgbmFtZSB0byBiZSBzaG93biBvbiB0aGUgbW9uaXRvciBwYWdlIChkZWZhdWx0OiBgZG9jdW1lbnQudGl0bGVgKVxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgc2VyaWFsaXplPzogYm9vbGVhbiB8IFNlcmlhbGl6YXRpb25PcHRpb25zO1xuICBsb2dPbmx5PzogYm9vbGVhbjtcbiAgZmVhdHVyZXM/OiBEZXZUb29sc0ZlYXR1cmVPcHRpb25zO1xuICAvKipcbiAgICogQWN0aW9uIHR5cGVzIHRvIGJlIGhpZGRlbiBpbiB0aGUgbW9uaXRvcnMuIElmIGBhY3Rpb25zU2FmZWxpc3RgIHNwZWNpZmllZCwgYGFjdGlvbnNCbG9ja2xpc3RgIGlzIGlnbm9yZWQuXG4gICAqL1xuICBhY3Rpb25zQmxvY2tsaXN0Pzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBBY3Rpb24gdHlwZXMgdG8gYmUgc2hvd24gaW4gdGhlIG1vbml0b3JzXG4gICAqL1xuICBhY3Rpb25zU2FmZWxpc3Q/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIENhbGxlZCBmb3IgZXZlcnkgYWN0aW9uIGJlZm9yZSBzZW5kaW5nLCB0YWtlcyBzdGF0ZSBhbmQgYWN0aW9uIG9iamVjdCwgYW5kIHJldHVybnMgdHJ1ZSBpbiBjYXNlIGl0IGFsbG93cyBzZW5kaW5nIHRoZSBjdXJyZW50IGRhdGEgdG8gdGhlIG1vbml0b3IuXG4gICAqL1xuICBwcmVkaWNhdGU/OiBQcmVkaWNhdGU7XG4gIC8qKlxuICAgKiBBdXRvIHBhdXNlcyB3aGVuIHRoZSBleHRlbnNpb27igJlzIHdpbmRvdyBpcyBub3Qgb3BlbmVkLCBhbmQgc28gaGFzIHplcm8gaW1wYWN0IG9uIHlvdXIgYXBwIHdoZW4gbm90IGluIHVzZS5cbiAgICovXG4gIGF1dG9QYXVzZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byB0cnVlLCB3aWxsIGluY2x1ZGUgc3RhY2sgdHJhY2UgZm9yIGV2ZXJ5IGRpc3BhdGNoZWQgYWN0aW9uXG4gICAqL1xuICB0cmFjZT86IGJvb2xlYW4gfCAoKCkgPT4gc3RyaW5nKTtcblxuICAvKipcbiAgICogTWF4aW11bSBzdGFjayB0cmFjZSBmcmFtZXMgdG8gYmUgc3RvcmVkIChpbiBjYXNlIHRyYWNlIG9wdGlvbiB3YXMgcHJvdmlkZWQgYXMgdHJ1ZSkuXG4gICAqL1xuICB0cmFjZUxpbWl0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgU1RPUkVfREVWVE9PTFNfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPFN0b3JlRGV2dG9vbHNDb25maWc+KFxuICAnQG5ncngvc3RvcmUtZGV2dG9vbHMgT3B0aW9ucydcbik7XG5cbi8qKlxuICogVXNlZCB0byBwcm92aWRlIGEgYFN0b3JlRGV2dG9vbHNDb25maWdgIGZvciB0aGUgc3RvcmUtZGV2dG9vbHMuXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48U3RvcmVEZXZ0b29sc0NvbmZpZz4oXG4gICdAbmdyeC9zdG9yZS1kZXZ0b29scyBJbml0aWFsIENvbmZpZydcbik7XG5cbmV4cG9ydCB0eXBlIFN0b3JlRGV2dG9vbHNPcHRpb25zID1cbiAgfCBQYXJ0aWFsPFN0b3JlRGV2dG9vbHNDb25maWc+XG4gIHwgKCgpID0+IFBhcnRpYWw8U3RvcmVEZXZ0b29sc0NvbmZpZz4pO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9Nb25pdG9yKCk6IG51bGwge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTkFNRSA9ICdOZ1J4IFN0b3JlIERldlRvb2xzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZyhcbiAgb3B0aW9uc0lucHV0OiBTdG9yZURldnRvb2xzT3B0aW9uc1xuKTogU3RvcmVEZXZ0b29sc0NvbmZpZyB7XG4gIGNvbnN0IERFRkFVTFRfT1BUSU9OUzogU3RvcmVEZXZ0b29sc0NvbmZpZyA9IHtcbiAgICBtYXhBZ2U6IGZhbHNlLFxuICAgIG1vbml0b3I6IG5vTW9uaXRvcixcbiAgICBhY3Rpb25TYW5pdGl6ZXI6IHVuZGVmaW5lZCxcbiAgICBzdGF0ZVNhbml0aXplcjogdW5kZWZpbmVkLFxuICAgIG5hbWU6IERFRkFVTFRfTkFNRSxcbiAgICBzZXJpYWxpemU6IGZhbHNlLFxuICAgIGxvZ09ubHk6IGZhbHNlLFxuICAgIGF1dG9QYXVzZTogZmFsc2UsXG4gICAgdHJhY2U6IGZhbHNlLFxuICAgIHRyYWNlTGltaXQ6IDc1LFxuICAgIC8vIEFkZCBhbGwgZmVhdHVyZXMgZXhwbGljaXRseS4gVGhpcyBwcmV2ZW50IGJ1Z2d5IGJlaGF2aW9yIGZvclxuICAgIC8vIG9wdGlvbnMgbGlrZSBcImxvY2tcIiB3aGljaCBtaWdodCBvdGhlcndpc2Ugbm90IHNob3cgdXAuXG4gICAgZmVhdHVyZXM6IHtcbiAgICAgIHBhdXNlOiB0cnVlLCAvLyBTdGFydC9wYXVzZSByZWNvcmRpbmcgb2YgZGlzcGF0Y2hlZCBhY3Rpb25zXG4gICAgICBsb2NrOiB0cnVlLCAvLyBMb2NrL3VubG9jayBkaXNwYXRjaGluZyBhY3Rpb25zIGFuZCBzaWRlIGVmZmVjdHNcbiAgICAgIHBlcnNpc3Q6IHRydWUsIC8vIFBlcnNpc3Qgc3RhdGVzIG9uIHBhZ2UgcmVsb2FkaW5nXG4gICAgICBleHBvcnQ6IHRydWUsIC8vIEV4cG9ydCBoaXN0b3J5IG9mIGFjdGlvbnMgaW4gYSBmaWxlXG4gICAgICBpbXBvcnQ6ICdjdXN0b20nLCAvLyBJbXBvcnQgaGlzdG9yeSBvZiBhY3Rpb25zIGZyb20gYSBmaWxlXG4gICAgICBqdW1wOiB0cnVlLCAvLyBKdW1wIGJhY2sgYW5kIGZvcnRoICh0aW1lIHRyYXZlbGxpbmcpXG4gICAgICBza2lwOiB0cnVlLCAvLyBTa2lwIChjYW5jZWwpIGFjdGlvbnNcbiAgICAgIHJlb3JkZXI6IHRydWUsIC8vIERyYWcgYW5kIGRyb3AgYWN0aW9ucyBpbiB0aGUgaGlzdG9yeSBsaXN0XG4gICAgICBkaXNwYXRjaDogdHJ1ZSwgLy8gRGlzcGF0Y2ggY3VzdG9tIGFjdGlvbnMgb3IgYWN0aW9uIGNyZWF0b3JzXG4gICAgICB0ZXN0OiB0cnVlLCAvLyBHZW5lcmF0ZSB0ZXN0cyBmb3IgdGhlIHNlbGVjdGVkIGFjdGlvbnNcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IG9wdGlvbnMgPVxuICAgIHR5cGVvZiBvcHRpb25zSW5wdXQgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zSW5wdXQoKSA6IG9wdGlvbnNJbnB1dDtcbiAgY29uc3QgbG9nT25seSA9IG9wdGlvbnMubG9nT25seVxuICAgID8geyBwYXVzZTogdHJ1ZSwgZXhwb3J0OiB0cnVlLCB0ZXN0OiB0cnVlIH1cbiAgICA6IGZhbHNlO1xuICBjb25zdCBmZWF0dXJlcyA9IG9wdGlvbnMuZmVhdHVyZXMgfHwgbG9nT25seSB8fCBERUZBVUxUX09QVElPTlMuZmVhdHVyZXM7XG4gIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgeyBmZWF0dXJlcyB9LCBvcHRpb25zKTtcblxuICBpZiAoY29uZmlnLm1heEFnZSAmJiBjb25maWcubWF4QWdlIDwgMikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEZXZ0b29scyAnbWF4QWdlJyBjYW5ub3QgYmUgbGVzcyB0aGFuIDIsIGdvdCAke2NvbmZpZy5tYXhBZ2V9YFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY29uZmlnO1xufVxuIl19
@@ -1,11 +0,0 @@
1
- import { ActionsSubject } from '@ngrx/store';
2
- import { Injectable } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class DevtoolsDispatcher extends ActionsSubject {
5
- }
6
- /** @nocollapse */ DevtoolsDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: DevtoolsDispatcher, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
7
- /** @nocollapse */ DevtoolsDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: DevtoolsDispatcher });
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: DevtoolsDispatcher, decorators: [{
9
- type: Injectable
10
- }] });
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2dG9vbHMtZGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZHVsZXMvc3RvcmUtZGV2dG9vbHMvc3JjL2RldnRvb2xzLWRpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYzs7a0lBQXpDLGtCQUFrQjtzSUFBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb25zU3ViamVjdCB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERldnRvb2xzRGlzcGF0Y2hlciBleHRlbmRzIEFjdGlvbnNTdWJqZWN0IHt9XG4iXX0=
@@ -1,108 +0,0 @@
1
- import { Injectable, Inject } from '@angular/core';
2
- import { INITIAL_STATE, } from '@ngrx/store';
3
- import { merge, queueScheduler, ReplaySubject, } from 'rxjs';
4
- import { map, observeOn, scan, skip, withLatestFrom } from 'rxjs/operators';
5
- import * as Actions from './actions';
6
- import { STORE_DEVTOOLS_CONFIG } from './config';
7
- import { liftInitialState, liftReducerWith } from './reducer';
8
- import { liftAction, unliftState, shouldFilterActions, filterLiftedState, } from './utils';
9
- import { PERFORM_ACTION } from './actions';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "./devtools-dispatcher";
12
- import * as i2 from "@ngrx/store";
13
- import * as i3 from "./extension";
14
- import * as i4 from "./config";
15
- export class StoreDevtools {
16
- constructor(dispatcher, actions$, reducers$, extension, scannedActions, errorHandler, initialState, config) {
17
- const liftedInitialState = liftInitialState(initialState, config.monitor);
18
- const liftReducer = liftReducerWith(initialState, liftedInitialState, errorHandler, config.monitor, config);
19
- const liftedAction$ = merge(merge(actions$.asObservable().pipe(skip(1)), extension.actions$).pipe(map(liftAction)), dispatcher, extension.liftedActions$).pipe(observeOn(queueScheduler));
20
- const liftedReducer$ = reducers$.pipe(map(liftReducer));
21
- const liftedStateSubject = new ReplaySubject(1);
22
- const liftedStateSubscription = liftedAction$
23
- .pipe(withLatestFrom(liftedReducer$), scan(({ state: liftedState }, [action, reducer]) => {
24
- let reducedLiftedState = reducer(liftedState, action);
25
- // On full state update
26
- // If we have actions filters, we must filter completely our lifted state to be sync with the extension
27
- if (action.type !== PERFORM_ACTION && shouldFilterActions(config)) {
28
- reducedLiftedState = filterLiftedState(reducedLiftedState, config.predicate, config.actionsSafelist, config.actionsBlocklist);
29
- }
30
- // Extension should be sent the sanitized lifted state
31
- extension.notify(action, reducedLiftedState);
32
- return { state: reducedLiftedState, action };
33
- }, { state: liftedInitialState, action: null }))
34
- .subscribe(({ state, action }) => {
35
- liftedStateSubject.next(state);
36
- if (action.type === Actions.PERFORM_ACTION) {
37
- const unliftedAction = action.action;
38
- scannedActions.next(unliftedAction);
39
- }
40
- });
41
- const extensionStartSubscription = extension.start$.subscribe(() => {
42
- this.refresh();
43
- });
44
- const liftedState$ = liftedStateSubject.asObservable();
45
- const state$ = liftedState$.pipe(map(unliftState));
46
- this.extensionStartSubscription = extensionStartSubscription;
47
- this.stateSubscription = liftedStateSubscription;
48
- this.dispatcher = dispatcher;
49
- this.liftedState = liftedState$;
50
- this.state = state$;
51
- }
52
- dispatch(action) {
53
- this.dispatcher.next(action);
54
- }
55
- next(action) {
56
- this.dispatcher.next(action);
57
- }
58
- error(error) { }
59
- complete() { }
60
- performAction(action) {
61
- this.dispatch(new Actions.PerformAction(action, +Date.now()));
62
- }
63
- refresh() {
64
- this.dispatch(new Actions.Refresh());
65
- }
66
- reset() {
67
- this.dispatch(new Actions.Reset(+Date.now()));
68
- }
69
- rollback() {
70
- this.dispatch(new Actions.Rollback(+Date.now()));
71
- }
72
- commit() {
73
- this.dispatch(new Actions.Commit(+Date.now()));
74
- }
75
- sweep() {
76
- this.dispatch(new Actions.Sweep());
77
- }
78
- toggleAction(id) {
79
- this.dispatch(new Actions.ToggleAction(id));
80
- }
81
- jumpToAction(actionId) {
82
- this.dispatch(new Actions.JumpToAction(actionId));
83
- }
84
- jumpToState(index) {
85
- this.dispatch(new Actions.JumpToState(index));
86
- }
87
- importState(nextLiftedState) {
88
- this.dispatch(new Actions.ImportState(nextLiftedState));
89
- }
90
- lockChanges(status) {
91
- this.dispatch(new Actions.LockChanges(status));
92
- }
93
- pauseRecording(status) {
94
- this.dispatch(new Actions.PauseRecording(status));
95
- }
96
- }
97
- /** @nocollapse */ StoreDevtools.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: StoreDevtools, deps: [{ token: i1.DevtoolsDispatcher }, { token: i2.ActionsSubject }, { token: i2.ReducerObservable }, { token: i3.DevtoolsExtension }, { token: i2.ScannedActionsSubject }, { token: i0.ErrorHandler }, { token: INITIAL_STATE }, { token: STORE_DEVTOOLS_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
98
- /** @nocollapse */ StoreDevtools.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: StoreDevtools });
99
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: StoreDevtools, decorators: [{
100
- type: Injectable
101
- }], ctorParameters: function () { return [{ type: i1.DevtoolsDispatcher }, { type: i2.ActionsSubject }, { type: i2.ReducerObservable }, { type: i3.DevtoolsExtension }, { type: i2.ScannedActionsSubject }, { type: i0.ErrorHandler }, { type: undefined, decorators: [{
102
- type: Inject,
103
- args: [INITIAL_STATE]
104
- }] }, { type: i4.StoreDevtoolsConfig, decorators: [{
105
- type: Inject,
106
- args: [STORE_DEVTOOLS_CONFIG]
107
- }] }]; } });
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2dG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9tb2R1bGVzL3N0b3JlLWRldnRvb2xzL3NyYy9kZXZ0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUlMLGFBQWEsR0FHZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsS0FBSyxFQUdMLGNBQWMsRUFDZCxhQUFhLEdBRWQsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE9BQU8sS0FBSyxPQUFPLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxxQkFBcUIsRUFBdUIsTUFBTSxVQUFVLENBQUM7QUFFdEUsT0FBTyxFQUFlLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzRSxPQUFPLEVBQ0wsVUFBVSxFQUNWLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsaUJBQWlCLEdBQ2xCLE1BQU0sU0FBUyxDQUFDO0FBRWpCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7OztBQUczQyxNQUFNLE9BQU8sYUFBYTtJQU94QixZQUNFLFVBQThCLEVBQzlCLFFBQXdCLEVBQ3hCLFNBQTRCLEVBQzVCLFNBQTRCLEVBQzVCLGNBQXFDLEVBQ3JDLFlBQTBCLEVBQ0gsWUFBaUIsRUFDVCxNQUEyQjtRQUUxRCxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUUsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUNqQyxZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixNQUFNLENBQUMsT0FBTyxFQUNkLE1BQU0sQ0FDUCxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUN6QixLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUNuRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQ2hCLEVBQ0QsVUFBVSxFQUNWLFNBQVMsQ0FBQyxjQUFjLENBQ3pCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBRWxDLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFFeEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGFBQWEsQ0FBYyxDQUFDLENBQUMsQ0FBQztRQUU3RCxNQUFNLHVCQUF1QixHQUFHLGFBQWE7YUFDMUMsSUFBSSxDQUNILGNBQWMsQ0FBQyxjQUFjLENBQUMsRUFDOUIsSUFBSSxDQU9GLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUM1QyxJQUFJLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDdEQsdUJBQXVCO1lBQ3ZCLHVHQUF1RztZQUN2RyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssY0FBYyxJQUFJLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNqRSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FDcEMsa0JBQWtCLEVBQ2xCLE1BQU0sQ0FBQyxTQUFTLEVBQ2hCLE1BQU0sQ0FBQyxlQUFlLEVBQ3RCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FDeEIsQ0FBQzthQUNIO1lBQ0Qsc0RBQXNEO1lBQ3RELFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDN0MsT0FBTyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUMvQyxDQUFDLEVBQ0QsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLElBQVcsRUFBRSxDQUNuRCxDQUNGO2FBQ0EsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtZQUMvQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFL0IsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxjQUFjLEVBQUU7Z0JBQzFDLE1BQU0sY0FBYyxHQUFJLE1BQWdDLENBQUMsTUFBTSxDQUFDO2dCQUVoRSxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3JDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxNQUFNLDBCQUEwQixHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNqRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FDaEIsa0JBQWtCLENBQUMsWUFBWSxFQUE2QixDQUFDO1FBQy9ELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLDBCQUEwQixHQUFHLDBCQUEwQixDQUFDO1FBQzdELElBQUksQ0FBQyxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQztRQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztJQUN0QixDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQWM7UUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFXO1FBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFVLElBQUcsQ0FBQztJQUVwQixRQUFRLEtBQUksQ0FBQztJQUViLGFBQWEsQ0FBQyxNQUFXO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFlBQVksQ0FBQyxFQUFVO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELFlBQVksQ0FBQyxRQUFnQjtRQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxXQUFXLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxXQUFXLENBQUMsZUFBb0I7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWU7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWU7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDOzs2SEF0SlUsYUFBYSxxTkFjZCxhQUFhLGFBQ2IscUJBQXFCO2lJQWZwQixhQUFhOzJGQUFiLGFBQWE7a0JBRHpCLFVBQVU7OzBCQWVOLE1BQU07MkJBQUMsYUFBYTs7MEJBQ3BCLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBFcnJvckhhbmRsZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGlvbixcbiAgQWN0aW9uUmVkdWNlcixcbiAgQWN0aW9uc1N1YmplY3QsXG4gIElOSVRJQUxfU1RBVEUsXG4gIFJlZHVjZXJPYnNlcnZhYmxlLFxuICBTY2FubmVkQWN0aW9uc1N1YmplY3QsXG59IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBPYnNlcnZlcixcbiAgcXVldWVTY2hlZHVsZXIsXG4gIFJlcGxheVN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIG9ic2VydmVPbiwgc2Nhbiwgc2tpcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCAqIGFzIEFjdGlvbnMgZnJvbSAnLi9hY3Rpb25zJztcbmltcG9ydCB7IFNUT1JFX0RFVlRPT0xTX0NPTkZJRywgU3RvcmVEZXZ0b29sc0NvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IERldnRvb2xzRXh0ZW5zaW9uIH0gZnJvbSAnLi9leHRlbnNpb24nO1xuaW1wb3J0IHsgTGlmdGVkU3RhdGUsIGxpZnRJbml0aWFsU3RhdGUsIGxpZnRSZWR1Y2VyV2l0aCB9IGZyb20gJy4vcmVkdWNlcic7XG5pbXBvcnQge1xuICBsaWZ0QWN0aW9uLFxuICB1bmxpZnRTdGF0ZSxcbiAgc2hvdWxkRmlsdGVyQWN0aW9ucyxcbiAgZmlsdGVyTGlmdGVkU3RhdGUsXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGV2dG9vbHNEaXNwYXRjaGVyIH0gZnJvbSAnLi9kZXZ0b29scy1kaXNwYXRjaGVyJztcbmltcG9ydCB7IFBFUkZPUk1fQUNUSU9OIH0gZnJvbSAnLi9hY3Rpb25zJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFN0b3JlRGV2dG9vbHMgaW1wbGVtZW50cyBPYnNlcnZlcjxhbnk+IHtcbiAgcHJpdmF0ZSBzdGF0ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGV4dGVuc2lvblN0YXJ0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBkaXNwYXRjaGVyOiBBY3Rpb25zU3ViamVjdDtcbiAgcHVibGljIGxpZnRlZFN0YXRlOiBPYnNlcnZhYmxlPExpZnRlZFN0YXRlPjtcbiAgcHVibGljIHN0YXRlOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZGlzcGF0Y2hlcjogRGV2dG9vbHNEaXNwYXRjaGVyLFxuICAgIGFjdGlvbnMkOiBBY3Rpb25zU3ViamVjdCxcbiAgICByZWR1Y2VycyQ6IFJlZHVjZXJPYnNlcnZhYmxlLFxuICAgIGV4dGVuc2lvbjogRGV2dG9vbHNFeHRlbnNpb24sXG4gICAgc2Nhbm5lZEFjdGlvbnM6IFNjYW5uZWRBY3Rpb25zU3ViamVjdCxcbiAgICBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlcixcbiAgICBASW5qZWN0KElOSVRJQUxfU1RBVEUpIGluaXRpYWxTdGF0ZTogYW55LFxuICAgIEBJbmplY3QoU1RPUkVfREVWVE9PTFNfQ09ORklHKSBjb25maWc6IFN0b3JlRGV2dG9vbHNDb25maWdcbiAgKSB7XG4gICAgY29uc3QgbGlmdGVkSW5pdGlhbFN0YXRlID0gbGlmdEluaXRpYWxTdGF0ZShpbml0aWFsU3RhdGUsIGNvbmZpZy5tb25pdG9yKTtcbiAgICBjb25zdCBsaWZ0UmVkdWNlciA9IGxpZnRSZWR1Y2VyV2l0aChcbiAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgIGxpZnRlZEluaXRpYWxTdGF0ZSxcbiAgICAgIGVycm9ySGFuZGxlcixcbiAgICAgIGNvbmZpZy5tb25pdG9yLFxuICAgICAgY29uZmlnXG4gICAgKTtcblxuICAgIGNvbnN0IGxpZnRlZEFjdGlvbiQgPSBtZXJnZShcbiAgICAgIG1lcmdlKGFjdGlvbnMkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2tpcCgxKSksIGV4dGVuc2lvbi5hY3Rpb25zJCkucGlwZShcbiAgICAgICAgbWFwKGxpZnRBY3Rpb24pXG4gICAgICApLFxuICAgICAgZGlzcGF0Y2hlcixcbiAgICAgIGV4dGVuc2lvbi5saWZ0ZWRBY3Rpb25zJFxuICAgICkucGlwZShvYnNlcnZlT24ocXVldWVTY2hlZHVsZXIpKTtcblxuICAgIGNvbnN0IGxpZnRlZFJlZHVjZXIkID0gcmVkdWNlcnMkLnBpcGUobWFwKGxpZnRSZWR1Y2VyKSk7XG5cbiAgICBjb25zdCBsaWZ0ZWRTdGF0ZVN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxMaWZ0ZWRTdGF0ZT4oMSk7XG5cbiAgICBjb25zdCBsaWZ0ZWRTdGF0ZVN1YnNjcmlwdGlvbiA9IGxpZnRlZEFjdGlvbiRcbiAgICAgIC5waXBlKFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbShsaWZ0ZWRSZWR1Y2VyJCksXG4gICAgICAgIHNjYW48XG4gICAgICAgICAgW2FueSwgQWN0aW9uUmVkdWNlcjxMaWZ0ZWRTdGF0ZSwgQWN0aW9ucy5BbGw+XSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0ZTogTGlmdGVkU3RhdGU7XG4gICAgICAgICAgICBhY3Rpb246IGFueTtcbiAgICAgICAgICB9XG4gICAgICAgID4oXG4gICAgICAgICAgKHsgc3RhdGU6IGxpZnRlZFN0YXRlIH0sIFthY3Rpb24sIHJlZHVjZXJdKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVkdWNlZExpZnRlZFN0YXRlID0gcmVkdWNlcihsaWZ0ZWRTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICAgIC8vIE9uIGZ1bGwgc3RhdGUgdXBkYXRlXG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGFjdGlvbnMgZmlsdGVycywgd2UgbXVzdCBmaWx0ZXIgY29tcGxldGVseSBvdXIgbGlmdGVkIHN0YXRlIHRvIGJlIHN5bmMgd2l0aCB0aGUgZXh0ZW5zaW9uXG4gICAgICAgICAgICBpZiAoYWN0aW9uLnR5cGUgIT09IFBFUkZPUk1fQUNUSU9OICYmIHNob3VsZEZpbHRlckFjdGlvbnMoY29uZmlnKSkge1xuICAgICAgICAgICAgICByZWR1Y2VkTGlmdGVkU3RhdGUgPSBmaWx0ZXJMaWZ0ZWRTdGF0ZShcbiAgICAgICAgICAgICAgICByZWR1Y2VkTGlmdGVkU3RhdGUsXG4gICAgICAgICAgICAgICAgY29uZmlnLnByZWRpY2F0ZSxcbiAgICAgICAgICAgICAgICBjb25maWcuYWN0aW9uc1NhZmVsaXN0LFxuICAgICAgICAgICAgICAgIGNvbmZpZy5hY3Rpb25zQmxvY2tsaXN0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBFeHRlbnNpb24gc2hvdWxkIGJlIHNlbnQgdGhlIHNhbml0aXplZCBsaWZ0ZWQgc3RhdGVcbiAgICAgICAgICAgIGV4dGVuc2lvbi5ub3RpZnkoYWN0aW9uLCByZWR1Y2VkTGlmdGVkU3RhdGUpO1xuICAgICAgICAgICAgcmV0dXJuIHsgc3RhdGU6IHJlZHVjZWRMaWZ0ZWRTdGF0ZSwgYWN0aW9uIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IHN0YXRlOiBsaWZ0ZWRJbml0aWFsU3RhdGUsIGFjdGlvbjogbnVsbCBhcyBhbnkgfVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IHN0YXRlLCBhY3Rpb24gfSkgPT4ge1xuICAgICAgICBsaWZ0ZWRTdGF0ZVN1YmplY3QubmV4dChzdGF0ZSk7XG5cbiAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBBY3Rpb25zLlBFUkZPUk1fQUNUSU9OKSB7XG4gICAgICAgICAgY29uc3QgdW5saWZ0ZWRBY3Rpb24gPSAoYWN0aW9uIGFzIEFjdGlvbnMuUGVyZm9ybUFjdGlvbikuYWN0aW9uO1xuXG4gICAgICAgICAgc2Nhbm5lZEFjdGlvbnMubmV4dCh1bmxpZnRlZEFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY29uc3QgZXh0ZW5zaW9uU3RhcnRTdWJzY3JpcHRpb24gPSBleHRlbnNpb24uc3RhcnQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpZnRlZFN0YXRlJCA9XG4gICAgICBsaWZ0ZWRTdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCkgYXMgT2JzZXJ2YWJsZTxMaWZ0ZWRTdGF0ZT47XG4gICAgY29uc3Qgc3RhdGUkID0gbGlmdGVkU3RhdGUkLnBpcGUobWFwKHVubGlmdFN0YXRlKSk7XG5cbiAgICB0aGlzLmV4dGVuc2lvblN0YXJ0U3Vic2NyaXB0aW9uID0gZXh0ZW5zaW9uU3RhcnRTdWJzY3JpcHRpb247XG4gICAgdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbiA9IGxpZnRlZFN0YXRlU3Vic2NyaXB0aW9uO1xuICAgIHRoaXMuZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7XG4gICAgdGhpcy5saWZ0ZWRTdGF0ZSA9IGxpZnRlZFN0YXRlJDtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGUkO1xuICB9XG5cbiAgZGlzcGF0Y2goYWN0aW9uOiBBY3Rpb24pIHtcbiAgICB0aGlzLmRpc3BhdGNoZXIubmV4dChhY3Rpb24pO1xuICB9XG5cbiAgbmV4dChhY3Rpb246IGFueSkge1xuICAgIHRoaXMuZGlzcGF0Y2hlci5uZXh0KGFjdGlvbik7XG4gIH1cblxuICBlcnJvcihlcnJvcjogYW55KSB7fVxuXG4gIGNvbXBsZXRlKCkge31cblxuICBwZXJmb3JtQWN0aW9uKGFjdGlvbjogYW55KSB7XG4gICAgdGhpcy5kaXNwYXRjaChuZXcgQWN0aW9ucy5QZXJmb3JtQWN0aW9uKGFjdGlvbiwgK0RhdGUubm93KCkpKTtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5kaXNwYXRjaChuZXcgQWN0aW9ucy5SZWZyZXNoKCkpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5kaXNwYXRjaChuZXcgQWN0aW9ucy5SZXNldCgrRGF0ZS5ub3coKSkpO1xuICB9XG5cbiAgcm9sbGJhY2soKSB7XG4gICAgdGhpcy5kaXNwYXRjaChuZXcgQWN0aW9ucy5Sb2xsYmFjaygrRGF0ZS5ub3coKSkpO1xuICB9XG5cbiAgY29tbWl0KCkge1xuICAgIHRoaXMuZGlzcGF0Y2gobmV3IEFjdGlvbnMuQ29tbWl0KCtEYXRlLm5vdygpKSk7XG4gIH1cblxuICBzd2VlcCgpIHtcbiAgICB0aGlzLmRpc3BhdGNoKG5ldyBBY3Rpb25zLlN3ZWVwKCkpO1xuICB9XG5cbiAgdG9nZ2xlQWN0aW9uKGlkOiBudW1iZXIpIHtcbiAgICB0aGlzLmRpc3BhdGNoKG5ldyBBY3Rpb25zLlRvZ2dsZUFjdGlvbihpZCkpO1xuICB9XG5cbiAganVtcFRvQWN0aW9uKGFjdGlvbklkOiBudW1iZXIpIHtcbiAgICB0aGlzLmRpc3BhdGNoKG5ldyBBY3Rpb25zLkp1bXBUb0FjdGlvbihhY3Rpb25JZCkpO1xuICB9XG5cbiAganVtcFRvU3RhdGUoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuZGlzcGF0Y2gobmV3IEFjdGlvbnMuSnVtcFRvU3RhdGUoaW5kZXgpKTtcbiAgfVxuXG4gIGltcG9ydFN0YXRlKG5leHRMaWZ0ZWRTdGF0ZTogYW55KSB7XG4gICAgdGhpcy5kaXNwYXRjaChuZXcgQWN0aW9ucy5JbXBvcnRTdGF0ZShuZXh0TGlmdGVkU3RhdGUpKTtcbiAgfVxuXG4gIGxvY2tDaGFuZ2VzKHN0YXR1czogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzcGF0Y2gobmV3IEFjdGlvbnMuTG9ja0NoYW5nZXMoc3RhdHVzKSk7XG4gIH1cblxuICBwYXVzZVJlY29yZGluZyhzdGF0dXM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc3BhdGNoKG5ldyBBY3Rpb25zLlBhdXNlUmVjb3JkaW5nKHN0YXR1cykpO1xuICB9XG59XG4iXX0=