@mnemonica/tactica 0.4.0 → 0.4.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/README.md +2 -2
- package/lib/analyzer.d.ts +24 -3
- package/lib/analyzer.js +107 -15
- package/lib/cli.js +27 -3
- package/lib/generator.d.ts +4 -1
- package/lib/generator.js +7 -3
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/types.d.ts +30 -0
- package/lib/types.js +1 -1
- package/lib/writer.d.ts +9 -1
- package/lib/writer.js +19 -1
- package/package.json +3 -3
package/lib/generator.js
CHANGED
|
@@ -509,7 +509,10 @@ class TypesGenerator {
|
|
|
509
509
|
return result;
|
|
510
510
|
}
|
|
511
511
|
/**
|
|
512
|
-
* Group collection type nodes by their registry interface name and
|
|
512
|
+
* Group collection type nodes by their registry interface name and the
|
|
513
|
+
* collection's home file (the module declaring the interface — the
|
|
514
|
+
* augmentation target), NOT each type's own define file: multi-file
|
|
515
|
+
* collections define types across many modules.
|
|
513
516
|
* Returns a map keyed by `${registryInterfaceName}::${sourceFile}`.
|
|
514
517
|
*/
|
|
515
518
|
groupCollectionRegistryNodes() {
|
|
@@ -519,7 +522,8 @@ class TypesGenerator {
|
|
|
519
522
|
if (!node.registryInterfaceName) {
|
|
520
523
|
continue;
|
|
521
524
|
}
|
|
522
|
-
const
|
|
525
|
+
const homeFile = node.collectionSourceFile ?? node.sourceFile;
|
|
526
|
+
const key = `${node.registryInterfaceName}::${homeFile}`;
|
|
523
527
|
const existing = groups.get(key);
|
|
524
528
|
if (existing) {
|
|
525
529
|
existing.push(node);
|
|
@@ -549,4 +553,4 @@ class TypesGenerator {
|
|
|
549
553
|
}
|
|
550
554
|
}
|
|
551
555
|
exports.TypesGenerator = TypesGenerator;
|
|
552
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUViLDJDQUE2QjtBQWdCN0I7O0dBRUc7QUFDSCxNQUFhLGNBQWM7SUFLMUIsWUFDUyxLQUFvQixFQUM1QixHQUFHLEdBQUcsS0FBSyxFQUNYLFNBQVMsR0FBRyxVQUFVLEVBQ2QsaUJBQTBDO1FBSDFDLFVBQUssR0FBTCxLQUFLLENBQWU7UUFHcEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUF5QjtRQU4zQyxxQkFBZ0IsR0FBc0IsRUFBRSxDQUFDO1FBUWhELElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssVUFBVSxDQUFFLFFBQWdCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7OztVQU9HO0lBQ0gsMEJBQTBCO1FBQ3pCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixNQUFNLGNBQWMsR0FBYSxFQUFFLENBQUM7UUFFcEMsMkRBQTJEO1FBQzNELEtBQUssQ0FBQyxJQUFJLENBQUMsa0RBQWtELENBQUMsQ0FBQztRQUMvRCxLQUFLLENBQUMsSUFBSSxDQUFDLHlFQUF5RSxDQUFDLENBQUM7UUFDdEYsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEtBQUssQ0FBQyxJQUFJLENBQUMsOERBQThELENBQUMsQ0FBQztRQUMzRSxLQUFLLENBQUMsSUFBSSxDQUFDLDREQUE0RCxDQUFDLENBQUM7UUFDekUsS0FBSyxDQUFDLElBQUksQ0FB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dHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtcblx0VHlwZU5vZGUsIEdlbmVyYXRlZFR5cGVzLCBSZXNvbHV0aW9uRXJyb3IgXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgVHlwZUdyYXBoSW1wbCB9IGZyb20gJy4vZ3JhcGgnO1xuXG4vKipcbiAqIFBhdGgtYXdhcmUgcmVzb2x2ZXIgZm9yIG1uZW1vbmljYSBncmFwaCB0eXBlIG5hbWVzIHJlZmVyZW5jZWQgaW5zaWRlIHR5cGVcbiAqIHN0cmluZ3Mgd2hpbGUgZ2VuZXJhdGluZyBvdXRwdXQuIFJldHVybnMgdGhlIHVuaXF1ZSB0eXBlLCAnYW1iaWd1b3VzJywgb3JcbiAqIHVuZGVmaW5lZCAocmVzb2x2ZXMgdG8gbm90aGluZykg4oCUIHNlZSByZXNvbHZlR3JhcGhUeXBlUmVmZXJlbmNlLlxuICovXG5leHBvcnQgdHlwZSBHcmFwaFJlZmVyZW5jZVJlc29sdmVyID0gKFxuXHRzaW1wbGVOYW1lOiBzdHJpbmcsXG5cdGN1cnJlbnROb2RlOiBUeXBlTm9kZVxuKSA9PiBUeXBlTm9kZSB8ICdhbWJpZ3VvdXMnIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZSBnZW5lcmF0b3JcbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGVzR2VuZXJhdG9yIHtcblx0cHJpdmF0ZSBlc206IGJvb2xlYW47XG5cdHByaXZhdGUgb3V0cHV0RGlyOiBzdHJpbmc7XG5cdHByaXZhdGUgcmVzb2x1dGlvbkVycm9yczogUmVzb2x1dGlvbkVycm9yW10gPSBbXTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBncmFwaDogVHlwZUdyYXBoSW1wbCxcblx0XHRlc20gPSBmYWxzZSxcblx0XHRvdXRwdXREaXIgPSAnLnRhY3RpY2EnLFxuXHRcdHByaXZhdGUgcmVmZXJlbmNlUmVzb2x2ZXI/OiBHcmFwaFJlZmVyZW5jZVJlc29sdmVyXG5cdCkge1xuXHRcdHRoaXMuZXNtID0gZXNtO1xuXHRcdHRoaXMub3V0cHV0RGlyID0gb3V0cHV0RGlyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBpbXBvcnQgcGF0aCB3aXRoIG9wdGlvbmFsIC5qcyBleHRlbnNpb24gZm9yIEVTTSBOb2RlTmV4dFxuXHQgKi9cblx0cHJpdmF0ZSBpbXBvcnRQYXRoIChyZWxhdGl2ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5lc20gPyBgJHtyZWxhdGl2ZX0uanNgIDogcmVsYXRpdmU7XG5cdH1cblxuXHQvKipcblx0XHQqIEdlbmVyYXRlIGdsb2JhbCBhdWdtZW50YXRpb24gZmlsZSB0aGF0IGF1Z21lbnRzIHVzZXIgY2xhc3NlcyBkaXJlY3RseVxuXHRcdCogVGhpcyBhbGxvd3MgdXNpbmcgZGVjb3JhdGVkIGNsYXNzZXMgd2l0aG91dCBtYW51YWwgdHlwZSBjYXN0aW5nXG5cdFx0KlxuXHRcdCogQWxsIHR5cGVzIGFyZSBwbGFjZWQgaW4gdGhlIGdsb2JhbCBzY29wZSB2aWEgZGVjbGFyZSBnbG9iYWwsIHdoaWNoIGFsbG93c1xuXHRcdCogdGhlbSB0byBiZSBhY2Nlc3NlZCBmcm9tIGFueSBtb2R1bGUgd2l0aG91dCBpbXBvcnRzLiBJbnRlcmZhY2VzIGRlY2xhcmVkXG5cdFx0KiBpbiB0aGUgZ2xvYmFsIHNjb3BlIHdpbGwgbWVyZ2Ugd2l0aCBjbGFzc2VzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdXNlciBtb2R1bGVzLlxuXHRcdCovXG5cdGdlbmVyYXRlR2xvYmFsQXVnbWVudGF0aW9uICgpOiBHZW5lcmF0ZWRUeXBlcyB7XG5cdFx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3QgZ2VuZXJhdGVkVHlwZXM6IHN0cmluZ1tdID0gW107XG5cblx0XHQvLyBIZWFkZXIgLSBtYWtlIHRoaXMgYSBtb2R1bGUgc28gd2UgY2FuIHVzZSBkZWNsYXJlIGdsb2JhbFxuXHRcdGxpbmVzLnB1c2goJy8vIEdlbmVyYXRlZCBieSBAbW5lbW9uaWNhL3RhY3RpY2EgLSBETyBOT1QgRURJVCcpO1xuXHRcdGxpbmVzLnB1c2goJy8vIFRoaXMgZmlsZSBwcm92aWRlcyBhdXRvbWF0aWMgdHlwZSBhdWdtZW50YXRpb24gZm9yIGRlY29yYXRlZCBjbGFzc2VzJyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdFx0bGluZXMucHVzaCgnLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlICovJyk7XG5cdFx0bGluZXMucHVzaCgnLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZSAqLycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gSW1wb3J0IFByb3RvRmxhdCBmcm9tIG1uZW1vbmljYVxuXHRcdGxpbmVzLnB1c2goJ2ltcG9ydCB0eXBlIHsgUHJvdG9GbGF0IH0gZnJvbSBcXCdtbmVtb25pY2FcXCc7Jyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblx0XHQvLyBNYWtlIHRoaXMgYSBtb2R1bGUgc28gd2UgY2FuIHVzZSBkZWNsYXJlIGdsb2JhbFxuXHRcdGxpbmVzLnB1c2goJ2V4cG9ydCB7fTsnKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXHRcdC8vIEFsbCB0eXBlcyBnbyBpbnNpZGUgZGVjbGFyZSBnbG9iYWwgc28gdGhleSBhcmUgZ2xvYmFsbHkgYWNjZXNzaWJsZVxuXHRcdGxpbmVzLnB1c2goJ2RlY2xhcmUgZ2xvYmFsIHsnKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXG5cdFx0Ly8gR2VuZXJhdGUgaW5zdGFuY2UgdHlwZXMgZm9yIGFsbCBkZWZhdWx0LWNvbGxlY3Rpb24gdHlwZXMgLSBpbiBnbG9iYWwgc2NvcGVcblx0XHRmb3IgKGNvbnN0IHJvb3Qgb2YgdGhpcy5ncmFwaC5yb290cy52YWx1ZXMoKSkge1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIHRoaXMuZ3JhcGguZGZzKHJvb3QpKSB7XG5cdFx0XHRcdGlmIChub2RlLmNvbGxlY3Rpb25JZCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlTmFtZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlKTtcblx0XHRcdFx0Z2VuZXJhdGVkVHlwZXMucHVzaChpbnN0YW5jZU5hbWUpO1xuXHRcdFx0XHQvLyBSb290IHR5cGVzIGFyZSBkZWNsYXJlZCBhcyBpbnRlcmZhY2VzIGJlbG93IChkZWNsYXJhdGlvblxuXHRcdFx0XHQvLyBtZXJnaW5nIHdpdGggQGRlY29yYXRlIGNsYXNzZXMpLiBFbWl0dGluZyBgdHlwZSBYYCBoZXJlIGFzXG5cdFx0XHRcdC8vIHdlbGwgd291bGQgY29sbGlkZSB3aXRoIGBpbnRlcmZhY2UgWGAgaW4gdGhlIHNhbWUgZ2xvYmFsXG5cdFx0XHRcdC8vIHNjb3BlIChUUzIzMDApLCBhbmQgdGhlIHJvb3QgaW50ZXJmYWNlIGFscmVhZHkgY2Fycmllc1xuXHRcdFx0XHQvLyBldmVyeXRoaW5nIHRoZSBhbGlhcyB3b3VsZCAocHJvcHMgKyBjaGlsZCBjb25zdHJ1Y3RvcnMpLlxuXHRcdFx0XHRpZiAoIW5vZGUucGFyZW50KSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5nZW5lcmF0ZUluc3RhbmNlVHlwZShub2RlLCBsaW5lcywgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gR2VuZXJhdGUgY2xhc3MgaW50ZXJmYWNlcyAtIGluIGdsb2JhbCBzY29wZSBmb3IgZGVjbGFyYXRpb24gbWVyZ2luZ1xuXHRcdC8vIFRoZXNlIGludGVyZmFjZXMgd2lsbCBtZXJnZSB3aXRoIGNsYXNzZXMgb2YgdGhlIHNhbWUgbmFtZSBpbiB1c2VyIG1vZHVsZXNcblx0XHRsaW5lcy5wdXNoKCdcdC8vIENsYXNzIGludGVyZmFjZXMgZm9yIGRlY2xhcmF0aW9uIG1lcmdpbmcnKTtcblx0XHRsaW5lcy5wdXNoKCdcdC8vIFRoZXNlIG1lcmdlIHdpdGggQGRlY29yYXRlKCkgY2xhc3NlcyB0byBwcm92aWRlIHByb3BlciB0eXBpbmcnKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblx0XHRmb3IgKGNvbnN0IHJvb3Qgb2YgdGhpcy5ncmFwaC5yb290cy52YWx1ZXMoKSkge1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIHRoaXMuZ3JhcGguZGZzKHJvb3QpKSB7XG5cdFx0XHRcdGlmIChub2RlLmNvbGxlY3Rpb25JZCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuZ2VuZXJhdGVDbGFzc0ludGVyZmFjZShub2RlLCBsaW5lcywgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGluZXMucHVzaCgnfScpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvbnRlbnQgOiBsaW5lcy5qb2luKCdcXG4nKSxcblx0XHRcdHR5cGVzICAgOiBnZW5lcmF0ZWRUeXBlcyxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdFx0ICogR2VuZXJhdGUgaW5zdGFuY2UgdHlwZSBhbGlhcyAoZGVzY3JpYmVzIHdoYXQgdGhlIGluc3RhbmNlIElTKVxuXHRcdCAqIFVzZXMgUHJvdG9GbGF0IGZvciBwcm9wZXIgaW5oZXJpdGFuY2UgKGV4Y2x1ZGVzIG92ZXJyaWRkZW4gcGFyZW50IHByb3BzKVxuXHRcdCAqL1xuXHRwcml2YXRlIGdlbmVyYXRlSW5zdGFuY2VUeXBlIChub2RlOiBUeXBlTm9kZSwgbGluZXM6IHN0cmluZ1tdLCBpbmRlbnQ6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IGluZGVudFN0ciA9ICdcXHQnLnJlcGVhdChpbmRlbnQpO1xuXHRcdGNvbnN0IGluc3RhbmNlTmFtZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlKTtcblxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0Ly8gTmVzdGVkIHR5cGU6IFVzZSBQcm90b0ZsYXQgdG8gcHJvcGVybHkgZXhjbHVkZSBvdmVycmlkZGVuIHByb3BlcnRpZXNcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfXR5cGUgJHtpbnN0YW5jZU5hbWV9ID0gUHJvdG9GbGF0PCR7dGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKG5vZGUucGFyZW50KX0sIHtgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gUm9vdCB0eXBlOiBqdXN0IHRoZSBwcm9wZXJ0aWVzIG9iamVjdFxuXHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9dHlwZSAke2luc3RhbmNlTmFtZX0gPSB7YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIGluc3RhbmNlIHByb3BlcnRpZXNcblx0XHRmb3IgKGNvbnN0IFsgcHJvcE5hbWUsIHByb3BJbmZvIF0gb2Ygbm9kZS5wcm9wZXJ0aWVzLmVudHJpZXMoKSkge1xuXHRcdFx0Y29uc3Qgb3B0aW9uYWwgPSBwcm9wSW5mby5vcHRpb25hbCA/ICc/JyA6ICcnO1xuXHRcdFx0Y29uc3QgcmVhZG9ubHkgPSBwcm9wSW5mby5yZWFkb25seSA/ICdyZWFkb25seSAnIDogJyc7XG5cdFx0XHRsaW5lcy5wdXNoKGAke2luZGVudFN0cn1cXHQke3JlYWRvbmx5fSR7cHJvcE5hbWV9JHtvcHRpb25hbH06ICR7cHJvcEluZm8udHlwZX07YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIG5lc3RlZCBjb25zdHJ1Y3RvciBwcm9wZXJ0aWVzIGZvciBub24tbGVhZiBub2RlcyDigJQgbWlycm9yc1xuXHRcdC8vIGdlbmVyYXRlQ29tcGxldGVJbnN0YW5jZUludGVyZmFjZSAodHlwZXMudHMpOiBzdWJ0eXBlcyBjb25zdHJ1Y3Rcblx0XHQvLyBmcm9tIHBhcmVudCBpbnN0YW5jZXMgYXQgYW55IGRlcHRoLCBub3Qgb25seSBmcm9tIHJvb3RzXG5cdFx0aWYgKG5vZGUuY2hpbGRyZW4uc2l6ZSA+IDApIHtcblx0XHRcdGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbi52YWx1ZXMoKSkge1xuXHRcdFx0XHRjb25zdCBjaGlsZEluc3RhbmNlVHlwZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShjaGlsZCk7XG5cdFx0XHRcdGNvbnN0IGNvbnN0cnVjdG9yU2lnID0gdGhpcy5nZW5lcmF0ZUNvbnN0cnVjdG9yU2lnbmF0dXJlKGNoaWxkKTtcblx0XHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtjaGlsZC5uYW1lfTogJHtjb25zdHJ1Y3RvclNpZ30gPT4gJHtjaGlsZEluc3RhbmNlVHlwZX07YCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG5lc3RlZCB0eXBlcywgYWRkIHRoaXMgbm9kZSdzIGNvbnN0cnVjdG9yIGFuZCBhbGwgc2libGluZ3MgYXNcblx0XHQvLyB1bmRlZmluZWQgKHN0cmljdC1jaGFpbiBiZWhhdmlvcjsgcGFyZW50IHVuZGVmaW5lZHMgY29tZSB2aWEgUHJvdG9GbGF0KVxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtub2RlLm5hbWV9OiB1bmRlZmluZWQ7YCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNpYmxpbmcgb2Ygbm9kZS5wYXJlbnQuY2hpbGRyZW4udmFsdWVzKCkpIHtcblx0XHRcdFx0aWYgKHNpYmxpbmcubmFtZSAhPT0gbm9kZS5uYW1lKSB7XG5cdFx0XHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtzaWJsaW5nLm5hbWV9OiB1bmRlZmluZWQ7YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDbG9zZSB0aGUgdHlwZSBwcm9wZXJseSAtIFByb3RvRmxhdCB1c2VzIH0+OyBmb3IgbmVzdGVkLCB9OyBmb3Igcm9vdFxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9fT47YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfX07YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIGVtcHR5IGxpbmUgYWZ0ZXIgZWFjaCB0eXBlXG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdH1cblxuXHQvKipcblx0XHQgKiBHZW5lcmF0ZSBjbGFzcyBpbnRlcmZhY2UgZm9yIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gbWVyZ2luZ1xuXHRcdCAqIFRoaXMgbWVyZ2VzIHdpdGggdGhlIGFjdHVhbCBjbGFzcyB0byBwcm92aWRlIHByb3BlciB0eXBpbmdcblx0XHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUNsYXNzSW50ZXJmYWNlIChub2RlOiBUeXBlTm9kZSwgbGluZXM6IHN0cmluZ1tdLCBpbmRlbnQ6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IGluZGVudFN0ciA9ICdcXHQnLnJlcGVhdChpbmRlbnQpO1xuXG5cdFx0Ly8gQnVpbGQgZXh0ZW5kcyBjbGF1c2Vcblx0XHRjb25zdCBleHRlbmRzVHlwZXM6IHN0cmluZ1tdID0gW107XG5cdFx0aWYgKG5vZGUucGFyZW50KSB7XG5cdFx0XHRleHRlbmRzVHlwZXMucHVzaChub2RlLnBhcmVudC5uYW1lKTtcblx0XHR9XG5cblx0XHRjb25zdCBleHRlbmRzQ2xhdXNlID0gZXh0ZW5kc1R5cGVzLmxlbmd0aCA+IDBcblx0XHRcdD8gYCBleHRlbmRzICR7ZXh0ZW5kc1R5cGVzLmpvaW4oJywgJyl9YFxuXHRcdFx0OiAnJztcblxuXHRcdC8vIEludGVyZmFjZSB3aXRoIHNhbWUgbmFtZSBhcyBjbGFzcyAtIFR5cGVTY3JpcHQgbWVyZ2VzIHRoZXNlXG5cdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9aW50ZXJmYWNlICR7bm9kZS5uYW1lfSR7ZXh0ZW5kc0NsYXVzZX0ge2ApO1xuXHRcdFx0XG5cdFx0Ly8gQWRkIGFsbCBpbnN0YW5jZSBwcm9wZXJ0aWVzIChmb3IgdHlwZSBtZXJnaW5nKVxuXHRcdGZvciAoY29uc3QgWyBwcm9wTmFtZSwgcHJvcEluZm8gXSBvZiBub2RlLnByb3BlcnRpZXMuZW50cmllcygpKSB7XG5cdFx0XHRjb25zdCBvcHRpb25hbCA9IHByb3BJbmZvLm9wdGlvbmFsID8gJz8nIDogJyc7XG5cdFx0XHRjb25zdCByZWFkb25seSA9IHByb3BJbmZvLnJlYWRvbmx5ID8gJ3JlYWRvbmx5ICcgOiAnJztcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfVxcdCR7cmVhZG9ubHl9JHtwcm9wTmFtZX0ke29wdGlvbmFsfTogJHtwcm9wSW5mby50eXBlfTtgKTtcblx0XHR9XG5cblx0XHQvLyBBZGQgc3VidHlwZSBjb25zdHJ1Y3RvcnMgKG5vbi1vcHRpb25hbCBzbyB0aGV5J3JlIGFjY2Vzc2libGUpIC0gb25seSBmb3Igcm9vdCB0eXBlc1xuXHRcdGlmICghbm9kZS5wYXJlbnQpIHtcblx0XHRcdGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbi52YWx1ZXMoKSkge1xuXHRcdFx0XHRjb25zdCBjaGlsZEluc3RhbmNlVHlwZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShjaGlsZCk7XG5cdFx0XHRcdGNvbnN0IGNvbnN0cnVjdG9yU2lnID0gdGhpcy5nZW5lcmF0ZUNvbnN0cnVjdG9yU2lnbmF0dXJlKGNoaWxkKTtcblx0XHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtjaGlsZC5uYW1lfTogJHtjb25zdHJ1Y3RvclNpZ30gPT4gJHtjaGlsZEluc3RhbmNlVHlwZX07YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcblx0XHRsaW5lcy5wdXNoKGAke2luZGVudFN0cn19YCk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdH1cblx0XHRcblx0LyoqXG5cdFx0KiBHZW5lcmF0ZSBhIHR5cGVzLnRzIGZpbGUgd2l0aCBjb21wbGV0ZSBpbnN0YW5jZSBpbnRlcmZhY2VzXG5cdFx0KiBUaGlzIGluY2x1ZGVzIGFsbCBwcm9wZXJ0aWVzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb25zdHJ1Y3RvcnNcblx0XHQqL1xuXHRnZW5lcmF0ZVR5cGVzRmlsZSAoKTogR2VuZXJhdGVkVHlwZXMge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGdlbmVyYXRlZFR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Ly8gSGVhZGVyXG5cdFx0bGluZXMucHVzaCgnLy8gR2VuZXJhdGVkIGJ5IEBtbmVtb25pY2EvdGFjdGljYSAtIERPIE5PVCBFRElUJyk7XG5cdFx0bGluZXMucHVzaCgnLy8gVGhpcyBmaWxlIHByb3ZpZGVzIGNvbXBsZXRlIFR5cGVTY3JpcHQgaW50ZXJmYWNlcyBmb3IgTW5lbW9uaWNhIHR5cGVzJyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdFx0bGluZXMucHVzaCgnLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlICovJyk7XG5cdFx0bGluZXMucHVzaCgnLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZSAqLycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gSW1wb3J0IFByb3RvRmxhdCBmcm9tIG1uZW1vbmljYVxuXHRcdGxpbmVzLnB1c2goJ2ltcG9ydCB0eXBlIHsgUHJvdG9GbGF0IH0gZnJvbSBcXCdtbmVtb25pY2FcXCc7Jyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblx0XHQvLyBHZW5lcmF0ZSBjb21wbGV0ZSBpbnN0YW5jZSBpbnRlcmZhY2VzIGZvciBkZWZhdWx0LWNvbGxlY3Rpb24gdHlwZXMgYW5kXG5cdFx0Ly8gZm9yIGN1c3RvbSBjb2xsZWN0aW9ucyB0aGF0IGRlY2xhcmUgYSB1c2VyLXByb3ZpZGVkIHJlZ2lzdHJ5IGludGVyZmFjZVxuXHRcdC8vIChPcHRpb24gQikuIEN1c3RvbS1jb2xsZWN0aW9uIHR5cGVzIHdpdGhvdXQgYSByZWdpc3RyeSBpbnRlcmZhY2UgYXJlXG5cdFx0Ly8gaXNvbGF0ZWQgYXQgcnVudGltZSBhbmQgYXJlIG5vdCBlbWl0dGVkLlxuXHRcdGZvciAoY29uc3Qgcm9vdCBvZiB0aGlzLmdyYXBoLnJvb3RzLnZhbHVlcygpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ncmFwaC5kZnMocm9vdCkpIHtcblx0XHRcdFx0aWYgKG5vZGUuY29sbGVjdGlvbklkICYmICFub2RlLnJlZ2lzdHJ5SW50ZXJmYWNlTmFtZSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGludGVyZmFjZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cdFx0XHRcdGdlbmVyYXRlZFR5cGVzLnB1c2goaW50ZXJmYWNlTmFtZSk7XG5cdFx0XHRcdHRoaXMuZ2VuZXJhdGVDb21wbGV0ZUluc3RhbmNlSW50ZXJmYWNlKG5vZGUsIGxpbmVzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0Y29udGVudCA6IGxpbmVzLmpvaW4oJ1xcbicpLFxuXHRcdFx0dHlwZXMgICA6IGdlbmVyYXRlZFR5cGVzLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0XHQgKiBHZW5lcmF0ZSBhIGNvbXBsZXRlIGluc3RhbmNlIHR5cGUgYWxpYXMgd2l0aCBhbGwgcHJvcGVydGllc1xuXHRcdCAqIFRoaXMgaXMgZm9yIHRoZSB0eXBlcy50cyBmaWxlIHRoYXQgdXNlcnMgaW1wb3J0IGZyb21cblx0XHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUNvbXBsZXRlSW5zdGFuY2VJbnRlcmZhY2UgKG5vZGU6IFR5cGVOb2RlLCBsaW5lczogc3RyaW5nW10pOiB2b2lkIHtcblx0XHRjb25zdCB0eXBlTmFtZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlKTtcblxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0Ly8gTmVzdGVkIHR5cGU6IFVzZSBQcm90b0ZsYXQgdG8gcHJvcGVybHkgZXhjbHVkZSBvdmVycmlkZGVuIHByb3BlcnRpZXNcblx0XHRcdGxpbmVzLnB1c2goYGV4cG9ydCB0eXBlICR7dHlwZU5hbWV9ID0gUHJvdG9GbGF0PCR7dGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKG5vZGUucGFyZW50KX0sIHtgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gUm9vdCB0eXBlOiBqdXN0IHRoZSBwcm9wZXJ0aWVzIG9iamVjdFxuXHRcdFx0bGluZXMucHVzaChgZXhwb3J0IHR5cGUgJHt0eXBlTmFtZX0gPSB7YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIGluc3RhbmNlIHByb3BlcnRpZXMgZXh0cmFjdGVkIGZyb20gdGhlIGNvbnN0cnVjdG9yXG5cdFx0Zm9yIChjb25zdCBbIHByb3BOYW1lLCBwcm9wSW5mbyBdIG9mIG5vZGUucHJvcGVydGllcy5lbnRyaWVzKCkpIHtcblx0XHRcdGNvbnN0IG9wdGlvbmFsID0gcHJvcEluZm8ub3B0aW9uYWwgPyAnPycgOiAnJztcblx0XHRcdGNvbnN0IHJlYWRvbmx5ID0gcHJvcEluZm8ucmVhZG9ubHkgPyAncmVhZG9ubHkgJyA6ICcnO1xuXHRcdFx0bGluZXMucHVzaChgXFx0JHtyZWFkb25seX0ke3Byb3BOYW1lfSR7b3B0aW9uYWx9OiAke3RoaXMucmVzb2x2ZVR5cGVJblN0cmluZyhwcm9wSW5mby50eXBlLCBub2RlKX07YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIG5lc3RlZCBjb25zdHJ1Y3RvciBwcm9wZXJ0aWVzIGZvciBub24tbGVhZiBub2Rlc1xuXHRcdC8vIExlYWYgbm9kZXMgKG5vIGNoaWxkcmVuKSBkb24ndCBnZXQgY29uc3RydWN0b3IgcHJvcGVydGllc1xuXHRcdC8vIFRoaXMgZm9sbG93cyBtbmVtb25pY2EncyBzdHJpY3RDaGFpbiBiZWhhdmlvclxuXHRcdGlmIChub2RlLmNoaWxkcmVuLnNpemUgPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4udmFsdWVzKCkpIHtcblx0XHRcdFx0Y29uc3QgY2hpbGRJbnN0YW5jZVR5cGUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUoY2hpbGQpO1xuXHRcdFx0XHRjb25zdCBjb25zdHJ1Y3RvclNpZyA9IHRoaXMuZ2VuZXJhdGVDb25zdHJ1Y3RvclNpZ25hdHVyZShjaGlsZCk7XG5cdFx0XHRcdGxpbmVzLnB1c2goYFxcdCR7Y2hpbGQubmFtZX06ICR7Y29uc3RydWN0b3JTaWd9ID0+ICR7Y2hpbGRJbnN0YW5jZVR5cGV9O2ApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZvciBuZXN0ZWQgdHlwZXMsIGFkZCB0aGlzIG5vZGUncyBjb25zdHJ1Y3RvciBhbmQgYWxsIHNpYmxpbmdzIGZyb20gc2FtZSBwYXJlbnQgYXMgdW5kZWZpbmVkXG5cdFx0Ly8gVGhpcyBpcyBuZWVkZWQgZm9yIHN0cmljdCBjaGFpbiBiZWhhdmlvciAtIHBhcmVudCB1bmRlZmluZWRzIGFyZSBpbmhlcml0ZWQgdmlhIFByb3RvRmxhdFxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0Ly8gQWRkIHRoaXMgbm9kZSdzIG93biBjb25zdHJ1Y3RvciBhcyB1bmRlZmluZWRcblx0XHRcdGxpbmVzLnB1c2goYFxcdCR7bm9kZS5uYW1lfTogdW5kZWZpbmVkO2ApO1xuXG5cdFx0XHQvLyBBZGQgYWxsIHNpYmxpbmdzIChvdGhlciBjaGlsZHJlbiBvZiB0aGUgc2FtZSBwYXJlbnQpIGFzIHVuZGVmaW5lZFxuXHRcdFx0Zm9yIChjb25zdCBzaWJsaW5nIG9mIG5vZGUucGFyZW50LmNoaWxkcmVuLnZhbHVlcygpKSB7XG5cdFx0XHRcdGlmIChzaWJsaW5nLm5hbWUgIT09IG5vZGUubmFtZSkge1xuXHRcdFx0XHRcdGxpbmVzLnB1c2goYFxcdCR7c2libGluZy5uYW1lfTogdW5kZWZpbmVkO2ApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvc2UgdGhlIHR5cGUgcHJvcGVybHkgLSBQcm90b0ZsYXQgdXNlcyB9PjsgZm9yIG5lc3RlZCwgfTsgZm9yIHJvb3Rcblx0XHRpZiAobm9kZS5wYXJlbnQpIHtcblx0XHRcdGxpbmVzLnB1c2goJ30+OycpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsaW5lcy5wdXNoKCd9OycpO1xuXHRcdH1cblx0XHRsaW5lcy5wdXNoKCcnKTtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIGEgc2ltcGxlIHR5cGUgZGVjbGFyYXRpb24gZm9yIGEgc2luZ2xlIHR5cGVcblx0XHQgKi9cblx0Z2VuZXJhdGVTaW5nbGVUeXBlIChub2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cdFx0dGhpcy5nZW5lcmF0ZUNvbXBsZXRlSW5zdGFuY2VJbnRlcmZhY2Uobm9kZSwgbGluZXMpO1xuXHRcdHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIFR5cGVSZWdpc3RyeSBpbnRlcmZhY2UgZm9yIHR5cGUtc2FmZSBsb29rdXAoKSBmdW5jdGlvblxuXHRcdCAqIEF1Z21lbnQgbW5lbW9uaWNhJ3MgVHlwZVJlZ2lzdHJ5IHNvIGxvb2t1cCgnVHlwZU5hbWUnKSByZXR1cm5zIHRoZSB0eXBlZCBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHRnZW5lcmF0ZVR5cGVSZWdpc3RyeSAoKTogR2VuZXJhdGVkVHlwZXMge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGdlbmVyYXRlZFR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Ly8gSGVhZGVyXG5cdFx0bGluZXMucHVzaCgnLy8gR2VuZXJhdGVkIFR5cGVSZWdpc3RyeSBmb3IgdHlwZS1zYWZlIG1uZW1vbmljYS5sb29rdXAoKScpO1xuXHRcdGxpbmVzLnB1c2goJy8vIFRoaXMgZmlsZSBhdWdtZW50cyBtbmVtb25pY2FcXCdzIFR5cGVSZWdpc3RyeSB2aWEgZGVjbGFyYXRpb24gbWVyZ2luZy4nKTtcblx0XHRsaW5lcy5wdXNoKCcvLycpO1xuXHRcdGxpbmVzLnB1c2goJy8vIFVzYWdlOicpO1xuXHRcdGxpbmVzLnB1c2goJy8vICAgaW1wb3J0IHsgbG9va3VwIH0gZnJvbSBcXCdtbmVtb25pY2FcXCc7Jyk7XG5cdFx0bGluZXMucHVzaCgnLy8gICBpbXBvcnQgXFwnLi8udGFjdGljYS9yZWdpc3RyeVxcJzsgIC8vIGFwcGxpZXMgdGhlIGF1Z21lbnRhdGlvbicpO1xuXHRcdGxpbmVzLnB1c2goJy8vICAgY29uc3QgTXlUeXBlID0gbG9va3VwKFxcJ015VHlwZVxcJyk7Jyk7XG5cdFx0bGluZXMucHVzaCgnLy8gICAvLyBUeXBlU2NyaXB0IGtub3dzOiBNeVR5cGUgaXMgdGhlIHR5cGVkIGNvbnN0cnVjdG9yIGZvciBNeVR5cGUnKTtcblx0XHRsaW5lcy5wdXNoKCcvLyAgIGNvbnN0IGluc3RhbmNlID0gbmV3IE15VHlwZSh7IC8qIGNvbnN0cnVjdG9yIGFyZ3MgKi8gfSk7Jyk7XG5cdFx0bGluZXMucHVzaCgnLy8gICAvLyBpbnN0YW5jZSBoYXMgZnVsbCBpbnRlbGxpc2Vuc2UgZm9yIHRoZSBnZW5lcmF0ZWQgdHlwZScpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gSW1wb3J0IGluc3RhbmNlIHR5cGVzIGZyb20gdHlwZXMudHMuXG5cdFx0Ly8gU2tpcCBjdXN0b20tY29sbGVjdGlvbiB0eXBlcyB0aGF0IGhhdmUgbm8gdXNlci1wcm92aWRlZCByZWdpc3RyeSBpbnRlcmZhY2UuXG5cdFx0bGluZXMucHVzaCgnaW1wb3J0IHR5cGUgeycpO1xuXHRcdGZvciAoY29uc3Qgcm9vdCBvZiB0aGlzLmdyYXBoLnJvb3RzLnZhbHVlcygpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ncmFwaC5kZnMocm9vdCkpIHtcblx0XHRcdFx0aWYgKG5vZGUuY29sbGVjdGlvbklkICYmICFub2RlLnJlZ2lzdHJ5SW50ZXJmYWNlTmFtZSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlVHlwZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cdFx0XHRcdGxpbmVzLnB1c2goYFxcdCR7aW5zdGFuY2VUeXBlTmFtZX0sYCk7XG5cdFx0XHRcdGdlbmVyYXRlZFR5cGVzLnB1c2goaW5zdGFuY2VUeXBlTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGxpbmVzLnB1c2goYH0gZnJvbSAnJHt0aGlzLmltcG9ydFBhdGgoJy4vdHlwZXMnKX0nO2ApO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gR2VuZXJhdGUgbW9kdWxlIGF1Z21lbnRhdGlvbiBmb3IgbW5lbW9uaWNhIFR5cGVSZWdpc3RyeVxuXHRcdGxpbmVzLnB1c2goJy8qKicpO1xuXHRcdGxpbmVzLnB1c2goJyAqIFR5cGUgcmVnaXN0cnkgYXVnbWVudGluZyBtbmVtb25pY2FcXCdzIFR5cGVSZWdpc3RyeSBpbnRlcmZhY2UnKTtcblx0XHRsaW5lcy5wdXNoKCcgKiBUaGlzIGVuYWJsZXMgdHlwZS1zYWZlIGxvb2t1cCgpIHdpdGhvdXQgZXhwbGljaXQgdHlwZSBhcmd1bWVudHMnKTtcblx0XHRsaW5lcy5wdXNoKCcgKicpO1xuXHRcdGxpbmVzLnB1c2goJyAqIFVzYWdlOiBjb25zdCBTb21lVHlwZSA9IGxvb2t1cChcXCdTb21lVHlwZVxcJyk7IC8vIEZ1bGx5IHR5cGVkIScpO1xuXHRcdGxpbmVzLnB1c2goJyAqLycpO1xuXHRcdGxpbmVzLnB1c2goJ2RlY2xhcmUgbW9kdWxlIFxcJ21uZW1vbmljYVxcJyB7Jyk7XG5cdFx0bGluZXMucHVzaCgnXHRpbnRlcmZhY2UgVHlwZVJlZ2lzdHJ5IHsnKTtcblxuXHRcdC8vIEdlbmVyYXRlIGVudHJpZXMgZm9yIGFsbCB0eXBlIHBhdGhzIHRoYXQgYmVsb25nIHRvIHRoZSBkZWZhdWx0L2dsb2JhbCBjb2xsZWN0aW9uLlxuXHRcdC8vIFR5cGVzIHRoYXQgbGl2ZSBpbiBhIGN1c3RvbSBjb2xsZWN0aW9uIChjb2xsZWN0aW9uSWQgc2V0KSBhcmUgaXNvbGF0ZWQgYXQgcnVudGltZVxuXHRcdC8vIGFuZCBhcmUgbm90IHJlYWNoYWJsZSB0aHJvdWdoIGZyZWUgbG9va3VwKCksIHNvIHRoZXkgbXVzdCBub3QgYmUgYWRkZWQgdG8gdGhlXG5cdFx0Ly8gZ2xvYmFsIFR5cGVSZWdpc3RyeSBhdWdtZW50YXRpb24uXG5cdFx0Zm9yIChjb25zdCByb290IG9mIHRoaXMuZ3JhcGgucm9vdHMudmFsdWVzKCkpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmdyYXBoLmRmcyhyb290KSkge1xuXHRcdFx0XHRpZiAobm9kZS5jb2xsZWN0aW9uSWQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmdWxsUGF0aCA9IHRoaXMuZ2V0RnVsbFBhdGgobm9kZSk7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlVHlwZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlKTtcblx0XHRcdFx0Ly8gR2VuZXJhdGUgdHlwZWQgY29uc3RydWN0b3Igc2lnbmF0dXJlIGZvciBuZXN0ZWQgdHlwZXMgd2l0aCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGNvbnN0IGNvbnN0cnVjdG9yU2lnID0gdGhpcy5nZW5lcmF0ZUNvbnN0cnVjdG9yU2lnbmF0dXJlKG5vZGUpO1xuXHRcdFx0XHRsaW5lcy5wdXNoKGBcXHRcXHQnJHtmdWxsUGF0aH0nOiAke2NvbnN0cnVjdG9yU2lnfSA9PiAke2luc3RhbmNlVHlwZX07YCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGluZXMucHVzaCgnXFx0fScpO1xuXHRcdGxpbmVzLnB1c2goJ30nKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXHRcdC8vIEdlbmVyYXRlIHBlci1jb2xsZWN0aW9uIHJlZ2lzdHJ5IGF1Z21lbnRhdGlvbnMgZm9yIE9wdGlvbiBCXG5cdFx0Ly8gKHVzZXItcHJvdmlkZWQgcmVnaXN0cnkgaW50ZXJmYWNlcykuXG5cdFx0Y29uc3QgY29sbGVjdGlvbkdyb3VwcyA9IHRoaXMuZ3JvdXBDb2xsZWN0aW9uUmVnaXN0cnlOb2RlcygpO1xuXHRcdGZvciAoY29uc3QgWyBrZXksIG5vZGVzIF0gb2YgY29sbGVjdGlvbkdyb3Vwcykge1xuXHRcdFx0Y29uc3QgWyByZWdpc3RyeUludGVyZmFjZU5hbWUsIHNvdXJjZUZpbGUgXSA9IGtleS5zcGxpdCgnOjonKTtcblx0XHRcdGNvbnN0IG1vZHVsZVBhdGggPSB0aGlzLnJlc29sdmVNb2R1bGVQYXRoKHNvdXJjZUZpbGUpO1xuXHRcdFx0bGluZXMucHVzaChgZGVjbGFyZSBtb2R1bGUgJyR7bW9kdWxlUGF0aH0nIHtgKTtcblx0XHRcdGxpbmVzLnB1c2goYFxcdGludGVyZmFjZSAke3JlZ2lzdHJ5SW50ZXJmYWNlTmFtZX0ge2ApO1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0XHRcdGNvbnN0IGZ1bGxQYXRoID0gdGhpcy5nZXRGdWxsUGF0aChub2RlKTtcblx0XHRcdFx0Y29uc3QgaW5zdGFuY2VUeXBlID0gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKG5vZGUpO1xuXHRcdFx0XHRjb25zdCBjb25zdHJ1Y3RvclNpZyA9IHRoaXMuZ2VuZXJhdGVDb25zdHJ1Y3RvclNpZ25hdHVyZShub2RlKTtcblx0XHRcdFx0bGluZXMucHVzaChgXFx0XFx0JyR7ZnVsbFBhdGh9JzogJHtjb25zdHJ1Y3RvclNpZ30gPT4gJHtpbnN0YW5jZVR5cGV9O2ApO1xuXHRcdFx0fVxuXHRcdFx0bGluZXMucHVzaCgnXFx0fScpO1xuXHRcdFx0bGluZXMucHVzaCgnfScpO1xuXHRcdFx0bGluZXMucHVzaCgnJyk7XG5cdFx0fVxuXG5cdFx0Ly8gUmUtZXhwb3J0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCBleHBsaWNpdCB1c2FnZVxuXHRcdGxpbmVzLnB1c2goJ2ltcG9ydCB0eXBlIHsgVHlwZVJlZ2lzdHJ5IH0gZnJvbSBcXCdtbmVtb25pY2FcXCc7Jyk7XG5cdFx0bGluZXMucHVzaCgnZXhwb3J0IHR5cGUgeyBUeXBlUmVnaXN0cnkgfTsnKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjb250ZW50IDogbGluZXMuam9pbignXFxuJyksXG5cdFx0XHR0eXBlcyAgIDogZ2VuZXJhdGVkVHlwZXMsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBmb3IgYSB0eXBlIG5vZGVcblx0XHQgKiBVc2VzIGNvbnN0cnVjdG9yUGFyYW1zIGZvciBUeXBlUmVnaXN0cnkgc2lnbmF0dXJlIChub3QgaW5zdGFuY2UgcHJvcGVydGllcylcblx0XHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUNvbnN0cnVjdG9yU2lnbmF0dXJlIChub2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0Ly8gVXNlIGNvbnN0cnVjdG9yUGFyYW1zIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBlbXB0eSBzaWduYXR1cmVcblx0XHRjb25zdCBwYXJhbXMgPSBub2RlLmNvbnN0cnVjdG9yUGFyYW1zO1xuXG5cdFx0aWYgKCFwYXJhbXMgfHwgcGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuICduZXcgKCknO1xuXHRcdH1cblxuXHRcdC8vIEJ1aWxkIHR5cGVkIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBmcm9tIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnNcblx0XHRjb25zdCBwcm9wczogc3RyaW5nW10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHBhcmFtIG9mIHBhcmFtcykge1xuXHRcdFx0Y29uc3Qgb3B0aW9uYWwgPSBwYXJhbS5vcHRpb25hbCA/ICc/JyA6ICcnO1xuXHRcdFx0cHJvcHMucHVzaChgJHtwYXJhbS5uYW1lfSR7b3B0aW9uYWx9OiAke3BhcmFtLnR5cGV9YCk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSB3aXRoIGRhdGEgcGFyYW1ldGVyXG5cdFx0cmV0dXJuIGBuZXcgKCR7cHJvcHMuam9pbignLCAnKX0pYDtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdldCB0aGUgZnVsbCBkb3R0ZWQgcGF0aCBmb3IgYSB0eXBlIG5vZGVcblx0XHQgKi9cblx0cHJpdmF0ZSBnZXRGdWxsUGF0aCAobm9kZTogVHlwZU5vZGUpOiBzdHJpbmcge1xuXHRcdGlmICghbm9kZS5wYXJlbnQpIHtcblx0XHRcdHJldHVybiBub2RlLm5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBgJHt0aGlzLmdldEZ1bGxQYXRoKG5vZGUucGFyZW50KX0uJHtub2RlLm5hbWV9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGluc3RhbmNlIHR5cGUgbmFtZSBmb3IgYSBub2RlXG5cdCAqIFVzZXMgZnVsbCBwYXRoIHdpdGggdW5kZXJzY29yZXM6IFVzYWdlcy5Vc2FnZUVudHJ5IC0+IFVzYWdlc19Vc2FnZUVudHJ5XG5cdCAqIEZvciBPcHRpb24gQiBjdXN0b20gY29sbGVjdGlvbnMsIHByZWZpeGVzIHdpdGggdGhlIHJlZ2lzdHJ5IGludGVyZmFjZSBuYW1lLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRJbnN0YW5jZVR5cGVOYW1lIChub2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZnVsbFBhdGggPSB0aGlzLmdldEZ1bGxQYXRoKG5vZGUpO1xuXHRcdGNvbnN0IHByZWZpeCA9IG5vZGUucmVnaXN0cnlJbnRlcmZhY2VOYW1lID8gYCR7bm9kZS5yZWdpc3RyeUludGVyZmFjZU5hbWV9X2AgOiAnJztcblx0XHRyZXR1cm4gYCR7cHJlZml4fSR7ZnVsbFBhdGgucmVwbGFjZSgvXFwuL2csICdfJyl9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNvbHZlIGEgc2ltcGxlIHR5cGUgbmFtZSB0byBpdHMgZnVsbCBwYXRoIG5hbWVcblx0ICogZS5nLiwgXCJEZWZpbml0aW9uRW50cnlcIiAtPiBcIkRlZmluaXRpb25zX0RlZmluaXRpb25FbnRyeVwiXG5cdCAqXG5cdCAqIFdpdGggYSByZWZlcmVuY2VSZXNvbHZlciBpbnN0YWxsZWQgKHRoZSBDTEkgcGF0aCksIHJlc29sdXRpb24gaXNcblx0ICogcGF0aC1hd2FyZSBwZXIgdGhlIGdyYXBoIGlkZW50aXR5IGxhdzogdGhlIHJlc29sdmVyIHJldHVybnMgdGhlIHVuaXF1ZVxuXHQgKiB0eXBlLCAnYW1iaWd1b3VzJywgb3IgdW5kZWZpbmVkIOKAlCB0aGUgbGF0dGVyIHR3byByZWNvcmQgYSBoYXJkLWZhaWxcblx0ICogUmVzb2x1dGlvbkVycm9yIGFuZCBlbWl0IGB1bmtub3duYCBpbnN0ZWFkIG9mIHNpbGVudGx5IHBpY2tpbmcgYVxuXHQgKiBmaXJzdCBtYXRjaC4gV2l0aG91dCBhIHJlc29sdmVyIHRoZSBsZWdhY3kgZmlyc3QtbWF0Y2ggc2NhbiBzdGF5cy5cblx0ICovXG5cdHByaXZhdGUgcmVzb2x2ZVR5cGVOYW1lIChzaW1wbGVOYW1lOiBzdHJpbmcsIGN1cnJlbnROb2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0aWYgKHRoaXMucmVmZXJlbmNlUmVzb2x2ZXIpIHtcblx0XHRcdGNvbnN0IHJlc29sdmVkID0gdGhpcy5yZWZlcmVuY2VSZXNvbHZlcihzaW1wbGVOYW1lLCBjdXJyZW50Tm9kZSk7XG5cdFx0XHRpZiAocmVzb2x2ZWQgJiYgcmVzb2x2ZWQgIT09ICdhbWJpZ3VvdXMnKSB7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlTmFtZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShyZXNvbHZlZCk7XG5cdFx0XHRcdHJldHVybiBpbnN0YW5jZU5hbWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhbmNob3JMb2NhdGlvbiA9IGAke2N1cnJlbnROb2RlLnNvdXJjZUZpbGV9OiR7Y3VycmVudE5vZGUubGluZX06JHtjdXJyZW50Tm9kZS5jb2x1bW59YDtcblx0XHRcdGNvbnN0IGFtYmlndW91c0dlbmVyYXRpb25NZXNzYWdlID0gYEFtYmlndW91cyByZWZlcmVuY2UgdG8gbW5lbW9uaWNhIHR5cGUgJyR7c2ltcGxlTmFtZX0nIGAgK1xuXHRcdFx0XHRgd2hpbGUgZ2VuZXJhdGluZyAnJHt0aGlzLmdldEZ1bGxQYXRoKGN1cnJlbnROb2RlKX0nYDtcblx0XHRcdGNvbnN0IHVucmVzb2x2ZWRHZW5lcmF0aW9uTWVzc2FnZSA9IGBVbnJlc29sdmVkIHJlZmVyZW5jZSB0byBtbmVtb25pY2EgdHlwZSAnJHtzaW1wbGVOYW1lfScgYCArXG5cdFx0XHRcdGB3aGlsZSBnZW5lcmF0aW5nICcke3RoaXMuZ2V0RnVsbFBhdGgoY3VycmVudE5vZGUpfSdgO1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IHJlc29sdmVkID09PSAnYW1iaWd1b3VzJ1xuXHRcdFx0XHQ/IGFtYmlndW91c0dlbmVyYXRpb25NZXNzYWdlXG5cdFx0XHRcdDogdW5yZXNvbHZlZEdlbmVyYXRpb25NZXNzYWdlO1xuXHRcdFx0Y29uc3QgZXJyb3I6IFJlc29sdXRpb25FcnJvciA9IHsgbWVzc2FnZSwgbG9jYXRpb25zIDogWyBhbmNob3JMb2NhdGlvbiBdIH07XG5cdFx0XHR0aGlzLnJlc29sdXRpb25FcnJvcnMucHVzaChlcnJvcik7XG5cdFx0XHRjb25zdCB1bmtub3duUmVzdWx0ID0gJ3Vua25vd24nO1xuXHRcdFx0cmV0dXJuIHVua25vd25SZXN1bHQ7XG5cdFx0fVxuXG5cdFx0Ly8gRmlyc3QgY2hlY2sgaWYgaXQncyB0aGUgY3VycmVudCBub2RlIG9yIGl0cyBjaGlsZHJlblxuXHRcdGlmIChjdXJyZW50Tm9kZS5uYW1lID09PSBzaW1wbGVOYW1lKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKGN1cnJlbnROb2RlKTtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBjdXJyZW50Tm9kZS5jaGlsZHJlbi52YWx1ZXMoKSkge1xuXHRcdFx0aWYgKGNoaWxkLm5hbWUgPT09IHNpbXBsZU5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShjaGlsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIFNlYXJjaCBhbGwgdHlwZXMgaW4gdGhlIGdyYXBoXG5cdFx0Zm9yIChjb25zdCB0eXBlIG9mIHRoaXMuZ3JhcGguZ2V0QWxsVHlwZXMoKSkge1xuXHRcdFx0aWYgKHR5cGUubmFtZSA9PT0gc2ltcGxlTmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKHR5cGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2ltcGxlTmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYXJkLWZhaWwgZ3JhcGggcmVmZXJlbmNlIGVycm9ycyByZWNvcmRlZCB3aGlsZSBnZW5lcmF0aW5nIChzZWVcblx0ICogcmVmZXJlbmNlUmVzb2x2ZXIpLiBUaGUgQ0xJIHByaW50cyBldmVyeSBsb2NhdGlvbiBhbmQgd3JpdGVzIG5vIG91dHB1dC5cblx0ICovXG5cdGdldFJlc29sdXRpb25FcnJvcnMgKCk6IFJlc29sdXRpb25FcnJvcltdIHtcblx0XHRjb25zdCByZXN1bHQgPSBbIC4uLnRoaXMucmVzb2x1dGlvbkVycm9ycyBdO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogUmVzb2x2ZSBzaW1wbGUgdHlwZSBuYW1lcyB0byBmdWxsIHBhdGggbmFtZXMgd2l0aGluIGEgdHlwZSBzdHJpbmdcblx0ICogSGFuZGxlcyBjb21wbGV4IHR5cGVzIGxpa2UgQXJyYXk8VXNhZ2VFbnRyeT4sIE1hcDxzdHJpbmcsIFR5cGVFbnRyeT4sIGV0Yy5cblx0ICovXG5cdHByaXZhdGUgcmVzb2x2ZVR5cGVJblN0cmluZyAodHlwZVN0cjogc3RyaW5nLCBjdXJyZW50Tm9kZTogVHlwZU5vZGUpOiBzdHJpbmcge1xuXHRcdC8vIEdldCBhbGwgdHlwZSBuYW1lcyBmcm9tIHRoZSBncmFwaFxuXHRcdGNvbnN0IGFsbFR5cGVzID0gdGhpcy5ncmFwaC5nZXRBbGxUeXBlcygpO1xuXHRcdGNvbnN0IHR5cGVOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGZvciAoY29uc3QgdHlwZSBvZiBhbGxUeXBlcykge1xuXHRcdFx0dHlwZU5hbWVzLmFkZCh0eXBlLm5hbWUpO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgYnkgbGVuZ3RoIChsb25nZXN0IGZpcnN0KSB0byBhdm9pZCBwYXJ0aWFsIHJlcGxhY2VtZW50c1xuXHRcdGNvbnN0IHNvcnRlZE5hbWVzID0gQXJyYXkuZnJvbSh0eXBlTmFtZXMpLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpO1xuXG5cdFx0Ly8gUmVwbGFjZSBlYWNoIHNpbXBsZSB0eXBlIG5hbWUgd2l0aCBpdHMgZnVsbCBwYXRoIHZlcnNpb25cblx0XHRsZXQgcmVzdWx0ID0gdHlwZVN0cjtcblx0XHRmb3IgKGNvbnN0IG5hbWUgb2Ygc29ydGVkTmFtZXMpIHtcblx0XHRcdC8vIFNraXAgbmFtZXMgdGhhdCBkbyBub3Qgb2NjdXIg4oCUIHdpdGggYSByZWZlcmVuY2VSZXNvbHZlciBpbnN0YWxsZWQsXG5cdFx0XHQvLyByZXNvbHZpbmcgYWJzZW50IG5hbWVzIHdvdWxkIHJlY29yZCBzcHVyaW91cyBlcnJvcnNcblx0XHRcdGNvbnN0IG9jY3VycyA9IG5ldyBSZWdFeHAoYFxcXFxiJHtuYW1lfVxcXFxiYCkudGVzdChyZXN1bHQpO1xuXHRcdFx0aWYgKCFvY2N1cnMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHQvLyBVc2Ugd29yZCBib3VuZGFyeSBtYXRjaGluZyB0byBhdm9pZCByZXBsYWNpbmcgcGFydGlhbCBuYW1lc1xuXHRcdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcYiR7bmFtZX1cXFxcYmAsICdnJyk7XG5cdFx0XHRjb25zdCBmdWxsVHlwZU5hbWUgPSB0aGlzLnJlc29sdmVUeXBlTmFtZShuYW1lLCBjdXJyZW50Tm9kZSk7XG5cdFx0XHRpZiAoZnVsbFR5cGVOYW1lICE9PSBuYW1lKSB7XG5cdFx0XHRcdHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKHJlZ2V4LCBmdWxsVHlwZU5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdyb3VwIGNvbGxlY3Rpb24gdHlwZSBub2RlcyBieSB0aGVpciByZWdpc3RyeSBpbnRlcmZhY2UgbmFtZSBhbmQgc291cmNlIGZpbGUuXG5cdCAqIFJldHVybnMgYSBtYXAga2V5ZWQgYnkgYCR7cmVnaXN0cnlJbnRlcmZhY2VOYW1lfTo6JHtzb3VyY2VGaWxlfWAuXG5cdCAqL1xuXHRwcml2YXRlIGdyb3VwQ29sbGVjdGlvblJlZ2lzdHJ5Tm9kZXMgKCk6IE1hcDxzdHJpbmcsIFR5cGVOb2RlW10+IHtcblx0XHRjb25zdCBncm91cHMgPSBuZXcgTWFwPHN0cmluZywgVHlwZU5vZGVbXT4oKTtcblx0XHRmb3IgKGNvbnN0IHJvb3Qgb2YgdGhpcy5ncmFwaC5yb290cy52YWx1ZXMoKSkge1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIHRoaXMuZ3JhcGguZGZzKHJvb3QpKSB7XG5cdFx0XHRcdGlmICghbm9kZS5yZWdpc3RyeUludGVyZmFjZU5hbWUpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBrZXkgPSBgJHtub2RlLnJlZ2lzdHJ5SW50ZXJmYWNlTmFtZX06OiR7bm9kZS5zb3VyY2VGaWxlfWA7XG5cdFx0XHRcdGNvbnN0IGV4aXN0aW5nID0gZ3JvdXBzLmdldChrZXkpO1xuXHRcdFx0XHRpZiAoZXhpc3RpbmcpIHtcblx0XHRcdFx0XHRleGlzdGluZy5wdXNoKG5vZGUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGdyb3Vwcy5zZXQoa2V5LCBbIG5vZGUgXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGdyb3Vwcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNvbHZlIGEgc291cmNlIGZpbGUgcGF0aCB0byBhIG1vZHVsZSBzcGVjaWZpZXIgcmVsYXRpdmUgdG8gdGhlIG91dHB1dCBkaXJlY3RvcnksXG5cdCAqIHN1aXRhYmxlIGZvciB1c2UgaW4gYSBgZGVjbGFyZSBtb2R1bGUgJy4uLidgIGJsb2NrLlxuXHQgKi9cblx0cHJpdmF0ZSByZXNvbHZlTW9kdWxlUGF0aCAoc291cmNlRmlsZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCBvdXRwdXRBYnNvbHV0ZSA9IHBhdGgucmVzb2x2ZSh0aGlzLm91dHB1dERpcik7XG5cdFx0Y29uc3Qgc291cmNlQWJzb2x1dGUgPSBwYXRoLnJlc29sdmUoc291cmNlRmlsZSk7XG5cdFx0bGV0IHJlbGF0aXZlID0gcGF0aC5yZWxhdGl2ZShvdXRwdXRBYnNvbHV0ZSwgc291cmNlQWJzb2x1dGUpO1xuXHRcdC8vIFJlbW92ZSAudHMgZXh0ZW5zaW9uOyBrZWVwIC50c3ggaWYgcHJlc2VudFxuXHRcdGlmIChyZWxhdGl2ZS5lbmRzV2l0aCgnLnRzJykgJiYgIXJlbGF0aXZlLmVuZHNXaXRoKCcudHN4JykpIHtcblx0XHRcdHJlbGF0aXZlID0gcmVsYXRpdmUuc2xpY2UoMCwgLTMpO1xuXHRcdH1cblx0XHQvLyBDb252ZXJ0IFdpbmRvd3Mgc2VwYXJhdG9ycyB0byBQT1NJWFxuXHRcdGNvbnN0IHBvc2l4UmVsYXRpdmUgPSByZWxhdGl2ZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cdFx0cmV0dXJuIHBvc2l4UmVsYXRpdmU7XG5cdH1cbn1cbiJdfQ==
|
|
556
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUViLDJDQUE2QjtBQWdCN0I7O0dBRUc7QUFDSCxNQUFhLGNBQWM7SUFLMUIsWUFDUyxLQUFvQixFQUM1QixHQUFHLEdBQUcsS0FBSyxFQUNYLFNBQVMsR0FBRyxVQUFVLEVBQ2QsaUJBQTBDO1FBSDFDLFVBQUssR0FBTCxLQUFLLENBQWU7UUFHcEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUF5QjtRQU4zQyxxQkFBZ0IsR0FBc0IsRUFBRSxDQUFDO1FBUWhELElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssVUFBVSxDQUFFLFFBQWdCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7OztVQU9HO0lBQ0gsMEJBQTBCO1FBQ3pCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixNQUFNLGNBQWMsR0FBYSxFQUFFLENBQUM7UUFFcEMsMkRBQTJEO1FBQzNELEtBQUssQ0FBQyxJQUFJLENBQUMsa0RBQWtELENBQUMsQ0FBQztRQUMvRCxLQUFLLENBQUMsSUFBSSxDQUFDLHlFQUF5RSxDQUFDLENBQUM7UUFDdEYsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEtBQUssQ0FBQyxJQUFJLENBQUMsOERBQThELENBQUMsQ0FBQztRQUMzRSxLQUFLLENBQUMsSUFBSSxDQUFDLDREQUE0RCxDQUFDLENBQUM7UUFDekUsS0FBSyxDQUFDLElBQUksQ0FB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SUFDdEIsQ0FBQztDQUNEO0FBL2pCRCx3Q0ErakJDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtcblx0VHlwZU5vZGUsIEdlbmVyYXRlZFR5cGVzLCBSZXNvbHV0aW9uRXJyb3IgXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgVHlwZUdyYXBoSW1wbCB9IGZyb20gJy4vZ3JhcGgnO1xuXG4vKipcbiAqIFBhdGgtYXdhcmUgcmVzb2x2ZXIgZm9yIG1uZW1vbmljYSBncmFwaCB0eXBlIG5hbWVzIHJlZmVyZW5jZWQgaW5zaWRlIHR5cGVcbiAqIHN0cmluZ3Mgd2hpbGUgZ2VuZXJhdGluZyBvdXRwdXQuIFJldHVybnMgdGhlIHVuaXF1ZSB0eXBlLCAnYW1iaWd1b3VzJywgb3JcbiAqIHVuZGVmaW5lZCAocmVzb2x2ZXMgdG8gbm90aGluZykg4oCUIHNlZSByZXNvbHZlR3JhcGhUeXBlUmVmZXJlbmNlLlxuICovXG5leHBvcnQgdHlwZSBHcmFwaFJlZmVyZW5jZVJlc29sdmVyID0gKFxuXHRzaW1wbGVOYW1lOiBzdHJpbmcsXG5cdGN1cnJlbnROb2RlOiBUeXBlTm9kZVxuKSA9PiBUeXBlTm9kZSB8ICdhbWJpZ3VvdXMnIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZSBnZW5lcmF0b3JcbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGVzR2VuZXJhdG9yIHtcblx0cHJpdmF0ZSBlc206IGJvb2xlYW47XG5cdHByaXZhdGUgb3V0cHV0RGlyOiBzdHJpbmc7XG5cdHByaXZhdGUgcmVzb2x1dGlvbkVycm9yczogUmVzb2x1dGlvbkVycm9yW10gPSBbXTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBncmFwaDogVHlwZUdyYXBoSW1wbCxcblx0XHRlc20gPSBmYWxzZSxcblx0XHRvdXRwdXREaXIgPSAnLnRhY3RpY2EnLFxuXHRcdHByaXZhdGUgcmVmZXJlbmNlUmVzb2x2ZXI/OiBHcmFwaFJlZmVyZW5jZVJlc29sdmVyXG5cdCkge1xuXHRcdHRoaXMuZXNtID0gZXNtO1xuXHRcdHRoaXMub3V0cHV0RGlyID0gb3V0cHV0RGlyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBpbXBvcnQgcGF0aCB3aXRoIG9wdGlvbmFsIC5qcyBleHRlbnNpb24gZm9yIEVTTSBOb2RlTmV4dFxuXHQgKi9cblx0cHJpdmF0ZSBpbXBvcnRQYXRoIChyZWxhdGl2ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5lc20gPyBgJHtyZWxhdGl2ZX0uanNgIDogcmVsYXRpdmU7XG5cdH1cblxuXHQvKipcblx0XHQqIEdlbmVyYXRlIGdsb2JhbCBhdWdtZW50YXRpb24gZmlsZSB0aGF0IGF1Z21lbnRzIHVzZXIgY2xhc3NlcyBkaXJlY3RseVxuXHRcdCogVGhpcyBhbGxvd3MgdXNpbmcgZGVjb3JhdGVkIGNsYXNzZXMgd2l0aG91dCBtYW51YWwgdHlwZSBjYXN0aW5nXG5cdFx0KlxuXHRcdCogQWxsIHR5cGVzIGFyZSBwbGFjZWQgaW4gdGhlIGdsb2JhbCBzY29wZSB2aWEgZGVjbGFyZSBnbG9iYWwsIHdoaWNoIGFsbG93c1xuXHRcdCogdGhlbSB0byBiZSBhY2Nlc3NlZCBmcm9tIGFueSBtb2R1bGUgd2l0aG91dCBpbXBvcnRzLiBJbnRlcmZhY2VzIGRlY2xhcmVkXG5cdFx0KiBpbiB0aGUgZ2xvYmFsIHNjb3BlIHdpbGwgbWVyZ2Ugd2l0aCBjbGFzc2VzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdXNlciBtb2R1bGVzLlxuXHRcdCovXG5cdGdlbmVyYXRlR2xvYmFsQXVnbWVudGF0aW9uICgpOiBHZW5lcmF0ZWRUeXBlcyB7XG5cdFx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3QgZ2VuZXJhdGVkVHlwZXM6IHN0cmluZ1tdID0gW107XG5cblx0XHQvLyBIZWFkZXIgLSBtYWtlIHRoaXMgYSBtb2R1bGUgc28gd2UgY2FuIHVzZSBkZWNsYXJlIGdsb2JhbFxuXHRcdGxpbmVzLnB1c2goJy8vIEdlbmVyYXRlZCBieSBAbW5lbW9uaWNhL3RhY3RpY2EgLSBETyBOT1QgRURJVCcpO1xuXHRcdGxpbmVzLnB1c2goJy8vIFRoaXMgZmlsZSBwcm92aWRlcyBhdXRvbWF0aWMgdHlwZSBhdWdtZW50YXRpb24gZm9yIGRlY29yYXRlZCBjbGFzc2VzJyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdFx0bGluZXMucHVzaCgnLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlICovJyk7XG5cdFx0bGluZXMucHVzaCgnLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZSAqLycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gSW1wb3J0IFByb3RvRmxhdCBmcm9tIG1uZW1vbmljYVxuXHRcdGxpbmVzLnB1c2goJ2ltcG9ydCB0eXBlIHsgUHJvdG9GbGF0IH0gZnJvbSBcXCdtbmVtb25pY2FcXCc7Jyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblx0XHQvLyBNYWtlIHRoaXMgYSBtb2R1bGUgc28gd2UgY2FuIHVzZSBkZWNsYXJlIGdsb2JhbFxuXHRcdGxpbmVzLnB1c2goJ2V4cG9ydCB7fTsnKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXHRcdC8vIEFsbCB0eXBlcyBnbyBpbnNpZGUgZGVjbGFyZSBnbG9iYWwgc28gdGhleSBhcmUgZ2xvYmFsbHkgYWNjZXNzaWJsZVxuXHRcdGxpbmVzLnB1c2goJ2RlY2xhcmUgZ2xvYmFsIHsnKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXG5cdFx0Ly8gR2VuZXJhdGUgaW5zdGFuY2UgdHlwZXMgZm9yIGFsbCBkZWZhdWx0LWNvbGxlY3Rpb24gdHlwZXMgLSBpbiBnbG9iYWwgc2NvcGVcblx0XHRmb3IgKGNvbnN0IHJvb3Qgb2YgdGhpcy5ncmFwaC5yb290cy52YWx1ZXMoKSkge1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIHRoaXMuZ3JhcGguZGZzKHJvb3QpKSB7XG5cdFx0XHRcdGlmIChub2RlLmNvbGxlY3Rpb25JZCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlTmFtZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlKTtcblx0XHRcdFx0Z2VuZXJhdGVkVHlwZXMucHVzaChpbnN0YW5jZU5hbWUpO1xuXHRcdFx0XHQvLyBSb290IHR5cGVzIGFyZSBkZWNsYXJlZCBhcyBpbnRlcmZhY2VzIGJlbG93IChkZWNsYXJhdGlvblxuXHRcdFx0XHQvLyBtZXJnaW5nIHdpdGggQGRlY29yYXRlIGNsYXNzZXMpLiBFbWl0dGluZyBgdHlwZSBYYCBoZXJlIGFzXG5cdFx0XHRcdC8vIHdlbGwgd291bGQgY29sbGlkZSB3aXRoIGBpbnRlcmZhY2UgWGAgaW4gdGhlIHNhbWUgZ2xvYmFsXG5cdFx0XHRcdC8vIHNjb3BlIChUUzIzMDApLCBhbmQgdGhlIHJvb3QgaW50ZXJmYWNlIGFscmVhZHkgY2Fycmllc1xuXHRcdFx0XHQvLyBldmVyeXRoaW5nIHRoZSBhbGlhcyB3b3VsZCAocHJvcHMgKyBjaGlsZCBjb25zdHJ1Y3RvcnMpLlxuXHRcdFx0XHRpZiAoIW5vZGUucGFyZW50KSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5nZW5lcmF0ZUluc3RhbmNlVHlwZShub2RlLCBsaW5lcywgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gR2VuZXJhdGUgY2xhc3MgaW50ZXJmYWNlcyAtIGluIGdsb2JhbCBzY29wZSBmb3IgZGVjbGFyYXRpb24gbWVyZ2luZ1xuXHRcdC8vIFRoZXNlIGludGVyZmFjZXMgd2lsbCBtZXJnZSB3aXRoIGNsYXNzZXMgb2YgdGhlIHNhbWUgbmFtZSBpbiB1c2VyIG1vZHVsZXNcblx0XHRsaW5lcy5wdXNoKCdcdC8vIENsYXNzIGludGVyZmFjZXMgZm9yIGRlY2xhcmF0aW9uIG1lcmdpbmcnKTtcblx0XHRsaW5lcy5wdXNoKCdcdC8vIFRoZXNlIG1lcmdlIHdpdGggQGRlY29yYXRlKCkgY2xhc3NlcyB0byBwcm92aWRlIHByb3BlciB0eXBpbmcnKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblx0XHRmb3IgKGNvbnN0IHJvb3Qgb2YgdGhpcy5ncmFwaC5yb290cy52YWx1ZXMoKSkge1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIHRoaXMuZ3JhcGguZGZzKHJvb3QpKSB7XG5cdFx0XHRcdGlmIChub2RlLmNvbGxlY3Rpb25JZCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuZ2VuZXJhdGVDbGFzc0ludGVyZmFjZShub2RlLCBsaW5lcywgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGluZXMucHVzaCgnfScpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvbnRlbnQgOiBsaW5lcy5qb2luKCdcXG4nKSxcblx0XHRcdHR5cGVzICAgOiBnZW5lcmF0ZWRUeXBlcyxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdFx0ICogR2VuZXJhdGUgaW5zdGFuY2UgdHlwZSBhbGlhcyAoZGVzY3JpYmVzIHdoYXQgdGhlIGluc3RhbmNlIElTKVxuXHRcdCAqIFVzZXMgUHJvdG9GbGF0IGZvciBwcm9wZXIgaW5oZXJpdGFuY2UgKGV4Y2x1ZGVzIG92ZXJyaWRkZW4gcGFyZW50IHByb3BzKVxuXHRcdCAqL1xuXHRwcml2YXRlIGdlbmVyYXRlSW5zdGFuY2VUeXBlIChub2RlOiBUeXBlTm9kZSwgbGluZXM6IHN0cmluZ1tdLCBpbmRlbnQ6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IGluZGVudFN0ciA9ICdcXHQnLnJlcGVhdChpbmRlbnQpO1xuXHRcdGNvbnN0IGluc3RhbmNlTmFtZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlKTtcblxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0Ly8gTmVzdGVkIHR5cGU6IFVzZSBQcm90b0ZsYXQgdG8gcHJvcGVybHkgZXhjbHVkZSBvdmVycmlkZGVuIHByb3BlcnRpZXNcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfXR5cGUgJHtpbnN0YW5jZU5hbWV9ID0gUHJvdG9GbGF0PCR7dGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKG5vZGUucGFyZW50KX0sIHtgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gUm9vdCB0eXBlOiBqdXN0IHRoZSBwcm9wZXJ0aWVzIG9iamVjdFxuXHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9dHlwZSAke2luc3RhbmNlTmFtZX0gPSB7YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIGluc3RhbmNlIHByb3BlcnRpZXNcblx0XHRmb3IgKGNvbnN0IFsgcHJvcE5hbWUsIHByb3BJbmZvIF0gb2Ygbm9kZS5wcm9wZXJ0aWVzLmVudHJpZXMoKSkge1xuXHRcdFx0Y29uc3Qgb3B0aW9uYWwgPSBwcm9wSW5mby5vcHRpb25hbCA/ICc/JyA6ICcnO1xuXHRcdFx0Y29uc3QgcmVhZG9ubHkgPSBwcm9wSW5mby5yZWFkb25seSA/ICdyZWFkb25seSAnIDogJyc7XG5cdFx0XHRsaW5lcy5wdXNoKGAke2luZGVudFN0cn1cXHQke3JlYWRvbmx5fSR7cHJvcE5hbWV9JHtvcHRpb25hbH06ICR7cHJvcEluZm8udHlwZX07YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIG5lc3RlZCBjb25zdHJ1Y3RvciBwcm9wZXJ0aWVzIGZvciBub24tbGVhZiBub2RlcyDigJQgbWlycm9yc1xuXHRcdC8vIGdlbmVyYXRlQ29tcGxldGVJbnN0YW5jZUludGVyZmFjZSAodHlwZXMudHMpOiBzdWJ0eXBlcyBjb25zdHJ1Y3Rcblx0XHQvLyBmcm9tIHBhcmVudCBpbnN0YW5jZXMgYXQgYW55IGRlcHRoLCBub3Qgb25seSBmcm9tIHJvb3RzXG5cdFx0aWYgKG5vZGUuY2hpbGRyZW4uc2l6ZSA+IDApIHtcblx0XHRcdGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbi52YWx1ZXMoKSkge1xuXHRcdFx0XHRjb25zdCBjaGlsZEluc3RhbmNlVHlwZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShjaGlsZCk7XG5cdFx0XHRcdGNvbnN0IGNvbnN0cnVjdG9yU2lnID0gdGhpcy5nZW5lcmF0ZUNvbnN0cnVjdG9yU2lnbmF0dXJlKGNoaWxkKTtcblx0XHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtjaGlsZC5uYW1lfTogJHtjb25zdHJ1Y3RvclNpZ30gPT4gJHtjaGlsZEluc3RhbmNlVHlwZX07YCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG5lc3RlZCB0eXBlcywgYWRkIHRoaXMgbm9kZSdzIGNvbnN0cnVjdG9yIGFuZCBhbGwgc2libGluZ3MgYXNcblx0XHQvLyB1bmRlZmluZWQgKHN0cmljdC1jaGFpbiBiZWhhdmlvcjsgcGFyZW50IHVuZGVmaW5lZHMgY29tZSB2aWEgUHJvdG9GbGF0KVxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtub2RlLm5hbWV9OiB1bmRlZmluZWQ7YCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNpYmxpbmcgb2Ygbm9kZS5wYXJlbnQuY2hpbGRyZW4udmFsdWVzKCkpIHtcblx0XHRcdFx0aWYgKHNpYmxpbmcubmFtZSAhPT0gbm9kZS5uYW1lKSB7XG5cdFx0XHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtzaWJsaW5nLm5hbWV9OiB1bmRlZmluZWQ7YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDbG9zZSB0aGUgdHlwZSBwcm9wZXJseSAtIFByb3RvRmxhdCB1c2VzIH0+OyBmb3IgbmVzdGVkLCB9OyBmb3Igcm9vdFxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9fT47YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfX07YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIGVtcHR5IGxpbmUgYWZ0ZXIgZWFjaCB0eXBlXG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdH1cblxuXHQvKipcblx0XHQgKiBHZW5lcmF0ZSBjbGFzcyBpbnRlcmZhY2UgZm9yIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gbWVyZ2luZ1xuXHRcdCAqIFRoaXMgbWVyZ2VzIHdpdGggdGhlIGFjdHVhbCBjbGFzcyB0byBwcm92aWRlIHByb3BlciB0eXBpbmdcblx0XHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUNsYXNzSW50ZXJmYWNlIChub2RlOiBUeXBlTm9kZSwgbGluZXM6IHN0cmluZ1tdLCBpbmRlbnQ6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IGluZGVudFN0ciA9ICdcXHQnLnJlcGVhdChpbmRlbnQpO1xuXG5cdFx0Ly8gQnVpbGQgZXh0ZW5kcyBjbGF1c2Vcblx0XHRjb25zdCBleHRlbmRzVHlwZXM6IHN0cmluZ1tdID0gW107XG5cdFx0aWYgKG5vZGUucGFyZW50KSB7XG5cdFx0XHRleHRlbmRzVHlwZXMucHVzaChub2RlLnBhcmVudC5uYW1lKTtcblx0XHR9XG5cblx0XHRjb25zdCBleHRlbmRzQ2xhdXNlID0gZXh0ZW5kc1R5cGVzLmxlbmd0aCA+IDBcblx0XHRcdD8gYCBleHRlbmRzICR7ZXh0ZW5kc1R5cGVzLmpvaW4oJywgJyl9YFxuXHRcdFx0OiAnJztcblxuXHRcdC8vIEludGVyZmFjZSB3aXRoIHNhbWUgbmFtZSBhcyBjbGFzcyAtIFR5cGVTY3JpcHQgbWVyZ2VzIHRoZXNlXG5cdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9aW50ZXJmYWNlICR7bm9kZS5uYW1lfSR7ZXh0ZW5kc0NsYXVzZX0ge2ApO1xuXHRcdFx0XG5cdFx0Ly8gQWRkIGFsbCBpbnN0YW5jZSBwcm9wZXJ0aWVzIChmb3IgdHlwZSBtZXJnaW5nKVxuXHRcdGZvciAoY29uc3QgWyBwcm9wTmFtZSwgcHJvcEluZm8gXSBvZiBub2RlLnByb3BlcnRpZXMuZW50cmllcygpKSB7XG5cdFx0XHRjb25zdCBvcHRpb25hbCA9IHByb3BJbmZvLm9wdGlvbmFsID8gJz8nIDogJyc7XG5cdFx0XHRjb25zdCByZWFkb25seSA9IHByb3BJbmZvLnJlYWRvbmx5ID8gJ3JlYWRvbmx5ICcgOiAnJztcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfVxcdCR7cmVhZG9ubHl9JHtwcm9wTmFtZX0ke29wdGlvbmFsfTogJHtwcm9wSW5mby50eXBlfTtgKTtcblx0XHR9XG5cblx0XHQvLyBBZGQgc3VidHlwZSBjb25zdHJ1Y3RvcnMgKG5vbi1vcHRpb25hbCBzbyB0aGV5J3JlIGFjY2Vzc2libGUpIC0gb25seSBmb3Igcm9vdCB0eXBlc1xuXHRcdGlmICghbm9kZS5wYXJlbnQpIHtcblx0XHRcdGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbi52YWx1ZXMoKSkge1xuXHRcdFx0XHRjb25zdCBjaGlsZEluc3RhbmNlVHlwZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShjaGlsZCk7XG5cdFx0XHRcdGNvbnN0IGNvbnN0cnVjdG9yU2lnID0gdGhpcy5nZW5lcmF0ZUNvbnN0cnVjdG9yU2lnbmF0dXJlKGNoaWxkKTtcblx0XHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtjaGlsZC5uYW1lfTogJHtjb25zdHJ1Y3RvclNpZ30gPT4gJHtjaGlsZEluc3RhbmNlVHlwZX07YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcblx0XHRsaW5lcy5wdXNoKGAke2luZGVudFN0cn19YCk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdH1cblx0XHRcblx0LyoqXG5cdFx0KiBHZW5lcmF0ZSBhIHR5cGVzLnRzIGZpbGUgd2l0aCBjb21wbGV0ZSBpbnN0YW5jZSBpbnRlcmZhY2VzXG5cdFx0KiBUaGlzIGluY2x1ZGVzIGFsbCBwcm9wZXJ0aWVzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb25zdHJ1Y3RvcnNcblx0XHQqL1xuXHRnZW5lcmF0ZVR5cGVzRmlsZSAoKTogR2VuZXJhdGVkVHlwZXMge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGdlbmVyYXRlZFR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Ly8gSGVhZGVyXG5cdFx0bGluZXMucHVzaCgnLy8gR2VuZXJhdGVkIGJ5IEBtbmVtb25pY2EvdGFjdGljYSAtIERPIE5PVCBFRElUJyk7XG5cdFx0bGluZXMucHVzaCgnLy8gVGhpcyBmaWxlIHByb3ZpZGVzIGNvbXBsZXRlIFR5cGVTY3JpcHQgaW50ZXJmYWNlcyBmb3IgTW5lbW9uaWNhIHR5cGVzJyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdFx0bGluZXMucHVzaCgnLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlICovJyk7XG5cdFx0bGluZXMucHVzaCgnLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZSAqLycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gSW1wb3J0IFByb3RvRmxhdCBmcm9tIG1uZW1vbmljYVxuXHRcdGxpbmVzLnB1c2goJ2ltcG9ydCB0eXBlIHsgUHJvdG9GbGF0IH0gZnJvbSBcXCdtbmVtb25pY2FcXCc7Jyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblx0XHQvLyBHZW5lcmF0ZSBjb21wbGV0ZSBpbnN0YW5jZSBpbnRlcmZhY2VzIGZvciBkZWZhdWx0LWNvbGxlY3Rpb24gdHlwZXMgYW5kXG5cdFx0Ly8gZm9yIGN1c3RvbSBjb2xsZWN0aW9ucyB0aGF0IGRlY2xhcmUgYSB1c2VyLXByb3ZpZGVkIHJlZ2lzdHJ5IGludGVyZmFjZVxuXHRcdC8vIChPcHRpb24gQikuIEN1c3RvbS1jb2xsZWN0aW9uIHR5cGVzIHdpdGhvdXQgYSByZWdpc3RyeSBpbnRlcmZhY2UgYXJlXG5cdFx0Ly8gaXNvbGF0ZWQgYXQgcnVudGltZSBhbmQgYXJlIG5vdCBlbWl0dGVkLlxuXHRcdGZvciAoY29uc3Qgcm9vdCBvZiB0aGlzLmdyYXBoLnJvb3RzLnZhbHVlcygpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ncmFwaC5kZnMocm9vdCkpIHtcblx0XHRcdFx0aWYgKG5vZGUuY29sbGVjdGlvbklkICYmICFub2RlLnJlZ2lzdHJ5SW50ZXJmYWNlTmFtZSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGludGVyZmFjZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cdFx0XHRcdGdlbmVyYXRlZFR5cGVzLnB1c2goaW50ZXJmYWNlTmFtZSk7XG5cdFx0XHRcdHRoaXMuZ2VuZXJhdGVDb21wbGV0ZUluc3RhbmNlSW50ZXJmYWNlKG5vZGUsIGxpbmVzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0Y29udGVudCA6IGxpbmVzLmpvaW4oJ1xcbicpLFxuXHRcdFx0dHlwZXMgICA6IGdlbmVyYXRlZFR5cGVzLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0XHQgKiBHZW5lcmF0ZSBhIGNvbXBsZXRlIGluc3RhbmNlIHR5cGUgYWxpYXMgd2l0aCBhbGwgcHJvcGVydGllc1xuXHRcdCAqIFRoaXMgaXMgZm9yIHRoZSB0eXBlcy50cyBmaWxlIHRoYXQgdXNlcnMgaW1wb3J0IGZyb21cblx0XHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUNvbXBsZXRlSW5zdGFuY2VJbnRlcmZhY2UgKG5vZGU6IFR5cGVOb2RlLCBsaW5lczogc3RyaW5nW10pOiB2b2lkIHtcblx0XHRjb25zdCB0eXBlTmFtZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlKTtcblxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0Ly8gTmVzdGVkIHR5cGU6IFVzZSBQcm90b0ZsYXQgdG8gcHJvcGVybHkgZXhjbHVkZSBvdmVycmlkZGVuIHByb3BlcnRpZXNcblx0XHRcdGxpbmVzLnB1c2goYGV4cG9ydCB0eXBlICR7dHlwZU5hbWV9ID0gUHJvdG9GbGF0PCR7dGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKG5vZGUucGFyZW50KX0sIHtgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gUm9vdCB0eXBlOiBqdXN0IHRoZSBwcm9wZXJ0aWVzIG9iamVjdFxuXHRcdFx0bGluZXMucHVzaChgZXhwb3J0IHR5cGUgJHt0eXBlTmFtZX0gPSB7YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIGluc3RhbmNlIHByb3BlcnRpZXMgZXh0cmFjdGVkIGZyb20gdGhlIGNvbnN0cnVjdG9yXG5cdFx0Zm9yIChjb25zdCBbIHByb3BOYW1lLCBwcm9wSW5mbyBdIG9mIG5vZGUucHJvcGVydGllcy5lbnRyaWVzKCkpIHtcblx0XHRcdGNvbnN0IG9wdGlvbmFsID0gcHJvcEluZm8ub3B0aW9uYWwgPyAnPycgOiAnJztcblx0XHRcdGNvbnN0IHJlYWRvbmx5ID0gcHJvcEluZm8ucmVhZG9ubHkgPyAncmVhZG9ubHkgJyA6ICcnO1xuXHRcdFx0bGluZXMucHVzaChgXFx0JHtyZWFkb25seX0ke3Byb3BOYW1lfSR7b3B0aW9uYWx9OiAke3RoaXMucmVzb2x2ZVR5cGVJblN0cmluZyhwcm9wSW5mby50eXBlLCBub2RlKX07YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIG5lc3RlZCBjb25zdHJ1Y3RvciBwcm9wZXJ0aWVzIGZvciBub24tbGVhZiBub2Rlc1xuXHRcdC8vIExlYWYgbm9kZXMgKG5vIGNoaWxkcmVuKSBkb24ndCBnZXQgY29uc3RydWN0b3IgcHJvcGVydGllc1xuXHRcdC8vIFRoaXMgZm9sbG93cyBtbmVtb25pY2EncyBzdHJpY3RDaGFpbiBiZWhhdmlvclxuXHRcdGlmIChub2RlLmNoaWxkcmVuLnNpemUgPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4udmFsdWVzKCkpIHtcblx0XHRcdFx0Y29uc3QgY2hpbGRJbnN0YW5jZVR5cGUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUoY2hpbGQpO1xuXHRcdFx0XHRjb25zdCBjb25zdHJ1Y3RvclNpZyA9IHRoaXMuZ2VuZXJhdGVDb25zdHJ1Y3RvclNpZ25hdHVyZShjaGlsZCk7XG5cdFx0XHRcdGxpbmVzLnB1c2goYFxcdCR7Y2hpbGQubmFtZX06ICR7Y29uc3RydWN0b3JTaWd9ID0+ICR7Y2hpbGRJbnN0YW5jZVR5cGV9O2ApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZvciBuZXN0ZWQgdHlwZXMsIGFkZCB0aGlzIG5vZGUncyBjb25zdHJ1Y3RvciBhbmQgYWxsIHNpYmxpbmdzIGZyb20gc2FtZSBwYXJlbnQgYXMgdW5kZWZpbmVkXG5cdFx0Ly8gVGhpcyBpcyBuZWVkZWQgZm9yIHN0cmljdCBjaGFpbiBiZWhhdmlvciAtIHBhcmVudCB1bmRlZmluZWRzIGFyZSBpbmhlcml0ZWQgdmlhIFByb3RvRmxhdFxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0Ly8gQWRkIHRoaXMgbm9kZSdzIG93biBjb25zdHJ1Y3RvciBhcyB1bmRlZmluZWRcblx0XHRcdGxpbmVzLnB1c2goYFxcdCR7bm9kZS5uYW1lfTogdW5kZWZpbmVkO2ApO1xuXG5cdFx0XHQvLyBBZGQgYWxsIHNpYmxpbmdzIChvdGhlciBjaGlsZHJlbiBvZiB0aGUgc2FtZSBwYXJlbnQpIGFzIHVuZGVmaW5lZFxuXHRcdFx0Zm9yIChjb25zdCBzaWJsaW5nIG9mIG5vZGUucGFyZW50LmNoaWxkcmVuLnZhbHVlcygpKSB7XG5cdFx0XHRcdGlmIChzaWJsaW5nLm5hbWUgIT09IG5vZGUubmFtZSkge1xuXHRcdFx0XHRcdGxpbmVzLnB1c2goYFxcdCR7c2libGluZy5uYW1lfTogdW5kZWZpbmVkO2ApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvc2UgdGhlIHR5cGUgcHJvcGVybHkgLSBQcm90b0ZsYXQgdXNlcyB9PjsgZm9yIG5lc3RlZCwgfTsgZm9yIHJvb3Rcblx0XHRpZiAobm9kZS5wYXJlbnQpIHtcblx0XHRcdGxpbmVzLnB1c2goJ30+OycpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsaW5lcy5wdXNoKCd9OycpO1xuXHRcdH1cblx0XHRsaW5lcy5wdXNoKCcnKTtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIGEgc2ltcGxlIHR5cGUgZGVjbGFyYXRpb24gZm9yIGEgc2luZ2xlIHR5cGVcblx0XHQgKi9cblx0Z2VuZXJhdGVTaW5nbGVUeXBlIChub2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cdFx0dGhpcy5nZW5lcmF0ZUNvbXBsZXRlSW5zdGFuY2VJbnRlcmZhY2Uobm9kZSwgbGluZXMpO1xuXHRcdHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIFR5cGVSZWdpc3RyeSBpbnRlcmZhY2UgZm9yIHR5cGUtc2FmZSBsb29rdXAoKSBmdW5jdGlvblxuXHRcdCAqIEF1Z21lbnQgbW5lbW9uaWNhJ3MgVHlwZVJlZ2lzdHJ5IHNvIGxvb2t1cCgnVHlwZU5hbWUnKSByZXR1cm5zIHRoZSB0eXBlZCBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHRnZW5lcmF0ZVR5cGVSZWdpc3RyeSAoKTogR2VuZXJhdGVkVHlwZXMge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGdlbmVyYXRlZFR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Ly8gSGVhZGVyXG5cdFx0bGluZXMucHVzaCgnLy8gR2VuZXJhdGVkIFR5cGVSZWdpc3RyeSBmb3IgdHlwZS1zYWZlIG1uZW1vbmljYS5sb29rdXAoKScpO1xuXHRcdGxpbmVzLnB1c2goJy8vIFRoaXMgZmlsZSBhdWdtZW50cyBtbmVtb25pY2FcXCdzIFR5cGVSZWdpc3RyeSB2aWEgZGVjbGFyYXRpb24gbWVyZ2luZy4nKTtcblx0XHRsaW5lcy5wdXNoKCcvLycpO1xuXHRcdGxpbmVzLnB1c2goJy8vIFVzYWdlOicpO1xuXHRcdGxpbmVzLnB1c2goJy8vICAgaW1wb3J0IHsgbG9va3VwIH0gZnJvbSBcXCdtbmVtb25pY2FcXCc7Jyk7XG5cdFx0bGluZXMucHVzaCgnLy8gICBpbXBvcnQgXFwnLi8udGFjdGljYS9yZWdpc3RyeVxcJzsgIC8vIGFwcGxpZXMgdGhlIGF1Z21lbnRhdGlvbicpO1xuXHRcdGxpbmVzLnB1c2goJy8vICAgY29uc3QgTXlUeXBlID0gbG9va3VwKFxcJ015VHlwZVxcJyk7Jyk7XG5cdFx0bGluZXMucHVzaCgnLy8gICAvLyBUeXBlU2NyaXB0IGtub3dzOiBNeVR5cGUgaXMgdGhlIHR5cGVkIGNvbnN0cnVjdG9yIGZvciBNeVR5cGUnKTtcblx0XHRsaW5lcy5wdXNoKCcvLyAgIGNvbnN0IGluc3RhbmNlID0gbmV3IE15VHlwZSh7IC8qIGNvbnN0cnVjdG9yIGFyZ3MgKi8gfSk7Jyk7XG5cdFx0bGluZXMucHVzaCgnLy8gICAvLyBpbnN0YW5jZSBoYXMgZnVsbCBpbnRlbGxpc2Vuc2UgZm9yIHRoZSBnZW5lcmF0ZWQgdHlwZScpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gSW1wb3J0IGluc3RhbmNlIHR5cGVzIGZyb20gdHlwZXMudHMuXG5cdFx0Ly8gU2tpcCBjdXN0b20tY29sbGVjdGlvbiB0eXBlcyB0aGF0IGhhdmUgbm8gdXNlci1wcm92aWRlZCByZWdpc3RyeSBpbnRlcmZhY2UuXG5cdFx0bGluZXMucHVzaCgnaW1wb3J0IHR5cGUgeycpO1xuXHRcdGZvciAoY29uc3Qgcm9vdCBvZiB0aGlzLmdyYXBoLnJvb3RzLnZhbHVlcygpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ncmFwaC5kZnMocm9vdCkpIHtcblx0XHRcdFx0aWYgKG5vZGUuY29sbGVjdGlvbklkICYmICFub2RlLnJlZ2lzdHJ5SW50ZXJmYWNlTmFtZSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlVHlwZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cdFx0XHRcdGxpbmVzLnB1c2goYFxcdCR7aW5zdGFuY2VUeXBlTmFtZX0sYCk7XG5cdFx0XHRcdGdlbmVyYXRlZFR5cGVzLnB1c2goaW5zdGFuY2VUeXBlTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGxpbmVzLnB1c2goYH0gZnJvbSAnJHt0aGlzLmltcG9ydFBhdGgoJy4vdHlwZXMnKX0nO2ApO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gR2VuZXJhdGUgbW9kdWxlIGF1Z21lbnRhdGlvbiBmb3IgbW5lbW9uaWNhIFR5cGVSZWdpc3RyeVxuXHRcdGxpbmVzLnB1c2goJy8qKicpO1xuXHRcdGxpbmVzLnB1c2goJyAqIFR5cGUgcmVnaXN0cnkgYXVnbWVudGluZyBtbmVtb25pY2FcXCdzIFR5cGVSZWdpc3RyeSBpbnRlcmZhY2UnKTtcblx0XHRsaW5lcy5wdXNoKCcgKiBUaGlzIGVuYWJsZXMgdHlwZS1zYWZlIGxvb2t1cCgpIHdpdGhvdXQgZXhwbGljaXQgdHlwZSBhcmd1bWVudHMnKTtcblx0XHRsaW5lcy5wdXNoKCcgKicpO1xuXHRcdGxpbmVzLnB1c2goJyAqIFVzYWdlOiBjb25zdCBTb21lVHlwZSA9IGxvb2t1cChcXCdTb21lVHlwZVxcJyk7IC8vIEZ1bGx5IHR5cGVkIScpO1xuXHRcdGxpbmVzLnB1c2goJyAqLycpO1xuXHRcdGxpbmVzLnB1c2goJ2RlY2xhcmUgbW9kdWxlIFxcJ21uZW1vbmljYVxcJyB7Jyk7XG5cdFx0bGluZXMucHVzaCgnXHRpbnRlcmZhY2UgVHlwZVJlZ2lzdHJ5IHsnKTtcblxuXHRcdC8vIEdlbmVyYXRlIGVudHJpZXMgZm9yIGFsbCB0eXBlIHBhdGhzIHRoYXQgYmVsb25nIHRvIHRoZSBkZWZhdWx0L2dsb2JhbCBjb2xsZWN0aW9uLlxuXHRcdC8vIFR5cGVzIHRoYXQgbGl2ZSBpbiBhIGN1c3RvbSBjb2xsZWN0aW9uIChjb2xsZWN0aW9uSWQgc2V0KSBhcmUgaXNvbGF0ZWQgYXQgcnVudGltZVxuXHRcdC8vIGFuZCBhcmUgbm90IHJlYWNoYWJsZSB0aHJvdWdoIGZyZWUgbG9va3VwKCksIHNvIHRoZXkgbXVzdCBub3QgYmUgYWRkZWQgdG8gdGhlXG5cdFx0Ly8gZ2xvYmFsIFR5cGVSZWdpc3RyeSBhdWdtZW50YXRpb24uXG5cdFx0Zm9yIChjb25zdCByb290IG9mIHRoaXMuZ3JhcGgucm9vdHMudmFsdWVzKCkpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmdyYXBoLmRmcyhyb290KSkge1xuXHRcdFx0XHRpZiAobm9kZS5jb2xsZWN0aW9uSWQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmdWxsUGF0aCA9IHRoaXMuZ2V0RnVsbFBhdGgobm9kZSk7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlVHlwZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlKTtcblx0XHRcdFx0Ly8gR2VuZXJhdGUgdHlwZWQgY29uc3RydWN0b3Igc2lnbmF0dXJlIGZvciBuZXN0ZWQgdHlwZXMgd2l0aCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGNvbnN0IGNvbnN0cnVjdG9yU2lnID0gdGhpcy5nZW5lcmF0ZUNvbnN0cnVjdG9yU2lnbmF0dXJlKG5vZGUpO1xuXHRcdFx0XHRsaW5lcy5wdXNoKGBcXHRcXHQnJHtmdWxsUGF0aH0nOiAke2NvbnN0cnVjdG9yU2lnfSA9PiAke2luc3RhbmNlVHlwZX07YCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGluZXMucHVzaCgnXFx0fScpO1xuXHRcdGxpbmVzLnB1c2goJ30nKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXHRcdC8vIEdlbmVyYXRlIHBlci1jb2xsZWN0aW9uIHJlZ2lzdHJ5IGF1Z21lbnRhdGlvbnMgZm9yIE9wdGlvbiBCXG5cdFx0Ly8gKHVzZXItcHJvdmlkZWQgcmVnaXN0cnkgaW50ZXJmYWNlcykuXG5cdFx0Y29uc3QgY29sbGVjdGlvbkdyb3VwcyA9IHRoaXMuZ3JvdXBDb2xsZWN0aW9uUmVnaXN0cnlOb2RlcygpO1xuXHRcdGZvciAoY29uc3QgWyBrZXksIG5vZGVzIF0gb2YgY29sbGVjdGlvbkdyb3Vwcykge1xuXHRcdFx0Y29uc3QgWyByZWdpc3RyeUludGVyZmFjZU5hbWUsIHNvdXJjZUZpbGUgXSA9IGtleS5zcGxpdCgnOjonKTtcblx0XHRcdGNvbnN0IG1vZHVsZVBhdGggPSB0aGlzLnJlc29sdmVNb2R1bGVQYXRoKHNvdXJjZUZpbGUpO1xuXHRcdFx0bGluZXMucHVzaChgZGVjbGFyZSBtb2R1bGUgJyR7bW9kdWxlUGF0aH0nIHtgKTtcblx0XHRcdGxpbmVzLnB1c2goYFxcdGludGVyZmFjZSAke3JlZ2lzdHJ5SW50ZXJmYWNlTmFtZX0ge2ApO1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0XHRcdGNvbnN0IGZ1bGxQYXRoID0gdGhpcy5nZXRGdWxsUGF0aChub2RlKTtcblx0XHRcdFx0Y29uc3QgaW5zdGFuY2VUeXBlID0gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKG5vZGUpO1xuXHRcdFx0XHRjb25zdCBjb25zdHJ1Y3RvclNpZyA9IHRoaXMuZ2VuZXJhdGVDb25zdHJ1Y3RvclNpZ25hdHVyZShub2RlKTtcblx0XHRcdFx0bGluZXMucHVzaChgXFx0XFx0JyR7ZnVsbFBhdGh9JzogJHtjb25zdHJ1Y3RvclNpZ30gPT4gJHtpbnN0YW5jZVR5cGV9O2ApO1xuXHRcdFx0fVxuXHRcdFx0bGluZXMucHVzaCgnXFx0fScpO1xuXHRcdFx0bGluZXMucHVzaCgnfScpO1xuXHRcdFx0bGluZXMucHVzaCgnJyk7XG5cdFx0fVxuXG5cdFx0Ly8gUmUtZXhwb3J0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCBleHBsaWNpdCB1c2FnZVxuXHRcdGxpbmVzLnB1c2goJ2ltcG9ydCB0eXBlIHsgVHlwZVJlZ2lzdHJ5IH0gZnJvbSBcXCdtbmVtb25pY2FcXCc7Jyk7XG5cdFx0bGluZXMucHVzaCgnZXhwb3J0IHR5cGUgeyBUeXBlUmVnaXN0cnkgfTsnKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjb250ZW50IDogbGluZXMuam9pbignXFxuJyksXG5cdFx0XHR0eXBlcyAgIDogZ2VuZXJhdGVkVHlwZXMsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBmb3IgYSB0eXBlIG5vZGVcblx0XHQgKiBVc2VzIGNvbnN0cnVjdG9yUGFyYW1zIGZvciBUeXBlUmVnaXN0cnkgc2lnbmF0dXJlIChub3QgaW5zdGFuY2UgcHJvcGVydGllcylcblx0XHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUNvbnN0cnVjdG9yU2lnbmF0dXJlIChub2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0Ly8gVXNlIGNvbnN0cnVjdG9yUGFyYW1zIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBlbXB0eSBzaWduYXR1cmVcblx0XHRjb25zdCBwYXJhbXMgPSBub2RlLmNvbnN0cnVjdG9yUGFyYW1zO1xuXG5cdFx0aWYgKCFwYXJhbXMgfHwgcGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuICduZXcgKCknO1xuXHRcdH1cblxuXHRcdC8vIEJ1aWxkIHR5cGVkIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBmcm9tIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnNcblx0XHRjb25zdCBwcm9wczogc3RyaW5nW10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHBhcmFtIG9mIHBhcmFtcykge1xuXHRcdFx0Y29uc3Qgb3B0aW9uYWwgPSBwYXJhbS5vcHRpb25hbCA/ICc/JyA6ICcnO1xuXHRcdFx0cHJvcHMucHVzaChgJHtwYXJhbS5uYW1lfSR7b3B0aW9uYWx9OiAke3BhcmFtLnR5cGV9YCk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSB3aXRoIGRhdGEgcGFyYW1ldGVyXG5cdFx0cmV0dXJuIGBuZXcgKCR7cHJvcHMuam9pbignLCAnKX0pYDtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdldCB0aGUgZnVsbCBkb3R0ZWQgcGF0aCBmb3IgYSB0eXBlIG5vZGVcblx0XHQgKi9cblx0cHJpdmF0ZSBnZXRGdWxsUGF0aCAobm9kZTogVHlwZU5vZGUpOiBzdHJpbmcge1xuXHRcdGlmICghbm9kZS5wYXJlbnQpIHtcblx0XHRcdHJldHVybiBub2RlLm5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBgJHt0aGlzLmdldEZ1bGxQYXRoKG5vZGUucGFyZW50KX0uJHtub2RlLm5hbWV9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGluc3RhbmNlIHR5cGUgbmFtZSBmb3IgYSBub2RlXG5cdCAqIFVzZXMgZnVsbCBwYXRoIHdpdGggdW5kZXJzY29yZXM6IFVzYWdlcy5Vc2FnZUVudHJ5IC0+IFVzYWdlc19Vc2FnZUVudHJ5XG5cdCAqIEZvciBPcHRpb24gQiBjdXN0b20gY29sbGVjdGlvbnMsIHByZWZpeGVzIHdpdGggdGhlIHJlZ2lzdHJ5IGludGVyZmFjZSBuYW1lLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRJbnN0YW5jZVR5cGVOYW1lIChub2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZnVsbFBhdGggPSB0aGlzLmdldEZ1bGxQYXRoKG5vZGUpO1xuXHRcdGNvbnN0IHByZWZpeCA9IG5vZGUucmVnaXN0cnlJbnRlcmZhY2VOYW1lID8gYCR7bm9kZS5yZWdpc3RyeUludGVyZmFjZU5hbWV9X2AgOiAnJztcblx0XHRyZXR1cm4gYCR7cHJlZml4fSR7ZnVsbFBhdGgucmVwbGFjZSgvXFwuL2csICdfJyl9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNvbHZlIGEgc2ltcGxlIHR5cGUgbmFtZSB0byBpdHMgZnVsbCBwYXRoIG5hbWVcblx0ICogZS5nLiwgXCJEZWZpbml0aW9uRW50cnlcIiAtPiBcIkRlZmluaXRpb25zX0RlZmluaXRpb25FbnRyeVwiXG5cdCAqXG5cdCAqIFdpdGggYSByZWZlcmVuY2VSZXNvbHZlciBpbnN0YWxsZWQgKHRoZSBDTEkgcGF0aCksIHJlc29sdXRpb24gaXNcblx0ICogcGF0aC1hd2FyZSBwZXIgdGhlIGdyYXBoIGlkZW50aXR5IGxhdzogdGhlIHJlc29sdmVyIHJldHVybnMgdGhlIHVuaXF1ZVxuXHQgKiB0eXBlLCAnYW1iaWd1b3VzJywgb3IgdW5kZWZpbmVkIOKAlCB0aGUgbGF0dGVyIHR3byByZWNvcmQgYSBoYXJkLWZhaWxcblx0ICogUmVzb2x1dGlvbkVycm9yIGFuZCBlbWl0IGB1bmtub3duYCBpbnN0ZWFkIG9mIHNpbGVudGx5IHBpY2tpbmcgYVxuXHQgKiBmaXJzdCBtYXRjaC4gV2l0aG91dCBhIHJlc29sdmVyIHRoZSBsZWdhY3kgZmlyc3QtbWF0Y2ggc2NhbiBzdGF5cy5cblx0ICovXG5cdHByaXZhdGUgcmVzb2x2ZVR5cGVOYW1lIChzaW1wbGVOYW1lOiBzdHJpbmcsIGN1cnJlbnROb2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0aWYgKHRoaXMucmVmZXJlbmNlUmVzb2x2ZXIpIHtcblx0XHRcdGNvbnN0IHJlc29sdmVkID0gdGhpcy5yZWZlcmVuY2VSZXNvbHZlcihzaW1wbGVOYW1lLCBjdXJyZW50Tm9kZSk7XG5cdFx0XHRpZiAocmVzb2x2ZWQgJiYgcmVzb2x2ZWQgIT09ICdhbWJpZ3VvdXMnKSB7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlTmFtZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShyZXNvbHZlZCk7XG5cdFx0XHRcdHJldHVybiBpbnN0YW5jZU5hbWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhbmNob3JMb2NhdGlvbiA9IGAke2N1cnJlbnROb2RlLnNvdXJjZUZpbGV9OiR7Y3VycmVudE5vZGUubGluZX06JHtjdXJyZW50Tm9kZS5jb2x1bW59YDtcblx0XHRcdGNvbnN0IGFtYmlndW91c0dlbmVyYXRpb25NZXNzYWdlID0gYEFtYmlndW91cyByZWZlcmVuY2UgdG8gbW5lbW9uaWNhIHR5cGUgJyR7c2ltcGxlTmFtZX0nIGAgK1xuXHRcdFx0XHRgd2hpbGUgZ2VuZXJhdGluZyAnJHt0aGlzLmdldEZ1bGxQYXRoKGN1cnJlbnROb2RlKX0nYDtcblx0XHRcdGNvbnN0IHVucmVzb2x2ZWRHZW5lcmF0aW9uTWVzc2FnZSA9IGBVbnJlc29sdmVkIHJlZmVyZW5jZSB0byBtbmVtb25pY2EgdHlwZSAnJHtzaW1wbGVOYW1lfScgYCArXG5cdFx0XHRcdGB3aGlsZSBnZW5lcmF0aW5nICcke3RoaXMuZ2V0RnVsbFBhdGgoY3VycmVudE5vZGUpfSdgO1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IHJlc29sdmVkID09PSAnYW1iaWd1b3VzJ1xuXHRcdFx0XHQ/IGFtYmlndW91c0dlbmVyYXRpb25NZXNzYWdlXG5cdFx0XHRcdDogdW5yZXNvbHZlZEdlbmVyYXRpb25NZXNzYWdlO1xuXHRcdFx0Y29uc3QgZXJyb3I6IFJlc29sdXRpb25FcnJvciA9IHsgbWVzc2FnZSwgbG9jYXRpb25zIDogWyBhbmNob3JMb2NhdGlvbiBdIH07XG5cdFx0XHR0aGlzLnJlc29sdXRpb25FcnJvcnMucHVzaChlcnJvcik7XG5cdFx0XHRjb25zdCB1bmtub3duUmVzdWx0ID0gJ3Vua25vd24nO1xuXHRcdFx0cmV0dXJuIHVua25vd25SZXN1bHQ7XG5cdFx0fVxuXG5cdFx0Ly8gRmlyc3QgY2hlY2sgaWYgaXQncyB0aGUgY3VycmVudCBub2RlIG9yIGl0cyBjaGlsZHJlblxuXHRcdGlmIChjdXJyZW50Tm9kZS5uYW1lID09PSBzaW1wbGVOYW1lKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKGN1cnJlbnROb2RlKTtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBjdXJyZW50Tm9kZS5jaGlsZHJlbi52YWx1ZXMoKSkge1xuXHRcdFx0aWYgKGNoaWxkLm5hbWUgPT09IHNpbXBsZU5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShjaGlsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIFNlYXJjaCBhbGwgdHlwZXMgaW4gdGhlIGdyYXBoXG5cdFx0Zm9yIChjb25zdCB0eXBlIG9mIHRoaXMuZ3JhcGguZ2V0QWxsVHlwZXMoKSkge1xuXHRcdFx0aWYgKHR5cGUubmFtZSA9PT0gc2ltcGxlTmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKHR5cGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2ltcGxlTmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYXJkLWZhaWwgZ3JhcGggcmVmZXJlbmNlIGVycm9ycyByZWNvcmRlZCB3aGlsZSBnZW5lcmF0aW5nIChzZWVcblx0ICogcmVmZXJlbmNlUmVzb2x2ZXIpLiBUaGUgQ0xJIHByaW50cyBldmVyeSBsb2NhdGlvbiBhbmQgd3JpdGVzIG5vIG91dHB1dC5cblx0ICovXG5cdGdldFJlc29sdXRpb25FcnJvcnMgKCk6IFJlc29sdXRpb25FcnJvcltdIHtcblx0XHRjb25zdCByZXN1bHQgPSBbIC4uLnRoaXMucmVzb2x1dGlvbkVycm9ycyBdO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogUmVzb2x2ZSBzaW1wbGUgdHlwZSBuYW1lcyB0byBmdWxsIHBhdGggbmFtZXMgd2l0aGluIGEgdHlwZSBzdHJpbmdcblx0ICogSGFuZGxlcyBjb21wbGV4IHR5cGVzIGxpa2UgQXJyYXk8VXNhZ2VFbnRyeT4sIE1hcDxzdHJpbmcsIFR5cGVFbnRyeT4sIGV0Yy5cblx0ICovXG5cdHByaXZhdGUgcmVzb2x2ZVR5cGVJblN0cmluZyAodHlwZVN0cjogc3RyaW5nLCBjdXJyZW50Tm9kZTogVHlwZU5vZGUpOiBzdHJpbmcge1xuXHRcdC8vIEdldCBhbGwgdHlwZSBuYW1lcyBmcm9tIHRoZSBncmFwaFxuXHRcdGNvbnN0IGFsbFR5cGVzID0gdGhpcy5ncmFwaC5nZXRBbGxUeXBlcygpO1xuXHRcdGNvbnN0IHR5cGVOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGZvciAoY29uc3QgdHlwZSBvZiBhbGxUeXBlcykge1xuXHRcdFx0dHlwZU5hbWVzLmFkZCh0eXBlLm5hbWUpO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgYnkgbGVuZ3RoIChsb25nZXN0IGZpcnN0KSB0byBhdm9pZCBwYXJ0aWFsIHJlcGxhY2VtZW50c1xuXHRcdGNvbnN0IHNvcnRlZE5hbWVzID0gQXJyYXkuZnJvbSh0eXBlTmFtZXMpLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpO1xuXG5cdFx0Ly8gUmVwbGFjZSBlYWNoIHNpbXBsZSB0eXBlIG5hbWUgd2l0aCBpdHMgZnVsbCBwYXRoIHZlcnNpb25cblx0XHRsZXQgcmVzdWx0ID0gdHlwZVN0cjtcblx0XHRmb3IgKGNvbnN0IG5hbWUgb2Ygc29ydGVkTmFtZXMpIHtcblx0XHRcdC8vIFNraXAgbmFtZXMgdGhhdCBkbyBub3Qgb2NjdXIg4oCUIHdpdGggYSByZWZlcmVuY2VSZXNvbHZlciBpbnN0YWxsZWQsXG5cdFx0XHQvLyByZXNvbHZpbmcgYWJzZW50IG5hbWVzIHdvdWxkIHJlY29yZCBzcHVyaW91cyBlcnJvcnNcblx0XHRcdGNvbnN0IG9jY3VycyA9IG5ldyBSZWdFeHAoYFxcXFxiJHtuYW1lfVxcXFxiYCkudGVzdChyZXN1bHQpO1xuXHRcdFx0aWYgKCFvY2N1cnMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHQvLyBVc2Ugd29yZCBib3VuZGFyeSBtYXRjaGluZyB0byBhdm9pZCByZXBsYWNpbmcgcGFydGlhbCBuYW1lc1xuXHRcdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcYiR7bmFtZX1cXFxcYmAsICdnJyk7XG5cdFx0XHRjb25zdCBmdWxsVHlwZU5hbWUgPSB0aGlzLnJlc29sdmVUeXBlTmFtZShuYW1lLCBjdXJyZW50Tm9kZSk7XG5cdFx0XHRpZiAoZnVsbFR5cGVOYW1lICE9PSBuYW1lKSB7XG5cdFx0XHRcdHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKHJlZ2V4LCBmdWxsVHlwZU5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdyb3VwIGNvbGxlY3Rpb24gdHlwZSBub2RlcyBieSB0aGVpciByZWdpc3RyeSBpbnRlcmZhY2UgbmFtZSBhbmQgdGhlXG5cdCAqIGNvbGxlY3Rpb24ncyBob21lIGZpbGUgKHRoZSBtb2R1bGUgZGVjbGFyaW5nIHRoZSBpbnRlcmZhY2Ug4oCUIHRoZVxuXHQgKiBhdWdtZW50YXRpb24gdGFyZ2V0KSwgTk9UIGVhY2ggdHlwZSdzIG93biBkZWZpbmUgZmlsZTogbXVsdGktZmlsZVxuXHQgKiBjb2xsZWN0aW9ucyBkZWZpbmUgdHlwZXMgYWNyb3NzIG1hbnkgbW9kdWxlcy5cblx0ICogUmV0dXJucyBhIG1hcCBrZXllZCBieSBgJHtyZWdpc3RyeUludGVyZmFjZU5hbWV9Ojoke3NvdXJjZUZpbGV9YC5cblx0ICovXG5cdHByaXZhdGUgZ3JvdXBDb2xsZWN0aW9uUmVnaXN0cnlOb2RlcyAoKTogTWFwPHN0cmluZywgVHlwZU5vZGVbXT4ge1xuXHRcdGNvbnN0IGdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlTm9kZVtdPigpO1xuXHRcdGZvciAoY29uc3Qgcm9vdCBvZiB0aGlzLmdyYXBoLnJvb3RzLnZhbHVlcygpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ncmFwaC5kZnMocm9vdCkpIHtcblx0XHRcdFx0aWYgKCFub2RlLnJlZ2lzdHJ5SW50ZXJmYWNlTmFtZSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGhvbWVGaWxlID0gbm9kZS5jb2xsZWN0aW9uU291cmNlRmlsZSA/PyBub2RlLnNvdXJjZUZpbGU7XG5cdFx0XHRcdGNvbnN0IGtleSA9IGAke25vZGUucmVnaXN0cnlJbnRlcmZhY2VOYW1lfTo6JHtob21lRmlsZX1gO1xuXHRcdFx0XHRjb25zdCBleGlzdGluZyA9IGdyb3Vwcy5nZXQoa2V5KTtcblx0XHRcdFx0aWYgKGV4aXN0aW5nKSB7XG5cdFx0XHRcdFx0ZXhpc3RpbmcucHVzaChub2RlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRncm91cHMuc2V0KGtleSwgWyBub2RlIF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBncm91cHM7XG5cdH1cblxuXHQvKipcblx0ICogUmVzb2x2ZSBhIHNvdXJjZSBmaWxlIHBhdGggdG8gYSBtb2R1bGUgc3BlY2lmaWVyIHJlbGF0aXZlIHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LFxuXHQgKiBzdWl0YWJsZSBmb3IgdXNlIGluIGEgYGRlY2xhcmUgbW9kdWxlICcuLi4nYCBibG9jay5cblx0ICovXG5cdHByaXZhdGUgcmVzb2x2ZU1vZHVsZVBhdGggKHNvdXJjZUZpbGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb3V0cHV0QWJzb2x1dGUgPSBwYXRoLnJlc29sdmUodGhpcy5vdXRwdXREaXIpO1xuXHRcdGNvbnN0IHNvdXJjZUFic29sdXRlID0gcGF0aC5yZXNvbHZlKHNvdXJjZUZpbGUpO1xuXHRcdGxldCByZWxhdGl2ZSA9IHBhdGgucmVsYXRpdmUob3V0cHV0QWJzb2x1dGUsIHNvdXJjZUFic29sdXRlKTtcblx0XHQvLyBSZW1vdmUgLnRzIGV4dGVuc2lvbjsga2VlcCAudHN4IGlmIHByZXNlbnRcblx0XHRpZiAocmVsYXRpdmUuZW5kc1dpdGgoJy50cycpICYmICFyZWxhdGl2ZS5lbmRzV2l0aCgnLnRzeCcpKSB7XG5cdFx0XHRyZWxhdGl2ZSA9IHJlbGF0aXZlLnNsaWNlKDAsIC0zKTtcblx0XHR9XG5cdFx0Ly8gQ29udmVydCBXaW5kb3dzIHNlcGFyYXRvcnMgdG8gUE9TSVhcblx0XHRjb25zdCBwb3NpeFJlbGF0aXZlID0gcmVsYXRpdmUucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXHRcdHJldHVybiBwb3NpeFJlbGF0aXZlO1xuXHR9XG59XG4iXX0=
|
package/lib/index.d.ts
CHANGED
|
@@ -16,6 +16,6 @@ export type { ScopeTypeResolver } from './scopes';
|
|
|
16
16
|
export { CreationGraphBuilder } from './creation-graph';
|
|
17
17
|
export { mergeTacticaPlugins } from './plugins';
|
|
18
18
|
export type { TacticaPlugin, InstrumentationVocabulary } from './plugins';
|
|
19
|
-
export type { TacticaConfig, TypeNode, TypeGraph, PropertyInfo, AnalyzeResult, AnalyzeError, GeneratedTypes, DefinitionInfo, UsageInfo, DefinitionsJson, UsagesJson, InstrumentationKind, InstrumentationScope, InstrumentationPoint, InstrumentationJson, ModuleBindingKind, ModuleImportKind, ModuleBinding, ModuleInfo, CrossModuleUsage, ModuleGraph, ModulesJson, ScopeKind, ScopeInfo, ScopeVariable, ScopeAnalysis, ScopesJson, CreationGraphNode, CreationGraphEdge, CreationAnchor, CreationGraph, } from './types';
|
|
19
|
+
export type { TacticaConfig, TypeNode, TypeGraph, PropertyInfo, AnalyzeResult, AnalyzeError, GeneratedTypes, DefinitionInfo, UsageInfo, DefinitionsJson, UsagesJson, InstrumentationKind, InstrumentationScope, InstrumentationPoint, InstrumentationJson, ModuleBindingKind, ModuleImportKind, ModuleBinding, ModuleInfo, CrossModuleUsage, ModuleGraph, ModulesJson, ScopeKind, ScopeInfo, ScopeVariable, ScopeAnalysis, ScopesJson, CreationGraphNode, CreationGraphEdge, CreationAnchor, CreationGraph, CollectionManifestEntry, CollectionsJson, } from './types';
|
|
20
20
|
export { main, run, watch, parseArgs } from './cli';
|
|
21
21
|
export declare const VERSION: string;
|
package/lib/index.js
CHANGED
|
@@ -68,4 +68,4 @@ Object.defineProperty(exports, "watch", { enumerable: true, get: function () { r
|
|
|
68
68
|
Object.defineProperty(exports, "parseArgs", { enumerable: true, get: function () { return cli_1.parseArgs; } });
|
|
69
69
|
// Version from package.json
|
|
70
70
|
exports.VERSION = pkg.version;
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFYixxREFBdUM7QUFFdkM7Ozs7OztHQU1HO0FBRUgsdUNBQStDO0FBQXRDLDZHQUFBLGlCQUFpQixPQUFBO0FBQzFCLDZEQUEyRDtBQUFsRCx5SEFBQSxrQkFBa0IsT0FBQTtBQUMzQixpQ0FBd0M7QUFBL0Isc0dBQUEsYUFBYSxPQUFBO0FBQ3RCLHlDQUE2QztBQUFwQywyR0FBQSxjQUFjLE9BQUE7QUFDdkIsbUNBQXVDO0FBQTlCLHFHQUFBLFdBQVcsT0FBQTtBQUNwQiwrQ0FBb0Q7QUFBM0Msa0hBQUEsa0JBQWtCLE9BQUE7QUFDM0IsbUNBQTRDO0FBQW5DLDBHQUFBLGdCQUFnQixPQUFBO0FBRXpCLG1EQUF3RDtBQUEvQyxzSEFBQSxvQkFBb0IsT0FBQTtBQUM3QixxQ0FBZ0Q7QUFBdkMsOEdBQUEsbUJBQW1CLE9BQUE7QUEwQzVCLGtCQUFrQjtBQUNsQiw2QkFFZTtBQURkLDJGQUFBLElBQUksT0FBQTtBQUFFLDBGQUFBLEdBQUcsT0FBQTtBQUFFLDRGQUFBLEtBQUssT0FBQTtBQUFFLGdHQUFBLFNBQVMsT0FBQTtBQUc1Qiw0QkFBNEI7QUFDZixRQUFBLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBwa2cgZnJvbSAnLi4vcGFja2FnZS5qc29uJztcblxuLyoqXG4gKiBUYWN0aWNhIC0gVHlwZSBkZWZpbml0aW9uIGdlbmVyYXRvciBmb3IgTW5lbW9uaWNhXG4gKlxuICogR2VuZXJhdGVzIHR5cGUgZGVmaW5pdGlvbnMgZm9yIE1uZW1vbmljYSdzIGR5bmFtaWMgbmVzdGVkIGNvbnN0cnVjdG9ycyxcbiAqIGVuYWJsaW5nIFR5cGVTY3JpcHQgdG8gdW5kZXJzdGFuZCBydW50aW1lIHR5cGUgaGllcmFyY2hpZXMgY3JlYXRlZCB0aHJvdWdoXG4gKiBkZWZpbmUoKSBhbmQgZGVjb3JhdGUoKSBjYWxscy5cbiAqL1xuXG5leHBvcnQgeyBNbmVtb25pY2FBbmFseXplciB9IGZyb20gJy4vYW5hbHl6ZXInO1xuZXhwb3J0IHsgVG9wb2xvZ2ljYUFuYWx5emVyIH0gZnJvbSAnLi90b3BvbG9naWNhLWFuYWx5emVyJztcbmV4cG9ydCB7IFR5cGVHcmFwaEltcGwgfSBmcm9tICcuL2dyYXBoJztcbmV4cG9ydCB7IFR5cGVzR2VuZXJhdG9yIH0gZnJvbSAnLi9nZW5lcmF0b3InO1xuZXhwb3J0IHsgVHlwZXNXcml0ZXIgfSBmcm9tICcuL3dyaXRlcic7XG5leHBvcnQgeyBNb2R1bGVHcmFwaEJ1aWxkZXIgfSBmcm9tICcuL21vZHVsZS1ncmFwaCc7XG5leHBvcnQgeyBMb2NhbFNjb3BlV2Fsa2VyIH0gZnJvbSAnLi9zY29wZXMnO1xuZXhwb3J0IHR5cGUgeyBTY29wZVR5cGVSZXNvbHZlciB9IGZyb20gJy4vc2NvcGVzJztcbmV4cG9ydCB7IENyZWF0aW9uR3JhcGhCdWlsZGVyIH0gZnJvbSAnLi9jcmVhdGlvbi1ncmFwaCc7XG5leHBvcnQgeyBtZXJnZVRhY3RpY2FQbHVnaW5zIH0gZnJvbSAnLi9wbHVnaW5zJztcbmV4cG9ydCB0eXBlIHtcblx0VGFjdGljYVBsdWdpbiwgSW5zdHJ1bWVudGF0aW9uVm9jYWJ1bGFyeVxufSBmcm9tICcuL3BsdWdpbnMnO1xuXG5cbmV4cG9ydCB0eXBlIHtcblx0VGFjdGljYUNvbmZpZyxcblx0VHlwZU5vZGUsXG5cdFR5cGVHcmFwaCxcblx0UHJvcGVydHlJbmZvLFxuXHRBbmFseXplUmVzdWx0LFxuXHRBbmFseXplRXJyb3IsXG5cdEdlbmVyYXRlZFR5cGVzLFxuXHREZWZpbml0aW9uSW5mbyxcblx0VXNhZ2VJbmZvLFxuXHREZWZpbml0aW9uc0pzb24sXG5cdFVzYWdlc0pzb24sXG5cdEluc3RydW1lbnRhdGlvbktpbmQsXG5cdEluc3RydW1lbnRhdGlvblNjb3BlLFxuXHRJbnN0cnVtZW50YXRpb25Qb2ludCxcblx0SW5zdHJ1bWVudGF0aW9uSnNvbixcblx0TW9kdWxlQmluZGluZ0tpbmQsXG5cdE1vZHVsZUltcG9ydEtpbmQsXG5cdE1vZHVsZUJpbmRpbmcsXG5cdE1vZHVsZUluZm8sXG5cdENyb3NzTW9kdWxlVXNhZ2UsXG5cdE1vZHVsZUdyYXBoLFxuXHRNb2R1bGVzSnNvbixcblx0U2NvcGVLaW5kLFxuXHRTY29wZUluZm8sXG5cdFNjb3BlVmFyaWFibGUsXG5cdFNjb3BlQW5hbHlzaXMsXG5cdFNjb3Blc0pzb24sXG5cdENyZWF0aW9uR3JhcGhOb2RlLFxuXHRDcmVhdGlvbkdyYXBoRWRnZSxcblx0Q3JlYXRpb25BbmNob3IsXG5cdENyZWF0aW9uR3JhcGgsXG5cdENvbGxlY3Rpb25NYW5pZmVzdEVudHJ5LFxuXHRDb2xsZWN0aW9uc0pzb24sXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBDTEkgZW50cnkgcG9pbnRcbmV4cG9ydCB7XG5cdG1haW4sIHJ1biwgd2F0Y2gsIHBhcnNlQXJncyBcbn0gZnJvbSAnLi9jbGknO1xuXG4vLyBWZXJzaW9uIGZyb20gcGFja2FnZS5qc29uXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IHBrZy52ZXJzaW9uO1xuIl19
|
package/lib/types.d.ts
CHANGED
|
@@ -53,6 +53,12 @@ export interface TypeNode {
|
|
|
53
53
|
collectionId?: string;
|
|
54
54
|
/** Registry interface name for custom collections using Option B (user-provided registry interface) */
|
|
55
55
|
registryInterfaceName?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Source file of the createTypesCollection() call — the module the
|
|
58
|
+
* Option B registry augmentation must target (the interface is
|
|
59
|
+
* confirmed declared there)
|
|
60
|
+
*/
|
|
61
|
+
collectionSourceFile?: string;
|
|
56
62
|
}
|
|
57
63
|
export interface TypeGraph {
|
|
58
64
|
/** Root types, keyed by full path (custom-collection roots carry the `collectionId::` prefix) */
|
|
@@ -523,6 +529,30 @@ export interface HierarchyJson {
|
|
|
523
529
|
generatedAt: string;
|
|
524
530
|
roots: HierarchyNode[];
|
|
525
531
|
}
|
|
532
|
+
/**
|
|
533
|
+
* One entry of the collections.json manifest. The default collection is
|
|
534
|
+
* emitted first whenever default-collection types exist: it has no call
|
|
535
|
+
* site, so `id` and `location` stay null (unprefixed fullPaths ARE its
|
|
536
|
+
* identity) and its registry interface is the global `TypeRegistry`.
|
|
537
|
+
*/
|
|
538
|
+
export interface CollectionManifestEntry {
|
|
539
|
+
/** Minted id used in `collectionId::` fullPath prefixes; null for the default collection */
|
|
540
|
+
id: string | null;
|
|
541
|
+
/** Variable holding the createTypesCollection() result ('defaultTypes' for the default collection) */
|
|
542
|
+
name: string;
|
|
543
|
+
/** Option-B registry interface name; absent when the collection declares none */
|
|
544
|
+
registryInterface?: string;
|
|
545
|
+
/** createTypesCollection() call site (file:line:col); null for the default collection */
|
|
546
|
+
location: string | null;
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* JSON output for collections.json
|
|
550
|
+
*/
|
|
551
|
+
export interface CollectionsJson {
|
|
552
|
+
version: string;
|
|
553
|
+
generatedAt: string;
|
|
554
|
+
collections: CollectionManifestEntry[];
|
|
555
|
+
}
|
|
526
556
|
/**
|
|
527
557
|
* Structured hierarchy node for machine consumption.
|
|
528
558
|
*/
|
package/lib/types.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFR5cGUgZGVmaW5pdGlvbnMgZm9yIFRhY3RpY2FcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhY3RpY2FDb25maWcge1xuXHQvKiogT3V0cHV0IGRpcmVjdG9yeSBmb3IgZ2VuZXJhdGVkIHR5cGVzIChkZWZhdWx0OiAudGFjdGljYSkgKi9cblx0b3V0cHV0RGlyPzogc3RyaW5nO1xuXHQvKiogRmlsZXMgdG8gaW5jbHVkZSAoZ2xvYiBwYXR0ZXJucykgKi9cblx0aW5jbHVkZT86IHN0cmluZ1tdO1xuXHQvKiogRmlsZXMgdG8gZXhjbHVkZSAoZ2xvYiBwYXR0ZXJucykgKi9cblx0ZXhjbHVkZT86IHN0cmluZ1tdO1xuXHQvKiogRW5hYmxlIHZlcmJvc2UgbG9nZ2luZyAqL1xuXHR2ZXJib3NlPzogYm9vbGVhbjtcblx0LyoqIEdlbmVyYXRlIGdsb2JhbCBhdWdtZW50YXRpb24gaW5zdGVhZCBvZiBtb2R1bGUgYXVnbWVudGF0aW9uIChkZWZhdWx0OiB0cnVlKSAqL1xuXHRnbG9iYWxBdWdtZW50YXRpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5SW5mbyB7XG5cdG5hbWU6IHN0cmluZztcblx0dHlwZTogc3RyaW5nO1xuXHRvcHRpb25hbDogYm9vbGVhbjtcblx0LyoqIFRydWUgaWYgdGhpcyBpcyBhIGdldHRlciBwcm9wZXJ0eSAocmVhZG9ubHkpICovXG5cdHJlYWRvbmx5PzogYm9vbGVhbjtcbn1cblxuLyoqIENvbnN0cnVjdG9yIHBhcmFtZXRlciBpbmZvIGZvciBUeXBlUmVnaXN0cnkgc2lnbmF0dXJlcyAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zdHJ1Y3RvclBhcmFtSW5mbyB7XG5cdC8qKiBQYXJhbWV0ZXIgbmFtZSAoZS5nLiwgXCJ1c2FnZXNcIiwgXCJkYXRhXCIsIFwiY29uZmlnXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlIHN0cmluZyAtIGNhbiBiZSBhIHNpbXBsZSB0eXBlIG9yIGV4cGFuZGVkIG9iamVjdCBsaXRlcmFsICovXG5cdHR5cGU6IHN0cmluZztcblx0b3B0aW9uYWw6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZU5vZGUge1xuXHQvKiogVHlwZSBuYW1lIChlLmcuLCBcIlNlY29uZFR5cGVcIikgKi9cblx0bmFtZTogc3RyaW5nO1xuXHQvKiogRnVsbCBwYXRoIChlLmcuLCBcIkZpcnN0VHlwZS5TZWNvbmRUeXBlXCIpICovXG5cdGZ1bGxQYXRoOiBzdHJpbmc7XG5cdC8qKiBQcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGhpcyB0eXBlJ3MgY29uc3RydWN0b3IgKi9cblx0cHJvcGVydGllczogTWFwPHN0cmluZywgUHJvcGVydHlJbmZvPjtcblx0LyoqIENvbnN0cnVjdG9yIHBhcmFtZXRlcnMgKGZvciBUeXBlUmVnaXN0cnkgY29uc3RydWN0b3Igc2lnbmF0dXJlKSAqL1xuXHRjb25zdHJ1Y3RvclBhcmFtcz86IENvbnN0cnVjdG9yUGFyYW1JbmZvW107XG5cdC8qKiBQYXJlbnQgdHlwZSBub2RlICovXG5cdHBhcmVudD86IFR5cGVOb2RlO1xuXHQvKiogQ2hpbGQgdHlwZXMgKi9cblx0Y2hpbGRyZW46IE1hcDxzdHJpbmcsIFR5cGVOb2RlPjtcblx0LyoqIFNvdXJjZSBmaWxlIHBhdGggKi9cblx0c291cmNlRmlsZTogc3RyaW5nO1xuXHQvKiogTGluZSBudW1iZXIgaW4gc291cmNlICovXG5cdGxpbmU6IG51bWJlcjtcblx0LyoqIENvbHVtbiBudW1iZXIgaW4gc291cmNlICovXG5cdGNvbHVtbjogbnVtYmVyO1xuXHQvKiogQ29uc3RydWN0b3IgZnVuY3Rpb24gbmFtZSBvciBjbGFzcyBuYW1lICovXG5cdGNvbnN0cnVjdG9yTmFtZT86IHN0cmluZztcblx0LyoqIENvbGxlY3Rpb24gaWRlbnRpZmllciBpZiB0aGUgdHlwZSBiZWxvbmdzIHRvIGEgY3VzdG9tIGNvbGxlY3Rpb24gKHVuZGVmaW5lZCA9IGRlZmF1bHQvZ2xvYmFsIHJlZ2lzdHJ5KSAqL1xuXHRjb2xsZWN0aW9uSWQ/OiBzdHJpbmc7XG5cdC8qKiBSZWdpc3RyeSBpbnRlcmZhY2UgbmFtZSBmb3IgY3VzdG9tIGNvbGxlY3Rpb25zIHVzaW5nIE9wdGlvbiBCICh1c2VyLXByb3ZpZGVkIHJlZ2lzdHJ5IGludGVyZmFjZSkgKi9cblx0cmVnaXN0cnlJbnRlcmZhY2VOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVHcmFwaCB7XG5cdC8qKiBSb290IHR5cGVzLCBrZXllZCBieSBmdWxsIHBhdGggKGN1c3RvbS1jb2xsZWN0aW9uIHJvb3RzIGNhcnJ5IHRoZSBgY29sbGVjdGlvbklkOjpgIHByZWZpeCkgKi9cblx0cm9vdHM6IE1hcDxzdHJpbmcsIFR5cGVOb2RlPjtcblx0LyoqIEFsbCB0eXBlcyBieSBmdWxsIHBhdGggKi9cblx0YWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVOb2RlPjtcblx0LyoqIEFkZCBhIHJvb3QgdHlwZSAqL1xuXHRhZGRSb290KG5vZGU6IFR5cGVOb2RlKTogdm9pZDtcblx0LyoqIEZpbmQgYSB0eXBlIGJ5IGZ1bGwgcGF0aCAqL1xuXHRmaW5kVHlwZShmdWxsUGF0aDogc3RyaW5nKTogVHlwZU5vZGUgfCB1bmRlZmluZWQ7XG5cdC8qKiBHZXQgYWxsIHR5cGVzIGFzIGFycmF5ICovXG5cdGdldEFsbFR5cGVzKCk6IFR5cGVOb2RlW107XG5cdC8qKiBDbGVhciB0aGUgZ3JhcGggKi9cblx0Y2xlYXIoKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbmFseXplUmVzdWx0IHtcblx0LyoqIFR5cGVzIGZvdW5kIGluIHRoZSBhbmFseXNpcyAqL1xuXHR0eXBlczogVHlwZU5vZGVbXTtcblx0LyoqIEVycm9ycyBlbmNvdW50ZXJlZCAqL1xuXHRlcnJvcnM6IEFuYWx5emVFcnJvcltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFuYWx5emVFcnJvciB7XG5cdG1lc3NhZ2U6IHN0cmluZztcblx0ZmlsZTogc3RyaW5nO1xuXHRsaW5lOiBudW1iZXI7XG5cdGNvbHVtbjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlZFR5cGVzIHtcblx0LyoqIENvbnRlbnQgb2YgdGhlIC5kLnRzIGZpbGUgKi9cblx0Y29udGVudDogc3RyaW5nO1xuXHQvKiogVHlwZXMgdGhhdCB3ZXJlIGdlbmVyYXRlZCAqL1xuXHR0eXBlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogRGVmaW5pdGlvbiBpbmZvIGZvciBjb2RlIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbml0aW9uSW5mbyB7XG5cdC8qKiBUeXBlIG5hbWUgKGUuZy4sIFwiQWRtaW5UeXBlXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogSG93IHR5cGUgd2FzIGNyZWF0ZWQ6ICdkZWZpbmUnIG9yICdkZWNvcmF0ZScgKi9cblx0a2luZDogJ2RlZmluZScgfCAnZGVjb3JhdGUnO1xuXHQvKiogUGFyZW50IHR5cGUgZnVsbCBwYXRoLCBudWxsIGlmIHJvb3QgKi9cblx0cGFyZW50OiBzdHJpbmcgfCBudWxsO1xuXHQvKiogc3RyaWN0Q2hhaW4gY29uZmlnIG9wdGlvbiAqL1xuXHRzdHJpY3RDaGFpbjogYm9vbGVhbjtcblx0LyoqIGJsb2NrRXJyb3JzIGNvbmZpZyBvcHRpb24gKi9cblx0YmxvY2tFcnJvcnM6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVXNhZ2UgaW5mbyBmb3IgY29kZSBuYXZpZ2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNhZ2VJbmZvIHtcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogS2luZCBvZiB1c2FnZTogaW5zdGFudGlhdGlvbiwgdHlwZUFubm90YXRpb24sIHByb3BlcnR5QWNjZXNzLCBsb29rdXAsIHJlZmVyZW5jZSAqL1xuXHRraW5kOiAnaW5zdGFudGlhdGlvbicgfCAndHlwZUFubm90YXRpb24nIHwgJ3Byb3BlcnR5QWNjZXNzJyB8ICdsb29rdXAnIHwgJ3JlZmVyZW5jZSc7XG5cdC8qKiBDb2RlIHNuaXBwZXQgKi9cblx0Y29kZTogc3RyaW5nO1xuXHQvKipcblx0ICogU2NvcGUgaG9sZGluZyB0aGlzIHVzYWdlIChMb2NhbFNjb3BlV2Fsa2VyIHNjb3BlSWQ6IG1vZHVsZSBzY29wZSBpcyB0aGVcblx0ICogZmlsZSBwYXRoLCBmdW5jdGlvbiBzY29wZXMgYXJlIGZpbGU6bGluZTpjb2wpLiBBZGRpdGl2ZTsgYWJzZW50IHdoZW4gdGhlXG5cdCAqIHVzYWdlIHNpdHMgb3V0c2lkZSB0cmFja2VkIGZpbGVzLlxuXHQgKi9cblx0aG9sZGVyU2NvcGVJZD86IHN0cmluZztcblx0LyoqXG5cdCAqIENvbnN0cnVjdG9yIGV4cHJlc3Npb24gdGV4dCBhdCBhbiBpbnN0YW50aWF0aW9uIHNpdGUgKCdUaGluZycsXG5cdCAqICd1c2VyLkFkbWluRW50aXR5JywgJ1QyJyBmb3IgYSBsb29rdXAgYWxpYXMpLiBBZGRpdGl2ZTsgc2V0IG9ubHkgb25cblx0ICoga2luZCAnaW5zdGFudGlhdGlvbicuIEZlZWRzIENyZWF0aW9uQW5jaG9yLmNvbnN0cnVjdG9yVGV4dCAoUGhhc2UgMykuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvclRleHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIGRlZmluaXRpb25zLmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbml0aW9uc0pzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdGRlZmluaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBEZWZpbml0aW9uSW5mbz47XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIHVzYWdlcy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNhZ2VzSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0dXNhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBVc2FnZUluZm9bXT47XG59XG5cbi8qKlxuICogRURTIChFeGVjdXRpb24gRGF0YSBTdG9yYWdlKSBraW5kIGZvciB0cmFja2luZyBleGVjdXRpb24gZmxvdyBwYXR0ZXJuc1xuICovXG5leHBvcnQgdHlwZSBFRFNLaW5kID1cblx0fCAnd3JhcCdcblx0fCAnY29udGV4dENvbnN1bWUnXG5cdHwgJ2hvb2tBdHRhY2gnO1xuXG4vKipcbiAqIEVEUyBpbmZvIGZvciBleGVjdXRpb24gZGF0YSBmbG93IHRyYWNraW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRURTSW5mbyB7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIEtpbmQgb2YgRURTIHVzYWdlICovXG5cdGtpbmQ6IEVEU0tpbmQ7XG5cdC8qKiBDb2RlIHNuaXBwZXQgKi9cblx0Y29kZTogc3RyaW5nO1xuXHQvKiogUmVzb2x2ZWQgdGFyZ2V0IHR5cGUgaWYgZGV0ZWN0YWJsZSAqL1xuXHR0YXJnZXRUeXBlPzogc3RyaW5nO1xuXHQvKipcblx0ICogRW5jbG9zaW5nIG1uZW1vbmljYSB0eXBlIHBhdGggKGRlZmluZS9sYXp5IGhhbmRsZXIgb3IgZGVjb3JhdGVkIGNsYXNzKTtcblx0ICogZm9yIHdyYXAgc2l0ZXMgb3V0c2lkZSBhbnkgaGFuZGxlciwgYXR0cmlidXRlZCB0aHJvdWdoIHRoZSBpbnN0YW5jZS9jb250ZXh0XG5cdCAqIGFyZ3VtZW50ICh0cmFja2VkIGFzc2lnbm1lbnQgb3IgcGFyYW1ldGVyIGFubm90YXRpb24pLCB0aGVuIGluaGVyaXRlZCBkb3duXG5cdCAqIHRoZSB3cmFwIGdlbmVyYXRpb24gY2hhaW4gKGB2aWFgKVxuXHQgKi9cblx0c2NvcGU/OiBzdHJpbmc7XG5cdC8qKiBMb2NhdGlvbiBvZiB0aGUgZW5jbG9zaW5nIHdyYXAgc2l0ZSB3aG9zZSBydW50aW1lIHdyYXBwaW5nIGNhdXNlZCB0aGlzIGVudHJ5ICovXG5cdHZpYT86IHN0cmluZztcblx0LyoqIE1uZW1vbmljYSB0eXBlIGZ1bGxQYXRocyBpbnN0YW50aWF0ZWQgaW5zaWRlIHRoZSB3cmFwcGVkIGJvZHkg4oCUIGd1YXJhbnRlZWQgcGF0aCBoaXRzICovXG5cdGNyZWF0ZXNUeXBlcz86IHN0cmluZ1tdO1xuXHQvKiogTGFiZWwgc3RyaW5nIGxpdGVyYWwgcGFzc2VkIHRvIHdyYXAoZm4sIOKApiwgJ2xhYmVsJykgd2hlbiBzdGF0aWNhbGx5IHZpc2libGUgKi9cblx0bGFiZWw/OiBzdHJpbmc7XG5cdC8qKiBzY29wZUlkIChzY29wZXMuanNvbikgb2YgdGhlIHdyYXBwZWQgY2FsbGJhY2sncyBvd24gc2NvcGUg4oCUIGpvaW5zIHRvIHRoZSBjcmVhdGlvbiBncmFwaCAqL1xuXHRjYWxsYmFja1Njb3BlSWQ/OiBzdHJpbmc7XG5cdC8qKiBJZGVudGlmaWVyIHBhc3NlZCBhcyB0aGUgaW5zdGFuY2UvY29udGV4dCBhcmd1bWVudCAoJ3VzZXInKSwgd2hlbiBpdCBpcyBvbmUgKi9cblx0aW5zdGFuY2VBcmc/OiBzdHJpbmc7XG5cdC8qKiBzY29wZUlkIG9mIHRoZSBzY29wZSBob2xkaW5nIHRoZSB3cmFwIGNhbGwgc2l0ZSDigJQgam9pbnMgdG8gdGhlIGNyZWF0aW9uIGdyYXBoICovXG5cdHNjb3BlSWQ/OiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgZnVsbFBhdGggb2YgdGhlIGluc3RhbmNlIGFyZ3VtZW50LCByZXNvbHZlZCB0aHJvdWdoIHNjb3BlIHZhcmlhYmxlcyAqL1xuXHR3cmFwc1R5cGVQYXRoPzogc3RyaW5nO1xuXHQvKiogV3JhcC1mYW1pbHkgZnVuY3Rpb24gbmFtZSAoJ3dyYXAnIHwgJ3dyYXBDb25zdHJ1Y3RvckFyZycgfCDigKYpIOKAlCBqb2lucyB0aGVcblx0ICogIGNhbGwgc2l0ZSB0byBkaXZlJ3MgZW5naW5lIGtub3QgaW4gZ3JhcGggY29uc3VtZXJzICovXG5cdGZuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBlZHMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVEU0pzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdGVkczogUmVjb3JkPHN0cmluZywgRURTSW5mb1tdPjtcbn1cblxuLyoqXG4gKiBJbnN0cnVtZW50YXRpb24ga2luZCBmb3IgZnJhbWV3b3JrIGxpZmVjeWNsZSBjcm9zc3JvYWRzXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RydW1lbnRhdGlvbktpbmQgPVxuXHR8ICdpbnRlcmNlcHRvcidcblx0fCAnZ3VhcmQnXG5cdHwgJ3BpcGUnXG5cdHwgJ2ZpbHRlcidcblx0fCAnbWlkZGxld2FyZSc7XG5cbi8qKlxuICogSW5zdHJ1bWVudGF0aW9uIHNjb3BlOiB3aGVyZSB0aGUgcG9pbnQgYXR0YWNoZXMuXG4gKiAnZ2xvYmFsJyBmb3IgcHJvdmlkZXItdG9rZW4gcmVnaXN0cmF0aW9ucywgJ21vZHVsZScgZm9yIG1pZGRsZXdhcmUgd2lyZWRcbiAqIHZpYSBjb25zdW1lci5hcHBseSgpIEFORCBmb3IgYmFyZSBoZXJpdGFnZSBkZWNsYXJhdGlvbnMgd2hvc2UgYXR0YWNobWVudFxuICogaXMgc3RhdGljYWxseSB1bmtub3duLCBgY29udHJvbGxlcjpOYW1lYCAvIGBtZXRob2Q6Q2xhc3MubWV0aG9kYCBmb3JcbiAqIGRlY29yYXRvci1zY29wZWQgYXR0YWNobWVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RydW1lbnRhdGlvblNjb3BlID1cblx0fCAnZ2xvYmFsJ1xuXHR8ICdtb2R1bGUnXG5cdHwgYGNvbnRyb2xsZXI6JHtzdHJpbmd9YFxuXHR8IGBtZXRob2Q6JHtzdHJpbmd9YDtcblxuLyoqXG4gKiBJbnN0cnVtZW50YXRpb24gcG9pbnQ6IGEgZnJhbWV3b3JrIGxpZmVjeWNsZSBjcm9zc3JvYWQgKGludGVyY2VwdG9yLFxuICogZ3VhcmQsIHBpcGUsIGZpbHRlciwgbWlkZGxld2FyZSkgZGV0ZWN0ZWQgc3ludGFjdGljYWxseS4gVGhlIHZvY2FidWxhcnlcbiAqIHRoYXQgdHVybnMgYSBzeW50YWN0aWMgc2hhcGUgaW50byBhIHBvaW50IGNvbWVzIGZyb20gcGx1Z2lucyDigJQgd2l0aCBub1xuICogcGx1Z2luIGxvYWRlZCwgbm8gcG9pbnRzIGFyZSBjb2xsZWN0ZWQuXG4gKlxuICogRGVkdXBlL3Njb3BlIGRlY2lzaW9uOiBwb2ludHMgYXJlIGtleWVkIGJ5IChraW5kLCBjbGFzc05hbWUsIGxvY2F0aW9uLFxuICogc2NvcGUpIGFuZCBkdXBsaWNhdGVzIG1lcmdlIHRoZWlyIGB0YXJnZXRzYC4gQSBjbGFzcyBkZXRlY3RlZCBib3RoIGJ5XG4gKiBoZXJpdGFnZSAoYSBwbHVnaW4tbGlzdGVkIGBpbXBsZW1lbnRzYCBpbnRlcmZhY2UpIGFuZCBieSBhIGRlY29yYXRvclxuICogc2l0ZSB5aWVsZHMgU0VQQVJBVEUgZW50cmllcyDigJQgdGhlIGNsYXNzLWRlY2xhcmF0aW9uIHBvaW50IGtlZXBzIHNjb3BlXG4gKiAnbW9kdWxlJyAoYXR0YWNobWVudCB1bmtub3duKSB3aGlsZSBlYWNoIHJlZ2lzdHJhdGlvbiBzaXRlIGNhcnJpZXMgaXRzXG4gKiBvd24gc2NvcGUuIE9uZSBwb2ludCBzZXJ2aW5nIG11bHRpcGxlIHNjb3BlcyB2aWEgbWVyZ2VkIHNjb3BlIGxpc3RzIHdhc1xuICogcmVqZWN0ZWQ6IGNvbnN1bWVycyAobW5lbW9ncmFwaGljYSBkaWFtb25kcykga2V5IG9mZiBhIHNpbmdsZSBzY29wZSBwZXJcbiAqIHBvaW50LCBhbmQgc2VwYXJhdGUgZW50cmllcyBrZWVwIHRoYXQgY29udHJhY3Qgc2ltcGxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RydW1lbnRhdGlvblBvaW50IHtcblx0LyoqIEtpbmQgb2YgbGlmZWN5Y2xlIGNyb3Nzcm9hZCAqL1xuXHRraW5kOiBJbnN0cnVtZW50YXRpb25LaW5kO1xuXHQvKiogQ2xhc3MgcHJvdmlkaW5nIHRoZSBpbnN0cnVtZW50YXRpb24gKGUuZy4sIFwiQXV0aEd1YXJkXCIpICovXG5cdGNsYXNzTmFtZTogc3RyaW5nO1xuXHQvKiogTG9jYXRpb24gaW4gc291cmNlOiBmaWxlLnRzOkxpbmU6Q29sIChjbGFzcyBkZWNsYXJhdGlvbiB3aGVuIGRlY2xhcmVkIGluLXByb2plY3QsIGVsc2UgdGhlIHJlZ2lzdHJhdGlvbiBzaXRlKSAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogQ29kZSBzbmlwcGV0OiBzaWduYXR1cmUgLyBmaXJzdCBsaW5lLCBsaWtlIEVEUyBgY29kZWAgKi9cblx0Y29kZTogc3RyaW5nO1xuXHQvKiogV2hlcmUgdGhlIHBvaW50IGF0dGFjaGVzICovXG5cdHNjb3BlOiBJbnN0cnVtZW50YXRpb25TY29wZTtcblx0LyoqIENvbnRyb2xsZXIvcHJvdmlkZXIgbmFtZXMgdGhlIHBvaW50IGF0dGFjaGVzIHRvOyBlbXB0eSBmb3IgZ2xvYmFsIHBvaW50cyAqL1xuXHR0YXJnZXRzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgaW5zdHJ1bWVudGF0aW9uLmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0cnVtZW50YXRpb25Kc29uIHtcblx0LyoqIFNjaGVtYSB2ZXJzaW9uOiAyIGFkZHMgdGhlIG9wdGlvbmFsIGNyZWF0aW9uR3JhcGgga2V5IChQaGFzZSAzKSAqL1xuXHR2ZXJzaW9uOiBudW1iZXI7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdHBvaW50czogSW5zdHJ1bWVudGF0aW9uUG9pbnRbXTtcblx0LyoqXG5cdCAqIEluc2lkZS1vdXQgY3JlYXRpb24gd2FsayAoaW5zdHJ1bWVudGF0aW9uIHdhbGtlciBwbGFuLCBQaGFzZSAzKTogd2hpY2hcblx0ICogc2NvcGVzIGNyZWF0ZSBtbmVtb25pY2EgaW5zdGFuY2VzIGFuZCB3aG8gY2FsbHMgdGhlbSwgd2Fsa2VkIG91dHdhcmQgdG9cblx0ICogdGhlIHN0YXJ0ZXJzLiBBYnNlbnQgd2hlbiB0aGUgd3JpdGVyIGlzIGNhbGxlZCB3aXRob3V0IGNyZWF0aW9uLWdyYXBoXG5cdCAqIGRhdGEgKGRpcmVjdCBsaWJyYXJ5IHVzZSk7IGFsd2F5cyBwcmVzZW50IGZyb20gdGhlIENMSS5cblx0ICovXG5cdGNyZWF0aW9uR3JhcGg/OiBDcmVhdGlvbkdyYXBoO1xufVxuXG4vKipcbiAqIEZsb3cga2luZCBmb3IgdHJhY2tpbmcgbmF0aXZlIGluc3RhbmNlIHVzYWdlIHBhdHRlcm5zXG4gKi9cbmV4cG9ydCB0eXBlIEZsb3dLaW5kID1cblx0fCAncHJvcGVydHlSZWFkJ1xuXHR8ICdwcm9wZXJ0eVdyaXRlJ1xuXHR8ICdtZXRob2RDYWxsJ1xuXHR8ICdkZXN0cnVjdHVyZVJlYWQnXG5cdHwgJ3Bhc3NBc0FyZydcblx0fCAncmV0dXJuJ1xuXHR8ICdzcHJlYWQnXG5cdHwgJ2FycmF5RWxlbWVudCdcblx0fCAnY29uZGl0aW9uYWxBY2Nlc3MnXG5cdHwgJ2VsZW1lbnRBY2Nlc3MnXG5cdHwgJ3JlYXNzaWdubWVudCdcblx0fCAnaW5zdGFudGlhdGlvbic7XG5cbi8qKlxuICogRmxvdyBpbmZvIGZvciBuYXRpdmUgaW5zdGFuY2UgdXNhZ2UgdHJhY2tpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93SW5mbyB7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIEtpbmQgb2YgZmxvdyAqL1xuXHRraW5kOiBGbG93S2luZDtcblx0LyoqIENvZGUgc25pcHBldCAqL1xuXHRjb2RlOiBzdHJpbmc7XG5cdC8qKiBQcm9wZXJ0eSBuYW1lIGlmIGFwcGxpY2FibGUgKi9cblx0cHJvcGVydHlOYW1lPzogc3RyaW5nO1xuXHQvKiogUmVzb2x2ZWQgdGFyZ2V0IHR5cGUgaWYga25vd24gKi9cblx0dGFyZ2V0VHlwZT86IHN0cmluZztcblx0LyoqIENvbnRleHQgKGZ1bmN0aW9uIG5hbWUsIHBhcmFtIHBvc2l0aW9uLCBldGMuKSAqL1xuXHRjb250ZXh0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBmbG93Lmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93SnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0ZmxvdzogUmVjb3JkPHN0cmluZywgRmxvd0luZm9bXT47XG59XG5cbi8qKlxuICogV2hhdCBhIG1vZHVsZS1sZXZlbCBiaW5kaW5nIGlzLiBWYXJpYWJsZXMgYXJlIGNsYXNzaWZpZWQgYXMgJ2NvbnN0J1xuICogcmVnYXJkbGVzcyBvZiBsZXQvdmFyIOKAlCBtdXRhYmlsaXR5IChyZWFzc2lnbm1lbnQgdHJhY2tpbmcpIGlzIHRoZVxuICogbG9jYWwtc2NvcGUgd2Fsa2VyJ3MgY29uY2VybiAoUGhhc2UgMiksIG5vdCB0aGUgbW9kdWxlIGdyYXBoJ3MuXG4gKi9cbmV4cG9ydCB0eXBlIE1vZHVsZUJpbmRpbmdLaW5kID1cblx0fCAnZnVuY3Rpb24nXG5cdHwgJ2NsYXNzJ1xuXHR8ICdjb25zdCdcblx0fCAndHlwZSdcblx0fCAndW5rbm93bic7XG5cbi8qKlxuICogSG93IGEgYmluZGluZyBlbnRlcnMgYSBtb2R1bGVcbiAqL1xuZXhwb3J0IHR5cGUgTW9kdWxlSW1wb3J0S2luZCA9XG5cdHwgJ25hbWVkJ1xuXHR8ICdkZWZhdWx0J1xuXHR8ICduYW1lc3BhY2UnXG5cdHwgJ3JlcXVpcmUnO1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBtb2R1bGUtbGV2ZWwgYmluZGluZyAoZXhwb3J0LCBpbXBvcnQsIG9yIHJlLWV4cG9ydCkuXG4gKlxuICogYG5hbWVgIGlzIGFsd2F5cyB0aGUgbmFtZSB0aGlzIG1vZHVsZSBwcmVzZW50czogdGhlIGxvY2FsIGlkZW50aWZpZXIgZm9yXG4gKiBpbXBvcnRzLCB0aGUgZXhwb3J0ZWQgbmFtZSBmb3IgZXhwb3J0cy4gYGltcG9ydEFsaWFzYCBjYXJyaWVzIHRoZSBvcmlnaW5hbFxuICogbmFtZSBpbiB0aGUgc291cmNlIG1vZHVsZSB3aGVuIGl0IGRpZmZlcnMgKGBpbXBvcnQgeyBYIGFzIFkgfWAg4oaSIG5hbWUgJ1knLFxuICogaW1wb3J0QWxpYXMgJ1gnOyBgZXhwb3J0IHsgWCBhcyBZIH0gZnJvbSDigKZgIOKGkiBuYW1lICdZJywgaW1wb3J0QWxpYXMgJ1gnKS5cbiAqIEZvciBkZWZhdWx0IGltcG9ydHMgbmFtZSBpcyB0aGUgbG9jYWwgaWRlbnRpZmllciBhbmQgdGhlIHNvdXJjZSBsb29rdXAga2V5XG4gKiBpcyAnZGVmYXVsdCcgKGltcGxpZWQgYnkgaW1wb3J0S2luZCk7IGZvciBuYW1lc3BhY2UgaW1wb3J0cy9leHBvcnRzIG5hbWUgaXNcbiAqIHRoZSBuYW1lc3BhY2UgYWxpYXMgKCcqJyBmb3IgYmFyZSBgZXhwb3J0ICogZnJvbSDigKZgKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVCaW5kaW5nIHtcblx0LyoqIE5hbWUgYXMgcHJlc2VudGVkIGluIHRoaXMgbW9kdWxlIChsb2NhbCBuYW1lIGZvciBpbXBvcnRzLCBleHBvcnRlZCBuYW1lIGZvciBleHBvcnRzKSAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdC8qKiBXaGF0IHRoZSBiaW5kaW5nIGlzOyBiYWNrZmlsbGVkIGZyb20gdGhlIG9yaWdpbiBtb2R1bGUgd2hlbiByZXNvbHZhYmxlICovXG5cdGtpbmQ6IE1vZHVsZUJpbmRpbmdLaW5kO1xuXHQvKipcblx0ICogUmVzb2x2ZWQgYWJzb2x1dGUgZmlsZSBwYXRoIG9mIHRoZSBzb3VyY2UgbW9kdWxlICh0aGUgbW9kdWxlIGl0c2VsZiBmb3Jcblx0ICogbG9jYWwgZGVjbGFyYXRpb25zOyB0aGUgcmF3IHNwZWNpZmllciB3aGVuIHJlc29sdXRpb24gZmFpbHMpXG5cdCAqL1xuXHRzb3VyY2VNb2R1bGU6IHN0cmluZztcblx0LyoqIEhvdyB0aGUgYmluZGluZyBlbnRlcnMgdGhlIG1vZHVsZSAoYWJzZW50IG9uIHBsYWluIGxvY2FsIGV4cG9ydHMpICovXG5cdGltcG9ydEtpbmQ/OiBNb2R1bGVJbXBvcnRLaW5kO1xuXHQvKiogT3JpZ2luYWwgbmFtZSBpbiB0aGUgc291cmNlIG1vZHVsZSB3aGVuIGFsaWFzZWQgKi9cblx0aW1wb3J0QWxpYXM/OiBzdHJpbmc7XG5cdC8qKiBUcnVlIGZvciBgZXhwb3J0IHsgWCB9IGZyb20gJy4veSdgIC8gYGV4cG9ydCAqIGZyb20gJy4veSdgIChiYXJyZWxzKSAqL1xuXHRpc1JlRXhwb3J0OiBib29sZWFuO1xuXHQvKipcblx0ICogVHJ1ZSB3aGVuIHRoZSBzcGVjaWZpZXIgcmVzb2x2ZWQgaW50byBub2RlX21vZHVsZXNcblx0ICogKHRzLnJlc29sdmVNb2R1bGVOYW1lJ3MgaXNFeHRlcm5hbExpYnJhcnlJbXBvcnQpLiBFeHRlcm5hbCBiaW5kaW5ncyBhcmVcblx0ICogcmVjb3JkZWQgZm9yIHJlZmVyZW5jZSBidXQgbmV2ZXIgZW50ZXIgYGRlcGVuZGVuY2llc2AgYW5kIGFyZSBuZXZlciB3YWxrZWQuXG5cdCAqIE5vZGUuanMgYnVpbHRpbnMgYXJlIG5vdCByZWNvcmRlZCBhcyBiaW5kaW5ncyBhdCBhbGwg4oCUIHNlZVxuXHQgKiBNb2R1bGVJbmZvLmJ1aWx0aW5TcGVjaWZpZXJzLlxuXHQgKi9cblx0ZXh0ZXJuYWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBlci1tb2R1bGUgcmVjb3JkIG9mIHRoZSBjcm9zcy1maWxlIGdyYXBoIChtb2R1bGVzLmpzb24pXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlSW5mbyB7XG5cdC8qKiBBYnNvbHV0ZSBmaWxlIHBhdGggKG1hcCBrZXkpICovXG5cdGZpbGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgdHlwZSBmdWxsUGF0aHMgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZSAqL1xuXHRkZWZpbmVkVHlwZXM6IHN0cmluZ1tdO1xuXHQvKiogRXZlcnl0aGluZyB0aGlzIG1vZHVsZSBleHBvcnRzIChsb2NhbCBkZWNsYXJhdGlvbnMgYW5kIHJlLWV4cG9ydHMpICovXG5cdGV4cG9ydGVkQmluZGluZ3M6IE1vZHVsZUJpbmRpbmdbXTtcblx0LyoqIEV2ZXJ5dGhpbmcgdGhpcyBtb2R1bGUgaW1wb3J0cyAocmUtZXhwb3J0cyBhcHBlYXIgaGVyZSB0b28sIG1hcmtlZCBpc1JlRXhwb3J0KSAqL1xuXHRpbXBvcnRlZEJpbmRpbmdzOiBNb2R1bGVCaW5kaW5nW107XG5cdC8qKiBBYnNvbHV0ZSBwYXRocyBvZiBhbmFseXplZCBwcm9qZWN0IG1vZHVsZXMgdGhpcyBtb2R1bGUgaW1wb3J0cyBmcm9tICovXG5cdGRlcGVuZGVuY2llczogc3RyaW5nW107XG5cdC8qKiBJbXBvcnQgc3BlY2lmaWVycyB0aGF0IG1vZHVsZSByZXNvbHV0aW9uIGNvdWxkIG5vdCByZXNvbHZlIChub2RlIGJ1aWx0aW5zIGV4Y2x1ZGVkIOKAlCBzZWUgYnVpbHRpblNwZWNpZmllcnMpICovXG5cdHVucmVzb2x2ZWRTcGVjaWZpZXJzOiBzdHJpbmdbXTtcblx0LyoqXG5cdCAqIE5vZGUuanMgYnVpbHRpbiBzcGVjaWZpZXJzIHRoaXMgbW9kdWxlIGltcG9ydHMgKCdwYXRoJywgJ25vZGU6ZnMnLCDigKYpLFxuXHQgKiBtYXRjaGVkIGFnYWluc3Qgbm9kZTptb2R1bGUncyBidWlsdGluTW9kdWxlcyBpbiBib3RoIGJhcmUgYW5kXG5cdCAqIGBub2RlOmAtcHJlZml4ZWQgZm9ybXMuIFJlY29yZGVkIGZvciBob25lc3R5IG9ubHk6IGJ1aWx0aW5zIHByb2R1Y2Ugbm9cblx0ICogYmluZGluZ3MsIG5ldmVyIGVudGVyIGBkZXBlbmRlbmNpZXNgL2B1bnJlc29sdmVkU3BlY2lmaWVyc2AsIGFuZCBuZXZlclxuXHQgKiBwcm9kdWNlIGVkZ2VzLlxuXHQgKi9cblx0YnVpbHRpblNwZWNpZmllcnM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgY3Jvc3MtbW9kdWxlIHVzYWdlIG9mIGEgbW5lbW9uaWNhIHR5cGU6IHVzYWdlTW9kdWxlIGltcG9ydHMgYSBiaW5kaW5nXG4gKiB3aG9zZSBvcmlnaW4gbW9kdWxlIGRlZmluZXMgdGhlIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvc3NNb2R1bGVVc2FnZSB7XG5cdC8qKiBNYXRjaGVkIG1uZW1vbmljYSB0eXBlIGZ1bGxQYXRoIChvciB0aGUgaW1wb3J0ZWQgbmFtZSB3aGVuIHVubWF0Y2hlZCkgKi9cblx0dHlwZVBhdGg6IHN0cmluZztcblx0LyoqIEFic29sdXRlIHBhdGggb2YgdGhlIG1vZHVsZSB3aGVyZSB0aGUgdHlwZSBpcyBkZWZpbmVkIChyZS1leHBvcnQgY2hhaW5zIGNoYXNlZCB0byB0aGUgb3JpZ2luKSAqL1xuXHRkZWZpbml0aW9uTW9kdWxlOiBzdHJpbmc7XG5cdC8qKiBBYnNvbHV0ZSBwYXRoIG9mIHRoZSBpbXBvcnRpbmcgbW9kdWxlICovXG5cdHVzYWdlTW9kdWxlOiBzdHJpbmc7XG5cdC8qKiBJbXBvcnQgc2l0ZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHR1c2FnZUxvY2F0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGZ1bGwgbW9kdWxlIGdyYXBoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlR3JhcGgge1xuXHQvKiogS2V5ZWQgYnkgYWJzb2x1dGUgZmlsZSBwYXRoICovXG5cdG1vZHVsZXM6IE1hcDxzdHJpbmcsIE1vZHVsZUluZm8+O1xuXHRlZGdlczogQ3Jvc3NNb2R1bGVVc2FnZVtdO1xuXHQvKipcblx0ICogQ2lyY3VsYXIgaW1wb3J0IGNoYWlucyAoZWFjaCBhbiBhcnJheSBvZiBhYnNvbHV0ZSBwYXRocykuIFJlY29yZGVkLCBub3Rcblx0ICogYW4gZXJyb3Ig4oCUIG1uZW1vbmljYSBzdHJpY3RDaGFpbjpmYWxzZSBwZXJtaXRzIG5vbi1saW5lYXIgY29uc3RydWN0aW9uXG5cdCAqL1xuXHRjeWNsZXM6IHN0cmluZ1tdW107XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIG1vZHVsZXMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZXNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRtb2R1bGVzOiBSZWNvcmQ8c3RyaW5nLCBNb2R1bGVJbmZvPjtcblx0ZWRnZXM6IENyb3NzTW9kdWxlVXNhZ2VbXTtcblx0Y3ljbGVzOiBzdHJpbmdbXVtdO1xufVxuXG4vKipcbiAqIFdoYXQgYSB0cmFja2VkIHNjb3BlIGlzLiBEZWNpc2lvbiA1IChyZXNvbHZlZCAyMDI2LTA5LTAzKTogZnVuY3Rpb24sXG4gKiBtZXRob2QsIGFuZCBhcnJvdyBzY29wZXMgT05MWSDigJQgbm8gYmxvY2sgc2NvcGVzLiAnbW9kdWxlJyBpcyB0aGUgc3ludGhldGljXG4gKiBwZXItZmlsZSByb290IHNjb3BlIHNvIG1vZHVsZS1sZXZlbCBpbnN0YW5jZSBjcmVhdGlvbnMgYXJlIGxhYmVsZWQsIG5vdFxuICogZHJvcHBlZCAod2Fsa2VyIHBsYW46IFwicmVjb3JkZWQgYXMgYSByb290ZWQgaW5zdGFuY2VcIikuXG4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlS2luZCA9XG5cdHwgJ21vZHVsZSdcblx0fCAnZnVuY3Rpb24nXG5cdHwgJ21ldGhvZCdcblx0fCAnYXJyb3cnO1xuXG4vKipcbiAqIE9uZSB0cmFja2VkIHNjb3BlIChzY29wZXMuanNvbilcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY29wZUluZm8ge1xuXHQvKiogVW5pcXVlIGlkOiBtb2R1bGUgc2NvcGUgaXMgdGhlIGZpbGUgcGF0aDsgZnVuY3Rpb24gc2NvcGVzIGFyZSBmaWxlOmxpbmU6Y29sIG9mIHRoZSBzY29wZSBub2RlICovXG5cdHNjb3BlSWQ6IHN0cmluZztcblx0LyoqIERlY2lzaW9uIDggbGFiZWxpbmc6IGZ1bmN0aW9uL21ldGhvZCBuYW1lICgnQ2xhc3MubWV0aG9kJyBmb3IgbWV0aG9kcyksIGZpbGU6bGluZSBmb3IgYW5vbnltb3VzIGhvbGRlcnMgKi9cblx0bmFtZTogc3RyaW5nO1xuXHRraW5kOiBTY29wZUtpbmQ7XG5cdC8qKiBOZWFyZXN0IGVuY2xvc2luZyBzY29wZSAodW5kZWZpbmVkIG9uIG1vZHVsZSBzY29wZXMpICovXG5cdHBhcmVudFNjb3BlSWQ/OiBzdHJpbmc7XG5cdC8qKiBBYnNvbHV0ZSBmaWxlIHBhdGggKi9cblx0ZmlsZVBhdGg6IHN0cmluZztcblx0LyoqIFNjb3BlIHN0YXJ0OiBmaWxlLnRzOkxpbmU6Q29sIChtb2R1bGUgc2NvcGU6IGZpbGU6MToxKSAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9uZSB0cmFja2VkIHZhcmlhYmxlIChzY29wZXMuanNvbilcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY29wZVZhcmlhYmxlIHtcblx0bmFtZTogc3RyaW5nO1xuXHQvKiogT3duaW5nIHNjb3BlICovXG5cdHNjb3BlSWQ6IHN0cmluZztcblx0LyoqIE1uZW1vbmljYSB0eXBlIGZ1bGxQYXRoIHdoZW4ga25vd24gKG5ldyBYKCkgb24gYSBrbm93biB0eXBlLCBuZXcgaW5zdC5TdWIoKSBjaGFpbmluZywgb3IgYSBrbm93biBhbm5vdGF0aW9uKSAqL1xuXHR0eXBlUGF0aD86IHN0cmluZztcblx0LyoqIENoZWFwIHRleHR1YWwgdHlwZTogYW5ub3RhdGlvbiB0ZXh0IG9yIHRpbnkgaW5pdGlhbGl6ZXIgY2xhc3NpZmljYXRpb24gKi9cblx0aW5mZXJyZWRUeXBlPzogc3RyaW5nO1xuXHQvKiogRGVjbGFyYXRpb24gc2l0ZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRkZWNsYXJhdGlvbjogc3RyaW5nO1xuXHRpc1BhcmFtZXRlcjogYm9vbGVhbjtcblx0LyoqIGNvbnN0ID0gZmFsc2U7IGxldC92YXIgYW5kIHBhcmFtZXRlcnMgPSB0cnVlIChwYXJhbWV0ZXJzIGFyZSByZWFzc2lnbmFibGUpICovXG5cdGlzTXV0YWJsZTogYm9vbGVhbjtcblx0LyoqXG5cdCAqIFJlYXNzaWdubWVudCBzaXRlcyAoZmlsZS50czpMaW5lOkNvbCkgb2YgdGhpcyBiaW5kaW5nIOKAlCBmbG93LXRlcm1pbmF0aW9uXG5cdCAqIHBvaW50cyAoZGVjaXNpb24gNik6IHRoZSBQaGFzZSAzIHdhbGtlciBzdG9wcyBmb2xsb3dpbmcgdGhlIGJpbmRpbmcgdGhlcmVcblx0ICovXG5cdHJlYXNzaWdubWVudHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBmdWxsIGxvY2FsLXNjb3BlIGFuYWx5c2lzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVBbmFseXNpcyB7XG5cdC8qKiBLZXllZCBieSBzY29wZUlkICovXG5cdHNjb3BlczogTWFwPHN0cmluZywgU2NvcGVJbmZvPjtcblx0LyoqIEtleWVkIGJ5IGAke3Njb3BlSWR9IyR7bmFtZX1gICovXG5cdHZhcmlhYmxlczogTWFwPHN0cmluZywgU2NvcGVWYXJpYWJsZT47XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIHNjb3Blcy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVzSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0c2NvcGVzOiBSZWNvcmQ8c3RyaW5nLCBTY29wZUluZm8+O1xuXHR2YXJpYWJsZXM6IFNjb3BlVmFyaWFibGVbXTtcbn1cblxuLyoqXG4gKiBPbmUgbm9kZSBvZiB0aGUgY3JlYXRpb24gZ3JhcGggKGluc3RydW1lbnRhdGlvbiB3YWxrZXIgcGxhbiwgUGhhc2UgMyk6XG4gKiBhIHNjb3BlIHRoYXQgY3JlYXRlcyBtbmVtb25pY2EgaW5zdGFuY2VzLCBvciBvbmUgc2l0dGluZyBvbiBhIGNhbGwgcGF0aFxuICogdG8gYSBjcmVhdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0aW9uR3JhcGhOb2RlIHtcblx0LyoqIExvY2FsU2NvcGVXYWxrZXIgc2NvcGVJZCAobW9kdWxlIHNjb3BlID0gZmlsZSBwYXRoOyBmdW5jdGlvbiBzY29wZXMgPSBmaWxlOmxpbmU6Y29sKSAqL1xuXHRzY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBEZWNpc2lvbiA4IGxhYmVsOiBmdW5jdGlvbi9tZXRob2QgbmFtZSAoJ0NsYXNzLm1ldGhvZCcpLCBmaWxlOmxpbmUgZm9yIGFub255bW91cyBob2xkZXJzICovXG5cdG5hbWU6IHN0cmluZztcblx0a2luZDogU2NvcGVLaW5kO1xuXHQvKiogQWJzb2x1dGUgZmlsZSBwYXRoICovXG5cdGZpbGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBTY29wZSBzdGFydDogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogVHJ1ZSB3aGVuIHRoZSB3YWxrIGZvdW5kIG5vIGNhbGxlcnMg4oCUIGFuIGFwcGxpY2F0aW9uIGVudHJ5IHBvaW50ICovXG5cdHN0YXJ0ZXI6IGJvb2xlYW47XG59XG5cbi8qKlxuICogT25lIGVkZ2Ugb2YgdGhlIGNyZWF0aW9uIGdyYXBoOiB0aGUgY2FsbGVyIHNjb3BlIGludm9rZXMgb3IgcmVmZXJlbmNlcyB0aGVcbiAqIGNhbGxlZSBzY29wZS4gRGlyZWN0aW9uIGlzIGluc2lkZS1vdXQ6IGNhbGxlciDihpIgY2FsbGVlLCB3aGVyZSB0aGUgY2FsbGVlIGlzXG4gKiBjbG9zZXIgdG8gdGhlIGNyZWF0aW9uIHNpdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRpb25HcmFwaEVkZ2Uge1xuXHQvKiogQ2FsbGluZyBzY29wZSdzIHNjb3BlSWQgKi9cblx0Y2FsbGVyOiBzdHJpbmc7XG5cdC8qKiBDYWxsZWQgKGhvbGRlcikgc2NvcGUncyBzY29wZUlkICovXG5cdGNhbGxlZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIGluc3RhbnRpYXRpb24gYW5jaG9yOiBvbmUgbW5lbW9uaWNhIGNyZWF0aW9uIHNpdGUgcGlubmVkIHRvIGl0cyBob2xkZXJcbiAqIHNjb3BlLlxuICpcbiAqIGB2YXJpYWJsZWAvYHRlcm1pbmF0ZWRBdGAgYXJlIGEgZG9jdW1lbnRlZCBoZXVyaXN0aWM6IHRoZSB2YXJpYWJsZSBkZWNsYXJlZFxuICogaW4gdGhlIGhvbGRlciBzY29wZSBvbiB0aGUgU0FNRSBsaW5lIGFzIHRoZSBjcmVhdGlvbiwgd2hvc2UgdHlwZVBhdGggKHdoZW5cbiAqIGtub3duKSBtYXRjaGVzIHRoZSBjcmVhdGVkIHR5cGUuIGB0ZXJtaW5hdGVkQXRgIGlzIHRoYXQgdmFyaWFibGUncyBmaXJzdFxuICogcmVhc3NpZ25tZW50IHNpdGUg4oCUIHRoZSBkZWNpc2lvbiA2IGZsb3ctdGVybWluYXRpb24gcG9pbnQgd2hlcmUgdGhlIHdhbGtlclxuICogc3RvcHMgZm9sbG93aW5nIHRoZSBiaW5kaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0aW9uQW5jaG9yIHtcblx0LyoqIENyZWF0aW9uIHNpdGU6IGZpbGUudHM6TGluZTpDb2wgKHRoZSB1c2FnZXMuanNvbiBsb2NhdGlvbikgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIFNjb3BlIGhvbGRpbmcgdGhlIGNyZWF0aW9uIChzY29wZXMuanNvbiBzY29wZUlkKSAqL1xuXHRob2xkZXJTY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgdHlwZSBmdWxsUGF0aCBiZWluZyBjcmVhdGVkICovXG5cdHR5cGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBDb25zdHJ1Y3RvciBleHByZXNzaW9uIHRleHQgKCdUaGluZycsICd1c2VyLkFkbWluRW50aXR5JywgYSBsb29rdXAgYWxpYXMgbmFtZSkgKi9cblx0Y29uc3RydWN0b3JUZXh0Pzogc3RyaW5nO1xuXHQvKipcblx0ICogVHJ1ZSB3aGVuIHRoZSBob2xkZXIgaXMgdGhlIG1vZHVsZSBzY29wZSDigJQgYSByb290ZWQgaW5zdGFuY2UgKHBsYW46XG5cdCAqIGxlZ2l0aW1hdGUgcm9vdCBvciBkZXZlbG9wZXIgZXJyb3I7IGxhYmVsZWQsIG5vdCBwb2xpY2VkKVxuXHQgKi9cblx0cm9vdGVkPzogYm9vbGVhbjtcblx0LyoqIFZhcmlhYmxlIHRoZSBmcmVzaCBpbnN0YW5jZSB3YXMgYm91bmQgdG8gKHNhbWUtbGluZSBoZXVyaXN0aWMpICovXG5cdHZhcmlhYmxlPzogc3RyaW5nO1xuXHQvKiogRmlyc3QgcmVhc3NpZ25tZW50IHNpdGUgb2YgdGhhdCB2YXJpYWJsZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHR0ZXJtaW5hdGVkQXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGNyZWF0aW9uIGdyYXBoOiBldmVyeXRoaW5nIHRoYXQgbGVhZHMgdG8gbW5lbW9uaWNhIGluc3RhbmNlcyBiZWluZ1xuICogY3JlYXRlZC4gRW1pdHRlZCBhcyB0aGUgYGNyZWF0aW9uR3JhcGhgIGtleSBvZiBpbnN0cnVtZW50YXRpb24uanNvbiB2Mi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGlvbkdyYXBoIHtcblx0bm9kZXM6IENyZWF0aW9uR3JhcGhOb2RlW107XG5cdGVkZ2VzOiBDcmVhdGlvbkdyYXBoRWRnZVtdO1xuXHRhbmNob3JzOiBDcmVhdGlvbkFuY2hvcltdO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBoaWVyYXJjaHkuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhpZXJhcmNoeUpzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdHJvb3RzOiBIaWVyYXJjaHlOb2RlW107XG59XG5cbi8qKlxuICogU3RydWN0dXJlZCBoaWVyYXJjaHkgbm9kZSBmb3IgbWFjaGluZSBjb25zdW1wdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIaWVyYXJjaHlOb2RlIHtcblx0LyoqIFR5cGUgbmFtZSAoZS5nLiwgXCJBZG1pblR5cGVcIikgKi9cblx0bmFtZTogc3RyaW5nO1xuXHQvKiogRnVsbCBkb3R0ZWQgcGF0aCAoZS5nLiwgXCJVc2VyVHlwZS5BZG1pblR5cGVcIikgKi9cblx0ZnVsbFBhdGg6IHN0cmluZztcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogQ2hpbGQgdHlwZXMgaW4gdGhlIFRyaWUgKi9cblx0Y2hpbGRyZW46IEhpZXJhcmNoeU5vZGVbXTtcbn1cblxuLyoqXG4gKiBBIGZhdGFsIHJlc29sdXRpb24gZmFpbHVyZTogc2FtZS1uYW1lc3BhY2UgZHVwbGljYXRlIG1uZW1vbmljYVxuICogZGVmaW5pdGlvbnMsIG9yIGEgbW5lbW9uaWNhLWdyYXBoIHR5cGUgcmVmZXJlbmNlIHRoYXQgc3RheXMgYW1iaWd1b3VzXG4gKiBhZnRlciBwYXRoLWF3YXJlIHJlc29sdXRpb24gKG9yIHJlc29sdmVzIHRvIG5vdGhpbmcpLiBUaGUgQ0xJIHByaW50c1xuICogZXZlcnkgbG9jYXRpb24gYW5kIHdyaXRlcyBubyAudGFjdGljYSBvdXRwdXQgYXQgYWxsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdXRpb25FcnJvciB7XG5cdC8qKiBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmFpbHVyZSAqL1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdC8qKiBldmVyeSBpbnZvbHZlZCBzb3VyY2UgbG9jYXRpb24sIGBmaWxlOmxpbmU6Y29sdW1uYCAqL1xuXHRsb2NhdGlvbnM6IHN0cmluZ1tdO1xufVxuIl19
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFR5cGUgZGVmaW5pdGlvbnMgZm9yIFRhY3RpY2FcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhY3RpY2FDb25maWcge1xuXHQvKiogT3V0cHV0IGRpcmVjdG9yeSBmb3IgZ2VuZXJhdGVkIHR5cGVzIChkZWZhdWx0OiAudGFjdGljYSkgKi9cblx0b3V0cHV0RGlyPzogc3RyaW5nO1xuXHQvKiogRmlsZXMgdG8gaW5jbHVkZSAoZ2xvYiBwYXR0ZXJucykgKi9cblx0aW5jbHVkZT86IHN0cmluZ1tdO1xuXHQvKiogRmlsZXMgdG8gZXhjbHVkZSAoZ2xvYiBwYXR0ZXJucykgKi9cblx0ZXhjbHVkZT86IHN0cmluZ1tdO1xuXHQvKiogRW5hYmxlIHZlcmJvc2UgbG9nZ2luZyAqL1xuXHR2ZXJib3NlPzogYm9vbGVhbjtcblx0LyoqIEdlbmVyYXRlIGdsb2JhbCBhdWdtZW50YXRpb24gaW5zdGVhZCBvZiBtb2R1bGUgYXVnbWVudGF0aW9uIChkZWZhdWx0OiB0cnVlKSAqL1xuXHRnbG9iYWxBdWdtZW50YXRpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5SW5mbyB7XG5cdG5hbWU6IHN0cmluZztcblx0dHlwZTogc3RyaW5nO1xuXHRvcHRpb25hbDogYm9vbGVhbjtcblx0LyoqIFRydWUgaWYgdGhpcyBpcyBhIGdldHRlciBwcm9wZXJ0eSAocmVhZG9ubHkpICovXG5cdHJlYWRvbmx5PzogYm9vbGVhbjtcbn1cblxuLyoqIENvbnN0cnVjdG9yIHBhcmFtZXRlciBpbmZvIGZvciBUeXBlUmVnaXN0cnkgc2lnbmF0dXJlcyAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zdHJ1Y3RvclBhcmFtSW5mbyB7XG5cdC8qKiBQYXJhbWV0ZXIgbmFtZSAoZS5nLiwgXCJ1c2FnZXNcIiwgXCJkYXRhXCIsIFwiY29uZmlnXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlIHN0cmluZyAtIGNhbiBiZSBhIHNpbXBsZSB0eXBlIG9yIGV4cGFuZGVkIG9iamVjdCBsaXRlcmFsICovXG5cdHR5cGU6IHN0cmluZztcblx0b3B0aW9uYWw6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZU5vZGUge1xuXHQvKiogVHlwZSBuYW1lIChlLmcuLCBcIlNlY29uZFR5cGVcIikgKi9cblx0bmFtZTogc3RyaW5nO1xuXHQvKiogRnVsbCBwYXRoIChlLmcuLCBcIkZpcnN0VHlwZS5TZWNvbmRUeXBlXCIpICovXG5cdGZ1bGxQYXRoOiBzdHJpbmc7XG5cdC8qKiBQcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGhpcyB0eXBlJ3MgY29uc3RydWN0b3IgKi9cblx0cHJvcGVydGllczogTWFwPHN0cmluZywgUHJvcGVydHlJbmZvPjtcblx0LyoqIENvbnN0cnVjdG9yIHBhcmFtZXRlcnMgKGZvciBUeXBlUmVnaXN0cnkgY29uc3RydWN0b3Igc2lnbmF0dXJlKSAqL1xuXHRjb25zdHJ1Y3RvclBhcmFtcz86IENvbnN0cnVjdG9yUGFyYW1JbmZvW107XG5cdC8qKiBQYXJlbnQgdHlwZSBub2RlICovXG5cdHBhcmVudD86IFR5cGVOb2RlO1xuXHQvKiogQ2hpbGQgdHlwZXMgKi9cblx0Y2hpbGRyZW46IE1hcDxzdHJpbmcsIFR5cGVOb2RlPjtcblx0LyoqIFNvdXJjZSBmaWxlIHBhdGggKi9cblx0c291cmNlRmlsZTogc3RyaW5nO1xuXHQvKiogTGluZSBudW1iZXIgaW4gc291cmNlICovXG5cdGxpbmU6IG51bWJlcjtcblx0LyoqIENvbHVtbiBudW1iZXIgaW4gc291cmNlICovXG5cdGNvbHVtbjogbnVtYmVyO1xuXHQvKiogQ29uc3RydWN0b3IgZnVuY3Rpb24gbmFtZSBvciBjbGFzcyBuYW1lICovXG5cdGNvbnN0cnVjdG9yTmFtZT86IHN0cmluZztcblx0LyoqIENvbGxlY3Rpb24gaWRlbnRpZmllciBpZiB0aGUgdHlwZSBiZWxvbmdzIHRvIGEgY3VzdG9tIGNvbGxlY3Rpb24gKHVuZGVmaW5lZCA9IGRlZmF1bHQvZ2xvYmFsIHJlZ2lzdHJ5KSAqL1xuXHRjb2xsZWN0aW9uSWQ/OiBzdHJpbmc7XG5cdC8qKiBSZWdpc3RyeSBpbnRlcmZhY2UgbmFtZSBmb3IgY3VzdG9tIGNvbGxlY3Rpb25zIHVzaW5nIE9wdGlvbiBCICh1c2VyLXByb3ZpZGVkIHJlZ2lzdHJ5IGludGVyZmFjZSkgKi9cblx0cmVnaXN0cnlJbnRlcmZhY2VOYW1lPzogc3RyaW5nO1xuXHQvKipcblx0ICogU291cmNlIGZpbGUgb2YgdGhlIGNyZWF0ZVR5cGVzQ29sbGVjdGlvbigpIGNhbGwg4oCUIHRoZSBtb2R1bGUgdGhlXG5cdCAqIE9wdGlvbiBCIHJlZ2lzdHJ5IGF1Z21lbnRhdGlvbiBtdXN0IHRhcmdldCAodGhlIGludGVyZmFjZSBpc1xuXHQgKiBjb25maXJtZWQgZGVjbGFyZWQgdGhlcmUpXG5cdCAqL1xuXHRjb2xsZWN0aW9uU291cmNlRmlsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlR3JhcGgge1xuXHQvKiogUm9vdCB0eXBlcywga2V5ZWQgYnkgZnVsbCBwYXRoIChjdXN0b20tY29sbGVjdGlvbiByb290cyBjYXJyeSB0aGUgYGNvbGxlY3Rpb25JZDo6YCBwcmVmaXgpICovXG5cdHJvb3RzOiBNYXA8c3RyaW5nLCBUeXBlTm9kZT47XG5cdC8qKiBBbGwgdHlwZXMgYnkgZnVsbCBwYXRoICovXG5cdGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlTm9kZT47XG5cdC8qKiBBZGQgYSByb290IHR5cGUgKi9cblx0YWRkUm9vdChub2RlOiBUeXBlTm9kZSk6IHZvaWQ7XG5cdC8qKiBGaW5kIGEgdHlwZSBieSBmdWxsIHBhdGggKi9cblx0ZmluZFR5cGUoZnVsbFBhdGg6IHN0cmluZyk6IFR5cGVOb2RlIHwgdW5kZWZpbmVkO1xuXHQvKiogR2V0IGFsbCB0eXBlcyBhcyBhcnJheSAqL1xuXHRnZXRBbGxUeXBlcygpOiBUeXBlTm9kZVtdO1xuXHQvKiogQ2xlYXIgdGhlIGdyYXBoICovXG5cdGNsZWFyKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl6ZVJlc3VsdCB7XG5cdC8qKiBUeXBlcyBmb3VuZCBpbiB0aGUgYW5hbHlzaXMgKi9cblx0dHlwZXM6IFR5cGVOb2RlW107XG5cdC8qKiBFcnJvcnMgZW5jb3VudGVyZWQgKi9cblx0ZXJyb3JzOiBBbmFseXplRXJyb3JbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbmFseXplRXJyb3Ige1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdGZpbGU6IHN0cmluZztcblx0bGluZTogbnVtYmVyO1xuXHRjb2x1bW46IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZWRUeXBlcyB7XG5cdC8qKiBDb250ZW50IG9mIHRoZSAuZC50cyBmaWxlICovXG5cdGNvbnRlbnQ6IHN0cmluZztcblx0LyoqIFR5cGVzIHRoYXQgd2VyZSBnZW5lcmF0ZWQgKi9cblx0dHlwZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIERlZmluaXRpb24gaW5mbyBmb3IgY29kZSBuYXZpZ2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmaW5pdGlvbkluZm8ge1xuXHQvKiogVHlwZSBuYW1lIChlLmcuLCBcIkFkbWluVHlwZVwiKSAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIEhvdyB0eXBlIHdhcyBjcmVhdGVkOiAnZGVmaW5lJyBvciAnZGVjb3JhdGUnICovXG5cdGtpbmQ6ICdkZWZpbmUnIHwgJ2RlY29yYXRlJztcblx0LyoqIFBhcmVudCB0eXBlIGZ1bGwgcGF0aCwgbnVsbCBpZiByb290ICovXG5cdHBhcmVudDogc3RyaW5nIHwgbnVsbDtcblx0LyoqIHN0cmljdENoYWluIGNvbmZpZyBvcHRpb24gKi9cblx0c3RyaWN0Q2hhaW46IGJvb2xlYW47XG5cdC8qKiBibG9ja0Vycm9ycyBjb25maWcgb3B0aW9uICovXG5cdGJsb2NrRXJyb3JzOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFVzYWdlIGluZm8gZm9yIGNvZGUgbmF2aWdhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzYWdlSW5mbyB7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIEtpbmQgb2YgdXNhZ2U6IGluc3RhbnRpYXRpb24sIHR5cGVBbm5vdGF0aW9uLCBwcm9wZXJ0eUFjY2VzcywgbG9va3VwLCByZWZlcmVuY2UgKi9cblx0a2luZDogJ2luc3RhbnRpYXRpb24nIHwgJ3R5cGVBbm5vdGF0aW9uJyB8ICdwcm9wZXJ0eUFjY2VzcycgfCAnbG9va3VwJyB8ICdyZWZlcmVuY2UnO1xuXHQvKiogQ29kZSBzbmlwcGV0ICovXG5cdGNvZGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFNjb3BlIGhvbGRpbmcgdGhpcyB1c2FnZSAoTG9jYWxTY29wZVdhbGtlciBzY29wZUlkOiBtb2R1bGUgc2NvcGUgaXMgdGhlXG5cdCAqIGZpbGUgcGF0aCwgZnVuY3Rpb24gc2NvcGVzIGFyZSBmaWxlOmxpbmU6Y29sKS4gQWRkaXRpdmU7IGFic2VudCB3aGVuIHRoZVxuXHQgKiB1c2FnZSBzaXRzIG91dHNpZGUgdHJhY2tlZCBmaWxlcy5cblx0ICovXG5cdGhvbGRlclNjb3BlSWQ/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RvciBleHByZXNzaW9uIHRleHQgYXQgYW4gaW5zdGFudGlhdGlvbiBzaXRlICgnVGhpbmcnLFxuXHQgKiAndXNlci5BZG1pbkVudGl0eScsICdUMicgZm9yIGEgbG9va3VwIGFsaWFzKS4gQWRkaXRpdmU7IHNldCBvbmx5IG9uXG5cdCAqIGtpbmQgJ2luc3RhbnRpYXRpb24nLiBGZWVkcyBDcmVhdGlvbkFuY2hvci5jb25zdHJ1Y3RvclRleHQgKFBoYXNlIDMpLlxuXHQgKi9cblx0Y29uc3RydWN0b3JUZXh0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBkZWZpbml0aW9ucy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmaW5pdGlvbnNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRkZWZpbml0aW9uczogUmVjb3JkPHN0cmluZywgRGVmaW5pdGlvbkluZm8+O1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciB1c2FnZXMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzYWdlc0pzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdHVzYWdlczogUmVjb3JkPHN0cmluZywgVXNhZ2VJbmZvW10+O1xufVxuXG4vKipcbiAqIEVEUyAoRXhlY3V0aW9uIERhdGEgU3RvcmFnZSkga2luZCBmb3IgdHJhY2tpbmcgZXhlY3V0aW9uIGZsb3cgcGF0dGVybnNcbiAqL1xuZXhwb3J0IHR5cGUgRURTS2luZCA9XG5cdHwgJ3dyYXAnXG5cdHwgJ2NvbnRleHRDb25zdW1lJ1xuXHR8ICdob29rQXR0YWNoJztcblxuLyoqXG4gKiBFRFMgaW5mbyBmb3IgZXhlY3V0aW9uIGRhdGEgZmxvdyB0cmFja2luZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVEU0luZm8ge1xuXHQvKiogTG9jYXRpb24gaW4gc291cmNlOiBmaWxlLnRzOkxpbmU6Q29sICovXG5cdGxvY2F0aW9uOiBzdHJpbmc7XG5cdC8qKiBLaW5kIG9mIEVEUyB1c2FnZSAqL1xuXHRraW5kOiBFRFNLaW5kO1xuXHQvKiogQ29kZSBzbmlwcGV0ICovXG5cdGNvZGU6IHN0cmluZztcblx0LyoqIFJlc29sdmVkIHRhcmdldCB0eXBlIGlmIGRldGVjdGFibGUgKi9cblx0dGFyZ2V0VHlwZT86IHN0cmluZztcblx0LyoqXG5cdCAqIEVuY2xvc2luZyBtbmVtb25pY2EgdHlwZSBwYXRoIChkZWZpbmUvbGF6eSBoYW5kbGVyIG9yIGRlY29yYXRlZCBjbGFzcyk7XG5cdCAqIGZvciB3cmFwIHNpdGVzIG91dHNpZGUgYW55IGhhbmRsZXIsIGF0dHJpYnV0ZWQgdGhyb3VnaCB0aGUgaW5zdGFuY2UvY29udGV4dFxuXHQgKiBhcmd1bWVudCAodHJhY2tlZCBhc3NpZ25tZW50IG9yIHBhcmFtZXRlciBhbm5vdGF0aW9uKSwgdGhlbiBpbmhlcml0ZWQgZG93blxuXHQgKiB0aGUgd3JhcCBnZW5lcmF0aW9uIGNoYWluIChgdmlhYClcblx0ICovXG5cdHNjb3BlPzogc3RyaW5nO1xuXHQvKiogTG9jYXRpb24gb2YgdGhlIGVuY2xvc2luZyB3cmFwIHNpdGUgd2hvc2UgcnVudGltZSB3cmFwcGluZyBjYXVzZWQgdGhpcyBlbnRyeSAqL1xuXHR2aWE/OiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgdHlwZSBmdWxsUGF0aHMgaW5zdGFudGlhdGVkIGluc2lkZSB0aGUgd3JhcHBlZCBib2R5IOKAlCBndWFyYW50ZWVkIHBhdGggaGl0cyAqL1xuXHRjcmVhdGVzVHlwZXM/OiBzdHJpbmdbXTtcblx0LyoqIExhYmVsIHN0cmluZyBsaXRlcmFsIHBhc3NlZCB0byB3cmFwKGZuLCDigKYsICdsYWJlbCcpIHdoZW4gc3RhdGljYWxseSB2aXNpYmxlICovXG5cdGxhYmVsPzogc3RyaW5nO1xuXHQvKiogc2NvcGVJZCAoc2NvcGVzLmpzb24pIG9mIHRoZSB3cmFwcGVkIGNhbGxiYWNrJ3Mgb3duIHNjb3BlIOKAlCBqb2lucyB0byB0aGUgY3JlYXRpb24gZ3JhcGggKi9cblx0Y2FsbGJhY2tTY29wZUlkPzogc3RyaW5nO1xuXHQvKiogSWRlbnRpZmllciBwYXNzZWQgYXMgdGhlIGluc3RhbmNlL2NvbnRleHQgYXJndW1lbnQgKCd1c2VyJyksIHdoZW4gaXQgaXMgb25lICovXG5cdGluc3RhbmNlQXJnPzogc3RyaW5nO1xuXHQvKiogc2NvcGVJZCBvZiB0aGUgc2NvcGUgaG9sZGluZyB0aGUgd3JhcCBjYWxsIHNpdGUg4oCUIGpvaW5zIHRvIHRoZSBjcmVhdGlvbiBncmFwaCAqL1xuXHRzY29wZUlkPzogc3RyaW5nO1xuXHQvKiogTW5lbW9uaWNhIGZ1bGxQYXRoIG9mIHRoZSBpbnN0YW5jZSBhcmd1bWVudCwgcmVzb2x2ZWQgdGhyb3VnaCBzY29wZSB2YXJpYWJsZXMgKi9cblx0d3JhcHNUeXBlUGF0aD86IHN0cmluZztcblx0LyoqIFdyYXAtZmFtaWx5IGZ1bmN0aW9uIG5hbWUgKCd3cmFwJyB8ICd3cmFwQ29uc3RydWN0b3JBcmcnIHwg4oCmKSDigJQgam9pbnMgdGhlXG5cdCAqICBjYWxsIHNpdGUgdG8gZGl2ZSdzIGVuZ2luZSBrbm90IGluIGdyYXBoIGNvbnN1bWVycyAqL1xuXHRmbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgZWRzLmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFRFNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRlZHM6IFJlY29yZDxzdHJpbmcsIEVEU0luZm9bXT47XG59XG5cbi8qKlxuICogSW5zdHJ1bWVudGF0aW9uIGtpbmQgZm9yIGZyYW1ld29yayBsaWZlY3ljbGUgY3Jvc3Nyb2Fkc1xuICovXG5leHBvcnQgdHlwZSBJbnN0cnVtZW50YXRpb25LaW5kID1cblx0fCAnaW50ZXJjZXB0b3InXG5cdHwgJ2d1YXJkJ1xuXHR8ICdwaXBlJ1xuXHR8ICdmaWx0ZXInXG5cdHwgJ21pZGRsZXdhcmUnO1xuXG4vKipcbiAqIEluc3RydW1lbnRhdGlvbiBzY29wZTogd2hlcmUgdGhlIHBvaW50IGF0dGFjaGVzLlxuICogJ2dsb2JhbCcgZm9yIHByb3ZpZGVyLXRva2VuIHJlZ2lzdHJhdGlvbnMsICdtb2R1bGUnIGZvciBtaWRkbGV3YXJlIHdpcmVkXG4gKiB2aWEgY29uc3VtZXIuYXBwbHkoKSBBTkQgZm9yIGJhcmUgaGVyaXRhZ2UgZGVjbGFyYXRpb25zIHdob3NlIGF0dGFjaG1lbnRcbiAqIGlzIHN0YXRpY2FsbHkgdW5rbm93biwgYGNvbnRyb2xsZXI6TmFtZWAgLyBgbWV0aG9kOkNsYXNzLm1ldGhvZGAgZm9yXG4gKiBkZWNvcmF0b3Itc2NvcGVkIGF0dGFjaG1lbnRzLlxuICovXG5leHBvcnQgdHlwZSBJbnN0cnVtZW50YXRpb25TY29wZSA9XG5cdHwgJ2dsb2JhbCdcblx0fCAnbW9kdWxlJ1xuXHR8IGBjb250cm9sbGVyOiR7c3RyaW5nfWBcblx0fCBgbWV0aG9kOiR7c3RyaW5nfWA7XG5cbi8qKlxuICogSW5zdHJ1bWVudGF0aW9uIHBvaW50OiBhIGZyYW1ld29yayBsaWZlY3ljbGUgY3Jvc3Nyb2FkIChpbnRlcmNlcHRvcixcbiAqIGd1YXJkLCBwaXBlLCBmaWx0ZXIsIG1pZGRsZXdhcmUpIGRldGVjdGVkIHN5bnRhY3RpY2FsbHkuIFRoZSB2b2NhYnVsYXJ5XG4gKiB0aGF0IHR1cm5zIGEgc3ludGFjdGljIHNoYXBlIGludG8gYSBwb2ludCBjb21lcyBmcm9tIHBsdWdpbnMg4oCUIHdpdGggbm9cbiAqIHBsdWdpbiBsb2FkZWQsIG5vIHBvaW50cyBhcmUgY29sbGVjdGVkLlxuICpcbiAqIERlZHVwZS9zY29wZSBkZWNpc2lvbjogcG9pbnRzIGFyZSBrZXllZCBieSAoa2luZCwgY2xhc3NOYW1lLCBsb2NhdGlvbixcbiAqIHNjb3BlKSBhbmQgZHVwbGljYXRlcyBtZXJnZSB0aGVpciBgdGFyZ2V0c2AuIEEgY2xhc3MgZGV0ZWN0ZWQgYm90aCBieVxuICogaGVyaXRhZ2UgKGEgcGx1Z2luLWxpc3RlZCBgaW1wbGVtZW50c2AgaW50ZXJmYWNlKSBhbmQgYnkgYSBkZWNvcmF0b3JcbiAqIHNpdGUgeWllbGRzIFNFUEFSQVRFIGVudHJpZXMg4oCUIHRoZSBjbGFzcy1kZWNsYXJhdGlvbiBwb2ludCBrZWVwcyBzY29wZVxuICogJ21vZHVsZScgKGF0dGFjaG1lbnQgdW5rbm93bikgd2hpbGUgZWFjaCByZWdpc3RyYXRpb24gc2l0ZSBjYXJyaWVzIGl0c1xuICogb3duIHNjb3BlLiBPbmUgcG9pbnQgc2VydmluZyBtdWx0aXBsZSBzY29wZXMgdmlhIG1lcmdlZCBzY29wZSBsaXN0cyB3YXNcbiAqIHJlamVjdGVkOiBjb25zdW1lcnMgKG1uZW1vZ3JhcGhpY2EgZGlhbW9uZHMpIGtleSBvZmYgYSBzaW5nbGUgc2NvcGUgcGVyXG4gKiBwb2ludCwgYW5kIHNlcGFyYXRlIGVudHJpZXMga2VlcCB0aGF0IGNvbnRyYWN0IHNpbXBsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0cnVtZW50YXRpb25Qb2ludCB7XG5cdC8qKiBLaW5kIG9mIGxpZmVjeWNsZSBjcm9zc3JvYWQgKi9cblx0a2luZDogSW5zdHJ1bWVudGF0aW9uS2luZDtcblx0LyoqIENsYXNzIHByb3ZpZGluZyB0aGUgaW5zdHJ1bWVudGF0aW9uIChlLmcuLCBcIkF1dGhHdWFyZFwiKSAqL1xuXHRjbGFzc05hbWU6IHN0cmluZztcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAoY2xhc3MgZGVjbGFyYXRpb24gd2hlbiBkZWNsYXJlZCBpbi1wcm9qZWN0LCBlbHNlIHRoZSByZWdpc3RyYXRpb24gc2l0ZSkgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIENvZGUgc25pcHBldDogc2lnbmF0dXJlIC8gZmlyc3QgbGluZSwgbGlrZSBFRFMgYGNvZGVgICovXG5cdGNvZGU6IHN0cmluZztcblx0LyoqIFdoZXJlIHRoZSBwb2ludCBhdHRhY2hlcyAqL1xuXHRzY29wZTogSW5zdHJ1bWVudGF0aW9uU2NvcGU7XG5cdC8qKiBDb250cm9sbGVyL3Byb3ZpZGVyIG5hbWVzIHRoZSBwb2ludCBhdHRhY2hlcyB0bzsgZW1wdHkgZm9yIGdsb2JhbCBwb2ludHMgKi9cblx0dGFyZ2V0czogc3RyaW5nW107XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIGluc3RydW1lbnRhdGlvbi5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdHJ1bWVudGF0aW9uSnNvbiB7XG5cdC8qKiBTY2hlbWEgdmVyc2lvbjogMiBhZGRzIHRoZSBvcHRpb25hbCBjcmVhdGlvbkdyYXBoIGtleSAoUGhhc2UgMykgKi9cblx0dmVyc2lvbjogbnVtYmVyO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRwb2ludHM6IEluc3RydW1lbnRhdGlvblBvaW50W107XG5cdC8qKlxuXHQgKiBJbnNpZGUtb3V0IGNyZWF0aW9uIHdhbGsgKGluc3RydW1lbnRhdGlvbiB3YWxrZXIgcGxhbiwgUGhhc2UgMyk6IHdoaWNoXG5cdCAqIHNjb3BlcyBjcmVhdGUgbW5lbW9uaWNhIGluc3RhbmNlcyBhbmQgd2hvIGNhbGxzIHRoZW0sIHdhbGtlZCBvdXR3YXJkIHRvXG5cdCAqIHRoZSBzdGFydGVycy4gQWJzZW50IHdoZW4gdGhlIHdyaXRlciBpcyBjYWxsZWQgd2l0aG91dCBjcmVhdGlvbi1ncmFwaFxuXHQgKiBkYXRhIChkaXJlY3QgbGlicmFyeSB1c2UpOyBhbHdheXMgcHJlc2VudCBmcm9tIHRoZSBDTEkuXG5cdCAqL1xuXHRjcmVhdGlvbkdyYXBoPzogQ3JlYXRpb25HcmFwaDtcbn1cblxuLyoqXG4gKiBGbG93IGtpbmQgZm9yIHRyYWNraW5nIG5hdGl2ZSBpbnN0YW5jZSB1c2FnZSBwYXR0ZXJuc1xuICovXG5leHBvcnQgdHlwZSBGbG93S2luZCA9XG5cdHwgJ3Byb3BlcnR5UmVhZCdcblx0fCAncHJvcGVydHlXcml0ZSdcblx0fCAnbWV0aG9kQ2FsbCdcblx0fCAnZGVzdHJ1Y3R1cmVSZWFkJ1xuXHR8ICdwYXNzQXNBcmcnXG5cdHwgJ3JldHVybidcblx0fCAnc3ByZWFkJ1xuXHR8ICdhcnJheUVsZW1lbnQnXG5cdHwgJ2NvbmRpdGlvbmFsQWNjZXNzJ1xuXHR8ICdlbGVtZW50QWNjZXNzJ1xuXHR8ICdyZWFzc2lnbm1lbnQnXG5cdHwgJ2luc3RhbnRpYXRpb24nO1xuXG4vKipcbiAqIEZsb3cgaW5mbyBmb3IgbmF0aXZlIGluc3RhbmNlIHVzYWdlIHRyYWNraW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0luZm8ge1xuXHQvKiogTG9jYXRpb24gaW4gc291cmNlOiBmaWxlLnRzOkxpbmU6Q29sICovXG5cdGxvY2F0aW9uOiBzdHJpbmc7XG5cdC8qKiBLaW5kIG9mIGZsb3cgKi9cblx0a2luZDogRmxvd0tpbmQ7XG5cdC8qKiBDb2RlIHNuaXBwZXQgKi9cblx0Y29kZTogc3RyaW5nO1xuXHQvKiogUHJvcGVydHkgbmFtZSBpZiBhcHBsaWNhYmxlICovXG5cdHByb3BlcnR5TmFtZT86IHN0cmluZztcblx0LyoqIFJlc29sdmVkIHRhcmdldCB0eXBlIGlmIGtub3duICovXG5cdHRhcmdldFR5cGU/OiBzdHJpbmc7XG5cdC8qKiBDb250ZXh0IChmdW5jdGlvbiBuYW1lLCBwYXJhbSBwb3NpdGlvbiwgZXRjLikgKi9cblx0Y29udGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgZmxvdy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0pzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdGZsb3c6IFJlY29yZDxzdHJpbmcsIEZsb3dJbmZvW10+O1xufVxuXG4vKipcbiAqIFdoYXQgYSBtb2R1bGUtbGV2ZWwgYmluZGluZyBpcy4gVmFyaWFibGVzIGFyZSBjbGFzc2lmaWVkIGFzICdjb25zdCdcbiAqIHJlZ2FyZGxlc3Mgb2YgbGV0L3ZhciDigJQgbXV0YWJpbGl0eSAocmVhc3NpZ25tZW50IHRyYWNraW5nKSBpcyB0aGVcbiAqIGxvY2FsLXNjb3BlIHdhbGtlcidzIGNvbmNlcm4gKFBoYXNlIDIpLCBub3QgdGhlIG1vZHVsZSBncmFwaCdzLlxuICovXG5leHBvcnQgdHlwZSBNb2R1bGVCaW5kaW5nS2luZCA9XG5cdHwgJ2Z1bmN0aW9uJ1xuXHR8ICdjbGFzcydcblx0fCAnY29uc3QnXG5cdHwgJ3R5cGUnXG5cdHwgJ3Vua25vd24nO1xuXG4vKipcbiAqIEhvdyBhIGJpbmRpbmcgZW50ZXJzIGEgbW9kdWxlXG4gKi9cbmV4cG9ydCB0eXBlIE1vZHVsZUltcG9ydEtpbmQgPVxuXHR8ICduYW1lZCdcblx0fCAnZGVmYXVsdCdcblx0fCAnbmFtZXNwYWNlJ1xuXHR8ICdyZXF1aXJlJztcblxuLyoqXG4gKiBBIGdlbmVyaWMgbW9kdWxlLWxldmVsIGJpbmRpbmcgKGV4cG9ydCwgaW1wb3J0LCBvciByZS1leHBvcnQpLlxuICpcbiAqIGBuYW1lYCBpcyBhbHdheXMgdGhlIG5hbWUgdGhpcyBtb2R1bGUgcHJlc2VudHM6IHRoZSBsb2NhbCBpZGVudGlmaWVyIGZvclxuICogaW1wb3J0cywgdGhlIGV4cG9ydGVkIG5hbWUgZm9yIGV4cG9ydHMuIGBpbXBvcnRBbGlhc2AgY2FycmllcyB0aGUgb3JpZ2luYWxcbiAqIG5hbWUgaW4gdGhlIHNvdXJjZSBtb2R1bGUgd2hlbiBpdCBkaWZmZXJzIChgaW1wb3J0IHsgWCBhcyBZIH1gIOKGkiBuYW1lICdZJyxcbiAqIGltcG9ydEFsaWFzICdYJzsgYGV4cG9ydCB7IFggYXMgWSB9IGZyb20g4oCmYCDihpIgbmFtZSAnWScsIGltcG9ydEFsaWFzICdYJykuXG4gKiBGb3IgZGVmYXVsdCBpbXBvcnRzIG5hbWUgaXMgdGhlIGxvY2FsIGlkZW50aWZpZXIgYW5kIHRoZSBzb3VyY2UgbG9va3VwIGtleVxuICogaXMgJ2RlZmF1bHQnIChpbXBsaWVkIGJ5IGltcG9ydEtpbmQpOyBmb3IgbmFtZXNwYWNlIGltcG9ydHMvZXhwb3J0cyBuYW1lIGlzXG4gKiB0aGUgbmFtZXNwYWNlIGFsaWFzICgnKicgZm9yIGJhcmUgYGV4cG9ydCAqIGZyb20g4oCmYCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlQmluZGluZyB7XG5cdC8qKiBOYW1lIGFzIHByZXNlbnRlZCBpbiB0aGlzIG1vZHVsZSAobG9jYWwgbmFtZSBmb3IgaW1wb3J0cywgZXhwb3J0ZWQgbmFtZSBmb3IgZXhwb3J0cykgKi9cblx0bmFtZTogc3RyaW5nO1xuXHQvKiogV2hhdCB0aGUgYmluZGluZyBpczsgYmFja2ZpbGxlZCBmcm9tIHRoZSBvcmlnaW4gbW9kdWxlIHdoZW4gcmVzb2x2YWJsZSAqL1xuXHRraW5kOiBNb2R1bGVCaW5kaW5nS2luZDtcblx0LyoqXG5cdCAqIFJlc29sdmVkIGFic29sdXRlIGZpbGUgcGF0aCBvZiB0aGUgc291cmNlIG1vZHVsZSAodGhlIG1vZHVsZSBpdHNlbGYgZm9yXG5cdCAqIGxvY2FsIGRlY2xhcmF0aW9uczsgdGhlIHJhdyBzcGVjaWZpZXIgd2hlbiByZXNvbHV0aW9uIGZhaWxzKVxuXHQgKi9cblx0c291cmNlTW9kdWxlOiBzdHJpbmc7XG5cdC8qKiBIb3cgdGhlIGJpbmRpbmcgZW50ZXJzIHRoZSBtb2R1bGUgKGFic2VudCBvbiBwbGFpbiBsb2NhbCBleHBvcnRzKSAqL1xuXHRpbXBvcnRLaW5kPzogTW9kdWxlSW1wb3J0S2luZDtcblx0LyoqIE9yaWdpbmFsIG5hbWUgaW4gdGhlIHNvdXJjZSBtb2R1bGUgd2hlbiBhbGlhc2VkICovXG5cdGltcG9ydEFsaWFzPzogc3RyaW5nO1xuXHQvKiogVHJ1ZSBmb3IgYGV4cG9ydCB7IFggfSBmcm9tICcuL3knYCAvIGBleHBvcnQgKiBmcm9tICcuL3knYCAoYmFycmVscykgKi9cblx0aXNSZUV4cG9ydDogYm9vbGVhbjtcblx0LyoqXG5cdCAqIFRydWUgd2hlbiB0aGUgc3BlY2lmaWVyIHJlc29sdmVkIGludG8gbm9kZV9tb2R1bGVzXG5cdCAqICh0cy5yZXNvbHZlTW9kdWxlTmFtZSdzIGlzRXh0ZXJuYWxMaWJyYXJ5SW1wb3J0KS4gRXh0ZXJuYWwgYmluZGluZ3MgYXJlXG5cdCAqIHJlY29yZGVkIGZvciByZWZlcmVuY2UgYnV0IG5ldmVyIGVudGVyIGBkZXBlbmRlbmNpZXNgIGFuZCBhcmUgbmV2ZXIgd2Fsa2VkLlxuXHQgKiBOb2RlLmpzIGJ1aWx0aW5zIGFyZSBub3QgcmVjb3JkZWQgYXMgYmluZGluZ3MgYXQgYWxsIOKAlCBzZWVcblx0ICogTW9kdWxlSW5mby5idWlsdGluU3BlY2lmaWVycy5cblx0ICovXG5cdGV4dGVybmFsPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQZXItbW9kdWxlIHJlY29yZCBvZiB0aGUgY3Jvc3MtZmlsZSBncmFwaCAobW9kdWxlcy5qc29uKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZUluZm8ge1xuXHQvKiogQWJzb2x1dGUgZmlsZSBwYXRoIChtYXAga2V5KSAqL1xuXHRmaWxlUGF0aDogc3RyaW5nO1xuXHQvKiogTW5lbW9uaWNhIHR5cGUgZnVsbFBhdGhzIGRlZmluZWQgaW4gdGhpcyBtb2R1bGUgKi9cblx0ZGVmaW5lZFR5cGVzOiBzdHJpbmdbXTtcblx0LyoqIEV2ZXJ5dGhpbmcgdGhpcyBtb2R1bGUgZXhwb3J0cyAobG9jYWwgZGVjbGFyYXRpb25zIGFuZCByZS1leHBvcnRzKSAqL1xuXHRleHBvcnRlZEJpbmRpbmdzOiBNb2R1bGVCaW5kaW5nW107XG5cdC8qKiBFdmVyeXRoaW5nIHRoaXMgbW9kdWxlIGltcG9ydHMgKHJlLWV4cG9ydHMgYXBwZWFyIGhlcmUgdG9vLCBtYXJrZWQgaXNSZUV4cG9ydCkgKi9cblx0aW1wb3J0ZWRCaW5kaW5nczogTW9kdWxlQmluZGluZ1tdO1xuXHQvKiogQWJzb2x1dGUgcGF0aHMgb2YgYW5hbHl6ZWQgcHJvamVjdCBtb2R1bGVzIHRoaXMgbW9kdWxlIGltcG9ydHMgZnJvbSAqL1xuXHRkZXBlbmRlbmNpZXM6IHN0cmluZ1tdO1xuXHQvKiogSW1wb3J0IHNwZWNpZmllcnMgdGhhdCBtb2R1bGUgcmVzb2x1dGlvbiBjb3VsZCBub3QgcmVzb2x2ZSAobm9kZSBidWlsdGlucyBleGNsdWRlZCDigJQgc2VlIGJ1aWx0aW5TcGVjaWZpZXJzKSAqL1xuXHR1bnJlc29sdmVkU3BlY2lmaWVyczogc3RyaW5nW107XG5cdC8qKlxuXHQgKiBOb2RlLmpzIGJ1aWx0aW4gc3BlY2lmaWVycyB0aGlzIG1vZHVsZSBpbXBvcnRzICgncGF0aCcsICdub2RlOmZzJywg4oCmKSxcblx0ICogbWF0Y2hlZCBhZ2FpbnN0IG5vZGU6bW9kdWxlJ3MgYnVpbHRpbk1vZHVsZXMgaW4gYm90aCBiYXJlIGFuZFxuXHQgKiBgbm9kZTpgLXByZWZpeGVkIGZvcm1zLiBSZWNvcmRlZCBmb3IgaG9uZXN0eSBvbmx5OiBidWlsdGlucyBwcm9kdWNlIG5vXG5cdCAqIGJpbmRpbmdzLCBuZXZlciBlbnRlciBgZGVwZW5kZW5jaWVzYC9gdW5yZXNvbHZlZFNwZWNpZmllcnNgLCBhbmQgbmV2ZXJcblx0ICogcHJvZHVjZSBlZGdlcy5cblx0ICovXG5cdGJ1aWx0aW5TcGVjaWZpZXJzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIGNyb3NzLW1vZHVsZSB1c2FnZSBvZiBhIG1uZW1vbmljYSB0eXBlOiB1c2FnZU1vZHVsZSBpbXBvcnRzIGEgYmluZGluZ1xuICogd2hvc2Ugb3JpZ2luIG1vZHVsZSBkZWZpbmVzIHRoZSB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyb3NzTW9kdWxlVXNhZ2Uge1xuXHQvKiogTWF0Y2hlZCBtbmVtb25pY2EgdHlwZSBmdWxsUGF0aCAob3IgdGhlIGltcG9ydGVkIG5hbWUgd2hlbiB1bm1hdGNoZWQpICovXG5cdHR5cGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBBYnNvbHV0ZSBwYXRoIG9mIHRoZSBtb2R1bGUgd2hlcmUgdGhlIHR5cGUgaXMgZGVmaW5lZCAocmUtZXhwb3J0IGNoYWlucyBjaGFzZWQgdG8gdGhlIG9yaWdpbikgKi9cblx0ZGVmaW5pdGlvbk1vZHVsZTogc3RyaW5nO1xuXHQvKiogQWJzb2x1dGUgcGF0aCBvZiB0aGUgaW1wb3J0aW5nIG1vZHVsZSAqL1xuXHR1c2FnZU1vZHVsZTogc3RyaW5nO1xuXHQvKiogSW1wb3J0IHNpdGU6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0dXNhZ2VMb2NhdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBmdWxsIG1vZHVsZSBncmFwaFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZUdyYXBoIHtcblx0LyoqIEtleWVkIGJ5IGFic29sdXRlIGZpbGUgcGF0aCAqL1xuXHRtb2R1bGVzOiBNYXA8c3RyaW5nLCBNb2R1bGVJbmZvPjtcblx0ZWRnZXM6IENyb3NzTW9kdWxlVXNhZ2VbXTtcblx0LyoqXG5cdCAqIENpcmN1bGFyIGltcG9ydCBjaGFpbnMgKGVhY2ggYW4gYXJyYXkgb2YgYWJzb2x1dGUgcGF0aHMpLiBSZWNvcmRlZCwgbm90XG5cdCAqIGFuIGVycm9yIOKAlCBtbmVtb25pY2Egc3RyaWN0Q2hhaW46ZmFsc2UgcGVybWl0cyBub24tbGluZWFyIGNvbnN0cnVjdGlvblxuXHQgKi9cblx0Y3ljbGVzOiBzdHJpbmdbXVtdO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBtb2R1bGVzLmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVzSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0bW9kdWxlczogUmVjb3JkPHN0cmluZywgTW9kdWxlSW5mbz47XG5cdGVkZ2VzOiBDcm9zc01vZHVsZVVzYWdlW107XG5cdGN5Y2xlczogc3RyaW5nW11bXTtcbn1cblxuLyoqXG4gKiBXaGF0IGEgdHJhY2tlZCBzY29wZSBpcy4gRGVjaXNpb24gNSAocmVzb2x2ZWQgMjAyNi0wOS0wMyk6IGZ1bmN0aW9uLFxuICogbWV0aG9kLCBhbmQgYXJyb3cgc2NvcGVzIE9OTFkg4oCUIG5vIGJsb2NrIHNjb3Blcy4gJ21vZHVsZScgaXMgdGhlIHN5bnRoZXRpY1xuICogcGVyLWZpbGUgcm9vdCBzY29wZSBzbyBtb2R1bGUtbGV2ZWwgaW5zdGFuY2UgY3JlYXRpb25zIGFyZSBsYWJlbGVkLCBub3RcbiAqIGRyb3BwZWQgKHdhbGtlciBwbGFuOiBcInJlY29yZGVkIGFzIGEgcm9vdGVkIGluc3RhbmNlXCIpLlxuICovXG5leHBvcnQgdHlwZSBTY29wZUtpbmQgPVxuXHR8ICdtb2R1bGUnXG5cdHwgJ2Z1bmN0aW9uJ1xuXHR8ICdtZXRob2QnXG5cdHwgJ2Fycm93JztcblxuLyoqXG4gKiBPbmUgdHJhY2tlZCBzY29wZSAoc2NvcGVzLmpzb24pXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVJbmZvIHtcblx0LyoqIFVuaXF1ZSBpZDogbW9kdWxlIHNjb3BlIGlzIHRoZSBmaWxlIHBhdGg7IGZ1bmN0aW9uIHNjb3BlcyBhcmUgZmlsZTpsaW5lOmNvbCBvZiB0aGUgc2NvcGUgbm9kZSAqL1xuXHRzY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBEZWNpc2lvbiA4IGxhYmVsaW5nOiBmdW5jdGlvbi9tZXRob2QgbmFtZSAoJ0NsYXNzLm1ldGhvZCcgZm9yIG1ldGhvZHMpLCBmaWxlOmxpbmUgZm9yIGFub255bW91cyBob2xkZXJzICovXG5cdG5hbWU6IHN0cmluZztcblx0a2luZDogU2NvcGVLaW5kO1xuXHQvKiogTmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUgKHVuZGVmaW5lZCBvbiBtb2R1bGUgc2NvcGVzKSAqL1xuXHRwYXJlbnRTY29wZUlkPzogc3RyaW5nO1xuXHQvKiogQWJzb2x1dGUgZmlsZSBwYXRoICovXG5cdGZpbGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBTY29wZSBzdGFydDogZmlsZS50czpMaW5lOkNvbCAobW9kdWxlIHNjb3BlOiBmaWxlOjE6MSkgKi9cblx0bG9jYXRpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBPbmUgdHJhY2tlZCB2YXJpYWJsZSAoc2NvcGVzLmpzb24pXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVWYXJpYWJsZSB7XG5cdG5hbWU6IHN0cmluZztcblx0LyoqIE93bmluZyBzY29wZSAqL1xuXHRzY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgdHlwZSBmdWxsUGF0aCB3aGVuIGtub3duIChuZXcgWCgpIG9uIGEga25vd24gdHlwZSwgbmV3IGluc3QuU3ViKCkgY2hhaW5pbmcsIG9yIGEga25vd24gYW5ub3RhdGlvbikgKi9cblx0dHlwZVBhdGg/OiBzdHJpbmc7XG5cdC8qKiBDaGVhcCB0ZXh0dWFsIHR5cGU6IGFubm90YXRpb24gdGV4dCBvciB0aW55IGluaXRpYWxpemVyIGNsYXNzaWZpY2F0aW9uICovXG5cdGluZmVycmVkVHlwZT86IHN0cmluZztcblx0LyoqIERlY2xhcmF0aW9uIHNpdGU6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0ZGVjbGFyYXRpb246IHN0cmluZztcblx0aXNQYXJhbWV0ZXI6IGJvb2xlYW47XG5cdC8qKiBjb25zdCA9IGZhbHNlOyBsZXQvdmFyIGFuZCBwYXJhbWV0ZXJzID0gdHJ1ZSAocGFyYW1ldGVycyBhcmUgcmVhc3NpZ25hYmxlKSAqL1xuXHRpc011dGFibGU6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBSZWFzc2lnbm1lbnQgc2l0ZXMgKGZpbGUudHM6TGluZTpDb2wpIG9mIHRoaXMgYmluZGluZyDigJQgZmxvdy10ZXJtaW5hdGlvblxuXHQgKiBwb2ludHMgKGRlY2lzaW9uIDYpOiB0aGUgUGhhc2UgMyB3YWxrZXIgc3RvcHMgZm9sbG93aW5nIHRoZSBiaW5kaW5nIHRoZXJlXG5cdCAqL1xuXHRyZWFzc2lnbm1lbnRzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgZnVsbCBsb2NhbC1zY29wZSBhbmFseXNpc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjb3BlQW5hbHlzaXMge1xuXHQvKiogS2V5ZWQgYnkgc2NvcGVJZCAqL1xuXHRzY29wZXM6IE1hcDxzdHJpbmcsIFNjb3BlSW5mbz47XG5cdC8qKiBLZXllZCBieSBgJHtzY29wZUlkfSMke25hbWV9YCAqL1xuXHR2YXJpYWJsZXM6IE1hcDxzdHJpbmcsIFNjb3BlVmFyaWFibGU+O1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBzY29wZXMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjb3Blc0pzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdHNjb3BlczogUmVjb3JkPHN0cmluZywgU2NvcGVJbmZvPjtcblx0dmFyaWFibGVzOiBTY29wZVZhcmlhYmxlW107XG59XG5cbi8qKlxuICogT25lIG5vZGUgb2YgdGhlIGNyZWF0aW9uIGdyYXBoIChpbnN0cnVtZW50YXRpb24gd2Fsa2VyIHBsYW4sIFBoYXNlIDMpOlxuICogYSBzY29wZSB0aGF0IGNyZWF0ZXMgbW5lbW9uaWNhIGluc3RhbmNlcywgb3Igb25lIHNpdHRpbmcgb24gYSBjYWxsIHBhdGhcbiAqIHRvIGEgY3JlYXRvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGlvbkdyYXBoTm9kZSB7XG5cdC8qKiBMb2NhbFNjb3BlV2Fsa2VyIHNjb3BlSWQgKG1vZHVsZSBzY29wZSA9IGZpbGUgcGF0aDsgZnVuY3Rpb24gc2NvcGVzID0gZmlsZTpsaW5lOmNvbCkgKi9cblx0c2NvcGVJZDogc3RyaW5nO1xuXHQvKiogRGVjaXNpb24gOCBsYWJlbDogZnVuY3Rpb24vbWV0aG9kIG5hbWUgKCdDbGFzcy5tZXRob2QnKSwgZmlsZTpsaW5lIGZvciBhbm9ueW1vdXMgaG9sZGVycyAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdGtpbmQ6IFNjb3BlS2luZDtcblx0LyoqIEFic29sdXRlIGZpbGUgcGF0aCAqL1xuXHRmaWxlUGF0aDogc3RyaW5nO1xuXHQvKiogU2NvcGUgc3RhcnQ6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIFRydWUgd2hlbiB0aGUgd2FsayBmb3VuZCBubyBjYWxsZXJzIOKAlCBhbiBhcHBsaWNhdGlvbiBlbnRyeSBwb2ludCAqL1xuXHRzdGFydGVyOiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9uZSBlZGdlIG9mIHRoZSBjcmVhdGlvbiBncmFwaDogdGhlIGNhbGxlciBzY29wZSBpbnZva2VzIG9yIHJlZmVyZW5jZXMgdGhlXG4gKiBjYWxsZWUgc2NvcGUuIERpcmVjdGlvbiBpcyBpbnNpZGUtb3V0OiBjYWxsZXIg4oaSIGNhbGxlZSwgd2hlcmUgdGhlIGNhbGxlZSBpc1xuICogY2xvc2VyIHRvIHRoZSBjcmVhdGlvbiBzaXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0aW9uR3JhcGhFZGdlIHtcblx0LyoqIENhbGxpbmcgc2NvcGUncyBzY29wZUlkICovXG5cdGNhbGxlcjogc3RyaW5nO1xuXHQvKiogQ2FsbGVkIChob2xkZXIpIHNjb3BlJ3Mgc2NvcGVJZCAqL1xuXHRjYWxsZWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBbiBpbnN0YW50aWF0aW9uIGFuY2hvcjogb25lIG1uZW1vbmljYSBjcmVhdGlvbiBzaXRlIHBpbm5lZCB0byBpdHMgaG9sZGVyXG4gKiBzY29wZS5cbiAqXG4gKiBgdmFyaWFibGVgL2B0ZXJtaW5hdGVkQXRgIGFyZSBhIGRvY3VtZW50ZWQgaGV1cmlzdGljOiB0aGUgdmFyaWFibGUgZGVjbGFyZWRcbiAqIGluIHRoZSBob2xkZXIgc2NvcGUgb24gdGhlIFNBTUUgbGluZSBhcyB0aGUgY3JlYXRpb24sIHdob3NlIHR5cGVQYXRoICh3aGVuXG4gKiBrbm93bikgbWF0Y2hlcyB0aGUgY3JlYXRlZCB0eXBlLiBgdGVybWluYXRlZEF0YCBpcyB0aGF0IHZhcmlhYmxlJ3MgZmlyc3RcbiAqIHJlYXNzaWdubWVudCBzaXRlIOKAlCB0aGUgZGVjaXNpb24gNiBmbG93LXRlcm1pbmF0aW9uIHBvaW50IHdoZXJlIHRoZSB3YWxrZXJcbiAqIHN0b3BzIGZvbGxvd2luZyB0aGUgYmluZGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGlvbkFuY2hvciB7XG5cdC8qKiBDcmVhdGlvbiBzaXRlOiBmaWxlLnRzOkxpbmU6Q29sICh0aGUgdXNhZ2VzLmpzb24gbG9jYXRpb24pICovXG5cdGxvY2F0aW9uOiBzdHJpbmc7XG5cdC8qKiBTY29wZSBob2xkaW5nIHRoZSBjcmVhdGlvbiAoc2NvcGVzLmpzb24gc2NvcGVJZCkgKi9cblx0aG9sZGVyU2NvcGVJZDogc3RyaW5nO1xuXHQvKiogTW5lbW9uaWNhIHR5cGUgZnVsbFBhdGggYmVpbmcgY3JlYXRlZCAqL1xuXHR0eXBlUGF0aDogc3RyaW5nO1xuXHQvKiogQ29uc3RydWN0b3IgZXhwcmVzc2lvbiB0ZXh0ICgnVGhpbmcnLCAndXNlci5BZG1pbkVudGl0eScsIGEgbG9va3VwIGFsaWFzIG5hbWUpICovXG5cdGNvbnN0cnVjdG9yVGV4dD86IHN0cmluZztcblx0LyoqXG5cdCAqIFRydWUgd2hlbiB0aGUgaG9sZGVyIGlzIHRoZSBtb2R1bGUgc2NvcGUg4oCUIGEgcm9vdGVkIGluc3RhbmNlIChwbGFuOlxuXHQgKiBsZWdpdGltYXRlIHJvb3Qgb3IgZGV2ZWxvcGVyIGVycm9yOyBsYWJlbGVkLCBub3QgcG9saWNlZClcblx0ICovXG5cdHJvb3RlZD86IGJvb2xlYW47XG5cdC8qKiBWYXJpYWJsZSB0aGUgZnJlc2ggaW5zdGFuY2Ugd2FzIGJvdW5kIHRvIChzYW1lLWxpbmUgaGV1cmlzdGljKSAqL1xuXHR2YXJpYWJsZT86IHN0cmluZztcblx0LyoqIEZpcnN0IHJlYXNzaWdubWVudCBzaXRlIG9mIHRoYXQgdmFyaWFibGU6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0dGVybWluYXRlZEF0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBjcmVhdGlvbiBncmFwaDogZXZlcnl0aGluZyB0aGF0IGxlYWRzIHRvIG1uZW1vbmljYSBpbnN0YW5jZXMgYmVpbmdcbiAqIGNyZWF0ZWQuIEVtaXR0ZWQgYXMgdGhlIGBjcmVhdGlvbkdyYXBoYCBrZXkgb2YgaW5zdHJ1bWVudGF0aW9uLmpzb24gdjIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRpb25HcmFwaCB7XG5cdG5vZGVzOiBDcmVhdGlvbkdyYXBoTm9kZVtdO1xuXHRlZGdlczogQ3JlYXRpb25HcmFwaEVkZ2VbXTtcblx0YW5jaG9yczogQ3JlYXRpb25BbmNob3JbXTtcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgaGllcmFyY2h5Lmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIaWVyYXJjaHlKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRyb290czogSGllcmFyY2h5Tm9kZVtdO1xufVxuXG4vKipcbiAqIE9uZSBlbnRyeSBvZiB0aGUgY29sbGVjdGlvbnMuanNvbiBtYW5pZmVzdC4gVGhlIGRlZmF1bHQgY29sbGVjdGlvbiBpc1xuICogZW1pdHRlZCBmaXJzdCB3aGVuZXZlciBkZWZhdWx0LWNvbGxlY3Rpb24gdHlwZXMgZXhpc3Q6IGl0IGhhcyBubyBjYWxsXG4gKiBzaXRlLCBzbyBgaWRgIGFuZCBgbG9jYXRpb25gIHN0YXkgbnVsbCAodW5wcmVmaXhlZCBmdWxsUGF0aHMgQVJFIGl0c1xuICogaWRlbnRpdHkpIGFuZCBpdHMgcmVnaXN0cnkgaW50ZXJmYWNlIGlzIHRoZSBnbG9iYWwgYFR5cGVSZWdpc3RyeWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbk1hbmlmZXN0RW50cnkge1xuXHQvKiogTWludGVkIGlkIHVzZWQgaW4gYGNvbGxlY3Rpb25JZDo6YCBmdWxsUGF0aCBwcmVmaXhlczsgbnVsbCBmb3IgdGhlIGRlZmF1bHQgY29sbGVjdGlvbiAqL1xuXHRpZDogc3RyaW5nIHwgbnVsbDtcblx0LyoqIFZhcmlhYmxlIGhvbGRpbmcgdGhlIGNyZWF0ZVR5cGVzQ29sbGVjdGlvbigpIHJlc3VsdCAoJ2RlZmF1bHRUeXBlcycgZm9yIHRoZSBkZWZhdWx0IGNvbGxlY3Rpb24pICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIE9wdGlvbi1CIHJlZ2lzdHJ5IGludGVyZmFjZSBuYW1lOyBhYnNlbnQgd2hlbiB0aGUgY29sbGVjdGlvbiBkZWNsYXJlcyBub25lICovXG5cdHJlZ2lzdHJ5SW50ZXJmYWNlPzogc3RyaW5nO1xuXHQvKiogY3JlYXRlVHlwZXNDb2xsZWN0aW9uKCkgY2FsbCBzaXRlIChmaWxlOmxpbmU6Y29sKTsgbnVsbCBmb3IgdGhlIGRlZmF1bHQgY29sbGVjdGlvbiAqL1xuXHRsb2NhdGlvbjogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgY29sbGVjdGlvbnMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25zSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25NYW5pZmVzdEVudHJ5W107XG59XG5cbi8qKlxuICogU3RydWN0dXJlZCBoaWVyYXJjaHkgbm9kZSBmb3IgbWFjaGluZSBjb25zdW1wdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIaWVyYXJjaHlOb2RlIHtcblx0LyoqIFR5cGUgbmFtZSAoZS5nLiwgXCJBZG1pblR5cGVcIikgKi9cblx0bmFtZTogc3RyaW5nO1xuXHQvKiogRnVsbCBkb3R0ZWQgcGF0aCAoZS5nLiwgXCJVc2VyVHlwZS5BZG1pblR5cGVcIikgKi9cblx0ZnVsbFBhdGg6IHN0cmluZztcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogQ2hpbGQgdHlwZXMgaW4gdGhlIFRyaWUgKi9cblx0Y2hpbGRyZW46IEhpZXJhcmNoeU5vZGVbXTtcbn1cblxuLyoqXG4gKiBBIGZhdGFsIHJlc29sdXRpb24gZmFpbHVyZTogc2FtZS1uYW1lc3BhY2UgZHVwbGljYXRlIG1uZW1vbmljYVxuICogZGVmaW5pdGlvbnMsIG9yIGEgbW5lbW9uaWNhLWdyYXBoIHR5cGUgcmVmZXJlbmNlIHRoYXQgc3RheXMgYW1iaWd1b3VzXG4gKiBhZnRlciBwYXRoLWF3YXJlIHJlc29sdXRpb24gKG9yIHJlc29sdmVzIHRvIG5vdGhpbmcpLiBUaGUgQ0xJIHByaW50c1xuICogZXZlcnkgbG9jYXRpb24gYW5kIHdyaXRlcyBubyAudGFjdGljYSBvdXRwdXQgYXQgYWxsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdXRpb25FcnJvciB7XG5cdC8qKiBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmFpbHVyZSAqL1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdC8qKiBldmVyeSBpbnZvbHZlZCBzb3VyY2UgbG9jYXRpb24sIGBmaWxlOmxpbmU6Y29sdW1uYCAqL1xuXHRsb2NhdGlvbnM6IHN0cmluZ1tdO1xufVxuIl19
|
package/lib/writer.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GeneratedTypes, DefinitionInfo, UsageInfo, EDSInfo, FlowInfo, HierarchyNode, InstrumentationPoint, ModuleGraph, ScopeAnalysis, CreationGraph } from './types';
|
|
1
|
+
import { GeneratedTypes, DefinitionInfo, UsageInfo, EDSInfo, FlowInfo, HierarchyNode, InstrumentationPoint, ModuleGraph, ScopeAnalysis, CreationGraph, CollectionManifestEntry } from './types';
|
|
2
2
|
/**
|
|
3
3
|
* Writes generated types to file system
|
|
4
4
|
*/
|
|
@@ -76,4 +76,12 @@ export declare class TypesWriter {
|
|
|
76
76
|
* Write hierarchy.json file
|
|
77
77
|
*/
|
|
78
78
|
writeHierarchyFile(roots: HierarchyNode[]): string;
|
|
79
|
+
/**
|
|
80
|
+
* Write the collection manifest: one entry per collection (default
|
|
81
|
+
* first when default-collection types exist), ids + display names +
|
|
82
|
+
* Option-B registry interfaces + call sites. The id↔interface mapping
|
|
83
|
+
* is the join key between the `collectionId::`-prefixed graph outputs
|
|
84
|
+
* and the registry-prefixed aliases in types.ts / registry.ts.
|
|
85
|
+
*/
|
|
86
|
+
writeCollectionsFile(collections: CollectionManifestEntry[]): string;
|
|
79
87
|
}
|