footprintjs 0.17.0 → 0.17.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/dist/esm/lib/engine/narrative/CombinedNarrativeBuilder.js +1 -1
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +45 -22
- package/dist/lib/engine/narrative/CombinedNarrativeBuilder.js +1 -1
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +45 -22
- package/dist/types/lib/engine/narrative/CombinedNarrativeBuilder.d.ts +2 -0
- package/package.json +1 -1
|
@@ -184,4 +184,4 @@ export class CombinedNarrativeBuilder {
|
|
|
184
184
|
return { type: 'stage' };
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWROYXJyYXRpdmVCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL0NvbWJpbmVkTmFycmF0aXZlQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUF3QkgsOEVBQThFO0FBQzlFLFVBQVU7QUFDViw4RUFBOEU7QUFFOUUsTUFBTSxPQUFPLHdCQUF3QjtJQUduQyxZQUFZLE9BQWtDOztRQUM1QyxJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2Isa0JBQWtCLEVBQUUsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsa0JBQWtCLG1DQUFJLElBQUk7WUFDdkQsYUFBYSxFQUFFLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGFBQWEsbUNBQUksSUFBSTtZQUM3QyxNQUFNLEVBQUUsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxtQ0FBSSxJQUFJO1NBQ2hDLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILFlBQVksQ0FDVixhQUF1QixFQUN2QixRQUEyQixFQUMzQixrQkFBMkM7O1FBRTNDLE1BQU0sT0FBTyxHQUE2QixFQUFFLENBQUM7UUFDN0MsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDckMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRXJCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FB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O1FBQ3ZFLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztZQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDdkUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbWJpbmVkTmFycmF0aXZlQnVpbGRlciDigJQgTWVyZ2VzIGZsb3ctbGV2ZWwgbmFycmF0aXZlIHdpdGggZGF0YS1sZXZlbCBvcGVyYXRpb25zLlxuICpcbiAqIENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yIGNhcHR1cmVzIEZMT1cg4oCUIHdoYXQgc3RhZ2VzIHJhbiwgd2hpY2ggYnJhbmNoZXMgd2VyZSB0YWtlbi5cbiAqIE5hcnJhdGl2ZVJlY29yZGVyIChzY29wZS8pIGNhcHR1cmVzIERBVEEg4oCUIHdoYXQgdmFsdWVzIHdlcmUgcmVhZCwgd3JpdHRlbiwgdXBkYXRlZC5cbiAqXG4gKiBUaGlzIGJ1aWxkZXIgd2VhdmVzIGJvdGggaW50byBhIHNpbmdsZSB1bmlmaWVkIG5hcnJhdGl2ZTpcbiAqICAgU3RhZ2UgMTogXCJSZWNlaXZlIEFwcGxpY2F0aW9uXCJcbiAqICAgICBTdGVwIDE6IFdyaXRlIGFwcGxpY2FudE5hbWUgPSAnQm9iJ1xuICogICBbQ29uZGl0aW9uXTogcmlzayB0aWVyIGlzIGhpZ2gg4oaSIGNob3NlIFwiUmVqZWN0IEFwcGxpY2F0aW9uXCJcbiAqXG4gKiBAZGVwcmVjYXRlZCBTaW5jZSAwLjkueCDigJQgU3VwZXJzZWRlZCBieSB7QGxpbmsgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlcn0gd2hpY2ggYnVpbGRzIHRoZVxuICogY29tYmluZWQgbmFycmF0aXZlIGlubGluZSBkdXJpbmcgdHJhdmVyc2FsIChubyBwb3N0LXByb2Nlc3NpbmcpLiBUaGlzIGNsYXNzIGlzIHJldGFpbmVkIGZvclxuICogYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGNvbnN1bWVycyB0aGF0IHVzZSBDb21iaW5lZE5hcnJhdGl2ZUJ1aWxkZXIgZGlyZWN0bHkuXG4gKiBXaWxsIGJlIHJlbW92ZWQgaW4gdjEuMC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE5hcnJhdGl2ZVJlY29yZGVyLCBTdGFnZU5hcnJhdGl2ZURhdGEgfSBmcm9tICcuLi8uLi9zY29wZS9yZWNvcmRlcnMvTmFycmF0aXZlUmVjb3JkZXIuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFR5cGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5IHtcbiAgdHlwZTogJ3N0YWdlJyB8ICdzdGVwJyB8ICdjb25kaXRpb24nIHwgJ2ZvcmsnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnIHwgJ2JyZWFrJyB8ICdlcnJvcic7XG4gIHRleHQ6IHN0cmluZztcbiAgZGVwdGg6IG51bWJlcjtcbiAgc3RhZ2VOYW1lPzogc3RyaW5nO1xuICBzdGVwTnVtYmVyPzogbnVtYmVyO1xuICAvKiogU3ViZmxvdyBJRCB3aGVuIHRoaXMgZW50cnkgd2FzIGdlbmVyYXRlZCBpbnNpZGUgYSBzdWJmbG93LiBVbmRlZmluZWQgZm9yIHJvb3QtbGV2ZWwuICovXG4gIHN1YmZsb3dJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21iaW5lZE5hcnJhdGl2ZU9wdGlvbnMge1xuICBpbmNsdWRlU3RlcE51bWJlcnM/OiBib29sZWFuO1xuICBpbmNsdWRlVmFsdWVzPzogYm9vbGVhbjtcbiAgaW5kZW50Pzogc3RyaW5nO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEJ1aWxkZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY2xhc3MgQ29tYmluZWROYXJyYXRpdmVCdWlsZGVyIHtcbiAgcHJpdmF0ZSBvcHRpb25zOiBSZXF1aXJlZDxDb21iaW5lZE5hcnJhdGl2ZU9wdGlvbnM+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDb21iaW5lZE5hcnJhdGl2ZU9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICBpbmNsdWRlU3RlcE51bWJlcnM6IG9wdGlvbnM/LmluY2x1ZGVTdGVwTnVtYmVycyA/PyB0cnVlLFxuICAgICAgaW5jbHVkZVZhbHVlczogb3B0aW9ucz8uaW5jbHVkZVZhbHVlcyA/PyB0cnVlLFxuICAgICAgaW5kZW50OiBvcHRpb25zPy5pbmRlbnQgPz8gJyAgJyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBmbG93U2VudGVuY2VzICBTZW50ZW5jZXMgZnJvbSB0aGUgZmxvdyByZWNvcmRlciAoTmFycmF0aXZlRmxvd1JlY29yZGVyLmdldFNlbnRlbmNlcygpKS5cbiAgICogQHBhcmFtIHJlY29yZGVyICAgICAgIERhdGEtbGV2ZWwgcmVjb3JkZXIgd2l0aCBwZXItc3RhZ2UgcmVhZC93cml0ZSBvcGVyYXRpb25zLlxuICAgKiBAcGFyYW0gc2VudGVuY2VTdGFnZU5hbWVzICBPcHRpb25hbCBwYXJhbGxlbCBhcnJheSBvZiBhY3R1YWwgc3RhZ2UgbmFtZXMgZm9yIGVhY2ggc2VudGVuY2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyb20gTmFycmF0aXZlRmxvd1JlY29yZGVyLmdldFNlbnRlbmNlU3RhZ2VOYW1lcygpKS4gV2hlbiBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlcyBkaXJlY3QgbG9va3VwIGluc3RlYWQgb2YgZnJhZ2lsZSByZWdleC1iYXNlZCBtYXRjaGluZy5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyfSBpbnN0ZWFkLCB3aGljaCBidWlsZHMgZW50cmllcyBpbmxpbmUgZHVyaW5nIHRyYXZlcnNhbC5cbiAgICovXG4gIGJ1aWxkRW50cmllcyhcbiAgICBmbG93U2VudGVuY2VzOiBzdHJpbmdbXSxcbiAgICByZWNvcmRlcjogTmFycmF0aXZlUmVjb3JkZXIsXG4gICAgc2VudGVuY2VTdGFnZU5hbWVzPzogKHN0cmluZyB8IHVuZGVmaW5lZClbXSxcbiAgKTogQ29tYmluZWROYXJyYXRpdmVFbnRyeVtdIHtcbiAgICBjb25zdCBlbnRyaWVzOiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBzdGFnZURhdGEgPSByZWNvcmRlci5nZXRTdGFnZURhdGEoKTtcbiAgICBjb25zdCB1c2VkU3RhZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgbGV0IHN0YWdlQ291bnRlciA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZsb3dTZW50ZW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNlbnRlbmNlID0gZmxvd1NlbnRlbmNlc1tpXTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VTZW50ZW5jZShzZW50ZW5jZSk7XG4gICAgICAvLyBQcmVmZXIgdGhlIGFjdHVhbCBzdGFnZSBuYW1lIGZyb20gdGhlIHJlY29yZGVyIG92ZXIgcmVnZXgtcGFyc2VkIGRlc2NyaXB0aW9uIHRleHRcbiAgICAgIGNvbnN0IHJlc29sdmVkU3RhZ2VOYW1lID0gc2VudGVuY2VTdGFnZU5hbWVzPy5baV0gPz8gcGFyc2VkLnN0YWdlTmFtZTtcblxuICAgICAgaWYgKHBhcnNlZC50eXBlID09PSAnc3RhZ2UnKSB7XG4gICAgICAgIHN0YWdlQ291bnRlcisrO1xuICAgICAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdzdGFnZScsXG4gICAgICAgICAgdGV4dDogYFN0YWdlICR7c3RhZ2VDb3VudGVyfTogJHtzZW50ZW5jZX1gLFxuICAgICAgICAgIGRlcHRoOiAwLFxuICAgICAgICAgIHN0YWdlTmFtZTogcmVzb2x2ZWRTdGFnZU5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVzb2x2ZWRTdGFnZU5hbWUpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5maW5kU3RhZ2VEYXRhKHJlc29sdmVkU3RhZ2VOYW1lLCBzdGFnZURhdGEpO1xuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB1c2VkU3RhZ2VzLmFkZChkYXRhLnN0YWdlTmFtZSk7XG4gICAgICAgICAgICB0aGlzLmFkZFN0ZXBFbnRyaWVzKGVudHJpZXMsIGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwYXJzZWQudHlwZSA9PT0gJ2NvbmRpdGlvbicpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHsgdHlwZTogJ2NvbmRpdGlvbicsIHRleHQ6IGBbQ29uZGl0aW9uXTogJHtzZW50ZW5jZX1gLCBkZXB0aDogMCwgc3RhZ2VOYW1lOiByZXNvbHZlZFN0YWdlTmFtZSB9KTtcbiAgICAgICAgLy8gRm9yIGNvbmRpdGlvbnMsIGFsc28gbG9vayB1cCB0aGUgY2hvc2VuIGJyYW5jaCdzIGRhdGFcbiAgICAgICAgaWYgKHBhcnNlZC5zdGFnZU5hbWUpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5maW5kU3RhZ2VEYXRhKHBhcnNlZC5zdGFnZU5hbWUsIHN0YWdlRGF0YSk7XG4gICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHVzZWRTdGFnZXMuYWRkKGRhdGEuc3RhZ2VOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuYWRkU3RlcEVudHJpZXMoZW50cmllcywgZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEFsc28gbWFyayB0aGUgZGVjaWRlciBzdGFnZSBpdHNlbGYgYXMgdXNlZCAodGhlIHJlc29sdmVkU3RhZ2VOYW1lKVxuICAgICAgICBpZiAocmVzb2x2ZWRTdGFnZU5hbWUpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5maW5kU3RhZ2VEYXRhKHJlc29sdmVkU3RhZ2VOYW1lLCBzdGFnZURhdGEpO1xuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB1c2VkU3RhZ2VzLmFkZChkYXRhLnN0YWdlTmFtZSk7XG4gICAgICAgICAgICAvLyBPbmx5IGFkZCBzdGVwIGVudHJpZXMgaWYgdGhlIGNob3NlbiBicmFuY2ggZGlkbid0IGFscmVhZHkgY292ZXIgaXRcbiAgICAgICAgICAgIGlmICghcGFyc2VkLnN0YWdlTmFtZSB8fCBwYXJzZWQuc3RhZ2VOYW1lICE9PSByZXNvbHZlZFN0YWdlTmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLmFkZFN0ZXBFbnRyaWVzKGVudHJpZXMsIGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwYXJzZWQudHlwZSA9PT0gJ2ZvcmsnKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7IHR5cGU6ICdmb3JrJywgdGV4dDogYFtQYXJhbGxlbF06ICR7c2VudGVuY2V9YCwgZGVwdGg6IDAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlZC50eXBlID09PSAnc3ViZmxvdycpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHsgdHlwZTogJ3N1YmZsb3cnLCB0ZXh0OiBzZW50ZW5jZSwgZGVwdGg6IDAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlZC50eXBlID09PSAnbG9vcCcpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHsgdHlwZTogJ2xvb3AnLCB0ZXh0OiBzZW50ZW5jZSwgZGVwdGg6IDAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlZC50eXBlID09PSAnYnJlYWsnKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7IHR5cGU6ICdicmVhaycsIHRleHQ6IHNlbnRlbmNlLCBkZXB0aDogMCB9KTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VkLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHsgdHlwZTogJ2Vycm9yJywgdGV4dDogYFtFcnJvcl06ICR7c2VudGVuY2V9YCwgZGVwdGg6IDAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIHN0YWdlcyB3aXRoIG9wZXJhdGlvbnMgdGhhdCB3ZXJlbid0IHJlZmVyZW5jZWQgaW4gZmxvdyBzZW50ZW5jZXNcbiAgICBmb3IgKGNvbnN0IFtzdGFnZU5hbWUsIGRhdGFdIG9mIEFycmF5LmZyb20oc3RhZ2VEYXRhLmVudHJpZXMoKSkpIHtcbiAgICAgIGlmICghdXNlZFN0YWdlcy5oYXMoc3RhZ2VOYW1lKSAmJiBkYXRhLm9wZXJhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBzdGFnZUNvdW50ZXIrKztcbiAgICAgICAgZW50cmllcy5wdXNoKHsgdHlwZTogJ3N0YWdlJywgdGV4dDogYFN0YWdlICR7c3RhZ2VDb3VudGVyfTogJHtzdGFnZU5hbWV9YCwgZGVwdGg6IDAsIHN0YWdlTmFtZSB9KTtcbiAgICAgICAgdGhpcy5hZGRTdGVwRW50cmllcyhlbnRyaWVzLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW50cmllcztcbiAgfVxuXG4gIGJ1aWxkKGZsb3dTZW50ZW5jZXM6IHN0cmluZ1tdLCByZWNvcmRlcjogTmFycmF0aXZlUmVjb3JkZXIsIHNlbnRlbmNlU3RhZ2VOYW1lcz86IChzdHJpbmcgfCB1bmRlZmluZWQpW10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRFbnRyaWVzKGZsb3dTZW50ZW5jZXMsIHJlY29yZGVyLCBzZW50ZW5jZVN0YWdlTmFtZXMpLm1hcCgoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IGluZGVudCA9IHRoaXMub3B0aW9ucy5pbmRlbnQucmVwZWF0KGVudHJ5LmRlcHRoKTtcbiAgICAgIHJldHVybiBgJHtpbmRlbnR9JHtlbnRyeS50ZXh0fWA7XG4gICAgfSk7XG4gIH1cblxuICAvLyDilIDilIAgUHJpdmF0ZSBoZWxwZXJzIOKUgOKUgFxuXG4gIHByaXZhdGUgYWRkU3RlcEVudHJpZXMoZW50cmllczogQ29tYmluZWROYXJyYXRpdmVFbnRyeVtdLCBkYXRhOiBTdGFnZU5hcnJhdGl2ZURhdGEpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IG9wIG9mIGRhdGEub3BlcmF0aW9ucykge1xuICAgICAgY29uc3Qgc3RlcFByZWZpeCA9IHRoaXMub3B0aW9ucy5pbmNsdWRlU3RlcE51bWJlcnMgJiYgb3Auc3RlcE51bWJlciA/IGBTdGVwICR7b3Auc3RlcE51bWJlcn06IGAgOiAnJztcblxuICAgICAgbGV0IHRleHQ6IHN0cmluZztcbiAgICAgIGlmIChvcC50eXBlID09PSAncmVhZCcpIHtcbiAgICAgICAgdGV4dCA9XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmluY2x1ZGVWYWx1ZXMgJiYgb3AudmFsdWVTdW1tYXJ5XG4gICAgICAgICAgICA/IGAke3N0ZXBQcmVmaXh9UmVhZCAke29wLmtleX0gPSAke29wLnZhbHVlU3VtbWFyeX1gXG4gICAgICAgICAgICA6IGAke3N0ZXBQcmVmaXh9UmVhZCAke29wLmtleX1gO1xuICAgICAgfSBlbHNlIGlmIChvcC5vcGVyYXRpb24gPT09ICdkZWxldGUnKSB7XG4gICAgICAgIHRleHQgPSBgJHtzdGVwUHJlZml4fURlbGV0ZSAke29wLmtleX1gO1xuICAgICAgfSBlbHNlIGlmIChvcC5vcGVyYXRpb24gPT09ICd1cGRhdGUnKSB7XG4gICAgICAgIHRleHQgPSB0aGlzLm9wdGlvbnMuaW5jbHVkZVZhbHVlc1xuICAgICAgICAgID8gYCR7c3RlcFByZWZpeH1VcGRhdGUgJHtvcC5rZXl9ID0gJHtvcC52YWx1ZVN1bW1hcnl9YFxuICAgICAgICAgIDogYCR7c3RlcFByZWZpeH1VcGRhdGUgJHtvcC5rZXl9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHQgPSB0aGlzLm9wdGlvbnMuaW5jbHVkZVZhbHVlc1xuICAgICAgICAgID8gYCR7c3RlcFByZWZpeH1Xcml0ZSAke29wLmtleX0gPSAke29wLnZhbHVlU3VtbWFyeX1gXG4gICAgICAgICAgOiBgJHtzdGVwUHJlZml4fVdyaXRlICR7b3Aua2V5fWA7XG4gICAgICB9XG5cbiAgICAgIGVudHJpZXMucHVzaCh7IHR5cGU6ICdzdGVwJywgdGV4dCwgZGVwdGg6IDEsIHN0YWdlTmFtZTogZGF0YS5zdGFnZU5hbWUsIHN0ZXBOdW1iZXI6IG9wLnN0ZXBOdW1iZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaW5kU3RhZ2VEYXRhKG5hbWU6IHN0cmluZywgc3RhZ2VEYXRhOiBNYXA8c3RyaW5nLCBTdGFnZU5hcnJhdGl2ZURhdGE+KTogU3RhZ2VOYXJyYXRpdmVEYXRhIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoc3RhZ2VEYXRhLmhhcyhuYW1lKSkgcmV0dXJuIHN0YWdlRGF0YS5nZXQobmFtZSk7XG4gICAgZm9yIChjb25zdCBbc3RhZ2VOYW1lLCBkYXRhXSBvZiBBcnJheS5mcm9tKHN0YWdlRGF0YS5lbnRyaWVzKCkpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHN0YWdlTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgICAgbmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHN0YWdlTmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVNlbnRlbmNlKHNlbnRlbmNlOiBzdHJpbmcpOiB7IHR5cGU6IHN0cmluZzsgc3RhZ2VOYW1lPzogc3RyaW5nIH0ge1xuICAgIGlmIChzZW50ZW5jZS5zdGFydHNXaXRoKCdUaGUgcHJvY2VzcyBiZWdhbicpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHNlbnRlbmNlLm1hdGNoKC9UaGUgcHJvY2VzcyBiZWdhbig/OjogKC4rKXwgd2l0aCAoLispKVxcLi8pO1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ3N0YWdlJywgc3RhZ2VOYW1lOiAobWF0Y2g/LlsxXSA/PyBtYXRjaD8uWzJdKT8udHJpbSgpIH07XG4gICAgfVxuICAgIGlmIChzZW50ZW5jZS5zdGFydHNXaXRoKCdOZXh0JykpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gc2VudGVuY2UubWF0Y2goL05leHQoPzosPyBpdCBtb3ZlZCBvbiB0byAoLispfCBzdGVwOiAoLispKVxcLi8pO1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ3N0YWdlJywgc3RhZ2VOYW1lOiAobWF0Y2g/LlsxXSA/PyBtYXRjaD8uWzJdKT8udHJpbSgpIH07XG4gICAgfVxuICAgIGlmIChzZW50ZW5jZS5pbmNsdWRlcygnZGVjaXNpb24gd2FzIG1hZGUnKSB8fCBzZW50ZW5jZS5pbmNsdWRlcygnaXQgY2hvc2UnKSB8fCBzZW50ZW5jZS5pbmNsdWRlcygnc28gaXQgY2hvc2UnKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBzZW50ZW5jZS5tYXRjaCgvY2hvc2UgKC4rKVxcLi8pO1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ2NvbmRpdGlvbicsIHN0YWdlTmFtZTogbWF0Y2g/LlsxXT8udHJpbSgpIH07XG4gICAgfVxuICAgIGlmIChzZW50ZW5jZS5zdGFydHNXaXRoKCdJdCAnKSAmJiBzZW50ZW5jZS5pbmNsdWRlcygnY2hvc2UnKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBzZW50ZW5jZS5tYXRjaCgvY2hvc2UgKC4rKVxcLi8pO1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ2NvbmRpdGlvbicsIHN0YWdlTmFtZTogbWF0Y2g/LlsxXT8udHJpbSgpIH07XG4gICAgfVxuICAgIGlmIChzZW50ZW5jZS5pbmNsdWRlcygncGF0aHMgd2VyZSBleGVjdXRlZCBpbiBwYXJhbGxlbCcpIHx8IHNlbnRlbmNlLmluY2x1ZGVzKCdwYXRocyB3ZXJlIHNlbGVjdGVkJykpXG4gICAgICByZXR1cm4geyB0eXBlOiAnZm9yaycgfTtcbiAgICBpZiAoc2VudGVuY2Uuc3RhcnRzV2l0aCgnRW50ZXJpbmcnKSB8fCBzZW50ZW5jZS5zdGFydHNXaXRoKCdFeGl0aW5nJykpIHJldHVybiB7IHR5cGU6ICdzdWJmbG93JyB9O1xuICAgIGlmIChzZW50ZW5jZS5zdGFydHNXaXRoKCdPbiBwYXNzJykpIHJldHVybiB7IHR5cGU6ICdsb29wJyB9O1xuICAgIGlmIChzZW50ZW5jZS5zdGFydHNXaXRoKCdFeGVjdXRpb24gc3RvcHBlZCcpKSByZXR1cm4geyB0eXBlOiAnYnJlYWsnIH07XG4gICAgaWYgKHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ0FuIGVycm9yIG9jY3VycmVkJykpIHJldHVybiB7IHR5cGU6ICdlcnJvcicgfTtcbiAgICByZXR1cm4geyB0eXBlOiAnc3RhZ2UnIH07XG4gIH1cbn1cbiJdfQ==
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWROYXJyYXRpdmVCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL0NvbWJpbmVkTmFycmF0aXZlQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUEwQkgsOEVBQThFO0FBQzlFLFVBQVU7QUFDViw4RUFBOEU7QUFFOUUsTUFBTSxPQUFPLHdCQUF3QjtJQUduQyxZQUFZLE9BQWtDOztRQUM1QyxJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2Isa0JBQWtCLEVBQUUsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsa0JBQWtCLG1DQUFJLElBQUk7WUFDdkQsYUFBYSxFQUFFLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGFBQWEsbUNBQUksSUFBSTtZQUM3QyxNQUFNLEVBQUUsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxtQ0FBSSxJQUFJO1NBQ2hDLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILFlBQVksQ0FDVixhQUF1QixFQUN2QixRQUEyQixFQUMzQixrQkFBMkM7O1FBRTNDLE1BQU0sT0FBTyxHQUE2QixFQUFFLENBQUM7UUFDN0MsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDckMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRXJCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FB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O1FBQ3ZFLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztZQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDdkUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbWJpbmVkTmFycmF0aXZlQnVpbGRlciDigJQgTWVyZ2VzIGZsb3ctbGV2ZWwgbmFycmF0aXZlIHdpdGggZGF0YS1sZXZlbCBvcGVyYXRpb25zLlxuICpcbiAqIENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yIGNhcHR1cmVzIEZMT1cg4oCUIHdoYXQgc3RhZ2VzIHJhbiwgd2hpY2ggYnJhbmNoZXMgd2VyZSB0YWtlbi5cbiAqIE5hcnJhdGl2ZVJlY29yZGVyIChzY29wZS8pIGNhcHR1cmVzIERBVEEg4oCUIHdoYXQgdmFsdWVzIHdlcmUgcmVhZCwgd3JpdHRlbiwgdXBkYXRlZC5cbiAqXG4gKiBUaGlzIGJ1aWxkZXIgd2VhdmVzIGJvdGggaW50byBhIHNpbmdsZSB1bmlmaWVkIG5hcnJhdGl2ZTpcbiAqICAgU3RhZ2UgMTogXCJSZWNlaXZlIEFwcGxpY2F0aW9uXCJcbiAqICAgICBTdGVwIDE6IFdyaXRlIGFwcGxpY2FudE5hbWUgPSAnQm9iJ1xuICogICBbQ29uZGl0aW9uXTogcmlzayB0aWVyIGlzIGhpZ2gg4oaSIGNob3NlIFwiUmVqZWN0IEFwcGxpY2F0aW9uXCJcbiAqXG4gKiBAZGVwcmVjYXRlZCBTaW5jZSAwLjkueCDigJQgU3VwZXJzZWRlZCBieSB7QGxpbmsgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlcn0gd2hpY2ggYnVpbGRzIHRoZVxuICogY29tYmluZWQgbmFycmF0aXZlIGlubGluZSBkdXJpbmcgdHJhdmVyc2FsIChubyBwb3N0LXByb2Nlc3NpbmcpLiBUaGlzIGNsYXNzIGlzIHJldGFpbmVkIGZvclxuICogYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGNvbnN1bWVycyB0aGF0IHVzZSBDb21iaW5lZE5hcnJhdGl2ZUJ1aWxkZXIgZGlyZWN0bHkuXG4gKiBXaWxsIGJlIHJlbW92ZWQgaW4gdjEuMC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE5hcnJhdGl2ZVJlY29yZGVyLCBTdGFnZU5hcnJhdGl2ZURhdGEgfSBmcm9tICcuLi8uLi9zY29wZS9yZWNvcmRlcnMvTmFycmF0aXZlUmVjb3JkZXIuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFR5cGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5IHtcbiAgdHlwZTogJ3N0YWdlJyB8ICdzdGVwJyB8ICdjb25kaXRpb24nIHwgJ2ZvcmsnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnIHwgJ2JyZWFrJyB8ICdlcnJvcic7XG4gIHRleHQ6IHN0cmluZztcbiAgZGVwdGg6IG51bWJlcjtcbiAgc3RhZ2VOYW1lPzogc3RyaW5nO1xuICAvKiogU3RhYmxlIHN0YWdlIGlkZW50aWZpZXIgZnJvbSB0aGUgYnVpbGRlciAobWF0Y2hlcyBzcGVjIG5vZGUgaWQpLiBVc2UgZm9yIFVJIHN5bmMuICovXG4gIHN0YWdlSWQ/OiBzdHJpbmc7XG4gIHN0ZXBOdW1iZXI/OiBudW1iZXI7XG4gIC8qKiBTdWJmbG93IElEIHdoZW4gdGhpcyBlbnRyeSB3YXMgZ2VuZXJhdGVkIGluc2lkZSBhIHN1YmZsb3cuIFVuZGVmaW5lZCBmb3Igcm9vdC1sZXZlbC4gKi9cbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVkTmFycmF0aXZlT3B0aW9ucyB7XG4gIGluY2x1ZGVTdGVwTnVtYmVycz86IGJvb2xlYW47XG4gIGluY2x1ZGVWYWx1ZXM/OiBib29sZWFuO1xuICBpbmRlbnQ/OiBzdHJpbmc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQnVpbGRlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjbGFzcyBDb21iaW5lZE5hcnJhdGl2ZUJ1aWxkZXIge1xuICBwcml2YXRlIG9wdGlvbnM6IFJlcXVpcmVkPENvbWJpbmVkTmFycmF0aXZlT3B0aW9ucz47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENvbWJpbmVkTmFycmF0aXZlT3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgIGluY2x1ZGVTdGVwTnVtYmVyczogb3B0aW9ucz8uaW5jbHVkZVN0ZXBOdW1iZXJzID8/IHRydWUsXG4gICAgICBpbmNsdWRlVmFsdWVzOiBvcHRpb25zPy5pbmNsdWRlVmFsdWVzID8/IHRydWUsXG4gICAgICBpbmRlbnQ6IG9wdGlvbnM/LmluZGVudCA/PyAnICAnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGZsb3dTZW50ZW5jZXMgIFNlbnRlbmNlcyBmcm9tIHRoZSBmbG93IHJlY29yZGVyIChOYXJyYXRpdmVGbG93UmVjb3JkZXIuZ2V0U2VudGVuY2VzKCkpLlxuICAgKiBAcGFyYW0gcmVjb3JkZXIgICAgICAgRGF0YS1sZXZlbCByZWNvcmRlciB3aXRoIHBlci1zdGFnZSByZWFkL3dyaXRlIG9wZXJhdGlvbnMuXG4gICAqIEBwYXJhbSBzZW50ZW5jZVN0YWdlTmFtZXMgIE9wdGlvbmFsIHBhcmFsbGVsIGFycmF5IG9mIGFjdHVhbCBzdGFnZSBuYW1lcyBmb3IgZWFjaCBzZW50ZW5jZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnJvbSBOYXJyYXRpdmVGbG93UmVjb3JkZXIuZ2V0U2VudGVuY2VTdGFnZU5hbWVzKCkpLiBXaGVuIHByb3ZpZGVkLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVzIGRpcmVjdCBsb29rdXAgaW5zdGVhZCBvZiBmcmFnaWxlIHJlZ2V4LWJhc2VkIG1hdGNoaW5nLlxuICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXJ9IGluc3RlYWQsIHdoaWNoIGJ1aWxkcyBlbnRyaWVzIGlubGluZSBkdXJpbmcgdHJhdmVyc2FsLlxuICAgKi9cbiAgYnVpbGRFbnRyaWVzKFxuICAgIGZsb3dTZW50ZW5jZXM6IHN0cmluZ1tdLFxuICAgIHJlY29yZGVyOiBOYXJyYXRpdmVSZWNvcmRlcixcbiAgICBzZW50ZW5jZVN0YWdlTmFtZXM/OiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdLFxuICApOiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10ge1xuICAgIGNvbnN0IGVudHJpZXM6IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IHN0YWdlRGF0YSA9IHJlY29yZGVyLmdldFN0YWdlRGF0YSgpO1xuICAgIGNvbnN0IHVzZWRTdGFnZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBsZXQgc3RhZ2VDb3VudGVyID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmxvd1NlbnRlbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2VudGVuY2UgPSBmbG93U2VudGVuY2VzW2ldO1xuICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZVNlbnRlbmNlKHNlbnRlbmNlKTtcbiAgICAgIC8vIFByZWZlciB0aGUgYWN0dWFsIHN0YWdlIG5hbWUgZnJvbSB0aGUgcmVjb3JkZXIgb3ZlciByZWdleC1wYXJzZWQgZGVzY3JpcHRpb24gdGV4dFxuICAgICAgY29uc3QgcmVzb2x2ZWRTdGFnZU5hbWUgPSBzZW50ZW5jZVN0YWdlTmFtZXM/LltpXSA/PyBwYXJzZWQuc3RhZ2VOYW1lO1xuXG4gICAgICBpZiAocGFyc2VkLnR5cGUgPT09ICdzdGFnZScpIHtcbiAgICAgICAgc3RhZ2VDb3VudGVyKys7XG4gICAgICAgIGVudHJpZXMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ3N0YWdlJyxcbiAgICAgICAgICB0ZXh0OiBgU3RhZ2UgJHtzdGFnZUNvdW50ZXJ9OiAke3NlbnRlbmNlfWAsXG4gICAgICAgICAgZGVwdGg6IDAsXG4gICAgICAgICAgc3RhZ2VOYW1lOiByZXNvbHZlZFN0YWdlTmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXNvbHZlZFN0YWdlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZpbmRTdGFnZURhdGEocmVzb2x2ZWRTdGFnZU5hbWUsIHN0YWdlRGF0YSk7XG4gICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHVzZWRTdGFnZXMuYWRkKGRhdGEuc3RhZ2VOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuYWRkU3RlcEVudHJpZXMoZW50cmllcywgZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlZC50eXBlID09PSAnY29uZGl0aW9uJykge1xuICAgICAgICBlbnRyaWVzLnB1c2goeyB0eXBlOiAnY29uZGl0aW9uJywgdGV4dDogYFtDb25kaXRpb25dOiAke3NlbnRlbmNlfWAsIGRlcHRoOiAwLCBzdGFnZU5hbWU6IHJlc29sdmVkU3RhZ2VOYW1lIH0pO1xuICAgICAgICAvLyBGb3IgY29uZGl0aW9ucywgYWxzbyBsb29rIHVwIHRoZSBjaG9zZW4gYnJhbmNoJ3MgZGF0YVxuICAgICAgICBpZiAocGFyc2VkLnN0YWdlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZpbmRTdGFnZURhdGEocGFyc2VkLnN0YWdlTmFtZSwgc3RhZ2VEYXRhKTtcbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdXNlZFN0YWdlcy5hZGQoZGF0YS5zdGFnZU5hbWUpO1xuICAgICAgICAgICAgdGhpcy5hZGRTdGVwRW50cmllcyhlbnRyaWVzLCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWxzbyBtYXJrIHRoZSBkZWNpZGVyIHN0YWdlIGl0c2VsZiBhcyB1c2VkICh0aGUgcmVzb2x2ZWRTdGFnZU5hbWUpXG4gICAgICAgIGlmIChyZXNvbHZlZFN0YWdlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZpbmRTdGFnZURhdGEocmVzb2x2ZWRTdGFnZU5hbWUsIHN0YWdlRGF0YSk7XG4gICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHVzZWRTdGFnZXMuYWRkKGRhdGEuc3RhZ2VOYW1lKTtcbiAgICAgICAgICAgIC8vIE9ubHkgYWRkIHN0ZXAgZW50cmllcyBpZiB0aGUgY2hvc2VuIGJyYW5jaCBkaWRuJ3QgYWxyZWFkeSBjb3ZlciBpdFxuICAgICAgICAgICAgaWYgKCFwYXJzZWQuc3RhZ2VOYW1lIHx8IHBhcnNlZC5zdGFnZU5hbWUgIT09IHJlc29sdmVkU3RhZ2VOYW1lKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWRkU3RlcEVudHJpZXMoZW50cmllcywgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlZC50eXBlID09PSAnZm9yaycpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHsgdHlwZTogJ2ZvcmsnLCB0ZXh0OiBgW1BhcmFsbGVsXTogJHtzZW50ZW5jZX1gLCBkZXB0aDogMCB9KTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VkLnR5cGUgPT09ICdzdWJmbG93Jykge1xuICAgICAgICBlbnRyaWVzLnB1c2goeyB0eXBlOiAnc3ViZmxvdycsIHRleHQ6IHNlbnRlbmNlLCBkZXB0aDogMCB9KTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VkLnR5cGUgPT09ICdsb29wJykge1xuICAgICAgICBlbnRyaWVzLnB1c2goeyB0eXBlOiAnbG9vcCcsIHRleHQ6IHNlbnRlbmNlLCBkZXB0aDogMCB9KTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VkLnR5cGUgPT09ICdicmVhaycpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHsgdHlwZTogJ2JyZWFrJywgdGV4dDogc2VudGVuY2UsIGRlcHRoOiAwIH0pO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZWQudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICBlbnRyaWVzLnB1c2goeyB0eXBlOiAnZXJyb3InLCB0ZXh0OiBgW0Vycm9yXTogJHtzZW50ZW5jZX1gLCBkZXB0aDogMCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgc3RhZ2VzIHdpdGggb3BlcmF0aW9ucyB0aGF0IHdlcmVuJ3QgcmVmZXJlbmNlZCBpbiBmbG93IHNlbnRlbmNlc1xuICAgIGZvciAoY29uc3QgW3N0YWdlTmFtZSwgZGF0YV0gb2YgQXJyYXkuZnJvbShzdGFnZURhdGEuZW50cmllcygpKSkge1xuICAgICAgaWYgKCF1c2VkU3RhZ2VzLmhhcyhzdGFnZU5hbWUpICYmIGRhdGEub3BlcmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN0YWdlQ291bnRlcisrO1xuICAgICAgICBlbnRyaWVzLnB1c2goeyB0eXBlOiAnc3RhZ2UnLCB0ZXh0OiBgU3RhZ2UgJHtzdGFnZUNvdW50ZXJ9OiAke3N0YWdlTmFtZX1gLCBkZXB0aDogMCwgc3RhZ2VOYW1lIH0pO1xuICAgICAgICB0aGlzLmFkZFN0ZXBFbnRyaWVzKGVudHJpZXMsIGRhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbnRyaWVzO1xuICB9XG5cbiAgYnVpbGQoZmxvd1NlbnRlbmNlczogc3RyaW5nW10sIHJlY29yZGVyOiBOYXJyYXRpdmVSZWNvcmRlciwgc2VudGVuY2VTdGFnZU5hbWVzPzogKHN0cmluZyB8IHVuZGVmaW5lZClbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZEVudHJpZXMoZmxvd1NlbnRlbmNlcywgcmVjb3JkZXIsIHNlbnRlbmNlU3RhZ2VOYW1lcykubWFwKChlbnRyeSkgPT4ge1xuICAgICAgY29uc3QgaW5kZW50ID0gdGhpcy5vcHRpb25zLmluZGVudC5yZXBlYXQoZW50cnkuZGVwdGgpO1xuICAgICAgcmV0dXJuIGAke2luZGVudH0ke2VudHJ5LnRleHR9YDtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQcml2YXRlIGhlbHBlcnMg4pSA4pSAXG5cbiAgcHJpdmF0ZSBhZGRTdGVwRW50cmllcyhlbnRyaWVzOiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10sIGRhdGE6IFN0YWdlTmFycmF0aXZlRGF0YSk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgb3Agb2YgZGF0YS5vcGVyYXRpb25zKSB7XG4gICAgICBjb25zdCBzdGVwUHJlZml4ID0gdGhpcy5vcHRpb25zLmluY2x1ZGVTdGVwTnVtYmVycyAmJiBvcC5zdGVwTnVtYmVyID8gYFN0ZXAgJHtvcC5zdGVwTnVtYmVyfTogYCA6ICcnO1xuXG4gICAgICBsZXQgdGV4dDogc3RyaW5nO1xuICAgICAgaWYgKG9wLnR5cGUgPT09ICdyZWFkJykge1xuICAgICAgICB0ZXh0ID1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMuaW5jbHVkZVZhbHVlcyAmJiBvcC52YWx1ZVN1bW1hcnlcbiAgICAgICAgICAgID8gYCR7c3RlcFByZWZpeH1SZWFkICR7b3Aua2V5fSA9ICR7b3AudmFsdWVTdW1tYXJ5fWBcbiAgICAgICAgICAgIDogYCR7c3RlcFByZWZpeH1SZWFkICR7b3Aua2V5fWA7XG4gICAgICB9IGVsc2UgaWYgKG9wLm9wZXJhdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgdGV4dCA9IGAke3N0ZXBQcmVmaXh9RGVsZXRlICR7b3Aua2V5fWA7XG4gICAgICB9IGVsc2UgaWYgKG9wLm9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgdGV4dCA9IHRoaXMub3B0aW9ucy5pbmNsdWRlVmFsdWVzXG4gICAgICAgICAgPyBgJHtzdGVwUHJlZml4fVVwZGF0ZSAke29wLmtleX0gPSAke29wLnZhbHVlU3VtbWFyeX1gXG4gICAgICAgICAgOiBgJHtzdGVwUHJlZml4fVVwZGF0ZSAke29wLmtleX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCA9IHRoaXMub3B0aW9ucy5pbmNsdWRlVmFsdWVzXG4gICAgICAgICAgPyBgJHtzdGVwUHJlZml4fVdyaXRlICR7b3Aua2V5fSA9ICR7b3AudmFsdWVTdW1tYXJ5fWBcbiAgICAgICAgICA6IGAke3N0ZXBQcmVmaXh9V3JpdGUgJHtvcC5rZXl9YDtcbiAgICAgIH1cblxuICAgICAgZW50cmllcy5wdXNoKHsgdHlwZTogJ3N0ZXAnLCB0ZXh0LCBkZXB0aDogMSwgc3RhZ2VOYW1lOiBkYXRhLnN0YWdlTmFtZSwgc3RlcE51bWJlcjogb3Auc3RlcE51bWJlciB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmRTdGFnZURhdGEobmFtZTogc3RyaW5nLCBzdGFnZURhdGE6IE1hcDxzdHJpbmcsIFN0YWdlTmFycmF0aXZlRGF0YT4pOiBTdGFnZU5hcnJhdGl2ZURhdGEgfCB1bmRlZmluZWQge1xuICAgIGlmIChzdGFnZURhdGEuaGFzKG5hbWUpKSByZXR1cm4gc3RhZ2VEYXRhLmdldChuYW1lKTtcbiAgICBmb3IgKGNvbnN0IFtzdGFnZU5hbWUsIGRhdGFdIG9mIEFycmF5LmZyb20oc3RhZ2VEYXRhLmVudHJpZXMoKSkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgc3RhZ2VOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgICBuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc3RhZ2VOYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlU2VudGVuY2Uoc2VudGVuY2U6IHN0cmluZyk6IHsgdHlwZTogc3RyaW5nOyBzdGFnZU5hbWU/OiBzdHJpbmcgfSB7XG4gICAgaWYgKHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ1RoZSBwcm9jZXNzIGJlZ2FuJykpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gc2VudGVuY2UubWF0Y2goL1RoZSBwcm9jZXNzIGJlZ2FuKD86OiAoLispfCB3aXRoICguKykpXFwuLyk7XG4gICAgICByZXR1cm4geyB0eXBlOiAnc3RhZ2UnLCBzdGFnZU5hbWU6IChtYXRjaD8uWzFdID8/IG1hdGNoPy5bMl0pPy50cmltKCkgfTtcbiAgICB9XG4gICAgaWYgKHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ05leHQnKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBzZW50ZW5jZS5tYXRjaCgvTmV4dCg/Oiw/IGl0IG1vdmVkIG9uIHRvICguKyl8IHN0ZXA6ICguKykpXFwuLyk7XG4gICAgICByZXR1cm4geyB0eXBlOiAnc3RhZ2UnLCBzdGFnZU5hbWU6IChtYXRjaD8uWzFdID8/IG1hdGNoPy5bMl0pPy50cmltKCkgfTtcbiAgICB9XG4gICAgaWYgKHNlbnRlbmNlLmluY2x1ZGVzKCdkZWNpc2lvbiB3YXMgbWFkZScpIHx8IHNlbnRlbmNlLmluY2x1ZGVzKCdpdCBjaG9zZScpIHx8IHNlbnRlbmNlLmluY2x1ZGVzKCdzbyBpdCBjaG9zZScpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHNlbnRlbmNlLm1hdGNoKC9jaG9zZSAoLispXFwuLyk7XG4gICAgICByZXR1cm4geyB0eXBlOiAnY29uZGl0aW9uJywgc3RhZ2VOYW1lOiBtYXRjaD8uWzFdPy50cmltKCkgfTtcbiAgICB9XG4gICAgaWYgKHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ0l0ICcpICYmIHNlbnRlbmNlLmluY2x1ZGVzKCdjaG9zZScpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHNlbnRlbmNlLm1hdGNoKC9jaG9zZSAoLispXFwuLyk7XG4gICAgICByZXR1cm4geyB0eXBlOiAnY29uZGl0aW9uJywgc3RhZ2VOYW1lOiBtYXRjaD8uWzFdPy50cmltKCkgfTtcbiAgICB9XG4gICAgaWYgKHNlbnRlbmNlLmluY2x1ZGVzKCdwYXRocyB3ZXJlIGV4ZWN1dGVkIGluIHBhcmFsbGVsJykgfHwgc2VudGVuY2UuaW5jbHVkZXMoJ3BhdGhzIHdlcmUgc2VsZWN0ZWQnKSlcbiAgICAgIHJldHVybiB7IHR5cGU6ICdmb3JrJyB9O1xuICAgIGlmIChzZW50ZW5jZS5zdGFydHNXaXRoKCdFbnRlcmluZycpIHx8IHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ0V4aXRpbmcnKSkgcmV0dXJuIHsgdHlwZTogJ3N1YmZsb3cnIH07XG4gICAgaWYgKHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ09uIHBhc3MnKSkgcmV0dXJuIHsgdHlwZTogJ2xvb3AnIH07XG4gICAgaWYgKHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ0V4ZWN1dGlvbiBzdG9wcGVkJykpIHJldHVybiB7IHR5cGU6ICdicmVhaycgfTtcbiAgICBpZiAoc2VudGVuY2Uuc3RhcnRzV2l0aCgnQW4gZXJyb3Igb2NjdXJyZWQnKSkgcmV0dXJuIHsgdHlwZTogJ2Vycm9yJyB9O1xuICAgIHJldHVybiB7IHR5cGU6ICdzdGFnZScgfTtcbiAgfVxufVxuIl19
|
|
@@ -47,7 +47,7 @@ export class CombinedNarrativeRecorder {
|
|
|
47
47
|
}
|
|
48
48
|
// ── Flow channel (fires after stage execution) ────────────────────────
|
|
49
49
|
onStageExecuted(event) {
|
|
50
|
-
var _a, _b, _c;
|
|
50
|
+
var _a, _b, _c, _d;
|
|
51
51
|
const sfKey = (_b = (_a = event.traversalContext) === null || _a === void 0 ? void 0 : _a.subflowId) !== null && _b !== void 0 ? _b : '';
|
|
52
52
|
const stageNum = this.incrementStageCounter(sfKey);
|
|
53
53
|
const isFirst = this.consumeFirstStageFlag(sfKey);
|
|
@@ -59,17 +59,19 @@ export class CombinedNarrativeRecorder {
|
|
|
59
59
|
? `Next step: ${event.description}.`
|
|
60
60
|
: `Next, it moved on to ${event.stageName}.`;
|
|
61
61
|
const sfId = (_c = event.traversalContext) === null || _c === void 0 ? void 0 : _c.subflowId;
|
|
62
|
+
const stageId = (_d = event.traversalContext) === null || _d === void 0 ? void 0 : _d.stageId;
|
|
62
63
|
this.entries.push({
|
|
63
64
|
type: 'stage',
|
|
64
65
|
text: `Stage ${stageNum}: ${text}`,
|
|
65
66
|
depth: 0,
|
|
66
67
|
stageName: event.stageName,
|
|
68
|
+
stageId,
|
|
67
69
|
subflowId: sfId,
|
|
68
70
|
});
|
|
69
|
-
this.flushOps(event.stageName, sfId);
|
|
71
|
+
this.flushOps(event.stageName, sfId, stageId);
|
|
70
72
|
}
|
|
71
73
|
onDecision(event) {
|
|
72
|
-
var _a, _b, _c, _d, _e;
|
|
74
|
+
var _a, _b, _c, _d, _e, _f;
|
|
73
75
|
// Emit the decider stage entry (deciders don't fire onStageExecuted)
|
|
74
76
|
const sfKey = (_b = (_a = event.traversalContext) === null || _a === void 0 ? void 0 : _a.subflowId) !== null && _b !== void 0 ? _b : '';
|
|
75
77
|
const stageNum = this.incrementStageCounter(sfKey);
|
|
@@ -81,14 +83,16 @@ export class CombinedNarrativeRecorder {
|
|
|
81
83
|
: event.description
|
|
82
84
|
? `Next step: ${event.description}.`
|
|
83
85
|
: `Next, it moved on to ${event.decider}.`;
|
|
86
|
+
const deciderStageId = (_c = event.traversalContext) === null || _c === void 0 ? void 0 : _c.stageId;
|
|
84
87
|
this.entries.push({
|
|
85
88
|
type: 'stage',
|
|
86
89
|
text: `Stage ${stageNum}: ${stageText}`,
|
|
87
90
|
depth: 0,
|
|
88
91
|
stageName: event.decider,
|
|
89
|
-
|
|
92
|
+
stageId: deciderStageId,
|
|
93
|
+
subflowId: (_d = event.traversalContext) === null || _d === void 0 ? void 0 : _d.subflowId,
|
|
90
94
|
});
|
|
91
|
-
this.flushOps(event.decider, (
|
|
95
|
+
this.flushOps(event.decider, (_e = event.traversalContext) === null || _e === void 0 ? void 0 : _e.subflowId, deciderStageId);
|
|
92
96
|
// Emit the condition entry
|
|
93
97
|
const branchName = event.chosen;
|
|
94
98
|
let conditionText;
|
|
@@ -109,7 +113,8 @@ export class CombinedNarrativeRecorder {
|
|
|
109
113
|
text: `[Condition]: ${conditionText}`,
|
|
110
114
|
depth: 0,
|
|
111
115
|
stageName: event.decider,
|
|
112
|
-
|
|
116
|
+
stageId: deciderStageId,
|
|
117
|
+
subflowId: (_f = event.traversalContext) === null || _f === void 0 ? void 0 : _f.subflowId,
|
|
113
118
|
});
|
|
114
119
|
}
|
|
115
120
|
onNext() {
|
|
@@ -117,27 +122,29 @@ export class CombinedNarrativeRecorder {
|
|
|
117
122
|
// For deciders (no onStageExecuted), onDecision handles the announcement.
|
|
118
123
|
}
|
|
119
124
|
onFork(event) {
|
|
120
|
-
var _a;
|
|
125
|
+
var _a, _b;
|
|
121
126
|
const names = event.children.join(', ');
|
|
122
127
|
this.entries.push({
|
|
123
128
|
type: 'fork',
|
|
124
129
|
text: `[Parallel]: ${event.children.length} paths were executed in parallel: ${names}.`,
|
|
125
130
|
depth: 0,
|
|
126
|
-
|
|
131
|
+
stageId: (_a = event.traversalContext) === null || _a === void 0 ? void 0 : _a.stageId,
|
|
132
|
+
subflowId: (_b = event.traversalContext) === null || _b === void 0 ? void 0 : _b.subflowId,
|
|
127
133
|
});
|
|
128
134
|
}
|
|
129
135
|
onSelected(event) {
|
|
130
|
-
var _a;
|
|
136
|
+
var _a, _b;
|
|
131
137
|
const names = event.selected.join(', ');
|
|
132
138
|
this.entries.push({
|
|
133
139
|
type: 'fork',
|
|
134
140
|
text: `[Selected]: ${event.selected.length} of ${event.total} paths were selected: ${names}.`,
|
|
135
141
|
depth: 0,
|
|
136
|
-
|
|
142
|
+
stageId: (_a = event.traversalContext) === null || _a === void 0 ? void 0 : _a.stageId,
|
|
143
|
+
subflowId: (_b = event.traversalContext) === null || _b === void 0 ? void 0 : _b.subflowId,
|
|
137
144
|
});
|
|
138
145
|
}
|
|
139
146
|
onSubflowEntry(event) {
|
|
140
|
-
var _a, _b;
|
|
147
|
+
var _a, _b, _c;
|
|
141
148
|
// Reset stage counter for this subflow so stages start at "Stage 1" on re-entry
|
|
142
149
|
const sfKey = (_a = event.subflowId) !== null && _a !== void 0 ? _a : '';
|
|
143
150
|
this.stageCounters.delete(sfKey);
|
|
@@ -145,32 +152,46 @@ export class CombinedNarrativeRecorder {
|
|
|
145
152
|
const text = event.description
|
|
146
153
|
? `Entering the ${event.name} subflow: ${event.description}.`
|
|
147
154
|
: `Entering the ${event.name} subflow.`;
|
|
148
|
-
this.entries.push({
|
|
155
|
+
this.entries.push({
|
|
156
|
+
type: 'subflow',
|
|
157
|
+
text,
|
|
158
|
+
depth: 0,
|
|
159
|
+
stageId: (_b = event.traversalContext) === null || _b === void 0 ? void 0 : _b.stageId,
|
|
160
|
+
subflowId: (_c = event.traversalContext) === null || _c === void 0 ? void 0 : _c.subflowId,
|
|
161
|
+
});
|
|
149
162
|
}
|
|
150
163
|
onSubflowExit(event) {
|
|
151
|
-
var _a;
|
|
164
|
+
var _a, _b;
|
|
152
165
|
this.entries.push({
|
|
153
166
|
type: 'subflow',
|
|
154
167
|
text: `Exiting the ${event.name} subflow.`,
|
|
155
168
|
depth: 0,
|
|
156
|
-
|
|
169
|
+
stageId: (_a = event.traversalContext) === null || _a === void 0 ? void 0 : _a.stageId,
|
|
170
|
+
subflowId: (_b = event.traversalContext) === null || _b === void 0 ? void 0 : _b.subflowId,
|
|
157
171
|
});
|
|
158
172
|
}
|
|
159
173
|
onLoop(event) {
|
|
160
|
-
var _a;
|
|
174
|
+
var _a, _b;
|
|
161
175
|
const text = event.description
|
|
162
176
|
? `On pass ${event.iteration}: ${event.description} again.`
|
|
163
177
|
: `On pass ${event.iteration} through ${event.target}.`;
|
|
164
|
-
this.entries.push({
|
|
178
|
+
this.entries.push({
|
|
179
|
+
type: 'loop',
|
|
180
|
+
text,
|
|
181
|
+
depth: 0,
|
|
182
|
+
stageId: (_a = event.traversalContext) === null || _a === void 0 ? void 0 : _a.stageId,
|
|
183
|
+
subflowId: (_b = event.traversalContext) === null || _b === void 0 ? void 0 : _b.subflowId,
|
|
184
|
+
});
|
|
165
185
|
}
|
|
166
186
|
onBreak(event) {
|
|
167
|
-
var _a;
|
|
187
|
+
var _a, _b;
|
|
168
188
|
this.entries.push({
|
|
169
189
|
type: 'break',
|
|
170
190
|
text: `Execution stopped at ${event.stageName}.`,
|
|
171
191
|
depth: 0,
|
|
172
192
|
stageName: event.stageName,
|
|
173
|
-
|
|
193
|
+
stageId: (_a = event.traversalContext) === null || _a === void 0 ? void 0 : _a.stageId,
|
|
194
|
+
subflowId: (_b = event.traversalContext) === null || _b === void 0 ? void 0 : _b.subflowId,
|
|
174
195
|
});
|
|
175
196
|
}
|
|
176
197
|
/**
|
|
@@ -179,7 +200,7 @@ export class CombinedNarrativeRecorder {
|
|
|
179
200
|
* - Recorder.onError (ErrorEvent from scope system — ignored for narrative)
|
|
180
201
|
*/
|
|
181
202
|
onError(event) {
|
|
182
|
-
var _a, _b, _c;
|
|
203
|
+
var _a, _b, _c, _d;
|
|
183
204
|
// Only handle flow errors (which have `message` and `structuredError`)
|
|
184
205
|
if (typeof event.message !== 'string')
|
|
185
206
|
return;
|
|
@@ -199,7 +220,8 @@ export class CombinedNarrativeRecorder {
|
|
|
199
220
|
text: `[Error]: ${text}`,
|
|
200
221
|
depth: 0,
|
|
201
222
|
stageName: flowEvent.stageName,
|
|
202
|
-
|
|
223
|
+
stageId: (_c = flowEvent.traversalContext) === null || _c === void 0 ? void 0 : _c.stageId,
|
|
224
|
+
subflowId: (_d = flowEvent.traversalContext) === null || _d === void 0 ? void 0 : _d.subflowId,
|
|
203
225
|
});
|
|
204
226
|
}
|
|
205
227
|
// ── Output ────────────────────────────────────────────────────────────
|
|
@@ -258,7 +280,7 @@ export class CombinedNarrativeRecorder {
|
|
|
258
280
|
}
|
|
259
281
|
ops.push({ ...op, stepNumber: ops.length + 1 });
|
|
260
282
|
}
|
|
261
|
-
flushOps(stageName, subflowId) {
|
|
283
|
+
flushOps(stageName, subflowId, stageId) {
|
|
262
284
|
const ops = this.pendingOps.get(stageName);
|
|
263
285
|
if (!ops || ops.length === 0)
|
|
264
286
|
return;
|
|
@@ -289,6 +311,7 @@ export class CombinedNarrativeRecorder {
|
|
|
289
311
|
text,
|
|
290
312
|
depth: 1,
|
|
291
313
|
stageName,
|
|
314
|
+
stageId,
|
|
292
315
|
stepNumber: op.stepNumber,
|
|
293
316
|
subflowId,
|
|
294
317
|
});
|
|
@@ -321,4 +344,4 @@ function summarizeValue(value, maxLen) {
|
|
|
321
344
|
}
|
|
322
345
|
return String(value);
|
|
323
346
|
}
|
|
324
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL25hcnJhdGl2ZS9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFnQ0gsOEVBQThFO0FBRTlFLE1BQU0sT0FBTyx5QkFBeUI7SUFjcEMsWUFBWSxPQUE0RDs7UUFYaEUsWUFBTyxHQUE2QixFQUFFLENBQUM7UUFDdkMsZUFBVSxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO1FBQ3JELHNEQUFzRDtRQUM5QyxrQkFBYSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBQ2xELHlEQUF5RDtRQUNqRCxvQkFBZSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO1FBT25ELElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsRUFBRSxtQ0FBSSxvQkFBb0IsQ0FBQztRQUM5QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsa0JBQWtCLG1DQUFJLElBQUksQ0FBQztRQUM5RCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGFBQWEsbUNBQUksSUFBSSxDQUFDO1FBQ3BELElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsY0FBYyxtQ0FBSSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVELHlFQUF5RTtJQUV6RSxNQUFNLENBQUMsS0FBZ0I7UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDN0IsSUFBSSxFQUFFLE1BQU07WUFDWixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxZQUFZLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUMvRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWlCO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUM3QixJQUFJLEVBQUUsT0FBTztZQUNiLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLFlBQVksRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQzlELFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztTQUMzQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQseUVBQXlFO0lBRXpFLGVBQWUsQ0FBQyxLQUFxQjs7UUFDbkMsTUFBTSxLQUFLLEdBQUcsTUFBQSxNQUFBLEtBQUssQ0FBQyxnQkFBZ0IsMENBQUUsU0FBUyxtQ0FBSSxFQUFFLENBQUM7UUFDdEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxNQUFNLElBQUksR0FBRyxPQUFPO1lBQ2xCLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVztnQkFDakIsQ0FBQyxDQUFDLHNCQUFzQixLQUFLLENBQUMsV0FBVyxHQUFHO2dCQUM1QyxDQUFDLENBQUMsMEJBQTBCLEtBQUssQ0FBQyxTQUFTLEdBQUc7WUFDaEQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXO2dCQUNuQixDQUFDLENBQUMsY0FBYyxLQUFLLENBQUMsV0FBVyxHQUFHO2dCQUNwQyxDQUFDLENBQUMsd0JBQXdCLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQztRQUUvQyxNQUFNLElBQUksR0FBRyxNQUFBLEtBQUssQ0FBQyxnQkFBZ0IsMENBQUUsU0FBUyxDQUFDO1FBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hCLElBQUksRUFBRSxPQUFPO1lBQ2IsSUFBSSxFQUFFLFNBQVMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUNsQyxLQUFLLEVBQUUsQ0FBQztZQUNSLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixTQUFTLEVBQUUsSUFBSTtTQUNoQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUF3Qjs7UUFDakMscUVBQXFFO1FBQ3JFLE1BQU0sS0FBSyxHQUFHLE1BQUEsTUFBQSxLQUFLLENBQUMsZ0JBQWdCLDBDQUFFLFNBQVMsbUNBQUksRUFBRSxDQUFDO1FBQ3RELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsT0FBTztZQUN2QixDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVc7Z0JBQ2pCLENBQUMsQ0FBQyxzQkFBc0IsS0FBSyxDQUFDLFdBQVcsR0FBRztnQkFDNUMsQ0FBQyxDQUFDLDBCQUEwQixLQUFLLENBQUMsT0FBTyxHQUFHO1lBQzlDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVztnQkFDbkIsQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLFdBQVcsR0FBRztnQkFDcEMsQ0FBQyxDQUFDLHdCQUF3QixLQUFLLENBQUMsT0FBTyxHQUFHLENBQUM7UUFFN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLE9BQU87WUFDYixJQUFJLEVBQUUsU0FBUyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQ3ZDLEtBQUssRUFBRSxDQUFDO1lBQ1IsU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3hCLFNBQVMsRUFBRSxNQUFBLEtBQUssQ0FBQyxnQkFBZ0IsMENBQUUsU0FBUztTQUM3QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBQSxLQUFLLENBQUMsZ0JBQWdCLDBDQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRWhFLDJCQUEyQjtRQUMzQixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ2hDLElBQUksYUFBcUIsQ0FBQztRQUMxQixJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3pDLGFBQWEsR0FBRyxNQUFNLEtBQUssQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLFNBQVMsaUJBQWlCLFVBQVUsR0FBRyxDQUFDO1FBQzVGLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM3QixhQUFhLEdBQUcsTUFBTSxLQUFLLENBQUMsV0FBVyxjQUFjLFVBQVUsR0FBRyxDQUFDO1FBQ3JFLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzQixhQUFhLEdBQUcsd0JBQXdCLEtBQUssQ0FBQyxTQUFTLDJCQUEyQixVQUFVLEdBQUcsQ0FBQztRQUNsRyxDQUFDO2FBQU0sQ0FBQztZQUNOLGFBQWEsR0FBRywrQ0FBK0MsVUFBVSxHQUFHLENBQUM7UUFDL0UsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hCLElBQUksRUFBRSxXQUFXO1lBQ2pCLElBQUksRUFBRSxnQkFBZ0IsYUFBYSxFQUFFO1lBQ3JDLEtBQUssRUFBRSxDQUFDO1lBQ1IsU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3hCLFNBQVMsRUFBRSxNQUFBLEtBQUssQ0FBQyxnQkFBZ0IsMENBQUUsU0FBUztTQUM3QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTTtRQUNKLHlFQUF5RTtRQUN6RSwwRUFBMEU7SUFDNUUsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFvQjs7UUFDekIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsZUFBZSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0scUNBQXFDLEtBQUssR0FBRztZQUN2RixLQUFLLEVBQUUsQ0FBQztZQUNSLFNBQVMsRUFBRSxNQUFBLEtBQUssQ0FBQyxnQkFBZ0IsMENBQUUsU0FBUztTQUM3QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQXdCOztRQUNqQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNoQixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxlQUFlLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxPQUFPLEtBQUssQ0FBQyxLQUFLLHlCQUF5QixLQUFLLEdBQUc7WUFDN0YsS0FBSyxFQUFFLENBQUM7WUFDUixTQUFTLEVBQUUsTUFBQSxLQUFLLENBQUMsZ0JBQWdCLDBDQUFFLFNBQVM7U0FDN0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUF1Qjs7UUFDcEMsZ0ZBQWdGO1FBQ2hGLE1BQU0sS0FBSyxHQUFHLE1BQUEsS0FBSyxDQUFDLFNBQVMsbUNBQUksRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5DLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxXQUFXO1lBQzVCLENBQUMsQ0FBQyxnQkFBZ0IsS0FBSyxDQUFDLElBQUksYUFBYSxLQUFLLENBQUMsV0FBVyxHQUFHO1lBQzdELENBQUMsQ0FBQyxnQkFBZ0IsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBQSxLQUFLLENBQUMsZ0JBQWdCLDBDQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUF1Qjs7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsZUFBZSxLQUFLLENBQUMsSUFBSSxXQUFXO1lBQzFDLEtBQUssRUFBRSxDQUFDO1lBQ1IsU0FBUyxFQUFFLE1BQUEsS0FBSyxDQUFDLGdCQUFnQiwwQ0FBRSxTQUFTO1NBQzdDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBb0I7O1FBQ3pCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxXQUFXO1lBQzVCLENBQUMsQ0FBQyxXQUFXLEtBQUssQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLFdBQVcsU0FBUztZQUMzRCxDQUFDLENBQUMsV0FBVyxLQUFLLENBQUMsU0FBUyxZQUFZLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQUEsS0FBSyxDQUFDLGdCQUFnQiwwQ0FBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBcUI7O1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hCLElBQUksRUFBRSxPQUFPO1lBQ2IsSUFBSSxFQUFFLHdCQUF3QixLQUFLLENBQUMsU0FBUyxHQUFHO1lBQ2hELEtBQUssRUFBRSxDQUFDO1lBQ1IsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLFNBQVMsRUFBRSxNQUFBLEtBQUssQ0FBQyxnQkFBZ0IsMENBQUUsU0FBUztTQUM3QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxLQUFnRTs7UUFDdEUsdUVBQXVFO1FBQ3ZFLElBQUksT0FBUSxLQUF3QixDQUFDLE9BQU8sS0FBSyxRQUFRO1lBQUUsT0FBTztRQUNsRSxNQUFNLFNBQVMsR0FBRyxLQUF1QixDQUFDO1FBRTFDLElBQUksSUFBSSxHQUFHLHdCQUF3QixTQUFTLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBQztRQUNoRixJQUFJLE1BQUEsTUFBQSxTQUFTLENBQUMsZUFBZSwwQ0FBRSxNQUFNLDBDQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzlDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsTUFBTTtpQkFDN0MsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2IsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUNyRSxPQUFPLEdBQUcsSUFBSSxLQUFLLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyQyxDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2QsSUFBSSxJQUFJLHVCQUF1QixPQUFPLEdBQUcsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLE9BQU87WUFDYixJQUFJLEVBQUUsWUFBWSxJQUFJLEVBQUU7WUFDeEIsS0FBSyxFQUFFLENBQUM7WUFDUixTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVM7WUFDOUIsU0FBUyxFQUFFLE1BQUEsU0FBUyxDQUFDLGdCQUFnQiwwQ0FBRSxTQUFTO1NBQ2pELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx5RUFBeUU7SUFFekUsK0RBQStEO0lBQy9ELFVBQVU7UUFDUixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELHlGQUF5RjtJQUN6RixZQUFZLENBQUMsTUFBTSxHQUFHLElBQUk7UUFDeEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsbUJBQW1COztRQUNqQixNQUFNLE1BQU0sR0FBNkMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDcEUsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsTUFBTSxHQUFHLEdBQUcsTUFBQSxLQUFLLENBQUMsU0FBUyxtQ0FBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7Z0JBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsOERBQThEO0lBQzlELEtBQUs7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQseUVBQXlFO0lBRXpFLDhFQUE4RTtJQUN0RSxxQkFBcUIsQ0FBQyxVQUFrQjs7UUFDOUMsTUFBTSxPQUFPLEdBQUcsTUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsbUNBQUksQ0FBQyxDQUFDO1FBQ3hELE1BQU0sSUFBSSxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHlGQUF5RjtJQUNqRixxQkFBcUIsQ0FBQyxVQUFrQjtRQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sUUFBUSxDQUFDLFNBQWlCLEVBQUUsRUFBa0M7UUFDcEUsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVPLFFBQVEsQ0FBQyxTQUFpQixFQUFFLFNBQWtCO1FBQ3BELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUVyQyxLQUFLLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUU1RSxJQUFJLElBQVksQ0FBQztZQUNqQixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUk7b0JBQ0YsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsWUFBWTt3QkFDbkMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxRQUFRLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLFlBQVksRUFBRTt3QkFDcEQsQ0FBQyxDQUFDLEdBQUcsVUFBVSxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN0QyxDQUFDO2lCQUFNLElBQUksRUFBRSxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxHQUFHLEdBQUcsVUFBVSxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6QyxDQUFDO2lCQUFNLElBQUksRUFBRSxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhO29CQUN2QixDQUFDLENBQUMsR0FBRyxVQUFVLFVBQVUsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFO29CQUN0RCxDQUFDLENBQUMsR0FBRyxVQUFVLFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3RDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWE7b0JBQ3ZCLENBQUMsQ0FBQyxHQUFHLFVBQVUsU0FBUyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxZQUFZLEVBQUU7b0JBQ3JELENBQUMsQ0FBQyxHQUFHLFVBQVUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDckMsQ0FBQztZQUVELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNoQixJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJO2dCQUNKLEtBQUssRUFBRSxDQUFDO2dCQUNSLFNBQVM7Z0JBQ1QsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVO2dCQUN6QixTQUFTO2FBQ1YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7Q0FDRjtBQUVELDhFQUE4RTtBQUU5RSxTQUFTLGNBQWMsQ0FBQyxLQUFjLEVBQUUsTUFBYztJQUNwRCxJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDNUMsSUFBSSxLQUFLLEtBQUssSUFBSTtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ2xDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTyxLQUFLLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN0RixDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssU0FBUztRQUFFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxRQUFRLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQzVGLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBZ0MsQ0FBQyxDQUFDO1FBQzNELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxHQUFHLE1BQU0sR0FBRyxDQUFDO1FBQ3ZDLE9BQU8sTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxRQUFRLENBQUM7SUFDcEUsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIg4oCUIElubGluZSBuYXJyYXRpdmUgYnVpbGRlciB0aGF0IG1lcmdlcyBmbG93ICsgZGF0YSBkdXJpbmcgdHJhdmVyc2FsLlxuICpcbiAqIFJlcGxhY2VzIHRoZSBwb3N0LXByb2Nlc3NpbmcgQ29tYmluZWROYXJyYXRpdmVCdWlsZGVyIGJ5IGltcGxlbWVudGluZyBCT1RIXG4gKiBGbG93UmVjb3JkZXIgKGNvbnRyb2wtZmxvdyBldmVudHMpIGFuZCBSZWNvcmRlciAoc2NvcGUgZGF0YSBldmVudHMpLlxuICpcbiAqIEV2ZW50IG9yZGVyaW5nIGd1YXJhbnRlZXMgdGhpcyB3b3JrczpcbiAqICAgMS4gU2NvcGUgZXZlbnRzIChvblJlYWQsIG9uV3JpdGUpIGZpcmUgRFVSSU5HIHN0YWdlIGV4ZWN1dGlvblxuICogICAyLiBGbG93IGV2ZW50cyAob25TdGFnZUV4ZWN1dGVkLCBvbkRlY2lzaW9uKSBmaXJlIEFGVEVSIHN0YWdlIGV4ZWN1dGlvblxuICogICAzLiBCb3RoIGNhcnJ5IHRoZSBzYW1lIGBzdGFnZU5hbWVgIOKAlCBubyBtYXRjaGluZyBhbWJpZ3VpdHlcbiAqXG4gKiBTbyB3ZSBidWZmZXIgc2NvcGUgb3BzIHBlci1zdGFnZSwgdGhlbiB3aGVuIHRoZSBmbG93IGV2ZW50IGFycml2ZXMsXG4gKiBlbWl0IHRoZSBzdGFnZSBlbnRyeSArIGZsdXNoIHRoZSBidWZmZXJlZCBvcHMgaW4gb25lIHBhc3MuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZWFkRXZlbnQsIFJlY29yZGVyLCBXcml0ZUV2ZW50IH0gZnJvbSAnLi4vLi4vc2NvcGUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5IH0gZnJvbSAnLi9Db21iaW5lZE5hcnJhdGl2ZUJ1aWxkZXIuanMnO1xuaW1wb3J0IHR5cGUge1xuICBGbG93QnJlYWtFdmVudCxcbiAgRmxvd0RlY2lzaW9uRXZlbnQsXG4gIEZsb3dFcnJvckV2ZW50LFxuICBGbG93Rm9ya0V2ZW50LFxuICBGbG93TG9vcEV2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgCBUeXBlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuaW50ZXJmYWNlIEJ1ZmZlcmVkT3Age1xuICB0eXBlOiAncmVhZCcgfCAnd3JpdGUnO1xuICBrZXk6IHN0cmluZztcbiAgdmFsdWVTdW1tYXJ5OiBzdHJpbmc7XG4gIG9wZXJhdGlvbj86ICdzZXQnIHwgJ3VwZGF0ZScgfCAnZGVsZXRlJztcbiAgc3RlcE51bWJlcjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXJPcHRpb25zIHtcbiAgaW5jbHVkZVN0ZXBOdW1iZXJzPzogYm9vbGVhbjtcbiAgaW5jbHVkZVZhbHVlcz86IGJvb2xlYW47XG4gIG1heFZhbHVlTGVuZ3RoPzogbnVtYmVyO1xufVxuXG4vLyDilIDilIAgUmVjb3JkZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBjbGFzcyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIGltcGxlbWVudHMgRmxvd1JlY29yZGVyLCBSZWNvcmRlciB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBlbnRyaWVzOiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10gPSBbXTtcbiAgcHJpdmF0ZSBwZW5kaW5nT3BzID0gbmV3IE1hcDxzdHJpbmcsIEJ1ZmZlcmVkT3BbXT4oKTtcbiAgLyoqIFBlci1zdWJmbG93IHN0YWdlIGNvdW50ZXJzLiBLZXkgJycgPSByb290IGZsb3cuICovXG4gIHByaXZhdGUgc3RhZ2VDb3VudGVycyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIC8qKiBQZXItc3ViZmxvdyBmaXJzdC1zdGFnZSBmbGFncy4gS2V5ICcnID0gcm9vdCBmbG93LiAqL1xuICBwcml2YXRlIGZpcnN0U3RhZ2VGbGFncyA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuXG4gIHByaXZhdGUgaW5jbHVkZVN0ZXBOdW1iZXJzOiBib29sZWFuO1xuICBwcml2YXRlIGluY2x1ZGVWYWx1ZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgbWF4VmFsdWVMZW5ndGg6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlck9wdGlvbnMgJiB7IGlkPzogc3RyaW5nIH0pIHtcbiAgICB0aGlzLmlkID0gb3B0aW9ucz8uaWQgPz8gJ2NvbWJpbmVkLW5hcnJhdGl2ZSc7XG4gICAgdGhpcy5pbmNsdWRlU3RlcE51bWJlcnMgPSBvcHRpb25zPy5pbmNsdWRlU3RlcE51bWJlcnMgPz8gdHJ1ZTtcbiAgICB0aGlzLmluY2x1ZGVWYWx1ZXMgPSBvcHRpb25zPy5pbmNsdWRlVmFsdWVzID8/IHRydWU7XG4gICAgdGhpcy5tYXhWYWx1ZUxlbmd0aCA9IG9wdGlvbnM/Lm1heFZhbHVlTGVuZ3RoID8/IDgwO1xuICB9XG5cbiAgLy8g4pSA4pSAIFNjb3BlIGNoYW5uZWwgKGZpcmVzIGZpcnN0LCBkdXJpbmcgc3RhZ2UgZXhlY3V0aW9uKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBvblJlYWQoZXZlbnQ6IFJlYWRFdmVudCk6IHZvaWQge1xuICAgIGlmICghZXZlbnQua2V5KSByZXR1cm47XG4gICAgdGhpcy5idWZmZXJPcChldmVudC5zdGFnZU5hbWUsIHtcbiAgICAgIHR5cGU6ICdyZWFkJyxcbiAgICAgIGtleTogZXZlbnQua2V5LFxuICAgICAgdmFsdWVTdW1tYXJ5OiBzdW1tYXJpemVWYWx1ZShldmVudC52YWx1ZSwgdGhpcy5tYXhWYWx1ZUxlbmd0aCksXG4gICAgfSk7XG4gIH1cblxuICBvbldyaXRlKGV2ZW50OiBXcml0ZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5idWZmZXJPcChldmVudC5zdGFnZU5hbWUsIHtcbiAgICAgIHR5cGU6ICd3cml0ZScsXG4gICAgICBrZXk6IGV2ZW50LmtleSxcbiAgICAgIHZhbHVlU3VtbWFyeTogc3VtbWFyaXplVmFsdWUoZXZlbnQudmFsdWUsIHRoaXMubWF4VmFsdWVMZW5ndGgpLFxuICAgICAgb3BlcmF0aW9uOiBldmVudC5vcGVyYXRpb24sXG4gICAgfSk7XG4gIH1cblxuICAvLyDilIDilIAgRmxvdyBjaGFubmVsIChmaXJlcyBhZnRlciBzdGFnZSBleGVjdXRpb24pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uU3RhZ2VFeGVjdXRlZChldmVudDogRmxvd1N0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzZktleSA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCA/PyAnJztcbiAgICBjb25zdCBzdGFnZU51bSA9IHRoaXMuaW5jcmVtZW50U3RhZ2VDb3VudGVyKHNmS2V5KTtcbiAgICBjb25zdCBpc0ZpcnN0ID0gdGhpcy5jb25zdW1lRmlyc3RTdGFnZUZsYWcoc2ZLZXkpO1xuICAgIGNvbnN0IHRleHQgPSBpc0ZpcnN0XG4gICAgICA/IGV2ZW50LmRlc2NyaXB0aW9uXG4gICAgICAgID8gYFRoZSBwcm9jZXNzIGJlZ2FuOiAke2V2ZW50LmRlc2NyaXB0aW9ufS5gXG4gICAgICAgIDogYFRoZSBwcm9jZXNzIGJlZ2FuIHdpdGggJHtldmVudC5zdGFnZU5hbWV9LmBcbiAgICAgIDogZXZlbnQuZGVzY3JpcHRpb25cbiAgICAgID8gYE5leHQgc3RlcDogJHtldmVudC5kZXNjcmlwdGlvbn0uYFxuICAgICAgOiBgTmV4dCwgaXQgbW92ZWQgb24gdG8gJHtldmVudC5zdGFnZU5hbWV9LmA7XG5cbiAgICBjb25zdCBzZklkID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkO1xuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdzdGFnZScsXG4gICAgICB0ZXh0OiBgU3RhZ2UgJHtzdGFnZU51bX06ICR7dGV4dH1gLFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LnN0YWdlTmFtZSxcbiAgICAgIHN1YmZsb3dJZDogc2ZJZCxcbiAgICB9KTtcbiAgICB0aGlzLmZsdXNoT3BzKGV2ZW50LnN0YWdlTmFtZSwgc2ZJZCk7XG4gIH1cblxuICBvbkRlY2lzaW9uKGV2ZW50OiBGbG93RGVjaXNpb25FdmVudCk6IHZvaWQge1xuICAgIC8vIEVtaXQgdGhlIGRlY2lkZXIgc3RhZ2UgZW50cnkgKGRlY2lkZXJzIGRvbid0IGZpcmUgb25TdGFnZUV4ZWN1dGVkKVxuICAgIGNvbnN0IHNmS2V5ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkID8/ICcnO1xuICAgIGNvbnN0IHN0YWdlTnVtID0gdGhpcy5pbmNyZW1lbnRTdGFnZUNvdW50ZXIoc2ZLZXkpO1xuICAgIGNvbnN0IGlzRmlyc3QgPSB0aGlzLmNvbnN1bWVGaXJzdFN0YWdlRmxhZyhzZktleSk7XG4gICAgY29uc3Qgc3RhZ2VUZXh0ID0gaXNGaXJzdFxuICAgICAgPyBldmVudC5kZXNjcmlwdGlvblxuICAgICAgICA/IGBUaGUgcHJvY2VzcyBiZWdhbjogJHtldmVudC5kZXNjcmlwdGlvbn0uYFxuICAgICAgICA6IGBUaGUgcHJvY2VzcyBiZWdhbiB3aXRoICR7ZXZlbnQuZGVjaWRlcn0uYFxuICAgICAgOiBldmVudC5kZXNjcmlwdGlvblxuICAgICAgPyBgTmV4dCBzdGVwOiAke2V2ZW50LmRlc2NyaXB0aW9ufS5gXG4gICAgICA6IGBOZXh0LCBpdCBtb3ZlZCBvbiB0byAke2V2ZW50LmRlY2lkZXJ9LmA7XG5cbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICB0eXBlOiAnc3RhZ2UnLFxuICAgICAgdGV4dDogYFN0YWdlICR7c3RhZ2VOdW19OiAke3N0YWdlVGV4dH1gLFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LmRlY2lkZXIsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgICB0aGlzLmZsdXNoT3BzKGV2ZW50LmRlY2lkZXIsIGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCk7XG5cbiAgICAvLyBFbWl0IHRoZSBjb25kaXRpb24gZW50cnlcbiAgICBjb25zdCBicmFuY2hOYW1lID0gZXZlbnQuY2hvc2VuO1xuICAgIGxldCBjb25kaXRpb25UZXh0OiBzdHJpbmc7XG4gICAgaWYgKGV2ZW50LmRlc2NyaXB0aW9uICYmIGV2ZW50LnJhdGlvbmFsZSkge1xuICAgICAgY29uZGl0aW9uVGV4dCA9IGBJdCAke2V2ZW50LmRlc2NyaXB0aW9ufTogJHtldmVudC5yYXRpb25hbGV9LCBzbyBpdCBjaG9zZSAke2JyYW5jaE5hbWV9LmA7XG4gICAgfSBlbHNlIGlmIChldmVudC5kZXNjcmlwdGlvbikge1xuICAgICAgY29uZGl0aW9uVGV4dCA9IGBJdCAke2V2ZW50LmRlc2NyaXB0aW9ufSBhbmQgY2hvc2UgJHticmFuY2hOYW1lfS5gO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQucmF0aW9uYWxlKSB7XG4gICAgICBjb25kaXRpb25UZXh0ID0gYEEgZGVjaXNpb24gd2FzIG1hZGU6ICR7ZXZlbnQucmF0aW9uYWxlfSwgc28gdGhlIHBhdGggdGFrZW4gd2FzICR7YnJhbmNoTmFtZX0uYDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZGl0aW9uVGV4dCA9IGBBIGRlY2lzaW9uIHdhcyBtYWRlLCBhbmQgdGhlIHBhdGggdGFrZW4gd2FzICR7YnJhbmNoTmFtZX0uYDtcbiAgICB9XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgdHlwZTogJ2NvbmRpdGlvbicsXG4gICAgICB0ZXh0OiBgW0NvbmRpdGlvbl06ICR7Y29uZGl0aW9uVGV4dH1gLFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LmRlY2lkZXIsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uTmV4dCgpOiB2b2lkIHtcbiAgICAvLyBOby1vcC4gb25TdGFnZUV4ZWN1dGVkIGFscmVhZHkgaGFzIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIG5leHQgc3RhZ2UuXG4gICAgLy8gRm9yIGRlY2lkZXJzIChubyBvblN0YWdlRXhlY3V0ZWQpLCBvbkRlY2lzaW9uIGhhbmRsZXMgdGhlIGFubm91bmNlbWVudC5cbiAgfVxuXG4gIG9uRm9yayhldmVudDogRmxvd0ZvcmtFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWVzID0gZXZlbnQuY2hpbGRyZW4uam9pbignLCAnKTtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICB0eXBlOiAnZm9yaycsXG4gICAgICB0ZXh0OiBgW1BhcmFsbGVsXTogJHtldmVudC5jaGlsZHJlbi5sZW5ndGh9IHBhdGhzIHdlcmUgZXhlY3V0ZWQgaW4gcGFyYWxsZWw6ICR7bmFtZXN9LmAsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25TZWxlY3RlZChldmVudDogRmxvd1NlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBuYW1lcyA9IGV2ZW50LnNlbGVjdGVkLmpvaW4oJywgJyk7XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgdHlwZTogJ2ZvcmsnLFxuICAgICAgdGV4dDogYFtTZWxlY3RlZF06ICR7ZXZlbnQuc2VsZWN0ZWQubGVuZ3RofSBvZiAke2V2ZW50LnRvdGFsfSBwYXRocyB3ZXJlIHNlbGVjdGVkOiAke25hbWVzfS5gLFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uU3ViZmxvd0VudHJ5KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgLy8gUmVzZXQgc3RhZ2UgY291bnRlciBmb3IgdGhpcyBzdWJmbG93IHNvIHN0YWdlcyBzdGFydCBhdCBcIlN0YWdlIDFcIiBvbiByZS1lbnRyeVxuICAgIGNvbnN0IHNmS2V5ID0gZXZlbnQuc3ViZmxvd0lkID8/ICcnO1xuICAgIHRoaXMuc3RhZ2VDb3VudGVycy5kZWxldGUoc2ZLZXkpO1xuICAgIHRoaXMuZmlyc3RTdGFnZUZsYWdzLmRlbGV0ZShzZktleSk7XG5cbiAgICBjb25zdCB0ZXh0ID0gZXZlbnQuZGVzY3JpcHRpb25cbiAgICAgID8gYEVudGVyaW5nIHRoZSAke2V2ZW50Lm5hbWV9IHN1YmZsb3c6ICR7ZXZlbnQuZGVzY3JpcHRpb259LmBcbiAgICAgIDogYEVudGVyaW5nIHRoZSAke2V2ZW50Lm5hbWV9IHN1YmZsb3cuYDtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7IHR5cGU6ICdzdWJmbG93JywgdGV4dCwgZGVwdGg6IDAsIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkIH0pO1xuICB9XG5cbiAgb25TdWJmbG93RXhpdChldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdzdWJmbG93JyxcbiAgICAgIHRleHQ6IGBFeGl0aW5nIHRoZSAke2V2ZW50Lm5hbWV9IHN1YmZsb3cuYCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICBvbkxvb3AoZXZlbnQ6IEZsb3dMb29wRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0ZXh0ID0gZXZlbnQuZGVzY3JpcHRpb25cbiAgICAgID8gYE9uIHBhc3MgJHtldmVudC5pdGVyYXRpb259OiAke2V2ZW50LmRlc2NyaXB0aW9ufSBhZ2Fpbi5gXG4gICAgICA6IGBPbiBwYXNzICR7ZXZlbnQuaXRlcmF0aW9ufSB0aHJvdWdoICR7ZXZlbnQudGFyZ2V0fS5gO1xuICAgIHRoaXMuZW50cmllcy5wdXNoKHsgdHlwZTogJ2xvb3AnLCB0ZXh0LCBkZXB0aDogMCwgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQgfSk7XG4gIH1cblxuICBvbkJyZWFrKGV2ZW50OiBGbG93QnJlYWtFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdicmVhaycsXG4gICAgICB0ZXh0OiBgRXhlY3V0aW9uIHN0b3BwZWQgYXQgJHtldmVudC5zdGFnZU5hbWV9LmAsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuc3RhZ2VOYW1lLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBlcnJvcnMgZnJvbSBib3RoIGNoYW5uZWxzOlxuICAgKiAtIEZsb3dSZWNvcmRlci5vbkVycm9yIChGbG93RXJyb3JFdmVudCB3aXRoIG1lc3NhZ2UgKyBzdHJ1Y3R1cmVkRXJyb3IpXG4gICAqIC0gUmVjb3JkZXIub25FcnJvciAoRXJyb3JFdmVudCBmcm9tIHNjb3BlIHN5c3RlbSDigJQgaWdub3JlZCBmb3IgbmFycmF0aXZlKVxuICAgKi9cbiAgb25FcnJvcihldmVudDogRmxvd0Vycm9yRXZlbnQgfCB7IHN0YWdlTmFtZT86IHN0cmluZzsgbWVzc2FnZT86IHN0cmluZyB9KTogdm9pZCB7XG4gICAgLy8gT25seSBoYW5kbGUgZmxvdyBlcnJvcnMgKHdoaWNoIGhhdmUgYG1lc3NhZ2VgIGFuZCBgc3RydWN0dXJlZEVycm9yYClcbiAgICBpZiAodHlwZW9mIChldmVudCBhcyBGbG93RXJyb3JFdmVudCkubWVzc2FnZSAhPT0gJ3N0cmluZycpIHJldHVybjtcbiAgICBjb25zdCBmbG93RXZlbnQgPSBldmVudCBhcyBGbG93RXJyb3JFdmVudDtcblxuICAgIGxldCB0ZXh0ID0gYEFuIGVycm9yIG9jY3VycmVkIGF0ICR7Zmxvd0V2ZW50LnN0YWdlTmFtZX06ICR7Zmxvd0V2ZW50Lm1lc3NhZ2V9LmA7XG4gICAgaWYgKGZsb3dFdmVudC5zdHJ1Y3R1cmVkRXJyb3I/Lmlzc3Vlcz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBkZXRhaWxzID0gZmxvd0V2ZW50LnN0cnVjdHVyZWRFcnJvci5pc3N1ZXNcbiAgICAgICAgLm1hcCgoaXNzdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gaXNzdWUucGF0aC5sZW5ndGggPiAwID8gaXNzdWUucGF0aC5qb2luKCcuJykgOiAnKHJvb3QpJztcbiAgICAgICAgICByZXR1cm4gYCR7cGF0aH06ICR7aXNzdWUubWVzc2FnZX1gO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbignOyAnKTtcbiAgICAgIHRleHQgKz0gYCBWYWxpZGF0aW9uIGlzc3VlczogJHtkZXRhaWxzfS5gO1xuICAgIH1cbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgdGV4dDogYFtFcnJvcl06ICR7dGV4dH1gLFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGZsb3dFdmVudC5zdGFnZU5hbWUsXG4gICAgICBzdWJmbG93SWQ6IGZsb3dFdmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICAvLyDilIDilIAgT3V0cHV0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBSZXR1cm5zIHN0cnVjdHVyZWQgZW50cmllcyBmb3IgcHJvZ3JhbW1hdGljIGNvbnN1bXB0aW9uLiAqL1xuICBnZXRFbnRyaWVzKCk6IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmVudHJpZXNdO1xuICB9XG5cbiAgLyoqIFJldHVybnMgZm9ybWF0dGVkIG5hcnJhdGl2ZSBsaW5lcyAoc2FtZSBvdXRwdXQgYXMgQ29tYmluZWROYXJyYXRpdmVCdWlsZGVyLmJ1aWxkKS4gKi9cbiAgZ2V0TmFycmF0aXZlKGluZGVudCA9ICcgICcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcy5tYXAoKGVudHJ5KSA9PiBgJHtpbmRlbnQucmVwZWF0KGVudHJ5LmRlcHRoKX0ke2VudHJ5LnRleHR9YCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBlbnRyaWVzIGdyb3VwZWQgYnkgc3ViZmxvd0lkIGZvciBzdHJ1Y3R1cmVkIGFjY2Vzcy5cbiAgICogUm9vdC1sZXZlbCBlbnRyaWVzIGhhdmUgc3ViZmxvd0lkID0gdW5kZWZpbmVkLlxuICAgKi9cbiAgZ2V0RW50cmllc0J5U3ViZmxvdygpOiBSZWNvcmQ8c3RyaW5nLCBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIENvbWJpbmVkTmFycmF0aXZlRW50cnlbXT4gPSB7ICcnOiBbXSB9O1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzKSB7XG4gICAgICBjb25zdCBrZXkgPSBlbnRyeS5zdWJmbG93SWQgPz8gJyc7XG4gICAgICBpZiAoIXJlc3VsdFtrZXldKSByZXN1bHRba2V5XSA9IFtdO1xuICAgICAgcmVzdWx0W2tleV0ucHVzaChlbnRyeSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKiogQ2xlYXJzIGFsbCBzdGF0ZS4gQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYmVmb3JlIGVhY2ggcnVuLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmVudHJpZXMgPSBbXTtcbiAgICB0aGlzLnBlbmRpbmdPcHMuY2xlYXIoKTtcbiAgICB0aGlzLnN0YWdlQ291bnRlcnMuY2xlYXIoKTtcbiAgICB0aGlzLmZpcnN0U3RhZ2VGbGFncy5jbGVhcigpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFByaXZhdGUgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogSW5jcmVtZW50IGFuZCByZXR1cm4gdGhlIHN0YWdlIGNvdW50ZXIgZm9yIGEgZ2l2ZW4gc3ViZmxvdyAoJycgPSByb290KS4gKi9cbiAgcHJpdmF0ZSBpbmNyZW1lbnRTdGFnZUNvdW50ZXIoc3ViZmxvd0tleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zdGFnZUNvdW50ZXJzLmdldChzdWJmbG93S2V5KSA/PyAwO1xuICAgIGNvbnN0IG5leHQgPSBjdXJyZW50ICsgMTtcbiAgICB0aGlzLnN0YWdlQ291bnRlcnMuc2V0KHN1YmZsb3dLZXksIG5leHQpO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG5cbiAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBzdGFnZSBmb3IgdGhlIGdpdmVuIHN1YmZsb3csIGNvbnN1bWluZyB0aGUgZmxhZy4gKi9cbiAgcHJpdmF0ZSBjb25zdW1lRmlyc3RTdGFnZUZsYWcoc3ViZmxvd0tleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmZpcnN0U3RhZ2VGbGFncy5oYXMoc3ViZmxvd0tleSkpIHtcbiAgICAgIHRoaXMuZmlyc3RTdGFnZUZsYWdzLnNldChzdWJmbG93S2V5LCBmYWxzZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBidWZmZXJPcChzdGFnZU5hbWU6IHN0cmluZywgb3A6IE9taXQ8QnVmZmVyZWRPcCwgJ3N0ZXBOdW1iZXInPik6IHZvaWQge1xuICAgIGxldCBvcHMgPSB0aGlzLnBlbmRpbmdPcHMuZ2V0KHN0YWdlTmFtZSk7XG4gICAgaWYgKCFvcHMpIHtcbiAgICAgIG9wcyA9IFtdO1xuICAgICAgdGhpcy5wZW5kaW5nT3BzLnNldChzdGFnZU5hbWUsIG9wcyk7XG4gICAgfVxuICAgIG9wcy5wdXNoKHsgLi4ub3AsIHN0ZXBOdW1iZXI6IG9wcy5sZW5ndGggKyAxIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaE9wcyhzdGFnZU5hbWU6IHN0cmluZywgc3ViZmxvd0lkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgb3BzID0gdGhpcy5wZW5kaW5nT3BzLmdldChzdGFnZU5hbWUpO1xuICAgIGlmICghb3BzIHx8IG9wcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGZvciAoY29uc3Qgb3Agb2Ygb3BzKSB7XG4gICAgICBjb25zdCBzdGVwUHJlZml4ID0gdGhpcy5pbmNsdWRlU3RlcE51bWJlcnMgPyBgU3RlcCAke29wLnN0ZXBOdW1iZXJ9OiBgIDogJyc7XG5cbiAgICAgIGxldCB0ZXh0OiBzdHJpbmc7XG4gICAgICBpZiAob3AudHlwZSA9PT0gJ3JlYWQnKSB7XG4gICAgICAgIHRleHQgPVxuICAgICAgICAgIHRoaXMuaW5jbHVkZVZhbHVlcyAmJiBvcC52YWx1ZVN1bW1hcnlcbiAgICAgICAgICAgID8gYCR7c3RlcFByZWZpeH1SZWFkICR7b3Aua2V5fSA9ICR7b3AudmFsdWVTdW1tYXJ5fWBcbiAgICAgICAgICAgIDogYCR7c3RlcFByZWZpeH1SZWFkICR7b3Aua2V5fWA7XG4gICAgICB9IGVsc2UgaWYgKG9wLm9wZXJhdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgdGV4dCA9IGAke3N0ZXBQcmVmaXh9RGVsZXRlICR7b3Aua2V5fWA7XG4gICAgICB9IGVsc2UgaWYgKG9wLm9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgdGV4dCA9IHRoaXMuaW5jbHVkZVZhbHVlc1xuICAgICAgICAgID8gYCR7c3RlcFByZWZpeH1VcGRhdGUgJHtvcC5rZXl9ID0gJHtvcC52YWx1ZVN1bW1hcnl9YFxuICAgICAgICAgIDogYCR7c3RlcFByZWZpeH1VcGRhdGUgJHtvcC5rZXl9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHQgPSB0aGlzLmluY2x1ZGVWYWx1ZXNcbiAgICAgICAgICA/IGAke3N0ZXBQcmVmaXh9V3JpdGUgJHtvcC5rZXl9ID0gJHtvcC52YWx1ZVN1bW1hcnl9YFxuICAgICAgICAgIDogYCR7c3RlcFByZWZpeH1Xcml0ZSAke29wLmtleX1gO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgdGV4dCxcbiAgICAgICAgZGVwdGg6IDEsXG4gICAgICAgIHN0YWdlTmFtZSxcbiAgICAgICAgc3RlcE51bWJlcjogb3Auc3RlcE51bWJlcixcbiAgICAgICAgc3ViZmxvd0lkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nT3BzLmRlbGV0ZShzdGFnZU5hbWUpO1xuICB9XG59XG5cbi8vIOKUgOKUgCBWYWx1ZSBzdW1tYXJpemVyIChzYW1lIGxvZ2ljIGFzIE5hcnJhdGl2ZVJlY29yZGVyKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gc3VtbWFyaXplVmFsdWUodmFsdWU6IHVua25vd24sIG1heExlbjogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAndW5kZWZpbmVkJztcbiAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJ251bGwnO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPD0gbWF4TGVuID8gYFwiJHt2YWx1ZX1cImAgOiBgXCIke3ZhbHVlLnNsaWNlKDAsIG1heExlbiAtIDMpfS4uLlwiYDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPT09IDAgPyAnW10nIDogYCgke3ZhbHVlLmxlbmd0aH0gaXRlbSR7dmFsdWUubGVuZ3RoID4gMSA/ICdzJyA6ICcnfSlgO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHJldHVybiAne30nO1xuICAgIGNvbnN0IHByZXZpZXcgPSBrZXlzLnNsaWNlKDAsIDQpLmpvaW4oJywgJyk7XG4gICAgY29uc3Qgc3VmZml4ID0ga2V5cy5sZW5ndGggPiA0ID8gYCwgLi4uICgke2tleXMubGVuZ3RofSBrZXlzKWAgOiAnJztcbiAgICBjb25zdCByZXN1bHQgPSBgeyR7cHJldmlld30ke3N1ZmZpeH19YDtcbiAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA8PSBtYXhMZW4gPyByZXN1bHQgOiBgeyR7a2V5cy5sZW5ndGh9IGtleXN9YDtcbiAgfVxuICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cbiJdfQ==
|
|
347
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL25hcnJhdGl2ZS9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFnQ0gsOEVBQThFO0FBRTlFLE1BQU0sT0FBTyx5QkFBeUI7SUFjcEMsWUFBWSxPQUE0RDs7UUFYaEUsWUFBTyxHQUE2QixFQUFFLENBQUM7UUFDdkMsZUFBVSxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO1FBQ3JELHNEQUFzRDtRQUM5QyxrQkFBYSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBQ2xELHlEQUF5RDtRQUNqRCxvQkFBZSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO1FBT25ELElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsRUFBRSxtQ0FBSSxvQkFBb0IsQ0FBQztRQUM5QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsa0JBQWtCLG1DQUFJLElBQUksQ0FBQztRQUM5RCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGFBQWEsbUNBQUksSUFBSSxDQUFDO1FBQ3BELElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsY0FBYyxtQ0FBSSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVELHlFQUF5RTtJQUV6RSxNQUFNLENBQUMsS0FBZ0I7UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDN0IsSUFBSSxFQUFF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LENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUM7UUFDdkMsT0FBTyxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLFFBQVEsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlciDigJQgSW5saW5lIG5hcnJhdGl2ZSBidWlsZGVyIHRoYXQgbWVyZ2VzIGZsb3cgKyBkYXRhIGR1cmluZyB0cmF2ZXJzYWwuXG4gKlxuICogUmVwbGFjZXMgdGhlIHBvc3QtcHJvY2Vzc2luZyBDb21iaW5lZE5hcnJhdGl2ZUJ1aWxkZXIgYnkgaW1wbGVtZW50aW5nIEJPVEhcbiAqIEZsb3dSZWNvcmRlciAoY29udHJvbC1mbG93IGV2ZW50cykgYW5kIFJlY29yZGVyIChzY29wZSBkYXRhIGV2ZW50cykuXG4gKlxuICogRXZlbnQgb3JkZXJpbmcgZ3VhcmFudGVlcyB0aGlzIHdvcmtzOlxuICogICAxLiBTY29wZSBldmVudHMgKG9uUmVhZCwgb25Xcml0ZSkgZmlyZSBEVVJJTkcgc3RhZ2UgZXhlY3V0aW9uXG4gKiAgIDIuIEZsb3cgZXZlbnRzIChvblN0YWdlRXhlY3V0ZWQsIG9uRGVjaXNpb24pIGZpcmUgQUZURVIgc3RhZ2UgZXhlY3V0aW9uXG4gKiAgIDMuIEJvdGggY2FycnkgdGhlIHNhbWUgYHN0YWdlTmFtZWAg4oCUIG5vIG1hdGNoaW5nIGFtYmlndWl0eVxuICpcbiAqIFNvIHdlIGJ1ZmZlciBzY29wZSBvcHMgcGVyLXN0YWdlLCB0aGVuIHdoZW4gdGhlIGZsb3cgZXZlbnQgYXJyaXZlcyxcbiAqIGVtaXQgdGhlIHN0YWdlIGVudHJ5ICsgZmx1c2ggdGhlIGJ1ZmZlcmVkIG9wcyBpbiBvbmUgcGFzcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlYWRFdmVudCwgUmVjb3JkZXIsIFdyaXRlRXZlbnQgfSBmcm9tICcuLi8uLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlRW50cnkgfSBmcm9tICcuL0NvbWJpbmVkTmFycmF0aXZlQnVpbGRlci5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1NlbGVjdGVkRXZlbnQsXG4gIEZsb3dTdGFnZUV2ZW50LFxuICBGbG93U3ViZmxvd0V2ZW50LFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8g4pSA4pSAIFR5cGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5pbnRlcmZhY2UgQnVmZmVyZWRPcCB7XG4gIHR5cGU6ICdyZWFkJyB8ICd3cml0ZSc7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZVN1bW1hcnk6IHN0cmluZztcbiAgb3BlcmF0aW9uPzogJ3NldCcgfCAndXBkYXRlJyB8ICdkZWxldGUnO1xuICBzdGVwTnVtYmVyOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlck9wdGlvbnMge1xuICBpbmNsdWRlU3RlcE51bWJlcnM/OiBib29sZWFuO1xuICBpbmNsdWRlVmFsdWVzPzogYm9vbGVhbjtcbiAgbWF4VmFsdWVMZW5ndGg/OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBSZWNvcmRlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGNsYXNzIENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIgaW1wbGVtZW50cyBGbG93UmVjb3JkZXIsIFJlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICBwcml2YXRlIGVudHJpZXM6IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXSA9IFtdO1xuICBwcml2YXRlIHBlbmRpbmdPcHMgPSBuZXcgTWFwPHN0cmluZywgQnVmZmVyZWRPcFtdPigpO1xuICAvKiogUGVyLXN1YmZsb3cgc3RhZ2UgY291bnRlcnMuIEtleSAnJyA9IHJvb3QgZmxvdy4gKi9cbiAgcHJpdmF0ZSBzdGFnZUNvdW50ZXJzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgLyoqIFBlci1zdWJmbG93IGZpcnN0LXN0YWdlIGZsYWdzLiBLZXkgJycgPSByb290IGZsb3cuICovXG4gIHByaXZhdGUgZmlyc3RTdGFnZUZsYWdzID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG5cbiAgcHJpdmF0ZSBpbmNsdWRlU3RlcE51bWJlcnM6IGJvb2xlYW47XG4gIHByaXZhdGUgaW5jbHVkZVZhbHVlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBtYXhWYWx1ZUxlbmd0aDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyT3B0aW9ucyAmIHsgaWQ/OiBzdHJpbmcgfSkge1xuICAgIHRoaXMuaWQgPSBvcHRpb25zPy5pZCA/PyAnY29tYmluZWQtbmFycmF0aXZlJztcbiAgICB0aGlzLmluY2x1ZGVTdGVwTnVtYmVycyA9IG9wdGlvbnM/LmluY2x1ZGVTdGVwTnVtYmVycyA/PyB0cnVlO1xuICAgIHRoaXMuaW5jbHVkZVZhbHVlcyA9IG9wdGlvbnM/LmluY2x1ZGVWYWx1ZXMgPz8gdHJ1ZTtcbiAgICB0aGlzLm1heFZhbHVlTGVuZ3RoID0gb3B0aW9ucz8ubWF4VmFsdWVMZW5ndGggPz8gODA7XG4gIH1cblxuICAvLyDilIDilIAgU2NvcGUgY2hhbm5lbCAoZmlyZXMgZmlyc3QsIGR1cmluZyBzdGFnZSBleGVjdXRpb24pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uUmVhZChldmVudDogUmVhZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCFldmVudC5rZXkpIHJldHVybjtcbiAgICB0aGlzLmJ1ZmZlck9wKGV2ZW50LnN0YWdlTmFtZSwge1xuICAgICAgdHlwZTogJ3JlYWQnLFxuICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICB2YWx1ZVN1bW1hcnk6IHN1bW1hcml6ZVZhbHVlKGV2ZW50LnZhbHVlLCB0aGlzLm1heFZhbHVlTGVuZ3RoKSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uV3JpdGUoZXZlbnQ6IFdyaXRlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmJ1ZmZlck9wKGV2ZW50LnN0YWdlTmFtZSwge1xuICAgICAgdHlwZTogJ3dyaXRlJyxcbiAgICAgIGtleTogZXZlbnQua2V5LFxuICAgICAgdmFsdWVTdW1tYXJ5OiBzdW1tYXJpemVWYWx1ZShldmVudC52YWx1ZSwgdGhpcy5tYXhWYWx1ZUxlbmd0aCksXG4gICAgICBvcGVyYXRpb246IGV2ZW50Lm9wZXJhdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBGbG93IGNoYW5uZWwgKGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbikg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgb25TdGFnZUV4ZWN1dGVkKGV2ZW50OiBGbG93U3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHNmS2V5ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkID8/ICcnO1xuICAgIGNvbnN0IHN0YWdlTnVtID0gdGhpcy5pbmNyZW1lbnRTdGFnZUNvdW50ZXIoc2ZLZXkpO1xuICAgIGNvbnN0IGlzRmlyc3QgPSB0aGlzLmNvbnN1bWVGaXJzdFN0YWdlRmxhZyhzZktleSk7XG4gICAgY29uc3QgdGV4dCA9IGlzRmlyc3RcbiAgICAgID8gZXZlbnQuZGVzY3JpcHRpb25cbiAgICAgICAgPyBgVGhlIHByb2Nlc3MgYmVnYW46ICR7ZXZlbnQuZGVzY3JpcHRpb259LmBcbiAgICAgICAgOiBgVGhlIHByb2Nlc3MgYmVnYW4gd2l0aCAke2V2ZW50LnN0YWdlTmFtZX0uYFxuICAgICAgOiBldmVudC5kZXNjcmlwdGlvblxuICAgICAgPyBgTmV4dCBzdGVwOiAke2V2ZW50LmRlc2NyaXB0aW9ufS5gXG4gICAgICA6IGBOZXh0LCBpdCBtb3ZlZCBvbiB0byAke2V2ZW50LnN0YWdlTmFtZX0uYDtcblxuICAgIGNvbnN0IHNmSWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQ7XG4gICAgY29uc3Qgc3RhZ2VJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQ7XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgdHlwZTogJ3N0YWdlJyxcbiAgICAgIHRleHQ6IGBTdGFnZSAke3N0YWdlTnVtfTogJHt0ZXh0fWAsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogc2ZJZCxcbiAgICB9KTtcbiAgICB0aGlzLmZsdXNoT3BzKGV2ZW50LnN0YWdlTmFtZSwgc2ZJZCwgc3RhZ2VJZCk7XG4gIH1cblxuICBvbkRlY2lzaW9uKGV2ZW50OiBGbG93RGVjaXNpb25FdmVudCk6IHZvaWQge1xuICAgIC8vIEVtaXQgdGhlIGRlY2lkZXIgc3RhZ2UgZW50cnkgKGRlY2lkZXJzIGRvbid0IGZpcmUgb25TdGFnZUV4ZWN1dGVkKVxuICAgIGNvbnN0IHNmS2V5ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkID8/ICcnO1xuICAgIGNvbnN0IHN0YWdlTnVtID0gdGhpcy5pbmNyZW1lbnRTdGFnZUNvdW50ZXIoc2ZLZXkpO1xuICAgIGNvbnN0IGlzRmlyc3QgPSB0aGlzLmNvbnN1bWVGaXJzdFN0YWdlRmxhZyhzZktleSk7XG4gICAgY29uc3Qgc3RhZ2VUZXh0ID0gaXNGaXJzdFxuICAgICAgPyBldmVudC5kZXNjcmlwdGlvblxuICAgICAgICA/IGBUaGUgcHJvY2VzcyBiZWdhbjogJHtldmVudC5kZXNjcmlwdGlvbn0uYFxuICAgICAgICA6IGBUaGUgcHJvY2VzcyBiZWdhbiB3aXRoICR7ZXZlbnQuZGVjaWRlcn0uYFxuICAgICAgOiBldmVudC5kZXNjcmlwdGlvblxuICAgICAgPyBgTmV4dCBzdGVwOiAke2V2ZW50LmRlc2NyaXB0aW9ufS5gXG4gICAgICA6IGBOZXh0LCBpdCBtb3ZlZCBvbiB0byAke2V2ZW50LmRlY2lkZXJ9LmA7XG5cbiAgICBjb25zdCBkZWNpZGVyU3RhZ2VJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQ7XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgdHlwZTogJ3N0YWdlJyxcbiAgICAgIHRleHQ6IGBTdGFnZSAke3N0YWdlTnVtfTogJHtzdGFnZVRleHR9YCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VOYW1lOiBldmVudC5kZWNpZGVyLFxuICAgICAgc3RhZ2VJZDogZGVjaWRlclN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgICB0aGlzLmZsdXNoT3BzKGV2ZW50LmRlY2lkZXIsIGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCwgZGVjaWRlclN0YWdlSWQpO1xuXG4gICAgLy8gRW1pdCB0aGUgY29uZGl0aW9uIGVudHJ5XG4gICAgY29uc3QgYnJhbmNoTmFtZSA9IGV2ZW50LmNob3NlbjtcbiAgICBsZXQgY29uZGl0aW9uVGV4dDogc3RyaW5nO1xuICAgIGlmIChldmVudC5kZXNjcmlwdGlvbiAmJiBldmVudC5yYXRpb25hbGUpIHtcbiAgICAgIGNvbmRpdGlvblRleHQgPSBgSXQgJHtldmVudC5kZXNjcmlwdGlvbn06ICR7ZXZlbnQucmF0aW9uYWxlfSwgc28gaXQgY2hvc2UgJHticmFuY2hOYW1lfS5gO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuZGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbmRpdGlvblRleHQgPSBgSXQgJHtldmVudC5kZXNjcmlwdGlvbn0gYW5kIGNob3NlICR7YnJhbmNoTmFtZX0uYDtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnJhdGlvbmFsZSkge1xuICAgICAgY29uZGl0aW9uVGV4dCA9IGBBIGRlY2lzaW9uIHdhcyBtYWRlOiAke2V2ZW50LnJhdGlvbmFsZX0sIHNvIHRoZSBwYXRoIHRha2VuIHdhcyAke2JyYW5jaE5hbWV9LmA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmRpdGlvblRleHQgPSBgQSBkZWNpc2lvbiB3YXMgbWFkZSwgYW5kIHRoZSBwYXRoIHRha2VuIHdhcyAke2JyYW5jaE5hbWV9LmA7XG4gICAgfVxuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdjb25kaXRpb24nLFxuICAgICAgdGV4dDogYFtDb25kaXRpb25dOiAke2NvbmRpdGlvblRleHR9YCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VOYW1lOiBldmVudC5kZWNpZGVyLFxuICAgICAgc3RhZ2VJZDogZGVjaWRlclN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uTmV4dCgpOiB2b2lkIHtcbiAgICAvLyBOby1vcC4gb25TdGFnZUV4ZWN1dGVkIGFscmVhZHkgaGFzIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIG5leHQgc3RhZ2UuXG4gICAgLy8gRm9yIGRlY2lkZXJzIChubyBvblN0YWdlRXhlY3V0ZWQpLCBvbkRlY2lzaW9uIGhhbmRsZXMgdGhlIGFubm91bmNlbWVudC5cbiAgfVxuXG4gIG9uRm9yayhldmVudDogRmxvd0ZvcmtFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWVzID0gZXZlbnQuY2hpbGRyZW4uam9pbignLCAnKTtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICB0eXBlOiAnZm9yaycsXG4gICAgICB0ZXh0OiBgW1BhcmFsbGVsXTogJHtldmVudC5jaGlsZHJlbi5sZW5ndGh9IHBhdGhzIHdlcmUgZXhlY3V0ZWQgaW4gcGFyYWxsZWw6ICR7bmFtZXN9LmAsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWQoZXZlbnQ6IEZsb3dTZWxlY3RlZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgbmFtZXMgPSBldmVudC5zZWxlY3RlZC5qb2luKCcsICcpO1xuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdmb3JrJyxcbiAgICAgIHRleHQ6IGBbU2VsZWN0ZWRdOiAke2V2ZW50LnNlbGVjdGVkLmxlbmd0aH0gb2YgJHtldmVudC50b3RhbH0gcGF0aHMgd2VyZSBzZWxlY3RlZDogJHtuYW1lc30uYCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25TdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICAvLyBSZXNldCBzdGFnZSBjb3VudGVyIGZvciB0aGlzIHN1YmZsb3cgc28gc3RhZ2VzIHN0YXJ0IGF0IFwiU3RhZ2UgMVwiIG9uIHJlLWVudHJ5XG4gICAgY29uc3Qgc2ZLZXkgPSBldmVudC5zdWJmbG93SWQgPz8gJyc7XG4gICAgdGhpcy5zdGFnZUNvdW50ZXJzLmRlbGV0ZShzZktleSk7XG4gICAgdGhpcy5maXJzdFN0YWdlRmxhZ3MuZGVsZXRlKHNmS2V5KTtcblxuICAgIGNvbnN0IHRleHQgPSBldmVudC5kZXNjcmlwdGlvblxuICAgICAgPyBgRW50ZXJpbmcgdGhlICR7ZXZlbnQubmFtZX0gc3ViZmxvdzogJHtldmVudC5kZXNjcmlwdGlvbn0uYFxuICAgICAgOiBgRW50ZXJpbmcgdGhlICR7ZXZlbnQubmFtZX0gc3ViZmxvdy5gO1xuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdzdWJmbG93JyxcbiAgICAgIHRleHQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uU3ViZmxvd0V4aXQoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICB0eXBlOiAnc3ViZmxvdycsXG4gICAgICB0ZXh0OiBgRXhpdGluZyB0aGUgJHtldmVudC5uYW1lfSBzdWJmbG93LmAsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uTG9vcChldmVudDogRmxvd0xvb3BFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRleHQgPSBldmVudC5kZXNjcmlwdGlvblxuICAgICAgPyBgT24gcGFzcyAke2V2ZW50Lml0ZXJhdGlvbn06ICR7ZXZlbnQuZGVzY3JpcHRpb259IGFnYWluLmBcbiAgICAgIDogYE9uIHBhc3MgJHtldmVudC5pdGVyYXRpb259IHRocm91Z2ggJHtldmVudC50YXJnZXR9LmA7XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgdHlwZTogJ2xvb3AnLFxuICAgICAgdGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25CcmVhayhldmVudDogRmxvd0JyZWFrRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICB0eXBlOiAnYnJlYWsnLFxuICAgICAgdGV4dDogYEV4ZWN1dGlvbiBzdG9wcGVkIGF0ICR7ZXZlbnQuc3RhZ2VOYW1lfS5gLFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LnN0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGVycm9ycyBmcm9tIGJvdGggY2hhbm5lbHM6XG4gICAqIC0gRmxvd1JlY29yZGVyLm9uRXJyb3IgKEZsb3dFcnJvckV2ZW50IHdpdGggbWVzc2FnZSArIHN0cnVjdHVyZWRFcnJvcilcbiAgICogLSBSZWNvcmRlci5vbkVycm9yIChFcnJvckV2ZW50IGZyb20gc2NvcGUgc3lzdGVtIOKAlCBpZ25vcmVkIGZvciBuYXJyYXRpdmUpXG4gICAqL1xuICBvbkVycm9yKGV2ZW50OiBGbG93RXJyb3JFdmVudCB8IHsgc3RhZ2VOYW1lPzogc3RyaW5nOyBtZXNzYWdlPzogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICAvLyBPbmx5IGhhbmRsZSBmbG93IGVycm9ycyAod2hpY2ggaGF2ZSBgbWVzc2FnZWAgYW5kIGBzdHJ1Y3R1cmVkRXJyb3JgKVxuICAgIGlmICh0eXBlb2YgKGV2ZW50IGFzIEZsb3dFcnJvckV2ZW50KS5tZXNzYWdlICE9PSAnc3RyaW5nJykgcmV0dXJuO1xuICAgIGNvbnN0IGZsb3dFdmVudCA9IGV2ZW50IGFzIEZsb3dFcnJvckV2ZW50O1xuXG4gICAgbGV0IHRleHQgPSBgQW4gZXJyb3Igb2NjdXJyZWQgYXQgJHtmbG93RXZlbnQuc3RhZ2VOYW1lfTogJHtmbG93RXZlbnQubWVzc2FnZX0uYDtcbiAgICBpZiAoZmxvd0V2ZW50LnN0cnVjdHVyZWRFcnJvcj8uaXNzdWVzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRldGFpbHMgPSBmbG93RXZlbnQuc3RydWN0dXJlZEVycm9yLmlzc3Vlc1xuICAgICAgICAubWFwKChpc3N1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSBpc3N1ZS5wYXRoLmxlbmd0aCA+IDAgPyBpc3N1ZS5wYXRoLmpvaW4oJy4nKSA6ICcocm9vdCknO1xuICAgICAgICAgIHJldHVybiBgJHtwYXRofTogJHtpc3N1ZS5tZXNzYWdlfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCc7ICcpO1xuICAgICAgdGV4dCArPSBgIFZhbGlkYXRpb24gaXNzdWVzOiAke2RldGFpbHN9LmA7XG4gICAgfVxuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICB0ZXh0OiBgW0Vycm9yXTogJHt0ZXh0fWAsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZmxvd0V2ZW50LnN0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IGZsb3dFdmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBmbG93RXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIE91dHB1dCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogUmV0dXJucyBzdHJ1Y3R1cmVkIGVudHJpZXMgZm9yIHByb2dyYW1tYXRpYyBjb25zdW1wdGlvbi4gKi9cbiAgZ2V0RW50cmllcygpOiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10ge1xuICAgIHJldHVybiBbLi4udGhpcy5lbnRyaWVzXTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGZvcm1hdHRlZCBuYXJyYXRpdmUgbGluZXMgKHNhbWUgb3V0cHV0IGFzIENvbWJpbmVkTmFycmF0aXZlQnVpbGRlci5idWlsZCkuICovXG4gIGdldE5hcnJhdGl2ZShpbmRlbnQgPSAnICAnKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMubWFwKChlbnRyeSkgPT4gYCR7aW5kZW50LnJlcGVhdChlbnRyeS5kZXB0aCl9JHtlbnRyeS50ZXh0fWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgZW50cmllcyBncm91cGVkIGJ5IHN1YmZsb3dJZCBmb3Igc3RydWN0dXJlZCBhY2Nlc3MuXG4gICAqIFJvb3QtbGV2ZWwgZW50cmllcyBoYXZlIHN1YmZsb3dJZCA9IHVuZGVmaW5lZC5cbiAgICovXG4gIGdldEVudHJpZXNCeVN1YmZsb3coKTogUmVjb3JkPHN0cmluZywgQ29tYmluZWROYXJyYXRpdmVFbnRyeVtdPiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10+ID0geyAnJzogW10gfTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgY29uc3Qga2V5ID0gZW50cnkuc3ViZmxvd0lkID8/ICcnO1xuICAgICAgaWYgKCFyZXN1bHRba2V5XSkgcmVzdWx0W2tleV0gPSBbXTtcbiAgICAgIHJlc3VsdFtrZXldLnB1c2goZW50cnkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqIENsZWFycyBhbGwgc3RhdGUuIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJlZm9yZSBlYWNoIHJ1bi4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5lbnRyaWVzID0gW107XG4gICAgdGhpcy5wZW5kaW5nT3BzLmNsZWFyKCk7XG4gICAgdGhpcy5zdGFnZUNvdW50ZXJzLmNsZWFyKCk7XG4gICAgdGhpcy5maXJzdFN0YWdlRmxhZ3MuY2xlYXIoKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQcml2YXRlIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIEluY3JlbWVudCBhbmQgcmV0dXJuIHRoZSBzdGFnZSBjb3VudGVyIGZvciBhIGdpdmVuIHN1YmZsb3cgKCcnID0gcm9vdCkuICovXG4gIHByaXZhdGUgaW5jcmVtZW50U3RhZ2VDb3VudGVyKHN1YmZsb3dLZXk6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc3RhZ2VDb3VudGVycy5nZXQoc3ViZmxvd0tleSkgPz8gMDtcbiAgICBjb25zdCBuZXh0ID0gY3VycmVudCArIDE7XG4gICAgdGhpcy5zdGFnZUNvdW50ZXJzLnNldChzdWJmbG93S2V5LCBuZXh0KTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyB0aGUgZmlyc3Qgc3RhZ2UgZm9yIHRoZSBnaXZlbiBzdWJmbG93LCBjb25zdW1pbmcgdGhlIGZsYWcuICovXG4gIHByaXZhdGUgY29uc3VtZUZpcnN0U3RhZ2VGbGFnKHN1YmZsb3dLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5maXJzdFN0YWdlRmxhZ3MuaGFzKHN1YmZsb3dLZXkpKSB7XG4gICAgICB0aGlzLmZpcnN0U3RhZ2VGbGFncy5zZXQoc3ViZmxvd0tleSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYnVmZmVyT3Aoc3RhZ2VOYW1lOiBzdHJpbmcsIG9wOiBPbWl0PEJ1ZmZlcmVkT3AsICdzdGVwTnVtYmVyJz4pOiB2b2lkIHtcbiAgICBsZXQgb3BzID0gdGhpcy5wZW5kaW5nT3BzLmdldChzdGFnZU5hbWUpO1xuICAgIGlmICghb3BzKSB7XG4gICAgICBvcHMgPSBbXTtcbiAgICAgIHRoaXMucGVuZGluZ09wcy5zZXQoc3RhZ2VOYW1lLCBvcHMpO1xuICAgIH1cbiAgICBvcHMucHVzaCh7IC4uLm9wLCBzdGVwTnVtYmVyOiBvcHMubGVuZ3RoICsgMSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2hPcHMoc3RhZ2VOYW1lOiBzdHJpbmcsIHN1YmZsb3dJZD86IHN0cmluZywgc3RhZ2VJZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG9wcyA9IHRoaXMucGVuZGluZ09wcy5nZXQoc3RhZ2VOYW1lKTtcbiAgICBpZiAoIW9wcyB8fCBvcHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBmb3IgKGNvbnN0IG9wIG9mIG9wcykge1xuICAgICAgY29uc3Qgc3RlcFByZWZpeCA9IHRoaXMuaW5jbHVkZVN0ZXBOdW1iZXJzID8gYFN0ZXAgJHtvcC5zdGVwTnVtYmVyfTogYCA6ICcnO1xuXG4gICAgICBsZXQgdGV4dDogc3RyaW5nO1xuICAgICAgaWYgKG9wLnR5cGUgPT09ICdyZWFkJykge1xuICAgICAgICB0ZXh0ID1cbiAgICAgICAgICB0aGlzLmluY2x1ZGVWYWx1ZXMgJiYgb3AudmFsdWVTdW1tYXJ5XG4gICAgICAgICAgICA/IGAke3N0ZXBQcmVmaXh9UmVhZCAke29wLmtleX0gPSAke29wLnZhbHVlU3VtbWFyeX1gXG4gICAgICAgICAgICA6IGAke3N0ZXBQcmVmaXh9UmVhZCAke29wLmtleX1gO1xuICAgICAgfSBlbHNlIGlmIChvcC5vcGVyYXRpb24gPT09ICdkZWxldGUnKSB7XG4gICAgICAgIHRleHQgPSBgJHtzdGVwUHJlZml4fURlbGV0ZSAke29wLmtleX1gO1xuICAgICAgfSBlbHNlIGlmIChvcC5vcGVyYXRpb24gPT09ICd1cGRhdGUnKSB7XG4gICAgICAgIHRleHQgPSB0aGlzLmluY2x1ZGVWYWx1ZXNcbiAgICAgICAgICA/IGAke3N0ZXBQcmVmaXh9VXBkYXRlICR7b3Aua2V5fSA9ICR7b3AudmFsdWVTdW1tYXJ5fWBcbiAgICAgICAgICA6IGAke3N0ZXBQcmVmaXh9VXBkYXRlICR7b3Aua2V5fWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0ID0gdGhpcy5pbmNsdWRlVmFsdWVzXG4gICAgICAgICAgPyBgJHtzdGVwUHJlZml4fVdyaXRlICR7b3Aua2V5fSA9ICR7b3AudmFsdWVTdW1tYXJ5fWBcbiAgICAgICAgICA6IGAke3N0ZXBQcmVmaXh9V3JpdGUgJHtvcC5rZXl9YDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgICB0eXBlOiAnc3RlcCcsXG4gICAgICAgIHRleHQsXG4gICAgICAgIGRlcHRoOiAxLFxuICAgICAgICBzdGFnZU5hbWUsXG4gICAgICAgIHN0YWdlSWQsXG4gICAgICAgIHN0ZXBOdW1iZXI6IG9wLnN0ZXBOdW1iZXIsXG4gICAgICAgIHN1YmZsb3dJZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucGVuZGluZ09wcy5kZWxldGUoc3RhZ2VOYW1lKTtcbiAgfVxufVxuXG4vLyDilIDilIAgVmFsdWUgc3VtbWFyaXplciAoc2FtZSBsb2dpYyBhcyBOYXJyYXRpdmVSZWNvcmRlcikg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIHN1bW1hcml6ZVZhbHVlKHZhbHVlOiB1bmtub3duLCBtYXhMZW46IG51bWJlcik6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUubGVuZ3RoIDw9IG1heExlbiA/IGBcIiR7dmFsdWV9XCJgIDogYFwiJHt2YWx1ZS5zbGljZSgwLCBtYXhMZW4gLSAzKX0uLi5cImA7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUubGVuZ3RoID09PSAwID8gJ1tdJyA6IGAoJHt2YWx1ZS5sZW5ndGh9IGl0ZW0ke3ZhbHVlLmxlbmd0aCA+IDEgPyAncycgOiAnJ30pYDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gJ3t9JztcbiAgICBjb25zdCBwcmV2aWV3ID0ga2V5cy5zbGljZSgwLCA0KS5qb2luKCcsICcpO1xuICAgIGNvbnN0IHN1ZmZpeCA9IGtleXMubGVuZ3RoID4gNCA/IGAsIC4uLiAoJHtrZXlzLmxlbmd0aH0ga2V5cylgIDogJyc7XG4gICAgY29uc3QgcmVzdWx0ID0gYHske3ByZXZpZXd9JHtzdWZmaXh9fWA7XG4gICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPD0gbWF4TGVuID8gcmVzdWx0IDogYHske2tleXMubGVuZ3RofSBrZXlzfWA7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG4iXX0=
|
|
@@ -188,4 +188,4 @@ class CombinedNarrativeBuilder {
|
|
|
188
188
|
}
|
|
189
189
|
}
|
|
190
190
|
exports.CombinedNarrativeBuilder = CombinedNarrativeBuilder;
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWROYXJyYXRpdmVCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL0NvbWJpbmVkTmFycmF0aXZlQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOzs7QUF3QkgsOEVBQThFO0FBQzlFLFVBQVU7QUFDViw4RUFBOEU7QUFFOUUsTUFBYSx3QkFBd0I7SUFHbkMsWUFBWSxPQUFrQzs7UUFDNUMsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiLGtCQUFrQixFQUFFLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGtCQUFrQixtQ0FBSSxJQUFJO1lBQ3ZELGFBQWEsRUFBRSxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxhQUFhLG1DQUFJLElBQUk7WUFDN0MsTUFBTSxFQUFFLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE1BQU0sbUNBQUksSUFBSTtTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxZQUFZLENBQ1YsYUFBdUIsRUFDdkIsUUFBMkIsRUFDM0Isa0JBQTJDOztRQUUzQyxNQUFNLE9BQU8sR0FBNkIsRUFBRSxDQUFDO1FBQzdDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ3JDLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUVyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzlDLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFB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RSxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUM7WUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3ZFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBektELDREQXlLQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tYmluZWROYXJyYXRpdmVCdWlsZGVyIOKAlCBNZXJnZXMgZmxvdy1sZXZlbCBuYXJyYXRpdmUgd2l0aCBkYXRhLWxldmVsIG9wZXJhdGlvbnMuXG4gKlxuICogQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3IgY2FwdHVyZXMgRkxPVyDigJQgd2hhdCBzdGFnZXMgcmFuLCB3aGljaCBicmFuY2hlcyB3ZXJlIHRha2VuLlxuICogTmFycmF0aXZlUmVjb3JkZXIgKHNjb3BlLykgY2FwdHVyZXMgREFUQSDigJQgd2hhdCB2YWx1ZXMgd2VyZSByZWFkLCB3cml0dGVuLCB1cGRhdGVkLlxuICpcbiAqIFRoaXMgYnVpbGRlciB3ZWF2ZXMgYm90aCBpbnRvIGEgc2luZ2xlIHVuaWZpZWQgbmFycmF0aXZlOlxuICogICBTdGFnZSAxOiBcIlJlY2VpdmUgQXBwbGljYXRpb25cIlxuICogICAgIFN0ZXAgMTogV3JpdGUgYXBwbGljYW50TmFtZSA9ICdCb2InXG4gKiAgIFtDb25kaXRpb25dOiByaXNrIHRpZXIgaXMgaGlnaCDihpIgY2hvc2UgXCJSZWplY3QgQXBwbGljYXRpb25cIlxuICpcbiAqIEBkZXByZWNhdGVkIFNpbmNlIDAuOS54IOKAlCBTdXBlcnNlZGVkIGJ5IHtAbGluayBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyfSB3aGljaCBidWlsZHMgdGhlXG4gKiBjb21iaW5lZCBuYXJyYXRpdmUgaW5saW5lIGR1cmluZyB0cmF2ZXJzYWwgKG5vIHBvc3QtcHJvY2Vzc2luZykuIFRoaXMgY2xhc3MgaXMgcmV0YWluZWQgZm9yXG4gKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggY29uc3VtZXJzIHRoYXQgdXNlIENvbWJpbmVkTmFycmF0aXZlQnVpbGRlciBkaXJlY3RseS5cbiAqIFdpbGwgYmUgcmVtb3ZlZCBpbiB2MS4wLlxuICovXG5cbmltcG9ydCB0eXBlIHsgTmFycmF0aXZlUmVjb3JkZXIsIFN0YWdlTmFycmF0aXZlRGF0YSB9IGZyb20gJy4uLy4uL3Njb3BlL3JlY29yZGVycy9OYXJyYXRpdmVSZWNvcmRlci5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVHlwZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVkTmFycmF0aXZlRW50cnkge1xuICB0eXBlOiAnc3RhZ2UnIHwgJ3N0ZXAnIHwgJ2NvbmRpdGlvbicgfCAnZm9yaycgfCAnc3ViZmxvdycgfCAnbG9vcCcgfCAnYnJlYWsnIHwgJ2Vycm9yJztcbiAgdGV4dDogc3RyaW5nO1xuICBkZXB0aDogbnVtYmVyO1xuICBzdGFnZU5hbWU/OiBzdHJpbmc7XG4gIHN0ZXBOdW1iZXI/OiBudW1iZXI7XG4gIC8qKiBTdWJmbG93IElEIHdoZW4gdGhpcyBlbnRyeSB3YXMgZ2VuZXJhdGVkIGluc2lkZSBhIHN1YmZsb3cuIFVuZGVmaW5lZCBmb3Igcm9vdC1sZXZlbC4gKi9cbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVkTmFycmF0aXZlT3B0aW9ucyB7XG4gIGluY2x1ZGVTdGVwTnVtYmVycz86IGJvb2xlYW47XG4gIGluY2x1ZGVWYWx1ZXM/OiBib29sZWFuO1xuICBpbmRlbnQ/OiBzdHJpbmc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQnVpbGRlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjbGFzcyBDb21iaW5lZE5hcnJhdGl2ZUJ1aWxkZXIge1xuICBwcml2YXRlIG9wdGlvbnM6IFJlcXVpcmVkPENvbWJpbmVkTmFycmF0aXZlT3B0aW9ucz47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENvbWJpbmVkTmFycmF0aXZlT3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgIGluY2x1ZGVTdGVwTnVtYmVyczogb3B0aW9ucz8uaW5jbHVkZVN0ZXBOdW1iZXJzID8/IHRydWUsXG4gICAgICBpbmNsdWRlVmFsdWVzOiBvcHRpb25zPy5pbmNsdWRlVmFsdWVzID8/IHRydWUsXG4gICAgICBpbmRlbnQ6IG9wdGlvbnM/LmluZGVudCA/PyAnICAnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGZsb3dTZW50ZW5jZXMgIFNlbnRlbmNlcyBmcm9tIHRoZSBmbG93IHJlY29yZGVyIChOYXJyYXRpdmVGbG93UmVjb3JkZXIuZ2V0U2VudGVuY2VzKCkpLlxuICAgKiBAcGFyYW0gcmVjb3JkZXIgICAgICAgRGF0YS1sZXZlbCByZWNvcmRlciB3aXRoIHBlci1zdGFnZSByZWFkL3dyaXRlIG9wZXJhdGlvbnMuXG4gICAqIEBwYXJhbSBzZW50ZW5jZVN0YWdlTmFtZXMgIE9wdGlvbmFsIHBhcmFsbGVsIGFycmF5IG9mIGFjdHVhbCBzdGFnZSBuYW1lcyBmb3IgZWFjaCBzZW50ZW5jZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnJvbSBOYXJyYXRpdmVGbG93UmVjb3JkZXIuZ2V0U2VudGVuY2VTdGFnZU5hbWVzKCkpLiBXaGVuIHByb3ZpZGVkLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVzIGRpcmVjdCBsb29rdXAgaW5zdGVhZCBvZiBmcmFnaWxlIHJlZ2V4LWJhc2VkIG1hdGNoaW5nLlxuICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXJ9IGluc3RlYWQsIHdoaWNoIGJ1aWxkcyBlbnRyaWVzIGlubGluZSBkdXJpbmcgdHJhdmVyc2FsLlxuICAgKi9cbiAgYnVpbGRFbnRyaWVzKFxuICAgIGZsb3dTZW50ZW5jZXM6IHN0cmluZ1tdLFxuICAgIHJlY29yZGVyOiBOYXJyYXRpdmVSZWNvcmRlcixcbiAgICBzZW50ZW5jZVN0YWdlTmFtZXM/OiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdLFxuICApOiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10ge1xuICAgIGNvbnN0IGVudHJpZXM6IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IHN0YWdlRGF0YSA9IHJlY29yZGVyLmdldFN0YWdlRGF0YSgpO1xuICAgIGNvbnN0IHVzZWRTdGFnZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBsZXQgc3RhZ2VDb3VudGVyID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmxvd1NlbnRlbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2VudGVuY2UgPSBmbG93U2VudGVuY2VzW2ldO1xuICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZVNlbnRlbmNlKHNlbnRlbmNlKTtcbiAgICAgIC8vIFByZWZlciB0aGUgYWN0dWFsIHN0YWdlIG5hbWUgZnJvbSB0aGUgcmVjb3JkZXIgb3ZlciByZWdleC1wYXJzZWQgZGVzY3JpcHRpb24gdGV4dFxuICAgICAgY29uc3QgcmVzb2x2ZWRTdGFnZU5hbWUgPSBzZW50ZW5jZVN0YWdlTmFtZXM/LltpXSA/PyBwYXJzZWQuc3RhZ2VOYW1lO1xuXG4gICAgICBpZiAocGFyc2VkLnR5cGUgPT09ICdzdGFnZScpIHtcbiAgICAgICAgc3RhZ2VDb3VudGVyKys7XG4gICAgICAgIGVudHJpZXMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ3N0YWdlJyxcbiAgICAgICAgICB0ZXh0OiBgU3RhZ2UgJHtzdGFnZUNvdW50ZXJ9OiAke3NlbnRlbmNlfWAsXG4gICAgICAgICAgZGVwdGg6IDAsXG4gICAgICAgICAgc3RhZ2VOYW1lOiByZXNvbHZlZFN0YWdlTmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXNvbHZlZFN0YWdlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZpbmRTdGFnZURhdGEocmVzb2x2ZWRTdGFnZU5hbWUsIHN0YWdlRGF0YSk7XG4gICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHVzZWRTdGFnZXMuYWRkKGRhdGEuc3RhZ2VOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuYWRkU3RlcEVudHJpZXMoZW50cmllcywgZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlZC50eXBlID09PSAnY29uZGl0aW9uJykge1xuICAgICAgICBlbnRyaWVzLnB1c2goeyB0eXBlOiAnY29uZGl0aW9uJywgdGV4dDogYFtDb25kaXRpb25dOiAke3NlbnRlbmNlfWAsIGRlcHRoOiAwLCBzdGFnZU5hbWU6IHJlc29sdmVkU3RhZ2VOYW1lIH0pO1xuICAgICAgICAvLyBGb3IgY29uZGl0aW9ucywgYWxzbyBsb29rIHVwIHRoZSBjaG9zZW4gYnJhbmNoJ3MgZGF0YVxuICAgICAgICBpZiAocGFyc2VkLnN0YWdlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZpbmRTdGFnZURhdGEocGFyc2VkLnN0YWdlTmFtZSwgc3RhZ2VEYXRhKTtcbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdXNlZFN0YWdlcy5hZGQoZGF0YS5zdGFnZU5hbWUpO1xuICAgICAgICAgICAgdGhpcy5hZGRTdGVwRW50cmllcyhlbnRyaWVzLCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWxzbyBtYXJrIHRoZSBkZWNpZGVyIHN0YWdlIGl0c2VsZiBhcyB1c2VkICh0aGUgcmVzb2x2ZWRTdGFnZU5hbWUpXG4gICAgICAgIGlmIChyZXNvbHZlZFN0YWdlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZpbmRTdGFnZURhdGEocmVzb2x2ZWRTdGFnZU5hbWUsIHN0YWdlRGF0YSk7XG4gICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHVzZWRTdGFnZXMuYWRkKGRhdGEuc3RhZ2VOYW1lKTtcbiAgICAgICAgICAgIC8vIE9ubHkgYWRkIHN0ZXAgZW50cmllcyBpZiB0aGUgY2hvc2VuIGJyYW5jaCBkaWRuJ3QgYWxyZWFkeSBjb3ZlciBpdFxuICAgICAgICAgICAgaWYgKCFwYXJzZWQuc3RhZ2VOYW1lIHx8IHBhcnNlZC5zdGFnZU5hbWUgIT09IHJlc29sdmVkU3RhZ2VOYW1lKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWRkU3RlcEVudHJpZXMoZW50cmllcywgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlZC50eXBlID09PSAnZm9yaycpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHsgdHlwZTogJ2ZvcmsnLCB0ZXh0OiBgW1BhcmFsbGVsXTogJHtzZW50ZW5jZX1gLCBkZXB0aDogMCB9KTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VkLnR5cGUgPT09ICdzdWJmbG93Jykge1xuICAgICAgICBlbnRyaWVzLnB1c2goeyB0eXBlOiAnc3ViZmxvdycsIHRleHQ6IHNlbnRlbmNlLCBkZXB0aDogMCB9KTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VkLnR5cGUgPT09ICdsb29wJykge1xuICAgICAgICBlbnRyaWVzLnB1c2goeyB0eXBlOiAnbG9vcCcsIHRleHQ6IHNlbnRlbmNlLCBkZXB0aDogMCB9KTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VkLnR5cGUgPT09ICdicmVhaycpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHsgdHlwZTogJ2JyZWFrJywgdGV4dDogc2VudGVuY2UsIGRlcHRoOiAwIH0pO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZWQudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICBlbnRyaWVzLnB1c2goeyB0eXBlOiAnZXJyb3InLCB0ZXh0OiBgW0Vycm9yXTogJHtzZW50ZW5jZX1gLCBkZXB0aDogMCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgc3RhZ2VzIHdpdGggb3BlcmF0aW9ucyB0aGF0IHdlcmVuJ3QgcmVmZXJlbmNlZCBpbiBmbG93IHNlbnRlbmNlc1xuICAgIGZvciAoY29uc3QgW3N0YWdlTmFtZSwgZGF0YV0gb2YgQXJyYXkuZnJvbShzdGFnZURhdGEuZW50cmllcygpKSkge1xuICAgICAgaWYgKCF1c2VkU3RhZ2VzLmhhcyhzdGFnZU5hbWUpICYmIGRhdGEub3BlcmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN0YWdlQ291bnRlcisrO1xuICAgICAgICBlbnRyaWVzLnB1c2goeyB0eXBlOiAnc3RhZ2UnLCB0ZXh0OiBgU3RhZ2UgJHtzdGFnZUNvdW50ZXJ9OiAke3N0YWdlTmFtZX1gLCBkZXB0aDogMCwgc3RhZ2VOYW1lIH0pO1xuICAgICAgICB0aGlzLmFkZFN0ZXBFbnRyaWVzKGVudHJpZXMsIGRhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbnRyaWVzO1xuICB9XG5cbiAgYnVpbGQoZmxvd1NlbnRlbmNlczogc3RyaW5nW10sIHJlY29yZGVyOiBOYXJyYXRpdmVSZWNvcmRlciwgc2VudGVuY2VTdGFnZU5hbWVzPzogKHN0cmluZyB8IHVuZGVmaW5lZClbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZEVudHJpZXMoZmxvd1NlbnRlbmNlcywgcmVjb3JkZXIsIHNlbnRlbmNlU3RhZ2VOYW1lcykubWFwKChlbnRyeSkgPT4ge1xuICAgICAgY29uc3QgaW5kZW50ID0gdGhpcy5vcHRpb25zLmluZGVudC5yZXBlYXQoZW50cnkuZGVwdGgpO1xuICAgICAgcmV0dXJuIGAke2luZGVudH0ke2VudHJ5LnRleHR9YDtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQcml2YXRlIGhlbHBlcnMg4pSA4pSAXG5cbiAgcHJpdmF0ZSBhZGRTdGVwRW50cmllcyhlbnRyaWVzOiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10sIGRhdGE6IFN0YWdlTmFycmF0aXZlRGF0YSk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgb3Agb2YgZGF0YS5vcGVyYXRpb25zKSB7XG4gICAgICBjb25zdCBzdGVwUHJlZml4ID0gdGhpcy5vcHRpb25zLmluY2x1ZGVTdGVwTnVtYmVycyAmJiBvcC5zdGVwTnVtYmVyID8gYFN0ZXAgJHtvcC5zdGVwTnVtYmVyfTogYCA6ICcnO1xuXG4gICAgICBsZXQgdGV4dDogc3RyaW5nO1xuICAgICAgaWYgKG9wLnR5cGUgPT09ICdyZWFkJykge1xuICAgICAgICB0ZXh0ID1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMuaW5jbHVkZVZhbHVlcyAmJiBvcC52YWx1ZVN1bW1hcnlcbiAgICAgICAgICAgID8gYCR7c3RlcFByZWZpeH1SZWFkICR7b3Aua2V5fSA9ICR7b3AudmFsdWVTdW1tYXJ5fWBcbiAgICAgICAgICAgIDogYCR7c3RlcFByZWZpeH1SZWFkICR7b3Aua2V5fWA7XG4gICAgICB9IGVsc2UgaWYgKG9wLm9wZXJhdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgdGV4dCA9IGAke3N0ZXBQcmVmaXh9RGVsZXRlICR7b3Aua2V5fWA7XG4gICAgICB9IGVsc2UgaWYgKG9wLm9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgdGV4dCA9IHRoaXMub3B0aW9ucy5pbmNsdWRlVmFsdWVzXG4gICAgICAgICAgPyBgJHtzdGVwUHJlZml4fVVwZGF0ZSAke29wLmtleX0gPSAke29wLnZhbHVlU3VtbWFyeX1gXG4gICAgICAgICAgOiBgJHtzdGVwUHJlZml4fVVwZGF0ZSAke29wLmtleX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCA9IHRoaXMub3B0aW9ucy5pbmNsdWRlVmFsdWVzXG4gICAgICAgICAgPyBgJHtzdGVwUHJlZml4fVdyaXRlICR7b3Aua2V5fSA9ICR7b3AudmFsdWVTdW1tYXJ5fWBcbiAgICAgICAgICA6IGAke3N0ZXBQcmVmaXh9V3JpdGUgJHtvcC5rZXl9YDtcbiAgICAgIH1cblxuICAgICAgZW50cmllcy5wdXNoKHsgdHlwZTogJ3N0ZXAnLCB0ZXh0LCBkZXB0aDogMSwgc3RhZ2VOYW1lOiBkYXRhLnN0YWdlTmFtZSwgc3RlcE51bWJlcjogb3Auc3RlcE51bWJlciB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmRTdGFnZURhdGEobmFtZTogc3RyaW5nLCBzdGFnZURhdGE6IE1hcDxzdHJpbmcsIFN0YWdlTmFycmF0aXZlRGF0YT4pOiBTdGFnZU5hcnJhdGl2ZURhdGEgfCB1bmRlZmluZWQge1xuICAgIGlmIChzdGFnZURhdGEuaGFzKG5hbWUpKSByZXR1cm4gc3RhZ2VEYXRhLmdldChuYW1lKTtcbiAgICBmb3IgKGNvbnN0IFtzdGFnZU5hbWUsIGRhdGFdIG9mIEFycmF5LmZyb20oc3RhZ2VEYXRhLmVudHJpZXMoKSkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgc3RhZ2VOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgICBuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc3RhZ2VOYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlU2VudGVuY2Uoc2VudGVuY2U6IHN0cmluZyk6IHsgdHlwZTogc3RyaW5nOyBzdGFnZU5hbWU/OiBzdHJpbmcgfSB7XG4gICAgaWYgKHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ1RoZSBwcm9jZXNzIGJlZ2FuJykpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gc2VudGVuY2UubWF0Y2goL1RoZSBwcm9jZXNzIGJlZ2FuKD86OiAoLispfCB3aXRoICguKykpXFwuLyk7XG4gICAgICByZXR1cm4geyB0eXBlOiAnc3RhZ2UnLCBzdGFnZU5hbWU6IChtYXRjaD8uWzFdID8/IG1hdGNoPy5bMl0pPy50cmltKCkgfTtcbiAgICB9XG4gICAgaWYgKHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ05leHQnKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBzZW50ZW5jZS5tYXRjaCgvTmV4dCg/Oiw/IGl0IG1vdmVkIG9uIHRvICguKyl8IHN0ZXA6ICguKykpXFwuLyk7XG4gICAgICByZXR1cm4geyB0eXBlOiAnc3RhZ2UnLCBzdGFnZU5hbWU6IChtYXRjaD8uWzFdID8/IG1hdGNoPy5bMl0pPy50cmltKCkgfTtcbiAgICB9XG4gICAgaWYgKHNlbnRlbmNlLmluY2x1ZGVzKCdkZWNpc2lvbiB3YXMgbWFkZScpIHx8IHNlbnRlbmNlLmluY2x1ZGVzKCdpdCBjaG9zZScpIHx8IHNlbnRlbmNlLmluY2x1ZGVzKCdzbyBpdCBjaG9zZScpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHNlbnRlbmNlLm1hdGNoKC9jaG9zZSAoLispXFwuLyk7XG4gICAgICByZXR1cm4geyB0eXBlOiAnY29uZGl0aW9uJywgc3RhZ2VOYW1lOiBtYXRjaD8uWzFdPy50cmltKCkgfTtcbiAgICB9XG4gICAgaWYgKHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ0l0ICcpICYmIHNlbnRlbmNlLmluY2x1ZGVzKCdjaG9zZScpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHNlbnRlbmNlLm1hdGNoKC9jaG9zZSAoLispXFwuLyk7XG4gICAgICByZXR1cm4geyB0eXBlOiAnY29uZGl0aW9uJywgc3RhZ2VOYW1lOiBtYXRjaD8uWzFdPy50cmltKCkgfTtcbiAgICB9XG4gICAgaWYgKHNlbnRlbmNlLmluY2x1ZGVzKCdwYXRocyB3ZXJlIGV4ZWN1dGVkIGluIHBhcmFsbGVsJykgfHwgc2VudGVuY2UuaW5jbHVkZXMoJ3BhdGhzIHdlcmUgc2VsZWN0ZWQnKSlcbiAgICAgIHJldHVybiB7IHR5cGU6ICdmb3JrJyB9O1xuICAgIGlmIChzZW50ZW5jZS5zdGFydHNXaXRoKCdFbnRlcmluZycpIHx8IHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ0V4aXRpbmcnKSkgcmV0dXJuIHsgdHlwZTogJ3N1YmZsb3cnIH07XG4gICAgaWYgKHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ09uIHBhc3MnKSkgcmV0dXJuIHsgdHlwZTogJ2xvb3AnIH07XG4gICAgaWYgKHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ0V4ZWN1dGlvbiBzdG9wcGVkJykpIHJldHVybiB7IHR5cGU6ICdicmVhaycgfTtcbiAgICBpZiAoc2VudGVuY2Uuc3RhcnRzV2l0aCgnQW4gZXJyb3Igb2NjdXJyZWQnKSkgcmV0dXJuIHsgdHlwZTogJ2Vycm9yJyB9O1xuICAgIHJldHVybiB7IHR5cGU6ICdzdGFnZScgfTtcbiAgfVxufVxuIl19
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWROYXJyYXRpdmVCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL0NvbWJpbmVkTmFycmF0aXZlQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOzs7QUEwQkgsOEVBQThFO0FBQzlFLFVBQVU7QUFDViw4RUFBOEU7QUFFOUUsTUFBYSx3QkFBd0I7SUFHbkMsWUFBWSxPQUFrQzs7UUFDNUMsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiLGtCQUFrQixFQUFFLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGtCQUFrQixtQ0FBSSxJQUFJO1lBQ3ZELGFBQWEsRUFBRSxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxhQUFhLG1DQUFJLElBQUk7WUFDN0MsTUFBTSxFQUFFLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE1BQU0sbUNBQUksSUFBSTtTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxZQUFZLENBQ1YsYUFBdUIsRUFDdkIsUUFBMkIsRUFDM0Isa0JBQTJDOztRQUUzQyxNQUFNLE9BQU8sR0FBNkIsRUFBRSxDQUFDO1FBQzdDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ3JDLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUVyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzlDLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFB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RSxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUM7WUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3ZFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBektELDREQXlLQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tYmluZWROYXJyYXRpdmVCdWlsZGVyIOKAlCBNZXJnZXMgZmxvdy1sZXZlbCBuYXJyYXRpdmUgd2l0aCBkYXRhLWxldmVsIG9wZXJhdGlvbnMuXG4gKlxuICogQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3IgY2FwdHVyZXMgRkxPVyDigJQgd2hhdCBzdGFnZXMgcmFuLCB3aGljaCBicmFuY2hlcyB3ZXJlIHRha2VuLlxuICogTmFycmF0aXZlUmVjb3JkZXIgKHNjb3BlLykgY2FwdHVyZXMgREFUQSDigJQgd2hhdCB2YWx1ZXMgd2VyZSByZWFkLCB3cml0dGVuLCB1cGRhdGVkLlxuICpcbiAqIFRoaXMgYnVpbGRlciB3ZWF2ZXMgYm90aCBpbnRvIGEgc2luZ2xlIHVuaWZpZWQgbmFycmF0aXZlOlxuICogICBTdGFnZSAxOiBcIlJlY2VpdmUgQXBwbGljYXRpb25cIlxuICogICAgIFN0ZXAgMTogV3JpdGUgYXBwbGljYW50TmFtZSA9ICdCb2InXG4gKiAgIFtDb25kaXRpb25dOiByaXNrIHRpZXIgaXMgaGlnaCDihpIgY2hvc2UgXCJSZWplY3QgQXBwbGljYXRpb25cIlxuICpcbiAqIEBkZXByZWNhdGVkIFNpbmNlIDAuOS54IOKAlCBTdXBlcnNlZGVkIGJ5IHtAbGluayBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyfSB3aGljaCBidWlsZHMgdGhlXG4gKiBjb21iaW5lZCBuYXJyYXRpdmUgaW5saW5lIGR1cmluZyB0cmF2ZXJzYWwgKG5vIHBvc3QtcHJvY2Vzc2luZykuIFRoaXMgY2xhc3MgaXMgcmV0YWluZWQgZm9yXG4gKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggY29uc3VtZXJzIHRoYXQgdXNlIENvbWJpbmVkTmFycmF0aXZlQnVpbGRlciBkaXJlY3RseS5cbiAqIFdpbGwgYmUgcmVtb3ZlZCBpbiB2MS4wLlxuICovXG5cbmltcG9ydCB0eXBlIHsgTmFycmF0aXZlUmVjb3JkZXIsIFN0YWdlTmFycmF0aXZlRGF0YSB9IGZyb20gJy4uLy4uL3Njb3BlL3JlY29yZGVycy9OYXJyYXRpdmVSZWNvcmRlci5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVHlwZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVkTmFycmF0aXZlRW50cnkge1xuICB0eXBlOiAnc3RhZ2UnIHwgJ3N0ZXAnIHwgJ2NvbmRpdGlvbicgfCAnZm9yaycgfCAnc3ViZmxvdycgfCAnbG9vcCcgfCAnYnJlYWsnIHwgJ2Vycm9yJztcbiAgdGV4dDogc3RyaW5nO1xuICBkZXB0aDogbnVtYmVyO1xuICBzdGFnZU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBTdGFibGUgc3RhZ2UgaWRlbnRpZmllciBmcm9tIHRoZSBidWlsZGVyIChtYXRjaGVzIHNwZWMgbm9kZSBpZCkuIFVzZSBmb3IgVUkgc3luYy4gKi9cbiAgc3RhZ2VJZD86IHN0cmluZztcbiAgc3RlcE51bWJlcj86IG51bWJlcjtcbiAgLyoqIFN1YmZsb3cgSUQgd2hlbiB0aGlzIGVudHJ5IHdhcyBnZW5lcmF0ZWQgaW5zaWRlIGEgc3ViZmxvdy4gVW5kZWZpbmVkIGZvciByb290LWxldmVsLiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZWROYXJyYXRpdmVPcHRpb25zIHtcbiAgaW5jbHVkZVN0ZXBOdW1iZXJzPzogYm9vbGVhbjtcbiAgaW5jbHVkZVZhbHVlcz86IGJvb2xlYW47XG4gIGluZGVudD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCdWlsZGVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNsYXNzIENvbWJpbmVkTmFycmF0aXZlQnVpbGRlciB7XG4gIHByaXZhdGUgb3B0aW9uczogUmVxdWlyZWQ8Q29tYmluZWROYXJyYXRpdmVPcHRpb25zPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQ29tYmluZWROYXJyYXRpdmVPcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgaW5jbHVkZVN0ZXBOdW1iZXJzOiBvcHRpb25zPy5pbmNsdWRlU3RlcE51bWJlcnMgPz8gdHJ1ZSxcbiAgICAgIGluY2x1ZGVWYWx1ZXM6IG9wdGlvbnM/LmluY2x1ZGVWYWx1ZXMgPz8gdHJ1ZSxcbiAgICAgIGluZGVudDogb3B0aW9ucz8uaW5kZW50ID8/ICcgICcsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZmxvd1NlbnRlbmNlcyAgU2VudGVuY2VzIGZyb20gdGhlIGZsb3cgcmVjb3JkZXIgKE5hcnJhdGl2ZUZsb3dSZWNvcmRlci5nZXRTZW50ZW5jZXMoKSkuXG4gICAqIEBwYXJhbSByZWNvcmRlciAgICAgICBEYXRhLWxldmVsIHJlY29yZGVyIHdpdGggcGVyLXN0YWdlIHJlYWQvd3JpdGUgb3BlcmF0aW9ucy5cbiAgICogQHBhcmFtIHNlbnRlbmNlU3RhZ2VOYW1lcyAgT3B0aW9uYWwgcGFyYWxsZWwgYXJyYXkgb2YgYWN0dWFsIHN0YWdlIG5hbWVzIGZvciBlYWNoIHNlbnRlbmNlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcm9tIE5hcnJhdGl2ZUZsb3dSZWNvcmRlci5nZXRTZW50ZW5jZVN0YWdlTmFtZXMoKSkuIFdoZW4gcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZXMgZGlyZWN0IGxvb2t1cCBpbnN0ZWFkIG9mIGZyYWdpbGUgcmVnZXgtYmFzZWQgbWF0Y2hpbmcuXG4gICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlcn0gaW5zdGVhZCwgd2hpY2ggYnVpbGRzIGVudHJpZXMgaW5saW5lIGR1cmluZyB0cmF2ZXJzYWwuXG4gICAqL1xuICBidWlsZEVudHJpZXMoXG4gICAgZmxvd1NlbnRlbmNlczogc3RyaW5nW10sXG4gICAgcmVjb3JkZXI6IE5hcnJhdGl2ZVJlY29yZGVyLFxuICAgIHNlbnRlbmNlU3RhZ2VOYW1lcz86IChzdHJpbmcgfCB1bmRlZmluZWQpW10sXG4gICk6IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXSB7XG4gICAgY29uc3QgZW50cmllczogQ29tYmluZWROYXJyYXRpdmVFbnRyeVtdID0gW107XG4gICAgY29uc3Qgc3RhZ2VEYXRhID0gcmVjb3JkZXIuZ2V0U3RhZ2VEYXRhKCk7XG4gICAgY29uc3QgdXNlZFN0YWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGxldCBzdGFnZUNvdW50ZXIgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbG93U2VudGVuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzZW50ZW5jZSA9IGZsb3dTZW50ZW5jZXNbaV07XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlU2VudGVuY2Uoc2VudGVuY2UpO1xuICAgICAgLy8gUHJlZmVyIHRoZSBhY3R1YWwgc3RhZ2UgbmFtZSBmcm9tIHRoZSByZWNvcmRlciBvdmVyIHJlZ2V4LXBhcnNlZCBkZXNjcmlwdGlvbiB0ZXh0XG4gICAgICBjb25zdCByZXNvbHZlZFN0YWdlTmFtZSA9IHNlbnRlbmNlU3RhZ2VOYW1lcz8uW2ldID8/IHBhcnNlZC5zdGFnZU5hbWU7XG5cbiAgICAgIGlmIChwYXJzZWQudHlwZSA9PT0gJ3N0YWdlJykge1xuICAgICAgICBzdGFnZUNvdW50ZXIrKztcbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnc3RhZ2UnLFxuICAgICAgICAgIHRleHQ6IGBTdGFnZSAke3N0YWdlQ291bnRlcn06ICR7c2VudGVuY2V9YCxcbiAgICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgICBzdGFnZU5hbWU6IHJlc29sdmVkU3RhZ2VOYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlc29sdmVkU3RhZ2VOYW1lKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZmluZFN0YWdlRGF0YShyZXNvbHZlZFN0YWdlTmFtZSwgc3RhZ2VEYXRhKTtcbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdXNlZFN0YWdlcy5hZGQoZGF0YS5zdGFnZU5hbWUpO1xuICAgICAgICAgICAgdGhpcy5hZGRTdGVwRW50cmllcyhlbnRyaWVzLCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGFyc2VkLnR5cGUgPT09ICdjb25kaXRpb24nKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7IHR5cGU6ICdjb25kaXRpb24nLCB0ZXh0OiBgW0NvbmRpdGlvbl06ICR7c2VudGVuY2V9YCwgZGVwdGg6IDAsIHN0YWdlTmFtZTogcmVzb2x2ZWRTdGFnZU5hbWUgfSk7XG4gICAgICAgIC8vIEZvciBjb25kaXRpb25zLCBhbHNvIGxvb2sgdXAgdGhlIGNob3NlbiBicmFuY2gncyBkYXRhXG4gICAgICAgIGlmIChwYXJzZWQuc3RhZ2VOYW1lKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZmluZFN0YWdlRGF0YShwYXJzZWQuc3RhZ2VOYW1lLCBzdGFnZURhdGEpO1xuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB1c2VkU3RhZ2VzLmFkZChkYXRhLnN0YWdlTmFtZSk7XG4gICAgICAgICAgICB0aGlzLmFkZFN0ZXBFbnRyaWVzKGVudHJpZXMsIGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBBbHNvIG1hcmsgdGhlIGRlY2lkZXIgc3RhZ2UgaXRzZWxmIGFzIHVzZWQgKHRoZSByZXNvbHZlZFN0YWdlTmFtZSlcbiAgICAgICAgaWYgKHJlc29sdmVkU3RhZ2VOYW1lKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZmluZFN0YWdlRGF0YShyZXNvbHZlZFN0YWdlTmFtZSwgc3RhZ2VEYXRhKTtcbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdXNlZFN0YWdlcy5hZGQoZGF0YS5zdGFnZU5hbWUpO1xuICAgICAgICAgICAgLy8gT25seSBhZGQgc3RlcCBlbnRyaWVzIGlmIHRoZSBjaG9zZW4gYnJhbmNoIGRpZG4ndCBhbHJlYWR5IGNvdmVyIGl0XG4gICAgICAgICAgICBpZiAoIXBhcnNlZC5zdGFnZU5hbWUgfHwgcGFyc2VkLnN0YWdlTmFtZSAhPT0gcmVzb2x2ZWRTdGFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5hZGRTdGVwRW50cmllcyhlbnRyaWVzLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGFyc2VkLnR5cGUgPT09ICdmb3JrJykge1xuICAgICAgICBlbnRyaWVzLnB1c2goeyB0eXBlOiAnZm9yaycsIHRleHQ6IGBbUGFyYWxsZWxdOiAke3NlbnRlbmNlfWAsIGRlcHRoOiAwIH0pO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZWQudHlwZSA9PT0gJ3N1YmZsb3cnKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7IHR5cGU6ICdzdWJmbG93JywgdGV4dDogc2VudGVuY2UsIGRlcHRoOiAwIH0pO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZWQudHlwZSA9PT0gJ2xvb3AnKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7IHR5cGU6ICdsb29wJywgdGV4dDogc2VudGVuY2UsIGRlcHRoOiAwIH0pO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZWQudHlwZSA9PT0gJ2JyZWFrJykge1xuICAgICAgICBlbnRyaWVzLnB1c2goeyB0eXBlOiAnYnJlYWsnLCB0ZXh0OiBzZW50ZW5jZSwgZGVwdGg6IDAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlZC50eXBlID09PSAnZXJyb3InKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7IHR5cGU6ICdlcnJvcicsIHRleHQ6IGBbRXJyb3JdOiAke3NlbnRlbmNlfWAsIGRlcHRoOiAwIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBzdGFnZXMgd2l0aCBvcGVyYXRpb25zIHRoYXQgd2VyZW4ndCByZWZlcmVuY2VkIGluIGZsb3cgc2VudGVuY2VzXG4gICAgZm9yIChjb25zdCBbc3RhZ2VOYW1lLCBkYXRhXSBvZiBBcnJheS5mcm9tKHN0YWdlRGF0YS5lbnRyaWVzKCkpKSB7XG4gICAgICBpZiAoIXVzZWRTdGFnZXMuaGFzKHN0YWdlTmFtZSkgJiYgZGF0YS5vcGVyYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RhZ2VDb3VudGVyKys7XG4gICAgICAgIGVudHJpZXMucHVzaCh7IHR5cGU6ICdzdGFnZScsIHRleHQ6IGBTdGFnZSAke3N0YWdlQ291bnRlcn06ICR7c3RhZ2VOYW1lfWAsIGRlcHRoOiAwLCBzdGFnZU5hbWUgfSk7XG4gICAgICAgIHRoaXMuYWRkU3RlcEVudHJpZXMoZW50cmllcywgZGF0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cblxuICBidWlsZChmbG93U2VudGVuY2VzOiBzdHJpbmdbXSwgcmVjb3JkZXI6IE5hcnJhdGl2ZVJlY29yZGVyLCBzZW50ZW5jZVN0YWdlTmFtZXM/OiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkRW50cmllcyhmbG93U2VudGVuY2VzLCByZWNvcmRlciwgc2VudGVuY2VTdGFnZU5hbWVzKS5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBpbmRlbnQgPSB0aGlzLm9wdGlvbnMuaW5kZW50LnJlcGVhdChlbnRyeS5kZXB0aCk7XG4gICAgICByZXR1cm4gYCR7aW5kZW50fSR7ZW50cnkudGV4dH1gO1xuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIFByaXZhdGUgaGVscGVycyDilIDilIBcblxuICBwcml2YXRlIGFkZFN0ZXBFbnRyaWVzKGVudHJpZXM6IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXSwgZGF0YTogU3RhZ2VOYXJyYXRpdmVEYXRhKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBvcCBvZiBkYXRhLm9wZXJhdGlvbnMpIHtcbiAgICAgIGNvbnN0IHN0ZXBQcmVmaXggPSB0aGlzLm9wdGlvbnMuaW5jbHVkZVN0ZXBOdW1iZXJzICYmIG9wLnN0ZXBOdW1iZXIgPyBgU3RlcCAke29wLnN0ZXBOdW1iZXJ9OiBgIDogJyc7XG5cbiAgICAgIGxldCB0ZXh0OiBzdHJpbmc7XG4gICAgICBpZiAob3AudHlwZSA9PT0gJ3JlYWQnKSB7XG4gICAgICAgIHRleHQgPVxuICAgICAgICAgIHRoaXMub3B0aW9ucy5pbmNsdWRlVmFsdWVzICYmIG9wLnZhbHVlU3VtbWFyeVxuICAgICAgICAgICAgPyBgJHtzdGVwUHJlZml4fVJlYWQgJHtvcC5rZXl9ID0gJHtvcC52YWx1ZVN1bW1hcnl9YFxuICAgICAgICAgICAgOiBgJHtzdGVwUHJlZml4fVJlYWQgJHtvcC5rZXl9YDtcbiAgICAgIH0gZWxzZSBpZiAob3Aub3BlcmF0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgICB0ZXh0ID0gYCR7c3RlcFByZWZpeH1EZWxldGUgJHtvcC5rZXl9YDtcbiAgICAgIH0gZWxzZSBpZiAob3Aub3BlcmF0aW9uID09PSAndXBkYXRlJykge1xuICAgICAgICB0ZXh0ID0gdGhpcy5vcHRpb25zLmluY2x1ZGVWYWx1ZXNcbiAgICAgICAgICA/IGAke3N0ZXBQcmVmaXh9VXBkYXRlICR7b3Aua2V5fSA9ICR7b3AudmFsdWVTdW1tYXJ5fWBcbiAgICAgICAgICA6IGAke3N0ZXBQcmVmaXh9VXBkYXRlICR7b3Aua2V5fWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0ID0gdGhpcy5vcHRpb25zLmluY2x1ZGVWYWx1ZXNcbiAgICAgICAgICA/IGAke3N0ZXBQcmVmaXh9V3JpdGUgJHtvcC5rZXl9ID0gJHtvcC52YWx1ZVN1bW1hcnl9YFxuICAgICAgICAgIDogYCR7c3RlcFByZWZpeH1Xcml0ZSAke29wLmtleX1gO1xuICAgICAgfVxuXG4gICAgICBlbnRyaWVzLnB1c2goeyB0eXBlOiAnc3RlcCcsIHRleHQsIGRlcHRoOiAxLCBzdGFnZU5hbWU6IGRhdGEuc3RhZ2VOYW1lLCBzdGVwTnVtYmVyOiBvcC5zdGVwTnVtYmVyIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZFN0YWdlRGF0YShuYW1lOiBzdHJpbmcsIHN0YWdlRGF0YTogTWFwPHN0cmluZywgU3RhZ2VOYXJyYXRpdmVEYXRhPik6IFN0YWdlTmFycmF0aXZlRGF0YSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHN0YWdlRGF0YS5oYXMobmFtZSkpIHJldHVybiBzdGFnZURhdGEuZ2V0KG5hbWUpO1xuICAgIGZvciAoY29uc3QgW3N0YWdlTmFtZSwgZGF0YV0gb2YgQXJyYXkuZnJvbShzdGFnZURhdGEuZW50cmllcygpKSkge1xuICAgICAgaWYgKFxuICAgICAgICBzdGFnZU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhuYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAgIG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzdGFnZU5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VTZW50ZW5jZShzZW50ZW5jZTogc3RyaW5nKTogeyB0eXBlOiBzdHJpbmc7IHN0YWdlTmFtZT86IHN0cmluZyB9IHtcbiAgICBpZiAoc2VudGVuY2Uuc3RhcnRzV2l0aCgnVGhlIHByb2Nlc3MgYmVnYW4nKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBzZW50ZW5jZS5tYXRjaCgvVGhlIHByb2Nlc3MgYmVnYW4oPzo6ICguKyl8IHdpdGggKC4rKSlcXC4vKTtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdzdGFnZScsIHN0YWdlTmFtZTogKG1hdGNoPy5bMV0gPz8gbWF0Y2g/LlsyXSk/LnRyaW0oKSB9O1xuICAgIH1cbiAgICBpZiAoc2VudGVuY2Uuc3RhcnRzV2l0aCgnTmV4dCcpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHNlbnRlbmNlLm1hdGNoKC9OZXh0KD86LD8gaXQgbW92ZWQgb24gdG8gKC4rKXwgc3RlcDogKC4rKSlcXC4vKTtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdzdGFnZScsIHN0YWdlTmFtZTogKG1hdGNoPy5bMV0gPz8gbWF0Y2g/LlsyXSk/LnRyaW0oKSB9O1xuICAgIH1cbiAgICBpZiAoc2VudGVuY2UuaW5jbHVkZXMoJ2RlY2lzaW9uIHdhcyBtYWRlJykgfHwgc2VudGVuY2UuaW5jbHVkZXMoJ2l0IGNob3NlJykgfHwgc2VudGVuY2UuaW5jbHVkZXMoJ3NvIGl0IGNob3NlJykpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gc2VudGVuY2UubWF0Y2goL2Nob3NlICguKylcXC4vKTtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdjb25kaXRpb24nLCBzdGFnZU5hbWU6IG1hdGNoPy5bMV0/LnRyaW0oKSB9O1xuICAgIH1cbiAgICBpZiAoc2VudGVuY2Uuc3RhcnRzV2l0aCgnSXQgJykgJiYgc2VudGVuY2UuaW5jbHVkZXMoJ2Nob3NlJykpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gc2VudGVuY2UubWF0Y2goL2Nob3NlICguKylcXC4vKTtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdjb25kaXRpb24nLCBzdGFnZU5hbWU6IG1hdGNoPy5bMV0/LnRyaW0oKSB9O1xuICAgIH1cbiAgICBpZiAoc2VudGVuY2UuaW5jbHVkZXMoJ3BhdGhzIHdlcmUgZXhlY3V0ZWQgaW4gcGFyYWxsZWwnKSB8fCBzZW50ZW5jZS5pbmNsdWRlcygncGF0aHMgd2VyZSBzZWxlY3RlZCcpKVxuICAgICAgcmV0dXJuIHsgdHlwZTogJ2ZvcmsnIH07XG4gICAgaWYgKHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ0VudGVyaW5nJykgfHwgc2VudGVuY2Uuc3RhcnRzV2l0aCgnRXhpdGluZycpKSByZXR1cm4geyB0eXBlOiAnc3ViZmxvdycgfTtcbiAgICBpZiAoc2VudGVuY2Uuc3RhcnRzV2l0aCgnT24gcGFzcycpKSByZXR1cm4geyB0eXBlOiAnbG9vcCcgfTtcbiAgICBpZiAoc2VudGVuY2Uuc3RhcnRzV2l0aCgnRXhlY3V0aW9uIHN0b3BwZWQnKSkgcmV0dXJuIHsgdHlwZTogJ2JyZWFrJyB9O1xuICAgIGlmIChzZW50ZW5jZS5zdGFydHNXaXRoKCdBbiBlcnJvciBvY2N1cnJlZCcpKSByZXR1cm4geyB0eXBlOiAnZXJyb3InIH07XG4gICAgcmV0dXJuIHsgdHlwZTogJ3N0YWdlJyB9O1xuICB9XG59XG4iXX0=
|
|
@@ -50,7 +50,7 @@ class CombinedNarrativeRecorder {
|
|
|
50
50
|
}
|
|
51
51
|
// ── Flow channel (fires after stage execution) ────────────────────────
|
|
52
52
|
onStageExecuted(event) {
|
|
53
|
-
var _a, _b, _c;
|
|
53
|
+
var _a, _b, _c, _d;
|
|
54
54
|
const sfKey = (_b = (_a = event.traversalContext) === null || _a === void 0 ? void 0 : _a.subflowId) !== null && _b !== void 0 ? _b : '';
|
|
55
55
|
const stageNum = this.incrementStageCounter(sfKey);
|
|
56
56
|
const isFirst = this.consumeFirstStageFlag(sfKey);
|
|
@@ -62,17 +62,19 @@ class CombinedNarrativeRecorder {
|
|
|
62
62
|
? `Next step: ${event.description}.`
|
|
63
63
|
: `Next, it moved on to ${event.stageName}.`;
|
|
64
64
|
const sfId = (_c = event.traversalContext) === null || _c === void 0 ? void 0 : _c.subflowId;
|
|
65
|
+
const stageId = (_d = event.traversalContext) === null || _d === void 0 ? void 0 : _d.stageId;
|
|
65
66
|
this.entries.push({
|
|
66
67
|
type: 'stage',
|
|
67
68
|
text: `Stage ${stageNum}: ${text}`,
|
|
68
69
|
depth: 0,
|
|
69
70
|
stageName: event.stageName,
|
|
71
|
+
stageId,
|
|
70
72
|
subflowId: sfId,
|
|
71
73
|
});
|
|
72
|
-
this.flushOps(event.stageName, sfId);
|
|
74
|
+
this.flushOps(event.stageName, sfId, stageId);
|
|
73
75
|
}
|
|
74
76
|
onDecision(event) {
|
|
75
|
-
var _a, _b, _c, _d, _e;
|
|
77
|
+
var _a, _b, _c, _d, _e, _f;
|
|
76
78
|
// Emit the decider stage entry (deciders don't fire onStageExecuted)
|
|
77
79
|
const sfKey = (_b = (_a = event.traversalContext) === null || _a === void 0 ? void 0 : _a.subflowId) !== null && _b !== void 0 ? _b : '';
|
|
78
80
|
const stageNum = this.incrementStageCounter(sfKey);
|
|
@@ -84,14 +86,16 @@ class CombinedNarrativeRecorder {
|
|
|
84
86
|
: event.description
|
|
85
87
|
? `Next step: ${event.description}.`
|
|
86
88
|
: `Next, it moved on to ${event.decider}.`;
|
|
89
|
+
const deciderStageId = (_c = event.traversalContext) === null || _c === void 0 ? void 0 : _c.stageId;
|
|
87
90
|
this.entries.push({
|
|
88
91
|
type: 'stage',
|
|
89
92
|
text: `Stage ${stageNum}: ${stageText}`,
|
|
90
93
|
depth: 0,
|
|
91
94
|
stageName: event.decider,
|
|
92
|
-
|
|
95
|
+
stageId: deciderStageId,
|
|
96
|
+
subflowId: (_d = event.traversalContext) === null || _d === void 0 ? void 0 : _d.subflowId,
|
|
93
97
|
});
|
|
94
|
-
this.flushOps(event.decider, (
|
|
98
|
+
this.flushOps(event.decider, (_e = event.traversalContext) === null || _e === void 0 ? void 0 : _e.subflowId, deciderStageId);
|
|
95
99
|
// Emit the condition entry
|
|
96
100
|
const branchName = event.chosen;
|
|
97
101
|
let conditionText;
|
|
@@ -112,7 +116,8 @@ class CombinedNarrativeRecorder {
|
|
|
112
116
|
text: `[Condition]: ${conditionText}`,
|
|
113
117
|
depth: 0,
|
|
114
118
|
stageName: event.decider,
|
|
115
|
-
|
|
119
|
+
stageId: deciderStageId,
|
|
120
|
+
subflowId: (_f = event.traversalContext) === null || _f === void 0 ? void 0 : _f.subflowId,
|
|
116
121
|
});
|
|
117
122
|
}
|
|
118
123
|
onNext() {
|
|
@@ -120,27 +125,29 @@ class CombinedNarrativeRecorder {
|
|
|
120
125
|
// For deciders (no onStageExecuted), onDecision handles the announcement.
|
|
121
126
|
}
|
|
122
127
|
onFork(event) {
|
|
123
|
-
var _a;
|
|
128
|
+
var _a, _b;
|
|
124
129
|
const names = event.children.join(', ');
|
|
125
130
|
this.entries.push({
|
|
126
131
|
type: 'fork',
|
|
127
132
|
text: `[Parallel]: ${event.children.length} paths were executed in parallel: ${names}.`,
|
|
128
133
|
depth: 0,
|
|
129
|
-
|
|
134
|
+
stageId: (_a = event.traversalContext) === null || _a === void 0 ? void 0 : _a.stageId,
|
|
135
|
+
subflowId: (_b = event.traversalContext) === null || _b === void 0 ? void 0 : _b.subflowId,
|
|
130
136
|
});
|
|
131
137
|
}
|
|
132
138
|
onSelected(event) {
|
|
133
|
-
var _a;
|
|
139
|
+
var _a, _b;
|
|
134
140
|
const names = event.selected.join(', ');
|
|
135
141
|
this.entries.push({
|
|
136
142
|
type: 'fork',
|
|
137
143
|
text: `[Selected]: ${event.selected.length} of ${event.total} paths were selected: ${names}.`,
|
|
138
144
|
depth: 0,
|
|
139
|
-
|
|
145
|
+
stageId: (_a = event.traversalContext) === null || _a === void 0 ? void 0 : _a.stageId,
|
|
146
|
+
subflowId: (_b = event.traversalContext) === null || _b === void 0 ? void 0 : _b.subflowId,
|
|
140
147
|
});
|
|
141
148
|
}
|
|
142
149
|
onSubflowEntry(event) {
|
|
143
|
-
var _a, _b;
|
|
150
|
+
var _a, _b, _c;
|
|
144
151
|
// Reset stage counter for this subflow so stages start at "Stage 1" on re-entry
|
|
145
152
|
const sfKey = (_a = event.subflowId) !== null && _a !== void 0 ? _a : '';
|
|
146
153
|
this.stageCounters.delete(sfKey);
|
|
@@ -148,32 +155,46 @@ class CombinedNarrativeRecorder {
|
|
|
148
155
|
const text = event.description
|
|
149
156
|
? `Entering the ${event.name} subflow: ${event.description}.`
|
|
150
157
|
: `Entering the ${event.name} subflow.`;
|
|
151
|
-
this.entries.push({
|
|
158
|
+
this.entries.push({
|
|
159
|
+
type: 'subflow',
|
|
160
|
+
text,
|
|
161
|
+
depth: 0,
|
|
162
|
+
stageId: (_b = event.traversalContext) === null || _b === void 0 ? void 0 : _b.stageId,
|
|
163
|
+
subflowId: (_c = event.traversalContext) === null || _c === void 0 ? void 0 : _c.subflowId,
|
|
164
|
+
});
|
|
152
165
|
}
|
|
153
166
|
onSubflowExit(event) {
|
|
154
|
-
var _a;
|
|
167
|
+
var _a, _b;
|
|
155
168
|
this.entries.push({
|
|
156
169
|
type: 'subflow',
|
|
157
170
|
text: `Exiting the ${event.name} subflow.`,
|
|
158
171
|
depth: 0,
|
|
159
|
-
|
|
172
|
+
stageId: (_a = event.traversalContext) === null || _a === void 0 ? void 0 : _a.stageId,
|
|
173
|
+
subflowId: (_b = event.traversalContext) === null || _b === void 0 ? void 0 : _b.subflowId,
|
|
160
174
|
});
|
|
161
175
|
}
|
|
162
176
|
onLoop(event) {
|
|
163
|
-
var _a;
|
|
177
|
+
var _a, _b;
|
|
164
178
|
const text = event.description
|
|
165
179
|
? `On pass ${event.iteration}: ${event.description} again.`
|
|
166
180
|
: `On pass ${event.iteration} through ${event.target}.`;
|
|
167
|
-
this.entries.push({
|
|
181
|
+
this.entries.push({
|
|
182
|
+
type: 'loop',
|
|
183
|
+
text,
|
|
184
|
+
depth: 0,
|
|
185
|
+
stageId: (_a = event.traversalContext) === null || _a === void 0 ? void 0 : _a.stageId,
|
|
186
|
+
subflowId: (_b = event.traversalContext) === null || _b === void 0 ? void 0 : _b.subflowId,
|
|
187
|
+
});
|
|
168
188
|
}
|
|
169
189
|
onBreak(event) {
|
|
170
|
-
var _a;
|
|
190
|
+
var _a, _b;
|
|
171
191
|
this.entries.push({
|
|
172
192
|
type: 'break',
|
|
173
193
|
text: `Execution stopped at ${event.stageName}.`,
|
|
174
194
|
depth: 0,
|
|
175
195
|
stageName: event.stageName,
|
|
176
|
-
|
|
196
|
+
stageId: (_a = event.traversalContext) === null || _a === void 0 ? void 0 : _a.stageId,
|
|
197
|
+
subflowId: (_b = event.traversalContext) === null || _b === void 0 ? void 0 : _b.subflowId,
|
|
177
198
|
});
|
|
178
199
|
}
|
|
179
200
|
/**
|
|
@@ -182,7 +203,7 @@ class CombinedNarrativeRecorder {
|
|
|
182
203
|
* - Recorder.onError (ErrorEvent from scope system — ignored for narrative)
|
|
183
204
|
*/
|
|
184
205
|
onError(event) {
|
|
185
|
-
var _a, _b, _c;
|
|
206
|
+
var _a, _b, _c, _d;
|
|
186
207
|
// Only handle flow errors (which have `message` and `structuredError`)
|
|
187
208
|
if (typeof event.message !== 'string')
|
|
188
209
|
return;
|
|
@@ -202,7 +223,8 @@ class CombinedNarrativeRecorder {
|
|
|
202
223
|
text: `[Error]: ${text}`,
|
|
203
224
|
depth: 0,
|
|
204
225
|
stageName: flowEvent.stageName,
|
|
205
|
-
|
|
226
|
+
stageId: (_c = flowEvent.traversalContext) === null || _c === void 0 ? void 0 : _c.stageId,
|
|
227
|
+
subflowId: (_d = flowEvent.traversalContext) === null || _d === void 0 ? void 0 : _d.subflowId,
|
|
206
228
|
});
|
|
207
229
|
}
|
|
208
230
|
// ── Output ────────────────────────────────────────────────────────────
|
|
@@ -261,7 +283,7 @@ class CombinedNarrativeRecorder {
|
|
|
261
283
|
}
|
|
262
284
|
ops.push({ ...op, stepNumber: ops.length + 1 });
|
|
263
285
|
}
|
|
264
|
-
flushOps(stageName, subflowId) {
|
|
286
|
+
flushOps(stageName, subflowId, stageId) {
|
|
265
287
|
const ops = this.pendingOps.get(stageName);
|
|
266
288
|
if (!ops || ops.length === 0)
|
|
267
289
|
return;
|
|
@@ -292,6 +314,7 @@ class CombinedNarrativeRecorder {
|
|
|
292
314
|
text,
|
|
293
315
|
depth: 1,
|
|
294
316
|
stageName,
|
|
317
|
+
stageId,
|
|
295
318
|
stepNumber: op.stepNumber,
|
|
296
319
|
subflowId,
|
|
297
320
|
});
|
|
@@ -325,4 +348,4 @@ function summarizeValue(value, maxLen) {
|
|
|
325
348
|
}
|
|
326
349
|
return String(value);
|
|
327
350
|
}
|
|
328
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL25hcnJhdGl2ZS9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7QUFnQ0gsOEVBQThFO0FBRTlFLE1BQWEseUJBQXlCO0lBY3BDLFlBQVksT0FBNEQ7O1FBWGhFLFlBQU8sR0FBNkIsRUFBRSxDQUFDO1FBQ3ZDLGVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztRQUNyRCxzREFBc0Q7UUFDOUMsa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUNsRCx5REFBeUQ7UUFDakQsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztRQU9uRCxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLEVBQUUsbUNBQUksb0JBQW9CLENBQUM7UUFDOUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGtCQUFrQixtQ0FBSSxJQUFJLENBQUM7UUFDOUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxhQUFhLG1DQUFJLElBQUksQ0FBQztRQUNwRCxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGNBQWMsbUNBQUksRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFRCx5RUFBeUU7SUFFekUsTUFBTSxDQUFDLEtBQWdCO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztZQUFFLE9BQU87UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQzdCLElBQUksRUFBRSxNQUFNO1lBQ1osR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2QsWUFBWSxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUM7U0FDL0QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFpQjtRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDN0IsSUFBSSxFQUFFLE9BQU87WUFDYixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxZQUFZLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUM5RCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHlFQUF5RTtJQUV6RSxlQUFlLENBQUMsS0FBcUI7O1FBQ25DLE1BQU0sS0FBSyxHQUFHLE1BQUEsTUFBQSxLQUFLLENBQUMsZ0JBQWdCLDBDQUFFLFNBQVMsbUNBQUksRUFBRSxDQUFDO1FBQ3RELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsTUFBTSxJQUFJLEdBQUcsT0FBTztZQUNsQixDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVc7Z0JBQ2pCLENBQUMsQ0FBQyxzQkFBc0IsS0FBSyxDQUFDLFdBQVcsR0FBRztnQkFDNUMsQ0FBQyxDQUFDLDBCQUEwQixLQUFLLENBQUMsU0FBUyxHQUFHO1lBQ2hELENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVztnQkFDbkIsQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLFdBQVcsR0FBRztnQkFDcEMsQ0FBQyxDQUFDLHdCQUF3QixLQUFLLENBQUMsU0FBUyxHQUFHLENBQUM7UUFFL0MsTUFBTSxJQUFJLEdBQUcsTUFBQSxLQUFLLENBQUMsZ0JBQWdCLDBDQUFFLFNBQVMsQ0FBQztRQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNoQixJQUFJLEVBQUUsT0FBTztZQUNiLElBQUksRUFBRSxTQUFTLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDbEMsS0FBSyxFQUFFLENBQUM7WUFDUixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBd0I7O1FBQ2pDLHFFQUFxRTtRQUNyRSxNQUFNLEtBQUssR0FBRyxNQUFBLE1BQUEsS0FBSyxDQUFDLGdCQUFnQiwwQ0FBRSxTQUFTLG1DQUFJLEVBQUUsQ0FBQztRQUN0RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELE1BQU0sU0FBUyxHQUFHLE9BQU87WUFDdkIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXO2dCQUNqQixDQUFDLENBQUMsc0JBQXNCLEtBQUssQ0FBQyxXQUFXLEdBQUc7Z0JBQzVDLENBQUMsQ0FBQywwQkFBMEIsS0FBSyxDQUFDLE9BQU8sR0FBRztZQUM5QyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVc7Z0JBQ25CLENBQUMsQ0FBQyxjQUFjLEtBQUssQ0FBQyxXQUFXLEdBQUc7Z0JBQ3BDLENBQUMsQ0FBQyx3QkFBd0IsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDO1FBRTdDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hCLElBQUksRUFBRSxPQUFPO1lBQ2IsSUFBSSxFQUFFLFNBQVMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUN2QyxLQUFLLEVBQUUsQ0FBQztZQUNSLFNBQVMsRUFBRSxLQUFLLENBQUMsT0FBTztZQUN4QixTQUFTLEVBQUUsTUFBQSxLQUFLLENBQUMsZ0JBQWdCLDBDQUFFLFNBQVM7U0FDN0MsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQUEsS0FBSyxDQUFDLGdCQUFnQiwwQ0FBRSxTQUFTLENBQUMsQ0FBQztRQUVoRSwyQkFBMkI7UUFDM0IsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNoQyxJQUFJLGFBQXFCLENBQUM7UUFDMUIsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN6QyxhQUFhLEdBQUcsTUFBTSxLQUFLLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxTQUFTLGlCQUFpQixVQUFVLEdBQUcsQ0FBQztRQUM1RixDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0IsYUFBYSxHQUFHLE1BQU0sS0FBSyxDQUFDLFdBQVcsY0FBYyxVQUFVLEdBQUcsQ0FBQztRQUNyRSxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0IsYUFBYSxHQUFHLHdCQUF3QixLQUFLLENBQUMsU0FBUywyQkFBMkIsVUFBVSxHQUFHLENBQUM7UUFDbEcsQ0FBQzthQUFNLENBQUM7WUFDTixhQUFhLEdBQUcsK0NBQStDLFVBQVUsR0FBRyxDQUFDO1FBQy9FLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNoQixJQUFJLEVBQUUsV0FBVztZQUNqQixJQUFJLEVBQUUsZ0JBQWdCLGFBQWEsRUFBRTtZQUNyQyxLQUFLLEVBQUUsQ0FBQztZQUNSLFNBQVMsRUFBRSxLQUFLLENBQUMsT0FBTztZQUN4QixTQUFTLEVBQUUsTUFBQSxLQUFLLENBQUMsZ0JBQWdCLDBDQUFFLFNBQVM7U0FDN0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU07UUFDSix5RUFBeUU7UUFDekUsMEVBQTBFO0lBQzVFLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBb0I7O1FBQ3pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hCLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFLGVBQWUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLHFDQUFxQyxLQUFLLEdBQUc7WUFDdkYsS0FBSyxFQUFFLENBQUM7WUFDUixTQUFTLEVBQUUsTUFBQSxLQUFLLENBQUMsZ0JBQWdCLDBDQUFFLFNBQVM7U0FDN0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUF3Qjs7UUFDakMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsZUFBZSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sT0FBTyxLQUFLLENBQUMsS0FBSyx5QkFBeUIsS0FBSyxHQUFHO1lBQzdGLEtBQUssRUFBRSxDQUFDO1lBQ1IsU0FBUyxFQUFFLE1BQUEsS0FBSyxDQUFDLGdCQUFnQiwwQ0FBRSxTQUFTO1NBQzdDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBdUI7O1FBQ3BDLGdGQUFnRjtRQUNoRixNQUFNLEtBQUssR0FBRyxNQUFBLEtBQUssQ0FBQyxTQUFTLG1DQUFJLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsV0FBVztZQUM1QixDQUFDLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLGFBQWEsS0FBSyxDQUFDLFdBQVcsR0FBRztZQUM3RCxDQUFDLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLFdBQVcsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQUEsS0FBSyxDQUFDLGdCQUFnQiwwQ0FBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBdUI7O1FBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hCLElBQUksRUFBRSxTQUFTO1lBQ2YsSUFBSSxFQUFFLGVBQWUsS0FBSyxDQUFDLElBQUksV0FBVztZQUMxQyxLQUFLLEVBQUUsQ0FBQztZQUNSLFNBQVMsRUFBRSxNQUFBLEtBQUssQ0FBQyxnQkFBZ0IsMENBQUUsU0FBUztTQUM3QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQW9COztRQUN6QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsV0FBVztZQUM1QixDQUFDLENBQUMsV0FBVyxLQUFLLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxXQUFXLFNBQVM7WUFDM0QsQ0FBQyxDQUFDLFdBQVcsS0FBSyxDQUFDLFNBQVMsWUFBWSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDMUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFBLEtBQUssQ0FBQyxnQkFBZ0IsMENBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQXFCOztRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNoQixJQUFJLEVBQUUsT0FBTztZQUNiLElBQUksRUFBRSx3QkFBd0IsS0FBSyxDQUFDLFNBQVMsR0FBRztZQUNoRCxLQUFLLEVBQUUsQ0FBQztZQUNSLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixTQUFTLEVBQUUsTUFBQSxLQUFLLENBQUMsZ0JBQWdCLDBDQUFFLFNBQVM7U0FDN0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQUMsS0FBZ0U7O1FBQ3RFLHVFQUF1RTtRQUN2RSxJQUFJLE9BQVEsS0FBd0IsQ0FBQyxPQUFPLEtBQUssUUFBUTtZQUFFLE9BQU87UUFDbEUsTUFBTSxTQUFTLEdBQUcsS0FBdUIsQ0FBQztRQUUxQyxJQUFJLElBQUksR0FBRyx3QkFBd0IsU0FBUyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUM7UUFDaEYsSUFBSSxNQUFBLE1BQUEsU0FBUyxDQUFDLGVBQWUsMENBQUUsTUFBTSwwQ0FBRSxNQUFNLEVBQUUsQ0FBQztZQUM5QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU07aUJBQzdDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNiLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFDckUsT0FBTyxHQUFHLElBQUksS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckMsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNkLElBQUksSUFBSSx1QkFBdUIsT0FBTyxHQUFHLENBQUM7UUFDNUMsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hCLElBQUksRUFBRSxPQUFPO1lBQ2IsSUFBSSxFQUFFLFlBQVksSUFBSSxFQUFFO1lBQ3hCLEtBQUssRUFBRSxDQUFDO1lBQ1IsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTO1lBQzlCLFNBQVMsRUFBRSxNQUFBLFNBQVMsQ0FBQyxnQkFBZ0IsMENBQUUsU0FBUztTQUNqRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQseUVBQXlFO0lBRXpFLCtEQUErRDtJQUMvRCxVQUFVO1FBQ1IsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCx5RkFBeUY7SUFDekYsWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVEOzs7T0FHRztJQUNILG1CQUFtQjs7UUFDakIsTUFBTSxNQUFNLEdBQTZDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3BFLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLE1BQU0sR0FBRyxHQUFHLE1BQUEsS0FBSyxDQUFDLFNBQVMsbUNBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO2dCQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELHlFQUF5RTtJQUV6RSw4RUFBOEU7SUFDdEUscUJBQXFCLENBQUMsVUFBa0I7O1FBQzlDLE1BQU0sT0FBTyxHQUFHLE1BQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLG1DQUFJLENBQUMsQ0FBQztRQUN4RCxNQUFNLElBQUksR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCx5RkFBeUY7SUFDakYscUJBQXFCLENBQUMsVUFBa0I7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLFFBQVEsQ0FBQyxTQUFpQixFQUFFLEVBQWtDO1FBQ3BFLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTyxRQUFRLENBQUMsU0FBaUIsRUFBRSxTQUFrQjtRQUNwRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFckMsS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFNUUsSUFBSSxJQUFZLENBQUM7WUFDakIsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUN2QixJQUFJO29CQUNGLElBQUksQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLFlBQVk7d0JBQ25DLENBQUMsQ0FBQyxHQUFHLFVBQVUsUUFBUSxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxZQUFZLEVBQUU7d0JBQ3BELENBQUMsQ0FBQyxHQUFHLFVBQVUsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdEMsQ0FBQztpQkFBTSxJQUFJLEVBQUUsQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3JDLElBQUksR0FBRyxHQUFHLFVBQVUsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDekMsQ0FBQztpQkFBTSxJQUFJLEVBQUUsQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3JDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYTtvQkFDdkIsQ0FBQyxDQUFDLEdBQUcsVUFBVSxVQUFVLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLFlBQVksRUFBRTtvQkFDdEQsQ0FBQyxDQUFDLEdBQUcsVUFBVSxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN0QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhO29CQUN2QixDQUFDLENBQUMsR0FBRyxVQUFVLFNBQVMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFO29CQUNyRCxDQUFDLENBQUMsR0FBRyxVQUFVLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3JDLENBQUM7WUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDaEIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osSUFBSTtnQkFDSixLQUFLLEVBQUUsQ0FBQztnQkFDUixTQUFTO2dCQUNULFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVTtnQkFDekIsU0FBUzthQUNWLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUE1U0QsOERBNFNDO0FBRUQsOEVBQThFO0FBRTlFLFNBQVMsY0FBYyxDQUFDLEtBQWMsRUFBRSxNQUFjO0lBQ3BELElBQUksS0FBSyxLQUFLLFNBQVM7UUFBRSxPQUFPLFdBQVcsQ0FBQztJQUM1QyxJQUFJLEtBQUssS0FBSyxJQUFJO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDbEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3RGLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLFFBQVEsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDNUYsQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFnQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUM7UUFDdkMsT0FBTyxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLFFBQVEsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlciDigJQgSW5saW5lIG5hcnJhdGl2ZSBidWlsZGVyIHRoYXQgbWVyZ2VzIGZsb3cgKyBkYXRhIGR1cmluZyB0cmF2ZXJzYWwuXG4gKlxuICogUmVwbGFjZXMgdGhlIHBvc3QtcHJvY2Vzc2luZyBDb21iaW5lZE5hcnJhdGl2ZUJ1aWxkZXIgYnkgaW1wbGVtZW50aW5nIEJPVEhcbiAqIEZsb3dSZWNvcmRlciAoY29udHJvbC1mbG93IGV2ZW50cykgYW5kIFJlY29yZGVyIChzY29wZSBkYXRhIGV2ZW50cykuXG4gKlxuICogRXZlbnQgb3JkZXJpbmcgZ3VhcmFudGVlcyB0aGlzIHdvcmtzOlxuICogICAxLiBTY29wZSBldmVudHMgKG9uUmVhZCwgb25Xcml0ZSkgZmlyZSBEVVJJTkcgc3RhZ2UgZXhlY3V0aW9uXG4gKiAgIDIuIEZsb3cgZXZlbnRzIChvblN0YWdlRXhlY3V0ZWQsIG9uRGVjaXNpb24pIGZpcmUgQUZURVIgc3RhZ2UgZXhlY3V0aW9uXG4gKiAgIDMuIEJvdGggY2FycnkgdGhlIHNhbWUgYHN0YWdlTmFtZWAg4oCUIG5vIG1hdGNoaW5nIGFtYmlndWl0eVxuICpcbiAqIFNvIHdlIGJ1ZmZlciBzY29wZSBvcHMgcGVyLXN0YWdlLCB0aGVuIHdoZW4gdGhlIGZsb3cgZXZlbnQgYXJyaXZlcyxcbiAqIGVtaXQgdGhlIHN0YWdlIGVudHJ5ICsgZmx1c2ggdGhlIGJ1ZmZlcmVkIG9wcyBpbiBvbmUgcGFzcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlYWRFdmVudCwgUmVjb3JkZXIsIFdyaXRlRXZlbnQgfSBmcm9tICcuLi8uLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlRW50cnkgfSBmcm9tICcuL0NvbWJpbmVkTmFycmF0aXZlQnVpbGRlci5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1NlbGVjdGVkRXZlbnQsXG4gIEZsb3dTdGFnZUV2ZW50LFxuICBGbG93U3ViZmxvd0V2ZW50LFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8g4pSA4pSAIFR5cGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5pbnRlcmZhY2UgQnVmZmVyZWRPcCB7XG4gIHR5cGU6ICdyZWFkJyB8ICd3cml0ZSc7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZVN1bW1hcnk6IHN0cmluZztcbiAgb3BlcmF0aW9uPzogJ3NldCcgfCAndXBkYXRlJyB8ICdkZWxldGUnO1xuICBzdGVwTnVtYmVyOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlck9wdGlvbnMge1xuICBpbmNsdWRlU3RlcE51bWJlcnM/OiBib29sZWFuO1xuICBpbmNsdWRlVmFsdWVzPzogYm9vbGVhbjtcbiAgbWF4VmFsdWVMZW5ndGg/OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBSZWNvcmRlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGNsYXNzIENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIgaW1wbGVtZW50cyBGbG93UmVjb3JkZXIsIFJlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICBwcml2YXRlIGVudHJpZXM6IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXSA9IFtdO1xuICBwcml2YXRlIHBlbmRpbmdPcHMgPSBuZXcgTWFwPHN0cmluZywgQnVmZmVyZWRPcFtdPigpO1xuICAvKiogUGVyLXN1YmZsb3cgc3RhZ2UgY291bnRlcnMuIEtleSAnJyA9IHJvb3QgZmxvdy4gKi9cbiAgcHJpdmF0ZSBzdGFnZUNvdW50ZXJzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgLyoqIFBlci1zdWJmbG93IGZpcnN0LXN0YWdlIGZsYWdzLiBLZXkgJycgPSByb290IGZsb3cuICovXG4gIHByaXZhdGUgZmlyc3RTdGFnZUZsYWdzID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG5cbiAgcHJpdmF0ZSBpbmNsdWRlU3RlcE51bWJlcnM6IGJvb2xlYW47XG4gIHByaXZhdGUgaW5jbHVkZVZhbHVlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBtYXhWYWx1ZUxlbmd0aDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyT3B0aW9ucyAmIHsgaWQ/OiBzdHJpbmcgfSkge1xuICAgIHRoaXMuaWQgPSBvcHRpb25zPy5pZCA/PyAnY29tYmluZWQtbmFycmF0aXZlJztcbiAgICB0aGlzLmluY2x1ZGVTdGVwTnVtYmVycyA9IG9wdGlvbnM/LmluY2x1ZGVTdGVwTnVtYmVycyA/PyB0cnVlO1xuICAgIHRoaXMuaW5jbHVkZVZhbHVlcyA9IG9wdGlvbnM/LmluY2x1ZGVWYWx1ZXMgPz8gdHJ1ZTtcbiAgICB0aGlzLm1heFZhbHVlTGVuZ3RoID0gb3B0aW9ucz8ubWF4VmFsdWVMZW5ndGggPz8gODA7XG4gIH1cblxuICAvLyDilIDilIAgU2NvcGUgY2hhbm5lbCAoZmlyZXMgZmlyc3QsIGR1cmluZyBzdGFnZSBleGVjdXRpb24pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uUmVhZChldmVudDogUmVhZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCFldmVudC5rZXkpIHJldHVybjtcbiAgICB0aGlzLmJ1ZmZlck9wKGV2ZW50LnN0YWdlTmFtZSwge1xuICAgICAgdHlwZTogJ3JlYWQnLFxuICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICB2YWx1ZVN1bW1hcnk6IHN1bW1hcml6ZVZhbHVlKGV2ZW50LnZhbHVlLCB0aGlzLm1heFZhbHVlTGVuZ3RoKSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uV3JpdGUoZXZlbnQ6IFdyaXRlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmJ1ZmZlck9wKGV2ZW50LnN0YWdlTmFtZSwge1xuICAgICAgdHlwZTogJ3dyaXRlJyxcbiAgICAgIGtleTogZXZlbnQua2V5LFxuICAgICAgdmFsdWVTdW1tYXJ5OiBzdW1tYXJpemVWYWx1ZShldmVudC52YWx1ZSwgdGhpcy5tYXhWYWx1ZUxlbmd0aCksXG4gICAgICBvcGVyYXRpb246IGV2ZW50Lm9wZXJhdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBGbG93IGNoYW5uZWwgKGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbikg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgb25TdGFnZUV4ZWN1dGVkKGV2ZW50OiBGbG93U3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHNmS2V5ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkID8/ICcnO1xuICAgIGNvbnN0IHN0YWdlTnVtID0gdGhpcy5pbmNyZW1lbnRTdGFnZUNvdW50ZXIoc2ZLZXkpO1xuICAgIGNvbnN0IGlzRmlyc3QgPSB0aGlzLmNvbnN1bWVGaXJzdFN0YWdlRmxhZyhzZktleSk7XG4gICAgY29uc3QgdGV4dCA9IGlzRmlyc3RcbiAgICAgID8gZXZlbnQuZGVzY3JpcHRpb25cbiAgICAgICAgPyBgVGhlIHByb2Nlc3MgYmVnYW46ICR7ZXZlbnQuZGVzY3JpcHRpb259LmBcbiAgICAgICAgOiBgVGhlIHByb2Nlc3MgYmVnYW4gd2l0aCAke2V2ZW50LnN0YWdlTmFtZX0uYFxuICAgICAgOiBldmVudC5kZXNjcmlwdGlvblxuICAgICAgPyBgTmV4dCBzdGVwOiAke2V2ZW50LmRlc2NyaXB0aW9ufS5gXG4gICAgICA6IGBOZXh0LCBpdCBtb3ZlZCBvbiB0byAke2V2ZW50LnN0YWdlTmFtZX0uYDtcblxuICAgIGNvbnN0IHNmSWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQ7XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgdHlwZTogJ3N0YWdlJyxcbiAgICAgIHRleHQ6IGBTdGFnZSAke3N0YWdlTnVtfTogJHt0ZXh0fWAsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuc3RhZ2VOYW1lLFxuICAgICAgc3ViZmxvd0lkOiBzZklkLFxuICAgIH0pO1xuICAgIHRoaXMuZmx1c2hPcHMoZXZlbnQuc3RhZ2VOYW1lLCBzZklkKTtcbiAgfVxuXG4gIG9uRGVjaXNpb24oZXZlbnQ6IEZsb3dEZWNpc2lvbkV2ZW50KTogdm9pZCB7XG4gICAgLy8gRW1pdCB0aGUgZGVjaWRlciBzdGFnZSBlbnRyeSAoZGVjaWRlcnMgZG9uJ3QgZmlyZSBvblN0YWdlRXhlY3V0ZWQpXG4gICAgY29uc3Qgc2ZLZXkgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQgPz8gJyc7XG4gICAgY29uc3Qgc3RhZ2VOdW0gPSB0aGlzLmluY3JlbWVudFN0YWdlQ291bnRlcihzZktleSk7XG4gICAgY29uc3QgaXNGaXJzdCA9IHRoaXMuY29uc3VtZUZpcnN0U3RhZ2VGbGFnKHNmS2V5KTtcbiAgICBjb25zdCBzdGFnZVRleHQgPSBpc0ZpcnN0XG4gICAgICA/IGV2ZW50LmRlc2NyaXB0aW9uXG4gICAgICAgID8gYFRoZSBwcm9jZXNzIGJlZ2FuOiAke2V2ZW50LmRlc2NyaXB0aW9ufS5gXG4gICAgICAgIDogYFRoZSBwcm9jZXNzIGJlZ2FuIHdpdGggJHtldmVudC5kZWNpZGVyfS5gXG4gICAgICA6IGV2ZW50LmRlc2NyaXB0aW9uXG4gICAgICA/IGBOZXh0IHN0ZXA6ICR7ZXZlbnQuZGVzY3JpcHRpb259LmBcbiAgICAgIDogYE5leHQsIGl0IG1vdmVkIG9uIHRvICR7ZXZlbnQuZGVjaWRlcn0uYDtcblxuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdzdGFnZScsXG4gICAgICB0ZXh0OiBgU3RhZ2UgJHtzdGFnZU51bX06ICR7c3RhZ2VUZXh0fWAsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuZGVjaWRlcixcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICAgIHRoaXMuZmx1c2hPcHMoZXZlbnQuZGVjaWRlciwgZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkKTtcblxuICAgIC8vIEVtaXQgdGhlIGNvbmRpdGlvbiBlbnRyeVxuICAgIGNvbnN0IGJyYW5jaE5hbWUgPSBldmVudC5jaG9zZW47XG4gICAgbGV0IGNvbmRpdGlvblRleHQ6IHN0cmluZztcbiAgICBpZiAoZXZlbnQuZGVzY3JpcHRpb24gJiYgZXZlbnQucmF0aW9uYWxlKSB7XG4gICAgICBjb25kaXRpb25UZXh0ID0gYEl0ICR7ZXZlbnQuZGVzY3JpcHRpb259OiAke2V2ZW50LnJhdGlvbmFsZX0sIHNvIGl0IGNob3NlICR7YnJhbmNoTmFtZX0uYDtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25kaXRpb25UZXh0ID0gYEl0ICR7ZXZlbnQuZGVzY3JpcHRpb259IGFuZCBjaG9zZSAke2JyYW5jaE5hbWV9LmA7XG4gICAgfSBlbHNlIGlmIChldmVudC5yYXRpb25hbGUpIHtcbiAgICAgIGNvbmRpdGlvblRleHQgPSBgQSBkZWNpc2lvbiB3YXMgbWFkZTogJHtldmVudC5yYXRpb25hbGV9LCBzbyB0aGUgcGF0aCB0YWtlbiB3YXMgJHticmFuY2hOYW1lfS5gO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25kaXRpb25UZXh0ID0gYEEgZGVjaXNpb24gd2FzIG1hZGUsIGFuZCB0aGUgcGF0aCB0YWtlbiB3YXMgJHticmFuY2hOYW1lfS5gO1xuICAgIH1cbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICB0eXBlOiAnY29uZGl0aW9uJyxcbiAgICAgIHRleHQ6IGBbQ29uZGl0aW9uXTogJHtjb25kaXRpb25UZXh0fWAsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuZGVjaWRlcixcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25OZXh0KCk6IHZvaWQge1xuICAgIC8vIE5vLW9wLiBvblN0YWdlRXhlY3V0ZWQgYWxyZWFkeSBoYXMgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgbmV4dCBzdGFnZS5cbiAgICAvLyBGb3IgZGVjaWRlcnMgKG5vIG9uU3RhZ2VFeGVjdXRlZCksIG9uRGVjaXNpb24gaGFuZGxlcyB0aGUgYW5ub3VuY2VtZW50LlxuICB9XG5cbiAgb25Gb3JrKGV2ZW50OiBGbG93Rm9ya0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgbmFtZXMgPSBldmVudC5jaGlsZHJlbi5qb2luKCcsICcpO1xuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdmb3JrJyxcbiAgICAgIHRleHQ6IGBbUGFyYWxsZWxdOiAke2V2ZW50LmNoaWxkcmVuLmxlbmd0aH0gcGF0aHMgd2VyZSBleGVjdXRlZCBpbiBwYXJhbGxlbDogJHtuYW1lc30uYCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICBvblNlbGVjdGVkKGV2ZW50OiBGbG93U2VsZWN0ZWRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWVzID0gZXZlbnQuc2VsZWN0ZWQuam9pbignLCAnKTtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICB0eXBlOiAnZm9yaycsXG4gICAgICB0ZXh0OiBgW1NlbGVjdGVkXTogJHtldmVudC5zZWxlY3RlZC5sZW5ndGh9IG9mICR7ZXZlbnQudG90YWx9IHBhdGhzIHdlcmUgc2VsZWN0ZWQ6ICR7bmFtZXN9LmAsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25TdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICAvLyBSZXNldCBzdGFnZSBjb3VudGVyIGZvciB0aGlzIHN1YmZsb3cgc28gc3RhZ2VzIHN0YXJ0IGF0IFwiU3RhZ2UgMVwiIG9uIHJlLWVudHJ5XG4gICAgY29uc3Qgc2ZLZXkgPSBldmVudC5zdWJmbG93SWQgPz8gJyc7XG4gICAgdGhpcy5zdGFnZUNvdW50ZXJzLmRlbGV0ZShzZktleSk7XG4gICAgdGhpcy5maXJzdFN0YWdlRmxhZ3MuZGVsZXRlKHNmS2V5KTtcblxuICAgIGNvbnN0IHRleHQgPSBldmVudC5kZXNjcmlwdGlvblxuICAgICAgPyBgRW50ZXJpbmcgdGhlICR7ZXZlbnQubmFtZX0gc3ViZmxvdzogJHtldmVudC5kZXNjcmlwdGlvbn0uYFxuICAgICAgOiBgRW50ZXJpbmcgdGhlICR7ZXZlbnQubmFtZX0gc3ViZmxvdy5gO1xuICAgIHRoaXMuZW50cmllcy5wdXNoKHsgdHlwZTogJ3N1YmZsb3cnLCB0ZXh0LCBkZXB0aDogMCwgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQgfSk7XG4gIH1cblxuICBvblN1YmZsb3dFeGl0KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgdHlwZTogJ3N1YmZsb3cnLFxuICAgICAgdGV4dDogYEV4aXRpbmcgdGhlICR7ZXZlbnQubmFtZX0gc3ViZmxvdy5gLFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uTG9vcChldmVudDogRmxvd0xvb3BFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRleHQgPSBldmVudC5kZXNjcmlwdGlvblxuICAgICAgPyBgT24gcGFzcyAke2V2ZW50Lml0ZXJhdGlvbn06ICR7ZXZlbnQuZGVzY3JpcHRpb259IGFnYWluLmBcbiAgICAgIDogYE9uIHBhc3MgJHtldmVudC5pdGVyYXRpb259IHRocm91Z2ggJHtldmVudC50YXJnZXR9LmA7XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goeyB0eXBlOiAnbG9vcCcsIHRleHQsIGRlcHRoOiAwLCBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCB9KTtcbiAgfVxuXG4gIG9uQnJlYWsoZXZlbnQ6IEZsb3dCcmVha0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgdHlwZTogJ2JyZWFrJyxcbiAgICAgIHRleHQ6IGBFeGVjdXRpb24gc3RvcHBlZCBhdCAke2V2ZW50LnN0YWdlTmFtZX0uYCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VOYW1lOiBldmVudC5zdGFnZU5hbWUsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGVycm9ycyBmcm9tIGJvdGggY2hhbm5lbHM6XG4gICAqIC0gRmxvd1JlY29yZGVyLm9uRXJyb3IgKEZsb3dFcnJvckV2ZW50IHdpdGggbWVzc2FnZSArIHN0cnVjdHVyZWRFcnJvcilcbiAgICogLSBSZWNvcmRlci5vbkVycm9yIChFcnJvckV2ZW50IGZyb20gc2NvcGUgc3lzdGVtIOKAlCBpZ25vcmVkIGZvciBuYXJyYXRpdmUpXG4gICAqL1xuICBvbkVycm9yKGV2ZW50OiBGbG93RXJyb3JFdmVudCB8IHsgc3RhZ2VOYW1lPzogc3RyaW5nOyBtZXNzYWdlPzogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICAvLyBPbmx5IGhhbmRsZSBmbG93IGVycm9ycyAod2hpY2ggaGF2ZSBgbWVzc2FnZWAgYW5kIGBzdHJ1Y3R1cmVkRXJyb3JgKVxuICAgIGlmICh0eXBlb2YgKGV2ZW50IGFzIEZsb3dFcnJvckV2ZW50KS5tZXNzYWdlICE9PSAnc3RyaW5nJykgcmV0dXJuO1xuICAgIGNvbnN0IGZsb3dFdmVudCA9IGV2ZW50IGFzIEZsb3dFcnJvckV2ZW50O1xuXG4gICAgbGV0IHRleHQgPSBgQW4gZXJyb3Igb2NjdXJyZWQgYXQgJHtmbG93RXZlbnQuc3RhZ2VOYW1lfTogJHtmbG93RXZlbnQubWVzc2FnZX0uYDtcbiAgICBpZiAoZmxvd0V2ZW50LnN0cnVjdHVyZWRFcnJvcj8uaXNzdWVzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRldGFpbHMgPSBmbG93RXZlbnQuc3RydWN0dXJlZEVycm9yLmlzc3Vlc1xuICAgICAgICAubWFwKChpc3N1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSBpc3N1ZS5wYXRoLmxlbmd0aCA+IDAgPyBpc3N1ZS5wYXRoLmpvaW4oJy4nKSA6ICcocm9vdCknO1xuICAgICAgICAgIHJldHVybiBgJHtwYXRofTogJHtpc3N1ZS5tZXNzYWdlfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCc7ICcpO1xuICAgICAgdGV4dCArPSBgIFZhbGlkYXRpb24gaXNzdWVzOiAke2RldGFpbHN9LmA7XG4gICAgfVxuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICB0ZXh0OiBgW0Vycm9yXTogJHt0ZXh0fWAsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZmxvd0V2ZW50LnN0YWdlTmFtZSxcbiAgICAgIHN1YmZsb3dJZDogZmxvd0V2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBPdXRwdXQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIFJldHVybnMgc3RydWN0dXJlZCBlbnRyaWVzIGZvciBwcm9ncmFtbWF0aWMgY29uc3VtcHRpb24uICovXG4gIGdldEVudHJpZXMoKTogQ29tYmluZWROYXJyYXRpdmVFbnRyeVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZW50cmllc107XG4gIH1cblxuICAvKiogUmV0dXJucyBmb3JtYXR0ZWQgbmFycmF0aXZlIGxpbmVzIChzYW1lIG91dHB1dCBhcyBDb21iaW5lZE5hcnJhdGl2ZUJ1aWxkZXIuYnVpbGQpLiAqL1xuICBnZXROYXJyYXRpdmUoaW5kZW50ID0gJyAgJyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzLm1hcCgoZW50cnkpID0+IGAke2luZGVudC5yZXBlYXQoZW50cnkuZGVwdGgpfSR7ZW50cnkudGV4dH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGVudHJpZXMgZ3JvdXBlZCBieSBzdWJmbG93SWQgZm9yIHN0cnVjdHVyZWQgYWNjZXNzLlxuICAgKiBSb290LWxldmVsIGVudHJpZXMgaGF2ZSBzdWJmbG93SWQgPSB1bmRlZmluZWQuXG4gICAqL1xuICBnZXRFbnRyaWVzQnlTdWJmbG93KCk6IFJlY29yZDxzdHJpbmcsIENvbWJpbmVkTmFycmF0aXZlRW50cnlbXT4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgQ29tYmluZWROYXJyYXRpdmVFbnRyeVtdPiA9IHsgJyc6IFtdIH07XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIGNvbnN0IGtleSA9IGVudHJ5LnN1YmZsb3dJZCA/PyAnJztcbiAgICAgIGlmICghcmVzdWx0W2tleV0pIHJlc3VsdFtrZXldID0gW107XG4gICAgICByZXN1bHRba2V5XS5wdXNoKGVudHJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKiBDbGVhcnMgYWxsIHN0YXRlLiBDYWxsZWQgYXV0b21hdGljYWxseSBiZWZvcmUgZWFjaCBydW4uICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuZW50cmllcyA9IFtdO1xuICAgIHRoaXMucGVuZGluZ09wcy5jbGVhcigpO1xuICAgIHRoaXMuc3RhZ2VDb3VudGVycy5jbGVhcigpO1xuICAgIHRoaXMuZmlyc3RTdGFnZUZsYWdzLmNsZWFyKCk7XG4gIH1cblxuICAvLyDilIDilIAgUHJpdmF0ZSBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBJbmNyZW1lbnQgYW5kIHJldHVybiB0aGUgc3RhZ2UgY291bnRlciBmb3IgYSBnaXZlbiBzdWJmbG93ICgnJyA9IHJvb3QpLiAqL1xuICBwcml2YXRlIGluY3JlbWVudFN0YWdlQ291bnRlcihzdWJmbG93S2V5OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnN0YWdlQ291bnRlcnMuZ2V0KHN1YmZsb3dLZXkpID8/IDA7XG4gICAgY29uc3QgbmV4dCA9IGN1cnJlbnQgKyAxO1xuICAgIHRoaXMuc3RhZ2VDb3VudGVycy5zZXQoc3ViZmxvd0tleSwgbmV4dCk7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICAvKiogUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHN0YWdlIGZvciB0aGUgZ2l2ZW4gc3ViZmxvdywgY29uc3VtaW5nIHRoZSBmbGFnLiAqL1xuICBwcml2YXRlIGNvbnN1bWVGaXJzdFN0YWdlRmxhZyhzdWJmbG93S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZmlyc3RTdGFnZUZsYWdzLmhhcyhzdWJmbG93S2V5KSkge1xuICAgICAgdGhpcy5maXJzdFN0YWdlRmxhZ3Muc2V0KHN1YmZsb3dLZXksIGZhbHNlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGJ1ZmZlck9wKHN0YWdlTmFtZTogc3RyaW5nLCBvcDogT21pdDxCdWZmZXJlZE9wLCAnc3RlcE51bWJlcic+KTogdm9pZCB7XG4gICAgbGV0IG9wcyA9IHRoaXMucGVuZGluZ09wcy5nZXQoc3RhZ2VOYW1lKTtcbiAgICBpZiAoIW9wcykge1xuICAgICAgb3BzID0gW107XG4gICAgICB0aGlzLnBlbmRpbmdPcHMuc2V0KHN0YWdlTmFtZSwgb3BzKTtcbiAgICB9XG4gICAgb3BzLnB1c2goeyAuLi5vcCwgc3RlcE51bWJlcjogb3BzLmxlbmd0aCArIDEgfSk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoT3BzKHN0YWdlTmFtZTogc3RyaW5nLCBzdWJmbG93SWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBvcHMgPSB0aGlzLnBlbmRpbmdPcHMuZ2V0KHN0YWdlTmFtZSk7XG4gICAgaWYgKCFvcHMgfHwgb3BzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgZm9yIChjb25zdCBvcCBvZiBvcHMpIHtcbiAgICAgIGNvbnN0IHN0ZXBQcmVmaXggPSB0aGlzLmluY2x1ZGVTdGVwTnVtYmVycyA/IGBTdGVwICR7b3Auc3RlcE51bWJlcn06IGAgOiAnJztcblxuICAgICAgbGV0IHRleHQ6IHN0cmluZztcbiAgICAgIGlmIChvcC50eXBlID09PSAncmVhZCcpIHtcbiAgICAgICAgdGV4dCA9XG4gICAgICAgICAgdGhpcy5pbmNsdWRlVmFsdWVzICYmIG9wLnZhbHVlU3VtbWFyeVxuICAgICAgICAgICAgPyBgJHtzdGVwUHJlZml4fVJlYWQgJHtvcC5rZXl9ID0gJHtvcC52YWx1ZVN1bW1hcnl9YFxuICAgICAgICAgICAgOiBgJHtzdGVwUHJlZml4fVJlYWQgJHtvcC5rZXl9YDtcbiAgICAgIH0gZWxzZSBpZiAob3Aub3BlcmF0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgICB0ZXh0ID0gYCR7c3RlcFByZWZpeH1EZWxldGUgJHtvcC5rZXl9YDtcbiAgICAgIH0gZWxzZSBpZiAob3Aub3BlcmF0aW9uID09PSAndXBkYXRlJykge1xuICAgICAgICB0ZXh0ID0gdGhpcy5pbmNsdWRlVmFsdWVzXG4gICAgICAgICAgPyBgJHtzdGVwUHJlZml4fVVwZGF0ZSAke29wLmtleX0gPSAke29wLnZhbHVlU3VtbWFyeX1gXG4gICAgICAgICAgOiBgJHtzdGVwUHJlZml4fVVwZGF0ZSAke29wLmtleX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCA9IHRoaXMuaW5jbHVkZVZhbHVlc1xuICAgICAgICAgID8gYCR7c3RlcFByZWZpeH1Xcml0ZSAke29wLmtleX0gPSAke29wLnZhbHVlU3VtbWFyeX1gXG4gICAgICAgICAgOiBgJHtzdGVwUHJlZml4fVdyaXRlICR7b3Aua2V5fWA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICB0ZXh0LFxuICAgICAgICBkZXB0aDogMSxcbiAgICAgICAgc3RhZ2VOYW1lLFxuICAgICAgICBzdGVwTnVtYmVyOiBvcC5zdGVwTnVtYmVyLFxuICAgICAgICBzdWJmbG93SWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnBlbmRpbmdPcHMuZGVsZXRlKHN0YWdlTmFtZSk7XG4gIH1cbn1cblxuLy8g4pSA4pSAIFZhbHVlIHN1bW1hcml6ZXIgKHNhbWUgbG9naWMgYXMgTmFycmF0aXZlUmVjb3JkZXIpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBzdW1tYXJpemVWYWx1ZSh2YWx1ZTogdW5rbm93biwgbWF4TGVuOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuICd1bmRlZmluZWQnO1xuICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnbnVsbCc7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA8PSBtYXhMZW4gPyBgXCIke3ZhbHVlfVwiYCA6IGBcIiR7dmFsdWUuc2xpY2UoMCwgbWF4TGVuIC0gMyl9Li4uXCJgO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA9PT0gMCA/ICdbXScgOiBgKCR7dmFsdWUubGVuZ3RofSBpdGVtJHt2YWx1ZS5sZW5ndGggPiAxID8gJ3MnIDogJyd9KWA7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICd7fSc7XG4gICAgY29uc3QgcHJldmlldyA9IGtleXMuc2xpY2UoMCwgNCkuam9pbignLCAnKTtcbiAgICBjb25zdCBzdWZmaXggPSBrZXlzLmxlbmd0aCA+IDQgPyBgLCAuLi4gKCR7a2V5cy5sZW5ndGh9IGtleXMpYCA6ICcnO1xuICAgIGNvbnN0IHJlc3VsdCA9IGB7JHtwcmV2aWV3fSR7c3VmZml4fX1gO1xuICAgIHJldHVybiByZXN1bHQubGVuZ3RoIDw9IG1heExlbiA/IHJlc3VsdCA6IGB7JHtrZXlzLmxlbmd0aH0ga2V5c31gO1xuICB9XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuIl19
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL25hcnJhdGl2ZS9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7QUFnQ0gsOEVBQThFO0FBRTlFLE1BQWEseUJBQXlCO0lBY3BDLFlBQVksT0FBNEQ7O1FBWGhFLFlBQU8sR0FBNkIsRUFBRSxDQUFDO1FBQ3ZDLGVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztRQUNyRCxzREFBc0Q7UUFDOUMsa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUNsRCx5REFBeUQ7UUFDakQsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztRQU9uRCxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLEVBQUUsbUNBQUksb0JBQW9CLENBQUM7UUFDOUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGtCQUFrQixtQ0FBSSxJQUFJLENBQUM7UUFDOUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxhQUFhLG1DQUFJLElBQUksQ0FBQztRQUNwRCxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGNBQWMsbUNBQUksRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFRCx5RUFBeUU7SUFFekUsTUFBTSxDQUFDLEtBQWdCO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztZQUFFLE9BQU87UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQzdCLElBQUksRUFBRSxNQUFN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QUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRSxNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sR0FBRyxNQUFNLEdBQUcsQ0FBQztRQUN2QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sUUFBUSxDQUFDO0lBQ3BFLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIOKAlCBJbmxpbmUgbmFycmF0aXZlIGJ1aWxkZXIgdGhhdCBtZXJnZXMgZmxvdyArIGRhdGEgZHVyaW5nIHRyYXZlcnNhbC5cbiAqXG4gKiBSZXBsYWNlcyB0aGUgcG9zdC1wcm9jZXNzaW5nIENvbWJpbmVkTmFycmF0aXZlQnVpbGRlciBieSBpbXBsZW1lbnRpbmcgQk9USFxuICogRmxvd1JlY29yZGVyIChjb250cm9sLWZsb3cgZXZlbnRzKSBhbmQgUmVjb3JkZXIgKHNjb3BlIGRhdGEgZXZlbnRzKS5cbiAqXG4gKiBFdmVudCBvcmRlcmluZyBndWFyYW50ZWVzIHRoaXMgd29ya3M6XG4gKiAgIDEuIFNjb3BlIGV2ZW50cyAob25SZWFkLCBvbldyaXRlKSBmaXJlIERVUklORyBzdGFnZSBleGVjdXRpb25cbiAqICAgMi4gRmxvdyBldmVudHMgKG9uU3RhZ2VFeGVjdXRlZCwgb25EZWNpc2lvbikgZmlyZSBBRlRFUiBzdGFnZSBleGVjdXRpb25cbiAqICAgMy4gQm90aCBjYXJyeSB0aGUgc2FtZSBgc3RhZ2VOYW1lYCDigJQgbm8gbWF0Y2hpbmcgYW1iaWd1aXR5XG4gKlxuICogU28gd2UgYnVmZmVyIHNjb3BlIG9wcyBwZXItc3RhZ2UsIHRoZW4gd2hlbiB0aGUgZmxvdyBldmVudCBhcnJpdmVzLFxuICogZW1pdCB0aGUgc3RhZ2UgZW50cnkgKyBmbHVzaCB0aGUgYnVmZmVyZWQgb3BzIGluIG9uZSBwYXNzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVhZEV2ZW50LCBSZWNvcmRlciwgV3JpdGVFdmVudCB9IGZyb20gJy4uLy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tYmluZWROYXJyYXRpdmVFbnRyeSB9IGZyb20gJy4vQ29tYmluZWROYXJyYXRpdmVCdWlsZGVyLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgRmxvd0JyZWFrRXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyDilIDilIAgVHlwZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmludGVyZmFjZSBCdWZmZXJlZE9wIHtcbiAgdHlwZTogJ3JlYWQnIHwgJ3dyaXRlJztcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlU3VtbWFyeTogc3RyaW5nO1xuICBvcGVyYXRpb24/OiAnc2V0JyB8ICd1cGRhdGUnIHwgJ2RlbGV0ZSc7XG4gIHN0ZXBOdW1iZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyT3B0aW9ucyB7XG4gIGluY2x1ZGVTdGVwTnVtYmVycz86IGJvb2xlYW47XG4gIGluY2x1ZGVWYWx1ZXM/OiBib29sZWFuO1xuICBtYXhWYWx1ZUxlbmd0aD86IG51bWJlcjtcbn1cblxuLy8g4pSA4pSAIFJlY29yZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgY2xhc3MgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlciBpbXBsZW1lbnRzIEZsb3dSZWNvcmRlciwgUmVjb3JkZXIge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIHByaXZhdGUgZW50cmllczogQ29tYmluZWROYXJyYXRpdmVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgcGVuZGluZ09wcyA9IG5ldyBNYXA8c3RyaW5nLCBCdWZmZXJlZE9wW10+KCk7XG4gIC8qKiBQZXItc3ViZmxvdyBzdGFnZSBjb3VudGVycy4gS2V5ICcnID0gcm9vdCBmbG93LiAqL1xuICBwcml2YXRlIHN0YWdlQ291bnRlcnMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAvKiogUGVyLXN1YmZsb3cgZmlyc3Qtc3RhZ2UgZmxhZ3MuIEtleSAnJyA9IHJvb3QgZmxvdy4gKi9cbiAgcHJpdmF0ZSBmaXJzdFN0YWdlRmxhZ3MgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcblxuICBwcml2YXRlIGluY2x1ZGVTdGVwTnVtYmVyczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBpbmNsdWRlVmFsdWVzOiBib29sZWFuO1xuICBwcml2YXRlIG1heFZhbHVlTGVuZ3RoOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXJPcHRpb25zICYgeyBpZD86IHN0cmluZyB9KSB7XG4gICAgdGhpcy5pZCA9IG9wdGlvbnM/LmlkID8/ICdjb21iaW5lZC1uYXJyYXRpdmUnO1xuICAgIHRoaXMuaW5jbHVkZVN0ZXBOdW1iZXJzID0gb3B0aW9ucz8uaW5jbHVkZVN0ZXBOdW1iZXJzID8/IHRydWU7XG4gICAgdGhpcy5pbmNsdWRlVmFsdWVzID0gb3B0aW9ucz8uaW5jbHVkZVZhbHVlcyA/PyB0cnVlO1xuICAgIHRoaXMubWF4VmFsdWVMZW5ndGggPSBvcHRpb25zPy5tYXhWYWx1ZUxlbmd0aCA/PyA4MDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBTY29wZSBjaGFubmVsIChmaXJlcyBmaXJzdCwgZHVyaW5nIHN0YWdlIGV4ZWN1dGlvbikg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgb25SZWFkKGV2ZW50OiBSZWFkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIWV2ZW50LmtleSkgcmV0dXJuO1xuICAgIHRoaXMuYnVmZmVyT3AoZXZlbnQuc3RhZ2VOYW1lLCB7XG4gICAgICB0eXBlOiAncmVhZCcsXG4gICAgICBrZXk6IGV2ZW50LmtleSxcbiAgICAgIHZhbHVlU3VtbWFyeTogc3VtbWFyaXplVmFsdWUoZXZlbnQudmFsdWUsIHRoaXMubWF4VmFsdWVMZW5ndGgpLFxuICAgIH0pO1xuICB9XG5cbiAgb25Xcml0ZShldmVudDogV3JpdGVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuYnVmZmVyT3AoZXZlbnQuc3RhZ2VOYW1lLCB7XG4gICAgICB0eXBlOiAnd3JpdGUnLFxuICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICB2YWx1ZVN1bW1hcnk6IHN1bW1hcml6ZVZhbHVlKGV2ZW50LnZhbHVlLCB0aGlzLm1heFZhbHVlTGVuZ3RoKSxcbiAgICAgIG9wZXJhdGlvbjogZXZlbnQub3BlcmF0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIEZsb3cgY2hhbm5lbCAoZmlyZXMgYWZ0ZXIgc3RhZ2UgZXhlY3V0aW9uKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBvblN0YWdlRXhlY3V0ZWQoZXZlbnQ6IEZsb3dTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc2ZLZXkgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQgPz8gJyc7XG4gICAgY29uc3Qgc3RhZ2VOdW0gPSB0aGlzLmluY3JlbWVudFN0YWdlQ291bnRlcihzZktleSk7XG4gICAgY29uc3QgaXNGaXJzdCA9IHRoaXMuY29uc3VtZUZpcnN0U3RhZ2VGbGFnKHNmS2V5KTtcbiAgICBjb25zdCB0ZXh0ID0gaXNGaXJzdFxuICAgICAgPyBldmVudC5kZXNjcmlwdGlvblxuICAgICAgICA/IGBUaGUgcHJvY2VzcyBiZWdhbjogJHtldmVudC5kZXNjcmlwdGlvbn0uYFxuICAgICAgICA6IGBUaGUgcHJvY2VzcyBiZWdhbiB3aXRoICR7ZXZlbnQuc3RhZ2VOYW1lfS5gXG4gICAgICA6IGV2ZW50LmRlc2NyaXB0aW9uXG4gICAgICA/IGBOZXh0IHN0ZXA6ICR7ZXZlbnQuZGVzY3JpcHRpb259LmBcbiAgICAgIDogYE5leHQsIGl0IG1vdmVkIG9uIHRvICR7ZXZlbnQuc3RhZ2VOYW1lfS5gO1xuXG4gICAgY29uc3Qgc2ZJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZDtcbiAgICBjb25zdCBzdGFnZUlkID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZDtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICB0eXBlOiAnc3RhZ2UnLFxuICAgICAgdGV4dDogYFN0YWdlICR7c3RhZ2VOdW19OiAke3RleHR9YCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VOYW1lOiBldmVudC5zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBzZklkLFxuICAgIH0pO1xuICAgIHRoaXMuZmx1c2hPcHMoZXZlbnQuc3RhZ2VOYW1lLCBzZklkLCBzdGFnZUlkKTtcbiAgfVxuXG4gIG9uRGVjaXNpb24oZXZlbnQ6IEZsb3dEZWNpc2lvbkV2ZW50KTogdm9pZCB7XG4gICAgLy8gRW1pdCB0aGUgZGVjaWRlciBzdGFnZSBlbnRyeSAoZGVjaWRlcnMgZG9uJ3QgZmlyZSBvblN0YWdlRXhlY3V0ZWQpXG4gICAgY29uc3Qgc2ZLZXkgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQgPz8gJyc7XG4gICAgY29uc3Qgc3RhZ2VOdW0gPSB0aGlzLmluY3JlbWVudFN0YWdlQ291bnRlcihzZktleSk7XG4gICAgY29uc3QgaXNGaXJzdCA9IHRoaXMuY29uc3VtZUZpcnN0U3RhZ2VGbGFnKHNmS2V5KTtcbiAgICBjb25zdCBzdGFnZVRleHQgPSBpc0ZpcnN0XG4gICAgICA/IGV2ZW50LmRlc2NyaXB0aW9uXG4gICAgICAgID8gYFRoZSBwcm9jZXNzIGJlZ2FuOiAke2V2ZW50LmRlc2NyaXB0aW9ufS5gXG4gICAgICAgIDogYFRoZSBwcm9jZXNzIGJlZ2FuIHdpdGggJHtldmVudC5kZWNpZGVyfS5gXG4gICAgICA6IGV2ZW50LmRlc2NyaXB0aW9uXG4gICAgICA/IGBOZXh0IHN0ZXA6ICR7ZXZlbnQuZGVzY3JpcHRpb259LmBcbiAgICAgIDogYE5leHQsIGl0IG1vdmVkIG9uIHRvICR7ZXZlbnQuZGVjaWRlcn0uYDtcblxuICAgIGNvbnN0IGRlY2lkZXJTdGFnZUlkID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZDtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICB0eXBlOiAnc3RhZ2UnLFxuICAgICAgdGV4dDogYFN0YWdlICR7c3RhZ2VOdW19OiAke3N0YWdlVGV4dH1gLFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LmRlY2lkZXIsXG4gICAgICBzdGFnZUlkOiBkZWNpZGVyU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICAgIHRoaXMuZmx1c2hPcHMoZXZlbnQuZGVjaWRlciwgZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLCBkZWNpZGVyU3RhZ2VJZCk7XG5cbiAgICAvLyBFbWl0IHRoZSBjb25kaXRpb24gZW50cnlcbiAgICBjb25zdCBicmFuY2hOYW1lID0gZXZlbnQuY2hvc2VuO1xuICAgIGxldCBjb25kaXRpb25UZXh0OiBzdHJpbmc7XG4gICAgaWYgKGV2ZW50LmRlc2NyaXB0aW9uICYmIGV2ZW50LnJhdGlvbmFsZSkge1xuICAgICAgY29uZGl0aW9uVGV4dCA9IGBJdCAke2V2ZW50LmRlc2NyaXB0aW9ufTogJHtldmVudC5yYXRpb25hbGV9LCBzbyBpdCBjaG9zZSAke2JyYW5jaE5hbWV9LmA7XG4gICAgfSBlbHNlIGlmIChldmVudC5kZXNjcmlwdGlvbikge1xuICAgICAgY29uZGl0aW9uVGV4dCA9IGBJdCAke2V2ZW50LmRlc2NyaXB0aW9ufSBhbmQgY2hvc2UgJHticmFuY2hOYW1lfS5gO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQucmF0aW9uYWxlKSB7XG4gICAgICBjb25kaXRpb25UZXh0ID0gYEEgZGVjaXNpb24gd2FzIG1hZGU6ICR7ZXZlbnQucmF0aW9uYWxlfSwgc28gdGhlIHBhdGggdGFrZW4gd2FzICR7YnJhbmNoTmFtZX0uYDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZGl0aW9uVGV4dCA9IGBBIGRlY2lzaW9uIHdhcyBtYWRlLCBhbmQgdGhlIHBhdGggdGFrZW4gd2FzICR7YnJhbmNoTmFtZX0uYDtcbiAgICB9XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgdHlwZTogJ2NvbmRpdGlvbicsXG4gICAgICB0ZXh0OiBgW0NvbmRpdGlvbl06ICR7Y29uZGl0aW9uVGV4dH1gLFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LmRlY2lkZXIsXG4gICAgICBzdGFnZUlkOiBkZWNpZGVyU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25OZXh0KCk6IHZvaWQge1xuICAgIC8vIE5vLW9wLiBvblN0YWdlRXhlY3V0ZWQgYWxyZWFkeSBoYXMgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgbmV4dCBzdGFnZS5cbiAgICAvLyBGb3IgZGVjaWRlcnMgKG5vIG9uU3RhZ2VFeGVjdXRlZCksIG9uRGVjaXNpb24gaGFuZGxlcyB0aGUgYW5ub3VuY2VtZW50LlxuICB9XG5cbiAgb25Gb3JrKGV2ZW50OiBGbG93Rm9ya0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgbmFtZXMgPSBldmVudC5jaGlsZHJlbi5qb2luKCcsICcpO1xuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdmb3JrJyxcbiAgICAgIHRleHQ6IGBbUGFyYWxsZWxdOiAke2V2ZW50LmNoaWxkcmVuLmxlbmd0aH0gcGF0aHMgd2VyZSBleGVjdXRlZCBpbiBwYXJhbGxlbDogJHtuYW1lc30uYCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25TZWxlY3RlZChldmVudDogRmxvd1NlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBuYW1lcyA9IGV2ZW50LnNlbGVjdGVkLmpvaW4oJywgJyk7XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgdHlwZTogJ2ZvcmsnLFxuICAgICAgdGV4dDogYFtTZWxlY3RlZF06ICR7ZXZlbnQuc2VsZWN0ZWQubGVuZ3RofSBvZiAke2V2ZW50LnRvdGFsfSBwYXRocyB3ZXJlIHNlbGVjdGVkOiAke25hbWVzfS5gLFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICBvblN1YmZsb3dFbnRyeShldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIC8vIFJlc2V0IHN0YWdlIGNvdW50ZXIgZm9yIHRoaXMgc3ViZmxvdyBzbyBzdGFnZXMgc3RhcnQgYXQgXCJTdGFnZSAxXCIgb24gcmUtZW50cnlcbiAgICBjb25zdCBzZktleSA9IGV2ZW50LnN1YmZsb3dJZCA/PyAnJztcbiAgICB0aGlzLnN0YWdlQ291bnRlcnMuZGVsZXRlKHNmS2V5KTtcbiAgICB0aGlzLmZpcnN0U3RhZ2VGbGFncy5kZWxldGUoc2ZLZXkpO1xuXG4gICAgY29uc3QgdGV4dCA9IGV2ZW50LmRlc2NyaXB0aW9uXG4gICAgICA/IGBFbnRlcmluZyB0aGUgJHtldmVudC5uYW1lfSBzdWJmbG93OiAke2V2ZW50LmRlc2NyaXB0aW9ufS5gXG4gICAgICA6IGBFbnRlcmluZyB0aGUgJHtldmVudC5uYW1lfSBzdWJmbG93LmA7XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgdHlwZTogJ3N1YmZsb3cnLFxuICAgICAgdGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25TdWJmbG93RXhpdChldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdzdWJmbG93JyxcbiAgICAgIHRleHQ6IGBFeGl0aW5nIHRoZSAke2V2ZW50Lm5hbWV9IHN1YmZsb3cuYCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25Mb29wKGV2ZW50OiBGbG93TG9vcEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGV4dCA9IGV2ZW50LmRlc2NyaXB0aW9uXG4gICAgICA/IGBPbiBwYXNzICR7ZXZlbnQuaXRlcmF0aW9ufTogJHtldmVudC5kZXNjcmlwdGlvbn0gYWdhaW4uYFxuICAgICAgOiBgT24gcGFzcyAke2V2ZW50Lml0ZXJhdGlvbn0gdGhyb3VnaCAke2V2ZW50LnRhcmdldH0uYDtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICB0eXBlOiAnbG9vcCcsXG4gICAgICB0ZXh0LFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICBvbkJyZWFrKGV2ZW50OiBGbG93QnJlYWtFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdicmVhaycsXG4gICAgICB0ZXh0OiBgRXhlY3V0aW9uIHN0b3BwZWQgYXQgJHtldmVudC5zdGFnZU5hbWV9LmAsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgZXJyb3JzIGZyb20gYm90aCBjaGFubmVsczpcbiAgICogLSBGbG93UmVjb3JkZXIub25FcnJvciAoRmxvd0Vycm9yRXZlbnQgd2l0aCBtZXNzYWdlICsgc3RydWN0dXJlZEVycm9yKVxuICAgKiAtIFJlY29yZGVyLm9uRXJyb3IgKEVycm9yRXZlbnQgZnJvbSBzY29wZSBzeXN0ZW0g4oCUIGlnbm9yZWQgZm9yIG5hcnJhdGl2ZSlcbiAgICovXG4gIG9uRXJyb3IoZXZlbnQ6IEZsb3dFcnJvckV2ZW50IHwgeyBzdGFnZU5hbWU/OiBzdHJpbmc7IG1lc3NhZ2U/OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIC8vIE9ubHkgaGFuZGxlIGZsb3cgZXJyb3JzICh3aGljaCBoYXZlIGBtZXNzYWdlYCBhbmQgYHN0cnVjdHVyZWRFcnJvcmApXG4gICAgaWYgKHR5cGVvZiAoZXZlbnQgYXMgRmxvd0Vycm9yRXZlbnQpLm1lc3NhZ2UgIT09ICdzdHJpbmcnKSByZXR1cm47XG4gICAgY29uc3QgZmxvd0V2ZW50ID0gZXZlbnQgYXMgRmxvd0Vycm9yRXZlbnQ7XG5cbiAgICBsZXQgdGV4dCA9IGBBbiBlcnJvciBvY2N1cnJlZCBhdCAke2Zsb3dFdmVudC5zdGFnZU5hbWV9OiAke2Zsb3dFdmVudC5tZXNzYWdlfS5gO1xuICAgIGlmIChmbG93RXZlbnQuc3RydWN0dXJlZEVycm9yPy5pc3N1ZXM/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgZGV0YWlscyA9IGZsb3dFdmVudC5zdHJ1Y3R1cmVkRXJyb3IuaXNzdWVzXG4gICAgICAgIC5tYXAoKGlzc3VlKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IGlzc3VlLnBhdGgubGVuZ3RoID4gMCA/IGlzc3VlLnBhdGguam9pbignLicpIDogJyhyb290KSc7XG4gICAgICAgICAgcmV0dXJuIGAke3BhdGh9OiAke2lzc3VlLm1lc3NhZ2V9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJzsgJyk7XG4gICAgICB0ZXh0ICs9IGAgVmFsaWRhdGlvbiBpc3N1ZXM6ICR7ZGV0YWlsc30uYDtcbiAgICB9XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgIHRleHQ6IGBbRXJyb3JdOiAke3RleHR9YCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VOYW1lOiBmbG93RXZlbnQuc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogZmxvd0V2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGZsb3dFdmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICAvLyDilIDilIAgT3V0cHV0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBSZXR1cm5zIHN0cnVjdHVyZWQgZW50cmllcyBmb3IgcHJvZ3JhbW1hdGljIGNvbnN1bXB0aW9uLiAqL1xuICBnZXRFbnRyaWVzKCk6IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmVudHJpZXNdO1xuICB9XG5cbiAgLyoqIFJldHVybnMgZm9ybWF0dGVkIG5hcnJhdGl2ZSBsaW5lcyAoc2FtZSBvdXRwdXQgYXMgQ29tYmluZWROYXJyYXRpdmVCdWlsZGVyLmJ1aWxkKS4gKi9cbiAgZ2V0TmFycmF0aXZlKGluZGVudCA9ICcgICcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcy5tYXAoKGVudHJ5KSA9PiBgJHtpbmRlbnQucmVwZWF0KGVudHJ5LmRlcHRoKX0ke2VudHJ5LnRleHR9YCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBlbnRyaWVzIGdyb3VwZWQgYnkgc3ViZmxvd0lkIGZvciBzdHJ1Y3R1cmVkIGFjY2Vzcy5cbiAgICogUm9vdC1sZXZlbCBlbnRyaWVzIGhhdmUgc3ViZmxvd0lkID0gdW5kZWZpbmVkLlxuICAgKi9cbiAgZ2V0RW50cmllc0J5U3ViZmxvdygpOiBSZWNvcmQ8c3RyaW5nLCBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIENvbWJpbmVkTmFycmF0aXZlRW50cnlbXT4gPSB7ICcnOiBbXSB9O1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzKSB7XG4gICAgICBjb25zdCBrZXkgPSBlbnRyeS5zdWJmbG93SWQgPz8gJyc7XG4gICAgICBpZiAoIXJlc3VsdFtrZXldKSByZXN1bHRba2V5XSA9IFtdO1xuICAgICAgcmVzdWx0W2tleV0ucHVzaChlbnRyeSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKiogQ2xlYXJzIGFsbCBzdGF0ZS4gQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYmVmb3JlIGVhY2ggcnVuLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmVudHJpZXMgPSBbXTtcbiAgICB0aGlzLnBlbmRpbmdPcHMuY2xlYXIoKTtcbiAgICB0aGlzLnN0YWdlQ291bnRlcnMuY2xlYXIoKTtcbiAgICB0aGlzLmZpcnN0U3RhZ2VGbGFncy5jbGVhcigpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFByaXZhdGUgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogSW5jcmVtZW50IGFuZCByZXR1cm4gdGhlIHN0YWdlIGNvdW50ZXIgZm9yIGEgZ2l2ZW4gc3ViZmxvdyAoJycgPSByb290KS4gKi9cbiAgcHJpdmF0ZSBpbmNyZW1lbnRTdGFnZUNvdW50ZXIoc3ViZmxvd0tleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zdGFnZUNvdW50ZXJzLmdldChzdWJmbG93S2V5KSA/PyAwO1xuICAgIGNvbnN0IG5leHQgPSBjdXJyZW50ICsgMTtcbiAgICB0aGlzLnN0YWdlQ291bnRlcnMuc2V0KHN1YmZsb3dLZXksIG5leHQpO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG5cbiAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBzdGFnZSBmb3IgdGhlIGdpdmVuIHN1YmZsb3csIGNvbnN1bWluZyB0aGUgZmxhZy4gKi9cbiAgcHJpdmF0ZSBjb25zdW1lRmlyc3RTdGFnZUZsYWcoc3ViZmxvd0tleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmZpcnN0U3RhZ2VGbGFncy5oYXMoc3ViZmxvd0tleSkpIHtcbiAgICAgIHRoaXMuZmlyc3RTdGFnZUZsYWdzLnNldChzdWJmbG93S2V5LCBmYWxzZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBidWZmZXJPcChzdGFnZU5hbWU6IHN0cmluZywgb3A6IE9taXQ8QnVmZmVyZWRPcCwgJ3N0ZXBOdW1iZXInPik6IHZvaWQge1xuICAgIGxldCBvcHMgPSB0aGlzLnBlbmRpbmdPcHMuZ2V0KHN0YWdlTmFtZSk7XG4gICAgaWYgKCFvcHMpIHtcbiAgICAgIG9wcyA9IFtdO1xuICAgICAgdGhpcy5wZW5kaW5nT3BzLnNldChzdGFnZU5hbWUsIG9wcyk7XG4gICAgfVxuICAgIG9wcy5wdXNoKHsgLi4ub3AsIHN0ZXBOdW1iZXI6IG9wcy5sZW5ndGggKyAxIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaE9wcyhzdGFnZU5hbWU6IHN0cmluZywgc3ViZmxvd0lkPzogc3RyaW5nLCBzdGFnZUlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgb3BzID0gdGhpcy5wZW5kaW5nT3BzLmdldChzdGFnZU5hbWUpO1xuICAgIGlmICghb3BzIHx8IG9wcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGZvciAoY29uc3Qgb3Agb2Ygb3BzKSB7XG4gICAgICBjb25zdCBzdGVwUHJlZml4ID0gdGhpcy5pbmNsdWRlU3RlcE51bWJlcnMgPyBgU3RlcCAke29wLnN0ZXBOdW1iZXJ9OiBgIDogJyc7XG5cbiAgICAgIGxldCB0ZXh0OiBzdHJpbmc7XG4gICAgICBpZiAob3AudHlwZSA9PT0gJ3JlYWQnKSB7XG4gICAgICAgIHRleHQgPVxuICAgICAgICAgIHRoaXMuaW5jbHVkZVZhbHVlcyAmJiBvcC52YWx1ZVN1bW1hcnlcbiAgICAgICAgICAgID8gYCR7c3RlcFByZWZpeH1SZWFkICR7b3Aua2V5fSA9ICR7b3AudmFsdWVTdW1tYXJ5fWBcbiAgICAgICAgICAgIDogYCR7c3RlcFByZWZpeH1SZWFkICR7b3Aua2V5fWA7XG4gICAgICB9IGVsc2UgaWYgKG9wLm9wZXJhdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgdGV4dCA9IGAke3N0ZXBQcmVmaXh9RGVsZXRlICR7b3Aua2V5fWA7XG4gICAgICB9IGVsc2UgaWYgKG9wLm9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgdGV4dCA9IHRoaXMuaW5jbHVkZVZhbHVlc1xuICAgICAgICAgID8gYCR7c3RlcFByZWZpeH1VcGRhdGUgJHtvcC5rZXl9ID0gJHtvcC52YWx1ZVN1bW1hcnl9YFxuICAgICAgICAgIDogYCR7c3RlcFByZWZpeH1VcGRhdGUgJHtvcC5rZXl9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHQgPSB0aGlzLmluY2x1ZGVWYWx1ZXNcbiAgICAgICAgICA/IGAke3N0ZXBQcmVmaXh9V3JpdGUgJHtvcC5rZXl9ID0gJHtvcC52YWx1ZVN1bW1hcnl9YFxuICAgICAgICAgIDogYCR7c3RlcFByZWZpeH1Xcml0ZSAke29wLmtleX1gO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgdGV4dCxcbiAgICAgICAgZGVwdGg6IDEsXG4gICAgICAgIHN0YWdlTmFtZSxcbiAgICAgICAgc3RhZ2VJZCxcbiAgICAgICAgc3RlcE51bWJlcjogb3Auc3RlcE51bWJlcixcbiAgICAgICAgc3ViZmxvd0lkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nT3BzLmRlbGV0ZShzdGFnZU5hbWUpO1xuICB9XG59XG5cbi8vIOKUgOKUgCBWYWx1ZSBzdW1tYXJpemVyIChzYW1lIGxvZ2ljIGFzIE5hcnJhdGl2ZVJlY29yZGVyKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gc3VtbWFyaXplVmFsdWUodmFsdWU6IHVua25vd24sIG1heExlbjogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAndW5kZWZpbmVkJztcbiAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJ251bGwnO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPD0gbWF4TGVuID8gYFwiJHt2YWx1ZX1cImAgOiBgXCIke3ZhbHVlLnNsaWNlKDAsIG1heExlbiAtIDMpfS4uLlwiYDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPT09IDAgPyAnW10nIDogYCgke3ZhbHVlLmxlbmd0aH0gaXRlbSR7dmFsdWUubGVuZ3RoID4gMSA/ICdzJyA6ICcnfSlgO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHJldHVybiAne30nO1xuICAgIGNvbnN0IHByZXZpZXcgPSBrZXlzLnNsaWNlKDAsIDQpLmpvaW4oJywgJyk7XG4gICAgY29uc3Qgc3VmZml4ID0ga2V5cy5sZW5ndGggPiA0ID8gYCwgLi4uICgke2tleXMubGVuZ3RofSBrZXlzKWAgOiAnJztcbiAgICBjb25zdCByZXN1bHQgPSBgeyR7cHJldmlld30ke3N1ZmZpeH19YDtcbiAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA8PSBtYXhMZW4gPyByZXN1bHQgOiBgeyR7a2V5cy5sZW5ndGh9IGtleXN9YDtcbiAgfVxuICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cbiJdfQ==
|
|
@@ -20,6 +20,8 @@ export interface CombinedNarrativeEntry {
|
|
|
20
20
|
text: string;
|
|
21
21
|
depth: number;
|
|
22
22
|
stageName?: string;
|
|
23
|
+
/** Stable stage identifier from the builder (matches spec node id). Use for UI sync. */
|
|
24
|
+
stageId?: string;
|
|
23
25
|
stepNumber?: number;
|
|
24
26
|
/** Subflow ID when this entry was generated inside a subflow. Undefined for root-level. */
|
|
25
27
|
subflowId?: string;
|
package/package.json
CHANGED