@angular/core 10.0.0 → 10.0.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.
- package/bundles/core-testing.umd.js +321 -272
- package/bundles/core-testing.umd.js.map +1 -1
- package/bundles/core-testing.umd.min.js +11 -25
- package/bundles/core-testing.umd.min.js.map +1 -1
- package/bundles/core.umd.js +620 -832
- package/bundles/core.umd.js.map +1 -1
- package/bundles/core.umd.min.js +128 -282
- package/bundles/core.umd.min.js.map +1 -1
- package/core.d.ts +69 -65
- package/core.metadata.json +1 -1
- package/esm2015/src/application_init.js +9 -5
- package/esm2015/src/application_tokens.js +16 -12
- package/esm2015/src/change_detection/change_detector_ref.js +6 -3
- package/esm2015/src/change_detection/constants.js +3 -1
- package/esm2015/src/di/injectable.js +1 -1
- package/esm2015/src/di/metadata.js +2 -2
- package/esm2015/src/interface/type.js +2 -2
- package/esm2015/src/linker/ng_module_factory.js +3 -5
- package/esm2015/src/linker/view_ref.js +3 -6
- package/esm2015/src/metadata/directives.js +1 -1
- package/esm2015/src/metadata/ng_module.js +1 -1
- package/esm2015/src/render3/component_ref.js +4 -13
- package/esm2015/src/render3/di.js +12 -4
- package/esm2015/src/render3/i18n.js +3 -3
- package/esm2015/src/render3/instructions/di.js +1 -1
- package/esm2015/src/render3/instructions/listener.js +2 -2
- package/esm2015/src/render3/instructions/shared.js +8 -18
- package/esm2015/src/render3/node_assert.js +3 -3
- package/esm2015/src/render3/node_manipulation.js +11 -7
- package/esm2015/src/render3/query.js +2 -2
- package/esm2015/src/render3/view_engine_compatibility.js +2 -2
- package/esm2015/src/render3/view_ref.js +7 -5
- package/esm2015/src/sanitization/html_sanitizer.js +3 -3
- package/esm2015/src/sanitization/inert_body.js +39 -82
- package/esm2015/src/util/ng_dev_mode.js +2 -2
- package/esm2015/src/version.js +1 -1
- package/esm2015/testing/src/fake_async_fallback.js +5 -1
- package/esm2015/testing/src/r3_test_bed.js +2 -2
- package/fesm2015/core.js +118 -159
- package/fesm2015/core.js.map +1 -1
- package/fesm2015/testing.js +6 -2
- package/fesm2015/testing.js.map +1 -1
- package/package.json +1 -1
- package/schematics/migrations/undecorated-classes-with-decorated-fields/transform.d.ts +7 -0
- package/schematics/migrations/undecorated-classes-with-decorated-fields/transform.js +125 -59
- package/src/r3_symbols.d.ts +15 -17
- package/testing/testing.d.ts +1 -1
- package/testing.d.ts +1 -1
- package/esm2015/src/util/WrappedValue.js +0 -48
package/package.json
CHANGED
|
@@ -52,5 +52,12 @@ export declare class UndecoratedClassesWithDecoratedFieldsTransform {
|
|
|
52
52
|
* considered Angular features..
|
|
53
53
|
*/
|
|
54
54
|
private _determineClassKind;
|
|
55
|
+
/**
|
|
56
|
+
* Checks whether a given class has been reported as ambiguous in previous
|
|
57
|
+
* migration run. e.g. when build targets are migrated first, and then test
|
|
58
|
+
* targets that have an overlap with build source files, the same class
|
|
59
|
+
* could be detected as ambiguous.
|
|
60
|
+
*/
|
|
61
|
+
private _hasBeenReportedAsAmbiguous;
|
|
55
62
|
}
|
|
56
63
|
export {};
|
|
@@ -47,12 +47,23 @@
|
|
|
47
47
|
*/
|
|
48
48
|
const AMBIGUOUS_LIFECYCLE_HOOKS = new Set(['ngOnDestroy']);
|
|
49
49
|
/** Describes how a given class is used in the context of Angular. */
|
|
50
|
-
var
|
|
51
|
-
(function (
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
})(
|
|
50
|
+
var InferredKind;
|
|
51
|
+
(function (InferredKind) {
|
|
52
|
+
InferredKind[InferredKind["DIRECTIVE"] = 0] = "DIRECTIVE";
|
|
53
|
+
InferredKind[InferredKind["AMBIGUOUS"] = 1] = "AMBIGUOUS";
|
|
54
|
+
InferredKind[InferredKind["UNKNOWN"] = 2] = "UNKNOWN";
|
|
55
|
+
})(InferredKind || (InferredKind = {}));
|
|
56
|
+
/** Describes possible types of Angular declarations. */
|
|
57
|
+
var DeclarationType;
|
|
58
|
+
(function (DeclarationType) {
|
|
59
|
+
DeclarationType[DeclarationType["DIRECTIVE"] = 0] = "DIRECTIVE";
|
|
60
|
+
DeclarationType[DeclarationType["COMPONENT"] = 1] = "COMPONENT";
|
|
61
|
+
DeclarationType[DeclarationType["ABSTRACT_DIRECTIVE"] = 2] = "ABSTRACT_DIRECTIVE";
|
|
62
|
+
DeclarationType[DeclarationType["PIPE"] = 3] = "PIPE";
|
|
63
|
+
DeclarationType[DeclarationType["INJECTABLE"] = 4] = "INJECTABLE";
|
|
64
|
+
})(DeclarationType || (DeclarationType = {}));
|
|
65
|
+
/** TODO message that is added to ambiguous classes using Angular features. */
|
|
66
|
+
const AMBIGUOUS_CLASS_TODO = 'Add Angular decorator.';
|
|
56
67
|
class UndecoratedClassesWithDecoratedFieldsTransform {
|
|
57
68
|
constructor(typeChecker, getUpdateRecorder) {
|
|
58
69
|
this.typeChecker = typeChecker;
|
|
@@ -69,8 +80,8 @@
|
|
|
69
80
|
* indicating that a given class uses Angular features. https://hackmd.io/vuQfavzfRG6KUCtU7oK_EA
|
|
70
81
|
*/
|
|
71
82
|
migrate(sourceFiles) {
|
|
72
|
-
const {
|
|
73
|
-
|
|
83
|
+
const { detectedAbstractDirectives, ambiguousClasses } = this._findUndecoratedAbstractDirectives(sourceFiles);
|
|
84
|
+
detectedAbstractDirectives.forEach(node => {
|
|
74
85
|
const sourceFile = node.getSourceFile();
|
|
75
86
|
const recorder = this.getUpdateRecorder(sourceFile);
|
|
76
87
|
const directiveExpr = this.importManager.addImportToSourceFile(sourceFile, 'Directive', '@angular/core');
|
|
@@ -81,11 +92,17 @@
|
|
|
81
92
|
// determine whether the class is used as directive, service or pipe. The migration
|
|
82
93
|
// could potentially determine the type by checking NgModule definitions or inheritance
|
|
83
94
|
// of other known declarations, but this is out of scope and a TODO/failure is sufficient.
|
|
84
|
-
return Array.from(
|
|
95
|
+
return Array.from(ambiguousClasses).reduce((failures, node) => {
|
|
96
|
+
// If the class has been reported as ambiguous before, skip adding a TODO and
|
|
97
|
+
// printing an error. A class could be visited multiple times when it's part
|
|
98
|
+
// of multiple build targets in the CLI project.
|
|
99
|
+
if (this._hasBeenReportedAsAmbiguous(node)) {
|
|
100
|
+
return failures;
|
|
101
|
+
}
|
|
85
102
|
const sourceFile = node.getSourceFile();
|
|
86
103
|
const recorder = this.getUpdateRecorder(sourceFile);
|
|
87
104
|
// Add a TODO to the class that uses Angular features but is not decorated.
|
|
88
|
-
recorder.addClassTodo(node,
|
|
105
|
+
recorder.addClassTodo(node, AMBIGUOUS_CLASS_TODO);
|
|
89
106
|
// Add an error for the class that will be printed in the `ng update` output.
|
|
90
107
|
return failures.concat({
|
|
91
108
|
node,
|
|
@@ -104,58 +121,78 @@
|
|
|
104
121
|
* directives. Those are ambiguous and could be either Directive, Pipe or service.
|
|
105
122
|
*/
|
|
106
123
|
_findUndecoratedAbstractDirectives(sourceFiles) {
|
|
107
|
-
const
|
|
124
|
+
const ambiguousClasses = new Set();
|
|
125
|
+
const declarations = new WeakMap();
|
|
126
|
+
const detectedAbstractDirectives = new Set();
|
|
108
127
|
const undecoratedClasses = new Set();
|
|
109
|
-
const nonAbstractDirectives = new WeakSet();
|
|
110
|
-
const abstractDirectives = new WeakSet();
|
|
111
|
-
const ambiguous = new Set();
|
|
112
128
|
const visitNode = (node) => {
|
|
113
129
|
node.forEachChild(visitNode);
|
|
114
130
|
if (!ts.isClassDeclaration(node)) {
|
|
115
131
|
return;
|
|
116
132
|
}
|
|
117
|
-
const {
|
|
118
|
-
if (
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
133
|
+
const { inferredKind, decoratedType } = this._analyzeClassDeclaration(node);
|
|
134
|
+
if (decoratedType !== null) {
|
|
135
|
+
declarations.set(node, decoratedType);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (inferredKind === InferredKind.DIRECTIVE) {
|
|
139
|
+
detectedAbstractDirectives.add(node);
|
|
125
140
|
}
|
|
126
|
-
else if (
|
|
127
|
-
|
|
128
|
-
result.add(node);
|
|
141
|
+
else if (inferredKind === InferredKind.AMBIGUOUS) {
|
|
142
|
+
ambiguousClasses.add(node);
|
|
129
143
|
}
|
|
130
144
|
else {
|
|
131
|
-
if (kind === ClassKind.AMBIGUOUS) {
|
|
132
|
-
ambiguous.add(node);
|
|
133
|
-
}
|
|
134
145
|
undecoratedClasses.add(node);
|
|
135
146
|
}
|
|
136
147
|
};
|
|
137
148
|
sourceFiles.forEach(sourceFile => sourceFile.forEachChild(visitNode));
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
149
|
+
/**
|
|
150
|
+
* Checks the inheritance of the given set of classes. It removes classes from the
|
|
151
|
+
* detected abstract directives set when they inherit from a non-abstract Angular
|
|
152
|
+
* declaration. e.g. an abstract directive can never extend from a component.
|
|
153
|
+
*
|
|
154
|
+
* If a class inherits from an abstract directive though, we will migrate them too
|
|
155
|
+
* as derived classes also need to be decorated. This has been done for a simpler mental
|
|
156
|
+
* model and reduced complexity in the Angular compiler. See migration plan document.
|
|
157
|
+
*/
|
|
158
|
+
const checkInheritanceOfClasses = (classes) => {
|
|
159
|
+
classes.forEach(node => {
|
|
160
|
+
for (const { node: baseClass } of find_base_classes_1.findBaseClassDeclarations(node, this.typeChecker)) {
|
|
161
|
+
if (!declarations.has(baseClass)) {
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
// If the undecorated class inherits from an abstract directive, always migrate it.
|
|
165
|
+
// Derived undecorated classes of abstract directives are always also considered
|
|
166
|
+
// abstract directives and need to be decorated too. This is necessary as otherwise
|
|
167
|
+
// the inheritance chain cannot be resolved by the Angular compiler. e.g. when it
|
|
168
|
+
// flattens directive metadata for type checking. In the other case, we never want
|
|
169
|
+
// to migrate a class if it extends from a non-abstract Angular declaration. That
|
|
170
|
+
// is an unsupported pattern as of v9 and was previously handled with the
|
|
171
|
+
// `undecorated-classes-with-di` migration (which copied the inherited decorator).
|
|
172
|
+
if (declarations.get(baseClass) === DeclarationType.ABSTRACT_DIRECTIVE) {
|
|
173
|
+
detectedAbstractDirectives.add(node);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
detectedAbstractDirectives.delete(node);
|
|
177
|
+
}
|
|
178
|
+
ambiguousClasses.delete(node);
|
|
147
179
|
break;
|
|
148
180
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
181
|
+
});
|
|
182
|
+
};
|
|
183
|
+
// Check inheritance of any detected abstract directive. We want to remove
|
|
184
|
+
// classes that are not eligible abstract directives due to inheritance. i.e.
|
|
185
|
+
// if a class extends from a component, it cannot be a derived abstract directive.
|
|
186
|
+
checkInheritanceOfClasses(detectedAbstractDirectives);
|
|
187
|
+
// Update the class declarations to reflect the detected abstract directives. This is
|
|
188
|
+
// then used later when we check for undecorated classes that inherit from an abstract
|
|
189
|
+
// directive and need to be decorated.
|
|
190
|
+
detectedAbstractDirectives.forEach(n => declarations.set(n, DeclarationType.ABSTRACT_DIRECTIVE));
|
|
191
|
+
// Check ambiguous and undecorated classes if they inherit from an abstract directive.
|
|
192
|
+
// If they do, we want to migrate them too. See function definition for more details.
|
|
193
|
+
checkInheritanceOfClasses(ambiguousClasses);
|
|
194
|
+
checkInheritanceOfClasses(undecoratedClasses);
|
|
195
|
+
return { detectedAbstractDirectives, ambiguousClasses };
|
|
159
196
|
}
|
|
160
197
|
/**
|
|
161
198
|
* Analyzes the given class declaration by determining whether the class
|
|
@@ -163,18 +200,32 @@
|
|
|
163
200
|
*/
|
|
164
201
|
_analyzeClassDeclaration(node) {
|
|
165
202
|
const ngDecorators = node.decorators && ng_decorators_1.getAngularDecorators(this.typeChecker, node.decorators);
|
|
166
|
-
const
|
|
203
|
+
const inferredKind = this._determineClassKind(node);
|
|
167
204
|
if (ngDecorators === undefined || ngDecorators.length === 0) {
|
|
168
|
-
return {
|
|
205
|
+
return { decoratedType: null, inferredKind };
|
|
169
206
|
}
|
|
170
207
|
const directiveDecorator = ngDecorators.find(({ name }) => name === 'Directive');
|
|
171
208
|
const componentDecorator = ngDecorators.find(({ name }) => name === 'Component');
|
|
209
|
+
const pipeDecorator = ngDecorators.find(({ name }) => name === 'Pipe');
|
|
210
|
+
const injectableDecorator = ngDecorators.find(({ name }) => name === 'Injectable');
|
|
172
211
|
const isAbstractDirective = directiveDecorator !== undefined && this._isAbstractDirective(directiveDecorator);
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
212
|
+
let decoratedType = null;
|
|
213
|
+
if (isAbstractDirective) {
|
|
214
|
+
decoratedType = DeclarationType.ABSTRACT_DIRECTIVE;
|
|
215
|
+
}
|
|
216
|
+
else if (componentDecorator !== undefined) {
|
|
217
|
+
decoratedType = DeclarationType.COMPONENT;
|
|
218
|
+
}
|
|
219
|
+
else if (directiveDecorator !== undefined) {
|
|
220
|
+
decoratedType = DeclarationType.DIRECTIVE;
|
|
221
|
+
}
|
|
222
|
+
else if (pipeDecorator !== undefined) {
|
|
223
|
+
decoratedType = DeclarationType.PIPE;
|
|
224
|
+
}
|
|
225
|
+
else if (injectableDecorator !== undefined) {
|
|
226
|
+
decoratedType = DeclarationType.INJECTABLE;
|
|
227
|
+
}
|
|
228
|
+
return { decoratedType, inferredKind };
|
|
178
229
|
}
|
|
179
230
|
/**
|
|
180
231
|
* Checks whether the given decorator resolves to an abstract directive. An directive is
|
|
@@ -203,32 +254,47 @@
|
|
|
203
254
|
* considered Angular features..
|
|
204
255
|
*/
|
|
205
256
|
_determineClassKind(node) {
|
|
206
|
-
let usage =
|
|
257
|
+
let usage = InferredKind.UNKNOWN;
|
|
207
258
|
for (const member of node.members) {
|
|
208
259
|
const propertyName = member.name !== undefined ? property_name_1.getPropertyNameText(member.name) : null;
|
|
209
260
|
// If the class declares any of the known directive lifecycle hooks, we can
|
|
210
261
|
// immediately exit the loop as the class is guaranteed to be a directive.
|
|
211
262
|
if (propertyName !== null && DIRECTIVE_LIFECYCLE_HOOKS.has(propertyName)) {
|
|
212
|
-
return
|
|
263
|
+
return InferredKind.DIRECTIVE;
|
|
213
264
|
}
|
|
214
265
|
const ngDecorators = member.decorators !== undefined ?
|
|
215
266
|
ng_decorators_1.getAngularDecorators(this.typeChecker, member.decorators) :
|
|
216
267
|
[];
|
|
217
268
|
for (const { name } of ngDecorators) {
|
|
218
269
|
if (DIRECTIVE_FIELD_DECORATORS.has(name)) {
|
|
219
|
-
return
|
|
270
|
+
return InferredKind.DIRECTIVE;
|
|
220
271
|
}
|
|
221
272
|
}
|
|
222
273
|
// If the class declares any of the lifecycle hooks that do not guarantee that
|
|
223
274
|
// the given class is a directive, update the kind and continue looking for other
|
|
224
275
|
// members that would unveil a more specific kind (i.e. being a directive).
|
|
225
276
|
if (propertyName !== null && AMBIGUOUS_LIFECYCLE_HOOKS.has(propertyName)) {
|
|
226
|
-
usage =
|
|
277
|
+
usage = InferredKind.AMBIGUOUS;
|
|
227
278
|
}
|
|
228
279
|
}
|
|
229
280
|
return usage;
|
|
230
281
|
}
|
|
282
|
+
/**
|
|
283
|
+
* Checks whether a given class has been reported as ambiguous in previous
|
|
284
|
+
* migration run. e.g. when build targets are migrated first, and then test
|
|
285
|
+
* targets that have an overlap with build source files, the same class
|
|
286
|
+
* could be detected as ambiguous.
|
|
287
|
+
*/
|
|
288
|
+
_hasBeenReportedAsAmbiguous(node) {
|
|
289
|
+
const sourceFile = node.getSourceFile();
|
|
290
|
+
const leadingComments = ts.getLeadingCommentRanges(sourceFile.text, node.pos);
|
|
291
|
+
if (leadingComments === undefined) {
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
return leadingComments.some(({ kind, pos, end }) => kind === ts.SyntaxKind.SingleLineCommentTrivia &&
|
|
295
|
+
sourceFile.text.substring(pos, end).includes(`TODO: ${AMBIGUOUS_CLASS_TODO}`));
|
|
296
|
+
}
|
|
231
297
|
}
|
|
232
298
|
exports.UndecoratedClassesWithDecoratedFieldsTransform = UndecoratedClassesWithDecoratedFieldsTransform;
|
|
233
299
|
});
|
|
234
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zY2hlbWF0aWNzL21pZ3JhdGlvbnMvdW5kZWNvcmF0ZWQtY2xhc3Nlcy13aXRoLWRlY29yYXRlZC1maWVsZHMvdHJhbnNmb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQUVILHlGQUFtRjtJQUNuRiwyRUFBMEc7SUFDMUcsaUNBQWlDO0lBRWpDLGtGQUF5RDtJQUN6RCxnRkFBNEU7SUFDNUUsbUdBQW1GO0lBQ25GLG1GQUFrRTtJQUNsRSwyRkFBeUU7SUFJekU7OztPQUdHO0lBQ0gsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGFBQWE7UUFDaEcsY0FBYztLQUNmLENBQUMsQ0FBQztJQUVIOzs7T0FHRztJQUNILE1BQU0seUJBQXlCLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDeEMsYUFBYSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CO1FBQy9FLG9CQUFvQixFQUFFLHVCQUF1QjtLQUM5QyxDQUFDLENBQUM7SUFFSDs7O09BR0c7SUFDSCxNQUFNLHlCQUF5QixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUUzRCxxRUFBcUU7SUFDckUsSUFBSyxTQUlKO0lBSkQsV0FBSyxTQUFTO1FBQ1osbURBQVMsQ0FBQTtRQUNULG1EQUFTLENBQUE7UUFDVCwrQ0FBTyxDQUFBO0lBQ1QsQ0FBQyxFQUpJLFNBQVMsS0FBVCxTQUFTLFFBSWI7SUFpQkQsTUFBYSw4Q0FBOEM7UUFNekQsWUFDWSxXQUEyQixFQUMzQixpQkFBd0Q7WUFEeEQsZ0JBQVcsR0FBWCxXQUFXLENB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QUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxtQ0FBbUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFFekYsMkVBQTJFO2dCQUMzRSwwRUFBMEU7Z0JBQzFFLElBQUksWUFBWSxLQUFLLElBQUksSUFBSSx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUU7b0JBQ3hFLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQztpQkFDNUI7Z0JBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQztvQkFDbEQsb0NBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztvQkFDM0QsRUFBRSxDQUFDO2dCQUNQLEtBQUssTUFBTSxFQUFDLElBQUksRUFBQyxJQUFJLFlBQVksRUFBRTtvQkFDakMsSUFBSSwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ3hDLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQztxQkFDNUI7aUJBQ0Y7Z0JBRUQsOEVBQThFO2dCQUM5RSxpRkFBaUY7Z0JBQ2pGLDJFQUEyRTtnQkFDM0UsSUFBSSxZQUFZLEtBQUssSUFBSSxJQUFJLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRTtvQkFDeEUsS0FBSyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7aUJBQzdCO2FBQ0Y7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7S0FDRjtJQW5NRCx3R0FtTUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtQYXJ0aWFsRXZhbHVhdG9yfSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL3BhcnRpYWxfZXZhbHVhdG9yJztcbmltcG9ydCB7cmVmbGVjdE9iamVjdExpdGVyYWwsIFR5cGVTY3JpcHRSZWZsZWN0aW9uSG9zdH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9yZWZsZWN0aW9uJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0ltcG9ydE1hbmFnZXJ9IGZyb20gJy4uLy4uL3V0aWxzL2ltcG9ydF9tYW5hZ2VyJztcbmltcG9ydCB7Z2V0QW5ndWxhckRlY29yYXRvcnMsIE5nRGVjb3JhdG9yfSBmcm9tICcuLi8uLi91dGlscy9uZ19kZWNvcmF0b3JzJztcbmltcG9ydCB7ZmluZEJhc2VDbGFzc0RlY2xhcmF0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9maW5kX2Jhc2VfY2xhc3Nlcyc7XG5pbXBvcnQge3Vud3JhcEV4cHJlc3Npb259IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzY3JpcHQvZnVuY3Rpb25zJztcbmltcG9ydCB7Z2V0UHJvcGVydHlOYW1lVGV4dH0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9wcm9wZXJ0eV9uYW1lJztcblxuaW1wb3J0IHtVcGRhdGVSZWNvcmRlcn0gZnJvbSAnLi91cGRhdGVfcmVjb3JkZXInO1xuXG4vKipcbiAqIFNldCBvZiBrbm93biBkZWNvcmF0b3JzIHRoYXQgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCBjbGFzcyBuZWVkcyBhIGRpcmVjdGl2ZVxuICogZGVmaW5pdGlvbi4gVGhlc2UgZGVjb3JhdG9ycyBhcmUgYWx3YXlzIHNwZWNpZmljIHRvIGRpcmVjdGl2ZXMuXG4gKi9cbmNvbnN0IERJUkVDVElWRV9GSUVMRF9ERUNPUkFUT1JTID0gbmV3IFNldChbXG4gICdJbnB1dCcsICdPdXRwdXQnLCAnVmlld0NoaWxkJywgJ1ZpZXdDaGlsZHJlbicsICdDb250ZW50Q2hpbGQnLCAnQ29udGVudENoaWxkcmVuJywgJ0hvc3RCaW5kaW5nJyxcbiAgJ0hvc3RMaXN0ZW5lcidcbl0pO1xuXG4vKipcbiAqIFNldCBvZiBrbm93biBsaWZlY3ljbGUgaG9va3MgdGhhdCBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IGNsYXNzIG5lZWRzIGEgZGlyZWN0aXZlXG4gKiBkZWZpbml0aW9uLiBUaGVzZSBsaWZlY3ljbGUgaG9va3MgYXJlIGFsd2F5cyBzcGVjaWZpYyB0byBkaXJlY3RpdmVzLlxuICovXG5jb25zdCBESVJFQ1RJVkVfTElGRUNZQ0xFX0hPT0tTID0gbmV3IFNldChbXG4gICduZ09uQ2hhbmdlcycsICduZ09uSW5pdCcsICduZ0RvQ2hlY2snLCAnbmdBZnRlclZpZXdJbml0JywgJ25nQWZ0ZXJWaWV3Q2hlY2tlZCcsXG4gICduZ0FmdGVyQ29udGVudEluaXQnLCAnbmdBZnRlckNvbnRlbnRDaGVja2VkJ1xuXSk7XG5cbi8qKlxuICogU2V0IG9mIGtub3duIGxpZmVjeWNsZSBob29rcyB0aGF0IGluZGljYXRlIHRoYXQgYSBnaXZlbiBjbGFzcyB1c2VzIEFuZ3VsYXJcbiAqIGZlYXR1cmVzLCBidXQgaXQncyBhbWJpZ3VvdXMgd2hldGhlciBpdCBpcyBhIGRpcmVjdGl2ZSBvciBzZXJ2aWNlLlxuICovXG5jb25zdCBBTUJJR1VPVVNfTElGRUNZQ0xFX0hPT0tTID0gbmV3IFNldChbJ25nT25EZXN0cm95J10pO1xuXG4vKiogRGVzY3JpYmVzIGhvdyBhIGdpdmVuIGNsYXNzIGlzIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgQW5ndWxhci4gKi9cbmVudW0gQ2xhc3NLaW5kIHtcbiAgRElSRUNUSVZFLFxuICBBTUJJR1VPVVMsXG4gIFVOS05PV04sXG59XG5cbi8qKiBBbmFseXplZCBjbGFzcyBkZWNsYXJhdGlvbi4gKi9cbmludGVyZmFjZSBBbmFseXplZENsYXNzIHtcbiAgLyoqIFdoZXRoZXIgdGhlIGNsYXNzIGlzIGRlY29yYXRlZCB3aXRoIEBEaXJlY3RpdmUgb3IgQENvbXBvbmVudC4gKi9cbiAgaXNEaXJlY3RpdmVPckNvbXBvbmVudDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIGNsYXNzIGlzIGFuIGFic3RyYWN0IGRpcmVjdGl2ZS4gKi9cbiAgaXNBYnN0cmFjdERpcmVjdGl2ZTogYm9vbGVhbjtcbiAgLyoqIEtpbmQgb2YgdGhlIGdpdmVuIGNsYXNzIGluIHRlcm1zIG9mIEFuZ3VsYXIuICovXG4gIGtpbmQ6IENsYXNzS2luZDtcbn1cblxuaW50ZXJmYWNlIEFuYWx5c2lzRmFpbHVyZSB7XG4gIG5vZGU6IHRzLk5vZGU7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFVuZGVjb3JhdGVkQ2xhc3Nlc1dpdGhEZWNvcmF0ZWRGaWVsZHNUcmFuc2Zvcm0ge1xuICBwcml2YXRlIHByaW50ZXIgPSB0cy5jcmVhdGVQcmludGVyKCk7XG4gIHByaXZhdGUgaW1wb3J0TWFuYWdlciA9IG5ldyBJbXBvcnRNYW5hZ2VyKHRoaXMuZ2V0VXBkYXRlUmVjb3JkZXIsIHRoaXMucHJpbnRlcik7XG4gIHByaXZhdGUgcmVmbGVjdGlvbkhvc3QgPSBuZXcgVHlwZVNjcmlwdFJlZmxlY3Rpb25Ib3N0KHRoaXMudHlwZUNoZWNrZXIpO1xuICBwcml2YXRlIHBhcnRpYWxFdmFsdWF0b3IgPSBuZXcgUGFydGlhbEV2YWx1YXRvcih0aGlzLnJlZmxlY3Rpb25Ib3N0LCB0aGlzLnR5cGVDaGVja2VyLCBudWxsKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuICAgICAgcHJpdmF0ZSBnZXRVcGRhdGVSZWNvcmRlcjogKHNmOiB0cy5Tb3VyY2VGaWxlKSA9PiBVcGRhdGVSZWNvcmRlcikge31cblxuICAvKipcbiAgICogTWlncmF0ZXMgdGhlIHNwZWNpZmllZCBzb3VyY2UgZmlsZXMuIFRoZSB0cmFuc2Zvcm0gYWRkcyB0aGUgYWJzdHJhY3QgYEBEaXJlY3RpdmVgXG4gICAqIGRlY29yYXRvciB0byB1bmRlY29yYXRlZCBjbGFzc2VzIHRoYXQgdXNlIEFuZ3VsYXIgZmVhdHVyZXMuIENsYXNzIG1lbWJlcnMgd2hpY2hcbiAgICogYXJlIGRlY29yYXRlZCB3aXRoIGFueSBBbmd1bGFyIGRlY29yYXRvciwgb3IgY2xhc3MgbWVtYmVycyBmb3IgbGlmZWN5Y2xlIGhvb2tzIGFyZVxuICAgKiBpbmRpY2F0aW5nIHRoYXQgYSBnaXZlbiBjbGFzcyB1c2VzIEFuZ3VsYXIgZmVhdHVyZXMuIGh0dHBzOi8vaGFja21kLmlvL3Z1UWZhdnpmUkc2S1VDdFU3b0tfRUFcbiAgICovXG4gIG1pZ3JhdGUoc291cmNlRmlsZXM6IHRzLlNvdXJjZUZpbGVbXSk6IEFuYWx5c2lzRmFpbHVyZVtdIHtcbiAgICBjb25zdCB7cmVzdWx0LCBhbWJpZ3VvdXN9ID0gdGhpcy5fZmluZFVuZGVjb3JhdGVkQWJzdHJhY3REaXJlY3RpdmVzKHNvdXJjZUZpbGVzKTtcblxuXG4gICAgcmVzdWx0LmZvckVhY2gobm9kZSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VGaWxlID0gbm9kZS5nZXRTb3VyY2VGaWxlKCk7XG4gICAgICBjb25zdCByZWNvcmRlciA9IHRoaXMuZ2V0VXBkYXRlUmVjb3JkZXIoc291cmNlRmlsZSk7XG4gICAgICBjb25zdCBkaXJlY3RpdmVFeHByID1cbiAgICAgICAgICB0aGlzLmltcG9ydE1hbmFnZXIuYWRkSW1wb3J0VG9Tb3VyY2VGaWxlKHNvdXJjZUZpbGUsICdEaXJlY3RpdmUnLCAnQGFuZ3VsYXIvY29yZScpO1xuICAgICAgY29uc3QgZGVjb3JhdG9yRXhwciA9IHRzLmNyZWF0ZURlY29yYXRvcih0cy5jcmVhdGVDYWxsKGRpcmVjdGl2ZUV4cHIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKSk7XG4gICAgICByZWNvcmRlci5hZGRDbGFzc0RlY29yYXRvcihcbiAgICAgICAgICBub2RlLCB0aGlzLnByaW50ZXIucHJpbnROb2RlKHRzLkVtaXRIaW50LlVuc3BlY2lmaWVkLCBkZWNvcmF0b3JFeHByLCBzb3VyY2VGaWxlKSk7XG4gICAgfSk7XG5cbiAgICAvLyBBbWJpZ3VvdXMgY2xhc3NlcyBjbGVhcmx5IHVzZSBBbmd1bGFyIGZlYXR1cmVzLCBidXQgdGhlIG1pZ3JhdGlvbiBpcyB1bmFibGUgdG9cbiAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGUgY2xhc3MgaXMgdXNlZCBhcyBkaXJlY3RpdmUsIHNlcnZpY2Ugb3IgcGlwZS4gVGhlIG1pZ3JhdGlvblxuICAgIC8vIGNvdWxkIHBvdGVudGlhbGx5IGRldGVybWluZSB0aGUgdHlwZSBieSBjaGVja2luZyBOZ01vZHVsZSBkZWZpbml0aW9ucyBvciBpbmhlcml0YW5jZVxuICAgIC8vIG9mIG90aGVyIGtub3duIGRlY2xhcmF0aW9ucywgYnV0IHRoaXMgaXMgb3V0IG9mIHNjb3BlIGFuZCBhIFRPRE8vZmFpbHVyZSBpcyBzdWZmaWNpZW50LlxuICAgIHJldHVybiBBcnJheS5mcm9tKGFtYmlndW91cykucmVkdWNlKChmYWlsdXJlcywgbm9kZSkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlRmlsZSA9IG5vZGUuZ2V0U291cmNlRmlsZSgpO1xuICAgICAgY29uc3QgcmVjb3JkZXIgPSB0aGlzLmdldFVwZGF0ZVJlY29yZGVyKHNvdXJjZUZpbGUpO1xuXG4gICAgICAvLyBBZGQgYSBUT0RPIHRvIHRoZSBjbGFzcyB0aGF0IHVzZXMgQW5ndWxhciBmZWF0dXJlcyBidXQgaXMgbm90IGRlY29yYXRlZC5cbiAgICAgIHJlY29yZGVyLmFkZENsYXNzVG9kbyhub2RlLCBgQWRkIEFuZ3VsYXIgZGVjb3JhdG9yLmApO1xuXG4gICAgICAvLyBBZGQgYW4gZXJyb3IgZm9yIHRoZSBjbGFzcyB0aGF0IHdpbGwgYmUgcHJpbnRlZCBpbiB0aGUgYG5nIHVwZGF0ZWAgb3V0cHV0LlxuICAgICAgcmV0dXJuIGZhaWx1cmVzLmNvbmNhdCh7XG4gICAgICAgIG5vZGUsXG4gICAgICAgIG1lc3NhZ2U6ICdDbGFzcyB1c2VzIEFuZ3VsYXIgZmVhdHVyZXMgYnV0IGNhbm5vdCBiZSBtaWdyYXRlZCBhdXRvbWF0aWNhbGx5LiBQbGVhc2UgJyArXG4gICAgICAgICAgICAnYWRkIGFuIGFwcHJvcHJpYXRlIEFuZ3VsYXIgZGVjb3JhdG9yLidcbiAgICAgIH0pO1xuICAgIH0sIFtdIGFzIEFuYWx5c2lzRmFpbHVyZVtdKTtcbiAgfVxuXG4gIC8qKiBSZWNvcmRzIGFsbCBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIGluIHRoZSBpbXBvcnQgbWFuYWdlci4gKi9cbiAgcmVjb3JkQ2hhbmdlcygpIHtcbiAgICB0aGlzLmltcG9ydE1hbmFnZXIucmVjb3JkQ2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHVuZGVjb3JhdGVkIGFic3RyYWN0IGRpcmVjdGl2ZXMgaW4gdGhlIHNwZWNpZmllZCBzb3VyY2UgZmlsZXMuIEFsc28gcmV0dXJuc1xuICAgKiBhIHNldCBvZiB1bmRlY29yYXRlZCBjbGFzc2VzIHdoaWNoIGNvdWxkIG5vdCBiZSBkZXRlY3RlZCBhcyBndWFyYW50ZWVkIGFic3RyYWN0XG4gICAqIGRpcmVjdGl2ZXMuIFRob3NlIGFyZSBhbWJpZ3VvdXMgYW5kIGNvdWxkIGJlIGVpdGhlciBEaXJlY3RpdmUsIFBpcGUgb3Igc2VydmljZS5cbiAgICovXG4gIHByaXZhdGUgX2ZpbmRVbmRlY29yYXRlZEFic3RyYWN0RGlyZWN0aXZlcyhzb3VyY2VGaWxlczogdHMuU291cmNlRmlsZVtdKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldDx0cy5DbGFzc0RlY2xhcmF0aW9uPigpO1xuICAgIGNvbnN0IHVuZGVjb3JhdGVkQ2xhc3NlcyA9IG5ldyBTZXQ8dHMuQ2xhc3NEZWNsYXJhdGlvbj4oKTtcbiAgICBjb25zdCBub25BYnN0cmFjdERpcmVjdGl2ZXMgPSBuZXcgV2Vha1NldDx0cy5DbGFzc0RlY2xhcmF0aW9uPigpO1xuICAgIGNvbnN0IGFic3RyYWN0RGlyZWN0aXZlcyA9IG5ldyBXZWFrU2V0PHRzLkNsYXNzRGVjbGFyYXRpb24+KCk7XG4gICAgY29uc3QgYW1iaWd1b3VzID0gbmV3IFNldDx0cy5DbGFzc0RlY2xhcmF0aW9uPigpO1xuXG4gICAgY29uc3QgdmlzaXROb2RlID0gKG5vZGU6IHRzLk5vZGUpID0+IHtcbiAgICAgIG5vZGUuZm9yRWFjaENoaWxkKHZpc2l0Tm9kZSk7XG4gICAgICBpZiAoIXRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7aXNEaXJlY3RpdmVPckNvbXBvbmVudCwgaXNBYnN0cmFjdERpcmVjdGl2ZSwga2luZH0gPVxuICAgICAgICAgIHRoaXMuX2FuYWx5emVDbGFzc0RlY2xhcmF0aW9uKG5vZGUpO1xuICAgICAgaWYgKGlzRGlyZWN0aXZlT3JDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKGlzQWJzdHJhY3REaXJlY3RpdmUpIHtcbiAgICAgICAgICBhYnN0cmFjdERpcmVjdGl2ZXMuYWRkKG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vbkFic3RyYWN0RGlyZWN0aXZlcy5hZGQobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gQ2xhc3NLaW5kLkRJUkVDVElWRSkge1xuICAgICAgICBhYnN0cmFjdERpcmVjdGl2ZXMuYWRkKG5vZGUpO1xuICAgICAgICByZXN1bHQuYWRkKG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGtpbmQgPT09IENsYXNzS2luZC5BTUJJR1VPVVMpIHtcbiAgICAgICAgICBhbWJpZ3VvdXMuYWRkKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHVuZGVjb3JhdGVkQ2xhc3Nlcy5hZGQobm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNvdXJjZUZpbGVzLmZvckVhY2goc291cmNlRmlsZSA9PiBzb3VyY2VGaWxlLmZvckVhY2hDaGlsZCh2aXNpdE5vZGUpKTtcblxuICAgIC8vIFdlIGNvbGxlY3RlZCBhbGwgdW5kZWNvcmF0ZWQgY2xhc3MgZGVjbGFyYXRpb25zIHdoaWNoIGluaGVyaXQgZnJvbSBhYnN0cmFjdCBkaXJlY3RpdmVzLlxuICAgIC8vIEZvciBzdWNoIGFic3RyYWN0IGRpcmVjdGl2ZXMsIHRoZSBkZXJpdmVkIGNsYXNzZXMgYWxzbyBuZWVkIHRvIGJlIG1pZ3JhdGVkLlxuICAgIHVuZGVjb3JhdGVkQ2xhc3Nlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgZm9yIChjb25zdCB7bm9kZTogYmFzZUNsYXNzfSBvZiBmaW5kQmFzZUNsYXNzRGVjbGFyYXRpb25zKG5vZGUsIHRoaXMudHlwZUNoZWNrZXIpKSB7XG4gICAgICAgIC8vIElmIHRoZSB1bmRlY29yYXRlZCBjbGFzcyBpbmhlcml0cyBmcm9tIGEgbm9uLWFic3RyYWN0IGRpcmVjdGl2ZSwgc2tpcCB0aGUgY3VycmVudFxuICAgICAgICAvLyBjbGFzcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHVuZGVjb3JhdGVkIGNsYXNzZXMgd2hpY2ggaW5oZXJpdCBtZXRhZGF0YSBmcm9tIG5vbi1hYnN0cmFjdFxuICAgICAgICAvLyBkaXJlY3RpdmVzIGFyZSBoYW5kbGVkIGluIHRoZSBgdW5kZWNvcmF0ZWQtY2xhc3Nlcy13aXRoLWRpYCBtaWdyYXRpb24gdGhhdCBjb3BpZXNcbiAgICAgICAgLy8gaW5oZXJpdGVkIG1ldGFkYXRhIGludG8gYW4gZXhwbGljaXQgZGVjb3JhdG9yLlxuICAgICAgICBpZiAobm9uQWJzdHJhY3REaXJlY3RpdmVzLmhhcyhiYXNlQ2xhc3MpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoYWJzdHJhY3REaXJlY3RpdmVzLmhhcyhiYXNlQ2xhc3MpKSB7XG4gICAgICAgICAgcmVzdWx0LmFkZChub2RlKTtcbiAgICAgICAgICAvLyBJbiBjYXNlIHRoZSB1bmRlY29yYXRlZCBjbGFzcyBwcmV2aW91c2x5IGNvdWxkIG5vdCBiZSBkZXRlY3RlZCBhcyBkaXJlY3RpdmUsXG4gICAgICAgICAgLy8gcmVtb3ZlIGl0IGZyb20gdGhlIGFtYmlndW91cyBzZXQgYXMgd2Ugbm93IGtub3cgdGhhdCBpdCdzIGEgZ3VhcmFudGVlZCBkaXJlY3RpdmUuXG4gICAgICAgICAgYW1iaWd1b3VzLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtyZXN1bHQsIGFtYmlndW91c307XG4gIH1cblxuICAvKipcbiAgICogQW5hbHl6ZXMgdGhlIGdpdmVuIGNsYXNzIGRlY2xhcmF0aW9uIGJ5IGRldGVybWluaW5nIHdoZXRoZXIgdGhlIGNsYXNzXG4gICAqIGlzIGEgZGlyZWN0aXZlLCBpcyBhbiBhYnN0cmFjdCBkaXJlY3RpdmUsIG9yIHVzZXMgQW5ndWxhciBmZWF0dXJlcy5cbiAgICovXG4gIHByaXZhdGUgX2FuYWx5emVDbGFzc0RlY2xhcmF0aW9uKG5vZGU6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiBBbmFseXplZENsYXNzIHtcbiAgICBjb25zdCBuZ0RlY29yYXRvcnMgPSBub2RlLmRlY29yYXRvcnMgJiYgZ2V0QW5ndWxhckRlY29yYXRvcnModGhpcy50eXBlQ2hlY2tlciwgbm9kZS5kZWNvcmF0b3JzKTtcbiAgICBjb25zdCBraW5kID0gdGhpcy5fZGV0ZXJtaW5lQ2xhc3NLaW5kKG5vZGUpO1xuICAgIGlmIChuZ0RlY29yYXRvcnMgPT09IHVuZGVmaW5lZCB8fCBuZ0RlY29yYXRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge2lzRGlyZWN0aXZlT3JDb21wb25lbnQ6IGZhbHNlLCBpc0Fic3RyYWN0RGlyZWN0aXZlOiBmYWxzZSwga2luZH07XG4gICAgfVxuICAgIGNvbnN0IGRpcmVjdGl2ZURlY29yYXRvciA9IG5nRGVjb3JhdG9ycy5maW5kKCh7bmFtZX0pID0+IG5hbWUgPT09ICdEaXJlY3RpdmUnKTtcbiAgICBjb25zdCBjb21wb25lbnREZWNvcmF0b3IgPSBuZ0RlY29yYXRvcnMuZmluZCgoe25hbWV9KSA9PiBuYW1lID09PSAnQ29tcG9uZW50Jyk7XG4gICAgY29uc3QgaXNBYnN0cmFjdERpcmVjdGl2ZSA9XG4gICAgICAgIGRpcmVjdGl2ZURlY29yYXRvciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2lzQWJzdHJhY3REaXJlY3RpdmUoZGlyZWN0aXZlRGVjb3JhdG9yKTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNEaXJlY3RpdmVPckNvbXBvbmVudDogISFkaXJlY3RpdmVEZWNvcmF0b3IgfHwgISFjb21wb25lbnREZWNvcmF0b3IsXG4gICAgICBpc0Fic3RyYWN0RGlyZWN0aXZlLFxuICAgICAga2luZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBkZWNvcmF0b3IgcmVzb2x2ZXMgdG8gYW4gYWJzdHJhY3QgZGlyZWN0aXZlLiBBbiBkaXJlY3RpdmUgaXNcbiAgICogY29uc2lkZXJlZCBcImFic3RyYWN0XCIgaWYgdGhlcmUgaXMgbm8gc2VsZWN0b3Igc3BlY2lmaWVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfaXNBYnN0cmFjdERpcmVjdGl2ZSh7bm9kZX06IE5nRGVjb3JhdG9yKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWV0YWRhdGFBcmdzID0gbm9kZS5leHByZXNzaW9uLmFyZ3VtZW50cztcbiAgICBpZiAobWV0YWRhdGFBcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IG1ldGFkYXRhRXhwciA9IHVud3JhcEV4cHJlc3Npb24obWV0YWRhdGFBcmdzWzBdKTtcbiAgICBpZiAoIXRzLmlzT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24obWV0YWRhdGFFeHByKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBtZXRhZGF0YSA9IHJlZmxlY3RPYmplY3RMaXRlcmFsKG1ldGFkYXRhRXhwcik7XG4gICAgaWYgKCFtZXRhZGF0YS5oYXMoJ3NlbGVjdG9yJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLnBhcnRpYWxFdmFsdWF0b3IuZXZhbHVhdGUobWV0YWRhdGEuZ2V0KCdzZWxlY3RvcicpISk7XG4gICAgcmV0dXJuIHNlbGVjdG9yID09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUga2luZCBvZiBhIGdpdmVuIGNsYXNzIGluIHRlcm1zIG9mIEFuZ3VsYXIuIFRoZSBtZXRob2QgY2hlY2tzXG4gICAqIHdoZXRoZXIgdGhlIGdpdmVuIGNsYXNzIGhhcyBtZW1iZXJzIHRoYXQgaW5kaWNhdGUgdGhlIHVzZSBvZiBBbmd1bGFyIGZlYXR1cmVzLlxuICAgKiBlLmcuIGxpZmVjeWNsZSBob29rcyBvciBkZWNvcmF0ZWQgbWVtYmVycyBsaWtlIGBASW5wdXRgIG9yIGBAT3V0cHV0YCBhcmVcbiAgICogY29uc2lkZXJlZCBBbmd1bGFyIGZlYXR1cmVzLi5cbiAgICovXG4gIHByaXZhdGUgX2RldGVybWluZUNsYXNzS2luZChub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uKTogQ2xhc3NLaW5kIHtcbiAgICBsZXQgdXNhZ2UgPSBDbGFzc0tpbmQuVU5LTk9XTjtcblxuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIG5vZGUubWVtYmVycykge1xuICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gbWVtYmVyLm5hbWUgIT09IHVuZGVmaW5lZCA/IGdldFByb3BlcnR5TmFtZVRleHQobWVtYmVyLm5hbWUpIDogbnVsbDtcblxuICAgICAgLy8gSWYgdGhlIGNsYXNzIGRlY2xhcmVzIGFueSBvZiB0aGUga25vd24gZGlyZWN0aXZlIGxpZmVjeWNsZSBob29rcywgd2UgY2FuXG4gICAgICAvLyBpbW1lZGlhdGVseSBleGl0IHRoZSBsb29wIGFzIHRoZSBjbGFzcyBpcyBndWFyYW50ZWVkIHRvIGJlIGEgZGlyZWN0aXZlLlxuICAgICAgaWYgKHByb3BlcnR5TmFtZSAhPT0gbnVsbCAmJiBESVJFQ1RJVkVfTElGRUNZQ0xFX0hPT0tTLmhhcyhwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgIHJldHVybiBDbGFzc0tpbmQuRElSRUNUSVZFO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZ0RlY29yYXRvcnMgPSBtZW1iZXIuZGVjb3JhdG9ycyAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICBnZXRBbmd1bGFyRGVjb3JhdG9ycyh0aGlzLnR5cGVDaGVja2VyLCBtZW1iZXIuZGVjb3JhdG9ycykgOlxuICAgICAgICAgIFtdO1xuICAgICAgZm9yIChjb25zdCB7bmFtZX0gb2YgbmdEZWNvcmF0b3JzKSB7XG4gICAgICAgIGlmIChESVJFQ1RJVkVfRklFTERfREVDT1JBVE9SUy5oYXMobmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gQ2xhc3NLaW5kLkRJUkVDVElWRTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgY2xhc3MgZGVjbGFyZXMgYW55IG9mIHRoZSBsaWZlY3ljbGUgaG9va3MgdGhhdCBkbyBub3QgZ3VhcmFudGVlIHRoYXRcbiAgICAgIC8vIHRoZSBnaXZlbiBjbGFzcyBpcyBhIGRpcmVjdGl2ZSwgdXBkYXRlIHRoZSBraW5kIGFuZCBjb250aW51ZSBsb29raW5nIGZvciBvdGhlclxuICAgICAgLy8gbWVtYmVycyB0aGF0IHdvdWxkIHVudmVpbCBhIG1vcmUgc3BlY2lmaWMga2luZCAoaS5lLiBiZWluZyBhIGRpcmVjdGl2ZSkuXG4gICAgICBpZiAocHJvcGVydHlOYW1lICE9PSBudWxsICYmIEFNQklHVU9VU19MSUZFQ1lDTEVfSE9PS1MuaGFzKHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgdXNhZ2UgPSBDbGFzc0tpbmQuQU1CSUdVT1VTO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1c2FnZTtcbiAgfVxufVxuIl19
|
|
300
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zY2hlbWF0aWNzL21pZ3JhdGlvbnMvdW5kZWNvcmF0ZWQtY2xhc3Nlcy13aXRoLWRlY29yYXRlZC1maWVsZHMvdHJhbnNmb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQUVILHlGQUFtRjtJQUNuRiwyRUFBMEc7SUFDMUcsaUNBQWlDO0lBRWpDLGtGQUF5RDtJQUN6RCxnRkFBNEU7SUFDNUUsbUdBQW1GO0lBQ25GLG1GQUFrRTtJQUNsRSwyRkFBeUU7SUFJekU7OztPQUdHO0lBQ0gsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGFBQWE7UUFDaEcsY0FBYztLQUNmLENBQUMsQ0FBQztJQUVIOzs7T0FHRztJQUNILE1BQU0seUJBQXlCLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDeEMsYUFBYSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CO1FBQy9FLG9CQUFvQixFQUFFLHVCQUF1QjtLQUM5QyxDQUFDLENBQUM7SUFFSDs7O09BR0c7SUFDSCxNQUFNLHlCQUF5QixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUUzRCxxRUFBcUU7SUFDckUsSUFBSyxZQUlKO0lBSkQsV0FBSyxZQUFZO1FBQ2YseURBQVMsQ0FBQTtRQUNULHlEQUFTLENBQUE7UUFDVCxxREFBTyxDQUFBO0lBQ1QsQ0FBQyxFQUpJLFlBQVksS0FBWixZQUFZLFFBSWhCO0lBRUQsd0RBQXdEO0lBQ3hELElBQUssZUFNSjtJQU5ELFdBQUssZUFBZTtRQUNsQiwrREFBUyxDQUFBO1FBQ1QsK0RBQVMs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b0JBQ3hFLEtBQUssR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO2lCQUNoQzthQUNGO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQ7Ozs7O1dBS0c7UUFDSywyQkFBMkIsQ0FBQyxJQUF5QjtZQUMzRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEMsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlFLElBQUksZUFBZSxLQUFLLFNBQVMsRUFBRTtnQkFDakMsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FDdkIsQ0FBQyxFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLHVCQUF1QjtnQkFDaEUsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7S0FDRjtJQTlQRCx3R0E4UEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtQYXJ0aWFsRXZhbHVhdG9yfSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL3BhcnRpYWxfZXZhbHVhdG9yJztcbmltcG9ydCB7cmVmbGVjdE9iamVjdExpdGVyYWwsIFR5cGVTY3JpcHRSZWZsZWN0aW9uSG9zdH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9yZWZsZWN0aW9uJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0ltcG9ydE1hbmFnZXJ9IGZyb20gJy4uLy4uL3V0aWxzL2ltcG9ydF9tYW5hZ2VyJztcbmltcG9ydCB7Z2V0QW5ndWxhckRlY29yYXRvcnMsIE5nRGVjb3JhdG9yfSBmcm9tICcuLi8uLi91dGlscy9uZ19kZWNvcmF0b3JzJztcbmltcG9ydCB7ZmluZEJhc2VDbGFzc0RlY2xhcmF0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9maW5kX2Jhc2VfY2xhc3Nlcyc7XG5pbXBvcnQge3Vud3JhcEV4cHJlc3Npb259IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzY3JpcHQvZnVuY3Rpb25zJztcbmltcG9ydCB7Z2V0UHJvcGVydHlOYW1lVGV4dH0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9wcm9wZXJ0eV9uYW1lJztcblxuaW1wb3J0IHtVcGRhdGVSZWNvcmRlcn0gZnJvbSAnLi91cGRhdGVfcmVjb3JkZXInO1xuXG4vKipcbiAqIFNldCBvZiBrbm93biBkZWNvcmF0b3JzIHRoYXQgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCBjbGFzcyBuZWVkcyBhIGRpcmVjdGl2ZVxuICogZGVmaW5pdGlvbi4gVGhlc2UgZGVjb3JhdG9ycyBhcmUgYWx3YXlzIHNwZWNpZmljIHRvIGRpcmVjdGl2ZXMuXG4gKi9cbmNvbnN0IERJUkVDVElWRV9GSUVMRF9ERUNPUkFUT1JTID0gbmV3IFNldChbXG4gICdJbnB1dCcsICdPdXRwdXQnLCAnVmlld0NoaWxkJywgJ1ZpZXdDaGlsZHJlbicsICdDb250ZW50Q2hpbGQnLCAnQ29udGVudENoaWxkcmVuJywgJ0hvc3RCaW5kaW5nJyxcbiAgJ0hvc3RMaXN0ZW5lcidcbl0pO1xuXG4vKipcbiAqIFNldCBvZiBrbm93biBsaWZlY3ljbGUgaG9va3MgdGhhdCBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IGNsYXNzIG5lZWRzIGEgZGlyZWN0aXZlXG4gKiBkZWZpbml0aW9uLiBUaGVzZSBsaWZlY3ljbGUgaG9va3MgYXJlIGFsd2F5cyBzcGVjaWZpYyB0byBkaXJlY3RpdmVzLlxuICovXG5jb25zdCBESVJFQ1RJVkVfTElGRUNZQ0xFX0hPT0tTID0gbmV3IFNldChbXG4gICduZ09uQ2hhbmdlcycsICduZ09uSW5pdCcsICduZ0RvQ2hlY2snLCAnbmdBZnRlclZpZXdJbml0JywgJ25nQWZ0ZXJWaWV3Q2hlY2tlZCcsXG4gICduZ0FmdGVyQ29udGVudEluaXQnLCAnbmdBZnRlckNvbnRlbnRDaGVja2VkJ1xuXSk7XG5cbi8qKlxuICogU2V0IG9mIGtub3duIGxpZmVjeWNsZSBob29rcyB0aGF0IGluZGljYXRlIHRoYXQgYSBnaXZlbiBjbGFzcyB1c2VzIEFuZ3VsYXJcbiAqIGZlYXR1cmVzLCBidXQgaXQncyBhbWJpZ3VvdXMgd2hldGhlciBpdCBpcyBhIGRpcmVjdGl2ZSBvciBzZXJ2aWNlLlxuICovXG5jb25zdCBBTUJJR1VPVVNfTElGRUNZQ0xFX0hPT0tTID0gbmV3IFNldChbJ25nT25EZXN0cm95J10pO1xuXG4vKiogRGVzY3JpYmVzIGhvdyBhIGdpdmVuIGNsYXNzIGlzIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgQW5ndWxhci4gKi9cbmVudW0gSW5mZXJyZWRLaW5kIHtcbiAgRElSRUNUSVZFLFxuICBBTUJJR1VPVVMsXG4gIFVOS05PV04sXG59XG5cbi8qKiBEZXNjcmliZXMgcG9zc2libGUgdHlwZXMgb2YgQW5ndWxhciBkZWNsYXJhdGlvbnMuICovXG5lbnVtIERlY2xhcmF0aW9uVHlwZSB7XG4gIERJUkVDVElWRSxcbiAgQ09NUE9ORU5ULFxuICBBQlNUUkFDVF9ESVJFQ1RJVkUsXG4gIFBJUEUsXG4gIElOSkVDVEFCTEUsXG59XG5cbi8qKiBBbmFseXplZCBjbGFzcyBkZWNsYXJhdGlvbi4gKi9cbmludGVyZmFjZSBBbmFseXplZENsYXNzIHtcbiAgLyoqIFR5cGUgb2YgZGVjbGFyYXRpb24gdGhhdCBpcyBkZXRlcm1pbmVkIHRocm91Z2ggYW4gYXBwbGllZCBkZWNvcmF0b3IuICovXG4gIGRlY29yYXRlZFR5cGU6IERlY2xhcmF0aW9uVHlwZXxudWxsO1xuICAvKiogSW5mZXJyZWQgY2xhc3Mga2luZCBpbiB0ZXJtcyBvZiBBbmd1bGFyLiAqL1xuICBpbmZlcnJlZEtpbmQ6IEluZmVycmVkS2luZDtcbn1cblxuaW50ZXJmYWNlIEFuYWx5c2lzRmFpbHVyZSB7XG4gIG5vZGU6IHRzLk5vZGU7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqIFRPRE8gbWVzc2FnZSB0aGF0IGlzIGFkZGVkIHRvIGFtYmlndW91cyBjbGFzc2VzIHVzaW5nIEFuZ3VsYXIgZmVhdHVyZXMuICovXG5jb25zdCBBTUJJR1VPVVNfQ0xBU1NfVE9ETyA9ICdBZGQgQW5ndWxhciBkZWNvcmF0b3IuJztcblxuZXhwb3J0IGNsYXNzIFVuZGVjb3JhdGVkQ2xhc3Nlc1dpdGhEZWNvcmF0ZWRGaWVsZHNUcmFuc2Zvcm0ge1xuICBwcml2YXRlIHByaW50ZXIgPSB0cy5jcmVhdGVQcmludGVyKCk7XG4gIHByaXZhdGUgaW1wb3J0TWFuYWdlciA9IG5ldyBJbXBvcnRNYW5hZ2VyKHRoaXMuZ2V0VXBkYXRlUmVjb3JkZXIsIHRoaXMucHJpbnRlcik7XG4gIHByaXZhdGUgcmVmbGVjdGlvbkhvc3QgPSBuZXcgVHlwZVNjcmlwdFJlZmxlY3Rpb25Ib3N0KHRoaXMudHlwZUNoZWNrZXIpO1xuICBwcml2YXRlIHBhcnRpYWxFdmFsdWF0b3IgPSBuZXcgUGFydGlhbEV2YWx1YXRvcih0aGlzLnJlZmxlY3Rpb25Ib3N0LCB0aGlzLnR5cGVDaGVja2VyLCBudWxsKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuICAgICAgcHJpdmF0ZSBnZXRVcGRhdGVSZWNvcmRlcjogKHNmOiB0cy5Tb3VyY2VGaWxlKSA9PiBVcGRhdGVSZWNvcmRlcikge31cblxuICAvKipcbiAgICogTWlncmF0ZXMgdGhlIHNwZWNpZmllZCBzb3VyY2UgZmlsZXMuIFRoZSB0cmFuc2Zvcm0gYWRkcyB0aGUgYWJzdHJhY3QgYEBEaXJlY3RpdmVgXG4gICAqIGRlY29yYXRvciB0byB1bmRlY29yYXRlZCBjbGFzc2VzIHRoYXQgdXNlIEFuZ3VsYXIgZmVhdHVyZXMuIENsYXNzIG1lbWJlcnMgd2hpY2hcbiAgICogYXJlIGRlY29yYXRlZCB3aXRoIGFueSBBbmd1bGFyIGRlY29yYXRvciwgb3IgY2xhc3MgbWVtYmVycyBmb3IgbGlmZWN5Y2xlIGhvb2tzIGFyZVxuICAgKiBpbmRpY2F0aW5nIHRoYXQgYSBnaXZlbiBjbGFzcyB1c2VzIEFuZ3VsYXIgZmVhdHVyZXMuIGh0dHBzOi8vaGFja21kLmlvL3Z1UWZhdnpmUkc2S1VDdFU3b0tfRUFcbiAgICovXG4gIG1pZ3JhdGUoc291cmNlRmlsZXM6IHRzLlNvdXJjZUZpbGVbXSk6IEFuYWx5c2lzRmFpbHVyZVtdIHtcbiAgICBjb25zdCB7ZGV0ZWN0ZWRBYnN0cmFjdERpcmVjdGl2ZXMsIGFtYmlndW91c0NsYXNzZXN9ID1cbiAgICAgICAgdGhpcy5fZmluZFVuZGVjb3JhdGVkQWJzdHJhY3REaXJlY3RpdmVzKHNvdXJjZUZpbGVzKTtcblxuICAgIGRldGVjdGVkQWJzdHJhY3REaXJlY3RpdmVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VGaWxlID0gbm9kZS5nZXRTb3VyY2VGaWxlKCk7XG4gICAgICBjb25zdCByZWNvcmRlciA9IHRoaXMuZ2V0VXBkYXRlUmVjb3JkZXIoc291cmNlRmlsZSk7XG4gICAgICBjb25zdCBkaXJlY3RpdmVFeHByID1cbiAgICAgICAgICB0aGlzLmltcG9ydE1hbmFnZXIuYWRkSW1wb3J0VG9Tb3VyY2VGaWxlKHNvdXJjZUZpbGUsICdEaXJlY3RpdmUnLCAnQGFuZ3VsYXIvY29yZScpO1xuICAgICAgY29uc3QgZGVjb3JhdG9yRXhwciA9IHRzLmNyZWF0ZURlY29yYXRvcih0cy5jcmVhdGVDYWxsKGRpcmVjdGl2ZUV4cHIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKSk7XG4gICAgICByZWNvcmRlci5hZGRDbGFzc0RlY29yYXRvcihcbiAgICAgICAgICBub2RlLCB0aGlzLnByaW50ZXIucHJpbnROb2RlKHRzLkVtaXRIaW50LlVuc3BlY2lmaWVkLCBkZWNvcmF0b3JFeHByLCBzb3VyY2VGaWxlKSk7XG4gICAgfSk7XG5cbiAgICAvLyBBbWJpZ3VvdXMgY2xhc3NlcyBjbGVhcmx5IHVzZSBBbmd1bGFyIGZlYXR1cmVzLCBidXQgdGhlIG1pZ3JhdGlvbiBpcyB1bmFibGUgdG9cbiAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGUgY2xhc3MgaXMgdXNlZCBhcyBkaXJlY3RpdmUsIHNlcnZpY2Ugb3IgcGlwZS4gVGhlIG1pZ3JhdGlvblxuICAgIC8vIGNvdWxkIHBvdGVudGlhbGx5IGRldGVybWluZSB0aGUgdHlwZSBieSBjaGVja2luZyBOZ01vZHVsZSBkZWZpbml0aW9ucyBvciBpbmhlcml0YW5jZVxuICAgIC8vIG9mIG90aGVyIGtub3duIGRlY2xhcmF0aW9ucywgYnV0IHRoaXMgaXMgb3V0IG9mIHNjb3BlIGFuZCBhIFRPRE8vZmFpbHVyZSBpcyBzdWZmaWNpZW50LlxuICAgIHJldHVybiBBcnJheS5mcm9tKGFtYmlndW91c0NsYXNzZXMpLnJlZHVjZSgoZmFpbHVyZXMsIG5vZGUpID0+IHtcbiAgICAgIC8vIElmIHRoZSBjbGFzcyBoYXMgYmVlbiByZXBvcnRlZCBhcyBhbWJpZ3VvdXMgYmVmb3JlLCBza2lwIGFkZGluZyBhIFRPRE8gYW5kXG4gICAgICAvLyBwcmludGluZyBhbiBlcnJvci4gQSBjbGFzcyBjb3VsZCBiZSB2aXNpdGVkIG11bHRpcGxlIHRpbWVzIHdoZW4gaXQncyBwYXJ0XG4gICAgICAvLyBvZiBtdWx0aXBsZSBidWlsZCB0YXJnZXRzIGluIHRoZSBDTEkgcHJvamVjdC5cbiAgICAgIGlmICh0aGlzLl9oYXNCZWVuUmVwb3J0ZWRBc0FtYmlndW91cyhub2RlKSkge1xuICAgICAgICByZXR1cm4gZmFpbHVyZXM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBub2RlLmdldFNvdXJjZUZpbGUoKTtcbiAgICAgIGNvbnN0IHJlY29yZGVyID0gdGhpcy5nZXRVcGRhdGVSZWNvcmRlcihzb3VyY2VGaWxlKTtcblxuICAgICAgLy8gQWRkIGEgVE9ETyB0byB0aGUgY2xhc3MgdGhhdCB1c2VzIEFuZ3VsYXIgZmVhdHVyZXMgYnV0IGlzIG5vdCBkZWNvcmF0ZWQuXG4gICAgICByZWNvcmRlci5hZGRDbGFzc1RvZG8obm9kZSwgQU1CSUdVT1VTX0NMQVNTX1RPRE8pO1xuXG4gICAgICAvLyBBZGQgYW4gZXJyb3IgZm9yIHRoZSBjbGFzcyB0aGF0IHdpbGwgYmUgcHJpbnRlZCBpbiB0aGUgYG5nIHVwZGF0ZWAgb3V0cHV0LlxuICAgICAgcmV0dXJuIGZhaWx1cmVzLmNvbmNhdCh7XG4gICAgICAgIG5vZGUsXG4gICAgICAgIG1lc3NhZ2U6ICdDbGFzcyB1c2VzIEFuZ3VsYXIgZmVhdHVyZXMgYnV0IGNhbm5vdCBiZSBtaWdyYXRlZCBhdXRvbWF0aWNhbGx5LiBQbGVhc2UgJyArXG4gICAgICAgICAgICAnYWRkIGFuIGFwcHJvcHJpYXRlIEFuZ3VsYXIgZGVjb3JhdG9yLidcbiAgICAgIH0pO1xuICAgIH0sIFtdIGFzIEFuYWx5c2lzRmFpbHVyZVtdKTtcbiAgfVxuXG4gIC8qKiBSZWNvcmRzIGFsbCBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIGluIHRoZSBpbXBvcnQgbWFuYWdlci4gKi9cbiAgcmVjb3JkQ2hhbmdlcygpIHtcbiAgICB0aGlzLmltcG9ydE1hbmFnZXIucmVjb3JkQ2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHVuZGVjb3JhdGVkIGFic3RyYWN0IGRpcmVjdGl2ZXMgaW4gdGhlIHNwZWNpZmllZCBzb3VyY2UgZmlsZXMuIEFsc28gcmV0dXJuc1xuICAgKiBhIHNldCBvZiB1bmRlY29yYXRlZCBjbGFzc2VzIHdoaWNoIGNvdWxkIG5vdCBiZSBkZXRlY3RlZCBhcyBndWFyYW50ZWVkIGFic3RyYWN0XG4gICAqIGRpcmVjdGl2ZXMuIFRob3NlIGFyZSBhbWJpZ3VvdXMgYW5kIGNvdWxkIGJlIGVpdGhlciBEaXJlY3RpdmUsIFBpcGUgb3Igc2VydmljZS5cbiAgICovXG4gIHByaXZhdGUgX2ZpbmRVbmRlY29yYXRlZEFic3RyYWN0RGlyZWN0aXZlcyhzb3VyY2VGaWxlczogdHMuU291cmNlRmlsZVtdKSB7XG4gICAgY29uc3QgYW1iaWd1b3VzQ2xhc3NlcyA9IG5ldyBTZXQ8dHMuQ2xhc3NEZWNsYXJhdGlvbj4oKTtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBuZXcgV2Vha01hcDx0cy5DbGFzc0RlY2xhcmF0aW9uLCBEZWNsYXJhdGlvblR5cGU+KCk7XG4gICAgY29uc3QgZGV0ZWN0ZWRBYnN0cmFjdERpcmVjdGl2ZXMgPSBuZXcgU2V0PHRzLkNsYXNzRGVjbGFyYXRpb24+KCk7XG4gICAgY29uc3QgdW5kZWNvcmF0ZWRDbGFzc2VzID0gbmV3IFNldDx0cy5DbGFzc0RlY2xhcmF0aW9uPigpO1xuXG4gICAgY29uc3QgdmlzaXROb2RlID0gKG5vZGU6IHRzLk5vZGUpID0+IHtcbiAgICAgIG5vZGUuZm9yRWFjaENoaWxkKHZpc2l0Tm9kZSk7XG4gICAgICBpZiAoIXRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7aW5mZXJyZWRLaW5kLCBkZWNvcmF0ZWRUeXBlfSA9IHRoaXMuX2FuYWx5emVDbGFzc0RlY2xhcmF0aW9uKG5vZGUpO1xuXG4gICAgICBpZiAoZGVjb3JhdGVkVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBkZWNsYXJhdGlvbnMuc2V0KG5vZGUsIGRlY29yYXRlZFR5cGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmZlcnJlZEtpbmQgPT09IEluZmVycmVkS2luZC5ESVJFQ1RJVkUpIHtcbiAgICAgICAgZGV0ZWN0ZWRBYnN0cmFjdERpcmVjdGl2ZXMuYWRkKG5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChpbmZlcnJlZEtpbmQgPT09IEluZmVycmVkS2luZC5BTUJJR1VPVVMpIHtcbiAgICAgICAgYW1iaWd1b3VzQ2xhc3Nlcy5hZGQobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1bmRlY29yYXRlZENsYXNzZXMuYWRkKG5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzb3VyY2VGaWxlcy5mb3JFYWNoKHNvdXJjZUZpbGUgPT4gc291cmNlRmlsZS5mb3JFYWNoQ2hpbGQodmlzaXROb2RlKSk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgdGhlIGluaGVyaXRhbmNlIG9mIHRoZSBnaXZlbiBzZXQgb2YgY2xhc3Nlcy4gSXQgcmVtb3ZlcyBjbGFzc2VzIGZyb20gdGhlXG4gICAgICogZGV0ZWN0ZWQgYWJzdHJhY3QgZGlyZWN0aXZlcyBzZXQgd2hlbiB0aGV5IGluaGVyaXQgZnJvbSBhIG5vbi1hYnN0cmFjdCBBbmd1bGFyXG4gICAgICogZGVjbGFyYXRpb24uIGUuZy4gYW4gYWJzdHJhY3QgZGlyZWN0aXZlIGNhbiBuZXZlciBleHRlbmQgZnJvbSBhIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIElmIGEgY2xhc3MgaW5oZXJpdHMgZnJvbSBhbiBhYnN0cmFjdCBkaXJlY3RpdmUgdGhvdWdoLCB3ZSB3aWxsIG1pZ3JhdGUgdGhlbSB0b29cbiAgICAgKiBhcyBkZXJpdmVkIGNsYXNzZXMgYWxzbyBuZWVkIHRvIGJlIGRlY29yYXRlZC4gVGhpcyBoYXMgYmVlbiBkb25lIGZvciBhIHNpbXBsZXIgbWVudGFsXG4gICAgICogbW9kZWwgYW5kIHJlZHVjZWQgY29tcGxleGl0eSBpbiB0aGUgQW5ndWxhciBjb21waWxlci4gU2VlIG1pZ3JhdGlvbiBwbGFuIGRvY3VtZW50LlxuICAgICAqL1xuICAgIGNvbnN0IGNoZWNrSW5oZXJpdGFuY2VPZkNsYXNzZXMgPSAoY2xhc3NlczogU2V0PHRzLkNsYXNzRGVjbGFyYXRpb24+KSA9PiB7XG4gICAgICBjbGFzc2VzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qge25vZGU6IGJhc2VDbGFzc30gb2YgZmluZEJhc2VDbGFzc0RlY2xhcmF0aW9ucyhub2RlLCB0aGlzLnR5cGVDaGVja2VyKSkge1xuICAgICAgICAgIGlmICghZGVjbGFyYXRpb25zLmhhcyhiYXNlQ2xhc3MpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSWYgdGhlIHVuZGVjb3JhdGVkIGNsYXNzIGluaGVyaXRzIGZyb20gYW4gYWJzdHJhY3QgZGlyZWN0aXZlLCBhbHdheXMgbWlncmF0ZSBpdC5cbiAgICAgICAgICAvLyBEZXJpdmVkIHVuZGVjb3JhdGVkIGNsYXNzZXMgb2YgYWJzdHJhY3QgZGlyZWN0aXZlcyBhcmUgYWx3YXlzIGFsc28gY29uc2lkZXJlZFxuICAgICAgICAgIC8vIGFic3RyYWN0IGRpcmVjdGl2ZXMgYW5kIG5lZWQgdG8gYmUgZGVjb3JhdGVkIHRvby4gVGhpcyBpcyBuZWNlc3NhcnkgYXMgb3RoZXJ3aXNlXG4gICAgICAgICAgLy8gdGhlIGluaGVyaXRhbmNlIGNoYWluIGNhbm5vdCBiZSByZXNvbHZlZCBieSB0aGUgQW5ndWxhciBjb21waWxlci4gZS5nLiB3aGVuIGl0XG4gICAgICAgICAgLy8gZmxhdHRlbnMgZGlyZWN0aXZlIG1ldGFkYXRhIGZvciB0eXBlIGNoZWNraW5nLiBJbiB0aGUgb3RoZXIgY2FzZSwgd2UgbmV2ZXIgd2FudFxuICAgICAgICAgIC8vIHRvIG1pZ3JhdGUgYSBjbGFzcyBpZiBpdCBleHRlbmRzIGZyb20gYSBub24tYWJzdHJhY3QgQW5ndWxhciBkZWNsYXJhdGlvbi4gVGhhdFxuICAgICAgICAgIC8vIGlzIGFuIHVuc3VwcG9ydGVkIHBhdHRlcm4gYXMgb2YgdjkgYW5kIHdhcyBwcmV2aW91c2x5IGhhbmRsZWQgd2l0aCB0aGVcbiAgICAgICAgICAvLyBgdW5kZWNvcmF0ZWQtY2xhc3Nlcy13aXRoLWRpYCBtaWdyYXRpb24gKHdoaWNoIGNvcGllZCB0aGUgaW5oZXJpdGVkIGRlY29yYXRvcikuXG4gICAgICAgICAgaWYgKGRlY2xhcmF0aW9ucy5nZXQoYmFzZUNsYXNzKSA9PT0gRGVjbGFyYXRpb25UeXBlLkFCU1RSQUNUX0RJUkVDVElWRSkge1xuICAgICAgICAgICAgZGV0ZWN0ZWRBYnN0cmFjdERpcmVjdGl2ZXMuYWRkKG5vZGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZXRlY3RlZEFic3RyYWN0RGlyZWN0aXZlcy5kZWxldGUobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFtYmlndW91c0NsYXNzZXMuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgLy8gQ2hlY2sgaW5oZXJpdGFuY2Ugb2YgYW55IGRldGVjdGVkIGFic3RyYWN0IGRpcmVjdGl2ZS4gV2Ugd2FudCB0byByZW1vdmVcbiAgICAvLyBjbGFzc2VzIHRoYXQgYXJlIG5vdCBlbGlnaWJsZSBhYnN0cmFjdCBkaXJlY3RpdmVzIGR1ZSB0byBpbmhlcml0YW5jZS4gaS5lLlxuICAgIC8vIGlmIGEgY2xhc3MgZXh0ZW5kcyBmcm9tIGEgY29tcG9uZW50LCBpdCBjYW5ub3QgYmUgYSBkZXJpdmVkIGFic3RyYWN0IGRpcmVjdGl2ZS5cbiAgICBjaGVja0luaGVyaXRhbmNlT2ZDbGFzc2VzKGRldGVjdGVkQWJzdHJhY3REaXJlY3RpdmVzKTtcbiAgICAvLyBVcGRhdGUgdGhlIGNsYXNzIGRlY2xhcmF0aW9ucyB0byByZWZsZWN0IHRoZSBkZXRlY3RlZCBhYnN0cmFjdCBkaXJlY3RpdmVzLiBUaGlzIGlzXG4gICAgLy8gdGhlbiB1c2VkIGxhdGVyIHdoZW4gd2UgY2hlY2sgZm9yIHVuZGVjb3JhdGVkIGNsYXNzZXMgdGhhdCBpbmhlcml0IGZyb20gYW4gYWJzdHJhY3RcbiAgICAvLyBkaXJlY3RpdmUgYW5kIG5lZWQgdG8gYmUgZGVjb3JhdGVkLlxuICAgIGRldGVjdGVkQWJzdHJhY3REaXJlY3RpdmVzLmZvckVhY2goXG4gICAgICAgIG4gPT4gZGVjbGFyYXRpb25zLnNldChuLCBEZWNsYXJhdGlvblR5cGUuQUJTVFJBQ1RfRElSRUNUSVZFKSk7XG4gICAgLy8gQ2hlY2sgYW1iaWd1b3VzIGFuZCB1bmRlY29yYXRlZCBjbGFzc2VzIGlmIHRoZXkgaW5oZXJpdCBmcm9tIGFuIGFic3RyYWN0IGRpcmVjdGl2ZS5cbiAgICAvLyBJZiB0aGV5IGRvLCB3ZSB3YW50IHRvIG1pZ3JhdGUgdGhlbSB0b28uIFNlZSBmdW5jdGlvbiBkZWZpbml0aW9uIGZvciBtb3JlIGRldGFpbHMuXG4gICAgY2hlY2tJbmhlcml0YW5jZU9mQ2xhc3NlcyhhbWJpZ3VvdXNDbGFzc2VzKTtcbiAgICBjaGVja0luaGVyaXRhbmNlT2ZDbGFzc2VzKHVuZGVjb3JhdGVkQ2xhc3Nlcyk7XG5cbiAgICByZXR1cm4ge2RldGVjdGVkQWJzdHJhY3REaXJlY3RpdmVzLCBhbWJpZ3VvdXNDbGFzc2VzfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmFseXplcyB0aGUgZ2l2ZW4gY2xhc3MgZGVjbGFyYXRpb24gYnkgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgY2xhc3NcbiAgICogaXMgYSBkaXJlY3RpdmUsIGlzIGFuIGFic3RyYWN0IGRpcmVjdGl2ZSwgb3IgdXNlcyBBbmd1bGFyIGZlYXR1cmVzLlxuICAgKi9cbiAgcHJpdmF0ZSBfYW5hbHl6ZUNsYXNzRGVjbGFyYXRpb24obm9kZTogdHMuQ2xhc3NEZWNsYXJhdGlvbik6IEFuYWx5emVkQ2xhc3Mge1xuICAgIGNvbnN0IG5nRGVjb3JhdG9ycyA9IG5vZGUuZGVjb3JhdG9ycyAmJiBnZXRBbmd1bGFyRGVjb3JhdG9ycyh0aGlzLnR5cGVDaGVja2VyLCBub2RlLmRlY29yYXRvcnMpO1xuICAgIGNvbnN0IGluZmVycmVkS2luZCA9IHRoaXMuX2RldGVybWluZUNsYXNzS2luZChub2RlKTtcbiAgICBpZiAobmdEZWNvcmF0b3JzID09PSB1bmRlZmluZWQgfHwgbmdEZWNvcmF0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtkZWNvcmF0ZWRUeXBlOiBudWxsLCBpbmZlcnJlZEtpbmR9O1xuICAgIH1cbiAgICBjb25zdCBkaXJlY3RpdmVEZWNvcmF0b3IgPSBuZ0RlY29yYXRvcnMuZmluZCgoe25hbWV9KSA9PiBuYW1lID09PSAnRGlyZWN0aXZlJyk7XG4gICAgY29uc3QgY29tcG9uZW50RGVjb3JhdG9yID0gbmdEZWNvcmF0b3JzLmZpbmQoKHtuYW1lfSkgPT4gbmFtZSA9PT0gJ0NvbXBvbmVudCcpO1xuICAgIGNvbnN0IHBpcGVEZWNvcmF0b3IgPSBuZ0RlY29yYXRvcnMuZmluZCgoe25hbWV9KSA9PiBuYW1lID09PSAnUGlwZScpO1xuICAgIGNvbnN0IGluamVjdGFibGVEZWNvcmF0b3IgPSBuZ0RlY29yYXRvcnMuZmluZCgoe25hbWV9KSA9PiBuYW1lID09PSAnSW5qZWN0YWJsZScpO1xuICAgIGNvbnN0IGlzQWJzdHJhY3REaXJlY3RpdmUgPVxuICAgICAgICBkaXJlY3RpdmVEZWNvcmF0b3IgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9pc0Fic3RyYWN0RGlyZWN0aXZlKGRpcmVjdGl2ZURlY29yYXRvcik7XG5cbiAgICBsZXQgZGVjb3JhdGVkVHlwZTogRGVjbGFyYXRpb25UeXBlfG51bGwgPSBudWxsO1xuICAgIGlmIChpc0Fic3RyYWN0RGlyZWN0aXZlKSB7XG4gICAgICBkZWNvcmF0ZWRUeXBlID0gRGVjbGFyYXRpb25UeXBlLkFCU1RSQUNUX0RJUkVDVElWRTtcbiAgICB9IGVsc2UgaWYgKGNvbXBvbmVudERlY29yYXRvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWNvcmF0ZWRUeXBlID0gRGVjbGFyYXRpb25UeXBlLkNPTVBPTkVOVDtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGl2ZURlY29yYXRvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWNvcmF0ZWRUeXBlID0gRGVjbGFyYXRpb25UeXBlLkRJUkVDVElWRTtcbiAgICB9IGVsc2UgaWYgKHBpcGVEZWNvcmF0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVjb3JhdGVkVHlwZSA9IERlY2xhcmF0aW9uVHlwZS5QSVBFO1xuICAgIH0gZWxzZSBpZiAoaW5qZWN0YWJsZURlY29yYXRvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWNvcmF0ZWRUeXBlID0gRGVjbGFyYXRpb25UeXBlLklOSkVDVEFCTEU7XG4gICAgfVxuICAgIHJldHVybiB7ZGVjb3JhdGVkVHlwZSwgaW5mZXJyZWRLaW5kfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gZGVjb3JhdG9yIHJlc29sdmVzIHRvIGFuIGFic3RyYWN0IGRpcmVjdGl2ZS4gQW4gZGlyZWN0aXZlIGlzXG4gICAqIGNvbnNpZGVyZWQgXCJhYnN0cmFjdFwiIGlmIHRoZXJlIGlzIG5vIHNlbGVjdG9yIHNwZWNpZmllZC5cbiAgICovXG4gIHByaXZhdGUgX2lzQWJzdHJhY3REaXJlY3RpdmUoe25vZGV9OiBOZ0RlY29yYXRvcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1ldGFkYXRhQXJncyA9IG5vZGUuZXhwcmVzc2lvbi5hcmd1bWVudHM7XG4gICAgaWYgKG1ldGFkYXRhQXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBtZXRhZGF0YUV4cHIgPSB1bndyYXBFeHByZXNzaW9uKG1ldGFkYXRhQXJnc1swXSk7XG4gICAgaWYgKCF0cy5pc09iamVjdExpdGVyYWxFeHByZXNzaW9uKG1ldGFkYXRhRXhwcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbWV0YWRhdGEgPSByZWZsZWN0T2JqZWN0TGl0ZXJhbChtZXRhZGF0YUV4cHIpO1xuICAgIGlmICghbWV0YWRhdGEuaGFzKCdzZWxlY3RvcicpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5wYXJ0aWFsRXZhbHVhdG9yLmV2YWx1YXRlKG1ldGFkYXRhLmdldCgnc2VsZWN0b3InKSEpO1xuICAgIHJldHVybiBzZWxlY3RvciA9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIGtpbmQgb2YgYSBnaXZlbiBjbGFzcyBpbiB0ZXJtcyBvZiBBbmd1bGFyLiBUaGUgbWV0aG9kIGNoZWNrc1xuICAgKiB3aGV0aGVyIHRoZSBnaXZlbiBjbGFzcyBoYXMgbWVtYmVycyB0aGF0IGluZGljYXRlIHRoZSB1c2Ugb2YgQW5ndWxhciBmZWF0dXJlcy5cbiAgICogZS5nLiBsaWZlY3ljbGUgaG9va3Mgb3IgZGVjb3JhdGVkIG1lbWJlcnMgbGlrZSBgQElucHV0YCBvciBgQE91dHB1dGAgYXJlXG4gICAqIGNvbnNpZGVyZWQgQW5ndWxhciBmZWF0dXJlcy4uXG4gICAqL1xuICBwcml2YXRlIF9kZXRlcm1pbmVDbGFzc0tpbmQobm9kZTogdHMuQ2xhc3NEZWNsYXJhdGlvbik6IEluZmVycmVkS2luZCB7XG4gICAgbGV0IHVzYWdlID0gSW5mZXJyZWRLaW5kLlVOS05PV047XG5cbiAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBub2RlLm1lbWJlcnMpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IG1lbWJlci5uYW1lICE9PSB1bmRlZmluZWQgPyBnZXRQcm9wZXJ0eU5hbWVUZXh0KG1lbWJlci5uYW1lKSA6IG51bGw7XG5cbiAgICAgIC8vIElmIHRoZSBjbGFzcyBkZWNsYXJlcyBhbnkgb2YgdGhlIGtub3duIGRpcmVjdGl2ZSBsaWZlY3ljbGUgaG9va3MsIHdlIGNhblxuICAgICAgLy8gaW1tZWRpYXRlbHkgZXhpdCB0aGUgbG9vcCBhcyB0aGUgY2xhc3MgaXMgZ3VhcmFudGVlZCB0byBiZSBhIGRpcmVjdGl2ZS5cbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgIT09IG51bGwgJiYgRElSRUNUSVZFX0xJRkVDWUNMRV9IT09LUy5oYXMocHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gSW5mZXJyZWRLaW5kLkRJUkVDVElWRTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmdEZWNvcmF0b3JzID0gbWVtYmVyLmRlY29yYXRvcnMgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgZ2V0QW5ndWxhckRlY29yYXRvcnModGhpcy50eXBlQ2hlY2tlciwgbWVtYmVyLmRlY29yYXRvcnMpIDpcbiAgICAgICAgICBbXTtcbiAgICAgIGZvciAoY29uc3Qge25hbWV9IG9mIG5nRGVjb3JhdG9ycykge1xuICAgICAgICBpZiAoRElSRUNUSVZFX0ZJRUxEX0RFQ09SQVRPUlMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIEluZmVycmVkS2luZC5ESVJFQ1RJVkU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGNsYXNzIGRlY2xhcmVzIGFueSBvZiB0aGUgbGlmZWN5Y2xlIGhvb2tzIHRoYXQgZG8gbm90IGd1YXJhbnRlZSB0aGF0XG4gICAgICAvLyB0aGUgZ2l2ZW4gY2xhc3MgaXMgYSBkaXJlY3RpdmUsIHVwZGF0ZSB0aGUga2luZCBhbmQgY29udGludWUgbG9va2luZyBmb3Igb3RoZXJcbiAgICAgIC8vIG1lbWJlcnMgdGhhdCB3b3VsZCB1bnZlaWwgYSBtb3JlIHNwZWNpZmljIGtpbmQgKGkuZS4gYmVpbmcgYSBkaXJlY3RpdmUpLlxuICAgICAgaWYgKHByb3BlcnR5TmFtZSAhPT0gbnVsbCAmJiBBTUJJR1VPVVNfTElGRUNZQ0xFX0hPT0tTLmhhcyhwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgIHVzYWdlID0gSW5mZXJyZWRLaW5kLkFNQklHVU9VUztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdXNhZ2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBjbGFzcyBoYXMgYmVlbiByZXBvcnRlZCBhcyBhbWJpZ3VvdXMgaW4gcHJldmlvdXNcbiAgICogbWlncmF0aW9uIHJ1bi4gZS5nLiB3aGVuIGJ1aWxkIHRhcmdldHMgYXJlIG1pZ3JhdGVkIGZpcnN0LCBhbmQgdGhlbiB0ZXN0XG4gICAqIHRhcmdldHMgdGhhdCBoYXZlIGFuIG92ZXJsYXAgd2l0aCBidWlsZCBzb3VyY2UgZmlsZXMsIHRoZSBzYW1lIGNsYXNzXG4gICAqIGNvdWxkIGJlIGRldGVjdGVkIGFzIGFtYmlndW91cy5cbiAgICovXG4gIHByaXZhdGUgX2hhc0JlZW5SZXBvcnRlZEFzQW1iaWd1b3VzKG5vZGU6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBzb3VyY2VGaWxlID0gbm9kZS5nZXRTb3VyY2VGaWxlKCk7XG4gICAgY29uc3QgbGVhZGluZ0NvbW1lbnRzID0gdHMuZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXMoc291cmNlRmlsZS50ZXh0LCBub2RlLnBvcyk7XG4gICAgaWYgKGxlYWRpbmdDb21tZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBsZWFkaW5nQ29tbWVudHMuc29tZShcbiAgICAgICAgKHtraW5kLCBwb3MsIGVuZH0pID0+IGtpbmQgPT09IHRzLlN5bnRheEtpbmQuU2luZ2xlTGluZUNvbW1lbnRUcml2aWEgJiZcbiAgICAgICAgICAgIHNvdXJjZUZpbGUudGV4dC5zdWJzdHJpbmcocG9zLCBlbmQpLmluY2x1ZGVzKGBUT0RPOiAke0FNQklHVU9VU19DTEFTU19UT0RPfWApKTtcbiAgfVxufVxuIl19
|
package/src/r3_symbols.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v10.0.
|
|
2
|
+
* @license Angular v10.0.4
|
|
3
3
|
* (c) 2010-2020 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -18,10 +18,13 @@ declare interface AbstractType<T> extends Function {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
|
-
* Base class
|
|
21
|
+
* Base class that provides change detection functionality.
|
|
22
22
|
* A change-detection tree collects all views that are to be checked for changes.
|
|
23
23
|
* Use the methods to add and remove views from the tree, initiate change-detection,
|
|
24
|
-
* and explicitly mark views as _dirty_, meaning that they have changed and need to be
|
|
24
|
+
* and explicitly mark views as _dirty_, meaning that they have changed and need to be re-rendered.
|
|
25
|
+
*
|
|
26
|
+
* @see [Using change detection hooks](guide/lifecycle-hooks#using-change-detection-hooks)
|
|
27
|
+
* @see [Defining custom change detection](guide/lifecycle-hooks#defining-custom-change-detection)
|
|
25
28
|
*
|
|
26
29
|
* @usageNotes
|
|
27
30
|
*
|
|
@@ -691,25 +694,23 @@ declare abstract class NgModuleFactory_2<T> {
|
|
|
691
694
|
}
|
|
692
695
|
|
|
693
696
|
/**
|
|
694
|
-
* Represents an instance of an NgModule created
|
|
695
|
-
*
|
|
696
|
-
* `NgModuleRef` provides access to the NgModule Instance as well other objects related to this
|
|
697
|
-
* NgModule Instance.
|
|
697
|
+
* Represents an instance of an `NgModule` created by an `NgModuleFactory`.
|
|
698
|
+
* Provides access to the `NgModule` instance and related objects.
|
|
698
699
|
*
|
|
699
700
|
* @publicApi
|
|
700
701
|
*/
|
|
701
702
|
declare abstract class NgModuleRef<T> {
|
|
702
703
|
/**
|
|
703
|
-
* The injector that contains all of the providers of the NgModule
|
|
704
|
+
* The injector that contains all of the providers of the `NgModule`.
|
|
704
705
|
*/
|
|
705
706
|
abstract get injector(): Injector;
|
|
706
707
|
/**
|
|
707
|
-
* The
|
|
708
|
+
* The resolver that can retrieve the component factories
|
|
708
709
|
* declared in the `entryComponents` property of the module.
|
|
709
710
|
*/
|
|
710
711
|
abstract get componentFactoryResolver(): ComponentFactoryResolver;
|
|
711
712
|
/**
|
|
712
|
-
* The NgModule instance.
|
|
713
|
+
* The `NgModule` instance.
|
|
713
714
|
*/
|
|
714
715
|
abstract get instance(): T;
|
|
715
716
|
/**
|
|
@@ -717,7 +718,7 @@ declare abstract class NgModuleRef<T> {
|
|
|
717
718
|
*/
|
|
718
719
|
abstract destroy(): void;
|
|
719
720
|
/**
|
|
720
|
-
*
|
|
721
|
+
* Registers a callback to be executed when the module is destroyed.
|
|
721
722
|
*/
|
|
722
723
|
abstract onDestroy(callback: () => void): void;
|
|
723
724
|
}
|
|
@@ -835,7 +836,7 @@ declare type StaticProvider = ValueProvider | ExistingProvider | StaticClassProv
|
|
|
835
836
|
*
|
|
836
837
|
* Represents a type that a Component or other object is instances of.
|
|
837
838
|
*
|
|
838
|
-
* An example of a `Type` is `MyCustomComponent` class, which in JavaScript is
|
|
839
|
+
* An example of a `Type` is `MyCustomComponent` class, which in JavaScript is represented by
|
|
839
840
|
* the `MyCustomComponent` constructor function.
|
|
840
841
|
*
|
|
841
842
|
* @publicApi
|
|
@@ -888,12 +889,9 @@ declare interface ValueSansProvider {
|
|
|
888
889
|
}
|
|
889
890
|
|
|
890
891
|
/**
|
|
891
|
-
* Represents an Angular [view](guide/glossary#view)
|
|
892
|
-
* specifically the [host view](guide/glossary#view-tree) that is defined by a component.
|
|
893
|
-
* Also serves as the base class
|
|
894
|
-
* that adds destroy methods for [embedded views](guide/glossary#view-tree).
|
|
892
|
+
* Represents an Angular [view](guide/glossary#view "Definition").
|
|
895
893
|
*
|
|
896
|
-
* @see
|
|
894
|
+
* @see {@link ChangeDetectorRef#usage-notes Change detection usage}
|
|
897
895
|
*
|
|
898
896
|
* @publicApi
|
|
899
897
|
*/
|
package/testing/testing.d.ts
CHANGED
package/testing.d.ts
CHANGED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Indicates that the result of a {@link Pipe} transformation has changed even though the
|
|
10
|
-
* reference has not changed.
|
|
11
|
-
*
|
|
12
|
-
* Wrapped values are unwrapped automatically during the change detection, and the unwrapped value
|
|
13
|
-
* is stored.
|
|
14
|
-
*
|
|
15
|
-
* Example:
|
|
16
|
-
*
|
|
17
|
-
* ```
|
|
18
|
-
* if (this._latestValue === this._latestReturnedValue) {
|
|
19
|
-
* return this._latestReturnedValue;
|
|
20
|
-
* } else {
|
|
21
|
-
* this._latestReturnedValue = this._latestValue;
|
|
22
|
-
* return WrappedValue.wrap(this._latestValue); // this will force update
|
|
23
|
-
* }
|
|
24
|
-
* ```
|
|
25
|
-
*
|
|
26
|
-
* @publicApi
|
|
27
|
-
*/
|
|
28
|
-
export class WrappedValue {
|
|
29
|
-
constructor(value) {
|
|
30
|
-
this.wrapped = value;
|
|
31
|
-
}
|
|
32
|
-
/** Creates a wrapped value. */
|
|
33
|
-
static wrap(value) {
|
|
34
|
-
return new WrappedValue(value);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Returns the underlying value of a wrapped value.
|
|
38
|
-
* Returns the given `value` when it is not wrapped.
|
|
39
|
-
**/
|
|
40
|
-
static unwrap(value) {
|
|
41
|
-
return WrappedValue.isWrapped(value) ? value.wrapped : value;
|
|
42
|
-
}
|
|
43
|
-
/** Returns true if `value` is a wrapped value. */
|
|
44
|
-
static isWrapped(value) {
|
|
45
|
-
return value instanceof WrappedValue;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV3JhcHBlZFZhbHVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvdXRpbC9XcmFwcGVkVmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUl2QixZQUFZLEtBQVU7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVELCtCQUErQjtJQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQVU7UUFDcEIsT0FBTyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7OztRQUdJO0lBQ0osTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFVO1FBQ3RCLE9BQU8sWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9ELENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3pCLE9BQU8sS0FBSyxZQUFZLFlBQVksQ0FBQztJQUN2QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcmVzdWx0IG9mIGEge0BsaW5rIFBpcGV9IHRyYW5zZm9ybWF0aW9uIGhhcyBjaGFuZ2VkIGV2ZW4gdGhvdWdoIHRoZVxuICogcmVmZXJlbmNlIGhhcyBub3QgY2hhbmdlZC5cbiAqXG4gKiBXcmFwcGVkIHZhbHVlcyBhcmUgdW53cmFwcGVkIGF1dG9tYXRpY2FsbHkgZHVyaW5nIHRoZSBjaGFuZ2UgZGV0ZWN0aW9uLCBhbmQgdGhlIHVud3JhcHBlZCB2YWx1ZVxuICogaXMgc3RvcmVkLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBgXG4gKiBpZiAodGhpcy5fbGF0ZXN0VmFsdWUgPT09IHRoaXMuX2xhdGVzdFJldHVybmVkVmFsdWUpIHtcbiAqICAgIHJldHVybiB0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlO1xuICogIH0gZWxzZSB7XG4gKiAgICB0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlID0gdGhpcy5fbGF0ZXN0VmFsdWU7XG4gKiAgICByZXR1cm4gV3JhcHBlZFZhbHVlLndyYXAodGhpcy5fbGF0ZXN0VmFsdWUpOyAvLyB0aGlzIHdpbGwgZm9yY2UgdXBkYXRlXG4gKiAgfVxuICogYGBgXG4gKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgY2xhc3MgV3JhcHBlZFZhbHVlIHtcbiAgLyoqIEBkZXByZWNhdGVkIGZyb20gNS4zLCB1c2UgYHVud3JhcCgpYCBpbnN0ZWFkIC0gd2lsbCBzd2l0Y2ggdG8gcHJvdGVjdGVkICovXG4gIHdyYXBwZWQ6IGFueTtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogYW55KSB7XG4gICAgdGhpcy53cmFwcGVkID0gdmFsdWU7XG4gIH1cblxuICAvKiogQ3JlYXRlcyBhIHdyYXBwZWQgdmFsdWUuICovXG4gIHN0YXRpYyB3cmFwKHZhbHVlOiBhbnkpOiBXcmFwcGVkVmFsdWUge1xuICAgIHJldHVybiBuZXcgV3JhcHBlZFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIHZhbHVlIG9mIGEgd3JhcHBlZCB2YWx1ZS5cbiAgICogUmV0dXJucyB0aGUgZ2l2ZW4gYHZhbHVlYCB3aGVuIGl0IGlzIG5vdCB3cmFwcGVkLlxuICAgKiovXG4gIHN0YXRpYyB1bndyYXAodmFsdWU6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIFdyYXBwZWRWYWx1ZS5pc1dyYXBwZWQodmFsdWUpID8gdmFsdWUud3JhcHBlZCA6IHZhbHVlO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdHJ1ZSBpZiBgdmFsdWVgIGlzIGEgd3JhcHBlZCB2YWx1ZS4gKi9cbiAgc3RhdGljIGlzV3JhcHBlZCh2YWx1ZTogYW55KTogdmFsdWUgaXMgV3JhcHBlZFZhbHVlIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBXcmFwcGVkVmFsdWU7XG4gIH1cbn1cbiJdfQ==
|