jsii-pacmak 1.55.1 → 1.56.0
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.
|
@@ -152,10 +152,10 @@ exports.DotNetDocGenerator = DotNetDocGenerator;
|
|
|
152
152
|
* Uppercase the first letter
|
|
153
153
|
*/
|
|
154
154
|
function ucFirst(x) {
|
|
155
|
-
return x.
|
|
155
|
+
return x.slice(0, 1).toUpperCase() + x.slice(1);
|
|
156
156
|
}
|
|
157
157
|
function shouldMentionStability(s) {
|
|
158
158
|
// Don't render "stable" or "external", those are both stable by implication
|
|
159
159
|
return s === spec.Stability.Deprecated || s === spec.Stability.Experimental;
|
|
160
160
|
}
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0ZG9jZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG90bmV0ZG9jZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUVuQywrQ0FNc0I7QUFDdEIseUNBQXlDO0FBRXpDLHNDQUEwQztBQUMxQywyQ0FBOEM7QUFFOUM7Ozs7R0FJRztBQUNILE1BQWEsa0JBQWtCO0lBSTdCLFlBQ0UsSUFBZSxFQUNFLE9BQWdCLEVBQ2hCLFFBQXVCO1FBRHZCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsYUFBUSxHQUFSLFFBQVEsQ0FBZTtRQUx6QixjQUFTLEdBQW9CLElBQUksMkJBQWUsRUFBRSxDQUFDO1FBT2xFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxRQUFRLENBQUMsR0FBc0IsRUFBRSxXQUF3QjtRQUM5RCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBRXRCLDZFQUE2RTtRQUM3RSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxzQkFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXBELGtEQUFrRDtRQUNsRCxNQUFNLFNBQVMsR0FBRyxHQUFrQixDQUFDO1FBQ3JDLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRTtZQUN4QixTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFOztnQkFDckMsbUZBQW1GO2dCQUNuRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztxQkFDN0Isb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztxQkFDaEMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLGNBQUUsS0FBSyxDQUFDLElBQUksMENBQUUsT0FB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RUFBRTtZQUN0RCxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN0QjtRQUNELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sUUFBUSxHQUFHLEdBQUcsS0FBSyxNQUFNLENBQUM7UUFDaEMsS0FBSyxNQUFNLElBQUksSUFBSSxTQUFTO2FBQ3pCLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztDQUNGO0FBckxELGdEQXFMQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxPQUFPLENBQUMsQ0FBUztJQUN4QixPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsQ0FBaUI7SUFDL0MsNEVBQTRFO0lBQzVFLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc3BlYyBmcm9tICdAanNpaS9zcGVjJztcbmltcG9ydCB7IENvZGVNYWtlciB9IGZyb20gJ2NvZGVtYWtlcic7XG5pbXBvcnQge1xuICBSb3NldHRhLFxuICBUYXJnZXRMYW5ndWFnZSxcbiAgZW5mb3JjZXNTdHJpY3RNb2RlLFxuICBtYXJrRG93blRvWG1sRG9jLFxuICBBcGlMb2NhdGlvbixcbn0gZnJvbSAnanNpaS1yb3NldHRhJztcbmltcG9ydCAqIGFzIHhtbGJ1aWxkZXIgZnJvbSAneG1sYnVpbGRlcic7XG5cbmltcG9ydCB7IHJlbmRlclN1bW1hcnkgfSBmcm9tICcuLi9fdXRpbHMnO1xuaW1wb3J0IHsgRG90TmV0TmFtZVV0aWxzIH0gZnJvbSAnLi9uYW1ldXRpbHMnO1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgSnNpaSBhdHRyaWJ1dGVzIGFuZCBjYWxscyBmb3IgdGhlIC5ORVQgcnVudGltZVxuICpcbiAqIFVzZXMgdGhlIHNhbWUgaW5zdGFuY2Ugb2YgQ29kZU1ha2VyIGFzIHRoZSByZXN0IG9mIHRoZSBjb2RlXG4gKi9cbmV4cG9ydCBjbGFzcyBEb3ROZXREb2NHZW5lcmF0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IGNvZGU6IENvZGVNYWtlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1ldXRpbHM6IERvdE5ldE5hbWVVdGlscyA9IG5ldyBEb3ROZXROYW1lVXRpbHMoKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgY29kZTogQ29kZU1ha2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm9zZXR0YTogUm9zZXR0YSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFzc2VtYmx5OiBzcGVjLkFzc2VtYmx5LFxuICApIHtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFsbCBkb2N1bWVudGF0aW9uIGRlcGVuZGluZyBvbiB3aGF0IGlzIGF2YWlsYWJsZSBpbiB0aGUganNpaSBtb2RlbFxuICAgKlxuICAgKiBVc2VkIGJ5IGFsbCBraW5kIG9mIG1lbWJlcnMgKyBjbGFzc2VzLCBpbnRlcmZhY2VzLCBlbnVtc1xuICAgKiBPcmRlciBzaG91bGQgYmVcbiAgICogU3VtbWFyeVxuICAgKiBQYXJhbVxuICAgKiBSZXR1cm5zXG4gICAqIFJlbWFya3MgKGluY2x1ZGVzIGV4YW1wbGVzLCBsaW5rcywgZGVwcmVjYXRlZClcbiAgICovXG4gIHB1YmxpYyBlbWl0RG9jcyhvYmo6IHNwZWMuRG9jdW1lbnRhYmxlLCBhcGlMb2NhdGlvbjogQXBpTG9jYXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBkb2NzID0gb2JqLmRvY3M7XG5cbiAgICAvLyBUaGUgZG9jcyBtYXkgYmUgdW5kZWZpbmVkIGF0IHRoZSBtZXRob2QgbGV2ZWwgYnV0IG5vdCB0aGUgcGFyYW1ldGVycyBsZXZlbFxuICAgIHRoaXMuZW1pdFhtbERvYygnc3VtbWFyeScsIHJlbmRlclN1bW1hcnkob2JqLmRvY3MpKTtcblxuICAgIC8vIEhhbmRsaW5nIHBhcmFtZXRlcnMgb25seSBpZiB0aGUgb2JqIGlzIGEgbWV0aG9kXG4gICAgY29uc3Qgb2JqTWV0aG9kID0gb2JqIGFzIHNwZWMuTWV0aG9kO1xuICAgIGlmIChvYmpNZXRob2QucGFyYW1ldGVycykge1xuICAgICAgb2JqTWV0aG9kLnBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW0pID0+IHtcbiAgICAgICAgLy8gUmVtb3ZlIGFueSBzbHVnIGBAYCBmcm9tIHRoZSBwYXJhbWV0ZXIgbmFtZSAtIGl0J3Mgbm90IHN1cHBvc2VkIHRvIHNob3cgdXAgaGVyZS5cbiAgICAgICAgY29uc3QgcGFyYW1OYW1lID0gdGhpcy5uYW1ldXRpbHNcbiAgICAgICAgICAuY29udmVydFBhcmFtZXRlck5hbWUocGFyYW0ubmFtZSlcbiAgICAgICAgICAucmVwbGFjZSgvXkAvLCAnJyk7XG4gICAgICAgIHRoaXMuZW1pdFhtbERvYygncGFyYW0nLCBwYXJhbS5kb2NzPy5zdW1tYXJ5ID8/ICcnLCB7XG4gICAgICAgICAgYXR0cmlidXRlczogeyBuYW1lOiBwYXJhbU5hbWUgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBdCB0aGlzIHBkb2NmeCBuYW1lc3BhY2Vkb2NkIGEgdmFsaWQgaW5zdGFuY2Ugb2YgZG9jc1xuICAgIGlmICghZG9jcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkb2NzLnJldHVybnMpIHtcbiAgICAgIHRoaXMuZW1pdFhtbERvYygncmV0dXJucycsIGRvY3MucmV0dXJucyk7XG4gICAgfVxuXG4gICAgLy8gUmVtYXJrcyBkb2VzIG5vdCB1c2UgZW1pdFhtbERvYygpIGJlY2F1c2UgdGhlIHJlbWFya3MgY2FuIGNvbnRhaW4gY29kZSBibG9ja3NcbiAgICAvLyB3aGljaCBhcmUgZmVuY2VkIHdpdGggPGNvZGU+IHRhZ3MsIHdoaWNoIHdvdWxkIGJlIGVzY2FwZWQgdG9cbiAgICAvLyAmbHQ7Y29kZSZndDsgaWYgd2UgdXNlZCB0aGUgeG1sIGJ1aWxkZXIuXG4gICAgY29uc3QgcmVtYXJrcyA9IHRoaXMucmVuZGVyUmVtYXJrcyhkb2NzLCBhcGlMb2NhdGlvbik7XG4gICAgaWYgKHJlbWFya3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJy8vLyA8cmVtYXJrcz4nKTtcbiAgICAgIHJlbWFya3MuZm9yRWFjaCgocikgPT4gdGhpcy5jb2RlLmxpbmUoYC8vLyAke3J9YC50cmltUmlnaHQoKSkpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJy8vLyA8L3JlbWFya3M+Jyk7XG4gICAgfVxuXG4gICAgaWYgKGRvY3MuZXhhbXBsZSkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJy8vLyA8ZXhhbXBsZT4nKTtcbiAgICAgIHRoaXMuZW1pdFhtbERvYygnY29kZScsIHRoaXMuY29udmVydEV4YW1wbGUoZG9jcy5leGFtcGxlLCBhcGlMb2NhdGlvbikpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJy8vLyA8L2V4YW1wbGU+Jyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGVtaXRNYXJrZG93bkFzUmVtYXJrcyhcbiAgICBtYXJrZG93bjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGFwaUxvY2F0aW9uOiBBcGlMb2NhdGlvbixcbiAgKSB7XG4gICAgaWYgKCFtYXJrZG93bikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSBtYXJrRG93blRvWG1sRG9jKFxuICAgICAgdGhpcy5jb252ZXJ0U2FtcGxlc0luTWFya2Rvd24obWFya2Rvd24sIGFwaUxvY2F0aW9uKSxcbiAgICApO1xuICAgIGNvbnN0IGxpbmVzID0gdHJhbnNsYXRlZC5zcGxpdCgnXFxuJyk7XG5cbiAgICB0aGlzLmNvZGUubGluZSgnLy8vIDxyZW1hcmtzPicpO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYC8vLyAke2xpbmV9YC50cmltUmlnaHQoKSk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5saW5lKCcvLy8gPC9yZW1hcmtzPicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxpbmVzIHRoYXQgc2hvdWxkIGdvIGludG8gdGhlIDxyZW1hcmtzPiBzZWN0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlbmRlclJlbWFya3MoZG9jczogc3BlYy5Eb2NzLCBhcGlMb2NhdGlvbjogQXBpTG9jYXRpb24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmV0OiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKGRvY3MucmVtYXJrcykge1xuICAgICAgY29uc3QgdHJhbnNsYXRlZCA9IG1hcmtEb3duVG9YbWxEb2MoXG4gICAgICAgIHRoaXMuY29udmVydFNhbXBsZXNJbk1hcmtkb3duKGRvY3MucmVtYXJrcywgYXBpTG9jYXRpb24pLFxuICAgICAgKTtcbiAgICAgIHJldC5wdXNoKC4uLnRyYW5zbGF0ZWQuc3BsaXQoJ1xcbicpKTtcbiAgICAgIHJldC5wdXNoKCcnKTtcbiAgICB9XG5cbiAgICAvLyBBbGwgdGhlIFwidGFnc1wiIG5lZWQgdG8gYmUgcmVuZGVyZWQgd2l0aCBlbXB5dCBsaW5lcyBiZXR3ZWVuIHRoZW0gb3IgdGhleSdsbCBiZSB3b3JkIHdyYXBwZWQuXG5cbiAgICBpZiAoZG9jcy5kZWZhdWx0KSB7XG4gICAgICBlbWl0RG9jQXR0cmlidXRlKCdkZWZhdWx0JywgZG9jcy5kZWZhdWx0KTtcbiAgICB9XG4gICAgaWYgKGRvY3Muc3RhYmlsaXR5ICYmIHNob3VsZE1lbnRpb25TdGFiaWxpdHkoZG9jcy5zdGFiaWxpdHkpKSB7XG4gICAgICBlbWl0RG9jQXR0cmlidXRlKFxuICAgICAgICAnc3RhYmlsaXR5JyxcbiAgICAgICAgdGhpcy5uYW1ldXRpbHMuY2FwaXRhbGl6ZVdvcmQoZG9jcy5zdGFiaWxpdHkpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRvY3Muc2VlKSB7XG4gICAgICBlbWl0RG9jQXR0cmlidXRlKCdzZWUnLCBkb2NzLnNlZSk7XG4gICAgfVxuICAgIGlmIChkb2NzLnN1YmNsYXNzYWJsZSkge1xuICAgICAgZW1pdERvY0F0dHJpYnV0ZSgnc3ViY2xhc3NhYmxlJywgJycpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhkb2NzLmN1c3RvbSA/PyB7fSkpIHtcbiAgICAgIGNvbnN0IGV4dHJhU3BhY2UgPSBrID09PSAnbGluaycgPyAnICcgOiAnJzsgLy8gRXh0cmEgc3BhY2UgZm9yICdAbGluaycgdG8ga2VlcCB1bml0IHRlc3RzIGhhcHB5XG4gICAgICBlbWl0RG9jQXR0cmlidXRlKGssIHYgKyBleHRyYVNwYWNlKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgZW1wdHkgbGluZXNcbiAgICB3aGlsZSAocmV0Lmxlbmd0aCA+IDAgJiYgcmV0WzBdID09PSAnJykge1xuICAgICAgcmV0LnNoaWZ0KCk7XG4gICAgfVxuICAgIHdoaWxlIChyZXQubGVuZ3RoID4gMCAmJiByZXRbcmV0Lmxlbmd0aCAtIDFdID09PSAnJykge1xuICAgICAgcmV0LnBvcCgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG5cbiAgICBmdW5jdGlvbiBlbWl0RG9jQXR0cmlidXRlKG5hbWU6IHN0cmluZywgY29udGVudHM6IHN0cmluZykge1xuICAgICAgY29uc3QgbHMgPSBjb250ZW50cy5zcGxpdCgnXFxuJyk7XG4gICAgICByZXQucHVzaChgPHN0cm9uZz4ke3VjRmlyc3QobmFtZSl9PC9zdHJvbmc+OiAke2xzWzBdfWApO1xuICAgICAgcmV0LnB1c2goLi4ubHMuc2xpY2UoMSkpO1xuICAgICAgcmV0LnB1c2goJycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEV4YW1wbGUoZXhhbXBsZTogc3RyaW5nLCBhcGlMb2NhdGlvbjogQXBpTG9jYXRpb24pOiBzdHJpbmcge1xuICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSB0aGlzLnJvc2V0dGEudHJhbnNsYXRlRXhhbXBsZShcbiAgICAgIGFwaUxvY2F0aW9uLFxuICAgICAgZXhhbXBsZSxcbiAgICAgIFRhcmdldExhbmd1YWdlLkNTSEFSUCxcbiAgICAgIGVuZm9yY2VzU3RyaWN0TW9kZSh0aGlzLmFzc2VtYmx5KSxcbiAgICApO1xuICAgIHJldHVybiB0cmFuc2xhdGVkLnNvdXJjZTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFNhbXBsZXNJbk1hcmtkb3duKG1hcmtkb3duOiBzdHJpbmcsIGFwaTogQXBpTG9jYXRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJvc2V0dGEudHJhbnNsYXRlU25pcHBldHNJbk1hcmtkb3duKFxuICAgICAgYXBpLFxuICAgICAgbWFya2Rvd24sXG4gICAgICBUYXJnZXRMYW5ndWFnZS5DU0hBUlAsXG4gICAgICBlbmZvcmNlc1N0cmljdE1vZGUodGhpcy5hc3NlbWJseSksXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGVtaXRYbWxEb2MoXG4gICAgdGFnOiBzdHJpbmcsXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHsgYXR0cmlidXRlcyA9IHt9IH06IHsgYXR0cmlidXRlcz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9IH0gPSB7fSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeG1sID0geG1sYnVpbGRlci5jcmVhdGUodGFnLCB7IGhlYWRsZXNzOiB0cnVlIH0pLnRleHQoY29udGVudCk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICB4bWwuYXR0KG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgeG1sc3RyaW5nID0geG1sLmVuZCh7IGFsbG93RW1wdHk6IHRydWUsIHByZXR0eTogZmFsc2UgfSk7XG4gICAgY29uc3QgdHJpbUxlZnQgPSB0YWcgIT09ICdjb2RlJztcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgeG1sc3RyaW5nXG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAubWFwKCh4KSA9PiAodHJpbUxlZnQgPyB4LnRyaW0oKSA6IHgudHJpbVJpZ2h0KCkpKSkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYC8vLyAke2xpbmV9YCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVXBwZXJjYXNlIHRoZSBmaXJzdCBsZXR0ZXJcbiAqL1xuZnVuY3Rpb24gdWNGaXJzdCh4OiBzdHJpbmcpIHtcbiAgcmV0dXJuIHguc3Vic3RyKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyB4LnN1YnN0cigxKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkTWVudGlvblN0YWJpbGl0eShzOiBzcGVjLlN0YWJpbGl0eSkge1xuICAvLyBEb24ndCByZW5kZXIgXCJzdGFibGVcIiBvciBcImV4dGVybmFsXCIsIHRob3NlIGFyZSBib3RoIHN0YWJsZSBieSBpbXBsaWNhdGlvblxuICByZXR1cm4gcyA9PT0gc3BlYy5TdGFiaWxpdHkuRGVwcmVjYXRlZCB8fCBzID09PSBzcGVjLlN0YWJpbGl0eS5FeHBlcmltZW50YWw7XG59XG4iXX0=
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0ZG9jZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG90bmV0ZG9jZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUVuQywrQ0FNc0I7QUFDdEIseUNBQXlDO0FBRXpDLHNDQUEwQztBQUMxQywyQ0FBOEM7QUFFOUM7Ozs7R0FJRztBQUNILE1BQWEsa0JBQWtCO0lBSTdCLFlBQ0UsSUFBZSxFQUNFLE9BQWdCLEVBQ2hCLFFBQXVCO1FBRHZCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsYUFBUSxHQUFSLFFBQVEsQ0FBZTtRQUx6QixjQUFTLEdBQW9CLElBQUksMkJBQWUsRUFBRSxDQUFDO1FBT2xFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxRQUFRLENBQUMsR0FBc0IsRUFBRSxXQUF3QjtRQUM5RCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBRXRCLDZFQUE2RTtRQUM3RSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxzQkFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXBELGtEQUFrRDtRQUNsRCxNQUFNLFNBQVMsR0FBRyxHQUFrQixDQUFDO1FBQ3JDLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRTtZQUN4QixTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFOztnQkFDckMsbUZBQW1GO2dCQUNuRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztxQkFDN0Isb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztxQkFDaEMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLGNBQUUsS0FBSyxDQUFDLElBQUksMENBQUUsT0FB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RUFBRTtZQUN0RCxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN0QjtRQUNELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sUUFBUSxHQUFHLEdBQUcsS0FBSyxNQUFNLENBQUM7UUFDaEMsS0FBSyxNQUFNLElBQUksSUFBSSxTQUFTO2FBQ3pCLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztDQUNGO0FBckxELGdEQXFMQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxPQUFPLENBQUMsQ0FBUztJQUN4QixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsQ0FBaUI7SUFDL0MsNEVBQTRFO0lBQzVFLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc3BlYyBmcm9tICdAanNpaS9zcGVjJztcbmltcG9ydCB7IENvZGVNYWtlciB9IGZyb20gJ2NvZGVtYWtlcic7XG5pbXBvcnQge1xuICBSb3NldHRhLFxuICBUYXJnZXRMYW5ndWFnZSxcbiAgZW5mb3JjZXNTdHJpY3RNb2RlLFxuICBtYXJrRG93blRvWG1sRG9jLFxuICBBcGlMb2NhdGlvbixcbn0gZnJvbSAnanNpaS1yb3NldHRhJztcbmltcG9ydCAqIGFzIHhtbGJ1aWxkZXIgZnJvbSAneG1sYnVpbGRlcic7XG5cbmltcG9ydCB7IHJlbmRlclN1bW1hcnkgfSBmcm9tICcuLi9fdXRpbHMnO1xuaW1wb3J0IHsgRG90TmV0TmFtZVV0aWxzIH0gZnJvbSAnLi9uYW1ldXRpbHMnO1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgSnNpaSBhdHRyaWJ1dGVzIGFuZCBjYWxscyBmb3IgdGhlIC5ORVQgcnVudGltZVxuICpcbiAqIFVzZXMgdGhlIHNhbWUgaW5zdGFuY2Ugb2YgQ29kZU1ha2VyIGFzIHRoZSByZXN0IG9mIHRoZSBjb2RlXG4gKi9cbmV4cG9ydCBjbGFzcyBEb3ROZXREb2NHZW5lcmF0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IGNvZGU6IENvZGVNYWtlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1ldXRpbHM6IERvdE5ldE5hbWVVdGlscyA9IG5ldyBEb3ROZXROYW1lVXRpbHMoKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgY29kZTogQ29kZU1ha2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm9zZXR0YTogUm9zZXR0YSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFzc2VtYmx5OiBzcGVjLkFzc2VtYmx5LFxuICApIHtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFsbCBkb2N1bWVudGF0aW9uIGRlcGVuZGluZyBvbiB3aGF0IGlzIGF2YWlsYWJsZSBpbiB0aGUganNpaSBtb2RlbFxuICAgKlxuICAgKiBVc2VkIGJ5IGFsbCBraW5kIG9mIG1lbWJlcnMgKyBjbGFzc2VzLCBpbnRlcmZhY2VzLCBlbnVtc1xuICAgKiBPcmRlciBzaG91bGQgYmVcbiAgICogU3VtbWFyeVxuICAgKiBQYXJhbVxuICAgKiBSZXR1cm5zXG4gICAqIFJlbWFya3MgKGluY2x1ZGVzIGV4YW1wbGVzLCBsaW5rcywgZGVwcmVjYXRlZClcbiAgICovXG4gIHB1YmxpYyBlbWl0RG9jcyhvYmo6IHNwZWMuRG9jdW1lbnRhYmxlLCBhcGlMb2NhdGlvbjogQXBpTG9jYXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBkb2NzID0gb2JqLmRvY3M7XG5cbiAgICAvLyBUaGUgZG9jcyBtYXkgYmUgdW5kZWZpbmVkIGF0IHRoZSBtZXRob2QgbGV2ZWwgYnV0IG5vdCB0aGUgcGFyYW1ldGVycyBsZXZlbFxuICAgIHRoaXMuZW1pdFhtbERvYygnc3VtbWFyeScsIHJlbmRlclN1bW1hcnkob2JqLmRvY3MpKTtcblxuICAgIC8vIEhhbmRsaW5nIHBhcmFtZXRlcnMgb25seSBpZiB0aGUgb2JqIGlzIGEgbWV0aG9kXG4gICAgY29uc3Qgb2JqTWV0aG9kID0gb2JqIGFzIHNwZWMuTWV0aG9kO1xuICAgIGlmIChvYmpNZXRob2QucGFyYW1ldGVycykge1xuICAgICAgb2JqTWV0aG9kLnBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW0pID0+IHtcbiAgICAgICAgLy8gUmVtb3ZlIGFueSBzbHVnIGBAYCBmcm9tIHRoZSBwYXJhbWV0ZXIgbmFtZSAtIGl0J3Mgbm90IHN1cHBvc2VkIHRvIHNob3cgdXAgaGVyZS5cbiAgICAgICAgY29uc3QgcGFyYW1OYW1lID0gdGhpcy5uYW1ldXRpbHNcbiAgICAgICAgICAuY29udmVydFBhcmFtZXRlck5hbWUocGFyYW0ubmFtZSlcbiAgICAgICAgICAucmVwbGFjZSgvXkAvLCAnJyk7XG4gICAgICAgIHRoaXMuZW1pdFhtbERvYygncGFyYW0nLCBwYXJhbS5kb2NzPy5zdW1tYXJ5ID8/ICcnLCB7XG4gICAgICAgICAgYXR0cmlidXRlczogeyBuYW1lOiBwYXJhbU5hbWUgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBdCB0aGlzIHBkb2NmeCBuYW1lc3BhY2Vkb2NkIGEgdmFsaWQgaW5zdGFuY2Ugb2YgZG9jc1xuICAgIGlmICghZG9jcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkb2NzLnJldHVybnMpIHtcbiAgICAgIHRoaXMuZW1pdFhtbERvYygncmV0dXJucycsIGRvY3MucmV0dXJucyk7XG4gICAgfVxuXG4gICAgLy8gUmVtYXJrcyBkb2VzIG5vdCB1c2UgZW1pdFhtbERvYygpIGJlY2F1c2UgdGhlIHJlbWFya3MgY2FuIGNvbnRhaW4gY29kZSBibG9ja3NcbiAgICAvLyB3aGljaCBhcmUgZmVuY2VkIHdpdGggPGNvZGU+IHRhZ3MsIHdoaWNoIHdvdWxkIGJlIGVzY2FwZWQgdG9cbiAgICAvLyAmbHQ7Y29kZSZndDsgaWYgd2UgdXNlZCB0aGUgeG1sIGJ1aWxkZXIuXG4gICAgY29uc3QgcmVtYXJrcyA9IHRoaXMucmVuZGVyUmVtYXJrcyhkb2NzLCBhcGlMb2NhdGlvbik7XG4gICAgaWYgKHJlbWFya3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJy8vLyA8cmVtYXJrcz4nKTtcbiAgICAgIHJlbWFya3MuZm9yRWFjaCgocikgPT4gdGhpcy5jb2RlLmxpbmUoYC8vLyAke3J9YC50cmltUmlnaHQoKSkpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJy8vLyA8L3JlbWFya3M+Jyk7XG4gICAgfVxuXG4gICAgaWYgKGRvY3MuZXhhbXBsZSkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJy8vLyA8ZXhhbXBsZT4nKTtcbiAgICAgIHRoaXMuZW1pdFhtbERvYygnY29kZScsIHRoaXMuY29udmVydEV4YW1wbGUoZG9jcy5leGFtcGxlLCBhcGlMb2NhdGlvbikpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJy8vLyA8L2V4YW1wbGU+Jyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGVtaXRNYXJrZG93bkFzUmVtYXJrcyhcbiAgICBtYXJrZG93bjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGFwaUxvY2F0aW9uOiBBcGlMb2NhdGlvbixcbiAgKSB7XG4gICAgaWYgKCFtYXJrZG93bikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSBtYXJrRG93blRvWG1sRG9jKFxuICAgICAgdGhpcy5jb252ZXJ0U2FtcGxlc0luTWFya2Rvd24obWFya2Rvd24sIGFwaUxvY2F0aW9uKSxcbiAgICApO1xuICAgIGNvbnN0IGxpbmVzID0gdHJhbnNsYXRlZC5zcGxpdCgnXFxuJyk7XG5cbiAgICB0aGlzLmNvZGUubGluZSgnLy8vIDxyZW1hcmtzPicpO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYC8vLyAke2xpbmV9YC50cmltUmlnaHQoKSk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5saW5lKCcvLy8gPC9yZW1hcmtzPicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxpbmVzIHRoYXQgc2hvdWxkIGdvIGludG8gdGhlIDxyZW1hcmtzPiBzZWN0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlbmRlclJlbWFya3MoZG9jczogc3BlYy5Eb2NzLCBhcGlMb2NhdGlvbjogQXBpTG9jYXRpb24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmV0OiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKGRvY3MucmVtYXJrcykge1xuICAgICAgY29uc3QgdHJhbnNsYXRlZCA9IG1hcmtEb3duVG9YbWxEb2MoXG4gICAgICAgIHRoaXMuY29udmVydFNhbXBsZXNJbk1hcmtkb3duKGRvY3MucmVtYXJrcywgYXBpTG9jYXRpb24pLFxuICAgICAgKTtcbiAgICAgIHJldC5wdXNoKC4uLnRyYW5zbGF0ZWQuc3BsaXQoJ1xcbicpKTtcbiAgICAgIHJldC5wdXNoKCcnKTtcbiAgICB9XG5cbiAgICAvLyBBbGwgdGhlIFwidGFnc1wiIG5lZWQgdG8gYmUgcmVuZGVyZWQgd2l0aCBlbXB5dCBsaW5lcyBiZXR3ZWVuIHRoZW0gb3IgdGhleSdsbCBiZSB3b3JkIHdyYXBwZWQuXG5cbiAgICBpZiAoZG9jcy5kZWZhdWx0KSB7XG4gICAgICBlbWl0RG9jQXR0cmlidXRlKCdkZWZhdWx0JywgZG9jcy5kZWZhdWx0KTtcbiAgICB9XG4gICAgaWYgKGRvY3Muc3RhYmlsaXR5ICYmIHNob3VsZE1lbnRpb25TdGFiaWxpdHkoZG9jcy5zdGFiaWxpdHkpKSB7XG4gICAgICBlbWl0RG9jQXR0cmlidXRlKFxuICAgICAgICAnc3RhYmlsaXR5JyxcbiAgICAgICAgdGhpcy5uYW1ldXRpbHMuY2FwaXRhbGl6ZVdvcmQoZG9jcy5zdGFiaWxpdHkpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRvY3Muc2VlKSB7XG4gICAgICBlbWl0RG9jQXR0cmlidXRlKCdzZWUnLCBkb2NzLnNlZSk7XG4gICAgfVxuICAgIGlmIChkb2NzLnN1YmNsYXNzYWJsZSkge1xuICAgICAgZW1pdERvY0F0dHJpYnV0ZSgnc3ViY2xhc3NhYmxlJywgJycpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhkb2NzLmN1c3RvbSA/PyB7fSkpIHtcbiAgICAgIGNvbnN0IGV4dHJhU3BhY2UgPSBrID09PSAnbGluaycgPyAnICcgOiAnJzsgLy8gRXh0cmEgc3BhY2UgZm9yICdAbGluaycgdG8ga2VlcCB1bml0IHRlc3RzIGhhcHB5XG4gICAgICBlbWl0RG9jQXR0cmlidXRlKGssIHYgKyBleHRyYVNwYWNlKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgZW1wdHkgbGluZXNcbiAgICB3aGlsZSAocmV0Lmxlbmd0aCA+IDAgJiYgcmV0WzBdID09PSAnJykge1xuICAgICAgcmV0LnNoaWZ0KCk7XG4gICAgfVxuICAgIHdoaWxlIChyZXQubGVuZ3RoID4gMCAmJiByZXRbcmV0Lmxlbmd0aCAtIDFdID09PSAnJykge1xuICAgICAgcmV0LnBvcCgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG5cbiAgICBmdW5jdGlvbiBlbWl0RG9jQXR0cmlidXRlKG5hbWU6IHN0cmluZywgY29udGVudHM6IHN0cmluZykge1xuICAgICAgY29uc3QgbHMgPSBjb250ZW50cy5zcGxpdCgnXFxuJyk7XG4gICAgICByZXQucHVzaChgPHN0cm9uZz4ke3VjRmlyc3QobmFtZSl9PC9zdHJvbmc+OiAke2xzWzBdfWApO1xuICAgICAgcmV0LnB1c2goLi4ubHMuc2xpY2UoMSkpO1xuICAgICAgcmV0LnB1c2goJycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEV4YW1wbGUoZXhhbXBsZTogc3RyaW5nLCBhcGlMb2NhdGlvbjogQXBpTG9jYXRpb24pOiBzdHJpbmcge1xuICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSB0aGlzLnJvc2V0dGEudHJhbnNsYXRlRXhhbXBsZShcbiAgICAgIGFwaUxvY2F0aW9uLFxuICAgICAgZXhhbXBsZSxcbiAgICAgIFRhcmdldExhbmd1YWdlLkNTSEFSUCxcbiAgICAgIGVuZm9yY2VzU3RyaWN0TW9kZSh0aGlzLmFzc2VtYmx5KSxcbiAgICApO1xuICAgIHJldHVybiB0cmFuc2xhdGVkLnNvdXJjZTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFNhbXBsZXNJbk1hcmtkb3duKG1hcmtkb3duOiBzdHJpbmcsIGFwaTogQXBpTG9jYXRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJvc2V0dGEudHJhbnNsYXRlU25pcHBldHNJbk1hcmtkb3duKFxuICAgICAgYXBpLFxuICAgICAgbWFya2Rvd24sXG4gICAgICBUYXJnZXRMYW5ndWFnZS5DU0hBUlAsXG4gICAgICBlbmZvcmNlc1N0cmljdE1vZGUodGhpcy5hc3NlbWJseSksXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGVtaXRYbWxEb2MoXG4gICAgdGFnOiBzdHJpbmcsXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHsgYXR0cmlidXRlcyA9IHt9IH06IHsgYXR0cmlidXRlcz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9IH0gPSB7fSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeG1sID0geG1sYnVpbGRlci5jcmVhdGUodGFnLCB7IGhlYWRsZXNzOiB0cnVlIH0pLnRleHQoY29udGVudCk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICB4bWwuYXR0KG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgeG1sc3RyaW5nID0geG1sLmVuZCh7IGFsbG93RW1wdHk6IHRydWUsIHByZXR0eTogZmFsc2UgfSk7XG4gICAgY29uc3QgdHJpbUxlZnQgPSB0YWcgIT09ICdjb2RlJztcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgeG1sc3RyaW5nXG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAubWFwKCh4KSA9PiAodHJpbUxlZnQgPyB4LnRyaW0oKSA6IHgudHJpbVJpZ2h0KCkpKSkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYC8vLyAke2xpbmV9YCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVXBwZXJjYXNlIHRoZSBmaXJzdCBsZXR0ZXJcbiAqL1xuZnVuY3Rpb24gdWNGaXJzdCh4OiBzdHJpbmcpIHtcbiAgcmV0dXJuIHguc2xpY2UoMCwgMSkudG9VcHBlckNhc2UoKSArIHguc2xpY2UoMSk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZE1lbnRpb25TdGFiaWxpdHkoczogc3BlYy5TdGFiaWxpdHkpIHtcbiAgLy8gRG9uJ3QgcmVuZGVyIFwic3RhYmxlXCIgb3IgXCJleHRlcm5hbFwiLCB0aG9zZSBhcmUgYm90aCBzdGFibGUgYnkgaW1wbGljYXRpb25cbiAgcmV0dXJuIHMgPT09IHNwZWMuU3RhYmlsaXR5LkRlcHJlY2F0ZWQgfHwgcyA9PT0gc3BlYy5TdGFiaWxpdHkuRXhwZXJpbWVudGFsO1xufVxuIl19
|
|
@@ -105,7 +105,7 @@ class DotNetGenerator extends generator_1.Generator {
|
|
|
105
105
|
const dotnetNs = this.typeresolver.resolveNamespace(this.assembly, this.assembly.name,
|
|
106
106
|
// Strip the `${assmName}.` prefix here, as the "assembly-relative" NS
|
|
107
107
|
// is expected by `this.typeResolver.resovleNamespace`.
|
|
108
|
-
jsiiNs.
|
|
108
|
+
jsiiNs.slice(this.assembly.name.length + 1));
|
|
109
109
|
this.emitNamespaceDocs(dotnetNs, jsiiNs, submodule);
|
|
110
110
|
}
|
|
111
111
|
}
|
|
@@ -880,4 +880,4 @@ class DotNetGenerator extends generator_1.Generator {
|
|
|
880
880
|
}
|
|
881
881
|
}
|
|
882
882
|
exports.DotNetGenerator = DotNetGenerator;
|
|
883
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0Z2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG90bmV0Z2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUNuQywrQkFBK0I7QUFDL0IsK0JBQStCO0FBRy9CLDZCQUE2QjtBQUU3QiwrQ0FBc0Q7QUFFdEQsNkRBQTBEO0FBQzFELHFFQUFrRTtBQUNsRSw2REFBMEQ7QUFDMUQsbURBQWdEO0FBQ2hELDJDQUE4QztBQUU5Qzs7R0FFRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxxQkFBUztJQVk1QyxZQUNtQixnQ0FBMEMsRUFDMUMsT0FBZ0I7UUFFakMsS0FBSyxFQUFFLENBQUM7UUFIUyxxQ0FBZ0MsR0FBaEMsZ0NBQWdDLENBQVU7UUFDMUMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQWJuQywyRUFBMkU7UUFDbkUsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBSWxCLGNBQVMsR0FBb0IsSUFBSSwyQkFBZSxFQUFFLENBQUM7UUFZbEUsb0dBQW9HO1FBQ3BHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsSUFBSTtZQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJLENBQ2YsV0FBbUIsRUFDbkIsUUFBMEI7UUFFMUIsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRLENBQUMsV0FBb0I7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHVDQUFrQixDQUN4QyxJQUFJLENBQUMsUUFBUSxFQUNiLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxF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O1NBQ25CLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLHNHQUFzRztRQUN0RywwR0FBMEc7UUFDMUcsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLDJGQUEyRixDQUM1RixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBdHBDRCwwQ0FzcENDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc3BlYyBmcm9tICdAanNpaS9zcGVjJztcbmltcG9ydCAqIGFzIGNsb25lIGZyb20gJ2Nsb25lJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIHJlZmxlY3QgZnJvbSAnanNpaS1yZWZsZWN0JztcbmltcG9ydCB7IFJvc2V0dGEgfSBmcm9tICdqc2lpLXJvc2V0dGEnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHsgR2VuZXJhdG9yLCBMZWdhbGVzZSB9IGZyb20gJy4uLy4uL2dlbmVyYXRvcic7XG5pbXBvcnQgeyBNZXRob2REZWZpbml0aW9uLCBQcm9wZXJ0eURlZmluaXRpb24gfSBmcm9tICcuLi9fdXRpbHMnO1xuaW1wb3J0IHsgRG90TmV0RG9jR2VuZXJhdG9yIH0gZnJvbSAnLi9kb3RuZXRkb2NnZW5lcmF0b3InO1xuaW1wb3J0IHsgRG90TmV0UnVudGltZUdlbmVyYXRvciB9IGZyb20gJy4vZG90bmV0cnVudGltZWdlbmVyYXRvcic7XG5pbXBvcnQgeyBEb3ROZXRUeXBlUmVzb2x2ZXIgfSBmcm9tICcuL2RvdG5ldHR5cGVyZXNvbHZlcic7XG5pbXBvcnQgeyBGaWxlR2VuZXJhdG9yIH0gZnJvbSAnLi9maWxlZ2VuZXJhdG9yJztcbmltcG9ydCB7IERvdE5ldE5hbWVVdGlscyB9IGZyb20gJy4vbmFtZXV0aWxzJztcblxuLyoqXG4gKiBDT0RFIEdFTkVSQVRPUiBWMlxuICovXG5leHBvcnQgY2xhc3MgRG90TmV0R2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHtcbiAgLy8gRmxhZ3MgdGhhdCB0cmFja3MgaWYgd2UgaGF2ZSBhbHJlYWR5IHdyb3RlIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIGNsYXNzXG4gIHByaXZhdGUgZmlyc3RNZW1iZXJXcml0dGVuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB0eXBlcmVzb2x2ZXIhOiBEb3ROZXRUeXBlUmVzb2x2ZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBuYW1ldXRpbHM6IERvdE5ldE5hbWVVdGlscyA9IG5ldyBEb3ROZXROYW1lVXRpbHMoKTtcblxuICBwcml2YXRlIGRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IhOiBEb3ROZXRSdW50aW1lR2VuZXJhdG9yO1xuXG4gIHByaXZhdGUgZG90bmV0RG9jR2VuZXJhdG9yITogRG90TmV0RG9jR2VuZXJhdG9yO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFzc2VtYmxpZXNDdXJyZW50bHlCZWluZ0NvbXBpbGVkOiBzdHJpbmdbXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvc2V0dGE6IFJvc2V0dGEsXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvLyBPdmVycmlkZSB0aGUgb3BlbkJsb2NrIHRvIGdldCBhIGNvcnJlY3QgQyMgbG9va2luZyBjb2RlIGJsb2NrIHdpdGggdGhlIGN1cmx5IGJyYWNlIGFmdGVyIHRoZSBsaW5lXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICB0aGlzLmxpbmUodGV4dCk7XG4gICAgICB0aGlzLm9wZW4oJ3snKTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWQoXG4gICAgcGFja2FnZVJvb3Q6IHN0cmluZyxcbiAgICBhc3NlbWJseTogcmVmbGVjdC5Bc3NlbWJseSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIubG9hZChwYWNrYWdlUm9vdCwgYXNzZW1ibHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGhlIGdlbmVyYXRvciAoaW4tbWVtb3J5KS5cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZShmaW5nZXJwcmludDogYm9vbGVhbikge1xuICAgIHRoaXMudHlwZXJlc29sdmVyID0gbmV3IERvdE5ldFR5cGVSZXNvbHZlcihcbiAgICAgIHRoaXMuYXNzZW1ibHksXG4gICAgICAoZnFuOiBzdHJpbmcpID0+IHRoaXMuZmluZE1vZHVsZShmcW4pLFxuICAgICAgKGZxbjogc3RyaW5nKSA9PiB0aGlzLmZpbmRUeXBlKGZxbiksXG4gICAgICB0aGlzLmFzc2VtYmxpZXNDdXJyZW50bHlCZWluZ0NvbXBpbGVkLFxuICAgICk7XG5cbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IgPSBuZXcgRG90TmV0UnVudGltZUdlbmVyYXRvcihcbiAgICAgIHRoaXMuY29kZSxcbiAgICAgIHRoaXMudHlwZXJlc29sdmVyLFxuICAgICk7XG4gICAgdGhpcy5kb3RuZXREb2NHZW5lcmF0b3IgPSBuZXcgRG90TmV0RG9jR2VuZXJhdG9yKFxuICAgICAgdGhpcy5jb2RlLFxuICAgICAgdGhpcy5yb3NldHRhLFxuICAgICAgdGhpcy5hc3NlbWJseSxcbiAgICApO1xuXG4gICAgdGhpcy5lbWl0QXNzZW1ibHlEb2NzKCk7XG5cbiAgICAvLyBXZSBuZWVkIHRvIHJlc29sdmUgdGhlIGRlcGVuZGVuY3kgdHJlZVxuICAgIHRoaXMudHlwZXJlc29sdmVyLnJlc29sdmVOYW1lc3BhY2VzRGVwZW5kZW5jaWVzKCk7XG4gICAgc3VwZXIuZ2VuZXJhdGUoZmluZ2VycHJpbnQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhdmUoXG4gICAgb3V0ZGlyOiBzdHJpbmcsXG4gICAgdGFyYmFsbDogc3RyaW5nLFxuICAgIHsgbGljZW5zZSwgbm90aWNlIH06IExlZ2FsZXNlLFxuICApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgLy8gR2VuZXJhdGluZyB0aGUgY3Nwcm9qIGFuZCBBc3NlbWJseUluZm8uY3MgZmlsZXNcbiAgICBjb25zdCB0YXJiYWxsRmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKHRhcmJhbGwpO1xuICAgIGNvbnN0IGZpbGVnZW4gPSBuZXcgRmlsZUdlbmVyYXRvcihcbiAgICAgIHRoaXMuYXNzZW1ibHksXG4gICAgICB0YXJiYWxsRmlsZU5hbWUsXG4gICAgICB0aGlzLmNvZGUsXG4gICAgKTtcbiAgICBmaWxlZ2VuLmdlbmVyYXRlQXNzZW1ibHlJbmZvRmlsZSgpO1xuICAgIGZpbGVnZW4uZ2VuZXJhdGVQcm9qZWN0RmlsZSh0aGlzLnR5cGVyZXNvbHZlci5uYW1lc3BhY2VEZXBlbmRlbmNpZXMpO1xuICAgIC8vIENhbGxpbmcgc3VwZXIuc2F2ZSgpIGR1bXBzIHRoZSB0YXJiYWxsIGluIHRoZSBmb3JtYXQgbmFtZUB2ZXJzaW9uLmpzaWkudGd6LlxuICAgIC8vIFRoaXMgaXMgbm90IGluIHN5bmMgd2l0aCB0aGUgT2xkIC5ORVQgZ2VuZXJhdG9yIHdoZXJlIHRoZSBuYW1lIGlzIHNjb3BlLW5hbWUtdmVyc2lvbi50Z3ouXG4gICAgLy8gSGVuY2Ugd2UgYXJlIHNhdmluZyB0aGUgZmlsZXMgb3Vyc2VsdmVzIGhlcmU6XG4gICAgY29uc3QgYXNzbSA9IHRoaXMuYXNzZW1ibHk7XG4gICAgY29uc3QgcGFja2FnZUlkOiBzdHJpbmcgPSBhc3NtLnRhcmdldHMhLmRvdG5ldCEucGFja2FnZUlkO1xuICAgIGlmICghcGFja2FnZUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgbW9kdWxlICR7YXNzbS5uYW1lfSBkb2VzIG5vdCBoYXZlIGEgZG90bmV0LnBhY2thZ2VJZCBzZXR0aW5nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmpvaW4ob3V0ZGlyLCBwYWNrYWdlSWQpKTtcbiAgICBhd2FpdCBmcy5jb3B5RmlsZSh0YXJiYWxsLCBwYXRoLmpvaW4ob3V0ZGlyLCBwYWNrYWdlSWQsIHRhcmJhbGxGaWxlTmFtZSkpO1xuXG4gICAgLy8gQ3JlYXRlIGFuIGFuY2hvciBmaWxlIGZvciB0aGUgY3VycmVudCBtb2RlbFxuICAgIHRoaXMuZ2VuZXJhdGVEZXBlbmRlbmN5QW5jaG9yRmlsZSgpO1xuXG4gICAgaWYgKGxpY2Vuc2UpIHtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLmpvaW4ob3V0ZGlyLCBwYWNrYWdlSWQsICdMSUNFTlNFJyksIGxpY2Vuc2UsIHtcbiAgICAgICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAobm90aWNlKSB7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKG91dGRpciwgcGFja2FnZUlkLCAnTk9USUNFJyksIG5vdGljZSwge1xuICAgICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU2F2aW5nIHRoZSBnZW5lcmF0ZWQgY29kZS5cbiAgICByZXR1cm4gdGhpcy5jb2RlLnNhdmUob3V0ZGlyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGhlIGFuY2hvciBmaWxlXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2VuZXJhdGVEZXBlbmRlbmN5QW5jaG9yRmlsZSgpIHtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSBgJHtcbiAgICAgIHRoaXMuYXNzZW1ibHkudGFyZ2V0cyEuZG90bmV0IS5uYW1lc3BhY2VcbiAgICB9LkludGVybmFsLkRlcGVuZGVuY3lSZXNvbHV0aW9uYDtcbiAgICB0aGlzLm9wZW5GaWxlSWZOZWVkZWQoJ0FuY2hvcicsIG5hbWVzcGFjZSwgZmFsc2UsIGZhbHNlKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKCdwdWJsaWMgc2VhbGVkIGNsYXNzIEFuY2hvcicpO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soJ3B1YmxpYyBBbmNob3IoKScpO1xuICAgIHRoaXMudHlwZXJlc29sdmVyLm5hbWVzcGFjZURlcGVuZGVuY2llcy5mb3JFYWNoKCh2YWx1ZSkgPT5cbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgbmV3ICR7dmFsdWUubmFtZXNwYWNlfS5JbnRlcm5hbC5EZXBlbmRlbmN5UmVzb2x1dGlvbi5BbmNob3IoKTtgLFxuICAgICAgKSxcbiAgICApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB0aGlzLmNsb3NlRmlsZUlmTmVlZGVkKCdBbmNob3InLCBuYW1lc3BhY2UsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3QgdXNlZCBhcyB3ZSBvdmVycmlkZSB0aGUgc2F2ZSgpIG1ldGhvZFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldEFzc2VtYmx5T3V0cHV0RGlyKG1vZDogc3BlYy5Bc3NlbWJseSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZXV0aWxzLmNvbnZlcnRQYWNrYWdlTmFtZShtb2QubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogTmFtZXNwYWNlcyBhcmUgaGFuZGxlZCBpbXBsaWNpdGx5IGJ5IG9wZW5GaWxlSWZOZWVkZWQoKS5cbiAgICpcbiAgICogRG8gZ2VuZXJhdGUgZG9jcyBpZiB0aGlzIGlzIGZvciBhIHN1Ym1vZHVsZSB0aG91Z2guXG4gICAqL1xuICBwcm90ZWN0ZWQgb25CZWdpbk5hbWVzcGFjZShqc2lpTnM6IHN0cmluZykge1xuICAgIGNvbnN0IHN1Ym1vZHVsZSA9IHRoaXMuYXNzZW1ibHkuc3VibW9kdWxlcz8uW2pzaWlOc107XG4gICAgaWYgKHN1Ym1vZHVsZSkge1xuICAgICAgY29uc3QgZG90bmV0TnMgPSB0aGlzLnR5cGVyZXNvbHZlci5yZXNvbHZlTmFtZXNwYWNlKFxuICAgICAgICB0aGlzLmFzc2VtYmx5LFxuICAgICAgICB0aGlzLmFzc2VtYmx5Lm5hbWUsXG4gICAgICAgIC8vIFN0cmlwIHRoZSBgJHthc3NtTmFtZX0uYCBwcmVmaXggaGVyZSwgYXMgdGhlIFwiYXNzZW1ibHktcmVsYXRpdmVcIiBOU1xuICAgICAgICAvLyBpcyBleHBlY3RlZCBieSBgdGhpcy50eXBlUmVzb2x2ZXIucmVzb3ZsZU5hbWVzcGFjZWAuXG4gICAgICAgIGpzaWlOcy5zdWJzdHIodGhpcy5hc3NlbWJseS5uYW1lLmxlbmd0aCArIDEpLFxuICAgICAgKTtcbiAgICAgIHRoaXMuZW1pdE5hbWVzcGFjZURvY3MoZG90bmV0TnMsIGpzaWlOcywgc3VibW9kdWxlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25FbmROYW1lc3BhY2UoX25zOiBzdHJpbmcpIHtcbiAgICAvKiBub29wICovXG4gIH1cblxuICBwcm90ZWN0ZWQgb25CZWdpbkludGVyZmFjZShpZmM6IHNwZWMuSW50ZXJmYWNlVHlwZSkge1xuICAgIGNvbnN0IGltcGxlbWVudGF0aW9ucyA9IHRoaXMudHlwZXJlc29sdmVyLnJlc29sdmVJbXBsZW1lbnRlZEludGVyZmFjZXMoaWZjKTtcbiAgICBjb25zdCBpbnRlcmZhY2VOYW1lID0gdGhpcy5uYW1ldXRpbHMuY29udmVydEludGVyZmFjZU5hbWUoaWZjKTtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSB0aGlzLm5hbWVzcGFjZUZvcih0aGlzLmFzc2VtYmx5LCBpZmMpO1xuICAgIHRoaXMub3BlbkZpbGVJZk5lZWRlZChpbnRlcmZhY2VOYW1lLCBuYW1lc3BhY2UsIHRoaXMuaXNOZXN0ZWQoaWZjKSk7XG5cbiAgICB0aGlzLmRvdG5ldERvY0dlbmVyYXRvci5lbWl0RG9jcyhpZmMsIHsgYXBpOiAndHlwZScsIGZxbjogaWZjLmZxbiB9KTtcbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IuZW1pdEF0dHJpYnV0ZXNGb3JJbnRlcmZhY2UoaWZjKTtcblxuICAgIGlmIChpbXBsZW1lbnRhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgICAgYHB1YmxpYyBpbnRlcmZhY2UgJHtpbnRlcmZhY2VOYW1lfSA6ICR7aW1wbGVtZW50YXRpb25zLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYHB1YmxpYyBpbnRlcmZhY2UgJHtpbnRlcmZhY2VOYW1lfWApO1xuICAgIH1cbiAgICB0aGlzLmZsYWdGaXJzdE1lbWJlcldyaXR0ZW4oZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uRW5kSW50ZXJmYWNlKGlmYzogc3BlYy5JbnRlcmZhY2VUeXBlKSB7XG4gICAgLy8gZW1pdCBpbnRlcmZhY2UgcHJveHkgY2xhc3NcbiAgICB0aGlzLmVtaXRJbnRlcmZhY2VQcm94eShpZmMpO1xuXG4gICAgY29uc3QgaW50ZXJmYWNlTmFtZSA9IHRoaXMubmFtZXV0aWxzLmNvbnZlcnRJbnRlcmZhY2VOYW1lKGlmYyk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSB0aGlzLm5hbWVzcGFjZUZvcih0aGlzLmFzc2VtYmx5LCBpZmMpO1xuICAgIHRoaXMuY2xvc2VGaWxlSWZOZWVkZWQoaW50ZXJmYWNlTmFtZSwgbmFtZXNwYWNlLCB0aGlzLmlzTmVzdGVkKGlmYykpO1xuXG4gICAgLy8gZW1pdCBpbXBsZW1lbnRhdGlvbiBjbGFzc1xuICAgIC8vIFRPRE86IElmIGRhdGF0eXBlIHRoZW4gd2UgbWF5IG5vdCBuZWVkIHRoZSBpbnRlcmZhY2UgcHJveHkgdG8gYmUgY3JlYXRlZCwgV2UgY291bGQgZG8gd2l0aCBqdXN0IHRoZSBpbnRlcmZhY2UgaW1wbD9cbiAgICBpZiAoaWZjLmRhdGF0eXBlKSB7XG4gICAgICB0aGlzLmVtaXRJbnRlcmZhY2VEYXRhVHlwZShpZmMpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvbkludGVyZmFjZU1ldGhvZChpZmM6IHNwZWMuSW50ZXJmYWNlVHlwZSwgbWV0aG9kOiBzcGVjLk1ldGhvZCkge1xuICAgIHRoaXMuZG90bmV0RG9jR2VuZXJhdG9yLmVtaXREb2NzKG1ldGhvZCwge1xuICAgICAgYXBpOiAnbWVtYmVyJyxcbiAgICAgIGZxbjogaWZjLmZxbixcbiAgICAgIG1lbWJlck5hbWU6IG1ldGhvZC5uYW1lLFxuICAgIH0pO1xuICAgIHRoaXMuZG90bmV0UnVudGltZUdlbmVyYXRvci5lbWl0QXR0cmlidXRlc0Zvck1ldGhvZChpZmMsIG1ldGhvZCk7XG4gICAgY29uc3QgcmV0dXJuVHlwZSA9IG1ldGhvZC5yZXR1cm5zXG4gICAgICA/IHRoaXMudHlwZXJlc29sdmVyLnRvRG90TmV0VHlwZShtZXRob2QucmV0dXJucy50eXBlKVxuICAgICAgOiAndm9pZCc7XG4gICAgY29uc3QgbnVsbGFibGUgPSBtZXRob2QucmV0dXJucz8ub3B0aW9uYWwgPyAnPycgOiAnJztcbiAgICB0aGlzLmNvZGUubGluZShcbiAgICAgIGAke3JldHVyblR5cGV9JHtudWxsYWJsZX0gJHt0aGlzLm5hbWV1dGlscy5jb252ZXJ0TWV0aG9kTmFtZShcbiAgICAgICAgbWV0aG9kLm5hbWUsXG4gICAgICApfSgke3RoaXMucmVuZGVyTWV0aG9kUGFyYW1ldGVycyhtZXRob2QpfSk7YCxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uSW50ZXJmYWNlTWV0aG9kT3ZlcmxvYWQoXG4gICAgaWZjOiBzcGVjLkludGVyZmFjZVR5cGUsXG4gICAgb3ZlcmxvYWQ6IHNwZWMuTWV0aG9kLFxuICAgIF9vcmlnaW5hbE1ldGhvZDogc3BlYy5NZXRob2QsXG4gICkge1xuICAgIHRoaXMub25JbnRlcmZhY2VNZXRob2QoaWZjLCBvdmVybG9hZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25JbnRlcmZhY2VQcm9wZXJ0eShpZmM6IHNwZWMuSW50ZXJmYWNlVHlwZSwgcHJvcDogc3BlYy5Qcm9wZXJ0eSkge1xuICAgIGlmICghcHJvcC5hYnN0cmFjdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnRlcmZhY2UgcHJvcGVydGllcyBtdXN0IGJlIGFic3RyYWN0OiAke3Byb3AubmFtZX1gKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcC5wcm90ZWN0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFByb3RlY3RlZCBwcm9wZXJ0aWVzIGFyZSBub3QgYWxsb3dlZCBvbiBpbnRlcmZhY2VzOiAke3Byb3AubmFtZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcC5zdGF0aWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFByb3BlcnR5ICR7aWZjLm5hbWV9LiR7cHJvcC5uYW1lfSBpcyBtYXJrZWQgYXMgc3RhdGljLCBidXQgaW50ZXJmYWNlcyBtdXN0IG5vdCBjb250YWluIHN0YXRpYyBtZW1iZXJzLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdE5ld0xpbmVJZk5lY2Vzc2FyeSgpO1xuICAgIHRoaXMuZG90bmV0RG9jR2VuZXJhdG9yLmVtaXREb2NzKHByb3AsIHtcbiAgICAgIGFwaTogJ21lbWJlcicsXG4gICAgICBmcW46IGlmYy5mcW4sXG4gICAgICBtZW1iZXJOYW1lOiBwcm9wLm5hbWUsXG4gICAgfSk7XG4gICAgdGhpcy5kb3RuZXRSdW50aW1lR2VuZXJhdG9yLmVtaXRBdHRyaWJ1dGVzRm9yUHJvcGVydHkocHJvcCk7XG5cbiAgICBjb25zdCBwcm9wVHlwZSA9IHRoaXMudHlwZXJlc29sdmVyLnRvRG90TmV0VHlwZShwcm9wLnR5cGUpO1xuICAgIGNvbnN0IHByb3BOYW1lID0gdGhpcy5uYW1ldXRpbHMuY29udmVydFByb3BlcnR5TmFtZShwcm9wLm5hbWUpO1xuXG4gICAgaWYgKHByb3Aub3B0aW9uYWwpIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKCdbQW1hem9uLkpTSUkuUnVudGltZS5EZXB1dHkuSnNpaU9wdGlvbmFsXScpO1xuICAgIH1cblxuICAgIC8vIFNwZWNpZnlpbmcgdGhhdCBhIHR5cGUgaXMgbnVsbGFibGUgaXMgb25seSByZXF1aXJlZCBmb3IgcHJpbWl0aXZlIHZhbHVlIHR5cGVzXG4gICAgY29uc3QgaXNPcHRpb25hbCA9IHByb3Aub3B0aW9uYWwgPyAnPycgOiAnJztcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGAke3Byb3BUeXBlfSR7aXNPcHRpb25hbH0gJHtwcm9wTmFtZX1gKTtcblxuICAgIGlmIChwcm9wLm9wdGlvbmFsKSB7XG4gICAgICB0aGlzLmNvZGUub3BlbkJsb2NrKCdnZXQnKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKCdyZXR1cm4gbnVsbDsnKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgICBpZiAoIXByb3AuaW1tdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soJ3NldCcpO1xuICAgICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgICBgdGhyb3cgbmV3IFN5c3RlbS5Ob3RTdXBwb3J0ZWRFeGNlcHRpb24oXCInc2V0JyBmb3IgJyR7cHJvcE5hbWV9JyBpcyBub3QgaW1wbGVtZW50ZWRcIik7YCxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJ2dldDsnKTtcbiAgICAgIGlmICghcHJvcC5pbW11dGFibGUpIHtcbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoJ3NldDsnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIHRoaXMuZmxhZ0ZpcnN0TWVtYmVyV3JpdHRlbih0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkJlZ2luQ2xhc3MoY2xzOiBzcGVjLkNsYXNzVHlwZSwgYWJzdHJhY3Q6IGJvb2xlYW4pIHtcbiAgICBsZXQgYmFzZVR5cGVOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSB0aGlzLm5hbWVzcGFjZUZvcih0aGlzLmFzc2VtYmx5LCBjbHMpO1xuXG4gICAgLy8gQSBjbGFzcyBjYW4gZGVyaXZlIGZyb20gb25seSBvbmUgYmFzZSBjbGFzc1xuICAgIC8vIEJ1dCBjYW4gaW1wbGVtZW50IG11bHRpcGxlIGludGVyZmFjZXNcbiAgICBpZiAoIWNscy5iYXNlKSB7XG4gICAgICBiYXNlVHlwZU5hbWVzLnB1c2goJ0RlcHV0eUJhc2UnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY2xhc3NCYXNlID0gdGhpcy50eXBlcmVzb2x2ZXIudG9Eb3ROZXRUeXBlKHsgZnFuOiBjbHMuYmFzZSB9KTtcbiAgICAgIGJhc2VUeXBlTmFtZXMucHVzaChjbGFzc0Jhc2UpO1xuICAgIH1cblxuICAgIGlmIChjbHMuaW50ZXJmYWNlcyAmJiBjbHMuaW50ZXJmYWNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBpbXBsZW1lbnRhdGlvbnMgPVxuICAgICAgICB0aGlzLnR5cGVyZXNvbHZlci5yZXNvbHZlSW1wbGVtZW50ZWRJbnRlcmZhY2VzKGNscyk7XG4gICAgICBiYXNlVHlwZU5hbWVzID0gYmFzZVR5cGVOYW1lcy5jb25jYXQoaW1wbGVtZW50YXRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLm5hbWV1dGlscy5jb252ZXJ0Q2xhc3NOYW1lKGNscyk7XG5cbiAgICAvLyBOZXN0ZWQgY2xhc3NlcyB3aWxsIGJlIGRlYWx0IHdpdGggZHVyaW5nIGNhbGMgY29kZSBnZW5lcmF0aW9uXG4gICAgY29uc3QgbmVzdGVkID0gdGhpcy5pc05lc3RlZChjbHMpO1xuICAgIGNvbnN0IGFic1ByZWZpeCA9IGFic3RyYWN0ID8gJyBhYnN0cmFjdCcgOiAnJztcblxuICAgIHRoaXMub3BlbkZpbGVJZk5lZWRlZChjbGFzc05hbWUsIG5hbWVzcGFjZSwgbmVzdGVkKTtcblxuICAgIGNvbnN0IGltcGxlbWVudHNFeHByID0gYCA6ICR7YmFzZVR5cGVOYW1lcy5qb2luKCcsICcpfWA7XG5cbiAgICB0aGlzLmRvdG5ldERvY0dlbmVyYXRvci5lbWl0RG9jcyhjbHMsIHtcbiAgICAgIGFwaTogJ3R5cGUnLFxuICAgICAgZnFuOiBjbHMuZnFuLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kb3RuZXRSdW50aW1lR2VuZXJhdG9yLmVtaXRBdHRyaWJ1dGVzRm9yQ2xhc3MoY2xzKTtcblxuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICBgcHVibGljJHthYnNQcmVmaXh9IGNsYXNzICR7Y2xhc3NOYW1lfSR7aW1wbGVtZW50c0V4cHJ9YCxcbiAgICApO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgY2xhc3MgcGFyYW1ldGVyc1xuICAgIGxldCBwYXJhbWV0ZXJzRGVmaW5pdGlvbiA9ICcnO1xuICAgIGxldCBwYXJhbWV0ZXJzQmFzZSA9ICcnO1xuICAgIGNvbnN0IGluaXRpYWxpemVyID0gY2xzLmluaXRpYWxpemVyO1xuICAgIGlmIChpbml0aWFsaXplcikge1xuICAgICAgdGhpcy5kb3RuZXREb2NHZW5lcmF0b3IuZW1pdERvY3MoaW5pdGlhbGl6ZXIsIHtcbiAgICAgICAgYXBpOiAnaW5pdGlhbGl6ZXInLFxuICAgICAgICBmcW46IGNscy5mcW4sXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZG90bmV0UnVudGltZUdlbmVyYXRvci5lbWl0RGVwcmVjYXRlZEF0dHJpYnV0ZUlmTmVjZXNzYXJ5KFxuICAgICAgICBpbml0aWFsaXplcixcbiAgICAgICk7XG4gICAgICBpZiAoaW5pdGlhbGl6ZXIucGFyYW1ldGVycykge1xuICAgICAgICBwYXJhbWV0ZXJzRGVmaW5pdGlvbiA9IHRoaXMucmVuZGVyUGFyYW1ldGVyc1N0cmluZyhcbiAgICAgICAgICBpbml0aWFsaXplci5wYXJhbWV0ZXJzLFxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgaW5pdGlhbGl6ZXIucGFyYW1ldGVycykge1xuICAgICAgICAgIHBhcmFtZXRlcnNCYXNlICs9IGAke3RoaXMubmFtZXV0aWxzLmNvbnZlcnRQYXJhbWV0ZXJOYW1lKHAubmFtZSl9YDtcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCBwYXJhbWV0ZXIsIGFwcGVuZCAsXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaW5pdGlhbGl6ZXIucGFyYW1ldGVycy5pbmRleE9mKHApICE9PVxuICAgICAgICAgICAgaW5pdGlhbGl6ZXIucGFyYW1ldGVycy5sZW5ndGggLSAxXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzQmFzZSArPSAnLCAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnN0cnVjdG9yczpcbiAgICAgIC8vIEFic3RyYWN0IGNsYXNzZXMgaGF2ZSBwcm90ZWN0ZWQgY29uc3RydWN0b3JzLlxuICAgICAgY29uc3QgdmlzaWJpbGl0eSA9IGNscy5hYnN0cmFjdCA/ICdwcm90ZWN0ZWQnIDogJ3B1YmxpYyc7XG5cbiAgICAgIGNvbnN0IGFyZ3MgPVxuICAgICAgICBwYXJhbWV0ZXJzQmFzZS5sZW5ndGggPiAwXG4gICAgICAgICAgPyBgbmV3IG9iamVjdD9bXXske3BhcmFtZXRlcnNCYXNlfX1gXG4gICAgICAgICAgOiBgU3lzdGVtLkFycmF5LkVtcHR5PG9iamVjdD8+KClgO1xuICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgICAgYCR7dmlzaWJpbGl0eX0gJHtjbGFzc05hbWV9KCR7cGFyYW1ldGVyc0RlZmluaXRpb259KTogYmFzZShuZXcgRGVwdXR5UHJvcHMoJHthcmdzfSkpYCxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICcvLy8gPHN1bW1hcnk+VXNlZCBieSBqc2lpIHRvIGNvbnN0cnVjdCBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGZyb20gYSBKYXZhc2NyaXB0LW93bmVkIG9iamVjdCByZWZlcmVuY2U8L3N1bW1hcnk+JyxcbiAgICApO1xuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgJy8vLyA8cGFyYW0gbmFtZT1cInJlZmVyZW5jZVwiPlRoZSBKYXZhc2NyaXB0LW93bmVkIG9iamVjdCByZWZlcmVuY2U8L3BhcmFtPicsXG4gICAgKTtcbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IuZW1pdERlcHJlY2F0ZWRBdHRyaWJ1dGVJZk5lY2Vzc2FyeShpbml0aWFsaXplcik7XG4gICAgdGhpcy5lbWl0SGlkZUF0dHJpYnV0ZSgpO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICBgcHJvdGVjdGVkICR7Y2xhc3NOYW1lfShCeVJlZlZhbHVlIHJlZmVyZW5jZSk6IGJhc2UocmVmZXJlbmNlKWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG5cbiAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICcvLy8gPHN1bW1hcnk+VXNlZCBieSBqc2lpIHRvIGNvbnN0cnVjdCBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGZyb20gRGVwdXR5UHJvcHM8L3N1bW1hcnk+JyxcbiAgICApO1xuICAgIHRoaXMuY29kZS5saW5lKCcvLy8gPHBhcmFtIG5hbWU9XCJwcm9wc1wiPlRoZSBkZXB1dHkgcHJvcHM8L3BhcmFtPicpO1xuICAgIHRoaXMuZG90bmV0UnVudGltZUdlbmVyYXRvci5lbWl0RGVwcmVjYXRlZEF0dHJpYnV0ZUlmTmVjZXNzYXJ5KGluaXRpYWxpemVyKTtcbiAgICB0aGlzLmVtaXRIaWRlQXR0cmlidXRlKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBwcm90ZWN0ZWQgJHtjbGFzc05hbWV9KERlcHV0eVByb3BzIHByb3BzKTogYmFzZShwcm9wcylgLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBvdXRwdXR0ZWQgbWVtYmVycyAoY29uc3RydWN0b3JzKSwgc2V0dGluZyB0aGUgZmxhZyB0byB0cnVlXG4gICAgdGhpcy5mbGFnRmlyc3RNZW1iZXJXcml0dGVuKHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uRW5kQ2xhc3MoY2xzOiBzcGVjLkNsYXNzVHlwZSkge1xuICAgIGlmIChjbHMuYWJzdHJhY3QpIHtcbiAgICAgIHRoaXMuZW1pdEludGVyZmFjZVByb3h5KGNscyk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLm5hbWV1dGlscy5jb252ZXJ0Q2xhc3NOYW1lKGNscyk7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gdGhpcy5uYW1lc3BhY2VGb3IodGhpcy5hc3NlbWJseSwgY2xzKTtcbiAgICB0aGlzLmNsb3NlRmlsZUlmTmVlZGVkKGNsYXNzTmFtZSwgbmFtZXNwYWNlLCB0aGlzLmlzTmVzdGVkKGNscykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uRmllbGQoXG4gICAgX2Nsczogc3BlYy5DbGFzc1R5cGUsXG4gICAgX3Byb3A6IHNwZWMuUHJvcGVydHksXG4gICAgX3VuaW9uPzogc3BlYy5VbmlvblR5cGVSZWZlcmVuY2UsXG4gICkge1xuICAgIC8qIG5vb3AgKi9cbiAgfVxuXG4gIHByb3RlY3RlZCBvbk1ldGhvZChjbHM6IHNwZWMuQ2xhc3NUeXBlLCBtZXRob2Q6IHNwZWMuTWV0aG9kKSB7XG4gICAgdGhpcy5lbWl0TWV0aG9kKGNscywgbWV0aG9kLCBjbHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uTWV0aG9kT3ZlcmxvYWQoXG4gICAgY2xzOiBzcGVjLkNsYXNzVHlwZSxcbiAgICBvdmVybG9hZDogc3BlYy5NZXRob2QsXG4gICAgX29yaWdpbmFsTWV0aG9kOiBzcGVjLk1ldGhvZCxcbiAgKSB7XG4gICAgdGhpcy5vbk1ldGhvZChjbHMsIG92ZXJsb2FkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblByb3BlcnR5KGNsczogc3BlYy5DbGFzc1R5cGUsIHByb3A6IHNwZWMuUHJvcGVydHkpIHtcbiAgICB0aGlzLmVtaXRQcm9wZXJ0eShjbHMsIHByb3AsIGNscyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25TdGF0aWNNZXRob2QoY2xzOiBzcGVjLkNsYXNzVHlwZSwgbWV0aG9kOiBzcGVjLk1ldGhvZCkge1xuICAgIHRoaXMuZW1pdE1ldGhvZChjbHMsIG1ldGhvZCwgY2xzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblN0YXRpY01ldGhvZE92ZXJsb2FkKFxuICAgIGNsczogc3BlYy5DbGFzc1R5cGUsXG4gICAgb3ZlcmxvYWQ6IHNwZWMuTWV0aG9kLFxuICAgIF9vcmlnaW5hbE1ldGhvZDogc3BlYy5NZXRob2QsXG4gICkge1xuICAgIHRoaXMuZW1pdE1ldGhvZChjbHMsIG92ZXJsb2FkLCBjbHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uU3RhdGljUHJvcGVydHkoY2xzOiBzcGVjLkNsYXNzVHlwZSwgcHJvcDogc3BlYy5Qcm9wZXJ0eSkge1xuICAgIGlmIChwcm9wLmNvbnN0KSB7XG4gICAgICB0aGlzLmVtaXRDb25zdFByb3BlcnR5KGNscywgcHJvcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW1pdFByb3BlcnR5KGNscywgcHJvcCwgY2xzKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25VbmlvblByb3BlcnR5KFxuICAgIGNsczogc3BlYy5DbGFzc1R5cGUsXG4gICAgcHJvcDogc3BlYy5Qcm9wZXJ0eSxcbiAgICBfdW5pb246IHNwZWMuVW5pb25UeXBlUmVmZXJlbmNlLFxuICApIHtcbiAgICB0aGlzLmVtaXRQcm9wZXJ0eShjbHMsIHByb3AsIGNscyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25CZWdpbkVudW0oZW5tOiBzcGVjLkVudW1UeXBlKSB7XG4gICAgY29uc3QgZW51bU5hbWUgPSB0aGlzLm5hbWV1dGlscy5jb252ZXJ0VHlwZU5hbWUoZW5tLm5hbWUpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlRm9yKHRoaXMuYXNzZW1ibHksIGVubSk7XG4gICAgdGhpcy5vcGVuRmlsZUlmTmVlZGVkKGVudW1OYW1lLCBuYW1lc3BhY2UsIHRoaXMuaXNOZXN0ZWQoZW5tKSk7XG4gICAgdGhpcy5lbWl0TmV3TGluZUlmTmVjZXNzYXJ5KCk7XG4gICAgdGhpcy5kb3RuZXREb2NHZW5lcmF0b3IuZW1pdERvY3MoZW5tLCB7XG4gICAgICBhcGk6ICd0eXBlJyxcbiAgICAgIGZxbjogZW5tLmZxbixcbiAgICB9KTtcbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IuZW1pdEF0dHJpYnV0ZXNGb3JFbnVtKGVubSwgZW51bU5hbWUpO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYHB1YmxpYyBlbnVtICR7ZW5tLm5hbWV9YCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25FbmRFbnVtKGVubTogc3BlYy5FbnVtVHlwZSkge1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgY29uc3QgZW51bU5hbWUgPSB0aGlzLm5hbWV1dGlscy5jb252ZXJ0VHlwZU5hbWUoZW5tLm5hbWUpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlRm9yKHRoaXMuYXNzZW1ibHksIGVubSk7XG4gICAgdGhpcy5jbG9zZUZpbGVJZk5lZWRlZChlbnVtTmFtZSwgbmFtZXNwYWNlLCB0aGlzLmlzTmVzdGVkKGVubSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uRW51bU1lbWJlcihlbm06IHNwZWMuRW51bVR5cGUsIG1lbWJlcjogc3BlYy5FbnVtTWVtYmVyKSB7XG4gICAgdGhpcy5kb3RuZXREb2NHZW5lcmF0b3IuZW1pdERvY3MobWVtYmVyLCB7XG4gICAgICBhcGk6ICdtZW1iZXInLFxuICAgICAgZnFuOiBlbm0uZnFuLFxuICAgICAgbWVtYmVyTmFtZTogbWVtYmVyLm5hbWUsXG4gICAgfSk7XG4gICAgY29uc3QgZW51bU1lbWJlck5hbWUgPSB0aGlzLm5hbWV1dGlscy5jb252ZXJ0RW51bU1lbWJlck5hbWUobWVtYmVyLm5hbWUpO1xuICAgIHRoaXMuZG90bmV0UnVudGltZUdlbmVyYXRvci5lbWl0QXR0cmlidXRlc0ZvckVudW1NZW1iZXIoXG4gICAgICBlbnVtTWVtYmVyTmFtZSxcbiAgICAgIG1lbWJlcixcbiAgICApO1xuICAgIC8vIElmIHdlIGFyZSBvbiB0aGUgbGFzdCBlbnVtIG1lbWJlciwgd2UgZG9uJ3QgbmVlZCBhIGNvbW1hXG4gICAgaWYgKGVubS5tZW1iZXJzLmluZGV4T2YobWVtYmVyKSAhPT0gZW5tLm1lbWJlcnMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYCR7ZW51bU1lbWJlck5hbWV9LGApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvZGUubGluZShgJHtlbnVtTWVtYmVyTmFtZX1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5hbWVzcGFjZUZvcihhc3NtOiBzcGVjLkFzc2VtYmx5LCB0eXBlOiBzcGVjLlR5cGUpOiBzdHJpbmcge1xuICAgIGxldCBucyA9IHR5cGUubmFtZXNwYWNlO1xuICAgIHdoaWxlIChucyAhPSBudWxsICYmIGFzc20udHlwZXM/LltgJHthc3NtLm5hbWV9LiR7bnN9YF0gIT0gbnVsbCkge1xuICAgICAgY29uc3QgbmVzdGluZyA9IGFzc20udHlwZXNbYCR7YXNzbS5uYW1lfS4ke25zfWBdO1xuICAgICAgbnMgPSBuZXN0aW5nLm5hbWVzcGFjZTtcbiAgICB9XG4gICAgaWYgKG5zICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGVyZXNvbHZlci5yZXNvbHZlTmFtZXNwYWNlKGFzc20sIGFzc20ubmFtZSwgbnMpO1xuICAgIH1cbiAgICByZXR1cm4gYXNzbS50YXJnZXRzIS5kb3RuZXQhLm5hbWVzcGFjZTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdE1ldGhvZChcbiAgICBjbHM6IHNwZWMuQ2xhc3NUeXBlIHwgc3BlYy5JbnRlcmZhY2VUeXBlLFxuICAgIG1ldGhvZDogc3BlYy5NZXRob2QsXG4gICAgZGVmaW5pbmdUeXBlOiBzcGVjLlR5cGUsXG4gICAgZW1pdEZvclByb3h5T3JEYXRhdHlwZSA9IGZhbHNlLFxuICApOiB2b2lkIHtcbiAgICB0aGlzLmVtaXROZXdMaW5lSWZOZWNlc3NhcnkoKTtcbiAgICBjb25zdCByZXR1cm5UeXBlID0gbWV0aG9kLnJldHVybnNcbiAgICAgID8gdGhpcy50eXBlcmVzb2x2ZXIudG9Eb3ROZXRUeXBlKG1ldGhvZC5yZXR1cm5zLnR5cGUpXG4gICAgICA6ICd2b2lkJztcbiAgICBjb25zdCBzdGF0aWNLZXlXb3JkID0gbWV0aG9kLnN0YXRpYyA/ICdzdGF0aWMgJyA6ICcnO1xuICAgIGxldCBvdmVycmlkZUtleVdvcmQgPSAnJztcbiAgICBsZXQgdmlydHVhbEtleVdvcmQgPSAnJztcblxuICAgIGxldCBkZWZpbmVkT25BbmNlc3RvciA9IGZhbHNlO1xuICAgIC8vIEluIHRoZSBjYXNlIG9mIHRoZSBzb3VyY2UgYmVpbmcgYSBjbGFzcywgd2UgY2hlY2sgaWYgaXQgaXMgYWxyZWFkeSBkZWZpbmVkIG9uIGFuIGFuY2VzdG9yXG4gICAgaWYgKHNwZWMuaXNDbGFzc1R5cGUoY2xzKSkge1xuICAgICAgZGVmaW5lZE9uQW5jZXN0b3IgPSB0aGlzLmlzTWVtYmVyRGVmaW5lZE9uQW5jZXN0b3IoY2xzLCBtZXRob2QpO1xuICAgIH1cbiAgICAvLyBUaGUgbWV0aG9kIGlzIGFuIG92ZXJyaWRlIGlmIGl0J3MgZGVmaW5lZCBvbiB0aGUgYW5jZXN0b3IsIG9yIGlmIHRoZSBwYXJlbnQgaXMgYSBjbGFzcyBhbmQgd2UgYXJlIGdlbmVyYXRpbmcgYSBwcm94eSBvciBkYXRhdHlwZSBjbGFzc1xuICAgIGxldCBvdmVycmlkZXMgPVxuICAgICAgZGVmaW5lZE9uQW5jZXN0b3IgfHwgKHNwZWMuaXNDbGFzc1R5cGUoY2xzKSAmJiBlbWl0Rm9yUHJveHlPckRhdGF0eXBlKTtcbiAgICAvLyBXZSBhbHNvIGluc3BlY3QgdGhlIGpzaWkgbW9kZWwgdG8gc2VlIGlmIGl0IG92ZXJyaWRlcyBhIGNsYXNzIG1lbWJlci5cbiAgICBpZiAobWV0aG9kLm92ZXJyaWRlcykge1xuICAgICAgY29uc3Qgb3ZlcnJpZGVUeXBlID0gdGhpcy5maW5kVHlwZShtZXRob2Qub3ZlcnJpZGVzKTtcbiAgICAgIGlmIChzcGVjLmlzQ2xhc3NUeXBlKG92ZXJyaWRlVHlwZSkpIHtcbiAgICAgICAgLy8gT3ZlcnJpZGVzIGEgY2xhc3MsIG5lZWRzIG92ZXJyaWRlcyBrZXl3b3JkXG4gICAgICAgIG92ZXJyaWRlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvdmVycmlkZXMpIHtcbiAgICAgIC8vIEFkZCB0aGUgb3ZlcnJpZGUga2V5IHdvcmQgaWYgdGhlIG1ldGhvZCBpcyBlbWl0dGVkIGZvciBhIHByb3h5IG9yIGRhdGEgdHlwZSBvciBpcyBkZWZpbmVkIG9uIGFuIGFuY2VzdG9yLiBJZlxuICAgICAgLy8gdGhlIG1lbWJlciBpcyBzdGF0aWMsIHVzZSB0aGUgXCJuZXdcIiBrZXl3b3JkIGluc3RlYWQsIHRvIGluZGljYXRlIHdlIGFyZSBpbnRlbnRpb25hbGx5IGhpZGluZyB0aGUgYW5jZXN0b3JcbiAgICAgIC8vIGRlY2xhcmF0aW9uIChhcyBDIyBkb2VzIG5vdCBpbmhlcml0IHN0YXRpY3MsIHRoZXkgY2FuIGJlIGhpZGRlbiBidXQgbm90IG92ZXJyaWRkZW4pLiBUaGUgXCJuZXdcIiBrZXl3b3JkIGlzXG4gICAgICAvLyBvcHRpb25hbCBpbiB0aGlzIGNvbnRleHQsIGJ1dCBoZWxwcyBjbGFyaWZ5IGludGVudGlvbi5cbiAgICAgIG92ZXJyaWRlS2V5V29yZCA9IG1ldGhvZC5zdGF0aWMgPyAnbmV3ICcgOiAnb3ZlcnJpZGUgJztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgIW1ldGhvZC5zdGF0aWMgJiZcbiAgICAgIChtZXRob2QuYWJzdHJhY3QgfHwgIWRlZmluZWRPbkFuY2VzdG9yKSAmJlxuICAgICAgIWVtaXRGb3JQcm94eU9yRGF0YXR5cGVcbiAgICApIHtcbiAgICAgIC8vIEFkZCB0aGUgdmlydHVhbCBrZXkgd29yZCBpZiB0aGUgbWV0aG9kIGlzIGFic3RyYWN0IG9yIG5vdCBkZWZpbmVkIG9uIGFuIGFuY2VzdG9yIGFuZCB3ZSBhcmUgTk9UIGdlbmVyYXRpbmcgYSBwcm94eSBvciBkYXRhdHlwZSBjbGFzc1xuICAgICAgLy8gTWV0aG9kcyBzaG91bGQgYWx3YXlzIGJlIHZpcnR1YWwgd2hlbiBwb3NzaWJsZVxuICAgICAgdmlydHVhbEtleVdvcmQgPSAndmlydHVhbCAnO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY2VzcyA9IHRoaXMucmVuZGVyQWNjZXNzTGV2ZWwobWV0aG9kKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gdGhpcy5uYW1ldXRpbHMuY29udmVydE1ldGhvZE5hbWUobWV0aG9kLm5hbWUpO1xuXG4gICAgY29uc3QgaXNPcHRpb25hbCA9IG1ldGhvZC5yZXR1cm5zICYmIG1ldGhvZC5yZXR1cm5zLm9wdGlvbmFsID8gJz8nIDogJyc7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gYCR7cmV0dXJuVHlwZX0ke2lzT3B0aW9uYWx9ICR7bWV0aG9kTmFtZX0oJHt0aGlzLnJlbmRlck1ldGhvZFBhcmFtZXRlcnMoXG4gICAgICBtZXRob2QsXG4gICAgKX0pYDtcblxuICAgIHRoaXMuZG90bmV0RG9jR2VuZXJhdG9yLmVtaXREb2NzKG1ldGhvZCwge1xuICAgICAgYXBpOiAnbWVtYmVyJyxcbiAgICAgIGZxbjogZGVmaW5pbmdUeXBlLmZxbixcbiAgICAgIG1lbWJlck5hbWU6IG1ldGhvZC5uYW1lLFxuICAgIH0pO1xuICAgIHRoaXMuZG90bmV0UnVudGltZUdlbmVyYXRvci5lbWl0QXR0cmlidXRlc0Zvck1ldGhvZChcbiAgICAgIGNscyxcbiAgICAgIG1ldGhvZCAvKiwgZW1pdEZvclByb3h5T3JEYXRhdHlwZSovLFxuICAgICk7XG5cbiAgICBpZiAobWV0aG9kLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLmNvZGUubGluZShgJHthY2Nlc3N9ICR7b3ZlcnJpZGVLZXlXb3JkfWFic3RyYWN0ICR7c2lnbmF0dXJlfTtgKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICAgIGAke2FjY2Vzc30gJHtzdGF0aWNLZXlXb3JkfSR7b3ZlcnJpZGVLZXlXb3JkfSR7dmlydHVhbEtleVdvcmR9JHtzaWduYXR1cmV9YCxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgdGhpcy5kb3RuZXRSdW50aW1lR2VuZXJhdG9yLmNyZWF0ZUludm9rZU1ldGhvZElkZW50aWZpZXIoXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIGNscyBhcyBzcGVjLkNsYXNzVHlwZSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3VuZHMgb3V0IGlmIGEgbWVtYmVyIChwcm9wZXJ0eSBvciBtZXRob2QpIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBvbmUgb2YgdGhlIGJhc2UgY2xhc3Nlc1xuICAgKlxuICAgKiBVc2VkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIG92ZXJyaWRlIG9yIHZpcnR1YWwga2V5d29yZHMgYXJlIG5lY2Vzc2FyeS5cbiAgICovXG4gIHByaXZhdGUgaXNNZW1iZXJEZWZpbmVkT25BbmNlc3RvcihcbiAgICBjbHM6IHNwZWMuQ2xhc3NUeXBlLFxuICAgIG1lbWJlcjogc3BlYy5Qcm9wZXJ0eSB8IHNwZWMuTWV0aG9kLFxuICApOiBib29sZWFuIHtcbiAgICBpZiAobWVtYmVyIGFzIHNwZWMuTWV0aG9kKSB7XG4gICAgICBjb25zdCBvYmplY3RNZXRob2RzID0gWydUb1N0cmluZycsICdHZXRIYXNoQ29kZScsICdFcXVhbHMnXTtcbiAgICAgIC8vIE1ldGhvZHMgZGVmaW5lZCBvbiB0aGUgT2JqZWN0IGNsYXNzIHNob3VsZCBiZSBvdmVycmlkZGVuLCByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChcbiAgICAgICAgb2JqZWN0TWV0aG9kcy5pbmNsdWRlcyh0aGlzLm5hbWV1dGlscy5jb252ZXJ0TWV0aG9kTmFtZShtZW1iZXIubmFtZSkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZSA9IGNscy5iYXNlO1xuICAgIGlmIChiYXNlKSB7XG4gICAgICBjb25zdCBiYXNlVHlwZSA9IHRoaXMuZmluZFR5cGUoYmFzZSkgYXMgc3BlYy5DbGFzc1R5cGU7XG5cbiAgICAgIGlmIChtZW1iZXIgYXMgc3BlYy5Qcm9wZXJ0eSkge1xuICAgICAgICBpZiAoYmFzZVR5cGUucHJvcGVydGllcykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGJhc2VUeXBlLnByb3BlcnRpZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAocHJvcGVydHkpID0+IHByb3BlcnR5Lm5hbWUgPT09IG1lbWJlci5uYW1lLFxuICAgICAgICAgICAgKS5sZW5ndGggPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBwcm9wZXJ0eSBmb3VuZCBpbiBiYXNlIHBhcmVudFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlzTWVtYmVyRGVmaW5lZE9uQW5jZXN0b3IoYmFzZVR5cGUsIG1lbWJlcik7XG4gICAgICB9IGVsc2UgaWYgKG1lbWJlciBhcyBzcGVjLk1ldGhvZCkge1xuICAgICAgICBpZiAoYmFzZVR5cGUubWV0aG9kcykge1xuICAgICAgICAgIGNvbnN0IG15TWV0aG9kID0gbWVtYmVyIGFzIHNwZWMuTWV0aG9kO1xuICAgICAgICAgIC8vIElmIHRoZSBuYW1lLCBwYXJhbWV0ZXJzIGFuZCByZXR1cm5zIGFyZSBzaW1pbGFyIHRoZW4gaXQgaXMgdGhlIHNhbWUgbWV0aG9kIGluIC5ORVRcbiAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgYmFzZVR5cGUubWV0aG9kcykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBtLm5hbWUgPT09IG15TWV0aG9kLm5hbWUgJiZcbiAgICAgICAgICAgICAgbS5wYXJhbWV0ZXJzID09PSBteU1ldGhvZC5wYXJhbWV0ZXJzICYmXG4gICAgICAgICAgICAgIG0ucmV0dXJucyA9PT0gbXlNZXRob2QucmV0dXJuc1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pc01lbWJlckRlZmluZWRPbkFuY2VzdG9yKGJhc2VUeXBlLCBtZW1iZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBtZXRob2QgcGFyYW1ldGVycyBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyTWV0aG9kUGFyYW1ldGVycyhtZXRob2Q6IHNwZWMuTWV0aG9kKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJQYXJhbWV0ZXJzU3RyaW5nKG1ldGhvZC5wYXJhbWV0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHBhcmFtZXRlcnMgc3RyaW5nIGZvciBtZXRob2RzIG9yIGNvbnN0cnVjdG9yc1xuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJQYXJhbWV0ZXJzU3RyaW5nKFxuICAgIHBhcmFtZXRlcnM6IHNwZWMuUGFyYW1ldGVyW10gfCB1bmRlZmluZWQsXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyYW1zID0gW107XG4gICAgaWYgKHBhcmFtZXRlcnMpIHtcbiAgICAgIGZvciAoY29uc3QgcCBvZiBwYXJhbWV0ZXJzKSB7XG4gICAgICAgIGxldCBvcHRpb25hbFByaW1pdGl2ZSA9ICcnO1xuICAgICAgICBsZXQgb3B0aW9uYWxLZXl3b3JkID0gJyc7XG4gICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlcmVzb2x2ZXIudG9Eb3ROZXRUeXBlKHAudHlwZSk7XG4gICAgICAgIGlmIChwLm9wdGlvbmFsKSB7XG4gICAgICAgICAgb3B0aW9uYWxLZXl3b3JkID0gJyA9IG51bGwnO1xuICAgICAgICAgIGlmIChwLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICBvcHRpb25hbFByaW1pdGl2ZSA9ICc/JztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocC52YXJpYWRpYykge1xuICAgICAgICAgIHR5cGUgPSBgcGFyYW1zICR7dHlwZX1bXWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3QgPSBgJHt0eXBlfSR7b3B0aW9uYWxQcmltaXRpdmV9ICR7dGhpcy5uYW1ldXRpbHMuY29udmVydFBhcmFtZXRlck5hbWUoXG4gICAgICAgICAgcC5uYW1lLFxuICAgICAgICApfSR7b3B0aW9uYWxLZXl3b3JkfWA7XG4gICAgICAgIHBhcmFtcy5wdXNoKHN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtcy5qb2luKCcsICcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFuIGludGVyZmFjZSBwcm94eSBmb3IgYW4gaW50ZXJmYWNlIG9yIGFuIGFic3RyYWN0IGNsYXNzLlxuICAgKi9cbiAgcHJpdmF0ZSBlbWl0SW50ZXJmYWNlUHJveHkoaWZjOiBzcGVjLkludGVyZmFjZVR5cGUgfCBzcGVjLkNsYXNzVHlwZSk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWUgPSAnX1Byb3h5JztcbiAgICBjb25zdCBuYW1lc3BhY2UgPSB0aGlzLm5hbWVzcGFjZUZvcih0aGlzLmFzc2VtYmx5LCBpZmMpO1xuICAgIGNvbnN0IGlzTmVzdGVkID0gdHJ1ZTtcbiAgICB0aGlzLm9wZW5GaWxlSWZOZWVkZWQobmFtZSwgbmFtZXNwYWNlLCBpc05lc3RlZCk7XG5cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuZG90bmV0RG9jR2VuZXJhdG9yLmVtaXREb2NzKGlmYywge1xuICAgICAgYXBpOiAndHlwZScsXG4gICAgICBmcW46IGlmYy5mcW4sXG4gICAgfSk7XG4gICAgdGhpcy5kb3RuZXRSdW50aW1lR2VuZXJhdG9yLmVtaXRBdHRyaWJ1dGVzRm9ySW50ZXJmYWNlUHJveHkoaWZjKTtcblxuICAgIGNvbnN0IGludGVyZmFjZUZxbiA9IHRoaXMudHlwZXJlc29sdmVyLnRvTmF0aXZlRnFuKGlmYy5mcW4pO1xuICAgIGNvbnN0IHN1ZmZpeCA9IHNwZWMuaXNJbnRlcmZhY2VUeXBlKGlmYylcbiAgICAgID8gYDogRGVwdXR5QmFzZSwgJHtpbnRlcmZhY2VGcW59YFxuICAgICAgOiBgOiAke2ludGVyZmFjZUZxbn1gO1xuICAgIGNvbnN0IG5ld01vZGlmaWVyID0gdGhpcy5wcm94eU11c3RVc2VOZXdNb2RpZmllcihpZmMpID8gJ25ldyAnIDogJyc7XG5cbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYCR7bmV3TW9kaWZpZXJ9aW50ZXJuYWwgc2VhbGVkIGNsYXNzICR7bmFtZX0gJHtzdWZmaXh9YCxcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBwcml2YXRlIGNvbnN0cnVjdG9yXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBwcml2YXRlICR7bmFtZX0oQnlSZWZWYWx1ZSByZWZlcmVuY2UpOiBiYXNlKHJlZmVyZW5jZSlgLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBvdXRwdXQgYSBtZW1iZXIgKGNvbnN0cnVjdG9yKSwgc2V0dGluZyB0aGUgZmlyc3QgbWVtYmVyIGZsYWcgdG8gdHJ1ZVxuICAgIHRoaXMuZmxhZ0ZpcnN0TWVtYmVyV3JpdHRlbih0cnVlKTtcblxuICAgIGNvbnN0IGRhdGF0eXBlID0gZmFsc2U7XG4gICAgY29uc3QgcHJveHkgPSB0cnVlO1xuICAgIHRoaXMuZW1pdEludGVyZmFjZU1lbWJlcnNGb3JQcm94eU9yRGF0YXR5cGUoaWZjLCBkYXRhdHlwZSwgcHJveHkpO1xuXG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB0aGlzLmNsb3NlRmlsZUlmTmVlZGVkKG5hbWUsIG5hbWVzcGFjZSwgaXNOZXN0ZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBhbnkgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIHR5cGUgbXVzdCB1c2UgdGhlIGBuZXdgXG4gICAqIG1vZGlmaWVyIHdoZW4gaW50cm9kdWNpbmcgaXQncyBvd24gcHJveHkuXG4gICAqXG4gICAqIElmIHRoZSB0eXBlIGlzIGEgYGNsYXNzYCwgdGhlbiBpdCBtdXN0IHVzZSBgbmV3YCBpZiBpdCBleHRlbmRzIGFub3RoZXJcbiAgICogYWJzdHJhY3QgY2xhc3MgZGVmaW5lZCBpbiB0aGUgc2FtZSBhc3NlbWJseSAoc2luY2UgcHJveGllcyBhcmUgaW50ZXJuYWwsXG4gICAqIGV4dGVybmFsIHR5cGVzJyBwcm94aWVzIGFyZSBub3QgdmlzaWJsZSBpbiB0aGF0IGNvbnRleHQpLlxuICAgKlxuICAgKiBJZiB0aGUgdHlwZSBpcyBhbiBgaW50ZXJmYWNlYCwgdGhlbiBpdCBtdXN0IHVzZSBgbmV3YCBpZiBpdCBleHRlbmRzIGFub3RoZXJcbiAgICogaW50ZXJmYWNlIGZyb20gdGhlIHNhbWUgYXNzZW1ibHkuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIHRoZSB0ZXN0ZWQgcHJveHktYWJsZSB0eXBlIChhbiBhYnN0cmFjdCBjbGFzcyBvciBhbiBpbnRlcmZhY2UpLlxuICAgKlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIGFueSBhbmNlc3RvciBvZiB0aGlzIHR5cGUgaGFzIGEgdmlzaWJsZSBwcm94eS5cbiAgICovXG4gIHByaXZhdGUgcHJveHlNdXN0VXNlTmV3TW9kaWZpZXIoXG4gICAgdHlwZTogc3BlYy5DbGFzc1R5cGUgfCBzcGVjLkludGVyZmFjZVR5cGUsXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChzcGVjLmlzQ2xhc3NUeXBlKHR5cGUpKSB7XG4gICAgICBpZiAodHlwZS5iYXNlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBiYXNlID0gdGhpcy5maW5kVHlwZSh0eXBlLmJhc2UpIGFzIHNwZWMuQ2xhc3NUeXBlO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgYmFzZS5hc3NlbWJseSA9PT0gdHlwZS5hc3NlbWJseSAmJlxuICAgICAgICAoYmFzZS5hYnN0cmFjdFxuICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgIDogLy8gQW4gYWJzdHJhY3QgY2xhc3MgY291bGQgZXh0ZW5kIGEgY29uY3JldGUgY2xhc3MuLi4gV2UgbXVzdCB3YWxrIHVwIHRoZSBpbmhlcml0YW5jZSB0cmVlIGluIHRoaXMgY2FzZS4uLlxuICAgICAgICAgICAgdGhpcy5wcm94eU11c3RVc2VOZXdNb2RpZmllcihiYXNlKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGUuaW50ZXJmYWNlcz8uZmluZChcbiAgICAgICAgKGZxbikgPT4gdGhpcy5maW5kVHlwZShmcW4pLmFzc2VtYmx5ID09PSB0eXBlLmFzc2VtYmx5LFxuICAgICAgKSAhPSBudWxsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBhbiBJbnRlcmZhY2UgRGF0YXR5cGUgY2xhc3NcbiAgICpcbiAgICogVGhpcyBpcyB1c2VkIHRvIGVtaXQgYSBjbGFzcyBpbXBsZW1lbnRpbmcgYW4gaW50ZXJmYWNlIHdoZW4gdGhlIGRhdGF0eXBlIHByb3BlcnR5IGlzIHRydWUgaW4gdGhlIGpzaWkgbW9kZWxcbiAgICogVGhlIGdlbmVyYXRpb24gb2YgdGhlIGludGVyZmFjZSBwcm94eSBtYXkgbm90IGJlIG5lZWRlZCBpZiB0aGUgaW50ZXJmYWNlIGlzIGFsc28gc2V0IGFzIGEgZGF0YXR5cGVcbiAgICovXG4gIHByaXZhdGUgZW1pdEludGVyZmFjZURhdGFUeXBlKGlmYzogc3BlYy5JbnRlcmZhY2VUeXBlKTogdm9pZCB7XG4gICAgLy8gSW50ZXJmYWNlIGRhdGF0eXBlcyBkbyBub3QgbmVlZCB0byBiZSBwcmVmaXhlZCBieSBJLCB3ZSBjYW4gY2FsbCBjb252ZXJ0Q2xhc3NOYW1lXG4gICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZXV0aWxzLmNvbnZlcnRDbGFzc05hbWUoaWZjKTtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSB0aGlzLm5hbWVzcGFjZUZvcih0aGlzLmFzc2VtYmx5LCBpZmMpO1xuICAgIGNvbnN0IGlzTmVzdGVkID0gdGhpcy5pc05lc3RlZChpZmMpO1xuICAgIHRoaXMub3BlbkZpbGVJZk5lZWRlZChuYW1lLCBuYW1lc3BhY2UsIGlzTmVzdGVkKTtcblxuICAgIGlmIChpZmMucHJvcGVydGllcz8uZmluZCgocHJvcCkgPT4gIXByb3Aub3B0aW9uYWwpICE9IG51bGwpIHtcbiAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gYmUgYW5ub3llZCBieSB0aGUgbGFjayBvZiBpbml0aWFsaXphdGlvbiBvZiBub24tbnVsbGFibGUgZmllbGRzIGluIHRoaXMgY2FzZS5cbiAgICAgIHRoaXMuY29kZS5saW5lKCcjcHJhZ21hIHdhcm5pbmcgZGlzYWJsZSBDUzg2MTgnKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kb3RuZXREb2NHZW5lcmF0b3IuZW1pdERvY3MoaWZjLCB7XG4gICAgICBhcGk6ICd0eXBlJyxcbiAgICAgIGZxbjogaWZjLmZxbixcbiAgICB9KTtcbiAgICBjb25zdCBzdWZmaXggPSBgOiAke3RoaXMudHlwZXJlc29sdmVyLnRvTmF0aXZlRnFuKGlmYy5mcW4pfWA7XG4gICAgdGhpcy5kb3RuZXRSdW50aW1lR2VuZXJhdG9yLmVtaXRBdHRyaWJ1dGVzRm9ySW50ZXJmYWNlRGF0YXR5cGUoaWZjKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGBwdWJsaWMgY2xhc3MgJHtuYW1lfSAke3N1ZmZpeH1gKTtcbiAgICB0aGlzLmZsYWdGaXJzdE1lbWJlcldyaXR0ZW4oZmFsc2UpO1xuICAgIGNvbnN0IGRhdGF0eXBlID0gdHJ1ZTtcbiAgICBjb25zdCBwcm94eSA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdEludGVyZmFjZU1lbWJlcnNGb3JQcm94eU9yRGF0YXR5cGUoaWZjLCBkYXRhdHlwZSwgcHJveHkpO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgdGhpcy5jbG9zZUZpbGVJZk5lZWRlZChuYW1lLCBuYW1lc3BhY2UsIGlzTmVzdGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGhlIGJvZHkgb2YgdGhlIGludGVyZmFjZSBwcm94eSBvciBkYXRhIHR5cGUgY2xhc3NcbiAgICpcbiAgICogVGhpcyBsb29wcyB0aHJvdWdoIGFsbCB0aGUgbWVtYmVyIGFuZCBnZW5lcmF0ZXMgdGhlbVxuICAgKi9cbiAgcHJpdmF0ZSBlbWl0SW50ZXJmYWNlTWVtYmVyc0ZvclByb3h5T3JEYXRhdHlwZShcbiAgICBpZmM6IHNwZWMuSW50ZXJmYWNlVHlwZSB8IHNwZWMuQ2xhc3NUeXBlLFxuICAgIGRhdGF0eXBlOiBib29sZWFuLFxuICAgIHByb3h5OiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICAvLyBUaGUga2V5IGlzIGluIHRoZSBmb3JtICdtZXRob2QubmFtZTtwYXJhbWV0ZXIxO3BhcmFtZXRlcjI7JyBldGNcbiAgICBjb25zdCBtZXRob2RzID0gbmV3IE1hcDxzdHJpbmcsIE1ldGhvZERlZmluaXRpb24+KCk7XG4gICAgLypcbiAgICAgICAgICBPbmx5IGdldCB0aGUgZmlyc3QgZGVjbGFyYXRpb24gZW5jb3VudGVyZWQsIGFuZCBrZWVwIGl0IGlmIGl0IGlzIGFic3RyYWN0LiBUaGUgbGlzdCBjb250YWlucyBBTExcbiAgICAgICAgICBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGVuY291bnRlcmVkLCBpbiB0aGUgb3JkZXIgZW5jb3VudGVyZWQuIEFuIGFic3RyYWN0IGNsYXNzIGNhbiBoYXZlIGNvbmNyZXRlXG4gICAgICAgICAgaW1wbGVtZW50YXRpb25zLiBUaGVyZWZvcmUsIHdlIG9ubHkgZ2VuZXJhdGUgbWV0aG9kcy9wcm9wZXJ0aWVzIGlmIHRoZSBmaXJzdCBtZW1iZXIgZW5jb3VudGVyZWRcbiAgICAgICAgICBpcyB1bmltcGxlbWVudGVkLlxuICAgICAgICAqL1xuICAgIGNvbnN0IGV4Y2x1ZGVkTWV0aG9kOiBzdHJpbmdbXSA9IFtdOyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgbWV0aG9kcyB3ZSBhbHJlYWR5IHJhbiBpbnRvIGFuZCBkb24ndCB3YW50IHRvIGVtaXRcbiAgICBjb25zdCBleGNsdWRlZFByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107IC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBwcm9wZXJ0aWVzIHdlIGFscmVhZHkgcmFuIGludG8gYW5kIGRvbid0IHdhbnQgdG8gZW1pdFxuICAgIGNvbnN0IHByb3BlcnRpZXM6IHsgW25hbWU6IHN0cmluZ106IFByb3BlcnR5RGVmaW5pdGlvbiB9ID0ge307XG4gICAgY29uc3QgY29sbGVjdEFic3RyYWN0TWVtYmVycyA9IChcbiAgICAgIGN1cnJlbnRUeXBlOiBzcGVjLkludGVyZmFjZVR5cGUgfCBzcGVjLkNsYXNzVHlwZSxcbiAgICApID0+IHtcbiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBjdXJyZW50VHlwZS5wcm9wZXJ0aWVzID8/IFtdKSB7XG4gICAgICAgIGlmICghZXhjbHVkZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKHByb3AubmFtZSkpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIG5ldmVyIHJ1biBpbnRvIHRoaXMgcHJvcGVydHkgYmVmb3JlIGFuZCBpdCBpcyBhYnN0cmFjdCwgd2Uga2VlcCBpdFxuICAgICAgICAgIGlmIChwcm9wLmFic3RyYWN0KSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzW3Byb3AubmFtZV0gPSB7IHByb3AsIGRlZmluaW5nVHlwZTogY3VycmVudFR5cGUgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXhjbHVkZWRQcm9wZXJ0aWVzLnB1c2gocHJvcC5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBjdXJyZW50VHlwZS5tZXRob2RzID8/IFtdKSB7XG4gICAgICAgIGxldCBtZXRob2RQYXJhbWV0ZXJzID0gJyc7XG4gICAgICAgIGlmIChtZXRob2QucGFyYW1ldGVycykge1xuICAgICAgICAgIG1ldGhvZC5wYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtKSA9PiB7XG4gICAgICAgICAgICBtZXRob2RQYXJhbWV0ZXJzICs9IGA7JHt0aGlzLnR5cGVyZXNvbHZlci50b0RvdE5ldFR5cGUoXG4gICAgICAgICAgICAgIHBhcmFtLnR5cGUsXG4gICAgICAgICAgICApfWA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFleGNsdWRlZE1ldGhvZC5pbmNsdWRlcyhgJHttZXRob2QubmFtZX0ke21ldGhvZFBhcmFtZXRlcnN9YCkpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIG5ldmVyIHJ1biBpbnRvIHRoaXMgbWV0aG9kIGJlZm9yZSBhbmQgaXQgaXMgYWJzdHJhY3QsIHdlIGtlZXAgaXRcbiAgICAgICAgICBpZiAobWV0aG9kLmFic3RyYWN0KSB7XG4gICAgICAgICAgICBtZXRob2RzLnNldChgJHttZXRob2QubmFtZX0ke21ldGhvZFBhcmFtZXRlcnN9YCwge1xuICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAgIGRlZmluaW5nVHlwZTogY3VycmVudFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXhjbHVkZWRNZXRob2QucHVzaChgJHttZXRob2QubmFtZX0ke21ldGhvZFBhcmFtZXRlcnN9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYmFzZXMgPSBuZXcgQXJyYXk8c3BlYy5OYW1lZFR5cGVSZWZlcmVuY2U+KCk7XG4gICAgICBiYXNlcy5wdXNoKFxuICAgICAgICAuLi4oY3VycmVudFR5cGUuaW50ZXJmYWNlcyA/PyBbXSkubWFwKChpZmFjZSkgPT4gdGhpcy5maW5kVHlwZShpZmFjZSkpLFxuICAgICAgKTtcbiAgICAgIGlmIChzcGVjLmlzQ2xhc3NUeXBlKGN1cnJlbnRUeXBlKSAmJiBjdXJyZW50VHlwZS5iYXNlKSB7XG4gICAgICAgIGJhc2VzLnB1c2godGhpcy5maW5kVHlwZShjdXJyZW50VHlwZS5iYXNlKSk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGJhc2Ugb2YgYmFzZXMpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZmluZFR5cGUoYmFzZS5mcW4pO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZS5raW5kICE9PSBzcGVjLlR5cGVLaW5kLkludGVyZmFjZSAmJlxuICAgICAgICAgIHR5cGUua2luZCAhPT0gc3BlYy5UeXBlS2luZC5DbGFzc1xuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQmFzZSBpbnRlcmZhY2VzIG9mIGFuIGludGVyZmFjZSBtdXN0IGJlIGFuIGludGVyZmFjZSBvciBhIGNsYXNzICgke2Jhc2UuZnFufSBpcyBvZiB0eXBlICR7dHlwZS5raW5kfSlgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29sbGVjdEFic3RyYWN0TWVtYmVycyh0eXBlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbGxlY3RBYnN0cmFjdE1lbWJlcnMoaWZjKTtcblxuICAgIC8vIGVtaXQgYWxsIHByb3BlcnRpZXNcbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIE9iamVjdC5rZXlzKHByb3BlcnRpZXMpKSB7XG4gICAgICBjb25zdCBwcm9wID0gY2xvbmUocHJvcGVydGllc1twcm9wTmFtZV0pO1xuICAgICAgcHJvcC5wcm9wLmFic3RyYWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLmVtaXRQcm9wZXJ0eShpZmMsIHByb3AucHJvcCwgcHJvcC5kZWZpbmluZ1R5cGUsIGRhdGF0eXBlLCBwcm94eSk7XG4gICAgfVxuICAgIC8vIGVtaXQgYWxsIHRoZSBtZXRob2RzXG4gICAgZm9yIChjb25zdCBtZXRob2ROYW1lQW5kUGFyYW1ldGVycyBvZiBtZXRob2RzLmtleXMoKSkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBtZXRob2RzLmdldChtZXRob2ROYW1lQW5kUGFyYW1ldGVycyk7XG4gICAgICBpZiAob3JpZ2luYWxNZXRob2QpIHtcbiAgICAgICAgY29uc3QgbWV0aG9kID0gY2xvbmUob3JpZ2luYWxNZXRob2QpO1xuICAgICAgICBtZXRob2QubWV0aG9kLmFic3RyYWN0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW1pdE1ldGhvZChcbiAgICAgICAgICBpZmMsXG4gICAgICAgICAgbWV0aG9kLm1ldGhvZCxcbiAgICAgICAgICBtZXRob2QuZGVmaW5pbmdUeXBlLFxuICAgICAgICAgIC8qIGVtaXRGb3JQcm94eU9yRGF0YXR5cGUgKi8gdHJ1ZSxcbiAgICAgICAgKTtcblxuICAgICAgICBmb3IgKGNvbnN0IG92ZXJsb2FkZWRNZXRob2Qgb2YgdGhpcy5jcmVhdGVPdmVybG9hZHNGb3JPcHRpb25hbHMoXG4gICAgICAgICAgbWV0aG9kLm1ldGhvZCxcbiAgICAgICAgKSkge1xuICAgICAgICAgIG92ZXJsb2FkZWRNZXRob2QuYWJzdHJhY3QgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmVtaXRNZXRob2QoXG4gICAgICAgICAgICBpZmMsXG4gICAgICAgICAgICBvdmVybG9hZGVkTWV0aG9kLFxuICAgICAgICAgICAgbWV0aG9kLmRlZmluaW5nVHlwZSxcbiAgICAgICAgICAgIC8qIGVtaXRGb3JQcm94eU9yRGF0YXR5cGUgKi8gdHJ1ZSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGEgcHJvcGVydHlcbiAgICovXG4gIHByaXZhdGUgZW1pdFByb3BlcnR5KFxuICAgIGNsczogc3BlYy5UeXBlLFxuICAgIHByb3A6IHNwZWMuUHJvcGVydHksXG4gICAgZGVmaW5pbmdUeXBlOiBzcGVjLlR5cGUsXG4gICAgZGF0YXR5cGUgPSBmYWxzZSxcbiAgICBwcm94eSA9IGZhbHNlLFxuICApOiB2b2lkIHtcbiAgICB0aGlzLmVtaXROZXdMaW5lSWZOZWNlc3NhcnkoKTtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMudHlwZXJlc29sdmVyLnRvTmF0aXZlRnFuKGNscy5mcW4pO1xuICAgIGNvbnN0IGFjY2VzcyA9IHRoaXMucmVuZGVyQWNjZXNzTGV2ZWwocHJvcCk7XG4gICAgY29uc3Qgc3RhdGljS2V5V29yZCA9IHByb3Auc3RhdGljID8gJ3N0YXRpYyAnIDogJyc7XG4gICAgY29uc3QgcHJvcE5hbWUgPSB0aGlzLm5hbWV1dGlscy5jb252ZXJ0UHJvcGVydHlOYW1lKHByb3AubmFtZSk7XG5cbiAgICB0aGlzLmRvdG5ldERvY0dlbmVyYXRvci5lbWl0RG9jcyhwcm9wLCB7XG4gICAgICBhcGk6ICdtZW1iZXInLFxuICAgICAgZnFuOiBkZWZpbmluZ1R5cGUuZnFuLFxuICAgICAgbWVtYmVyTmFtZTogcHJvcC5uYW1lLFxuICAgIH0pO1xuICAgIGlmIChwcm9wLm9wdGlvbmFsKSB7XG4gICAgICB0aGlzLmNvZGUubGluZSgnW0pzaWlPcHRpb25hbF0nKTtcbiAgICB9XG4gICAgdGhpcy5kb3RuZXRSdW50aW1lR2VuZXJhdG9yLmVtaXRBdHRyaWJ1dGVzRm9yUHJvcGVydHkocHJvcCk7XG5cbiAgICBsZXQgaXNPdmVycmlkZUtleVdvcmQgPSAnJztcbiAgICBsZXQgaXNWaXJ0dWFsS2V5V29yZCA9ICcnO1xuICAgIGxldCBpc0Fic3RyYWN0S2V5d29yZCA9ICcnO1xuXG4gICAgLy8gSWYgdGhlIHByb3AgcGFyZW50IGlzIGEgY2xhc3NcbiAgICBpZiAoc3BlYy5pc0NsYXNzVHlwZShjbHMpKSB7XG4gICAgICBjb25zdCBpbXBsZW1lbnRlZEluQmFzZSA9IHRoaXMuaXNNZW1iZXJEZWZpbmVkT25BbmNlc3RvcihcbiAgICAgICAgY2xzIGFzIHNwZWMuQ2xhc3NUeXBlLFxuICAgICAgICBwcm9wLFxuICAgICAgKTtcbiAgICAgIGlmIChpbXBsZW1lbnRlZEluQmFzZSB8fCBkYXRhdHlwZSB8fCBwcm94eSkge1xuICAgICAgICAvLyBPdmVycmlkZSBpZiB0aGUgcHJvcGVydHkgaXMgaW4gYSBkYXRhdHlwZSBvciBwcm94eSBjbGFzcyBvciBkZWNsYXJlZCBpbiBhIHBhcmVudCBjbGFzcy4gSWYgdGhlIG1lbWJlciBpc1xuICAgICAgICAvLyBzdGF0aWMsIHVzZSB0aGUgXCJuZXdcIiBrZXl3b3JkIGluc3RlYWQsIHRvIGluZGljYXRlIHdlIGFyZSBpbnRlbnRpb25hbGx5IGhpZGluZyB0aGUgYW5jZXN0b3IgZGVjbGFyYXRpb24gKGFzXG4gICAgICAgIC8vIEMjIGRvZXMgbm90IGluaGVyaXQgc3RhdGljcywgdGhleSBjYW4gYmUgaGlkZGVuIGJ1dCBub3Qgb3ZlcnJpZGRlbikuVGhlIFwibmV3XCIga2V5d29yZCBpcyBvcHRpb25hbCBpbiB0aGlzXG4gICAgICAgIC8vIGNvbnRleHQsIGJ1dCBoZWxwcyBjbGFyaWZ5IGludGVudGlvbi5cbiAgICAgICAgaXNPdmVycmlkZUtleVdvcmQgPSBwcm9wLnN0YXRpYyA/ICduZXcgJyA6ICdvdmVycmlkZSAnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wLmFic3RyYWN0KSB7XG4gICAgICAgIC8vIEFic3RyYWN0IG1lbWJlcnMgZ2V0IGRlY29yYXRlZCBhcyBzdWNoXG4gICAgICAgIGlzQWJzdHJhY3RLZXl3b3JkID0gJ2Fic3RyYWN0ICc7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9wLnN0YXRpYyAmJiAhaW1wbGVtZW50ZWRJbkJhc2UpIHtcbiAgICAgICAgLy8gVmlydHVhbCBpZiB0aGUgcHJvcCBpcyBub3Qgc3RhdGljLCBhbmQgaXMgbm90IGltcGxlbWVudGVkIGluIGJhc2UgbWVtYmVyLCB0aGlzIHdheSB3ZSBjYW4gbGF0ZXIgb3ZlcnJpZGUgaXQuXG4gICAgICAgIGlzVmlydHVhbEtleVdvcmQgPSAndmlydHVhbCAnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3BUeXBlRlFOID0gdGhpcy50eXBlcmVzb2x2ZXIudG9Eb3ROZXRUeXBlKHByb3AudHlwZSk7XG4gICAgY29uc3QgaXNPcHRpb25hbCA9IHByb3Aub3B0aW9uYWwgPyAnPycgOiAnJztcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBgJHthY2Nlc3N9ICR7aXNBYnN0cmFjdEtleXdvcmR9JHtpc1ZpcnR1YWxLZXlXb3JkfSR7c3RhdGljS2V5V29yZH0ke2lzT3ZlcnJpZGVLZXlXb3JkfSR7cHJvcFR5cGVGUU59JHtpc09wdGlvbmFsfSAke3Byb3BOYW1lfWA7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhzdGF0ZW1lbnQpO1xuXG4gICAgLy8gRW1pdCBnZXR0ZXJzXG4gICAgaWYgKGRhdGF0eXBlIHx8IHByb3AuY29uc3QgfHwgcHJvcC5hYnN0cmFjdCkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJ2dldDsnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIG5vbi1vcHRpb25hbCwgYWRkIGEgYmFuZyB0byBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmdcbiAgICAgIGNvbnN0IGJhbmcgPSBwcm9wLm9wdGlvbmFsID8gJycgOiAnISc7XG4gICAgICBpZiAocHJvcC5zdGF0aWMpIHtcbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgICAgYGdldCA9PiBHZXRTdGF0aWNQcm9wZXJ0eTwke3Byb3BUeXBlRlFOfSR7aXNPcHRpb25hbH0+KHR5cGVvZigke2NsYXNzTmFtZX0pKSR7YmFuZ307YCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICAgIGBnZXQgPT4gR2V0SW5zdGFuY2VQcm9wZXJ0eTwke3Byb3BUeXBlRlFOfSR7aXNPcHRpb25hbH0+KCkke2Jhbmd9O2AsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRW1pdCBzZXR0ZXJzXG4gICAgaWYgKGRhdGF0eXBlIHx8ICghcHJvcC5pbW11dGFibGUgJiYgcHJvcC5hYnN0cmFjdCkpIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKCdzZXQ7Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghcHJvcC5pbW11dGFibGUpIHtcbiAgICAgICAgaWYgKHByb3Auc3RhdGljKSB7XG4gICAgICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgICAgICBgc2V0ID0+IFNldFN0YXRpY1Byb3BlcnR5KHR5cGVvZigke2NsYXNzTmFtZX0pLCB2YWx1ZSk7YCxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29kZS5saW5lKCdzZXQgPT4gU2V0SW5zdGFuY2VQcm9wZXJ0eSh2YWx1ZSk7Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgdGhpcy5mbGFnRmlyc3RNZW1iZXJXcml0dGVuKHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGEgY29uc3RhbnQgcHJvcGVydHlcbiAgICovXG4gIHByaXZhdGUgZW1pdENvbnN0UHJvcGVydHkoY2xzOiBzcGVjLkNsYXNzVHlwZSwgcHJvcDogc3BlYy5Qcm9wZXJ0eSk6IHZvaWQge1xuICAgIHRoaXMuZW1pdE5ld0xpbmVJZk5lY2Vzc2FyeSgpO1xuICAgIHRoaXMuZmxhZ0ZpcnN0TWVtYmVyV3JpdHRlbih0cnVlKTtcbiAgICBjb25zdCBwcm9wVHlwZSA9IHRoaXMudHlwZXJlc29sdmVyLnRvRG90TmV0VHlwZShwcm9wLnR5cGUpO1xuICAgIGNvbnN0IGlzT3B0aW9uYWwgPSBwcm9wLm9wdGlvbmFsID8gJz8nIDogJyc7XG4gICAgdGhpcy5kb3RuZXREb2NHZW5lcmF0b3IuZW1pdERvY3MocHJvcCwge1xuICAgICAgYXBpOiAnbWVtYmVyJyxcbiAgICAgIGZxbjogY2xzLmZxbixcbiAgICAgIG1lbWJlck5hbWU6IHByb3AubmFtZSxcbiAgICB9KTtcbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IuZW1pdEF0dHJpYnV0ZXNGb3JQcm9wZXJ0eShwcm9wKTtcbiAgICBjb25zdCBhY2Nlc3MgPSB0aGlzLnJlbmRlckFjY2Vzc0xldmVsKHByb3ApO1xuICAgIGNvbnN0IHByb3BOYW1lID0gdGhpcy5uYW1ldXRpbHMuY29udmVydFByb3BlcnR5TmFtZShwcm9wLm5hbWUpO1xuICAgIGNvbnN0IHN0YXRpY0tleXdvcmQgPSBwcm9wLnN0YXRpYyA/ICdzdGF0aWMgJyA6ICcnO1xuXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGAke2FjY2Vzc30gJHtzdGF0aWNLZXl3b3JkfSR7cHJvcFR5cGV9JHtpc09wdGlvbmFsfSAke3Byb3BOYW1lfWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUubGluZSgnZ2V0OycpO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy50eXBlcmVzb2x2ZXIudG9OYXRpdmVGcW4oY2xzLmZxbik7XG4gICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIG5vbi1vcHRpb25hbCwgYWRkIGEgYmFuZyB0byBzaWxlbmNlIHRoZSBjb21waWxlciB3YXJuaW5nXG4gICAgY29uc3QgYmFuZyA9IHByb3Aub3B0aW9uYWwgPyAnJyA6ICchJztcbiAgICBjb25zdCBpbml0aWFsaXplciA9IHByb3Auc3RhdGljXG4gICAgICA/IGA9IEdldFN0YXRpY1Byb3BlcnR5PCR7cHJvcFR5cGV9Pih0eXBlb2YoJHtjbGFzc05hbWV9KSkke2Jhbmd9O2BcbiAgICAgIDogYD0gR2V0SW5zdGFuY2VQcm9wZXJ0eTwke3Byb3BUeXBlfT4odHlwZW9mKCR7Y2xhc3NOYW1lfSkpJHtiYW5nfTtgO1xuICAgIHRoaXMuY29kZS5saW5lKGluaXRpYWxpemVyKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQWNjZXNzTGV2ZWwobWV0aG9kOiBzcGVjLk1ldGhvZCB8IHNwZWMuUHJvcGVydHkpOiBzdHJpbmcge1xuICAgIHJldHVybiBtZXRob2QucHJvdGVjdGVkID8gJ3Byb3RlY3RlZCcgOiAncHVibGljJztcbiAgfVxuXG4gIHByaXZhdGUgaXNOZXN0ZWQodHlwZTogc3BlYy5UeXBlKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmFzc2VtYmx5LnR5cGVzIHx8ICF0eXBlLm5hbWVzcGFjZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBgJHt0eXBlLmFzc2VtYmx5fS4ke3R5cGUubmFtZXNwYWNlfWA7XG4gICAgcmV0dXJuIHBhcmVudCBpbiB0aGlzLmFzc2VtYmx5LnR5cGVzO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0NTaGFycEZpbGVQYXRoKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3R5cGV9LmNzYDtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkZpbGVJZk5lZWRlZChcbiAgICB0eXBlTmFtZTogc3RyaW5nLFxuICAgIG5hbWVzcGFjZTogc3RyaW5nLFxuICAgIGlzTmVzdGVkOiBib29sZWFuLFxuICAgIHVzaW5nRGVwdXR5ID0gdHJ1ZSxcbiAgKTogdm9pZCB7XG4gICAgLy8gSWYgTmVzdGVkIHR5cGUsIHdlIHNob3VsZG4ndCBvcGVuL2Nsb3NlIGEgZmlsZVxuICAgIGlmIChpc05lc3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRvdG5ldFBhY2thZ2VJZCA9IHRoaXMuYXNzZW1ibHkudGFyZ2V0cz8uZG90bmV0Py5wYWNrYWdlSWQ7XG4gICAgaWYgKCFkb3RuZXRQYWNrYWdlSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBtb2R1bGUgJHt0aGlzLmFzc2VtYmx5Lm5hbWV9IGRvZXMgbm90IGhhdmUgYSBkb3RuZXQucGFja2FnZUlkIHNldHRpbmdgLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZmlsZVBhdGggPSBuYW1lc3BhY2UucmVwbGFjZSgvWy5dL2csICcvJyk7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKFxuICAgICAgcGF0aC5qb2luKGRvdG5ldFBhY2thZ2VJZCwgZmlsZVBhdGgsIHRoaXMudG9DU2hhcnBGaWxlUGF0aCh0eXBlTmFtZSkpLFxuICAgICk7XG4gICAgaWYgKHVzaW5nRGVwdXR5KSB7XG4gICAgICB0aGlzLmNvZGUubGluZSgndXNpbmcgQW1hem9uLkpTSUkuUnVudGltZS5EZXB1dHk7Jyk7XG4gICAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIH1cblxuICAgIC8vIFN1cHByZXNzIHdhcm5pbmdzIGFib3V0IG1pc3NpbmcgWE1MRG9jLCBPYnNvbGV0ZSBpbmNvbnNpc3RlbmNpZXNcbiAgICB0aGlzLmNvZGUubGluZSgnI3ByYWdtYSB3YXJuaW5nIGRpc2FibGUgQ1MwNjcyLENTMDgwOSxDUzE1OTEnKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhgbmFtZXNwYWNlICR7bmFtZXNwYWNlfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZUZpbGVJZk5lZWRlZChcbiAgICB0eXBlTmFtZTogc3RyaW5nLFxuICAgIG5hbWVzcGFjZTogc3RyaW5nLFxuICAgIGlzTmVzdGVkOiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICBpZiAoaXNOZXN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIGNvbnN0IGRvdG5ldFBhY2thZ2VJZCA9IHRoaXMuYXNzZW1ibHkudGFyZ2V0cz8uZG90bmV0Py5wYWNrYWdlSWQ7XG4gICAgaWYgKCFkb3RuZXRQYWNrYWdlSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBtb2R1bGUgJHt0aGlzLmFzc2VtYmx5Lm5hbWV9IGRvZXMgbm90IGhhdmUgYSBkb3RuZXQucGFja2FnZUlkIHNldHRpbmdgLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZmlsZVBhdGggPSBuYW1lc3BhY2UucmVwbGFjZSgvWy5dL2csICcvJyk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShcbiAgICAgIHBhdGguam9pbihkb3RuZXRQYWNrYWdlSWQsIGZpbGVQYXRoLCB0aGlzLnRvQ1NoYXJwRmlsZVBhdGgodHlwZU5hbWUpKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgZmlyc3RNZW1iZXIgYm9vbGVhbiBmbGFnIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGZpcnN0IG1lbWJlciBvZiBhIG5ldyBmaWxlXG4gICAqXG4gICAqIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IHdoaXRlIGxpbmVzXG4gICAqL1xuICBwcml2YXRlIGZsYWdGaXJzdE1lbWJlcldyaXR0ZW4oZmlyc3Q6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmZpcnN0TWVtYmVyV3JpdHRlbiA9IGZpcnN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGEgbmV3IGxpbmUgcHJpb3IgdG8gd3JpdGluZyBhIG5ldyBwcm9wZXJ0eSwgbWV0aG9kLCBpZiB0aGUgcHJvcGVydHkgaXMgbm90IHRoZSBmaXJzdCBvbmUgaW4gdGhlIGNsYXNzXG4gICAqXG4gICAqIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IHdoaXRlIGxpbmVzLlxuICAgKi9cbiAgcHJpdmF0ZSBlbWl0TmV3TGluZUlmTmVjZXNzYXJ5KCk6IHZvaWQge1xuICAgIC8vIElmIHRoZSBmaXJzdCBtZW1iZXIgaGFzIGFscmVhZHkgYmVlbiB3cml0dGVuLCBpdCBpcyBzYWZlIHRvIHdyaXRlIGEgbmV3IGxpbmVcbiAgICBpZiAodGhpcy5maXJzdE1lbWJlcldyaXR0ZW4pIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlyc3RNZW1iZXJXcml0dGVuID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0QXNzZW1ibHlEb2NzKCkge1xuICAgIHRoaXMuZW1pdE5hbWVzcGFjZURvY3MoXG4gICAgICB0aGlzLmFzc2VtYmx5LnRhcmdldHMhLmRvdG5ldCEubmFtZXNwYWNlLFxuICAgICAgdGhpcy5hc3NlbWJseS5uYW1lLFxuICAgICAgdGhpcy5hc3NlbWJseSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXQgYW4gdW51c2VkLCBlbXB0eSBjbGFzcyBjYWxsZWQgYE5hbWVzcGFjZURvY2AgdG8gYXR0YWNoIHRoZSBtb2R1bGUgUkVBRE1FIHRvXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIHdheSB0byBhdHRhY2ggZG9jIGNvbW1lbnRzIHRvIGEgbmFtZXNwYWNlIGluIEMjLCBhbmQgdGhpcyB0cmljayBoYXMgYmVlblxuICAgKiBzZW1pLXN0YW5kYXJkaXplZCBieSBORG9jIGFuZCBTYW5kY2FzdGxlIEhlbHAgRmlsZSBCdWlsZGVyLlxuICAgKlxuICAgKiBEb2NGWCBkb2Vzbid0IHN1cHBvcnQgaXQgb3V0IG9mIHRoZSBib3gsIGJ1dCB3ZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgdGhlcmUgd2l0aCBhXG4gICAqIGJpdCBvZiBoYWNrZXJ5LlxuICAgKlxuICAgKiBJbiBhbnkgY2FzZSwgd2UgbmVlZCBhIHBsYWNlIHRvIGF0dGFjaCB0aGUgZG9jcyB3aGVyZSB0aGV5IGNhbiBiZSB0cmFuc3BvcnRlZCBhcm91bmQsXG4gICAqIG1pZ2h0IGFzIHdlbGwgYmUgdGhpcyBtZXRob2QuXG4gICAqL1xuICBwcml2YXRlIGVtaXROYW1lc3BhY2VEb2NzKFxuICAgIG5hbWVzcGFjZTogc3RyaW5nLFxuICAgIGpzaWlGcW46IHN0cmluZyxcbiAgICBkb2NTb3VyY2U6IHNwZWMuVGFyZ2V0YWJsZSAmIHNwZWMuUmVhZE1lQ29udGFpbmVyLFxuICApIHtcbiAgICBpZiAoIWRvY1NvdXJjZS5yZWFkbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSAnTmFtZXNwYWNlRG9jJztcbiAgICB0aGlzLm9wZW5GaWxlSWZOZWVkZWQoY2xhc3NOYW1lLCBuYW1lc3BhY2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICB0aGlzLmRvdG5ldERvY0dlbmVyYXRvci5lbWl0TWFya2Rvd25Bc1JlbWFya3MoZG9jU291cmNlLnJlYWRtZS5tYXJrZG93biwge1xuICAgICAgYXBpOiAnbW9kdWxlUmVhZG1lJyxcbiAgICAgIG1vZHVsZUZxbjoganNpaUZxbixcbiAgICB9KTtcbiAgICB0aGlzLmVtaXRIaWRlQXR0cmlidXRlKCk7XG4gICAgLy8gVHJhZGl0aW9uYWxseSB0aGlzIGNsYXNzIGlzIG1hZGUgJ2ludGVybmFsJywgYnV0IHRoYXQgaW50ZXJhY3RzIHBvb3JseSB3aXRoIERvY0ZYJ3MgZGVmYXVsdCBmaWx0ZXJzXG4gICAgLy8gd2hpY2ggYXJlbid0IG92ZXJyaWRhYmxlLiBTbyB3ZSBtYWtlIGl0IHB1YmxpYywgYnV0IHVzZSBhdHRyaWJ1dGVzIHRvIGhpZGUgaXQgZnJvbSB1c2VycycgSW50ZWxsaVNlbnNlLFxuICAgIC8vIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGUgY2xhc3MgaW4gRG9jRlguXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhgcHVibGljIGNsYXNzICR7Y2xhc3NOYW1lfWApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgdGhpcy5jbG9zZUZpbGVJZk5lZWRlZChjbGFzc05hbWUsIG5hbWVzcGFjZSwgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXQgYW4gYXR0cmlidXRlIHRoYXQgd2lsbCBoaWRlIHRoZSBzdWJzZXF1ZW50IEFQSSBlbGVtZW50IGZyb20gdXNlcnNcbiAgICovXG4gIHByaXZhdGUgZW1pdEhpZGVBdHRyaWJ1dGUoKSB7XG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAnW1N5c3RlbS5Db21wb25lbnRNb2RlbC5FZGl0b3JCcm93c2FibGUoU3lzdGVtLkNvbXBvbmVudE1vZGVsLkVkaXRvckJyb3dzYWJsZVN0YXRlLk5ldmVyKV0nLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
883
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0Z2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG90bmV0Z2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUNuQywrQkFBK0I7QUFDL0IsK0JBQStCO0FBRy9CLDZCQUE2QjtBQUU3QiwrQ0FBc0Q7QUFFdEQsNkRBQTBEO0FBQzFELHFFQUFrRTtBQUNsRSw2REFBMEQ7QUFDMUQsbURBQWdEO0FBQ2hELDJDQUE4QztBQUU5Qzs7R0FFRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxxQkFBUztJQVk1QyxZQUNtQixnQ0FBMEMsRUFDMUMsT0FBZ0I7UUFFakMsS0FBSyxFQUFFLENBQUM7UUFIUyxxQ0FBZ0MsR0FBaEMsZ0NBQWdDLENBQVU7UUFDMUMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQWJuQywyRUFBMkU7UUFDbkUsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBSWxCLGNBQVMsR0FBb0IsSUFBSSwyQkFBZSxFQUFFLENBQUM7UUFZbEUsb0dBQW9HO1FBQ3BHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsSUFBSTtZQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJLENBQ2YsV0FBbUIsRUFDbkIsUUFBMEI7UUFFMUIsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRLENBQUMsV0FBb0I7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHVDQUFrQixDQUN4QyxJQUFJLENBQUMsUUFBUSxFQUNiLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUNyQyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFDbkMsSUFBSSxDQUFDLGdDQUFnQyxDQUN0QyxDQUFDO1FBRUYsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksK0NBQXNCLENBQ3RELElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLFlBQVksQ0FDbEIsQ0FBQztRQUNGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLHVDQUFrQixDQUM5QyxJQUFJLENBQUMsSUFBSSxFQUNULElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLFFBQVEsQ0FDZCxDQUFDO1FBRUYsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUNsRCxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSSxDQUNmLE1BQWMsRUFDZCxPQUFlLEVBQ2YsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFZO1FBRTdCLGtEQUFrRDtRQUNsRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sT0FBTyxHQUFHLElBQUksNkJBQWEsQ0FDL0IsSUFBSSxDQUFDLFFBQVEsRUFDYixlQUFlLEVBQ2YsSUFBSSxDQUFDLElBQUksQ0FDVixDQUFDO1FBQ0YsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDbkMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNyRSw4RUFBOEU7UUFDOUUsNEZBQTRGO1FBQzVGLGdEQUFnRDtRQUNoRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzNCLE1BQU0sU0FBUyxHQUFXLElBQUksQ0FBQyxPQUFRLENBQUMsTUFBTyxDQUFDLFNBQVMsQ0FBQztRQUMxRCxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FDYixjQUFjLElBQUksQ0FBQyxJQUFJLDJDQUEyQyxDQUNuRSxDQUFDO1NBQ0g7UUFDRCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBRTFFLDhDQUE4QztRQUM5QyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUVwQyxJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFO2dCQUNuRSxRQUFRLEVBQUUsTUFBTTthQUNqQixDQUFDLENBQUM7U0FDSjtRQUNELElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUU7Z0JBQ2pFLFFBQVEsRUFBRSxNQUFNO2FBQ2pCLENBQUMsQ0FBQztTQUNKO1FBRUQsNkJBQTZCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ08sNEJBQTRCO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLEdBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBUSxDQUFDLE1BQU8sQ0FBQyxTQUNqQyxnQ0FBZ0MsQ0FBQztRQUNqQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osT0FBTyxLQUFLLENBQUMsU0FBUywwQ0FBMEMsQ0FDakUsQ0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRDs7T0FFRztJQUNPLG9CQUFvQixDQUFDLEdBQWtCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxnQkFBZ0IsQ0FBQyxNQUFjOztRQUN2QyxNQUFNLFNBQVMsU0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsMENBQUcsTUFBTSxDQUFDLENBQUM7UUFDckQsSUFBSSxTQUFTLEVBQUU7WUFDYixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUNqRCxJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUNsQixzRUFBc0U7WUFDdEUsdURBQXVEO1lBQ3ZELE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUM1QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDckQ7SUFDSCxDQUFDO0lBRVMsY0FBYyxDQUFDLEdBQVc7UUFDbEMsVUFBVTtJQUNaLENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxHQUF1QjtRQUNoRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVwRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU1RCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUNqQixvQkFBb0IsYUFBYSxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDcEUsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsYUFBYSxFQUFFLENBQUMsQ0FBQztTQUMxRDtRQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRVMsY0FBYyxDQUFDLEdBQXVCO1FBQzlDLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFckUsNEJBQTRCO1FBQzVCLHNIQUFzSDtRQUN0SCxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUU7WUFDaEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVTLGlCQUFpQixDQUFDLEdBQXVCLEVBQUUsTUFBbUI7O1FBQ3RFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ3ZDLEdBQUcsRUFBRSxRQUFRO1lBQ2IsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHO1lBQ1osVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1NBQ3hCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakUsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU87WUFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ3JELENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDWCxNQUFNLFFBQVEsR0FBRyxPQUFBLE1BQU0sQ0FBQyxPQUFPLDBDQUFFLFFBQVEsRUFBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osR0FBRyxVQUFVLEdBQUcsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQzFELE1BQU0sQ0FBQyxJQUFJLENBQ1osSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDN0MsQ0FBQztJQUNKLENBQUM7SUFFUyx5QkFBeUIsQ0FDakMsR0FBdUIsRUFDdkIsUUFBcUIsRUFDckIsZUFBNEI7UUFFNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRVMsbUJBQW1CLENBQUMsR0FBdUIsRUFBRSxJQUFtQjtRQUN4RSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN4RTtRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixNQUFNLElBQUksS0FBSyxDQUNiLHVEQUF1RCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQ25FLENBQUM7U0FDSDtRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLE1BQU0sSUFBSSxLQUFLLENBQ2IsWUFBWSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLHVFQUF1RSxDQUN6RyxDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTtZQUNyQyxHQUFHLEVBQUUsUUFBUTtZQUNiLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRztZQUNaLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSTtTQUN0QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsc0JBQXNCLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9ELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1NBQzdEO1FBRUQsZ0ZBQWdGO1FBQ2hGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsUUFBUSxHQUFHLFVBQVUsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRTVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osc0RBQXNELFFBQVEseUJBQXlCLENBQ3hGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUN4QjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDeEI7U0FDRjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFUyxZQUFZLENBQUMsR0FBbUIsRUFBRSxRQUFpQjtRQUMzRCxJQUFJLGFBQWEsR0FBYSxFQUFFLENBQUM7UUFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXhELDhDQUE4QztRQUM5Qyx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7WUFDYixhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2xDO2FBQU07WUFDTCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRSxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQy9CO1FBRUQsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvQyxNQUFNLGVBQWUsR0FDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0RCxhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUN2RDtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdkQsZ0VBQWdFO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUU5QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVwRCxNQUFNLGNBQWMsR0FBRyxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUV4RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNwQyxHQUFHLEVBQUUsTUFBTTtZQUNYLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRztTQUNiLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV4RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDakIsU0FBUyxTQUFTLFVBQVUsU0FBUyxHQUFHLGNBQWMsRUFBRSxDQUN6RCxDQUFDO1FBRUYsK0JBQStCO1FBQy9CLElBQUksb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN4QixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO1FBQ3BDLElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUU7Z0JBQzVDLEdBQUcsRUFBRSxhQUFhO2dCQUNsQixHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7YUFDYixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsa0NBQWtDLENBQzVELFdBQVcsQ0FDWixDQUFDO1lBQ0YsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFO2dCQUMxQixvQkFBb0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQ2hELFdBQVcsQ0FBQyxVQUFVLENBQ3ZCLENBQUM7Z0JBQ0YsS0FBSyxNQUFNLENBQUMsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFO29CQUN0QyxjQUFjLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNuRSw4Q0FBOEM7b0JBQzlDLElBQ0UsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO3dCQUNqQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ2pDO3dCQUNBLGNBQWMsSUFBSSxJQUFJLENBQUM7cUJBQ3hCO2lCQUNGO2FBQ0Y7WUFFRCwyQkFBMkI7WUFDM0IsZ0RBQWdEO1lBQ2hELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBRXpELE1BQU0sSUFBSSxHQUNSLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDdkIsQ0FBQyxDQUFDLGlCQUFpQixjQUFjLEdBQUc7Z0JBQ3BDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQztZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDakIsR0FBRyxVQUFVLElBQUksU0FBUyxJQUFJLG9CQUFvQiwyQkFBMkIsSUFBSSxJQUFJLENBQ3RGLENBQUM7WUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbEI7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDWixxSEFBcUgsQ0FDdEgsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLDJFQUEyRSxDQUM1RSxDQUFDO1FBQ0YsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGtDQUFrQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUNqQixhQUFhLFNBQVMseUNBQXlDLENBQ2hFLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFakIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osNkZBQTZGLENBQzlGLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxrQ0FBa0MsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDakIsYUFBYSxTQUFTLGtDQUFrQyxDQUN6RCxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV2Qiw2RUFBNkU7UUFDN0UsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFUyxVQUFVLENBQUMsR0FBbUI7UUFDdEMsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM5QjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFUyxPQUFPLENBQ2YsSUFBb0IsRUFDcEIsS0FBb0IsRUFDcEIsTUFBZ0M7UUFFaEMsVUFBVTtJQUNaLENBQUM7SUFFUyxRQUFRLENBQUMsR0FBbUIsRUFBRSxNQUFtQjtRQUN6RCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVTLGdCQUFnQixDQUN4QixHQUFtQixFQUNuQixRQUFxQixFQUNyQixlQUE0QjtRQUU1QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRVMsVUFBVSxDQUFDLEdBQW1CLEVBQUUsSUFBbUI7UUFDM0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFUyxjQUFjLENBQUMsR0FBbUIsRUFBRSxNQUFtQjtRQUMvRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVTLHNCQUFzQixDQUM5QixHQUFtQixFQUNuQixRQUFxQixFQUNyQixlQUE0QjtRQUU1QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVTLGdCQUFnQixDQUFDLEdBQW1CLEVBQUUsSUFBbUI7UUFDakUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNuQzthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVTLGVBQWUsQ0FDdkIsR0FBbUIsRUFDbkIsSUFBbUIsRUFDbkIsTUFBK0I7UUFFL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFUyxXQUFXLENBQUMsR0FBa0I7UUFDdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDcEMsR0FBRyxFQUFFLE1BQU07WUFDWCxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7U0FDYixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsc0JBQXNCLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVTLFNBQVMsQ0FBQyxHQUFrQjtRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFUyxZQUFZLENBQUMsR0FBa0IsRUFBRSxNQUF1QjtRQUNoRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUN2QyxHQUFHLEVBQUUsUUFBUTtZQUNiLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRztZQUNaLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSTtTQUN4QixDQUFDLENBQUM7UUFDSCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsMkJBQTJCLENBQ3JELGNBQWMsRUFDZCxNQUFNLENBQ1AsQ0FBQztRQUNGLDJEQUEyRDtRQUMzRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMxRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLGNBQWMsR0FBRyxDQUFDLENBQUM7U0FDdEM7YUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsY0FBYyxFQUFFLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsSUFBbUIsRUFBRSxJQUFlOztRQUN2RCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3hCLE9BQU8sRUFBRSxJQUFJLElBQUksSUFBSSxPQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsTUFBSyxJQUFJLEVBQUU7WUFDL0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqRCxFQUFFLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztTQUN4QjtRQUNELElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtZQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNoRTtRQUNELE9BQU8sSUFBSSxDQUFDLE9BQVEsQ0FBQyxNQUFPLENBQUMsU0FBUyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxVQUFVLENBQ2hCLEdBQXdDLEVBQ3hDLE1BQW1CLEVBQ25CLFlBQXVCLEVBQ3ZCLHNCQUFzQixHQUFHLEtBQUs7UUFFOUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU87WUFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ3JELENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDWCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyRCxJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBRXhCLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLDRGQUE0RjtRQUM1RixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekIsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNqRTtRQUNELHlJQUF5STtRQUN6SSxJQUFJLFNBQVMsR0FDWCxpQkFBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksc0JBQXNCLENBQUMsQ0FBQztRQUN6RSx3RUFBd0U7UUFDeEUsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ3BCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDbEMsNkNBQTZDO2dCQUM3QyxTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQ2xCO1NBQ0Y7UUFDRCxJQUFJLFNBQVMsRUFBRTtZQUNiLCtHQUErRztZQUMvRyw0R0FBNEc7WUFDNUcsNEdBQTRHO1lBQzVHLHlEQUF5RDtZQUN6RCxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7U0FDeEQ7YUFBTSxJQUNMLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDZCxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUN2QyxDQUFDLHNCQUFzQixFQUN2QjtZQUNBLHVJQUF1STtZQUN2SSxpREFBaUQ7WUFDakQsY0FBYyxHQUFHLFVBQVUsQ0FBQztTQUM3QjtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVqRSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RSxNQUFNLFNBQVMsR0FBRyxHQUFHLFVBQVUsR0FBRyxVQUFVLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FDdkYsTUFBTSxDQUNQLEdBQUcsQ0FBQztRQUVMLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ3ZDLEdBQUcsRUFBRSxRQUFRO1lBQ2IsR0FBRyxFQUFFLFlBQVksQ0FBQyxHQUFHO1lBQ3JCLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSTtTQUN4QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsdUJBQXVCLENBQ2pELEdBQUcsRUFDSCxNQUFNLENBQUMsNEJBQTRCLENBQ3BDLENBQUM7UUFFRixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLElBQUksZUFBZSxZQUFZLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNsQjthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQ2pCLEdBQUcsTUFBTSxJQUFJLGFBQWEsR0FBRyxlQUFlLEdBQUcsY0FBYyxHQUFHLFNBQVMsRUFBRSxDQUM1RSxDQUFDO1lBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osSUFBSSxDQUFDLHNCQUFzQixDQUFDLDRCQUE0QixDQUN0RCxNQUFNLEVBQ04sR0FBcUIsQ0FDdEIsQ0FDRixDQUFDO1lBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0sseUJBQXlCLENBQy9CLEdBQW1CLEVBQ25CLE1BQW1DO1FBRW5DLElBQUksTUFBcUIsRUFBRTtZQUN6QixNQUFNLGFBQWEsR0FBRyxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDNUQseUVBQXlFO1lBQ3pFLElBQ0UsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNyRTtnQkFDQSxPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFFRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3RCLElBQUksSUFBSSxFQUFFO1lBQ1IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQW1CLENBQUM7WUFFdkQsSUFBSSxNQUF1QixFQUFFO2dCQUMzQixJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUU7b0JBQ3ZCLElBQ0UsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQ3hCLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQzVDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDWjt3QkFDQSxnQ0FBZ0M7d0JBQ2hDLE9BQU8sSUFBSSxDQUFDO3FCQUNiO2lCQUNGO2dCQUNELE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUN6RDtpQkFBTSxJQUFJLE1BQXFCLEVBQUU7Z0JBQ2hDLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtvQkFDcEIsTUFBTSxRQUFRLEdBQUcsTUFBcUIsQ0FBQztvQkFDdkMscUZBQXFGO29CQUNyRixLQUFLLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7d0JBQ2hDLElBQ0UsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSTs0QkFDeEIsQ0FBQyxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsVUFBVTs0QkFDcEMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsT0FBTyxFQUM5Qjs0QkFDQSxPQUFPLElBQUksQ0FBQzt5QkFDYjtxQkFDRjtpQkFDRjtnQkFDRCxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDekQ7WUFDRCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSyxzQkFBc0IsQ0FBQyxNQUFtQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssc0JBQXNCLENBQzVCLFVBQXdDO1FBRXhDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLFVBQVUsRUFBRTtZQUNkLEtBQUssTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFO2dCQUMxQixJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO2dCQUN6QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtvQkFDZCxlQUFlLEdBQUcsU0FBUyxDQUFDO29CQUM1QixJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7d0JBQ2QsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO3FCQUN6QjtpQkFDRjtxQkFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7b0JBQ3JCLElBQUksR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDO2lCQUMzQjtnQkFDRCxNQUFNLEVBQUUsR0FBRyxHQUFHLElBQUksR0FBRyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUMzRSxDQUFDLENBQUMsSUFBSSxDQUNQLEdBQUcsZUFBZSxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDakI7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxrQkFBa0IsQ0FBQyxHQUF3QztRQUNqRSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUM7UUFDdEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVqRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3BDLEdBQUcsRUFBRSxNQUFNO1lBQ1gsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHO1NBQ2IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHNCQUFzQixDQUFDLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQztZQUN0QyxDQUFDLENBQUMsaUJBQWlCLFlBQVksRUFBRTtZQUNqQyxDQUFDLENBQUMsS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUN4QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXBFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUNqQixHQUFHLFdBQVcseUJBQXlCLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FDeEQsQ0FBQztRQUVGLGlDQUFpQztRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDakIsV0FBVyxJQUFJLHlDQUF5QyxDQUN6RCxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV2Qix1RkFBdUY7UUFDdkYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSyx1QkFBdUIsQ0FDN0IsSUFBeUM7O1FBRXpDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFO2dCQUNyQixPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFtQixDQUFDO1lBQ3hELE9BQU8sQ0FDTCxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRO2dCQUMvQixDQUFDLElBQUksQ0FBQyxRQUFRO29CQUNaLENBQUMsQ0FBQyxJQUFJO29CQUNOLENBQUMsQ0FBQywwR0FBMEc7d0JBQzFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUN4QyxDQUFDO1NBQ0g7UUFFRCxPQUFPLENBQ0wsT0FBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxJQUFJLENBQ25CLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxNQUNuRCxJQUFJLENBQ1YsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLHFCQUFxQixDQUFDLEdBQXVCOztRQUNuRCxvRkFBb0Y7UUFDcEYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVqRCxJQUFJLE9BQUEsR0FBRyxDQUFDLFVBQVUsMENBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLE1BQUssSUFBSSxFQUFFO1lBQzFELGlHQUFpRztZQUNqRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbEI7UUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNwQyxHQUFHLEVBQUUsTUFBTTtZQUNYLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRztTQUNiLENBQUMsQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDN0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGtDQUFrQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixJQUFJLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsc0NBQXNDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssc0NBQXNDLENBQzVDLEdBQXdDLEVBQ3hDLFFBQWlCLEVBQ2pCLEtBQWM7UUFFZCxrRUFBa0U7UUFDbEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7UUFDcEQ7Ozs7O2NBS007UUFDTixNQUFNLGNBQWMsR0FBYSxFQUFFLENBQUMsQ0FBQyx3RUFBd0U7UUFDN0csTUFBTSxrQkFBa0IsR0FBYSxFQUFFLENBQUMsQ0FBQywyRUFBMkU7UUFDcEgsTUFBTSxVQUFVLEdBQTJDLEVBQUUsQ0FBQztRQUM5RCxNQUFNLHNCQUFzQixHQUFHLENBQzdCLFdBQWdELEVBQ2hELEVBQUU7O1lBQ0YsS0FBSyxNQUFNLElBQUksVUFBSSxXQUFXLENBQUMsVUFBVSxtQ0FBSSxFQUFFLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMzQyxnRkFBZ0Y7b0JBQ2hGLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTt3QkFDakIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7cUJBQzdEO29CQUNELGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3BDO2FBQ0Y7WUFFRCxLQUFLLE1BQU0sTUFBTSxVQUFJLFdBQVcsQ0FBQyxPQUFPLG1DQUFJLEVBQUUsRUFBRTtnQkFDOUMsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7Z0JBQzFCLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtvQkFDckIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDbEMsZ0JBQWdCLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FDcEQsS0FBSyxDQUFDLElBQUksQ0FDWCxFQUFFLENBQUM7b0JBQ04sQ0FBQyxDQUFDLENBQUM7aUJBQ0o7Z0JBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixFQUFFLENBQUMsRUFBRTtvQkFDakUsOEVBQThFO29CQUM5RSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7d0JBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixFQUFFLEVBQUU7NEJBQy9DLE1BQU07NEJBQ04sWUFBWSxFQUFFLFdBQVc7eUJBQzFCLENBQUMsQ0FBQztxQkFDSjtvQkFDRCxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7aUJBQzFEO2FBQ0Y7WUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBMkIsQ0FBQztZQUNuRCxLQUFLLENBQUMsSUFBSSxDQUNSLEdBQUcsT0FBQyxXQUFXLENBQUMsVUFBVSxtQ0FBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDdkUsQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFO2dCQUNyRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDN0M7WUFDRCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtnQkFDeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JDLElBQ0UsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7b0JBQ3JDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQ2pDO29CQUNBLE1BQU0sSUFBSSxLQUFLLENBQ2Isb0VBQW9FLElBQUksQ0FBQyxHQUFHLGVBQWUsSUFBSSxDQUFDLElBQUksR0FBRyxDQUN4RyxDQUFDO2lCQUNIO2dCQUNELHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzlCO1FBQ0gsQ0FBQyxDQUFDO1FBQ0Ysc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUIsc0JBQXNCO1FBQ3RCLEtBQUssTUFBTSxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUM5QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDdkU7UUFDRCx1QkFBdUI7UUFDdkIsS0FBSyxNQUFNLHVCQUF1QixJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNwRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDNUQsSUFBSSxjQUFjLEVBQUU7Z0JBQ2xCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDckMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUMvQixJQUFJLENBQUMsVUFBVSxDQUNiLEdBQUcsRUFDSCxNQUFNLENBQUMsTUFBTSxFQUNiLE1BQU0sQ0FBQyxZQUFZO2dCQUNuQiw0QkFBNEIsQ0FBQyxJQUFJLENBQ2xDLENBQUM7Z0JBRUYsS0FBSyxNQUFNLGdCQUFnQixJQUFJLElBQUksQ0FBQywyQkFBMkIsQ0FDN0QsTUFBTSxDQUFDLE1BQU0sQ0FDZCxFQUFFO29CQUNELGdCQUFnQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxVQUFVLENBQ2IsR0FBRyxFQUNILGdCQUFnQixFQUNoQixNQUFNLENBQUMsWUFBWTtvQkFDbkIsNEJBQTRCLENBQUMsSUFBSSxDQUNsQyxDQUFDO2lCQUNIO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLFlBQVksQ0FDbEIsR0FBYyxFQUNkLElBQW1CLEVBQ25CLFlBQXVCLEVBQ3ZCLFFBQVEsR0FBRyxLQUFLLEVBQ2hCLEtBQUssR0FBRyxLQUFLO1FBRWIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFOUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTtZQUNyQyxHQUFHLEVBQUUsUUFBUTtZQUNiLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBRztZQUNyQixVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDdEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDbEM7UUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUQsSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFFM0IsZ0NBQWdDO1FBQ2hDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FDdEQsR0FBcUIsRUFDckIsSUFBSSxDQUNMLENBQUM7WUFDRixJQUFJLGlCQUFpQixJQUFJLFFBQVEsSUFBSSxLQUFLLEVBQUU7Z0JBQzFDLDJHQUEyRztnQkFDM0csOEdBQThHO2dCQUM5Ryw0R0FBNEc7Z0JBQzVHLHdDQUF3QztnQkFDeEMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7YUFDeEQ7aUJBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN4Qix5Q0FBeUM7Z0JBQ3pDLGlCQUFpQixHQUFHLFdBQVcsQ0FBQzthQUNqQztpQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUM3QywrR0FBK0c7Z0JBQy9HLGdCQUFnQixHQUFHLFVBQVUsQ0FBQzthQUMvQjtTQUNGO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVDLE1BQU0sU0FBUyxHQUFHLEdBQUcsTUFBTSxJQUFJLGlCQUFpQixHQUFHLGdCQUFnQixHQUFHLGFBQWEsR0FBRyxpQkFBaUIsR0FBRyxXQUFXLEdBQUcsVUFBVSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2pKLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRS9CLGVBQWU7UUFDZixJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEI7YUFBTTtZQUNMLDBFQUEwRTtZQUMxRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUN0QyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osNEJBQTRCLFdBQVcsR0FBRyxVQUFVLFlBQVksU0FBUyxLQUFLLElBQUksR0FBRyxDQUN0RixDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osOEJBQThCLFdBQVcsR0FBRyxVQUFVLE1BQU0sSUFBSSxHQUFHLENBQ3BFLENBQUM7YUFDSDtTQUNGO1FBRUQsZUFBZTtRQUNmLElBQUksUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN4QjthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ25CLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDZixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDWixtQ0FBbUMsU0FBUyxZQUFZLENBQ3pELENBQUM7aUJBQ0g7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0NBQW9DLENBQUMsQ0FBQztpQkFDdEQ7YUFDRjtTQUNGO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCLENBQUMsR0FBbUIsRUFBRSxJQUFtQjtRQUNoRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFO1lBQ3JDLEdBQUcsRUFBRSxRQUFRO1lBQ2IsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHO1lBQ1osVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ3RCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQ2pCLEdBQUcsTUFBTSxJQUFJLGFBQWEsR0FBRyxRQUFRLEdBQUcsVUFBVSxJQUFJLFFBQVEsRUFBRSxDQUNqRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN2QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekQsOEVBQThFO1FBQzlFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNO1lBQzdCLENBQUMsQ0FBQyx1QkFBdUIsUUFBUSxZQUFZLFNBQVMsS0FBSyxJQUFJLEdBQUc7WUFDbEUsQ0FBQyxDQUFDLHlCQUF5QixRQUFRLFlBQVksU0FBUyxLQUFLLElBQUksR0FBRyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxNQUFtQztRQUMzRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ25ELENBQUM7SUFFTyxRQUFRLENBQUMsSUFBZTtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzNDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BELE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFZO1FBQ25DLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRU8sZ0JBQWdCLENBQ3RCLFFBQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLFFBQWlCLEVBQ2pCLFdBQVcsR0FBRyxJQUFJOztRQUVsQixpREFBaUQ7UUFDakQsSUFBSSxRQUFRLEVBQUU7WUFDWixPQUFPO1NBQ1I7UUFFRCxNQUFNLGVBQWUsZUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sMENBQUUsTUFBTSwwQ0FBRSxTQUFTLENBQUM7UUFDakUsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNwQixNQUFNLElBQUksS0FBSyxDQUNiLGNBQWMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLDJDQUEyQyxDQUM1RSxDQUFDO1NBQ0g7UUFDRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUN0RSxDQUFDO1FBQ0YsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbEI7UUFFRCxtRUFBbUU7UUFDbkUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRWpCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU8saUJBQWlCLENBQ3ZCLFFBQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLFFBQWlCOztRQUVqQixJQUFJLFFBQVEsRUFBRTtZQUNaLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFdkIsTUFBTSxlQUFlLGVBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLDBDQUFFLE1BQU0sMENBQUUsU0FBUyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FDYixjQUFjLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSwyQ0FBMkMsQ0FDNUUsQ0FBQztTQUNIO1FBQ0QsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDdEUsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssc0JBQXNCLENBQUMsS0FBYztRQUMzQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssc0JBQXNCO1FBQzVCLCtFQUErRTtRQUMvRSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2xCO2FBQU07WUFDTCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBUSxDQUFDLE1BQU8sQ0FBQyxTQUFTLEVBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUNsQixJQUFJLENBQUMsUUFBUSxDQUNkLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSyxpQkFBaUIsQ0FDdkIsU0FBaUIsRUFDakIsT0FBZSxFQUNmLFNBQWlEO1FBRWpELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ3JCLE9BQU87U0FDUjtRQUVELE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQztRQUNqQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1lBQ3ZFLEdBQUcsRUFBRSxjQUFjO1lBQ25CLFNBQVMsRUFBRSxPQUFPO1NBQ25CLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLHNHQUFzRztRQUN0RywwR0FBMEc7UUFDMUcsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLDJGQUEyRixDQUM1RixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBdHBDRCwwQ0FzcENDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc3BlYyBmcm9tICdAanNpaS9zcGVjJztcbmltcG9ydCAqIGFzIGNsb25lIGZyb20gJ2Nsb25lJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIHJlZmxlY3QgZnJvbSAnanNpaS1yZWZsZWN0JztcbmltcG9ydCB7IFJvc2V0dGEgfSBmcm9tICdqc2lpLXJvc2V0dGEnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHsgR2VuZXJhdG9yLCBMZWdhbGVzZSB9IGZyb20gJy4uLy4uL2dlbmVyYXRvcic7XG5pbXBvcnQgeyBNZXRob2REZWZpbml0aW9uLCBQcm9wZXJ0eURlZmluaXRpb24gfSBmcm9tICcuLi9fdXRpbHMnO1xuaW1wb3J0IHsgRG90TmV0RG9jR2VuZXJhdG9yIH0gZnJvbSAnLi9kb3RuZXRkb2NnZW5lcmF0b3InO1xuaW1wb3J0IHsgRG90TmV0UnVudGltZUdlbmVyYXRvciB9IGZyb20gJy4vZG90bmV0cnVudGltZWdlbmVyYXRvcic7XG5pbXBvcnQgeyBEb3ROZXRUeXBlUmVzb2x2ZXIgfSBmcm9tICcuL2RvdG5ldHR5cGVyZXNvbHZlcic7XG5pbXBvcnQgeyBGaWxlR2VuZXJhdG9yIH0gZnJvbSAnLi9maWxlZ2VuZXJhdG9yJztcbmltcG9ydCB7IERvdE5ldE5hbWVVdGlscyB9IGZyb20gJy4vbmFtZXV0aWxzJztcblxuLyoqXG4gKiBDT0RFIEdFTkVSQVRPUiBWMlxuICovXG5leHBvcnQgY2xhc3MgRG90TmV0R2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHtcbiAgLy8gRmxhZ3MgdGhhdCB0cmFja3MgaWYgd2UgaGF2ZSBhbHJlYWR5IHdyb3RlIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIGNsYXNzXG4gIHByaXZhdGUgZmlyc3RNZW1iZXJXcml0dGVuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB0eXBlcmVzb2x2ZXIhOiBEb3ROZXRUeXBlUmVzb2x2ZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBuYW1ldXRpbHM6IERvdE5ldE5hbWVVdGlscyA9IG5ldyBEb3ROZXROYW1lVXRpbHMoKTtcblxuICBwcml2YXRlIGRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IhOiBEb3ROZXRSdW50aW1lR2VuZXJhdG9yO1xuXG4gIHByaXZhdGUgZG90bmV0RG9jR2VuZXJhdG9yITogRG90TmV0RG9jR2VuZXJhdG9yO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFzc2VtYmxpZXNDdXJyZW50bHlCZWluZ0NvbXBpbGVkOiBzdHJpbmdbXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvc2V0dGE6IFJvc2V0dGEsXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvLyBPdmVycmlkZSB0aGUgb3BlbkJsb2NrIHRvIGdldCBhIGNvcnJlY3QgQyMgbG9va2luZyBjb2RlIGJsb2NrIHdpdGggdGhlIGN1cmx5IGJyYWNlIGFmdGVyIHRoZSBsaW5lXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICB0aGlzLmxpbmUodGV4dCk7XG4gICAgICB0aGlzLm9wZW4oJ3snKTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWQoXG4gICAgcGFja2FnZVJvb3Q6IHN0cmluZyxcbiAgICBhc3NlbWJseTogcmVmbGVjdC5Bc3NlbWJseSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIubG9hZChwYWNrYWdlUm9vdCwgYXNzZW1ibHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGhlIGdlbmVyYXRvciAoaW4tbWVtb3J5KS5cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZShmaW5nZXJwcmludDogYm9vbGVhbikge1xuICAgIHRoaXMudHlwZXJlc29sdmVyID0gbmV3IERvdE5ldFR5cGVSZXNvbHZlcihcbiAgICAgIHRoaXMuYXNzZW1ibHksXG4gICAgICAoZnFuOiBzdHJpbmcpID0+IHRoaXMuZmluZE1vZHVsZShmcW4pLFxuICAgICAgKGZxbjogc3RyaW5nKSA9PiB0aGlzLmZpbmRUeXBlKGZxbiksXG4gICAgICB0aGlzLmFzc2VtYmxpZXNDdXJyZW50bHlCZWluZ0NvbXBpbGVkLFxuICAgICk7XG5cbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IgPSBuZXcgRG90TmV0UnVudGltZUdlbmVyYXRvcihcbiAgICAgIHRoaXMuY29kZSxcbiAgICAgIHRoaXMudHlwZXJlc29sdmVyLFxuICAgICk7XG4gICAgdGhpcy5kb3RuZXREb2NHZW5lcmF0b3IgPSBuZXcgRG90TmV0RG9jR2VuZXJhdG9yKFxuICAgICAgdGhpcy5jb2RlLFxuICAgICAgdGhpcy5yb3NldHRhLFxuICAgICAgdGhpcy5hc3NlbWJseSxcbiAgICApO1xuXG4gICAgdGhpcy5lbWl0QXNzZW1ibHlEb2NzKCk7XG5cbiAgICAvLyBXZSBuZWVkIHRvIHJlc29sdmUgdGhlIGRlcGVuZGVuY3kgdHJlZVxuICAgIHRoaXMudHlwZXJlc29sdmVyLnJlc29sdmVOYW1lc3BhY2VzRGVwZW5kZW5jaWVzKCk7XG4gICAgc3VwZXIuZ2VuZXJhdGUoZmluZ2VycHJpbnQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhdmUoXG4gICAgb3V0ZGlyOiBzdHJpbmcsXG4gICAgdGFyYmFsbDogc3RyaW5nLFxuICAgIHsgbGljZW5zZSwgbm90aWNlIH06IExlZ2FsZXNlLFxuICApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgLy8gR2VuZXJhdGluZyB0aGUgY3Nwcm9qIGFuZCBBc3NlbWJseUluZm8uY3MgZmlsZXNcbiAgICBjb25zdCB0YXJiYWxsRmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKHRhcmJhbGwpO1xuICAgIGNvbnN0IGZpbGVnZW4gPSBuZXcgRmlsZUdlbmVyYXRvcihcbiAgICAgIHRoaXMuYXNzZW1ibHksXG4gICAgICB0YXJiYWxsRmlsZU5hbWUsXG4gICAgICB0aGlzLmNvZGUsXG4gICAgKTtcbiAgICBmaWxlZ2VuLmdlbmVyYXRlQXNzZW1ibHlJbmZvRmlsZSgpO1xuICAgIGZpbGVnZW4uZ2VuZXJhdGVQcm9qZWN0RmlsZSh0aGlzLnR5cGVyZXNvbHZlci5uYW1lc3BhY2VEZXBlbmRlbmNpZXMpO1xuICAgIC8vIENhbGxpbmcgc3VwZXIuc2F2ZSgpIGR1bXBzIHRoZSB0YXJiYWxsIGluIHRoZSBmb3JtYXQgbmFtZUB2ZXJzaW9uLmpzaWkudGd6LlxuICAgIC8vIFRoaXMgaXMgbm90IGluIHN5bmMgd2l0aCB0aGUgT2xkIC5ORVQgZ2VuZXJhdG9yIHdoZXJlIHRoZSBuYW1lIGlzIHNjb3BlLW5hbWUtdmVyc2lvbi50Z3ouXG4gICAgLy8gSGVuY2Ugd2UgYXJlIHNhdmluZyB0aGUgZmlsZXMgb3Vyc2VsdmVzIGhlcmU6XG4gICAgY29uc3QgYXNzbSA9IHRoaXMuYXNzZW1ibHk7XG4gICAgY29uc3QgcGFja2FnZUlkOiBzdHJpbmcgPSBhc3NtLnRhcmdldHMhLmRvdG5ldCEucGFja2FnZUlkO1xuICAgIGlmICghcGFja2FnZUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgbW9kdWxlICR7YXNzbS5uYW1lfSBkb2VzIG5vdCBoYXZlIGEgZG90bmV0LnBhY2thZ2VJZCBzZXR0aW5nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmpvaW4ob3V0ZGlyLCBwYWNrYWdlSWQpKTtcbiAgICBhd2FpdCBmcy5jb3B5RmlsZSh0YXJiYWxsLCBwYXRoLmpvaW4ob3V0ZGlyLCBwYWNrYWdlSWQsIHRhcmJhbGxGaWxlTmFtZSkpO1xuXG4gICAgLy8gQ3JlYXRlIGFuIGFuY2hvciBmaWxlIGZvciB0aGUgY3VycmVudCBtb2RlbFxuICAgIHRoaXMuZ2VuZXJhdGVEZXBlbmRlbmN5QW5jaG9yRmlsZSgpO1xuXG4gICAgaWYgKGxpY2Vuc2UpIHtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLmpvaW4ob3V0ZGlyLCBwYWNrYWdlSWQsICdMSUNFTlNFJyksIGxpY2Vuc2UsIHtcbiAgICAgICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAobm90aWNlKSB7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKG91dGRpciwgcGFja2FnZUlkLCAnTk9USUNFJyksIG5vdGljZSwge1xuICAgICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU2F2aW5nIHRoZSBnZW5lcmF0ZWQgY29kZS5cbiAgICByZXR1cm4gdGhpcy5jb2RlLnNhdmUob3V0ZGlyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGhlIGFuY2hvciBmaWxlXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2VuZXJhdGVEZXBlbmRlbmN5QW5jaG9yRmlsZSgpIHtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSBgJHtcbiAgICAgIHRoaXMuYXNzZW1ibHkudGFyZ2V0cyEuZG90bmV0IS5uYW1lc3BhY2VcbiAgICB9LkludGVybmFsLkRlcGVuZGVuY3lSZXNvbHV0aW9uYDtcbiAgICB0aGlzLm9wZW5GaWxlSWZOZWVkZWQoJ0FuY2hvcicsIG5hbWVzcGFjZSwgZmFsc2UsIGZhbHNlKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKCdwdWJsaWMgc2VhbGVkIGNsYXNzIEFuY2hvcicpO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soJ3B1YmxpYyBBbmNob3IoKScpO1xuICAgIHRoaXMudHlwZXJlc29sdmVyLm5hbWVzcGFjZURlcGVuZGVuY2llcy5mb3JFYWNoKCh2YWx1ZSkgPT5cbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgbmV3ICR7dmFsdWUubmFtZXNwYWNlfS5JbnRlcm5hbC5EZXBlbmRlbmN5UmVzb2x1dGlvbi5BbmNob3IoKTtgLFxuICAgICAgKSxcbiAgICApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB0aGlzLmNsb3NlRmlsZUlmTmVlZGVkKCdBbmNob3InLCBuYW1lc3BhY2UsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3QgdXNlZCBhcyB3ZSBvdmVycmlkZSB0aGUgc2F2ZSgpIG1ldGhvZFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldEFzc2VtYmx5T3V0cHV0RGlyKG1vZDogc3BlYy5Bc3NlbWJseSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZXV0aWxzLmNvbnZlcnRQYWNrYWdlTmFtZShtb2QubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogTmFtZXNwYWNlcyBhcmUgaGFuZGxlZCBpbXBsaWNpdGx5IGJ5IG9wZW5GaWxlSWZOZWVkZWQoKS5cbiAgICpcbiAgICogRG8gZ2VuZXJhdGUgZG9jcyBpZiB0aGlzIGlzIGZvciBhIHN1Ym1vZHVsZSB0aG91Z2guXG4gICAqL1xuICBwcm90ZWN0ZWQgb25CZWdpbk5hbWVzcGFjZShqc2lpTnM6IHN0cmluZykge1xuICAgIGNvbnN0IHN1Ym1vZHVsZSA9IHRoaXMuYXNzZW1ibHkuc3VibW9kdWxlcz8uW2pzaWlOc107XG4gICAgaWYgKHN1Ym1vZHVsZSkge1xuICAgICAgY29uc3QgZG90bmV0TnMgPSB0aGlzLnR5cGVyZXNvbHZlci5yZXNvbHZlTmFtZXNwYWNlKFxuICAgICAgICB0aGlzLmFzc2VtYmx5LFxuICAgICAgICB0aGlzLmFzc2VtYmx5Lm5hbWUsXG4gICAgICAgIC8vIFN0cmlwIHRoZSBgJHthc3NtTmFtZX0uYCBwcmVmaXggaGVyZSwgYXMgdGhlIFwiYXNzZW1ibHktcmVsYXRpdmVcIiBOU1xuICAgICAgICAvLyBpcyBleHBlY3RlZCBieSBgdGhpcy50eXBlUmVzb2x2ZXIucmVzb3ZsZU5hbWVzcGFjZWAuXG4gICAgICAgIGpzaWlOcy5zbGljZSh0aGlzLmFzc2VtYmx5Lm5hbWUubGVuZ3RoICsgMSksXG4gICAgICApO1xuICAgICAgdGhpcy5lbWl0TmFtZXNwYWNlRG9jcyhkb3RuZXROcywganNpaU5zLCBzdWJtb2R1bGUpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvbkVuZE5hbWVzcGFjZShfbnM6IHN0cmluZykge1xuICAgIC8qIG5vb3AgKi9cbiAgfVxuXG4gIHByb3RlY3RlZCBvbkJlZ2luSW50ZXJmYWNlKGlmYzogc3BlYy5JbnRlcmZhY2VUeXBlKSB7XG4gICAgY29uc3QgaW1wbGVtZW50YXRpb25zID0gdGhpcy50eXBlcmVzb2x2ZXIucmVzb2x2ZUltcGxlbWVudGVkSW50ZXJmYWNlcyhpZmMpO1xuICAgIGNvbnN0IGludGVyZmFjZU5hbWUgPSB0aGlzLm5hbWV1dGlscy5jb252ZXJ0SW50ZXJmYWNlTmFtZShpZmMpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlRm9yKHRoaXMuYXNzZW1ibHksIGlmYyk7XG4gICAgdGhpcy5vcGVuRmlsZUlmTmVlZGVkKGludGVyZmFjZU5hbWUsIG5hbWVzcGFjZSwgdGhpcy5pc05lc3RlZChpZmMpKTtcblxuICAgIHRoaXMuZG90bmV0RG9jR2VuZXJhdG9yLmVtaXREb2NzKGlmYywgeyBhcGk6ICd0eXBlJywgZnFuOiBpZmMuZnFuIH0pO1xuICAgIHRoaXMuZG90bmV0UnVudGltZUdlbmVyYXRvci5lbWl0QXR0cmlidXRlc0ZvckludGVyZmFjZShpZmMpO1xuXG4gICAgaWYgKGltcGxlbWVudGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgICBgcHVibGljIGludGVyZmFjZSAke2ludGVyZmFjZU5hbWV9IDogJHtpbXBsZW1lbnRhdGlvbnMuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jayhgcHVibGljIGludGVyZmFjZSAke2ludGVyZmFjZU5hbWV9YCk7XG4gICAgfVxuICAgIHRoaXMuZmxhZ0ZpcnN0TWVtYmVyV3JpdHRlbihmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25FbmRJbnRlcmZhY2UoaWZjOiBzcGVjLkludGVyZmFjZVR5cGUpIHtcbiAgICAvLyBlbWl0IGludGVyZmFjZSBwcm94eSBjbGFzc1xuICAgIHRoaXMuZW1pdEludGVyZmFjZVByb3h5KGlmYyk7XG5cbiAgICBjb25zdCBpbnRlcmZhY2VOYW1lID0gdGhpcy5uYW1ldXRpbHMuY29udmVydEludGVyZmFjZU5hbWUoaWZjKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlRm9yKHRoaXMuYXNzZW1ibHksIGlmYyk7XG4gICAgdGhpcy5jbG9zZUZpbGVJZk5lZWRlZChpbnRlcmZhY2VOYW1lLCBuYW1lc3BhY2UsIHRoaXMuaXNOZXN0ZWQoaWZjKSk7XG5cbiAgICAvLyBlbWl0IGltcGxlbWVudGF0aW9uIGNsYXNzXG4gICAgLy8gVE9ETzogSWYgZGF0YXR5cGUgdGhlbiB3ZSBtYXkgbm90IG5lZWQgdGhlIGludGVyZmFjZSBwcm94eSB0byBiZSBjcmVhdGVkLCBXZSBjb3VsZCBkbyB3aXRoIGp1c3QgdGhlIGludGVyZmFjZSBpbXBsP1xuICAgIGlmIChpZmMuZGF0YXR5cGUpIHtcbiAgICAgIHRoaXMuZW1pdEludGVyZmFjZURhdGFUeXBlKGlmYyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uSW50ZXJmYWNlTWV0aG9kKGlmYzogc3BlYy5JbnRlcmZhY2VUeXBlLCBtZXRob2Q6IHNwZWMuTWV0aG9kKSB7XG4gICAgdGhpcy5kb3RuZXREb2NHZW5lcmF0b3IuZW1pdERvY3MobWV0aG9kLCB7XG4gICAgICBhcGk6ICdtZW1iZXInLFxuICAgICAgZnFuOiBpZmMuZnFuLFxuICAgICAgbWVtYmVyTmFtZTogbWV0aG9kLm5hbWUsXG4gICAgfSk7XG4gICAgdGhpcy5kb3RuZXRSdW50aW1lR2VuZXJhdG9yLmVtaXRBdHRyaWJ1dGVzRm9yTWV0aG9kKGlmYywgbWV0aG9kKTtcbiAgICBjb25zdCByZXR1cm5UeXBlID0gbWV0aG9kLnJldHVybnNcbiAgICAgID8gdGhpcy50eXBlcmVzb2x2ZXIudG9Eb3ROZXRUeXBlKG1ldGhvZC5yZXR1cm5zLnR5cGUpXG4gICAgICA6ICd2b2lkJztcbiAgICBjb25zdCBudWxsYWJsZSA9IG1ldGhvZC5yZXR1cm5zPy5vcHRpb25hbCA/ICc/JyA6ICcnO1xuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgYCR7cmV0dXJuVHlwZX0ke251bGxhYmxlfSAke3RoaXMubmFtZXV0aWxzLmNvbnZlcnRNZXRob2ROYW1lKFxuICAgICAgICBtZXRob2QubmFtZSxcbiAgICAgICl9KCR7dGhpcy5yZW5kZXJNZXRob2RQYXJhbWV0ZXJzKG1ldGhvZCl9KTtgLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25JbnRlcmZhY2VNZXRob2RPdmVybG9hZChcbiAgICBpZmM6IHNwZWMuSW50ZXJmYWNlVHlwZSxcbiAgICBvdmVybG9hZDogc3BlYy5NZXRob2QsXG4gICAgX29yaWdpbmFsTWV0aG9kOiBzcGVjLk1ldGhvZCxcbiAgKSB7XG4gICAgdGhpcy5vbkludGVyZmFjZU1ldGhvZChpZmMsIG92ZXJsb2FkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkludGVyZmFjZVByb3BlcnR5KGlmYzogc3BlYy5JbnRlcmZhY2VUeXBlLCBwcm9wOiBzcGVjLlByb3BlcnR5KSB7XG4gICAgaWYgKCFwcm9wLmFic3RyYWN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludGVyZmFjZSBwcm9wZXJ0aWVzIG11c3QgYmUgYWJzdHJhY3Q6ICR7cHJvcC5uYW1lfWApO1xuICAgIH1cblxuICAgIGlmIChwcm9wLnByb3RlY3RlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUHJvdGVjdGVkIHByb3BlcnRpZXMgYXJlIG5vdCBhbGxvd2VkIG9uIGludGVyZmFjZXM6ICR7cHJvcC5uYW1lfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wLnN0YXRpYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUHJvcGVydHkgJHtpZmMubmFtZX0uJHtwcm9wLm5hbWV9IGlzIG1hcmtlZCBhcyBzdGF0aWMsIGJ1dCBpbnRlcmZhY2VzIG11c3Qgbm90IGNvbnRhaW4gc3RhdGljIG1lbWJlcnMuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0TmV3TGluZUlmTmVjZXNzYXJ5KCk7XG4gICAgdGhpcy5kb3RuZXREb2NHZW5lcmF0b3IuZW1pdERvY3MocHJvcCwge1xuICAgICAgYXBpOiAnbWVtYmVyJyxcbiAgICAgIGZxbjogaWZjLmZxbixcbiAgICAgIG1lbWJlck5hbWU6IHByb3AubmFtZSxcbiAgICB9KTtcbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IuZW1pdEF0dHJpYnV0ZXNGb3JQcm9wZXJ0eShwcm9wKTtcblxuICAgIGNvbnN0IHByb3BUeXBlID0gdGhpcy50eXBlcmVzb2x2ZXIudG9Eb3ROZXRUeXBlKHByb3AudHlwZSk7XG4gICAgY29uc3QgcHJvcE5hbWUgPSB0aGlzLm5hbWV1dGlscy5jb252ZXJ0UHJvcGVydHlOYW1lKHByb3AubmFtZSk7XG5cbiAgICBpZiAocHJvcC5vcHRpb25hbCkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJ1tBbWF6b24uSlNJSS5SdW50aW1lLkRlcHV0eS5Kc2lpT3B0aW9uYWxdJyk7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lmeWluZyB0aGF0IGEgdHlwZSBpcyBudWxsYWJsZSBpcyBvbmx5IHJlcXVpcmVkIGZvciBwcmltaXRpdmUgdmFsdWUgdHlwZXNcbiAgICBjb25zdCBpc09wdGlvbmFsID0gcHJvcC5vcHRpb25hbCA/ICc/JyA6ICcnO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYCR7cHJvcFR5cGV9JHtpc09wdGlvbmFsfSAke3Byb3BOYW1lfWApO1xuXG4gICAgaWYgKHByb3Aub3B0aW9uYWwpIHtcbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soJ2dldCcpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJ3JldHVybiBudWxsOycpO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICAgIGlmICghcHJvcC5pbW11dGFibGUpIHtcbiAgICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jaygnc2V0Jyk7XG4gICAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICAgIGB0aHJvdyBuZXcgU3lzdGVtLk5vdFN1cHBvcnRlZEV4Y2VwdGlvbihcIidzZXQnIGZvciAnJHtwcm9wTmFtZX0nIGlzIG5vdCBpbXBsZW1lbnRlZFwiKTtgLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvZGUubGluZSgnZ2V0OycpO1xuICAgICAgaWYgKCFwcm9wLmltbXV0YWJsZSkge1xuICAgICAgICB0aGlzLmNvZGUubGluZSgnc2V0OycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgdGhpcy5mbGFnRmlyc3RNZW1iZXJXcml0dGVuKHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uQmVnaW5DbGFzcyhjbHM6IHNwZWMuQ2xhc3NUeXBlLCBhYnN0cmFjdDogYm9vbGVhbikge1xuICAgIGxldCBiYXNlVHlwZU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlRm9yKHRoaXMuYXNzZW1ibHksIGNscyk7XG5cbiAgICAvLyBBIGNsYXNzIGNhbiBkZXJpdmUgZnJvbSBvbmx5IG9uZSBiYXNlIGNsYXNzXG4gICAgLy8gQnV0IGNhbiBpbXBsZW1lbnQgbXVsdGlwbGUgaW50ZXJmYWNlc1xuICAgIGlmICghY2xzLmJhc2UpIHtcbiAgICAgIGJhc2VUeXBlTmFtZXMucHVzaCgnRGVwdXR5QmFzZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbGFzc0Jhc2UgPSB0aGlzLnR5cGVyZXNvbHZlci50b0RvdE5ldFR5cGUoeyBmcW46IGNscy5iYXNlIH0pO1xuICAgICAgYmFzZVR5cGVOYW1lcy5wdXNoKGNsYXNzQmFzZSk7XG4gICAgfVxuXG4gICAgaWYgKGNscy5pbnRlcmZhY2VzICYmIGNscy5pbnRlcmZhY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGltcGxlbWVudGF0aW9ucyA9XG4gICAgICAgIHRoaXMudHlwZXJlc29sdmVyLnJlc29sdmVJbXBsZW1lbnRlZEludGVyZmFjZXMoY2xzKTtcbiAgICAgIGJhc2VUeXBlTmFtZXMgPSBiYXNlVHlwZU5hbWVzLmNvbmNhdChpbXBsZW1lbnRhdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMubmFtZXV0aWxzLmNvbnZlcnRDbGFzc05hbWUoY2xzKTtcblxuICAgIC8vIE5lc3RlZCBjbGFzc2VzIHdpbGwgYmUgZGVhbHQgd2l0aCBkdXJpbmcgY2FsYyBjb2RlIGdlbmVyYXRpb25cbiAgICBjb25zdCBuZXN0ZWQgPSB0aGlzLmlzTmVzdGVkKGNscyk7XG4gICAgY29uc3QgYWJzUHJlZml4ID0gYWJzdHJhY3QgPyAnIGFic3RyYWN0JyA6ICcnO1xuXG4gICAgdGhpcy5vcGVuRmlsZUlmTmVlZGVkKGNsYXNzTmFtZSwgbmFtZXNwYWNlLCBuZXN0ZWQpO1xuXG4gICAgY29uc3QgaW1wbGVtZW50c0V4cHIgPSBgIDogJHtiYXNlVHlwZU5hbWVzLmpvaW4oJywgJyl9YDtcblxuICAgIHRoaXMuZG90bmV0RG9jR2VuZXJhdG9yLmVtaXREb2NzKGNscywge1xuICAgICAgYXBpOiAndHlwZScsXG4gICAgICBmcW46IGNscy5mcW4sXG4gICAgfSk7XG5cbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IuZW1pdEF0dHJpYnV0ZXNGb3JDbGFzcyhjbHMpO1xuXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBwdWJsaWMke2Fic1ByZWZpeH0gY2xhc3MgJHtjbGFzc05hbWV9JHtpbXBsZW1lbnRzRXhwcn1gLFxuICAgICk7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBjbGFzcyBwYXJhbWV0ZXJzXG4gICAgbGV0IHBhcmFtZXRlcnNEZWZpbml0aW9uID0gJyc7XG4gICAgbGV0IHBhcmFtZXRlcnNCYXNlID0gJyc7XG4gICAgY29uc3QgaW5pdGlhbGl6ZXIgPSBjbHMuaW5pdGlhbGl6ZXI7XG4gICAgaWYgKGluaXRpYWxpemVyKSB7XG4gICAgICB0aGlzLmRvdG5ldERvY0dlbmVyYXRvci5lbWl0RG9jcyhpbml0aWFsaXplciwge1xuICAgICAgICBhcGk6ICdpbml0aWFsaXplcicsXG4gICAgICAgIGZxbjogY2xzLmZxbixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kb3RuZXRSdW50aW1lR2VuZXJhdG9yLmVtaXREZXByZWNhdGVkQXR0cmlidXRlSWZOZWNlc3NhcnkoXG4gICAgICAgIGluaXRpYWxpemVyLFxuICAgICAgKTtcbiAgICAgIGlmIChpbml0aWFsaXplci5wYXJhbWV0ZXJzKSB7XG4gICAgICAgIHBhcmFtZXRlcnNEZWZpbml0aW9uID0gdGhpcy5yZW5kZXJQYXJhbWV0ZXJzU3RyaW5nKFxuICAgICAgICAgIGluaXRpYWxpemVyLnBhcmFtZXRlcnMsXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBpbml0aWFsaXplci5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgcGFyYW1ldGVyc0Jhc2UgKz0gYCR7dGhpcy5uYW1ldXRpbHMuY29udmVydFBhcmFtZXRlck5hbWUocC5uYW1lKX1gO1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IHBhcmFtZXRlciwgYXBwZW5kICxcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpbml0aWFsaXplci5wYXJhbWV0ZXJzLmluZGV4T2YocCkgIT09XG4gICAgICAgICAgICBpbml0aWFsaXplci5wYXJhbWV0ZXJzLmxlbmd0aCAtIDFcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHBhcmFtZXRlcnNCYXNlICs9ICcsICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgY29uc3RydWN0b3JzOlxuICAgICAgLy8gQWJzdHJhY3QgY2xhc3NlcyBoYXZlIHByb3RlY3RlZCBjb25zdHJ1Y3RvcnMuXG4gICAgICBjb25zdCB2aXNpYmlsaXR5ID0gY2xzLmFic3RyYWN0ID8gJ3Byb3RlY3RlZCcgOiAncHVibGljJztcblxuICAgICAgY29uc3QgYXJncyA9XG4gICAgICAgIHBhcmFtZXRlcnNCYXNlLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGBuZXcgb2JqZWN0P1tdeyR7cGFyYW1ldGVyc0Jhc2V9fWBcbiAgICAgICAgICA6IGBTeXN0ZW0uQXJyYXkuRW1wdHk8b2JqZWN0Pz4oKWA7XG4gICAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgICBgJHt2aXNpYmlsaXR5fSAke2NsYXNzTmFtZX0oJHtwYXJhbWV0ZXJzRGVmaW5pdGlvbn0pOiBiYXNlKG5ldyBEZXB1dHlQcm9wcygke2FyZ3N9KSlgLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgJy8vLyA8c3VtbWFyeT5Vc2VkIGJ5IGpzaWkgdG8gY29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZnJvbSBhIEphdmFzY3JpcHQtb3duZWQgb2JqZWN0IHJlZmVyZW5jZTwvc3VtbWFyeT4nLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAnLy8vIDxwYXJhbSBuYW1lPVwicmVmZXJlbmNlXCI+VGhlIEphdmFzY3JpcHQtb3duZWQgb2JqZWN0IHJlZmVyZW5jZTwvcGFyYW0+JyxcbiAgICApO1xuICAgIHRoaXMuZG90bmV0UnVudGltZUdlbmVyYXRvci5lbWl0RGVwcmVjYXRlZEF0dHJpYnV0ZUlmTmVjZXNzYXJ5KGluaXRpYWxpemVyKTtcbiAgICB0aGlzLmVtaXRIaWRlQXR0cmlidXRlKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBwcm90ZWN0ZWQgJHtjbGFzc05hbWV9KEJ5UmVmVmFsdWUgcmVmZXJlbmNlKTogYmFzZShyZWZlcmVuY2UpYCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcblxuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgJy8vLyA8c3VtbWFyeT5Vc2VkIGJ5IGpzaWkgdG8gY29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZnJvbSBEZXB1dHlQcm9wczwvc3VtbWFyeT4nLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmxpbmUoJy8vLyA8cGFyYW0gbmFtZT1cInByb3BzXCI+VGhlIGRlcHV0eSBwcm9wczwvcGFyYW0+Jyk7XG4gICAgdGhpcy5kb3RuZXRSdW50aW1lR2VuZXJhdG9yLmVtaXREZXByZWNhdGVkQXR0cmlidXRlSWZOZWNlc3NhcnkoaW5pdGlhbGl6ZXIpO1xuICAgIHRoaXMuZW1pdEhpZGVBdHRyaWJ1dGUoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYHByb3RlY3RlZCAke2NsYXNzTmFtZX0oRGVwdXR5UHJvcHMgcHJvcHMpOiBiYXNlKHByb3BzKWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgLy8gV2UgaGF2ZSBhbHJlYWR5IG91dHB1dHRlZCBtZW1iZXJzIChjb25zdHJ1Y3RvcnMpLCBzZXR0aW5nIHRoZSBmbGFnIHRvIHRydWVcbiAgICB0aGlzLmZsYWdGaXJzdE1lbWJlcldyaXR0ZW4odHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25FbmRDbGFzcyhjbHM6IHNwZWMuQ2xhc3NUeXBlKSB7XG4gICAgaWYgKGNscy5hYnN0cmFjdCkge1xuICAgICAgdGhpcy5lbWl0SW50ZXJmYWNlUHJveHkoY2xzKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMubmFtZXV0aWxzLmNvbnZlcnRDbGFzc05hbWUoY2xzKTtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSB0aGlzLm5hbWVzcGFjZUZvcih0aGlzLmFzc2VtYmx5LCBjbHMpO1xuICAgIHRoaXMuY2xvc2VGaWxlSWZOZWVkZWQoY2xhc3NOYW1lLCBuYW1lc3BhY2UsIHRoaXMuaXNOZXN0ZWQoY2xzKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25GaWVsZChcbiAgICBfY2xzOiBzcGVjLkNsYXNzVHlwZSxcbiAgICBfcHJvcDogc3BlYy5Qcm9wZXJ0eSxcbiAgICBfdW5pb24/OiBzcGVjLlVuaW9uVHlwZVJlZmVyZW5jZSxcbiAgKSB7XG4gICAgLyogbm9vcCAqL1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uTWV0aG9kKGNsczogc3BlYy5DbGFzc1R5cGUsIG1ldGhvZDogc3BlYy5NZXRob2QpIHtcbiAgICB0aGlzLmVtaXRNZXRob2QoY2xzLCBtZXRob2QsIGNscyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25NZXRob2RPdmVybG9hZChcbiAgICBjbHM6IHNwZWMuQ2xhc3NUeXBlLFxuICAgIG92ZXJsb2FkOiBzcGVjLk1ldGhvZCxcbiAgICBfb3JpZ2luYWxNZXRob2Q6IHNwZWMuTWV0aG9kLFxuICApIHtcbiAgICB0aGlzLm9uTWV0aG9kKGNscywgb3ZlcmxvYWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uUHJvcGVydHkoY2xzOiBzcGVjLkNsYXNzVHlwZSwgcHJvcDogc3BlYy5Qcm9wZXJ0eSkge1xuICAgIHRoaXMuZW1pdFByb3BlcnR5KGNscywgcHJvcCwgY2xzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblN0YXRpY01ldGhvZChjbHM6IHNwZWMuQ2xhc3NUeXBlLCBtZXRob2Q6IHNwZWMuTWV0aG9kKSB7XG4gICAgdGhpcy5lbWl0TWV0aG9kKGNscywgbWV0aG9kLCBjbHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uU3RhdGljTWV0aG9kT3ZlcmxvYWQoXG4gICAgY2xzOiBzcGVjLkNsYXNzVHlwZSxcbiAgICBvdmVybG9hZDogc3BlYy5NZXRob2QsXG4gICAgX29yaWdpbmFsTWV0aG9kOiBzcGVjLk1ldGhvZCxcbiAgKSB7XG4gICAgdGhpcy5lbWl0TWV0aG9kKGNscywgb3ZlcmxvYWQsIGNscyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25TdGF0aWNQcm9wZXJ0eShjbHM6IHNwZWMuQ2xhc3NUeXBlLCBwcm9wOiBzcGVjLlByb3BlcnR5KSB7XG4gICAgaWYgKHByb3AuY29uc3QpIHtcbiAgICAgIHRoaXMuZW1pdENvbnN0UHJvcGVydHkoY2xzLCBwcm9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbWl0UHJvcGVydHkoY2xzLCBwcm9wLCBjbHMpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvblVuaW9uUHJvcGVydHkoXG4gICAgY2xzOiBzcGVjLkNsYXNzVHlwZSxcbiAgICBwcm9wOiBzcGVjLlByb3BlcnR5LFxuICAgIF91bmlvbjogc3BlYy5VbmlvblR5cGVSZWZlcmVuY2UsXG4gICkge1xuICAgIHRoaXMuZW1pdFByb3BlcnR5KGNscywgcHJvcCwgY2xzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkJlZ2luRW51bShlbm06IHNwZWMuRW51bVR5cGUpIHtcbiAgICBjb25zdCBlbnVtTmFtZSA9IHRoaXMubmFtZXV0aWxzLmNvbnZlcnRUeXBlTmFtZShlbm0ubmFtZSk7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gdGhpcy5uYW1lc3BhY2VGb3IodGhpcy5hc3NlbWJseSwgZW5tKTtcbiAgICB0aGlzLm9wZW5GaWxlSWZOZWVkZWQoZW51bU5hbWUsIG5hbWVzcGFjZSwgdGhpcy5pc05lc3RlZChlbm0pKTtcbiAgICB0aGlzLmVtaXROZXdMaW5lSWZOZWNlc3NhcnkoKTtcbiAgICB0aGlzLmRvdG5ldERvY0dlbmVyYXRvci5lbWl0RG9jcyhlbm0sIHtcbiAgICAgIGFwaTogJ3R5cGUnLFxuICAgICAgZnFuOiBlbm0uZnFuLFxuICAgIH0pO1xuICAgIHRoaXMuZG90bmV0UnVudGltZUdlbmVyYXRvci5lbWl0QXR0cmlidXRlc0ZvckVudW0oZW5tLCBlbnVtTmFtZSk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhgcHVibGljIGVudW0gJHtlbm0ubmFtZX1gKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkVuZEVudW0oZW5tOiBzcGVjLkVudW1UeXBlKSB7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICBjb25zdCBlbnVtTmFtZSA9IHRoaXMubmFtZXV0aWxzLmNvbnZlcnRUeXBlTmFtZShlbm0ubmFtZSk7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gdGhpcy5uYW1lc3BhY2VGb3IodGhpcy5hc3NlbWJseSwgZW5tKTtcbiAgICB0aGlzLmNsb3NlRmlsZUlmTmVlZGVkKGVudW1OYW1lLCBuYW1lc3BhY2UsIHRoaXMuaXNOZXN0ZWQoZW5tKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25FbnVtTWVtYmVyKGVubTogc3BlYy5FbnVtVHlwZSwgbWVtYmVyOiBzcGVjLkVudW1NZW1iZXIpIHtcbiAgICB0aGlzLmRvdG5ldERvY0dlbmVyYXRvci5lbWl0RG9jcyhtZW1iZXIsIHtcbiAgICAgIGFwaTogJ21lbWJlcicsXG4gICAgICBmcW46IGVubS5mcW4sXG4gICAgICBtZW1iZXJOYW1lOiBtZW1iZXIubmFtZSxcbiAgICB9KTtcbiAgICBjb25zdCBlbnVtTWVtYmVyTmFtZSA9IHRoaXMubmFtZXV0aWxzLmNvbnZlcnRFbnVtTWVtYmVyTmFtZShtZW1iZXIubmFtZSk7XG4gICAgdGhpcy5kb3RuZXRSdW50aW1lR2VuZXJhdG9yLmVtaXRBdHRyaWJ1dGVzRm9yRW51bU1lbWJlcihcbiAgICAgIGVudW1NZW1iZXJOYW1lLFxuICAgICAgbWVtYmVyLFxuICAgICk7XG4gICAgLy8gSWYgd2UgYXJlIG9uIHRoZSBsYXN0IGVudW0gbWVtYmVyLCB3ZSBkb24ndCBuZWVkIGEgY29tbWFcbiAgICBpZiAoZW5tLm1lbWJlcnMuaW5kZXhPZihtZW1iZXIpICE9PSBlbm0ubWVtYmVycy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmNvZGUubGluZShgJHtlbnVtTWVtYmVyTmFtZX0sYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKGAke2VudW1NZW1iZXJOYW1lfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbmFtZXNwYWNlRm9yKGFzc206IHNwZWMuQXNzZW1ibHksIHR5cGU6IHNwZWMuVHlwZSk6IHN0cmluZyB7XG4gICAgbGV0IG5zID0gdHlwZS5uYW1lc3BhY2U7XG4gICAgd2hpbGUgKG5zICE9IG51bGwgJiYgYXNzbS50eXBlcz8uW2Ake2Fzc20ubmFtZX0uJHtuc31gXSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBuZXN0aW5nID0gYXNzbS50eXBlc1tgJHthc3NtLm5hbWV9LiR7bnN9YF07XG4gICAgICBucyA9IG5lc3RpbmcubmFtZXNwYWNlO1xuICAgIH1cbiAgICBpZiAobnMgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMudHlwZXJlc29sdmVyLnJlc29sdmVOYW1lc3BhY2UoYXNzbSwgYXNzbS5uYW1lLCBucyk7XG4gICAgfVxuICAgIHJldHVybiBhc3NtLnRhcmdldHMhLmRvdG5ldCEubmFtZXNwYWNlO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0TWV0aG9kKFxuICAgIGNsczogc3BlYy5DbGFzc1R5cGUgfCBzcGVjLkludGVyZmFjZVR5cGUsXG4gICAgbWV0aG9kOiBzcGVjLk1ldGhvZCxcbiAgICBkZWZpbmluZ1R5cGU6IHNwZWMuVHlwZSxcbiAgICBlbWl0Rm9yUHJveHlPckRhdGF0eXBlID0gZmFsc2UsXG4gICk6IHZvaWQge1xuICAgIHRoaXMuZW1pdE5ld0xpbmVJZk5lY2Vzc2FyeSgpO1xuICAgIGNvbnN0IHJldHVyblR5cGUgPSBtZXRob2QucmV0dXJuc1xuICAgICAgPyB0aGlzLnR5cGVyZXNvbHZlci50b0RvdE5ldFR5cGUobWV0aG9kLnJldHVybnMudHlwZSlcbiAgICAgIDogJ3ZvaWQnO1xuICAgIGNvbnN0IHN0YXRpY0tleVdvcmQgPSBtZXRob2Quc3RhdGljID8gJ3N0YXRpYyAnIDogJyc7XG4gICAgbGV0IG92ZXJyaWRlS2V5V29yZCA9ICcnO1xuICAgIGxldCB2aXJ0dWFsS2V5V29yZCA9ICcnO1xuXG4gICAgbGV0IGRlZmluZWRPbkFuY2VzdG9yID0gZmFsc2U7XG4gICAgLy8gSW4gdGhlIGNhc2Ugb2YgdGhlIHNvdXJjZSBiZWluZyBhIGNsYXNzLCB3ZSBjaGVjayBpZiBpdCBpcyBhbHJlYWR5IGRlZmluZWQgb24gYW4gYW5jZXN0b3JcbiAgICBpZiAoc3BlYy5pc0NsYXNzVHlwZShjbHMpKSB7XG4gICAgICBkZWZpbmVkT25BbmNlc3RvciA9IHRoaXMuaXNNZW1iZXJEZWZpbmVkT25BbmNlc3RvcihjbHMsIG1ldGhvZCk7XG4gICAgfVxuICAgIC8vIFRoZSBtZXRob2QgaXMgYW4gb3ZlcnJpZGUgaWYgaXQncyBkZWZpbmVkIG9uIHRoZSBhbmNlc3Rvciwgb3IgaWYgdGhlIHBhcmVudCBpcyBhIGNsYXNzIGFuZCB3ZSBhcmUgZ2VuZXJhdGluZyBhIHByb3h5IG9yIGRhdGF0eXBlIGNsYXNzXG4gICAgbGV0IG92ZXJyaWRlcyA9XG4gICAgICBkZWZpbmVkT25BbmNlc3RvciB8fCAoc3BlYy5pc0NsYXNzVHlwZShjbHMpICYmIGVtaXRGb3JQcm94eU9yRGF0YXR5cGUpO1xuICAgIC8vIFdlIGFsc28gaW5zcGVjdCB0aGUganNpaSBtb2RlbCB0byBzZWUgaWYgaXQgb3ZlcnJpZGVzIGEgY2xhc3MgbWVtYmVyLlxuICAgIGlmIChtZXRob2Qub3ZlcnJpZGVzKSB7XG4gICAgICBjb25zdCBvdmVycmlkZVR5cGUgPSB0aGlzLmZpbmRUeXBlKG1ldGhvZC5vdmVycmlkZXMpO1xuICAgICAgaWYgKHNwZWMuaXNDbGFzc1R5cGUob3ZlcnJpZGVUeXBlKSkge1xuICAgICAgICAvLyBPdmVycmlkZXMgYSBjbGFzcywgbmVlZHMgb3ZlcnJpZGVzIGtleXdvcmRcbiAgICAgICAgb3ZlcnJpZGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG92ZXJyaWRlcykge1xuICAgICAgLy8gQWRkIHRoZSBvdmVycmlkZSBrZXkgd29yZCBpZiB0aGUgbWV0aG9kIGlzIGVtaXR0ZWQgZm9yIGEgcHJveHkgb3IgZGF0YSB0eXBlIG9yIGlzIGRlZmluZWQgb24gYW4gYW5jZXN0b3IuIElmXG4gICAgICAvLyB0aGUgbWVtYmVyIGlzIHN0YXRpYywgdXNlIHRoZSBcIm5ld1wiIGtleXdvcmQgaW5zdGVhZCwgdG8gaW5kaWNhdGUgd2UgYXJlIGludGVudGlvbmFsbHkgaGlkaW5nIHRoZSBhbmNlc3RvclxuICAgICAgLy8gZGVjbGFyYXRpb24gKGFzIEMjIGRvZXMgbm90IGluaGVyaXQgc3RhdGljcywgdGhleSBjYW4gYmUgaGlkZGVuIGJ1dCBub3Qgb3ZlcnJpZGRlbikuIFRoZSBcIm5ld1wiIGtleXdvcmQgaXNcbiAgICAgIC8vIG9wdGlvbmFsIGluIHRoaXMgY29udGV4dCwgYnV0IGhlbHBzIGNsYXJpZnkgaW50ZW50aW9uLlxuICAgICAgb3ZlcnJpZGVLZXlXb3JkID0gbWV0aG9kLnN0YXRpYyA/ICduZXcgJyA6ICdvdmVycmlkZSAnO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhbWV0aG9kLnN0YXRpYyAmJlxuICAgICAgKG1ldGhvZC5hYnN0cmFjdCB8fCAhZGVmaW5lZE9uQW5jZXN0b3IpICYmXG4gICAgICAhZW1pdEZvclByb3h5T3JEYXRhdHlwZVxuICAgICkge1xuICAgICAgLy8gQWRkIHRoZSB2aXJ0dWFsIGtleSB3b3JkIGlmIHRoZSBtZXRob2QgaXMgYWJzdHJhY3Qgb3Igbm90IGRlZmluZWQgb24gYW4gYW5jZXN0b3IgYW5kIHdlIGFyZSBOT1QgZ2VuZXJhdGluZyBhIHByb3h5IG9yIGRhdGF0eXBlIGNsYXNzXG4gICAgICAvLyBNZXRob2RzIHNob3VsZCBhbHdheXMgYmUgdmlydHVhbCB3aGVuIHBvc3NpYmxlXG4gICAgICB2aXJ0dWFsS2V5V29yZCA9ICd2aXJ0dWFsICc7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjZXNzID0gdGhpcy5yZW5kZXJBY2Nlc3NMZXZlbChtZXRob2QpO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSB0aGlzLm5hbWV1dGlscy5jb252ZXJ0TWV0aG9kTmFtZShtZXRob2QubmFtZSk7XG5cbiAgICBjb25zdCBpc09wdGlvbmFsID0gbWV0aG9kLnJldHVybnMgJiYgbWV0aG9kLnJldHVybnMub3B0aW9uYWwgPyAnPycgOiAnJztcbiAgICBjb25zdCBzaWduYXR1cmUgPSBgJHtyZXR1cm5UeXBlfSR7aXNPcHRpb25hbH0gJHttZXRob2ROYW1lfSgke3RoaXMucmVuZGVyTWV0aG9kUGFyYW1ldGVycyhcbiAgICAgIG1ldGhvZCxcbiAgICApfSlgO1xuXG4gICAgdGhpcy5kb3RuZXREb2NHZW5lcmF0b3IuZW1pdERvY3MobWV0aG9kLCB7XG4gICAgICBhcGk6ICdtZW1iZXInLFxuICAgICAgZnFuOiBkZWZpbmluZ1R5cGUuZnFuLFxuICAgICAgbWVtYmVyTmFtZTogbWV0aG9kLm5hbWUsXG4gICAgfSk7XG4gICAgdGhpcy5kb3RuZXRSdW50aW1lR2VuZXJhdG9yLmVtaXRBdHRyaWJ1dGVzRm9yTWV0aG9kKFxuICAgICAgY2xzLFxuICAgICAgbWV0aG9kIC8qLCBlbWl0Rm9yUHJveHlPckRhdGF0eXBlKi8sXG4gICAgKTtcblxuICAgIGlmIChtZXRob2QuYWJzdHJhY3QpIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKGAke2FjY2Vzc30gJHtvdmVycmlkZUtleVdvcmR9YWJzdHJhY3QgJHtzaWduYXR1cmV9O2ApO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgICAgYCR7YWNjZXNzfSAke3N0YXRpY0tleVdvcmR9JHtvdmVycmlkZUtleVdvcmR9JHt2aXJ0dWFsS2V5V29yZH0ke3NpZ25hdHVyZX1gLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IuY3JlYXRlSW52b2tlTWV0aG9kSWRlbnRpZmllcihcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgY2xzIGFzIHNwZWMuQ2xhc3NUeXBlLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvdW5kcyBvdXQgaWYgYSBtZW1iZXIgKHByb3BlcnR5IG9yIG1ldGhvZCkgaXMgYWxyZWFkeSBkZWZpbmVkIGluIG9uZSBvZiB0aGUgYmFzZSBjbGFzc2VzXG4gICAqXG4gICAqIFVzZWQgdG8gZmlndXJlIG91dCBpZiB0aGUgb3ZlcnJpZGUgb3IgdmlydHVhbCBrZXl3b3JkcyBhcmUgbmVjZXNzYXJ5LlxuICAgKi9cbiAgcHJpdmF0ZSBpc01lbWJlckRlZmluZWRPbkFuY2VzdG9yKFxuICAgIGNsczogc3BlYy5DbGFzc1R5cGUsXG4gICAgbWVtYmVyOiBzcGVjLlByb3BlcnR5IHwgc3BlYy5NZXRob2QsXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChtZW1iZXIgYXMgc3BlYy5NZXRob2QpIHtcbiAgICAgIGNvbnN0IG9iamVjdE1ldGhvZHMgPSBbJ1RvU3RyaW5nJywgJ0dldEhhc2hDb2RlJywgJ0VxdWFscyddO1xuICAgICAgLy8gTWV0aG9kcyBkZWZpbmVkIG9uIHRoZSBPYmplY3QgY2xhc3Mgc2hvdWxkIGJlIG92ZXJyaWRkZW4sIHJldHVybiB0cnVlO1xuICAgICAgaWYgKFxuICAgICAgICBvYmplY3RNZXRob2RzLmluY2x1ZGVzKHRoaXMubmFtZXV0aWxzLmNvbnZlcnRNZXRob2ROYW1lKG1lbWJlci5uYW1lKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBiYXNlID0gY2xzLmJhc2U7XG4gICAgaWYgKGJhc2UpIHtcbiAgICAgIGNvbnN0IGJhc2VUeXBlID0gdGhpcy5maW5kVHlwZShiYXNlKSBhcyBzcGVjLkNsYXNzVHlwZTtcblxuICAgICAgaWYgKG1lbWJlciBhcyBzcGVjLlByb3BlcnR5KSB7XG4gICAgICAgIGlmIChiYXNlVHlwZS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgYmFzZVR5cGUucHJvcGVydGllcy5maWx0ZXIoXG4gICAgICAgICAgICAgIChwcm9wZXJ0eSkgPT4gcHJvcGVydHkubmFtZSA9PT0gbWVtYmVyLm5hbWUsXG4gICAgICAgICAgICApLmxlbmd0aCA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIHByb3BlcnR5IGZvdW5kIGluIGJhc2UgcGFyZW50XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNZW1iZXJEZWZpbmVkT25BbmNlc3RvcihiYXNlVHlwZSwgbWVtYmVyKTtcbiAgICAgIH0gZWxzZSBpZiAobWVtYmVyIGFzIHNwZWMuTWV0aG9kKSB7XG4gICAgICAgIGlmIChiYXNlVHlwZS5tZXRob2RzKSB7XG4gICAgICAgICAgY29uc3QgbXlNZXRob2QgPSBtZW1iZXIgYXMgc3BlYy5NZXRob2Q7XG4gICAgICAgICAgLy8gSWYgdGhlIG5hbWUsIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgYXJlIHNpbWlsYXIgdGhlbiBpdCBpcyB0aGUgc2FtZSBtZXRob2QgaW4gLk5FVFxuICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBiYXNlVHlwZS5tZXRob2RzKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG0ubmFtZSA9PT0gbXlNZXRob2QubmFtZSAmJlxuICAgICAgICAgICAgICBtLnBhcmFtZXRlcnMgPT09IG15TWV0aG9kLnBhcmFtZXRlcnMgJiZcbiAgICAgICAgICAgICAgbS5yZXR1cm5zID09PSBteU1ldGhvZC5yZXR1cm5zXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlzTWVtYmVyRGVmaW5lZE9uQW5jZXN0b3IoYmFzZVR5cGUsIG1lbWJlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIG1ldGhvZCBwYXJhbWV0ZXJzIHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJNZXRob2RQYXJhbWV0ZXJzKG1ldGhvZDogc3BlYy5NZXRob2QpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlbmRlclBhcmFtZXRlcnNTdHJpbmcobWV0aG9kLnBhcmFtZXRlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgcGFyYW1ldGVycyBzdHJpbmcgZm9yIG1ldGhvZHMgb3IgY29uc3RydWN0b3JzXG4gICAqL1xuICBwcml2YXRlIHJlbmRlclBhcmFtZXRlcnNTdHJpbmcoXG4gICAgcGFyYW1ldGVyczogc3BlYy5QYXJhbWV0ZXJbXSB8IHVuZGVmaW5lZCxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbXMgPSBbXTtcbiAgICBpZiAocGFyYW1ldGVycykge1xuICAgICAgZm9yIChjb25zdCBwIG9mIHBhcmFtZXRlcnMpIHtcbiAgICAgICAgbGV0IG9wdGlvbmFsUHJpbWl0aXZlID0gJyc7XG4gICAgICAgIGxldCBvcHRpb25hbEtleXdvcmQgPSAnJztcbiAgICAgICAgbGV0IHR5cGUgPSB0aGlzLnR5cGVyZXNvbHZlci50b0RvdE5ldFR5cGUocC50eXBlKTtcbiAgICAgICAgaWYgKHAub3B0aW9uYWwpIHtcbiAgICAgICAgICBvcHRpb25hbEtleXdvcmQgPSAnID0gbnVsbCc7XG4gICAgICAgICAgaWYgKHAub3B0aW9uYWwpIHtcbiAgICAgICAgICAgIG9wdGlvbmFsUHJpbWl0aXZlID0gJz8nO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwLnZhcmlhZGljKSB7XG4gICAgICAgICAgdHlwZSA9IGBwYXJhbXMgJHt0eXBlfVtdYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdCA9IGAke3R5cGV9JHtvcHRpb25hbFByaW1pdGl2ZX0gJHt0aGlzLm5hbWV1dGlscy5jb252ZXJ0UGFyYW1ldGVyTmFtZShcbiAgICAgICAgICBwLm5hbWUsXG4gICAgICAgICl9JHtvcHRpb25hbEtleXdvcmR9YDtcbiAgICAgICAgcGFyYW1zLnB1c2goc3QpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zLmpvaW4oJywgJyk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYW4gaW50ZXJmYWNlIHByb3h5IGZvciBhbiBpbnRlcmZhY2Ugb3IgYW4gYWJzdHJhY3QgY2xhc3MuXG4gICAqL1xuICBwcml2YXRlIGVtaXRJbnRlcmZhY2VQcm94eShpZmM6IHNwZWMuSW50ZXJmYWNlVHlwZSB8IHNwZWMuQ2xhc3NUeXBlKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9ICdfUHJveHknO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlRm9yKHRoaXMuYXNzZW1ibHksIGlmYyk7XG4gICAgY29uc3QgaXNOZXN0ZWQgPSB0cnVlO1xuICAgIHRoaXMub3BlbkZpbGVJZk5lZWRlZChuYW1lLCBuYW1lc3BhY2UsIGlzTmVzdGVkKTtcblxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5kb3RuZXREb2NHZW5lcmF0b3IuZW1pdERvY3MoaWZjLCB7XG4gICAgICBhcGk6ICd0eXBlJyxcbiAgICAgIGZxbjogaWZjLmZxbixcbiAgICB9KTtcbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IuZW1pdEF0dHJpYnV0ZXNGb3JJbnRlcmZhY2VQcm94eShpZmMpO1xuXG4gICAgY29uc3QgaW50ZXJmYWNlRnFuID0gdGhpcy50eXBlcmVzb2x2ZXIudG9OYXRpdmVGcW4oaWZjLmZxbik7XG4gICAgY29uc3Qgc3VmZml4ID0gc3BlYy5pc0ludGVyZmFjZVR5cGUoaWZjKVxuICAgICAgPyBgOiBEZXB1dHlCYXNlLCAke2ludGVyZmFjZUZxbn1gXG4gICAgICA6IGA6ICR7aW50ZXJmYWNlRnFufWA7XG4gICAgY29uc3QgbmV3TW9kaWZpZXIgPSB0aGlzLnByb3h5TXVzdFVzZU5ld01vZGlmaWVyKGlmYykgPyAnbmV3ICcgOiAnJztcblxuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICBgJHtuZXdNb2RpZmllcn1pbnRlcm5hbCBzZWFsZWQgY2xhc3MgJHtuYW1lfSAke3N1ZmZpeH1gLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIHByaXZhdGUgY29uc3RydWN0b3JcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYHByaXZhdGUgJHtuYW1lfShCeVJlZlZhbHVlIHJlZmVyZW5jZSk6IGJhc2UocmVmZXJlbmNlKWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgLy8gV2UgaGF2ZSBhbHJlYWR5IG91dHB1dCBhIG1lbWJlciAoY29uc3RydWN0b3IpLCBzZXR0aW5nIHRoZSBmaXJzdCBtZW1iZXIgZmxhZyB0byB0cnVlXG4gICAgdGhpcy5mbGFnRmlyc3RNZW1iZXJXcml0dGVuKHRydWUpO1xuXG4gICAgY29uc3QgZGF0YXR5cGUgPSBmYWxzZTtcbiAgICBjb25zdCBwcm94eSA9IHRydWU7XG4gICAgdGhpcy5lbWl0SW50ZXJmYWNlTWVtYmVyc0ZvclByb3h5T3JEYXRhdHlwZShpZmMsIGRhdGF0eXBlLCBwcm94eSk7XG5cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIHRoaXMuY2xvc2VGaWxlSWZOZWVkZWQobmFtZSwgbmFtZXNwYWNlLCBpc05lc3RlZCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFueSBhbmNlc3RvciBvZiB0aGUgZ2l2ZW4gdHlwZSBtdXN0IHVzZSB0aGUgYG5ld2BcbiAgICogbW9kaWZpZXIgd2hlbiBpbnRyb2R1Y2luZyBpdCdzIG93biBwcm94eS5cbiAgICpcbiAgICogSWYgdGhlIHR5cGUgaXMgYSBgY2xhc3NgLCB0aGVuIGl0IG11c3QgdXNlIGBuZXdgIGlmIGl0IGV4dGVuZHMgYW5vdGhlclxuICAgKiBhYnN0cmFjdCBjbGFzcyBkZWZpbmVkIGluIHRoZSBzYW1lIGFzc2VtYmx5IChzaW5jZSBwcm94aWVzIGFyZSBpbnRlcm5hbCxcbiAgICogZXh0ZXJuYWwgdHlwZXMnIHByb3hpZXMgYXJlIG5vdCB2aXNpYmxlIGluIHRoYXQgY29udGV4dCkuXG4gICAqXG4gICAqIElmIHRoZSB0eXBlIGlzIGFuIGBpbnRlcmZhY2VgLCB0aGVuIGl0IG11c3QgdXNlIGBuZXdgIGlmIGl0IGV4dGVuZHMgYW5vdGhlclxuICAgKiBpbnRlcmZhY2UgZnJvbSB0aGUgc2FtZSBhc3NlbWJseS5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgdGhlIHRlc3RlZCBwcm94eS1hYmxlIHR5cGUgKGFuIGFic3RyYWN0IGNsYXNzIG9yIGFuIGludGVyZmFjZSkuXG4gICAqXG4gICAqIEByZXR1cm5zIHRydWUgaWYgYW55IGFuY2VzdG9yIG9mIHRoaXMgdHlwZSBoYXMgYSB2aXNpYmxlIHByb3h5LlxuICAgKi9cbiAgcHJpdmF0ZSBwcm94eU11c3RVc2VOZXdNb2RpZmllcihcbiAgICB0eXBlOiBzcGVjLkNsYXNzVHlwZSB8IHNwZWMuSW50ZXJmYWNlVHlwZSxcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKHNwZWMuaXNDbGFzc1R5cGUodHlwZSkpIHtcbiAgICAgIGlmICh0eXBlLmJhc2UgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLmZpbmRUeXBlKHR5cGUuYmFzZSkgYXMgc3BlYy5DbGFzc1R5cGU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBiYXNlLmFzc2VtYmx5ID09PSB0eXBlLmFzc2VtYmx5ICYmXG4gICAgICAgIChiYXNlLmFic3RyYWN0XG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiAvLyBBbiBhYnN0cmFjdCBjbGFzcyBjb3VsZCBleHRlbmQgYSBjb25jcmV0ZSBjbGFzcy4uLiBXZSBtdXN0IHdhbGsgdXAgdGhlIGluaGVyaXRhbmNlIHRyZWUgaW4gdGhpcyBjYXNlLi4uXG4gICAgICAgICAgICB0aGlzLnByb3h5TXVzdFVzZU5ld01vZGlmaWVyKGJhc2UpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgdHlwZS5pbnRlcmZhY2VzPy5maW5kKFxuICAgICAgICAoZnFuKSA9PiB0aGlzLmZpbmRUeXBlKGZxbikuYXNzZW1ibHkgPT09IHR5cGUuYXNzZW1ibHksXG4gICAgICApICE9IG51bGxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFuIEludGVyZmFjZSBEYXRhdHlwZSBjbGFzc1xuICAgKlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gZW1pdCBhIGNsYXNzIGltcGxlbWVudGluZyBhbiBpbnRlcmZhY2Ugd2hlbiB0aGUgZGF0YXR5cGUgcHJvcGVydHkgaXMgdHJ1ZSBpbiB0aGUganNpaSBtb2RlbFxuICAgKiBUaGUgZ2VuZXJhdGlvbiBvZiB0aGUgaW50ZXJmYWNlIHByb3h5IG1heSBub3QgYmUgbmVlZGVkIGlmIHRoZSBpbnRlcmZhY2UgaXMgYWxzbyBzZXQgYXMgYSBkYXRhdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBlbWl0SW50ZXJmYWNlRGF0YVR5cGUoaWZjOiBzcGVjLkludGVyZmFjZVR5cGUpOiB2b2lkIHtcbiAgICAvLyBJbnRlcmZhY2UgZGF0YXR5cGVzIGRvIG5vdCBuZWVkIHRvIGJlIHByZWZpeGVkIGJ5IEksIHdlIGNhbiBjYWxsIGNvbnZlcnRDbGFzc05hbWVcbiAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1ldXRpbHMuY29udmVydENsYXNzTmFtZShpZmMpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlRm9yKHRoaXMuYXNzZW1ibHksIGlmYyk7XG4gICAgY29uc3QgaXNOZXN0ZWQgPSB0aGlzLmlzTmVzdGVkKGlmYyk7XG4gICAgdGhpcy5vcGVuRmlsZUlmTmVlZGVkKG5hbWUsIG5hbWVzcGFjZSwgaXNOZXN0ZWQpO1xuXG4gICAgaWYgKGlmYy5wcm9wZXJ0aWVzPy5maW5kKChwcm9wKSA9PiAhcHJvcC5vcHRpb25hbCkgIT0gbnVsbCkge1xuICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBiZSBhbm5veWVkIGJ5IHRoZSBsYWNrIG9mIGluaXRpYWxpemF0aW9uIG9mIG5vbi1udWxsYWJsZSBmaWVsZHMgaW4gdGhpcyBjYXNlLlxuICAgICAgdGhpcy5jb2RlLmxpbmUoJyNwcmFnbWEgd2FybmluZyBkaXNhYmxlIENTODYxOCcpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRvdG5ldERvY0dlbmVyYXRvci5lbWl0RG9jcyhpZmMsIHtcbiAgICAgIGFwaTogJ3R5cGUnLFxuICAgICAgZnFuOiBpZmMuZnFuLFxuICAgIH0pO1xuICAgIGNvbnN0IHN1ZmZpeCA9IGA6ICR7dGhpcy50eXBlcmVzb2x2ZXIudG9OYXRpdmVGcW4oaWZjLmZxbil9YDtcbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IuZW1pdEF0dHJpYnV0ZXNGb3JJbnRlcmZhY2VEYXRhdHlwZShpZmMpO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYHB1YmxpYyBjbGFzcyAke25hbWV9ICR7c3VmZml4fWApO1xuICAgIHRoaXMuZmxhZ0ZpcnN0TWVtYmVyV3JpdHRlbihmYWxzZSk7XG4gICAgY29uc3QgZGF0YXR5cGUgPSB0cnVlO1xuICAgIGNvbnN0IHByb3h5ID0gZmFsc2U7XG4gICAgdGhpcy5lbWl0SW50ZXJmYWNlTWVtYmVyc0ZvclByb3h5T3JEYXRhdHlwZShpZmMsIGRhdGF0eXBlLCBwcm94eSk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB0aGlzLmNsb3NlRmlsZUlmTmVlZGVkKG5hbWUsIG5hbWVzcGFjZSwgaXNOZXN0ZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyB0aGUgYm9keSBvZiB0aGUgaW50ZXJmYWNlIHByb3h5IG9yIGRhdGEgdHlwZSBjbGFzc1xuICAgKlxuICAgKiBUaGlzIGxvb3BzIHRocm91Z2ggYWxsIHRoZSBtZW1iZXIgYW5kIGdlbmVyYXRlcyB0aGVtXG4gICAqL1xuICBwcml2YXRlIGVtaXRJbnRlcmZhY2VNZW1iZXJzRm9yUHJveHlPckRhdGF0eXBlKFxuICAgIGlmYzogc3BlYy5JbnRlcmZhY2VUeXBlIHwgc3BlYy5DbGFzc1R5cGUsXG4gICAgZGF0YXR5cGU6IGJvb2xlYW4sXG4gICAgcHJveHk6IGJvb2xlYW4sXG4gICk6IHZvaWQge1xuICAgIC8vIFRoZSBrZXkgaXMgaW4gdGhlIGZvcm0gJ21ldGhvZC5uYW1lO3BhcmFtZXRlcjE7cGFyYW1ldGVyMjsnIGV0Y1xuICAgIGNvbnN0IG1ldGhvZHMgPSBuZXcgTWFwPHN0cmluZywgTWV0aG9kRGVmaW5pdGlvbj4oKTtcbiAgICAvKlxuICAgICAgICAgIE9ubHkgZ2V0IHRoZSBmaXJzdCBkZWNsYXJhdGlvbiBlbmNvdW50ZXJlZCwgYW5kIGtlZXAgaXQgaWYgaXQgaXMgYWJzdHJhY3QuIFRoZSBsaXN0IGNvbnRhaW5zIEFMTFxuICAgICAgICAgIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgZW5jb3VudGVyZWQsIGluIHRoZSBvcmRlciBlbmNvdW50ZXJlZC4gQW4gYWJzdHJhY3QgY2xhc3MgY2FuIGhhdmUgY29uY3JldGVcbiAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuIFRoZXJlZm9yZSwgd2Ugb25seSBnZW5lcmF0ZSBtZXRob2RzL3Byb3BlcnRpZXMgaWYgdGhlIGZpcnN0IG1lbWJlciBlbmNvdW50ZXJlZFxuICAgICAgICAgIGlzIHVuaW1wbGVtZW50ZWQuXG4gICAgICAgICovXG4gICAgY29uc3QgZXhjbHVkZWRNZXRob2Q6IHN0cmluZ1tdID0gW107IC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBtZXRob2RzIHdlIGFscmVhZHkgcmFuIGludG8gYW5kIGRvbid0IHdhbnQgdG8gZW1pdFxuICAgIGNvbnN0IGV4Y2x1ZGVkUHJvcGVydGllczogc3RyaW5nW10gPSBbXTsgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIHByb3BlcnRpZXMgd2UgYWxyZWFkeSByYW4gaW50byBhbmQgZG9uJ3Qgd2FudCB0byBlbWl0XG4gICAgY29uc3QgcHJvcGVydGllczogeyBbbmFtZTogc3RyaW5nXTogUHJvcGVydHlEZWZpbml0aW9uIH0gPSB7fTtcbiAgICBjb25zdCBjb2xsZWN0QWJzdHJhY3RNZW1iZXJzID0gKFxuICAgICAgY3VycmVudFR5cGU6IHNwZWMuSW50ZXJmYWNlVHlwZSB8IHNwZWMuQ2xhc3NUeXBlLFxuICAgICkgPT4ge1xuICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGN1cnJlbnRUeXBlLnByb3BlcnRpZXMgPz8gW10pIHtcbiAgICAgICAgaWYgKCFleGNsdWRlZFByb3BlcnRpZXMuaW5jbHVkZXMocHJvcC5uYW1lKSkge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgbmV2ZXIgcnVuIGludG8gdGhpcyBwcm9wZXJ0eSBiZWZvcmUgYW5kIGl0IGlzIGFic3RyYWN0LCB3ZSBrZWVwIGl0XG4gICAgICAgICAgaWYgKHByb3AuYWJzdHJhY3QpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXNbcHJvcC5uYW1lXSA9IHsgcHJvcCwgZGVmaW5pbmdUeXBlOiBjdXJyZW50VHlwZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBleGNsdWRlZFByb3BlcnRpZXMucHVzaChwcm9wLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGN1cnJlbnRUeXBlLm1ldGhvZHMgPz8gW10pIHtcbiAgICAgICAgbGV0IG1ldGhvZFBhcmFtZXRlcnMgPSAnJztcbiAgICAgICAgaWYgKG1ldGhvZC5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgbWV0aG9kLnBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW0pID0+IHtcbiAgICAgICAgICAgIG1ldGhvZFBhcmFtZXRlcnMgKz0gYDske3RoaXMudHlwZXJlc29sdmVyLnRvRG90TmV0VHlwZShcbiAgICAgICAgICAgICAgcGFyYW0udHlwZSxcbiAgICAgICAgICAgICl9YDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4Y2x1ZGVkTWV0aG9kLmluY2x1ZGVzKGAke21ldGhvZC5uYW1lfSR7bWV0aG9kUGFyYW1ldGVyc31gKSkge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgbmV2ZXIgcnVuIGludG8gdGhpcyBtZXRob2QgYmVmb3JlIGFuZCBpdCBpcyBhYnN0cmFjdCwgd2Uga2VlcCBpdFxuICAgICAgICAgIGlmIChtZXRob2QuYWJzdHJhY3QpIHtcbiAgICAgICAgICAgIG1ldGhvZHMuc2V0KGAke21ldGhvZC5uYW1lfSR7bWV0aG9kUGFyYW1ldGVyc31gLCB7XG4gICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgZGVmaW5pbmdUeXBlOiBjdXJyZW50VHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBleGNsdWRlZE1ldGhvZC5wdXNoKGAke21ldGhvZC5uYW1lfSR7bWV0aG9kUGFyYW1ldGVyc31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBiYXNlcyA9IG5ldyBBcnJheTxzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZT4oKTtcbiAgICAgIGJhc2VzLnB1c2goXG4gICAgICAgIC4uLihjdXJyZW50VHlwZS5pbnRlcmZhY2VzID8/IFtdKS5tYXAoKGlmYWNlKSA9PiB0aGlzLmZpbmRUeXBlKGlmYWNlKSksXG4gICAgICApO1xuICAgICAgaWYgKHNwZWMuaXNDbGFzc1R5cGUoY3VycmVudFR5cGUpICYmIGN1cnJlbnRUeXBlLmJhc2UpIHtcbiAgICAgICAgYmFzZXMucHVzaCh0aGlzLmZpbmRUeXBlKGN1cnJlbnRUeXBlLmJhc2UpKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgYmFzZSBvZiBiYXNlcykge1xuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5maW5kVHlwZShiYXNlLmZxbik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlLmtpbmQgIT09IHNwZWMuVHlwZUtpbmQuSW50ZXJmYWNlICYmXG4gICAgICAgICAgdHlwZS5raW5kICE9PSBzcGVjLlR5cGVLaW5kLkNsYXNzXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBCYXNlIGludGVyZmFjZXMgb2YgYW4gaW50ZXJmYWNlIG11c3QgYmUgYW4gaW50ZXJmYWNlIG9yIGEgY2xhc3MgKCR7YmFzZS5mcW59IGlzIG9mIHR5cGUgJHt0eXBlLmtpbmR9KWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb2xsZWN0QWJzdHJhY3RNZW1iZXJzKHR5cGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29sbGVjdEFic3RyYWN0TWVtYmVycyhpZmMpO1xuXG4gICAgLy8gZW1pdCBhbGwgcHJvcGVydGllc1xuICAgIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgT2JqZWN0LmtleXMocHJvcGVydGllcykpIHtcbiAgICAgIGNvbnN0IHByb3AgPSBjbG9uZShwcm9wZXJ0aWVzW3Byb3BOYW1lXSk7XG4gICAgICBwcm9wLnByb3AuYWJzdHJhY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMuZW1pdFByb3BlcnR5KGlmYywgcHJvcC5wcm9wLCBwcm9wLmRlZmluaW5nVHlwZSwgZGF0YXR5cGUsIHByb3h5KTtcbiAgICB9XG4gICAgLy8gZW1pdCBhbGwgdGhlIG1ldGhvZHNcbiAgICBmb3IgKGNvbnN0IG1ldGhvZE5hbWVBbmRQYXJhbWV0ZXJzIG9mIG1ldGhvZHMua2V5cygpKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IG1ldGhvZHMuZ2V0KG1ldGhvZE5hbWVBbmRQYXJhbWV0ZXJzKTtcbiAgICAgIGlmIChvcmlnaW5hbE1ldGhvZCkge1xuICAgICAgICBjb25zdCBtZXRob2QgPSBjbG9uZShvcmlnaW5hbE1ldGhvZCk7XG4gICAgICAgIG1ldGhvZC5tZXRob2QuYWJzdHJhY3QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lbWl0TWV0aG9kKFxuICAgICAgICAgIGlmYyxcbiAgICAgICAgICBtZXRob2QubWV0aG9kLFxuICAgICAgICAgIG1ldGhvZC5kZWZpbmluZ1R5cGUsXG4gICAgICAgICAgLyogZW1pdEZvclByb3h5T3JEYXRhdHlwZSAqLyB0cnVlLFxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAoY29uc3Qgb3ZlcmxvYWRlZE1ldGhvZCBvZiB0aGlzLmNyZWF0ZU92ZXJsb2Fkc0Zvck9wdGlvbmFscyhcbiAgICAgICAgICBtZXRob2QubWV0aG9kLFxuICAgICAgICApKSB7XG4gICAgICAgICAgb3ZlcmxvYWRlZE1ldGhvZC5hYnN0cmFjdCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZW1pdE1ldGhvZChcbiAgICAgICAgICAgIGlmYyxcbiAgICAgICAgICAgIG92ZXJsb2FkZWRNZXRob2QsXG4gICAgICAgICAgICBtZXRob2QuZGVmaW5pbmdUeXBlLFxuICAgICAgICAgICAgLyogZW1pdEZvclByb3h5T3JEYXRhdHlwZSAqLyB0cnVlLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYSBwcm9wZXJ0eVxuICAgKi9cbiAgcHJpdmF0ZSBlbWl0UHJvcGVydHkoXG4gICAgY2xzOiBzcGVjLlR5cGUsXG4gICAgcHJvcDogc3BlYy5Qcm9wZXJ0eSxcbiAgICBkZWZpbmluZ1R5cGU6IHNwZWMuVHlwZSxcbiAgICBkYXRhdHlwZSA9IGZhbHNlLFxuICAgIHByb3h5ID0gZmFsc2UsXG4gICk6IHZvaWQge1xuICAgIHRoaXMuZW1pdE5ld0xpbmVJZk5lY2Vzc2FyeSgpO1xuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy50eXBlcmVzb2x2ZXIudG9OYXRpdmVGcW4oY2xzLmZxbik7XG4gICAgY29uc3QgYWNjZXNzID0gdGhpcy5yZW5kZXJBY2Nlc3NMZXZlbChwcm9wKTtcbiAgICBjb25zdCBzdGF0aWNLZXlXb3JkID0gcHJvcC5zdGF0aWMgPyAnc3RhdGljICcgOiAnJztcbiAgICBjb25zdCBwcm9wTmFtZSA9IHRoaXMubmFtZXV0aWxzLmNvbnZlcnRQcm9wZXJ0eU5hbWUocHJvcC5uYW1lKTtcblxuICAgIHRoaXMuZG90bmV0RG9jR2VuZXJhdG9yLmVtaXREb2NzKHByb3AsIHtcbiAgICAgIGFwaTogJ21lbWJlcicsXG4gICAgICBmcW46IGRlZmluaW5nVHlwZS5mcW4sXG4gICAgICBtZW1iZXJOYW1lOiBwcm9wLm5hbWUsXG4gICAgfSk7XG4gICAgaWYgKHByb3Aub3B0aW9uYWwpIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKCdbSnNpaU9wdGlvbmFsXScpO1xuICAgIH1cbiAgICB0aGlzLmRvdG5ldFJ1bnRpbWVHZW5lcmF0b3IuZW1pdEF0dHJpYnV0ZXNGb3JQcm9wZXJ0eShwcm9wKTtcblxuICAgIGxldCBpc092ZXJyaWRlS2V5V29yZCA9ICcnO1xuICAgIGxldCBpc1ZpcnR1YWxLZXlXb3JkID0gJyc7XG4gICAgbGV0IGlzQWJzdHJhY3RLZXl3b3JkID0gJyc7XG5cbiAgICAvLyBJZiB0aGUgcHJvcCBwYXJlbnQgaXMgYSBjbGFzc1xuICAgIGlmIChzcGVjLmlzQ2xhc3NUeXBlKGNscykpIHtcbiAgICAgIGNvbnN0IGltcGxlbWVudGVkSW5CYXNlID0gdGhpcy5pc01lbWJlckRlZmluZWRPbkFuY2VzdG9yKFxuICAgICAgICBjbHMgYXMgc3BlYy5DbGFzc1R5cGUsXG4gICAgICAgIHByb3AsXG4gICAgICApO1xuICAgICAgaWYgKGltcGxlbWVudGVkSW5CYXNlIHx8IGRhdGF0eXBlIHx8IHByb3h5KSB7XG4gICAgICAgIC8vIE92ZXJyaWRlIGlmIHRoZSBwcm9wZXJ0eSBpcyBpbiBhIGRhdGF0eXBlIG9yIHByb3h5IGNsYXNzIG9yIGRlY2xhcmVkIGluIGEgcGFyZW50IGNsYXNzLiBJZiB0aGUgbWVtYmVyIGlzXG4gICAgICAgIC8vIHN0YXRpYywgdXNlIHRoZSBcIm5ld1wiIGtleXdvcmQgaW5zdGVhZCwgdG8gaW5kaWNhdGUgd2UgYXJlIGludGVudGlvbmFsbHkgaGlkaW5nIHRoZSBhbmNlc3RvciBkZWNsYXJhdGlvbiAoYXNcbiAgICAgICAgLy8gQyMgZG9lcyBub3QgaW5oZXJpdCBzdGF0aWNzLCB0aGV5IGNhbiBiZSBoaWRkZW4gYnV0IG5vdCBvdmVycmlkZGVuKS5UaGUgXCJuZXdcIiBrZXl3b3JkIGlzIG9wdGlvbmFsIGluIHRoaXNcbiAgICAgICAgLy8gY29udGV4dCwgYnV0IGhlbHBzIGNsYXJpZnkgaW50ZW50aW9uLlxuICAgICAgICBpc092ZXJyaWRlS2V5V29yZCA9IHByb3Auc3RhdGljID8gJ25ldyAnIDogJ292ZXJyaWRlICc7XG4gICAgICB9IGVsc2UgaWYgKHByb3AuYWJzdHJhY3QpIHtcbiAgICAgICAgLy8gQWJzdHJhY3QgbWVtYmVycyBnZXQgZGVjb3JhdGVkIGFzIHN1Y2hcbiAgICAgICAgaXNBYnN0cmFjdEtleXdvcmQgPSAnYWJzdHJhY3QgJztcbiAgICAgIH0gZWxzZSBpZiAoIXByb3Auc3RhdGljICYmICFpbXBsZW1lbnRlZEluQmFzZSkge1xuICAgICAgICAvLyBWaXJ0dWFsIGlmIHRoZSBwcm9wIGlzIG5vdCBzdGF0aWMsIGFuZCBpcyBub3QgaW1wbGVtZW50ZWQgaW4gYmFzZSBtZW1iZXIsIHRoaXMgd2F5IHdlIGNhbiBsYXRlciBvdmVycmlkZSBpdC5cbiAgICAgICAgaXNWaXJ0dWFsS2V5V29yZCA9ICd2aXJ0dWFsICc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcFR5cGVGUU4gPSB0aGlzLnR5cGVyZXNvbHZlci50b0RvdE5ldFR5cGUocHJvcC50eXBlKTtcbiAgICBjb25zdCBpc09wdGlvbmFsID0gcHJvcC5vcHRpb25hbCA/ICc/JyA6ICcnO1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IGAke2FjY2Vzc30gJHtpc0Fic3RyYWN0S2V5d29yZH0ke2lzVmlydHVhbEtleVdvcmR9JHtzdGF0aWNLZXlXb3JkfSR7aXNPdmVycmlkZUtleVdvcmR9JHtwcm9wVHlwZUZRTn0ke2lzT3B0aW9uYWx9ICR7cHJvcE5hbWV9YDtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKHN0YXRlbWVudCk7XG5cbiAgICAvLyBFbWl0IGdldHRlcnNcbiAgICBpZiAoZGF0YXR5cGUgfHwgcHJvcC5jb25zdCB8fCBwcm9wLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLmNvZGUubGluZSgnZ2V0OycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm9uLW9wdGlvbmFsLCBhZGQgYSBiYW5nIHRvIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZ1xuICAgICAgY29uc3QgYmFuZyA9IHByb3Aub3B0aW9uYWwgPyAnJyA6ICchJztcbiAgICAgIGlmIChwcm9wLnN0YXRpYykge1xuICAgICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgICBgZ2V0ID0+IEdldFN0YXRpY1Byb3BlcnR5PCR7cHJvcFR5cGVGUU59JHtpc09wdGlvbmFsfT4odHlwZW9mKCR7Y2xhc3NOYW1lfSkpJHtiYW5nfTtgLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgICAgYGdldCA9PiBHZXRJbnN0YW5jZVByb3BlcnR5PCR7cHJvcFR5cGVGUU59JHtpc09wdGlvbmFsfT4oKSR7YmFuZ307YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbWl0IHNldHRlcnNcbiAgICBpZiAoZGF0YXR5cGUgfHwgKCFwcm9wLmltbXV0YWJsZSAmJiBwcm9wLmFic3RyYWN0KSkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJ3NldDsnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFwcm9wLmltbXV0YWJsZSkge1xuICAgICAgICBpZiAocHJvcC5zdGF0aWMpIHtcbiAgICAgICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgICAgIGBzZXQgPT4gU2V0U3RhdGljUHJvcGVydHkodHlwZW9mKCR7Y2xhc3NOYW1lfSksIHZhbHVlKTtgLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb2RlLmxpbmUoJ3NldCA9PiBTZXRJbnN0YW5jZVByb3BlcnR5KHZhbHVlKTsnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICB0aGlzLmZsYWdGaXJzdE1lbWJlcldyaXR0ZW4odHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYSBjb25zdGFudCBwcm9wZXJ0eVxuICAgKi9cbiAgcHJpdmF0ZSBlbWl0Q29uc3RQcm9wZXJ0eShjbHM6IHNwZWMuQ2xhc3NUeXBlLCBwcm9wOiBzcGVjLlByb3BlcnR5KTogdm9pZCB7XG4gICAgdGhpcy5lbWl0TmV3TGluZUlmTmVjZXNzYXJ5KCk7XG4gICAgdGhpcy5mbGFnRmlyc3RNZW1iZXJXcml0dGVuKHRydWUpO1xuICAgIGNvbnN0IHByb3BUeXBlID0gdGhpcy50eXBlcmVzb2x2ZXIudG9Eb3ROZXRUeXBlKHByb3AudHlwZSk7XG4gICAgY29uc3QgaXNPcHRpb25hbCA9IHByb3Aub3B0aW9uYWwgPyAnPycgOiAnJztcbiAgICB0aGlzLmRvdG5ldERvY0dlbmVyYXRvci5lbWl0RG9jcyhwcm9wLCB7XG4gICAgICBhcGk6ICdtZW1iZXInLFxuICAgICAgZnFuOiBjbHMuZnFuLFxuICAgICAgbWVtYmVyTmFtZTogcHJvcC5uYW1lLFxuICAgIH0pO1xuICAgIHRoaXMuZG90bmV0UnVudGltZUdlbmVyYXRvci5lbWl0QXR0cmlidXRlc0ZvclByb3BlcnR5KHByb3ApO1xuICAgIGNvbnN0IGFjY2VzcyA9IHRoaXMucmVuZGVyQWNjZXNzTGV2ZWwocHJvcCk7XG4gICAgY29uc3QgcHJvcE5hbWUgPSB0aGlzLm5hbWV1dGlscy5jb252ZXJ0UHJvcGVydHlOYW1lKHByb3AubmFtZSk7XG4gICAgY29uc3Qgc3RhdGljS2V5d29yZCA9IHByb3Auc3RhdGljID8gJ3N0YXRpYyAnIDogJyc7XG5cbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYCR7YWNjZXNzfSAke3N0YXRpY0tleXdvcmR9JHtwcm9wVHlwZX0ke2lzT3B0aW9uYWx9ICR7cHJvcE5hbWV9YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5saW5lKCdnZXQ7Jyk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLnR5cGVyZXNvbHZlci50b05hdGl2ZUZxbihjbHMuZnFuKTtcbiAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm9uLW9wdGlvbmFsLCBhZGQgYSBiYW5nIHRvIHNpbGVuY2UgdGhlIGNvbXBpbGVyIHdhcm5pbmdcbiAgICBjb25zdCBiYW5nID0gcHJvcC5vcHRpb25hbCA/ICcnIDogJyEnO1xuICAgIGNvbnN0IGluaXRpYWxpemVyID0gcHJvcC5zdGF0aWNcbiAgICAgID8gYD0gR2V0U3RhdGljUHJvcGVydHk8JHtwcm9wVHlwZX0+KHR5cGVvZigke2NsYXNzTmFtZX0pKSR7YmFuZ307YFxuICAgICAgOiBgPSBHZXRJbnN0YW5jZVByb3BlcnR5PCR7cHJvcFR5cGV9Pih0eXBlb2YoJHtjbGFzc05hbWV9KSkke2Jhbmd9O2A7XG4gICAgdGhpcy5jb2RlLmxpbmUoaW5pdGlhbGl6ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJBY2Nlc3NMZXZlbChtZXRob2Q6IHNwZWMuTWV0aG9kIHwgc3BlYy5Qcm9wZXJ0eSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG1ldGhvZC5wcm90ZWN0ZWQgPyAncHJvdGVjdGVkJyA6ICdwdWJsaWMnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc05lc3RlZCh0eXBlOiBzcGVjLlR5cGUpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuYXNzZW1ibHkudHlwZXMgfHwgIXR5cGUubmFtZXNwYWNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IGAke3R5cGUuYXNzZW1ibHl9LiR7dHlwZS5uYW1lc3BhY2V9YDtcbiAgICByZXR1cm4gcGFyZW50IGluIHRoaXMuYXNzZW1ibHkudHlwZXM7XG4gIH1cblxuICBwcml2YXRlIHRvQ1NoYXJwRmlsZVBhdGgodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dHlwZX0uY3NgO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRmlsZUlmTmVlZGVkKFxuICAgIHR5cGVOYW1lOiBzdHJpbmcsXG4gICAgbmFtZXNwYWNlOiBzdHJpbmcsXG4gICAgaXNOZXN0ZWQ6IGJvb2xlYW4sXG4gICAgdXNpbmdEZXB1dHkgPSB0cnVlLFxuICApOiB2b2lkIHtcbiAgICAvLyBJZiBOZXN0ZWQgdHlwZSwgd2Ugc2hvdWxkbid0IG9wZW4vY2xvc2UgYSBmaWxlXG4gICAgaWYgKGlzTmVzdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZG90bmV0UGFja2FnZUlkID0gdGhpcy5hc3NlbWJseS50YXJnZXRzPy5kb3RuZXQ/LnBhY2thZ2VJZDtcbiAgICBpZiAoIWRvdG5ldFBhY2thZ2VJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIG1vZHVsZSAke3RoaXMuYXNzZW1ibHkubmFtZX0gZG9lcyBub3QgaGF2ZSBhIGRvdG5ldC5wYWNrYWdlSWQgc2V0dGluZ2AsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBmaWxlUGF0aCA9IG5hbWVzcGFjZS5yZXBsYWNlKC9bLl0vZywgJy8nKTtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoXG4gICAgICBwYXRoLmpvaW4oZG90bmV0UGFja2FnZUlkLCBmaWxlUGF0aCwgdGhpcy50b0NTaGFycEZpbGVQYXRoKHR5cGVOYW1lKSksXG4gICAgKTtcbiAgICBpZiAodXNpbmdEZXB1dHkpIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKCd1c2luZyBBbWF6b24uSlNJSS5SdW50aW1lLkRlcHV0eTsnKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgfVxuXG4gICAgLy8gU3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgbWlzc2luZyBYTUxEb2MsIE9ic29sZXRlIGluY29uc2lzdGVuY2llc1xuICAgIHRoaXMuY29kZS5saW5lKCcjcHJhZ21hIHdhcm5pbmcgZGlzYWJsZSBDUzA2NzIsQ1MwODA5LENTMTU5MScpO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG5cbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGBuYW1lc3BhY2UgJHtuYW1lc3BhY2V9YCk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlRmlsZUlmTmVlZGVkKFxuICAgIHR5cGVOYW1lOiBzdHJpbmcsXG4gICAgbmFtZXNwYWNlOiBzdHJpbmcsXG4gICAgaXNOZXN0ZWQ6IGJvb2xlYW4sXG4gICk6IHZvaWQge1xuICAgIGlmIChpc05lc3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgY29uc3QgZG90bmV0UGFja2FnZUlkID0gdGhpcy5hc3NlbWJseS50YXJnZXRzPy5kb3RuZXQ/LnBhY2thZ2VJZDtcbiAgICBpZiAoIWRvdG5ldFBhY2thZ2VJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIG1vZHVsZSAke3RoaXMuYXNzZW1ibHkubmFtZX0gZG9lcyBub3QgaGF2ZSBhIGRvdG5ldC5wYWNrYWdlSWQgc2V0dGluZ2AsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBmaWxlUGF0aCA9IG5hbWVzcGFjZS5yZXBsYWNlKC9bLl0vZywgJy8nKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKFxuICAgICAgcGF0aC5qb2luKGRvdG5ldFBhY2thZ2VJZCwgZmlsZVBhdGgsIHRoaXMudG9DU2hhcnBGaWxlUGF0aCh0eXBlTmFtZSkpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBmaXJzdE1lbWJlciBib29sZWFuIGZsYWcgdG8ga2VlcCB0cmFjayBvZiB0aGUgZmlyc3QgbWVtYmVyIG9mIGEgbmV3IGZpbGVcbiAgICpcbiAgICogVGhpcyBhdm9pZHMgdW5uZWNlc3Nhcnkgd2hpdGUgbGluZXNcbiAgICovXG4gIHByaXZhdGUgZmxhZ0ZpcnN0TWVtYmVyV3JpdHRlbihmaXJzdDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZmlyc3RNZW1iZXJXcml0dGVuID0gZmlyc3Q7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYSBuZXcgbGluZSBwcmlvciB0byB3cml0aW5nIGEgbmV3IHByb3BlcnR5LCBtZXRob2QsIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgdGhlIGZpcnN0IG9uZSBpbiB0aGUgY2xhc3NcbiAgICpcbiAgICogVGhpcyBhdm9pZHMgdW5uZWNlc3Nhcnkgd2hpdGUgbGluZXMuXG4gICAqL1xuICBwcml2YXRlIGVtaXROZXdMaW5lSWZOZWNlc3NhcnkoKTogdm9pZCB7XG4gICAgLy8gSWYgdGhlIGZpcnN0IG1lbWJlciBoYXMgYWxyZWFkeSBiZWVuIHdyaXR0ZW4sIGl0IGlzIHNhZmUgdG8gd3JpdGUgYSBuZXcgbGluZVxuICAgIGlmICh0aGlzLmZpcnN0TWVtYmVyV3JpdHRlbikge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maXJzdE1lbWJlcldyaXR0ZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXRBc3NlbWJseURvY3MoKSB7XG4gICAgdGhpcy5lbWl0TmFtZXNwYWNlRG9jcyhcbiAgICAgIHRoaXMuYXNzZW1ibHkudGFyZ2V0cyEuZG90bmV0IS5uYW1lc3BhY2UsXG4gICAgICB0aGlzLmFzc2VtYmx5Lm5hbWUsXG4gICAgICB0aGlzLmFzc2VtYmx5LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdCBhbiB1bnVzZWQsIGVtcHR5IGNsYXNzIGNhbGxlZCBgTmFtZXNwYWNlRG9jYCB0byBhdHRhY2ggdGhlIG1vZHVsZSBSRUFETUUgdG9cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gd2F5IHRvIGF0dGFjaCBkb2MgY29tbWVudHMgdG8gYSBuYW1lc3BhY2UgaW4gQyMsIGFuZCB0aGlzIHRyaWNrIGhhcyBiZWVuXG4gICAqIHNlbWktc3RhbmRhcmRpemVkIGJ5IE5Eb2MgYW5kIFNhbmRjYXN0bGUgSGVscCBGaWxlIEJ1aWxkZXIuXG4gICAqXG4gICAqIERvY0ZYIGRvZXNuJ3Qgc3VwcG9ydCBpdCBvdXQgb2YgdGhlIGJveCwgYnV0IHdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0aGVyZSB3aXRoIGFcbiAgICogYml0IG9mIGhhY2tlcnkuXG4gICAqXG4gICAqIEluIGFueSBjYXNlLCB3ZSBuZWVkIGEgcGxhY2UgdG8gYXR0YWNoIHRoZSBkb2NzIHdoZXJlIHRoZXkgY2FuIGJlIHRyYW5zcG9ydGVkIGFyb3VuZCxcbiAgICogbWlnaHQgYXMgd2VsbCBiZSB0aGlzIG1ldGhvZC5cbiAgICovXG4gIHByaXZhdGUgZW1pdE5hbWVzcGFjZURvY3MoXG4gICAgbmFtZXNwYWNlOiBzdHJpbmcsXG4gICAganNpaUZxbjogc3RyaW5nLFxuICAgIGRvY1NvdXJjZTogc3BlYy5UYXJnZXRhYmxlICYgc3BlYy5SZWFkTWVDb250YWluZXIsXG4gICkge1xuICAgIGlmICghZG9jU291cmNlLnJlYWRtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9ICdOYW1lc3BhY2VEb2MnO1xuICAgIHRoaXMub3BlbkZpbGVJZk5lZWRlZChjbGFzc05hbWUsIG5hbWVzcGFjZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIHRoaXMuZG90bmV0RG9jR2VuZXJhdG9yLmVtaXRNYXJrZG93bkFzUmVtYXJrcyhkb2NTb3VyY2UucmVhZG1lLm1hcmtkb3duLCB7XG4gICAgICBhcGk6ICdtb2R1bGVSZWFkbWUnLFxuICAgICAgbW9kdWxlRnFuOiBqc2lpRnFuLFxuICAgIH0pO1xuICAgIHRoaXMuZW1pdEhpZGVBdHRyaWJ1dGUoKTtcbiAgICAvLyBUcmFkaXRpb25hbGx5IHRoaXMgY2xhc3MgaXMgbWFkZSAnaW50ZXJuYWwnLCBidXQgdGhhdCBpbnRlcmFjdHMgcG9vcmx5IHdpdGggRG9jRlgncyBkZWZhdWx0IGZpbHRlcnNcbiAgICAvLyB3aGljaCBhcmVuJ3Qgb3ZlcnJpZGFibGUuIFNvIHdlIG1ha2UgaXQgcHVibGljLCBidXQgdXNlIGF0dHJpYnV0ZXMgdG8gaGlkZSBpdCBmcm9tIHVzZXJzJyBJbnRlbGxpU2Vuc2UsXG4gICAgLy8gc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZSBjbGFzcyBpbiBEb2NGWC5cbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGBwdWJsaWMgY2xhc3MgJHtjbGFzc05hbWV9YCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB0aGlzLmNsb3NlRmlsZUlmTmVlZGVkKGNsYXNzTmFtZSwgbmFtZXNwYWNlLCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdCBhbiBhdHRyaWJ1dGUgdGhhdCB3aWxsIGhpZGUgdGhlIHN1YnNlcXVlbnQgQVBJIGVsZW1lbnQgZnJvbSB1c2Vyc1xuICAgKi9cbiAgcHJpdmF0ZSBlbWl0SGlkZUF0dHJpYnV0ZSgpIHtcbiAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICdbU3lzdGVtLkNvbXBvbmVudE1vZGVsLkVkaXRvckJyb3dzYWJsZShTeXN0ZW0uQ29tcG9uZW50TW9kZWwuRWRpdG9yQnJvd3NhYmxlU3RhdGUuTmV2ZXIpXScsXG4gICAgKTtcbiAgfVxufVxuIl19
|