igniteui-angular 12.3.0 → 12.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -161,6 +161,7 @@ export class IgxAccordionComponent {
161
161
  /** @hidden @internal **/
162
162
  ngAfterViewInit() {
163
163
  this._expandedPanels = new Set(this._panels.filter(panel => !panel.collapsed));
164
+ this._expandingPanels = new Set();
164
165
  this._panels.changes.pipe(takeUntil(this._destroy$)).subscribe(() => {
165
166
  this.subToChanges();
166
167
  });
@@ -263,6 +264,7 @@ export class IgxAccordionComponent {
263
264
  this._panels.forEach(panel => {
264
265
  panel.contentExpanded.pipe(takeUntil(this._unsubChildren$)).subscribe((args) => {
265
266
  this._expandedPanels.add(args.owner);
267
+ this._expandingPanels.delete(args.owner);
266
268
  const evArgs = Object.assign(Object.assign({}, args), { owner: this, panel: args.owner });
267
269
  this.panelExpanded.emit(evArgs);
268
270
  });
@@ -270,21 +272,36 @@ export class IgxAccordionComponent {
270
272
  if (args.cancel) {
271
273
  return;
272
274
  }
275
+ const evArgs = Object.assign(Object.assign({}, args), { owner: this, panel: args.owner });
276
+ this.panelExpanding.emit(evArgs);
277
+ if (evArgs.cancel) {
278
+ args.cancel = true;
279
+ return;
280
+ }
273
281
  if (this.singleBranchExpand) {
274
282
  this._expandedPanels.forEach(p => {
275
283
  if (!p.header.disabled) {
276
284
  p.collapse();
277
285
  }
278
286
  });
279
- }
280
- const evArgs = Object.assign(Object.assign({}, args), { owner: this, panel: args.owner });
281
- this.panelExpanding.emit(evArgs);
282
- if (evArgs.cancel) {
283
- args.cancel = true;
287
+ this._expandingPanels.forEach(p => {
288
+ var _a, _b;
289
+ if (!p.header.disabled) {
290
+ if (!p.animationSettings.closeAnimation) {
291
+ (_a = p.openAnimationPlayer) === null || _a === void 0 ? void 0 : _a.reset();
292
+ }
293
+ if (!p.animationSettings.openAnimation) {
294
+ (_b = p.closeAnimationPlayer) === null || _b === void 0 ? void 0 : _b.reset();
295
+ }
296
+ p.collapse();
297
+ }
298
+ });
299
+ this._expandingPanels.add(args.owner);
284
300
  }
285
301
  });
286
302
  panel.contentCollapsed.pipe(takeUntil(this._unsubChildren$)).subscribe((args) => {
287
303
  this._expandedPanels.delete(args.owner);
304
+ this._expandingPanels.delete(args.owner);
288
305
  const evArgs = Object.assign(Object.assign({}, args), { owner: this, panel: args.owner });
289
306
  this.panelCollapsed.emit(evArgs);
290
307
  });
@@ -328,4 +345,4 @@ IgxAccordionComponent.propDecorators = {
328
345
  panelCollapsed: [{ type: Output }],
329
346
  _panels: [{ type: ContentChildren, args: [IgxExpansionPanelComponent,] }]
330
347
  };
331
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9hY2NvcmRpb24vYWNjb3JkaW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1DLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUM5RSxXQUFXLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzFELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBZTFGLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUVoQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUtILE1BQU0sT0FBTyxxQkFBcUI7SUF1SjlCO1FBdEpBOzs7Ozs7Ozs7V0FTRztRQUdJLE9BQUUsR0FBRyxpQkFBaUIsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUV6Qyx5QkFBeUI7UUFFbEIsYUFBUSxHQUFHLGVBQWUsQ0FBQztRQUVsQyx5QkFBeUI7UUFFbEIsaUJBQVksR0FBRyxPQUFPLENBQUM7UUE0QjlCOzs7Ozs7Ozs7Ozs7O1dBYUc7UUFFSSx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7V0FtQkc7UUFFSSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFpQyxDQUFDO1FBRTFFOzs7Ozs7Ozs7Ozs7OztXQWNHO1FBRUksa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUUvRDs7Ozs7Ozs7OztXQVVHO1FBRUksb0JBQWUsR0FB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QyxlQUFlLENBQUMsQ0FBQztpQkFDckMsU0FBUyxDQUFDLENBQUMsQ0FBZ0IsRUFBRSxFQUFFO2dCQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHFCQUFxQjs7UUFDekIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssU0FBUyxFQUFFO1lBQ3RDLE1BQUEsSUFBSSxDQUFDLE1BQU0sMENBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ25GO0lBQ0wsQ0FBQzs7O1lBL1RKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsZUFBZTtnQkFDekIsc0VBQXVDO2FBQzFDOzs7O2lCQVlJLFdBQVcsU0FBQyxTQUFTLGNBQ3JCLEtBQUs7dUJBSUwsV0FBVyxTQUFDLHFCQUFxQjsyQkFJakMsV0FBVyxTQUFDLGVBQWU7Z0NBbUIzQixLQUFLO2lDQXdCTCxLQUFLOzZCQXVCTCxNQUFNOzRCQWtCTixNQUFNOzhCQWNOLE1BQU07NkJBV04sTUFBTTtzQkFjTixlQUFlLFNBQUMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZywgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQUNDT1JESU9OX05BVklHQVRJT05fS0VZUyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSUV4cGFuc2lvblBhbmVsQ2FuY2VsYWJsZUV2ZW50QXJncyxcbiAgICBJRXhwYW5zaW9uUGFuZWxFdmVudEFyZ3MsIElneEV4cGFuc2lvblBhbmVsQmFzZSB9IGZyb20gJy4uL2V4cGFuc2lvbi1wYW5lbC9leHBhbnNpb24tcGFuZWwuY29tbW9uJztcbmltcG9ydCB7IElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vZXhwYW5zaW9uLXBhbmVsL2V4cGFuc2lvbi1wYW5lbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9nZ2xlQW5pbWF0aW9uU2V0dGluZ3MgfSBmcm9tICcuLi9leHBhbnNpb24tcGFuZWwvdG9nZ2xlLWFuaW1hdGlvbi1jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElBY2NvcmRpb25FdmVudEFyZ3MgZXh0ZW5kcyBJRXhwYW5zaW9uUGFuZWxFdmVudEFyZ3Mge1xuICAgIG93bmVyOiBJZ3hBY2NvcmRpb25Db21wb25lbnQ7XG4gICAgLyoqIFByb3ZpZGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBgSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnRgIHdoaWNoIHdhcyBleHBhbmRlZC9jb2xsYXBzZWQuICovXG4gICAgcGFuZWw6IElneEV4cGFuc2lvblBhbmVsQmFzZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQWNjb3JkaW9uQ2FuY2VsYWJsZUV2ZW50QXJncyBleHRlbmRzIElFeHBhbnNpb25QYW5lbENhbmNlbGFibGVFdmVudEFyZ3Mge1xuICAgIG93bmVyOiBJZ3hBY2NvcmRpb25Db21wb25lbnQ7XG4gICAgLyoqIFByb3ZpZGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBgSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnRgIHdoaWNoIGlzIGN1cnJlbnRseSBleHBhbmRpbmcvY29sbGFwc2luZy4gKi9cbiAgICBwYW5lbDogSWd4RXhwYW5zaW9uUGFuZWxCYXNlO1xufVxuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbi8qKlxuICogSWd4QWNjb3JkaW9uIGlzIGEgY29udGFpbmVyLWJhc2VkIGNvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoYXQgY2FuIGhvdXNlIG11bHRpcGxlIGV4cGFuc2lvbiBwYW5lbHMuXG4gKlxuICogQGlneE1vZHVsZSBJZ3hBY2NvcmRpb25Nb2R1bGVcbiAqXG4gKiBAaWd4S2V5d29yZHMgYWNjb3JkaW9uXG4gKlxuICogQGlneEdyb3VwIExheW91dHNcbiAqXG4gKiBAcmVtYXJrXG4gKiBUaGUgSWduaXRlIFVJIGZvciBBbmd1bGFyIEFjY29yZGlvbiBjb21wb25lbnQgZW5hYmxlcyB0aGUgdXNlciB0byBuYXZpZ2F0ZSBhbW9uZyBtdWx0aXBsZSBjb2xsYXBzaW5nIHBhbmVsc1xuICogZGlzcGxheWVkIGluIGEgc2luZ2xlIGNvbnRhaW5lci5cbiAqIFRoZSBhY2NvcmRpb24gb2ZmZXJzIGtleWJvYXJkIG5hdmlnYXRpb24gYW5kIEFQSSB0byBjb250cm9sIHRoZSB1bmRlcmx5aW5nIHBhbmVscycgZXhwYW5zaW9uIHN0YXRlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LWFjY29yZGlvbj5cbiAqICAgPGlneC1leHBhbnNpb24tcGFuZWwgKm5nRm9yPVwibGV0IHBhbmVsIG9mIHBhbmVsc1wiPlxuICogICAgICAgLi4uXG4gKiAgIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAqIDwvaWd4LWFjY29yZGlvbj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1hY2NvcmRpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnYWNjb3JkaW9uLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hBY2NvcmRpb25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIEdldC9TZXQgdGhlIGBpZGAgb2YgdGhlIGFjY29yZGlvbiBjb21wb25lbnQuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgXCJpZ3gtYWNjb3JkaW9uLTBcImA7XG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYWNjb3JkaW9uIGlkPVwibXktZmlyc3QtYWNjb3JkaW9uXCI+PC9pZ3gtYWNjb3JkaW9uPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBhY2NvcmRpb25JZCA9IHRoaXMuYWNjb3JkaW9uLmlkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWFjY29yZGlvbi0ke05FWFRfSUQrK31gO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICoqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWFjY29yZGlvbicpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1hY2NvcmRpb24nO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICoqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuZGlzcGxheScpXG4gICAgcHVibGljIGRpc3BsYXlTdHlsZSA9ICdibG9jayc7XG5cbiAgICAvKipcbiAgICAgKiBHZXQvU2V0IHRoZSBhbmltYXRpb24gc2V0dGluZ3MgdGhhdCBwYW5lbHMgc2hvdWxkIHVzZSB3aGVuIGV4cGFuZGluZy9jb2xscGFzaW5nLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYWNjb3JkaW9uIFthbmltYXRpb25TZXR0aW5nc109XCJjdXN0b21BbmltYXRpb25TZXR0aW5nc1wiPjwvaWd4LWFjY29yZGlvbj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBjdXN0b21BbmltYXRpb25TZXR0aW5nczogVG9nZ2xlQW5pbWF0aW9uU2V0dGluZ3MgPSB7XG4gICAgICogICAgICBvcGVuQW5pbWF0aW9uOiBncm93VmVySW4sXG4gICAgICogICAgICBjbG9zZUFuaW1hdGlvbjogZ3Jvd1Zlck91dFxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB0aGlzLmFjY29yZGlvbi5hbmltYXRpb25TZXR0aW5ncyA9IGN1c3RvbUFuaW1hdGlvblNldHRpbmdzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBhbmltYXRpb25TZXR0aW5ncygpOiBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hbmltYXRpb25TZXR0aW5ncztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGFuaW1hdGlvblNldHRpbmdzKHZhbHVlOiBUb2dnbGVBbmltYXRpb25TZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9hbmltYXRpb25TZXR0aW5ncyA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZVBhbmVsc0FuaW1hdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldC9TZXQgaG93IHRoZSBhY2NvcmRpb24gaGFuZGxlcyB0aGUgZXhwYW5zaW9uIG9mIHRoZSBwcm9qZWN0ZWQgZXhwYW5zaW9uIHBhbmVscy5cbiAgICAgKiBJZiBzZXQgdG8gYHRydWVgLCBvbmx5IGEgc2luZ2xlIHBhbmVsIGNhbiBiZSBleHBhbmRlZCBhdCBhIHRpbWUsIGNvbGxhcHNpbmcgYWxsIG90aGVyc1xuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYWNjb3JkaW9uIFtzaW5nbGVCcmFuY2hFeHBhbmRdPVwidHJ1ZVwiPlxuICAgICAqIC4uLlxuICAgICAqIDwvaWd4LWFjY29yZGlvbj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmFjY29yZGlvbi5zaW5nbGVCcmFuY2hFeHBhbmQgPSBmYWxzZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaW5nbGVCcmFuY2hFeHBhbmQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYmVmb3JlIGEgcGFuZWwgaXMgZXhwYW5kZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoaXMgZXZlbnQgaXMgY2FuY2VsYWJsZS5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWFjY29yZGlvbiAocGFuZWxFeHBhbmRpbmcpPVwiaGFuZGxlUGFuZWxFeHBhbmRpbmcoJGV2ZW50KVwiPlxuICAgICAqIDwvaWd4LWFjY29yZGlvbj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBoYW5kbGVQYW5lbEV4cGFuZGluZyhldmVudDogSUV4cGFuc2lvblBhbmVsQ2FuY2VsYWJsZUV2ZW50QXJncyl7XG4gICAgICogIGNvbnN0IGV4cGFuZGVkUGFuZWw6IElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50ID0gZXZlbnQucGFuZWw7XG4gICAgICogIGlmIChleHBhbmRlZFBhbmVsLmRpc2FibGVkKSB7XG4gICAgICogICAgICBldmVudC5jYW5jZWwgPSB0cnVlO1xuICAgICAqICB9XG4gICAgICogfVxuICAgICAqYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBhbmVsRXhwYW5kaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJQWNjb3JkaW9uQ2FuY2VsYWJsZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgYSBwYW5lbCBoYXMgYmVlbiBleHBhbmRlZC5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWFjY29yZGlvbiAocGFuZWxFeHBhbmRlZCk9XCJoYW5kbGVQYW5lbEV4cGFuZGVkKCRldmVudClcIj5cbiAgICAgKiA8L2lneC1hY2NvcmRpb24+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKmBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgaGFuZGxlUGFuZWxFeHBhbmRlZChldmVudDogSUV4cGFuc2lvblBhbmVsQ2FuY2VsYWJsZUV2ZW50QXJncykge1xuICAgICAqICBjb25zdCBleHBhbmRlZFBhbmVsOiBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudCA9IGV2ZW50LnBhbmVsO1xuICAgICAqICBjb25zb2xlLmxvZyhcIlBhbmVsIGlzIGV4cGFuZGVkOiBcIiwgZXhwYW5kZWRQYW5lbC5pZCk7XG4gICAgICogfVxuICAgICAqYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBhbmVsRXhwYW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElBY2NvcmRpb25FdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGJlZm9yZSBhIHBhbmVsIGlzIGNvbGxhcHNlZC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhpcyBldmVudCBpcyBjYW5jZWxhYmxlLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYWNjb3JkaW9uIChwYW5lbENvbGxhcHNpbmcpPVwiaGFuZGxlUGFuZWxDb2xsYXBzaW5nKCRldmVudClcIj5cbiAgICAgKiA8L2lneC1hY2NvcmRpb24+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBhbmVsQ29sbGFwc2luZyA9IG5ldyBFdmVudEVtaXR0ZXI8SUFjY29yZGlvbkNhbmNlbGFibGVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIGEgcGFuZWwgaGFzIGJlZW4gY29sbGFwc2VkLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYWNjb3JkaW9uIChwYW5lbENvbGxhcHNlZCk9XCJoYW5kbGVQYW5lbENvbGxhcHNlZCgkZXZlbnQpXCI+XG4gICAgICogPC9pZ3gtYWNjb3JkaW9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwYW5lbENvbGxhcHNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUFjY29yZGlvbkV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgcGFuZWxzLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHBhbmVsczogSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnRbXSA9IHRoaXMuYWNjb3JkaW9uLnBhbmVscztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBhbmVscygpOiBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhbmVscz8udG9BcnJheSgpO1xuICAgIH1cblxuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnQpXG4gICAgcHJpdmF0ZSBfcGFuZWxzITogUXVlcnlMaXN0PElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50PjtcbiAgICBwcml2YXRlIF9hbmltYXRpb25TZXR0aW5ncyE6IFRvZ2dsZUFuaW1hdGlvblNldHRpbmdzO1xuICAgIHByaXZhdGUgX2V4cGFuZGVkUGFuZWxzITogU2V0PElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50PjtcbiAgICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBfdW5zdWJDaGlsZHJlbiQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgX2VuYWJsZWRQYW5lbHMhOiBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudFtdO1xuXG4gICAgY29uc3RydWN0b3IoKSB7IH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqKi9cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZVBhbmVsc0FuaW1hdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9leHBhbmRlZFBhbmVscyA9IG5ldyBTZXQ8SWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnQ+KHRoaXMuX3BhbmVscy5maWx0ZXIocGFuZWwgPT4gIXBhbmVsLmNvbGxhcHNlZCkpO1xuICAgICAgICB0aGlzLl9wYW5lbHMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1YlRvQ2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJUb0NoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Vuc3ViQ2hpbGRyZW4kLm5leHQoKTtcbiAgICAgICAgdGhpcy5fdW5zdWJDaGlsZHJlbiQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4cGFuZHMgYWxsIGNvbGxhcHNlZCBleHBhbnNpb24gcGFuZWxzLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGFjY29yZGlvbi5leHBhbmRBbGwoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwYW5kQWxsKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zaW5nbGVCcmFuY2hFeHBhbmQpIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVsc1tpXS5jb2xsYXBzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcGFuZWxzLmxhc3QuZXhwYW5kKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBhbmVscy5mb3JFYWNoKHBhbmVsID0+IHBhbmVsLmV4cGFuZCgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb2xsYXBzZXMgYWxsIGV4cGFuZGVkIGV4cGFuc2lvbiBwYW5lbHMuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogYWNjb3JkaW9uLmNvbGxhcHNlQWxsKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvbGxhcHNlQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhbmVscy5mb3JFYWNoKHBhbmVsID0+IHBhbmVsLmNvbGxhcHNlKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgcGFuZWw6IElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIShBQ0NPUkRJT05fTkFWSUdBVElPTl9LRVlTLmhhcyhrZXkpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPIERPOiBpZiB3ZSBldmVyIHdhbnQgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGFjY29yZGlvbixcbiAgICAgICAgLy8gZW5hYmxlZFBhbmVscyBjb3VsZCBiZSBjYWNoZWQgKGJ5IG1ha2luZyBhIGRpc2FibGVkQ2hhbmdlIGVtaXR0ZXIgb24gdGhlIHBhbmVsIGhlYWRlcilcbiAgICAgICAgdGhpcy5fZW5hYmxlZFBhbmVscyA9IHRoaXMuX3BhbmVscy5maWx0ZXIocCA9PiAhcC5oZWFkZXIuZGlzYWJsZWQpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmhhbmRsZU5hdmlnYXRpb24oZXZlbnQsIHBhbmVsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU5hdmlnYXRpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHBhbmVsOiBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlICdob21lJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9lbmFibGVkUGFuZWxzWzBdLmhlYWRlci5pbm5lckVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZW5hYmxlZFBhbmVsc1t0aGlzLl9lbmFibGVkUGFuZWxzLmxlbmd0aCAtIDFdLmhlYWRlci5pbm5lckVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Fycm93dXAnOlxuICAgICAgICAgICAgY2FzZSAndXAnOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlVXBEb3duQXJyb3codHJ1ZSwgZXZlbnQsIHBhbmVsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Fycm93ZG93bic6XG4gICAgICAgICAgICBjYXNlICdkb3duJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVVwRG93bkFycm93KGZhbHNlLCBldmVudCwgcGFuZWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVVcERvd25BcnJvdyhpc1VwOiBib29sZWFuLCBldmVudDogS2V5Ym9hcmRFdmVudCwgcGFuZWw6IElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkUGFuZWwgPSBwYW5lbDtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmdldE5leHRQYW5lbChmb2N1c2VkUGFuZWwsIGlzVXAgPyAtMSA6IDEpO1xuICAgICAgICAgICAgaWYgKG5leHQgPT09IGZvY3VzZWRQYW5lbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQuaGVhZGVyLmlubmVyRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5hbHRLZXkgJiYgZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIGlmIChpc1VwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW5hYmxlZFBhbmVscy5mb3JFYWNoKHAgPT4gcC5jb2xsYXBzZSgpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2luZ2xlQnJhbmNoRXhwYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLl9lbmFibGVkUGFuZWxzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW5hYmxlZFBhbmVsc1tpXS5jb2xsYXBzZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuYWJsZWRQYW5lbHNbdGhpcy5fZW5hYmxlZFBhbmVscy5sZW5ndGggLSAxXS5leHBhbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9lbmFibGVkUGFuZWxzLmZvckVhY2gocCA9PiBwLmV4cGFuZCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TmV4dFBhbmVsKHBhbmVsOiBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudCwgZGlyOiAxIHwgLTEgPSAxKTogSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnQge1xuICAgICAgICBjb25zdCBwYW5lbEluZGV4ID0gdGhpcy5fZW5hYmxlZFBhbmVscy5pbmRleE9mKHBhbmVsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWRQYW5lbHNbcGFuZWxJbmRleCArIGRpcl0gfHwgcGFuZWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJUb0NoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Vuc3ViQ2hpbGRyZW4kLm5leHQoKTtcbiAgICAgICAgdGhpcy5fcGFuZWxzLmZvckVhY2gocGFuZWwgPT4ge1xuICAgICAgICAgICAgcGFuZWwuY29udGVudEV4cGFuZGVkLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3ViQ2hpbGRyZW4kKSkuc3Vic2NyaWJlKChhcmdzOiBJRXhwYW5zaW9uUGFuZWxFdmVudEFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9leHBhbmRlZFBhbmVscy5hZGQoYXJncy5vd25lcik7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZBcmdzOiBJQWNjb3JkaW9uRXZlbnRBcmdzID0geyAuLi5hcmdzLCBvd25lcjogdGhpcywgcGFuZWw6IGFyZ3Mub3duZXIgfTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVsRXhwYW5kZWQuZW1pdChldkFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwYW5lbC5jb250ZW50RXhwYW5kaW5nLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3ViQ2hpbGRyZW4kKSkuc3Vic2NyaWJlKChhcmdzOiBJRXhwYW5zaW9uUGFuZWxDYW5jZWxhYmxlRXZlbnRBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2luZ2xlQnJhbmNoRXhwYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V4cGFuZGVkUGFuZWxzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXAuaGVhZGVyLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5jb2xsYXBzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZXZBcmdzOiBJQWNjb3JkaW9uQ2FuY2VsYWJsZUV2ZW50QXJncyA9IHsgLi4uYXJncywgb3duZXI6IHRoaXMsIHBhbmVsOiBhcmdzLm93bmVyIH07XG4gICAgICAgICAgICAgICAgdGhpcy5wYW5lbEV4cGFuZGluZy5lbWl0KGV2QXJncyk7XG4gICAgICAgICAgICAgICAgaWYgKGV2QXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncy5jYW5jZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGFuZWwuY29udGVudENvbGxhcHNlZC5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YkNoaWxkcmVuJCkpLnN1YnNjcmliZSgoYXJnczogSUV4cGFuc2lvblBhbmVsRXZlbnRBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRQYW5lbHMuZGVsZXRlKGFyZ3Mub3duZXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2QXJnczogSUFjY29yZGlvbkV2ZW50QXJncyA9IHsgLi4uYXJncywgb3duZXI6IHRoaXMsIHBhbmVsOiBhcmdzLm93bmVyIH07XG4gICAgICAgICAgICAgICAgdGhpcy5wYW5lbENvbGxhcHNlZC5lbWl0KGV2QXJncyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBhbmVsLmNvbnRlbnRDb2xsYXBzaW5nLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3ViQ2hpbGRyZW4kKSkuc3Vic2NyaWJlKChhcmdzOiBJRXhwYW5zaW9uUGFuZWxDYW5jZWxhYmxlRXZlbnRBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZBcmdzOiBJQWNjb3JkaW9uQ2FuY2VsYWJsZUV2ZW50QXJncyA9IHsgLi4uYXJncywgb3duZXI6IHRoaXMsIHBhbmVsOiBhcmdzLm93bmVyIH07XG4gICAgICAgICAgICAgICAgdGhpcy5wYW5lbENvbGxhcHNpbmcuZW1pdChldkFyZ3MpO1xuICAgICAgICAgICAgICAgIGlmIChldkFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MuY2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZyb21FdmVudChwYW5lbC5oZWFkZXIuaW5uZXJFbGVtZW50LCAna2V5ZG93bicpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3ViQ2hpbGRyZW4kKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlS2V5ZG93bihlLCBwYW5lbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUGFuZWxzQW5pbWF0aW9uKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hbmltYXRpb25TZXR0aW5ncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnBhbmVscz8uZm9yRWFjaChwYW5lbCA9PiBwYW5lbC5hbmltYXRpb25TZXR0aW5ncyA9IHRoaXMuYW5pbWF0aW9uU2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
348
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9hY2NvcmRpb24vYWNjb3JkaW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1DLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUM5RSxXQUFXLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzFELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBZTFGLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUVoQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUtILE1BQU0sT0FBTyxxQkFBcUI7SUF3SjlCO1FBdkpBOzs7Ozs7Ozs7V0FTRztRQUdJLE9BQUUsR0FBRyxpQkFBaUIsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUV6Qyx5QkFBeUI7UUFFbEIsYUFBUSxHQUFHLGVBQWUsQ0FBQztRQUVsQyx5QkFBeUI7UUFFbEIsaUJBQVksR0FBRyxPQUFPLENBQUM7UUE0QjlCOzs7Ozs7Ozs7Ozs7O1dBYUc7UUFFSSx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7V0FtQkc7UUFFSSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFpQyxDQUFDO1FBRTFFOzs7Ozs7Ozs7Ozs7OztXQWNHO1FBRUksa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUUvRDs7Ozs7Ozs7OztXQVVHO1FBRUksb0JBQWUsR0FB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QUFLLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDbkY7SUFDTCxDQUFDOzs7WUFoVkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixzRUFBdUM7YUFDMUM7Ozs7aUJBWUksV0FBVyxTQUFDLFNBQVMsY0FDckIsS0FBSzt1QkFJTCxXQUFXLFNBQUMscUJBQXFCOzJCQUlqQyxXQUFXLFNBQUMsZUFBZTtnQ0FtQjNCLEtBQUs7aUNBd0JMLEtBQUs7NkJBdUJMLE1BQU07NEJBa0JOLE1BQU07OEJBY04sTUFBTTs2QkFXTixNQUFNO3NCQWNOLGVBQWUsU0FBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXQsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBQ0NPUkRJT05fTkFWSUdBVElPTl9LRVlTIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJRXhwYW5zaW9uUGFuZWxDYW5jZWxhYmxlRXZlbnRBcmdzLFxuICAgIElFeHBhbnNpb25QYW5lbEV2ZW50QXJncywgSWd4RXhwYW5zaW9uUGFuZWxCYXNlIH0gZnJvbSAnLi4vZXhwYW5zaW9uLXBhbmVsL2V4cGFuc2lvbi1wYW5lbC5jb21tb24nO1xuaW1wb3J0IHsgSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi9leHBhbnNpb24tcGFuZWwvZXhwYW5zaW9uLXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyB9IGZyb20gJy4uL2V4cGFuc2lvbi1wYW5lbC90b2dnbGUtYW5pbWF0aW9uLWNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFjY29yZGlvbkV2ZW50QXJncyBleHRlbmRzIElFeHBhbnNpb25QYW5lbEV2ZW50QXJncyB7XG4gICAgb3duZXI6IElneEFjY29yZGlvbkNvbXBvbmVudDtcbiAgICAvKiogUHJvdmlkZXMgYSByZWZlcmVuY2UgdG8gdGhlIGBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudGAgd2hpY2ggd2FzIGV4cGFuZGVkL2NvbGxhcHNlZC4gKi9cbiAgICBwYW5lbDogSWd4RXhwYW5zaW9uUGFuZWxCYXNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBY2NvcmRpb25DYW5jZWxhYmxlRXZlbnRBcmdzIGV4dGVuZHMgSUV4cGFuc2lvblBhbmVsQ2FuY2VsYWJsZUV2ZW50QXJncyB7XG4gICAgb3duZXI6IElneEFjY29yZGlvbkNvbXBvbmVudDtcbiAgICAvKiogUHJvdmlkZXMgYSByZWZlcmVuY2UgdG8gdGhlIGBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudGAgd2hpY2ggaXMgY3VycmVudGx5IGV4cGFuZGluZy9jb2xsYXBzaW5nLiAqL1xuICAgIHBhbmVsOiBJZ3hFeHBhbnNpb25QYW5lbEJhc2U7XG59XG5cbmxldCBORVhUX0lEID0gMDtcblxuLyoqXG4gKiBJZ3hBY2NvcmRpb24gaXMgYSBjb250YWluZXItYmFzZWQgY29tcG9uZW50IHRoYXQgY29udGFpbnMgdGhhdCBjYW4gaG91c2UgbXVsdGlwbGUgZXhwYW5zaW9uIHBhbmVscy5cbiAqXG4gKiBAaWd4TW9kdWxlIElneEFjY29yZGlvbk1vZHVsZVxuICpcbiAqIEBpZ3hLZXl3b3JkcyBhY2NvcmRpb25cbiAqXG4gKiBAaWd4R3JvdXAgTGF5b3V0c1xuICpcbiAqIEByZW1hcmtcbiAqIFRoZSBJZ25pdGUgVUkgZm9yIEFuZ3VsYXIgQWNjb3JkaW9uIGNvbXBvbmVudCBlbmFibGVzIHRoZSB1c2VyIHRvIG5hdmlnYXRlIGFtb25nIG11bHRpcGxlIGNvbGxhcHNpbmcgcGFuZWxzXG4gKiBkaXNwbGF5ZWQgaW4gYSBzaW5nbGUgY29udGFpbmVyLlxuICogVGhlIGFjY29yZGlvbiBvZmZlcnMga2V5Ym9hcmQgbmF2aWdhdGlvbiBhbmQgQVBJIHRvIGNvbnRyb2wgdGhlIHVuZGVybHlpbmcgcGFuZWxzJyBleHBhbnNpb24gc3RhdGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtYWNjb3JkaW9uPlxuICogICA8aWd4LWV4cGFuc2lvbi1wYW5lbCAqbmdGb3I9XCJsZXQgcGFuZWwgb2YgcGFuZWxzXCI+XG4gKiAgICAgICAuLi5cbiAqICAgPC9pZ3gtZXhwYW5zaW9uLXBhbmVsPlxuICogPC9pZ3gtYWNjb3JkaW9uPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWFjY29yZGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICdhY2NvcmRpb24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIElneEFjY29yZGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogR2V0L1NldCB0aGUgYGlkYCBvZiB0aGUgYWNjb3JkaW9uIGNvbXBvbmVudC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBcImlneC1hY2NvcmRpb24tMFwiYDtcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1hY2NvcmRpb24gaWQ9XCJteS1maXJzdC1hY2NvcmRpb25cIj48L2lneC1hY2NvcmRpb24+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGFjY29yZGlvbklkID0gdGhpcy5hY2NvcmRpb24uaWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtYWNjb3JkaW9uLSR7TkVYVF9JRCsrfWA7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKiovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtYWNjb3JkaW9uJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LWFjY29yZGlvbic7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKiovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5kaXNwbGF5JylcbiAgICBwdWJsaWMgZGlzcGxheVN0eWxlID0gJ2Jsb2NrJztcblxuICAgIC8qKlxuICAgICAqIEdldC9TZXQgdGhlIGFuaW1hdGlvbiBzZXR0aW5ncyB0aGF0IHBhbmVscyBzaG91bGQgdXNlIHdoZW4gZXhwYW5kaW5nL2NvbGxwYXNpbmcuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1hY2NvcmRpb24gW2FuaW1hdGlvblNldHRpbmdzXT1cImN1c3RvbUFuaW1hdGlvblNldHRpbmdzXCI+PC9pZ3gtYWNjb3JkaW9uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGN1c3RvbUFuaW1hdGlvblNldHRpbmdzOiBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyA9IHtcbiAgICAgKiAgICAgIG9wZW5BbmltYXRpb246IGdyb3dWZXJJbixcbiAgICAgKiAgICAgIGNsb3NlQW5pbWF0aW9uOiBncm93VmVyT3V0XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIHRoaXMuYWNjb3JkaW9uLmFuaW1hdGlvblNldHRpbmdzID0gY3VzdG9tQW5pbWF0aW9uU2V0dGluZ3M7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGFuaW1hdGlvblNldHRpbmdzKCk6IFRvZ2dsZUFuaW1hdGlvblNldHRpbmdzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FuaW1hdGlvblNldHRpbmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgYW5pbWF0aW9uU2V0dGluZ3ModmFsdWU6IFRvZ2dsZUFuaW1hdGlvblNldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX2FuaW1hdGlvblNldHRpbmdzID0gdmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlUGFuZWxzQW5pbWF0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0L1NldCBob3cgdGhlIGFjY29yZGlvbiBoYW5kbGVzIHRoZSBleHBhbnNpb24gb2YgdGhlIHByb2plY3RlZCBleHBhbnNpb24gcGFuZWxzLlxuICAgICAqIElmIHNldCB0byBgdHJ1ZWAsIG9ubHkgYSBzaW5nbGUgcGFuZWwgY2FuIGJlIGV4cGFuZGVkIGF0IGEgdGltZSwgY29sbGFwc2luZyBhbGwgb3RoZXJzXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1hY2NvcmRpb24gW3NpbmdsZUJyYW5jaEV4cGFuZF09XCJ0cnVlXCI+XG4gICAgICogLi4uXG4gICAgICogPC9pZ3gtYWNjb3JkaW9uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuYWNjb3JkaW9uLnNpbmdsZUJyYW5jaEV4cGFuZCA9IGZhbHNlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNpbmdsZUJyYW5jaEV4cGFuZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBiZWZvcmUgYSBwYW5lbCBpcyBleHBhbmRlZC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhpcyBldmVudCBpcyBjYW5jZWxhYmxlLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYWNjb3JkaW9uIChwYW5lbEV4cGFuZGluZyk9XCJoYW5kbGVQYW5lbEV4cGFuZGluZygkZXZlbnQpXCI+XG4gICAgICogPC9pZ3gtYWNjb3JkaW9uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICpgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIGhhbmRsZVBhbmVsRXhwYW5kaW5nKGV2ZW50OiBJRXhwYW5zaW9uUGFuZWxDYW5jZWxhYmxlRXZlbnRBcmdzKXtcbiAgICAgKiAgY29uc3QgZXhwYW5kZWRQYW5lbDogSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnQgPSBldmVudC5wYW5lbDtcbiAgICAgKiAgaWYgKGV4cGFuZGVkUGFuZWwuZGlzYWJsZWQpIHtcbiAgICAgKiAgICAgIGV2ZW50LmNhbmNlbCA9IHRydWU7XG4gICAgICogIH1cbiAgICAgKiB9XG4gICAgICpgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcGFuZWxFeHBhbmRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElBY2NvcmRpb25DYW5jZWxhYmxlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBhZnRlciBhIHBhbmVsIGhhcyBiZWVuIGV4cGFuZGVkLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYWNjb3JkaW9uIChwYW5lbEV4cGFuZGVkKT1cImhhbmRsZVBhbmVsRXhwYW5kZWQoJGV2ZW50KVwiPlxuICAgICAqIDwvaWd4LWFjY29yZGlvbj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBoYW5kbGVQYW5lbEV4cGFuZGVkKGV2ZW50OiBJRXhwYW5zaW9uUGFuZWxDYW5jZWxhYmxlRXZlbnRBcmdzKSB7XG4gICAgICogIGNvbnN0IGV4cGFuZGVkUGFuZWw6IElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50ID0gZXZlbnQucGFuZWw7XG4gICAgICogIGNvbnNvbGUubG9nKFwiUGFuZWwgaXMgZXhwYW5kZWQ6IFwiLCBleHBhbmRlZFBhbmVsLmlkKTtcbiAgICAgKiB9XG4gICAgICpgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcGFuZWxFeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUFjY29yZGlvbkV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYmVmb3JlIGEgcGFuZWwgaXMgY29sbGFwc2VkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGNhbmNlbGFibGUuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1hY2NvcmRpb24gKHBhbmVsQ29sbGFwc2luZyk9XCJoYW5kbGVQYW5lbENvbGxhcHNpbmcoJGV2ZW50KVwiPlxuICAgICAqIDwvaWd4LWFjY29yZGlvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcGFuZWxDb2xsYXBzaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJQWNjb3JkaW9uQ2FuY2VsYWJsZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgYSBwYW5lbCBoYXMgYmVlbiBjb2xsYXBzZWQuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1hY2NvcmRpb24gKHBhbmVsQ29sbGFwc2VkKT1cImhhbmRsZVBhbmVsQ29sbGFwc2VkKCRldmVudClcIj5cbiAgICAgKiA8L2lneC1hY2NvcmRpb24+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBhbmVsQ29sbGFwc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJQWNjb3JkaW9uRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogR2V0IGFsbCBwYW5lbHMuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgcGFuZWxzOiBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudFtdID0gdGhpcy5hY2NvcmRpb24ucGFuZWxzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcGFuZWxzKCk6IElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFuZWxzPy50b0FycmF5KCk7XG4gICAgfVxuXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudClcbiAgICBwcml2YXRlIF9wYW5lbHMhOiBRdWVyeUxpc3Q8SWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnQ+O1xuICAgIHByaXZhdGUgX2FuaW1hdGlvblNldHRpbmdzITogVG9nZ2xlQW5pbWF0aW9uU2V0dGluZ3M7XG4gICAgcHJpdmF0ZSBfZXhwYW5kZWRQYW5lbHMhOiBTZXQ8SWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnQ+O1xuICAgIHByaXZhdGUgX2V4cGFuZGluZ1BhbmVscyE6IFNldDxJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudD47XG4gICAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgX3Vuc3ViQ2hpbGRyZW4kID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIF9lbmFibGVkUGFuZWxzITogSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnRbXTtcblxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKiovXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVQYW5lbHNBbmltYXRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKiovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWRQYW5lbHMgPSBuZXcgU2V0PElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50Pih0aGlzLl9wYW5lbHMuZmlsdGVyKHBhbmVsID0+ICFwYW5lbC5jb2xsYXBzZWQpKTtcbiAgICAgICAgdGhpcy5fZXhwYW5kaW5nUGFuZWxzID0gbmV3IFNldDxJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudD4oKTtcbiAgICAgICAgdGhpcy5fcGFuZWxzLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJUb0NoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3ViVG9DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91bnN1YkNoaWxkcmVuJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX3Vuc3ViQ2hpbGRyZW4kLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHBhbmRzIGFsbCBjb2xsYXBzZWQgZXhwYW5zaW9uIHBhbmVscy5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBhY2NvcmRpb24uZXhwYW5kQWxsKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGV4cGFuZEFsbCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2luZ2xlQnJhbmNoRXhwYW5kKSB7XG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYW5lbHNbaV0uY29sbGFwc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3BhbmVscy5sYXN0LmV4cGFuZCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wYW5lbHMuZm9yRWFjaChwYW5lbCA9PiBwYW5lbC5leHBhbmQoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGFwc2VzIGFsbCBleHBhbmRlZCBleHBhbnNpb24gcGFuZWxzLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGFjY29yZGlvbi5jb2xsYXBzZUFsbCgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjb2xsYXBzZUFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYW5lbHMuZm9yRWFjaChwYW5lbCA9PiBwYW5lbC5jb2xsYXBzZSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHBhbmVsOiBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCEoQUNDT1JESU9OX05BVklHQVRJT05fS0VZUy5oYXMoa2V5KSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBUTyBETzogaWYgd2UgZXZlciB3YW50IHRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBhY2NvcmRpb24sXG4gICAgICAgIC8vIGVuYWJsZWRQYW5lbHMgY291bGQgYmUgY2FjaGVkIChieSBtYWtpbmcgYSBkaXNhYmxlZENoYW5nZSBlbWl0dGVyIG9uIHRoZSBwYW5lbCBoZWFkZXIpXG4gICAgICAgIHRoaXMuX2VuYWJsZWRQYW5lbHMgPSB0aGlzLl9wYW5lbHMuZmlsdGVyKHAgPT4gIXAuaGVhZGVyLmRpc2FibGVkKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVOYXZpZ2F0aW9uKGV2ZW50LCBwYW5lbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVOYXZpZ2F0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBwYW5lbDogSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnQpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSAnaG9tZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZW5hYmxlZFBhbmVsc1swXS5oZWFkZXIuaW5uZXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VuYWJsZWRQYW5lbHNbdGhpcy5fZW5hYmxlZFBhbmVscy5sZW5ndGggLSAxXS5oZWFkZXIuaW5uZXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhcnJvd3VwJzpcbiAgICAgICAgICAgIGNhc2UgJ3VwJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVVwRG93bkFycm93KHRydWUsIGV2ZW50LCBwYW5lbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhcnJvd2Rvd24nOlxuICAgICAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVVcERvd25BcnJvdyhmYWxzZSwgZXZlbnQsIHBhbmVsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlVXBEb3duQXJyb3coaXNVcDogYm9vbGVhbiwgZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHBhbmVsOiBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIWV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgY29uc3QgZm9jdXNlZFBhbmVsID0gcGFuZWw7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5nZXROZXh0UGFuZWwoZm9jdXNlZFBhbmVsLCBpc1VwID8gLTEgOiAxKTtcbiAgICAgICAgICAgIGlmIChuZXh0ID09PSBmb2N1c2VkUGFuZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0LmhlYWRlci5pbm5lckVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQuYWx0S2V5ICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VuYWJsZWRQYW5lbHMuZm9yRWFjaChwID0+IHAuY29sbGFwc2UoKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNpbmdsZUJyYW5jaEV4cGFuZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhpcy5fZW5hYmxlZFBhbmVscy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuYWJsZWRQYW5lbHNbaV0uY29sbGFwc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbmFibGVkUGFuZWxzW3RoaXMuX2VuYWJsZWRQYW5lbHMubGVuZ3RoIC0gMV0uZXhwYW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZW5hYmxlZFBhbmVscy5mb3JFYWNoKHAgPT4gcC5leHBhbmQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5leHRQYW5lbChwYW5lbDogSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnQsIGRpcjogMSB8IC0xID0gMSk6IElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50IHtcbiAgICAgICAgY29uc3QgcGFuZWxJbmRleCA9IHRoaXMuX2VuYWJsZWRQYW5lbHMuaW5kZXhPZihwYW5lbCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkUGFuZWxzW3BhbmVsSW5kZXggKyBkaXJdIHx8IHBhbmVsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3ViVG9DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91bnN1YkNoaWxkcmVuJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX3BhbmVscy5mb3JFYWNoKHBhbmVsID0+IHtcbiAgICAgICAgICAgIHBhbmVsLmNvbnRlbnRFeHBhbmRlZC5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YkNoaWxkcmVuJCkpLnN1YnNjcmliZSgoYXJnczogSUV4cGFuc2lvblBhbmVsRXZlbnRBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRQYW5lbHMuYWRkKGFyZ3Mub3duZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2V4cGFuZGluZ1BhbmVscy5kZWxldGUoYXJncy5vd25lcik7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZBcmdzOiBJQWNjb3JkaW9uRXZlbnRBcmdzID0geyAuLi5hcmdzLCBvd25lcjogdGhpcywgcGFuZWw6IGFyZ3Mub3duZXIgfTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVsRXhwYW5kZWQuZW1pdChldkFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwYW5lbC5jb250ZW50RXhwYW5kaW5nLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3ViQ2hpbGRyZW4kKSkuc3Vic2NyaWJlKChhcmdzOiBJRXhwYW5zaW9uUGFuZWxDYW5jZWxhYmxlRXZlbnRBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZXZBcmdzOiBJQWNjb3JkaW9uQ2FuY2VsYWJsZUV2ZW50QXJncyA9IHsgLi4uYXJncywgb3duZXI6IHRoaXMsIHBhbmVsOiBhcmdzLm93bmVyIH07XG4gICAgICAgICAgICAgICAgdGhpcy5wYW5lbEV4cGFuZGluZy5lbWl0KGV2QXJncyk7XG4gICAgICAgICAgICAgICAgaWYgKGV2QXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncy5jYW5jZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNpbmdsZUJyYW5jaEV4cGFuZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9leHBhbmRlZFBhbmVscy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwLmhlYWRlci5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuY29sbGFwc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V4cGFuZGluZ1BhbmVscy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwLmhlYWRlci5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcC5hbmltYXRpb25TZXR0aW5ncy5jbG9zZUFuaW1hdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLm9wZW5BbmltYXRpb25QbGF5ZXI/LnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcC5hbmltYXRpb25TZXR0aW5ncy5vcGVuQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuY2xvc2VBbmltYXRpb25QbGF5ZXI/LnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuY29sbGFwc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V4cGFuZGluZ1BhbmVscy5hZGQoYXJncy5vd25lcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwYW5lbC5jb250ZW50Q29sbGFwc2VkLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3ViQ2hpbGRyZW4kKSkuc3Vic2NyaWJlKChhcmdzOiBJRXhwYW5zaW9uUGFuZWxFdmVudEFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9leHBhbmRlZFBhbmVscy5kZWxldGUoYXJncy5vd25lcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXhwYW5kaW5nUGFuZWxzLmRlbGV0ZShhcmdzLm93bmVyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBldkFyZ3M6IElBY2NvcmRpb25FdmVudEFyZ3MgPSB7IC4uLmFyZ3MsIG93bmVyOiB0aGlzLCBwYW5lbDogYXJncy5vd25lciB9O1xuICAgICAgICAgICAgICAgIHRoaXMucGFuZWxDb2xsYXBzZWQuZW1pdChldkFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwYW5lbC5jb250ZW50Q29sbGFwc2luZy5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YkNoaWxkcmVuJCkpLnN1YnNjcmliZSgoYXJnczogSUV4cGFuc2lvblBhbmVsQ2FuY2VsYWJsZUV2ZW50QXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2QXJnczogSUFjY29yZGlvbkNhbmNlbGFibGVFdmVudEFyZ3MgPSB7IC4uLmFyZ3MsIG93bmVyOiB0aGlzLCBwYW5lbDogYXJncy5vd25lciB9O1xuICAgICAgICAgICAgICAgIHRoaXMucGFuZWxDb2xsYXBzaW5nLmVtaXQoZXZBcmdzKTtcbiAgICAgICAgICAgICAgICBpZiAoZXZBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzLmNhbmNlbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmcm9tRXZlbnQocGFuZWwuaGVhZGVyLmlubmVyRWxlbWVudCwgJ2tleWRvd24nKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YkNoaWxkcmVuJCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUtleWRvd24oZSwgcGFuZWwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVBhbmVsc0FuaW1hdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uU2V0dGluZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5wYW5lbHM/LmZvckVhY2gocGFuZWwgPT4gcGFuZWwuYW5pbWF0aW9uU2V0dGluZ3MgPSB0aGlzLmFuaW1hdGlvblNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -20,7 +20,7 @@ IgxExcelStyleDateExpressionComponent.decorators = [
20
20
  { type: Component, args: [{
21
21
  preserveWhitespaces: false,
22
22
  selector: 'igx-excel-style-date-expression',
23
- template: "<igx-select #dropdownConditions\n type=\"box\"\n [displayDensity]=\"displayDensity\"\n [placeholder]=\"conditionsPlaceholder\"\n (selectionChanging)=\"onConditionsChanged($event)\"\n [overlaySettings]=\"dropDownOverlaySettings\">\n <igx-prefix>\n <igx-icon *ngIf=\"expressionUI.expression.condition\" family=\"imx-icons\" [name]=\"getIconName()\"></igx-icon>\n <igx-icon *ngIf=\"!expressionUI.expression.condition\">filter_list</igx-icon>\n </igx-prefix>\n <igx-select-item *ngFor=\"let condition of conditions\" [value]=\"condition\" [selected]=\"isConditionSelected(condition)\">\n <igx-icon family=\"imx-icons\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n <span>{{translateCondition(condition)}}</span>\n </igx-select-item>\n</igx-select>\n\n<igx-date-picker #picker *ngIf=\"column.dataType === 'date'\"\n [(value)]=\"expressionUI.expression.searchVal\"\n [locale]=\"grid.locale\"\n [outlet]=\"grid.outlet\"\n [displayDensity]=\"displayDensity\"\n (click)=\"picker.open()\"\n [readOnly]=\"true\"\n [placeholder]=\"inputDatePlaceholder\"\n [displayFormat]=\"column.pipeArgs.format\"\n [formatter]=\"column.formatter\"\n [disabled]=\"expressionUI.expression.condition && expressionUI.expression.condition.isUnary\"\n type=\"box\">\n <!-- disable default icons -->\n <igx-picker-toggle></igx-picker-toggle>\n <igx-picker-clear></igx-picker-clear>\n</igx-date-picker>\n\n<igx-time-picker #picker *ngIf=\"column.dataType === 'time'\"\n [inputFormat]=\"column.defaultTimeFormat\"\n [(value)]=\"expressionUI.expression.searchVal\"\n [locale]=\"grid.locale\"\n [outlet]=\"grid.outlet\"\n [displayDensity]=\"displayDensity\"\n (click)=\"picker.open()\"\n [readOnly]=\"true\"\n [placeholder]=\"inputTimePlaceholder\"\n [displayFormat]=\"column.pipeArgs.format\"\n [formatter]=\"column.formatter\"\n [disabled]=\"expressionUI.expression.condition && expressionUI.expression.condition.isUnary\"\n type=\"box\">\n <!-- disable default icons -->\n <igx-picker-toggle></igx-picker-toggle>\n <igx-picker-clear></igx-picker-clear>\n</igx-time-picker>\n\n<igx-input-group #dropDownTarget *ngIf=\"column.dataType === 'dateTime'\" #inputGroup type=\"box\" [displayDensity]=\"displayDensity\">\n <input #input igxInput tabindex=\"0\"\n [placeholder]=\"inputDatePlaceholder\"\n [igxDateTimeEditor]=\"column.defaultDateTimeFormat\"\n [(ngModel)]=\"expressionUI.expression.searchVal\"\n [disabled]=\"expressionUI.expression.condition && expressionUI.expression.condition.isUnary\"/>\n</igx-input-group>\n\n<button (click)=\"onRemoveButtonClick()\" igxButton=\"icon\" [displayDensity]=\"displayDensity\" *ngIf=\"!isSingle\" >\n <igx-icon>cancel</igx-icon>\n</button>\n\n<igx-buttongroup #logicOperatorButtonGroup\n *ngIf=\"!isLast\"\n [multiSelection]=\"false\">\n <span igxButton [displayDensity]=\"displayDensity\"\n #andButton\n (keydown)=\"onLogicOperatorKeyDown($event, 0)\"\n tabindex=\"0\"\n [selected]=\"expressionUI.afterOperator === 0\"\n type=\"button\"\n (click)=\"onLogicOperatorButtonClicked($event, 0)\">\n {{ grid.resourceStrings.igx_grid_filter_operator_and }}\n </span>\n\n <span igxButton [displayDensity]=\"displayDensity\"\n #orButton\n tabindex=\"0\"\n (keydown)=\"onLogicOperatorKeyDown($event, 1)\"\n [selected]=\"expressionUI.afterOperator === 1\"\n type=\"button\"\n (click)=\"onLogicOperatorButtonClicked($event, 1)\">\n {{ grid.resourceStrings.igx_grid_filter_operator_or }}\n </span>\n</igx-buttongroup>\n\n<div #overlayOutlet\n igxOverlayOutlet\n (pointerdown)=\"onOutletPointerDown($event)\">\n</div>\n"
23
+ template: "<igx-select #dropdownConditions\n type=\"box\"\n [displayDensity]=\"displayDensity\"\n [placeholder]=\"conditionsPlaceholder\"\n (selectionChanging)=\"onConditionsChanged($event)\"\n [overlaySettings]=\"dropDownOverlaySettings\">\n <igx-prefix>\n <igx-icon *ngIf=\"expressionUI.expression.condition\" family=\"imx-icons\" [name]=\"getIconName()\"></igx-icon>\n <igx-icon *ngIf=\"!expressionUI.expression.condition\">filter_list</igx-icon>\n </igx-prefix>\n <igx-select-item *ngFor=\"let condition of conditions\" [value]=\"condition\" [text]=\"getConditionFriendlyName(condition)\" [selected]=\"isConditionSelected(condition)\">\n <igx-icon family=\"imx-icons\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n <span>{{translateCondition(condition)}}</span>\n </igx-select-item>\n</igx-select>\n\n<igx-date-picker #picker *ngIf=\"column.dataType === 'date'\"\n [(value)]=\"expressionUI.expression.searchVal\"\n [locale]=\"grid.locale\"\n [outlet]=\"grid.outlet\"\n [displayDensity]=\"displayDensity\"\n (click)=\"picker.open()\"\n [readOnly]=\"true\"\n [placeholder]=\"inputDatePlaceholder\"\n [displayFormat]=\"column.pipeArgs.format\"\n [formatter]=\"column.formatter\"\n [disabled]=\"expressionUI.expression.condition && expressionUI.expression.condition.isUnary\"\n type=\"box\">\n <!-- disable default icons -->\n <igx-picker-toggle></igx-picker-toggle>\n <igx-picker-clear></igx-picker-clear>\n</igx-date-picker>\n\n<igx-time-picker #picker *ngIf=\"column.dataType === 'time'\"\n [inputFormat]=\"column.defaultTimeFormat\"\n [(value)]=\"expressionUI.expression.searchVal\"\n [locale]=\"grid.locale\"\n [outlet]=\"grid.outlet\"\n [displayDensity]=\"displayDensity\"\n (click)=\"picker.open()\"\n [readOnly]=\"true\"\n [placeholder]=\"inputTimePlaceholder\"\n [displayFormat]=\"column.pipeArgs.format\"\n [formatter]=\"column.formatter\"\n [disabled]=\"expressionUI.expression.condition && expressionUI.expression.condition.isUnary\"\n type=\"box\">\n <!-- disable default icons -->\n <igx-picker-toggle></igx-picker-toggle>\n <igx-picker-clear></igx-picker-clear>\n</igx-time-picker>\n\n<igx-input-group #dropDownTarget *ngIf=\"column.dataType === 'dateTime'\" #inputGroup type=\"box\" [displayDensity]=\"displayDensity\">\n <input #input igxInput tabindex=\"0\"\n [placeholder]=\"inputDatePlaceholder\"\n [igxDateTimeEditor]=\"column.defaultDateTimeFormat\"\n [(ngModel)]=\"expressionUI.expression.searchVal\"\n [disabled]=\"expressionUI.expression.condition && expressionUI.expression.condition.isUnary\"/>\n</igx-input-group>\n\n<button (click)=\"onRemoveButtonClick()\" igxButton=\"icon\" [displayDensity]=\"displayDensity\" *ngIf=\"!isSingle\" >\n <igx-icon>cancel</igx-icon>\n</button>\n\n<igx-buttongroup #logicOperatorButtonGroup\n *ngIf=\"!isLast\"\n [multiSelection]=\"false\">\n <span igxButton [displayDensity]=\"displayDensity\"\n #andButton\n (keydown)=\"onLogicOperatorKeyDown($event, 0)\"\n tabindex=\"0\"\n [selected]=\"expressionUI.afterOperator === 0\"\n type=\"button\"\n (click)=\"onLogicOperatorButtonClicked($event, 0)\">\n {{ grid.resourceStrings.igx_grid_filter_operator_and }}\n </span>\n\n <span igxButton [displayDensity]=\"displayDensity\"\n #orButton\n tabindex=\"0\"\n (keydown)=\"onLogicOperatorKeyDown($event, 1)\"\n [selected]=\"expressionUI.afterOperator === 1\"\n type=\"button\"\n (click)=\"onLogicOperatorButtonClicked($event, 1)\">\n {{ grid.resourceStrings.igx_grid_filter_operator_or }}\n </span>\n</igx-buttongroup>\n\n<div #overlayOutlet\n igxOverlayOutlet\n (pointerdown)=\"onOutletPointerDown($event)\">\n</div>\n"
24
24
  },] }
25
25
  ];
26
26
  IgxExcelStyleDateExpressionComponent.propDecorators = {
@@ -28,4 +28,4 @@ IgxExcelStyleDateExpressionComponent.propDecorators = {
28
28
  input: [{ type: ViewChild, args: ['input', { read: IgxInputDirective, static: false },] }],
29
29
  picker: [{ type: ViewChild, args: ['picker',] }]
30
30
  };
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtc3R5bGUtZGF0ZS1leHByZXNzaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtZGF0ZS1leHByZXNzaW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLEVBQ1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFckcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFJOUU7O0dBRUc7QUFNSCxNQUFNLE9BQU8sb0NBQXFDLFNBQVEsdUNBQXVDO0lBVTdGLElBQWMsa0JBQWtCOztRQUM1QixPQUFPLENBQUEsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxjQUFjLEVBQUUsTUFBSSxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLGFBQWEsQ0FBQSxDQUFDO0lBQ3RFLENBQUM7SUFFRCxJQUFXLG9CQUFvQjtRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELElBQVcsb0JBQW9CO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUM3RSxDQUFDOzs7WUF6QkosU0FBUyxTQUFDO2dCQUNQLG1CQUFtQixFQUFFLEtBQUs7Z0JBQzFCLFFBQVEsRUFBRSxpQ0FBaUM7Z0JBQzNDLHV4SEFBMkQ7YUFDOUQ7Ozs2QkFFSSxLQUFLO29CQUdMLFNBQVMsU0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtxQkFHN0QsU0FBUyxTQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgSW5wdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hFeGNlbFN0eWxlRGVmYXVsdEV4cHJlc3Npb25Db21wb25lbnQgfSBmcm9tICcuL2V4Y2VsLXN0eWxlLWRlZmF1bHQtZXhwcmVzc2lvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHkgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgSWd4SW5wdXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2lucHV0L2lucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hEYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZGF0ZS1waWNrZXIvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hUaW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50JztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgIHNlbGVjdG9yOiAnaWd4LWV4Y2VsLXN0eWxlLWRhdGUtZXhwcmVzc2lvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V4Y2VsLXN0eWxlLWRhdGUtZXhwcmVzc2lvbi5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4RXhjZWxTdHlsZURhdGVFeHByZXNzaW9uQ29tcG9uZW50IGV4dGVuZHMgSWd4RXhjZWxTdHlsZURlZmF1bHRFeHByZXNzaW9uQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNwbGF5RGVuc2l0eTogRGlzcGxheURlbnNpdHk7XG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgcmVhZDogSWd4SW5wdXREaXJlY3RpdmUsIHN0YXRpYzogZmFsc2UgfSlcbiAgICBwcml2YXRlIGlucHV0OiBJZ3hJbnB1dERpcmVjdGl2ZTtcblxuICAgIEBWaWV3Q2hpbGQoJ3BpY2tlcicpXG4gICAgcHJpdmF0ZSBwaWNrZXI6IElneERhdGVQaWNrZXJDb21wb25lbnQgfCBJZ3hUaW1lUGlja2VyQ29tcG9uZW50O1xuXG4gICAgcHJvdGVjdGVkIGdldCBpbnB1dFZhbHVlc0VsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpY2tlcj8uZ2V0RWRpdEVsZW1lbnQoKSB8fCB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaW5wdXREYXRlUGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3NbJ2lneF9ncmlkX2ZpbHRlcl9yb3dfZGF0ZV9wbGFjZWhvbGRlciddO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaW5wdXRUaW1lUGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3NbJ2lneF9ncmlkX2ZpbHRlcl9yb3dfdGltZV9wbGFjZWhvbGRlciddO1xuICAgIH1cbn1cbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtc3R5bGUtZGF0ZS1leHByZXNzaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtZGF0ZS1leHByZXNzaW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLEVBQ1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFckcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFJOUU7O0dBRUc7QUFNSCxNQUFNLE9BQU8sb0NBQXFDLFNBQVEsdUNBQXVDO0lBVTdGLElBQWMsa0JBQWtCOztRQUM1QixPQUFPLENBQUEsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxjQUFjLEVBQUUsTUFBSSxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLGFBQWEsQ0FBQSxDQUFDO0lBQ3RFLENBQUM7SUFFRCxJQUFXLG9CQUFvQjtRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELElBQVcsb0JBQW9CO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUM3RSxDQUFDOzs7WUF6QkosU0FBUyxTQUFDO2dCQUNQLG1CQUFtQixFQUFFLEtBQUs7Z0JBQzFCLFFBQVEsRUFBRSxpQ0FBaUM7Z0JBQzNDLHMwSEFBMkQ7YUFDOUQ7Ozs2QkFFSSxLQUFLO29CQUdMLFNBQVMsU0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtxQkFHN0QsU0FBUyxTQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgSW5wdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hFeGNlbFN0eWxlRGVmYXVsdEV4cHJlc3Npb25Db21wb25lbnQgfSBmcm9tICcuL2V4Y2VsLXN0eWxlLWRlZmF1bHQtZXhwcmVzc2lvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHkgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgSWd4SW5wdXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2lucHV0L2lucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hEYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZGF0ZS1waWNrZXIvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hUaW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50JztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgIHNlbGVjdG9yOiAnaWd4LWV4Y2VsLXN0eWxlLWRhdGUtZXhwcmVzc2lvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V4Y2VsLXN0eWxlLWRhdGUtZXhwcmVzc2lvbi5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4RXhjZWxTdHlsZURhdGVFeHByZXNzaW9uQ29tcG9uZW50IGV4dGVuZHMgSWd4RXhjZWxTdHlsZURlZmF1bHRFeHByZXNzaW9uQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNwbGF5RGVuc2l0eTogRGlzcGxheURlbnNpdHk7XG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgcmVhZDogSWd4SW5wdXREaXJlY3RpdmUsIHN0YXRpYzogZmFsc2UgfSlcbiAgICBwcml2YXRlIGlucHV0OiBJZ3hJbnB1dERpcmVjdGl2ZTtcblxuICAgIEBWaWV3Q2hpbGQoJ3BpY2tlcicpXG4gICAgcHJpdmF0ZSBwaWNrZXI6IElneERhdGVQaWNrZXJDb21wb25lbnQgfCBJZ3hUaW1lUGlja2VyQ29tcG9uZW50O1xuXG4gICAgcHJvdGVjdGVkIGdldCBpbnB1dFZhbHVlc0VsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpY2tlcj8uZ2V0RWRpdEVsZW1lbnQoKSB8fCB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaW5wdXREYXRlUGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3NbJ2lneF9ncmlkX2ZpbHRlcl9yb3dfZGF0ZV9wbGFjZWhvbGRlciddO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaW5wdXRUaW1lUGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3NbJ2lneF9ncmlkX2ZpbHRlcl9yb3dfdGltZV9wbGFjZWhvbGRlciddO1xuICAgIH1cbn1cbiJdfQ==
@@ -688,7 +688,7 @@ IgxGridExcelStyleFilteringComponent.decorators = [
688
688
  { type: Component, args: [{
689
689
  changeDetection: ChangeDetectionStrategy.OnPush,
690
690
  selector: 'igx-grid-excel-style-filtering',
691
- template: "<ng-template #defaultExcelColumnOperations>\n <igx-excel-style-header\n [showHiding]=\"displayDensity !== 'comfortable' && !column?.disableHiding\"\n [showPinning]=\"displayDensity !== 'comfortable' && !column?.disablePinning\"\n [showSelecting]=\"displayDensity !== 'comfortable' && columnSelectable()\"\n >\n </igx-excel-style-header>\n\n <igx-excel-style-sorting *ngIf=\"column?.sortable\">\n </igx-excel-style-sorting>\n\n <igx-excel-style-moving *ngIf=\"column?.movable\">\n </igx-excel-style-moving>\n\n <igx-excel-style-pinning *ngIf=\"!column?.disablePinning && displayDensity==='comfortable'\">\n </igx-excel-style-pinning>\n\n <igx-excel-style-hiding *ngIf=\"!column?.disableHiding && displayDensity==='comfortable'\">\n </igx-excel-style-hiding>\n\n <igx-excel-style-selecting *ngIf=\"columnSelectable() && displayDensity==='comfortable'\">\n </igx-excel-style-selecting>\n</ng-template>\n\n<ng-template #defaultExcelFilterOperations>\n <igx-excel-style-clear-filters>\n </igx-excel-style-clear-filters>\n\n <igx-excel-style-conditional-filter>\n </igx-excel-style-conditional-filter>\n\n <igx-excel-style-search>\n </igx-excel-style-search>\n</ng-template>\n\n<article #mainDropdown\n class=\"igx-excel-filter__menu\"\n [ngClass]=\"{\n 'igx-excel-filter__menu--cosy': displayDensity === 'cosy',\n 'igx-excel-filter__menu--compact': displayDensity === 'compact'\n }\"\n [id]=\"overlayComponentId\"\n (keydown)=\"onKeyDown($event)\"\n [style.min-height]=\"minHeight\"\n [style.max-height]=\"maxHeight\">\n\n <ng-container *ngIf=\"this.excelColumnOperationsDirective; else defaultExcelColumnOperations\">\n <ng-content select=\"igx-excel-style-column-operations,[igxExcelStyleColumnOperations]\">\n </ng-content>\n </ng-container>\n\n <ng-container *ngIf=\"this.excelFilterOperationsDirective; else defaultExcelFilterOperations\">\n <ng-content select=\"igx-excel-style-filter-operations,[igxExcelStyleFilterOperations]\">\n </ng-content>\n </ng-container>\n</article>\n"
691
+ template: "<ng-template #defaultExcelColumnOperations>\n <igx-excel-style-header\n [showHiding]=\"displayDensity !== 'comfortable' && !column?.disableHiding\"\n [showPinning]=\"displayDensity !== 'comfortable' && !column?.disablePinning\"\n [showSelecting]=\"displayDensity !== 'comfortable' && columnSelectable()\"\n >\n </igx-excel-style-header>\n\n <igx-excel-style-sorting *ngIf=\"column?.sortable\">\n </igx-excel-style-sorting>\n\n <igx-excel-style-moving *ngIf=\"column?.movable\">\n </igx-excel-style-moving>\n\n <igx-excel-style-pinning *ngIf=\"!column?.disablePinning && displayDensity==='comfortable'\">\n </igx-excel-style-pinning>\n\n <igx-excel-style-hiding *ngIf=\"!column?.disableHiding && displayDensity==='comfortable'\">\n </igx-excel-style-hiding>\n\n <igx-excel-style-selecting *ngIf=\"columnSelectable() && displayDensity==='comfortable'\">\n </igx-excel-style-selecting>\n</ng-template>\n\n<ng-template #defaultExcelFilterOperations>\n <igx-excel-style-clear-filters>\n </igx-excel-style-clear-filters>\n\n <igx-excel-style-conditional-filter>\n </igx-excel-style-conditional-filter>\n\n <igx-excel-style-search>\n </igx-excel-style-search>\n</ng-template>\n\n<article #mainDropdown\n class=\"igx-excel-filter__menu\"\n [ngClass]=\"{\n 'igx-excel-filter__menu--cosy': displayDensity === 'cosy',\n 'igx-excel-filter__menu--compact': displayDensity === 'compact'\n }\"\n [id]=\"overlayComponentId\"\n (keydown)=\"onKeyDown($event)\"\n [style.min-height]=\"minHeight\"\n [style.max-height]=\"maxHeight\"\n role=\"menu\">\n\n <ng-container *ngIf=\"this.excelColumnOperationsDirective; else defaultExcelColumnOperations\">\n <ng-content select=\"igx-excel-style-column-operations,[igxExcelStyleColumnOperations]\">\n </ng-content>\n </ng-container>\n\n <ng-container *ngIf=\"this.excelFilterOperationsDirective; else defaultExcelFilterOperations\">\n <ng-content select=\"igx-excel-style-filter-operations,[igxExcelStyleFilterOperations]\">\n </ng-content>\n </ng-container>\n</article>\n"
692
692
  },] }
693
693
  ];
694
694
  IgxGridExcelStyleFilteringComponent.ctorParameters = () => [
@@ -715,4 +715,4 @@ IgxGridExcelStyleFilteringComponent.propDecorators = {
715
715
  minHeight: [{ type: Input }],
716
716
  maxHeight: [{ type: Input }, { type: HostBinding, args: ['style.max-height',] }]
717
717
  };
718
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5leGNlbC1zdHlsZS1maWx0ZXJpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2ZpbHRlcmluZy9leGNlbC1zdHlsZS9ncmlkLmV4Y2VsLXN0eWxlLWZpbHRlcmluZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsU0FBUyxFQUNULFdBQVcsRUFDWCx1QkFBdUIsRUFDdkIsV0FBVyxFQUNYLFNBQVMsRUFFVCxVQUFVLEVBQ1YsS0FBSyxFQUVMLFlBQVksRUFDWixNQUFNLEVBQ04sWUFBWSxFQUNaLFFBQVEsRUFDUixJQUFJLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHdCQUF3QixFQUE2QixNQUFNLHFEQUFxRCxDQUFDO0FBQzFILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBZ0IsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDL0YsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDeEcsT0FBTyxF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bnQsXG4gICAgVmlld0NoaWxkLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBWaWV3UmVmLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE9wdGlvbmFsLFxuICAgIEhvc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4T3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneEZpbHRlcmluZ1NlcnZpY2UsIEV4cHJlc3Npb25VSSB9IGZyb20gJy4uL2dyaWQtZmlsdGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLCBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IHJlc29sdmVOZXN0ZWRQYXRoLCBwYXJzZURhdGUsIHVuaXF1ZURhdGVzLCBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4R3JpZEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9ncmlkLWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IERpc3BsYXlEZW5zaXR5IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2VudW1zJztcbmltcG9ydCB7IEdyaWRCYXNlQVBJU2VydmljZSB9IGZyb20gJy4uLy4uL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1hdHRlZFZhbHVlc0ZpbHRlcmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBUcmVlR3JpZEZvcm1hdHRlZFZhbHVlc0ZpbHRlcmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vdHJlZS1ncmlkL3RyZWUtZ3JpZC5maWx0ZXJpbmcuc3RyYXRlZ3knO1xuaW1wb3J0IHsgZ2V0TG9jYWxlQ3VycmVuY3lDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1leHByZXNzaW9uLmludGVyZmFjZSc7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgRmlsdGVyTGlzdEl0ZW0ge1xuICAgIHB1YmxpYyB2YWx1ZTogYW55O1xuICAgIHB1YmxpYyBsYWJlbDogYW55O1xuICAgIHB1YmxpYyBpc1NlbGVjdGVkOiBib29sZWFuO1xuICAgIHB1YmxpYyBpbmRldGVybWluYXRlOiBib29sZWFuO1xuICAgIHB1YmxpYyBpc0ZpbHRlcmVkOiBib29sZWFuO1xuICAgIHB1YmxpYyBpc1NwZWNpYWwgPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNCbGFua3MgPSBmYWxzZTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZXhjZWwtc3R5bGUtY29sdW1uLW9wZXJhdGlvbnMsW2lneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSB7IH1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZXhjZWwtc3R5bGUtZmlsdGVyLW9wZXJhdGlvbnMsW2lneEV4Y2VsU3R5bGVGaWx0ZXJPcGVyYXRpb25zXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4RXhjZWxTdHlsZUZpbHRlck9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSB7IH1cblxuLyoqXG4gKiBBIGNvbXBvbmVudCB1c2VkIGZvciBwcmVzZW50aW5nIEV4Y2VsIHN0eWxlIGZpbHRlcmluZyBVSSBmb3IgYSBzcGVjaWZpYyBjb2x1bW4uXG4gKiBJdCBpcyB1c2VkIGludGVybmFsbHkgaW4gdGhlIEdyaWQsIGJ1dCBjb3VsZCBhbHNvIGJlIGhvc3RlZCBpbiBhIGNvbnRhaW5lciBvdXRzaWRlIG9mIGl0LlxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGBodG1sXG4gKiA8aWd4LWdyaWQtZXhjZWwtc3R5bGUtZmlsdGVyaW5nXG4gKiAgICAgW2NvbHVtbl09XCJncmlkMS5jb2x1bW5zWzBdXCI+XG4gKiA8L2lneC1ncmlkLWV4Y2VsLXN0eWxlLWZpbHRlcmluZz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzZWxlY3RvcjogJ2lneC1ncmlkLWV4Y2VsLXN0eWxlLWZpbHRlcmluZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWV4Y2VsLWZpbHRlcicpXG4gICAgcHVibGljIGRlZmF1bHRDbGFzcyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWV4Y2VsLWZpbHRlci0taW5saW5lJylcbiAgICBwdWJsaWMgaW5saW5lID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGxvYWRpbmdTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGxvYWRpbmdFbmQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBpbml0aWFsaXplZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNvcnRpbmdDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY29sdW1uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hDb2x1bW5Db21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBsaXN0RGF0YUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBWaWV3Q2hpbGQoJ21haW5Ecm9wZG93bicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHB1YmxpYyBtYWluRHJvcGRvd246IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBJZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlIH0pXG4gICAgcHVibGljIGV4Y2VsQ29sdW1uT3BlcmF0aW9uc0RpcmVjdGl2ZTogSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IElneEV4Y2VsU3R5bGVGaWx0ZXJPcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUgfSlcbiAgICBwdWJsaWMgZXhjZWxGaWx0ZXJPcGVyYXRpb25zRGlyZWN0aXZlOiBJZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0RXhjZWxDb2x1bW5PcGVyYXRpb25zJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRFeGNlbENvbHVtbk9wZXJhdGlvbnM6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRFeGNlbEZpbHRlck9wZXJhdGlvbnMnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEV4Y2VsRmlsdGVyT3BlcmF0aW9uczogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIGNvbHVtbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgY29sdW1uKHZhbHVlOiBJZ3hDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5fY29sdW1uID0gdmFsdWU7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBuZXcgQXJyYXk8RmlsdGVyTGlzdEl0ZW0+KCk7XG4gICAgICAgIHRoaXMuY29sdW1uQ2hhbmdlLmVtaXQodGhpcy5fY29sdW1uKTtcblxuICAgICAgICBpZiAodGhpcy5fY29sdW1uUGlubmluZykge1xuICAgICAgICAgICAgdGhpcy5fY29sdW1uUGlubmluZy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbHVtblZpc2liaWxpdHlDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3NvcnRpbmdDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9zb3J0aW5nQ2hhbmdlZC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZpbHRlcmluZ0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpbHRlcmluZ0NoYW5nZWQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9kZW5zaXR5Q2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5fZGVuc2l0eUNoYW5nZWQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb2x1bW5Nb3ZlZCkge1xuICAgICAgICAgICAgdGhpcy5fY29sdW1uTW92ZWQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbi5ncmlkLmZpbHRlcmluZ1NlcnZpY2UucmVnaXN0ZXJTVkdJY29ucygpO1xuICAgICAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgICAgICB0aGlzLnNvcnRpbmdDaGFuZ2VkLmVtaXQoKTtcblxuICAgICAgICAgICAgdGhpcy5fY29sdW1uUGlubmluZyA9IHRoaXMuZ3JpZC5jb2x1bW5QaW4ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodGhpcy5jZHIgYXMgVmlld1JlZikuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY29sdW1uVmlzaWJpbGl0eUNoYW5nZWQgPSB0aGlzLmdyaWQuY29sdW1uVmlzaWJpbGl0eUNoYW5nZWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9zb3J0aW5nQ2hhbmdlZCA9IHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0aW5nQ2hhbmdlZC5lbWl0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2ZpbHRlcmluZ0NoYW5nZWQgPSB0aGlzLmdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9kZW5zaXR5Q2hhbmdlZCA9IHRoaXMuZ3JpZC5vbkRlbnNpdHlDaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY29sdW1uTW92ZWQgPSB0aGlzLmdyaWQuY29sdW1uTW92aW5nRW5kLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbHVtbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbigpOiBJZ3hDb2x1bW5Db21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBmaWx0ZXJpbmdTZXJ2aWNlKCk6IElneEZpbHRlcmluZ1NlcnZpY2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwcmVzc2lvbnNMaXN0ID0gbmV3IEFycmF5PEV4cHJlc3Npb25VST4oKTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBsaXN0RGF0YSA9IG5ldyBBcnJheTxGaWx0ZXJMaXN0SXRlbT4oKTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyB1bmlxdWVWYWx1ZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVybGF5U2VydmljZTogSWd4T3ZlcmxheVNlcnZpY2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcmxheUNvbXBvbmVudElkOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9taW5IZWlnaHQ7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBtaW5pbXVtIGhlaWdodC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgbWluSGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLl9taW5IZWlnaHQgfHwgdGhpcy5fbWluSGVpZ2h0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWluSGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlubGluZSkge1xuICAgICAgICAgICAgbGV0IG1pbkhlaWdodCA9IDY0NTtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kaXNwbGF5RGVuc2l0eSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxheURlbnNpdHkuY29zeTogbWluSGVpZ2h0ID0gNDY1OyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIERpc3BsYXlEZW5zaXR5LmNvbXBhY3Q6IG1pbkhlaWdodCA9IDMzMDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYCR7bWluSGVpZ2h0fXB4YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1pbmltdW0gaGVpZ2h0LlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgbWluSGVpZ2h0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWluSGVpZ2h0ID0gdmFsdWU7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIF9tYXhIZWlnaHQ7XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBjb250YWluc051bGxPckVtcHR5ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzZWxlY3RBbGxTZWxlY3RlZCA9IHRydWU7XG4gICAgcHJpdmF0ZSBzZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBmaWx0ZXJWYWx1ZXMgPSBuZXcgU2V0PGFueT4oKTtcbiAgICBwcml2YXRlIF9jb2x1bW46IElneENvbHVtbkNvbXBvbmVudDtcbiAgICBwcml2YXRlIF9jb2x1bW5QaW5uaW5nOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfY29sdW1uVmlzaWJpbGl0eUNoYW5nZWQ6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIF9zb3J0aW5nQ2hhbmdlZDogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgX2ZpbHRlcmluZ0NoYW5nZWQ6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIF9kZW5zaXR5Q2hhbmdlZDogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgX2NvbHVtbk1vdmVkOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfb3JpZ2luYWxEaXNwbGF5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBtYXhpbXVtIGhlaWdodC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUubWF4LWhlaWdodCcpXG4gICAgcHVibGljIGdldCBtYXhIZWlnaHQoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX21heEhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pbmxpbmUpIHtcbiAgICAgICAgICAgIGxldCBtYXhIZWlnaHQgPSA3NzU7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGlzcGxheURlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIERpc3BsYXlEZW5zaXR5LmNvc3k6IG1heEhlaWdodCA9IDU2NTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEaXNwbGF5RGVuc2l0eS5jb21wYWN0OiBtYXhIZWlnaHQgPSA0MDU7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAke21heEhlaWdodH1weGA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXhpbXVtIGhlaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IG1heEhlaWdodCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21heEhlaWdodCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBncmlkKCk6IElneEdyaWRCYXNlRGlyZWN0aXZlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uPy5ncmlkID8/IHRoaXMuZ3JpZEFQST8uZ3JpZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGlzcGxheURlbnNpdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQ/LmRpc3BsYXlEZW5zaXR5O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgQEhvc3QoKSBAT3B0aW9uYWwoKSBwcml2YXRlIGdyaWRBUEk/OiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VEaXJlY3RpdmU+KSB7IH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uc2VsZWN0ZWQgPyAnaWd4LWV4Y2VsLWZpbHRlcl9fYWN0aW9ucy1zZWxlY3RlZCcgOiAnaWd4LWV4Y2VsLWZpbHRlcl9fYWN0aW9ucy1zZWxlY3QnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGluaXRpYWxpemUoY29sdW1uOiBJZ3hDb2x1bW5Db21wb25lbnQsIG92ZXJsYXlTZXJ2aWNlOiBJZ3hPdmVybGF5U2VydmljZSkge1xuICAgICAgICB0aGlzLmlubGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZSA9IG92ZXJsYXlTZXJ2aWNlO1xuICAgICAgICBpZiAodGhpcy5fb3JpZ2luYWxEaXNwbGF5KSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gdGhpcy5fb3JpZ2luYWxEaXNwbGF5O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbml0aWFsaXplZC5lbWl0KCk7XG4gICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5Nb3ZpbmcucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25QaW4oKSB7XG4gICAgICAgIHRoaXMuY29sdW1uLnBpbm5lZCA9ICF0aGlzLmNvbHVtbi5waW5uZWQ7XG4gICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uU2VsZWN0KCkge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1uLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RDb2x1bW4odGhpcy5jb2x1bW4uZmllbGQsIHRoaXMuZ3JpZC5jb2x1bW5TZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLnNpbmdsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5kZXNlbGVjdENvbHVtbih0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjb2x1bW5TZWxlY3RhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkPy5jb2x1bW5TZWxlY3Rpb24gIT09IEdyaWRTZWxlY3Rpb25Nb2RlLm5vbmUgJiYgdGhpcy5jb2x1bW4/LnNlbGVjdGFibGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25IaWRlVG9nZ2xlKCkge1xuICAgICAgICB0aGlzLmNvbHVtbi50b2dnbGVWaXNpYmlsaXR5KCk7XG4gICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNhbmNlbCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm92ZXJsYXlDb21wb25lbnRJZCkge1xuICAgICAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2VEcm9wZG93bigpIHtcbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheUNvbXBvbmVudElkKSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmhpZGUodGhpcy5vdmVybGF5Q29tcG9uZW50SWQpO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5Q29tcG9uZW50SWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25LZXlEb3duKGV2ZW50QXJnczogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0ZpbHRlcmluZ0tleUNvbWJvKGV2ZW50QXJncykpIHtcbiAgICAgICAgICAgIGV2ZW50QXJncy5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnRBcmdzLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGhpZGUoKSB7XG4gICAgICAgIHRoaXMuX29yaWdpbmFsRGlzcGxheSA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLmRpc3BsYXk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdCgpIHtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3QgPSBuZXcgQXJyYXk8RXhwcmVzc2lvblVJPigpO1xuICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZ2VuZXJhdGVFeHByZXNzaW9uc0xpc3QodGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLCB0aGlzLmdyaWQuZmlsdGVyaW5nTG9naWMsIHRoaXMuZXhwcmVzc2lvbnNMaXN0KTtcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUNvbHVtbkRhdGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFyZUV4cHJlc3Npb25zU2VsZWN0YWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbnNMaXN0Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgKHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdlcXVhbHMnIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3RbMF0uZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2F0JyB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdmYWxzZScgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdFswXS5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZW1wdHknIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3RbMF0uZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2luJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZUV4cHJlc3Npb25zQ291bnQgPSB0aGlzLmV4cHJlc3Npb25zTGlzdC5maWx0ZXIoZXhwID0+XG4gICAgICAgICAgICAoZXhwLmJlZm9yZU9wZXJhdG9yID09PSAxIHx8IGV4cC5hZnRlck9wZXJhdG9yID09PSAxKSAmJlxuICAgICAgICAgICAgKGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZXF1YWxzJyB8fFxuICAgICAgICAgICAgICAgIGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnYXQnIHx8XG4gICAgICAgICAgICAgICAgZXhwLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgIGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZmFsc2UnIHx8XG4gICAgICAgICAgICAgICAgZXhwLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdlbXB0eScgfHxcbiAgICAgICAgICAgICAgICBleHAuZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2luJykpLmxlbmd0aDtcblxuICAgICAgICByZXR1cm4gc2VsZWN0YWJsZUV4cHJlc3Npb25zQ291bnQgPT09IHRoaXMuZXhwcmVzc2lvbnNMaXN0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFyZUV4cHJlc3Npb25zVmFsdWVzSW5UaGVMaXN0KCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5Cb29sZWFuKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclZhbHVlcy5zaXplID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFZhbHVlID0gdGhpcy5maWx0ZXJWYWx1ZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoIWZpcnN0VmFsdWUgJiYgZmlyc3RWYWx1ZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBleHByZXNzaW9uIG9mIHRoaXMudW5pcXVlVmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0RXhwcmVzc2lvblZhbHVlKGV4cHJlc3Npb24pO1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyVmFsdWVzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvcHVsYXRlQ29sdW1uRGF0YSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC51bmlxdWVDb2x1bW5WYWx1ZXNTdHJhdGVneSkge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb2x1bW5WYWx1ZXNSZW1vdGVseSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb2x1bW5WYWx1ZXNGcm9tRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDb2x1bW5WYWx1ZXNSZW1vdGVseSgpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhcnQuZW1pdCgpO1xuICAgICAgICBjb25zdCBleHByZXNzaW9uc1RyZWU6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA9IHRoaXMuZ2V0Q29sdW1uRmlsdGVyRXhwcmVzc2lvbnNUcmVlKCk7XG5cbiAgICAgICAgY29uc3QgcHJldkNvbHVtbiA9IHRoaXMuY29sdW1uO1xuICAgICAgICB0aGlzLmdyaWQudW5pcXVlQ29sdW1uVmFsdWVzU3RyYXRlZ3kodGhpcy5jb2x1bW4sIGV4cHJlc3Npb25zVHJlZSwgKGNvbFZhbHM6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29sdW1uIHx8IHRoaXMuY29sdW1uICE9PSBwcmV2Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZXMgPSAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlKSA/XG4gICAgICAgICAgICAgICAgY29sVmFscy5tYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZ2V0RmlsdGVySXRlbUxhYmVsKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbGFiZWwsIHZhbHVlIH07XG4gICAgICAgICAgICAgICAgfSkgOiBjb2xWYWxzO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlclZhbHVlcyhjb2x1bW5WYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nRW5kLmVtaXQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG91bGRGb3JtYXRWYWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5mb3JtYXR0ZXIgJiZcbiAgICAgICAgICAgICh0aGlzLmdyaWQuZmlsdGVyU3RyYXRlZ3kgaW5zdGFuY2VvZiBGb3JtYXR0ZWRWYWx1ZXNGaWx0ZXJpbmdTdHJhdGVneSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJTdHJhdGVneSBpbnN0YW5jZW9mIFRyZWVHcmlkRm9ybWF0dGVkVmFsdWVzRmlsdGVyaW5nU3RyYXRlZ3kpICYmXG4gICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyU3RyYXRlZ3kuc2hvdWxkQXBwbHlGb3JtYXR0ZXIodGhpcy5jb2x1bW4uZmllbGQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ29sdW1uVmFsdWVzRnJvbURhdGEoKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zVHJlZSA9IHRoaXMuZ2V0Q29sdW1uRmlsdGVyRXhwcmVzc2lvbnNUcmVlKCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNvbHVtbi5ncmlkQVBJLmZpbHRlckRhdGFCeUV4cHJlc3Npb25zKGV4cHJlc3Npb25zVHJlZSk7XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkRm9ybWF0VmFsdWVzID0gdGhpcy5zaG91bGRGb3JtYXRWYWx1ZXMoKTtcbiAgICAgICAgY29uc3QgY29sdW1uRmllbGQgPSB0aGlzLmNvbHVtbi5maWVsZDtcbiAgICAgICAgY29uc3QgY29sdW1uVmFsdWVzID0gKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZSkgP1xuICAgICAgICAgICAgZGF0YS5tYXAocmVjb3JkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IChyZXNvbHZlTmVzdGVkUGF0aChyZWNvcmQsIGNvbHVtbkZpZWxkKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmdldEZpbHRlckl0ZW1MYWJlbCh2YWx1ZSwgdHJ1ZSwgcmVjb3JkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBsYWJlbCwgdmFsdWUgfTtcbiAgICAgICAgICAgIH0pIDogZGF0YS5tYXAocmVjb3JkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlc29sdmVOZXN0ZWRQYXRoKHJlY29yZCwgY29sdW1uRmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzaG91bGRGb3JtYXRWYWx1ZXMgPyB0aGlzLmNvbHVtbi5mb3JtYXR0ZXIodmFsdWUsIHJlY29yZCkgOiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVuZGVyVmFsdWVzKGNvbHVtblZhbHVlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJWYWx1ZXMoY29sdW1uVmFsdWVzOiBhbnlbXSkge1xuICAgICAgICB0aGlzLmdlbmVyYXRlVW5pcXVlVmFsdWVzKGNvbHVtblZhbHVlcyk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVGaWx0ZXJWYWx1ZXModGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlIHx8IHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWUpO1xuICAgICAgICB0aGlzLmdlbmVyYXRlTGlzdERhdGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlVW5pcXVlVmFsdWVzKGNvbHVtblZhbHVlczogYW55W10pIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuU3RyaW5nICYmIHRoaXMuY29sdW1uLmZpbHRlcmluZ0lnbm9yZUNhc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkVW5pcXVlVmFsdWVzID0gY29sdW1uVmFsdWVzLm1hcChzID0+IHM/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICAucmVkdWNlKChtYXAsIHZhbCwgaSkgPT4gbWFwLmdldCh2YWwpID8gbWFwIDogbWFwLnNldCh2YWwsIGNvbHVtblZhbHVlc1tpXSksIG5ldyBNYXAoKSk7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZVZhbHVlcyA9IEFycmF5LmZyb20oZmlsdGVyZWRVbmlxdWVWYWx1ZXMudmFsdWVzKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWUpIHtcbiAgICAgICAgICAgIHRoaXMudW5pcXVlVmFsdWVzID0gQXJyYXkuZnJvbShuZXcgU2V0KGNvbHVtblZhbHVlcy5tYXAodiA9PiB2Py50b0xvY2FsZVN0cmluZygpKSkpO1xuICAgICAgICAgICAgdGhpcy51bmlxdWVWYWx1ZXMuZm9yRWFjaCgoZCwgaSkgPT4gIHRoaXMudW5pcXVlVmFsdWVzW2ldID0gZCA/IG5ldyBEYXRlKGQpIDogZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lKSB7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZVZhbHVlcyA9IEFycmF5LmZyb20obmV3IFNldChjb2x1bW5WYWx1ZXMubWFwKHYgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHYgPSBuZXcgRGF0ZSh2KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuc2V0SG91cnModi5nZXRIb3VycygpLCB2LmdldE1pbnV0ZXMoKSwgdi5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZVZhbHVlcy5mb3JFYWNoKChkLCBpKSA9PiAgdGhpcy51bmlxdWVWYWx1ZXNbaV0gPSBkID8gbmV3IERhdGUoZCkgOiBkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5pcXVlVmFsdWVzID0gdGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlID9cbiAgICAgICAgICAgICAgICB1bmlxdWVEYXRlcyhjb2x1bW5WYWx1ZXMpIDogQXJyYXkuZnJvbShuZXcgU2V0KGNvbHVtblZhbHVlcykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUZpbHRlclZhbHVlcyhpc0RhdGVDb2x1bW46IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBpZiAoaXNEYXRlQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlcyA9IG5ldyBTZXQ8YW55Pih0aGlzLmV4cHJlc3Npb25zTGlzdC5yZWR1Y2UoKGFyciwgZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdpbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5hcnIsIC4uLkFycmF5LmZyb20oKGUuZXhwcmVzc2lvbi5zZWFyY2hWYWwgYXMgU2V0PGFueT4pLnZhbHVlcygpKS5tYXAodiA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUodikudG9JU09TdHJpbmcoKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFyciwgLi4uW2UuZXhwcmVzc2lvbi5zZWFyY2hWYWwgPyBlLmV4cHJlc3Npb24uc2VhcmNoVmFsLnRvSVNPU3RyaW5nKCkgOiBlLmV4cHJlc3Npb24uc2VhcmNoVmFsXV07XG4gICAgICAgICAgICB9LCBbXSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZXMgPSBuZXcgU2V0PGFueT4odGhpcy5leHByZXNzaW9uc0xpc3QucmVkdWNlKChhcnIsIGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnaW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbIC4uLmFyciwgLi4uQXJyYXkuZnJvbSgoZS5leHByZXNzaW9uLnNlYXJjaFZhbCBhcyBTZXQ8YW55PikudmFsdWVzKCkpLm1hcCh2ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyB2IDogbmV3IERhdGUodikudG9Mb2NhbGVUaW1lU3RyaW5nKCkpIF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbIC4uLmFyciwgLi4uW2UuZXhwcmVzc2lvbi5zZWFyY2hWYWwgPyBlLmV4cHJlc3Npb24uc2VhcmNoVmFsLnRvTG9jYWxlVGltZVN0cmluZygpIDogZS5leHByZXNzaW9uLnNlYXJjaFZhbF0gXTtcbiAgICAgICAgICAgIH0sIFtdKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlcyA9IG5ldyBTZXQ8YW55Pih0aGlzLmV4cHJlc3Npb25zTGlzdC5yZWR1Y2UoKGFyciwgZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdpbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5hcnIsIC4uLkFycmF5LmZyb20oKGUuZXhwcmVzc2lvbi5zZWFyY2hWYWwgYXMgU2V0PGFueT4pLnZhbHVlcygpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uYXJyLCAuLi5bZS5leHByZXNzaW9uLnNlYXJjaFZhbF1dO1xuICAgICAgICAgICAgfSwgW10pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVMaXN0RGF0YSgpIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IG5ldyBBcnJheTxGaWx0ZXJMaXN0SXRlbT4oKTtcbiAgICAgICAgY29uc3Qgc2hvdWxkVXBkYXRlU2VsZWN0aW9uID0gdGhpcy5hcmVFeHByZXNzaW9uc1NlbGVjdGFibGUoKSAmJiB0aGlzLmFyZUV4cHJlc3Npb25zVmFsdWVzSW5UaGVMaXN0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuQm9vbGVhbikge1xuICAgICAgICAgICAgdGhpcy5hZGRCb29sZWFuSXRlbXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRkSXRlbXMoc2hvdWxkVXBkYXRlU2VsZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGlzdERhdGEgPSB0aGlzLmNvbHVtbi5zb3J0U3RyYXRlZ3kuc29ydCh0aGlzLmxpc3REYXRhLCAndmFsdWUnLCBTb3J0aW5nRGlyZWN0aW9uLkFzYywgdGhpcy5jb2x1bW4uc29ydGluZ0lnbm9yZUNhc2UsXG4gICAgICAgICAgICAob2JqLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzb2x2ZWRWYWx1ZSA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IG5ldyBEYXRlKCkuc2V0SG91cnMoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlLmdldEhvdXJzKCksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVmFsdWUuZ2V0U2Vjb25kcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5jb250YWluc051bGxPckVtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLmFkZEJsYW5rc0l0ZW0oc2hvdWxkVXBkYXRlU2VsZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxpc3REYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWRkU2VsZWN0QWxsSXRlbSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcy5jZHIgYXMgYW55KS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGlzdERhdGFMb2FkZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29sdW1uRmlsdGVyRXhwcmVzc2lvbnNUcmVlKCkge1xuICAgICAgICBjb25zdCBncmlkRXhwcmVzc2lvbnNUcmVlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlID0gdGhpcy5ncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbnNUcmVlID0gbmV3IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZShncmlkRXhwcmVzc2lvbnNUcmVlLm9wZXJhdG9yLCBncmlkRXhwcmVzc2lvbnNUcmVlLmZpZWxkTmFtZSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBvcGVyYW5kIG9mIGdyaWRFeHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGlmIChvcGVyYW5kIGluc3RhbmNlb2YgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uRXhwclRyZWUgPSBvcGVyYW5kIGFzIEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uRXhwclRyZWUuZmllbGROYW1lID09PSB0aGlzLmNvbHVtbi5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMucHVzaChvcGVyYW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByZXNzaW9uc1RyZWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRCb29sZWFuSXRlbXMoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51bmlxdWVWYWx1ZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckxpc3RJdGVtID0gbmV3IEZpbHRlckxpc3RJdGVtKCk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCAhPT0gdW5kZWZpbmVkICYmIGVsZW1lbnQgIT09IG51bGwgJiYgZWxlbWVudCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSB0cnVlICYmIHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZpbmQoZXhwID0+IGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAndHJ1ZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50ID09PSBmYWxzZSAmJiB0aGlzLmV4cHJlc3Npb25zTGlzdC5maW5kKGV4cCA9PiBleHAuZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2ZhbHNlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNGaWx0ZXJlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNGaWx0ZXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS52YWx1ZSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0ubGFiZWwgPSBlbGVtZW50ID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9maWx0ZXJfdHJ1ZSA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZmlsdGVyX2ZhbHNlO1xuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goZmlsdGVyTGlzdEl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zTnVsbE9yRW1wdHkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEl0ZW1zKHNob3VsZFVwZGF0ZVNlbGVjdGlvbjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNlbGVjdEFsbFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb250YWluc051bGxPckVtcHR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBhcHBseUZvcm1hdHRlciA9ICF0aGlzLnNob3VsZEZvcm1hdFZhbHVlcygpO1xuXG4gICAgICAgIHRoaXMudW5pcXVlVmFsdWVzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBoYXNWYWx1ZSA9IChlbGVtZW50ICE9PSB1bmRlZmluZWQgJiYgZWxlbWVudCAhPT0gbnVsbCAmJiBlbGVtZW50ICE9PSAnJ1xuICAgICAgICAgICAgICAgICYmIHRoaXMuY29sdW1uLmRhdGFUeXBlICE9PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZSlcbiAgICAgICAgICAgICAgICB8fCAhIShlbGVtZW50ICYmIGVsZW1lbnQubGFiZWwpO1xuXG4gICAgICAgICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJMaXN0SXRlbSA9IG5ldyBGaWx0ZXJMaXN0SXRlbSgpO1xuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzRmlsdGVyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzRmlsdGVyZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0RXhwcmVzc2lvblZhbHVlKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyVmFsdWVzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc0ZpbHRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0udmFsdWUgPSB0aGlzLmdldEZpbHRlckl0ZW1WYWx1ZShlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5sYWJlbCA9IHRoaXMuZ2V0RmlsdGVySXRlbUxhYmVsKGVsZW1lbnQsIGFwcGx5Rm9ybWF0dGVyKTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGZpbHRlckxpc3RJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29udGFpbnNOdWxsT3JFbXB0eSA9IHRoaXMudW5pcXVlVmFsdWVzLmxlbmd0aCA+IHRoaXMubGlzdERhdGEubGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkU2VsZWN0QWxsSXRlbSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0QWxsID0gbmV3IEZpbHRlckxpc3RJdGVtKCk7XG4gICAgICAgIHNlbGVjdEFsbC5pc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RBbGxTZWxlY3RlZDtcbiAgICAgICAgc2VsZWN0QWxsLnZhbHVlID0gdGhpcy5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9zZWxlY3RfYWxsO1xuICAgICAgICBzZWxlY3RBbGwubGFiZWwgPSB0aGlzLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX3NlbGVjdF9hbGw7XG4gICAgICAgIHNlbGVjdEFsbC5pbmRldGVybWluYXRlID0gdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlO1xuICAgICAgICBzZWxlY3RBbGwuaXNTcGVjaWFsID0gdHJ1ZTtcbiAgICAgICAgc2VsZWN0QWxsLmlzRmlsdGVyZWQgPSB0aGlzLnNlbGVjdEFsbFNlbGVjdGVkO1xuICAgICAgICB0aGlzLmxpc3REYXRhLnVuc2hpZnQoc2VsZWN0QWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEJsYW5rc0l0ZW0oc2hvdWxkVXBkYXRlU2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGJsYW5rcyA9IG5ldyBGaWx0ZXJMaXN0SXRlbSgpO1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyVmFsdWVzLmhhcyhudWxsKSkge1xuICAgICAgICAgICAgICAgICAgICBibGFua3MuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJsYW5rcy5pc0ZpbHRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBibGFua3MuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBibGFua3MuaXNGaWx0ZXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJsYW5rcy5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJsYW5rcy5pc0ZpbHRlcmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBibGFua3MudmFsdWUgPSBudWxsO1xuICAgICAgICBibGFua3MubGFiZWwgPSB0aGlzLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX2JsYW5rcztcbiAgICAgICAgYmxhbmtzLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgYmxhbmtzLmlzU3BlY2lhbCA9IHRydWU7XG4gICAgICAgIGJsYW5rcy5pc0JsYW5rcyA9IHRydWU7XG4gICAgICAgIHRoaXMubGlzdERhdGEudW5zaGlmdChibGFua3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmlsdGVySXRlbUxhYmVsKGVsZW1lbnQ6IGFueSwgYXBwbHlGb3JtYXR0ZXI6IGJvb2xlYW4gPSB0cnVlLCBkYXRhPzogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGUgfHwgdGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lIHx8XG4gICAgICAgICAgICB0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGVUaW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50LmxhYmVsID8gZWxlbWVudC5sYWJlbCA6IHRoaXMuY29sdW1uLmZvcm1hdHRlciA/XG4gICAgICAgICAgICAgICAgYXBwbHlGb3JtYXR0ZXIgPyB0aGlzLmNvbHVtbi5mb3JtYXR0ZXIoZWxlbWVudCwgZGF0YSkgOiBlbGVtZW50IDpcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZGF0ZVBpcGUudHJhbnNmb3JtKGVsZW1lbnQsIHRoaXMuY29sdW1uLnBpcGVBcmdzLmZvcm1hdCwgdGhpcy5jb2x1bW4ucGlwZUFyZ3MudGltZXpvbmUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5sb2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLk51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmZvcm1hdHRlciA/XG4gICAgICAgICAgICAgICAgYXBwbHlGb3JtYXR0ZXIgPyB0aGlzLmNvbHVtbi5mb3JtYXR0ZXIoZWxlbWVudCwgZGF0YSkgOiBlbGVtZW50IDpcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZGVjaW1hbFBpcGUudHJhbnNmb3JtKGVsZW1lbnQsIHRoaXMuY29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm8sIHRoaXMuZ3JpZC5sb2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkN1cnJlbmN5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZm9ybWF0dGVyID9cbiAgICAgICAgICAgICAgICBhcHBseUZvcm1hdHRlciA/IHRoaXMuY29sdW1uLmZvcm1hdHRlcihlbGVtZW50LCBkYXRhKSA6IGVsZW1lbnQgOlxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jdXJyZW5jeVBpcGUudHJhbnNmb3JtKGVsZW1lbnQsIHRoaXMuY29sdW1uLnBpcGVBcmdzLmN1cnJlbmN5Q29kZSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uLnBpcGVBcmdzLmN1cnJlbmN5Q29kZSA6IGdldExvY2FsZUN1cnJlbmN5Q29kZSh0aGlzLmdyaWQubG9jYWxlKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4ucGlwZUFyZ3MuZGlzcGxheSwgdGhpcy5jb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbywgdGhpcy5ncmlkLmxvY2FsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuUGVyY2VudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmZvcm1hdHRlciA/XG4gICAgICAgICAgICAgICAgYXBwbHlGb3JtYXR0ZXIgPyB0aGlzLmNvbHVtbi5mb3JtYXR0ZXIoZWxlbWVudCwgZGF0YSkgOiBlbGVtZW50IDpcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQucGVyY2VudFBpcGUudHJhbnNmb3JtKGVsZW1lbnQsIHRoaXMuY29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm8sIHRoaXMuZ3JpZC5sb2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5mb3JtYXR0ZXIgJiYgYXBwbHlGb3JtYXR0ZXIgP1xuICAgICAgICAgICAgdGhpcy5jb2x1bW4uZm9ybWF0dGVyKGVsZW1lbnQsIGRhdGEpIDpcbiAgICAgICAgICAgIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJJdGVtVmFsdWUoZWxlbWVudDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGUpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBwYXJzZURhdGUoZWxlbWVudC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHByZXNzaW9uVmFsdWUoZWxlbWVudDogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGVsZW1lbnQgJiYgZWxlbWVudC52YWx1ZSA/IG5ldyBEYXRlKGVsZW1lbnQudmFsdWUpLnRvSVNPU3RyaW5nKCkgOiBlbGVtZW50LnZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlVGltZSkge1xuICAgICAgICAgICAgdmFsdWUgPSBlbGVtZW50ID8gbmV3IERhdGUoZWxlbWVudCkudG9JU09TdHJpbmcoKSA6IGVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSBpZih0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZWxlbWVudCA/IG5ldyBEYXRlKGVsZW1lbnQpLnRvTG9jYWxlVGltZVN0cmluZygpIDogZWxlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuIl19
718
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5leGNlbC1zdHlsZS1maWx0ZXJpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2ZpbHRlcmluZy9leGNlbC1zdHlsZS9ncmlkLmV4Y2VsLXN0eWxlLWZpbHRlcmluZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsU0FBUyxFQUNULFdBQVcsRUFDWCx1QkFBdUIsRUFDdkIsV0FBVyxFQUNYLFNBQVMsRUFFVCxVQUFVLEVBQ1YsS0FBSyxFQUVMLFlBQVksRUFDWixNQUFNLEVBQ04sWUFBWSxFQUNaLFFBQVEsRUFDUixJQUFJLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHdCQUF3QixFQUE2QixNQUFNLHFEQUFxRCxDQUFDO0FBQzFILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBZ0IsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDL0YsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDeEcsT0FBTyxF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bnQsXG4gICAgVmlld0NoaWxkLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBWaWV3UmVmLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE9wdGlvbmFsLFxuICAgIEhvc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4T3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneEZpbHRlcmluZ1NlcnZpY2UsIEV4cHJlc3Npb25VSSB9IGZyb20gJy4uL2dyaWQtZmlsdGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLCBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IHJlc29sdmVOZXN0ZWRQYXRoLCBwYXJzZURhdGUsIHVuaXF1ZURhdGVzLCBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4R3JpZEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9ncmlkLWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IERpc3BsYXlEZW5zaXR5IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2VudW1zJztcbmltcG9ydCB7IEdyaWRCYXNlQVBJU2VydmljZSB9IGZyb20gJy4uLy4uL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1hdHRlZFZhbHVlc0ZpbHRlcmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBUcmVlR3JpZEZvcm1hdHRlZFZhbHVlc0ZpbHRlcmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vdHJlZS1ncmlkL3RyZWUtZ3JpZC5maWx0ZXJpbmcuc3RyYXRlZ3knO1xuaW1wb3J0IHsgZ2V0TG9jYWxlQ3VycmVuY3lDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1leHByZXNzaW9uLmludGVyZmFjZSc7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgRmlsdGVyTGlzdEl0ZW0ge1xuICAgIHB1YmxpYyB2YWx1ZTogYW55O1xuICAgIHB1YmxpYyBsYWJlbDogYW55O1xuICAgIHB1YmxpYyBpc1NlbGVjdGVkOiBib29sZWFuO1xuICAgIHB1YmxpYyBpbmRldGVybWluYXRlOiBib29sZWFuO1xuICAgIHB1YmxpYyBpc0ZpbHRlcmVkOiBib29sZWFuO1xuICAgIHB1YmxpYyBpc1NwZWNpYWwgPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNCbGFua3MgPSBmYWxzZTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZXhjZWwtc3R5bGUtY29sdW1uLW9wZXJhdGlvbnMsW2lneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSB7IH1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZXhjZWwtc3R5bGUtZmlsdGVyLW9wZXJhdGlvbnMsW2lneEV4Y2VsU3R5bGVGaWx0ZXJPcGVyYXRpb25zXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4RXhjZWxTdHlsZUZpbHRlck9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSB7IH1cblxuLyoqXG4gKiBBIGNvbXBvbmVudCB1c2VkIGZvciBwcmVzZW50aW5nIEV4Y2VsIHN0eWxlIGZpbHRlcmluZyBVSSBmb3IgYSBzcGVjaWZpYyBjb2x1bW4uXG4gKiBJdCBpcyB1c2VkIGludGVybmFsbHkgaW4gdGhlIEdyaWQsIGJ1dCBjb3VsZCBhbHNvIGJlIGhvc3RlZCBpbiBhIGNvbnRhaW5lciBvdXRzaWRlIG9mIGl0LlxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGBodG1sXG4gKiA8aWd4LWdyaWQtZXhjZWwtc3R5bGUtZmlsdGVyaW5nXG4gKiAgICAgW2NvbHVtbl09XCJncmlkMS5jb2x1bW5zWzBdXCI+XG4gKiA8L2lneC1ncmlkLWV4Y2VsLXN0eWxlLWZpbHRlcmluZz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzZWxlY3RvcjogJ2lneC1ncmlkLWV4Y2VsLXN0eWxlLWZpbHRlcmluZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWV4Y2VsLWZpbHRlcicpXG4gICAgcHVibGljIGRlZmF1bHRDbGFzcyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWV4Y2VsLWZpbHRlci0taW5saW5lJylcbiAgICBwdWJsaWMgaW5saW5lID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGxvYWRpbmdTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGxvYWRpbmdFbmQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBpbml0aWFsaXplZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNvcnRpbmdDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY29sdW1uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hDb2x1bW5Db21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBsaXN0RGF0YUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBWaWV3Q2hpbGQoJ21haW5Ecm9wZG93bicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHB1YmxpYyBtYWluRHJvcGRvd246IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBJZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlIH0pXG4gICAgcHVibGljIGV4Y2VsQ29sdW1uT3BlcmF0aW9uc0RpcmVjdGl2ZTogSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IElneEV4Y2VsU3R5bGVGaWx0ZXJPcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUgfSlcbiAgICBwdWJsaWMgZXhjZWxGaWx0ZXJPcGVyYXRpb25zRGlyZWN0aXZlOiBJZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0RXhjZWxDb2x1bW5PcGVyYXRpb25zJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRFeGNlbENvbHVtbk9wZXJhdGlvbnM6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRFeGNlbEZpbHRlck9wZXJhdGlvbnMnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEV4Y2VsRmlsdGVyT3BlcmF0aW9uczogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIGNvbHVtbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgY29sdW1uKHZhbHVlOiBJZ3hDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5fY29sdW1uID0gdmFsdWU7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBuZXcgQXJyYXk8RmlsdGVyTGlzdEl0ZW0+KCk7XG4gICAgICAgIHRoaXMuY29sdW1uQ2hhbmdlLmVtaXQodGhpcy5fY29sdW1uKTtcblxuICAgICAgICBpZiAodGhpcy5fY29sdW1uUGlubmluZykge1xuICAgICAgICAgICAgdGhpcy5fY29sdW1uUGlubmluZy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbHVtblZpc2liaWxpdHlDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3NvcnRpbmdDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9zb3J0aW5nQ2hhbmdlZC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZpbHRlcmluZ0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpbHRlcmluZ0NoYW5nZWQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9kZW5zaXR5Q2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5fZGVuc2l0eUNoYW5nZWQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb2x1bW5Nb3ZlZCkge1xuICAgICAgICAgICAgdGhpcy5fY29sdW1uTW92ZWQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbi5ncmlkLmZpbHRlcmluZ1NlcnZpY2UucmVnaXN0ZXJTVkdJY29ucygpO1xuICAgICAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgICAgICB0aGlzLnNvcnRpbmdDaGFuZ2VkLmVtaXQoKTtcblxuICAgICAgICAgICAgdGhpcy5fY29sdW1uUGlubmluZyA9IHRoaXMuZ3JpZC5jb2x1bW5QaW4ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodGhpcy5jZHIgYXMgVmlld1JlZikuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY29sdW1uVmlzaWJpbGl0eUNoYW5nZWQgPSB0aGlzLmdyaWQuY29sdW1uVmlzaWJpbGl0eUNoYW5nZWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9zb3J0aW5nQ2hhbmdlZCA9IHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0aW5nQ2hhbmdlZC5lbWl0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2ZpbHRlcmluZ0NoYW5nZWQgPSB0aGlzLmdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9kZW5zaXR5Q2hhbmdlZCA9IHRoaXMuZ3JpZC5vbkRlbnNpdHlDaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY29sdW1uTW92ZWQgPSB0aGlzLmdyaWQuY29sdW1uTW92aW5nRW5kLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbHVtbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbigpOiBJZ3hDb2x1bW5Db21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBmaWx0ZXJpbmdTZXJ2aWNlKCk6IElneEZpbHRlcmluZ1NlcnZpY2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwcmVzc2lvbnNMaXN0ID0gbmV3IEFycmF5PEV4cHJlc3Npb25VST4oKTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBsaXN0RGF0YSA9IG5ldyBBcnJheTxGaWx0ZXJMaXN0SXRlbT4oKTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyB1bmlxdWVWYWx1ZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVybGF5U2VydmljZTogSWd4T3ZlcmxheVNlcnZpY2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcmxheUNvbXBvbmVudElkOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9taW5IZWlnaHQ7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBtaW5pbXVtIGhlaWdodC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgbWluSGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLl9taW5IZWlnaHQgfHwgdGhpcy5fbWluSGVpZ2h0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWluSGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlubGluZSkge1xuICAgICAgICAgICAgbGV0IG1pbkhlaWdodCA9IDY0NTtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kaXNwbGF5RGVuc2l0eSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxheURlbnNpdHkuY29zeTogbWluSGVpZ2h0ID0gNDY1OyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIERpc3BsYXlEZW5zaXR5LmNvbXBhY3Q6IG1pbkhlaWdodCA9IDMzMDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYCR7bWluSGVpZ2h0fXB4YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1pbmltdW0gaGVpZ2h0LlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgbWluSGVpZ2h0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWluSGVpZ2h0ID0gdmFsdWU7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIF9tYXhIZWlnaHQ7XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBjb250YWluc051bGxPckVtcHR5ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzZWxlY3RBbGxTZWxlY3RlZCA9IHRydWU7XG4gICAgcHJpdmF0ZSBzZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBmaWx0ZXJWYWx1ZXMgPSBuZXcgU2V0PGFueT4oKTtcbiAgICBwcml2YXRlIF9jb2x1bW46IElneENvbHVtbkNvbXBvbmVudDtcbiAgICBwcml2YXRlIF9jb2x1bW5QaW5uaW5nOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfY29sdW1uVmlzaWJpbGl0eUNoYW5nZWQ6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIF9zb3J0aW5nQ2hhbmdlZDogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgX2ZpbHRlcmluZ0NoYW5nZWQ6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIF9kZW5zaXR5Q2hhbmdlZDogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgX2NvbHVtbk1vdmVkOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfb3JpZ2luYWxEaXNwbGF5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBtYXhpbXVtIGhlaWdodC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUubWF4LWhlaWdodCcpXG4gICAgcHVibGljIGdldCBtYXhIZWlnaHQoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX21heEhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pbmxpbmUpIHtcbiAgICAgICAgICAgIGxldCBtYXhIZWlnaHQgPSA3NzU7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGlzcGxheURlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIERpc3BsYXlEZW5zaXR5LmNvc3k6IG1heEhlaWdodCA9IDU2NTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEaXNwbGF5RGVuc2l0eS5jb21wYWN0OiBtYXhIZWlnaHQgPSA0MDU7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAke21heEhlaWdodH1weGA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXhpbXVtIGhlaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IG1heEhlaWdodCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21heEhlaWdodCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBncmlkKCk6IElneEdyaWRCYXNlRGlyZWN0aXZlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uPy5ncmlkID8/IHRoaXMuZ3JpZEFQST8uZ3JpZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGlzcGxheURlbnNpdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQ/LmRpc3BsYXlEZW5zaXR5O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgQEhvc3QoKSBAT3B0aW9uYWwoKSBwcml2YXRlIGdyaWRBUEk/OiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VEaXJlY3RpdmU+KSB7IH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uc2VsZWN0ZWQgPyAnaWd4LWV4Y2VsLWZpbHRlcl9fYWN0aW9ucy1zZWxlY3RlZCcgOiAnaWd4LWV4Y2VsLWZpbHRlcl9fYWN0aW9ucy1zZWxlY3QnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGluaXRpYWxpemUoY29sdW1uOiBJZ3hDb2x1bW5Db21wb25lbnQsIG92ZXJsYXlTZXJ2aWNlOiBJZ3hPdmVybGF5U2VydmljZSkge1xuICAgICAgICB0aGlzLmlubGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZSA9IG92ZXJsYXlTZXJ2aWNlO1xuICAgICAgICBpZiAodGhpcy5fb3JpZ2luYWxEaXNwbGF5KSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gdGhpcy5fb3JpZ2luYWxEaXNwbGF5O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbml0aWFsaXplZC5lbWl0KCk7XG4gICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5Nb3ZpbmcucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25QaW4oKSB7XG4gICAgICAgIHRoaXMuY29sdW1uLnBpbm5lZCA9ICF0aGlzLmNvbHVtbi5waW5uZWQ7XG4gICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uU2VsZWN0KCkge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1uLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RDb2x1bW4odGhpcy5jb2x1bW4uZmllbGQsIHRoaXMuZ3JpZC5jb2x1bW5TZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLnNpbmdsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5kZXNlbGVjdENvbHVtbih0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjb2x1bW5TZWxlY3RhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkPy5jb2x1bW5TZWxlY3Rpb24gIT09IEdyaWRTZWxlY3Rpb25Nb2RlLm5vbmUgJiYgdGhpcy5jb2x1bW4/LnNlbGVjdGFibGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25IaWRlVG9nZ2xlKCkge1xuICAgICAgICB0aGlzLmNvbHVtbi50b2dnbGVWaXNpYmlsaXR5KCk7XG4gICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNhbmNlbCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm92ZXJsYXlDb21wb25lbnRJZCkge1xuICAgICAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2VEcm9wZG93bigpIHtcbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheUNvbXBvbmVudElkKSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmhpZGUodGhpcy5vdmVybGF5Q29tcG9uZW50SWQpO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5Q29tcG9uZW50SWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25LZXlEb3duKGV2ZW50QXJnczogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0ZpbHRlcmluZ0tleUNvbWJvKGV2ZW50QXJncykpIHtcbiAgICAgICAgICAgIGV2ZW50QXJncy5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnRBcmdzLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGhpZGUoKSB7XG4gICAgICAgIHRoaXMuX29yaWdpbmFsRGlzcGxheSA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLmRpc3BsYXk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdCgpIHtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3QgPSBuZXcgQXJyYXk8RXhwcmVzc2lvblVJPigpO1xuICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZ2VuZXJhdGVFeHByZXNzaW9uc0xpc3QodGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLCB0aGlzLmdyaWQuZmlsdGVyaW5nTG9naWMsIHRoaXMuZXhwcmVzc2lvbnNMaXN0KTtcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUNvbHVtbkRhdGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFyZUV4cHJlc3Npb25zU2VsZWN0YWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbnNMaXN0Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgKHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdlcXVhbHMnIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3RbMF0uZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2F0JyB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdmYWxzZScgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdFswXS5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZW1wdHknIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3RbMF0uZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2luJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZUV4cHJlc3Npb25zQ291bnQgPSB0aGlzLmV4cHJlc3Npb25zTGlzdC5maWx0ZXIoZXhwID0+XG4gICAgICAgICAgICAoZXhwLmJlZm9yZU9wZXJhdG9yID09PSAxIHx8IGV4cC5hZnRlck9wZXJhdG9yID09PSAxKSAmJlxuICAgICAgICAgICAgKGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZXF1YWxzJyB8fFxuICAgICAgICAgICAgICAgIGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnYXQnIHx8XG4gICAgICAgICAgICAgICAgZXhwLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgIGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZmFsc2UnIHx8XG4gICAgICAgICAgICAgICAgZXhwLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdlbXB0eScgfHxcbiAgICAgICAgICAgICAgICBleHAuZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2luJykpLmxlbmd0aDtcblxuICAgICAgICByZXR1cm4gc2VsZWN0YWJsZUV4cHJlc3Npb25zQ291bnQgPT09IHRoaXMuZXhwcmVzc2lvbnNMaXN0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFyZUV4cHJlc3Npb25zVmFsdWVzSW5UaGVMaXN0KCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5Cb29sZWFuKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclZhbHVlcy5zaXplID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFZhbHVlID0gdGhpcy5maWx0ZXJWYWx1ZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoIWZpcnN0VmFsdWUgJiYgZmlyc3RWYWx1ZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBleHByZXNzaW9uIG9mIHRoaXMudW5pcXVlVmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0RXhwcmVzc2lvblZhbHVlKGV4cHJlc3Npb24pO1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyVmFsdWVzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvcHVsYXRlQ29sdW1uRGF0YSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC51bmlxdWVDb2x1bW5WYWx1ZXNTdHJhdGVneSkge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb2x1bW5WYWx1ZXNSZW1vdGVseSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb2x1bW5WYWx1ZXNGcm9tRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDb2x1bW5WYWx1ZXNSZW1vdGVseSgpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhcnQuZW1pdCgpO1xuICAgICAgICBjb25zdCBleHByZXNzaW9uc1RyZWU6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA9IHRoaXMuZ2V0Q29sdW1uRmlsdGVyRXhwcmVzc2lvbnNUcmVlKCk7XG5cbiAgICAgICAgY29uc3QgcHJldkNvbHVtbiA9IHRoaXMuY29sdW1uO1xuICAgICAgICB0aGlzLmdyaWQudW5pcXVlQ29sdW1uVmFsdWVzU3RyYXRlZ3kodGhpcy5jb2x1bW4sIGV4cHJlc3Npb25zVHJlZSwgKGNvbFZhbHM6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29sdW1uIHx8IHRoaXMuY29sdW1uICE9PSBwcmV2Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZXMgPSAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlKSA/XG4gICAgICAgICAgICAgICAgY29sVmFscy5tYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZ2V0RmlsdGVySXRlbUxhYmVsKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbGFiZWwsIHZhbHVlIH07XG4gICAgICAgICAgICAgICAgfSkgOiBjb2xWYWxzO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlclZhbHVlcyhjb2x1bW5WYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nRW5kLmVtaXQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG91bGRGb3JtYXRWYWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5mb3JtYXR0ZXIgJiZcbiAgICAgICAgICAgICh0aGlzLmdyaWQuZmlsdGVyU3RyYXRlZ3kgaW5zdGFuY2VvZiBGb3JtYXR0ZWRWYWx1ZXNGaWx0ZXJpbmdTdHJhdGVneSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJTdHJhdGVneSBpbnN0YW5jZW9mIFRyZWVHcmlkRm9ybWF0dGVkVmFsdWVzRmlsdGVyaW5nU3RyYXRlZ3kpICYmXG4gICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyU3RyYXRlZ3kuc2hvdWxkQXBwbHlGb3JtYXR0ZXIodGhpcy5jb2x1bW4uZmllbGQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ29sdW1uVmFsdWVzRnJvbURhdGEoKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zVHJlZSA9IHRoaXMuZ2V0Q29sdW1uRmlsdGVyRXhwcmVzc2lvbnNUcmVlKCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNvbHVtbi5ncmlkQVBJLmZpbHRlckRhdGFCeUV4cHJlc3Npb25zKGV4cHJlc3Npb25zVHJlZSk7XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkRm9ybWF0VmFsdWVzID0gdGhpcy5zaG91bGRGb3JtYXRWYWx1ZXMoKTtcbiAgICAgICAgY29uc3QgY29sdW1uRmllbGQgPSB0aGlzLmNvbHVtbi5maWVsZDtcbiAgICAgICAgY29uc3QgY29sdW1uVmFsdWVzID0gKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZSkgP1xuICAgICAgICAgICAgZGF0YS5tYXAocmVjb3JkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IChyZXNvbHZlTmVzdGVkUGF0aChyZWNvcmQsIGNvbHVtbkZpZWxkKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmdldEZpbHRlckl0ZW1MYWJlbCh2YWx1ZSwgdHJ1ZSwgcmVjb3JkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBsYWJlbCwgdmFsdWUgfTtcbiAgICAgICAgICAgIH0pIDogZGF0YS5tYXAocmVjb3JkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlc29sdmVOZXN0ZWRQYXRoKHJlY29yZCwgY29sdW1uRmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzaG91bGRGb3JtYXRWYWx1ZXMgPyB0aGlzLmNvbHVtbi5mb3JtYXR0ZXIodmFsdWUsIHJlY29yZCkgOiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVuZGVyVmFsdWVzKGNvbHVtblZhbHVlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJWYWx1ZXMoY29sdW1uVmFsdWVzOiBhbnlbXSkge1xuICAgICAgICB0aGlzLmdlbmVyYXRlVW5pcXVlVmFsdWVzKGNvbHVtblZhbHVlcyk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVGaWx0ZXJWYWx1ZXModGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlIHx8IHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWUpO1xuICAgICAgICB0aGlzLmdlbmVyYXRlTGlzdERhdGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlVW5pcXVlVmFsdWVzKGNvbHVtblZhbHVlczogYW55W10pIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuU3RyaW5nICYmIHRoaXMuY29sdW1uLmZpbHRlcmluZ0lnbm9yZUNhc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkVW5pcXVlVmFsdWVzID0gY29sdW1uVmFsdWVzLm1hcChzID0+IHM/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICAucmVkdWNlKChtYXAsIHZhbCwgaSkgPT4gbWFwLmdldCh2YWwpID8gbWFwIDogbWFwLnNldCh2YWwsIGNvbHVtblZhbHVlc1tpXSksIG5ldyBNYXAoKSk7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZVZhbHVlcyA9IEFycmF5LmZyb20oZmlsdGVyZWRVbmlxdWVWYWx1ZXMudmFsdWVzKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWUpIHtcbiAgICAgICAgICAgIHRoaXMudW5pcXVlVmFsdWVzID0gQXJyYXkuZnJvbShuZXcgU2V0KGNvbHVtblZhbHVlcy5tYXAodiA9PiB2Py50b0xvY2FsZVN0cmluZygpKSkpO1xuICAgICAgICAgICAgdGhpcy51bmlxdWVWYWx1ZXMuZm9yRWFjaCgoZCwgaSkgPT4gIHRoaXMudW5pcXVlVmFsdWVzW2ldID0gZCA/IG5ldyBEYXRlKGQpIDogZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lKSB7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZVZhbHVlcyA9IEFycmF5LmZyb20obmV3IFNldChjb2x1bW5WYWx1ZXMubWFwKHYgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHYgPSBuZXcgRGF0ZSh2KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuc2V0SG91cnModi5nZXRIb3VycygpLCB2LmdldE1pbnV0ZXMoKSwgdi5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZVZhbHVlcy5mb3JFYWNoKChkLCBpKSA9PiAgdGhpcy51bmlxdWVWYWx1ZXNbaV0gPSBkID8gbmV3IERhdGUoZCkgOiBkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5pcXVlVmFsdWVzID0gdGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlID9cbiAgICAgICAgICAgICAgICB1bmlxdWVEYXRlcyhjb2x1bW5WYWx1ZXMpIDogQXJyYXkuZnJvbShuZXcgU2V0KGNvbHVtblZhbHVlcykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUZpbHRlclZhbHVlcyhpc0RhdGVDb2x1bW46IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBpZiAoaXNEYXRlQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlcyA9IG5ldyBTZXQ8YW55Pih0aGlzLmV4cHJlc3Npb25zTGlzdC5yZWR1Y2UoKGFyciwgZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdpbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5hcnIsIC4uLkFycmF5LmZyb20oKGUuZXhwcmVzc2lvbi5zZWFyY2hWYWwgYXMgU2V0PGFueT4pLnZhbHVlcygpKS5tYXAodiA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUodikudG9JU09TdHJpbmcoKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFyciwgLi4uW2UuZXhwcmVzc2lvbi5zZWFyY2hWYWwgPyBlLmV4cHJlc3Npb24uc2VhcmNoVmFsLnRvSVNPU3RyaW5nKCkgOiBlLmV4cHJlc3Npb24uc2VhcmNoVmFsXV07XG4gICAgICAgICAgICB9LCBbXSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZXMgPSBuZXcgU2V0PGFueT4odGhpcy5leHByZXNzaW9uc0xpc3QucmVkdWNlKChhcnIsIGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnaW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbIC4uLmFyciwgLi4uQXJyYXkuZnJvbSgoZS5leHByZXNzaW9uLnNlYXJjaFZhbCBhcyBTZXQ8YW55PikudmFsdWVzKCkpLm1hcCh2ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyB2IDogbmV3IERhdGUodikudG9Mb2NhbGVUaW1lU3RyaW5nKCkpIF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbIC4uLmFyciwgLi4uW2UuZXhwcmVzc2lvbi5zZWFyY2hWYWwgPyBlLmV4cHJlc3Npb24uc2VhcmNoVmFsLnRvTG9jYWxlVGltZVN0cmluZygpIDogZS5leHByZXNzaW9uLnNlYXJjaFZhbF0gXTtcbiAgICAgICAgICAgIH0sIFtdKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlcyA9IG5ldyBTZXQ8YW55Pih0aGlzLmV4cHJlc3Npb25zTGlzdC5yZWR1Y2UoKGFyciwgZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdpbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5hcnIsIC4uLkFycmF5LmZyb20oKGUuZXhwcmVzc2lvbi5zZWFyY2hWYWwgYXMgU2V0PGFueT4pLnZhbHVlcygpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uYXJyLCAuLi5bZS5leHByZXNzaW9uLnNlYXJjaFZhbF1dO1xuICAgICAgICAgICAgfSwgW10pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVMaXN0RGF0YSgpIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IG5ldyBBcnJheTxGaWx0ZXJMaXN0SXRlbT4oKTtcbiAgICAgICAgY29uc3Qgc2hvdWxkVXBkYXRlU2VsZWN0aW9uID0gdGhpcy5hcmVFeHByZXNzaW9uc1NlbGVjdGFibGUoKSAmJiB0aGlzLmFyZUV4cHJlc3Npb25zVmFsdWVzSW5UaGVMaXN0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuQm9vbGVhbikge1xuICAgICAgICAgICAgdGhpcy5hZGRCb29sZWFuSXRlbXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRkSXRlbXMoc2hvdWxkVXBkYXRlU2VsZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGlzdERhdGEgPSB0aGlzLmNvbHVtbi5zb3J0U3RyYXRlZ3kuc29ydCh0aGlzLmxpc3REYXRhLCAndmFsdWUnLCBTb3J0aW5nRGlyZWN0aW9uLkFzYywgdGhpcy5jb2x1bW4uc29ydGluZ0lnbm9yZUNhc2UsXG4gICAgICAgICAgICAob2JqLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzb2x2ZWRWYWx1ZSA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IG5ldyBEYXRlKCkuc2V0SG91cnMoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlLmdldEhvdXJzKCksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVmFsdWUuZ2V0U2Vjb25kcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5jb250YWluc051bGxPckVtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLmFkZEJsYW5rc0l0ZW0oc2hvdWxkVXBkYXRlU2VsZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxpc3REYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWRkU2VsZWN0QWxsSXRlbSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcy5jZHIgYXMgYW55KS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGlzdERhdGFMb2FkZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29sdW1uRmlsdGVyRXhwcmVzc2lvbnNUcmVlKCkge1xuICAgICAgICBjb25zdCBncmlkRXhwcmVzc2lvbnNUcmVlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlID0gdGhpcy5ncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbnNUcmVlID0gbmV3IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZShncmlkRXhwcmVzc2lvbnNUcmVlLm9wZXJhdG9yLCBncmlkRXhwcmVzc2lvbnNUcmVlLmZpZWxkTmFtZSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBvcGVyYW5kIG9mIGdyaWRFeHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGlmIChvcGVyYW5kIGluc3RhbmNlb2YgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uRXhwclRyZWUgPSBvcGVyYW5kIGFzIEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uRXhwclRyZWUuZmllbGROYW1lID09PSB0aGlzLmNvbHVtbi5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMucHVzaChvcGVyYW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByZXNzaW9uc1RyZWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRCb29sZWFuSXRlbXMoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51bmlxdWVWYWx1ZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckxpc3RJdGVtID0gbmV3IEZpbHRlckxpc3RJdGVtKCk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCAhPT0gdW5kZWZpbmVkICYmIGVsZW1lbnQgIT09IG51bGwgJiYgZWxlbWVudCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSB0cnVlICYmIHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZpbmQoZXhwID0+IGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAndHJ1ZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50ID09PSBmYWxzZSAmJiB0aGlzLmV4cHJlc3Npb25zTGlzdC5maW5kKGV4cCA9PiBleHAuZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2ZhbHNlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNGaWx0ZXJlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNGaWx0ZXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS52YWx1ZSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0ubGFiZWwgPSBlbGVtZW50ID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9maWx0ZXJfdHJ1ZSA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZmlsdGVyX2ZhbHNlO1xuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goZmlsdGVyTGlzdEl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zTnVsbE9yRW1wdHkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEl0ZW1zKHNob3VsZFVwZGF0ZVNlbGVjdGlvbjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNlbGVjdEFsbFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb250YWluc051bGxPckVtcHR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBhcHBseUZvcm1hdHRlciA9ICF0aGlzLnNob3VsZEZvcm1hdFZhbHVlcygpO1xuXG4gICAgICAgIHRoaXMudW5pcXVlVmFsdWVzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBoYXNWYWx1ZSA9IChlbGVtZW50ICE9PSB1bmRlZmluZWQgJiYgZWxlbWVudCAhPT0gbnVsbCAmJiBlbGVtZW50ICE9PSAnJ1xuICAgICAgICAgICAgICAgICYmIHRoaXMuY29sdW1uLmRhdGFUeXBlICE9PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZSlcbiAgICAgICAgICAgICAgICB8fCAhIShlbGVtZW50ICYmIGVsZW1lbnQubGFiZWwpO1xuXG4gICAgICAgICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJMaXN0SXRlbSA9IG5ldyBGaWx0ZXJMaXN0SXRlbSgpO1xuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzRmlsdGVyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzRmlsdGVyZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0RXhwcmVzc2lvblZhbHVlKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyVmFsdWVzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc0ZpbHRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0udmFsdWUgPSB0aGlzLmdldEZpbHRlckl0ZW1WYWx1ZShlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5sYWJlbCA9IHRoaXMuZ2V0RmlsdGVySXRlbUxhYmVsKGVsZW1lbnQsIGFwcGx5Rm9ybWF0dGVyKTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGZpbHRlckxpc3RJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29udGFpbnNOdWxsT3JFbXB0eSA9IHRoaXMudW5pcXVlVmFsdWVzLmxlbmd0aCA+IHRoaXMubGlzdERhdGEubGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkU2VsZWN0QWxsSXRlbSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0QWxsID0gbmV3IEZpbHRlckxpc3RJdGVtKCk7XG4gICAgICAgIHNlbGVjdEFsbC5pc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RBbGxTZWxlY3RlZDtcbiAgICAgICAgc2VsZWN0QWxsLnZhbHVlID0gdGhpcy5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9zZWxlY3RfYWxsO1xuICAgICAgICBzZWxlY3RBbGwubGFiZWwgPSB0aGlzLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX3NlbGVjdF9hbGw7XG4gICAgICAgIHNlbGVjdEFsbC5pbmRldGVybWluYXRlID0gdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlO1xuICAgICAgICBzZWxlY3RBbGwuaXNTcGVjaWFsID0gdHJ1ZTtcbiAgICAgICAgc2VsZWN0QWxsLmlzRmlsdGVyZWQgPSB0aGlzLnNlbGVjdEFsbFNlbGVjdGVkO1xuICAgICAgICB0aGlzLmxpc3REYXRhLnVuc2hpZnQoc2VsZWN0QWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEJsYW5rc0l0ZW0oc2hvdWxkVXBkYXRlU2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGJsYW5rcyA9IG5ldyBGaWx0ZXJMaXN0SXRlbSgpO1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyVmFsdWVzLmhhcyhudWxsKSkge1xuICAgICAgICAgICAgICAgICAgICBibGFua3MuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJsYW5rcy5pc0ZpbHRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBibGFua3MuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBibGFua3MuaXNGaWx0ZXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJsYW5rcy5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJsYW5rcy5pc0ZpbHRlcmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBibGFua3MudmFsdWUgPSBudWxsO1xuICAgICAgICBibGFua3MubGFiZWwgPSB0aGlzLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX2JsYW5rcztcbiAgICAgICAgYmxhbmtzLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgYmxhbmtzLmlzU3BlY2lhbCA9IHRydWU7XG4gICAgICAgIGJsYW5rcy5pc0JsYW5rcyA9IHRydWU7XG4gICAgICAgIHRoaXMubGlzdERhdGEudW5zaGlmdChibGFua3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmlsdGVySXRlbUxhYmVsKGVsZW1lbnQ6IGFueSwgYXBwbHlGb3JtYXR0ZXI6IGJvb2xlYW4gPSB0cnVlLCBkYXRhPzogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGUgfHwgdGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lIHx8XG4gICAgICAgICAgICB0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGVUaW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50LmxhYmVsID8gZWxlbWVudC5sYWJlbCA6IHRoaXMuY29sdW1uLmZvcm1hdHRlciA/XG4gICAgICAgICAgICAgICAgYXBwbHlGb3JtYXR0ZXIgPyB0aGlzLmNvbHVtbi5mb3JtYXR0ZXIoZWxlbWVudCwgZGF0YSkgOiBlbGVtZW50IDpcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZGF0ZVBpcGUudHJhbnNmb3JtKGVsZW1lbnQsIHRoaXMuY29sdW1uLnBpcGVBcmdzLmZvcm1hdCwgdGhpcy5jb2x1bW4ucGlwZUFyZ3MudGltZXpvbmUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5sb2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLk51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmZvcm1hdHRlciA/XG4gICAgICAgICAgICAgICAgYXBwbHlGb3JtYXR0ZXIgPyB0aGlzLmNvbHVtbi5mb3JtYXR0ZXIoZWxlbWVudCwgZGF0YSkgOiBlbGVtZW50IDpcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZGVjaW1hbFBpcGUudHJhbnNmb3JtKGVsZW1lbnQsIHRoaXMuY29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm8sIHRoaXMuZ3JpZC5sb2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkN1cnJlbmN5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZm9ybWF0dGVyID9cbiAgICAgICAgICAgICAgICBhcHBseUZvcm1hdHRlciA/IHRoaXMuY29sdW1uLmZvcm1hdHRlcihlbGVtZW50LCBkYXRhKSA6IGVsZW1lbnQgOlxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jdXJyZW5jeVBpcGUudHJhbnNmb3JtKGVsZW1lbnQsIHRoaXMuY29sdW1uLnBpcGVBcmdzLmN1cnJlbmN5Q29kZSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uLnBpcGVBcmdzLmN1cnJlbmN5Q29kZSA6IGdldExvY2FsZUN1cnJlbmN5Q29kZSh0aGlzLmdyaWQubG9jYWxlKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4ucGlwZUFyZ3MuZGlzcGxheSwgdGhpcy5jb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbywgdGhpcy5ncmlkLmxvY2FsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuUGVyY2VudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmZvcm1hdHRlciA/XG4gICAgICAgICAgICAgICAgYXBwbHlGb3JtYXR0ZXIgPyB0aGlzLmNvbHVtbi5mb3JtYXR0ZXIoZWxlbWVudCwgZGF0YSkgOiBlbGVtZW50IDpcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQucGVyY2VudFBpcGUudHJhbnNmb3JtKGVsZW1lbnQsIHRoaXMuY29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm8sIHRoaXMuZ3JpZC5sb2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5mb3JtYXR0ZXIgJiYgYXBwbHlGb3JtYXR0ZXIgP1xuICAgICAgICAgICAgdGhpcy5jb2x1bW4uZm9ybWF0dGVyKGVsZW1lbnQsIGRhdGEpIDpcbiAgICAgICAgICAgIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJJdGVtVmFsdWUoZWxlbWVudDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGUpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBwYXJzZURhdGUoZWxlbWVudC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHByZXNzaW9uVmFsdWUoZWxlbWVudDogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGVsZW1lbnQgJiYgZWxlbWVudC52YWx1ZSA/IG5ldyBEYXRlKGVsZW1lbnQudmFsdWUpLnRvSVNPU3RyaW5nKCkgOiBlbGVtZW50LnZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlVGltZSkge1xuICAgICAgICAgICAgdmFsdWUgPSBlbGVtZW50ID8gbmV3IERhdGUoZWxlbWVudCkudG9JU09TdHJpbmcoKSA6IGVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSBpZih0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZWxlbWVudCA/IG5ldyBEYXRlKGVsZW1lbnQpLnRvTG9jYWxlVGltZVN0cmluZygpIDogZWxlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuIl19