@pega/angular-sdk-components 0.242.13 → 0.242.15

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.
@@ -68,7 +68,17 @@ export class AngularPConnectService {
68
68
  let fnUnsubscribe;
69
69
  // console.log( `Bridge subscribing: ${theCompName} `);
70
70
  if (inComp) {
71
- fnUnsubscribe = this.getStore().subscribe(inCallback);
71
+ let bSubscribed = true;
72
+ const wrappedCallback = () => {
73
+ if (bSubscribed && inCallback) {
74
+ inCallback();
75
+ }
76
+ };
77
+ const storeUnsubscribe = this.getStore().subscribe(wrappedCallback);
78
+ fnUnsubscribe = () => {
79
+ bSubscribed = false;
80
+ storeUnsubscribe();
81
+ };
72
82
  }
73
83
  return fnUnsubscribe;
74
84
  }
@@ -441,4 +451,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
441
451
  providedIn: 'root'
442
452
  }]
443
453
  }], ctorParameters: () => [{ type: i1.ProgressSpinnerService }, { type: i2.ErrorMessagesService }, { type: i3.Utils }] });
444
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1wY29ubmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9fYnJpZGdlL2FuZ3VsYXItcGNvbm5lY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sT0FBTyxNQUFNLGlCQUFpQixDQUFDO0FBR3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7QUFlMUMsTUFBTSxPQUFPLHNCQUFzQjtJQW1CakMsNENBQTRDO2FBQzdCLGFBQVEsR0FBRyxLQUFLLEFBQVIsQ0FBUztJQUVoQyxZQUNVLFNBQWlDLEVBQ2pDLFNBQStCLEVBQy9CLEtBQVk7UUFGWixjQUFTLEdBQVQsU0FBUyxDQUF3QjtRQUNqQyxjQUFTLEdBQVQsU0FBUyxDQUFzQjtRQUMvQixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBeEJ0Qjs7V0FFRztRQUNLLGFBQVEsR0FBUSxJQUFJLENBQUM7UUFFN0I7O1dBRUc7UUFDSyx1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFFL0I7Ozs7O1dBS0c7UUFDSyxzQkFBaUIsR0FBYSxFQUFFLENBQUM7UUFVdkMseURBQXlEO1FBQ3pELDREQUE0RDtRQUM1RCxvREFBb0Q7UUFDcEQsa0RBQWtEO1FBQ2xELCtDQUErQztRQUMvQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFMUQsNkRBQTZEO1FBQzdELCtCQUErQjtRQUMvQiwrREFBK0Q7UUFDL0QsV0FBVztRQUNYLGtFQUFrRTtRQUNsRSxJQUFJO0lBQ04sQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLGtCQUFrQixJ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LGNBQWMsQ0FBQyxNQUFNO1FBQzNCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDL0IsSUFBSSxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLEtBQUssQ0FBQyx3REFBd0QsUUFBUSxvQkFBb0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzdILE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQztJQUNILENBQUM7K0dBcGZVLHNCQUFzQjttSEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07OzRGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsJztcbmltcG9ydCB7IFByb2dyZXNzU3Bpbm5lclNlcnZpY2UgfSBmcm9tICcuLi9fbWVzc2FnZXMvcHJvZ3Jlc3Mtc3Bpbm5lci5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZXNTZXJ2aWNlIH0gZnJvbSAnLi4vX21lc3NhZ2VzL2Vycm9yLW1lc3NhZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi9faGVscGVycy91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5ndWxhclBDb25uZWN0RGF0YSB7XG4gIGNvbXBJRD86IHN0cmluZztcbiAgdW5zdWJzY3JpYmVGbj86IEZ1bmN0aW9uO1xuICB2YWxpZGF0ZU1lc3NhZ2U/OiBzdHJpbmc7XG4gIGFjdGlvbnM/OiB7XG4gICAgb25DaGFuZ2U6IEZ1bmN0aW9uO1xuICAgIG9uQmx1cjogRnVuY3Rpb247XG4gIH07XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJQQ29ubmVjdFNlcnZpY2Uge1xuICAvKipcbiAgICogTG9jYWwgdmFyaWFibGUgZm9yIGFjY2VzcyB0byB0aGUgc3RvcmUgb25jZSB0aGUgc2VydmljZSBpcyBjb25uZWN0ZWQgdG8gaXQuXG4gICAqL1xuICBwcml2YXRlIHRoZVN0b3JlOiBhbnkgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBMb2NhbCB2YXJpYWJsZSB1c2VkIHRvIGNvbXB1dGUgdGhlIG5leHQgY29tcG9uZW50SURcbiAgICovXG4gIHByaXZhdGUgY291bnRlckNvbXBvbmVudElEID0gMDtcblxuICAvKipcbiAgICogTG9jYWwgYXJyYXkgdXNlZCB0byBzdG9yZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gY29tcG9uZW50IHRvIGl0cyBtb3N0IHJlY2VudCBcInByb3BzXCJcbiAgICogIHdoZXJlIFwicHJvcHNcIiBpcyB0aGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbXBvbmVudCdzIGdldENvbmZpZ1Byb3BzIGFsb25nIHdpdGhcbiAgICogYW55dGhpbmcgYWRkZWQgYnkgcG9wdWxhdGVBZGRpdGlvbmFsUHJvcHMuXG4gICAqIEVhY2ggZW50cnkgaXM6IHsgX19jb21wb25lbnRJRF9fOiBfdGhlIGNvbXBvbmVudCdzIG1vc3QgcmVjZW50IHByb3BzXyB9XG4gICAqL1xuICBwcml2YXRlIGNvbXBvbmVudFByb3BzQXJyOiBPYmplY3RbXSA9IFtdO1xuXG4gIC8qIFVzZWQgdG8gdG9nZ2xlIHNvbWUgY2xhc3Mtd2lkZSBsb2dnaW5nICovXG4gIHByaXZhdGUgc3RhdGljIGJMb2dnaW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwc1NlcnZpY2U6IFByb2dyZXNzU3Bpbm5lclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlclNlcnZpY2U6IEVycm9yTWVzc2FnZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXRpbHM6IFV0aWxzXG4gICkge1xuICAgIC8vIEVzdGFibGlzaCBuZWNlc3Nhcnkgb3ZlcnJpZGUgZmxhZ3MgZm9yIG91ciB1c2Ugb2YgQ29yZVxuICAgIC8vIGNvbnN0IGNvcmVPdmVycmlkZXMgPSB7IFwiZHluYW1pY0xvYWRDb21wb25lbnRzXCI6IGZhbHNlIH07XG4gICAgLy8gbGV0IGNvcmVPdmVycmlkZXMgPSBQQ29yZS5nZXRCZWhhdmlvck92ZXJyaWRlcygpO1xuICAgIC8vIGNvcmVPdmVycmlkZXNbXCJkeW5hbWljTG9hZENvbXBvbmVudHNcIl0gPSBmYWxzZTtcbiAgICAvLyBQQ29yZS5zZXRCZWhhdmlvck92ZXJyaWRlcyggY29yZU92ZXJyaWRlcyApO1xuICAgIFBDb3JlLnNldEJlaGF2aW9yT3ZlcnJpZGUoJ2R5bmFtaWNMb2FkQ29tcG9uZW50cycsIGZhbHNlKTtcblxuICAgIC8vIEFsd2F5cyBiZXN0IHRvIHVzZSBkZWVwIG9iamVjdCBjb21wYXJlIHdoZW4gaXQncyBhdmFpbGFibGVcbiAgICAvLyBpZiAoaXNFcXVhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gY29uc29sZS5sb2coYEFuZ3VsYXJQQ29ubmVjdCBpcyB1c2luZyBkZWVwIG9iamVjdCBjb21wYXJlYCk7XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyBjb25zb2xlLmxvZyhgQW5ndWxhclBDb25uZWN0IGlzIHVzaW5nIEpTT04uc3RyaW5naWZ5IGNvbXBhcmVgKTtcbiAgICAvLyB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHVuaXF1ZSAoZm9yIHRoaXMgc2Vzc2lvbikgQ29tcG9uZW50SUQgdGhhdCBzaG91bGRcbiAgICogYmUgdXNlZCBmb3IgdGhhdCBjb21wb25lbnQgdG8gdXBkYXRlIGl0cyBtb3N0IHJlY2VudCBwcm9wc1xuICAgKiAod2hpY2ggY2FuIGFsc28gYmUgY29tcGFyZWQgYWdhaW5zdCBpdHMgcHJldmlvdXMgdmFsdWVcbiAgICogYmVmb3JlIHVwZGF0aW5nKS4gTm90ZSB0aGF0IHRoaXMgcmV0dXJucyBhIHN0cmluZyBzbyB3ZSBjYW4gdXNlXG4gICAqIGl0IGFzIGEga2V5IGluIGFuIGFzc29jaWF0aXZlIGFycmF5XG4gICAqIEByZXR1cm5zIHRoZSBuZXh0IGNvbXBvbmVudElEXG4gICAqL1xuICBwcml2YXRlIGdldE5leHRDb21wb25lbnRJZCgpOiBzdHJpbmcge1xuICAgIHRoaXMuY291bnRlckNvbXBvbmVudElEICs9IDE7XG4gICAgLy8gTm90ZSB0aGF0IHdlIHVzZSB0aGUgc3RyaW5nIHZlcnNpb24gb2YgdGhlIG51bWJlciBzbyB3ZSBoYXZlIGFuXG4gICAgLy8gIGFzc29jaWF0aXZlIGFycmF5IHRoYXQgd2UgY2FuIGNsZWFuIHVwIGxhdGVyLCBpZiBuZWVkZWQuXG4gICAgcmV0dXJuIHRoaXMuY291bnRlckNvbXBvbmVudElELnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIENhbGxpbmcgb2JqZWN0IChpbkNvbXApIHN1YnNjcmliZXMgdG8gc3RvcmUgY2hhbmdlcy5cbiAgICogQHBhcmFtIGluQ29tcCBUaGUgY29tcG9uZW50IHRoYXQncyBzdWJzY3JpYmluZyB0byB0aGUgc3RvcmVcbiAgICogQHBhcmFtIGluQ2FsbGJhY2sgVGhlIGNvbXBvbmVudCdzIGNhbGxiYWNrIGZ1bmN0aW9uICh0eXBpY2FsbHkgY2FsbGVkIG9uU3RhdGVDaGFuZ2UpIHRoYXQgd2lsbFxuICAgKiBiZSBjYWxsZWQgd2hlbiB0aGUgc3RvcmUgY2hhbmdlcy5cbiAgICogQHJldHVybnMgVGhlICoqdW5zdWJzY3JpYmUqKiBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IG5lZWRzXG4gICAqIHRvIHVuc3Vic2NyaWJlIGZyb20gdGhlIHN0b3JlLiAoVHlwaWNhbGx5IGR1cmluZyBuZ09uRGVzdHJveSlcbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9TdG9yZShpbkNvbXA6IGFueSA9IG51bGwsIGluQ2FsbGJhY2s6IEZ1bmN0aW9uIHwgbnVsbCA9IG51bGwpOiBGdW5jdGlvbiB7XG4gICAgLy8gY29uc3QgdGhlQ29tcE5hbWU6IHN0cmluZyA9IGluQ29tcCA/IGAke2luQ29tcC5jb25zdHJ1Y3Rvci5uYW1lfWAgOiAnbm8gY29tcG9uZW50IHByb3ZpZGVkJztcbiAgICBsZXQgZm5VbnN1YnNjcmliZTtcbiAgICAvLyBjb25zb2xlLmxvZyggYEJyaWRnZSBzdWJzY3JpYmluZzogJHt0aGVDb21wTmFtZX0gYCk7XG4gICAgaWYgKGluQ29tcCkge1xuICAgICAgZm5VbnN1YnNjcmliZSA9IHRoaXMuZ2V0U3RvcmUoKS5zdWJzY3JpYmUoaW5DYWxsYmFjayk7XG4gICAgfVxuICAgIHJldHVybiBmblVuc3Vic2NyaWJlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIENvbXBvbmVudCdzIHByb3BlcnRpZXMgdGhhdCBhcmUgdXNlZCAoYSkgdG8gcG9wdWxhdGUgY29tcG9uZW50UHJvcHNBcnJcbiAgLy8gIGFuZCAoYikgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlIGl0c2VsZiAocmUtcmVuZGVyKVxuICAgKiBAcGFyYW0gaW5Db21wIFRoZSBjb21wb25lbnQgd2hvc2UgcHJvcGVydGllcyBhcmUgYmVpbmcgb2J0YWluZWRcbiAgICovXG4gIHByaXZhdGUgZ2V0Q29tcG9uZW50UHJvcHMoaW5Db21wOiBhbnkgPSBudWxsKTogT2JqZWN0IHtcbiAgICBsZXQgY29tcFByb3BzOiBhbnkgPSB7fTtcbiAgICBsZXQgYWRkUHJvcHMgPSB7fTtcblxuICAgIGlmIChpbkNvbXAgPT09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogZ2V0Q29tcG9uZW50UHJvcHMgY2FsbGVkIHdpdGggYmFkIGNvbXBvbmVudDogJHtpbkNvbXB9YCk7XG4gICAgfVxuXG4gICAgLy8gaWYgKChpbkNvbXAuY29uc3RydWN0b3IubmFtZSA9PT0gXCJGbG93Q29udGFpbmVyQ29tcG9uZW50XCIpIHx8IChpbkNvbXAuY29uc3RydWN0b3IubmFtZSA9PT0gXCJWaWV3Q29udGFpbmVyQ29tcG9uZW50XCIpXG4gICAgLy8gICAgIHx8IChpbkNvbXAuY29uc3RydWN0b3IubmFtZSA9PT0gXCJWaWV3Q29tcG9uZW50XCIpIHx8IChpbkNvbXAuY29uc3RydWN0b3IubmFtZSA9PT0gXCJEZWZlckxvYWRDb21wb25lbnRcIikpIHtcbiAgICAvLyAgIGNvbnNvbGUubG9nKGAtLT4gQW5ndWxhclBDb25uZWN0IGdldENvbXBvbmVudFByb3BzOiAke2luQ29tcC5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgIC8vIH1cblxuICAgIGlmIChpbkNvbXAuYWRkaXRpb25hbFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5Db21wLmFkZGl0aW9uYWxQcm9wcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYWRkUHJvcHMgPSBpbkNvbXAucENvbm4kLnJlc29sdmVDb25maWdQcm9wcyhpbkNvbXAuYWRkaXRpb25hbFByb3BzKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluQ29tcC5hZGRpdGlvbmFsUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgcHJvcHNUb0FkZCA9IGluQ29tcC5hZGRpdGlvbmFsUHJvcHMoUENvcmUuZ2V0U3RvcmUoKS5nZXRTdGF0ZSgpLCBpbkNvbXAucENvbm4kKTtcbiAgICAgICAgYWRkUHJvcHMgPSBpbkNvbXAucENvbm4kLnJlc29sdmVDb25maWdQcm9wcyhwcm9wc1RvQWRkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wUHJvcHMgPSBpbkNvbXAucENvbm4kLmdldENvbmZpZ1Byb3BzKCk7XG5cbiAgICAvLyBjb25zdCBjb21wb25lbnROYW1lID0gaW5Db21wLmNvbnN0cnVjdG9yLm5hbWU7XG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbW1lbnQgaXMgZnJvbSB0aGUgTmVidWxhL0NvbnN0ZWxsYXRpb24gdmVyc2lvbiBvZiB0aGlzIGNvZGUuIE1lYW50IGFzIGEgcmVtaW5kZXIgdG8gY2hlY2sgdGhpcyBvY2Nhc2lvbmFsbHlcbiAgICAvLyBwb3B1bGF0ZSBhZGRpdGlvbmFsIHByb3BzIHdoaWNoIGFyZSBjb21wb25lbnQgc3BlY2lmaWMgYW5kIG5vdCBwcmVzZW50IGluIGNvbmZpZ3VyYXRpb25zXG4gICAgLy8gVGhpcyBibG9jayBjYW4gYmUgcmVtb3ZlZCBvbmNlIGFsbCB0aGVzZSBwcm9wcyB3aWxsIGJlIGFkZGVkIGFzIHBhcnQgb2YgY29uZmlnc1xuICAgIGluQ29tcC5wQ29ubiQucG9wdWxhdGVBZGRpdGlvbmFsUHJvcHMoY29tcFByb3BzKTtcblxuICAgIGNvbXBQcm9wcyA9IGluQ29tcC5wQ29ubiQucmVzb2x2ZUNvbmZpZ1Byb3BzKGNvbXBQcm9wcyk7XG5cbiAgICBpZiAoY29tcFByb3BzICYmIHVuZGVmaW5lZCAhPT0gY29tcFByb3BzLnZhbGlkYXRlbWVzc2FnZSAmJiBjb21wUHJvcHMudmFsaWRhdGVtZXNzYWdlICE9ICcnKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyggYCAgIHZhbGlkYXRlbWVzc2FnZSBmb3IgJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX0gJHtpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YS5jb21wSUR9OiAke2NvbXBQcm9wcy52YWxpZGF0ZW1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbXBQcm9wcyxcbiAgICAgIC4uLmFkZFByb3BzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB1bmlxdWUgaWQgZm9yIGdpdmVuIGNvbXBvbmVudCBjcmVhdGVkIHdoZW4gcmVnaXN0ZXJpbmdcbiAgICogT3RoZXJ3aXNlLCByZXR1cm4gdW5kZWZpbmVkLlxuICAgKiBAcGFyYW0gaW5Db21wIFRoZSBjb21wb25lbnQgd2hvc2UgcHJvcGVydHkgaXMgYmVpbmcgcmVxdWVzdGVkLlxuICAgKi9cbiAgcHVibGljIGdldENvbXBvbmVudElEKGluQ29tcCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGluQ29tcC5icmlkZ2VDb21wb25lbnRJRCB8fCBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YS5jb21wSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgcmVxdWVzdGVkIHByb3BlcnR5IGZvciB0aGUgY29tcG9uZW50IGlmIGl0IGV4aXN0cy5cbiAgICogT3RoZXJ3aXNlLCByZXR1cm4gdW5kZWZpbmVkLlxuICAgKiBAcGFyYW0gaW5Db21wIFRoZSBjb21wb25lbnQgd2hvc2UgcHJvcGVydHkgaXMgYmVpbmcgcmVxdWVzdGVkLlxuICAgKiBAcGFyYW0gaW5Qcm9wIFRoZSBwcm9wZXJ0eSBiZWluZyByZXF1ZXN0ZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29tcG9uZW50UHJvcChpbkNvbXA6IGFueSA9IG51bGwsIGluUHJvcCA9ICcnKSB7XG4gICAgaWYgKGluQ29tcCA9PT0gbnVsbCkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBnZXRDb21wb25lbnRQcm9wIGNhbGxlZCB3aXRoIGJhZCBjb21wb25lbnQ6ICR7aW5Db21wfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBJRCA9IGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhLmNvbXBJRDtcblxuICAgIC8vIExvb2sgdXAgcHJvcGVydHkgaW4gdGhlIGNvbXBvbmVudCdzIGVudHJ5IGluIGNvbXBvbmVudFByb3BBcnJheSAod2hpY2ggc2hvdWxkIGhhdmUgdGhlIG1vc3QgcmVjZW50IHZhbHVlKVxuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFByb3BzQXJyW2NvbXBJRF1baW5Qcm9wXTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBjb21wbGV0ZSBzZXQgb2YgcmVzb2x2ZWQgcHJvcGVydGllcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGhcbiAgICogdGhpcyBjb21wb25lbnQuXG4gICAqIFRoaXMgaXMgdGhlIGZ1bGwgc2V0IG9mIHByb3BlcnRpZXMgdGhhdCBhcmUgdHJhY2tlZCBpbiBSZWR1eCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q3VycmVudENvbXBsZXRlUHJvcHMoaW5Db21wOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKGluQ29tcCA9PT0gbnVsbCkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBnZXRDdXJyZW50Q29tcGxldGVQcm9wcyBjYWxsZWQgd2l0aCBiYWQgY29tcG9uZW50OiAke2luQ29tcH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50UHJvcHNBcnJbaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEuY29tcElEXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgdGhlIGNvbXBvbmVudCBhbmQgaXRzIGNhbGxiYWNrIGZ1bmN0aW9uLiBXaGVuIGEgY29tcG9uZW50IGNhbGxzIHRoaXMgbWV0aG9kXG4gICAqICh0eXBpY2FsbHkgZnJvbSBpdHMgbmdPbkluaXQpLCB0aGUgY29tcG9uZW50IGlzIGdpdmVuIGEgdW5pcXVlIGNvbXBvbmVudElEIChmb3IgdGhpcyBzZXNzaW9uKVxuICAgKiBhbmQgc3Vic2NyaWJlcyB0aGUgY29tcG9uZW50IHRvIHRoZSBzdG9yZS4gQXMgYSBzaWRlIGVmZmVjdCwgaXQgYWxzbyBhc3NpZ25zIHRoZSBjb21wb25lbnQnc1xuICAgKiBhY3Rpb25zIChmcm9tIGl0cyBtZXRhZGF0YSkgdG8gdGhlIGNvbXBvbmVudCdzIF9fX2FjdGlvbnNfX18gYW5kIGJpbmRzIHRoZSBjb21wb25lbnQncyBjYWxsYmFja1xuICAgKiAocGFzc2VkIGluIGFzIF9fX2luQ2FsbGJhY2tfX18pIHRvIHRoZSBjb21wb25lbnQuIElmIGEgcHJvYmxlbSBpcyBlbmNvdW50ZXJlZCwgYW4gZW1wdHkgb2JqZWN0LFxuICAgKiB7fSwgaXMgcmV0dXJuZWQuXG4gICAqIEBwYXJhbSBpbkNvbXAgVGhlIGNvbXBvbmVudCBiZWluZyByZWdpc3RlcmVkIGFuZCBzdWJzY3JpYmVkXG4gICAqIEBwYXJhbSBpbkNhbGxiYWNrIFRoZSBjb21wb25lbnQncyBjYWxsYmFjayBmdW5jdGlvbiAodHlwaWNhbGx5IGNhbGxlZCBvblN0YXRlQ2hhbmdlKSB0aGF0XG4gICAqIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBzdGF0ZSBjaGFuZ2VzLlxuICAgKiBAcmV0dXJucyBBIEpTT04gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzOlxuICAgKiBjb21wSUQ6IHRoZSB1bmlxdWUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29tcG9uZW50LFxuICAgKiB1bnN1YnNjcmliZUZuOiB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBuZWVkcyB0byB1bnN1YnNjcmliZSBmcm9tIHRoZSBzdG9yZSxcbiAgICogdmFsaWRhdGVNZXNzYWdlOiBhbnkgdmFsaWRhdGlvbi9lcnJvciBtZXNzYWdlIHRoYXQgZ2V0cyBnZW5lcmF0ZWQgZm9yIHRoaXMgb2JqZWN0LFxuICAgKiBhY3Rpb25zOiBhbnkgYWN0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGZvciB0aGlzIG9iamVjdFxuICAgKi9cbiAgcmVnaXN0ZXJBbmRTdWJzY3JpYmVDb21wb25lbnQoaW5Db21wLCBpbkNhbGxiYWNrOiBGdW5jdGlvbiB8IG51bGwgPSBudWxsKTogQW5ndWxhclBDb25uZWN0RGF0YSB7XG4gICAgLy8gQ3JlYXRlIGFuIGluaXRpYWwgb2JqZWN0IHRvIGJlIHJldHVybmVkLlxuICAgIGNvbnN0IHJldHVybk9iamVjdDogQW5ndWxhclBDb25uZWN0RGF0YSA9IHtcbiAgICAgIGNvbXBJRDogJycsXG4gICAgICB1bnN1YnNjcmliZUZuOiB1bmRlZmluZWQsXG4gICAgICB2YWxpZGF0ZU1lc3NhZ2U6ICcnLFxuICAgICAgYWN0aW9uczogdW5kZWZpbmVkXG4gICAgfTtcblxuICAgIGlmIChpbkNvbXAgPT09IG51bGwgfHwgaW5DYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byByZWdpc3RlckFuZFN1YnNjcmliZTogaW5Db21wOiAke2luQ29tcH0gaW5DYWxsYmFjazogJHtpbkNhbGxiYWNrfWApO1xuICAgICAgcmV0dXJuIHJldHVybk9iamVjdDtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wVHlwZSA9IGluQ29tcC5jb25zdHJ1Y3Rvci5uYW1lO1xuXG4gICAgaWYgKEFuZ3VsYXJQQ29ubmVjdFNlcnZpY2UuYkxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKGByZWdpc3RlckFuZFN1YnNjcmliZUNvbXBvbmVudDogJHtjb21wVHlwZX1gKTtcbiAgICB9XG5cbiAgICBpZiAodW5kZWZpbmVkICE9PSBpbkNvbXAuYnJpZGdlQ29tcG9uZW50SUQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYE9MRCBTQ0hPT0w6ICR7Y29tcFR5cGV9YCk7XG4gICAgfVxuXG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gaW5Db21wLmFjdGlvbnMgJiYgdW5kZWZpbmVkID09PSBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YSkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byByZWdpc3RlckFuZFN1YnNjcmliZSBmcm9tICR7Y29tcFR5cGV9OiBhY3Rpb25zIG5vdCBkZWZpbmVkIGFzIGEgY2xhc3MgdmFyaWFibGUgZm9yIGluQ29tcGApO1xuICAgICAgcmV0dXJuIHJldHVybk9iamVjdDtcbiAgICB9XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gaW5Db21wLmJyaWRnZUNvbXBvbmVudElEICYmIHVuZGVmaW5lZCA9PT0gaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBBbmd1bGFyUENvbm5lY3Q6IGJhZCBjYWxsIHRvIHJlZ2lzdGVyQW5kU3Vic2NyaWJlIGZyb20gJHtjb21wVHlwZX06IGJyaWRnZUNvbXBvbmVudElEIG5vdCBkZWZpbmVkIGFzIGEgY2xhc3MgdmFyaWFibGUgZm9yIGluQ29tcGBcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmV0dXJuT2JqZWN0O1xuICAgIH1cbiAgICBpZiAodW5kZWZpbmVkID09PSBpbkNvbXAudW5zdWJzY3JpYmVTdG9yZSAmJiB1bmRlZmluZWQgPT09IGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byByZWdpc3RlckFuZFN1YnNjcmliZSBmcm9tICR7Y29tcFR5cGV9OiB1bnN1YnNjcmliZVN0b3JlIG5vdCBkZWZpbmVkIGFzIGEgY2xhc3MgdmFyaWFibGUgZm9yIGluQ29tcGBcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmV0dXJuT2JqZWN0O1xuICAgIH1cbiAgICBpZiAodW5kZWZpbmVkID09PSBpbkNvbXAudmFsaWRhdGVNZXNzYWdlICYmIHVuZGVmaW5lZCA9PT0gaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gcmVnaXN0ZXJBbmRTdWJzY3JpYmUgZnJvbSAke2NvbXBUeXBlfTogdmFsaWRhdGVNZXNzYWdlIG5vdCBkZWZpbmVkIGFzIGEgY2xhc3MgdmFyaWFibGUgZm9yIGluQ29tcGApO1xuICAgICAgcmV0dXJuIHJldHVybk9iamVjdDtcbiAgICB9XG5cbiAgICAvLyBjYWxsIHByb2Nlc3NBY3Rpb25zIHRvIHBvcHVsYXRlIG1ldGFkYXRhIHdpdGggYWN0aW9ucyBhcyBpbiBQQ29ubmVjdEhPUiBpbml0aWFsaXplXG4gICAgdGhpcy5wcm9jZXNzQWN0aW9ucyhpbkNvbXApO1xuICAgIGlmICh1bmRlZmluZWQgPT09IGluQ29tcC5hY3Rpb25zKSB7XG4gICAgICByZXR1cm5PYmplY3QuYWN0aW9ucyA9IGluQ29tcC5wQ29ubiQuZ2V0QWN0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbkNvbXAuYWN0aW9ucyA9IGluQ29tcC5wQ29ubiQuZ2V0QWN0aW9ucygpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIHRvIHRoZSBjb21wb25lbnQgaXQncyBhc3NvY2lhdGVkIHdpdGhcbiAgICBpbkNhbGxiYWNrID0gaW5DYWxsYmFjay5iaW5kKGluQ29tcCk7XG5cbiAgICAvLyBOb3cgcHJvY2VlZCB0byByZWdpc3RlciBhbmQgc3Vic2NyaWJlLi4uXG4gICAgY29uc3QgdGhlQ29tcElEOiBzdHJpbmcgPSB0aGlzLmdldE5leHRDb21wb25lbnRJZCgpO1xuICAgIGNvbnN0IHRoZVVuc3ViOiBGdW5jdGlvbiB8IG51bGwgPSB0aGlzLnN1YnNjcmliZVRvU3RvcmUoaW5Db21wLCBpbkNhbGxiYWNrKTtcblxuICAgIGlmICh1bmRlZmluZWQgPT09IGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhKSB7XG4gICAgICBpbkNvbXAuYnJpZGdlQ29tcG9uZW50SUQgPSB0aGVDb21wSUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybk9iamVjdC5jb21wSUQgPSB0aGVDb21wSUQ7XG4gICAgICByZXR1cm5PYmplY3QudW5zdWJzY3JpYmVGbiA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVGb3JtRmllbGQoaW5Db21wKTtcbiAgICAgICAgdGhlVW5zdWIoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGlzIGNvbXBvbmVudHMgZW50cnkgaW4gdGhlIGNvbXBvbmVudFByb3BzQXJyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wc0Fyclt0aGVDb21wSURdID0ge307XG5cbiAgICB0aGlzLmFkZEZvcm1GaWVsZChpbkNvbXApO1xuXG4gICAgLy8gcmV0dXJuIG9iamVjdCB3aXRoIGNvbXBJRCBhbmQgdW5zdWJzY3JpYmUuLi5cbiAgICByZXR1cm4gcmV0dXJuT2JqZWN0O1xuICB9XG5cbiAgYWRkRm9ybUZpZWxkKGluQ29tcCkge1xuICAgIGluQ29tcC5wQ29ubiQ/LmFkZEZvcm1GaWVsZCgpO1xuICB9XG5cbiAgcmVtb3ZlRm9ybUZpZWxkKGluQ29tcCkge1xuICAgIGlmIChpbkNvbXAucENvbm4kPy5yZW1vdmVGb3JtRmllbGQpIHtcbiAgICAgIGluQ29tcC5wQ29ubiQ/LnJlbW92ZUZvcm1GaWVsZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHROYW1lID0gaW5Db21wLnBDb25uJC5nZXRDb250ZXh0TmFtZSgpO1xuICAgIGNvbnN0IHBhZ2VSZWZlcmVuY2UgPSBpbkNvbXAucENvbm4kLmdldFBhZ2VSZWZlcmVuY2UoKTtcbiAgICBjb25zdCByYXdDb25maWcgPSBpbkNvbXAucENvbm4kLl9yYXdDb25maWc7XG4gICAgY29uc3QgaW5kZXggPSBpbkNvbXAucENvbm4kLmluZGV4O1xuXG4gICAgaWYgKE9iamVjdC5oYXNPd24ocmF3Q29uZmlnPy5jb25maWcgPz8ge30sICd2YWx1ZScpICYmIGluQ29tcC5wQ29ubiQuX3R5cGUgIT09ICdBZGRyZXNzJykge1xuICAgICAgUENvcmUuZ2V0Q29udGV4dFRyZWVNYW5hZ2VyKCkucmVtb3ZlRmllbGROb2RlKFxuICAgICAgICBjb250ZXh0TmFtZSxcbiAgICAgICAgcGFnZVJlZmVyZW5jZSxcbiAgICAgICAgaW5Db21wLnBDb25uJC52aWV3TmFtZSB8fCAnJyxcbiAgICAgICAgaW5Db21wLnBDb25uJC5fZ2V0UHJvcGVydHlOYW1lKCksXG4gICAgICAgIGluZGV4IGFzIG51bWJlclxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGluQ29tcC5wQ29ubiQuX3R5cGUgPT09ICdBZGRyZXNzJyAmJiByYXdDb25maWc/LmNvbmZpZz8uYXNzb2NpYXRlZFZpZXcpIHtcbiAgICAgIC8vIHJlbW92ZSBhZGRyZXNzIG5vZGUgYW5kIGl0cyBjaGlsZHJlblxuICAgICAgUENvcmUuZ2V0Q29udGV4dFRyZWVNYW5hZ2VyKCkucmVtb3ZlVmlld05vZGUoY29udGV4dE5hbWUsIHBhZ2VSZWZlcmVuY2UsIHJhd0NvbmZpZy5jb25maWcuYXNzb2NpYXRlZFZpZXcsIGluZGV4IGFzIG51bWJlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlbW92ZSB2aWV3IG5vZGUgYW5kIGl0cyBjaGlsZHJlblxuICAgICAgY29uc3QgcGFnZVJlZiA9IHJhd0NvbmZpZz8uY29uZmlnPy5jb250ZXh0ID8gYCR7cGFnZVJlZmVyZW5jZX0ke3Jhd0NvbmZpZz8uY29uZmlnLmNvbnRleHR9YCA6IHBhZ2VSZWZlcmVuY2U7XG4gICAgICBQQ29yZS5nZXRDb250ZXh0VHJlZU1hbmFnZXIoKS5yZW1vdmVWaWV3Tm9kZShjb250ZXh0TmFtZSwgcGFnZVJlZiwgcmF3Q29uZmlnPy5jb25maWc/Lm5hbWUgfHwgcmF3Q29uZmlnPy5jb25maWc/LmlkIHx8ICcnLCBpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb21wb25lbnQncyBlbnRyeSBpbiBfX19jb21wb25lbnRQcm9wc0Fycl9fXyBpc1xuICAvLyAgdGhlIHNhbWUgYXMgdGhlIGluQ29tcFByb3BzIHBhc3NlZCBpbi5cbiAgLy8gIEFzIGEgc2lkZSBlZmZlY3QsIHVwZGF0ZSB0aGUgY29tcG9uZW50J3MgZW50cnkgaW4gY29tcG9uZW50UHJvcHNBcnJcbiAgLy8gIE5PVEU6IEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgaW5jb21pbmcgY29tcG9uZW50IGhhcyB0aGUgZm9sbG93aW5nOlxuICAvLyAgKiBhIGJyaWRnZUNvbXBvbmVudElEIDxzdHJpbmc+IHByb3BlcnR5IC0gdXNlZCBhcyBsb29rdXAga2V5IGluIGNvbXBvbmVudFByb3BzQXJyXG4gIC8vICAqIGEgcENvbm4kIDw/PiBwcm9wZXJ0eSAtIHVzZWQgdG8gYWNjZXNzIGZ1bmN0aW9ucyBhY2Nlc3NlZCBpbiBnZXRDb21wb25lbnRQcm9wc1xuICAvLyBSZXR1cm4gdHJ1ZTogbWVhbnMgdGhlIGNvbXBvbmVudCBwcm9wcyBhcmUgZGlmZmVyZW50IGFuZCB0aGUgY29tcG9uZW50IHNob3VsZCB1cGRhdGUgaXRzZWxmIChyZS1yZW5kZXIpXG4gIC8vIFJldHVybiBmYWxzZTogbWVhbnMgdGhlIGNvbXBvbmVudCBwcm9wcyBhcmUgdGhlIHNhbWUgYW5kIHRoZSBjb21wb25lbnQgZG9lc24ndCBuZWVkIHRvIHVwZGF0ZSAocmUtcmVuZGVyKVxuICAvLyAgT24gYmFkIGlucHV0LCByZXR1cm4gZmFsc2U7XG4gIC8qKlxuICAgKiBSZXR1cm5zICoqdHJ1ZSoqIGlmIHRoZSBjb21wb25lbnQncyBlbnRyeSBpbiBfX19jb21wb25lbnRQcm9wc0Fycl9fXyBpc1xuICAgKiB0aGUgc2FtZSBhcyB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBjdXJyZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tcG9uZW50IChfX19pbkNvbXBfX18pIHBhc3NlZCBpbi5cbiAgICogQXMgYSBzaWRlIGVmZmVjdCwgdGhlIGNvbXBvbmVudCdzIGVudHJ5IGluIF9fX2NvbXBvbmVudFByb3BzQXJyX19fIGlzIHVwZGF0ZWQuXG4gICAqICoqTm90ZSoqOiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGluY29taW5nIGNvbXBvbmVudCBoYXMgdGhlIGZvbGxvd2luZzpcbiAgICogKGEpIGEgYnJpZGdlQ29tcG9uZW50SUQgX3N0cmluZ18gcHJvcGVydHkgdXNlZCBhcyBsb29rdXAga2V5IGluIF9fX2NvbXBvbmVudFByb3BzQXJyX19fXG4gICAqIGFuZCAoYikgYSBfX19wQ29ubiRfX18gcHJvcGVydHkgdXNlZCB0byBhY2Nlc3MgZnVuY3Rpb25zIGNhbGxlZCBpbiBfX19nZXRDb21wb25lbnRQcm9wc19fX1xuICAgKlxuICAgKiBAcGFyYW0gaW5Db21wIFRoZSBjb21wb25lbnQgYXNraW5nIGlmIGl0IHNob3VsZCB1cGRhdGUgaXRzZWxmXG4gICAqIEByZXR1cm5zIFJldHVybiAqKnRydWUqKjogbWVhbnMgdGhlIGNvbXBvbmVudCBwcm9wcyBhcmUgZGlmZmVyZW50IGFuZCB0aGUgY29tcG9uZW50IHNob3VsZCB1cGRhdGUgaXRzZWxmIChyZS1yZW5kZXIpLlxuICAgKiBSZXR1cm4gKipmYWxzZSoqOiBtZWFucyB0aGUgY29tcG9uZW50IHByb3BzIGFyZSB0aGUgc2FtZSBhbmQgdGhlIGNvbXBvbmVudCBkb2Vzbid0IG5lZWQgdG8gdXBkYXRlIChyZS1yZW5kZXIpLlxuICAgKiBJZiB0aGUgKioqaW5Db21wKioqIGlucHV0IGlzIGJhZCwgZmFsc2UgaXMgYWxzbyByZXR1cm5lZC5cbiAgICovXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShpbkNvbXApOiBib29sZWFuIHtcbiAgICAvLyBjb25zdCBiU2hvd0xvZ2dpbmcgPSBmYWxzZTtcbiAgICBsZXQgYlJldCA9IGZhbHNlO1xuICAgIC8vIGNoZWNrIGZvciByZWFzb25hYmxlIGlucHV0XG4gICAgaWYgKFV0aWxzLmlzRW1wdHlPYmplY3QoaW5Db21wKSkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byBzaG91bGRDb21wb25lbnRVcGRhdGU6IGluQ29tcDogJHtKU09OLnN0cmluZ2lmeShpbkNvbXApfWApO1xuICAgICAgcmV0dXJuIGJSZXQ7XG4gICAgfVxuICAgIGlmICh1bmRlZmluZWQgPT09IGluQ29tcC52YWxpZGF0ZU1lc3NhZ2UgJiYgdW5kZWZpbmVkID09PSBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YSkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byBzaG91bGRDb21wb25lbnRVcGRhdGU6ICR7aW5Db21wLmNvbnN0cnVjdG9yLm5hbWV9IGRvZXMgbm90IGhhdmUgYSB2YWxpZGF0ZU1lc3NhZ2UgcHJvcGVydHkuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcElEID0gdGhpcy5nZXRDb21wb25lbnRJRChpbkNvbXApO1xuXG4gICAgY29uc3QgY3VycmVudFByb3BzOiBhbnkgPSB0aGlzLmNvbXBvbmVudFByb3BzQXJyW2NvbXBJRF07XG4gICAgY29uc3QgY3VycmVudFByb3BzQXNTdHI6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRQcm9wcyk7XG5cbiAgICBjb25zdCBpbmNvbWluZ1Byb3BzOiBhbnkgPSB0aGlzLmdldENvbXBvbmVudFByb3BzKGluQ29tcCk7XG5cbiAgICAvLyBpZiBoYXZlIHBhZ2VNZXNzYWdlcywgYW5kIGl0IGlzIGJsYW5rLCByZW1vdmUgaXQuICBUaGlzIGNhdXNlcyBpc3N1ZXMgb2YgbWFraW5nIGl0IGFwcGVhclxuICAgIC8vIHRoYXQgYSB3aWxsIGNhdXNlIGFuIHVwZGF0ZSwgd2hlbiB0aGVyZSBpcyBubyBjaGFuZ2VcbiAgICBpZiAodGhpcy5pc1BhZ2VNZXNzYWdlc0VtcHR5KGluY29taW5nUHJvcHMpKSB7XG4gICAgICBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YS5wYWdlTWVzc2FnZXMgPSBpbmNvbWluZ1Byb3BzLnBhZ2VNZXNzYWdlcztcbiAgICAgIGRlbGV0ZSBpbmNvbWluZ1Byb3BzLnBhZ2VNZXNzYWdlcztcbiAgICB9XG5cbiAgICBpZiAoaW5jb21pbmdQcm9wcy5odHRwTWVzc2FnZXMpIHtcbiAgICAgIGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhLmh0dHBNZXNzYWdlcyA9IGluY29taW5nUHJvcHMuaHR0cE1lc3NhZ2VzO1xuICAgICAgaW5jb21pbmdQcm9wcy5odHRwTWVzc2FnZXMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgaW5jb21pbmdQcm9wc0FzU3RyOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShpbmNvbWluZ1Byb3BzKTtcblxuICAgIGJSZXQgPSBpc0VxdWFsID8gIWlzRXF1YWwoY3VycmVudFByb3BzLCBpbmNvbWluZ1Byb3BzKSA6IGN1cnJlbnRQcm9wc0FzU3RyICE9IGluY29taW5nUHJvcHNBc1N0cjtcblxuICAgIC8vIEJlbG93IHBpZWNlIG9mIGNvZGUgaXMgbmVlZGVkIHRvIHJlLXJlbmRlciB0aGUgY29tcG9uZW50IHNpbmNlIHdlIHdhbm5hIGV2YWx1YXRlIHRoZSBWaXNpYmlsaXR5IGV4cHJlc3Npb24gd2l0aGluIFZpZXcgY29tcG9uZW50IGluIHN1Y2ggY2FzZXNcbiAgICBpZiAoaW5Db21wLnBDb25uJC5tZXRhLmNvbmZpZy5jb250ZXh0Py5sZW5ndGggPiAwICYmIGluQ29tcC5wQ29ubiQuZ2V0UGFnZVJlZmVyZW5jZSgpLmxlbmd0aCA+ICdjYXNlSW5mby5jb250ZW50Jy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIE5vdyB1cGRhdGUgdGhlIGVudHJ5IGluIGNvbXBvbmVudFByb3BzQXJyIHdpdGggdGhlIGluY29taW5nIHZhbHVlIHNvXG4gICAgLy8gIHdlIGNhbiBjb21wYXJlIGFnYWluc3QgdGhhdCBuZXh0IHRpbWUuLi5cbiAgICB0aGlzLmNvbXBvbmVudFByb3BzQXJyW2NvbXBJRF0gPSBpbmNvbWluZ1Byb3BzO1xuICAgIGNvbnN0IHZhbGlkYXRlbWVzc2FnZSA9IGluY29taW5nUHJvcHMudmFsaWRhdGVtZXNzYWdlID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXMudXRpbHMuaHRtbERlY29kZShpbmNvbWluZ1Byb3BzLnZhbGlkYXRlbWVzc2FnZSk7XG4gICAgLy8gYW5kIHVwZGF0ZSB0aGUgY29tcG9uZW50J3MgdmFsaWRhdGlvbiBtZXNzYWdlIChpZiB1bmRlZmluZWQsIGl0IHNob3VsZCBiZSBzZXQgdG8gXCJcIilcbiAgICBpZiAodW5kZWZpbmVkICE9PSBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YSkge1xuICAgICAgaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEudmFsaWRhdGVNZXNzYWdlID0gdmFsaWRhdGVtZXNzYWdlO1xuXG4gICAgICBpZiAoaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEudmFsaWRhdGVNZXNzYWdlICE9ICcnKSB7XG4gICAgICAgIC8vIGlmIGhhdmUgYSB2YWxpZGF0ZSBtZXNzYWdlLCB0dXJuIG9mZiBzcGlubmVyXG4gICAgICAgIGNvbnN0IHRpbWVyID0gaW50ZXJ2YWwoMTAwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHNTZXJ2aWNlLnNlbmRNZXNzYWdlKGZhbHNlKTtcblxuICAgICAgICAgIHRpbWVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBzRXJyb3JNZXNzYWdlID0gY3VycmVudFByb3BzICYmIGN1cnJlbnRQcm9wcy5sYWJlbCA/IGN1cnJlbnRQcm9wcy5sYWJlbC5jb25jYXQoJyAtICcpIDogJyc7XG4gICAgICAgIHNFcnJvck1lc3NhZ2UgPSBzRXJyb3JNZXNzYWdlLmNvbmNhdChpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YS52YWxpZGF0ZU1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmVyU2VydmljZS5zZW5kTWVzc2FnZSgndXBkYXRlJywgc0Vycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluQ29tcC52YWxpZGF0ZU1lc3NhZ2UgPSB2YWxpZGF0ZW1lc3NhZ2U7XG4gICAgfVxuXG4gICAgaWYgKGJSZXQgJiYgY29tcElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGJSZXQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZyggYEFuZ3VsYXJQQ29ubmVjdCBjb21wb25lbnQgJHtjb21wSUR9IC0gJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX0gLSBzaG91bGRDb21wb25lbnRVcGRhdGU6ICR7YlJldH1gKTtcbiAgICAvLyBjb25zb2xlLmxvZyhcImN1cnJlbnQgcHJvcHM6IFwiICsgY3VycmVudFByb3BzQXNTdHIpO1xuXG4gICAgaWYgKGJSZXQpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGAqKioqIGNoYW5nZSBmb3I6ICR7aW5Db21wLmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcImN1cnJlbnQgcHJvcHM6IFwiICsgY3VycmVudFByb3BzQXNTdHIpO1xuICAgICAgLy8gY29uc29sZS5sb2coXCJpbmNvbWluZyBwcm9wczogXCIgKyBpbmNvbWluZ1Byb3BzQXNTdHIpO1xuICAgICAgLy8gY29uc29sZS5sb2coYCAgICAke2luQ29tcC5jb25zdHJ1Y3Rvci5uYW1lfTogc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmluZzogJHtiUmV0fSwgY29tcElkOiAke2NvbXBJRH1gICk7XG4gICAgICAvLyBjb25zb2xlLmxvZyggYCAgICBVcGRhdGluZyB3aXRoIGNvbXBvbmVudFByb3BzIGZvciAke2luQ29tcC5jb25zdHJ1Y3Rvci5uYW1lfTogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmNvbXBvbmVudFByb3BzQXJyW2NvbXBJRF0pfWApO1xuICAgICAgLy8gY29uc29sZS5sb2coIGAgICAgICAgICAgYW5kIHZhbGlkYXRlTWVzc2FnZTogJHtpbkNvbXAudmFsaWRhdGVNZXNzYWdlfWApO1xuICAgIH1cbiAgICAvLyBlbHNlIGlmIChpbkNvbXAuY29uc3RydWN0b3IubmFtZS5pbmRleE9mKFwiVmlld1wiKSA+PSAwIHx8IGluQ29tcC5jb25zdHJ1Y3Rvci5uYW1lLmluZGV4T2YoXCJSb290XCIpID49IDApIHtcbiAgICAvLyAgIGNvbnNvbGUubG9nKFwibm8gY2hhbmdlXCIpO1xuICAgIC8vICAgY29uc29sZS5sb2coXCJjdXJyZW50IHByb3BzOiBcIiArIGN1cnJlbnRQcm9wc0FzU3RyKTtcbiAgICAvLyAgIGNvbnNvbGUubG9nKFwiaW5jb21pbmcgcHJvcHM6IFwiICsgaW5jb21pbmdQcm9wc0FzU3RyKTtcbiAgICAvLyAgIGNvbnNvbGUubG9nKGAgICAgJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX06IHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5pbmc6ICR7YlJldH0sIGNvbXBJZDogJHtjb21wSUR9YCApO1xuXG4gICAgLy8gfVxuXG4gICAgLy8gY29uc29sZS5sb2coYCAgICAke2luQ29tcC5jb25zdHJ1Y3Rvci5uYW1lfTogc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmluZzogJHtiUmV0fWApO1xuXG4gICAgcmV0dXJuIGJSZXQ7XG4gIH1cblxuICBpc1BhZ2VNZXNzYWdlc0VtcHR5KGluY29taW5nUHJvcHMpIHtcbiAgICByZXR1cm4gaW5jb21pbmdQcm9wcy5wYWdlTWVzc2FnZXMgJiYgaW5jb21pbmdQcm9wcy5wYWdlTWVzc2FnZXMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbiBiZSBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBlbmNvdW50ZXJlZCBhIGNoYW5nZSBldmVudFxuICAgKiBAcGFyYW0gaW5Db21wIFRoZSBjb21wb25lbnQgY2FsbGluZyB0aGUgY2hhbmdlIGV2ZW50XG4gICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnRcbiAgICovXG4gIGNoYW5nZUhhbmRsZXIoaW5Db21wLCBldmVudCkge1xuICAgIGNvbnN0IGJMb2dnaW5nID0gZmFsc2U7XG4gICAgaWYgKGJMb2dnaW5nKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgQW5ndWxhclBDb25uZWN0LmNoYW5nZUhhbmRsZXJgKTtcbiAgICB9XG4gICAgLy8gY2hlY2sgZm9yIHJlYXNvbmFibGUgaW5wdXRcbiAgICBpZiAodW5kZWZpbmVkID09PSBpbkNvbXAgfHwgVXRpbHMuaXNFbXB0eU9iamVjdChpbkNvbXApKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBBbmd1bGFyUENvbm5lY3Q6IGJhZCBjYWxsIHRvIGNoYW5nZUhhbmRsZXI6IGluQ29tcDogJHtKU09OLnN0cmluZ2lmeShpbkNvbXApfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBDb25uZWN0ID0gaW5Db21wLnBDb25uJDtcbiAgICBpZiAodW5kZWZpbmVkID09PSBwQ29ubmVjdCkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byBjaGFuZ2VIYW5kbGVyOiBpbkNvbXAucENvbm4kOiAke3BDb25uZWN0fWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNsZWFyIG91dCBlcnJvcnNcbiAgICB0aGlzLmVyU2VydmljZS5zZW5kTWVzc2FnZSgnZGlzbWlzcycsICcnKTtcblxuICAgIHBDb25uZWN0LmdldEFjdGlvbnNBcGkoKS5jaGFuZ2VIYW5kbGVyKHBDb25uZWN0LCBldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuIGJlIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGVuY291bnRlcmVkIGFuIGV2ZW50IChzdWNoIGFzIGJsdXIpXG4gICAqIEBwYXJhbSBpbkNvbXAgVGhlIGNvbXBvbmVudCBjYWxsaW5nIHRoZSBldmVudFxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50XG4gICAqL1xuICBldmVudEhhbmRsZXIoaW5Db21wLCBldmVudCkge1xuICAgIGNvbnN0IGJMb2dnaW5nID0gZmFsc2U7XG4gICAgaWYgKGJMb2dnaW5nKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgQW5ndWxhclBDb25uZWN0LmV2ZW50SGFuZGxlcmApO1xuICAgIH1cbiAgICAvLyBjaGVjayBmb3IgcmVhc29uYWJsZSBpbnB1dFxuICAgIGlmICh1bmRlZmluZWQgPT09IGluQ29tcCB8fCBVdGlscy5pc0VtcHR5T2JqZWN0KGluQ29tcCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gZXZlbnRIYW5kbGVyOiBpbkNvbXA6ICR7SlNPTi5zdHJpbmdpZnkoaW5Db21wKX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwQ29ubmVjdCA9IGluQ29tcC5wQ29ubiQ7XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gcENvbm5lY3QpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gZXZlbnRIYW5kbGVyOiBpbkNvbXAucENvbm4kOiAke3BDb25uZWN0fWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHBDb25uZWN0LmdldEFjdGlvbnNBcGkoKS5ldmVudEhhbmRsZXIocENvbm5lY3QsIGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBBIGhhbmRsZSB0byB0aGUgYXBwbGljYXRpb24ncyBzdG9yZVxuICAgKi9cbiAgZ2V0U3RvcmUoKSB7XG4gICAgaWYgKHRoaXMudGhlU3RvcmUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMudGhlU3RvcmUgPSBQQ29yZS5nZXRTdG9yZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50aGVTdG9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gYkxvZ01zZyBJZiB0cnVlLCB3aWxsIHdyaXRlIHRoZSBzdHJpbmdpZmllZCBzdGF0ZSB0byB0aGUgc3RvcmUgZm9yIGRlYnVnZ2luZy9pbnNwZWN0aW9uXG4gICAqIEBwYXJhbSBpbkNvbXAgSWYgc3VwcGxpZWQsIHRoZSBjb21wb25lbnQgdGhhdCBpcyByZXF1ZXN0aW5nIHRoZSBzdG9yZSdzIHN0YXRlXG4gICAqIEByZXR1cm5zIEEgaGFuZGxlIHRvIHRoZSBfX3N0YXRlX18gb2YgYXBwbGljYXRpb24ncyBzdG9yZVxuICAgKi9cbiAgZ2V0U3RhdGUoYkxvZ01zZzogYm9vbGVhbiA9IGZhbHNlLCBpbkNvbXA6IGFueSA9IG51bGwpIHtcbiAgICBjb25zdCB0aGVTdGF0ZTogb2JqZWN0ID0gdGhpcy5nZXRTdG9yZSgpLmdldFN0YXRlKCk7XG4gICAgaWYgKGJMb2dNc2cpIHtcbiAgICAgIGNvbnN0IHRoZUNvbXBOYW1lOiBzdHJpbmcgPSBpbkNvbXAgPyBgJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX06IGAgOiAnJztcbiAgICAgIGNvbnNvbGUubG9nKGAke3RoZUNvbXBOYW1lfSBTdG9yZSBzdGF0ZTogJHtKU09OLnN0cmluZ2lmeSh0aGVTdGF0ZSl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0aGVTdGF0ZTtcbiAgfVxuXG4gIC8vIHByb2Nlc3NBY3Rpb25zIC0gY2FycmllZCBvdmVyIGZyb20gUENvbm5lY3RIT0MgaW5pdGlhbGl6ZVxuICAvKipcbiAgICogIHByb2Nlc3NBY3Rpb25zIGV4cG9zZXMgYWxsIGFjdGlvbnMgaW4gdGhlIG1ldGFkYXRhLlxuICAgKiAgQXR0YWNoZXMgY29tbW9uIGhhbmRsZXIgKGV2ZW50SGFuZGxlcikgZm9yIGFsbCBhY3Rpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzQWN0aW9ucyhpbkNvbXApIHtcbiAgICBjb25zdCBwQ29ubmVjdCA9IGluQ29tcC5wQ29ubiQ7XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gcENvbm5lY3QpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gcHJvY2Vzc0FjdGlvbnM6IHBDb25uJDogJHtwQ29ubmVjdH0gZnJvbSBjb21wb25lbnQ6ICR7aW5Db21wLmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGluQ29tcC5wQ29ubiQuaXNFZGl0YWJsZSgpKSB7XG4gICAgICBpbkNvbXAucENvbm4kLnNldEFjdGlvbignb25DaGFuZ2UnLCB0aGlzLmNoYW5nZUhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgICBpbkNvbXAucENvbm4kLnNldEFjdGlvbignb25CbHVyJywgdGhpcy5ldmVudEhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgfVxuICB9XG59XG4iXX0=
454
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1wY29ubmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9fYnJpZGdlL2FuZ3VsYXItcGNvbm5lY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sT0FBTyxNQUFNLGlCQUFpQixDQUFDO0FBR3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7QUFlMUMsTUFBTSxPQUFPLHNCQUFzQjtJQW1CakMsNENBQTRDO2FBQzdCLGFBQVEsR0FBRyxLQUFLLEFBQVIsQ0FBUztJQUVoQyxZQUNVLFNBQWlDLEVBQ2pDLFNBQStCLEVBQy9CLEtBQVk7UUFGWixjQUFTLEdBQVQsU0FBUyxDQUF3QjtRQUNqQyxjQUFTLEdBQVQsU0FBUyxDQUFzQjtRQUMvQixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBeEJ0Qjs7V0FFRztRQUNLLGFBQVEsR0FBUSxJQUFJLENBQUM7UUFFN0I7O1dBRUc7UUFDSyx1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFFL0I7Ozs7O1dBS0c7UUFDSyxzQkFBaUIsR0FBYSxFQUFFLENBQUM7UUFVdkMseURBQXlEO1FBQ3pELDREQUE0RDtRQUM1RCxvREFBb0Q7UUFDcEQsa0RBQWtEO1FBQ2xELCtDQUErQztRQUMvQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFMUQsNkRBQTZEO1FBQzdELCtCQUErQjtRQUMvQiwrREFBK0Q7UUFDL0QsV0FBVztRQUNYLGtFQUFrRTtRQUNsRSxJQUFJO0lBQ04sQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLGtCQUFrQixJ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LEdBQVcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxpQkFBaUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCw0REFBNEQ7SUFDNUQ7OztPQUdHO0lBQ0ssY0FBYyxDQUFDLE1BQU07UUFDM0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUMvQixJQUFJLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLHdEQUF3RCxRQUFRLG9CQUFvQixNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDN0gsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuRSxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDO0lBQ0gsQ0FBQzsrR0E5ZlUsc0JBQXNCO21IQUF0QixzQkFBc0IsY0FGckIsTUFBTTs7NEZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NTcGlubmVyU2VydmljZSB9IGZyb20gJy4uL19tZXNzYWdlcy9wcm9ncmVzcy1zcGlubmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlc1NlcnZpY2UgfSBmcm9tICcuLi9fbWVzc2FnZXMvZXJyb3ItbWVzc2FnZXMuc2VydmljZSc7XG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uL19oZWxwZXJzL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBBbmd1bGFyUENvbm5lY3REYXRhIHtcbiAgY29tcElEPzogc3RyaW5nO1xuICB1bnN1YnNjcmliZUZuPzogRnVuY3Rpb247XG4gIHZhbGlkYXRlTWVzc2FnZT86IHN0cmluZztcbiAgYWN0aW9ucz86IHtcbiAgICBvbkNoYW5nZTogRnVuY3Rpb247XG4gICAgb25CbHVyOiBGdW5jdGlvbjtcbiAgfTtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhclBDb25uZWN0U2VydmljZSB7XG4gIC8qKlxuICAgKiBMb2NhbCB2YXJpYWJsZSBmb3IgYWNjZXNzIHRvIHRoZSBzdG9yZSBvbmNlIHRoZSBzZXJ2aWNlIGlzIGNvbm5lY3RlZCB0byBpdC5cbiAgICovXG4gIHByaXZhdGUgdGhlU3RvcmU6IGFueSA9IG51bGw7XG5cbiAgLyoqXG4gICAqIExvY2FsIHZhcmlhYmxlIHVzZWQgdG8gY29tcHV0ZSB0aGUgbmV4dCBjb21wb25lbnRJRFxuICAgKi9cbiAgcHJpdmF0ZSBjb3VudGVyQ29tcG9uZW50SUQgPSAwO1xuXG4gIC8qKlxuICAgKiBMb2NhbCBhcnJheSB1c2VkIHRvIHN0b3JlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBjb21wb25lbnQgdG8gaXRzIG1vc3QgcmVjZW50IFwicHJvcHNcIlxuICAgKiAgd2hlcmUgXCJwcm9wc1wiIGlzIHRoZSBvYmplY3QgY29udGFpbmluZyB0aGUgY29tcG9uZW50J3MgZ2V0Q29uZmlnUHJvcHMgYWxvbmcgd2l0aFxuICAgKiBhbnl0aGluZyBhZGRlZCBieSBwb3B1bGF0ZUFkZGl0aW9uYWxQcm9wcy5cbiAgICogRWFjaCBlbnRyeSBpczogeyBfX2NvbXBvbmVudElEX186IF90aGUgY29tcG9uZW50J3MgbW9zdCByZWNlbnQgcHJvcHNfIH1cbiAgICovXG4gIHByaXZhdGUgY29tcG9uZW50UHJvcHNBcnI6IE9iamVjdFtdID0gW107XG5cbiAgLyogVXNlZCB0byB0b2dnbGUgc29tZSBjbGFzcy13aWRlIGxvZ2dpbmcgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYkxvZ2dpbmcgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBzU2VydmljZTogUHJvZ3Jlc3NTcGlubmVyU2VydmljZSxcbiAgICBwcml2YXRlIGVyU2VydmljZTogRXJyb3JNZXNzYWdlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB1dGlsczogVXRpbHNcbiAgKSB7XG4gICAgLy8gRXN0YWJsaXNoIG5lY2Vzc2FyeSBvdmVycmlkZSBmbGFncyBmb3Igb3VyIHVzZSBvZiBDb3JlXG4gICAgLy8gY29uc3QgY29yZU92ZXJyaWRlcyA9IHsgXCJkeW5hbWljTG9hZENvbXBvbmVudHNcIjogZmFsc2UgfTtcbiAgICAvLyBsZXQgY29yZU92ZXJyaWRlcyA9IFBDb3JlLmdldEJlaGF2aW9yT3ZlcnJpZGVzKCk7XG4gICAgLy8gY29yZU92ZXJyaWRlc1tcImR5bmFtaWNMb2FkQ29tcG9uZW50c1wiXSA9IGZhbHNlO1xuICAgIC8vIFBDb3JlLnNldEJlaGF2aW9yT3ZlcnJpZGVzKCBjb3JlT3ZlcnJpZGVzICk7XG4gICAgUENvcmUuc2V0QmVoYXZpb3JPdmVycmlkZSgnZHluYW1pY0xvYWRDb21wb25lbnRzJywgZmFsc2UpO1xuXG4gICAgLy8gQWx3YXlzIGJlc3QgdG8gdXNlIGRlZXAgb2JqZWN0IGNvbXBhcmUgd2hlbiBpdCdzIGF2YWlsYWJsZVxuICAgIC8vIGlmIChpc0VxdWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhgQW5ndWxhclBDb25uZWN0IGlzIHVzaW5nIGRlZXAgb2JqZWN0IGNvbXBhcmVgKTtcbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vIGNvbnNvbGUubG9nKGBBbmd1bGFyUENvbm5lY3QgaXMgdXNpbmcgSlNPTi5zdHJpbmdpZnkgY29tcGFyZWApO1xuICAgIC8vIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdW5pcXVlIChmb3IgdGhpcyBzZXNzaW9uKSBDb21wb25lbnRJRCB0aGF0IHNob3VsZFxuICAgKiBiZSB1c2VkIGZvciB0aGF0IGNvbXBvbmVudCB0byB1cGRhdGUgaXRzIG1vc3QgcmVjZW50IHByb3BzXG4gICAqICh3aGljaCBjYW4gYWxzbyBiZSBjb21wYXJlZCBhZ2FpbnN0IGl0cyBwcmV2aW91cyB2YWx1ZVxuICAgKiBiZWZvcmUgdXBkYXRpbmcpLiBOb3RlIHRoYXQgdGhpcyByZXR1cm5zIGEgc3RyaW5nIHNvIHdlIGNhbiB1c2VcbiAgICogaXQgYXMgYSBrZXkgaW4gYW4gYXNzb2NpYXRpdmUgYXJyYXlcbiAgICogQHJldHVybnMgdGhlIG5leHQgY29tcG9uZW50SURcbiAgICovXG4gIHByaXZhdGUgZ2V0TmV4dENvbXBvbmVudElkKCk6IHN0cmluZyB7XG4gICAgdGhpcy5jb3VudGVyQ29tcG9uZW50SUQgKz0gMTtcbiAgICAvLyBOb3RlIHRoYXQgd2UgdXNlIHRoZSBzdHJpbmcgdmVyc2lvbiBvZiB0aGUgbnVtYmVyIHNvIHdlIGhhdmUgYW5cbiAgICAvLyAgYXNzb2NpYXRpdmUgYXJyYXkgdGhhdCB3ZSBjYW4gY2xlYW4gdXAgbGF0ZXIsIGlmIG5lZWRlZC5cbiAgICByZXR1cm4gdGhpcy5jb3VudGVyQ29tcG9uZW50SUQudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQ2FsbGluZyBvYmplY3QgKGluQ29tcCkgc3Vic2NyaWJlcyB0byBzdG9yZSBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gaW5Db21wIFRoZSBjb21wb25lbnQgdGhhdCdzIHN1YnNjcmliaW5nIHRvIHRoZSBzdG9yZVxuICAgKiBAcGFyYW0gaW5DYWxsYmFjayBUaGUgY29tcG9uZW50J3MgY2FsbGJhY2sgZnVuY3Rpb24gKHR5cGljYWxseSBjYWxsZWQgb25TdGF0ZUNoYW5nZSkgdGhhdCB3aWxsXG4gICAqIGJlIGNhbGxlZCB3aGVuIHRoZSBzdG9yZSBjaGFuZ2VzLlxuICAgKiBAcmV0dXJucyBUaGUgKip1bnN1YnNjcmliZSoqIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgbmVlZHNcbiAgICogdG8gdW5zdWJzY3JpYmUgZnJvbSB0aGUgc3RvcmUuIChUeXBpY2FsbHkgZHVyaW5nIG5nT25EZXN0cm95KVxuICAgKi9cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb1N0b3JlKGluQ29tcDogYW55ID0gbnVsbCwgaW5DYWxsYmFjazogRnVuY3Rpb24gfCBudWxsID0gbnVsbCk6IEZ1bmN0aW9uIHtcbiAgICAvLyBjb25zdCB0aGVDb21wTmFtZTogc3RyaW5nID0gaW5Db21wID8gYCR7aW5Db21wLmNvbnN0cnVjdG9yLm5hbWV9YCA6ICdubyBjb21wb25lbnQgcHJvdmlkZWQnO1xuICAgIGxldCBmblVuc3Vic2NyaWJlO1xuICAgIC8vIGNvbnNvbGUubG9nKCBgQnJpZGdlIHN1YnNjcmliaW5nOiAke3RoZUNvbXBOYW1lfSBgKTtcbiAgICBpZiAoaW5Db21wKSB7XG4gICAgICBsZXQgYlN1YnNjcmliZWQgPSB0cnVlO1xuICAgICAgY29uc3Qgd3JhcHBlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICBpZiAoYlN1YnNjcmliZWQgJiYgaW5DYWxsYmFjaykge1xuICAgICAgICAgIGluQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHN0b3JlVW5zdWJzY3JpYmUgPSB0aGlzLmdldFN0b3JlKCkuc3Vic2NyaWJlKHdyYXBwZWRDYWxsYmFjayk7XG4gICAgICBmblVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgICAgICBiU3Vic2NyaWJlZCA9IGZhbHNlO1xuICAgICAgICBzdG9yZVVuc3Vic2NyaWJlKCk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZm5VbnN1YnNjcmliZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBDb21wb25lbnQncyBwcm9wZXJ0aWVzIHRoYXQgYXJlIHVzZWQgKGEpIHRvIHBvcHVsYXRlIGNvbXBvbmVudFByb3BzQXJyXG4gIC8vICBhbmQgKGIpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZSBpdHNlbGYgKHJlLXJlbmRlcilcbiAgICogQHBhcmFtIGluQ29tcCBUaGUgY29tcG9uZW50IHdob3NlIHByb3BlcnRpZXMgYXJlIGJlaW5nIG9idGFpbmVkXG4gICAqL1xuICBwcml2YXRlIGdldENvbXBvbmVudFByb3BzKGluQ29tcDogYW55ID0gbnVsbCk6IE9iamVjdCB7XG4gICAgbGV0IGNvbXBQcm9wczogYW55ID0ge307XG4gICAgbGV0IGFkZFByb3BzID0ge307XG5cbiAgICBpZiAoaW5Db21wID09PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBBbmd1bGFyUENvbm5lY3Q6IGdldENvbXBvbmVudFByb3BzIGNhbGxlZCB3aXRoIGJhZCBjb21wb25lbnQ6ICR7aW5Db21wfWApO1xuICAgIH1cblxuICAgIC8vIGlmICgoaW5Db21wLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiRmxvd0NvbnRhaW5lckNvbXBvbmVudFwiKSB8fCAoaW5Db21wLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiVmlld0NvbnRhaW5lckNvbXBvbmVudFwiKVxuICAgIC8vICAgICB8fCAoaW5Db21wLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiVmlld0NvbXBvbmVudFwiKSB8fCAoaW5Db21wLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiRGVmZXJMb2FkQ29tcG9uZW50XCIpKSB7XG4gICAgLy8gICBjb25zb2xlLmxvZyhgLS0+IEFuZ3VsYXJQQ29ubmVjdCBnZXRDb21wb25lbnRQcm9wczogJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX1gKTtcbiAgICAvLyB9XG5cbiAgICBpZiAoaW5Db21wLmFkZGl0aW9uYWxQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIGluQ29tcC5hZGRpdGlvbmFsUHJvcHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGFkZFByb3BzID0gaW5Db21wLnBDb25uJC5yZXNvbHZlQ29uZmlnUHJvcHMoaW5Db21wLmFkZGl0aW9uYWxQcm9wcyk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbkNvbXAuYWRkaXRpb25hbFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IHByb3BzVG9BZGQgPSBpbkNvbXAuYWRkaXRpb25hbFByb3BzKFBDb3JlLmdldFN0b3JlKCkuZ2V0U3RhdGUoKSwgaW5Db21wLnBDb25uJCk7XG4gICAgICAgIGFkZFByb3BzID0gaW5Db21wLnBDb25uJC5yZXNvbHZlQ29uZmlnUHJvcHMocHJvcHNUb0FkZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcFByb3BzID0gaW5Db21wLnBDb25uJC5nZXRDb25maWdQcm9wcygpO1xuXG4gICAgLy8gY29uc3QgY29tcG9uZW50TmFtZSA9IGluQ29tcC5jb25zdHJ1Y3Rvci5uYW1lO1xuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21tZW50IGlzIGZyb20gdGhlIE5lYnVsYS9Db25zdGVsbGF0aW9uIHZlcnNpb24gb2YgdGhpcyBjb2RlLiBNZWFudCBhcyBhIHJlbWluZGVyIHRvIGNoZWNrIHRoaXMgb2NjYXNpb25hbGx5XG4gICAgLy8gcG9wdWxhdGUgYWRkaXRpb25hbCBwcm9wcyB3aGljaCBhcmUgY29tcG9uZW50IHNwZWNpZmljIGFuZCBub3QgcHJlc2VudCBpbiBjb25maWd1cmF0aW9uc1xuICAgIC8vIFRoaXMgYmxvY2sgY2FuIGJlIHJlbW92ZWQgb25jZSBhbGwgdGhlc2UgcHJvcHMgd2lsbCBiZSBhZGRlZCBhcyBwYXJ0IG9mIGNvbmZpZ3NcbiAgICBpbkNvbXAucENvbm4kLnBvcHVsYXRlQWRkaXRpb25hbFByb3BzKGNvbXBQcm9wcyk7XG5cbiAgICBjb21wUHJvcHMgPSBpbkNvbXAucENvbm4kLnJlc29sdmVDb25maWdQcm9wcyhjb21wUHJvcHMpO1xuXG4gICAgaWYgKGNvbXBQcm9wcyAmJiB1bmRlZmluZWQgIT09IGNvbXBQcm9wcy52YWxpZGF0ZW1lc3NhZ2UgJiYgY29tcFByb3BzLnZhbGlkYXRlbWVzc2FnZSAhPSAnJykge1xuICAgICAgLy8gY29uc29sZS5sb2coIGAgICB2YWxpZGF0ZW1lc3NhZ2UgZm9yICR7aW5Db21wLmNvbnN0cnVjdG9yLm5hbWV9ICR7aW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEuY29tcElEfTogJHtjb21wUHJvcHMudmFsaWRhdGVtZXNzYWdlfWApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5jb21wUHJvcHMsXG4gICAgICAuLi5hZGRQcm9wc1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdW5pcXVlIGlkIGZvciBnaXZlbiBjb21wb25lbnQgY3JlYXRlZCB3aGVuIHJlZ2lzdGVyaW5nXG4gICAqIE90aGVyd2lzZSwgcmV0dXJuIHVuZGVmaW5lZC5cbiAgICogQHBhcmFtIGluQ29tcCBUaGUgY29tcG9uZW50IHdob3NlIHByb3BlcnR5IGlzIGJlaW5nIHJlcXVlc3RlZC5cbiAgICovXG4gIHB1YmxpYyBnZXRDb21wb25lbnRJRChpbkNvbXApOiBzdHJpbmcge1xuICAgIHJldHVybiBpbkNvbXAuYnJpZGdlQ29tcG9uZW50SUQgfHwgaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEuY29tcElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHJlcXVlc3RlZCBwcm9wZXJ0eSBmb3IgdGhlIGNvbXBvbmVudCBpZiBpdCBleGlzdHMuXG4gICAqIE90aGVyd2lzZSwgcmV0dXJuIHVuZGVmaW5lZC5cbiAgICogQHBhcmFtIGluQ29tcCBUaGUgY29tcG9uZW50IHdob3NlIHByb3BlcnR5IGlzIGJlaW5nIHJlcXVlc3RlZC5cbiAgICogQHBhcmFtIGluUHJvcCBUaGUgcHJvcGVydHkgYmVpbmcgcmVxdWVzdGVkLlxuICAgKi9cbiAgcHVibGljIGdldENvbXBvbmVudFByb3AoaW5Db21wOiBhbnkgPSBudWxsLCBpblByb3AgPSAnJykge1xuICAgIGlmIChpbkNvbXAgPT09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogZ2V0Q29tcG9uZW50UHJvcCBjYWxsZWQgd2l0aCBiYWQgY29tcG9uZW50OiAke2luQ29tcH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wSUQgPSBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YS5jb21wSUQ7XG5cbiAgICAvLyBMb29rIHVwIHByb3BlcnR5IGluIHRoZSBjb21wb25lbnQncyBlbnRyeSBpbiBjb21wb25lbnRQcm9wQXJyYXkgKHdoaWNoIHNob3VsZCBoYXZlIHRoZSBtb3N0IHJlY2VudCB2YWx1ZSlcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRQcm9wc0Fycltjb21wSURdW2luUHJvcF07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgY29tcGxldGUgc2V0IG9mIHJlc29sdmVkIHByb3BlcnRpZXMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoXG4gICAqIHRoaXMgY29tcG9uZW50LlxuICAgKiBUaGlzIGlzIHRoZSBmdWxsIHNldCBvZiBwcm9wZXJ0aWVzIHRoYXQgYXJlIHRyYWNrZWQgaW4gUmVkdXggZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIGdldEN1cnJlbnRDb21wbGV0ZVByb3BzKGluQ29tcDogYW55ID0gbnVsbCkge1xuICAgIGlmIChpbkNvbXAgPT09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogZ2V0Q3VycmVudENvbXBsZXRlUHJvcHMgY2FsbGVkIHdpdGggYmFkIGNvbXBvbmVudDogJHtpbkNvbXB9YCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFByb3BzQXJyW2luQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhLmNvbXBJRF07XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBjb21wb25lbnQgYW5kIGl0cyBjYWxsYmFjayBmdW5jdGlvbi4gV2hlbiBhIGNvbXBvbmVudCBjYWxscyB0aGlzIG1ldGhvZFxuICAgKiAodHlwaWNhbGx5IGZyb20gaXRzIG5nT25Jbml0KSwgdGhlIGNvbXBvbmVudCBpcyBnaXZlbiBhIHVuaXF1ZSBjb21wb25lbnRJRCAoZm9yIHRoaXMgc2Vzc2lvbilcbiAgICogYW5kIHN1YnNjcmliZXMgdGhlIGNvbXBvbmVudCB0byB0aGUgc3RvcmUuIEFzIGEgc2lkZSBlZmZlY3QsIGl0IGFsc28gYXNzaWducyB0aGUgY29tcG9uZW50J3NcbiAgICogYWN0aW9ucyAoZnJvbSBpdHMgbWV0YWRhdGEpIHRvIHRoZSBjb21wb25lbnQncyBfX19hY3Rpb25zX19fIGFuZCBiaW5kcyB0aGUgY29tcG9uZW50J3MgY2FsbGJhY2tcbiAgICogKHBhc3NlZCBpbiBhcyBfX19pbkNhbGxiYWNrX19fKSB0byB0aGUgY29tcG9uZW50LiBJZiBhIHByb2JsZW0gaXMgZW5jb3VudGVyZWQsIGFuIGVtcHR5IG9iamVjdCxcbiAgICoge30sIGlzIHJldHVybmVkLlxuICAgKiBAcGFyYW0gaW5Db21wIFRoZSBjb21wb25lbnQgYmVpbmcgcmVnaXN0ZXJlZCBhbmQgc3Vic2NyaWJlZFxuICAgKiBAcGFyYW0gaW5DYWxsYmFjayBUaGUgY29tcG9uZW50J3MgY2FsbGJhY2sgZnVuY3Rpb24gKHR5cGljYWxseSBjYWxsZWQgb25TdGF0ZUNoYW5nZSkgdGhhdFxuICAgKiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgc3RhdGUgY2hhbmdlcy5cbiAgICogQHJldHVybnMgQSBKU09OIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcga2V5czpcbiAgICogY29tcElEOiB0aGUgdW5pcXVlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbXBvbmVudCxcbiAgICogdW5zdWJzY3JpYmVGbjogdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgbmVlZHMgdG8gdW5zdWJzY3JpYmUgZnJvbSB0aGUgc3RvcmUsXG4gICAqIHZhbGlkYXRlTWVzc2FnZTogYW55IHZhbGlkYXRpb24vZXJyb3IgbWVzc2FnZSB0aGF0IGdldHMgZ2VuZXJhdGVkIGZvciB0aGlzIG9iamVjdCxcbiAgICogYWN0aW9uczogYW55IGFjdGlvbnMgdGhhdCBhcmUgZGVmaW5lZCBmb3IgdGhpcyBvYmplY3RcbiAgICovXG4gIHJlZ2lzdGVyQW5kU3Vic2NyaWJlQ29tcG9uZW50KGluQ29tcCwgaW5DYWxsYmFjazogRnVuY3Rpb24gfCBudWxsID0gbnVsbCk6IEFuZ3VsYXJQQ29ubmVjdERhdGEge1xuICAgIC8vIENyZWF0ZSBhbiBpbml0aWFsIG9iamVjdCB0byBiZSByZXR1cm5lZC5cbiAgICBjb25zdCByZXR1cm5PYmplY3Q6IEFuZ3VsYXJQQ29ubmVjdERhdGEgPSB7XG4gICAgICBjb21wSUQ6ICcnLFxuICAgICAgdW5zdWJzY3JpYmVGbjogdW5kZWZpbmVkLFxuICAgICAgdmFsaWRhdGVNZXNzYWdlOiAnJyxcbiAgICAgIGFjdGlvbnM6IHVuZGVmaW5lZFxuICAgIH07XG5cbiAgICBpZiAoaW5Db21wID09PSBudWxsIHx8IGluQ2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gcmVnaXN0ZXJBbmRTdWJzY3JpYmU6IGluQ29tcDogJHtpbkNvbXB9IGluQ2FsbGJhY2s6ICR7aW5DYWxsYmFja31gKTtcbiAgICAgIHJldHVybiByZXR1cm5PYmplY3Q7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcFR5cGUgPSBpbkNvbXAuY29uc3RydWN0b3IubmFtZTtcblxuICAgIGlmIChBbmd1bGFyUENvbm5lY3RTZXJ2aWNlLmJMb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZyhgcmVnaXN0ZXJBbmRTdWJzY3JpYmVDb21wb25lbnQ6ICR7Y29tcFR5cGV9YCk7XG4gICAgfVxuXG4gICAgaWYgKHVuZGVmaW5lZCAhPT0gaW5Db21wLmJyaWRnZUNvbXBvbmVudElEKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBPTEQgU0NIT09MOiAke2NvbXBUeXBlfWApO1xuICAgIH1cblxuICAgIGlmICh1bmRlZmluZWQgPT09IGluQ29tcC5hY3Rpb25zICYmIHVuZGVmaW5lZCA9PT0gaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gcmVnaXN0ZXJBbmRTdWJzY3JpYmUgZnJvbSAke2NvbXBUeXBlfTogYWN0aW9ucyBub3QgZGVmaW5lZCBhcyBhIGNsYXNzIHZhcmlhYmxlIGZvciBpbkNvbXBgKTtcbiAgICAgIHJldHVybiByZXR1cm5PYmplY3Q7XG4gICAgfVxuICAgIGlmICh1bmRlZmluZWQgPT09IGluQ29tcC5icmlkZ2VDb21wb25lbnRJRCAmJiB1bmRlZmluZWQgPT09IGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byByZWdpc3RlckFuZFN1YnNjcmliZSBmcm9tICR7Y29tcFR5cGV9OiBicmlkZ2VDb21wb25lbnRJRCBub3QgZGVmaW5lZCBhcyBhIGNsYXNzIHZhcmlhYmxlIGZvciBpbkNvbXBgXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJldHVybk9iamVjdDtcbiAgICB9XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gaW5Db21wLnVuc3Vic2NyaWJlU3RvcmUgJiYgdW5kZWZpbmVkID09PSBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gcmVnaXN0ZXJBbmRTdWJzY3JpYmUgZnJvbSAke2NvbXBUeXBlfTogdW5zdWJzY3JpYmVTdG9yZSBub3QgZGVmaW5lZCBhcyBhIGNsYXNzIHZhcmlhYmxlIGZvciBpbkNvbXBgXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJldHVybk9iamVjdDtcbiAgICB9XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gaW5Db21wLnZhbGlkYXRlTWVzc2FnZSAmJiB1bmRlZmluZWQgPT09IGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBBbmd1bGFyUENvbm5lY3Q6IGJhZCBjYWxsIHRvIHJlZ2lzdGVyQW5kU3Vic2NyaWJlIGZyb20gJHtjb21wVHlwZX06IHZhbGlkYXRlTWVzc2FnZSBub3QgZGVmaW5lZCBhcyBhIGNsYXNzIHZhcmlhYmxlIGZvciBpbkNvbXBgKTtcbiAgICAgIHJldHVybiByZXR1cm5PYmplY3Q7XG4gICAgfVxuXG4gICAgLy8gY2FsbCBwcm9jZXNzQWN0aW9ucyB0byBwb3B1bGF0ZSBtZXRhZGF0YSB3aXRoIGFjdGlvbnMgYXMgaW4gUENvbm5lY3RIT1IgaW5pdGlhbGl6ZVxuICAgIHRoaXMucHJvY2Vzc0FjdGlvbnMoaW5Db21wKTtcbiAgICBpZiAodW5kZWZpbmVkID09PSBpbkNvbXAuYWN0aW9ucykge1xuICAgICAgcmV0dXJuT2JqZWN0LmFjdGlvbnMgPSBpbkNvbXAucENvbm4kLmdldEFjdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5Db21wLmFjdGlvbnMgPSBpbkNvbXAucENvbm4kLmdldEFjdGlvbnMoKTtcbiAgICB9XG5cbiAgICAvLyBiaW5kIHRoZSBwcm92aWRlZCBjYWxsYmFjayB0byB0aGUgY29tcG9uZW50IGl0J3MgYXNzb2NpYXRlZCB3aXRoXG4gICAgaW5DYWxsYmFjayA9IGluQ2FsbGJhY2suYmluZChpbkNvbXApO1xuXG4gICAgLy8gTm93IHByb2NlZWQgdG8gcmVnaXN0ZXIgYW5kIHN1YnNjcmliZS4uLlxuICAgIGNvbnN0IHRoZUNvbXBJRDogc3RyaW5nID0gdGhpcy5nZXROZXh0Q29tcG9uZW50SWQoKTtcbiAgICBjb25zdCB0aGVVbnN1YjogRnVuY3Rpb24gfCBudWxsID0gdGhpcy5zdWJzY3JpYmVUb1N0b3JlKGluQ29tcCwgaW5DYWxsYmFjayk7XG5cbiAgICBpZiAodW5kZWZpbmVkID09PSBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YSkge1xuICAgICAgaW5Db21wLmJyaWRnZUNvbXBvbmVudElEID0gdGhlQ29tcElEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5PYmplY3QuY29tcElEID0gdGhlQ29tcElEO1xuICAgICAgcmV0dXJuT2JqZWN0LnVuc3Vic2NyaWJlRm4gPSAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlRm9ybUZpZWxkKGluQ29tcCk7XG4gICAgICAgIHRoZVVuc3ViKCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGluaXRpYWxpemUgdGhpcyBjb21wb25lbnRzIGVudHJ5IGluIHRoZSBjb21wb25lbnRQcm9wc0FyclxuICAgIHRoaXMuY29tcG9uZW50UHJvcHNBcnJbdGhlQ29tcElEXSA9IHt9O1xuXG4gICAgdGhpcy5hZGRGb3JtRmllbGQoaW5Db21wKTtcblxuICAgIC8vIHJldHVybiBvYmplY3Qgd2l0aCBjb21wSUQgYW5kIHVuc3Vic2NyaWJlLi4uXG4gICAgcmV0dXJuIHJldHVybk9iamVjdDtcbiAgfVxuXG4gIGFkZEZvcm1GaWVsZChpbkNvbXApIHtcbiAgICBpbkNvbXAucENvbm4kPy5hZGRGb3JtRmllbGQoKTtcbiAgfVxuXG4gIHJlbW92ZUZvcm1GaWVsZChpbkNvbXApIHtcbiAgICBpZiAoaW5Db21wLnBDb25uJD8ucmVtb3ZlRm9ybUZpZWxkKSB7XG4gICAgICBpbkNvbXAucENvbm4kPy5yZW1vdmVGb3JtRmllbGQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZXh0TmFtZSA9IGluQ29tcC5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKTtcbiAgICBjb25zdCBwYWdlUmVmZXJlbmNlID0gaW5Db21wLnBDb25uJC5nZXRQYWdlUmVmZXJlbmNlKCk7XG4gICAgY29uc3QgcmF3Q29uZmlnID0gaW5Db21wLnBDb25uJC5fcmF3Q29uZmlnO1xuICAgIGNvbnN0IGluZGV4ID0gaW5Db21wLnBDb25uJC5pbmRleDtcblxuICAgIGlmIChPYmplY3QuaGFzT3duKHJhd0NvbmZpZz8uY29uZmlnID8/IHt9LCAndmFsdWUnKSAmJiBpbkNvbXAucENvbm4kLl90eXBlICE9PSAnQWRkcmVzcycpIHtcbiAgICAgIFBDb3JlLmdldENvbnRleHRUcmVlTWFuYWdlcigpLnJlbW92ZUZpZWxkTm9kZShcbiAgICAgICAgY29udGV4dE5hbWUsXG4gICAgICAgIHBhZ2VSZWZlcmVuY2UsXG4gICAgICAgIGluQ29tcC5wQ29ubiQudmlld05hbWUgfHwgJycsXG4gICAgICAgIGluQ29tcC5wQ29ubiQuX2dldFByb3BlcnR5TmFtZSgpLFxuICAgICAgICBpbmRleCBhcyBudW1iZXJcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChpbkNvbXAucENvbm4kLl90eXBlID09PSAnQWRkcmVzcycgJiYgcmF3Q29uZmlnPy5jb25maWc/LmFzc29jaWF0ZWRWaWV3KSB7XG4gICAgICAvLyByZW1vdmUgYWRkcmVzcyBub2RlIGFuZCBpdHMgY2hpbGRyZW5cbiAgICAgIFBDb3JlLmdldENvbnRleHRUcmVlTWFuYWdlcigpLnJlbW92ZVZpZXdOb2RlKGNvbnRleHROYW1lLCBwYWdlUmVmZXJlbmNlLCByYXdDb25maWcuY29uZmlnLmFzc29jaWF0ZWRWaWV3LCBpbmRleCBhcyBudW1iZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZW1vdmUgdmlldyBub2RlIGFuZCBpdHMgY2hpbGRyZW5cbiAgICAgIGNvbnN0IHBhZ2VSZWYgPSByYXdDb25maWc/LmNvbmZpZz8uY29udGV4dCA/IGAke3BhZ2VSZWZlcmVuY2V9JHtyYXdDb25maWc/LmNvbmZpZy5jb250ZXh0fWAgOiBwYWdlUmVmZXJlbmNlO1xuICAgICAgUENvcmUuZ2V0Q29udGV4dFRyZWVNYW5hZ2VyKCkucmVtb3ZlVmlld05vZGUoY29udGV4dE5hbWUsIHBhZ2VSZWYsIHJhd0NvbmZpZz8uY29uZmlnPy5uYW1lIHx8IHJhd0NvbmZpZz8uY29uZmlnPy5pZCB8fCAnJywgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29tcG9uZW50J3MgZW50cnkgaW4gX19fY29tcG9uZW50UHJvcHNBcnJfX18gaXNcbiAgLy8gIHRoZSBzYW1lIGFzIHRoZSBpbkNvbXBQcm9wcyBwYXNzZWQgaW4uXG4gIC8vICBBcyBhIHNpZGUgZWZmZWN0LCB1cGRhdGUgdGhlIGNvbXBvbmVudCdzIGVudHJ5IGluIGNvbXBvbmVudFByb3BzQXJyXG4gIC8vICBOT1RFOiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGluY29taW5nIGNvbXBvbmVudCBoYXMgdGhlIGZvbGxvd2luZzpcbiAgLy8gICogYSBicmlkZ2VDb21wb25lbnRJRCA8c3RyaW5nPiBwcm9wZXJ0eSAtIHVzZWQgYXMgbG9va3VwIGtleSBpbiBjb21wb25lbnRQcm9wc0FyclxuICAvLyAgKiBhIHBDb25uJCA8Pz4gcHJvcGVydHkgLSB1c2VkIHRvIGFjY2VzcyBmdW5jdGlvbnMgYWNjZXNzZWQgaW4gZ2V0Q29tcG9uZW50UHJvcHNcbiAgLy8gUmV0dXJuIHRydWU6IG1lYW5zIHRoZSBjb21wb25lbnQgcHJvcHMgYXJlIGRpZmZlcmVudCBhbmQgdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlIGl0c2VsZiAocmUtcmVuZGVyKVxuICAvLyBSZXR1cm4gZmFsc2U6IG1lYW5zIHRoZSBjb21wb25lbnQgcHJvcHMgYXJlIHRoZSBzYW1lIGFuZCB0aGUgY29tcG9uZW50IGRvZXNuJ3QgbmVlZCB0byB1cGRhdGUgKHJlLXJlbmRlcilcbiAgLy8gIE9uIGJhZCBpbnB1dCwgcmV0dXJuIGZhbHNlO1xuICAvKipcbiAgICogUmV0dXJucyAqKnRydWUqKiBpZiB0aGUgY29tcG9uZW50J3MgZW50cnkgaW4gX19fY29tcG9uZW50UHJvcHNBcnJfX18gaXNcbiAgICogdGhlIHNhbWUgYXMgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgY3VycmVudCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbXBvbmVudCAoX19faW5Db21wX19fKSBwYXNzZWQgaW4uXG4gICAqIEFzIGEgc2lkZSBlZmZlY3QsIHRoZSBjb21wb25lbnQncyBlbnRyeSBpbiBfX19jb21wb25lbnRQcm9wc0Fycl9fXyBpcyB1cGRhdGVkLlxuICAgKiAqKk5vdGUqKjogSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBpbmNvbWluZyBjb21wb25lbnQgaGFzIHRoZSBmb2xsb3dpbmc6XG4gICAqIChhKSBhIGJyaWRnZUNvbXBvbmVudElEIF9zdHJpbmdfIHByb3BlcnR5IHVzZWQgYXMgbG9va3VwIGtleSBpbiBfX19jb21wb25lbnRQcm9wc0Fycl9fX1xuICAgKiBhbmQgKGIpIGEgX19fcENvbm4kX19fIHByb3BlcnR5IHVzZWQgdG8gYWNjZXNzIGZ1bmN0aW9ucyBjYWxsZWQgaW4gX19fZ2V0Q29tcG9uZW50UHJvcHNfX19cbiAgICpcbiAgICogQHBhcmFtIGluQ29tcCBUaGUgY29tcG9uZW50IGFza2luZyBpZiBpdCBzaG91bGQgdXBkYXRlIGl0c2VsZlxuICAgKiBAcmV0dXJucyBSZXR1cm4gKip0cnVlKio6IG1lYW5zIHRoZSBjb21wb25lbnQgcHJvcHMgYXJlIGRpZmZlcmVudCBhbmQgdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlIGl0c2VsZiAocmUtcmVuZGVyKS5cbiAgICogUmV0dXJuICoqZmFsc2UqKjogbWVhbnMgdGhlIGNvbXBvbmVudCBwcm9wcyBhcmUgdGhlIHNhbWUgYW5kIHRoZSBjb21wb25lbnQgZG9lc24ndCBuZWVkIHRvIHVwZGF0ZSAocmUtcmVuZGVyKS5cbiAgICogSWYgdGhlICoqKmluQ29tcCoqKiBpbnB1dCBpcyBiYWQsIGZhbHNlIGlzIGFsc28gcmV0dXJuZWQuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoaW5Db21wKTogYm9vbGVhbiB7XG4gICAgLy8gY29uc3QgYlNob3dMb2dnaW5nID0gZmFsc2U7XG4gICAgbGV0IGJSZXQgPSBmYWxzZTtcbiAgICAvLyBjaGVjayBmb3IgcmVhc29uYWJsZSBpbnB1dFxuICAgIGlmIChVdGlscy5pc0VtcHR5T2JqZWN0KGluQ29tcCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gc2hvdWxkQ29tcG9uZW50VXBkYXRlOiBpbkNvbXA6ICR7SlNPTi5zdHJpbmdpZnkoaW5Db21wKX1gKTtcbiAgICAgIHJldHVybiBiUmV0O1xuICAgIH1cbiAgICBpZiAodW5kZWZpbmVkID09PSBpbkNvbXAudmFsaWRhdGVNZXNzYWdlICYmIHVuZGVmaW5lZCA9PT0gaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gc2hvdWxkQ29tcG9uZW50VXBkYXRlOiAke2luQ29tcC5jb25zdHJ1Y3Rvci5uYW1lfSBkb2VzIG5vdCBoYXZlIGEgdmFsaWRhdGVNZXNzYWdlIHByb3BlcnR5LmApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBJRCA9IHRoaXMuZ2V0Q29tcG9uZW50SUQoaW5Db21wKTtcblxuICAgIGNvbnN0IGN1cnJlbnRQcm9wczogYW55ID0gdGhpcy5jb21wb25lbnRQcm9wc0Fycltjb21wSURdO1xuICAgIGNvbnN0IGN1cnJlbnRQcm9wc0FzU3RyOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShjdXJyZW50UHJvcHMpO1xuXG4gICAgY29uc3QgaW5jb21pbmdQcm9wczogYW55ID0gdGhpcy5nZXRDb21wb25lbnRQcm9wcyhpbkNvbXApO1xuXG4gICAgLy8gaWYgaGF2ZSBwYWdlTWVzc2FnZXMsIGFuZCBpdCBpcyBibGFuaywgcmVtb3ZlIGl0LiAgVGhpcyBjYXVzZXMgaXNzdWVzIG9mIG1ha2luZyBpdCBhcHBlYXJcbiAgICAvLyB0aGF0IGEgd2lsbCBjYXVzZSBhbiB1cGRhdGUsIHdoZW4gdGhlcmUgaXMgbm8gY2hhbmdlXG4gICAgaWYgKHRoaXMuaXNQYWdlTWVzc2FnZXNFbXB0eShpbmNvbWluZ1Byb3BzKSkge1xuICAgICAgaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEucGFnZU1lc3NhZ2VzID0gaW5jb21pbmdQcm9wcy5wYWdlTWVzc2FnZXM7XG4gICAgICBkZWxldGUgaW5jb21pbmdQcm9wcy5wYWdlTWVzc2FnZXM7XG4gICAgfVxuXG4gICAgaWYgKGluY29taW5nUHJvcHMuaHR0cE1lc3NhZ2VzKSB7XG4gICAgICBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YS5odHRwTWVzc2FnZXMgPSBpbmNvbWluZ1Byb3BzLmh0dHBNZXNzYWdlcztcbiAgICAgIGluY29taW5nUHJvcHMuaHR0cE1lc3NhZ2VzID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGluY29taW5nUHJvcHNBc1N0cjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoaW5jb21pbmdQcm9wcyk7XG5cbiAgICBiUmV0ID0gaXNFcXVhbCA/ICFpc0VxdWFsKGN1cnJlbnRQcm9wcywgaW5jb21pbmdQcm9wcykgOiBjdXJyZW50UHJvcHNBc1N0ciAhPSBpbmNvbWluZ1Byb3BzQXNTdHI7XG5cbiAgICAvLyBCZWxvdyBwaWVjZSBvZiBjb2RlIGlzIG5lZWRlZCB0byByZS1yZW5kZXIgdGhlIGNvbXBvbmVudCBzaW5jZSB3ZSB3YW5uYSBldmFsdWF0ZSB0aGUgVmlzaWJpbGl0eSBleHByZXNzaW9uIHdpdGhpbiBWaWV3IGNvbXBvbmVudCBpbiBzdWNoIGNhc2VzXG4gICAgaWYgKGluQ29tcC5wQ29ubiQubWV0YS5jb25maWcuY29udGV4dD8ubGVuZ3RoID4gMCAmJiBpbkNvbXAucENvbm4kLmdldFBhZ2VSZWZlcmVuY2UoKS5sZW5ndGggPiAnY2FzZUluZm8uY29udGVudCcubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBOb3cgdXBkYXRlIHRoZSBlbnRyeSBpbiBjb21wb25lbnRQcm9wc0FyciB3aXRoIHRoZSBpbmNvbWluZyB2YWx1ZSBzb1xuICAgIC8vICB3ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IHRoYXQgbmV4dCB0aW1lLi4uXG4gICAgdGhpcy5jb21wb25lbnRQcm9wc0Fycltjb21wSURdID0gaW5jb21pbmdQcm9wcztcbiAgICBjb25zdCB2YWxpZGF0ZW1lc3NhZ2UgPSBpbmNvbWluZ1Byb3BzLnZhbGlkYXRlbWVzc2FnZSA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzLnV0aWxzLmh0bWxEZWNvZGUoaW5jb21pbmdQcm9wcy52YWxpZGF0ZW1lc3NhZ2UpO1xuICAgIC8vIGFuZCB1cGRhdGUgdGhlIGNvbXBvbmVudCdzIHZhbGlkYXRpb24gbWVzc2FnZSAoaWYgdW5kZWZpbmVkLCBpdCBzaG91bGQgYmUgc2V0IHRvIFwiXCIpXG4gICAgaWYgKHVuZGVmaW5lZCAhPT0gaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEpIHtcbiAgICAgIGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhLnZhbGlkYXRlTWVzc2FnZSA9IHZhbGlkYXRlbWVzc2FnZTtcblxuICAgICAgaWYgKGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhLnZhbGlkYXRlTWVzc2FnZSAhPSAnJykge1xuICAgICAgICAvLyBpZiBoYXZlIGEgdmFsaWRhdGUgbWVzc2FnZSwgdHVybiBvZmYgc3Bpbm5lclxuICAgICAgICBjb25zdCB0aW1lciA9IGludGVydmFsKDEwMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnBzU2VydmljZS5zZW5kTWVzc2FnZShmYWxzZSk7XG5cbiAgICAgICAgICB0aW1lci51bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgc0Vycm9yTWVzc2FnZSA9IGN1cnJlbnRQcm9wcyAmJiBjdXJyZW50UHJvcHMubGFiZWwgPyBjdXJyZW50UHJvcHMubGFiZWwuY29uY2F0KCcgLSAnKSA6ICcnO1xuICAgICAgICBzRXJyb3JNZXNzYWdlID0gc0Vycm9yTWVzc2FnZS5jb25jYXQoaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEudmFsaWRhdGVNZXNzYWdlKTtcbiAgICAgICAgdGhpcy5lclNlcnZpY2Uuc2VuZE1lc3NhZ2UoJ3VwZGF0ZScsIHNFcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpbkNvbXAudmFsaWRhdGVNZXNzYWdlID0gdmFsaWRhdGVtZXNzYWdlO1xuICAgIH1cblxuICAgIGlmIChiUmV0ICYmIGNvbXBJRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBiUmV0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coIGBBbmd1bGFyUENvbm5lY3QgY29tcG9uZW50ICR7Y29tcElEfSAtICR7aW5Db21wLmNvbnN0cnVjdG9yLm5hbWV9IC0gc2hvdWxkQ29tcG9uZW50VXBkYXRlOiAke2JSZXR9YCk7XG4gICAgLy8gY29uc29sZS5sb2coXCJjdXJyZW50IHByb3BzOiBcIiArIGN1cnJlbnRQcm9wc0FzU3RyKTtcblxuICAgIGlmIChiUmV0KSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgKioqKiBjaGFuZ2UgZm9yOiAke2luQ29tcC5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgICAgLy8gY29uc29sZS5sb2coXCJjdXJyZW50IHByb3BzOiBcIiArIGN1cnJlbnRQcm9wc0FzU3RyKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiaW5jb21pbmcgcHJvcHM6IFwiICsgaW5jb21pbmdQcm9wc0FzU3RyKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGAgICAgJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX06IHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5pbmc6ICR7YlJldH0sIGNvbXBJZDogJHtjb21wSUR9YCApO1xuICAgICAgLy8gY29uc29sZS5sb2coIGAgICAgVXBkYXRpbmcgd2l0aCBjb21wb25lbnRQcm9wcyBmb3IgJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX06ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5jb21wb25lbnRQcm9wc0Fycltjb21wSURdKX1gKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCBgICAgICAgICAgIGFuZCB2YWxpZGF0ZU1lc3NhZ2U6ICR7aW5Db21wLnZhbGlkYXRlTWVzc2FnZX1gKTtcbiAgICB9XG4gICAgLy8gZWxzZSBpZiAoaW5Db21wLmNvbnN0cnVjdG9yLm5hbWUuaW5kZXhPZihcIlZpZXdcIikgPj0gMCB8fCBpbkNvbXAuY29uc3RydWN0b3IubmFtZS5pbmRleE9mKFwiUm9vdFwiKSA+PSAwKSB7XG4gICAgLy8gICBjb25zb2xlLmxvZyhcIm5vIGNoYW5nZVwiKTtcbiAgICAvLyAgIGNvbnNvbGUubG9nKFwiY3VycmVudCBwcm9wczogXCIgKyBjdXJyZW50UHJvcHNBc1N0cik7XG4gICAgLy8gICBjb25zb2xlLmxvZyhcImluY29taW5nIHByb3BzOiBcIiArIGluY29taW5nUHJvcHNBc1N0cik7XG4gICAgLy8gICBjb25zb2xlLmxvZyhgICAgICR7aW5Db21wLmNvbnN0cnVjdG9yLm5hbWV9OiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJuaW5nOiAke2JSZXR9LCBjb21wSWQ6ICR7Y29tcElEfWAgKTtcblxuICAgIC8vIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKGAgICAgJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX06IHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5pbmc6ICR7YlJldH1gKTtcblxuICAgIHJldHVybiBiUmV0O1xuICB9XG5cbiAgaXNQYWdlTWVzc2FnZXNFbXB0eShpbmNvbWluZ1Byb3BzKSB7XG4gICAgcmV0dXJuIGluY29taW5nUHJvcHMucGFnZU1lc3NhZ2VzICYmIGluY29taW5nUHJvcHMucGFnZU1lc3NhZ2VzLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW4gYmUgY2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgZW5jb3VudGVyZWQgYSBjaGFuZ2UgZXZlbnRcbiAgICogQHBhcmFtIGluQ29tcCBUaGUgY29tcG9uZW50IGNhbGxpbmcgdGhlIGNoYW5nZSBldmVudFxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50XG4gICAqL1xuICBjaGFuZ2VIYW5kbGVyKGluQ29tcCwgZXZlbnQpIHtcbiAgICBjb25zdCBiTG9nZ2luZyA9IGZhbHNlO1xuICAgIGlmIChiTG9nZ2luZykge1xuICAgICAgLy8gY29uc29sZS5sb2coYEFuZ3VsYXJQQ29ubmVjdC5jaGFuZ2VIYW5kbGVyYCk7XG4gICAgfVxuICAgIC8vIGNoZWNrIGZvciByZWFzb25hYmxlIGlucHV0XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gaW5Db21wIHx8IFV0aWxzLmlzRW1wdHlPYmplY3QoaW5Db21wKSkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byBjaGFuZ2VIYW5kbGVyOiBpbkNvbXA6ICR7SlNPTi5zdHJpbmdpZnkoaW5Db21wKX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwQ29ubmVjdCA9IGluQ29tcC5wQ29ubiQ7XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gcENvbm5lY3QpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gY2hhbmdlSGFuZGxlcjogaW5Db21wLnBDb25uJDogJHtwQ29ubmVjdH1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjbGVhciBvdXQgZXJyb3JzXG4gICAgdGhpcy5lclNlcnZpY2Uuc2VuZE1lc3NhZ2UoJ2Rpc21pc3MnLCAnJyk7XG5cbiAgICBwQ29ubmVjdC5nZXRBY3Rpb25zQXBpKCkuY2hhbmdlSGFuZGxlcihwQ29ubmVjdCwgZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbiBiZSBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBlbmNvdW50ZXJlZCBhbiBldmVudCAoc3VjaCBhcyBibHVyKVxuICAgKiBAcGFyYW0gaW5Db21wIFRoZSBjb21wb25lbnQgY2FsbGluZyB0aGUgZXZlbnRcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBldmVudFxuICAgKi9cbiAgZXZlbnRIYW5kbGVyKGluQ29tcCwgZXZlbnQpIHtcbiAgICBjb25zdCBiTG9nZ2luZyA9IGZhbHNlO1xuICAgIGlmIChiTG9nZ2luZykge1xuICAgICAgLy8gY29uc29sZS5sb2coYEFuZ3VsYXJQQ29ubmVjdC5ldmVudEhhbmRsZXJgKTtcbiAgICB9XG4gICAgLy8gY2hlY2sgZm9yIHJlYXNvbmFibGUgaW5wdXRcbiAgICBpZiAodW5kZWZpbmVkID09PSBpbkNvbXAgfHwgVXRpbHMuaXNFbXB0eU9iamVjdChpbkNvbXApKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBBbmd1bGFyUENvbm5lY3Q6IGJhZCBjYWxsIHRvIGV2ZW50SGFuZGxlcjogaW5Db21wOiAke0pTT04uc3RyaW5naWZ5KGluQ29tcCl9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcENvbm5lY3QgPSBpbkNvbXAucENvbm4kO1xuICAgIGlmICh1bmRlZmluZWQgPT09IHBDb25uZWN0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBBbmd1bGFyUENvbm5lY3Q6IGJhZCBjYWxsIHRvIGV2ZW50SGFuZGxlcjogaW5Db21wLnBDb25uJDogJHtwQ29ubmVjdH1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwQ29ubmVjdC5nZXRBY3Rpb25zQXBpKCkuZXZlbnRIYW5kbGVyKHBDb25uZWN0LCBldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgQSBoYW5kbGUgdG8gdGhlIGFwcGxpY2F0aW9uJ3Mgc3RvcmVcbiAgICovXG4gIGdldFN0b3JlKCkge1xuICAgIGlmICh0aGlzLnRoZVN0b3JlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnRoZVN0b3JlID0gUENvcmUuZ2V0U3RvcmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudGhlU3RvcmU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGJMb2dNc2cgSWYgdHJ1ZSwgd2lsbCB3cml0ZSB0aGUgc3RyaW5naWZpZWQgc3RhdGUgdG8gdGhlIHN0b3JlIGZvciBkZWJ1Z2dpbmcvaW5zcGVjdGlvblxuICAgKiBAcGFyYW0gaW5Db21wIElmIHN1cHBsaWVkLCB0aGUgY29tcG9uZW50IHRoYXQgaXMgcmVxdWVzdGluZyB0aGUgc3RvcmUncyBzdGF0ZVxuICAgKiBAcmV0dXJucyBBIGhhbmRsZSB0byB0aGUgX19zdGF0ZV9fIG9mIGFwcGxpY2F0aW9uJ3Mgc3RvcmVcbiAgICovXG4gIGdldFN0YXRlKGJMb2dNc2c6IGJvb2xlYW4gPSBmYWxzZSwgaW5Db21wOiBhbnkgPSBudWxsKSB7XG4gICAgY29uc3QgdGhlU3RhdGU6IG9iamVjdCA9IHRoaXMuZ2V0U3RvcmUoKS5nZXRTdGF0ZSgpO1xuICAgIGlmIChiTG9nTXNnKSB7XG4gICAgICBjb25zdCB0aGVDb21wTmFtZTogc3RyaW5nID0gaW5Db21wID8gYCR7aW5Db21wLmNvbnN0cnVjdG9yLm5hbWV9OiBgIDogJyc7XG4gICAgICBjb25zb2xlLmxvZyhgJHt0aGVDb21wTmFtZX0gU3RvcmUgc3RhdGU6ICR7SlNPTi5zdHJpbmdpZnkodGhlU3RhdGUpfWApO1xuICAgIH1cbiAgICByZXR1cm4gdGhlU3RhdGU7XG4gIH1cblxuICAvLyBwcm9jZXNzQWN0aW9ucyAtIGNhcnJpZWQgb3ZlciBmcm9tIFBDb25uZWN0SE9DIGluaXRpYWxpemVcbiAgLyoqXG4gICAqICBwcm9jZXNzQWN0aW9ucyBleHBvc2VzIGFsbCBhY3Rpb25zIGluIHRoZSBtZXRhZGF0YS5cbiAgICogIEF0dGFjaGVzIGNvbW1vbiBoYW5kbGVyIChldmVudEhhbmRsZXIpIGZvciBhbGwgYWN0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgcHJvY2Vzc0FjdGlvbnMoaW5Db21wKSB7XG4gICAgY29uc3QgcENvbm5lY3QgPSBpbkNvbXAucENvbm4kO1xuICAgIGlmICh1bmRlZmluZWQgPT09IHBDb25uZWN0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBBbmd1bGFyUENvbm5lY3Q6IGJhZCBjYWxsIHRvIHByb2Nlc3NBY3Rpb25zOiBwQ29ubiQ6ICR7cENvbm5lY3R9IGZyb20gY29tcG9uZW50OiAke2luQ29tcC5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpbkNvbXAucENvbm4kLmlzRWRpdGFibGUoKSkge1xuICAgICAgaW5Db21wLnBDb25uJC5zZXRBY3Rpb24oJ29uQ2hhbmdlJywgdGhpcy5jaGFuZ2VIYW5kbGVyLmJpbmQodGhpcykpO1xuICAgICAgaW5Db21wLnBDb25uJC5zZXRBY3Rpb24oJ29uQmx1cicsIHRoaXMuZXZlbnRIYW5kbGVyLmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -842,7 +842,17 @@ class AngularPConnectService {
842
842
  let fnUnsubscribe;
843
843
  // console.log( `Bridge subscribing: ${theCompName} `);
844
844
  if (inComp) {
845
- fnUnsubscribe = this.getStore().subscribe(inCallback);
845
+ let bSubscribed = true;
846
+ const wrappedCallback = () => {
847
+ if (bSubscribed && inCallback) {
848
+ inCallback();
849
+ }
850
+ };
851
+ const storeUnsubscribe = this.getStore().subscribe(wrappedCallback);
852
+ fnUnsubscribe = () => {
853
+ bSubscribed = false;
854
+ storeUnsubscribe();
855
+ };
846
856
  }
847
857
  return fnUnsubscribe;
848
858
  }