@angular/compiler-cli 10.1.4 → 10.2.1
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/analysis/module_with_providers_analyzer.d.ts +2 -2
- package/ngcc/src/analysis/module_with_providers_analyzer.js +1 -1
- package/ngcc/src/analysis/ngcc_references_registry.d.ts +3 -3
- package/ngcc/src/analysis/ngcc_references_registry.js +2 -2
- package/ngcc/src/analysis/private_declarations_analyzer.js +1 -1
- package/ngcc/src/dependencies/commonjs_dependency_host.js +1 -1
- package/ngcc/src/dependencies/dependency_host.d.ts +15 -0
- package/ngcc/src/dependencies/dependency_host.js +42 -9
- package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +4 -6
- package/ngcc/src/host/commonjs_host.d.ts +5 -1
- package/ngcc/src/host/commonjs_host.js +50 -20
- package/ngcc/src/host/commonjs_umd_utils.d.ts +59 -12
- package/ngcc/src/host/commonjs_umd_utils.js +57 -15
- package/ngcc/src/host/delegating_host.d.ts +3 -3
- package/ngcc/src/host/delegating_host.js +1 -1
- package/ngcc/src/host/esm2015_host.d.ts +82 -27
- package/ngcc/src/host/esm2015_host.js +129 -107
- package/ngcc/src/host/esm5_host.js +7 -7
- package/ngcc/src/host/umd_host.d.ts +21 -1
- package/ngcc/src/host/umd_host.js +210 -25
- package/ngcc/src/locking/async_locker.d.ts +0 -2
- package/ngcc/src/locking/async_locker.js +8 -51
- package/ngcc/src/migrations/missing_injectable_migration.js +1 -1
- package/ngcc/src/migrations/undecorated_parent_migration.js +1 -1
- package/ngcc/src/migrations/utils.d.ts +1 -1
- package/ngcc/src/migrations/utils.js +1 -1
- package/ngcc/src/packages/build_marker.d.ts +1 -1
- package/ngcc/src/packages/build_marker.js +1 -1
- package/ngcc/src/utils.d.ts +3 -3
- package/ngcc/src/utils.js +1 -1
- package/package.json +2 -2
- package/src/ngtsc/annotations/src/component.js +1 -1
- package/src/ngtsc/annotations/src/directive.js +9 -3
- package/src/ngtsc/annotations/src/metadata.d.ts +2 -3
- package/src/ngtsc/annotations/src/metadata.js +1 -1
- package/src/ngtsc/annotations/src/ng_module.js +4 -9
- package/src/ngtsc/annotations/src/references_registry.d.ts +3 -3
- package/src/ngtsc/annotations/src/references_registry.js +1 -1
- package/src/ngtsc/core/src/compiler.d.ts +2 -1
- package/src/ngtsc/core/src/compiler.js +1 -1
- package/src/ngtsc/entry_point/src/private_export_checker.js +1 -1
- package/src/ngtsc/entry_point/src/reference_graph.d.ts +2 -2
- package/src/ngtsc/entry_point/src/reference_graph.js +1 -1
- package/src/ngtsc/imports/src/emitter.d.ts +2 -2
- package/src/ngtsc/imports/src/emitter.js +12 -8
- package/src/ngtsc/indexer/src/api.d.ts +2 -3
- package/src/ngtsc/indexer/src/api.js +1 -1
- package/src/ngtsc/indexer/src/transform.d.ts +2 -2
- package/src/ngtsc/indexer/src/transform.js +1 -1
- package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +1 -0
- package/src/ngtsc/partial_evaluator/src/interpreter.js +15 -20
- package/src/ngtsc/perf/src/api.d.ts +3 -3
- package/src/ngtsc/perf/src/api.js +1 -1
- package/src/ngtsc/perf/src/noop.d.ts +0 -7
- package/src/ngtsc/perf/src/noop.js +1 -8
- package/src/ngtsc/perf/src/tracking.d.ts +3 -2
- package/src/ngtsc/perf/src/tracking.js +1 -1
- package/src/ngtsc/program.d.ts +2 -1
- package/src/ngtsc/program.js +1 -1
- package/src/ngtsc/reflection/src/host.d.ts +39 -22
- package/src/ngtsc/reflection/src/host.js +10 -2
- package/src/ngtsc/reflection/src/typescript.d.ts +3 -3
- package/src/ngtsc/reflection/src/typescript.js +4 -2
- package/src/ngtsc/reflection/src/util.js +7 -4
- package/src/ngtsc/scope/src/local.js +1 -1
- package/src/ngtsc/sourcemaps/src/source_file.d.ts +3 -2
- package/src/ngtsc/sourcemaps/src/source_file.js +8 -7
- package/src/ngtsc/sourcemaps/src/source_file_loader.js +4 -5
- package/src/ngtsc/transform/src/compilation.d.ts +3 -3
- package/src/ngtsc/transform/src/compilation.js +1 -1
- package/src/ngtsc/typecheck/diagnostics/src/id.d.ts +2 -2
- package/src/ngtsc/typecheck/diagnostics/src/id.js +1 -1
- package/src/ngtsc/typecheck/src/type_parameter_emitter.js +1 -1
- package/src/ngtsc/util/src/typescript.d.ts +4 -1
- package/src/ngtsc/util/src/typescript.js +7 -2
- package/src/version.js +1 -1
package/src/ngtsc/program.js
CHANGED
|
@@ -286,4 +286,4 @@
|
|
|
286
286
|
return { diagnostics: diagnostics, emitSkipped: emitSkipped, emittedFiles: emittedFiles };
|
|
287
287
|
}
|
|
288
288
|
});
|
|
289
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcHJvZ3JhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBR0gsK0JBQWlDO0lBR2pDLG1GQUF1RTtJQUV2RSw2REFBa0Q7SUFFbEQsMkVBQThEO0lBRTlELDZEQUFxRTtJQUNyRSwrREFBeUQ7SUFDekQsdUVBQWtEO0lBSWxEOzs7O09BSUc7SUFDSDtRQTRCRSxzQkFDSSxTQUFnQyxFQUFVLE9BQTBCLEVBQ3BFLFlBQThCLEVBQUUsVUFBeUI7WUFEZixZQUFPLEdBQVAsT0FBTyxDQUFtQjtZQUxoRSxpQkFBWSxHQUFpQix5QkFBa0IsQ0FBQztZQUNoRCxnQkFBVyxHQUFxQixJQUFJLENBQUM7WUFNM0MsNERBQTREO1lBQzVELElBQUksQ0FBQyxPQUFPLENBQUMsNkJBQTZCLEVBQUU7Z0JBQzFDLHFEQUFnQyxFQUFFLENBQUM7YUFDcEM7WUFFRCxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsa0JBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO2FBQ3RDO1lBQ0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUM7WUFFbkUsSUFBTSxZQUFZLEdBQUcsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLGNBQWMsQ0FBQztZQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLHFCQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksYUFBWixZQUFZLGNBQVosWUFBWSxHQUFJLElBQUksQ0FBQyxDQUFDO1lBRXhG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bnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7R2VuZXJhdGVkRmlsZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCAqIGFzIGFwaSBmcm9tICcuLi90cmFuc2Zvcm1lcnMvYXBpJztcbmltcG9ydCB7dmVyaWZ5U3VwcG9ydGVkVHlwZVNjcmlwdFZlcnNpb259IGZyb20gJy4uL3R5cGVzY3JpcHRfc3VwcG9ydCc7XG5cbmltcG9ydCB7TmdDb21waWxlciwgTmdDb21waWxlckhvc3R9IGZyb20gJy4vY29yZSc7XG5pbXBvcnQge05nQ29tcGlsZXJPcHRpb25zfSBmcm9tICcuL2NvcmUvYXBpJztcbmltcG9ydCB7VHJhY2tlZEluY3JlbWVudGFsQnVpbGRTdHJhdGVneX0gZnJvbSAnLi9pbmNyZW1lbnRhbCc7XG5pbXBvcnQge0luZGV4ZWRDb21wb25lbnR9IGZyb20gJy4vaW5kZXhlcic7XG5pbXBvcnQge05PT1BfUEVSRl9SRUNPUkRFUiwgUGVyZlJlY29yZGVyLCBQZXJmVHJhY2tlcn0gZnJvbSAnLi9wZXJmJztcbmltcG9ydCB7cmV0YWdBbGxUc0ZpbGVzLCB1bnRhZ0FsbFRzRmlsZXN9IGZyb20gJy4vc2hpbXMnO1xuaW1wb3J0IHtSZXVzZWRQcm9ncmFtU3RyYXRlZ3l9IGZyb20gJy4vdHlwZWNoZWNrJztcblxuXG5cbi8qKlxuICogRW50cnlwb2ludCB0byB0aGUgQW5ndWxhciBDb21waWxlciAoSXZ5Kykgd2hpY2ggc2l0cyBiZWhpbmQgdGhlIGBhcGkuUHJvZ3JhbWAgaW50ZXJmYWNlLCBhbGxvd2luZ1xuICogaXQgdG8gYmUgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgbGVnYWN5IFZpZXcgRW5naW5lIGNvbXBpbGVyIHRvIHRvb2xpbmcgc3VjaCBhcyB0aGVcbiAqIGNvbW1hbmQtbGluZSBtYWluKCkgZnVuY3Rpb24gb3IgdGhlIEFuZ3VsYXIgQ0xJLlxuICovXG5leHBvcnQgY2xhc3MgTmd0c2NQcm9ncmFtIGltcGxlbWVudHMgYXBpLlByb2dyYW0ge1xuICByZWFkb25seSBjb21waWxlcjogTmdDb21waWxlcjtcblxuICAvKipcbiAgICogVGhlIHByaW1hcnkgVHlwZVNjcmlwdCBwcm9ncmFtLCB3aGljaCBpcyB1c2VkIGZvciBhbmFseXNpcyBhbmQgZW1pdC5cbiAgICovXG4gIHByaXZhdGUgdHNQcm9ncmFtOiB0cy5Qcm9ncmFtO1xuXG4gIC8qKlxuICAgKiBUaGUgVHlwZVNjcmlwdCBwcm9ncmFtIHRvIHVzZSBmb3IgdGhlIG5leHQgaW5jcmVtZW50YWwgY29tcGlsYXRpb24uXG4gICAqXG4gICAqIE9uY2UgYSBUUyBwcm9ncmFtIGlzIHVzZWQgdG8gY3JlYXRlIGFub3RoZXIgKGFuIGluY3JlbWVudGFsIGNvbXBpbGF0aW9uIG9wZXJhdGlvbiksIGl0IGNhbiBub1xuICAgKiBsb25nZXIgYmUgdXNlZCB0byBkbyBzbyBhZ2Fpbi5cbiAgICpcbiAgICogU2luY2UgdGVtcGxhdGUgdHlwZS1jaGVja2luZyB1c2VzIHRoZSBwcmltYXJ5IHByb2dyYW0gdG8gY3JlYXRlIGEgdHlwZS1jaGVja2luZyBwcm9ncmFtLCBhZnRlclxuICAgKiB0aGlzIGhhcHBlbnMgdGhlIHByaW1hcnkgcHJvZ3JhbSBpcyBubyBsb25nZXIgc3VpdGFibGUgZm9yIHN0YXJ0aW5nIGEgc3Vic2VxdWVudCBjb21waWxhdGlvbixcbiAgICogYW5kIHRoZSB0ZW1wbGF0ZSB0eXBlLWNoZWNraW5nIHByb2dyYW0gc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC5cbiAgICpcbiAgICogVGh1cywgdGhlIHByb2dyYW0gd2hpY2ggc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBuZXh0IGluY3JlbWVudGFsIGNvbXBpbGF0aW9uIGlzIHRyYWNrZWQgaW5cbiAgICogYHJldXNlVHNQcm9ncmFtYCwgc2VwYXJhdGVseSBmcm9tIHRoZSBcInByaW1hcnlcIiBwcm9ncmFtIHdoaWNoIGlzIGFsd2F5cyB1c2VkIGZvciBlbWl0LlxuICAgKi9cbiAgcHJpdmF0ZSByZXVzZVRzUHJvZ3JhbTogdHMuUHJvZ3JhbTtcbiAgcHJpdmF0ZSBjbG9zdXJlQ29tcGlsZXJFbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIGhvc3Q6IE5nQ29tcGlsZXJIb3N0O1xuICBwcml2YXRlIHBlcmZSZWNvcmRlcjogUGVyZlJlY29yZGVyID0gTk9PUF9QRVJGX1JFQ09SREVSO1xuICBwcml2YXRlIHBlcmZUcmFja2VyOiBQZXJmVHJhY2tlcnxudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpbmNyZW1lbnRhbFN0cmF0ZWd5OiBUcmFja2VkSW5jcmVtZW50YWxCdWlsZFN0cmF0ZWd5O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcm9vdE5hbWVzOiBSZWFkb25seUFycmF5PHN0cmluZz4sIHByaXZhdGUgb3B0aW9uczogTmdDb21waWxlck9wdGlvbnMsXG4gICAgICBkZWxlZ2F0ZUhvc3Q6IGFwaS5Db21waWxlckhvc3QsIG9sZFByb2dyYW0/OiBOZ3RzY1Byb2dyYW0pIHtcbiAgICAvLyBGaXJzdCwgY2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBUUyB2ZXJzaW9uIGlzIHN1cHBvcnRlZC5cbiAgICBpZiAoIW9wdGlvbnMuZGlzYWJsZVR5cGVTY3JpcHRWZXJzaW9uQ2hlY2spIHtcbiAgICAgIHZlcmlmeVN1cHBvcnRlZFR5cGVTY3JpcHRWZXJzaW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudHJhY2VQZXJmb3JtYW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBlcmZUcmFja2VyID0gUGVyZlRyYWNrZXIuemVyb2VkVG9Ob3coKTtcbiAgICAgIHRoaXMucGVyZlJlY29yZGVyID0gdGhpcy5wZXJmVHJhY2tlcjtcbiAgICB9XG4gICAgdGhpcy5jbG9zdXJlQ29tcGlsZXJFbmFibGVkID0gISFvcHRpb25zLmFubm90YXRlRm9yQ2xvc3VyZUNvbXBpbGVyO1xuXG4gICAgY29uc3QgcmV1c2VQcm9ncmFtID0gb2xkUHJvZ3JhbT8ucmV1c2VUc1Byb2dyYW07XG4gICAgdGhpcy5ob3N0ID0gTmdDb21waWxlckhvc3Qud3JhcChkZWxlZ2F0ZUhvc3QsIHJvb3ROYW1lcywgb3B0aW9ucywgcmV1c2VQcm9ncmFtID8/IG51bGwpO1xuXG4gICAgaWYgKHJldXNlUHJvZ3JhbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBQcmlvciB0byByZXVzaW5nIHRoZSBvbGQgcHJvZ3JhbSwgcmVzdG9yZSBzaGltIHRhZ2dpbmcgZm9yIGFsbCBpdHMgYHRzLlNvdXJjZUZpbGVgcy5cbiAgICAgIC8vIFR5cGVTY3JpcHQgY2hlY2tzIHRoZSBgcmVmZXJlbmNlZEZpbGVzYCBvZiBgdHMuU291cmNlRmlsZWBzIGZvciBjaGFuZ2VzIHdoZW4gZXZhbHVhdGluZ1xuICAgICAgLy8gaW5jcmVtZW50YWwgcmV1c2Ugb2YgZGF0YSBmcm9tIHRoZSBvbGQgcHJvZ3JhbSwgc28gaXQncyBpbXBvcnRhbnQgdGhhdCB0aGVzZSBtYXRjaCBpbiBvcmRlclxuICAgICAgLy8gdG8gZ2V0IHRoZSBtb3N0IGJlbmVmaXQgb3V0IG9mIHJldXNlLlxuICAgICAgcmV0YWdBbGxUc0ZpbGVzKHJldXNlUHJvZ3JhbSk7XG4gICAgfVxuXG4gICAgdGhpcy50c1Byb2dyYW0gPSB0cy5jcmVhdGVQcm9ncmFtKHRoaXMuaG9zdC5pbnB1dEZpbGVzLCBvcHRpb25zLCB0aGlzLmhvc3QsIHJldXNlUHJvZ3JhbSk7XG4gICAgdGhpcy5yZXVzZVRzUHJvZ3JhbSA9IHRoaXMudHNQcm9ncmFtO1xuXG4gICAgdGhpcy5ob3N0LnBvc3RQcm9ncmFtQ3JlYXRpb25DbGVhbnVwKCk7XG5cbiAgICAvLyBTaGltIHRhZ2dpbmcgaGFzIHNlcnZlZCBpdHMgcHVycG9zZSwgYW5kIHRhZ3MgY2FuIG5vdyBiZSByZW1vdmVkIGZyb20gYWxsIGB0cy5Tb3VyY2VGaWxlYHMgaW5cbiAgICAvLyB0aGUgcHJvZ3JhbS5cbiAgICB1bnRhZ0FsbFRzRmlsZXModGhpcy50c1Byb2dyYW0pO1xuXG4gICAgY29uc3QgcmV1c2VkUHJvZ3JhbVN0cmF0ZWd5ID0gbmV3IFJldXNlZFByb2dyYW1TdHJhdGVneShcbiAgICAgICAgdGhpcy50c1Byb2dyYW0sIHRoaXMuaG9zdCwgdGhpcy5vcHRpb25zLCB0aGlzLmhvc3Quc2hpbUV4dGVuc2lvblByZWZpeGVzKTtcblxuICAgIHRoaXMuaW5jcmVtZW50YWxTdHJhdGVneSA9IG9sZFByb2dyYW0gIT09IHVuZGVmaW5lZCA/XG4gICAgICAgIG9sZFByb2dyYW0uaW5jcmVtZW50YWxTdHJhdGVneS50b05leHRCdWlsZFN0cmF0ZWd5KCkgOlxuICAgICAgICBuZXcgVHJhY2tlZEluY3JlbWVudGFsQnVpbGRTdHJhdGVneSgpO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBOZ0NvbXBpbGVyIHdoaWNoIHdpbGwgZHJpdmUgdGhlIHJlc3Qgb2YgdGhlIGNvbXBpbGF0aW9uLlxuICAgIHRoaXMuY29tcGlsZXIgPSBuZXcgTmdDb21waWxlcihcbiAgICAgICAgdGhpcy5ob3N0LCBvcHRpb25zLCB0aGlzLnRzUHJvZ3JhbSwgcmV1c2VkUHJvZ3JhbVN0cmF0ZWd5LCB0aGlzLmluY3JlbWVudGFsU3RyYXRlZ3ksXG4gICAgICAgIHJldXNlUHJvZ3JhbSwgdGhpcy5wZXJmUmVjb3JkZXIpO1xuICB9XG5cbiAgZ2V0VHNQcm9ncmFtKCk6IHRzLlByb2dyYW0ge1xuICAgIHJldHVybiB0aGlzLnRzUHJvZ3JhbTtcbiAgfVxuXG4gIGdldFJldXNlVHNQcm9ncmFtKCk6IHRzLlByb2dyYW0ge1xuICAgIHJldHVybiB0aGlzLnJldXNlVHNQcm9ncmFtO1xuICB9XG5cbiAgZ2V0VHNPcHRpb25EaWFnbm9zdGljcyhjYW5jZWxsYXRpb25Ub2tlbj86IHRzLkNhbmNlbGxhdGlvblRva2VufFxuICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCk6IHJlYWRvbmx5IHRzLkRpYWdub3N0aWNbXSB7XG4gICAgcmV0dXJuIHRoaXMudHNQcm9ncmFtLmdldE9wdGlvbnNEaWFnbm9zdGljcyhjYW5jZWxsYXRpb25Ub2tlbik7XG4gIH1cblxuICBnZXRUc1N5bnRhY3RpY0RpYWdub3N0aWNzKFxuICAgICAgc291cmNlRmlsZT86IHRzLlNvdXJjZUZpbGV8dW5kZWZpbmVkLFxuICAgICAgY2FuY2VsbGF0aW9uVG9rZW4/OiB0cy5DYW5jZWxsYXRpb25Ub2tlbnx1bmRlZmluZWQpOiByZWFkb25seSB0cy5EaWFnbm9zdGljW10ge1xuICAgIGNvbnN0IGlnbm9yZWRGaWxlcyA9IHRoaXMuY29tcGlsZXIuaWdub3JlRm9yRGlhZ25vc3RpY3M7XG4gICAgaWYgKHNvdXJjZUZpbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGlnbm9yZWRGaWxlcy5oYXMoc291cmNlRmlsZSkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy50c1Byb2dyYW0uZ2V0U3ludGFjdGljRGlhZ25vc3RpY3Moc291cmNlRmlsZSwgY2FuY2VsbGF0aW9uVG9rZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHNmIG9mIHRoaXMudHNQcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICAgICAgaWYgKCFpZ25vcmVkRmlsZXMuaGFzKHNmKSkge1xuICAgICAgICAgIGRpYWdub3N0aWNzLnB1c2goLi4udGhpcy50c1Byb2dyYW0uZ2V0U3ludGFjdGljRGlhZ25vc3RpY3Moc2YsIGNhbmNlbGxhdGlvblRva2VuKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkaWFnbm9zdGljcztcbiAgICB9XG4gIH1cblxuICBnZXRUc1NlbWFudGljRGlhZ25vc3RpY3MoXG4gICAgICBzb3VyY2VGaWxlPzogdHMuU291cmNlRmlsZXx1bmRlZmluZWQsXG4gICAgICBjYW5jZWxsYXRpb25Ub2tlbj86IHRzLkNhbmNlbGxhdGlvblRva2VufHVuZGVmaW5lZCk6IHJlYWRvbmx5IHRzLkRpYWdub3N0aWNbXSB7XG4gICAgY29uc3QgaWdub3JlZEZpbGVzID0gdGhpcy5jb21waWxlci5pZ25vcmVGb3JEaWFnbm9zdGljcztcbiAgICBpZiAoc291cmNlRmlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoaWdub3JlZEZpbGVzLmhhcyhzb3VyY2VGaWxlKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnRzUHJvZ3JhbS5nZXRTZW1hbnRpY0RpYWdub3N0aWNzKHNvdXJjZUZpbGUsIGNhbmNlbGxhdGlvblRva2VuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBzZiBvZiB0aGlzLnRzUHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgICAgIGlmICghaWdub3JlZEZpbGVzLmhhcyhzZikpIHtcbiAgICAgICAgICBkaWFnbm9zdGljcy5wdXNoKC4uLnRoaXMudHNQcm9ncmFtLmdldFNlbWFudGljRGlhZ25vc3RpY3Moc2YsIGNhbmNlbGxhdGlvblRva2VuKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkaWFnbm9zdGljcztcbiAgICB9XG4gIH1cblxuICBnZXROZ09wdGlvbkRpYWdub3N0aWNzKGNhbmNlbGxhdGlvblRva2VuPzogdHMuQ2FuY2VsbGF0aW9uVG9rZW58XG4gICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkKTogcmVhZG9ubHkodHMuRGlhZ25vc3RpY3xhcGkuRGlhZ25vc3RpYylbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGlsZXIuZ2V0T3B0aW9uRGlhZ25vc3RpY3MoKTtcbiAgfVxuXG4gIGdldE5nU3RydWN0dXJhbERpYWdub3N0aWNzKGNhbmNlbGxhdGlvblRva2VuPzogdHMuQ2FuY2VsbGF0aW9uVG9rZW58XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCk6IHJlYWRvbmx5IGFwaS5EaWFnbm9zdGljW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldE5nU2VtYW50aWNEaWFnbm9zdGljcyhcbiAgICAgIGZpbGVOYW1lPzogc3RyaW5nfHVuZGVmaW5lZCwgY2FuY2VsbGF0aW9uVG9rZW4/OiB0cy5DYW5jZWxsYXRpb25Ub2tlbnx1bmRlZmluZWQpOlxuICAgICAgcmVhZG9ubHkodHMuRGlhZ25vc3RpY3xhcGkuRGlhZ25vc3RpYylbXSB7XG4gICAgbGV0IHNmOiB0cy5Tb3VyY2VGaWxlfHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2YgPSB0aGlzLnRzUHJvZ3JhbS5nZXRTb3VyY2VGaWxlKGZpbGVOYW1lKTtcbiAgICAgIGlmIChzZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSBubyBkaWFnbm9zdGljcyBmb3IgZmlsZXMgd2hpY2ggZG9uJ3QgZXhpc3QgaW4gdGhlIHByb2dyYW0gLSBtYXliZSB0aGUgY2FsbGVyXG4gICAgICAgIC8vIGhhcyBzdGFsZSBkYXRhP1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGlhZ25vc3RpY3MgPSB0aGlzLmNvbXBpbGVyLmdldERpYWdub3N0aWNzKHNmKTtcbiAgICB0aGlzLnJldXNlVHNQcm9ncmFtID0gdGhpcy5jb21waWxlci5nZXROZXh0UHJvZ3JhbSgpO1xuICAgIHJldHVybiBkaWFnbm9zdGljcztcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgdGhhdCB0aGUgYE5nQ29tcGlsZXJgIGhhcyBwcm9wZXJseSBhbmFseXplZCB0aGUgcHJvZ3JhbSwgYW5kIGFsbG93IGZvciB0aGUgYXN5bmNocm9ub3VzXG4gICAqIGxvYWRpbmcgb2YgYW55IHJlc291cmNlcyBkdXJpbmcgdGhlIHByb2Nlc3MuXG4gICAqXG4gICAqIFRoaXMgaXMgdXNlZCBieSB0aGUgQW5ndWxhciBDTEkgdG8gYWxsb3cgZm9yIHNwYXduaW5nIChhc3luYykgY2hpbGQgY29tcGlsYXRpb25zIGZvciB0aGluZ3NcbiAgICogbGlrZSBTQVNTIGZpbGVzIHVzZWQgaW4gYHN0eWxlVXJsc2AuXG4gICAqL1xuICBsb2FkTmdTdHJ1Y3R1cmVBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb21waWxlci5hbmFseXplQXN5bmMoKTtcbiAgfVxuXG4gIGxpc3RMYXp5Um91dGVzKGVudHJ5Um91dGU/OiBzdHJpbmd8dW5kZWZpbmVkKTogYXBpLkxhenlSb3V0ZVtdIHtcbiAgICByZXR1cm4gdGhpcy5jb21waWxlci5saXN0TGF6eVJvdXRlcyhlbnRyeVJvdXRlKTtcbiAgfVxuXG4gIGVtaXQob3B0cz86IHtcbiAgICBlbWl0RmxhZ3M/OiBhcGkuRW1pdEZsYWdzfHVuZGVmaW5lZDtcbiAgICBjYW5jZWxsYXRpb25Ub2tlbj86IHRzLkNhbmNlbGxhdGlvblRva2VuIHwgdW5kZWZpbmVkO1xuICAgIGN1c3RvbVRyYW5zZm9ybWVycz86IGFwaS5DdXN0b21UcmFuc2Zvcm1lcnMgfCB1bmRlZmluZWQ7XG4gICAgZW1pdENhbGxiYWNrPzogYXBpLlRzRW1pdENhbGxiYWNrIHwgdW5kZWZpbmVkO1xuICAgIG1lcmdlRW1pdFJlc3VsdHNDYWxsYmFjaz86IGFwaS5Uc01lcmdlRW1pdFJlc3VsdHNDYWxsYmFjayB8IHVuZGVmaW5lZDtcbiAgfXx1bmRlZmluZWQpOiB0cy5FbWl0UmVzdWx0IHtcbiAgICBjb25zdCB7dHJhbnNmb3JtZXJzfSA9IHRoaXMuY29tcGlsZXIucHJlcGFyZUVtaXQoKTtcbiAgICBjb25zdCBpZ25vcmVGaWxlcyA9IHRoaXMuY29tcGlsZXIuaWdub3JlRm9yRW1pdDtcbiAgICBjb25zdCBlbWl0Q2FsbGJhY2sgPSBvcHRzICYmIG9wdHMuZW1pdENhbGxiYWNrIHx8IGRlZmF1bHRFbWl0Q2FsbGJhY2s7XG5cbiAgICBjb25zdCB3cml0ZUZpbGU6IHRzLldyaXRlRmlsZUNhbGxiYWNrID1cbiAgICAgICAgKGZpbGVOYW1lOiBzdHJpbmcsIGRhdGE6IHN0cmluZywgd3JpdGVCeXRlT3JkZXJNYXJrOiBib29sZWFuLFxuICAgICAgICAgb25FcnJvcjogKChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQpfHVuZGVmaW5lZCxcbiAgICAgICAgIHNvdXJjZUZpbGVzOiBSZWFkb25seUFycmF5PHRzLlNvdXJjZUZpbGU+fHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICAgIGlmIChzb3VyY2VGaWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBSZWNvcmQgc3VjY2Vzc2Z1bCB3cml0ZXMgZm9yIGFueSBgdHMuU291cmNlRmlsZWAgKHRoYXQncyBub3QgYSBkZWNsYXJhdGlvbiBmaWxlKVxuICAgICAgICAgICAgLy8gdGhhdCdzIGFuIGlucHV0IHRvIHRoaXMgd3JpdGUuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHdyaXR0ZW5TZiBvZiBzb3VyY2VGaWxlcykge1xuICAgICAgICAgICAgICBpZiAod3JpdHRlblNmLmlzRGVjbGFyYXRpb25GaWxlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLmNvbXBpbGVyLmluY3JlbWVudGFsRHJpdmVyLnJlY29yZFN1Y2Nlc3NmdWxFbWl0KHdyaXR0ZW5TZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaG9zdC53cml0ZUZpbGUoZmlsZU5hbWUsIGRhdGEsIHdyaXRlQnl0ZU9yZGVyTWFyaywgb25FcnJvciwgc291cmNlRmlsZXMpO1xuICAgICAgICB9O1xuXG4gICAgY29uc3QgY3VzdG9tVHJhbnNmb3JtcyA9IG9wdHMgJiYgb3B0cy5jdXN0b21UcmFuc2Zvcm1lcnM7XG4gICAgY29uc3QgYmVmb3JlVHJhbnNmb3JtcyA9IHRyYW5zZm9ybWVycy5iZWZvcmUgfHwgW107XG4gICAgY29uc3QgYWZ0ZXJEZWNsYXJhdGlvbnNUcmFuc2Zvcm1zID0gdHJhbnNmb3JtZXJzLmFmdGVyRGVjbGFyYXRpb25zO1xuXG4gICAgaWYgKGN1c3RvbVRyYW5zZm9ybXMgIT09IHVuZGVmaW5lZCAmJiBjdXN0b21UcmFuc2Zvcm1zLmJlZm9yZVRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJlZm9yZVRyYW5zZm9ybXMucHVzaCguLi5jdXN0b21UcmFuc2Zvcm1zLmJlZm9yZVRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbWl0U3BhbiA9IHRoaXMucGVyZlJlY29yZGVyLnN0YXJ0KCdlbWl0Jyk7XG4gICAgY29uc3QgZW1pdFJlc3VsdHM6IHRzLkVtaXRSZXN1bHRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCB0YXJnZXRTb3VyY2VGaWxlIG9mIHRoaXMudHNQcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICAgIGlmICh0YXJnZXRTb3VyY2VGaWxlLmlzRGVjbGFyYXRpb25GaWxlIHx8IGlnbm9yZUZpbGVzLmhhcyh0YXJnZXRTb3VyY2VGaWxlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29tcGlsZXIuaW5jcmVtZW50YWxEcml2ZXIuc2FmZVRvU2tpcEVtaXQodGFyZ2V0U291cmNlRmlsZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVFbWl0U3BhbiA9IHRoaXMucGVyZlJlY29yZGVyLnN0YXJ0KCdlbWl0RmlsZScsIHRhcmdldFNvdXJjZUZpbGUpO1xuICAgICAgZW1pdFJlc3VsdHMucHVzaChlbWl0Q2FsbGJhY2soe1xuICAgICAgICB0YXJnZXRTb3VyY2VGaWxlLFxuICAgICAgICBwcm9ncmFtOiB0aGlzLnRzUHJvZ3JhbSxcbiAgICAgICAgaG9zdDogdGhpcy5ob3N0LFxuICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICAgIGVtaXRPbmx5RHRzRmlsZXM6IGZhbHNlLFxuICAgICAgICB3cml0ZUZpbGUsXG4gICAgICAgIGN1c3RvbVRyYW5zZm9ybWVyczoge1xuICAgICAgICAgIGJlZm9yZTogYmVmb3JlVHJhbnNmb3JtcyxcbiAgICAgICAgICBhZnRlcjogY3VzdG9tVHJhbnNmb3JtcyAmJiBjdXN0b21UcmFuc2Zvcm1zLmFmdGVyVHMsXG4gICAgICAgICAgYWZ0ZXJEZWNsYXJhdGlvbnM6IGFmdGVyRGVjbGFyYXRpb25zVHJhbnNmb3JtcyxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KSk7XG4gICAgICB0aGlzLnBlcmZSZWNvcmRlci5zdG9wKGZpbGVFbWl0U3Bhbik7XG4gICAgfVxuXG4gICAgdGhpcy5wZXJmUmVjb3JkZXIuc3RvcChlbWl0U3Bhbik7XG5cbiAgICBpZiAodGhpcy5wZXJmVHJhY2tlciAhPT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMudHJhY2VQZXJmb3JtYW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBlcmZUcmFja2VyLnNlcmlhbGl6ZVRvRmlsZSh0aGlzLm9wdGlvbnMudHJhY2VQZXJmb3JtYW5jZSwgdGhpcy5ob3N0KTtcbiAgICB9XG5cbiAgICAvLyBSdW4gdGhlIGVtaXQsIGluY2x1ZGluZyBhIGN1c3RvbSB0cmFuc2Zvcm1lciB0aGF0IHdpbGwgZG93bmxldmVsIHRoZSBJdnkgZGVjb3JhdG9ycyBpbiBjb2RlLlxuICAgIHJldHVybiAoKG9wdHMgJiYgb3B0cy5tZXJnZUVtaXRSZXN1bHRzQ2FsbGJhY2spIHx8IG1lcmdlRW1pdFJlc3VsdHMpKGVtaXRSZXN1bHRzKTtcbiAgfVxuXG4gIGdldEluZGV4ZWRDb21wb25lbnRzKCk6IE1hcDx0cy5EZWNsYXJhdGlvbiwgSW5kZXhlZENvbXBvbmVudD4ge1xuICAgIHJldHVybiB0aGlzLmNvbXBpbGVyLmdldEluZGV4ZWRDb21wb25lbnRzKCk7XG4gIH1cblxuICBnZXRMaWJyYXJ5U3VtbWFyaWVzKCk6IE1hcDxzdHJpbmcsIGFwaS5MaWJyYXJ5U3VtbWFyeT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGdldEVtaXR0ZWRHZW5lcmF0ZWRGaWxlcygpOiBNYXA8c3RyaW5nLCBHZW5lcmF0ZWRGaWxlPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgZ2V0RW1pdHRlZFNvdXJjZUZpbGVzKCk6IE1hcDxzdHJpbmcsIHRzLlNvdXJjZUZpbGU+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbn1cblxuY29uc3QgZGVmYXVsdEVtaXRDYWxsYmFjazogYXBpLlRzRW1pdENhbGxiYWNrID0gKHtcbiAgcHJvZ3JhbSxcbiAgdGFyZ2V0U291cmNlRmlsZSxcbiAgd3JpdGVGaWxlLFxuICBjYW5jZWxsYXRpb25Ub2tlbixcbiAgZW1pdE9ubHlEdHNGaWxlcyxcbiAgY3VzdG9tVHJhbnNmb3JtZXJzXG59KSA9PlxuICAgIHByb2dyYW0uZW1pdChcbiAgICAgICAgdGFyZ2V0U291cmNlRmlsZSwgd3JpdGVGaWxlLCBjYW5jZWxsYXRpb25Ub2tlbiwgZW1pdE9ubHlEdHNGaWxlcywgY3VzdG9tVHJhbnNmb3JtZXJzKTtcblxuZnVuY3Rpb24gbWVyZ2VFbWl0UmVzdWx0cyhlbWl0UmVzdWx0czogdHMuRW1pdFJlc3VsdFtdKTogdHMuRW1pdFJlc3VsdCB7XG4gIGNvbnN0IGRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10gPSBbXTtcbiAgbGV0IGVtaXRTa2lwcGVkID0gZmFsc2U7XG4gIGNvbnN0IGVtaXR0ZWRGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBlciBvZiBlbWl0UmVzdWx0cykge1xuICAgIGRpYWdub3N0aWNzLnB1c2goLi4uZXIuZGlhZ25vc3RpY3MpO1xuICAgIGVtaXRTa2lwcGVkID0gZW1pdFNraXBwZWQgfHwgZXIuZW1pdFNraXBwZWQ7XG4gICAgZW1pdHRlZEZpbGVzLnB1c2goLi4uKGVyLmVtaXR0ZWRGaWxlcyB8fCBbXSkpO1xuICB9XG5cbiAgcmV0dXJuIHtkaWFnbm9zdGljcywgZW1pdFNraXBwZWQsIGVtaXR0ZWRGaWxlc307XG59XG4iXX0=
|
|
289
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcHJvZ3JhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBR0gsK0JBQWlDO0lBR2pDLG1GQUF1RTtJQUV2RSw2REFBa0Q7SUFFbEQsMkVBQThEO0lBRTlELDZEQUFxRTtJQUVyRSwrREFBeUQ7SUFDekQsdUVBQWtEO0lBSWxEOzs7O09BSUc7SUFDSDtRQTRCRSxzQkFDSSxTQUFnQyxFQUFVLE9BQTBCLEVBQ3BFLFlBQThCLEVBQUUsVUFBeUI7WUFEZixZQUFPLEdBQVAsT0FBTyxDQUFtQjtZQUxoRSxpQkFBWSxHQUFpQix5QkFBa0IsQ0FBQztZQUNoRCxnQkFBVyxHQUFxQixJQUFJLENBQUM7WUFNM0MsNERBQTREO1lBQzVELElBQUksQ0FBQyxPQUFPLENBQUMsNkJBQTZCLEVBQUU7Z0JBQzFDLHFEQUFnQyxFQUFFLENBQUM7YUFDcEM7WUFFRCxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsa0JBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO2FBQ3RDO1lBQ0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUM7WUFFbkUsSUFBTSxZQUFZLEdBQUcsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLGNBQWMsQ0FBQztZQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLHFCQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksYUFBWixZQUFZLGNBQVosWUFBWSxHQUFJLElBQUksQ0FBQyxDQUFDO1lBRXhG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bnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7R2VuZXJhdGVkRmlsZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCAqIGFzIGFwaSBmcm9tICcuLi90cmFuc2Zvcm1lcnMvYXBpJztcbmltcG9ydCB7dmVyaWZ5U3VwcG9ydGVkVHlwZVNjcmlwdFZlcnNpb259IGZyb20gJy4uL3R5cGVzY3JpcHRfc3VwcG9ydCc7XG5cbmltcG9ydCB7TmdDb21waWxlciwgTmdDb21waWxlckhvc3R9IGZyb20gJy4vY29yZSc7XG5pbXBvcnQge05nQ29tcGlsZXJPcHRpb25zfSBmcm9tICcuL2NvcmUvYXBpJztcbmltcG9ydCB7VHJhY2tlZEluY3JlbWVudGFsQnVpbGRTdHJhdGVneX0gZnJvbSAnLi9pbmNyZW1lbnRhbCc7XG5pbXBvcnQge0luZGV4ZWRDb21wb25lbnR9IGZyb20gJy4vaW5kZXhlcic7XG5pbXBvcnQge05PT1BfUEVSRl9SRUNPUkRFUiwgUGVyZlJlY29yZGVyLCBQZXJmVHJhY2tlcn0gZnJvbSAnLi9wZXJmJztcbmltcG9ydCB7RGVjbGFyYXRpb25Ob2RlfSBmcm9tICcuL3JlZmxlY3Rpb24nO1xuaW1wb3J0IHtyZXRhZ0FsbFRzRmlsZXMsIHVudGFnQWxsVHNGaWxlc30gZnJvbSAnLi9zaGltcyc7XG5pbXBvcnQge1JldXNlZFByb2dyYW1TdHJhdGVneX0gZnJvbSAnLi90eXBlY2hlY2snO1xuXG5cblxuLyoqXG4gKiBFbnRyeXBvaW50IHRvIHRoZSBBbmd1bGFyIENvbXBpbGVyIChJdnkrKSB3aGljaCBzaXRzIGJlaGluZCB0aGUgYGFwaS5Qcm9ncmFtYCBpbnRlcmZhY2UsIGFsbG93aW5nXG4gKiBpdCB0byBiZSBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBsZWdhY3kgVmlldyBFbmdpbmUgY29tcGlsZXIgdG8gdG9vbGluZyBzdWNoIGFzIHRoZVxuICogY29tbWFuZC1saW5lIG1haW4oKSBmdW5jdGlvbiBvciB0aGUgQW5ndWxhciBDTEkuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZ3RzY1Byb2dyYW0gaW1wbGVtZW50cyBhcGkuUHJvZ3JhbSB7XG4gIHJlYWRvbmx5IGNvbXBpbGVyOiBOZ0NvbXBpbGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSBUeXBlU2NyaXB0IHByb2dyYW0sIHdoaWNoIGlzIHVzZWQgZm9yIGFuYWx5c2lzIGFuZCBlbWl0LlxuICAgKi9cbiAgcHJpdmF0ZSB0c1Byb2dyYW06IHRzLlByb2dyYW07XG5cbiAgLyoqXG4gICAqIFRoZSBUeXBlU2NyaXB0IHByb2dyYW0gdG8gdXNlIGZvciB0aGUgbmV4dCBpbmNyZW1lbnRhbCBjb21waWxhdGlvbi5cbiAgICpcbiAgICogT25jZSBhIFRTIHByb2dyYW0gaXMgdXNlZCB0byBjcmVhdGUgYW5vdGhlciAoYW4gaW5jcmVtZW50YWwgY29tcGlsYXRpb24gb3BlcmF0aW9uKSwgaXQgY2FuIG5vXG4gICAqIGxvbmdlciBiZSB1c2VkIHRvIGRvIHNvIGFnYWluLlxuICAgKlxuICAgKiBTaW5jZSB0ZW1wbGF0ZSB0eXBlLWNoZWNraW5nIHVzZXMgdGhlIHByaW1hcnkgcHJvZ3JhbSB0byBjcmVhdGUgYSB0eXBlLWNoZWNraW5nIHByb2dyYW0sIGFmdGVyXG4gICAqIHRoaXMgaGFwcGVucyB0aGUgcHJpbWFyeSBwcm9ncmFtIGlzIG5vIGxvbmdlciBzdWl0YWJsZSBmb3Igc3RhcnRpbmcgYSBzdWJzZXF1ZW50IGNvbXBpbGF0aW9uLFxuICAgKiBhbmQgdGhlIHRlbXBsYXRlIHR5cGUtY2hlY2tpbmcgcHJvZ3JhbSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgKlxuICAgKiBUaHVzLCB0aGUgcHJvZ3JhbSB3aGljaCBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIG5leHQgaW5jcmVtZW50YWwgY29tcGlsYXRpb24gaXMgdHJhY2tlZCBpblxuICAgKiBgcmV1c2VUc1Byb2dyYW1gLCBzZXBhcmF0ZWx5IGZyb20gdGhlIFwicHJpbWFyeVwiIHByb2dyYW0gd2hpY2ggaXMgYWx3YXlzIHVzZWQgZm9yIGVtaXQuXG4gICAqL1xuICBwcml2YXRlIHJldXNlVHNQcm9ncmFtOiB0cy5Qcm9ncmFtO1xuICBwcml2YXRlIGNsb3N1cmVDb21waWxlckVuYWJsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgaG9zdDogTmdDb21waWxlckhvc3Q7XG4gIHByaXZhdGUgcGVyZlJlY29yZGVyOiBQZXJmUmVjb3JkZXIgPSBOT09QX1BFUkZfUkVDT1JERVI7XG4gIHByaXZhdGUgcGVyZlRyYWNrZXI6IFBlcmZUcmFja2VyfG51bGwgPSBudWxsO1xuICBwcml2YXRlIGluY3JlbWVudGFsU3RyYXRlZ3k6IFRyYWNrZWRJbmNyZW1lbnRhbEJ1aWxkU3RyYXRlZ3k7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICByb290TmFtZXM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiwgcHJpdmF0ZSBvcHRpb25zOiBOZ0NvbXBpbGVyT3B0aW9ucyxcbiAgICAgIGRlbGVnYXRlSG9zdDogYXBpLkNvbXBpbGVySG9zdCwgb2xkUHJvZ3JhbT86IE5ndHNjUHJvZ3JhbSkge1xuICAgIC8vIEZpcnN0LCBjaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IFRTIHZlcnNpb24gaXMgc3VwcG9ydGVkLlxuICAgIGlmICghb3B0aW9ucy5kaXNhYmxlVHlwZVNjcmlwdFZlcnNpb25DaGVjaykge1xuICAgICAgdmVyaWZ5U3VwcG9ydGVkVHlwZVNjcmlwdFZlcnNpb24oKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy50cmFjZVBlcmZvcm1hbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGVyZlRyYWNrZXIgPSBQZXJmVHJhY2tlci56ZXJvZWRUb05vdygpO1xuICAgICAgdGhpcy5wZXJmUmVjb3JkZXIgPSB0aGlzLnBlcmZUcmFja2VyO1xuICAgIH1cbiAgICB0aGlzLmNsb3N1cmVDb21waWxlckVuYWJsZWQgPSAhIW9wdGlvbnMuYW5ub3RhdGVGb3JDbG9zdXJlQ29tcGlsZXI7XG5cbiAgICBjb25zdCByZXVzZVByb2dyYW0gPSBvbGRQcm9ncmFtPy5yZXVzZVRzUHJvZ3JhbTtcbiAgICB0aGlzLmhvc3QgPSBOZ0NvbXBpbGVySG9zdC53cmFwKGRlbGVnYXRlSG9zdCwgcm9vdE5hbWVzLCBvcHRpb25zLCByZXVzZVByb2dyYW0gPz8gbnVsbCk7XG5cbiAgICBpZiAocmV1c2VQcm9ncmFtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFByaW9yIHRvIHJldXNpbmcgdGhlIG9sZCBwcm9ncmFtLCByZXN0b3JlIHNoaW0gdGFnZ2luZyBmb3IgYWxsIGl0cyBgdHMuU291cmNlRmlsZWBzLlxuICAgICAgLy8gVHlwZVNjcmlwdCBjaGVja3MgdGhlIGByZWZlcmVuY2VkRmlsZXNgIG9mIGB0cy5Tb3VyY2VGaWxlYHMgZm9yIGNoYW5nZXMgd2hlbiBldmFsdWF0aW5nXG4gICAgICAvLyBpbmNyZW1lbnRhbCByZXVzZSBvZiBkYXRhIGZyb20gdGhlIG9sZCBwcm9ncmFtLCBzbyBpdCdzIGltcG9ydGFudCB0aGF0IHRoZXNlIG1hdGNoIGluIG9yZGVyXG4gICAgICAvLyB0byBnZXQgdGhlIG1vc3QgYmVuZWZpdCBvdXQgb2YgcmV1c2UuXG4gICAgICByZXRhZ0FsbFRzRmlsZXMocmV1c2VQcm9ncmFtKTtcbiAgICB9XG5cbiAgICB0aGlzLnRzUHJvZ3JhbSA9IHRzLmNyZWF0ZVByb2dyYW0odGhpcy5ob3N0LmlucHV0RmlsZXMsIG9wdGlvbnMsIHRoaXMuaG9zdCwgcmV1c2VQcm9ncmFtKTtcbiAgICB0aGlzLnJldXNlVHNQcm9ncmFtID0gdGhpcy50c1Byb2dyYW07XG5cbiAgICB0aGlzLmhvc3QucG9zdFByb2dyYW1DcmVhdGlvbkNsZWFudXAoKTtcblxuICAgIC8vIFNoaW0gdGFnZ2luZyBoYXMgc2VydmVkIGl0cyBwdXJwb3NlLCBhbmQgdGFncyBjYW4gbm93IGJlIHJlbW92ZWQgZnJvbSBhbGwgYHRzLlNvdXJjZUZpbGVgcyBpblxuICAgIC8vIHRoZSBwcm9ncmFtLlxuICAgIHVudGFnQWxsVHNGaWxlcyh0aGlzLnRzUHJvZ3JhbSk7XG5cbiAgICBjb25zdCByZXVzZWRQcm9ncmFtU3RyYXRlZ3kgPSBuZXcgUmV1c2VkUHJvZ3JhbVN0cmF0ZWd5KFxuICAgICAgICB0aGlzLnRzUHJvZ3JhbSwgdGhpcy5ob3N0LCB0aGlzLm9wdGlvbnMsIHRoaXMuaG9zdC5zaGltRXh0ZW5zaW9uUHJlZml4ZXMpO1xuXG4gICAgdGhpcy5pbmNyZW1lbnRhbFN0cmF0ZWd5ID0gb2xkUHJvZ3JhbSAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgb2xkUHJvZ3JhbS5pbmNyZW1lbnRhbFN0cmF0ZWd5LnRvTmV4dEJ1aWxkU3RyYXRlZ3koKSA6XG4gICAgICAgIG5ldyBUcmFja2VkSW5jcmVtZW50YWxCdWlsZFN0cmF0ZWd5KCk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIE5nQ29tcGlsZXIgd2hpY2ggd2lsbCBkcml2ZSB0aGUgcmVzdCBvZiB0aGUgY29tcGlsYXRpb24uXG4gICAgdGhpcy5jb21waWxlciA9IG5ldyBOZ0NvbXBpbGVyKFxuICAgICAgICB0aGlzLmhvc3QsIG9wdGlvbnMsIHRoaXMudHNQcm9ncmFtLCByZXVzZWRQcm9ncmFtU3RyYXRlZ3ksIHRoaXMuaW5jcmVtZW50YWxTdHJhdGVneSxcbiAgICAgICAgcmV1c2VQcm9ncmFtLCB0aGlzLnBlcmZSZWNvcmRlcik7XG4gIH1cblxuICBnZXRUc1Byb2dyYW0oKTogdHMuUHJvZ3JhbSB7XG4gICAgcmV0dXJuIHRoaXMudHNQcm9ncmFtO1xuICB9XG5cbiAgZ2V0UmV1c2VUc1Byb2dyYW0oKTogdHMuUHJvZ3JhbSB7XG4gICAgcmV0dXJuIHRoaXMucmV1c2VUc1Byb2dyYW07XG4gIH1cblxuICBnZXRUc09wdGlvbkRpYWdub3N0aWNzKGNhbmNlbGxhdGlvblRva2VuPzogdHMuQ2FuY2VsbGF0aW9uVG9rZW58XG4gICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkKTogcmVhZG9ubHkgdHMuRGlhZ25vc3RpY1tdIHtcbiAgICByZXR1cm4gdGhpcy50c1Byb2dyYW0uZ2V0T3B0aW9uc0RpYWdub3N0aWNzKGNhbmNlbGxhdGlvblRva2VuKTtcbiAgfVxuXG4gIGdldFRzU3ludGFjdGljRGlhZ25vc3RpY3MoXG4gICAgICBzb3VyY2VGaWxlPzogdHMuU291cmNlRmlsZXx1bmRlZmluZWQsXG4gICAgICBjYW5jZWxsYXRpb25Ub2tlbj86IHRzLkNhbmNlbGxhdGlvblRva2VufHVuZGVmaW5lZCk6IHJlYWRvbmx5IHRzLkRpYWdub3N0aWNbXSB7XG4gICAgY29uc3QgaWdub3JlZEZpbGVzID0gdGhpcy5jb21waWxlci5pZ25vcmVGb3JEaWFnbm9zdGljcztcbiAgICBpZiAoc291cmNlRmlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoaWdub3JlZEZpbGVzLmhhcyhzb3VyY2VGaWxlKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnRzUHJvZ3JhbS5nZXRTeW50YWN0aWNEaWFnbm9zdGljcyhzb3VyY2VGaWxlLCBjYW5jZWxsYXRpb25Ub2tlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgc2Ygb2YgdGhpcy50c1Byb2dyYW0uZ2V0U291cmNlRmlsZXMoKSkge1xuICAgICAgICBpZiAoIWlnbm9yZWRGaWxlcy5oYXMoc2YpKSB7XG4gICAgICAgICAgZGlhZ25vc3RpY3MucHVzaCguLi50aGlzLnRzUHJvZ3JhbS5nZXRTeW50YWN0aWNEaWFnbm9zdGljcyhzZiwgY2FuY2VsbGF0aW9uVG9rZW4pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICAgIH1cbiAgfVxuXG4gIGdldFRzU2VtYW50aWNEaWFnbm9zdGljcyhcbiAgICAgIHNvdXJjZUZpbGU/OiB0cy5Tb3VyY2VGaWxlfHVuZGVmaW5lZCxcbiAgICAgIGNhbmNlbGxhdGlvblRva2VuPzogdHMuQ2FuY2VsbGF0aW9uVG9rZW58dW5kZWZpbmVkKTogcmVhZG9ubHkgdHMuRGlhZ25vc3RpY1tdIHtcbiAgICBjb25zdCBpZ25vcmVkRmlsZXMgPSB0aGlzLmNvbXBpbGVyLmlnbm9yZUZvckRpYWdub3N0aWNzO1xuICAgIGlmIChzb3VyY2VGaWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKHNvdXJjZUZpbGUpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMudHNQcm9ncmFtLmdldFNlbWFudGljRGlhZ25vc3RpY3Moc291cmNlRmlsZSwgY2FuY2VsbGF0aW9uVG9rZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHNmIG9mIHRoaXMudHNQcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICAgICAgaWYgKCFpZ25vcmVkRmlsZXMuaGFzKHNmKSkge1xuICAgICAgICAgIGRpYWdub3N0aWNzLnB1c2goLi4udGhpcy50c1Byb2dyYW0uZ2V0U2VtYW50aWNEaWFnbm9zdGljcyhzZiwgY2FuY2VsbGF0aW9uVG9rZW4pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICAgIH1cbiAgfVxuXG4gIGdldE5nT3B0aW9uRGlhZ25vc3RpY3MoY2FuY2VsbGF0aW9uVG9rZW4/OiB0cy5DYW5jZWxsYXRpb25Ub2tlbnxcbiAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQpOiByZWFkb25seSh0cy5EaWFnbm9zdGljfGFwaS5EaWFnbm9zdGljKVtdIHtcbiAgICByZXR1cm4gdGhpcy5jb21waWxlci5nZXRPcHRpb25EaWFnbm9zdGljcygpO1xuICB9XG5cbiAgZ2V0TmdTdHJ1Y3R1cmFsRGlhZ25vc3RpY3MoY2FuY2VsbGF0aW9uVG9rZW4/OiB0cy5DYW5jZWxsYXRpb25Ub2tlbnxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkKTogcmVhZG9ubHkgYXBpLkRpYWdub3N0aWNbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0TmdTZW1hbnRpY0RpYWdub3N0aWNzKFxuICAgICAgZmlsZU5hbWU/OiBzdHJpbmd8dW5kZWZpbmVkLCBjYW5jZWxsYXRpb25Ub2tlbj86IHRzLkNhbmNlbGxhdGlvblRva2VufHVuZGVmaW5lZCk6XG4gICAgICByZWFkb25seSh0cy5EaWFnbm9zdGljfGFwaS5EaWFnbm9zdGljKVtdIHtcbiAgICBsZXQgc2Y6IHRzLlNvdXJjZUZpbGV8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChmaWxlTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZiA9IHRoaXMudHNQcm9ncmFtLmdldFNvdXJjZUZpbGUoZmlsZU5hbWUpO1xuICAgICAgaWYgKHNmID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGRpYWdub3N0aWNzIGZvciBmaWxlcyB3aGljaCBkb24ndCBleGlzdCBpbiB0aGUgcHJvZ3JhbSAtIG1heWJlIHRoZSBjYWxsZXJcbiAgICAgICAgLy8gaGFzIHN0YWxlIGRhdGE/XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkaWFnbm9zdGljcyA9IHRoaXMuY29tcGlsZXIuZ2V0RGlhZ25vc3RpY3Moc2YpO1xuICAgIHRoaXMucmV1c2VUc1Byb2dyYW0gPSB0aGlzLmNvbXBpbGVyLmdldE5leHRQcm9ncmFtKCk7XG4gICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSB0aGF0IHRoZSBgTmdDb21waWxlcmAgaGFzIHByb3Blcmx5IGFuYWx5emVkIHRoZSBwcm9ncmFtLCBhbmQgYWxsb3cgZm9yIHRoZSBhc3luY2hyb25vdXNcbiAgICogbG9hZGluZyBvZiBhbnkgcmVzb3VyY2VzIGR1cmluZyB0aGUgcHJvY2Vzcy5cbiAgICpcbiAgICogVGhpcyBpcyB1c2VkIGJ5IHRoZSBBbmd1bGFyIENMSSB0byBhbGxvdyBmb3Igc3Bhd25pbmcgKGFzeW5jKSBjaGlsZCBjb21waWxhdGlvbnMgZm9yIHRoaW5nc1xuICAgKiBsaWtlIFNBU1MgZmlsZXMgdXNlZCBpbiBgc3R5bGVVcmxzYC5cbiAgICovXG4gIGxvYWROZ1N0cnVjdHVyZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbXBpbGVyLmFuYWx5emVBc3luYygpO1xuICB9XG5cbiAgbGlzdExhenlSb3V0ZXMoZW50cnlSb3V0ZT86IHN0cmluZ3x1bmRlZmluZWQpOiBhcGkuTGF6eVJvdXRlW10ge1xuICAgIHJldHVybiB0aGlzLmNvbXBpbGVyLmxpc3RMYXp5Um91dGVzKGVudHJ5Um91dGUpO1xuICB9XG5cbiAgZW1pdChvcHRzPzoge1xuICAgIGVtaXRGbGFncz86IGFwaS5FbWl0RmxhZ3N8dW5kZWZpbmVkO1xuICAgIGNhbmNlbGxhdGlvblRva2VuPzogdHMuQ2FuY2VsbGF0aW9uVG9rZW4gfCB1bmRlZmluZWQ7XG4gICAgY3VzdG9tVHJhbnNmb3JtZXJzPzogYXBpLkN1c3RvbVRyYW5zZm9ybWVycyB8IHVuZGVmaW5lZDtcbiAgICBlbWl0Q2FsbGJhY2s/OiBhcGkuVHNFbWl0Q2FsbGJhY2sgfCB1bmRlZmluZWQ7XG4gICAgbWVyZ2VFbWl0UmVzdWx0c0NhbGxiYWNrPzogYXBpLlRzTWVyZ2VFbWl0UmVzdWx0c0NhbGxiYWNrIHwgdW5kZWZpbmVkO1xuICB9fHVuZGVmaW5lZCk6IHRzLkVtaXRSZXN1bHQge1xuICAgIGNvbnN0IHt0cmFuc2Zvcm1lcnN9ID0gdGhpcy5jb21waWxlci5wcmVwYXJlRW1pdCgpO1xuICAgIGNvbnN0IGlnbm9yZUZpbGVzID0gdGhpcy5jb21waWxlci5pZ25vcmVGb3JFbWl0O1xuICAgIGNvbnN0IGVtaXRDYWxsYmFjayA9IG9wdHMgJiYgb3B0cy5lbWl0Q2FsbGJhY2sgfHwgZGVmYXVsdEVtaXRDYWxsYmFjaztcblxuICAgIGNvbnN0IHdyaXRlRmlsZTogdHMuV3JpdGVGaWxlQ2FsbGJhY2sgPVxuICAgICAgICAoZmlsZU5hbWU6IHN0cmluZywgZGF0YTogc3RyaW5nLCB3cml0ZUJ5dGVPcmRlck1hcms6IGJvb2xlYW4sXG4gICAgICAgICBvbkVycm9yOiAoKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCl8dW5kZWZpbmVkLFxuICAgICAgICAgc291cmNlRmlsZXM6IFJlYWRvbmx5QXJyYXk8dHMuU291cmNlRmlsZT58dW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgaWYgKHNvdXJjZUZpbGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIFJlY29yZCBzdWNjZXNzZnVsIHdyaXRlcyBmb3IgYW55IGB0cy5Tb3VyY2VGaWxlYCAodGhhdCdzIG5vdCBhIGRlY2xhcmF0aW9uIGZpbGUpXG4gICAgICAgICAgICAvLyB0aGF0J3MgYW4gaW5wdXQgdG8gdGhpcyB3cml0ZS5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgd3JpdHRlblNmIG9mIHNvdXJjZUZpbGVzKSB7XG4gICAgICAgICAgICAgIGlmICh3cml0dGVuU2YuaXNEZWNsYXJhdGlvbkZpbGUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuY29tcGlsZXIuaW5jcmVtZW50YWxEcml2ZXIucmVjb3JkU3VjY2Vzc2Z1bEVtaXQod3JpdHRlblNmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5ob3N0LndyaXRlRmlsZShmaWxlTmFtZSwgZGF0YSwgd3JpdGVCeXRlT3JkZXJNYXJrLCBvbkVycm9yLCBzb3VyY2VGaWxlcyk7XG4gICAgICAgIH07XG5cbiAgICBjb25zdCBjdXN0b21UcmFuc2Zvcm1zID0gb3B0cyAmJiBvcHRzLmN1c3RvbVRyYW5zZm9ybWVycztcbiAgICBjb25zdCBiZWZvcmVUcmFuc2Zvcm1zID0gdHJhbnNmb3JtZXJzLmJlZm9yZSB8fCBbXTtcbiAgICBjb25zdCBhZnRlckRlY2xhcmF0aW9uc1RyYW5zZm9ybXMgPSB0cmFuc2Zvcm1lcnMuYWZ0ZXJEZWNsYXJhdGlvbnM7XG5cbiAgICBpZiAoY3VzdG9tVHJhbnNmb3JtcyAhPT0gdW5kZWZpbmVkICYmIGN1c3RvbVRyYW5zZm9ybXMuYmVmb3JlVHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYmVmb3JlVHJhbnNmb3Jtcy5wdXNoKC4uLmN1c3RvbVRyYW5zZm9ybXMuYmVmb3JlVHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVtaXRTcGFuID0gdGhpcy5wZXJmUmVjb3JkZXIuc3RhcnQoJ2VtaXQnKTtcbiAgICBjb25zdCBlbWl0UmVzdWx0czogdHMuRW1pdFJlc3VsdFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHRhcmdldFNvdXJjZUZpbGUgb2YgdGhpcy50c1Byb2dyYW0uZ2V0U291cmNlRmlsZXMoKSkge1xuICAgICAgaWYgKHRhcmdldFNvdXJjZUZpbGUuaXNEZWNsYXJhdGlvbkZpbGUgfHwgaWdub3JlRmlsZXMuaGFzKHRhcmdldFNvdXJjZUZpbGUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb21waWxlci5pbmNyZW1lbnRhbERyaXZlci5zYWZlVG9Ta2lwRW1pdCh0YXJnZXRTb3VyY2VGaWxlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZUVtaXRTcGFuID0gdGhpcy5wZXJmUmVjb3JkZXIuc3RhcnQoJ2VtaXRGaWxlJywgdGFyZ2V0U291cmNlRmlsZSk7XG4gICAgICBlbWl0UmVzdWx0cy5wdXNoKGVtaXRDYWxsYmFjayh7XG4gICAgICAgIHRhcmdldFNvdXJjZUZpbGUsXG4gICAgICAgIHByb2dyYW06IHRoaXMudHNQcm9ncmFtLFxuICAgICAgICBob3N0OiB0aGlzLmhvc3QsXG4gICAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgICAgZW1pdE9ubHlEdHNGaWxlczogZmFsc2UsXG4gICAgICAgIHdyaXRlRmlsZSxcbiAgICAgICAgY3VzdG9tVHJhbnNmb3JtZXJzOiB7XG4gICAgICAgICAgYmVmb3JlOiBiZWZvcmVUcmFuc2Zvcm1zLFxuICAgICAgICAgIGFmdGVyOiBjdXN0b21UcmFuc2Zvcm1zICYmIGN1c3RvbVRyYW5zZm9ybXMuYWZ0ZXJUcyxcbiAgICAgICAgICBhZnRlckRlY2xhcmF0aW9uczogYWZ0ZXJEZWNsYXJhdGlvbnNUcmFuc2Zvcm1zLFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMucGVyZlJlY29yZGVyLnN0b3AoZmlsZUVtaXRTcGFuKTtcbiAgICB9XG5cbiAgICB0aGlzLnBlcmZSZWNvcmRlci5zdG9wKGVtaXRTcGFuKTtcblxuICAgIGlmICh0aGlzLnBlcmZUcmFja2VyICE9PSBudWxsICYmIHRoaXMub3B0aW9ucy50cmFjZVBlcmZvcm1hbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGVyZlRyYWNrZXIuc2VyaWFsaXplVG9GaWxlKHRoaXMub3B0aW9ucy50cmFjZVBlcmZvcm1hbmNlLCB0aGlzLmhvc3QpO1xuICAgIH1cblxuICAgIC8vIFJ1biB0aGUgZW1pdCwgaW5jbHVkaW5nIGEgY3VzdG9tIHRyYW5zZm9ybWVyIHRoYXQgd2lsbCBkb3dubGV2ZWwgdGhlIEl2eSBkZWNvcmF0b3JzIGluIGNvZGUuXG4gICAgcmV0dXJuICgob3B0cyAmJiBvcHRzLm1lcmdlRW1pdFJlc3VsdHNDYWxsYmFjaykgfHwgbWVyZ2VFbWl0UmVzdWx0cykoZW1pdFJlc3VsdHMpO1xuICB9XG5cbiAgZ2V0SW5kZXhlZENvbXBvbmVudHMoKTogTWFwPERlY2xhcmF0aW9uTm9kZSwgSW5kZXhlZENvbXBvbmVudD4ge1xuICAgIHJldHVybiB0aGlzLmNvbXBpbGVyLmdldEluZGV4ZWRDb21wb25lbnRzKCk7XG4gIH1cblxuICBnZXRMaWJyYXJ5U3VtbWFyaWVzKCk6IE1hcDxzdHJpbmcsIGFwaS5MaWJyYXJ5U3VtbWFyeT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGdldEVtaXR0ZWRHZW5lcmF0ZWRGaWxlcygpOiBNYXA8c3RyaW5nLCBHZW5lcmF0ZWRGaWxlPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgZ2V0RW1pdHRlZFNvdXJjZUZpbGVzKCk6IE1hcDxzdHJpbmcsIHRzLlNvdXJjZUZpbGU+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbn1cblxuY29uc3QgZGVmYXVsdEVtaXRDYWxsYmFjazogYXBpLlRzRW1pdENhbGxiYWNrID0gKHtcbiAgcHJvZ3JhbSxcbiAgdGFyZ2V0U291cmNlRmlsZSxcbiAgd3JpdGVGaWxlLFxuICBjYW5jZWxsYXRpb25Ub2tlbixcbiAgZW1pdE9ubHlEdHNGaWxlcyxcbiAgY3VzdG9tVHJhbnNmb3JtZXJzXG59KSA9PlxuICAgIHByb2dyYW0uZW1pdChcbiAgICAgICAgdGFyZ2V0U291cmNlRmlsZSwgd3JpdGVGaWxlLCBjYW5jZWxsYXRpb25Ub2tlbiwgZW1pdE9ubHlEdHNGaWxlcywgY3VzdG9tVHJhbnNmb3JtZXJzKTtcblxuZnVuY3Rpb24gbWVyZ2VFbWl0UmVzdWx0cyhlbWl0UmVzdWx0czogdHMuRW1pdFJlc3VsdFtdKTogdHMuRW1pdFJlc3VsdCB7XG4gIGNvbnN0IGRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10gPSBbXTtcbiAgbGV0IGVtaXRTa2lwcGVkID0gZmFsc2U7XG4gIGNvbnN0IGVtaXR0ZWRGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBlciBvZiBlbWl0UmVzdWx0cykge1xuICAgIGRpYWdub3N0aWNzLnB1c2goLi4uZXIuZGlhZ25vc3RpY3MpO1xuICAgIGVtaXRTa2lwcGVkID0gZW1pdFNraXBwZWQgfHwgZXIuZW1pdFNraXBwZWQ7XG4gICAgZW1pdHRlZEZpbGVzLnB1c2goLi4uKGVyLmVtaXR0ZWRGaWxlcyB8fCBbXSkpO1xuICB9XG5cbiAgcmV0dXJuIHtkaWFnbm9zdGljcywgZW1pdFNraXBwZWQsIGVtaXR0ZWRGaWxlc307XG59XG4iXX0=
|
|
@@ -90,7 +90,7 @@ export declare function isDecoratorIdentifier(exp: ts.Expression): exp is Decora
|
|
|
90
90
|
* For `ReflectionHost` purposes, a class declaration should always have a `name` identifier,
|
|
91
91
|
* because we need to be able to reference it in other parts of the program.
|
|
92
92
|
*/
|
|
93
|
-
export declare type ClassDeclaration<T extends
|
|
93
|
+
export declare type ClassDeclaration<T extends DeclarationNode = DeclarationNode> = T & {
|
|
94
94
|
name: ts.Identifier;
|
|
95
95
|
};
|
|
96
96
|
/**
|
|
@@ -235,7 +235,7 @@ export interface ImportedTypeValueReference {
|
|
|
235
235
|
* When `null` or empty, the `importedName` itself is the symbol being referenced.
|
|
236
236
|
*/
|
|
237
237
|
nestedPath: string[] | null;
|
|
238
|
-
valueDeclaration:
|
|
238
|
+
valueDeclaration: DeclarationNode;
|
|
239
239
|
}
|
|
240
240
|
/**
|
|
241
241
|
* A representation for a type value reference that is used when no value is available. This can
|
|
@@ -451,10 +451,35 @@ export interface EnumMember {
|
|
|
451
451
|
*/
|
|
452
452
|
initializer: ts.Expression;
|
|
453
453
|
}
|
|
454
|
+
/**
|
|
455
|
+
* A type that is used to identify a declaration.
|
|
456
|
+
*
|
|
457
|
+
* Declarations are normally `ts.Declaration` types such as variable declarations, class
|
|
458
|
+
* declarations, function declarations etc.
|
|
459
|
+
* But in some cases there is no `ts.Declaration` that can be used for a declaration, such
|
|
460
|
+
* as when they are declared inline as part of an exported expression. Then we must use a
|
|
461
|
+
* `ts.Expression` as the declaration.
|
|
462
|
+
* An example of this is `exports.someVar = 42` where the declaration expression would be
|
|
463
|
+
* `exports.someVar`.
|
|
464
|
+
*/
|
|
465
|
+
export declare type DeclarationNode = ts.Declaration | ts.Expression;
|
|
466
|
+
/**
|
|
467
|
+
* The type of a Declaration - whether its node is concrete (ts.Declaration) or inline
|
|
468
|
+
* (ts.Expression). See `ConcreteDeclaration`, `InlineDeclaration` and `DeclarationNode` for more
|
|
469
|
+
* information about this.
|
|
470
|
+
*/
|
|
471
|
+
export declare const enum DeclarationKind {
|
|
472
|
+
Concrete = 0,
|
|
473
|
+
Inline = 1
|
|
474
|
+
}
|
|
454
475
|
/**
|
|
455
476
|
* Base type for all `Declaration`s.
|
|
456
477
|
*/
|
|
457
|
-
export interface BaseDeclaration<T extends
|
|
478
|
+
export interface BaseDeclaration<T extends DeclarationNode> {
|
|
479
|
+
/**
|
|
480
|
+
* The type of the underlying `node`.
|
|
481
|
+
*/
|
|
482
|
+
kind: DeclarationKind;
|
|
458
483
|
/**
|
|
459
484
|
* The absolute module path from which the symbol was imported into the application, if the symbol
|
|
460
485
|
* was imported via an absolute module (even through a chain of re-exports). If the symbol is part
|
|
@@ -464,19 +489,19 @@ export interface BaseDeclaration<T extends ts.Declaration = ts.Declaration> {
|
|
|
464
489
|
/**
|
|
465
490
|
* TypeScript reference to the declaration itself, if one exists.
|
|
466
491
|
*/
|
|
467
|
-
node: T
|
|
492
|
+
node: T;
|
|
468
493
|
/**
|
|
469
494
|
* If set, describes the type of the known declaration this declaration resolves to.
|
|
470
495
|
*/
|
|
471
496
|
known: KnownDeclaration | null;
|
|
472
497
|
}
|
|
473
498
|
/**
|
|
474
|
-
*
|
|
475
|
-
*
|
|
476
|
-
* The alternative is an `InlineDeclaration`.
|
|
499
|
+
* Returns true if the `decl` is a `ConcreteDeclaration` (ie. that its `node` property is a
|
|
500
|
+
* `ts.Declaration`).
|
|
477
501
|
*/
|
|
502
|
+
export declare function isConcreteDeclaration(decl: Declaration): decl is ConcreteDeclaration;
|
|
478
503
|
export interface ConcreteDeclaration<T extends ts.Declaration = ts.Declaration> extends BaseDeclaration<T> {
|
|
479
|
-
|
|
504
|
+
kind: DeclarationKind.Concrete;
|
|
480
505
|
/**
|
|
481
506
|
* Optionally represents a special identity of the declaration, or `null` if the declaration
|
|
482
507
|
* does not have a special identity.
|
|
@@ -497,27 +522,19 @@ export interface DownleveledEnum {
|
|
|
497
522
|
enumMembers: EnumMember[];
|
|
498
523
|
}
|
|
499
524
|
/**
|
|
500
|
-
* A declaration that does not have an associated TypeScript `ts.Declaration
|
|
501
|
-
* `ts.Expression`.
|
|
525
|
+
* A declaration that does not have an associated TypeScript `ts.Declaration`.
|
|
502
526
|
*
|
|
503
527
|
* This can occur in some downlevelings when an `export const VAR = ...;` (a `ts.Declaration`) is
|
|
504
528
|
* transpiled to an assignment statement (e.g. `exports.VAR = ...;`). There is no `ts.Declaration`
|
|
505
529
|
* associated with `VAR` in that case, only an expression.
|
|
506
530
|
*/
|
|
507
|
-
export interface InlineDeclaration extends BaseDeclaration {
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
* The `ts.Expression` which constitutes the value of the declaration.
|
|
511
|
-
*/
|
|
512
|
-
expression: ts.Expression;
|
|
531
|
+
export interface InlineDeclaration extends BaseDeclaration<Exclude<DeclarationNode, ts.Declaration>> {
|
|
532
|
+
kind: DeclarationKind.Inline;
|
|
533
|
+
implementation?: DeclarationNode;
|
|
513
534
|
}
|
|
514
535
|
/**
|
|
515
536
|
* The declaration of a symbol, along with information about how it was imported into the
|
|
516
537
|
* application.
|
|
517
|
-
*
|
|
518
|
-
* This can either be a `ConcreteDeclaration` if the underlying TypeScript node for the symbol is an
|
|
519
|
-
* actual `ts.Declaration`, or an `InlineDeclaration` if the declaration was transpiled in certain
|
|
520
|
-
* downlevelings to a `ts.Expression` instead.
|
|
521
538
|
*/
|
|
522
539
|
export declare type Declaration<T extends ts.Declaration = ts.Declaration> = ConcreteDeclaration<T> | InlineDeclaration;
|
|
523
540
|
/**
|
|
@@ -545,7 +562,7 @@ export interface ReflectionHost {
|
|
|
545
562
|
* @returns an array of `Decorator` metadata if decorators are present on the declaration, or
|
|
546
563
|
* `null` if either no decorators were present or if the declaration is not of a decoratable type.
|
|
547
564
|
*/
|
|
548
|
-
getDecoratorsOfDeclaration(declaration:
|
|
565
|
+
getDecoratorsOfDeclaration(declaration: DeclarationNode): Decorator[] | null;
|
|
549
566
|
/**
|
|
550
567
|
* Examine a declaration which should be of a class, and return metadata about the members of the
|
|
551
568
|
* class.
|
|
@@ -698,7 +715,7 @@ export interface ReflectionHost {
|
|
|
698
715
|
* Note that the `ts.Declaration` returned from this function may not be from the same
|
|
699
716
|
* `ts.Program` as the input declaration.
|
|
700
717
|
*/
|
|
701
|
-
getDtsDeclaration(declaration:
|
|
718
|
+
getDtsDeclaration(declaration: DeclarationNode): ts.Declaration | null;
|
|
702
719
|
/**
|
|
703
720
|
* Get a `ts.Identifier` for a given `ClassDeclaration` which can be used to refer to the class
|
|
704
721
|
* within its definition (such as in static fields).
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
})(function (require, exports) {
|
|
17
17
|
"use strict";
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.KnownDeclaration = exports.ClassMemberKind = exports.isDecoratorIdentifier = exports.Decorator = void 0;
|
|
19
|
+
exports.isConcreteDeclaration = exports.KnownDeclaration = exports.ClassMemberKind = exports.isDecoratorIdentifier = exports.Decorator = void 0;
|
|
20
20
|
var ts = require("typescript");
|
|
21
21
|
exports.Decorator = {
|
|
22
22
|
nodeForError: function (decorator) {
|
|
@@ -68,5 +68,13 @@
|
|
|
68
68
|
*/
|
|
69
69
|
KnownDeclaration[KnownDeclaration["TsHelperSpreadArrays"] = 3] = "TsHelperSpreadArrays";
|
|
70
70
|
})(KnownDeclaration = exports.KnownDeclaration || (exports.KnownDeclaration = {}));
|
|
71
|
+
/**
|
|
72
|
+
* Returns true if the `decl` is a `ConcreteDeclaration` (ie. that its `node` property is a
|
|
73
|
+
* `ts.Declaration`).
|
|
74
|
+
*/
|
|
75
|
+
function isConcreteDeclaration(decl) {
|
|
76
|
+
return decl.kind === 0 /* Concrete */;
|
|
77
|
+
}
|
|
78
|
+
exports.isConcreteDeclaration = isConcreteDeclaration;
|
|
71
79
|
});
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcmVmbGVjdGlvbi9zcmMvaG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7SUFFSCwrQkFBaUM7SUFrRXBCLFFBQUEsU0FBUyxHQUFHO1FBQ3ZCLFlBQVksRUFBRSxVQUFDLFNBQW9CO1lBQ2pDLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQzNCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQzthQUN2QjtpQkFBTTtnQkFDTCxrRUFBa0U7Z0JBQ2xFLE9BQVEsU0FBZ0MsQ0FBQyxjQUFjLENBQUM7YUFDekQ7UUFDSCxDQUFDO0tBQ0YsQ0FBQztJQVdGLFNBQWdCLHFCQUFxQixDQUFDLEdBQWtCO1FBQ3RELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7WUFDdkIsRUFBRSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztnQkFDckUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUpELHNEQUlDO0lBbUJEOztPQUVHO0lBQ0gsSUFBWSxlQU1YO0lBTkQsV0FBWSxlQUFlO1FBQ3pCLG1FQUFXLENBQUE7UUFDWCx5REFBTSxDQUFBO1FBQ04seURBQU0sQ0FBQTtRQUNOLDZEQUFRLENBQUE7UUFDUix5REFBTSxDQUFBO0lBQ1IsQ0FBQyxFQU5XLGVBQWUsR0FBZix1QkFBZSxLQUFmLHVCQUFlLFFBTTFCO0lBdVVEOztPQUVHO0lBQ0gsSUFBWSxnQkFvQlg7SUFwQkQsV0FBWSxnQkFBZ0I7UUFDMUI7O1dBRUc7UUFDSCwyRUFBYyxDQUFBO1FBRWQ7O1dBRUc7UUFDSCwyRUFBYyxDQUFBO1FBRWQ7O1dBRUc7UUFDSCwyRUFBYyxDQUFBO1FBRWQ7O1dBRUc7UUFDSCx1RkFBb0IsQ0FBQTtJQUN0QixDQUFDLEVBcEJXLGdCQUFnQixHQUFoQix3QkFBZ0IsS0FBaEIsd0JBQWdCLFFBb0IzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuLyoqXG4gKiBNZXRhZGF0YSBleHRyYWN0ZWQgZnJvbSBhbiBpbnN0YW5jZSBvZiBhIGRlY29yYXRvciBvbiBhbm90aGVyIGRlY2xhcmF0aW9uLCBvciBzeW50aGVzaXplZCBmcm9tXG4gKiBvdGhlciBpbmZvcm1hdGlvbiBhYm91dCBhIGNsYXNzLlxuICovXG5leHBvcnQgdHlwZSBEZWNvcmF0b3IgPSBDb25jcmV0ZURlY29yYXRvcnxTeW50aGV0aWNEZWNvcmF0b3I7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZURlY29yYXRvciB7XG4gIC8qKlxuICAgKiBOYW1lIGJ5IHdoaWNoIHRoZSBkZWNvcmF0b3Igd2FzIGludm9rZWQgaW4gdGhlIHVzZXIncyBjb2RlLlxuICAgKlxuICAgKiBUaGlzIGlzIGRpc3RpbmN0IGZyb20gdGhlIG5hbWUgYnkgd2hpY2ggdGhlIGRlY29yYXRvciB3YXMgaW1wb3J0ZWQgKHRob3VnaCBpbiBwcmFjdGljZSB0aGV5XG4gICAqIHdpbGwgdXN1YWxseSBiZSB0aGUgc2FtZSkuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXIgd2hpY2ggcmVmZXJzIHRvIHRoZSBkZWNvcmF0b3IgaW4gdGhlIHVzZXIncyBjb2RlLlxuICAgKi9cbiAgaWRlbnRpZmllcjogRGVjb3JhdG9ySWRlbnRpZmllcnxudWxsO1xuXG4vKipcbiAqIGBJbXBvcnRgIGJ5IHdoaWNoIHRoZSBkZWNvcmF0b3Igd2FzIGJyb3VnaHQgaW50byB0aGUgbW9kdWxlIGluIHdoaWNoIGl0IHdhcyBpbnZva2VkLCBvciBgbnVsbGBcbiAqIGlmIHRoZSBkZWNvcmF0b3Igd2FzIGRlY2xhcmVkIGluIHRoZSBzYW1lIG1vZHVsZSBhbmQgbm90IGltcG9ydGVkLlxuICovXG5pbXBvcnQ6IEltcG9ydHxudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IHJlZmVyZW5jZSB0byB0aGUgZGVjb3JhdG9yIGl0c2VsZiwgb3IgYG51bGxgIGlmIHRoZSBkZWNvcmF0b3IgaXMgc3ludGhlc2l6ZWQgKGUuZy5cbiAgICogaW4gbmdjYykuXG4gICAqL1xuICBub2RlOiB0cy5Ob2RlfG51bGw7XG5cbiAgLyoqXG4gICAqIEFyZ3VtZW50cyBvZiB0aGUgaW52b2NhdGlvbiBvZiB0aGUgZGVjb3JhdG9yLCBpZiB0aGUgZGVjb3JhdG9yIGlzIGludm9rZWQsIG9yIGBudWxsYFxuICAgKiBvdGhlcndpc2UuXG4gICAqL1xuICBhcmdzOiB0cy5FeHByZXNzaW9uW118bnVsbDtcbn1cblxuLyoqXG4gKiBNZXRhZGF0YSBleHRyYWN0ZWQgZnJvbSBhbiBpbnN0YW5jZSBvZiBhIGRlY29yYXRvciBvbiBhbm90aGVyIGRlY2xhcmF0aW9uLCB3aGljaCB3YXMgYWN0dWFsbHlcbiAqIHByZXNlbnQgaW4gYSBmaWxlLlxuICpcbiAqIENvbmNyZXRlIGRlY29yYXRvcnMgYWx3YXlzIGhhdmUgYW4gYGlkZW50aWZpZXJgIGFuZCBhIGBub2RlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25jcmV0ZURlY29yYXRvciBleHRlbmRzIEJhc2VEZWNvcmF0b3Ige1xuICBpZGVudGlmaWVyOiBEZWNvcmF0b3JJZGVudGlmaWVyO1xuICBub2RlOiB0cy5Ob2RlO1xufVxuXG4vKipcbiAqIFN5bnRoZXRpYyBkZWNvcmF0b3JzIG5ldmVyIGhhdmUgYW4gYGlkZW50aWZpZXJgIG9yIGEgYG5vZGVgLCBidXQga25vdyB0aGUgbm9kZSBmb3Igd2hpY2ggdGhleVxuICogd2VyZSBzeW50aGVzaXplZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW50aGV0aWNEZWNvcmF0b3IgZXh0ZW5kcyBCYXNlRGVjb3JhdG9yIHtcbiAgaWRlbnRpZmllcjogbnVsbDtcbiAgbm9kZTogbnVsbDtcblxuICAvKipcbiAgICogVGhlIGB0cy5Ob2RlYCBmb3Igd2hpY2ggdGhpcyBkZWNvcmF0b3Igd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBzeW50aGVzaXplZEZvcjogdHMuTm9kZTtcbn1cblxuZXhwb3J0IGNvbnN0IERlY29yYXRvciA9IHtcbiAgbm9kZUZvckVycm9yOiAoZGVjb3JhdG9yOiBEZWNvcmF0b3IpOiB0cy5Ob2RlID0+IHtcbiAgICBpZiAoZGVjb3JhdG9yLm5vZGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBkZWNvcmF0b3Iubm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETyhhbHhodWIpOiB3ZSBjYW4ndCByZWx5IG9uIG5hcnJvd2luZyB1bnRpbCBUUyAzLjYgaXMgaW4gZzMuXG4gICAgICByZXR1cm4gKGRlY29yYXRvciBhcyBTeW50aGV0aWNEZWNvcmF0b3IpLnN5bnRoZXNpemVkRm9yO1xuICAgIH1cbiAgfSxcbn07XG5cbi8qKlxuICogQSBkZWNvcmF0b3IgaXMgaWRlbnRpZmllZCBieSBlaXRoZXIgYSBzaW1wbGUgaWRlbnRpZmllciAoZS5nLiBgRGVjb3JhdG9yYCkgb3IsIGluIHNvbWUgY2FzZXMsXG4gKiBhIG5hbWVzcGFjZWQgcHJvcGVydHkgYWNjZXNzIChlLmcuIGBjb3JlLkRlY29yYXRvcmApLlxuICovXG5leHBvcnQgdHlwZSBEZWNvcmF0b3JJZGVudGlmaWVyID0gdHMuSWRlbnRpZmllcnxOYW1lc3BhY2VkSWRlbnRpZmllcjtcbmV4cG9ydCB0eXBlIE5hbWVzcGFjZWRJZGVudGlmaWVyID0gdHMuUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJntcbiAgZXhwcmVzc2lvbjogdHMuSWRlbnRpZmllcjtcbiAgbmFtZTogdHMuSWRlbnRpZmllclxufTtcbmV4cG9ydCBmdW5jdGlvbiBpc0RlY29yYXRvcklkZW50aWZpZXIoZXhwOiB0cy5FeHByZXNzaW9uKTogZXhwIGlzIERlY29yYXRvcklkZW50aWZpZXIge1xuICByZXR1cm4gdHMuaXNJZGVudGlmaWVyKGV4cCkgfHxcbiAgICAgIHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKGV4cCkgJiYgdHMuaXNJZGVudGlmaWVyKGV4cC5leHByZXNzaW9uKSAmJlxuICAgICAgdHMuaXNJZGVudGlmaWVyKGV4cC5uYW1lKTtcbn1cblxuLyoqXG4gKiBUaGUgYHRzLkRlY2xhcmF0aW9uYCBvZiBhIFwiY2xhc3NcIi5cbiAqXG4gKiBDbGFzc2VzIGFyZSByZXByZXNlbnRlZCBkaWZmZXJlbnRseSBpbiBkaWZmZXJlbnQgY29kZSBmb3JtYXRzOlxuICogLSBJbiBUUyBjb2RlLCB0aGV5IGFyZSB0eXBpY2FsbHkgZGVmaW5lZCB1c2luZyB0aGUgYGNsYXNzYCBrZXl3b3JkLlxuICogLSBJbiBFUzIwMTUgY29kZSwgdGhleSBhcmUgdXN1YWxseSBkZWZpbmVkIHVzaW5nIHRoZSBgY2xhc3NgIGtleXdvcmQsIGJ1dCB0aGV5IGNhbiBhbHNvIGJlXG4gKiAgIHZhcmlhYmxlIGRlY2xhcmF0aW9ucywgd2hpY2ggYXJlIGluaXRpYWxpemVkIHRvIGEgY2xhc3MgZXhwcmVzc2lvbiAoZS5nLlxuICogICBgbGV0IEZvbyA9IEZvbzEgPSBjbGFzcyBGb28ge31gKS5cbiAqIC0gSW4gRVM1IGNvZGUsIHRoZXkgYXJlIHR5cGljYWxseSBkZWZpbmVkIGFzIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBiZWluZyBhc3NpZ25lZCB0aGUgcmV0dXJuXG4gKiAgIHZhbHVlIG9mIGFuIElJRkUuIFRoZSBhY3R1YWwgXCJjbGFzc1wiIGlzIGltcGxlbWVudGVkIGFzIGEgY29uc3RydWN0b3IgZnVuY3Rpb24gaW5zaWRlIHRoZSBJSUZFLFxuICogICBidXQgdGhlIG91dGVyIHZhcmlhYmxlIGRlY2xhcmF0aW9uIHJlcHJlc2VudHMgdGhlIFwiY2xhc3NcIiB0byB0aGUgcmVzdCBvZiB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBGb3IgYFJlZmxlY3Rpb25Ib3N0YCBwdXJwb3NlcywgYSBjbGFzcyBkZWNsYXJhdGlvbiBzaG91bGQgYWx3YXlzIGhhdmUgYSBgbmFtZWAgaWRlbnRpZmllcixcbiAqIGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRvIHJlZmVyZW5jZSBpdCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgcHJvZ3JhbS5cbiAqL1xuZXhwb3J0IHR5cGUgQ2xhc3NEZWNsYXJhdGlvbjxUIGV4dGVuZHMgdHMuRGVjbGFyYXRpb24gPSB0cy5EZWNsYXJhdGlvbj4gPSBUJntuYW1lOiB0cy5JZGVudGlmaWVyfTtcblxuLyoqXG4gKiBBbiBlbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSBraW5kcyBvZiBjbGFzcyBtZW1iZXJzLlxuICovXG5leHBvcnQgZW51bSBDbGFzc01lbWJlcktpbmQge1xuICBDb25zdHJ1Y3RvcixcbiAgR2V0dGVyLFxuICBTZXR0ZXIsXG4gIFByb3BlcnR5LFxuICBNZXRob2QsXG59XG5cbi8qKlxuICogQSBtZW1iZXIgb2YgYSBjbGFzcywgc3VjaCBhcyBhIHByb3BlcnR5LCBtZXRob2QsIG9yIGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsYXNzTWVtYmVyIHtcbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgcmVmZXJlbmNlIHRvIHRoZSBjbGFzcyBtZW1iZXIgaXRzZWxmLCBvciBudWxsIGlmIGl0IGlzIG5vdCBhcHBsaWNhYmxlLlxuICAgKi9cbiAgbm9kZTogdHMuTm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0aW9uIG9mIHdoaWNoIHR5cGUgb2YgbWVtYmVyIHRoaXMgaXMgKHByb3BlcnR5LCBtZXRob2QsIGV0YykuXG4gICAqL1xuICBraW5kOiBDbGFzc01lbWJlcktpbmQ7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLlR5cGVOb2RlYCByZXByZXNlbnRpbmcgdGhlIHR5cGUgb2YgdGhlIG1lbWJlciwgb3IgYG51bGxgIGlmIG5vdCBwcmVzZW50IG9yXG4gICAqIGFwcGxpY2FibGUuXG4gICAqL1xuICB0eXBlOiB0cy5UeXBlTm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjbGFzcyBtZW1iZXIuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLklkZW50aWZpZXJgIG9yIGB0cy5TdHJpbmdMaXRlcmFsYCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIG1lbWJlciwgb3IgYG51bGxgXG4gICAqIGlmIG5vIHN1Y2ggbm9kZSBpcyBwcmVzZW50LlxuICAgKlxuICAgKiBUaGUgYG5hbWVOb2RlYCBpcyB1c2VmdWwgaW4gd3JpdGluZyByZWZlcmVuY2VzIHRvIHRoaXMgbWVtYmVyIHRoYXQgd2lsbCBiZSBjb3JyZWN0bHkgc291cmNlLVxuICAgKiBtYXBwZWQgYmFjayB0byB0aGUgb3JpZ2luYWwgZmlsZS5cbiAgICovXG4gIG5hbWVOb2RlOiB0cy5JZGVudGlmaWVyfHRzLlN0cmluZ0xpdGVyYWx8bnVsbDtcblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBgdHMuRXhwcmVzc2lvbmAgd2hpY2ggcmVwcmVzZW50cyB0aGUgdmFsdWUgb2YgdGhlIG1lbWJlci5cbiAgICpcbiAgICogSWYgdGhlIG1lbWJlciBpcyBhIHByb3BlcnR5LCB0aGlzIHdpbGwgYmUgdGhlIHByb3BlcnR5IGluaXRpYWxpemVyIGlmIHRoZXJlIGlzIG9uZSwgb3IgbnVsbFxuICAgKiBvdGhlcndpc2UuXG4gICAqL1xuICB2YWx1ZTogdHMuRXhwcmVzc2lvbnxudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGB0cy5EZWNsYXJhdGlvbmAgd2hpY2ggcmVwcmVzZW50cyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1lbWJlci5cbiAgICpcbiAgICogSW4gVHlwZVNjcmlwdCBjb2RlIHRoaXMgaXMgaWRlbnRpY2FsIHRvIHRoZSBub2RlLCBidXQgaW4gZG93bmxldmVsZWQgY29kZSB0aGlzIHNob3VsZCBhbHdheXMgYmVcbiAgICogdGhlIERlY2xhcmF0aW9uIHdoaWNoIGFjdHVhbGx5IHJlcHJlc2VudHMgdGhlIG1lbWJlcidzIHJ1bnRpbWUgdmFsdWUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB0aGUgVFMgY29kZTpcbiAgICpcbiAgICogYGBgXG4gICAqIGNsYXNzIENsYXp6IHtcbiAgICogICBzdGF0aWMgZ2V0IHByb3BlcnR5KCk6IHN0cmluZyB7XG4gICAqICAgICByZXR1cm4gJ3ZhbHVlJztcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIERvd25sZXZlbHMgdG86XG4gICAqXG4gICAqIGBgYFxuICAgKiB2YXIgQ2xhenogPSAoZnVuY3Rpb24gKCkge1xuICAgKiAgIGZ1bmN0aW9uIENsYXp6KCkge1xuICAgKiAgIH1cbiAgICogICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2xhenosIFwicHJvcGVydHlcIiwge1xuICAgKiAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICogICAgICAgICAgIHJldHVybiAndmFsdWUnO1xuICAgKiAgICAgICB9LFxuICAgKiAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICogICB9KTtcbiAgICogICByZXR1cm4gQ2xheno7XG4gICAqIH0oKSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBJbiB0aGlzIGV4YW1wbGUsIGZvciB0aGUgcHJvcGVydHkgXCJwcm9wZXJ0eVwiLCB0aGUgbm9kZSB3b3VsZCBiZSB0aGUgZW50aXJlXG4gICAqIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBFeHByZXNzaW9uU3RhdGVtZW50LCBidXQgdGhlIGltcGxlbWVudGF0aW9uIHdvdWxkIGJlIHRoaXNcbiAgICogRnVuY3Rpb25EZWNsYXJhdGlvbjpcbiAgICpcbiAgICogYGBgXG4gICAqIGZ1bmN0aW9uICgpIHtcbiAgICogICByZXR1cm4gJ3ZhbHVlJztcbiAgICogfSxcbiAgICogYGBgXG4gICAqL1xuICBpbXBsZW1lbnRhdGlvbjogdHMuRGVjbGFyYXRpb258bnVsbDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbWVtYmVyIGlzIHN0YXRpYyBvciBub3QuXG4gICAqL1xuICBpc1N0YXRpYzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW55IGBEZWNvcmF0b3JgcyB3aGljaCBhcmUgcHJlc2VudCBvbiB0aGUgbWVtYmVyLCBvciBgbnVsbGAgaWYgbm9uZSBhcmUgcHJlc2VudC5cbiAgICovXG4gIGRlY29yYXRvcnM6IERlY29yYXRvcltdfG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIFR5cGVWYWx1ZVJlZmVyZW5jZUtpbmQge1xuICBMT0NBTCxcbiAgSU1QT1JURUQsXG4gIFVOQVZBSUxBQkxFLFxufVxuXG4vKipcbiAqIEEgdHlwZSByZWZlcmVuY2UgdGhhdCByZWZlcnMgdG8gYW55IHR5cGUgdmlhIGEgYHRzLkV4cHJlc3Npb25gIHRoYXQncyB2YWxpZCB3aXRoaW4gdGhlIGxvY2FsIGZpbGVcbiAqIHdoZXJlIHRoZSB0eXBlIHdhcyByZWZlcmVuY2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsVHlwZVZhbHVlUmVmZXJlbmNlIHtcbiAga2luZDogVHlwZVZhbHVlUmVmZXJlbmNlS2luZC5MT0NBTDtcblxuICAvKipcbiAgICogVGhlIHN5bnRoZXNpemVkIGV4cHJlc3Npb24gdG8gcmVmZXJlbmNlIHRoZSB0eXBlIGluIGEgdmFsdWUgcG9zaXRpb24uXG4gICAqL1xuICBleHByZXNzaW9uOiB0cy5FeHByZXNzaW9uO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgdHlwZSBvcmlnaW5hdGVzIGZyb20gYSBkZWZhdWx0IGltcG9ydCwgdGhlIGltcG9ydCBzdGF0ZW1lbnQgaXMgY2FwdHVyZWQgaGVyZSB0byBiZSBhYmxlXG4gICAqIHRvIHRyYWNrIGl0cyB1c2FnZXMsIHByZXZlbnRpbmcgdGhlIGltcG9ydCBmcm9tIGJlaW5nIGVsaWRlZCBpZiBpdCB3YXMgb3JpZ2luYWxseSBvbmx5IHVzZWQgaW5cbiAgICogYSB0eXBlLXBvc2l0aW9uLiBTZWUgYERlZmF1bHRJbXBvcnRUcmFja2VyYCBmb3IgZGV0YWlscy5cbiAgICovXG4gIGRlZmF1bHRJbXBvcnRTdGF0ZW1lbnQ6IHRzLkltcG9ydERlY2xhcmF0aW9ufG51bGw7XG59XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdGhhdCByZWZlcnMgdG8gYSB0eXBlIHRoYXQgd2FzIGltcG9ydGVkLCBhbmQgZ2l2ZXMgdGhlIHN5bWJvbCBgbmFtZWAgYW5kIHRoZVxuICogYG1vZHVsZU5hbWVgIG9mIHRoZSBpbXBvcnQuIE5vdGUgdGhhdCB0aGlzIGBtb2R1bGVOYW1lYCBtYXkgYmUgYSByZWxhdGl2ZSBwYXRoLCBhbmQgdGh1cyBpc1xuICogbGlrZWx5IG9ubHkgdmFsaWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBmaWxlIHdoaWNoIGNvbnRhaW5lZCB0aGUgb3JpZ2luYWwgdHlwZSByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0ZWRUeXBlVmFsdWVSZWZlcmVuY2Uge1xuICBraW5kOiBUeXBlVmFsdWVSZWZlcmVuY2VLaW5kLklNUE9SVEVEO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kdWxlIHNwZWNpZmllciBmcm9tIHdoaWNoIHRoZSBgaW1wb3J0ZWROYW1lYCBzeW1ib2wgc2hvdWxkIGJlIGltcG9ydGVkLlxuICAgKi9cbiAgbW9kdWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdG9wLWxldmVsIHN5bWJvbCB0aGF0IGlzIGltcG9ydGVkIGZyb20gYG1vZHVsZU5hbWVgLiBJZiBgbmVzdGVkUGF0aGAgaXMgYWxzb1xuICAgKiBwcmVzZW50LCBhIG5lc3RlZCBvYmplY3QgaXMgYmVpbmcgcmVmZXJlbmNlZCBmcm9tIHRoZSB0b3AtbGV2ZWwgc3ltYm9sLlxuICAgKi9cbiAgaW1wb3J0ZWROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHByZXNlbnQsIHJlcHJlc2VudHMgdGhlIHN5bWJvbCBuYW1lcyB0aGF0IGFyZSByZWZlcmVuY2VkIGZyb20gdGhlIHRvcC1sZXZlbCBpbXBvcnQuXG4gICAqIFdoZW4gYG51bGxgIG9yIGVtcHR5LCB0aGUgYGltcG9ydGVkTmFtZWAgaXRzZWxmIGlzIHRoZSBzeW1ib2wgYmVpbmcgcmVmZXJlbmNlZC5cbiAgICovXG4gIG5lc3RlZFBhdGg6IHN0cmluZ1tdfG51bGw7XG5cbiAgdmFsdWVEZWNsYXJhdGlvbjogdHMuRGVjbGFyYXRpb247XG59XG5cbi8qKlxuICogQSByZXByZXNlbnRhdGlvbiBmb3IgYSB0eXBlIHZhbHVlIHJlZmVyZW5jZSB0aGF0IGlzIHVzZWQgd2hlbiBubyB2YWx1ZSBpcyBhdmFpbGFibGUuIFRoaXMgY2FuXG4gKiBvY2N1ciBkdWUgdG8gdmFyaW91cyByZWFzb25zLCB3aGljaCBpcyBpbmRpY2F0ZWQgaW4gdGhlIGByZWFzb25gIGZpZWxkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuYXZhaWxhYmxlVHlwZVZhbHVlUmVmZXJlbmNlIHtcbiAga2luZDogVHlwZVZhbHVlUmVmZXJlbmNlS2luZC5VTkFWQUlMQUJMRTtcblxuICAvKipcbiAgICogVGhlIHJlYXNvbiB3aHkgbm8gdmFsdWUgcmVmZXJlbmNlIGNvdWxkIGJlIGRldGVybWluZWQgZm9yIGEgdHlwZS5cbiAgICovXG4gIHJlYXNvbjogVW5hdmFpbGFibGVWYWx1ZTtcbn1cblxuLyoqXG4gKiBUaGUgdmFyaW91cyByZWFzb25zIHdoeSB0aGUgY29tcGlsZXIgbWF5IGJlIHVuYWJsZSB0byBzeW50aGVzaXplIGEgdmFsdWUgZnJvbSBhIHR5cGUgcmVmZXJlbmNlLlxuICovXG5leHBvcnQgY29uc3QgZW51bSBWYWx1ZVVuYXZhaWxhYmxlS2luZCB7XG4gIC8qKlxuICAgKiBObyB0eXBlIG5vZGUgd2FzIGF2YWlsYWJsZS5cbiAgICovXG4gIE1JU1NJTkdfVFlQRSxcblxuICAvKipcbiAgICogVGhlIHR5cGUgZG9lcyBub3QgaGF2ZSBhIHZhbHVlIGRlY2xhcmF0aW9uLCBlLmcuIGFuIGludGVyZmFjZS5cbiAgICovXG4gIE5PX1ZBTFVFX0RFQ0xBUkFUSU9OLFxuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBpcyBpbXBvcnRlZCB1c2luZyBhIHR5cGUtb25seSBpbXBvcnRzLCBzbyBpdCBpcyBub3Qgc3VpdGFibGUgdG8gYmUgdXNlZCBpbiBhXG4gICAqIHZhbHVlLXBvc2l0aW9uLlxuICAgKi9cbiAgVFlQRV9PTkxZX0lNUE9SVCxcblxuICAvKipcbiAgICogVGhlIHR5cGUgcmVmZXJlbmNlIGNvdWxkIG5vdCBiZSByZXNvbHZlZCB0byBhIGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgVU5LTk9XTl9SRUZFUkVOQ0UsXG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIGNvcnJlc3BvbmRzIHdpdGggYSBuYW1lc3BhY2UuXG4gICAqL1xuICBOQU1FU1BBQ0UsXG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGNvbXBpbGVyLCBmb3IgZXhhbXBsZSB1bmlvbiB0eXBlcy5cbiAgICovXG4gIFVOU1VQUE9SVEVELFxufVxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5zdXBwb3J0ZWRUeXBlIHtcbiAga2luZDogVmFsdWVVbmF2YWlsYWJsZUtpbmQuVU5TVVBQT1JURUQ7XG4gIHR5cGVOb2RlOiB0cy5UeXBlTm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb1ZhbHVlRGVjbGFyYXRpb24ge1xuICBraW5kOiBWYWx1ZVVuYXZhaWxhYmxlS2luZC5OT19WQUxVRV9ERUNMQVJBVElPTjtcbiAgdHlwZU5vZGU6IHRzLlR5cGVOb2RlO1xuICBkZWNsOiB0cy5EZWNsYXJhdGlvbnxudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVPbmx5SW1wb3J0IHtcbiAga2luZDogVmFsdWVVbmF2YWlsYWJsZUtpbmQuVFlQRV9PTkxZX0lNUE9SVDtcbiAgdHlwZU5vZGU6IHRzLlR5cGVOb2RlO1xuICBpbXBvcnRDbGF1c2U6IHRzLkltcG9ydENsYXVzZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOYW1lc3BhY2VJbXBvcnQge1xuICBraW5kOiBWYWx1ZVVuYXZhaWxhYmxlS2luZC5OQU1FU1BBQ0U7XG4gIHR5cGVOb2RlOiB0cy5UeXBlTm9kZTtcbiAgaW1wb3J0Q2xhdXNlOiB0cy5JbXBvcnRDbGF1c2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5rbm93blJlZmVyZW5jZSB7XG4gIGtpbmQ6IFZhbHVlVW5hdmFpbGFibGVLaW5kLlVOS05PV05fUkVGRVJFTkNFO1xuICB0eXBlTm9kZTogdHMuVHlwZU5vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlzc2luZ1R5cGUge1xuICBraW5kOiBWYWx1ZVVuYXZhaWxhYmxlS2luZC5NSVNTSU5HX1RZUEU7XG59XG5cbi8qKlxuICogVGhlIHZhcmlvdXMgcmVhc29ucyB3aHkgYSB0eXBlIG5vZGUgbWF5IG5vdCBiZSByZWZlcnJlZCB0byBhcyBhIHZhbHVlLlxuICovXG5leHBvcnQgdHlwZSBVbmF2YWlsYWJsZVZhbHVlID1cbiAgICBVbnN1cHBvcnRlZFR5cGV8Tm9WYWx1ZURlY2xhcmF0aW9ufFR5cGVPbmx5SW1wb3J0fE5hbWVzcGFjZUltcG9ydHxVbmtub3duUmVmZXJlbmNlfE1pc3NpbmdUeXBlO1xuXG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGEgdmFsdWUgdGhhdCBvcmlnaW5hdGVkIGZyb20gYSB0eXBlIHBvc2l0aW9uLlxuICpcbiAqIEZvciBleGFtcGxlLCBhIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBjb3VsZCBiZSBkZWNsYXJlZCBhcyBgZm9vOiBGb29gLiBBIGBUeXBlVmFsdWVSZWZlcmVuY2VgXG4gKiBleHRyYWN0ZWQgZnJvbSB0aGlzIHdvdWxkIHJlZmVyIHRvIHRoZSB2YWx1ZSBvZiB0aGUgY2xhc3MgYEZvb2AgKGFzc3VtaW5nIGl0IHdhcyBhY3R1YWxseSBhXG4gKiB0eXBlKS5cbiAqXG4gKiBTZWUgdGhlIGluZGl2aWR1YWwgdHlwZXMgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFR5cGVWYWx1ZVJlZmVyZW5jZSA9XG4gICAgTG9jYWxUeXBlVmFsdWVSZWZlcmVuY2V8SW1wb3J0ZWRUeXBlVmFsdWVSZWZlcmVuY2V8VW5hdmFpbGFibGVUeXBlVmFsdWVSZWZlcmVuY2U7XG5cbi8qKlxuICogQSBwYXJhbWV0ZXIgdG8gYSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdG9yUGFyYW1ldGVyIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHBhcmFtZXRlciwgaWYgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBTb21lIHBhcmFtZXRlcnMgZG9uJ3QgaGF2ZSBhIHNpbXBsZSBzdHJpbmcgbmFtZSAoZm9yIGV4YW1wbGUsIHBhcmFtZXRlcnMgd2hpY2ggYXJlIGRlc3RydWN0dXJlZFxuICAgKiBpbnRvIG11bHRpcGxlIHZhcmlhYmxlcykuIEluIHRoZXNlIGNhc2VzLCBgbmFtZWAgY2FuIGJlIGBudWxsYC5cbiAgICovXG4gIG5hbWU6IHN0cmluZ3xudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGB0cy5CaW5kaW5nTmFtZWAgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIFRoZSBgbmFtZU5vZGVgIGlzIHVzZWZ1bCBpbiB3cml0aW5nIHJlZmVyZW5jZXMgdG8gdGhpcyBtZW1iZXIgdGhhdCB3aWxsIGJlIGNvcnJlY3RseSBzb3VyY2UtXG4gICAqIG1hcHBlZCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBmaWxlLlxuICAgKi9cbiAgbmFtZU5vZGU6IHRzLkJpbmRpbmdOYW1lO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIncyB0eXBlIGFubm90YXRpb24sIGlmIGl0J3MgcG9zc2libGUgdG8gcmVmZXIgdG8gdGhlXG4gICAqIHBhcmFtZXRlcidzIHR5cGUgYXMgYSB2YWx1ZS5cbiAgICpcbiAgICogVGhpcyBjYW4gZWl0aGVyIGJlIGEgcmVmZXJlbmNlIHRvIGEgbG9jYWwgdmFsdWUsIGEgcmVmZXJlbmNlIHRvIGFuIGltcG9ydGVkIHZhbHVlLCBvciBub1xuICAgKiB2YWx1ZSBpZiBubyBpcyBwcmVzZW50IG9yIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcyBhbiBleHByZXNzaW9uLlxuICAgKi9cbiAgdHlwZVZhbHVlUmVmZXJlbmNlOiBUeXBlVmFsdWVSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLlR5cGVOb2RlYCByZXByZXNlbnRpbmcgdGhlIHR5cGUgbm9kZSBmb3VuZCBpbiB0aGUgdHlwZSBwb3NpdGlvbi5cbiAgICpcbiAgICogVGhpcyBmaWVsZCBjYW4gYmUgdXNlZCBmb3IgZGlhZ25vc3RpY3MgcmVwb3J0aW5nIGlmIGB0eXBlVmFsdWVSZWZlcmVuY2VgIGlzIGBudWxsYC5cbiAgICpcbiAgICogQ2FuIGJlIG51bGwsIGlmIHRoZSBwYXJhbSBoYXMgbm8gdHlwZSBkZWNsYXJlZC5cbiAgICovXG4gIHR5cGVOb2RlOiB0cy5UeXBlTm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBBbnkgYERlY29yYXRvcmBzIHdoaWNoIGFyZSBwcmVzZW50IG9uIHRoZSBwYXJhbWV0ZXIsIG9yIGBudWxsYCBpZiBub25lIGFyZSBwcmVzZW50LlxuICAgKi9cbiAgZGVjb3JhdG9yczogRGVjb3JhdG9yW118bnVsbDtcbn1cblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgZnVuY3Rpb24gb3IgbWV0aG9kLCBpbmNsdWRpbmcgaXRzIGJvZHkgaWYgcHJlc2VudCBhbmQgYW55IHBhcmFtZXRlcnMuXG4gKlxuICogSW4gVHlwZVNjcmlwdCBjb2RlIHRoaXMgbWV0YWRhdGEgd2lsbCBiZSBhIHNpbXBsZSByZWZsZWN0aW9uIG9mIHRoZSBkZWNsYXJhdGlvbnMgaW4gdGhlIG5vZGVcbiAqIGl0c2VsZi4gSW4gRVM1IGNvZGUgdGhpcyBjYW4gYmUgbW9yZSBjb21wbGljYXRlZCwgYXMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzIG1heVxuICogYmUgZXh0cmFjdGVkIGZyb20gY2VydGFpbiBib2R5IHN0YXRlbWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25EZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBub2RlIHdoaWNoIGRlY2xhcmVzIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIG5vZGU6IHRzLk1ldGhvZERlY2xhcmF0aW9ufHRzLkZ1bmN0aW9uRGVjbGFyYXRpb258dHMuRnVuY3Rpb25FeHByZXNzaW9ufHRzLlZhcmlhYmxlRGVjbGFyYXRpb247XG5cbiAgLyoqXG4gICAqIFN0YXRlbWVudHMgb2YgdGhlIGZ1bmN0aW9uIGJvZHksIGlmIGEgYm9keSBpcyBwcmVzZW50LCBvciBudWxsIGlmIG5vIGJvZHkgaXMgcHJlc2VudCBvciB0aGVcbiAgICogZnVuY3Rpb24gaXMgaWRlbnRpZmllZCB0byByZXByZXNlbnQgYSB0c2xpYiBoZWxwZXIgZnVuY3Rpb24sIGluIHdoaWNoIGNhc2UgYGhlbHBlcmAgd2lsbFxuICAgKiBpbmRpY2F0ZSB3aGljaCBoZWxwZXIgdGhpcyBmdW5jdGlvbiByZXByZXNlbnRzLlxuICAgKlxuICAgKiBUaGlzIGxpc3QgbWF5IGhhdmUgYmVlbiBmaWx0ZXJlZCB0byBleGNsdWRlIHN0YXRlbWVudHMgd2hpY2ggcGVyZm9ybSBwYXJhbWV0ZXIgZGVmYXVsdCB2YWx1ZVxuICAgKiBpbml0aWFsaXphdGlvbi5cbiAgICovXG4gIGJvZHk6IHRzLlN0YXRlbWVudFtdfG51bGw7XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIHJlZ2FyZGluZyB0aGUgZnVuY3Rpb24ncyBwYXJhbWV0ZXJzLCBpbmNsdWRpbmcgcG9zc2libGUgZGVmYXVsdCB2YWx1ZSBleHByZXNzaW9ucy5cbiAgICovXG4gIHBhcmFtZXRlcnM6IFBhcmFtZXRlcltdO1xufVxuXG4vKipcbiAqIFBvc3NpYmxlIGRlY2xhcmF0aW9ucyBvZiBrbm93biB2YWx1ZXMsIHN1Y2ggYXMgYnVpbHQtaW4gb2JqZWN0cy9mdW5jdGlvbnMgb3IgVHlwZVNjcmlwdCBoZWxwZXJzLlxuICovXG5leHBvcnQgZW51bSBLbm93bkRlY2xhcmF0aW9uIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgSmF2YVNjcmlwdCBnbG9iYWwgYE9iamVjdGAgY2xhc3MuXG4gICAqL1xuICBKc0dsb2JhbE9iamVjdCxcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBgX19hc3NpZ25gIFR5cGVTY3JpcHQgaGVscGVyIGZ1bmN0aW9uLlxuICAgKi9cbiAgVHNIZWxwZXJBc3NpZ24sXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgYF9fc3ByZWFkYCBUeXBlU2NyaXB0IGhlbHBlciBmdW5jdGlvbi5cbiAgICovXG4gIFRzSGVscGVyU3ByZWFkLFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGBfX3NwcmVhZEFycmF5c2AgVHlwZVNjcmlwdCBoZWxwZXIgZnVuY3Rpb24uXG4gICAqL1xuICBUc0hlbHBlclNwcmVhZEFycmF5cyxcbn1cblxuLyoqXG4gKiBBIHBhcmFtZXRlciB0byBhIGZ1bmN0aW9uIG9yIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXIge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcGFyYW1ldGVyLCBpZiBhdmFpbGFibGUuXG4gICAqL1xuICBuYW1lOiBzdHJpbmd8bnVsbDtcblxuICAvKipcbiAgICogRGVjbGFyYXRpb24gd2hpY2ggY3JlYXRlZCB0aGlzIHBhcmFtZXRlci5cbiAgICovXG4gIG5vZGU6IHRzLlBhcmFtZXRlckRlY2xhcmF0aW9uO1xuXG4gIC8qKlxuICAgKiBFeHByZXNzaW9uIHdoaWNoIHJlcHJlc2VudHMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciwgaWYgYW55LlxuICAgKi9cbiAgaW5pdGlhbGl6ZXI6IHRzLkV4cHJlc3Npb258bnVsbDtcbn1cblxuLyoqXG4gKiBUaGUgc291cmNlIG9mIGFuIGltcG9ydGVkIHN5bWJvbCwgaW5jbHVkaW5nIHRoZSBvcmlnaW5hbCBzeW1ib2wgbmFtZSBhbmQgdGhlIG1vZHVsZSBmcm9tIHdoaWNoIGl0XG4gKiB3YXMgaW1wb3J0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBpbXBvcnRlZCBzeW1ib2wgdW5kZXIgd2hpY2ggaXQgd2FzIGV4cG9ydGVkIChub3QgaW1wb3J0ZWQpLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kdWxlIGZyb20gd2hpY2ggdGhlIHN5bWJvbCB3YXMgaW1wb3J0ZWQuXG4gICAqXG4gICAqIFRoaXMgY291bGQgZWl0aGVyIGJlIGFuIGFic29sdXRlIG1vZHVsZSBuYW1lIChAYW5ndWxhci9jb3JlIGZvciBleGFtcGxlKSBvciBhIHJlbGF0aXZlIHBhdGguXG4gICAqL1xuICBmcm9tOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgZW51bSBtZW1iZXIgZXh0cmFjdGVkIGZyb20gSmF2YVNjcmlwdCB3aGVuIG5vIGB0cy5FbnVtRGVjbGFyYXRpb25gIGlzIGF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnVtTWVtYmVyIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBlbnVtIG1lbWJlci5cbiAgICovXG4gIG5hbWU6IHRzLlByb3BlcnR5TmFtZTtcblxuICAvKipcbiAgICogVGhlIGluaXRpYWxpemVyIGV4cHJlc3Npb24gb2YgdGhlIGVudW0gbWVtYmVyLiBVbmxpa2UgaW4gVHlwZVNjcmlwdCwgdGhpcyBpcyBhbHdheXMgYXZhaWxhYmxlXG4gICAqIGluIGVtaXR0ZWQgSmF2YVNjcmlwdC5cbiAgICovXG4gIGluaXRpYWxpemVyOiB0cy5FeHByZXNzaW9uO1xufVxuXG4vKipcbiAqIEJhc2UgdHlwZSBmb3IgYWxsIGBEZWNsYXJhdGlvbmBzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VEZWNsYXJhdGlvbjxUIGV4dGVuZHMgdHMuRGVjbGFyYXRpb24gPSB0cy5EZWNsYXJhdGlvbj4ge1xuICAvKipcbiAgICogVGhlIGFic29sdXRlIG1vZHVsZSBwYXRoIGZyb20gd2hpY2ggdGhlIHN5bWJvbCB3YXMgaW1wb3J0ZWQgaW50byB0aGUgYXBwbGljYXRpb24sIGlmIHRoZSBzeW1ib2xcbiAgICogd2FzIGltcG9ydGVkIHZpYSBhbiBhYnNvbHV0ZSBtb2R1bGUgKGV2ZW4gdGhyb3VnaCBhIGNoYWluIG9mIHJlLWV4cG9ydHMpLiBJZiB0aGUgc3ltYm9sIGlzIHBhcnRcbiAgICogb2YgdGhlIGFwcGxpY2F0aW9uIGFuZCB3YXMgbm90IGltcG9ydGVkIGZyb20gYW4gYWJzb2x1dGUgcGF0aCwgdGhpcyB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIHZpYU1vZHVsZTogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgcmVmZXJlbmNlIHRvIHRoZSBkZWNsYXJhdGlvbiBpdHNlbGYsIGlmIG9uZSBleGlzdHMuXG4gICAqL1xuICBub2RlOiBUfG51bGw7XG5cbiAgLyoqXG4gICAqIElmIHNldCwgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBrbm93biBkZWNsYXJhdGlvbiB0aGlzIGRlY2xhcmF0aW9uIHJlc29sdmVzIHRvLlxuICAgKi9cbiAga25vd246IEtub3duRGVjbGFyYXRpb258bnVsbDtcbn1cblxuLyoqXG4gKiBBIGRlY2xhcmF0aW9uIHRoYXQgaGFzIGFuIGFzc29jaWF0ZWQgVHlwZVNjcmlwdCBgdHMuRGVjbGFyYXRpb25gLlxuICpcbiAqIFRoZSBhbHRlcm5hdGl2ZSBpcyBhbiBgSW5saW5lRGVjbGFyYXRpb25gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmNyZXRlRGVjbGFyYXRpb248VCBleHRlbmRzIHRzLkRlY2xhcmF0aW9uID0gdHMuRGVjbGFyYXRpb24+IGV4dGVuZHNcbiAgICBCYXNlRGVjbGFyYXRpb248VD4ge1xuICBub2RlOiBUO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IHJlcHJlc2VudHMgYSBzcGVjaWFsIGlkZW50aXR5IG9mIHRoZSBkZWNsYXJhdGlvbiwgb3IgYG51bGxgIGlmIHRoZSBkZWNsYXJhdGlvblxuICAgKiBkb2VzIG5vdCBoYXZlIGEgc3BlY2lhbCBpZGVudGl0eS5cbiAgICovXG4gIGlkZW50aXR5OiBTcGVjaWFsRGVjbGFyYXRpb25JZGVudGl0eXxudWxsO1xufVxuXG5leHBvcnQgdHlwZSBTcGVjaWFsRGVjbGFyYXRpb25JZGVudGl0eSA9IERvd25sZXZlbGVkRW51bTtcblxuZXhwb3J0IGNvbnN0IGVudW0gU3BlY2lhbERlY2xhcmF0aW9uS2luZCB7XG4gIERvd25sZXZlbGVkRW51bSxcbn1cblxuLyoqXG4gKiBBIHNwZWNpYWwgZGVjbGFyYXRpb24gaWRlbnRpdHkgdGhhdCByZXByZXNlbnRzIGFuIGVudW0uIFRoaXMgaXMgdXNlZCBpbiBkb3dubGV2ZWxlZCBmb3JtcyB3aGVyZVxuICogYSBgdHMuRW51bURlY2xhcmF0aW9uYCBpcyBlbWl0dGVkIGluIGFuIGFsdGVybmF0aXZlIGZvcm0sIGUuZy4gYW4gSUlGRSBjYWxsIHRoYXQgZGVjbGFyZXMgYWxsXG4gKiBtZW1iZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvd25sZXZlbGVkRW51bSB7XG4gIGtpbmQ6IFNwZWNpYWxEZWNsYXJhdGlvbktpbmQuRG93bmxldmVsZWRFbnVtO1xuICBlbnVtTWVtYmVyczogRW51bU1lbWJlcltdO1xufVxuXG4vKipcbiAqIEEgZGVjbGFyYXRpb24gdGhhdCBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgVHlwZVNjcmlwdCBgdHMuRGVjbGFyYXRpb25gLCBvbmx5IGFcbiAqIGB0cy5FeHByZXNzaW9uYC5cbiAqXG4gKiBUaGlzIGNhbiBvY2N1ciBpbiBzb21lIGRvd25sZXZlbGluZ3Mgd2hlbiBhbiBgZXhwb3J0IGNvbnN0IFZBUiA9IC4uLjtgIChhIGB0cy5EZWNsYXJhdGlvbmApIGlzXG4gKiB0cmFuc3BpbGVkIHRvIGFuIGFzc2lnbm1lbnQgc3RhdGVtZW50IChlLmcuIGBleHBvcnRzLlZBUiA9IC4uLjtgKS4gVGhlcmUgaXMgbm8gYHRzLkRlY2xhcmF0aW9uYFxuICogYXNzb2NpYXRlZCB3aXRoIGBWQVJgIGluIHRoYXQgY2FzZSwgb25seSBhbiBleHByZXNzaW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElubGluZURlY2xhcmF0aW9uIGV4dGVuZHMgQmFzZURlY2xhcmF0aW9uIHtcbiAgbm9kZTogbnVsbDtcblxuICAvKipcbiAgICogVGhlIGB0cy5FeHByZXNzaW9uYCB3aGljaCBjb25zdGl0dXRlcyB0aGUgdmFsdWUgb2YgdGhlIGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgZXhwcmVzc2lvbjogdHMuRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBUaGUgZGVjbGFyYXRpb24gb2YgYSBzeW1ib2wsIGFsb25nIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgaG93IGl0IHdhcyBpbXBvcnRlZCBpbnRvIHRoZVxuICogYXBwbGljYXRpb24uXG4gKlxuICogVGhpcyBjYW4gZWl0aGVyIGJlIGEgYENvbmNyZXRlRGVjbGFyYXRpb25gIGlmIHRoZSB1bmRlcmx5aW5nIFR5cGVTY3JpcHQgbm9kZSBmb3IgdGhlIHN5bWJvbCBpcyBhblxuICogYWN0dWFsIGB0cy5EZWNsYXJhdGlvbmAsIG9yIGFuIGBJbmxpbmVEZWNsYXJhdGlvbmAgaWYgdGhlIGRlY2xhcmF0aW9uIHdhcyB0cmFuc3BpbGVkIGluIGNlcnRhaW5cbiAqIGRvd25sZXZlbGluZ3MgdG8gYSBgdHMuRXhwcmVzc2lvbmAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGVjbGFyYXRpb248VCBleHRlbmRzIHRzLkRlY2xhcmF0aW9uID0gdHMuRGVjbGFyYXRpb24+ID1cbiAgICBDb25jcmV0ZURlY2xhcmF0aW9uPFQ+fElubGluZURlY2xhcmF0aW9uO1xuXG4vKipcbiAqIEFic3RyYWN0cyByZWZsZWN0aW9uIG9wZXJhdGlvbnMgb24gYSBUeXBlU2NyaXB0IEFTVC5cbiAqXG4gKiBEZXBlbmRpbmcgb24gdGhlIGZvcm1hdCBvZiB0aGUgY29kZSBiZWluZyBpbnRlcnByZXRlZCwgZGlmZmVyZW50IGNvbmNlcHRzIGFyZSByZXByZXNlbnRlZFxuICogd2l0aCBkaWZmZXJlbnQgc3ludGFjdGljYWwgc3RydWN0dXJlcy4gVGhlIGBSZWZsZWN0aW9uSG9zdGAgYWJzdHJhY3RzIG92ZXIgdGhvc2UgZGlmZmVyZW5jZXMgYW5kXG4gKiBwcmVzZW50cyBhIHNpbmdsZSBBUEkgYnkgd2hpY2ggdGhlIGNvbXBpbGVyIGNhbiBxdWVyeSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQVNULlxuICpcbiAqIEFsbCBvcGVyYXRpb25zIG9uIHRoZSBgUmVmbGVjdGlvbkhvc3RgIHJlcXVpcmUgdGhlIHVzZSBvZiBUeXBlU2NyaXB0IGB0cy5Ob2RlYHMgd2l0aCBiaW5kaW5nXG4gKiBpbmZvcm1hdGlvbiBhbHJlYWR5IGF2YWlsYWJsZSAodGhhdCBpcywgbm9kZXMgdGhhdCBjb21lIGZyb20gYSBgdHMuUHJvZ3JhbWAgdGhhdCBoYXMgYmVlblxuICogdHlwZS1jaGVja2VkLCBhbmQgYXJlIG5vdCBzeW50aGV0aWNhbGx5IGNyZWF0ZWQpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZmxlY3Rpb25Ib3N0IHtcbiAgLyoqXG4gICAqIEV4YW1pbmUgYSBkZWNsYXJhdGlvbiAoZm9yIGV4YW1wbGUsIG9mIGEgY2xhc3Mgb3IgZnVuY3Rpb24pIGFuZCByZXR1cm4gbWV0YWRhdGEgYWJvdXQgYW55XG4gICAqIGRlY29yYXRvcnMgcHJlc2VudCBvbiB0aGUgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBkZWNsYXJhdGlvbiBhIFR5cGVTY3JpcHQgYHRzLkRlY2xhcmF0aW9uYCBub2RlIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3IgZnVuY3Rpb24gb3ZlclxuICAgKiB3aGljaCB0byByZWZsZWN0LiBGb3IgZXhhbXBsZSwgaWYgdGhlIGludGVudCBpcyB0byByZWZsZWN0IHRoZSBkZWNvcmF0b3JzIG9mIGEgY2xhc3MgYW5kIHRoZVxuICAgKiBzb3VyY2UgaXMgaW4gRVM2IGZvcm1hdCwgdGhpcyB3aWxsIGJlIGEgYHRzLkNsYXNzRGVjbGFyYXRpb25gIG5vZGUuIElmIHRoZSBzb3VyY2UgaXMgaW4gRVM1XG4gICAqIGZvcm1hdCwgdGhpcyBtaWdodCBiZSBhIGB0cy5WYXJpYWJsZURlY2xhcmF0aW9uYCBhcyBjbGFzc2VzIGluIEVTNSBhcmUgcmVwcmVzZW50ZWQgYXMgdGhlXG4gICAqIHJlc3VsdCBvZiBhbiBJSUZFIGV4ZWN1dGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgYERlY29yYXRvcmAgbWV0YWRhdGEgaWYgZGVjb3JhdG9ycyBhcmUgcHJlc2VudCBvbiB0aGUgZGVjbGFyYXRpb24sIG9yXG4gICAqIGBudWxsYCBpZiBlaXRoZXIgbm8gZGVjb3JhdG9ycyB3ZXJlIHByZXNlbnQgb3IgaWYgdGhlIGRlY2xhcmF0aW9uIGlzIG5vdCBvZiBhIGRlY29yYXRhYmxlIHR5cGUuXG4gICAqL1xuICBnZXREZWNvcmF0b3JzT2ZEZWNsYXJhdGlvbihkZWNsYXJhdGlvbjogdHMuRGVjbGFyYXRpb24pOiBEZWNvcmF0b3JbXXxudWxsO1xuXG4gIC8qKlxuICAgKiBFeGFtaW5lIGEgZGVjbGFyYXRpb24gd2hpY2ggc2hvdWxkIGJlIG9mIGEgY2xhc3MsIGFuZCByZXR1cm4gbWV0YWRhdGEgYWJvdXQgdGhlIG1lbWJlcnMgb2YgdGhlXG4gICAqIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhenogYSBgQ2xhc3NEZWNsYXJhdGlvbmAgcmVwcmVzZW50aW5nIHRoZSBjbGFzcyBvdmVyIHdoaWNoIHRvIHJlZmxlY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIGBDbGFzc01lbWJlcmAgbWV0YWRhdGEgcmVwcmVzZW50aW5nIHRoZSBtZW1iZXJzIG9mIHRoZSBjbGFzcy5cbiAgICpcbiAgICogQHRocm93cyBpZiBgZGVjbGFyYXRpb25gIGRvZXMgbm90IHJlc29sdmUgdG8gYSBjbGFzcyBkZWNsYXJhdGlvbi5cbiAgICovXG4gIGdldE1lbWJlcnNPZkNsYXNzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogQ2xhc3NNZW1iZXJbXTtcblxuICAvKipcbiAgICogUmVmbGVjdCBvdmVyIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGNsYXNzIGFuZCByZXR1cm4gbWV0YWRhdGEgYWJvdXQgaXRzIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIG9ubHkgbG9va3MgYXQgdGhlIGNvbnN0cnVjdG9yIG9mIGEgY2xhc3MgZGlyZWN0bHkgYW5kIG5vdCBhdCBhbnkgaW5oZXJpdGVkXG4gICAqIGNvbnN0cnVjdG9ycy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXp6IGEgYENsYXNzRGVjbGFyYXRpb25gIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3ZlciB3aGljaCB0byByZWZsZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiBgUGFyYW1ldGVyYCBtZXRhZGF0YSByZXByZXNlbnRpbmcgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGNvbnN0cnVjdG9yLCBpZlxuICAgKiBhIGNvbnN0cnVjdG9yIGV4aXN0cy4gSWYgdGhlIGNvbnN0cnVjdG9yIGV4aXN0cyBhbmQgaGFzIDAgcGFyYW1ldGVycywgdGhpcyBhcnJheSB3aWxsIGJlIGVtcHR5LlxuICAgKiBJZiB0aGUgY2xhc3MgaGFzIG5vIGNvbnN0cnVjdG9yLCB0aGlzIG1ldGhvZCByZXR1cm5zIGBudWxsYC5cbiAgICovXG4gIGdldENvbnN0cnVjdG9yUGFyYW1ldGVycyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IEN0b3JQYXJhbWV0ZXJbXXxudWxsO1xuXG4gIC8qKlxuICAgKiBSZWZsZWN0IG92ZXIgYSBmdW5jdGlvbiBhbmQgcmV0dXJuIG1ldGFkYXRhIGFib3V0IGl0cyBwYXJhbWV0ZXJzIGFuZCBib2R5LlxuICAgKlxuICAgKiBGdW5jdGlvbnMgaW4gVHlwZVNjcmlwdCBhbmQgRVM1IGNvZGUgaGF2ZSBkaWZmZXJlbnQgQVNUIHJlcHJlc2VudGF0aW9ucywgaW4gcGFydGljdWxhciBhcm91bmRcbiAgICogZGVmYXVsdCB2YWx1ZXMgZm9yIHBhcmFtZXRlcnMuIEEgVHlwZVNjcmlwdCBmdW5jdGlvbiBoYXMgaXRzIGRlZmF1bHQgdmFsdWUgYXMgdGhlIGluaXRpYWxpemVyXG4gICAqIG9uIHRoZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24sIHdoZXJlYXMgYW4gRVM1IGZ1bmN0aW9uIGhhcyBpdHMgZGVmYXVsdCB2YWx1ZSBzZXQgaW4gYSBzdGF0ZW1lbnRcbiAgICogb2YgdGhlIGZvcm06XG4gICAqXG4gICAqIGlmIChwYXJhbSA9PT0gdm9pZCAwKSB7IHBhcmFtID0gMzsgfVxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBhYnN0cmFjdHMgb3ZlciB0aGVzZSBkZXRhaWxzLCBhbmQgaW50ZXJwcmV0cyB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gYW5kIGJvZHkgdG9cbiAgICogZXh0cmFjdCBwYXJhbWV0ZXIgZGVmYXVsdCB2YWx1ZXMgYW5kIHRoZSBcInJlYWxcIiBib2R5LlxuICAgKlxuICAgKiBBIGN1cnJlbnQgbGltaXRhdGlvbiBpcyB0aGF0IHRoaXMgbWV0YWRhdGEgaGFzIG5vIHJlcHJlc2VudGF0aW9uIGZvciBzaG9ydGhhbmQgYXNzaWdubWVudCBvZlxuICAgKiBwYXJhbWV0ZXIgb2JqZWN0cyBpbiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLlxuICAgKlxuICAgKiBAcGFyYW0gZm4gYSBUeXBlU2NyaXB0IGB0cy5EZWNsYXJhdGlvbmAgbm9kZSByZXByZXNlbnRpbmcgdGhlIGZ1bmN0aW9uIG92ZXIgd2hpY2ggdG8gcmVmbGVjdC5cbiAgICpcbiAgICogQHJldHVybnMgYSBgRnVuY3Rpb25EZWZpbml0aW9uYCBnaXZpbmcgbWV0YWRhdGEgYWJvdXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uXG4gICAqL1xuICBnZXREZWZpbml0aW9uT2ZGdW5jdGlvbihmbjogdHMuTm9kZSk6IEZ1bmN0aW9uRGVmaW5pdGlvbnxudWxsO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgYW4gaWRlbnRpZmllciB3YXMgaW1wb3J0ZWQgZnJvbSBhbm90aGVyIG1vZHVsZSBhbmQgcmV0dXJuIGBJbXBvcnRgIG1ldGFkYXRhXG4gICAqIGRlc2NyaWJpbmcgaXRzIG9yaWdpbi5cbiAgICpcbiAgICogQHBhcmFtIGlkIGEgVHlwZVNjcmlwdCBgdHMuSWRlbnRpZmVyYCB0byByZWZsZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyBtZXRhZGF0YSBhYm91dCB0aGUgYEltcG9ydGAgaWYgdGhlIGlkZW50aWZpZXIgd2FzIGltcG9ydGVkIGZyb20gYW5vdGhlciBtb2R1bGUsIG9yXG4gICAqIGBudWxsYCBpZiB0aGUgaWRlbnRpZmllciBkb2Vzbid0IHJlc29sdmUgdG8gYW4gaW1wb3J0IGJ1dCBpbnN0ZWFkIGlzIGxvY2FsbHkgZGVmaW5lZC5cbiAgICovXG4gIGdldEltcG9ydE9mSWRlbnRpZmllcihpZDogdHMuSWRlbnRpZmllcik6IEltcG9ydHxudWxsO1xuXG4gIC8qKlxuICAgKiBUcmFjZSBhbiBpZGVudGlmaWVyIHRvIGl0cyBkZWNsYXJhdGlvbiwgaWYgcG9zc2libGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGF0dGVtcHRzIHRvIHJlc29sdmUgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBnaXZlbiBpZGVudGlmaWVyLCB0cmFjaW5nIGJhY2sgdGhyb3VnaFxuICAgKiBpbXBvcnRzIGFuZCByZS1leHBvcnRzIHVudGlsIHRoZSBvcmlnaW5hbCBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQgaXMgZm91bmQuIEEgYERlY2xhcmF0aW9uYFxuICAgKiBvYmplY3QgaXMgcmV0dXJuZWQgaWYgdGhlIG9yaWdpbmFsIGRlY2xhcmF0aW9uIGlzIGZvdW5kLCBvciBgbnVsbGAgaXMgcmV0dXJuZWQgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBJZiB0aGUgZGVjbGFyYXRpb24gaXMgaW4gYSBkaWZmZXJlbnQgbW9kdWxlLCBhbmQgdGhhdCBtb2R1bGUgaXMgaW1wb3J0ZWQgdmlhIGFuIGFic29sdXRlIHBhdGgsXG4gICAqIHRoaXMgbWV0aG9kIGFsc28gcmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaW1wb3J0ZWQgbW9kdWxlLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGNvZGUgaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiBpbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gICAqXG4gICAqIGV4cG9ydCBjb25zdCBST1VURVMgPSBSb3V0ZXJNb2R1bGUuZm9yUm9vdChbLi4uXSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBhbmQgaWYgYGdldERlY2xhcmF0aW9uT2ZJZGVudGlmaWVyYCBpcyBjYWxsZWQgb24gYFJvdXRlck1vZHVsZWAgaW4gdGhlIGBST1VURVNgIGV4cHJlc3Npb24sXG4gICAqIHRoZW4gaXQgd291bGQgdHJhY2UgYFJvdXRlck1vZHVsZWAgdmlhIGl0cyBpbXBvcnQgZnJvbSBgQGFuZ3VsYXIvY29yZWAsIGFuZCBub3RlIHRoYXQgdGhlXG4gICAqIGRlZmluaXRpb24gd2FzIGltcG9ydGVkIGZyb20gYEBhbmd1bGFyL2NvcmVgIGludG8gdGhlIGFwcGxpY2F0aW9uIHdoZXJlIGl0IHdhcyByZWZlcmVuY2VkLlxuICAgKlxuICAgKiBJZiB0aGUgZGVmaW5pdGlvbiBpcyByZS1leHBvcnRlZCBzZXZlcmFsIHRpbWVzIGZyb20gZGlmZmVyZW50IGFic29sdXRlIG1vZHVsZSBuYW1lcywgb25seVxuICAgKiB0aGUgZmlyc3Qgb25lICh0aGUgb25lIGJ5IHdoaWNoIHRoZSBhcHBsaWNhdGlvbiByZWZlcnMgdG8gdGhlIG1vZHVsZSkgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIFRoaXMgbW9kdWxlIG5hbWUgaXMgcmV0dXJuZWQgaW4gdGhlIGB2aWFNb2R1bGVgIGZpZWxkIG9mIHRoZSBgRGVjbGFyYXRpb25gLiBJZiBUaGUgZGVjbGFyYXRpb25cbiAgICogaXMgcmVsYXRpdmUgdG8gdGhlIGFwcGxpY2F0aW9uIGl0c2VsZiBhbmQgdGhlcmUgd2FzIG5vIGltcG9ydCB0aHJvdWdoIGFuIGFic29sdXRlIHBhdGgsIHRoZW5cbiAgICogYHZpYU1vZHVsZWAgaXMgYG51bGxgLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgYSBUeXBlU2NyaXB0IGB0cy5JZGVudGlmaWVyYCB0byB0cmFjZSBiYWNrIHRvIGEgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIG1ldGFkYXRhIGFib3V0IHRoZSBgRGVjbGFyYXRpb25gIGlmIHRoZSBvcmlnaW5hbCBkZWNsYXJhdGlvbiBpcyBmb3VuZCwgb3IgYG51bGxgXG4gICAqIG90aGVyd2lzZS5cbiAgICovXG4gIGdldERlY2xhcmF0aW9uT2ZJZGVudGlmaWVyKGlkOiB0cy5JZGVudGlmaWVyKTogRGVjbGFyYXRpb258bnVsbDtcblxuICAvKipcbiAgICogQ29sbGVjdCB0aGUgZGVjbGFyYXRpb25zIGV4cG9ydGVkIGZyb20gYSBtb2R1bGUgYnkgbmFtZS5cbiAgICpcbiAgICogSXRlcmF0ZXMgb3ZlciB0aGUgZXhwb3J0cyBvZiBhIG1vZHVsZSAoaW5jbHVkaW5nIHJlLWV4cG9ydHMpIGFuZCByZXR1cm5zIGEgbWFwIG9mIGV4cG9ydFxuICAgKiBuYW1lIHRvIGl0cyBgRGVjbGFyYXRpb25gLiBJZiBhbiBleHBvcnRlZCB2YWx1ZSBpcyBpdHNlbGYgcmUtZXhwb3J0ZWQgZnJvbSBhbm90aGVyIG1vZHVsZSxcbiAgICogdGhlIGBEZWNsYXJhdGlvbmAncyBgdmlhTW9kdWxlYCB3aWxsIHJlZmxlY3QgdGhhdC5cbiAgICpcbiAgICogQHBhcmFtIG5vZGUgYSBUeXBlU2NyaXB0IGB0cy5Ob2RlYCByZXByZXNlbnRpbmcgdGhlIG1vZHVsZSAoZm9yIGV4YW1wbGUgYSBgdHMuU291cmNlRmlsZWApIGZvclxuICAgKiB3aGljaCB0byBjb2xsZWN0IGV4cG9ydHMuXG4gICAqXG4gICAqIEByZXR1cm5zIGEgbWFwIG9mIGBEZWNsYXJhdGlvbmBzIGZvciB0aGUgbW9kdWxlJ3MgZXhwb3J0cywgYnkgbmFtZS5cbiAgICovXG4gIGdldEV4cG9ydHNPZk1vZHVsZShtb2R1bGU6IHRzLk5vZGUpOiBNYXA8c3RyaW5nLCBEZWNsYXJhdGlvbj58bnVsbDtcblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbm9kZSBhY3R1YWxseSByZXByZXNlbnRzIGEgY2xhc3MuXG4gICAqL1xuICBpc0NsYXNzKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIENsYXNzRGVjbGFyYXRpb247XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gZGVjbGFyYXRpb24sIHdoaWNoIHNob3VsZCBiZSBhIGNsYXNzLCBoYXMgYSBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhenogYSBgQ2xhc3NEZWNsYXJhdGlvbmAgcmVwcmVzZW50aW5nIHRoZSBjbGFzcyBvdmVyIHdoaWNoIHRvIHJlZmxlY3QuXG4gICAqL1xuICBoYXNCYXNlQ2xhc3MoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBHZXQgYW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGJhc2UgY2xhc3MgKGlmIGFueSkgb2YgdGhlIGdpdmVuIGBjbGF6emAuXG4gICAqXG4gICAqIFRoaXMgZXhwcmVzc2lvbiBpcyBtb3N0IGNvbW1vbmx5IGFuIElkZW50aWZpZXIsIGJ1dCBpcyBwb3NzaWJsZSB0byBpbmhlcml0IGZyb20gYSBtb3JlIGR5bmFtaWNcbiAgICogZXhwcmVzc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIGNsYXp6IHRoZSBjbGFzcyB3aG9zZSBiYXNlIHdlIHdhbnQgdG8gZ2V0LlxuICAgKi9cbiAgZ2V0QmFzZUNsYXNzRXhwcmVzc2lvbihjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IHRzLkV4cHJlc3Npb258bnVsbDtcblxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMgb2YgYSBnaXZlbiBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXp6IGEgYENsYXNzRGVjbGFyYXRpb25gIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3ZlciB3aGljaCB0byByZWZsZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB0aGUgbnVtYmVyIG9mIHR5cGUgcGFyYW1ldGVycyBvZiB0aGUgY2xhc3MsIGlmIGtub3duLCBvciBgbnVsbGAgaWYgdGhlIGRlY2xhcmF0aW9uXG4gICAqIGlzIG5vdCBhIGNsYXNzIG9yIGhhcyBhbiB1bmtub3duIG51bWJlciBvZiB0eXBlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBnZXRHZW5lcmljQXJpdHlPZkNsYXNzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogbnVtYmVyfG51bGw7XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGFzc2lnbmVkIHZhbHVlIG9mIGEgdmFyaWFibGUgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIE5vcm1hbGx5IHRoaXMgd2lsbCBiZSB0aGUgaW5pdGlhbGl6ZXIgb2YgdGhlIGRlY2xhcmF0aW9uLCBidXQgd2hlcmUgdGhlIHZhcmlhYmxlIGlzXG4gICAqIG5vdCBhIGBjb25zdGAgd2UgbWF5IG5lZWQgdG8gbG9vayBlbHNld2hlcmUgZm9yIHRoZSB2YXJpYWJsZSdzIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gZGVjbGFyYXRpb24gYSBUeXBlU2NyaXB0IHZhcmlhYmxlIGRlY2xhcmF0aW9uLCB3aG9zZSB2YWx1ZSB3ZSB3YW50LlxuICAgKiBAcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLCBhcyBhIFR5cGVTY3JpcHQgZXhwcmVzc2lvbiBub2RlLCBvciBgdW5kZWZpbmVkYFxuICAgKiBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbXB1dGVkLlxuICAgKi9cbiAgZ2V0VmFyaWFibGVWYWx1ZShkZWNsYXJhdGlvbjogdHMuVmFyaWFibGVEZWNsYXJhdGlvbik6IHRzLkV4cHJlc3Npb258bnVsbDtcblxuICAvKipcbiAgICogVGFrZSBhbiBleHBvcnRlZCBkZWNsYXJhdGlvbiAobWF5YmUgYSBjbGFzcyBkb3duLWxldmVsZWQgdG8gYSB2YXJpYWJsZSkgYW5kIGxvb2sgdXAgdGhlXG4gICAqIGRlY2xhcmF0aW9uIG9mIGl0cyB0eXBlIGluIGEgc2VwYXJhdGUgLmQudHMgdHJlZS5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBhbGxvd2VkIHRvIHJldHVybiBgbnVsbGAgaWYgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCBkb2VzIG5vdCBoYXZlIGFcbiAgICogc2VwYXJhdGUgLmQudHMgdHJlZS4gV2hlbiBjb21waWxpbmcgVHlwZVNjcmlwdCBjb2RlIHRoaXMgaXMgYWx3YXlzIHRoZSBjYXNlLCBzaW5jZSAuZC50cyBmaWxlc1xuICAgKiBhcmUgcHJvZHVjZWQgb25seSBkdXJpbmcgdGhlIGVtaXQgb2Ygc3VjaCBhIGNvbXBpbGF0aW9uLiBXaGVuIGNvbXBpbGluZyAuanMgY29kZSwgaG93ZXZlcixcbiAgICogdGhlcmUgaXMgZnJlcXVlbnRseSBhIHBhcmFsbGVsIC5kLnRzIHRyZWUgd2hpY2ggdGhpcyBtZXRob2QgZXhwb3Nlcy5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBgdHMuRGVjbGFyYXRpb25gIHJldHVybmVkIGZyb20gdGhpcyBmdW5jdGlvbiBtYXkgbm90IGJlIGZyb20gdGhlIHNhbWVcbiAgICogYHRzLlByb2dyYW1gIGFzIHRoZSBpbnB1dCBkZWNsYXJhdGlvbi5cbiAgICovXG4gIGdldER0c0RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uOiB0cy5EZWNsYXJhdGlvbik6IHRzLkRlY2xhcmF0aW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIEdldCBhIGB0cy5JZGVudGlmaWVyYCBmb3IgYSBnaXZlbiBgQ2xhc3NEZWNsYXJhdGlvbmAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gdGhlIGNsYXNzXG4gICAqIHdpdGhpbiBpdHMgZGVmaW5pdGlvbiAoc3VjaCBhcyBpbiBzdGF0aWMgZmllbGRzKS5cbiAgICpcbiAgICogVGhpcyBjYW4gZGlmZmVyIGZyb20gYGNsYXp6Lm5hbWVgIHdoZW4gbmdjYyBydW5zIG92ZXIgRVM1IGNvZGUsIHNpbmNlIHRoZSBjbGFzcyBtYXkgaGF2ZSBhXG4gICAqIGRpZmZlcmVudCBuYW1lIHdpdGhpbiBpdHMgSUlGRSB3cmFwcGVyIHRoYW4gaXQgZG9lcyBleHRlcm5hbGx5LlxuICAgKi9cbiAgZ2V0SW50ZXJuYWxOYW1lT2ZDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IHRzLklkZW50aWZpZXI7XG5cbiAgLyoqXG4gICAqIEdldCBhIGB0cy5JZGVudGlmaWVyYCBmb3IgYSBnaXZlbiBgQ2xhc3NEZWNsYXJhdGlvbmAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gdGhlIGNsYXNzXG4gICAqIGZyb20gc3RhdGVtZW50cyB0aGF0IGFyZSBcImFkamFjZW50XCIsIGFuZCBjb25jZXB0dWFsbHkgdGlnaHRseSBib3VuZCwgdG8gdGhlIGNsYXNzIGJ1dCBub3RcbiAgICogYWN0dWFsbHkgaW5zaWRlIGl0LlxuICAgKlxuICAgKiBTaW1pbGFyIHRvIGBnZXRJbnRlcm5hbE5hbWVPZkNsYXNzKClgLCB0aGlzIG5hbWUgY2FuIGRpZmZlciBmcm9tIGBjbGF6ei5uYW1lYCB3aGVuIG5nY2MgcnVuc1xuICAgKiBvdmVyIEVTNSBjb2RlLCBzaW5jZSB0aGVzZSBcImFkamFjZW50XCIgc3RhdGVtZW50cyBuZWVkIHRvIGV4aXN0IGluIHRoZSBJSUZFIHdoZXJlIHRoZSBjbGFzcyBtYXlcbiAgICogaGF2ZSBhIGRpZmZlcmVudCBuYW1lIHRoYW4gaXQgZG9lcyBleHRlcm5hbGx5LlxuICAgKi9cbiAgZ2V0QWRqYWNlbnROYW1lT2ZDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IHRzLklkZW50aWZpZXI7XG59XG4iXX0=
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcmVmbGVjdGlvbi9zcmMvaG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7SUFFSCwrQkFBaUM7SUFrRXBCLFFBQUEsU0FBUyxHQUFHO1FBQ3ZCLFlBQVksRUFBRSxVQUFDLFNBQW9CO1lBQ2pDLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQzNCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQzthQUN2QjtpQkFBTTtnQkFDTCxrRUFBa0U7Z0JBQ2xFLE9BQVEsU0FBZ0MsQ0FBQyxjQUFjLENBQUM7YUFDekQ7UUFDSCxDQUFDO0tBQ0YsQ0FBQztJQVdGLFNBQWdCLHFCQUFxQixDQUFDLEdBQWtCO1FBQ3RELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7WUFDdkIsRUFBRSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztnQkFDckUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUpELHNEQUlDO0lBbUJEOztPQUVHO0lBQ0gsSUFBWSxlQU1YO0lBTkQsV0FBWSxlQUFlO1FBQ3pCLG1FQUFXLENBQUE7UUFDWCx5REFBTSxDQUFBO1FBQ04seURBQU0sQ0FBQTtRQUNOLDZEQUFRLENBQUE7UUFDUix5REFBTSxDQUFBO0lBQ1IsQ0FBQyxFQU5XLGVBQWUsR0FBZix1QkFBZSxLQUFmLHVCQUFlLFFBTTFCO0lBdVVEOztPQUVHO0lBQ0gsSUFBWSxnQkFvQlg7SUFwQkQsV0FBWSxnQkFBZ0I7UUFDMUI7O1dBRUc7UUFDSCwyRUFBYyxDQUFBO1FBRWQ7O1dBRUc7UUFDSCwyRUFBYyxDQUFBO1FBRWQ7O1dBRUc7UUFDSCwyRUFBYyxDQUFBO1FBRWQ7O1dBRUc7UUFDSCx1RkFBb0IsQ0FBQTtJQUN0QixDQUFDLEVBcEJXLGdCQUFnQixHQUFoQix3QkFBZ0IsS0FBaEIsd0JBQWdCLFFBb0IzQjtJQTBHRDs7O09BR0c7SUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxJQUFpQjtRQUNyRCxPQUFPLElBQUksQ0FBQyxJQUFJLHFCQUE2QixDQUFDO0lBQ2hELENBQUM7SUFGRCxzREFFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuLyoqXG4gKiBNZXRhZGF0YSBleHRyYWN0ZWQgZnJvbSBhbiBpbnN0YW5jZSBvZiBhIGRlY29yYXRvciBvbiBhbm90aGVyIGRlY2xhcmF0aW9uLCBvciBzeW50aGVzaXplZCBmcm9tXG4gKiBvdGhlciBpbmZvcm1hdGlvbiBhYm91dCBhIGNsYXNzLlxuICovXG5leHBvcnQgdHlwZSBEZWNvcmF0b3IgPSBDb25jcmV0ZURlY29yYXRvcnxTeW50aGV0aWNEZWNvcmF0b3I7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZURlY29yYXRvciB7XG4gIC8qKlxuICAgKiBOYW1lIGJ5IHdoaWNoIHRoZSBkZWNvcmF0b3Igd2FzIGludm9rZWQgaW4gdGhlIHVzZXIncyBjb2RlLlxuICAgKlxuICAgKiBUaGlzIGlzIGRpc3RpbmN0IGZyb20gdGhlIG5hbWUgYnkgd2hpY2ggdGhlIGRlY29yYXRvciB3YXMgaW1wb3J0ZWQgKHRob3VnaCBpbiBwcmFjdGljZSB0aGV5XG4gICAqIHdpbGwgdXN1YWxseSBiZSB0aGUgc2FtZSkuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXIgd2hpY2ggcmVmZXJzIHRvIHRoZSBkZWNvcmF0b3IgaW4gdGhlIHVzZXIncyBjb2RlLlxuICAgKi9cbiAgaWRlbnRpZmllcjogRGVjb3JhdG9ySWRlbnRpZmllcnxudWxsO1xuXG4vKipcbiAqIGBJbXBvcnRgIGJ5IHdoaWNoIHRoZSBkZWNvcmF0b3Igd2FzIGJyb3VnaHQgaW50byB0aGUgbW9kdWxlIGluIHdoaWNoIGl0IHdhcyBpbnZva2VkLCBvciBgbnVsbGBcbiAqIGlmIHRoZSBkZWNvcmF0b3Igd2FzIGRlY2xhcmVkIGluIHRoZSBzYW1lIG1vZHVsZSBhbmQgbm90IGltcG9ydGVkLlxuICovXG5pbXBvcnQ6IEltcG9ydHxudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IHJlZmVyZW5jZSB0byB0aGUgZGVjb3JhdG9yIGl0c2VsZiwgb3IgYG51bGxgIGlmIHRoZSBkZWNvcmF0b3IgaXMgc3ludGhlc2l6ZWQgKGUuZy5cbiAgICogaW4gbmdjYykuXG4gICAqL1xuICBub2RlOiB0cy5Ob2RlfG51bGw7XG5cbiAgLyoqXG4gICAqIEFyZ3VtZW50cyBvZiB0aGUgaW52b2NhdGlvbiBvZiB0aGUgZGVjb3JhdG9yLCBpZiB0aGUgZGVjb3JhdG9yIGlzIGludm9rZWQsIG9yIGBudWxsYFxuICAgKiBvdGhlcndpc2UuXG4gICAqL1xuICBhcmdzOiB0cy5FeHByZXNzaW9uW118bnVsbDtcbn1cblxuLyoqXG4gKiBNZXRhZGF0YSBleHRyYWN0ZWQgZnJvbSBhbiBpbnN0YW5jZSBvZiBhIGRlY29yYXRvciBvbiBhbm90aGVyIGRlY2xhcmF0aW9uLCB3aGljaCB3YXMgYWN0dWFsbHlcbiAqIHByZXNlbnQgaW4gYSBmaWxlLlxuICpcbiAqIENvbmNyZXRlIGRlY29yYXRvcnMgYWx3YXlzIGhhdmUgYW4gYGlkZW50aWZpZXJgIGFuZCBhIGBub2RlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25jcmV0ZURlY29yYXRvciBleHRlbmRzIEJhc2VEZWNvcmF0b3Ige1xuICBpZGVudGlmaWVyOiBEZWNvcmF0b3JJZGVudGlmaWVyO1xuICBub2RlOiB0cy5Ob2RlO1xufVxuXG4vKipcbiAqIFN5bnRoZXRpYyBkZWNvcmF0b3JzIG5ldmVyIGhhdmUgYW4gYGlkZW50aWZpZXJgIG9yIGEgYG5vZGVgLCBidXQga25vdyB0aGUgbm9kZSBmb3Igd2hpY2ggdGhleVxuICogd2VyZSBzeW50aGVzaXplZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW50aGV0aWNEZWNvcmF0b3IgZXh0ZW5kcyBCYXNlRGVjb3JhdG9yIHtcbiAgaWRlbnRpZmllcjogbnVsbDtcbiAgbm9kZTogbnVsbDtcblxuICAvKipcbiAgICogVGhlIGB0cy5Ob2RlYCBmb3Igd2hpY2ggdGhpcyBkZWNvcmF0b3Igd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBzeW50aGVzaXplZEZvcjogdHMuTm9kZTtcbn1cblxuZXhwb3J0IGNvbnN0IERlY29yYXRvciA9IHtcbiAgbm9kZUZvckVycm9yOiAoZGVjb3JhdG9yOiBEZWNvcmF0b3IpOiB0cy5Ob2RlID0+IHtcbiAgICBpZiAoZGVjb3JhdG9yLm5vZGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBkZWNvcmF0b3Iubm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETyhhbHhodWIpOiB3ZSBjYW4ndCByZWx5IG9uIG5hcnJvd2luZyB1bnRpbCBUUyAzLjYgaXMgaW4gZzMuXG4gICAgICByZXR1cm4gKGRlY29yYXRvciBhcyBTeW50aGV0aWNEZWNvcmF0b3IpLnN5bnRoZXNpemVkRm9yO1xuICAgIH1cbiAgfSxcbn07XG5cbi8qKlxuICogQSBkZWNvcmF0b3IgaXMgaWRlbnRpZmllZCBieSBlaXRoZXIgYSBzaW1wbGUgaWRlbnRpZmllciAoZS5nLiBgRGVjb3JhdG9yYCkgb3IsIGluIHNvbWUgY2FzZXMsXG4gKiBhIG5hbWVzcGFjZWQgcHJvcGVydHkgYWNjZXNzIChlLmcuIGBjb3JlLkRlY29yYXRvcmApLlxuICovXG5leHBvcnQgdHlwZSBEZWNvcmF0b3JJZGVudGlmaWVyID0gdHMuSWRlbnRpZmllcnxOYW1lc3BhY2VkSWRlbnRpZmllcjtcbmV4cG9ydCB0eXBlIE5hbWVzcGFjZWRJZGVudGlmaWVyID0gdHMuUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJntcbiAgZXhwcmVzc2lvbjogdHMuSWRlbnRpZmllcjtcbiAgbmFtZTogdHMuSWRlbnRpZmllclxufTtcbmV4cG9ydCBmdW5jdGlvbiBpc0RlY29yYXRvcklkZW50aWZpZXIoZXhwOiB0cy5FeHByZXNzaW9uKTogZXhwIGlzIERlY29yYXRvcklkZW50aWZpZXIge1xuICByZXR1cm4gdHMuaXNJZGVudGlmaWVyKGV4cCkgfHxcbiAgICAgIHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKGV4cCkgJiYgdHMuaXNJZGVudGlmaWVyKGV4cC5leHByZXNzaW9uKSAmJlxuICAgICAgdHMuaXNJZGVudGlmaWVyKGV4cC5uYW1lKTtcbn1cblxuLyoqXG4gKiBUaGUgYHRzLkRlY2xhcmF0aW9uYCBvZiBhIFwiY2xhc3NcIi5cbiAqXG4gKiBDbGFzc2VzIGFyZSByZXByZXNlbnRlZCBkaWZmZXJlbnRseSBpbiBkaWZmZXJlbnQgY29kZSBmb3JtYXRzOlxuICogLSBJbiBUUyBjb2RlLCB0aGV5IGFyZSB0eXBpY2FsbHkgZGVmaW5lZCB1c2luZyB0aGUgYGNsYXNzYCBrZXl3b3JkLlxuICogLSBJbiBFUzIwMTUgY29kZSwgdGhleSBhcmUgdXN1YWxseSBkZWZpbmVkIHVzaW5nIHRoZSBgY2xhc3NgIGtleXdvcmQsIGJ1dCB0aGV5IGNhbiBhbHNvIGJlXG4gKiAgIHZhcmlhYmxlIGRlY2xhcmF0aW9ucywgd2hpY2ggYXJlIGluaXRpYWxpemVkIHRvIGEgY2xhc3MgZXhwcmVzc2lvbiAoZS5nLlxuICogICBgbGV0IEZvbyA9IEZvbzEgPSBjbGFzcyBGb28ge31gKS5cbiAqIC0gSW4gRVM1IGNvZGUsIHRoZXkgYXJlIHR5cGljYWxseSBkZWZpbmVkIGFzIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBiZWluZyBhc3NpZ25lZCB0aGUgcmV0dXJuXG4gKiAgIHZhbHVlIG9mIGFuIElJRkUuIFRoZSBhY3R1YWwgXCJjbGFzc1wiIGlzIGltcGxlbWVudGVkIGFzIGEgY29uc3RydWN0b3IgZnVuY3Rpb24gaW5zaWRlIHRoZSBJSUZFLFxuICogICBidXQgdGhlIG91dGVyIHZhcmlhYmxlIGRlY2xhcmF0aW9uIHJlcHJlc2VudHMgdGhlIFwiY2xhc3NcIiB0byB0aGUgcmVzdCBvZiB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBGb3IgYFJlZmxlY3Rpb25Ib3N0YCBwdXJwb3NlcywgYSBjbGFzcyBkZWNsYXJhdGlvbiBzaG91bGQgYWx3YXlzIGhhdmUgYSBgbmFtZWAgaWRlbnRpZmllcixcbiAqIGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRvIHJlZmVyZW5jZSBpdCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgcHJvZ3JhbS5cbiAqL1xuZXhwb3J0IHR5cGUgQ2xhc3NEZWNsYXJhdGlvbjxUIGV4dGVuZHMgRGVjbGFyYXRpb25Ob2RlID0gRGVjbGFyYXRpb25Ob2RlPiA9IFQme25hbWU6IHRzLklkZW50aWZpZXJ9O1xuXG4vKipcbiAqIEFuIGVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIGtpbmRzIG9mIGNsYXNzIG1lbWJlcnMuXG4gKi9cbmV4cG9ydCBlbnVtIENsYXNzTWVtYmVyS2luZCB7XG4gIENvbnN0cnVjdG9yLFxuICBHZXR0ZXIsXG4gIFNldHRlcixcbiAgUHJvcGVydHksXG4gIE1ldGhvZCxcbn1cblxuLyoqXG4gKiBBIG1lbWJlciBvZiBhIGNsYXNzLCBzdWNoIGFzIGEgcHJvcGVydHksIG1ldGhvZCwgb3IgY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhc3NNZW1iZXIge1xuICAvKipcbiAgICogVHlwZVNjcmlwdCByZWZlcmVuY2UgdG8gdGhlIGNsYXNzIG1lbWJlciBpdHNlbGYsIG9yIG51bGwgaWYgaXQgaXMgbm90IGFwcGxpY2FibGUuXG4gICAqL1xuICBub2RlOiB0cy5Ob2RlfG51bGw7XG5cbiAgLyoqXG4gICAqIEluZGljYXRpb24gb2Ygd2hpY2ggdHlwZSBvZiBtZW1iZXIgdGhpcyBpcyAocHJvcGVydHksIG1ldGhvZCwgZXRjKS5cbiAgICovXG4gIGtpbmQ6IENsYXNzTWVtYmVyS2luZDtcblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBgdHMuVHlwZU5vZGVgIHJlcHJlc2VudGluZyB0aGUgdHlwZSBvZiB0aGUgbWVtYmVyLCBvciBgbnVsbGAgaWYgbm90IHByZXNlbnQgb3JcbiAgICogYXBwbGljYWJsZS5cbiAgICovXG4gIHR5cGU6IHRzLlR5cGVOb2RlfG51bGw7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGNsYXNzIG1lbWJlci5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBgdHMuSWRlbnRpZmllcmAgb3IgYHRzLlN0cmluZ0xpdGVyYWxgIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgbWVtYmVyLCBvciBgbnVsbGBcbiAgICogaWYgbm8gc3VjaCBub2RlIGlzIHByZXNlbnQuXG4gICAqXG4gICAqIFRoZSBgbmFtZU5vZGVgIGlzIHVzZWZ1bCBpbiB3cml0aW5nIHJlZmVyZW5jZXMgdG8gdGhpcyBtZW1iZXIgdGhhdCB3aWxsIGJlIGNvcnJlY3RseSBzb3VyY2UtXG4gICAqIG1hcHBlZCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBmaWxlLlxuICAgKi9cbiAgbmFtZU5vZGU6IHRzLklkZW50aWZpZXJ8dHMuU3RyaW5nTGl0ZXJhbHxudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGB0cy5FeHByZXNzaW9uYCB3aGljaCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZiB0aGUgbWVtYmVyLlxuICAgKlxuICAgKiBJZiB0aGUgbWVtYmVyIGlzIGEgcHJvcGVydHksIHRoaXMgd2lsbCBiZSB0aGUgcHJvcGVydHkgaW5pdGlhbGl6ZXIgaWYgdGhlcmUgaXMgb25lLCBvciBudWxsXG4gICAqIG90aGVyd2lzZS5cbiAgICovXG4gIHZhbHVlOiB0cy5FeHByZXNzaW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLkRlY2xhcmF0aW9uYCB3aGljaCByZXByZXNlbnRzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbWVtYmVyLlxuICAgKlxuICAgKiBJbiBUeXBlU2NyaXB0IGNvZGUgdGhpcyBpcyBpZGVudGljYWwgdG8gdGhlIG5vZGUsIGJ1dCBpbiBkb3dubGV2ZWxlZCBjb2RlIHRoaXMgc2hvdWxkIGFsd2F5cyBiZVxuICAgKiB0aGUgRGVjbGFyYXRpb24gd2hpY2ggYWN0dWFsbHkgcmVwcmVzZW50cyB0aGUgbWVtYmVyJ3MgcnVudGltZSB2YWx1ZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIHRoZSBUUyBjb2RlOlxuICAgKlxuICAgKiBgYGBcbiAgICogY2xhc3MgQ2xhenoge1xuICAgKiAgIHN0YXRpYyBnZXQgcHJvcGVydHkoKTogc3RyaW5nIHtcbiAgICogICAgIHJldHVybiAndmFsdWUnO1xuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogRG93bmxldmVscyB0bzpcbiAgICpcbiAgICogYGBgXG4gICAqIHZhciBDbGF6eiA9IChmdW5jdGlvbiAoKSB7XG4gICAqICAgZnVuY3Rpb24gQ2xhenooKSB7XG4gICAqICAgfVxuICAgKiAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDbGF6eiwgXCJwcm9wZXJ0eVwiLCB7XG4gICAqICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgKiAgICAgICAgICAgcmV0dXJuICd2YWx1ZSc7XG4gICAqICAgICAgIH0sXG4gICAqICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAqICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgKiAgIH0pO1xuICAgKiAgIHJldHVybiBDbGF6ejtcbiAgICogfSgpKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEluIHRoaXMgZXhhbXBsZSwgZm9yIHRoZSBwcm9wZXJ0eSBcInByb3BlcnR5XCIsIHRoZSBub2RlIHdvdWxkIGJlIHRoZSBlbnRpcmVcbiAgICogT2JqZWN0LmRlZmluZVByb3BlcnR5IEV4cHJlc3Npb25TdGF0ZW1lbnQsIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gd291bGQgYmUgdGhpc1xuICAgKiBGdW5jdGlvbkRlY2xhcmF0aW9uOlxuICAgKlxuICAgKiBgYGBcbiAgICogZnVuY3Rpb24gKCkge1xuICAgKiAgIHJldHVybiAndmFsdWUnO1xuICAgKiB9LFxuICAgKiBgYGBcbiAgICovXG4gIGltcGxlbWVudGF0aW9uOiB0cy5EZWNsYXJhdGlvbnxudWxsO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBtZW1iZXIgaXMgc3RhdGljIG9yIG5vdC5cbiAgICovXG4gIGlzU3RhdGljOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbnkgYERlY29yYXRvcmBzIHdoaWNoIGFyZSBwcmVzZW50IG9uIHRoZSBtZW1iZXIsIG9yIGBudWxsYCBpZiBub25lIGFyZSBwcmVzZW50LlxuICAgKi9cbiAgZGVjb3JhdG9yczogRGVjb3JhdG9yW118bnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gVHlwZVZhbHVlUmVmZXJlbmNlS2luZCB7XG4gIExPQ0FMLFxuICBJTVBPUlRFRCxcbiAgVU5BVkFJTEFCTEUsXG59XG5cbi8qKlxuICogQSB0eXBlIHJlZmVyZW5jZSB0aGF0IHJlZmVycyB0byBhbnkgdHlwZSB2aWEgYSBgdHMuRXhwcmVzc2lvbmAgdGhhdCdzIHZhbGlkIHdpdGhpbiB0aGUgbG9jYWwgZmlsZVxuICogd2hlcmUgdGhlIHR5cGUgd2FzIHJlZmVyZW5jZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxUeXBlVmFsdWVSZWZlcmVuY2Uge1xuICBraW5kOiBUeXBlVmFsdWVSZWZlcmVuY2VLaW5kLkxPQ0FMO1xuXG4gIC8qKlxuICAgKiBUaGUgc3ludGhlc2l6ZWQgZXhwcmVzc2lvbiB0byByZWZlcmVuY2UgdGhlIHR5cGUgaW4gYSB2YWx1ZSBwb3NpdGlvbi5cbiAgICovXG4gIGV4cHJlc3Npb246IHRzLkV4cHJlc3Npb247XG5cbiAgLyoqXG4gICAqIElmIHRoZSB0eXBlIG9yaWdpbmF0ZXMgZnJvbSBhIGRlZmF1bHQgaW1wb3J0LCB0aGUgaW1wb3J0IHN0YXRlbWVudCBpcyBjYXB0dXJlZCBoZXJlIHRvIGJlIGFibGVcbiAgICogdG8gdHJhY2sgaXRzIHVzYWdlcywgcHJldmVudGluZyB0aGUgaW1wb3J0IGZyb20gYmVpbmcgZWxpZGVkIGlmIGl0IHdhcyBvcmlnaW5hbGx5IG9ubHkgdXNlZCBpblxuICAgKiBhIHR5cGUtcG9zaXRpb24uIFNlZSBgRGVmYXVsdEltcG9ydFRyYWNrZXJgIGZvciBkZXRhaWxzLlxuICAgKi9cbiAgZGVmYXVsdEltcG9ydFN0YXRlbWVudDogdHMuSW1wb3J0RGVjbGFyYXRpb258bnVsbDtcbn1cblxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0aGF0IHJlZmVycyB0byBhIHR5cGUgdGhhdCB3YXMgaW1wb3J0ZWQsIGFuZCBnaXZlcyB0aGUgc3ltYm9sIGBuYW1lYCBhbmQgdGhlXG4gKiBgbW9kdWxlTmFtZWAgb2YgdGhlIGltcG9ydC4gTm90ZSB0aGF0IHRoaXMgYG1vZHVsZU5hbWVgIG1heSBiZSBhIHJlbGF0aXZlIHBhdGgsIGFuZCB0aHVzIGlzXG4gKiBsaWtlbHkgb25seSB2YWxpZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGZpbGUgd2hpY2ggY29udGFpbmVkIHRoZSBvcmlnaW5hbCB0eXBlIHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbXBvcnRlZFR5cGVWYWx1ZVJlZmVyZW5jZSB7XG4gIGtpbmQ6IFR5cGVWYWx1ZVJlZmVyZW5jZUtpbmQuSU1QT1JURUQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2R1bGUgc3BlY2lmaWVyIGZyb20gd2hpY2ggdGhlIGBpbXBvcnRlZE5hbWVgIHN5bWJvbCBzaG91bGQgYmUgaW1wb3J0ZWQuXG4gICAqL1xuICBtb2R1bGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0b3AtbGV2ZWwgc3ltYm9sIHRoYXQgaXMgaW1wb3J0ZWQgZnJvbSBgbW9kdWxlTmFtZWAuIElmIGBuZXN0ZWRQYXRoYCBpcyBhbHNvXG4gICAqIHByZXNlbnQsIGEgbmVzdGVkIG9iamVjdCBpcyBiZWluZyByZWZlcmVuY2VkIGZyb20gdGhlIHRvcC1sZXZlbCBzeW1ib2wuXG4gICAqL1xuICBpbXBvcnRlZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogSWYgcHJlc2VudCwgcmVwcmVzZW50cyB0aGUgc3ltYm9sIG5hbWVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgZnJvbSB0aGUgdG9wLWxldmVsIGltcG9ydC5cbiAgICogV2hlbiBgbnVsbGAgb3IgZW1wdHksIHRoZSBgaW1wb3J0ZWROYW1lYCBpdHNlbGYgaXMgdGhlIHN5bWJvbCBiZWluZyByZWZlcmVuY2VkLlxuICAgKi9cbiAgbmVzdGVkUGF0aDogc3RyaW5nW118bnVsbDtcblxuICB2YWx1ZURlY2xhcmF0aW9uOiBEZWNsYXJhdGlvbk5vZGU7XG59XG5cbi8qKlxuICogQSByZXByZXNlbnRhdGlvbiBmb3IgYSB0eXBlIHZhbHVlIHJlZmVyZW5jZSB0aGF0IGlzIHVzZWQgd2hlbiBubyB2YWx1ZSBpcyBhdmFpbGFibGUuIFRoaXMgY2FuXG4gKiBvY2N1ciBkdWUgdG8gdmFyaW91cyByZWFzb25zLCB3aGljaCBpcyBpbmRpY2F0ZWQgaW4gdGhlIGByZWFzb25gIGZpZWxkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuYXZhaWxhYmxlVHlwZVZhbHVlUmVmZXJlbmNlIHtcbiAga2luZDogVHlwZVZhbHVlUmVmZXJlbmNlS2luZC5VTkFWQUlMQUJMRTtcblxuICAvKipcbiAgICogVGhlIHJlYXNvbiB3aHkgbm8gdmFsdWUgcmVmZXJlbmNlIGNvdWxkIGJlIGRldGVybWluZWQgZm9yIGEgdHlwZS5cbiAgICovXG4gIHJlYXNvbjogVW5hdmFpbGFibGVWYWx1ZTtcbn1cblxuLyoqXG4gKiBUaGUgdmFyaW91cyByZWFzb25zIHdoeSB0aGUgY29tcGlsZXIgbWF5IGJlIHVuYWJsZSB0byBzeW50aGVzaXplIGEgdmFsdWUgZnJvbSBhIHR5cGUgcmVmZXJlbmNlLlxuICovXG5leHBvcnQgY29uc3QgZW51bSBWYWx1ZVVuYXZhaWxhYmxlS2luZCB7XG4gIC8qKlxuICAgKiBObyB0eXBlIG5vZGUgd2FzIGF2YWlsYWJsZS5cbiAgICovXG4gIE1JU1NJTkdfVFlQRSxcblxuICAvKipcbiAgICogVGhlIHR5cGUgZG9lcyBub3QgaGF2ZSBhIHZhbHVlIGRlY2xhcmF0aW9uLCBlLmcuIGFuIGludGVyZmFjZS5cbiAgICovXG4gIE5PX1ZBTFVFX0RFQ0xBUkFUSU9OLFxuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBpcyBpbXBvcnRlZCB1c2luZyBhIHR5cGUtb25seSBpbXBvcnRzLCBzbyBpdCBpcyBub3Qgc3VpdGFibGUgdG8gYmUgdXNlZCBpbiBhXG4gICAqIHZhbHVlLXBvc2l0aW9uLlxuICAgKi9cbiAgVFlQRV9PTkxZX0lNUE9SVCxcblxuICAvKipcbiAgICogVGhlIHR5cGUgcmVmZXJlbmNlIGNvdWxkIG5vdCBiZSByZXNvbHZlZCB0byBhIGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgVU5LTk9XTl9SRUZFUkVOQ0UsXG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIGNvcnJlc3BvbmRzIHdpdGggYSBuYW1lc3BhY2UuXG4gICAqL1xuICBOQU1FU1BBQ0UsXG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGNvbXBpbGVyLCBmb3IgZXhhbXBsZSB1bmlvbiB0eXBlcy5cbiAgICovXG4gIFVOU1VQUE9SVEVELFxufVxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5zdXBwb3J0ZWRUeXBlIHtcbiAga2luZDogVmFsdWVVbmF2YWlsYWJsZUtpbmQuVU5TVVBQT1JURUQ7XG4gIHR5cGVOb2RlOiB0cy5UeXBlTm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb1ZhbHVlRGVjbGFyYXRpb24ge1xuICBraW5kOiBWYWx1ZVVuYXZhaWxhYmxlS2luZC5OT19WQUxVRV9ERUNMQVJBVElPTjtcbiAgdHlwZU5vZGU6IHRzLlR5cGVOb2RlO1xuICBkZWNsOiB0cy5EZWNsYXJhdGlvbnxudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVPbmx5SW1wb3J0IHtcbiAga2luZDogVmFsdWVVbmF2YWlsYWJsZUtpbmQuVFlQRV9PTkxZX0lNUE9SVDtcbiAgdHlwZU5vZGU6IHRzLlR5cGVOb2RlO1xuICBpbXBvcnRDbGF1c2U6IHRzLkltcG9ydENsYXVzZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOYW1lc3BhY2VJbXBvcnQge1xuICBraW5kOiBWYWx1ZVVuYXZhaWxhYmxlS2luZC5OQU1FU1BBQ0U7XG4gIHR5cGVOb2RlOiB0cy5UeXBlTm9kZTtcbiAgaW1wb3J0Q2xhdXNlOiB0cy5JbXBvcnRDbGF1c2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5rbm93blJlZmVyZW5jZSB7XG4gIGtpbmQ6IFZhbHVlVW5hdmFpbGFibGVLaW5kLlVOS05PV05fUkVGRVJFTkNFO1xuICB0eXBlTm9kZTogdHMuVHlwZU5vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlzc2luZ1R5cGUge1xuICBraW5kOiBWYWx1ZVVuYXZhaWxhYmxlS2luZC5NSVNTSU5HX1RZUEU7XG59XG5cbi8qKlxuICogVGhlIHZhcmlvdXMgcmVhc29ucyB3aHkgYSB0eXBlIG5vZGUgbWF5IG5vdCBiZSByZWZlcnJlZCB0byBhcyBhIHZhbHVlLlxuICovXG5leHBvcnQgdHlwZSBVbmF2YWlsYWJsZVZhbHVlID1cbiAgICBVbnN1cHBvcnRlZFR5cGV8Tm9WYWx1ZURlY2xhcmF0aW9ufFR5cGVPbmx5SW1wb3J0fE5hbWVzcGFjZUltcG9ydHxVbmtub3duUmVmZXJlbmNlfE1pc3NpbmdUeXBlO1xuXG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGEgdmFsdWUgdGhhdCBvcmlnaW5hdGVkIGZyb20gYSB0eXBlIHBvc2l0aW9uLlxuICpcbiAqIEZvciBleGFtcGxlLCBhIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBjb3VsZCBiZSBkZWNsYXJlZCBhcyBgZm9vOiBGb29gLiBBIGBUeXBlVmFsdWVSZWZlcmVuY2VgXG4gKiBleHRyYWN0ZWQgZnJvbSB0aGlzIHdvdWxkIHJlZmVyIHRvIHRoZSB2YWx1ZSBvZiB0aGUgY2xhc3MgYEZvb2AgKGFzc3VtaW5nIGl0IHdhcyBhY3R1YWxseSBhXG4gKiB0eXBlKS5cbiAqXG4gKiBTZWUgdGhlIGluZGl2aWR1YWwgdHlwZXMgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFR5cGVWYWx1ZVJlZmVyZW5jZSA9XG4gICAgTG9jYWxUeXBlVmFsdWVSZWZlcmVuY2V8SW1wb3J0ZWRUeXBlVmFsdWVSZWZlcmVuY2V8VW5hdmFpbGFibGVUeXBlVmFsdWVSZWZlcmVuY2U7XG5cbi8qKlxuICogQSBwYXJhbWV0ZXIgdG8gYSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdG9yUGFyYW1ldGVyIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHBhcmFtZXRlciwgaWYgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBTb21lIHBhcmFtZXRlcnMgZG9uJ3QgaGF2ZSBhIHNpbXBsZSBzdHJpbmcgbmFtZSAoZm9yIGV4YW1wbGUsIHBhcmFtZXRlcnMgd2hpY2ggYXJlIGRlc3RydWN0dXJlZFxuICAgKiBpbnRvIG11bHRpcGxlIHZhcmlhYmxlcykuIEluIHRoZXNlIGNhc2VzLCBgbmFtZWAgY2FuIGJlIGBudWxsYC5cbiAgICovXG4gIG5hbWU6IHN0cmluZ3xudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGB0cy5CaW5kaW5nTmFtZWAgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIFRoZSBgbmFtZU5vZGVgIGlzIHVzZWZ1bCBpbiB3cml0aW5nIHJlZmVyZW5jZXMgdG8gdGhpcyBtZW1iZXIgdGhhdCB3aWxsIGJlIGNvcnJlY3RseSBzb3VyY2UtXG4gICAqIG1hcHBlZCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBmaWxlLlxuICAgKi9cbiAgbmFtZU5vZGU6IHRzLkJpbmRpbmdOYW1lO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIncyB0eXBlIGFubm90YXRpb24sIGlmIGl0J3MgcG9zc2libGUgdG8gcmVmZXIgdG8gdGhlXG4gICAqIHBhcmFtZXRlcidzIHR5cGUgYXMgYSB2YWx1ZS5cbiAgICpcbiAgICogVGhpcyBjYW4gZWl0aGVyIGJlIGEgcmVmZXJlbmNlIHRvIGEgbG9jYWwgdmFsdWUsIGEgcmVmZXJlbmNlIHRvIGFuIGltcG9ydGVkIHZhbHVlLCBvciBub1xuICAgKiB2YWx1ZSBpZiBubyBpcyBwcmVzZW50IG9yIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcyBhbiBleHByZXNzaW9uLlxuICAgKi9cbiAgdHlwZVZhbHVlUmVmZXJlbmNlOiBUeXBlVmFsdWVSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLlR5cGVOb2RlYCByZXByZXNlbnRpbmcgdGhlIHR5cGUgbm9kZSBmb3VuZCBpbiB0aGUgdHlwZSBwb3NpdGlvbi5cbiAgICpcbiAgICogVGhpcyBmaWVsZCBjYW4gYmUgdXNlZCBmb3IgZGlhZ25vc3RpY3MgcmVwb3J0aW5nIGlmIGB0eXBlVmFsdWVSZWZlcmVuY2VgIGlzIGBudWxsYC5cbiAgICpcbiAgICogQ2FuIGJlIG51bGwsIGlmIHRoZSBwYXJhbSBoYXMgbm8gdHlwZSBkZWNsYXJlZC5cbiAgICovXG4gIHR5cGVOb2RlOiB0cy5UeXBlTm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBBbnkgYERlY29yYXRvcmBzIHdoaWNoIGFyZSBwcmVzZW50IG9uIHRoZSBwYXJhbWV0ZXIsIG9yIGBudWxsYCBpZiBub25lIGFyZSBwcmVzZW50LlxuICAgKi9cbiAgZGVjb3JhdG9yczogRGVjb3JhdG9yW118bnVsbDtcbn1cblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgZnVuY3Rpb24gb3IgbWV0aG9kLCBpbmNsdWRpbmcgaXRzIGJvZHkgaWYgcHJlc2VudCBhbmQgYW55IHBhcmFtZXRlcnMuXG4gKlxuICogSW4gVHlwZVNjcmlwdCBjb2RlIHRoaXMgbWV0YWRhdGEgd2lsbCBiZSBhIHNpbXBsZSByZWZsZWN0aW9uIG9mIHRoZSBkZWNsYXJhdGlvbnMgaW4gdGhlIG5vZGVcbiAqIGl0c2VsZi4gSW4gRVM1IGNvZGUgdGhpcyBjYW4gYmUgbW9yZSBjb21wbGljYXRlZCwgYXMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzIG1heVxuICogYmUgZXh0cmFjdGVkIGZyb20gY2VydGFpbiBib2R5IHN0YXRlbWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25EZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBub2RlIHdoaWNoIGRlY2xhcmVzIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIG5vZGU6IHRzLk1ldGhvZERlY2xhcmF0aW9ufHRzLkZ1bmN0aW9uRGVjbGFyYXRpb258dHMuRnVuY3Rpb25FeHByZXNzaW9ufHRzLlZhcmlhYmxlRGVjbGFyYXRpb247XG5cbiAgLyoqXG4gICAqIFN0YXRlbWVudHMgb2YgdGhlIGZ1bmN0aW9uIGJvZHksIGlmIGEgYm9keSBpcyBwcmVzZW50LCBvciBudWxsIGlmIG5vIGJvZHkgaXMgcHJlc2VudCBvciB0aGVcbiAgICogZnVuY3Rpb24gaXMgaWRlbnRpZmllZCB0byByZXByZXNlbnQgYSB0c2xpYiBoZWxwZXIgZnVuY3Rpb24sIGluIHdoaWNoIGNhc2UgYGhlbHBlcmAgd2lsbFxuICAgKiBpbmRpY2F0ZSB3aGljaCBoZWxwZXIgdGhpcyBmdW5jdGlvbiByZXByZXNlbnRzLlxuICAgKlxuICAgKiBUaGlzIGxpc3QgbWF5IGhhdmUgYmVlbiBmaWx0ZXJlZCB0byBleGNsdWRlIHN0YXRlbWVudHMgd2hpY2ggcGVyZm9ybSBwYXJhbWV0ZXIgZGVmYXVsdCB2YWx1ZVxuICAgKiBpbml0aWFsaXphdGlvbi5cbiAgICovXG4gIGJvZHk6IHRzLlN0YXRlbWVudFtdfG51bGw7XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIHJlZ2FyZGluZyB0aGUgZnVuY3Rpb24ncyBwYXJhbWV0ZXJzLCBpbmNsdWRpbmcgcG9zc2libGUgZGVmYXVsdCB2YWx1ZSBleHByZXNzaW9ucy5cbiAgICovXG4gIHBhcmFtZXRlcnM6IFBhcmFtZXRlcltdO1xufVxuXG4vKipcbiAqIFBvc3NpYmxlIGRlY2xhcmF0aW9ucyBvZiBrbm93biB2YWx1ZXMsIHN1Y2ggYXMgYnVpbHQtaW4gb2JqZWN0cy9mdW5jdGlvbnMgb3IgVHlwZVNjcmlwdCBoZWxwZXJzLlxuICovXG5leHBvcnQgZW51bSBLbm93bkRlY2xhcmF0aW9uIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgSmF2YVNjcmlwdCBnbG9iYWwgYE9iamVjdGAgY2xhc3MuXG4gICAqL1xuICBKc0dsb2JhbE9iamVjdCxcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBgX19hc3NpZ25gIFR5cGVTY3JpcHQgaGVscGVyIGZ1bmN0aW9uLlxuICAgKi9cbiAgVHNIZWxwZXJBc3NpZ24sXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgYF9fc3ByZWFkYCBUeXBlU2NyaXB0IGhlbHBlciBmdW5jdGlvbi5cbiAgICovXG4gIFRzSGVscGVyU3ByZWFkLFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGBfX3NwcmVhZEFycmF5c2AgVHlwZVNjcmlwdCBoZWxwZXIgZnVuY3Rpb24uXG4gICAqL1xuICBUc0hlbHBlclNwcmVhZEFycmF5cyxcbn1cblxuLyoqXG4gKiBBIHBhcmFtZXRlciB0byBhIGZ1bmN0aW9uIG9yIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXIge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcGFyYW1ldGVyLCBpZiBhdmFpbGFibGUuXG4gICAqL1xuICBuYW1lOiBzdHJpbmd8bnVsbDtcblxuICAvKipcbiAgICogRGVjbGFyYXRpb24gd2hpY2ggY3JlYXRlZCB0aGlzIHBhcmFtZXRlci5cbiAgICovXG4gIG5vZGU6IHRzLlBhcmFtZXRlckRlY2xhcmF0aW9uO1xuXG4gIC8qKlxuICAgKiBFeHByZXNzaW9uIHdoaWNoIHJlcHJlc2VudHMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciwgaWYgYW55LlxuICAgKi9cbiAgaW5pdGlhbGl6ZXI6IHRzLkV4cHJlc3Npb258bnVsbDtcbn1cblxuLyoqXG4gKiBUaGUgc291cmNlIG9mIGFuIGltcG9ydGVkIHN5bWJvbCwgaW5jbHVkaW5nIHRoZSBvcmlnaW5hbCBzeW1ib2wgbmFtZSBhbmQgdGhlIG1vZHVsZSBmcm9tIHdoaWNoIGl0XG4gKiB3YXMgaW1wb3J0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBpbXBvcnRlZCBzeW1ib2wgdW5kZXIgd2hpY2ggaXQgd2FzIGV4cG9ydGVkIChub3QgaW1wb3J0ZWQpLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kdWxlIGZyb20gd2hpY2ggdGhlIHN5bWJvbCB3YXMgaW1wb3J0ZWQuXG4gICAqXG4gICAqIFRoaXMgY291bGQgZWl0aGVyIGJlIGFuIGFic29sdXRlIG1vZHVsZSBuYW1lIChAYW5ndWxhci9jb3JlIGZvciBleGFtcGxlKSBvciBhIHJlbGF0aXZlIHBhdGguXG4gICAqL1xuICBmcm9tOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgZW51bSBtZW1iZXIgZXh0cmFjdGVkIGZyb20gSmF2YVNjcmlwdCB3aGVuIG5vIGB0cy5FbnVtRGVjbGFyYXRpb25gIGlzIGF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnVtTWVtYmVyIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBlbnVtIG1lbWJlci5cbiAgICovXG4gIG5hbWU6IHRzLlByb3BlcnR5TmFtZTtcblxuICAvKipcbiAgICogVGhlIGluaXRpYWxpemVyIGV4cHJlc3Npb24gb2YgdGhlIGVudW0gbWVtYmVyLiBVbmxpa2UgaW4gVHlwZVNjcmlwdCwgdGhpcyBpcyBhbHdheXMgYXZhaWxhYmxlXG4gICAqIGluIGVtaXR0ZWQgSmF2YVNjcmlwdC5cbiAgICovXG4gIGluaXRpYWxpemVyOiB0cy5FeHByZXNzaW9uO1xufVxuXG4vKipcbiAqIEEgdHlwZSB0aGF0IGlzIHVzZWQgdG8gaWRlbnRpZnkgYSBkZWNsYXJhdGlvbi5cbiAqXG4gKiBEZWNsYXJhdGlvbnMgYXJlIG5vcm1hbGx5IGB0cy5EZWNsYXJhdGlvbmAgdHlwZXMgc3VjaCBhcyB2YXJpYWJsZSBkZWNsYXJhdGlvbnMsIGNsYXNzXG4gKiBkZWNsYXJhdGlvbnMsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBldGMuXG4gKiBCdXQgaW4gc29tZSBjYXNlcyB0aGVyZSBpcyBubyBgdHMuRGVjbGFyYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGEgZGVjbGFyYXRpb24sIHN1Y2hcbiAqIGFzIHdoZW4gdGhleSBhcmUgZGVjbGFyZWQgaW5saW5lIGFzIHBhcnQgb2YgYW4gZXhwb3J0ZWQgZXhwcmVzc2lvbi4gVGhlbiB3ZSBtdXN0IHVzZSBhXG4gKiBgdHMuRXhwcmVzc2lvbmAgYXMgdGhlIGRlY2xhcmF0aW9uLlxuICogQW4gZXhhbXBsZSBvZiB0aGlzIGlzIGBleHBvcnRzLnNvbWVWYXIgPSA0MmAgd2hlcmUgdGhlIGRlY2xhcmF0aW9uIGV4cHJlc3Npb24gd291bGQgYmVcbiAqIGBleHBvcnRzLnNvbWVWYXJgLlxuICovXG5leHBvcnQgdHlwZSBEZWNsYXJhdGlvbk5vZGUgPSB0cy5EZWNsYXJhdGlvbnx0cy5FeHByZXNzaW9uO1xuXG4vKipcbiAqIFRoZSB0eXBlIG9mIGEgRGVjbGFyYXRpb24gLSB3aGV0aGVyIGl0cyBub2RlIGlzIGNvbmNyZXRlICh0cy5EZWNsYXJhdGlvbikgb3IgaW5saW5lXG4gKiAodHMuRXhwcmVzc2lvbikuIFNlZSBgQ29uY3JldGVEZWNsYXJhdGlvbmAsIGBJbmxpbmVEZWNsYXJhdGlvbmAgYW5kIGBEZWNsYXJhdGlvbk5vZGVgIGZvciBtb3JlXG4gKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzLlxuICovXG5leHBvcnQgY29uc3QgZW51bSBEZWNsYXJhdGlvbktpbmQge1xuICBDb25jcmV0ZSxcbiAgSW5saW5lLFxufVxuXG4vKipcbiAqIEJhc2UgdHlwZSBmb3IgYWxsIGBEZWNsYXJhdGlvbmBzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VEZWNsYXJhdGlvbjxUIGV4dGVuZHMgRGVjbGFyYXRpb25Ob2RlPiB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgdW5kZXJseWluZyBgbm9kZWAuXG4gICAqL1xuICBraW5kOiBEZWNsYXJhdGlvbktpbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBtb2R1bGUgcGF0aCBmcm9tIHdoaWNoIHRoZSBzeW1ib2wgd2FzIGltcG9ydGVkIGludG8gdGhlIGFwcGxpY2F0aW9uLCBpZiB0aGUgc3ltYm9sXG4gICAqIHdhcyBpbXBvcnRlZCB2aWEgYW4gYWJzb2x1dGUgbW9kdWxlIChldmVuIHRocm91Z2ggYSBjaGFpbiBvZiByZS1leHBvcnRzKS4gSWYgdGhlIHN5bWJvbCBpcyBwYXJ0XG4gICAqIG9mIHRoZSBhcHBsaWNhdGlvbiBhbmQgd2FzIG5vdCBpbXBvcnRlZCBmcm9tIGFuIGFic29sdXRlIHBhdGgsIHRoaXMgd2lsbCBiZSBgbnVsbGAuXG4gICAqL1xuICB2aWFNb2R1bGU6IHN0cmluZ3xudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IHJlZmVyZW5jZSB0byB0aGUgZGVjbGFyYXRpb24gaXRzZWxmLCBpZiBvbmUgZXhpc3RzLlxuICAgKi9cbiAgbm9kZTogVDtcblxuICAvKipcbiAgICogSWYgc2V0LCBkZXNjcmliZXMgdGhlIHR5cGUgb2YgdGhlIGtub3duIGRlY2xhcmF0aW9uIHRoaXMgZGVjbGFyYXRpb24gcmVzb2x2ZXMgdG8uXG4gICAqL1xuICBrbm93bjogS25vd25EZWNsYXJhdGlvbnxudWxsO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYGRlY2xgIGlzIGEgYENvbmNyZXRlRGVjbGFyYXRpb25gIChpZS4gdGhhdCBpdHMgYG5vZGVgIHByb3BlcnR5IGlzIGFcbiAqIGB0cy5EZWNsYXJhdGlvbmApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb25jcmV0ZURlY2xhcmF0aW9uKGRlY2w6IERlY2xhcmF0aW9uKTogZGVjbCBpcyBDb25jcmV0ZURlY2xhcmF0aW9uIHtcbiAgcmV0dXJuIGRlY2wua2luZCA9PT0gRGVjbGFyYXRpb25LaW5kLkNvbmNyZXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbmNyZXRlRGVjbGFyYXRpb248VCBleHRlbmRzIHRzLkRlY2xhcmF0aW9uID0gdHMuRGVjbGFyYXRpb24+IGV4dGVuZHNcbiAgICBCYXNlRGVjbGFyYXRpb248VD4ge1xuICBraW5kOiBEZWNsYXJhdGlvbktpbmQuQ29uY3JldGU7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgcmVwcmVzZW50cyBhIHNwZWNpYWwgaWRlbnRpdHkgb2YgdGhlIGRlY2xhcmF0aW9uLCBvciBgbnVsbGAgaWYgdGhlIGRlY2xhcmF0aW9uXG4gICAqIGRvZXMgbm90IGhhdmUgYSBzcGVjaWFsIGlkZW50aXR5LlxuICAgKi9cbiAgaWRlbnRpdHk6IFNwZWNpYWxEZWNsYXJhdGlvbklkZW50aXR5fG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIFNwZWNpYWxEZWNsYXJhdGlvbklkZW50aXR5ID0gRG93bmxldmVsZWRFbnVtO1xuXG5leHBvcnQgY29uc3QgZW51bSBTcGVjaWFsRGVjbGFyYXRpb25LaW5kIHtcbiAgRG93bmxldmVsZWRFbnVtLFxufVxuXG4vKipcbiAqIEEgc3BlY2lhbCBkZWNsYXJhdGlvbiBpZGVudGl0eSB0aGF0IHJlcHJlc2VudHMgYW4gZW51bS4gVGhpcyBpcyB1c2VkIGluIGRvd25sZXZlbGVkIGZvcm1zIHdoZXJlXG4gKiBhIGB0cy5FbnVtRGVjbGFyYXRpb25gIGlzIGVtaXR0ZWQgaW4gYW4gYWx0ZXJuYXRpdmUgZm9ybSwgZS5nLiBhbiBJSUZFIGNhbGwgdGhhdCBkZWNsYXJlcyBhbGxcbiAqIG1lbWJlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG93bmxldmVsZWRFbnVtIHtcbiAga2luZDogU3BlY2lhbERlY2xhcmF0aW9uS2luZC5Eb3dubGV2ZWxlZEVudW07XG4gIGVudW1NZW1iZXJzOiBFbnVtTWVtYmVyW107XG59XG5cbi8qKlxuICogQSBkZWNsYXJhdGlvbiB0aGF0IGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBUeXBlU2NyaXB0IGB0cy5EZWNsYXJhdGlvbmAuXG4gKlxuICogVGhpcyBjYW4gb2NjdXIgaW4gc29tZSBkb3dubGV2ZWxpbmdzIHdoZW4gYW4gYGV4cG9ydCBjb25zdCBWQVIgPSAuLi47YCAoYSBgdHMuRGVjbGFyYXRpb25gKSBpc1xuICogdHJhbnNwaWxlZCB0byBhbiBhc3NpZ25tZW50IHN0YXRlbWVudCAoZS5nLiBgZXhwb3J0cy5WQVIgPSAuLi47YCkuIFRoZXJlIGlzIG5vIGB0cy5EZWNsYXJhdGlvbmBcbiAqIGFzc29jaWF0ZWQgd2l0aCBgVkFSYCBpbiB0aGF0IGNhc2UsIG9ubHkgYW4gZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVEZWNsYXJhdGlvbiBleHRlbmRzXG4gICAgQmFzZURlY2xhcmF0aW9uPEV4Y2x1ZGU8RGVjbGFyYXRpb25Ob2RlLCB0cy5EZWNsYXJhdGlvbj4+IHtcbiAga2luZDogRGVjbGFyYXRpb25LaW5kLklubGluZTtcbiAgaW1wbGVtZW50YXRpb24/OiBEZWNsYXJhdGlvbk5vZGU7XG59XG5cbi8qKlxuICogVGhlIGRlY2xhcmF0aW9uIG9mIGEgc3ltYm9sLCBhbG9uZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGhvdyBpdCB3YXMgaW1wb3J0ZWQgaW50byB0aGVcbiAqIGFwcGxpY2F0aW9uLlxuICovXG5leHBvcnQgdHlwZSBEZWNsYXJhdGlvbjxUIGV4dGVuZHMgdHMuRGVjbGFyYXRpb24gPSB0cy5EZWNsYXJhdGlvbj4gPVxuICAgIENvbmNyZXRlRGVjbGFyYXRpb248VD58SW5saW5lRGVjbGFyYXRpb247XG5cbi8qKlxuICogQWJzdHJhY3RzIHJlZmxlY3Rpb24gb3BlcmF0aW9ucyBvbiBhIFR5cGVTY3JpcHQgQVNULlxuICpcbiAqIERlcGVuZGluZyBvbiB0aGUgZm9ybWF0IG9mIHRoZSBjb2RlIGJlaW5nIGludGVycHJldGVkLCBkaWZmZXJlbnQgY29uY2VwdHMgYXJlIHJlcHJlc2VudGVkXG4gKiB3aXRoIGRpZmZlcmVudCBzeW50YWN0aWNhbCBzdHJ1Y3R1cmVzLiBUaGUgYFJlZmxlY3Rpb25Ib3N0YCBhYnN0cmFjdHMgb3ZlciB0aG9zZSBkaWZmZXJlbmNlcyBhbmRcbiAqIHByZXNlbnRzIGEgc2luZ2xlIEFQSSBieSB3aGljaCB0aGUgY29tcGlsZXIgY2FuIHF1ZXJ5IHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IHRoZSBBU1QuXG4gKlxuICogQWxsIG9wZXJhdGlvbnMgb24gdGhlIGBSZWZsZWN0aW9uSG9zdGAgcmVxdWlyZSB0aGUgdXNlIG9mIFR5cGVTY3JpcHQgYHRzLk5vZGVgcyB3aXRoIGJpbmRpbmdcbiAqIGluZm9ybWF0aW9uIGFscmVhZHkgYXZhaWxhYmxlICh0aGF0IGlzLCBub2RlcyB0aGF0IGNvbWUgZnJvbSBhIGB0cy5Qcm9ncmFtYCB0aGF0IGhhcyBiZWVuXG4gKiB0eXBlLWNoZWNrZWQsIGFuZCBhcmUgbm90IHN5bnRoZXRpY2FsbHkgY3JlYXRlZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmbGVjdGlvbkhvc3Qge1xuICAvKipcbiAgICogRXhhbWluZSBhIGRlY2xhcmF0aW9uIChmb3IgZXhhbXBsZSwgb2YgYSBjbGFzcyBvciBmdW5jdGlvbikgYW5kIHJldHVybiBtZXRhZGF0YSBhYm91dCBhbnlcbiAgICogZGVjb3JhdG9ycyBwcmVzZW50IG9uIHRoZSBkZWNsYXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGRlY2xhcmF0aW9uIGEgVHlwZVNjcmlwdCBgdHMuRGVjbGFyYXRpb25gIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBjbGFzcyBvciBmdW5jdGlvbiBvdmVyXG4gICAqIHdoaWNoIHRvIHJlZmxlY3QuIEZvciBleGFtcGxlLCBpZiB0aGUgaW50ZW50IGlzIHRvIHJlZmxlY3QgdGhlIGRlY29yYXRvcnMgb2YgYSBjbGFzcyBhbmQgdGhlXG4gICAqIHNvdXJjZSBpcyBpbiBFUzYgZm9ybWF0LCB0aGlzIHdpbGwgYmUgYSBgdHMuQ2xhc3NEZWNsYXJhdGlvbmAgbm9kZS4gSWYgdGhlIHNvdXJjZSBpcyBpbiBFUzVcbiAgICogZm9ybWF0LCB0aGlzIG1pZ2h0IGJlIGEgYHRzLlZhcmlhYmxlRGVjbGFyYXRpb25gIGFzIGNsYXNzZXMgaW4gRVM1IGFyZSByZXByZXNlbnRlZCBhcyB0aGVcbiAgICogcmVzdWx0IG9mIGFuIElJRkUgZXhlY3V0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiBgRGVjb3JhdG9yYCBtZXRhZGF0YSBpZiBkZWNvcmF0b3JzIGFyZSBwcmVzZW50IG9uIHRoZSBkZWNsYXJhdGlvbiwgb3JcbiAgICogYG51bGxgIGlmIGVpdGhlciBubyBkZWNvcmF0b3JzIHdlcmUgcHJlc2VudCBvciBpZiB0aGUgZGVjbGFyYXRpb24gaXMgbm90IG9mIGEgZGVjb3JhdGFibGUgdHlwZS5cbiAgICovXG4gIGdldERlY29yYXRvcnNPZkRlY2xhcmF0aW9uKGRlY2xhcmF0aW9uOiBEZWNsYXJhdGlvbk5vZGUpOiBEZWNvcmF0b3JbXXxudWxsO1xuXG4gIC8qKlxuICAgKiBFeGFtaW5lIGEgZGVjbGFyYXRpb24gd2hpY2ggc2hvdWxkIGJlIG9mIGEgY2xhc3MsIGFuZCByZXR1cm4gbWV0YWRhdGEgYWJvdXQgdGhlIG1lbWJlcnMgb2YgdGhlXG4gICAqIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhenogYSBgQ2xhc3NEZWNsYXJhdGlvbmAgcmVwcmVzZW50aW5nIHRoZSBjbGFzcyBvdmVyIHdoaWNoIHRvIHJlZmxlY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIGBDbGFzc01lbWJlcmAgbWV0YWRhdGEgcmVwcmVzZW50aW5nIHRoZSBtZW1iZXJzIG9mIHRoZSBjbGFzcy5cbiAgICpcbiAgICogQHRocm93cyBpZiBgZGVjbGFyYXRpb25gIGRvZXMgbm90IHJlc29sdmUgdG8gYSBjbGFzcyBkZWNsYXJhdGlvbi5cbiAgICovXG4gIGdldE1lbWJlcnNPZkNsYXNzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogQ2xhc3NNZW1iZXJbXTtcblxuICAvKipcbiAgICogUmVmbGVjdCBvdmVyIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGNsYXNzIGFuZCByZXR1cm4gbWV0YWRhdGEgYWJvdXQgaXRzIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIG9ubHkgbG9va3MgYXQgdGhlIGNvbnN0cnVjdG9yIG9mIGEgY2xhc3MgZGlyZWN0bHkgYW5kIG5vdCBhdCBhbnkgaW5oZXJpdGVkXG4gICAqIGNvbnN0cnVjdG9ycy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXp6IGEgYENsYXNzRGVjbGFyYXRpb25gIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3ZlciB3aGljaCB0byByZWZsZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiBgUGFyYW1ldGVyYCBtZXRhZGF0YSByZXByZXNlbnRpbmcgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGNvbnN0cnVjdG9yLCBpZlxuICAgKiBhIGNvbnN0cnVjdG9yIGV4aXN0cy4gSWYgdGhlIGNvbnN0cnVjdG9yIGV4aXN0cyBhbmQgaGFzIDAgcGFyYW1ldGVycywgdGhpcyBhcnJheSB3aWxsIGJlIGVtcHR5LlxuICAgKiBJZiB0aGUgY2xhc3MgaGFzIG5vIGNvbnN0cnVjdG9yLCB0aGlzIG1ldGhvZCByZXR1cm5zIGBudWxsYC5cbiAgICovXG4gIGdldENvbnN0cnVjdG9yUGFyYW1ldGVycyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IEN0b3JQYXJhbWV0ZXJbXXxudWxsO1xuXG4gIC8qKlxuICAgKiBSZWZsZWN0IG92ZXIgYSBmdW5jdGlvbiBhbmQgcmV0dXJuIG1ldGFkYXRhIGFib3V0IGl0cyBwYXJhbWV0ZXJzIGFuZCBib2R5LlxuICAgKlxuICAgKiBGdW5jdGlvbnMgaW4gVHlwZVNjcmlwdCBhbmQgRVM1IGNvZGUgaGF2ZSBkaWZmZXJlbnQgQVNUIHJlcHJlc2VudGF0aW9ucywgaW4gcGFydGljdWxhciBhcm91bmRcbiAgICogZGVmYXVsdCB2YWx1ZXMgZm9yIHBhcmFtZXRlcnMuIEEgVHlwZVNjcmlwdCBmdW5jdGlvbiBoYXMgaXRzIGRlZmF1bHQgdmFsdWUgYXMgdGhlIGluaXRpYWxpemVyXG4gICAqIG9uIHRoZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24sIHdoZXJlYXMgYW4gRVM1IGZ1bmN0aW9uIGhhcyBpdHMgZGVmYXVsdCB2YWx1ZSBzZXQgaW4gYSBzdGF0ZW1lbnRcbiAgICogb2YgdGhlIGZvcm06XG4gICAqXG4gICAqIGlmIChwYXJhbSA9PT0gdm9pZCAwKSB7IHBhcmFtID0gMzsgfVxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBhYnN0cmFjdHMgb3ZlciB0aGVzZSBkZXRhaWxzLCBhbmQgaW50ZXJwcmV0cyB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gYW5kIGJvZHkgdG9cbiAgICogZXh0cmFjdCBwYXJhbWV0ZXIgZGVmYXVsdCB2YWx1ZXMgYW5kIHRoZSBcInJlYWxcIiBib2R5LlxuICAgKlxuICAgKiBBIGN1cnJlbnQgbGltaXRhdGlvbiBpcyB0aGF0IHRoaXMgbWV0YWRhdGEgaGFzIG5vIHJlcHJlc2VudGF0aW9uIGZvciBzaG9ydGhhbmQgYXNzaWdubWVudCBvZlxuICAgKiBwYXJhbWV0ZXIgb2JqZWN0cyBpbiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLlxuICAgKlxuICAgKiBAcGFyYW0gZm4gYSBUeXBlU2NyaXB0IGB0cy5EZWNsYXJhdGlvbmAgbm9kZSByZXByZXNlbnRpbmcgdGhlIGZ1bmN0aW9uIG92ZXIgd2hpY2ggdG8gcmVmbGVjdC5cbiAgICpcbiAgICogQHJldHVybnMgYSBgRnVuY3Rpb25EZWZpbml0aW9uYCBnaXZpbmcgbWV0YWRhdGEgYWJvdXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uXG4gICAqL1xuICBnZXREZWZpbml0aW9uT2ZGdW5jdGlvbihmbjogdHMuTm9kZSk6IEZ1bmN0aW9uRGVmaW5pdGlvbnxudWxsO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgYW4gaWRlbnRpZmllciB3YXMgaW1wb3J0ZWQgZnJvbSBhbm90aGVyIG1vZHVsZSBhbmQgcmV0dXJuIGBJbXBvcnRgIG1ldGFkYXRhXG4gICAqIGRlc2NyaWJpbmcgaXRzIG9yaWdpbi5cbiAgICpcbiAgICogQHBhcmFtIGlkIGEgVHlwZVNjcmlwdCBgdHMuSWRlbnRpZmVyYCB0byByZWZsZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyBtZXRhZGF0YSBhYm91dCB0aGUgYEltcG9ydGAgaWYgdGhlIGlkZW50aWZpZXIgd2FzIGltcG9ydGVkIGZyb20gYW5vdGhlciBtb2R1bGUsIG9yXG4gICAqIGBudWxsYCBpZiB0aGUgaWRlbnRpZmllciBkb2Vzbid0IHJlc29sdmUgdG8gYW4gaW1wb3J0IGJ1dCBpbnN0ZWFkIGlzIGxvY2FsbHkgZGVmaW5lZC5cbiAgICovXG4gIGdldEltcG9ydE9mSWRlbnRpZmllcihpZDogdHMuSWRlbnRpZmllcik6IEltcG9ydHxudWxsO1xuXG4gIC8qKlxuICAgKiBUcmFjZSBhbiBpZGVudGlmaWVyIHRvIGl0cyBkZWNsYXJhdGlvbiwgaWYgcG9zc2libGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGF0dGVtcHRzIHRvIHJlc29sdmUgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBnaXZlbiBpZGVudGlmaWVyLCB0cmFjaW5nIGJhY2sgdGhyb3VnaFxuICAgKiBpbXBvcnRzIGFuZCByZS1leHBvcnRzIHVudGlsIHRoZSBvcmlnaW5hbCBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQgaXMgZm91bmQuIEEgYERlY2xhcmF0aW9uYFxuICAgKiBvYmplY3QgaXMgcmV0dXJuZWQgaWYgdGhlIG9yaWdpbmFsIGRlY2xhcmF0aW9uIGlzIGZvdW5kLCBvciBgbnVsbGAgaXMgcmV0dXJuZWQgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBJZiB0aGUgZGVjbGFyYXRpb24gaXMgaW4gYSBkaWZmZXJlbnQgbW9kdWxlLCBhbmQgdGhhdCBtb2R1bGUgaXMgaW1wb3J0ZWQgdmlhIGFuIGFic29sdXRlIHBhdGgsXG4gICAqIHRoaXMgbWV0aG9kIGFsc28gcmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaW1wb3J0ZWQgbW9kdWxlLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGNvZGUgaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiBpbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gICAqXG4gICAqIGV4cG9ydCBjb25zdCBST1VURVMgPSBSb3V0ZXJNb2R1bGUuZm9yUm9vdChbLi4uXSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBhbmQgaWYgYGdldERlY2xhcmF0aW9uT2ZJZGVudGlmaWVyYCBpcyBjYWxsZWQgb24gYFJvdXRlck1vZHVsZWAgaW4gdGhlIGBST1VURVNgIGV4cHJlc3Npb24sXG4gICAqIHRoZW4gaXQgd291bGQgdHJhY2UgYFJvdXRlck1vZHVsZWAgdmlhIGl0cyBpbXBvcnQgZnJvbSBgQGFuZ3VsYXIvY29yZWAsIGFuZCBub3RlIHRoYXQgdGhlXG4gICAqIGRlZmluaXRpb24gd2FzIGltcG9ydGVkIGZyb20gYEBhbmd1bGFyL2NvcmVgIGludG8gdGhlIGFwcGxpY2F0aW9uIHdoZXJlIGl0IHdhcyByZWZlcmVuY2VkLlxuICAgKlxuICAgKiBJZiB0aGUgZGVmaW5pdGlvbiBpcyByZS1leHBvcnRlZCBzZXZlcmFsIHRpbWVzIGZyb20gZGlmZmVyZW50IGFic29sdXRlIG1vZHVsZSBuYW1lcywgb25seVxuICAgKiB0aGUgZmlyc3Qgb25lICh0aGUgb25lIGJ5IHdoaWNoIHRoZSBhcHBsaWNhdGlvbiByZWZlcnMgdG8gdGhlIG1vZHVsZSkgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIFRoaXMgbW9kdWxlIG5hbWUgaXMgcmV0dXJuZWQgaW4gdGhlIGB2aWFNb2R1bGVgIGZpZWxkIG9mIHRoZSBgRGVjbGFyYXRpb25gLiBJZiBUaGUgZGVjbGFyYXRpb25cbiAgICogaXMgcmVsYXRpdmUgdG8gdGhlIGFwcGxpY2F0aW9uIGl0c2VsZiBhbmQgdGhlcmUgd2FzIG5vIGltcG9ydCB0aHJvdWdoIGFuIGFic29sdXRlIHBhdGgsIHRoZW5cbiAgICogYHZpYU1vZHVsZWAgaXMgYG51bGxgLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgYSBUeXBlU2NyaXB0IGB0cy5JZGVudGlmaWVyYCB0byB0cmFjZSBiYWNrIHRvIGEgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIG1ldGFkYXRhIGFib3V0IHRoZSBgRGVjbGFyYXRpb25gIGlmIHRoZSBvcmlnaW5hbCBkZWNsYXJhdGlvbiBpcyBmb3VuZCwgb3IgYG51bGxgXG4gICAqIG90aGVyd2lzZS5cbiAgICovXG4gIGdldERlY2xhcmF0aW9uT2ZJZGVudGlmaWVyKGlkOiB0cy5JZGVudGlmaWVyKTogRGVjbGFyYXRpb258bnVsbDtcblxuICAvKipcbiAgICogQ29sbGVjdCB0aGUgZGVjbGFyYXRpb25zIGV4cG9ydGVkIGZyb20gYSBtb2R1bGUgYnkgbmFtZS5cbiAgICpcbiAgICogSXRlcmF0ZXMgb3ZlciB0aGUgZXhwb3J0cyBvZiBhIG1vZHVsZSAoaW5jbHVkaW5nIHJlLWV4cG9ydHMpIGFuZCByZXR1cm5zIGEgbWFwIG9mIGV4cG9ydFxuICAgKiBuYW1lIHRvIGl0cyBgRGVjbGFyYXRpb25gLiBJZiBhbiBleHBvcnRlZCB2YWx1ZSBpcyBpdHNlbGYgcmUtZXhwb3J0ZWQgZnJvbSBhbm90aGVyIG1vZHVsZSxcbiAgICogdGhlIGBEZWNsYXJhdGlvbmAncyBgdmlhTW9kdWxlYCB3aWxsIHJlZmxlY3QgdGhhdC5cbiAgICpcbiAgICogQHBhcmFtIG5vZGUgYSBUeXBlU2NyaXB0IGB0cy5Ob2RlYCByZXByZXNlbnRpbmcgdGhlIG1vZHVsZSAoZm9yIGV4YW1wbGUgYSBgdHMuU291cmNlRmlsZWApIGZvclxuICAgKiB3aGljaCB0byBjb2xsZWN0IGV4cG9ydHMuXG4gICAqXG4gICAqIEByZXR1cm5zIGEgbWFwIG9mIGBEZWNsYXJhdGlvbmBzIGZvciB0aGUgbW9kdWxlJ3MgZXhwb3J0cywgYnkgbmFtZS5cbiAgICovXG4gIGdldEV4cG9ydHNPZk1vZHVsZShtb2R1bGU6IHRzLk5vZGUpOiBNYXA8c3RyaW5nLCBEZWNsYXJhdGlvbj58bnVsbDtcblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbm9kZSBhY3R1YWxseSByZXByZXNlbnRzIGEgY2xhc3MuXG4gICAqL1xuICBpc0NsYXNzKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIENsYXNzRGVjbGFyYXRpb247XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gZGVjbGFyYXRpb24sIHdoaWNoIHNob3VsZCBiZSBhIGNsYXNzLCBoYXMgYSBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhenogYSBgQ2xhc3NEZWNsYXJhdGlvbmAgcmVwcmVzZW50aW5nIHRoZSBjbGFzcyBvdmVyIHdoaWNoIHRvIHJlZmxlY3QuXG4gICAqL1xuICBoYXNCYXNlQ2xhc3MoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBHZXQgYW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGJhc2UgY2xhc3MgKGlmIGFueSkgb2YgdGhlIGdpdmVuIGBjbGF6emAuXG4gICAqXG4gICAqIFRoaXMgZXhwcmVzc2lvbiBpcyBtb3N0IGNvbW1vbmx5IGFuIElkZW50aWZpZXIsIGJ1dCBpcyBwb3NzaWJsZSB0byBpbmhlcml0IGZyb20gYSBtb3JlIGR5bmFtaWNcbiAgICogZXhwcmVzc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIGNsYXp6IHRoZSBjbGFzcyB3aG9zZSBiYXNlIHdlIHdhbnQgdG8gZ2V0LlxuICAgKi9cbiAgZ2V0QmFzZUNsYXNzRXhwcmVzc2lvbihjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IHRzLkV4cHJlc3Npb258bnVsbDtcblxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMgb2YgYSBnaXZlbiBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXp6IGEgYENsYXNzRGVjbGFyYXRpb25gIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3ZlciB3aGljaCB0byByZWZsZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB0aGUgbnVtYmVyIG9mIHR5cGUgcGFyYW1ldGVycyBvZiB0aGUgY2xhc3MsIGlmIGtub3duLCBvciBgbnVsbGAgaWYgdGhlIGRlY2xhcmF0aW9uXG4gICAqIGlzIG5vdCBhIGNsYXNzIG9yIGhhcyBhbiB1bmtub3duIG51bWJlciBvZiB0eXBlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBnZXRHZW5lcmljQXJpdHlPZkNsYXNzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogbnVtYmVyfG51bGw7XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGFzc2lnbmVkIHZhbHVlIG9mIGEgdmFyaWFibGUgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIE5vcm1hbGx5IHRoaXMgd2lsbCBiZSB0aGUgaW5pdGlhbGl6ZXIgb2YgdGhlIGRlY2xhcmF0aW9uLCBidXQgd2hlcmUgdGhlIHZhcmlhYmxlIGlzXG4gICAqIG5vdCBhIGBjb25zdGAgd2UgbWF5IG5lZWQgdG8gbG9vayBlbHNld2hlcmUgZm9yIHRoZSB2YXJpYWJsZSdzIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gZGVjbGFyYXRpb24gYSBUeXBlU2NyaXB0IHZhcmlhYmxlIGRlY2xhcmF0aW9uLCB3aG9zZSB2YWx1ZSB3ZSB3YW50LlxuICAgKiBAcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLCBhcyBhIFR5cGVTY3JpcHQgZXhwcmVzc2lvbiBub2RlLCBvciBgdW5kZWZpbmVkYFxuICAgKiBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbXB1dGVkLlxuICAgKi9cbiAgZ2V0VmFyaWFibGVWYWx1ZShkZWNsYXJhdGlvbjogdHMuVmFyaWFibGVEZWNsYXJhdGlvbik6IHRzLkV4cHJlc3Npb258bnVsbDtcblxuICAvKipcbiAgICogVGFrZSBhbiBleHBvcnRlZCBkZWNsYXJhdGlvbiAobWF5YmUgYSBjbGFzcyBkb3duLWxldmVsZWQgdG8gYSB2YXJpYWJsZSkgYW5kIGxvb2sgdXAgdGhlXG4gICAqIGRlY2xhcmF0aW9uIG9mIGl0cyB0eXBlIGluIGEgc2VwYXJhdGUgLmQudHMgdHJlZS5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBhbGxvd2VkIHRvIHJldHVybiBgbnVsbGAgaWYgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCBkb2VzIG5vdCBoYXZlIGFcbiAgICogc2VwYXJhdGUgLmQudHMgdHJlZS4gV2hlbiBjb21waWxpbmcgVHlwZVNjcmlwdCBjb2RlIHRoaXMgaXMgYWx3YXlzIHRoZSBjYXNlLCBzaW5jZSAuZC50cyBmaWxlc1xuICAgKiBhcmUgcHJvZHVjZWQgb25seSBkdXJpbmcgdGhlIGVtaXQgb2Ygc3VjaCBhIGNvbXBpbGF0aW9uLiBXaGVuIGNvbXBpbGluZyAuanMgY29kZSwgaG93ZXZlcixcbiAgICogdGhlcmUgaXMgZnJlcXVlbnRseSBhIHBhcmFsbGVsIC5kLnRzIHRyZWUgd2hpY2ggdGhpcyBtZXRob2QgZXhwb3Nlcy5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBgdHMuRGVjbGFyYXRpb25gIHJldHVybmVkIGZyb20gdGhpcyBmdW5jdGlvbiBtYXkgbm90IGJlIGZyb20gdGhlIHNhbWVcbiAgICogYHRzLlByb2dyYW1gIGFzIHRoZSBpbnB1dCBkZWNsYXJhdGlvbi5cbiAgICovXG4gIGdldER0c0RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uOiBEZWNsYXJhdGlvbk5vZGUpOiB0cy5EZWNsYXJhdGlvbnxudWxsO1xuXG4gIC8qKlxuICAgKiBHZXQgYSBgdHMuSWRlbnRpZmllcmAgZm9yIGEgZ2l2ZW4gYENsYXNzRGVjbGFyYXRpb25gIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlZmVyIHRvIHRoZSBjbGFzc1xuICAgKiB3aXRoaW4gaXRzIGRlZmluaXRpb24gKHN1Y2ggYXMgaW4gc3RhdGljIGZpZWxkcykuXG4gICAqXG4gICAqIFRoaXMgY2FuIGRpZmZlciBmcm9tIGBjbGF6ei5uYW1lYCB3aGVuIG5nY2MgcnVucyBvdmVyIEVTNSBjb2RlLCBzaW5jZSB0aGUgY2xhc3MgbWF5IGhhdmUgYVxuICAgKiBkaWZmZXJlbnQgbmFtZSB3aXRoaW4gaXRzIElJRkUgd3JhcHBlciB0aGFuIGl0IGRvZXMgZXh0ZXJuYWxseS5cbiAgICovXG4gIGdldEludGVybmFsTmFtZU9mQ2xhc3MoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiB0cy5JZGVudGlmaWVyO1xuXG4gIC8qKlxuICAgKiBHZXQgYSBgdHMuSWRlbnRpZmllcmAgZm9yIGEgZ2l2ZW4gYENsYXNzRGVjbGFyYXRpb25gIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlZmVyIHRvIHRoZSBjbGFzc1xuICAgKiBmcm9tIHN0YXRlbWVudHMgdGhhdCBhcmUgXCJhZGphY2VudFwiLCBhbmQgY29uY2VwdHVhbGx5IHRpZ2h0bHkgYm91bmQsIHRvIHRoZSBjbGFzcyBidXQgbm90XG4gICAqIGFjdHVhbGx5IGluc2lkZSBpdC5cbiAgICpcbiAgICogU2ltaWxhciB0byBgZ2V0SW50ZXJuYWxOYW1lT2ZDbGFzcygpYCwgdGhpcyBuYW1lIGNhbiBkaWZmZXIgZnJvbSBgY2xhenoubmFtZWAgd2hlbiBuZ2NjIHJ1bnNcbiAgICogb3ZlciBFUzUgY29kZSwgc2luY2UgdGhlc2UgXCJhZGphY2VudFwiIHN0YXRlbWVudHMgbmVlZCB0byBleGlzdCBpbiB0aGUgSUlGRSB3aGVyZSB0aGUgY2xhc3MgbWF5XG4gICAqIGhhdmUgYSBkaWZmZXJlbnQgbmFtZSB0aGFuIGl0IGRvZXMgZXh0ZXJuYWxseS5cbiAgICovXG4gIGdldEFkamFjZW50TmFtZU9mQ2xhc3MoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiB0cy5JZGVudGlmaWVyO1xufVxuIl19
|
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
*/
|
|
8
8
|
/// <amd-module name="@angular/compiler-cli/src/ngtsc/reflection/src/typescript" />
|
|
9
9
|
import * as ts from 'typescript';
|
|
10
|
-
import { ClassDeclaration, ClassMember, CtorParameter, Declaration, Decorator, FunctionDefinition, Import, ReflectionHost } from './host';
|
|
10
|
+
import { ClassDeclaration, ClassMember, CtorParameter, Declaration, DeclarationNode, Decorator, FunctionDefinition, Import, ReflectionHost } from './host';
|
|
11
11
|
/**
|
|
12
12
|
* reflector.ts implements static reflection of declarations using the TypeScript `ts.TypeChecker`.
|
|
13
13
|
*/
|
|
14
14
|
export declare class TypeScriptReflectionHost implements ReflectionHost {
|
|
15
15
|
protected checker: ts.TypeChecker;
|
|
16
16
|
constructor(checker: ts.TypeChecker);
|
|
17
|
-
getDecoratorsOfDeclaration(declaration:
|
|
17
|
+
getDecoratorsOfDeclaration(declaration: DeclarationNode): Decorator[] | null;
|
|
18
18
|
getMembersOfClass(clazz: ClassDeclaration): ClassMember[];
|
|
19
19
|
getConstructorParameters(clazz: ClassDeclaration): CtorParameter[] | null;
|
|
20
20
|
getImportOfIdentifier(id: ts.Identifier): Import | null;
|
|
@@ -26,7 +26,7 @@ export declare class TypeScriptReflectionHost implements ReflectionHost {
|
|
|
26
26
|
getDefinitionOfFunction(node: ts.Node): FunctionDefinition | null;
|
|
27
27
|
getGenericArityOfClass(clazz: ClassDeclaration): number | null;
|
|
28
28
|
getVariableValue(declaration: ts.VariableDeclaration): ts.Expression | null;
|
|
29
|
-
getDtsDeclaration(_:
|
|
29
|
+
getDtsDeclaration(_: ClassDeclaration): ts.Declaration | null;
|
|
30
30
|
getInternalNameOfClass(clazz: ClassDeclaration): ts.Identifier;
|
|
31
31
|
getAdjacentNameOfClass(clazz: ClassDeclaration): ts.Identifier;
|
|
32
32
|
protected getDirectImportOfIdentifier(id: ts.Identifier): Import | null;
|