@angular/core 17.0.0-next.2 → 17.0.0-next.4

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 (62) hide show
  1. package/esm2022/src/core_reactivity_export_internal.mjs +3 -3
  2. package/esm2022/src/core_render3_private_export.mjs +2 -2
  3. package/esm2022/src/di/initializer_token.mjs +1 -1
  4. package/esm2022/src/di/internal_tokens.mjs +1 -1
  5. package/esm2022/src/di/r3_injector.mjs +3 -4
  6. package/esm2022/src/hydration/annotate.mjs +9 -6
  7. package/esm2022/src/hydration/cleanup.mjs +2 -2
  8. package/esm2022/src/linker/template_ref.mjs +3 -3
  9. package/esm2022/src/linker/view_container_ref.mjs +80 -25
  10. package/esm2022/src/metadata/directives.mjs +1 -1
  11. package/esm2022/src/metadata/resource_loading.mjs +27 -14
  12. package/esm2022/src/render3/after_render_hooks.mjs +83 -49
  13. package/esm2022/src/render3/component.mjs +4 -3
  14. package/esm2022/src/render3/component_ref.mjs +3 -4
  15. package/esm2022/src/render3/di.mjs +1 -1
  16. package/esm2022/src/render3/index.mjs +2 -2
  17. package/esm2022/src/render3/instructions/all.mjs +2 -1
  18. package/esm2022/src/render3/instructions/change_detection.mjs +7 -8
  19. package/esm2022/src/render3/instructions/component_instance.mjs +23 -0
  20. package/esm2022/src/render3/instructions/control_flow.mjs +20 -4
  21. package/esm2022/src/render3/instructions/defer.mjs +100 -39
  22. package/esm2022/src/render3/instructions/shared.mjs +20 -14
  23. package/esm2022/src/render3/interfaces/defer.mjs +1 -1
  24. package/esm2022/src/render3/interfaces/definition.mjs +1 -1
  25. package/esm2022/src/render3/interfaces/injector.mjs +1 -1
  26. package/esm2022/src/render3/interfaces/node.mjs +16 -1
  27. package/esm2022/src/render3/interfaces/styling.mjs +4 -7
  28. package/esm2022/src/render3/interfaces/view.mjs +1 -1
  29. package/esm2022/src/render3/jit/directive.mjs +6 -2
  30. package/esm2022/src/render3/jit/environment.mjs +2 -1
  31. package/esm2022/src/render3/node_manipulation.mjs +4 -3
  32. package/esm2022/src/render3/pipe.mjs +2 -1
  33. package/esm2022/src/render3/reactive_lview_consumer.mjs +25 -45
  34. package/esm2022/src/render3/reactivity/effect.mjs +147 -44
  35. package/esm2022/src/render3/util/injector_utils.mjs +1 -1
  36. package/esm2022/src/render3/view_manipulation.mjs +13 -2
  37. package/esm2022/src/signals/index.mjs +4 -4
  38. package/esm2022/src/signals/src/api.mjs +2 -11
  39. package/esm2022/src/signals/src/computed.mjs +43 -93
  40. package/esm2022/src/signals/src/graph.mjs +241 -162
  41. package/esm2022/src/signals/src/signal.mjs +59 -79
  42. package/esm2022/src/signals/src/watch.mjs +38 -52
  43. package/esm2022/src/signals/src/weak_ref.mjs +2 -29
  44. package/esm2022/src/util/security/trusted_type_defs.mjs +1 -1
  45. package/esm2022/src/util/security/trusted_types.mjs +1 -1
  46. package/esm2022/src/version.mjs +1 -1
  47. package/esm2022/src/zone/ng_zone.mjs +16 -1
  48. package/esm2022/testing/src/component_fixture.mjs +4 -2
  49. package/esm2022/testing/src/logger.mjs +3 -3
  50. package/esm2022/testing/src/test_bed.mjs +14 -3
  51. package/esm2022/testing/src/test_bed_compiler.mjs +3 -3
  52. package/fesm2022/core.mjs +6654 -6366
  53. package/fesm2022/core.mjs.map +1 -1
  54. package/fesm2022/rxjs-interop.mjs +1 -1
  55. package/fesm2022/testing.mjs +19 -6
  56. package/fesm2022/testing.mjs.map +1 -1
  57. package/index.d.ts +201 -142
  58. package/package.json +1 -1
  59. package/rxjs-interop/index.d.ts +1 -1
  60. package/schematics/ng-generate/standalone-migration/bundle.js +264 -201
  61. package/schematics/ng-generate/standalone-migration/bundle.js.map +4 -4
  62. package/testing/index.d.ts +10 -2
@@ -5,18 +5,29 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
- import { createSignalFromFunction, defaultEquals } from './api';
9
- import { ReactiveNode, setActiveConsumer } from './graph';
8
+ import { defaultEquals, SIGNAL } from './api';
9
+ import { consumerAfterComputation, consumerBeforeComputation, producerAccessed, producerUpdateValueVersion, REACTIVE_NODE } from './graph';
10
10
  /**
11
11
  * Create a computed `Signal` which derives a reactive value from an expression.
12
12
  *
13
13
  * @developerPreview
14
14
  */
15
15
  export function computed(computation, options) {
16
- const node = new ComputedImpl(computation, options?.equal ?? defaultEquals);
17
- // Casting here is required for g3, as TS inference behavior is slightly different between our
18
- // version/options and g3's.
19
- return createSignalFromFunction(node, node.signal.bind(node));
16
+ const node = Object.create(COMPUTED_NODE);
17
+ node.computation = computation;
18
+ options?.equal && (node.equal = options.equal);
19
+ const computed = () => {
20
+ // Check if the value needs updating before returning it.
21
+ producerUpdateValueVersion(node);
22
+ // Record that someone looked at this signal.
23
+ producerAccessed(node);
24
+ if (node.value === ERRORED) {
25
+ throw node.error;
26
+ }
27
+ return node.value;
28
+ };
29
+ computed[SIGNAL] = node;
30
+ return computed;
20
31
  }
21
32
  /**
22
33
  * A dedicated symbol used before a computed value has been calculated for the first time.
@@ -35,106 +46,45 @@ const COMPUTING = Symbol('COMPUTING');
35
46
  * Explicitly typed as `any` so we can use it as signal's value.
36
47
  */
37
48
  const ERRORED = Symbol('ERRORED');
38
- /**
39
- * A computation, which derives a value from a declarative reactive expression.
40
- *
41
- * `Computed`s are both producers and consumers of reactivity.
42
- */
43
- class ComputedImpl extends ReactiveNode {
44
- constructor(computation, equal) {
45
- super();
46
- this.computation = computation;
47
- this.equal = equal;
48
- /**
49
- * Current value of the computation.
50
- *
51
- * This can also be one of the special values `UNSET`, `COMPUTING`, or `ERRORED`.
52
- */
53
- this.value = UNSET;
54
- /**
55
- * If `value` is `ERRORED`, the error caught from the last computation attempt which will
56
- * be re-thrown.
57
- */
58
- this.error = null;
59
- /**
60
- * Flag indicating that the computation is currently stale, meaning that one of the
61
- * dependencies has notified of a potential change.
62
- *
63
- * It's possible that no dependency has _actually_ changed, in which case the `stale`
64
- * state can be resolved without recomputing the value.
65
- */
66
- this.stale = true;
67
- this.consumerAllowSignalWrites = false;
68
- }
69
- onConsumerDependencyMayHaveChanged() {
70
- if (this.stale) {
71
- // We've already notified consumers that this value has potentially changed.
72
- return;
73
- }
74
- // Record that the currently cached value may be stale.
75
- this.stale = true;
76
- // Notify any consumers about the potential change.
77
- this.producerMayHaveChanged();
78
- }
79
- onProducerUpdateValueVersion() {
80
- if (!this.stale) {
81
- // The current value and its version are already up to date.
82
- return;
83
- }
84
- // The current value is stale. Check whether we need to produce a new one.
85
- if (this.value !== UNSET && this.value !== COMPUTING &&
86
- !this.consumerPollProducersForChange()) {
87
- // Even though we were previously notified of a potential dependency update, all of
88
- // our dependencies report that they have not actually changed in value, so we can
89
- // resolve the stale state without needing to recompute the current value.
90
- this.stale = false;
91
- return;
92
- }
93
- // The current value is stale, and needs to be recomputed. It still may not change -
94
- // that depends on whether the newly computed value is equal to the old.
95
- this.recomputeValue();
96
- }
97
- recomputeValue() {
98
- if (this.value === COMPUTING) {
49
+ const COMPUTED_NODE = {
50
+ ...REACTIVE_NODE,
51
+ value: UNSET,
52
+ dirty: true,
53
+ error: null,
54
+ equal: defaultEquals,
55
+ producerMustRecompute(node) {
56
+ // Force a recomputation if there's no current value, or if the current value is in the process
57
+ // of being calculated (which should throw an error).
58
+ return node.value === UNSET || node.value === COMPUTING;
59
+ },
60
+ producerRecomputeValue(node) {
61
+ if (node.value === COMPUTING) {
99
62
  // Our computation somehow led to a cyclic read of itself.
100
63
  throw new Error('Detected cycle in computations.');
101
64
  }
102
- const oldValue = this.value;
103
- this.value = COMPUTING;
104
- // As we're re-running the computation, update our dependent tracking version number.
105
- this.trackingVersion++;
106
- const prevConsumer = setActiveConsumer(this);
65
+ const oldValue = node.value;
66
+ node.value = COMPUTING;
67
+ const prevConsumer = consumerBeforeComputation(node);
107
68
  let newValue;
108
69
  try {
109
- newValue = this.computation();
70
+ newValue = node.computation();
110
71
  }
111
72
  catch (err) {
112
73
  newValue = ERRORED;
113
- this.error = err;
74
+ node.error = err;
114
75
  }
115
76
  finally {
116
- setActiveConsumer(prevConsumer);
77
+ consumerAfterComputation(node, prevConsumer);
117
78
  }
118
- this.stale = false;
119
79
  if (oldValue !== UNSET && oldValue !== ERRORED && newValue !== ERRORED &&
120
- this.equal(oldValue, newValue)) {
80
+ node.equal(oldValue, newValue)) {
121
81
  // No change to `valueVersion` - old and new values are
122
82
  // semantically equivalent.
123
- this.value = oldValue;
83
+ node.value = oldValue;
124
84
  return;
125
85
  }
126
- this.value = newValue;
127
- this.valueVersion++;
128
- }
129
- signal() {
130
- // Check if the value needs updating before returning it.
131
- this.onProducerUpdateValueVersion();
132
- // Record that someone looked at this signal.
133
- this.producerAccessed();
134
- if (this.value === ERRORED) {
135
- throw this.error;
136
- }
137
- return this.value;
138
- }
139
- }
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9zaWduYWxzL3NyYy9jb21wdXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsd0JBQXdCLEVBQUUsYUFBYSxFQUEwQixNQUFNLE9BQU8sQ0FBQztBQUN2RixPQUFPLEVBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sU0FBUyxDQUFDO0FBZXhEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFJLFdBQW9CLEVBQUUsT0FBa0M7SUFDbEYsTUFBTSxJQUFJLEdBQUcsSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksYUFBYSxDQUFDLENBQUM7SUFFNUUsOEZBQThGO0lBQzlGLDRCQUE0QjtJQUM1QixPQUFPLHdCQUF3QixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBeUIsQ0FBQztBQUN4RixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxLQUFLLEdBQVEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRW5DOzs7O0dBSUc7QUFDSCxNQUFNLFNBQVMsR0FBUSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFM0M7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxHQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUV2Qzs7OztHQUlHO0FBQ0gsTUFBTSxZQUFnQixTQUFRLFlBQVk7SUFDeEMsWUFBb0IsV0FBb0IsRUFBVSxLQUE0QztRQUM1RixLQUFLLEVBQUUsQ0FBQztRQURVLGdCQUFXLEdBQVgsV0FBVyxDQUFTO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBdUM7UUFHOUY7Ozs7V0FJRztRQUNLLFVBQUssR0FBTSxLQUFLLENBQUM7UUFFekI7OztXQUdHO1FBQ0ssVUFBSyxHQUFZLElBQUksQ0FBQztRQUU5Qjs7Ozs7O1dBTUc7UUFDSyxVQUFLLEdBQUcsSUFBSSxDQUFDO1FBRU8sOEJBQXlCLEdBQUcsS0FBSyxDQUFDO0lBdkI5RCxDQUFDO0lBeUJrQixrQ0FBa0M7UUFDbkQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsNEVBQTRFO1lBQzVFLE9BQU87U0FDUjtRQUVELHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUVsQixtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVrQiw0QkFBNEI7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZiw0REFBNEQ7WUFDNUQsT0FBTztTQUNSO1FBRUQsMEVBQTBFO1FBRTFFLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTO1lBQ2hELENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLEVBQUU7WUFDMUMsbUZBQW1GO1lBQ25GLGtGQUFrRjtZQUNsRiwwRUFBMEU7WUFDMUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbkIsT0FBTztTQUNSO1FBRUQsb0ZBQW9GO1FBQ3BGLHdFQUF3RTtRQUN4RSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUM1QiwwREFBMEQ7WUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUV2QixxRkFBcUY7UUFDckYsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLElBQUksUUFBVyxDQUFDO1FBQ2hCLElBQUk7WUFDRixRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQy9CO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1NBQ2xCO2dCQUFTO1lBQ1IsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDakM7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLFFBQVEsS0FBSyxLQUFLLElBQUksUUFBUSxLQUFLLE9BQU8sSUFBSSxRQUFRLEtBQUssT0FBTztZQUNsRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRTtZQUNsQyx1REFBdUQ7WUFDdkQsMkJBQTJCO1lBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO1lBQ3RCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTTtRQUNKLHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUVwQyw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sRUFBRTtZQUMxQixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDbEI7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7Y3JlYXRlU2lnbmFsRnJvbUZ1bmN0aW9uLCBkZWZhdWx0RXF1YWxzLCBTaWduYWwsIFZhbHVlRXF1YWxpdHlGbn0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHtSZWFjdGl2ZU5vZGUsIHNldEFjdGl2ZUNvbnN1bWVyfSBmcm9tICcuL2dyYXBoJztcblxuLyoqXG4gKiBPcHRpb25zIHBhc3NlZCB0byB0aGUgYGNvbXB1dGVkYCBjcmVhdGlvbiBmdW5jdGlvbi5cbiAqXG4gKiBAZGV2ZWxvcGVyUHJldmlld1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUNvbXB1dGVkT3B0aW9uczxUPiB7XG4gIC8qKlxuICAgKiBBIGNvbXBhcmlzb24gZnVuY3Rpb24gd2hpY2ggZGVmaW5lcyBlcXVhbGl0eSBmb3IgY29tcHV0ZWQgdmFsdWVzLlxuICAgKi9cbiAgZXF1YWw/OiBWYWx1ZUVxdWFsaXR5Rm48VD47XG59XG5cblxuLyoqXG4gKiBDcmVhdGUgYSBjb21wdXRlZCBgU2lnbmFsYCB3aGljaCBkZXJpdmVzIGEgcmVhY3RpdmUgdmFsdWUgZnJvbSBhbiBleHByZXNzaW9uLlxuICpcbiAqIEBkZXZlbG9wZXJQcmV2aWV3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZDxUPihjb21wdXRhdGlvbjogKCkgPT4gVCwgb3B0aW9ucz86IENyZWF0ZUNvbXB1dGVkT3B0aW9uczxUPik6IFNpZ25hbDxUPiB7XG4gIGNvbnN0IG5vZGUgPSBuZXcgQ29tcHV0ZWRJbXBsKGNvbXB1dGF0aW9uLCBvcHRpb25zPy5lcXVhbCA/PyBkZWZhdWx0RXF1YWxzKTtcblxuICAvLyBDYXN0aW5nIGhlcmUgaXMgcmVxdWlyZWQgZm9yIGczLCBhcyBUUyBpbmZlcmVuY2UgYmVoYXZpb3IgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGJldHdlZW4gb3VyXG4gIC8vIHZlcnNpb24vb3B0aW9ucyBhbmQgZzMncy5cbiAgcmV0dXJuIGNyZWF0ZVNpZ25hbEZyb21GdW5jdGlvbihub2RlLCBub2RlLnNpZ25hbC5iaW5kKG5vZGUpKSBhcyB1bmtub3duIGFzIFNpZ25hbDxUPjtcbn1cblxuLyoqXG4gKiBBIGRlZGljYXRlZCBzeW1ib2wgdXNlZCBiZWZvcmUgYSBjb21wdXRlZCB2YWx1ZSBoYXMgYmVlbiBjYWxjdWxhdGVkIGZvciB0aGUgZmlyc3QgdGltZS5cbiAqIEV4cGxpY2l0bHkgdHlwZWQgYXMgYGFueWAgc28gd2UgY2FuIHVzZSBpdCBhcyBzaWduYWwncyB2YWx1ZS5cbiAqL1xuY29uc3QgVU5TRVQ6IGFueSA9IFN5bWJvbCgnVU5TRVQnKTtcblxuLyoqXG4gKiBBIGRlZGljYXRlZCBzeW1ib2wgdXNlZCBpbiBwbGFjZSBvZiBhIGNvbXB1dGVkIHNpZ25hbCB2YWx1ZSB0byBpbmRpY2F0ZSB0aGF0IGEgZ2l2ZW4gY29tcHV0YXRpb25cbiAqIGlzIGluIHByb2dyZXNzLiBVc2VkIHRvIGRldGVjdCBjeWNsZXMgaW4gY29tcHV0YXRpb24gY2hhaW5zLlxuICogRXhwbGljaXRseSB0eXBlZCBhcyBgYW55YCBzbyB3ZSBjYW4gdXNlIGl0IGFzIHNpZ25hbCdzIHZhbHVlLlxuICovXG5jb25zdCBDT01QVVRJTkc6IGFueSA9IFN5bWJvbCgnQ09NUFVUSU5HJyk7XG5cbi8qKlxuICogQSBkZWRpY2F0ZWQgc3ltYm9sIHVzZWQgaW4gcGxhY2Ugb2YgYSBjb21wdXRlZCBzaWduYWwgdmFsdWUgdG8gaW5kaWNhdGUgdGhhdCBhIGdpdmVuIGNvbXB1dGF0aW9uXG4gKiBmYWlsZWQuIFRoZSB0aHJvd24gZXJyb3IgaXMgY2FjaGVkIHVudGlsIHRoZSBjb21wdXRhdGlvbiBnZXRzIGRpcnR5IGFnYWluLlxuICogRXhwbGljaXRseSB0eXBlZCBhcyBgYW55YCBzbyB3ZSBjYW4gdXNlIGl0IGFzIHNpZ25hbCdzIHZhbHVlLlxuICovXG5jb25zdCBFUlJPUkVEOiBhbnkgPSBTeW1ib2woJ0VSUk9SRUQnKTtcblxuLyoqXG4gKiBBIGNvbXB1dGF0aW9uLCB3aGljaCBkZXJpdmVzIGEgdmFsdWUgZnJvbSBhIGRlY2xhcmF0aXZlIHJlYWN0aXZlIGV4cHJlc3Npb24uXG4gKlxuICogYENvbXB1dGVkYHMgYXJlIGJvdGggcHJvZHVjZXJzIGFuZCBjb25zdW1lcnMgb2YgcmVhY3Rpdml0eS5cbiAqL1xuY2xhc3MgQ29tcHV0ZWRJbXBsPFQ+IGV4dGVuZHMgUmVhY3RpdmVOb2RlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb21wdXRhdGlvbjogKCkgPT4gVCwgcHJpdmF0ZSBlcXVhbDogKG9sZFZhbHVlOiBULCBuZXdWYWx1ZTogVCkgPT4gYm9vbGVhbikge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgLyoqXG4gICAqIEN1cnJlbnQgdmFsdWUgb2YgdGhlIGNvbXB1dGF0aW9uLlxuICAgKlxuICAgKiBUaGlzIGNhbiBhbHNvIGJlIG9uZSBvZiB0aGUgc3BlY2lhbCB2YWx1ZXMgYFVOU0VUYCwgYENPTVBVVElOR2AsIG9yIGBFUlJPUkVEYC5cbiAgICovXG4gIHByaXZhdGUgdmFsdWU6IFQgPSBVTlNFVDtcblxuICAvKipcbiAgICogSWYgYHZhbHVlYCBpcyBgRVJST1JFRGAsIHRoZSBlcnJvciBjYXVnaHQgZnJvbSB0aGUgbGFzdCBjb21wdXRhdGlvbiBhdHRlbXB0IHdoaWNoIHdpbGxcbiAgICogYmUgcmUtdGhyb3duLlxuICAgKi9cbiAgcHJpdmF0ZSBlcnJvcjogdW5rbm93biA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEZsYWcgaW5kaWNhdGluZyB0aGF0IHRoZSBjb21wdXRhdGlvbiBpcyBjdXJyZW50bHkgc3RhbGUsIG1lYW5pbmcgdGhhdCBvbmUgb2YgdGhlXG4gICAqIGRlcGVuZGVuY2llcyBoYXMgbm90aWZpZWQgb2YgYSBwb3RlbnRpYWwgY2hhbmdlLlxuICAgKlxuICAgKiBJdCdzIHBvc3NpYmxlIHRoYXQgbm8gZGVwZW5kZW5jeSBoYXMgX2FjdHVhbGx5XyBjaGFuZ2VkLCBpbiB3aGljaCBjYXNlIHRoZSBgc3RhbGVgXG4gICAqIHN0YXRlIGNhbiBiZSByZXNvbHZlZCB3aXRob3V0IHJlY29tcHV0aW5nIHRoZSB2YWx1ZS5cbiAgICovXG4gIHByaXZhdGUgc3RhbGUgPSB0cnVlO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZWFkb25seSBjb25zdW1lckFsbG93U2lnbmFsV3JpdGVzID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG9uQ29uc3VtZXJEZXBlbmRlbmN5TWF5SGF2ZUNoYW5nZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhbGUpIHtcbiAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgbm90aWZpZWQgY29uc3VtZXJzIHRoYXQgdGhpcyB2YWx1ZSBoYXMgcG90ZW50aWFsbHkgY2hhbmdlZC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZWNvcmQgdGhhdCB0aGUgY3VycmVudGx5IGNhY2hlZCB2YWx1ZSBtYXkgYmUgc3RhbGUuXG4gICAgdGhpcy5zdGFsZSA9IHRydWU7XG5cbiAgICAvLyBOb3RpZnkgYW55IGNvbnN1bWVycyBhYm91dCB0aGUgcG90ZW50aWFsIGNoYW5nZS5cbiAgICB0aGlzLnByb2R1Y2VyTWF5SGF2ZUNoYW5nZWQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBvblByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdGFsZSkge1xuICAgICAgLy8gVGhlIGN1cnJlbnQgdmFsdWUgYW5kIGl0cyB2ZXJzaW9uIGFyZSBhbHJlYWR5IHVwIHRvIGRhdGUuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGhlIGN1cnJlbnQgdmFsdWUgaXMgc3RhbGUuIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBwcm9kdWNlIGEgbmV3IG9uZS5cblxuICAgIGlmICh0aGlzLnZhbHVlICE9PSBVTlNFVCAmJiB0aGlzLnZhbHVlICE9PSBDT01QVVRJTkcgJiZcbiAgICAgICAgIXRoaXMuY29uc3VtZXJQb2xsUHJvZHVjZXJzRm9yQ2hhbmdlKCkpIHtcbiAgICAgIC8vIEV2ZW4gdGhvdWdoIHdlIHdlcmUgcHJldmlvdXNseSBub3RpZmllZCBvZiBhIHBvdGVudGlhbCBkZXBlbmRlbmN5IHVwZGF0ZSwgYWxsIG9mXG4gICAgICAvLyBvdXIgZGVwZW5kZW5jaWVzIHJlcG9ydCB0aGF0IHRoZXkgaGF2ZSBub3QgYWN0dWFsbHkgY2hhbmdlZCBpbiB2YWx1ZSwgc28gd2UgY2FuXG4gICAgICAvLyByZXNvbHZlIHRoZSBzdGFsZSBzdGF0ZSB3aXRob3V0IG5lZWRpbmcgdG8gcmVjb21wdXRlIHRoZSBjdXJyZW50IHZhbHVlLlxuICAgICAgdGhpcy5zdGFsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoZSBjdXJyZW50IHZhbHVlIGlzIHN0YWxlLCBhbmQgbmVlZHMgdG8gYmUgcmVjb21wdXRlZC4gSXQgc3RpbGwgbWF5IG5vdCBjaGFuZ2UgLVxuICAgIC8vIHRoYXQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBuZXdseSBjb21wdXRlZCB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgb2xkLlxuICAgIHRoaXMucmVjb21wdXRlVmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb21wdXRlVmFsdWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IENPTVBVVElORykge1xuICAgICAgLy8gT3VyIGNvbXB1dGF0aW9uIHNvbWVob3cgbGVkIHRvIGEgY3ljbGljIHJlYWQgb2YgaXRzZWxmLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZXRlY3RlZCBjeWNsZSBpbiBjb21wdXRhdGlvbnMuJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSBDT01QVVRJTkc7XG5cbiAgICAvLyBBcyB3ZSdyZSByZS1ydW5uaW5nIHRoZSBjb21wdXRhdGlvbiwgdXBkYXRlIG91ciBkZXBlbmRlbnQgdHJhY2tpbmcgdmVyc2lvbiBudW1iZXIuXG4gICAgdGhpcy50cmFja2luZ1ZlcnNpb24rKztcbiAgICBjb25zdCBwcmV2Q29uc3VtZXIgPSBzZXRBY3RpdmVDb25zdW1lcih0aGlzKTtcbiAgICBsZXQgbmV3VmFsdWU6IFQ7XG4gICAgdHJ5IHtcbiAgICAgIG5ld1ZhbHVlID0gdGhpcy5jb21wdXRhdGlvbigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbmV3VmFsdWUgPSBFUlJPUkVEO1xuICAgICAgdGhpcy5lcnJvciA9IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0QWN0aXZlQ29uc3VtZXIocHJldkNvbnN1bWVyKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YWxlID0gZmFsc2U7XG5cbiAgICBpZiAob2xkVmFsdWUgIT09IFVOU0VUICYmIG9sZFZhbHVlICE9PSBFUlJPUkVEICYmIG5ld1ZhbHVlICE9PSBFUlJPUkVEICYmXG4gICAgICAgIHRoaXMuZXF1YWwob2xkVmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgICAgLy8gTm8gY2hhbmdlIHRvIGB2YWx1ZVZlcnNpb25gIC0gb2xkIGFuZCBuZXcgdmFsdWVzIGFyZVxuICAgICAgLy8gc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQuXG4gICAgICB0aGlzLnZhbHVlID0gb2xkVmFsdWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMudmFsdWVWZXJzaW9uKys7XG4gIH1cblxuICBzaWduYWwoKTogVCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHZhbHVlIG5lZWRzIHVwZGF0aW5nIGJlZm9yZSByZXR1cm5pbmcgaXQuXG4gICAgdGhpcy5vblByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uKCk7XG5cbiAgICAvLyBSZWNvcmQgdGhhdCBzb21lb25lIGxvb2tlZCBhdCB0aGlzIHNpZ25hbC5cbiAgICB0aGlzLnByb2R1Y2VyQWNjZXNzZWQoKTtcblxuICAgIGlmICh0aGlzLnZhbHVlID09PSBFUlJPUkVEKSB7XG4gICAgICB0aHJvdyB0aGlzLmVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG59XG4iXX0=
86
+ node.value = newValue;
87
+ node.version++;
88
+ },
89
+ };
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9zaWduYWxzL3NyYy9jb21wdXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsYUFBYSxFQUFFLE1BQU0sRUFBMEIsTUFBTSxPQUFPLENBQUM7QUFDckUsT0FBTyxFQUFDLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLDBCQUEwQixFQUFFLGFBQWEsRUFBZSxNQUFNLFNBQVMsQ0FBQztBQWN2Sjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBSSxXQUFvQixFQUFFLE9BQWtDO0lBQ2xGLE1BQU0sSUFBSSxHQUFvQixNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQy9CLE9BQU8sRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUvQyxNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUU7UUFDcEIseURBQXlEO1FBQ3pELDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpDLDZDQUE2QztRQUM3QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQztTQUNsQjtRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDLENBQUM7SUFDRCxRQUFnQixDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNqQyxPQUFPLFFBQTRCLENBQUM7QUFDdEMsQ0FBQztBQUdEOzs7R0FHRztBQUNILE1BQU0sS0FBSyxHQUFRLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVuQzs7OztHQUlHO0FBQ0gsTUFBTSxTQUFTLEdBQVEsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRTNDOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sR0FBUSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUE0QnZDLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLEdBQUcsYUFBYTtJQUNoQixLQUFLLEVBQUUsS0FBSztJQUNaLEtBQUssRUFBRSxJQUFJO0lBQ1gsS0FBSyxFQUFFLElBQUk7SUFDWCxLQUFLLEVBQUUsYUFBYTtJQUVwQixxQkFBcUIsQ0FBQyxJQUEyQjtRQUMvQywrRkFBK0Y7UUFDL0YscURBQXFEO1FBQ3JELE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUM7SUFDMUQsQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQTJCO1FBQ2hELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDNUIsMERBQTBEO1lBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztTQUNwRDtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7UUFFdkIsTUFBTSxZQUFZLEdBQUcseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsSUFBSSxRQUFpQixDQUFDO1FBQ3RCLElBQUk7WUFDRixRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQy9CO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1NBQ2xCO2dCQUFTO1lBQ1Isd0JBQXdCLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQzlDO1FBRUQsSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLFFBQVEsS0FBSyxPQUFPLElBQUksUUFBUSxLQUFLLE9BQU87WUFDbEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDbEMsdURBQXVEO1lBQ3ZELDJCQUEyQjtZQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztZQUN0QixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtkZWZhdWx0RXF1YWxzLCBTSUdOQUwsIFNpZ25hbCwgVmFsdWVFcXVhbGl0eUZufSBmcm9tICcuL2FwaSc7XG5pbXBvcnQge2NvbnN1bWVyQWZ0ZXJDb21wdXRhdGlvbiwgY29uc3VtZXJCZWZvcmVDb21wdXRhdGlvbiwgcHJvZHVjZXJBY2Nlc3NlZCwgcHJvZHVjZXJVcGRhdGVWYWx1ZVZlcnNpb24sIFJFQUNUSVZFX05PREUsIFJlYWN0aXZlTm9kZX0gZnJvbSAnLi9ncmFwaCc7XG5cbi8qKlxuICogT3B0aW9ucyBwYXNzZWQgdG8gdGhlIGBjb21wdXRlZGAgY3JlYXRpb24gZnVuY3Rpb24uXG4gKlxuICogQGRldmVsb3BlclByZXZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVDb21wdXRlZE9wdGlvbnM8VD4ge1xuICAvKipcbiAgICogQSBjb21wYXJpc29uIGZ1bmN0aW9uIHdoaWNoIGRlZmluZXMgZXF1YWxpdHkgZm9yIGNvbXB1dGVkIHZhbHVlcy5cbiAgICovXG4gIGVxdWFsPzogVmFsdWVFcXVhbGl0eUZuPFQ+O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGNvbXB1dGVkIGBTaWduYWxgIHdoaWNoIGRlcml2ZXMgYSByZWFjdGl2ZSB2YWx1ZSBmcm9tIGFuIGV4cHJlc3Npb24uXG4gKlxuICogQGRldmVsb3BlclByZXZpZXdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkPFQ+KGNvbXB1dGF0aW9uOiAoKSA9PiBULCBvcHRpb25zPzogQ3JlYXRlQ29tcHV0ZWRPcHRpb25zPFQ+KTogU2lnbmFsPFQ+IHtcbiAgY29uc3Qgbm9kZTogQ29tcHV0ZWROb2RlPFQ+ID0gT2JqZWN0LmNyZWF0ZShDT01QVVRFRF9OT0RFKTtcbiAgbm9kZS5jb21wdXRhdGlvbiA9IGNvbXB1dGF0aW9uO1xuICBvcHRpb25zPy5lcXVhbCAmJiAobm9kZS5lcXVhbCA9IG9wdGlvbnMuZXF1YWwpO1xuXG4gIGNvbnN0IGNvbXB1dGVkID0gKCkgPT4ge1xuICAgIC8vIENoZWNrIGlmIHRoZSB2YWx1ZSBuZWVkcyB1cGRhdGluZyBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuICAgIHByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uKG5vZGUpO1xuXG4gICAgLy8gUmVjb3JkIHRoYXQgc29tZW9uZSBsb29rZWQgYXQgdGhpcyBzaWduYWwuXG4gICAgcHJvZHVjZXJBY2Nlc3NlZChub2RlKTtcblxuICAgIGlmIChub2RlLnZhbHVlID09PSBFUlJPUkVEKSB7XG4gICAgICB0aHJvdyBub2RlLmVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlLnZhbHVlO1xuICB9O1xuICAoY29tcHV0ZWQgYXMgYW55KVtTSUdOQUxdID0gbm9kZTtcbiAgcmV0dXJuIGNvbXB1dGVkIGFzIGFueSBhcyBTaWduYWw8VD47XG59XG5cblxuLyoqXG4gKiBBIGRlZGljYXRlZCBzeW1ib2wgdXNlZCBiZWZvcmUgYSBjb21wdXRlZCB2YWx1ZSBoYXMgYmVlbiBjYWxjdWxhdGVkIGZvciB0aGUgZmlyc3QgdGltZS5cbiAqIEV4cGxpY2l0bHkgdHlwZWQgYXMgYGFueWAgc28gd2UgY2FuIHVzZSBpdCBhcyBzaWduYWwncyB2YWx1ZS5cbiAqL1xuY29uc3QgVU5TRVQ6IGFueSA9IFN5bWJvbCgnVU5TRVQnKTtcblxuLyoqXG4gKiBBIGRlZGljYXRlZCBzeW1ib2wgdXNlZCBpbiBwbGFjZSBvZiBhIGNvbXB1dGVkIHNpZ25hbCB2YWx1ZSB0byBpbmRpY2F0ZSB0aGF0IGEgZ2l2ZW4gY29tcHV0YXRpb25cbiAqIGlzIGluIHByb2dyZXNzLiBVc2VkIHRvIGRldGVjdCBjeWNsZXMgaW4gY29tcHV0YXRpb24gY2hhaW5zLlxuICogRXhwbGljaXRseSB0eXBlZCBhcyBgYW55YCBzbyB3ZSBjYW4gdXNlIGl0IGFzIHNpZ25hbCdzIHZhbHVlLlxuICovXG5jb25zdCBDT01QVVRJTkc6IGFueSA9IFN5bWJvbCgnQ09NUFVUSU5HJyk7XG5cbi8qKlxuICogQSBkZWRpY2F0ZWQgc3ltYm9sIHVzZWQgaW4gcGxhY2Ugb2YgYSBjb21wdXRlZCBzaWduYWwgdmFsdWUgdG8gaW5kaWNhdGUgdGhhdCBhIGdpdmVuIGNvbXB1dGF0aW9uXG4gKiBmYWlsZWQuIFRoZSB0aHJvd24gZXJyb3IgaXMgY2FjaGVkIHVudGlsIHRoZSBjb21wdXRhdGlvbiBnZXRzIGRpcnR5IGFnYWluLlxuICogRXhwbGljaXRseSB0eXBlZCBhcyBgYW55YCBzbyB3ZSBjYW4gdXNlIGl0IGFzIHNpZ25hbCdzIHZhbHVlLlxuICovXG5jb25zdCBFUlJPUkVEOiBhbnkgPSBTeW1ib2woJ0VSUk9SRUQnKTtcblxuLyoqXG4gKiBBIGNvbXB1dGF0aW9uLCB3aGljaCBkZXJpdmVzIGEgdmFsdWUgZnJvbSBhIGRlY2xhcmF0aXZlIHJlYWN0aXZlIGV4cHJlc3Npb24uXG4gKlxuICogYENvbXB1dGVkYHMgYXJlIGJvdGggcHJvZHVjZXJzIGFuZCBjb25zdW1lcnMgb2YgcmVhY3Rpdml0eS5cbiAqL1xuaW50ZXJmYWNlIENvbXB1dGVkTm9kZTxUPiBleHRlbmRzIFJlYWN0aXZlTm9kZSB7XG4gIC8qKlxuICAgKiBDdXJyZW50IHZhbHVlIG9mIHRoZSBjb21wdXRhdGlvbiwgb3Igb25lIG9mIHRoZSBzZW50aW5lbCB2YWx1ZXMgYWJvdmUgKGBVTlNFVGAsIGBDT01QVVRJTkdgLFxuICAgKiBgRVJST1JgKS5cbiAgICovXG4gIHZhbHVlOiBUO1xuXG4gIC8qKlxuICAgKiBJZiBgdmFsdWVgIGlzIGBFUlJPUkVEYCwgdGhlIGVycm9yIGNhdWdodCBmcm9tIHRoZSBsYXN0IGNvbXB1dGF0aW9uIGF0dGVtcHQgd2hpY2ggd2lsbFxuICAgKiBiZSByZS10aHJvd24uXG4gICAqL1xuICBlcnJvcjogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIGNvbXB1dGF0aW9uIGZ1bmN0aW9uIHdoaWNoIHdpbGwgcHJvZHVjZSBhIG5ldyB2YWx1ZS5cbiAgICovXG4gIGNvbXB1dGF0aW9uOiAoKSA9PiBUO1xuXG4gIGVxdWFsOiBWYWx1ZUVxdWFsaXR5Rm48VD47XG59XG5cbmNvbnN0IENPTVBVVEVEX05PREUgPSB7XG4gIC4uLlJFQUNUSVZFX05PREUsXG4gIHZhbHVlOiBVTlNFVCxcbiAgZGlydHk6IHRydWUsXG4gIGVycm9yOiBudWxsLFxuICBlcXVhbDogZGVmYXVsdEVxdWFscyxcblxuICBwcm9kdWNlck11c3RSZWNvbXB1dGUobm9kZTogQ29tcHV0ZWROb2RlPHVua25vd24+KTogYm9vbGVhbiB7XG4gICAgLy8gRm9yY2UgYSByZWNvbXB1dGF0aW9uIGlmIHRoZXJlJ3Mgbm8gY3VycmVudCB2YWx1ZSwgb3IgaWYgdGhlIGN1cnJlbnQgdmFsdWUgaXMgaW4gdGhlIHByb2Nlc3NcbiAgICAvLyBvZiBiZWluZyBjYWxjdWxhdGVkICh3aGljaCBzaG91bGQgdGhyb3cgYW4gZXJyb3IpLlxuICAgIHJldHVybiBub2RlLnZhbHVlID09PSBVTlNFVCB8fCBub2RlLnZhbHVlID09PSBDT01QVVRJTkc7XG4gIH0sXG5cbiAgcHJvZHVjZXJSZWNvbXB1dGVWYWx1ZShub2RlOiBDb21wdXRlZE5vZGU8dW5rbm93bj4pOiB2b2lkIHtcbiAgICBpZiAobm9kZS52YWx1ZSA9PT0gQ09NUFVUSU5HKSB7XG4gICAgICAvLyBPdXIgY29tcHV0YXRpb24gc29tZWhvdyBsZWQgdG8gYSBjeWNsaWMgcmVhZCBvZiBpdHNlbGYuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RldGVjdGVkIGN5Y2xlIGluIGNvbXB1dGF0aW9ucy4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRWYWx1ZSA9IG5vZGUudmFsdWU7XG4gICAgbm9kZS52YWx1ZSA9IENPTVBVVElORztcblxuICAgIGNvbnN0IHByZXZDb25zdW1lciA9IGNvbnN1bWVyQmVmb3JlQ29tcHV0YXRpb24obm9kZSk7XG4gICAgbGV0IG5ld1ZhbHVlOiB1bmtub3duO1xuICAgIHRyeSB7XG4gICAgICBuZXdWYWx1ZSA9IG5vZGUuY29tcHV0YXRpb24oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIG5ld1ZhbHVlID0gRVJST1JFRDtcbiAgICAgIG5vZGUuZXJyb3IgPSBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNvbnN1bWVyQWZ0ZXJDb21wdXRhdGlvbihub2RlLCBwcmV2Q29uc3VtZXIpO1xuICAgIH1cblxuICAgIGlmIChvbGRWYWx1ZSAhPT0gVU5TRVQgJiYgb2xkVmFsdWUgIT09IEVSUk9SRUQgJiYgbmV3VmFsdWUgIT09IEVSUk9SRUQgJiZcbiAgICAgICAgbm9kZS5lcXVhbChvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgICAvLyBObyBjaGFuZ2UgdG8gYHZhbHVlVmVyc2lvbmAgLSBvbGQgYW5kIG5ldyB2YWx1ZXMgYXJlXG4gICAgICAvLyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudC5cbiAgICAgIG5vZGUudmFsdWUgPSBvbGRWYWx1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgbm9kZS52ZXJzaW9uKys7XG4gIH0sXG59O1xuIl19