@angular/compiler-cli 10.1.0-rc.0 → 10.1.3
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/ngcc/src/execution/create_compile_function.js +6 -3
- package/ngcc/src/host/esm2015_host.d.ts +18 -0
- package/ngcc/src/host/esm2015_host.js +53 -31
- package/ngcc/src/main.js +9 -12
- package/ngcc/src/ngcc_options.d.ts +8 -7
- package/ngcc/src/ngcc_options.js +27 -3
- package/ngcc/src/packages/build_marker.d.ts +1 -1
- package/ngcc/src/packages/build_marker.js +1 -1
- package/ngcc/src/packages/entry_point_bundle.d.ts +12 -1
- package/ngcc/src/packages/entry_point_bundle.js +9 -6
- package/ngcc/src/packages/ngcc_compiler_host.d.ts +16 -1
- package/ngcc/src/packages/ngcc_compiler_host.js +35 -5
- package/ngcc/src/packages/source_file_cache.d.ts +97 -0
- package/ngcc/src/packages/source_file_cache.js +207 -0
- package/ngcc/src/rendering/renderer.js +9 -10
- package/package.json +2 -2
- package/src/ngtsc/annotations/src/component.d.ts +4 -1
- package/src/ngtsc/annotations/src/component.js +94 -122
- package/src/ngtsc/annotations/src/directive.d.ts +5 -1
- package/src/ngtsc/annotations/src/directive.js +21 -11
- package/src/ngtsc/annotations/src/typecheck_scopes.d.ts +56 -0
- package/src/ngtsc/annotations/src/typecheck_scopes.js +109 -0
- package/src/ngtsc/annotations/src/util.js +4 -2
- package/src/ngtsc/core/src/compiler.js +4 -3
- package/src/ngtsc/diagnostics/src/error_code.d.ts +4 -0
- package/src/ngtsc/diagnostics/src/error_code.js +5 -1
- package/src/ngtsc/file_system/src/invalid_file_system.d.ts +2 -2
- package/src/ngtsc/file_system/src/invalid_file_system.js +1 -1
- package/src/ngtsc/file_system/src/node_js_file_system.d.ts +2 -2
- package/src/ngtsc/file_system/src/node_js_file_system.js +1 -1
- package/src/ngtsc/file_system/src/types.d.ts +2 -2
- package/src/ngtsc/file_system/src/types.js +1 -1
- package/src/ngtsc/file_system/testing/src/mock_file_system.d.ts +3 -3
- package/src/ngtsc/file_system/testing/src/mock_file_system.js +2 -2
- package/src/ngtsc/indexer/src/template.js +10 -24
- package/src/ngtsc/metadata/index.d.ts +2 -0
- package/src/ngtsc/metadata/index.js +7 -3
- package/src/ngtsc/metadata/src/api.d.ts +13 -4
- package/src/ngtsc/metadata/src/api.js +1 -1
- package/src/ngtsc/metadata/src/dts.js +7 -4
- package/src/ngtsc/metadata/src/inheritance.d.ts +1 -1
- package/src/ngtsc/metadata/src/inheritance.js +10 -6
- package/src/ngtsc/metadata/src/property_mapping.d.ts +117 -0
- package/src/ngtsc/metadata/src/property_mapping.js +244 -0
- package/src/ngtsc/metadata/src/util.d.ts +2 -3
- package/src/ngtsc/metadata/src/util.js +9 -9
- package/src/ngtsc/modulewithproviders/src/scanner.js +2 -2
- package/src/ngtsc/reflection/src/host.d.ts +1 -1
- package/src/ngtsc/reflection/src/host.js +1 -1
- package/src/ngtsc/reflection/src/type_to_value.js +6 -2
- package/src/ngtsc/scope/src/local.d.ts +1 -0
- package/src/ngtsc/scope/src/local.js +2 -1
- package/src/ngtsc/translator/index.d.ts +1 -1
- package/src/ngtsc/translator/index.js +3 -2
- package/src/ngtsc/translator/src/translator.d.ts +8 -1
- package/src/ngtsc/translator/src/translator.js +185 -111
- package/src/ngtsc/typecheck/api/api.d.ts +3 -1
- package/src/ngtsc/typecheck/api/api.js +1 -1
- package/src/ngtsc/typecheck/diagnostics/index.d.ts +10 -0
- package/src/ngtsc/typecheck/diagnostics/index.js +23 -0
- package/src/ngtsc/typecheck/diagnostics/src/diagnostic.d.ts +33 -0
- package/src/ngtsc/typecheck/diagnostics/src/diagnostic.js +114 -0
- package/src/ngtsc/typecheck/diagnostics/src/id.d.ts +11 -0
- package/src/ngtsc/typecheck/diagnostics/src/id.js +37 -0
- package/src/ngtsc/typecheck/index.d.ts +0 -1
- package/src/ngtsc/typecheck/index.js +3 -5
- package/src/ngtsc/typecheck/src/checker.js +1 -1
- package/src/ngtsc/typecheck/src/context.d.ts +1 -1
- package/src/ngtsc/typecheck/src/context.js +3 -3
- package/src/ngtsc/typecheck/src/diagnostics.d.ts +1 -22
- package/src/ngtsc/typecheck/src/diagnostics.js +5 -96
- package/src/ngtsc/typecheck/src/dom.d.ts +2 -1
- package/src/ngtsc/typecheck/src/dom.js +3 -3
- package/src/ngtsc/typecheck/src/environment.js +4 -4
- package/src/ngtsc/typecheck/src/oob.d.ts +2 -1
- package/src/ngtsc/typecheck/src/oob.js +3 -3
- package/src/ngtsc/typecheck/src/source.js +5 -18
- package/src/ngtsc/typecheck/src/type_check_block.js +49 -95
- package/src/transformers/node_emitter.d.ts +2 -8
- package/src/transformers/node_emitter.js +54 -68
- package/src/transformers/node_emitter_transform.js +8 -8
- package/src/transformers/util.d.ts +6 -0
- package/src/transformers/util.js +11 -2
- package/src/version.js +1 -1
|
@@ -34,8 +34,8 @@ export declare type PathSegment = BrandedPath<'PathSegment'>;
|
|
|
34
34
|
export interface FileSystem {
|
|
35
35
|
exists(path: AbsoluteFsPath): boolean;
|
|
36
36
|
readFile(path: AbsoluteFsPath): string;
|
|
37
|
-
readFileBuffer(path: AbsoluteFsPath):
|
|
38
|
-
writeFile(path: AbsoluteFsPath, data: string |
|
|
37
|
+
readFileBuffer(path: AbsoluteFsPath): Uint8Array;
|
|
38
|
+
writeFile(path: AbsoluteFsPath, data: string | Uint8Array, exclusive?: boolean): void;
|
|
39
39
|
removeFile(path: AbsoluteFsPath): void;
|
|
40
40
|
symlink(target: AbsoluteFsPath, path: AbsoluteFsPath): void;
|
|
41
41
|
readdir(path: AbsoluteFsPath): PathSegment[];
|
|
@@ -17,4 +17,4 @@
|
|
|
17
17
|
"use strict";
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
19
|
});
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2ZpbGVfc3lzdGVtL3NyYy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBBIGBzdHJpbmdgIHJlcHJlc2VudGluZyBhIHNwZWNpZmljIHR5cGUgb2YgcGF0aCwgd2l0aCBhIHBhcnRpY3VsYXIgYnJhbmQgYEJgLlxuICpcbiAqIEEgYHN0cmluZ2AgaXMgbm90IGFzc2lnbmFibGUgdG8gYSBgQnJhbmRlZFBhdGhgLCBidXQgYSBgQnJhbmRlZFBhdGhgIGlzIGFzc2lnbmFibGUgdG8gYSBgc3RyaW5nYC5cbiAqIFR3byBgQnJhbmRlZFBhdGhgcyB3aXRoIGRpZmZlcmVudCBicmFuZHMgYXJlIG5vdCBtdXR1YWxseSBhc3NpZ25hYmxlLlxuICovXG5leHBvcnQgdHlwZSBCcmFuZGVkUGF0aDxCIGV4dGVuZHMgc3RyaW5nPiA9IHN0cmluZyZ7XG4gIF9icmFuZDogQjtcbn07XG5cbi8qKlxuICogQSBmdWxseSBxdWFsaWZpZWQgcGF0aCBpbiB0aGUgZmlsZSBzeXN0ZW0sIGluIFBPU0lYIGZvcm0uXG4gKi9cbmV4cG9ydCB0eXBlIEFic29sdXRlRnNQYXRoID0gQnJhbmRlZFBhdGg8J0Fic29sdXRlRnNQYXRoJz47XG5cbi8qKlxuICogQSBwYXRoIHRoYXQncyByZWxhdGl2ZSB0byBhbm90aGVyICh1bnNwZWNpZmllZCkgcm9vdC5cbiAqXG4gKiBUaGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gcmVmZXIgdG8gYSBwaHlzaWNhbCBmaWxlLlxuICovXG5leHBvcnQgdHlwZSBQYXRoU2VnbWVudCA9IEJyYW5kZWRQYXRoPCdQYXRoU2VnbWVudCc+
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2ZpbGVfc3lzdGVtL3NyYy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBBIGBzdHJpbmdgIHJlcHJlc2VudGluZyBhIHNwZWNpZmljIHR5cGUgb2YgcGF0aCwgd2l0aCBhIHBhcnRpY3VsYXIgYnJhbmQgYEJgLlxuICpcbiAqIEEgYHN0cmluZ2AgaXMgbm90IGFzc2lnbmFibGUgdG8gYSBgQnJhbmRlZFBhdGhgLCBidXQgYSBgQnJhbmRlZFBhdGhgIGlzIGFzc2lnbmFibGUgdG8gYSBgc3RyaW5nYC5cbiAqIFR3byBgQnJhbmRlZFBhdGhgcyB3aXRoIGRpZmZlcmVudCBicmFuZHMgYXJlIG5vdCBtdXR1YWxseSBhc3NpZ25hYmxlLlxuICovXG5leHBvcnQgdHlwZSBCcmFuZGVkUGF0aDxCIGV4dGVuZHMgc3RyaW5nPiA9IHN0cmluZyZ7XG4gIF9icmFuZDogQjtcbn07XG5cbi8qKlxuICogQSBmdWxseSBxdWFsaWZpZWQgcGF0aCBpbiB0aGUgZmlsZSBzeXN0ZW0sIGluIFBPU0lYIGZvcm0uXG4gKi9cbmV4cG9ydCB0eXBlIEFic29sdXRlRnNQYXRoID0gQnJhbmRlZFBhdGg8J0Fic29sdXRlRnNQYXRoJz47XG5cbi8qKlxuICogQSBwYXRoIHRoYXQncyByZWxhdGl2ZSB0byBhbm90aGVyICh1bnNwZWNpZmllZCkgcm9vdC5cbiAqXG4gKiBUaGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gcmVmZXIgdG8gYSBwaHlzaWNhbCBmaWxlLlxuICovXG5leHBvcnQgdHlwZSBQYXRoU2VnbWVudCA9IEJyYW5kZWRQYXRoPCdQYXRoU2VnbWVudCc+O1xuXG4vKipcbiAqIEEgYmFzaWMgaW50ZXJmYWNlIHRvIGFic3RyYWN0IHRoZSB1bmRlcmx5aW5nIGZpbGUtc3lzdGVtLlxuICpcbiAqIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHByb3ZpZGUgbW9jayBmaWxlLXN5c3RlbXMgaW4gdW5pdCB0ZXN0cyxcbiAqIGJ1dCBhbHNvIHRvIGNyZWF0ZSBjbGV2ZXIgZmlsZS1zeXN0ZW1zIHRoYXQgaGF2ZSBmZWF0dXJlcyBzdWNoIGFzIGNhY2hpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVN5c3RlbSB7XG4gIGV4aXN0cyhwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IGJvb2xlYW47XG4gIHJlYWRGaWxlKHBhdGg6IEFic29sdXRlRnNQYXRoKTogc3RyaW5nO1xuICByZWFkRmlsZUJ1ZmZlcihwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IFVpbnQ4QXJyYXk7XG4gIHdyaXRlRmlsZShwYXRoOiBBYnNvbHV0ZUZzUGF0aCwgZGF0YTogc3RyaW5nfFVpbnQ4QXJyYXksIGV4Y2x1c2l2ZT86IGJvb2xlYW4pOiB2b2lkO1xuICByZW1vdmVGaWxlKHBhdGg6IEFic29sdXRlRnNQYXRoKTogdm9pZDtcbiAgc3ltbGluayh0YXJnZXQ6IEFic29sdXRlRnNQYXRoLCBwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IHZvaWQ7XG4gIHJlYWRkaXIocGF0aDogQWJzb2x1dGVGc1BhdGgpOiBQYXRoU2VnbWVudFtdO1xuICBsc3RhdChwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IEZpbGVTdGF0cztcbiAgc3RhdChwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IEZpbGVTdGF0cztcbiAgcHdkKCk6IEFic29sdXRlRnNQYXRoO1xuICBjaGRpcihwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IHZvaWQ7XG4gIGV4dG5hbWUocGF0aDogQWJzb2x1dGVGc1BhdGh8UGF0aFNlZ21lbnQpOiBzdHJpbmc7XG4gIGNvcHlGaWxlKGZyb206IEFic29sdXRlRnNQYXRoLCB0bzogQWJzb2x1dGVGc1BhdGgpOiB2b2lkO1xuICBtb3ZlRmlsZShmcm9tOiBBYnNvbHV0ZUZzUGF0aCwgdG86IEFic29sdXRlRnNQYXRoKTogdm9pZDtcbiAgZW5zdXJlRGlyKHBhdGg6IEFic29sdXRlRnNQYXRoKTogdm9pZDtcbiAgcmVtb3ZlRGVlcChwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IHZvaWQ7XG4gIGlzQ2FzZVNlbnNpdGl2ZSgpOiBib29sZWFuO1xuICBpc1Jvb3QocGF0aDogQWJzb2x1dGVGc1BhdGgpOiBib29sZWFuO1xuICBpc1Jvb3RlZChwYXRoOiBzdHJpbmcpOiBib29sZWFuO1xuICByZXNvbHZlKC4uLnBhdGhzOiBzdHJpbmdbXSk6IEFic29sdXRlRnNQYXRoO1xuICBkaXJuYW1lPFQgZXh0ZW5kcyBQYXRoU3RyaW5nPihmaWxlOiBUKTogVDtcbiAgam9pbjxUIGV4dGVuZHMgUGF0aFN0cmluZz4oYmFzZVBhdGg6IFQsIC4uLnBhdGhzOiBzdHJpbmdbXSk6IFQ7XG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSByZWxhdGl2ZSBwYXRoIGJldHdlZW4gYGZyb21gIGFuZCBgdG9gLlxuICAgKlxuICAgKiBJbiBmaWxlLXN5c3RlbXMgdGhhdCBjYW4gaGF2ZSBtdWx0aXBsZSBmaWxlIHRyZWVzIHRoZSByZXR1cm5lZCBwYXRoIG1heSBub3QgYWN0dWFsbHkgYmVcbiAgICogXCJyZWxhdGl2ZVwiIChpLmUuIGBQYXRoU2VnbWVudGApLiBGb3IgZXhhbXBsZSwgV2luZG93cyBjYW4gaGF2ZSBtdWx0aXBsZSBkcml2ZXMgOlxuICAgKiBgcmVsYXRpdmUoJ2M6L2EvYicsICdkOi9hL2MnKWAgd291bGQgYmUgYGQ6L2EvYycuXG4gICAqL1xuICByZWxhdGl2ZTxUIGV4dGVuZHMgUGF0aFN0cmluZz4oZnJvbTogVCwgdG86IFQpOiBQYXRoU2VnbWVudHxBYnNvbHV0ZUZzUGF0aDtcbiAgYmFzZW5hbWUoZmlsZVBhdGg6IHN0cmluZywgZXh0ZW5zaW9uPzogc3RyaW5nKTogUGF0aFNlZ21lbnQ7XG4gIHJlYWxwYXRoKGZpbGVQYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IEFic29sdXRlRnNQYXRoO1xuICBnZXREZWZhdWx0TGliTG9jYXRpb24oKTogQWJzb2x1dGVGc1BhdGg7XG4gIG5vcm1hbGl6ZTxUIGV4dGVuZHMgUGF0aFN0cmluZz4ocGF0aDogVCk6IFQ7XG59XG5cbmV4cG9ydCB0eXBlIFBhdGhTdHJpbmcgPSBzdHJpbmd8QWJzb2x1dGVGc1BhdGh8UGF0aFNlZ21lbnQ7XG5cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgYW4gb2JqZWN0IGluIHRoZSBGaWxlU3lzdGVtLlxuICogVGhpcyBpcyBhbmFsb2dvdXMgdG8gdGhlIGBmcy5TdGF0c2AgY2xhc3MgaW4gTm9kZS5qcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlU3RhdHMge1xuICBpc0ZpbGUoKTogYm9vbGVhbjtcbiAgaXNEaXJlY3RvcnkoKTogYm9vbGVhbjtcbiAgaXNTeW1ib2xpY0xpbmsoKTogYm9vbGVhbjtcbn1cbiJdfQ==
|
|
@@ -18,8 +18,8 @@ export declare abstract class MockFileSystem implements FileSystem {
|
|
|
18
18
|
isCaseSensitive(): boolean;
|
|
19
19
|
exists(path: AbsoluteFsPath): boolean;
|
|
20
20
|
readFile(path: AbsoluteFsPath): string;
|
|
21
|
-
readFileBuffer(path: AbsoluteFsPath):
|
|
22
|
-
writeFile(path: AbsoluteFsPath, data: string |
|
|
21
|
+
readFileBuffer(path: AbsoluteFsPath): Uint8Array;
|
|
22
|
+
writeFile(path: AbsoluteFsPath, data: string | Uint8Array, exclusive?: boolean): void;
|
|
23
23
|
removeFile(path: AbsoluteFsPath): void;
|
|
24
24
|
symlink(target: AbsoluteFsPath, path: AbsoluteFsPath): void;
|
|
25
25
|
readdir(path: AbsoluteFsPath): PathSegment[];
|
|
@@ -60,7 +60,7 @@ export declare type Entity = Folder | File | SymLink;
|
|
|
60
60
|
export interface Folder {
|
|
61
61
|
[pathSegments: string]: Entity;
|
|
62
62
|
}
|
|
63
|
-
export declare type File = string |
|
|
63
|
+
export declare type File = string | Uint8Array;
|
|
64
64
|
export declare class SymLink {
|
|
65
65
|
path: AbsoluteFsPath;
|
|
66
66
|
constructor(path: AbsoluteFsPath);
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
MockFileSystem.prototype.readFileBuffer = function (path) {
|
|
49
49
|
var entity = this.findFromPath(path).entity;
|
|
50
50
|
if (isFile(entity)) {
|
|
51
|
-
return
|
|
51
|
+
return entity instanceof Uint8Array ? entity : new Buffer(entity);
|
|
52
52
|
}
|
|
53
53
|
else {
|
|
54
54
|
throw new MockFileSystemError('ENOENT', path, "File \"" + path + "\" does not exist.");
|
|
@@ -311,4 +311,4 @@
|
|
|
311
311
|
}
|
|
312
312
|
exports.isFolder = isFolder;
|
|
313
313
|
});
|
|
314
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19maWxlX3N5c3RlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvZmlsZV9zeXN0ZW0vdGVzdGluZy9zcmMvbW9ja19maWxlX3N5c3RlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBRUgsbUZBQTZEO0lBRzdEOztPQUVHO0lBQ0g7UUFLRSx3QkFBb0IsZ0JBQXdCLEVBQUUsR0FBMkM7WUFBckUsaUNBQUEsRUFBQSx3QkFBd0I7WUFBRSxvQkFBQSxFQUFBLE1BQXNCLEdBQXFCO1lBQXJFLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBUTtZQUpwQyxjQUFTLEdBQVcsRUFBRSxDQUFDO1lBSzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsd0NBQWUsR0FBZjtZQUNFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQy9CLENBQUM7UUFFRCwrQkFBTSxHQUFOLFVBQU8sSUFBb0I7WUFDekIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUM7UUFDakQsQ0FBQztRQUVELGlDQUFRLEdBQVIsVUFBUyxJQUFvQjtZQUNwQixJQUFBLE1BQU0sR0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUEzQixDQUE0QjtZQUN6QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDbEIsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDMUI7aUJBQU07Z0JBQ0wsTUFBTSxJQUFJLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBUyxJQUFJLHVCQUFtQixDQUFDLENBQUM7YUFDakY7UUFDSCxDQUFDO1FB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QUFELENBQUMsQUFYRCxJQVdDO0lBRUQ7UUFBa0MsK0NBQUs7UUFDckMsNkJBQW1CLElBQVksRUFBUyxJQUFZLEVBQUUsT0FBZTtZQUFyRSxZQUNFLGtCQUFNLE9BQU8sQ0FBQyxTQUNmO1lBRmtCLFVBQUksR0FBSixJQUFJLENBQVE7WUFBUyxVQUFJLEdBQUosSUFBSSxDQUFROztRQUVwRCxDQUFDO1FBQ0gsMEJBQUM7SUFBRCxDQUFDLEFBSkQsQ0FBa0MsS0FBSyxHQUl0QztJQUVELFNBQWdCLE1BQU0sQ0FBQyxJQUFpQjtRQUN0QyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDO0lBQzNELENBQUM7SUFGRCx3QkFFQztJQUVELFNBQWdCLFNBQVMsQ0FBQyxJQUFpQjtRQUN6QyxPQUFPLElBQUksWUFBWSxPQUFPLENBQUM7SUFDakMsQ0FBQztJQUZELDhCQUVDO0lBRUQsU0FBZ0IsUUFBUSxDQUFDLElBQWlCO1FBQ3hDLE9BQU8sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRkQsNEJBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtiYXNlbmFtZSwgZGlybmFtZSwgcmVzb2x2ZX0gZnJvbSAnLi4vLi4vc3JjL2hlbHBlcnMnO1xuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aCwgRmlsZVN0YXRzLCBGaWxlU3lzdGVtLCBQYXRoU2VnbWVudCwgUGF0aFN0cmluZ30gZnJvbSAnLi4vLi4vc3JjL3R5cGVzJztcblxuLyoqXG4gKiBBbiBpbi1tZW1vcnkgZmlsZSBzeXN0ZW0gdGhhdCBjYW4gYmUgdXNlZCBpbiB1bml0IHRlc3RzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTW9ja0ZpbGVTeXN0ZW0gaW1wbGVtZW50cyBGaWxlU3lzdGVtIHtcbiAgcHJpdmF0ZSBfZmlsZVRyZWU6IEZvbGRlciA9IHt9O1xuICBwcml2YXRlIF9jd2Q6IEFic29sdXRlRnNQYXRoO1xuXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfaXNDYXNlU2Vuc2l0aXZlID0gZmFsc2UsIGN3ZDogQWJzb2x1dGVGc1BhdGggPSAnLycgYXMgQWJzb2x1dGVGc1BhdGgpIHtcbiAgICB0aGlzLl9jd2QgPSB0aGlzLm5vcm1hbGl6ZShjd2QpO1xuICB9XG5cbiAgaXNDYXNlU2Vuc2l0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLl9pc0Nhc2VTZW5zaXRpdmU7XG4gIH1cblxuICBleGlzdHMocGF0aDogQWJzb2x1dGVGc1BhdGgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maW5kRnJvbVBhdGgocGF0aCkuZW50aXR5ICE9PSBudWxsO1xuICB9XG5cbiAgcmVhZEZpbGUocGF0aDogQWJzb2x1dGVGc1BhdGgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHtlbnRpdHl9ID0gdGhpcy5maW5kRnJvbVBhdGgocGF0aCk7XG4gICAgaWYgKGlzRmlsZShlbnRpdHkpKSB7XG4gICAgICByZXR1cm4gZW50aXR5LnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBNb2NrRmlsZVN5c3RlbUVycm9yKCdFTk9FTlQnLCBwYXRoLCBgRmlsZSBcIiR7cGF0aH1cIiBkb2VzIG5vdCBleGlzdC5gKTtcbiAgICB9XG4gIH1cblxuICByZWFkRmlsZUJ1ZmZlcihwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IEJ1ZmZlciB7XG4gICAgY29uc3Qge2VudGl0eX0gPSB0aGlzLmZpbmRGcm9tUGF0aChwYXRoKTtcbiAgICBpZiAoaXNGaWxlKGVudGl0eSkpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoZW50aXR5KSA/IGVudGl0eSA6IG5ldyBCdWZmZXIoZW50aXR5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IE1vY2tGaWxlU3lzdGVtRXJyb3IoJ0VOT0VOVCcsIHBhdGgsIGBGaWxlIFwiJHtwYXRofVwiIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlRmlsZShwYXRoOiBBYnNvbHV0ZUZzUGF0aCwgZGF0YTogc3RyaW5nfEJ1ZmZlciwgZXhjbHVzaXZlOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICBjb25zdCBbZm9sZGVyUGF0aCwgYmFzZW5hbWVdID0gdGhpcy5zcGxpdEludG9Gb2xkZXJBbmRGaWxlKHBhdGgpO1xuICAgIGNvbnN0IHtlbnRpdHl9ID0gdGhpcy5maW5kRnJvbVBhdGgoZm9sZGVyUGF0aCk7XG4gICAgaWYgKGVudGl0eSA9PT0gbnVsbCB8fCAhaXNGb2xkZXIoZW50aXR5KSkge1xuICAgICAgdGhyb3cgbmV3IE1vY2tGaWxlU3lzdGVtRXJyb3IoXG4gICAgICAgICAgJ0VOT0VOVCcsIHBhdGgsIGBVbmFibGUgdG8gd3JpdGUgZmlsZSBcIiR7cGF0aH1cIi4gVGhlIGNvbnRhaW5pbmcgZm9sZGVyIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgICBpZiAoZXhjbHVzaXZlICYmIGVudGl0eVtiYXNlbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IE1vY2tGaWxlU3lzdGVtRXJyb3IoXG4gICAgICAgICAgJ0VFWElTVCcsIHBhdGgsIGBVbmFibGUgdG8gZXhjbHVzaXZlbHkgd3JpdGUgZmlsZSBcIiR7cGF0aH1cIi4gVGhlIGZpbGUgYWxyZWFkeSBleGlzdHMuYCk7XG4gICAgfVxuICAgIGVudGl0eVtiYXNlbmFtZV0gPSBkYXRhO1xuICB9XG5cbiAgcmVtb3ZlRmlsZShwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IHZvaWQge1xuICAgIGNvbnN0IFtmb2xkZXJQYXRoLCBiYXNlbmFtZV0gPSB0aGlzLnNwbGl0SW50b0ZvbGRlckFuZEZpbGUocGF0aCk7XG4gICAgY29uc3Qge2VudGl0eX0gPSB0aGlzLmZpbmRGcm9tUGF0aChmb2xkZXJQYXRoKTtcbiAgICBpZiAoZW50aXR5ID09PSBudWxsIHx8ICFpc0ZvbGRlcihlbnRpdHkpKSB7XG4gICAgICB0aHJvdyBuZXcgTW9ja0ZpbGVTeXN0ZW1FcnJvcihcbiAgICAgICAgICAnRU5PRU5UJywgcGF0aCwgYFVuYWJsZSB0byByZW1vdmUgZmlsZSBcIiR7cGF0aH1cIi4gVGhlIGNvbnRhaW5pbmcgZm9sZGVyIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgICBpZiAoaXNGb2xkZXIoZW50aXR5W2Jhc2VuYW1lXSkpIHtcbiAgICAgIHRocm93IG5ldyBNb2NrRmlsZVN5c3RlbUVycm9yKFxuICAgICAgICAgICdFSVNESVInLCBwYXRoLCBgVW5hYmxlIHRvIHJlbW92ZSBmaWxlIFwiJHtwYXRofVwiLiBUaGUgcGF0aCB0byByZW1vdmUgaXMgYSBmb2xkZXIuYCk7XG4gICAgfVxuICAgIGRlbGV0ZSBlbnRpdHlbYmFzZW5hbWVdO1xuICB9XG5cbiAgc3ltbGluayh0YXJnZXQ6IEFic29sdXRlRnNQYXRoLCBwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IHZvaWQge1xuICAgIGNvbnN0IFtmb2xkZXJQYXRoLCBiYXNlbmFtZV0gPSB0aGlzLnNwbGl0SW50b0ZvbGRlckFuZEZpbGUocGF0aCk7XG4gICAgY29uc3Qge2VudGl0eX0gPSB0aGlzLmZpbmRGcm9tUGF0aChmb2xkZXJQYXRoKTtcbiAgICBpZiAoZW50aXR5ID09PSBudWxsIHx8ICFpc0ZvbGRlcihlbnRpdHkpKSB7XG4gICAgICB0aHJvdyBuZXcgTW9ja0ZpbGVTeXN0ZW1FcnJvcihcbiAgICAgICAgICAnRU5PRU5UJywgcGF0aCxcbiAgICAgICAgICBgVW5hYmxlIHRvIGNyZWF0ZSBzeW1saW5rIGF0IFwiJHtwYXRofVwiLiBUaGUgY29udGFpbmluZyBmb2xkZXIgZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgfVxuICAgIGVudGl0eVtiYXNlbmFtZV0gPSBuZXcgU3ltTGluayh0YXJnZXQpO1xuICB9XG5cbiAgcmVhZGRpcihwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IFBhdGhTZWdtZW50W10ge1xuICAgIGNvbnN0IHtlbnRpdHl9ID0gdGhpcy5maW5kRnJvbVBhdGgocGF0aCk7XG4gICAgaWYgKGVudGl0eSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IE1vY2tGaWxlU3lzdGVtRXJyb3IoXG4gICAgICAgICAgJ0VOT0VOVCcsIHBhdGgsIGBVbmFibGUgdG8gcmVhZCBkaXJlY3RvcnkgXCIke3BhdGh9XCIuIEl0IGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgICBpZiAoaXNGaWxlKGVudGl0eSkpIHtcbiAgICAgIHRocm93IG5ldyBNb2NrRmlsZVN5c3RlbUVycm9yKFxuICAgICAgICAgICdFTk9URElSJywgcGF0aCwgYFVuYWJsZSB0byByZWFkIGRpcmVjdG9yeSBcIiR7cGF0aH1cIi4gSXQgaXMgYSBmaWxlLmApO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZW50aXR5KSBhcyBQYXRoU2VnbWVudFtdO1xuICB9XG5cbiAgbHN0YXQocGF0aDogQWJzb2x1dGVGc1BhdGgpOiBGaWxlU3RhdHMge1xuICAgIGNvbnN0IHtlbnRpdHl9ID0gdGhpcy5maW5kRnJvbVBhdGgocGF0aCk7XG4gICAgaWYgKGVudGl0eSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IE1vY2tGaWxlU3lzdGVtRXJyb3IoJ0VOT0VOVCcsIHBhdGgsIGBGaWxlIFwiJHtwYXRofVwiIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vY2tGaWxlU3RhdHMoZW50aXR5KTtcbiAgfVxuXG4gIHN0YXQocGF0aDogQWJzb2x1dGVGc1BhdGgpOiBGaWxlU3RhdHMge1xuICAgIGNvbnN0IHtlbnRpdHl9ID0gdGhpcy5maW5kRnJvbVBhdGgocGF0aCwge2ZvbGxvd1N5bUxpbmtzOiB0cnVlfSk7XG4gICAgaWYgKGVudGl0eSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IE1vY2tGaWxlU3lzdGVtRXJyb3IoJ0VOT0VOVCcsIHBhdGgsIGBGaWxlIFwiJHtwYXRofVwiIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vY2tGaWxlU3RhdHMoZW50aXR5KTtcbiAgfVxuXG4gIGNvcHlGaWxlKGZyb206IEFic29sdXRlRnNQYXRoLCB0bzogQWJzb2x1dGVGc1BhdGgpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlRmlsZSh0bywgdGhpcy5yZWFkRmlsZShmcm9tKSk7XG4gIH1cblxuICBtb3ZlRmlsZShmcm9tOiBBYnNvbHV0ZUZzUGF0aCwgdG86IEFic29sdXRlRnNQYXRoKTogdm9pZCB7XG4gICAgdGhpcy53cml0ZUZpbGUodG8sIHRoaXMucmVhZEZpbGUoZnJvbSkpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZEZyb21QYXRoKGRpcm5hbWUoZnJvbSkpO1xuICAgIGNvbnN0IGZvbGRlciA9IHJlc3VsdC5lbnRpdHkgYXMgRm9sZGVyO1xuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShmcm9tKTtcbiAgICBkZWxldGUgZm9sZGVyW25hbWVdO1xuICB9XG5cbiAgZW5zdXJlRGlyKHBhdGg6IEFic29sdXRlRnNQYXRoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLnNwbGl0UGF0aChwYXRoKS5tYXAoc2VnbWVudCA9PiB0aGlzLmdldENhbm9uaWNhbFBhdGgoc2VnbWVudCkpO1xuICAgIGxldCBjdXJyZW50OiBGb2xkZXIgPSB0aGlzLl9maWxlVHJlZTtcblxuICAgIC8vIENvbnZlcnQgdGhlIHJvb3QgZm9sZGVyIHRvIGEgY2Fub25pY2FsIGVtcHR5IHN0cmluZyBgJydgIChvbiBXaW5kb3dzIGl0IHdvdWxkIGJlIGAnQzonYCkuXG4gICAgc2VnbWVudHNbMF0gPSAnJztcbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHtcbiAgICAgIGlmIChpc0ZpbGUoY3VycmVudFtzZWdtZW50XSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb2xkZXIgYWxyZWFkeSBleGlzdHMgYXMgYSBmaWxlLmApO1xuICAgICAgfVxuICAgICAgaWYgKCFjdXJyZW50W3NlZ21lbnRdKSB7XG4gICAgICAgIGN1cnJlbnRbc2VnbWVudF0gPSB7fTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3NlZ21lbnRdIGFzIEZvbGRlcjtcbiAgICB9XG4gIH1cblxuICByZW1vdmVEZWVwKHBhdGg6IEFic29sdXRlRnNQYXRoKTogdm9pZCB7XG4gICAgY29uc3QgW2ZvbGRlclBhdGgsIGJhc2VuYW1lXSA9IHRoaXMuc3BsaXRJbnRvRm9sZGVyQW5kRmlsZShwYXRoKTtcbiAgICBjb25zdCB7ZW50aXR5fSA9IHRoaXMuZmluZEZyb21QYXRoKGZvbGRlclBhdGgpO1xuICAgIGlmIChlbnRpdHkgPT09IG51bGwgfHwgIWlzRm9sZGVyKGVudGl0eSkpIHtcbiAgICAgIHRocm93IG5ldyBNb2NrRmlsZVN5c3RlbUVycm9yKFxuICAgICAgICAgICdFTk9FTlQnLCBwYXRoLFxuICAgICAgICAgIGBVbmFibGUgdG8gcmVtb3ZlIGZvbGRlciBcIiR7cGF0aH1cIi4gVGhlIGNvbnRhaW5pbmcgZm9sZGVyIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgICBkZWxldGUgZW50aXR5W2Jhc2VuYW1lXTtcbiAgfVxuXG4gIGlzUm9vdChwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpcm5hbWUocGF0aCkgPT09IHBhdGg7XG4gIH1cblxuICBleHRuYW1lKHBhdGg6IEFic29sdXRlRnNQYXRofFBhdGhTZWdtZW50KTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXRjaCA9IC8uKyhcXC5bXi5dKikkLy5leGVjKHBhdGgpO1xuICAgIHJldHVybiBtYXRjaCAhPT0gbnVsbCA/IG1hdGNoWzFdIDogJyc7XG4gIH1cblxuICByZWFscGF0aChmaWxlUGF0aDogQWJzb2x1dGVGc1BhdGgpOiBBYnNvbHV0ZUZzUGF0aCB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kRnJvbVBhdGgoZmlsZVBhdGgsIHtmb2xsb3dTeW1MaW5rczogdHJ1ZX0pO1xuICAgIGlmIChyZXN1bHQuZW50aXR5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgTW9ja0ZpbGVTeXN0ZW1FcnJvcihcbiAgICAgICAgICAnRU5PRU5UJywgZmlsZVBhdGgsIGBVbmFibGUgdG8gZmluZCB0aGUgcmVhbCBwYXRoIG9mIFwiJHtmaWxlUGF0aH1cIi4gSXQgZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHQucGF0aDtcbiAgICB9XG4gIH1cblxuICBwd2QoKTogQWJzb2x1dGVGc1BhdGgge1xuICAgIHJldHVybiB0aGlzLl9jd2Q7XG4gIH1cblxuICBjaGRpcihwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IHZvaWQge1xuICAgIHRoaXMuX2N3ZCA9IHRoaXMubm9ybWFsaXplKHBhdGgpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdExpYkxvY2F0aW9uKCk6IEFic29sdXRlRnNQYXRoIHtcbiAgICAvLyBNaW1pYyB0aGUgbm9kZSBtb2R1bGUgcmVzb2x1dGlvbiBhbGdvcml0aG0gYW5kIHN0YXJ0IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgdGhlbiBsb29rXG4gICAgLy8gcHJvZ3Jlc3NpdmVseSBmdXJ0aGVyIHVwIHRoZSB0cmVlIHVudGlsIHJlYWNoaW5nIHRoZSBGUyByb290LlxuICAgIC8vIEUuZy4gaWYgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIC9mb28vYmFyLCBsb29rIGluIC9mb28vYmFyL25vZGVfbW9kdWxlcywgdGhlblxuICAgIC8vIC9mb28vbm9kZV9tb2R1bGVzLCB0aGVuIC9ub2RlX21vZHVsZXMuXG5cbiAgICBsZXQgcGF0aCA9ICdub2RlX21vZHVsZXMvdHlwZXNjcmlwdC9saWInO1xuICAgIGxldCByZXNvbHZlZFBhdGggPSB0aGlzLnJlc29sdmUocGF0aCk7XG5cbiAgICAvLyBDb25zdHJ1Y3QgYSBwYXRoIGZvciB0aGUgdG9wLWxldmVsIG5vZGVfbW9kdWxlcyB0byBpZGVudGlmeSB0aGUgc3RvcHBpbmcgcG9pbnQuXG4gICAgY29uc3QgdG9wTGV2ZWxOb2RlTW9kdWxlcyA9IHRoaXMucmVzb2x2ZSgnLycgKyBwYXRoKTtcblxuICAgIHdoaWxlIChyZXNvbHZlZFBhdGggIT09IHRvcExldmVsTm9kZU1vZHVsZXMpIHtcbiAgICAgIGlmICh0aGlzLmV4aXN0cyhyZXNvbHZlZFBhdGgpKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlZFBhdGg7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdCBoZXJlLCBsb29rIG9uZSBsZXZlbCBoaWdoZXIuXG4gICAgICBwYXRoID0gJy4uLycgKyBwYXRoO1xuICAgICAgcmVzb2x2ZWRQYXRoID0gdGhpcy5yZXNvbHZlKHBhdGgpO1xuICAgIH1cblxuICAgIC8vIFRoZSBsb29wIGV4aXRzIGJlZm9yZSBjaGVja2luZyB0aGUgZXhpc3RlbmNlIG9mIC9ub2RlX21vZHVsZXMvdHlwZXNjcmlwdCBhdCB0aGUgdG9wIGxldmVsLlxuICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWwgLSBpZiBubyAvbm9kZV9tb2R1bGVzL3R5cGVzY3JpcHQgZXhpc3RzIGFueXdoZXJlIGluIHRoZSB0cmVlLCB0aGVyZSdzXG4gICAgLy8gbm90aGluZyB0aGlzIGZ1bmN0aW9uIGNhbiBkbyBhYm91dCBpdCwgYW5kIFRTIG1heSBlcnJvciBsYXRlciBpZiBpdCBsb29rcyBmb3IgYSBsaWIuZC50cyBmaWxlXG4gICAgLy8gd2l0aGluIHRoaXMgZGlyZWN0b3J5LiBJdCBtaWdodCBiZSBva2F5LCB0aG91Z2gsIGlmIFRTIG5ldmVyIGNoZWNrcyBmb3Igb25lLlxuICAgIHJldHVybiB0b3BMZXZlbE5vZGVNb2R1bGVzO1xuICB9XG5cbiAgYWJzdHJhY3QgcmVzb2x2ZSguLi5wYXRoczogc3RyaW5nW10pOiBBYnNvbHV0ZUZzUGF0aDtcbiAgYWJzdHJhY3QgZGlybmFtZTxUIGV4dGVuZHMgc3RyaW5nPihmaWxlOiBUKTogVDtcbiAgYWJzdHJhY3Qgam9pbjxUIGV4dGVuZHMgc3RyaW5nPihiYXNlUGF0aDogVCwgLi4ucGF0aHM6IHN0cmluZ1tdKTogVDtcbiAgYWJzdHJhY3QgcmVsYXRpdmU8VCBleHRlbmRzIFBhdGhTdHJpbmc+KGZyb206IFQsIHRvOiBUKTogUGF0aFNlZ21lbnR8QWJzb2x1dGVGc1BhdGg7XG4gIGFic3RyYWN0IGJhc2VuYW1lKGZpbGVQYXRoOiBzdHJpbmcsIGV4dGVuc2lvbj86IHN0cmluZyk6IFBhdGhTZWdtZW50O1xuICBhYnN0cmFjdCBpc1Jvb3RlZChwYXRoOiBzdHJpbmcpOiBib29sZWFuO1xuICBhYnN0cmFjdCBub3JtYWxpemU8VCBleHRlbmRzIFBhdGhTdHJpbmc+KHBhdGg6IFQpOiBUO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc3BsaXRQYXRoPFQgZXh0ZW5kcyBQYXRoU3RyaW5nPihwYXRoOiBUKTogc3RyaW5nW107XG5cbiAgZHVtcCgpOiBGb2xkZXIge1xuICAgIHJldHVybiB0aGlzLmNsb25lRm9sZGVyKHRoaXMuX2ZpbGVUcmVlKTtcbiAgfVxuICBpbml0KGZvbGRlcjogRm9sZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fZmlsZVRyZWUgPSB0aGlzLmNsb25lRm9sZGVyKGZvbGRlcik7XG4gIH1cblxuICBwcml2YXRlIGNsb25lRm9sZGVyKGZvbGRlcjogRm9sZGVyKTogRm9sZGVyIHtcbiAgICBjb25zdCBjbG9uZTogRm9sZGVyID0ge307XG4gICAgZm9yIChjb25zdCBwYXRoIGluIGZvbGRlcikge1xuICAgICAgY29uc3QgaXRlbSA9IGZvbGRlcltwYXRoXTtcbiAgICAgIGNvbnN0IGNhbm9uaWNhbFBhdGggPSB0aGlzLmdldENhbm9uaWNhbFBhdGgocGF0aCk7XG4gICAgICBpZiAoaXNTeW1MaW5rKGl0ZW0pKSB7XG4gICAgICAgIGNsb25lW2Nhbm9uaWNhbFBhdGhdID0gbmV3IFN5bUxpbmsodGhpcy5nZXRDYW5vbmljYWxQYXRoKGl0ZW0ucGF0aCkpO1xuICAgICAgfSBlbHNlIGlmIChpc0ZvbGRlcihpdGVtKSkge1xuICAgICAgICBjbG9uZVtjYW5vbmljYWxQYXRoXSA9IHRoaXMuY2xvbmVGb2xkZXIoaXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbG9uZVtjYW5vbmljYWxQYXRoXSA9IGZvbGRlcltwYXRoXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgZmluZEZyb21QYXRoKHBhdGg6IEFic29sdXRlRnNQYXRoLCBvcHRpb25zPzoge2ZvbGxvd1N5bUxpbmtzOiBib29sZWFufSk6IEZpbmRSZXN1bHQge1xuICAgIGNvbnN0IGZvbGxvd1N5bUxpbmtzID0gISFvcHRpb25zICYmIG9wdGlvbnMuZm9sbG93U3ltTGlua3M7XG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLnNwbGl0UGF0aChwYXRoKTtcbiAgICBpZiAoc2VnbWVudHMubGVuZ3RoID4gMSAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXSA9PT0gJycpIHtcbiAgICAgIC8vIFJlbW92ZSBhIHRyYWlsaW5nIHNsYXNoICh1bmxlc3MgdGhlIHBhdGggd2FzIG9ubHkgYC9gKVxuICAgICAgc2VnbWVudHMucG9wKCk7XG4gICAgfVxuICAgIC8vIENvbnZlcnQgdGhlIHJvb3QgZm9sZGVyIHRvIGEgY2Fub25pY2FsIGVtcHR5IHN0cmluZyBgXCJcImAgKG9uIFdpbmRvd3MgaXQgd291bGQgYmUgYEM6YCkuXG4gICAgc2VnbWVudHNbMF0gPSAnJztcbiAgICBsZXQgY3VycmVudDogRW50aXR5fG51bGwgPSB0aGlzLl9maWxlVHJlZTtcbiAgICB3aGlsZSAoc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICBjdXJyZW50ID0gY3VycmVudFt0aGlzLmdldENhbm9uaWNhbFBhdGgoc2VnbWVudHMuc2hpZnQoKSEpXTtcbiAgICAgIGlmIChjdXJyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHtwYXRoLCBlbnRpdHk6IG51bGx9O1xuICAgICAgfVxuICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA+IDAgJiYgKCFpc0ZvbGRlcihjdXJyZW50KSkpIHtcbiAgICAgICAgY3VycmVudCA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGlzRmlsZShjdXJyZW50KSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChpc1N5bUxpbmsoY3VycmVudCkpIHtcbiAgICAgICAgaWYgKGZvbGxvd1N5bUxpbmtzKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEZyb21QYXRoKHJlc29sdmUoY3VycmVudC5wYXRoLCAuLi5zZWdtZW50cyksIHtmb2xsb3dTeW1MaW5rc30pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7cGF0aCwgZW50aXR5OiBjdXJyZW50fTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzcGxpdEludG9Gb2xkZXJBbmRGaWxlKHBhdGg6IEFic29sdXRlRnNQYXRoKTogW0Fic29sdXRlRnNQYXRoLCBzdHJpbmddIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuc3BsaXRQYXRoKHRoaXMuZ2V0Q2Fub25pY2FsUGF0aChwYXRoKSk7XG4gICAgY29uc3QgZmlsZSA9IHNlZ21lbnRzLnBvcCgpITtcbiAgICByZXR1cm4gW3BhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gZmlsZS5sZW5ndGggLSAxKSBhcyBBYnNvbHV0ZUZzUGF0aCwgZmlsZV07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q2Fub25pY2FsUGF0aDxUIGV4dGVuZHMgc3RyaW5nPihwOiBUKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuaXNDYXNlU2Vuc2l0aXZlKCkgPyBwIDogcC50b0xvd2VyQ2FzZSgpIGFzIFQ7XG4gIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmluZFJlc3VsdCB7XG4gIHBhdGg6IEFic29sdXRlRnNQYXRoO1xuICBlbnRpdHk6IEVudGl0eXxudWxsO1xufVxuZXhwb3J0IHR5cGUgRW50aXR5ID0gRm9sZGVyfEZpbGV8U3ltTGluaztcbmV4cG9ydCBpbnRlcmZhY2UgRm9sZGVyIHtcbiAgW3BhdGhTZWdtZW50czogc3RyaW5nXTogRW50aXR5O1xufVxuZXhwb3J0IHR5cGUgRmlsZSA9IHN0cmluZ3xCdWZmZXI7XG5leHBvcnQgY2xhc3MgU3ltTGluayB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXRoOiBBYnNvbHV0ZUZzUGF0aCkge31cbn1cblxuY2xhc3MgTW9ja0ZpbGVTdGF0cyBpbXBsZW1lbnRzIEZpbGVTdGF0cyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZW50aXR5OiBFbnRpdHkpIHt9XG4gIGlzRmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNGaWxlKHRoaXMuZW50aXR5KTtcbiAgfVxuICBpc0RpcmVjdG9yeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNGb2xkZXIodGhpcy5lbnRpdHkpO1xuICB9XG4gIGlzU3ltYm9saWNMaW5rKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1N5bUxpbmsodGhpcy5lbnRpdHkpO1xuICB9XG59XG5cbmNsYXNzIE1vY2tGaWxlU3lzdGVtRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb2RlOiBzdHJpbmcsIHB1YmxpYyBwYXRoOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbGUoaXRlbTogRW50aXR5fG51bGwpOiBpdGVtIGlzIEZpbGUge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGl0ZW0pIHx8IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3ltTGluayhpdGVtOiBFbnRpdHl8bnVsbCk6IGl0ZW0gaXMgU3ltTGluayB7XG4gIHJldHVybiBpdGVtIGluc3RhbmNlb2YgU3ltTGluaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRm9sZGVyKGl0ZW06IEVudGl0eXxudWxsKTogaXRlbSBpcyBGb2xkZXIge1xuICByZXR1cm4gaXRlbSAhPT0gbnVsbCAmJiAhaXNGaWxlKGl0ZW0pICYmICFpc1N5bUxpbmsoaXRlbSk7XG59XG4iXX0=
|
|
314
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19maWxlX3N5c3RlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvZmlsZV9zeXN0ZW0vdGVzdGluZy9zcmMvbW9ja19maWxlX3N5c3RlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBRUgsbUZBQTZEO0lBRzdEOztPQUVHO0lBQ0g7UUFLRSx3QkFBb0IsZ0JBQXdCLEVBQUUsR0FBMkM7WUFBckUsaUNBQUEsRUFBQSx3QkFBd0I7WUFBRSxvQkFBQSxFQUFBLE1BQXNCLEdBQXFCO1lBQXJFLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBUTtZQUpwQyxjQUFTLEdBQVcsRUFBRSxDQUFDO1lBSzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsd0NBQWUsR0FBZjtZQUNFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQy9CLENBQUM7UUFFRCwrQkFBTSxHQUFOLFVBQU8sSUFBb0I7WUFDekIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUM7UUFDakQsQ0FBQztRQUVELGlDQUFRLEdBQVIsVUFBUyxJQUFvQjtZQUNwQixJQUFBLE1BQU0sR0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUEzQixDQUE0QjtZQUN6QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDbEIsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDMUI7aUJBQU07Z0JBQ0wsTUFBTSxJQUFJLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBUyxJQUFJLHVCQUFtQixDQUFDLENBQUM7YUFDakY7UUFDSCxDQUFDO1FB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QVdDO0lBRUQ7UUFBa0MsK0NBQUs7UUFDckMsNkJBQW1CLElBQVksRUFBUyxJQUFZLEVBQUUsT0FBZTtZQUFyRSxZQUNFLGtCQUFNLE9BQU8sQ0FBQyxTQUNmO1lBRmtCLFVBQUksR0FBSixJQUFJLENBQVE7WUFBUyxVQUFJLEdBQUosSUFBSSxDQUFROztRQUVwRCxDQUFDO1FBQ0gsMEJBQUM7SUFBRCxDQUFDLEFBSkQsQ0FBa0MsS0FBSyxHQUl0QztJQUVELFNBQWdCLE1BQU0sQ0FBQyxJQUFpQjtRQUN0QyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDO0lBQzNELENBQUM7SUFGRCx3QkFFQztJQUVELFNBQWdCLFNBQVMsQ0FBQyxJQUFpQjtRQUN6QyxPQUFPLElBQUksWUFBWSxPQUFPLENBQUM7SUFDakMsQ0FBQztJQUZELDhCQUVDO0lBRUQsU0FBZ0IsUUFBUSxDQUFDLElBQWlCO1FBQ3hDLE9BQU8sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRkQsNEJBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtiYXNlbmFtZSwgZGlybmFtZSwgcmVzb2x2ZX0gZnJvbSAnLi4vLi4vc3JjL2hlbHBlcnMnO1xuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aCwgRmlsZVN0YXRzLCBGaWxlU3lzdGVtLCBQYXRoU2VnbWVudCwgUGF0aFN0cmluZ30gZnJvbSAnLi4vLi4vc3JjL3R5cGVzJztcblxuLyoqXG4gKiBBbiBpbi1tZW1vcnkgZmlsZSBzeXN0ZW0gdGhhdCBjYW4gYmUgdXNlZCBpbiB1bml0IHRlc3RzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTW9ja0ZpbGVTeXN0ZW0gaW1wbGVtZW50cyBGaWxlU3lzdGVtIHtcbiAgcHJpdmF0ZSBfZmlsZVRyZWU6IEZvbGRlciA9IHt9O1xuICBwcml2YXRlIF9jd2Q6IEFic29sdXRlRnNQYXRoO1xuXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfaXNDYXNlU2Vuc2l0aXZlID0gZmFsc2UsIGN3ZDogQWJzb2x1dGVGc1BhdGggPSAnLycgYXMgQWJzb2x1dGVGc1BhdGgpIHtcbiAgICB0aGlzLl9jd2QgPSB0aGlzLm5vcm1hbGl6ZShjd2QpO1xuICB9XG5cbiAgaXNDYXNlU2Vuc2l0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLl9pc0Nhc2VTZW5zaXRpdmU7XG4gIH1cblxuICBleGlzdHMocGF0aDogQWJzb2x1dGVGc1BhdGgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maW5kRnJvbVBhdGgocGF0aCkuZW50aXR5ICE9PSBudWxsO1xuICB9XG5cbiAgcmVhZEZpbGUocGF0aDogQWJzb2x1dGVGc1BhdGgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHtlbnRpdHl9ID0gdGhpcy5maW5kRnJvbVBhdGgocGF0aCk7XG4gICAgaWYgKGlzRmlsZShlbnRpdHkpKSB7XG4gICAgICByZXR1cm4gZW50aXR5LnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBNb2NrRmlsZVN5c3RlbUVycm9yKCdFTk9FTlQnLCBwYXRoLCBgRmlsZSBcIiR7cGF0aH1cIiBkb2VzIG5vdCBleGlzdC5gKTtcbiAgICB9XG4gIH1cblxuICByZWFkRmlsZUJ1ZmZlcihwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IHtlbnRpdHl9ID0gdGhpcy5maW5kRnJvbVBhdGgocGF0aCk7XG4gICAgaWYgKGlzRmlsZShlbnRpdHkpKSB7XG4gICAgICByZXR1cm4gZW50aXR5IGluc3RhbmNlb2YgVWludDhBcnJheSA/IGVudGl0eSA6IG5ldyBCdWZmZXIoZW50aXR5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IE1vY2tGaWxlU3lzdGVtRXJyb3IoJ0VOT0VOVCcsIHBhdGgsIGBGaWxlIFwiJHtwYXRofVwiIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlRmlsZShwYXRoOiBBYnNvbHV0ZUZzUGF0aCwgZGF0YTogc3RyaW5nfFVpbnQ4QXJyYXksIGV4Y2x1c2l2ZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgW2ZvbGRlclBhdGgsIGJhc2VuYW1lXSA9IHRoaXMuc3BsaXRJbnRvRm9sZGVyQW5kRmlsZShwYXRoKTtcbiAgICBjb25zdCB7ZW50aXR5fSA9IHRoaXMuZmluZEZyb21QYXRoKGZvbGRlclBhdGgpO1xuICAgIGlmIChlbnRpdHkgPT09IG51bGwgfHwgIWlzRm9sZGVyKGVudGl0eSkpIHtcbiAgICAgIHRocm93IG5ldyBNb2NrRmlsZVN5c3RlbUVycm9yKFxuICAgICAgICAgICdFTk9FTlQnLCBwYXRoLCBgVW5hYmxlIHRvIHdyaXRlIGZpbGUgXCIke3BhdGh9XCIuIFRoZSBjb250YWluaW5nIGZvbGRlciBkb2VzIG5vdCBleGlzdC5gKTtcbiAgICB9XG4gICAgaWYgKGV4Y2x1c2l2ZSAmJiBlbnRpdHlbYmFzZW5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBNb2NrRmlsZVN5c3RlbUVycm9yKFxuICAgICAgICAgICdFRVhJU1QnLCBwYXRoLCBgVW5hYmxlIHRvIGV4Y2x1c2l2ZWx5IHdyaXRlIGZpbGUgXCIke3BhdGh9XCIuIFRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLmApO1xuICAgIH1cbiAgICBlbnRpdHlbYmFzZW5hbWVdID0gZGF0YTtcbiAgfVxuXG4gIHJlbW92ZUZpbGUocGF0aDogQWJzb2x1dGVGc1BhdGgpOiB2b2lkIHtcbiAgICBjb25zdCBbZm9sZGVyUGF0aCwgYmFzZW5hbWVdID0gdGhpcy5zcGxpdEludG9Gb2xkZXJBbmRGaWxlKHBhdGgpO1xuICAgIGNvbnN0IHtlbnRpdHl9ID0gdGhpcy5maW5kRnJvbVBhdGgoZm9sZGVyUGF0aCk7XG4gICAgaWYgKGVudGl0eSA9PT0gbnVsbCB8fCAhaXNGb2xkZXIoZW50aXR5KSkge1xuICAgICAgdGhyb3cgbmV3IE1vY2tGaWxlU3lzdGVtRXJyb3IoXG4gICAgICAgICAgJ0VOT0VOVCcsIHBhdGgsIGBVbmFibGUgdG8gcmVtb3ZlIGZpbGUgXCIke3BhdGh9XCIuIFRoZSBjb250YWluaW5nIGZvbGRlciBkb2VzIG5vdCBleGlzdC5gKTtcbiAgICB9XG4gICAgaWYgKGlzRm9sZGVyKGVudGl0eVtiYXNlbmFtZV0pKSB7XG4gICAgICB0aHJvdyBuZXcgTW9ja0ZpbGVTeXN0ZW1FcnJvcihcbiAgICAgICAgICAnRUlTRElSJywgcGF0aCwgYFVuYWJsZSB0byByZW1vdmUgZmlsZSBcIiR7cGF0aH1cIi4gVGhlIHBhdGggdG8gcmVtb3ZlIGlzIGEgZm9sZGVyLmApO1xuICAgIH1cbiAgICBkZWxldGUgZW50aXR5W2Jhc2VuYW1lXTtcbiAgfVxuXG4gIHN5bWxpbmsodGFyZ2V0OiBBYnNvbHV0ZUZzUGF0aCwgcGF0aDogQWJzb2x1dGVGc1BhdGgpOiB2b2lkIHtcbiAgICBjb25zdCBbZm9sZGVyUGF0aCwgYmFzZW5hbWVdID0gdGhpcy5zcGxpdEludG9Gb2xkZXJBbmRGaWxlKHBhdGgpO1xuICAgIGNvbnN0IHtlbnRpdHl9ID0gdGhpcy5maW5kRnJvbVBhdGgoZm9sZGVyUGF0aCk7XG4gICAgaWYgKGVudGl0eSA9PT0gbnVsbCB8fCAhaXNGb2xkZXIoZW50aXR5KSkge1xuICAgICAgdGhyb3cgbmV3IE1vY2tGaWxlU3lzdGVtRXJyb3IoXG4gICAgICAgICAgJ0VOT0VOVCcsIHBhdGgsXG4gICAgICAgICAgYFVuYWJsZSB0byBjcmVhdGUgc3ltbGluayBhdCBcIiR7cGF0aH1cIi4gVGhlIGNvbnRhaW5pbmcgZm9sZGVyIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgICBlbnRpdHlbYmFzZW5hbWVdID0gbmV3IFN5bUxpbmsodGFyZ2V0KTtcbiAgfVxuXG4gIHJlYWRkaXIocGF0aDogQWJzb2x1dGVGc1BhdGgpOiBQYXRoU2VnbWVudFtdIHtcbiAgICBjb25zdCB7ZW50aXR5fSA9IHRoaXMuZmluZEZyb21QYXRoKHBhdGgpO1xuICAgIGlmIChlbnRpdHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBNb2NrRmlsZVN5c3RlbUVycm9yKFxuICAgICAgICAgICdFTk9FTlQnLCBwYXRoLCBgVW5hYmxlIHRvIHJlYWQgZGlyZWN0b3J5IFwiJHtwYXRofVwiLiBJdCBkb2VzIG5vdCBleGlzdC5gKTtcbiAgICB9XG4gICAgaWYgKGlzRmlsZShlbnRpdHkpKSB7XG4gICAgICB0aHJvdyBuZXcgTW9ja0ZpbGVTeXN0ZW1FcnJvcihcbiAgICAgICAgICAnRU5PVERJUicsIHBhdGgsIGBVbmFibGUgdG8gcmVhZCBkaXJlY3RvcnkgXCIke3BhdGh9XCIuIEl0IGlzIGEgZmlsZS5gKTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGVudGl0eSkgYXMgUGF0aFNlZ21lbnRbXTtcbiAgfVxuXG4gIGxzdGF0KHBhdGg6IEFic29sdXRlRnNQYXRoKTogRmlsZVN0YXRzIHtcbiAgICBjb25zdCB7ZW50aXR5fSA9IHRoaXMuZmluZEZyb21QYXRoKHBhdGgpO1xuICAgIGlmIChlbnRpdHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBNb2NrRmlsZVN5c3RlbUVycm9yKCdFTk9FTlQnLCBwYXRoLCBgRmlsZSBcIiR7cGF0aH1cIiBkb2VzIG5vdCBleGlzdC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNb2NrRmlsZVN0YXRzKGVudGl0eSk7XG4gIH1cblxuICBzdGF0KHBhdGg6IEFic29sdXRlRnNQYXRoKTogRmlsZVN0YXRzIHtcbiAgICBjb25zdCB7ZW50aXR5fSA9IHRoaXMuZmluZEZyb21QYXRoKHBhdGgsIHtmb2xsb3dTeW1MaW5rczogdHJ1ZX0pO1xuICAgIGlmIChlbnRpdHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBNb2NrRmlsZVN5c3RlbUVycm9yKCdFTk9FTlQnLCBwYXRoLCBgRmlsZSBcIiR7cGF0aH1cIiBkb2VzIG5vdCBleGlzdC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNb2NrRmlsZVN0YXRzKGVudGl0eSk7XG4gIH1cblxuICBjb3B5RmlsZShmcm9tOiBBYnNvbHV0ZUZzUGF0aCwgdG86IEFic29sdXRlRnNQYXRoKTogdm9pZCB7XG4gICAgdGhpcy53cml0ZUZpbGUodG8sIHRoaXMucmVhZEZpbGUoZnJvbSkpO1xuICB9XG5cbiAgbW92ZUZpbGUoZnJvbTogQWJzb2x1dGVGc1BhdGgsIHRvOiBBYnNvbHV0ZUZzUGF0aCk6IHZvaWQge1xuICAgIHRoaXMud3JpdGVGaWxlKHRvLCB0aGlzLnJlYWRGaWxlKGZyb20pKTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbmRGcm9tUGF0aChkaXJuYW1lKGZyb20pKTtcbiAgICBjb25zdCBmb2xkZXIgPSByZXN1bHQuZW50aXR5IGFzIEZvbGRlcjtcbiAgICBjb25zdCBuYW1lID0gYmFzZW5hbWUoZnJvbSk7XG4gICAgZGVsZXRlIGZvbGRlcltuYW1lXTtcbiAgfVxuXG4gIGVuc3VyZURpcihwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IHZvaWQge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5zcGxpdFBhdGgocGF0aCkubWFwKHNlZ21lbnQgPT4gdGhpcy5nZXRDYW5vbmljYWxQYXRoKHNlZ21lbnQpKTtcbiAgICBsZXQgY3VycmVudDogRm9sZGVyID0gdGhpcy5fZmlsZVRyZWU7XG5cbiAgICAvLyBDb252ZXJ0IHRoZSByb290IGZvbGRlciB0byBhIGNhbm9uaWNhbCBlbXB0eSBzdHJpbmcgYCcnYCAob24gV2luZG93cyBpdCB3b3VsZCBiZSBgJ0M6J2ApLlxuICAgIHNlZ21lbnRzWzBdID0gJyc7XG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7XG4gICAgICBpZiAoaXNGaWxlKGN1cnJlbnRbc2VnbWVudF0pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRm9sZGVyIGFscmVhZHkgZXhpc3RzIGFzIGEgZmlsZS5gKTtcbiAgICAgIH1cbiAgICAgIGlmICghY3VycmVudFtzZWdtZW50XSkge1xuICAgICAgICBjdXJyZW50W3NlZ21lbnRdID0ge307XG4gICAgICB9XG4gICAgICBjdXJyZW50ID0gY3VycmVudFtzZWdtZW50XSBhcyBGb2xkZXI7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRGVlcChwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IHZvaWQge1xuICAgIGNvbnN0IFtmb2xkZXJQYXRoLCBiYXNlbmFtZV0gPSB0aGlzLnNwbGl0SW50b0ZvbGRlckFuZEZpbGUocGF0aCk7XG4gICAgY29uc3Qge2VudGl0eX0gPSB0aGlzLmZpbmRGcm9tUGF0aChmb2xkZXJQYXRoKTtcbiAgICBpZiAoZW50aXR5ID09PSBudWxsIHx8ICFpc0ZvbGRlcihlbnRpdHkpKSB7XG4gICAgICB0aHJvdyBuZXcgTW9ja0ZpbGVTeXN0ZW1FcnJvcihcbiAgICAgICAgICAnRU5PRU5UJywgcGF0aCxcbiAgICAgICAgICBgVW5hYmxlIHRvIHJlbW92ZSBmb2xkZXIgXCIke3BhdGh9XCIuIFRoZSBjb250YWluaW5nIGZvbGRlciBkb2VzIG5vdCBleGlzdC5gKTtcbiAgICB9XG4gICAgZGVsZXRlIGVudGl0eVtiYXNlbmFtZV07XG4gIH1cblxuICBpc1Jvb3QocGF0aDogQWJzb2x1dGVGc1BhdGgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXJuYW1lKHBhdGgpID09PSBwYXRoO1xuICB9XG5cbiAgZXh0bmFtZShwYXRoOiBBYnNvbHV0ZUZzUGF0aHxQYXRoU2VnbWVudCk6IHN0cmluZyB7XG4gICAgY29uc3QgbWF0Y2ggPSAvLisoXFwuW14uXSopJC8uZXhlYyhwYXRoKTtcbiAgICByZXR1cm4gbWF0Y2ggIT09IG51bGwgPyBtYXRjaFsxXSA6ICcnO1xuICB9XG5cbiAgcmVhbHBhdGgoZmlsZVBhdGg6IEFic29sdXRlRnNQYXRoKTogQWJzb2x1dGVGc1BhdGgge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZEZyb21QYXRoKGZpbGVQYXRoLCB7Zm9sbG93U3ltTGlua3M6IHRydWV9KTtcbiAgICBpZiAocmVzdWx0LmVudGl0eSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IE1vY2tGaWxlU3lzdGVtRXJyb3IoXG4gICAgICAgICAgJ0VOT0VOVCcsIGZpbGVQYXRoLCBgVW5hYmxlIHRvIGZpbmQgdGhlIHJlYWwgcGF0aCBvZiBcIiR7ZmlsZVBhdGh9XCIuIEl0IGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0LnBhdGg7XG4gICAgfVxuICB9XG5cbiAgcHdkKCk6IEFic29sdXRlRnNQYXRoIHtcbiAgICByZXR1cm4gdGhpcy5fY3dkO1xuICB9XG5cbiAgY2hkaXIocGF0aDogQWJzb2x1dGVGc1BhdGgpOiB2b2lkIHtcbiAgICB0aGlzLl9jd2QgPSB0aGlzLm5vcm1hbGl6ZShwYXRoKTtcbiAgfVxuXG4gIGdldERlZmF1bHRMaWJMb2NhdGlvbigpOiBBYnNvbHV0ZUZzUGF0aCB7XG4gICAgLy8gTWltaWMgdGhlIG5vZGUgbW9kdWxlIHJlc29sdXRpb24gYWxnb3JpdGhtIGFuZCBzdGFydCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHRoZW4gbG9va1xuICAgIC8vIHByb2dyZXNzaXZlbHkgZnVydGhlciB1cCB0aGUgdHJlZSB1bnRpbCByZWFjaGluZyB0aGUgRlMgcm9vdC5cbiAgICAvLyBFLmcuIGlmIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyAvZm9vL2JhciwgbG9vayBpbiAvZm9vL2Jhci9ub2RlX21vZHVsZXMsIHRoZW5cbiAgICAvLyAvZm9vL25vZGVfbW9kdWxlcywgdGhlbiAvbm9kZV9tb2R1bGVzLlxuXG4gICAgbGV0IHBhdGggPSAnbm9kZV9tb2R1bGVzL3R5cGVzY3JpcHQvbGliJztcbiAgICBsZXQgcmVzb2x2ZWRQYXRoID0gdGhpcy5yZXNvbHZlKHBhdGgpO1xuXG4gICAgLy8gQ29uc3RydWN0IGEgcGF0aCBmb3IgdGhlIHRvcC1sZXZlbCBub2RlX21vZHVsZXMgdG8gaWRlbnRpZnkgdGhlIHN0b3BwaW5nIHBvaW50LlxuICAgIGNvbnN0IHRvcExldmVsTm9kZU1vZHVsZXMgPSB0aGlzLnJlc29sdmUoJy8nICsgcGF0aCk7XG5cbiAgICB3aGlsZSAocmVzb2x2ZWRQYXRoICE9PSB0b3BMZXZlbE5vZGVNb2R1bGVzKSB7XG4gICAgICBpZiAodGhpcy5leGlzdHMocmVzb2x2ZWRQYXRoKSkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWRQYXRoO1xuICAgICAgfVxuXG4gICAgICAvLyBOb3QgaGVyZSwgbG9vayBvbmUgbGV2ZWwgaGlnaGVyLlxuICAgICAgcGF0aCA9ICcuLi8nICsgcGF0aDtcbiAgICAgIHJlc29sdmVkUGF0aCA9IHRoaXMucmVzb2x2ZShwYXRoKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgbG9vcCBleGl0cyBiZWZvcmUgY2hlY2tpbmcgdGhlIGV4aXN0ZW5jZSBvZiAvbm9kZV9tb2R1bGVzL3R5cGVzY3JpcHQgYXQgdGhlIHRvcCBsZXZlbC5cbiAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsIC0gaWYgbm8gL25vZGVfbW9kdWxlcy90eXBlc2NyaXB0IGV4aXN0cyBhbnl3aGVyZSBpbiB0aGUgdHJlZSwgdGhlcmUnc1xuICAgIC8vIG5vdGhpbmcgdGhpcyBmdW5jdGlvbiBjYW4gZG8gYWJvdXQgaXQsIGFuZCBUUyBtYXkgZXJyb3IgbGF0ZXIgaWYgaXQgbG9va3MgZm9yIGEgbGliLmQudHMgZmlsZVxuICAgIC8vIHdpdGhpbiB0aGlzIGRpcmVjdG9yeS4gSXQgbWlnaHQgYmUgb2theSwgdGhvdWdoLCBpZiBUUyBuZXZlciBjaGVja3MgZm9yIG9uZS5cbiAgICByZXR1cm4gdG9wTGV2ZWxOb2RlTW9kdWxlcztcbiAgfVxuXG4gIGFic3RyYWN0IHJlc29sdmUoLi4ucGF0aHM6IHN0cmluZ1tdKTogQWJzb2x1dGVGc1BhdGg7XG4gIGFic3RyYWN0IGRpcm5hbWU8VCBleHRlbmRzIHN0cmluZz4oZmlsZTogVCk6IFQ7XG4gIGFic3RyYWN0IGpvaW48VCBleHRlbmRzIHN0cmluZz4oYmFzZVBhdGg6IFQsIC4uLnBhdGhzOiBzdHJpbmdbXSk6IFQ7XG4gIGFic3RyYWN0IHJlbGF0aXZlPFQgZXh0ZW5kcyBQYXRoU3RyaW5nPihmcm9tOiBULCB0bzogVCk6IFBhdGhTZWdtZW50fEFic29sdXRlRnNQYXRoO1xuICBhYnN0cmFjdCBiYXNlbmFtZShmaWxlUGF0aDogc3RyaW5nLCBleHRlbnNpb24/OiBzdHJpbmcpOiBQYXRoU2VnbWVudDtcbiAgYWJzdHJhY3QgaXNSb290ZWQocGF0aDogc3RyaW5nKTogYm9vbGVhbjtcbiAgYWJzdHJhY3Qgbm9ybWFsaXplPFQgZXh0ZW5kcyBQYXRoU3RyaW5nPihwYXRoOiBUKTogVDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNwbGl0UGF0aDxUIGV4dGVuZHMgUGF0aFN0cmluZz4ocGF0aDogVCk6IHN0cmluZ1tdO1xuXG4gIGR1bXAoKTogRm9sZGVyIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZUZvbGRlcih0aGlzLl9maWxlVHJlZSk7XG4gIH1cbiAgaW5pdChmb2xkZXI6IEZvbGRlcik6IHZvaWQge1xuICAgIHRoaXMuX2ZpbGVUcmVlID0gdGhpcy5jbG9uZUZvbGRlcihmb2xkZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9uZUZvbGRlcihmb2xkZXI6IEZvbGRlcik6IEZvbGRlciB7XG4gICAgY29uc3QgY2xvbmU6IEZvbGRlciA9IHt9O1xuICAgIGZvciAoY29uc3QgcGF0aCBpbiBmb2xkZXIpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBmb2xkZXJbcGF0aF07XG4gICAgICBjb25zdCBjYW5vbmljYWxQYXRoID0gdGhpcy5nZXRDYW5vbmljYWxQYXRoKHBhdGgpO1xuICAgICAgaWYgKGlzU3ltTGluayhpdGVtKSkge1xuICAgICAgICBjbG9uZVtjYW5vbmljYWxQYXRoXSA9IG5ldyBTeW1MaW5rKHRoaXMuZ2V0Q2Fub25pY2FsUGF0aChpdGVtLnBhdGgpKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNGb2xkZXIoaXRlbSkpIHtcbiAgICAgICAgY2xvbmVbY2Fub25pY2FsUGF0aF0gPSB0aGlzLmNsb25lRm9sZGVyKGl0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xvbmVbY2Fub25pY2FsUGF0aF0gPSBmb2xkZXJbcGF0aF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGZpbmRGcm9tUGF0aChwYXRoOiBBYnNvbHV0ZUZzUGF0aCwgb3B0aW9ucz86IHtmb2xsb3dTeW1MaW5rczogYm9vbGVhbn0pOiBGaW5kUmVzdWx0IHtcbiAgICBjb25zdCBmb2xsb3dTeW1MaW5rcyA9ICEhb3B0aW9ucyAmJiBvcHRpb25zLmZvbGxvd1N5bUxpbmtzO1xuICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5zcGxpdFBhdGgocGF0aCk7XG4gICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA+IDEgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0gPT09ICcnKSB7XG4gICAgICAvLyBSZW1vdmUgYSB0cmFpbGluZyBzbGFzaCAodW5sZXNzIHRoZSBwYXRoIHdhcyBvbmx5IGAvYClcbiAgICAgIHNlZ21lbnRzLnBvcCgpO1xuICAgIH1cbiAgICAvLyBDb252ZXJ0IHRoZSByb290IGZvbGRlciB0byBhIGNhbm9uaWNhbCBlbXB0eSBzdHJpbmcgYFwiXCJgIChvbiBXaW5kb3dzIGl0IHdvdWxkIGJlIGBDOmApLlxuICAgIHNlZ21lbnRzWzBdID0gJyc7XG4gICAgbGV0IGN1cnJlbnQ6IEVudGl0eXxudWxsID0gdGhpcy5fZmlsZVRyZWU7XG4gICAgd2hpbGUgKHNlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgY3VycmVudCA9IGN1cnJlbnRbdGhpcy5nZXRDYW5vbmljYWxQYXRoKHNlZ21lbnRzLnNoaWZ0KCkhKV07XG4gICAgICBpZiAoY3VycmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7cGF0aCwgZW50aXR5OiBudWxsfTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPiAwICYmICghaXNGb2xkZXIoY3VycmVudCkpKSB7XG4gICAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChpc0ZpbGUoY3VycmVudCkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaXNTeW1MaW5rKGN1cnJlbnQpKSB7XG4gICAgICAgIGlmIChmb2xsb3dTeW1MaW5rcykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmZpbmRGcm9tUGF0aChyZXNvbHZlKGN1cnJlbnQucGF0aCwgLi4uc2VnbWVudHMpLCB7Zm9sbG93U3ltTGlua3N9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge3BhdGgsIGVudGl0eTogY3VycmVudH07XG4gIH1cblxuICBwcm90ZWN0ZWQgc3BsaXRJbnRvRm9sZGVyQW5kRmlsZShwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IFtBYnNvbHV0ZUZzUGF0aCwgc3RyaW5nXSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLnNwbGl0UGF0aCh0aGlzLmdldENhbm9uaWNhbFBhdGgocGF0aCkpO1xuICAgIGNvbnN0IGZpbGUgPSBzZWdtZW50cy5wb3AoKSE7XG4gICAgcmV0dXJuIFtwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxlbmd0aCAtIGZpbGUubGVuZ3RoIC0gMSkgYXMgQWJzb2x1dGVGc1BhdGgsIGZpbGVdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldENhbm9uaWNhbFBhdGg8VCBleHRlbmRzIHN0cmluZz4ocDogVCk6IFQge1xuICAgIHJldHVybiB0aGlzLmlzQ2FzZVNlbnNpdGl2ZSgpID8gcCA6IHAudG9Mb3dlckNhc2UoKSBhcyBUO1xuICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIEZpbmRSZXN1bHQge1xuICBwYXRoOiBBYnNvbHV0ZUZzUGF0aDtcbiAgZW50aXR5OiBFbnRpdHl8bnVsbDtcbn1cbmV4cG9ydCB0eXBlIEVudGl0eSA9IEZvbGRlcnxGaWxlfFN5bUxpbms7XG5leHBvcnQgaW50ZXJmYWNlIEZvbGRlciB7XG4gIFtwYXRoU2VnbWVudHM6IHN0cmluZ106IEVudGl0eTtcbn1cbmV4cG9ydCB0eXBlIEZpbGUgPSBzdHJpbmd8VWludDhBcnJheTtcbmV4cG9ydCBjbGFzcyBTeW1MaW5rIHtcbiAgY29uc3RydWN0b3IocHVibGljIHBhdGg6IEFic29sdXRlRnNQYXRoKSB7fVxufVxuXG5jbGFzcyBNb2NrRmlsZVN0YXRzIGltcGxlbWVudHMgRmlsZVN0YXRzIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbnRpdHk6IEVudGl0eSkge31cbiAgaXNGaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0ZpbGUodGhpcy5lbnRpdHkpO1xuICB9XG4gIGlzRGlyZWN0b3J5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0ZvbGRlcih0aGlzLmVudGl0eSk7XG4gIH1cbiAgaXNTeW1ib2xpY0xpbmsoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzU3ltTGluayh0aGlzLmVudGl0eSk7XG4gIH1cbn1cblxuY2xhc3MgTW9ja0ZpbGVTeXN0ZW1FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIGNvZGU6IHN0cmluZywgcHVibGljIHBhdGg6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsZShpdGVtOiBFbnRpdHl8bnVsbCk6IGl0ZW0gaXMgRmlsZSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoaXRlbSkgfHwgdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTeW1MaW5rKGl0ZW06IEVudGl0eXxudWxsKTogaXRlbSBpcyBTeW1MaW5rIHtcbiAgcmV0dXJuIGl0ZW0gaW5zdGFuY2VvZiBTeW1MaW5rO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGb2xkZXIoaXRlbTogRW50aXR5fG51bGwpOiBpdGVtIGlzIEZvbGRlciB7XG4gIHJldHVybiBpdGVtICE9PSBudWxsICYmICFpc0ZpbGUoaXRlbSkgJiYgIWlzU3ltTGluayhpdGVtKTtcbn1cbiJdfQ==
|
|
@@ -85,15 +85,11 @@
|
|
|
85
85
|
if (!(ast.receiver instanceof compiler_1.ImplicitReceiver)) {
|
|
86
86
|
return;
|
|
87
87
|
}
|
|
88
|
-
//
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
var localExpression = this.expressionStr.substr(ast.span.start);
|
|
93
|
-
if (!localExpression.includes(ast.name)) {
|
|
94
|
-
throw new Error("Impossible state: \"" + ast.name + "\" not found in \"" + localExpression + "\"");
|
|
88
|
+
// The source span of the requested AST starts at a location that is offset from the expression.
|
|
89
|
+
var identifierStart = ast.sourceSpan.start - this.absoluteOffset;
|
|
90
|
+
if (!this.expressionStr.substring(identifierStart).startsWith(ast.name)) {
|
|
91
|
+
throw new Error("Impossible state: \"" + ast.name + "\" not found in \"" + this.expressionStr + "\" at location " + identifierStart);
|
|
95
92
|
}
|
|
96
|
-
var identifierStart = ast.span.start + localExpression.indexOf(ast.name);
|
|
97
93
|
// Join the relative position of the expression within a node with the absolute position
|
|
98
94
|
// of the node to get the absolute position of the expression in the source code.
|
|
99
95
|
var absoluteStart = this.absoluteOffset + identifierStart;
|
|
@@ -170,21 +166,11 @@
|
|
|
170
166
|
};
|
|
171
167
|
TemplateVisitor.prototype.visitBoundAttribute = function (attribute) {
|
|
172
168
|
var _this = this;
|
|
173
|
-
//
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
//
|
|
179
|
-
// TODO(ayazhafiz): Remove this when https://github.com/angular/angular/pull/31813 lands.
|
|
180
|
-
var attributeSrc = attribute.sourceSpan.toString();
|
|
181
|
-
var attributeAbsolutePosition = attribute.sourceSpan.start.offset;
|
|
182
|
-
// Skip the bytes of the attribute name so that there are no collisions between the attribute
|
|
183
|
-
// name and expression identifier names later.
|
|
184
|
-
var nameSkipOffet = attributeSrc.indexOf(attribute.name) + attribute.name.length;
|
|
185
|
-
var expressionSrc = attributeSrc.substring(nameSkipOffet);
|
|
186
|
-
var expressionAbsolutePosition = attributeAbsolutePosition + nameSkipOffet;
|
|
187
|
-
var identifiers = ExpressionVisitor.getIdentifiers(attribute.value, expressionSrc, expressionAbsolutePosition, this.boundTemplate, this.targetToIdentifier.bind(this));
|
|
169
|
+
// If the bound attribute has no value, it cannot have any identifiers in the value expression.
|
|
170
|
+
if (attribute.valueSpan === undefined) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
var identifiers = ExpressionVisitor.getIdentifiers(attribute.value, attribute.valueSpan.toString(), attribute.valueSpan.start.offset, this.boundTemplate, this.targetToIdentifier.bind(this));
|
|
188
174
|
identifiers.forEach(function (id) { return _this.identifiers.add(id); });
|
|
189
175
|
};
|
|
190
176
|
TemplateVisitor.prototype.visitBoundEvent = function (attribute) {
|
|
@@ -338,4 +324,4 @@
|
|
|
338
324
|
}
|
|
339
325
|
exports.getTemplateIdentifiers = getTemplateIdentifiers;
|
|
340
326
|
});
|
|
341
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2luZGV4ZXIvc3JjL3RlbXBsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7SUFBQTs7Ozs7O09BTUc7SUFDSCw4Q0FBeVU7SUFDelUsdUVBQTROO0lBaUI1Tjs7Ozs7Ozs7T0FRRztJQUNIO1FBQWdDLDZDQUFtQjtRQUdqRCwyQkFDcUIsYUFBcUIsRUFBbUIsY0FBc0IsRUFDOUQsYUFBeUMsRUFDekMsa0JBQTREO1lBSGpGLFlBSUUsaUJBQU8sU0FDUjtZQUpvQixtQkFBYSxHQUFiLGFBQWEsQ0FBUTtZQUFtQixvQkFBYyxHQUFkLGNBQWMsQ0FBUTtZQUM5RCxtQkFBYSxHQUFiLGFBQWEsQ0FBNEI7WUFDekMsd0JBQWtCLEdBQWxCLGtCQUFrQixDQUEwQztZQUx4RSxpQkFBVyxHQUEyQixFQUFFLENBQUM7O1FBT2xELENBQUM7UUFFRDs7Ozs7Ozs7OztXQVVHO1FBQ0ksZ0NBQWMsR0FBckIsVUFDSSxHQUFRLEVBQUUsTUFBYyxFQUFFLGNBQXNCLEVBQUUsYUFBeUMsRUFDM0Ysa0JBQTREO1lBQzlELElBQU0sT0FBTyxHQUNULElBQUksaUJBQWlCLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUNyRixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUM3QixDQUFDO1FBRUQsaUNBQUssR0FBTCxVQUFNLEdBQVE7WUFDWixHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFFRCwyQ0FBZSxHQUFmLFVBQWdCLEdBQWUsRUFBRSxPQUFXO1lBQzFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLG9CQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakQsaUJBQU0sZUFBZSxZQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsNkNBQWlCLEdBQWpCLFVBQWtCLEdBQWlCLEVBQUUsT0FBVztZQUM5QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxvQkFBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELGlCQUFNLGlCQUFpQixZQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBRUQsOENBQWtCLEdBQWxCLFVBQW1CLEdBQWtCLEVBQUUsT0FBVztZQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxvQkFBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELGlCQUFNLGtCQUFrQixZQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQ7Ozs7O1dBS0c7UUFDSywyQ0FBZSxHQUF2QixVQUNJLEdBQXNDLEVBQUUsSUFBa0M7WUFDNUUseUZBQXlGO1lBQ3pGLGdGQUFnRjtZQUNoRixnR0FBZ0c7WUFDaEcsNERBQTREO1lBQzVELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLFlBQVksMkJBQWdCLENBQUMsRUFBRTtnQkFDL0MsT0FBTzthQUNSO1lBRUQsdURBQXVEO1lBQ3ZELDRGQUE0RjtZQUM1Riw2RkFBNkY7WUFDN0YsbUZBQW1GO1lBQ25GLElBQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUFzQixHQUFHLENBQUMsSUFBSSwwQkFBbUIsZUFBZSxPQUFHLENBQUMsQ0FBQzthQUN0RjtZQUNELElBQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTNFLHdGQUF3RjtZQUN4RixpRkFBaUY7WUFDakYsSUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxlQUFlLENBQUM7WUFDNUQsSUFBTSxJQUFJLEdBQUcsSUFBSSx3QkFBa0IsQ0FBQyxhQUFhLEVBQUUsYUFBYSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFcEYsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5RCxJQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3JFLElBQU0sVUFBVSxHQUFHO2dCQUNqQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7Z0JBQ2QsSUFBSSxNQUFBO2dCQUNKLElBQUksTUFBQTtnQkFDSixNQUFNLFFBQUE7YUFDaUIsQ0FBQztZQUUxQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0gsd0JBQUM7SUFBRCxDQUFDLEFBM0ZELENBQWdDLDhCQUFtQixHQTJGbEQ7SUFFRDs7O09BR0c7SUFDSDtRQUE4QiwyQ0FBdUI7UUFXbkQ7Ozs7O1dBS0c7UUFDSCx5QkFBb0IsYUFBeUM7WUFBN0QsWUFDRSxpQkFBTyxTQUNSO1lBRm1CLG1CQUFhLEdBQWIsYUFBYSxDQUE0QjtZQWhCN0QsaURBQWlEO1lBQ3hDLGlCQUFXLEdBQUcsSUFBSSxHQUFHLEVBQXNCLENBQUM7WUFFckQscURBQXFEO1lBQ3BDLDJCQUFxQixHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBRXhFLHNEQUFzRDtZQUNyQyx1Q0FBaUMsR0FDOUMsSUFBSSxHQUFHLEVBQTRFLENBQUM7O1FBVXhGLENBQUM7UUFFRDs7OztXQUlHO1FBQ0gsK0JBQUssR0FBTCxVQUFNLElBQWM7WUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBRUQsa0NBQVEsR0FBUixVQUFTLEtBQW9CO1lBQTdCLGlCQUVDO1lBREMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLEtBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQWhCLENBQWdCLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQ7Ozs7V0FJRztRQUNILHNDQUFZLEdBQVosVUFBYSxPQUF1QjtZQUNsQyxJQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV0RSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBRXhDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFDRCx1Q0FBYSxHQUFiLFVBQWMsUUFBeUI7WUFDckMsSUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFeEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUV6QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsNkNBQW1CLEdBQW5CLFVBQW9CLFNBQWdDO1lBQXBELGlCQXFCQztZQXBCQyw4RkFBOEY7WUFDOUYsNEZBQTRGO1lBQzVGLHlCQUF5QjtZQUN6QiwyRkFBMkY7WUFDM0Ysb0VBQW9FO1lBQ3BFLEVBQUU7WUFDRix5RkFBeUY7WUFDekYsSUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyRCxJQUFNLHlCQUF5QixHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUVwRSw2RkFBNkY7WUFDN0YsOENBQThDO1lBQzlDLElBQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ25GLElBQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDNUQsSUFBTSwwQkFBMEIsR0FBRyx5QkFBeUIsR0FBRyxhQUFhLENBQUM7WUFFN0UsSUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsY0FBYyxDQUNoRCxTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSwwQkFBMEIsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUM5RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDeEMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFBLEVBQUUsSUFBSSxPQUFBLEtBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUF4QixDQUF3QixDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUNELHlDQUFlLEdBQWYsVUFBZ0IsU0FBNEI7WUFDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELHdDQUFjLEdBQWQsVUFBZSxJQUFzQjtZQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0Qsd0NBQWMsR0FBZCxVQUFlLFNBQTJCO1lBQ3hDLElBQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTlELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELHVDQUFhLEdBQWIsVUFBYyxRQUF5QjtZQUNyQyxJQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUU3RCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCxxRUFBcUU7UUFDN0QsdURBQTZCLEdBQXJDLFVBQXNDLElBQW9DO1lBRXhFLGdFQUFnRTtZQUNoRSxJQUFJLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3BELE9BQU8sSUFBSSxDQUFDLGlDQUFpQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUUsQ0FBQzthQUMxRDtZQUVELElBQUksSUFBWSxDQUFDO1lBQ2pCLElBQUksSUFBb0QsQ0FBQztZQUN6RCxJQUFJLElBQUksWUFBWSwwQkFBZSxFQUFFO2dCQUNuQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDcEIsSUFBSSxHQUFHLG9CQUFjLENBQUMsUUFBUSxDQUFDO2FBQ2hDO2lCQUFNO2dCQUNMLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNqQixJQUFJLEdBQUcsb0JBQWMsQ0FBQyxPQUFPLENBQUM7YUFDL0I7WUFDTSxJQUFBLFVBQVUsR0FBSSxJQUFJLFdBQVIsQ0FBUztZQUMxQiwyRkFBMkY7WUFDM0YsMkZBQTJGO1lBQzNGLG9FQUFvRTtZQUNwRSxJQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3RELElBQU0sWUFBWSxHQUFHLElBQUksd0JBQWtCLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFeEUsMkZBQTJGO1lBQzNGLHdDQUF3QztZQUN4QyxJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFDLEVBQWtCO29CQUFqQixJQUFJLFVBQUEsRUFBRSxVQUFVLGdCQUFBO2dCQUN2RCxPQUFPO29CQUNMLElBQUksTUFBQTtvQkFDSixJQUFJLEVBQUUsSUFBSSx3QkFBa0IsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztvQkFDNUUsSUFBSSxFQUFFLG9CQUFjLENBQUMsU0FBUztpQkFDL0IsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFMUUsSUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLElBQUksTUFBQTtnQkFDSixJQUFJLEVBQUUsWUFBWTtnQkFDbEIsSUFBSSxNQUFBO2dCQUNKLFVBQVUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUM7Z0JBQy9CLGNBQWMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQUEsR0FBRztvQkFDNUMsT0FBTzt3QkFDTCxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJO3dCQUNsQixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7cUJBQ3ZCLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7YUFHcUIsQ0FBQztZQUUzQixJQUFJLENBQUMsaUNBQWlDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztZQUM3RCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBRUQsa0ZBQWtGO1FBQzFFLDRDQUFrQixHQUExQixVQUEyQixJQUFzQztZQUMvRCxnRUFBZ0U7WUFDaEUsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4QyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUM7YUFDOUM7WUFFTSxJQUFBLElBQUksR0FBZ0IsSUFBSSxLQUFwQixFQUFFLFVBQVUsR0FBSSxJQUFJLFdBQVIsQ0FBUztZQUNoQyxJQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3RELElBQU0sSUFBSSxHQUFHLElBQUksd0JBQWtCLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEUsSUFBSSxVQUFrRCxDQUFDO1lBQ3ZELElBQUksSUFBSSxZQUFZLDJCQUFnQixFQUFFO2dCQUNwQyx3RkFBd0Y7Z0JBQ3hGLDRGQUE0RjtnQkFDNUYsbUNBQW1DO2dCQUNuQyxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ2xCLElBQUksU0FBUyxFQUFFO29CQUNiLElBQUksU0FBUyxZQUFZLHlCQUFjLElBQUksU0FBUyxZQUFZLDBCQUFlLEVBQUU7d0JBQy9FLE1BQU0sR0FBRzs0QkFDUCxJQUFJLEVBQUUsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFNBQVMsQ0FBQzs0QkFDbkQsU0FBUyxFQUFFLElBQUk7eUJBQ2hCLENBQUM7cUJBQ0g7eUJBQU07d0JBQ0wsTUFBTSxHQUFHOzRCQUNQLElBQUksRUFBRSxJQUFJLENBQUMsNkJBQTZCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQzs0QkFDeEQsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUk7eUJBQ3hDLENBQUM7cUJBQ0g7aUJBQ0Y7Z0JBRUQsVUFBVSxHQUFHO29CQUNYLElBQUksTUFBQTtvQkFDSixJQUFJLE1BQUE7b0JBQ0osSUFBSSxFQUFFLG9CQUFjLENBQUMsU0FBUztvQkFDOUIsTUFBTSxRQUFBO2lCQUNQLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxVQUFVLEdBQUc7b0JBQ1gsSUFBSSxNQUFBO29CQUNKLElBQUksTUFBQTtvQkFDSixJQUFJLEVBQUUsb0JBQWMsQ0FBQyxRQUFRO2lCQUM5QixDQUFDO2FBQ0g7WUFFRCxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNqRCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBRUQsMERBQTBEO1FBQ2xELDBDQUFnQixHQUF4QixVQUF5QixJQUFZLEVBQUUsT0FBd0I7WUFDN0QsSUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUFzQixJQUFJLDBCQUFtQixRQUFRLE9BQUcsQ0FBQyxDQUFDO2FBQzNFO1lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRDs7Ozs7V0FLRztRQUNLLHlDQUFlLEdBQXZCLFVBQXdCLEdBQVE7WUFBaEMsaUJBVUM7WUFUQyx3RkFBd0Y7WUFDeEYsSUFBSSxHQUFHLFlBQVksd0JBQWEsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtnQkFDdkQsK0VBQStFO2dCQUMvRSxJQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlELElBQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO2dCQUM1QyxJQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxjQUFjLENBQ2hELEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLGtCQUFrQixDQUFDLENBQUM7Z0JBQzdFLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBQSxFQUFFLElBQUksT0FBQSxLQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBeEIsQ0FBd0IsQ0FBQyxDQUFDO2FBQ3JEO1FBQ0gsQ0FBQztRQUNILHNCQUFDO0lBQUQsQ0FBQyxBQXJPRCxDQUE4QixrQ0FBdUIsR0FxT3BEO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxhQUF5QztRQUU5RSxJQUFNLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUMvQyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDakQ7UUFDRCxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDN0IsQ0FBQztJQVBELHdEQU9DIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge0FTVCwgQVNUV2l0aFNvdXJjZSwgQm91bmRUYXJnZXQsIEltcGxpY2l0UmVjZWl2ZXIsIE1ldGhvZENhbGwsIFBhcnNlU291cmNlU3BhbiwgUHJvcGVydHlSZWFkLCBQcm9wZXJ0eVdyaXRlLCBSZWN1cnNpdmVBc3RWaXNpdG9yLCBUbXBsQXN0Qm91bmRBdHRyaWJ1dGUsIFRtcGxBc3RCb3VuZEV2ZW50LCBUbXBsQXN0Qm91bmRUZXh0LCBUbXBsQXN0RWxlbWVudCwgVG1wbEFzdE5vZGUsIFRtcGxBc3RSZWN1cnNpdmVWaXNpdG9yLCBUbXBsQXN0UmVmZXJlbmNlLCBUbXBsQXN0VGVtcGxhdGUsIFRtcGxBc3RWYXJpYWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0IHtBYnNvbHV0ZVNvdXJjZVNwYW4sIEF0dHJpYnV0ZUlkZW50aWZpZXIsIEVsZW1lbnRJZGVudGlmaWVyLCBJZGVudGlmaWVyS2luZCwgTWV0aG9kSWRlbnRpZmllciwgUHJvcGVydHlJZGVudGlmaWVyLCBSZWZlcmVuY2VJZGVudGlmaWVyLCBUZW1wbGF0ZU5vZGVJZGVudGlmaWVyLCBUb3BMZXZlbElkZW50aWZpZXIsIFZhcmlhYmxlSWRlbnRpZmllcn0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHtDb21wb25lbnRNZXRhfSBmcm9tICcuL2NvbnRleHQnO1xuXG4vKipcbiAqIEEgcGFyc2VkIG5vZGUgaW4gYSB0ZW1wbGF0ZSwgd2hpY2ggbWF5IGhhdmUgYSBuYW1lIChpZiBpdCBpcyBhIHNlbGVjdG9yKSBvclxuICogYmUgYW5vbnltb3VzIChsaWtlIGEgdGV4dCBzcGFuKS5cbiAqL1xuaW50ZXJmYWNlIEhUTUxOb2RlIGV4dGVuZHMgVG1wbEFzdE5vZGUge1xuICB0YWdOYW1lPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG50eXBlIEV4cHJlc3Npb25JZGVudGlmaWVyID0gUHJvcGVydHlJZGVudGlmaWVyfE1ldGhvZElkZW50aWZpZXI7XG50eXBlIFRtcGxUYXJnZXQgPSBUbXBsQXN0UmVmZXJlbmNlfFRtcGxBc3RWYXJpYWJsZTtcbnR5cGUgVGFyZ2V0SWRlbnRpZmllciA9IFJlZmVyZW5jZUlkZW50aWZpZXJ8VmFyaWFibGVJZGVudGlmaWVyO1xudHlwZSBUYXJnZXRJZGVudGlmaWVyTWFwID0gTWFwPFRtcGxUYXJnZXQsIFRhcmdldElkZW50aWZpZXI+O1xuXG4vKipcbiAqIFZpc2l0cyB0aGUgQVNUIG9mIGFuIEFuZ3VsYXIgdGVtcGxhdGUgc3ludGF4IGV4cHJlc3Npb24sIGZpbmRpbmcgaW50ZXJlc3RpbmdcbiAqIGVudGl0aWVzICh2YXJpYWJsZSByZWZlcmVuY2VzLCBldGMuKS4gQ3JlYXRlcyBhbiBhcnJheSBvZiBFbnRpdGllcyBmb3VuZCBpblxuICogdGhlIGV4cHJlc3Npb24sIHdpdGggdGhlIGxvY2F0aW9uIG9mIHRoZSBFbnRpdGllcyBiZWluZyByZWxhdGl2ZSB0byB0aGVcbiAqIGV4cHJlc3Npb24uXG4gKlxuICogVmlzaXRpbmcgYHRleHQge3twcm9wfX1gIHdpbGwgcmV0dXJuXG4gKiBgW1RvcExldmVsSWRlbnRpZmllciB7bmFtZTogJ3Byb3AnLCBzcGFuOiB7c3RhcnQ6IDcsIGVuZDogMTF9fV1gLlxuICovXG5jbGFzcyBFeHByZXNzaW9uVmlzaXRvciBleHRlbmRzIFJlY3Vyc2l2ZUFzdFZpc2l0b3Ige1xuICByZWFkb25seSBpZGVudGlmaWVyczogRXhwcmVzc2lvbklkZW50aWZpZXJbXSA9IFtdO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGV4cHJlc3Npb25TdHI6IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSBhYnNvbHV0ZU9mZnNldDogbnVtYmVyLFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBib3VuZFRlbXBsYXRlOiBCb3VuZFRhcmdldDxDb21wb25lbnRNZXRhPixcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgdGFyZ2V0VG9JZGVudGlmaWVyOiAodGFyZ2V0OiBUbXBsVGFyZ2V0KSA9PiBUYXJnZXRJZGVudGlmaWVyKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGlkZW50aWZpZXJzIGRpc2NvdmVyZWQgaW4gYW4gZXhwcmVzc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIGFzdCBleHByZXNzaW9uIEFTVCB0byB2aXNpdFxuICAgKiBAcGFyYW0gc291cmNlIGV4cHJlc3Npb24gQVNUIHNvdXJjZSBjb2RlXG4gICAqIEBwYXJhbSBhYnNvbHV0ZU9mZnNldCBhYnNvbHV0ZSBieXRlIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHRoZSBmaWxlIHRvIHRoZSBzdGFydCBvZiB0aGUgQVNUXG4gICAqIHNvdXJjZSBjb2RlLlxuICAgKiBAcGFyYW0gYm91bmRUZW1wbGF0ZSBib3VuZCB0YXJnZXQgb2YgdGhlIGVudGlyZSB0ZW1wbGF0ZSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcXVlcnkgZm9yIHRoZVxuICAgKiBlbnRpdGllcyBleHByZXNzaW9ucyB0YXJnZXQuXG4gICAqIEBwYXJhbSB0YXJnZXRUb0lkZW50aWZpZXIgY2xvc3VyZSBjb252ZXJ0aW5nIGEgdGVtcGxhdGUgdGFyZ2V0IG5vZGUgdG8gaXRzIGlkZW50aWZpZXIuXG4gICAqL1xuICBzdGF0aWMgZ2V0SWRlbnRpZmllcnMoXG4gICAgICBhc3Q6IEFTVCwgc291cmNlOiBzdHJpbmcsIGFic29sdXRlT2Zmc2V0OiBudW1iZXIsIGJvdW5kVGVtcGxhdGU6IEJvdW5kVGFyZ2V0PENvbXBvbmVudE1ldGE+LFxuICAgICAgdGFyZ2V0VG9JZGVudGlmaWVyOiAodGFyZ2V0OiBUbXBsVGFyZ2V0KSA9PiBUYXJnZXRJZGVudGlmaWVyKTogVG9wTGV2ZWxJZGVudGlmaWVyW10ge1xuICAgIGNvbnN0IHZpc2l0b3IgPVxuICAgICAgICBuZXcgRXhwcmVzc2lvblZpc2l0b3Ioc291cmNlLCBhYnNvbHV0ZU9mZnNldCwgYm91bmRUZW1wbGF0ZSwgdGFyZ2V0VG9JZGVudGlmaWVyKTtcbiAgICB2aXNpdG9yLnZpc2l0KGFzdCk7XG4gICAgcmV0dXJuIHZpc2l0b3IuaWRlbnRpZmllcnM7XG4gIH1cblxuICB2aXNpdChhc3Q6IEFTVCkge1xuICAgIGFzdC52aXNpdCh0aGlzKTtcbiAgfVxuXG4gIHZpc2l0TWV0aG9kQ2FsbChhc3Q6IE1ldGhvZENhbGwsIGNvbnRleHQ6IHt9KSB7XG4gICAgdGhpcy52aXNpdElkZW50aWZpZXIoYXN0LCBJZGVudGlmaWVyS2luZC5NZXRob2QpO1xuICAgIHN1cGVyLnZpc2l0TWV0aG9kQ2FsbChhc3QsIGNvbnRleHQpO1xuICB9XG5cbiAgdmlzaXRQcm9wZXJ0eVJlYWQoYXN0OiBQcm9wZXJ0eVJlYWQsIGNvbnRleHQ6IHt9KSB7XG4gICAgdGhpcy52aXNpdElkZW50aWZpZXIoYXN0LCBJZGVudGlmaWVyS2luZC5Qcm9wZXJ0eSk7XG4gICAgc3VwZXIudmlzaXRQcm9wZXJ0eVJlYWQoYXN0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHZpc2l0UHJvcGVydHlXcml0ZShhc3Q6IFByb3BlcnR5V3JpdGUsIGNvbnRleHQ6IHt9KSB7XG4gICAgdGhpcy52aXNpdElkZW50aWZpZXIoYXN0LCBJZGVudGlmaWVyS2luZC5Qcm9wZXJ0eSk7XG4gICAgc3VwZXIudmlzaXRQcm9wZXJ0eVdyaXRlKGFzdCwgY29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogVmlzaXRzIGFuIGlkZW50aWZpZXIsIGFkZGluZyBpdCB0byB0aGUgaWRlbnRpZmllciBzdG9yZSBpZiBpdCBpcyB1c2VmdWwgZm9yIGluZGV4aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gYXN0IGV4cHJlc3Npb24gQVNUIHRoZSBpZGVudGlmaWVyIGlzIGluXG4gICAqIEBwYXJhbSBraW5kIGlkZW50aWZpZXIga2luZFxuICAgKi9cbiAgcHJpdmF0ZSB2aXNpdElkZW50aWZpZXIoXG4gICAgICBhc3Q6IEFTVCZ7bmFtZTogc3RyaW5nLCByZWNlaXZlcjogQVNUfSwga2luZDogRXhwcmVzc2lvbklkZW50aWZpZXJbJ2tpbmQnXSkge1xuICAgIC8vIFRoZSBkZWZpbml0aW9uIG9mIGEgbm9uLXRvcC1sZXZlbCBwcm9wZXJ0eSBzdWNoIGFzIGBiYXJgIGluIGB7e2Zvby5iYXJ9fWAgaXMgY3VycmVudGx5XG4gICAgLy8gaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgYnkgYW4gaW5kZXhlciBhbmQgdW5zdXBwb3J0ZWQgYnkgdGhlIGluZGV4aW5nIG1vZHVsZS5cbiAgICAvLyBUaGUgaW5kZXhpbmcgbW9kdWxlIGFsc28gZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgcmVmZXJlbmNlcyB0byBpZGVudGlmaWVycyBkZWNsYXJlZCBpbiB0aGVcbiAgICAvLyB0ZW1wbGF0ZSBpdHNlbGYsIHdoaWNoIGhhdmUgYSBub24tbnVsbCBleHByZXNzaW9uIHRhcmdldC5cbiAgICBpZiAoIShhc3QucmVjZWl2ZXIgaW5zdGFuY2VvZiBJbXBsaWNpdFJlY2VpdmVyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIGlkZW50aWZpZXIgb2YgcmVhbCBpbnRlcmVzdC5cbiAgICAvLyBUaGUgY29tcGlsZXIncyBleHByZXNzaW9uIHBhcnNlciByZWNvcmRzIHRoZSBsb2NhdGlvbiBvZiBzb21lIGV4cHJlc3Npb25zIGluIGEgbWFubmVyIG5vdFxuICAgIC8vIHVzZWZ1bCB0byB0aGUgaW5kZXhlci4gRm9yIGV4YW1wbGUsIGEgYE1ldGhvZENhbGxgIGBmb28oYSwgYilgIHdpbGwgcmVjb3JkIHRoZSBzcGFuIG9mIHRoZVxuICAgIC8vIGVudGlyZSBtZXRob2QgY2FsbCwgYnV0IHRoZSBpbmRleGVyIGlzIGludGVyZXN0ZWQgb25seSBpbiB0aGUgbWV0aG9kIGlkZW50aWZpZXIuXG4gICAgY29uc3QgbG9jYWxFeHByZXNzaW9uID0gdGhpcy5leHByZXNzaW9uU3RyLnN1YnN0cihhc3Quc3Bhbi5zdGFydCk7XG4gICAgaWYgKCFsb2NhbEV4cHJlc3Npb24uaW5jbHVkZXMoYXN0Lm5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEltcG9zc2libGUgc3RhdGU6IFwiJHthc3QubmFtZX1cIiBub3QgZm91bmQgaW4gXCIke2xvY2FsRXhwcmVzc2lvbn1cImApO1xuICAgIH1cbiAgICBjb25zdCBpZGVudGlmaWVyU3RhcnQgPSBhc3Quc3Bhbi5zdGFydCArIGxvY2FsRXhwcmVzc2lvbi5pbmRleE9mKGFzdC5uYW1lKTtcblxuICAgIC8vIEpvaW4gdGhlIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHRoZSBleHByZXNzaW9uIHdpdGhpbiBhIG5vZGUgd2l0aCB0aGUgYWJzb2x1dGUgcG9zaXRpb25cbiAgICAvLyBvZiB0aGUgbm9kZSB0byBnZXQgdGhlIGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSBleHByZXNzaW9uIGluIHRoZSBzb3VyY2UgY29kZS5cbiAgICBjb25zdCBhYnNvbHV0ZVN0YXJ0ID0gdGhpcy5hYnNvbHV0ZU9mZnNldCArIGlkZW50aWZpZXJTdGFydDtcbiAgICBjb25zdCBzcGFuID0gbmV3IEFic29sdXRlU291cmNlU3BhbihhYnNvbHV0ZVN0YXJ0LCBhYnNvbHV0ZVN0YXJ0ICsgYXN0Lm5hbWUubGVuZ3RoKTtcblxuICAgIGNvbnN0IHRhcmdldEFzdCA9IHRoaXMuYm91bmRUZW1wbGF0ZS5nZXRFeHByZXNzaW9uVGFyZ2V0KGFzdCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0QXN0ID8gdGhpcy50YXJnZXRUb0lkZW50aWZpZXIodGFyZ2V0QXN0KSA6IG51bGw7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHtcbiAgICAgIG5hbWU6IGFzdC5uYW1lLFxuICAgICAgc3BhbixcbiAgICAgIGtpbmQsXG4gICAgICB0YXJnZXQsXG4gICAgfSBhcyBFeHByZXNzaW9uSWRlbnRpZmllcjtcblxuICAgIHRoaXMuaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxufVxuXG4vKipcbiAqIFZpc2l0cyB0aGUgQVNUIG9mIGEgcGFyc2VkIEFuZ3VsYXIgdGVtcGxhdGUuIERpc2NvdmVycyBhbmQgc3RvcmVzXG4gKiBpZGVudGlmaWVycyBvZiBpbnRlcmVzdCwgZGVmZXJyaW5nIHRvIGFuIGBFeHByZXNzaW9uVmlzaXRvcmAgYXMgbmVlZGVkLlxuICovXG5jbGFzcyBUZW1wbGF0ZVZpc2l0b3IgZXh0ZW5kcyBUbXBsQXN0UmVjdXJzaXZlVmlzaXRvciB7XG4gIC8vIElkZW50aWZpZXJzIG9mIGludGVyZXN0IGZvdW5kIGluIHRoZSB0ZW1wbGF0ZS5cbiAgcmVhZG9ubHkgaWRlbnRpZmllcnMgPSBuZXcgU2V0PFRvcExldmVsSWRlbnRpZmllcj4oKTtcblxuICAvLyBNYXAgb2YgdGFyZ2V0cyBpbiBhIHRlbXBsYXRlIHRvIHRoZWlyIGlkZW50aWZpZXJzLlxuICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldElkZW50aWZpZXJDYWNoZTogVGFyZ2V0SWRlbnRpZmllck1hcCA9IG5ldyBNYXAoKTtcblxuICAvLyBNYXAgb2YgZWxlbWVudHMgYW5kIHRlbXBsYXRlcyB0byB0aGVpciBpZGVudGlmaWVycy5cbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50QW5kVGVtcGxhdGVJZGVudGlmaWVyQ2FjaGUgPVxuICAgICAgbmV3IE1hcDxUbXBsQXN0RWxlbWVudHxUbXBsQXN0VGVtcGxhdGUsIEVsZW1lbnRJZGVudGlmaWVyfFRlbXBsYXRlTm9kZUlkZW50aWZpZXI+KCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0ZW1wbGF0ZSB2aXNpdG9yIGZvciBhIGJvdW5kIHRlbXBsYXRlIHRhcmdldC4gVGhlIGJvdW5kIHRhcmdldCBjYW4gYmUgdXNlZCB3aGVuXG4gICAqIGRlZmVycmVkIHRvIHRoZSBleHByZXNzaW9uIHZpc2l0b3IgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YXJnZXQgb2YgYW4gZXhwcmVzc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIGJvdW5kVGVtcGxhdGUgYm91bmQgdGVtcGxhdGUgdGFyZ2V0XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJvdW5kVGVtcGxhdGU6IEJvdW5kVGFyZ2V0PENvbXBvbmVudE1ldGE+KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaXNpdHMgYSBub2RlIGluIHRoZSB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIG5vZGUgbm9kZSB0byB2aXNpdFxuICAgKi9cbiAgdmlzaXQobm9kZTogSFRNTE5vZGUpIHtcbiAgICBub2RlLnZpc2l0KHRoaXMpO1xuICB9XG5cbiAgdmlzaXRBbGwobm9kZXM6IFRtcGxBc3ROb2RlW10pIHtcbiAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4gdGhpcy52aXNpdChub2RlKSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGlkZW50aWZpZXIgZm9yIGFuIEhUTUwgZWxlbWVudCBhbmQgdmlzaXQgaXRzIGNoaWxkcmVuIHJlY3Vyc2l2ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gZWxlbWVudFxuICAgKi9cbiAgdmlzaXRFbGVtZW50KGVsZW1lbnQ6IFRtcGxBc3RFbGVtZW50KSB7XG4gICAgY29uc3QgZWxlbWVudElkZW50aWZpZXIgPSB0aGlzLmVsZW1lbnRPclRlbXBsYXRlVG9JZGVudGlmaWVyKGVsZW1lbnQpO1xuXG4gICAgdGhpcy5pZGVudGlmaWVycy5hZGQoZWxlbWVudElkZW50aWZpZXIpO1xuXG4gICAgdGhpcy52aXNpdEFsbChlbGVtZW50LnJlZmVyZW5jZXMpO1xuICAgIHRoaXMudmlzaXRBbGwoZWxlbWVudC5pbnB1dHMpO1xuICAgIHRoaXMudmlzaXRBbGwoZWxlbWVudC5hdHRyaWJ1dGVzKTtcbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQuY2hpbGRyZW4pO1xuICAgIHRoaXMudmlzaXRBbGwoZWxlbWVudC5vdXRwdXRzKTtcbiAgfVxuICB2aXNpdFRlbXBsYXRlKHRlbXBsYXRlOiBUbXBsQXN0VGVtcGxhdGUpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZUlkZW50aWZpZXIgPSB0aGlzLmVsZW1lbnRPclRlbXBsYXRlVG9JZGVudGlmaWVyKHRlbXBsYXRlKTtcblxuICAgIHRoaXMuaWRlbnRpZmllcnMuYWRkKHRlbXBsYXRlSWRlbnRpZmllcik7XG5cbiAgICB0aGlzLnZpc2l0QWxsKHRlbXBsYXRlLnZhcmlhYmxlcyk7XG4gICAgdGhpcy52aXNpdEFsbCh0ZW1wbGF0ZS5hdHRyaWJ1dGVzKTtcbiAgICB0aGlzLnZpc2l0QWxsKHRlbXBsYXRlLnRlbXBsYXRlQXR0cnMpO1xuICAgIHRoaXMudmlzaXRBbGwodGVtcGxhdGUuY2hpbGRyZW4pO1xuICAgIHRoaXMudmlzaXRBbGwodGVtcGxhdGUucmVmZXJlbmNlcyk7XG4gIH1cbiAgdmlzaXRCb3VuZEF0dHJpYnV0ZShhdHRyaWJ1dGU6IFRtcGxBc3RCb3VuZEF0dHJpYnV0ZSkge1xuICAgIC8vIEEgQm91bmRBdHRyaWJ1dGUncyB2YWx1ZSAodGhlIHBhcmVudCBBU1QpIG1heSBoYXZlIHN1YmV4cHJlc3Npb25zIChjaGlsZHJlbiBBU1RzKSB0aGF0IGhhdmVcbiAgICAvLyByZWNvcmRlZCBzcGFucyBleHRlbmRpbmcgcGFzdCB0aGUgcmVjb3JkZWQgc3BhbiBvZiB0aGUgcGFyZW50LiBUaGUgbW9zdCBjb21tb24gZXhhbXBsZSBvZlxuICAgIC8vIHRoaXMgaXMgd2l0aCBgKm5nRm9yYC5cbiAgICAvLyBUbyByZXNvbHZlIHRoaXMsIHVzZSB0aGUgaW5mb3JtYXRpb24gb24gdGhlIEJvdW5kQXR0cmlidXRlIFRlbXBsYXRlIEFTVCwgd2hpY2ggaXMgYWx3YXlzXG4gICAgLy8gY29ycmVjdCwgdG8gZGV0ZXJtaW5lIGxvY2F0aW9ucyBvZiBpZGVudGlmaWVycyBpbiB0aGUgZXhwcmVzc2lvbi5cbiAgICAvL1xuICAgIC8vIFRPRE8oYXlhemhhZml6KTogUmVtb3ZlIHRoaXMgd2hlbiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL3B1bGwvMzE4MTMgbGFuZHMuXG4gICAgY29uc3QgYXR0cmlidXRlU3JjID0gYXR0cmlidXRlLnNvdXJjZVNwYW4udG9TdHJpbmcoKTtcbiAgICBjb25zdCBhdHRyaWJ1dGVBYnNvbHV0ZVBvc2l0aW9uID0gYXR0cmlidXRlLnNvdXJjZVNwYW4uc3RhcnQub2Zmc2V0O1xuXG4gICAgLy8gU2tpcCB0aGUgYnl0ZXMgb2YgdGhlIGF0dHJpYnV0ZSBuYW1lIHNvIHRoYXQgdGhlcmUgYXJlIG5vIGNvbGxpc2lvbnMgYmV0d2VlbiB0aGUgYXR0cmlidXRlXG4gICAgLy8gbmFtZSBhbmQgZXhwcmVzc2lvbiBpZGVudGlmaWVyIG5hbWVzIGxhdGVyLlxuICAgIGNvbnN0IG5hbWVTa2lwT2ZmZXQgPSBhdHRyaWJ1dGVTcmMuaW5kZXhPZihhdHRyaWJ1dGUubmFtZSkgKyBhdHRyaWJ1dGUubmFtZS5sZW5ndGg7XG4gICAgY29uc3QgZXhwcmVzc2lvblNyYyA9IGF0dHJpYnV0ZVNyYy5zdWJzdHJpbmcobmFtZVNraXBPZmZldCk7XG4gICAgY29uc3QgZXhwcmVzc2lvbkFic29sdXRlUG9zaXRpb24gPSBhdHRyaWJ1dGVBYnNvbHV0ZVBvc2l0aW9uICsgbmFtZVNraXBPZmZldDtcblxuICAgIGNvbnN0IGlkZW50aWZpZXJzID0gRXhwcmVzc2lvblZpc2l0b3IuZ2V0SWRlbnRpZmllcnMoXG4gICAgICAgIGF0dHJpYnV0ZS52YWx1ZSwgZXhwcmVzc2lvblNyYywgZXhwcmVzc2lvbkFic29sdXRlUG9zaXRpb24sIHRoaXMuYm91bmRUZW1wbGF0ZSxcbiAgICAgICAgdGhpcy50YXJnZXRUb0lkZW50aWZpZXIuYmluZCh0aGlzKSk7XG4gICAgaWRlbnRpZmllcnMuZm9yRWFjaChpZCA9PiB0aGlzLmlkZW50aWZpZXJzLmFkZChpZCkpO1xuICB9XG4gIHZpc2l0Qm91bmRFdmVudChhdHRyaWJ1dGU6IFRtcGxBc3RCb3VuZEV2ZW50KSB7XG4gICAgdGhpcy52aXNpdEV4cHJlc3Npb24oYXR0cmlidXRlLmhhbmRsZXIpO1xuICB9XG4gIHZpc2l0Qm91bmRUZXh0KHRleHQ6IFRtcGxBc3RCb3VuZFRleHQpIHtcbiAgICB0aGlzLnZpc2l0RXhwcmVzc2lvbih0ZXh0LnZhbHVlKTtcbiAgfVxuICB2aXNpdFJlZmVyZW5jZShyZWZlcmVuY2U6IFRtcGxBc3RSZWZlcmVuY2UpIHtcbiAgICBjb25zdCByZWZlcmVuY2VJZGVudGlmZXIgPSB0aGlzLnRhcmdldFRvSWRlbnRpZmllcihyZWZlcmVuY2UpO1xuXG4gICAgdGhpcy5pZGVudGlmaWVycy5hZGQocmVmZXJlbmNlSWRlbnRpZmVyKTtcbiAgfVxuICB2aXNpdFZhcmlhYmxlKHZhcmlhYmxlOiBUbXBsQXN0VmFyaWFibGUpIHtcbiAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB0aGlzLnRhcmdldFRvSWRlbnRpZmllcih2YXJpYWJsZSk7XG5cbiAgICB0aGlzLmlkZW50aWZpZXJzLmFkZCh2YXJpYWJsZUlkZW50aWZpZXIpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgYW4gaWRlbnRpZmllciBmb3IgYSB0ZW1wbGF0ZSBlbGVtZW50IG9yIHRlbXBsYXRlIG5vZGUuICovXG4gIHByaXZhdGUgZWxlbWVudE9yVGVtcGxhdGVUb0lkZW50aWZpZXIobm9kZTogVG1wbEFzdEVsZW1lbnR8VG1wbEFzdFRlbXBsYXRlKTogRWxlbWVudElkZW50aWZpZXJcbiAgICAgIHxUZW1wbGF0ZU5vZGVJZGVudGlmaWVyIHtcbiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiBzZWVuLCByZXR1cm4gdGhlIGNhY2hlZCByZXN1bHQuXG4gICAgaWYgKHRoaXMuZWxlbWVudEFuZFRlbXBsYXRlSWRlbnRpZmllckNhY2hlLmhhcyhub2RlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudEFuZFRlbXBsYXRlSWRlbnRpZmllckNhY2hlLmdldChub2RlKSE7XG4gICAgfVxuXG4gICAgbGV0IG5hbWU6IHN0cmluZztcbiAgICBsZXQga2luZDogSWRlbnRpZmllcktpbmQuRWxlbWVudHxJZGVudGlmaWVyS2luZC5UZW1wbGF0ZTtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFRtcGxBc3RUZW1wbGF0ZSkge1xuICAgICAgbmFtZSA9IG5vZGUudGFnTmFtZTtcbiAgICAgIGtpbmQgPSBJZGVudGlmaWVyS2luZC5UZW1wbGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IG5vZGUubmFtZTtcbiAgICAgIGtpbmQgPSBJZGVudGlmaWVyS2luZC5FbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCB7c291cmNlU3Bhbn0gPSBub2RlO1xuICAgIC8vIEFuIGVsZW1lbnQncyBvciB0ZW1wbGF0ZSdzIHNvdXJjZSBzcGFuIGNhbiBiZSBvZiB0aGUgZm9ybSBgPGVsZW1lbnQ+YCwgYDxlbGVtZW50IC8+YCwgb3JcbiAgICAvLyBgPGVsZW1lbnQ+PC9lbGVtZW50PmAuIE9ubHkgdGhlIHNlbGVjdG9yIGlzIGludGVyZXN0aW5nIHRvIHRoZSBpbmRleGVyLCBzbyB0aGUgc291cmNlIGlzXG4gICAgLy8gc2VhcmNoZWQgZm9yIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBlbGVtZW50IChzZWxlY3RvcikgbmFtZS5cbiAgICBjb25zdCBzdGFydCA9IHRoaXMuZ2V0U3RhcnRMb2NhdGlvbihuYW1lLCBzb3VyY2VTcGFuKTtcbiAgICBjb25zdCBhYnNvbHV0ZVNwYW4gPSBuZXcgQWJzb2x1dGVTb3VyY2VTcGFuKHN0YXJ0LCBzdGFydCArIG5hbWUubGVuZ3RoKTtcblxuICAgIC8vIFJlY29yZCB0aGUgbm9kZXMncyBhdHRyaWJ1dGVzLCB3aGljaCBhbiBpbmRleGVyIGNhbiBsYXRlciB0cmF2ZXJzZSB0byBzZWUgaWYgYW55IG9mIHRoZW1cbiAgICAvLyBzcGVjaWZ5IGEgdXNlZCBkaXJlY3RpdmUgb24gdGhlIG5vZGUuXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IG5vZGUuYXR0cmlidXRlcy5tYXAoKHtuYW1lLCBzb3VyY2VTcGFufSk6IEF0dHJpYnV0ZUlkZW50aWZpZXIgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc3BhbjogbmV3IEFic29sdXRlU291cmNlU3Bhbihzb3VyY2VTcGFuLnN0YXJ0Lm9mZnNldCwgc291cmNlU3Bhbi5lbmQub2Zmc2V0KSxcbiAgICAgICAga2luZDogSWRlbnRpZmllcktpbmQuQXR0cmlidXRlLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCB1c2VkRGlyZWN0aXZlcyA9IHRoaXMuYm91bmRUZW1wbGF0ZS5nZXREaXJlY3RpdmVzT2ZOb2RlKG5vZGUpIHx8IFtdO1xuXG4gICAgY29uc3QgaWRlbnRpZmllciA9IHtcbiAgICAgIG5hbWUsXG4gICAgICBzcGFuOiBhYnNvbHV0ZVNwYW4sXG4gICAgICBraW5kLFxuICAgICAgYXR0cmlidXRlczogbmV3IFNldChhdHRyaWJ1dGVzKSxcbiAgICAgIHVzZWREaXJlY3RpdmVzOiBuZXcgU2V0KHVzZWREaXJlY3RpdmVzLm1hcChkaXIgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGU6IGRpci5yZWYubm9kZSxcbiAgICAgICAgICBzZWxlY3RvcjogZGlyLnNlbGVjdG9yLFxuICAgICAgICB9O1xuICAgICAgfSkpLFxuICAgICAgLy8gY2FzdCBiL2MgcHJlLVR5cGVTY3JpcHQgMy41IHVuaW9ucyBhcmVuJ3Qgd2VsbCBkaXNjcmltaW5hdGVkXG4gICAgfSBhcyBFbGVtZW50SWRlbnRpZmllciB8XG4gICAgICAgIFRlbXBsYXRlTm9kZUlkZW50aWZpZXI7XG5cbiAgICB0aGlzLmVsZW1lbnRBbmRUZW1wbGF0ZUlkZW50aWZpZXJDYWNoZS5zZXQobm9kZSwgaWRlbnRpZmllcik7XG4gICAgcmV0dXJuIGlkZW50aWZpZXI7XG4gIH1cblxuICAvKiogQ3JlYXRlcyBhbiBpZGVudGlmaWVyIGZvciBhIHRlbXBsYXRlIHJlZmVyZW5jZSBvciB0ZW1wbGF0ZSB2YXJpYWJsZSB0YXJnZXQuICovXG4gIHByaXZhdGUgdGFyZ2V0VG9JZGVudGlmaWVyKG5vZGU6IFRtcGxBc3RSZWZlcmVuY2V8VG1wbEFzdFZhcmlhYmxlKTogVGFyZ2V0SWRlbnRpZmllciB7XG4gICAgLy8gSWYgdGhpcyBub2RlIGhhcyBhbHJlYWR5IGJlZW4gc2VlbiwgcmV0dXJuIHRoZSBjYWNoZWQgcmVzdWx0LlxuICAgIGlmICh0aGlzLnRhcmdldElkZW50aWZpZXJDYWNoZS5oYXMobm9kZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhcmdldElkZW50aWZpZXJDYWNoZS5nZXQobm9kZSkhO1xuICAgIH1cblxuICAgIGNvbnN0IHtuYW1lLCBzb3VyY2VTcGFufSA9IG5vZGU7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmdldFN0YXJ0TG9jYXRpb24obmFtZSwgc291cmNlU3Bhbik7XG4gICAgY29uc3Qgc3BhbiA9IG5ldyBBYnNvbHV0ZVNvdXJjZVNwYW4oc3RhcnQsIHN0YXJ0ICsgbmFtZS5sZW5ndGgpO1xuICAgIGxldCBpZGVudGlmaWVyOiBSZWZlcmVuY2VJZGVudGlmaWVyfFZhcmlhYmxlSWRlbnRpZmllcjtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFRtcGxBc3RSZWZlcmVuY2UpIHtcbiAgICAgIC8vIElmIHRoZSBub2RlIGlzIGEgcmVmZXJlbmNlLCB3ZSBjYXJlIGFib3V0IGl0cyB0YXJnZXQuIFRoZSB0YXJnZXQgY2FuIGJlIGFuIGVsZW1lbnQsIGFcbiAgICAgIC8vIHRlbXBsYXRlLCBhIGRpcmVjdGl2ZSBhcHBsaWVkIG9uIGEgdGVtcGxhdGUgb3IgZWxlbWVudCAoaW4gd2hpY2ggY2FzZSB0aGUgZGlyZWN0aXZlIGZpZWxkXG4gICAgICAvLyBpcyBub24tbnVsbCksIG9yIG5vdGhpbmcgYXQgYWxsLlxuICAgICAgY29uc3QgcmVmVGFyZ2V0ID0gdGhpcy5ib3VuZFRlbXBsYXRlLmdldFJlZmVyZW5jZVRhcmdldChub2RlKTtcbiAgICAgIGxldCB0YXJnZXQgPSBudWxsO1xuICAgICAgaWYgKHJlZlRhcmdldCkge1xuICAgICAgICBpZiAocmVmVGFyZ2V0IGluc3RhbmNlb2YgVG1wbEFzdEVsZW1lbnQgfHwgcmVmVGFyZ2V0IGluc3RhbmNlb2YgVG1wbEFzdFRlbXBsYXRlKSB7XG4gICAgICAgICAgdGFyZ2V0ID0ge1xuICAgICAgICAgICAgbm9kZTogdGhpcy5lbGVtZW50T3JUZW1wbGF0ZVRvSWRlbnRpZmllcihyZWZUYXJnZXQpLFxuICAgICAgICAgICAgZGlyZWN0aXZlOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0ID0ge1xuICAgICAgICAgICAgbm9kZTogdGhpcy5lbGVtZW50T3JUZW1wbGF0ZVRvSWRlbnRpZmllcihyZWZUYXJnZXQubm9kZSksXG4gICAgICAgICAgICBkaXJlY3RpdmU6IHJlZlRhcmdldC5kaXJlY3RpdmUucmVmLm5vZGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZGVudGlmaWVyID0ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBzcGFuLFxuICAgICAgICBraW5kOiBJZGVudGlmaWVyS2luZC5SZWZlcmVuY2UsXG4gICAgICAgIHRhcmdldCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkZW50aWZpZXIgPSB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNwYW4sXG4gICAgICAgIGtpbmQ6IElkZW50aWZpZXJLaW5kLlZhcmlhYmxlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLnRhcmdldElkZW50aWZpZXJDYWNoZS5zZXQobm9kZSwgaWRlbnRpZmllcik7XG4gICAgcmV0dXJuIGlkZW50aWZpZXI7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgc3RhcnQgbG9jYXRpb24gb2YgYSBzdHJpbmcgaW4gYSBTb3VyY2VTcGFuICovXG4gIHByaXZhdGUgZ2V0U3RhcnRMb2NhdGlvbihuYW1lOiBzdHJpbmcsIGNvbnRleHQ6IFBhcnNlU291cmNlU3Bhbik6IG51bWJlciB7XG4gICAgY29uc3QgbG9jYWxTdHIgPSBjb250ZXh0LnRvU3RyaW5nKCk7XG4gICAgaWYgKCFsb2NhbFN0ci5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbXBvc3NpYmxlIHN0YXRlOiBcIiR7bmFtZX1cIiBub3QgZm91bmQgaW4gXCIke2xvY2FsU3RyfVwiYCk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0LnN0YXJ0Lm9mZnNldCArIGxvY2FsU3RyLmluZGV4T2YobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogVmlzaXRzIGEgbm9kZSdzIGV4cHJlc3Npb24gYW5kIGFkZHMgaXRzIGlkZW50aWZpZXJzLCBpZiBhbnksIHRvIHRoZSB2aXNpdG9yJ3Mgc3RhdGUuXG4gICAqIE9ubHkgQVNUcyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBleHByZXNzaW9uIHNvdXJjZSBhbmQgaXRzIGxvY2F0aW9uIGFyZSB2aXNpdGVkLlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZSBub2RlIHdob3NlIGV4cHJlc3Npb24gdG8gdmlzaXRcbiAgICovXG4gIHByaXZhdGUgdmlzaXRFeHByZXNzaW9uKGFzdDogQVNUKSB7XG4gICAgLy8gT25seSBpbmNsdWRlIEFTVHMgdGhhdCBoYXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIHNvdXJjZSBhbmQgYWJzb2x1dGUgc291cmNlIHNwYW5zLlxuICAgIGlmIChhc3QgaW5zdGFuY2VvZiBBU1RXaXRoU291cmNlICYmIGFzdC5zb3VyY2UgIT09IG51bGwpIHtcbiAgICAgIC8vIE1ha2UgdGFyZ2V0IHRvIGlkZW50aWZpZXIgbWFwcGluZyBjbG9zdXJlIHN0YXRlZnVsIHRvIHRoaXMgdmlzaXRvciBpbnN0YW5jZS5cbiAgICAgIGNvbnN0IHRhcmdldFRvSWRlbnRpZmllciA9IHRoaXMudGFyZ2V0VG9JZGVudGlmaWVyLmJpbmQodGhpcyk7XG4gICAgICBjb25zdCBhYnNvbHV0ZU9mZnNldCA9IGFzdC5zb3VyY2VTcGFuLnN0YXJ0O1xuICAgICAgY29uc3QgaWRlbnRpZmllcnMgPSBFeHByZXNzaW9uVmlzaXRvci5nZXRJZGVudGlmaWVycyhcbiAgICAgICAgICBhc3QsIGFzdC5zb3VyY2UsIGFic29sdXRlT2Zmc2V0LCB0aGlzLmJvdW5kVGVtcGxhdGUsIHRhcmdldFRvSWRlbnRpZmllcik7XG4gICAgICBpZGVudGlmaWVycy5mb3JFYWNoKGlkID0+IHRoaXMuaWRlbnRpZmllcnMuYWRkKGlkKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVHJhdmVyc2VzIGEgdGVtcGxhdGUgQVNUIGFuZCBidWlsZHMgaWRlbnRpZmllcnMgZGlzY292ZXJlZCBpbiBpdC5cbiAqXG4gKiBAcGFyYW0gYm91bmRUZW1wbGF0ZSBib3VuZCB0ZW1wbGF0ZSB0YXJnZXQsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBxdWVyeWluZyBleHByZXNzaW9uIHRhcmdldHMuXG4gKiBAcmV0dXJuIGlkZW50aWZpZXJzIGluIHRlbXBsYXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW1wbGF0ZUlkZW50aWZpZXJzKGJvdW5kVGVtcGxhdGU6IEJvdW5kVGFyZ2V0PENvbXBvbmVudE1ldGE+KTpcbiAgICBTZXQ8VG9wTGV2ZWxJZGVudGlmaWVyPiB7XG4gIGNvbnN0IHZpc2l0b3IgPSBuZXcgVGVtcGxhdGVWaXNpdG9yKGJvdW5kVGVtcGxhdGUpO1xuICBpZiAoYm91bmRUZW1wbGF0ZS50YXJnZXQudGVtcGxhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHZpc2l0b3IudmlzaXRBbGwoYm91bmRUZW1wbGF0ZS50YXJnZXQudGVtcGxhdGUpO1xuICB9XG4gIHJldHVybiB2aXNpdG9yLmlkZW50aWZpZXJzO1xufVxuIl19
|
|
327
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2luZGV4ZXIvc3JjL3RlbXBsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7SUFBQTs7Ozs7O09BTUc7SUFDSCw4Q0FBeVU7SUFDelUsdUVBQTROO0lBaUI1Tjs7Ozs7Ozs7T0FRRztJQUNIO1FBQWdDLDZDQUFtQjtRQUdqRCwyQkFDcUIsYUFBcUIsRUFBbUIsY0FBc0IsRUFDOUQsYUFBeUMsRUFDekMsa0JBQTREO1lBSGpGLFlBSUUsaUJBQU8sU0FDUjtZQUpvQixtQkFBYSxHQUFiLGFBQWEsQ0FBUTtZQUFtQixvQkFBYyxHQUFkLGNBQWMsQ0FBUTtZQUM5RCxtQkFBYSxHQUFiLGFBQWEsQ0FBNEI7WUFDekMsd0JBQWtCLEdBQWxCLGtCQUFrQixDQUEwQztZQUx4RSxpQkFBVyxHQUEyQixFQUFFLENBQUM7O1FBT2xELENBQUM7UUFFRDs7Ozs7Ozs7OztXQVVHO1FBQ0ksZ0NBQWMsR0FBckIsVUFDSSxHQUFRLEVBQUUsTUFBYyxFQUFFLGNBQXNCLEVBQUUsYUFBeUMsRUFDM0Ysa0JBQTREO1lBQzlELElBQU0sT0FBTyxHQUNULElBQUksaUJBQWlCLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUNyRixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUM3QixDQUFDO1FBRUQsaUNBQUssR0FBTCxVQUFNLEdBQVE7WUFDWixHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFFRCwyQ0FBZSxHQUFmLFVBQWdCLEdBQWUsRUFBRSxPQUFXO1lBQzFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFF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LEFBMU5ELENBQThCLGtDQUF1QixHQTBOcEQ7SUFFRDs7Ozs7T0FLRztJQUNILFNBQWdCLHNCQUFzQixDQUFDLGFBQXlDO1FBRTlFLElBQU0sT0FBTyxHQUFHLElBQUksZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25ELElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQy9DLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNqRDtRQUNELE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUM3QixDQUFDO0lBUEQsd0RBT0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7QVNULCBBU1RXaXRoU291cmNlLCBCb3VuZFRhcmdldCwgSW1wbGljaXRSZWNlaXZlciwgTWV0aG9kQ2FsbCwgUGFyc2VTb3VyY2VTcGFuLCBQcm9wZXJ0eVJlYWQsIFByb3BlcnR5V3JpdGUsIFJlY3Vyc2l2ZUFzdFZpc2l0b3IsIFRtcGxBc3RCb3VuZEF0dHJpYnV0ZSwgVG1wbEFzdEJvdW5kRXZlbnQsIFRtcGxBc3RCb3VuZFRleHQsIFRtcGxBc3RFbGVtZW50LCBUbXBsQXN0Tm9kZSwgVG1wbEFzdFJlY3Vyc2l2ZVZpc2l0b3IsIFRtcGxBc3RSZWZlcmVuY2UsIFRtcGxBc3RUZW1wbGF0ZSwgVG1wbEFzdFZhcmlhYmxlfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQge0Fic29sdXRlU291cmNlU3BhbiwgQXR0cmlidXRlSWRlbnRpZmllciwgRWxlbWVudElkZW50aWZpZXIsIElkZW50aWZpZXJLaW5kLCBNZXRob2RJZGVudGlmaWVyLCBQcm9wZXJ0eUlkZW50aWZpZXIsIFJlZmVyZW5jZUlkZW50aWZpZXIsIFRlbXBsYXRlTm9kZUlkZW50aWZpZXIsIFRvcExldmVsSWRlbnRpZmllciwgVmFyaWFibGVJZGVudGlmaWVyfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQge0NvbXBvbmVudE1ldGF9IGZyb20gJy4vY29udGV4dCc7XG5cbi8qKlxuICogQSBwYXJzZWQgbm9kZSBpbiBhIHRlbXBsYXRlLCB3aGljaCBtYXkgaGF2ZSBhIG5hbWUgKGlmIGl0IGlzIGEgc2VsZWN0b3IpIG9yXG4gKiBiZSBhbm9ueW1vdXMgKGxpa2UgYSB0ZXh0IHNwYW4pLlxuICovXG5pbnRlcmZhY2UgSFRNTE5vZGUgZXh0ZW5kcyBUbXBsQXN0Tm9kZSB7XG4gIHRhZ05hbWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbnR5cGUgRXhwcmVzc2lvbklkZW50aWZpZXIgPSBQcm9wZXJ0eUlkZW50aWZpZXJ8TWV0aG9kSWRlbnRpZmllcjtcbnR5cGUgVG1wbFRhcmdldCA9IFRtcGxBc3RSZWZlcmVuY2V8VG1wbEFzdFZhcmlhYmxlO1xudHlwZSBUYXJnZXRJZGVudGlmaWVyID0gUmVmZXJlbmNlSWRlbnRpZmllcnxWYXJpYWJsZUlkZW50aWZpZXI7XG50eXBlIFRhcmdldElkZW50aWZpZXJNYXAgPSBNYXA8VG1wbFRhcmdldCwgVGFyZ2V0SWRlbnRpZmllcj47XG5cbi8qKlxuICogVmlzaXRzIHRoZSBBU1Qgb2YgYW4gQW5ndWxhciB0ZW1wbGF0ZSBzeW50YXggZXhwcmVzc2lvbiwgZmluZGluZyBpbnRlcmVzdGluZ1xuICogZW50aXRpZXMgKHZhcmlhYmxlIHJlZmVyZW5jZXMsIGV0Yy4pLiBDcmVhdGVzIGFuIGFycmF5IG9mIEVudGl0aWVzIGZvdW5kIGluXG4gKiB0aGUgZXhwcmVzc2lvbiwgd2l0aCB0aGUgbG9jYXRpb24gb2YgdGhlIEVudGl0aWVzIGJlaW5nIHJlbGF0aXZlIHRvIHRoZVxuICogZXhwcmVzc2lvbi5cbiAqXG4gKiBWaXNpdGluZyBgdGV4dCB7e3Byb3B9fWAgd2lsbCByZXR1cm5cbiAqIGBbVG9wTGV2ZWxJZGVudGlmaWVyIHtuYW1lOiAncHJvcCcsIHNwYW46IHtzdGFydDogNywgZW5kOiAxMX19XWAuXG4gKi9cbmNsYXNzIEV4cHJlc3Npb25WaXNpdG9yIGV4dGVuZHMgUmVjdXJzaXZlQXN0VmlzaXRvciB7XG4gIHJlYWRvbmx5IGlkZW50aWZpZXJzOiBFeHByZXNzaW9uSWRlbnRpZmllcltdID0gW107XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZXhwcmVzc2lvblN0cjogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IGFic29sdXRlT2Zmc2V0OiBudW1iZXIsXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGJvdW5kVGVtcGxhdGU6IEJvdW5kVGFyZ2V0PENvbXBvbmVudE1ldGE+LFxuICAgICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRUb0lkZW50aWZpZXI6ICh0YXJnZXQ6IFRtcGxUYXJnZXQpID0+IFRhcmdldElkZW50aWZpZXIpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgaWRlbnRpZmllcnMgZGlzY292ZXJlZCBpbiBhbiBleHByZXNzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gYXN0IGV4cHJlc3Npb24gQVNUIHRvIHZpc2l0XG4gICAqIEBwYXJhbSBzb3VyY2UgZXhwcmVzc2lvbiBBU1Qgc291cmNlIGNvZGVcbiAgICogQHBhcmFtIGFic29sdXRlT2Zmc2V0IGFic29sdXRlIGJ5dGUgb2Zmc2V0IGZyb20gc3RhcnQgb2YgdGhlIGZpbGUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBBU1RcbiAgICogc291cmNlIGNvZGUuXG4gICAqIEBwYXJhbSBib3VuZFRlbXBsYXRlIGJvdW5kIHRhcmdldCBvZiB0aGUgZW50aXJlIHRlbXBsYXRlLCB3aGljaCBjYW4gYmUgdXNlZCB0byBxdWVyeSBmb3IgdGhlXG4gICAqIGVudGl0aWVzIGV4cHJlc3Npb25zIHRhcmdldC5cbiAgICogQHBhcmFtIHRhcmdldFRvSWRlbnRpZmllciBjbG9zdXJlIGNvbnZlcnRpbmcgYSB0ZW1wbGF0ZSB0YXJnZXQgbm9kZSB0byBpdHMgaWRlbnRpZmllci5cbiAgICovXG4gIHN0YXRpYyBnZXRJZGVudGlmaWVycyhcbiAgICAgIGFzdDogQVNULCBzb3VyY2U6IHN0cmluZywgYWJzb2x1dGVPZmZzZXQ6IG51bWJlciwgYm91bmRUZW1wbGF0ZTogQm91bmRUYXJnZXQ8Q29tcG9uZW50TWV0YT4sXG4gICAgICB0YXJnZXRUb0lkZW50aWZpZXI6ICh0YXJnZXQ6IFRtcGxUYXJnZXQpID0+IFRhcmdldElkZW50aWZpZXIpOiBUb3BMZXZlbElkZW50aWZpZXJbXSB7XG4gICAgY29uc3QgdmlzaXRvciA9XG4gICAgICAgIG5ldyBFeHByZXNzaW9uVmlzaXRvcihzb3VyY2UsIGFic29sdXRlT2Zmc2V0LCBib3VuZFRlbXBsYXRlLCB0YXJnZXRUb0lkZW50aWZpZXIpO1xuICAgIHZpc2l0b3IudmlzaXQoYXN0KTtcbiAgICByZXR1cm4gdmlzaXRvci5pZGVudGlmaWVycztcbiAgfVxuXG4gIHZpc2l0KGFzdDogQVNUKSB7XG4gICAgYXN0LnZpc2l0KHRoaXMpO1xuICB9XG5cbiAgdmlzaXRNZXRob2RDYWxsKGFzdDogTWV0aG9kQ2FsbCwgY29udGV4dDoge30pIHtcbiAgICB0aGlzLnZpc2l0SWRlbnRpZmllcihhc3QsIElkZW50aWZpZXJLaW5kLk1ldGhvZCk7XG4gICAgc3VwZXIudmlzaXRNZXRob2RDYWxsKGFzdCwgY29udGV4dCk7XG4gIH1cblxuICB2aXNpdFByb3BlcnR5UmVhZChhc3Q6IFByb3BlcnR5UmVhZCwgY29udGV4dDoge30pIHtcbiAgICB0aGlzLnZpc2l0SWRlbnRpZmllcihhc3QsIElkZW50aWZpZXJLaW5kLlByb3BlcnR5KTtcbiAgICBzdXBlci52aXNpdFByb3BlcnR5UmVhZChhc3QsIGNvbnRleHQpO1xuICB9XG5cbiAgdmlzaXRQcm9wZXJ0eVdyaXRlKGFzdDogUHJvcGVydHlXcml0ZSwgY29udGV4dDoge30pIHtcbiAgICB0aGlzLnZpc2l0SWRlbnRpZmllcihhc3QsIElkZW50aWZpZXJLaW5kLlByb3BlcnR5KTtcbiAgICBzdXBlci52aXNpdFByb3BlcnR5V3JpdGUoYXN0LCBjb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaXNpdHMgYW4gaWRlbnRpZmllciwgYWRkaW5nIGl0IHRvIHRoZSBpZGVudGlmaWVyIHN0b3JlIGlmIGl0IGlzIHVzZWZ1bCBmb3IgaW5kZXhpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBhc3QgZXhwcmVzc2lvbiBBU1QgdGhlIGlkZW50aWZpZXIgaXMgaW5cbiAgICogQHBhcmFtIGtpbmQgaWRlbnRpZmllciBraW5kXG4gICAqL1xuICBwcml2YXRlIHZpc2l0SWRlbnRpZmllcihcbiAgICAgIGFzdDogQVNUJntuYW1lOiBzdHJpbmcsIHJlY2VpdmVyOiBBU1R9LCBraW5kOiBFeHByZXNzaW9uSWRlbnRpZmllclsna2luZCddKSB7XG4gICAgLy8gVGhlIGRlZmluaXRpb24gb2YgYSBub24tdG9wLWxldmVsIHByb3BlcnR5IHN1Y2ggYXMgYGJhcmAgaW4gYHt7Zm9vLmJhcn19YCBpcyBjdXJyZW50bHlcbiAgICAvLyBpbXBvc3NpYmxlIHRvIGRldGVybWluZSBieSBhbiBpbmRleGVyIGFuZCB1bnN1cHBvcnRlZCBieSB0aGUgaW5kZXhpbmcgbW9kdWxlLlxuICAgIC8vIFRoZSBpbmRleGluZyBtb2R1bGUgYWxzbyBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCByZWZlcmVuY2VzIHRvIGlkZW50aWZpZXJzIGRlY2xhcmVkIGluIHRoZVxuICAgIC8vIHRlbXBsYXRlIGl0c2VsZiwgd2hpY2ggaGF2ZSBhIG5vbi1udWxsIGV4cHJlc3Npb24gdGFyZ2V0LlxuICAgIGlmICghKGFzdC5yZWNlaXZlciBpbnN0YW5jZW9mIEltcGxpY2l0UmVjZWl2ZXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGhlIHNvdXJjZSBzcGFuIG9mIHRoZSByZXF1ZXN0ZWQgQVNUIHN0YXJ0cyBhdCBhIGxvY2F0aW9uIHRoYXQgaXMgb2Zmc2V0IGZyb20gdGhlIGV4cHJlc3Npb24uXG4gICAgY29uc3QgaWRlbnRpZmllclN0YXJ0ID0gYXN0LnNvdXJjZVNwYW4uc3RhcnQgLSB0aGlzLmFic29sdXRlT2Zmc2V0O1xuICAgIGlmICghdGhpcy5leHByZXNzaW9uU3RyLnN1YnN0cmluZyhpZGVudGlmaWVyU3RhcnQpLnN0YXJ0c1dpdGgoYXN0Lm5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEltcG9zc2libGUgc3RhdGU6IFwiJHthc3QubmFtZX1cIiBub3QgZm91bmQgaW4gXCIke1xuICAgICAgICAgIHRoaXMuZXhwcmVzc2lvblN0cn1cIiBhdCBsb2NhdGlvbiAke2lkZW50aWZpZXJTdGFydH1gKTtcbiAgICB9XG5cbiAgICAvLyBKb2luIHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiB3aXRoaW4gYSBub2RlIHdpdGggdGhlIGFic29sdXRlIHBvc2l0aW9uXG4gICAgLy8gb2YgdGhlIG5vZGUgdG8gZ2V0IHRoZSBhYnNvbHV0ZSBwb3NpdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiBpbiB0aGUgc291cmNlIGNvZGUuXG4gICAgY29uc3QgYWJzb2x1dGVTdGFydCA9IHRoaXMuYWJzb2x1dGVPZmZzZXQgKyBpZGVudGlmaWVyU3RhcnQ7XG4gICAgY29uc3Qgc3BhbiA9IG5ldyBBYnNvbHV0ZVNvdXJjZVNwYW4oYWJzb2x1dGVTdGFydCwgYWJzb2x1dGVTdGFydCArIGFzdC5uYW1lLmxlbmd0aCk7XG5cbiAgICBjb25zdCB0YXJnZXRBc3QgPSB0aGlzLmJvdW5kVGVtcGxhdGUuZ2V0RXhwcmVzc2lvblRhcmdldChhc3QpO1xuICAgIGNvbnN0IHRhcmdldCA9IHRhcmdldEFzdCA/IHRoaXMudGFyZ2V0VG9JZGVudGlmaWVyKHRhcmdldEFzdCkgOiBudWxsO1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB7XG4gICAgICBuYW1lOiBhc3QubmFtZSxcbiAgICAgIHNwYW4sXG4gICAgICBraW5kLFxuICAgICAgdGFyZ2V0LFxuICAgIH0gYXMgRXhwcmVzc2lvbklkZW50aWZpZXI7XG5cbiAgICB0aGlzLmlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcik7XG4gIH1cbn1cblxuLyoqXG4gKiBWaXNpdHMgdGhlIEFTVCBvZiBhIHBhcnNlZCBBbmd1bGFyIHRlbXBsYXRlLiBEaXNjb3ZlcnMgYW5kIHN0b3Jlc1xuICogaWRlbnRpZmllcnMgb2YgaW50ZXJlc3QsIGRlZmVycmluZyB0byBhbiBgRXhwcmVzc2lvblZpc2l0b3JgIGFzIG5lZWRlZC5cbiAqL1xuY2xhc3MgVGVtcGxhdGVWaXNpdG9yIGV4dGVuZHMgVG1wbEFzdFJlY3Vyc2l2ZVZpc2l0b3Ige1xuICAvLyBJZGVudGlmaWVycyBvZiBpbnRlcmVzdCBmb3VuZCBpbiB0aGUgdGVtcGxhdGUuXG4gIHJlYWRvbmx5IGlkZW50aWZpZXJzID0gbmV3IFNldDxUb3BMZXZlbElkZW50aWZpZXI+KCk7XG5cbiAgLy8gTWFwIG9mIHRhcmdldHMgaW4gYSB0ZW1wbGF0ZSB0byB0aGVpciBpZGVudGlmaWVycy5cbiAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRJZGVudGlmaWVyQ2FjaGU6IFRhcmdldElkZW50aWZpZXJNYXAgPSBuZXcgTWFwKCk7XG5cbiAgLy8gTWFwIG9mIGVsZW1lbnRzIGFuZCB0ZW1wbGF0ZXMgdG8gdGhlaXIgaWRlbnRpZmllcnMuXG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudEFuZFRlbXBsYXRlSWRlbnRpZmllckNhY2hlID1cbiAgICAgIG5ldyBNYXA8VG1wbEFzdEVsZW1lbnR8VG1wbEFzdFRlbXBsYXRlLCBFbGVtZW50SWRlbnRpZmllcnxUZW1wbGF0ZU5vZGVJZGVudGlmaWVyPigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGVtcGxhdGUgdmlzaXRvciBmb3IgYSBib3VuZCB0ZW1wbGF0ZSB0YXJnZXQuIFRoZSBib3VuZCB0YXJnZXQgY2FuIGJlIHVzZWQgd2hlblxuICAgKiBkZWZlcnJlZCB0byB0aGUgZXhwcmVzc2lvbiB2aXNpdG9yIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFyZ2V0IG9mIGFuIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIEBwYXJhbSBib3VuZFRlbXBsYXRlIGJvdW5kIHRlbXBsYXRlIHRhcmdldFxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBib3VuZFRlbXBsYXRlOiBCb3VuZFRhcmdldDxDb21wb25lbnRNZXRhPikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogVmlzaXRzIGEgbm9kZSBpbiB0aGUgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIG5vZGUgdG8gdmlzaXRcbiAgICovXG4gIHZpc2l0KG5vZGU6IEhUTUxOb2RlKSB7XG4gICAgbm9kZS52aXNpdCh0aGlzKTtcbiAgfVxuXG4gIHZpc2l0QWxsKG5vZGVzOiBUbXBsQXN0Tm9kZVtdKSB7XG4gICAgbm9kZXMuZm9yRWFjaChub2RlID0+IHRoaXMudmlzaXQobm9kZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBpZGVudGlmaWVyIGZvciBhbiBIVE1MIGVsZW1lbnQgYW5kIHZpc2l0IGl0cyBjaGlsZHJlbiByZWN1cnNpdmVseS5cbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnRcbiAgICovXG4gIHZpc2l0RWxlbWVudChlbGVtZW50OiBUbXBsQXN0RWxlbWVudCkge1xuICAgIGNvbnN0IGVsZW1lbnRJZGVudGlmaWVyID0gdGhpcy5lbGVtZW50T3JUZW1wbGF0ZVRvSWRlbnRpZmllcihlbGVtZW50KTtcblxuICAgIHRoaXMuaWRlbnRpZmllcnMuYWRkKGVsZW1lbnRJZGVudGlmaWVyKTtcblxuICAgIHRoaXMudmlzaXRBbGwoZWxlbWVudC5yZWZlcmVuY2VzKTtcbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQuaW5wdXRzKTtcbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQuYXR0cmlidXRlcyk7XG4gICAgdGhpcy52aXNpdEFsbChlbGVtZW50LmNoaWxkcmVuKTtcbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQub3V0cHV0cyk7XG4gIH1cbiAgdmlzaXRUZW1wbGF0ZSh0ZW1wbGF0ZTogVG1wbEFzdFRlbXBsYXRlKSB7XG4gICAgY29uc3QgdGVtcGxhdGVJZGVudGlmaWVyID0gdGhpcy5lbGVtZW50T3JUZW1wbGF0ZVRvSWRlbnRpZmllcih0ZW1wbGF0ZSk7XG5cbiAgICB0aGlzLmlkZW50aWZpZXJzLmFkZCh0ZW1wbGF0ZUlkZW50aWZpZXIpO1xuXG4gICAgdGhpcy52aXNpdEFsbCh0ZW1wbGF0ZS52YXJpYWJsZXMpO1xuICAgIHRoaXMudmlzaXRBbGwodGVtcGxhdGUuYXR0cmlidXRlcyk7XG4gICAgdGhpcy52aXNpdEFsbCh0ZW1wbGF0ZS50ZW1wbGF0ZUF0dHJzKTtcbiAgICB0aGlzLnZpc2l0QWxsKHRlbXBsYXRlLmNoaWxkcmVuKTtcbiAgICB0aGlzLnZpc2l0QWxsKHRlbXBsYXRlLnJlZmVyZW5jZXMpO1xuICB9XG4gIHZpc2l0Qm91bmRBdHRyaWJ1dGUoYXR0cmlidXRlOiBUbXBsQXN0Qm91bmRBdHRyaWJ1dGUpIHtcbiAgICAvLyBJZiB0aGUgYm91bmQgYXR0cmlidXRlIGhhcyBubyB2YWx1ZSwgaXQgY2Fubm90IGhhdmUgYW55IGlkZW50aWZpZXJzIGluIHRoZSB2YWx1ZSBleHByZXNzaW9uLlxuICAgIGlmIChhdHRyaWJ1dGUudmFsdWVTcGFuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpZGVudGlmaWVycyA9IEV4cHJlc3Npb25WaXNpdG9yLmdldElkZW50aWZpZXJzKFxuICAgICAgICBhdHRyaWJ1dGUudmFsdWUsIGF0dHJpYnV0ZS52YWx1ZVNwYW4udG9TdHJpbmcoKSwgYXR0cmlidXRlLnZhbHVlU3Bhbi5zdGFydC5vZmZzZXQsXG4gICAgICAgIHRoaXMuYm91bmRUZW1wbGF0ZSwgdGhpcy50YXJnZXRUb0lkZW50aWZpZXIuYmluZCh0aGlzKSk7XG4gICAgaWRlbnRpZmllcnMuZm9yRWFjaChpZCA9PiB0aGlzLmlkZW50aWZpZXJzLmFkZChpZCkpO1xuICB9XG4gIHZpc2l0Qm91bmRFdmVudChhdHRyaWJ1dGU6IFRtcGxBc3RCb3VuZEV2ZW50KSB7XG4gICAgdGhpcy52aXNpdEV4cHJlc3Npb24oYXR0cmlidXRlLmhhbmRsZXIpO1xuICB9XG4gIHZpc2l0Qm91bmRUZXh0KHRleHQ6IFRtcGxBc3RCb3VuZFRleHQpIHtcbiAgICB0aGlzLnZpc2l0RXhwcmVzc2lvbih0ZXh0LnZhbHVlKTtcbiAgfVxuICB2aXNpdFJlZmVyZW5jZShyZWZlcmVuY2U6IFRtcGxBc3RSZWZlcmVuY2UpIHtcbiAgICBjb25zdCByZWZlcmVuY2VJZGVudGlmZXIgPSB0aGlzLnRhcmdldFRvSWRlbnRpZmllcihyZWZlcmVuY2UpO1xuXG4gICAgdGhpcy5pZGVudGlmaWVycy5hZGQocmVmZXJlbmNlSWRlbnRpZmVyKTtcbiAgfVxuICB2aXNpdFZhcmlhYmxlKHZhcmlhYmxlOiBUbXBsQXN0VmFyaWFibGUpIHtcbiAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB0aGlzLnRhcmdldFRvSWRlbnRpZmllcih2YXJpYWJsZSk7XG5cbiAgICB0aGlzLmlkZW50aWZpZXJzLmFkZCh2YXJpYWJsZUlkZW50aWZpZXIpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgYW4gaWRlbnRpZmllciBmb3IgYSB0ZW1wbGF0ZSBlbGVtZW50IG9yIHRlbXBsYXRlIG5vZGUuICovXG4gIHByaXZhdGUgZWxlbWVudE9yVGVtcGxhdGVUb0lkZW50aWZpZXIobm9kZTogVG1wbEFzdEVsZW1lbnR8VG1wbEFzdFRlbXBsYXRlKTogRWxlbWVudElkZW50aWZpZXJcbiAgICAgIHxUZW1wbGF0ZU5vZGVJZGVudGlmaWVyIHtcbiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiBzZWVuLCByZXR1cm4gdGhlIGNhY2hlZCByZXN1bHQuXG4gICAgaWYgKHRoaXMuZWxlbWVudEFuZFRlbXBsYXRlSWRlbnRpZmllckNhY2hlLmhhcyhub2RlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudEFuZFRlbXBsYXRlSWRlbnRpZmllckNhY2hlLmdldChub2RlKSE7XG4gICAgfVxuXG4gICAgbGV0IG5hbWU6IHN0cmluZztcbiAgICBsZXQga2luZDogSWRlbnRpZmllcktpbmQuRWxlbWVudHxJZGVudGlmaWVyS2luZC5UZW1wbGF0ZTtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFRtcGxBc3RUZW1wbGF0ZSkge1xuICAgICAgbmFtZSA9IG5vZGUudGFnTmFtZTtcbiAgICAgIGtpbmQgPSBJZGVudGlmaWVyS2luZC5UZW1wbGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IG5vZGUubmFtZTtcbiAgICAgIGtpbmQgPSBJZGVudGlmaWVyS2luZC5FbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCB7c291cmNlU3Bhbn0gPSBub2RlO1xuICAgIC8vIEFuIGVsZW1lbnQncyBvciB0ZW1wbGF0ZSdzIHNvdXJjZSBzcGFuIGNhbiBiZSBvZiB0aGUgZm9ybSBgPGVsZW1lbnQ+YCwgYDxlbGVtZW50IC8+YCwgb3JcbiAgICAvLyBgPGVsZW1lbnQ+PC9lbGVtZW50PmAuIE9ubHkgdGhlIHNlbGVjdG9yIGlzIGludGVyZXN0aW5nIHRvIHRoZSBpbmRleGVyLCBzbyB0aGUgc291cmNlIGlzXG4gICAgLy8gc2VhcmNoZWQgZm9yIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBlbGVtZW50IChzZWxlY3RvcikgbmFtZS5cbiAgICBjb25zdCBzdGFydCA9IHRoaXMuZ2V0U3RhcnRMb2NhdGlvbihuYW1lLCBzb3VyY2VTcGFuKTtcbiAgICBjb25zdCBhYnNvbHV0ZVNwYW4gPSBuZXcgQWJzb2x1dGVTb3VyY2VTcGFuKHN0YXJ0LCBzdGFydCArIG5hbWUubGVuZ3RoKTtcblxuICAgIC8vIFJlY29yZCB0aGUgbm9kZXMncyBhdHRyaWJ1dGVzLCB3aGljaCBhbiBpbmRleGVyIGNhbiBsYXRlciB0cmF2ZXJzZSB0byBzZWUgaWYgYW55IG9mIHRoZW1cbiAgICAvLyBzcGVjaWZ5IGEgdXNlZCBkaXJlY3RpdmUgb24gdGhlIG5vZGUuXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IG5vZGUuYXR0cmlidXRlcy5tYXAoKHtuYW1lLCBzb3VyY2VTcGFufSk6IEF0dHJpYnV0ZUlkZW50aWZpZXIgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc3BhbjogbmV3IEFic29sdXRlU291cmNlU3Bhbihzb3VyY2VTcGFuLnN0YXJ0Lm9mZnNldCwgc291cmNlU3Bhbi5lbmQub2Zmc2V0KSxcbiAgICAgICAga2luZDogSWRlbnRpZmllcktpbmQuQXR0cmlidXRlLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCB1c2VkRGlyZWN0aXZlcyA9IHRoaXMuYm91bmRUZW1wbGF0ZS5nZXREaXJlY3RpdmVzT2ZOb2RlKG5vZGUpIHx8IFtdO1xuXG4gICAgY29uc3QgaWRlbnRpZmllciA9IHtcbiAgICAgIG5hbWUsXG4gICAgICBzcGFuOiBhYnNvbHV0ZVNwYW4sXG4gICAgICBraW5kLFxuICAgICAgYXR0cmlidXRlczogbmV3IFNldChhdHRyaWJ1dGVzKSxcbiAgICAgIHVzZWREaXJlY3RpdmVzOiBuZXcgU2V0KHVzZWREaXJlY3RpdmVzLm1hcChkaXIgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGU6IGRpci5yZWYubm9kZSxcbiAgICAgICAgICBzZWxlY3RvcjogZGlyLnNlbGVjdG9yLFxuICAgICAgICB9O1xuICAgICAgfSkpLFxuICAgICAgLy8gY2FzdCBiL2MgcHJlLVR5cGVTY3JpcHQgMy41IHVuaW9ucyBhcmVuJ3Qgd2VsbCBkaXNjcmltaW5hdGVkXG4gICAgfSBhcyBFbGVtZW50SWRlbnRpZmllciB8XG4gICAgICAgIFRlbXBsYXRlTm9kZUlkZW50aWZpZXI7XG5cbiAgICB0aGlzLmVsZW1lbnRBbmRUZW1wbGF0ZUlkZW50aWZpZXJDYWNoZS5zZXQobm9kZSwgaWRlbnRpZmllcik7XG4gICAgcmV0dXJuIGlkZW50aWZpZXI7XG4gIH1cblxuICAvKiogQ3JlYXRlcyBhbiBpZGVudGlmaWVyIGZvciBhIHRlbXBsYXRlIHJlZmVyZW5jZSBvciB0ZW1wbGF0ZSB2YXJpYWJsZSB0YXJnZXQuICovXG4gIHByaXZhdGUgdGFyZ2V0VG9JZGVudGlmaWVyKG5vZGU6IFRtcGxBc3RSZWZlcmVuY2V8VG1wbEFzdFZhcmlhYmxlKTogVGFyZ2V0SWRlbnRpZmllciB7XG4gICAgLy8gSWYgdGhpcyBub2RlIGhhcyBhbHJlYWR5IGJlZW4gc2VlbiwgcmV0dXJuIHRoZSBjYWNoZWQgcmVzdWx0LlxuICAgIGlmICh0aGlzLnRhcmdldElkZW50aWZpZXJDYWNoZS5oYXMobm9kZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhcmdldElkZW50aWZpZXJDYWNoZS5nZXQobm9kZSkhO1xuICAgIH1cblxuICAgIGNvbnN0IHtuYW1lLCBzb3VyY2VTcGFufSA9IG5vZGU7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmdldFN0YXJ0TG9jYXRpb24obmFtZSwgc291cmNlU3Bhbik7XG4gICAgY29uc3Qgc3BhbiA9IG5ldyBBYnNvbHV0ZVNvdXJjZVNwYW4oc3RhcnQsIHN0YXJ0ICsgbmFtZS5sZW5ndGgpO1xuICAgIGxldCBpZGVudGlmaWVyOiBSZWZlcmVuY2VJZGVudGlmaWVyfFZhcmlhYmxlSWRlbnRpZmllcjtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFRtcGxBc3RSZWZlcmVuY2UpIHtcbiAgICAgIC8vIElmIHRoZSBub2RlIGlzIGEgcmVmZXJlbmNlLCB3ZSBjYXJlIGFib3V0IGl0cyB0YXJnZXQuIFRoZSB0YXJnZXQgY2FuIGJlIGFuIGVsZW1lbnQsIGFcbiAgICAgIC8vIHRlbXBsYXRlLCBhIGRpcmVjdGl2ZSBhcHBsaWVkIG9uIGEgdGVtcGxhdGUgb3IgZWxlbWVudCAoaW4gd2hpY2ggY2FzZSB0aGUgZGlyZWN0aXZlIGZpZWxkXG4gICAgICAvLyBpcyBub24tbnVsbCksIG9yIG5vdGhpbmcgYXQgYWxsLlxuICAgICAgY29uc3QgcmVmVGFyZ2V0ID0gdGhpcy5ib3VuZFRlbXBsYXRlLmdldFJlZmVyZW5jZVRhcmdldChub2RlKTtcbiAgICAgIGxldCB0YXJnZXQgPSBudWxsO1xuICAgICAgaWYgKHJlZlRhcmdldCkge1xuICAgICAgICBpZiAocmVmVGFyZ2V0IGluc3RhbmNlb2YgVG1wbEFzdEVsZW1lbnQgfHwgcmVmVGFyZ2V0IGluc3RhbmNlb2YgVG1wbEFzdFRlbXBsYXRlKSB7XG4gICAgICAgICAgdGFyZ2V0ID0ge1xuICAgICAgICAgICAgbm9kZTogdGhpcy5lbGVtZW50T3JUZW1wbGF0ZVRvSWRlbnRpZmllcihyZWZUYXJnZXQpLFxuICAgICAgICAgICAgZGlyZWN0aXZlOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0ID0ge1xuICAgICAgICAgICAgbm9kZTogdGhpcy5lbGVtZW50T3JUZW1wbGF0ZVRvSWRlbnRpZmllcihyZWZUYXJnZXQubm9kZSksXG4gICAgICAgICAgICBkaXJlY3RpdmU6IHJlZlRhcmdldC5kaXJlY3RpdmUucmVmLm5vZGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZGVudGlmaWVyID0ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBzcGFuLFxuICAgICAgICBraW5kOiBJZGVudGlmaWVyS2luZC5SZWZlcmVuY2UsXG4gICAgICAgIHRhcmdldCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkZW50aWZpZXIgPSB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNwYW4sXG4gICAgICAgIGtpbmQ6IElkZW50aWZpZXJLaW5kLlZhcmlhYmxlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLnRhcmdldElkZW50aWZpZXJDYWNoZS5zZXQobm9kZSwgaWRlbnRpZmllcik7XG4gICAgcmV0dXJuIGlkZW50aWZpZXI7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgc3RhcnQgbG9jYXRpb24gb2YgYSBzdHJpbmcgaW4gYSBTb3VyY2VTcGFuICovXG4gIHByaXZhdGUgZ2V0U3RhcnRMb2NhdGlvbihuYW1lOiBzdHJpbmcsIGNvbnRleHQ6IFBhcnNlU291cmNlU3Bhbik6IG51bWJlciB7XG4gICAgY29uc3QgbG9jYWxTdHIgPSBjb250ZXh0LnRvU3RyaW5nKCk7XG4gICAgaWYgKCFsb2NhbFN0ci5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbXBvc3NpYmxlIHN0YXRlOiBcIiR7bmFtZX1cIiBub3QgZm91bmQgaW4gXCIke2xvY2FsU3RyfVwiYCk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0LnN0YXJ0Lm9mZnNldCArIGxvY2FsU3RyLmluZGV4T2YobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogVmlzaXRzIGEgbm9kZSdzIGV4cHJlc3Npb24gYW5kIGFkZHMgaXRzIGlkZW50aWZpZXJzLCBpZiBhbnksIHRvIHRoZSB2aXNpdG9yJ3Mgc3RhdGUuXG4gICAqIE9ubHkgQVNUcyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBleHByZXNzaW9uIHNvdXJjZSBhbmQgaXRzIGxvY2F0aW9uIGFyZSB2aXNpdGVkLlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZSBub2RlIHdob3NlIGV4cHJlc3Npb24gdG8gdmlzaXRcbiAgICovXG4gIHByaXZhdGUgdmlzaXRFeHByZXNzaW9uKGFzdDogQVNUKSB7XG4gICAgLy8gT25seSBpbmNsdWRlIEFTVHMgdGhhdCBoYXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIHNvdXJjZSBhbmQgYWJzb2x1dGUgc291cmNlIHNwYW5zLlxuICAgIGlmIChhc3QgaW5zdGFuY2VvZiBBU1RXaXRoU291cmNlICYmIGFzdC5zb3VyY2UgIT09IG51bGwpIHtcbiAgICAgIC8vIE1ha2UgdGFyZ2V0IHRvIGlkZW50aWZpZXIgbWFwcGluZyBjbG9zdXJlIHN0YXRlZnVsIHRvIHRoaXMgdmlzaXRvciBpbnN0YW5jZS5cbiAgICAgIGNvbnN0IHRhcmdldFRvSWRlbnRpZmllciA9IHRoaXMudGFyZ2V0VG9JZGVudGlmaWVyLmJpbmQodGhpcyk7XG4gICAgICBjb25zdCBhYnNvbHV0ZU9mZnNldCA9IGFzdC5zb3VyY2VTcGFuLnN0YXJ0O1xuICAgICAgY29uc3QgaWRlbnRpZmllcnMgPSBFeHByZXNzaW9uVmlzaXRvci5nZXRJZGVudGlmaWVycyhcbiAgICAgICAgICBhc3QsIGFzdC5zb3VyY2UsIGFic29sdXRlT2Zmc2V0LCB0aGlzLmJvdW5kVGVtcGxhdGUsIHRhcmdldFRvSWRlbnRpZmllcik7XG4gICAgICBpZGVudGlmaWVycy5mb3JFYWNoKGlkID0+IHRoaXMuaWRlbnRpZmllcnMuYWRkKGlkKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVHJhdmVyc2VzIGEgdGVtcGxhdGUgQVNUIGFuZCBidWlsZHMgaWRlbnRpZmllcnMgZGlzY292ZXJlZCBpbiBpdC5cbiAqXG4gKiBAcGFyYW0gYm91bmRUZW1wbGF0ZSBib3VuZCB0ZW1wbGF0ZSB0YXJnZXQsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBxdWVyeWluZyBleHByZXNzaW9uIHRhcmdldHMuXG4gKiBAcmV0dXJuIGlkZW50aWZpZXJzIGluIHRlbXBsYXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW1wbGF0ZUlkZW50aWZpZXJzKGJvdW5kVGVtcGxhdGU6IEJvdW5kVGFyZ2V0PENvbXBvbmVudE1ldGE+KTpcbiAgICBTZXQ8VG9wTGV2ZWxJZGVudGlmaWVyPiB7XG4gIGNvbnN0IHZpc2l0b3IgPSBuZXcgVGVtcGxhdGVWaXNpdG9yKGJvdW5kVGVtcGxhdGUpO1xuICBpZiAoYm91bmRUZW1wbGF0ZS50YXJnZXQudGVtcGxhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHZpc2l0b3IudmlzaXRBbGwoYm91bmRUZW1wbGF0ZS50YXJnZXQudGVtcGxhdGUpO1xuICB9XG4gIHJldHVybiB2aXNpdG9yLmlkZW50aWZpZXJzO1xufVxuIl19
|
|
@@ -8,5 +8,7 @@
|
|
|
8
8
|
/// <amd-module name="@angular/compiler-cli/src/ngtsc/metadata" />
|
|
9
9
|
export * from './src/api';
|
|
10
10
|
export { DtsMetadataReader } from './src/dts';
|
|
11
|
+
export { flattenInheritedDirectiveMetadata } from './src/inheritance';
|
|
11
12
|
export { CompoundMetadataRegistry, LocalMetadataRegistry, InjectableClassRegistry } from './src/registry';
|
|
12
13
|
export { extractDirectiveTypeCheckMeta, CompoundMetadataReader } from './src/util';
|
|
14
|
+
export { BindingPropertyName, ClassPropertyMapping, ClassPropertyName, InputOrOutput } from './src/property_mapping';
|
|
@@ -11,16 +11,18 @@
|
|
|
11
11
|
if (v !== undefined) module.exports = v;
|
|
12
12
|
}
|
|
13
13
|
else if (typeof define === "function" && define.amd) {
|
|
14
|
-
define("@angular/compiler-cli/src/ngtsc/metadata", ["require", "exports", "tslib", "@angular/compiler-cli/src/ngtsc/metadata/src/api", "@angular/compiler-cli/src/ngtsc/metadata/src/dts", "@angular/compiler-cli/src/ngtsc/metadata/src/registry", "@angular/compiler-cli/src/ngtsc/metadata/src/util"], factory);
|
|
14
|
+
define("@angular/compiler-cli/src/ngtsc/metadata", ["require", "exports", "tslib", "@angular/compiler-cli/src/ngtsc/metadata/src/api", "@angular/compiler-cli/src/ngtsc/metadata/src/dts", "@angular/compiler-cli/src/ngtsc/metadata/src/inheritance", "@angular/compiler-cli/src/ngtsc/metadata/src/registry", "@angular/compiler-cli/src/ngtsc/metadata/src/util", "@angular/compiler-cli/src/ngtsc/metadata/src/property_mapping"], factory);
|
|
15
15
|
}
|
|
16
16
|
})(function (require, exports) {
|
|
17
17
|
"use strict";
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.CompoundMetadataReader = exports.extractDirectiveTypeCheckMeta = exports.InjectableClassRegistry = exports.LocalMetadataRegistry = exports.CompoundMetadataRegistry = exports.DtsMetadataReader = void 0;
|
|
19
|
+
exports.ClassPropertyMapping = exports.CompoundMetadataReader = exports.extractDirectiveTypeCheckMeta = exports.InjectableClassRegistry = exports.LocalMetadataRegistry = exports.CompoundMetadataRegistry = exports.flattenInheritedDirectiveMetadata = exports.DtsMetadataReader = void 0;
|
|
20
20
|
var tslib_1 = require("tslib");
|
|
21
21
|
tslib_1.__exportStar(require("@angular/compiler-cli/src/ngtsc/metadata/src/api"), exports);
|
|
22
22
|
var dts_1 = require("@angular/compiler-cli/src/ngtsc/metadata/src/dts");
|
|
23
23
|
Object.defineProperty(exports, "DtsMetadataReader", { enumerable: true, get: function () { return dts_1.DtsMetadataReader; } });
|
|
24
|
+
var inheritance_1 = require("@angular/compiler-cli/src/ngtsc/metadata/src/inheritance");
|
|
25
|
+
Object.defineProperty(exports, "flattenInheritedDirectiveMetadata", { enumerable: true, get: function () { return inheritance_1.flattenInheritedDirectiveMetadata; } });
|
|
24
26
|
var registry_1 = require("@angular/compiler-cli/src/ngtsc/metadata/src/registry");
|
|
25
27
|
Object.defineProperty(exports, "CompoundMetadataRegistry", { enumerable: true, get: function () { return registry_1.CompoundMetadataRegistry; } });
|
|
26
28
|
Object.defineProperty(exports, "LocalMetadataRegistry", { enumerable: true, get: function () { return registry_1.LocalMetadataRegistry; } });
|
|
@@ -28,5 +30,7 @@
|
|
|
28
30
|
var util_1 = require("@angular/compiler-cli/src/ngtsc/metadata/src/util");
|
|
29
31
|
Object.defineProperty(exports, "extractDirectiveTypeCheckMeta", { enumerable: true, get: function () { return util_1.extractDirectiveTypeCheckMeta; } });
|
|
30
32
|
Object.defineProperty(exports, "CompoundMetadataReader", { enumerable: true, get: function () { return util_1.CompoundMetadataReader; } });
|
|
33
|
+
var property_mapping_1 = require("@angular/compiler-cli/src/ngtsc/metadata/src/property_mapping");
|
|
34
|
+
Object.defineProperty(exports, "ClassPropertyMapping", { enumerable: true, get: function () { return property_mapping_1.ClassPropertyMapping; } });
|
|
31
35
|
});
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL21ldGFkYXRhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFFSCwyRkFBMEI7SUFDMUIsd0VBQTRDO0lBQXBDLHdHQUFBLGlCQUFpQixPQUFBO0lBQ3pCLHdGQUFvRTtJQUE1RCxnSUFBQSxpQ0FBaUMsT0FBQTtJQUN6QyxrRkFBd0c7SUFBaEcsb0hBQUEsd0JBQXdCLE9BQUE7SUFBRSxpSEFBQSxxQkFBcUIsT0FBQTtJQUFFLG1IQUFBLHVCQUF1QixPQUFBO0lBQ2hGLDBFQUFpRjtJQUF6RSxxSEFBQSw2QkFBNkIsT0FBQTtJQUFFLDhHQUFBLHNCQUFzQixPQUFBO0lBQzdELGtHQUFtSDtJQUF0Rix3SEFBQSxvQkFBb0IsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcGknO1xuZXhwb3J0IHtEdHNNZXRhZGF0YVJlYWRlcn0gZnJvbSAnLi9zcmMvZHRzJztcbmV4cG9ydCB7ZmxhdHRlbkluaGVyaXRlZERpcmVjdGl2ZU1ldGFkYXRhfSBmcm9tICcuL3NyYy9pbmhlcml0YW5jZSc7XG5leHBvcnQge0NvbXBvdW5kTWV0YWRhdGFSZWdpc3RyeSwgTG9jYWxNZXRhZGF0YVJlZ2lzdHJ5LCBJbmplY3RhYmxlQ2xhc3NSZWdpc3RyeX0gZnJvbSAnLi9zcmMvcmVnaXN0cnknO1xuZXhwb3J0IHtleHRyYWN0RGlyZWN0aXZlVHlwZUNoZWNrTWV0YSwgQ29tcG91bmRNZXRhZGF0YVJlYWRlcn0gZnJvbSAnLi9zcmMvdXRpbCc7XG5leHBvcnQge0JpbmRpbmdQcm9wZXJ0eU5hbWUsIENsYXNzUHJvcGVydHlNYXBwaW5nLCBDbGFzc1Byb3BlcnR5TmFtZSwgSW5wdXRPck91dHB1dH0gZnJvbSAnLi9zcmMvcHJvcGVydHlfbWFwcGluZyc7XG4iXX0=
|
|
@@ -10,6 +10,7 @@ import { DirectiveMeta as T2DirectiveMeta, SchemaMetadata } from '@angular/compi
|
|
|
10
10
|
import * as ts from 'typescript';
|
|
11
11
|
import { Reference } from '../../imports';
|
|
12
12
|
import { ClassDeclaration } from '../../reflection';
|
|
13
|
+
import { ClassPropertyMapping, ClassPropertyName } from './property_mapping';
|
|
13
14
|
/**
|
|
14
15
|
* Metadata collected for an `NgModule`.
|
|
15
16
|
*/
|
|
@@ -45,22 +46,22 @@ export interface DirectiveTypeCheckMeta {
|
|
|
45
46
|
* Directive's class. This allows inputs to accept a wider range of types and coerce the input to
|
|
46
47
|
* a narrower type with a getter/setter. See https://angular.io/guide/template-typecheck.
|
|
47
48
|
*/
|
|
48
|
-
coercedInputFields: Set<
|
|
49
|
+
coercedInputFields: Set<ClassPropertyName>;
|
|
49
50
|
/**
|
|
50
51
|
* The set of input fields which map to `readonly`, `private`, or `protected` members in the
|
|
51
52
|
* Directive's class.
|
|
52
53
|
*/
|
|
53
|
-
restrictedInputFields: Set<
|
|
54
|
+
restrictedInputFields: Set<ClassPropertyName>;
|
|
54
55
|
/**
|
|
55
56
|
* The set of input fields which are declared as string literal members in the Directive's class.
|
|
56
57
|
* We need to track these separately because these fields may not be valid JS identifiers so
|
|
57
58
|
* we cannot use them with property access expressions when assigning inputs.
|
|
58
59
|
*/
|
|
59
|
-
stringLiteralInputFields: Set<
|
|
60
|
+
stringLiteralInputFields: Set<ClassPropertyName>;
|
|
60
61
|
/**
|
|
61
62
|
* The set of input fields which do not have corresponding members in the Directive's class.
|
|
62
63
|
*/
|
|
63
|
-
undeclaredInputFields: Set<
|
|
64
|
+
undeclaredInputFields: Set<ClassPropertyName>;
|
|
64
65
|
/**
|
|
65
66
|
* Whether the Directive's class is generic, i.e. `class MyDir<T> {...}`.
|
|
66
67
|
*/
|
|
@@ -76,6 +77,14 @@ export interface DirectiveMeta extends T2DirectiveMeta, DirectiveTypeCheckMeta {
|
|
|
76
77
|
*/
|
|
77
78
|
selector: string | null;
|
|
78
79
|
queries: string[];
|
|
80
|
+
/**
|
|
81
|
+
* A mapping of input field names to the property names.
|
|
82
|
+
*/
|
|
83
|
+
inputs: ClassPropertyMapping;
|
|
84
|
+
/**
|
|
85
|
+
* A mapping of output field names to the property names.
|
|
86
|
+
*/
|
|
87
|
+
outputs: ClassPropertyMapping;
|
|
79
88
|
/**
|
|
80
89
|
* A `Reference` to the base class for the directive, if one was detected.
|
|
81
90
|
*
|
|
@@ -17,4 +17,4 @@
|
|
|
17
17
|
"use strict";
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
19
|
});
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9tZXRhZGF0YS9zcmMvYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0RpcmVjdGl2ZU1ldGEgYXMgVDJEaXJlY3RpdmVNZXRhLCBTY2hlbWFNZXRhZGF0YX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7UmVmZXJlbmNlfSBmcm9tICcuLi8uLi9pbXBvcnRzJztcbmltcG9ydCB7Q2xhc3NEZWNsYXJhdGlvbn0gZnJvbSAnLi4vLi4vcmVmbGVjdGlvbic7XG5cbmltcG9ydCB7Q2xhc3NQcm9wZXJ0eU1hcHBpbmcsIENsYXNzUHJvcGVydHlOYW1lfSBmcm9tICcuL3Byb3BlcnR5X21hcHBpbmcnO1xuXG5cbi8qKlxuICogTWV0YWRhdGEgY29sbGVjdGVkIGZvciBhbiBgTmdNb2R1bGVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5nTW9kdWxlTWV0YSB7XG4gIHJlZjogUmVmZXJlbmNlPENsYXNzRGVjbGFyYXRpb24+O1xuICBkZWNsYXJhdGlvbnM6IFJlZmVyZW5jZTxDbGFzc0RlY2xhcmF0aW9uPltdO1xuICBpbXBvcnRzOiBSZWZlcmVuY2U8Q2xhc3NEZWNsYXJhdGlvbj5bXTtcbiAgZXhwb3J0czogUmVmZXJlbmNlPENsYXNzRGVjbGFyYXRpb24+W107XG4gIHNjaGVtYXM6IFNjaGVtYU1ldGFkYXRhW107XG5cbiAgLyoqXG4gICAqIFRoZSByYXcgYHRzLkV4cHJlc3Npb25gIHdoaWNoIGdhdmUgcmlzZSB0byBgZGVjbGFyYXRpb25zYCwgaWYgb25lIGV4aXN0cy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBgbnVsbGAsIHRoZW4gZWl0aGVyIG5vIGRlY2xhcmF0aW9ucyBleGlzdCwgb3Igbm8gZXhwcmVzc2lvbiB3YXMgYXZhaWxhYmxlIChsaWtlbHlcbiAgICogYmVjYXVzZSB0aGUgbW9kdWxlIGNhbWUgZnJvbSBhIC5kLnRzIGZpbGUpLlxuICAgKi9cbiAgcmF3RGVjbGFyYXRpb25zOiB0cy5FeHByZXNzaW9ufG51bGw7XG59XG5cbi8qKlxuICogVHlwaW5nIG1ldGFkYXRhIGNvbGxlY3RlZCBmb3IgYSBkaXJlY3RpdmUgd2l0aGluIGFuIE5nTW9kdWxlJ3Mgc2NvcGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0aXZlVHlwZUNoZWNrTWV0YSB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHN0YXRpYyBgbmdUZW1wbGF0ZUd1YXJkX3h4YCBtZW1iZXJzIGZvdW5kIG9uIHRoZSBEaXJlY3RpdmUncyBjbGFzcy5cbiAgICogQHNlZSBgVGVtcGxhdGVHdWFyZE1ldGFgXG4gICAqL1xuICBuZ1RlbXBsYXRlR3VhcmRzOiBUZW1wbGF0ZUd1YXJkTWV0YVtdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBEaXJlY3RpdmUncyBjbGFzcyBoYXMgYSBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZCBmdW5jdGlvbi5cbiAgICovXG4gIGhhc05nVGVtcGxhdGVDb250ZXh0R3VhcmQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgaW5wdXQgZmllbGRzIHdoaWNoIGhhdmUgYSBjb3JyZXNwb25kaW5nIHN0YXRpYyBgbmdBY2NlcHRJbnB1dFR5cGVfYCBvbiB0aGVcbiAgICogRGlyZWN0aXZlJ3MgY2xhc3MuIFRoaXMgYWxsb3dzIGlucHV0cyB0byBhY2NlcHQgYSB3aWRlciByYW5nZSBvZiB0eXBlcyBhbmQgY29lcmNlIHRoZSBpbnB1dCB0b1xuICAgKiBhIG5hcnJvd2VyIHR5cGUgd2l0aCBhIGdldHRlci9zZXR0ZXIuIFNlZSBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvdGVtcGxhdGUtdHlwZWNoZWNrLlxuICAgKi9cbiAgY29lcmNlZElucHV0RmllbGRzOiBTZXQ8Q2xhc3NQcm9wZXJ0eU5hbWU+O1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0IG9mIGlucHV0IGZpZWxkcyB3aGljaCBtYXAgdG8gYHJlYWRvbmx5YCwgYHByaXZhdGVgLCBvciBgcHJvdGVjdGVkYCBtZW1iZXJzIGluIHRoZVxuICAgKiBEaXJlY3RpdmUncyBjbGFzcy5cbiAgICovXG4gIHJlc3RyaWN0ZWRJbnB1dEZpZWxkczogU2V0PENsYXNzUHJvcGVydHlOYW1lPjtcblxuICAvKipcbiAgICogVGhlIHNldCBvZiBpbnB1dCBmaWVsZHMgd2hpY2ggYXJlIGRlY2xhcmVkIGFzIHN0cmluZyBsaXRlcmFsIG1lbWJlcnMgaW4gdGhlIERpcmVjdGl2ZSdzIGNsYXNzLlxuICAgKiBXZSBuZWVkIHRvIHRyYWNrIHRoZXNlIHNlcGFyYXRlbHkgYmVjYXVzZSB0aGVzZSBmaWVsZHMgbWF5IG5vdCBiZSB2YWxpZCBKUyBpZGVudGlmaWVycyBzb1xuICAgKiB3ZSBjYW5ub3QgdXNlIHRoZW0gd2l0aCBwcm9wZXJ0eSBhY2Nlc3MgZXhwcmVzc2lvbnMgd2hlbiBhc3NpZ25pbmcgaW5wdXRzLlxuICAgKi9cbiAgc3RyaW5nTGl0ZXJhbElucHV0RmllbGRzOiBTZXQ8Q2xhc3NQcm9wZXJ0eU5hbWU+O1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0IG9mIGlucHV0IGZpZWxkcyB3aGljaCBkbyBub3QgaGF2ZSBjb3JyZXNwb25kaW5nIG1lbWJlcnMgaW4gdGhlIERpcmVjdGl2ZSdzIGNsYXNzLlxuICAgKi9cbiAgdW5kZWNsYXJlZElucHV0RmllbGRzOiBTZXQ8Q2xhc3NQcm9wZXJ0eU5hbWU+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBEaXJlY3RpdmUncyBjbGFzcyBpcyBnZW5lcmljLCBpLmUuIGBjbGFzcyBNeURpcjxUPiB7Li4ufWAuXG4gICAqL1xuICBpc0dlbmVyaWM6IGJvb2xlYW47XG59XG5cbi8qKlxuICogTWV0YWRhdGEgY29sbGVjdGVkIGZvciBhIGRpcmVjdGl2ZSB3aXRoaW4gYW4gTmdNb2R1bGUncyBzY29wZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXJlY3RpdmVNZXRhIGV4dGVuZHMgVDJEaXJlY3RpdmVNZXRhLCBEaXJlY3RpdmVUeXBlQ2hlY2tNZXRhIHtcbiAgcmVmOiBSZWZlcmVuY2U8Q2xhc3NEZWNsYXJhdGlvbj47XG4gIC8qKlxuICAgKiBVbnBhcnNlZCBzZWxlY3RvciBvZiB0aGUgZGlyZWN0aXZlLCBvciBudWxsIGlmIHRoZSBkaXJlY3RpdmUgZG9lcyBub3QgaGF2ZSBhIHNlbGVjdG9yLlxuICAgKi9cbiAgc2VsZWN0b3I6IHN0cmluZ3xudWxsO1xuICBxdWVyaWVzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBtYXBwaW5nIG9mIGlucHV0IGZpZWxkIG5hbWVzIHRvIHRoZSBwcm9wZXJ0eSBuYW1lcy5cbiAgICovXG4gIGlucHV0czogQ2xhc3NQcm9wZXJ0eU1hcHBpbmc7XG5cbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiBvdXRwdXQgZmllbGQgbmFtZXMgdG8gdGhlIHByb3BlcnR5IG5hbWVzLlxuICAgKi9cbiAgb3V0cHV0czogQ2xhc3NQcm9wZXJ0eU1hcHBpbmc7XG5cbiAgLyoqXG4gICAqIEEgYFJlZmVyZW5jZWAgdG8gdGhlIGJhc2UgY2xhc3MgZm9yIHRoZSBkaXJlY3RpdmUsIGlmIG9uZSB3YXMgZGV0ZWN0ZWQuXG4gICAqXG4gICAqIEEgdmFsdWUgb2YgYCdkeW5hbWljJ2AgaW5kaWNhdGVzIHRoYXQgd2hpbGUgdGhlIGFuYWx5emVyIGRldGVjdGVkIHRoYXQgdGhpcyBkaXJlY3RpdmUgZXh0ZW5kc1xuICAgKiBhbm90aGVyIHR5cGUsIGl0IGNvdWxkIG5vdCBzdGF0aWNhbGx5IGRldGVybWluZSB0aGUgYmFzZSBjbGFzcy5cbiAgICovXG4gIGJhc2VDbGFzczogUmVmZXJlbmNlPENsYXNzRGVjbGFyYXRpb24+fCdkeW5hbWljJ3xudWxsO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhIHRoYXQgZGVzY3JpYmVzIGEgdGVtcGxhdGUgZ3VhcmQgZm9yIG9uZSBvZiB0aGUgZGlyZWN0aXZlJ3MgaW5wdXRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlR3VhcmRNZXRhIHtcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBuYW1lIHRoYXQgdGhpcyBndWFyZCBzaG91bGQgYmUgYXBwbGllZCB0by5cbiAgICovXG4gIGlucHV0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHRoZSB0eXBlIG9mIHRoZSB0ZW1wbGF0ZSBndWFyZC5cbiAgICpcbiAgICogLSAnaW52b2NhdGlvbicgbWVhbnMgdGhhdCBhIGNhbGwgdG8gdGhlIHRlbXBsYXRlIGd1YXJkIGZ1bmN0aW9uIGlzIGVtaXR0ZWQgc28gdGhhdCBpdHMgcmV0dXJuXG4gICAqICAgdHlwZSBjYW4gcmVzdWx0IGluIG5hcnJvd2luZyBvZiB0aGUgaW5wdXQgdHlwZS5cbiAgICogLSAnYmluZGluZycgbWVhbnMgdGhhdCB0aGUgaW5wdXQgYmluZGluZyBleHByZXNzaW9uIGl0c2VsZiBpcyB1c2VkIGFzIHRlbXBsYXRlIGd1YXJkLlxuICAgKi9cbiAgdHlwZTogJ2ludm9jYXRpb24nfCdiaW5kaW5nJztcbn1cblxuLyoqXG4gKiBNZXRhZGF0YSBmb3IgYSBwaXBlIHdpdGhpbiBhbiBOZ01vZHVsZSdzIHNjb3BlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVNZXRhIHtcbiAgcmVmOiBSZWZlcmVuY2U8Q2xhc3NEZWNsYXJhdGlvbj47XG4gIG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWFkcyBtZXRhZGF0YSBmb3IgZGlyZWN0aXZlcywgcGlwZXMsIGFuZCBtb2R1bGVzIGZyb20gYSBwYXJ0aWN1bGFyIHNvdXJjZSwgc3VjaCBhcyAuZC50cyBmaWxlc1xuICogb3IgYSByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YVJlYWRlciB7XG4gIGdldERpcmVjdGl2ZU1ldGFkYXRhKG5vZGU6IFJlZmVyZW5jZTxDbGFzc0RlY2xhcmF0aW9uPik6IERpcmVjdGl2ZU1ldGF8bnVsbDtcbiAgZ2V0TmdNb2R1bGVNZXRhZGF0YShub2RlOiBSZWZlcmVuY2U8Q2xhc3NEZWNsYXJhdGlvbj4pOiBOZ01vZHVsZU1ldGF8bnVsbDtcbiAgZ2V0UGlwZU1ldGFkYXRhKG5vZGU6IFJlZmVyZW5jZTxDbGFzc0RlY2xhcmF0aW9uPik6IFBpcGVNZXRhfG51bGw7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIG5ldyBtZXRhZGF0YSBmb3IgZGlyZWN0aXZlcywgcGlwZXMsIGFuZCBtb2R1bGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhUmVnaXN0cnkge1xuICByZWdpc3RlckRpcmVjdGl2ZU1ldGFkYXRhKG1ldGE6IERpcmVjdGl2ZU1ldGEpOiB2b2lkO1xuICByZWdpc3Rlck5nTW9kdWxlTWV0YWRhdGEobWV0YTogTmdNb2R1bGVNZXRhKTogdm9pZDtcbiAgcmVnaXN0ZXJQaXBlTWV0YWRhdGEobWV0YTogUGlwZU1ldGEpOiB2b2lkO1xufVxuIl19
|