igniteui-angular 16.1.2 → 16.1.3

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.
Files changed (66) hide show
  1. package/README.md +6 -5
  2. package/esm2022/lib/action-strip/action-strip.component.mjs +3 -3
  3. package/esm2022/lib/action-strip/grid-actions/grid-action-button.component.mjs +3 -3
  4. package/esm2022/lib/banner/banner.component.mjs +8 -8
  5. package/esm2022/lib/card/card.component.mjs +3 -3
  6. package/esm2022/lib/carousel/carousel.component.mjs +7 -7
  7. package/esm2022/lib/combo/combo-dropdown.component.mjs +3 -3
  8. package/esm2022/lib/combo/combo.common.mjs +5 -5
  9. package/esm2022/lib/combo/combo.component.mjs +3 -3
  10. package/esm2022/lib/combo/combo.directives.mjs +2 -2
  11. package/esm2022/lib/core/navigation/directives.mjs +3 -3
  12. package/esm2022/lib/date-common/calendar-container/calendar-container.component.mjs +3 -3
  13. package/esm2022/lib/date-picker/date-picker.component.mjs +7 -7
  14. package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +6 -6
  15. package/esm2022/lib/dialog/dialog.component.mjs +5 -5
  16. package/esm2022/lib/directives/button/button.directive.mjs +8 -8
  17. package/esm2022/lib/directives/ripple/ripple.directive.mjs +6 -6
  18. package/esm2022/lib/directives/tooltip/tooltip-target.directive.mjs +7 -9
  19. package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +2 -2
  20. package/esm2022/lib/drop-down/drop-down.component.mjs +3 -3
  21. package/esm2022/lib/expansion-panel/expansion-panel.component.mjs +4 -4
  22. package/esm2022/lib/grids/column-actions/column-actions.component.mjs +3 -3
  23. package/esm2022/lib/grids/common/crud.service.mjs +2 -2
  24. package/esm2022/lib/grids/filtering/base/grid-filtering-row.component.mjs +3 -3
  25. package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +3 -3
  26. package/esm2022/lib/grids/filtering/excel-style/excel-style-date-expression.component.mjs +3 -3
  27. package/esm2022/lib/grids/filtering/excel-style/excel-style-default-expression.component.mjs +3 -3
  28. package/esm2022/lib/grids/filtering/excel-style/excel-style-header.component.mjs +3 -3
  29. package/esm2022/lib/grids/filtering/excel-style/excel-style-moving.component.mjs +3 -3
  30. package/esm2022/lib/grids/filtering/excel-style/excel-style-search.component.mjs +3 -3
  31. package/esm2022/lib/grids/filtering/excel-style/excel-style-sorting.component.mjs +3 -3
  32. package/esm2022/lib/grids/grid/grid.component.mjs +3 -3
  33. package/esm2022/lib/grids/grid-base.directive.mjs +4 -4
  34. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +3 -3
  35. package/esm2022/lib/grids/tree-grid/tree-grid.component.mjs +3 -3
  36. package/esm2022/lib/query-builder/query-builder.component.mjs +3 -3
  37. package/esm2022/lib/simple-combo/simple-combo.component.mjs +3 -3
  38. package/esm2022/lib/snackbar/snackbar.component.mjs +4 -4
  39. package/esm2022/lib/tabs/tabs/tabs.component.mjs +3 -3
  40. package/esm2022/lib/time-picker/time-picker.component.mjs +6 -5
  41. package/esm2022/lib/toast/toast.component.mjs +2 -2
  42. package/esm2022/lib/tree/tree-node/tree-node.component.mjs +4 -4
  43. package/fesm2022/igniteui-angular.mjs +117 -118
  44. package/fesm2022/igniteui-angular.mjs.map +1 -1
  45. package/lib/banner/banner.component.d.ts +5 -5
  46. package/lib/card/card.component.d.ts +2 -2
  47. package/lib/carousel/carousel.component.d.ts +6 -6
  48. package/lib/combo/combo.common.d.ts +4 -4
  49. package/lib/combo/combo.directives.d.ts +1 -1
  50. package/lib/core/navigation/directives.d.ts +2 -2
  51. package/lib/date-picker/date-picker.component.d.ts +4 -4
  52. package/lib/date-range-picker/date-range-picker.component.d.ts +3 -3
  53. package/lib/dialog/dialog.component.d.ts +4 -4
  54. package/lib/directives/button/button.directive.d.ts +7 -7
  55. package/lib/directives/ripple/ripple.directive.d.ts +6 -6
  56. package/lib/directives/tooltip/tooltip-target.directive.d.ts +6 -8
  57. package/lib/directives/tooltip/tooltip.directive.d.ts +1 -1
  58. package/lib/expansion-panel/expansion-panel.component.d.ts +3 -3
  59. package/lib/grids/common/crud.service.d.ts +1 -1
  60. package/lib/grids/grid-base.directive.d.ts +3 -3
  61. package/lib/snackbar/snackbar.component.d.ts +1 -1
  62. package/lib/time-picker/time-picker.component.d.ts +1 -1
  63. package/lib/toast/toast.component.d.ts +1 -1
  64. package/lib/tree/tree-node/tree-node.component.d.ts +3 -3
  65. package/migrations/common/UpdateChanges.js +1 -1
  66. package/package.json +1 -1
@@ -344,9 +344,9 @@ export class IgxCarouselComponent extends IgxCarouselComponentBase {
344
344
  * <igx-carousel #carousel>
345
345
  * ...
346
346
  * <ng-template igxCarouselNextButton let-disabled>
347
- * <button igxButton="fab" igxRipple="white" [disabled]="disabled">
348
- * <igx-icon>add</igx-icon>
349
- * </button>
347
+ * <button type="button" igxButton="fab" igxRipple="white" [disabled]="disabled">
348
+ * <igx-icon>add</igx-icon>
349
+ * </button>
350
350
  * </ng-template>
351
351
  * </igx-carousel>
352
352
  * ```
@@ -365,9 +365,9 @@ export class IgxCarouselComponent extends IgxCarouselComponentBase {
365
365
  * <igx-carousel #carousel>
366
366
  * ...
367
367
  * <ng-template igxCarouselPrevButton let-disabled>
368
- * <button igxButton="fab" igxRipple="white" [disabled]="disabled">
369
- * <igx-icon>remove</igx-icon>
370
- * </button>
368
+ * <button type="button" igxButton="fab" igxRipple="white" [disabled]="disabled">
369
+ * <igx-icon>remove</igx-icon>
370
+ * </button>
371
371
  * </ng-template>
372
372
  * </igx-carousel>
373
373
  * ```
@@ -963,4 +963,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImpor
963
963
  type: HostListener,
964
964
  args: ['panend', ['$event']]
965
965
  }] } });
966
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2Nhcm91c2VsL2Nhcm91c2VsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYXJvdXNlbC9jYXJvdXNlbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RSxPQUFPLEVBR0gsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBRWYsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLFVBQVUsRUFDVixLQUFLLEVBS0wsTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkYsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBa0IsTUFBTSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUVyRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUU3RixPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0YsT0FBTyxFQUFFLDZCQUE2QixFQUFFLDhCQUE4QixFQUFFLDhCQUE4QixFQUFFLE1BQU0sdUJBQXVC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QztnQkFXaEMsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyxZQUFZO2dCQVVuQixZQUFZO3NCQURsQixZQUFZO3VCQUFDLFlBQVk7Z0JBU25CLFNBQVM7c0JBRGYsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTzVCLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVM3QixRQUFRO3NCQURkLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiwgTmdDbGFzcywgTmdGb3IsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZUNoYW5nZVJlY29yZCxcbiAgICBJdGVyYWJsZURpZmZlcixcbiAgICBJdGVyYWJsZURpZmZlcnMsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSGFtbWVyR2VzdHVyZUNvbmZpZywgSEFNTUVSX0dFU1RVUkVfQ09ORklHIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBtZXJnZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSUNhcm91c2VsUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL2Nhcm91c2VsLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDdXJyZW50UmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBJQmFzZUV2ZW50QXJncywgbWtlbnVtLCBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcblxuaW1wb3J0IHsgSWd4QW5ndWxhckFuaW1hdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hbmltYXRpb24vYW5ndWxhci1hbmltYXRpb24tc2VydmljZSc7XG5pbXBvcnQgeyBBbmltYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYW5pbWF0aW9uL2FuaW1hdGlvbic7XG5pbXBvcnQgeyBEaXJlY3Rpb24sIEhvcml6b250YWxBbmltYXRpb25UeXBlLCBJZ3hDYXJvdXNlbENvbXBvbmVudEJhc2UgfSBmcm9tICcuL2Nhcm91c2VsLWJhc2UnO1xuaW1wb3J0IHsgSWd4Q2Fyb3VzZWxJbmRpY2F0b3JEaXJlY3RpdmUsIElneENhcm91c2VsTmV4dEJ1dHRvbkRpcmVjdGl2ZSwgSWd4Q2Fyb3VzZWxQcmV2QnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi9jYXJvdXNlbC5kaXJlY3RpdmVzJztcbmltcG9ydCB7IElneFNsaWRlQ29tcG9uZW50IH0gZnJvbSAnLi9zbGlkZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbmV4cG9ydCBjb25zdCBDYXJvdXNlbEluZGljYXRvcnNPcmllbnRhdGlvbiA9IG1rZW51bSh7XG4gICAgYm90dG9tOiAnYm90dG9tJyxcbiAgICB0b3A6ICd0b3AnXG59KTtcbmV4cG9ydCB0eXBlIENhcm91c2VsSW5kaWNhdG9yc09yaWVudGF0aW9uID0gKHR5cGVvZiBDYXJvdXNlbEluZGljYXRvcnNPcmllbnRhdGlvbilba2V5b2YgdHlwZW9mIENhcm91c2VsSW5kaWNhdG9yc09yaWVudGF0aW9uXTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENhcm91c2VsSGFtbWVyQ29uZmlnIGV4dGVuZHMgSGFtbWVyR2VzdHVyZUNvbmZpZyB7XG4gICAgcHVibGljIG92ZXJyaWRlIG92ZXJyaWRlcyA9IHtcbiAgICAgICAgcGFuOiB7IGRpcmVjdGlvbjogSGFtbWVyLkRJUkVDVElPTl9IT1JJWk9OVEFMIH1cbiAgICB9O1xufVxuLyoqXG4gKiAqKklnbml0ZSBVSSBmb3IgQW5ndWxhciBDYXJvdXNlbCoqIC1cbiAqIFtEb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5pbmZyYWdpc3RpY3MuY29tL3Byb2R1Y3RzL2lnbml0ZS11aS1hbmd1bGFyL2FuZ3VsYXIvY29tcG9uZW50cy9jYXJvdXNlbC5odG1sKVxuICpcbiAqIFRoZSBJZ25pdGUgVUkgQ2Fyb3VzZWwgaXMgdXNlZCB0byBicm93c2Ugb3IgbmF2aWdhdGUgdGhyb3VnaCBhIGNvbGxlY3Rpb24gb2Ygc2xpZGVzLiBTbGlkZXMgY2FuIGNvbnRhaW4gY3VzdG9tXG4gKiBjb250ZW50IHN1Y2ggYXMgaW1hZ2VzIG9yIGNhcmRzIGFuZCBiZSB1c2VkIGZvciB0aGluZ3Mgc3VjaCBhcyBvbi1ib2FyZGluZyB0dXRvcmlhbHMgb3IgcGFnZS1iYXNlZCBpbnRlcmZhY2VzLlxuICogSXQgY2FuIGJlIHVzZWQgYXMgYSBzZXBhcmF0ZSBmdWxsc2NyZWVuIGVsZW1lbnQgb3IgaW5zaWRlIGFub3RoZXIgY29tcG9uZW50LlxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGBodG1sXG4gKiA8aWd4LWNhcm91c2VsPlxuICogICA8aWd4LXNsaWRlPlxuICogICAgIDxoMz5GaXJzdCBTbGlkZSBIZWFkZXI8L2gzPlxuICogICAgIDxwPkZpcnN0IHNsaWRlIENvbnRlbnQ8L3A+XG4gKiAgIDxpZ3gtc2xpZGU+XG4gKiAgIDxpZ3gtc2xpZGU+XG4gKiAgICAgPGgzPlNlY29uZCBTbGlkZSBIZWFkZXI8L2gzPlxuICogICAgIDxwPlNlY29uZCBTbGlkZSBDb250ZW50PC9wPlxuICogPC9pZ3gtY2Fyb3VzZWw+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEhBTU1FUl9HRVNUVVJFX0NPTkZJRyxcbiAgICAgICAgICAgIHVzZUNsYXNzOiBDYXJvdXNlbEhhbW1lckNvbmZpZ1xuICAgICAgICB9XG4gICAgXSxcbiAgICBzZWxlY3RvcjogJ2lneC1jYXJvdXNlbCcsXG4gICAgdGVtcGxhdGVVcmw6ICdjYXJvdXNlbC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG91dGxpbmUtc3R5bGU6IG5vbmU7XG4gICAgfWBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0lneEljb25Db21wb25lbnQsIE5nSWYsIE5nQ2xhc3MsIE5nRm9yLCBOZ1RlbXBsYXRlT3V0bGV0XVxufSlcblxuZXhwb3J0IGNsYXNzIElneENhcm91c2VsQ29tcG9uZW50IGV4dGVuZHMgSWd4Q2Fyb3VzZWxDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0IHtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGBpZGAgb2YgdGhlIGNhcm91c2VsLlxuICAgICAqIElmIG5vdCBzZXQsIHRoZSBgaWRgIG9mIHRoZSBmaXJzdCBjYXJvdXNlbCBjb21wb25lbnQgd2lsbCBiZSBgXCJpZ3gtY2Fyb3VzZWwtMFwiYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCBpZD1cIm15LWZpcnN0LWNhcm91c2VsXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1jYXJvdXNlbC0ke05FWFRfSUQrK31gO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGByb2xlYCBhdHRyaWJ1dGUgb2YgdGhlIGNhcm91c2VsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2Fyb3VzZWxSb2xlID0gIHRoaXMuY2Fyb3VzZWwucm9sZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcHVibGljIHJvbGUgPSAncmVnaW9uJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcm9sZWRlc2NyaXB0aW9uJylcbiAgICBwdWJsaWMgcm9sZURlc2NyaXB0aW9uID0gJ2Nhcm91c2VsJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWxsZWRieScpXG4gICAgcHVibGljIGdldCBsYWJlbElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93SW5kaWNhdG9yc0xhYmVsID8gYCR7dGhpcy5pZH0tbGFiZWxgIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjbGFzcyBvZiB0aGUgY2Fyb3VzZWwgY29tcG9uZW50LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2xhc3MgPSAgdGhpcy5jYXJvdXNlbC5jc3NDbGFzcztcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhcm91c2VsJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LWNhcm91c2VsJztcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGB0b3VjaC1hY3Rpb25gIHN0eWxlIG9mIHRoZSBgbGlzdCBpdGVtYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHRvdWNoQWN0aW9uID0gdGhpcy5saXN0SXRlbS50b3VjaEFjdGlvbjtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnRvdWNoLWFjdGlvbicpXG4gICAgcHVibGljIGdldCB0b3VjaEFjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VzdHVyZXNTdXBwb3J0ID8gJ3Bhbi15JyA6ICdhdXRvJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIGNhcm91c2VsIHNob3VsZCBgbG9vcGAgYmFjayB0byB0aGUgZmlyc3Qgc2xpZGUgYWZ0ZXIgcmVhY2hpbmcgdGhlIGxhc3Qgc2xpZGUuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgW2xvb3BdPVwiZmFsc2VcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgd2hldGhlciB0aGUgY2Fyb3VzZWwgd2lsbCBgcGF1c2VgIHRoZSBzbGlkZSB0cmFuc2l0aW9ucyBvbiB1c2VyIGludGVyYWN0aW9ucy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtY2Fyb3VzZWwgW3BhdXNlXT1cImZhbHNlXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgcGF1c2UgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgd2hldGhlciB0aGUgY2Fyb3VzZWwgc2hvdWxkIHJlbmRlciB0aGUgbGVmdC9yaWdodCBgbmF2aWdhdGlvbmAgYnV0dG9ucy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCBbbmF2aWdhdGlvbl0gPSBcImZhbHNlXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbmF2aWdhdGlvbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBjYXJvdXNlbCBzaG91bGQgc3VwcG9ydCBrZXlib2FyZCBuYXZpZ2F0aW9uLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhcm91c2VsIFtrZXlib2FyZFN1cHBvcnRdID0gXCJmYWxzZVwiPjwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGtleWJvYXJkU3VwcG9ydCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBjYXJvdXNlbCBzaG91bGQgc3VwcG9ydCBnZXN0dXJlcy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCBbZ2VzdHVyZXNTdXBwb3J0XSA9IFwiZmFsc2VcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBnZXN0dXJlc1N1cHBvcnQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgdGhlIG1heGltdW0gaW5kZXhlcyB0aGF0IGNhbiBiZSBzaG93bi5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGA1YC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCBbbWF4aW11bUluZGljYXRvcnNDb3VudF0gPSBcIjEwXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbWF4aW11bUluZGljYXRvcnNDb3VudCA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgdGhlIGRpc3BsYXkgbW9kZSBvZiBjYXJvdXNlbCBpbmRpY2F0b3JzLiBJdCBjYW4gYmUgdG9wIG9yIGJvdHRvbS5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBib3R0b21gLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhcm91c2VsIGluZGljYXRvcnNPcmllbnRhdGlvbj0ndG9wJz5cbiAgICAgKiA8aWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneFNsaWRlQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGluZGljYXRvcnNPcmllbnRhdGlvbjogQ2Fyb3VzZWxJbmRpY2F0b3JzT3JpZW50YXRpb24gPSBDYXJvdXNlbEluZGljYXRvcnNPcmllbnRhdGlvbi5ib3R0b207XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgdGhlIGFuaW1hdGlvbiB0eXBlIG9mIGNhcm91c2VsLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYHNsaWRlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCBhbmltYXRpb25UeXBlPSdub25lJz5cbiAgICAgKiA8aWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneFNsaWRlQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG92ZXJyaWRlIGFuaW1hdGlvblR5cGU6IEhvcml6b250YWxBbmltYXRpb25UeXBlID0gSG9yaXpvbnRhbEFuaW1hdGlvblR5cGUuc2xpZGU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIHRlbXBsYXRlLCBpZiBhbnksIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgY2Fyb3VzZWwgaW5kaWNhdG9yc1xuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIFNldCBpbiB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlDdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG15Q29tcG9uZW50LmN1c3RvbVRlbXBsYXRlO1xuICAgICAqIG15Q29tcG9uZW50LmNhcm91c2VsLmluZGljYXRvclRlbXBsYXRlID0gbXlDdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLSBTZXQgaW4gbWFya3VwIC0tPlxuICAgICAqICA8aWd4LWNhcm91c2VsICNjYXJvdXNlbD5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICAgICAgPG5nLXRlbXBsYXRlIGlneENhcm91c2VsSW5kaWNhdG9yIGxldC1zbGlkZT5cbiAgICAgKiAgICAgICAgIDxpZ3gtaWNvbiAqbmdJZj1cInNsaWRlLmFjdGl2ZVwiPmJyaWdodG5lc3NfNzwvaWd4LWljb24+XG4gICAgICogICAgICAgICA8aWd4LWljb24gKm5nSWY9XCIhc2xpZGUuYWN0aXZlXCI+YnJpZ2h0bmVzc181PC9pZ3gtaWNvbj5cbiAgICAgKiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogIDwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4Q2Fyb3VzZWxJbmRpY2F0b3JEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgaW5kaWNhdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1c3RvbSB0ZW1wbGF0ZSwgaWYgYW55LCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIGNhcm91c2VsIG5leHQgYnV0dG9uXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gU2V0IGluIHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteUN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbXlDb21wb25lbnQuY3VzdG9tVGVtcGxhdGU7XG4gICAgICogbXlDb21wb25lbnQuY2Fyb3VzZWwubmV4dEJ1dHRvblRlbXBsYXRlID0gbXlDdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLSBTZXQgaW4gbWFya3VwIC0tPlxuICAgICAqICA8aWd4LWNhcm91c2VsICNjYXJvdXNlbD5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICAgICAgPG5nLXRlbXBsYXRlIGlneENhcm91c2VsTmV4dEJ1dHRvbiBsZXQtZGlzYWJsZWQ+XG4gICAgICogICAgICAgICAgICA8YnV0dG9uIGlneEJ1dHRvbj1cImZhYlwiIGlneFJpcHBsZT1cIndoaXRlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICogICAgICAgICAgICAgICAgPGlneC1pY29uPmFkZDwvaWd4LWljb24+XG4gICAgICogICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAqICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgPC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hDYXJvdXNlbE5leHRCdXR0b25EaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgbmV4dEJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXN0b20gdGVtcGxhdGUsIGlmIGFueSwgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHJlbmRlcmluZyBjYXJvdXNlbCBwcmV2aW91cyBidXR0b25cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBTZXQgaW4gdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Q3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBteUNvbXBvbmVudC5jdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBteUNvbXBvbmVudC5jYXJvdXNlbC5uZXh0QnV0dG9uVGVtcGxhdGUgPSBteUN1c3RvbVRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tIFNldCBpbiBtYXJrdXAgLS0+XG4gICAgICogIDxpZ3gtY2Fyb3VzZWwgI2Nhcm91c2VsPlxuICAgICAqICAgICAgLi4uXG4gICAgICogICAgICA8bmctdGVtcGxhdGUgaWd4Q2Fyb3VzZWxQcmV2QnV0dG9uIGxldC1kaXNhYmxlZD5cbiAgICAgKiAgICAgICAgICAgIDxidXR0b24gaWd4QnV0dG9uPVwiZmFiXCIgaWd4UmlwcGxlPVwid2hpdGVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgKiAgICAgICAgICAgICAgICA8aWd4LWljb24+cmVtb3ZlPC9pZ3gtaWNvbj5cbiAgICAgKiAgICAgICAgICAgPC9idXR0b24+XG4gICAgICogICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqICA8L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneENhcm91c2VsUHJldkJ1dHRvbkRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBwcmV2QnV0dG9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbGxlY3Rpb24gb2YgYHNsaWRlc2AgY3VycmVudGx5IGluIHRoZSBjYXJvdXNlbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHNsaWRlczogUXVlcnlMaXN0PElneFNsaWRlQ29tcG9uZW50PiA9IHRoaXMuY2Fyb3VzZWwuc2xpZGVzO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hTbGlkZUNvbXBvbmVudClcbiAgICBwdWJsaWMgc2xpZGVzOiBRdWVyeUxpc3Q8SWd4U2xpZGVDb21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGFmdGVyIGEgc2xpZGUgdHJhbnNpdGlvbiBoYXMgaGFwcGVuZWQuXG4gICAgICogUHJvdmlkZXMgcmVmZXJlbmNlcyB0byB0aGUgYElneENhcm91c2VsQ29tcG9uZW50YCBhbmQgYElneFNsaWRlQ29tcG9uZW50YCBhcyBldmVudCBhcmd1bWVudHMuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgKHNsaWRlQ2hhbmdlZCk9XCJzbGlkZUNoYW5nZWQoJGV2ZW50KVwiPjwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyBzbGlkZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElTbGlkZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciBhIHNsaWRlIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBjYXJvdXNlbC5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2VzIHRvIHRoZSBgSWd4Q2Fyb3VzZWxDb21wb25lbnRgIGFuZCBgSWd4U2xpZGVDb21wb25lbnRgIGFzIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCAoc2xpZGVBZGRlZCk9XCJzbGlkZUFkZGVkKCRldmVudClcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgc2xpZGVBZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVNsaWRlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGFmdGVyIGEgc2xpZGUgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjYXJvdXNlbC5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2VzIHRvIHRoZSBgSWd4Q2Fyb3VzZWxDb21wb25lbnRgIGFuZCBgSWd4U2xpZGVDb21wb25lbnRgIGFzIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCAoc2xpZGVSZW1vdmVkKT1cInNsaWRlUmVtb3ZlZCgkZXZlbnQpXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIHNsaWRlUmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVNsaWRlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGFmdGVyIHRoZSBjYXJvdXNlbCBoYXMgYmVlbiBwYXVzZWQuXG4gICAgICogUHJvdmlkZXMgYSByZWZlcmVuY2UgdG8gdGhlIGBJZ3hDYXJvdXNlbENvbXBvbmVudGAgYXMgYW4gZXZlbnQgYXJndW1lbnQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgKGNhcm91c2VsUGF1c2VkKT1cImNhcm91c2VsUGF1c2VkKCRldmVudClcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgY2Fyb3VzZWxQYXVzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElneENhcm91c2VsQ29tcG9uZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGFmdGVyIHRoZSBjYXJvdXNlbCBoYXMgcmVzdW1lZCB0cmFuc2l0aW9uaW5nIGJldHdlZW4gYHNsaWRlc2AuXG4gICAgICogUHJvdmlkZXMgYSByZWZlcmVuY2UgdG8gdGhlIGBJZ3hDYXJvdXNlbENvbXBvbmVudGAgYXMgYW4gZXZlbnQgYXJndW1lbnQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgKGNhcm91c2VsUGxheWluZyk9XCJjYXJvdXNlbFBsYXlpbmcoJGV2ZW50KVwiPjwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyBjYXJvdXNlbFBsYXlpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElneENhcm91c2VsQ29tcG9uZW50PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEluZGljYXRvcicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByaXZhdGUgZGVmYXVsdEluZGljYXRvcjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHROZXh0QnV0dG9uJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBkZWZhdWx0TmV4dEJ1dHRvbjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRQcmV2QnV0dG9uJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBkZWZhdWx0UHJldkJ1dHRvbjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RvcHBlZEJ5SW50ZXJhY3Rpb246IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGN1cnJlbnRJdGVtOiBJZ3hTbGlkZUNvbXBvbmVudDtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcHJldmlvdXNJdGVtOiBJZ3hTbGlkZUNvbXBvbmVudDtcbiAgICBwcml2YXRlIF9pbnRlcnZhbDogbnVtYmVyO1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuQ2Fyb3VzZWxSZXNTdHJpbmdzO1xuICAgIHByaXZhdGUgbGFzdEludGVydmFsOiBhbnk7XG4gICAgcHJpdmF0ZSBwbGF5aW5nOiBib29sZWFuO1xuICAgIHByaXZhdGUgZGVzdHJveWVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgcHJpdmF0ZSBkaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPElneFNsaWRlQ29tcG9uZW50PiB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgaW5jb21pbmdTbGlkZTogSWd4U2xpZGVDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHNldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBJQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IElDYXJvdXNlbFJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVN0cmluZ3M7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IGdldEluZGljYXRvclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5pbmRpY2F0b3JUZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEluZGljYXRvcjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgZ2V0TmV4dEJ1dHRvblRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5uZXh0QnV0dG9uVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5leHRCdXR0b25UZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0TmV4dEJ1dHRvbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgZ2V0UHJldkJ1dHRvblRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5wcmV2QnV0dG9uVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByZXZCdXR0b25UZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UHJldkJ1dHRvbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgaW5kaWNhdG9yc09yaWVudGF0aW9uQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiBgaWd4LWNhcm91c2VsLWluZGljYXRvcnMtLSR7dGhpcy5pbmRpY2F0b3JzT3JpZW50YXRpb259YDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgc2hvd0luZGljYXRvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvdGFsIDw9IHRoaXMubWF4aW11bUluZGljYXRvcnNDb3VudCAmJiB0aGlzLnRvdGFsID4gMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgc2hvd0luZGljYXRvcnNMYWJlbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG90YWwgPiB0aGlzLm1heGltdW1JbmRpY2F0b3JzQ291bnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IGdldENhcm91c2VsTGFiZWwoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmN1cnJlbnQgKyAxfSAke3RoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9jYXJvdXNlbF9vZn0gJHt0aGlzLnRvdGFsfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGBzbGlkZXNgIGluIHRoZSBjYXJvdXNlbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHNsaWRlQ291bnQgPSAgdGhpcy5jYXJvdXNlbC50b3RhbDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdG90YWwoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVzPy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IG9mIHRoZSBzbGlkZSBiZWluZyBjdXJyZW50bHkgc2hvd24uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjdXJyZW50U2xpZGVOdW1iZXIgPSAgdGhpcy5jYXJvdXNlbC5jdXJyZW50O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBjdXJyZW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jdXJyZW50SXRlbSA/IDAgOiB0aGlzLmN1cnJlbnRJdGVtLmluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGNhcm91c2VsIGlzIHBsYXlpbmcuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc1BsYXlpbmcgPSAgdGhpcy5jYXJvdXNlbC5pc1BsYXlpbmc7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzUGxheWluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxheWluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zINCwIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgY2Fyb3VzZWwgaXMgZGVzdHJveWVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNEZXN0cm95ZWQgPSAgdGhpcy5jYXJvdXNlbC5pc0Rlc3Ryb3llZDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNEZXN0cm95ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlc3Ryb3llZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgY2Fyb3VzZWwgZWxlbWVudCBpbiB0aGUgRE9NLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbmF0aXZlRWxlbWVudCA9ICB0aGlzLmNhcm91c2VsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG5hdGl2ZUVsZW1lbnQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHRpbWUgYGludGVydmFsYCBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBzbGlkZSBjaGFuZ2VzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdGltZUludGVydmFsID0gdGhpcy5jYXJvdXNlbC5pbnRlcnZhbDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBpbnRlcnZhbCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJ2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGltZSBgaW50ZXJ2YWxgIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIHNsaWRlIGNoYW5nZXMuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGNhcm91c2VsIHdpbGwgbm90IGNoYW5nZSBgc2xpZGVzYCBhdXRvbWF0aWNhbGx5LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhcm91c2VsIFtpbnRlcnZhbF0gPSBcIjEwMDBcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgaW50ZXJ2YWwodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9ICt2YWx1ZTtcbiAgICAgICAgdGhpcy5yZXN0YXJ0SW50ZXJ2YWwoKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIGl0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgICAgICBASW5qZWN0KElneEFuZ3VsYXJBbmltYXRpb25TZXJ2aWNlKSBhbmltYXRpb25TZXJ2aWNlOiBBbmltYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHBsYXRmb3JtVXRpbDogUGxhdGZvcm1VdGlsKSB7XG4gICAgICAgIHN1cGVyKGFuaW1hdGlvblNlcnZpY2UsIGNkcik7XG4gICAgICAgIHRoaXMuZGlmZmVyID0gdGhpcy5pdGVyYWJsZURpZmZlcnMuZmluZChbXSkuY3JlYXRlKG51bGwpO1xuICAgIH1cblxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93cmlnaHQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleWRvd25BcnJvd1JpZ2h0KGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmtleWJvYXJkU3VwcG9ydCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c1NsaWRlRWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93bGVmdCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93bkFycm93TGVmdChldmVudCkge1xuICAgICAgICBpZiAodGhpcy5rZXlib2FyZFN1cHBvcnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnByZXYoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTbGlkZUVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigndGFwJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25UYXAoZXZlbnQpIHtcbiAgICAgICAgLy8gcGxheSBwYXVzZSBvbmx5IHdoZW4gdGFwIG9uIHNsaWRlXG4gICAgICAgIGlmIChldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnaWd4LXNsaWRlJykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhdXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcHBlZEJ5SW50ZXJhY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdG9wcGVkQnlJbnRlcmFjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMucGxheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmhvbWUnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleWRvd25Ib21lKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmtleWJvYXJkU3VwcG9ydCAmJiB0aGlzLnNsaWRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXMuZmlyc3QuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTbGlkZUVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbmQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleWRvd25FbmQoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMua2V5Ym9hcmRTdXBwb3J0ICYmIHRoaXMuc2xpZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnNsaWRlcy5sYXN0LmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmZvY3VzU2xpZGVFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInKVxuICAgIHB1YmxpYyBvbk1vdXNlRW50ZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhdXNlICYmIHRoaXMuaXNQbGF5aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWRCeUludGVyYWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKVxuICAgIHB1YmxpYyBvbk1vdXNlTGVhdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3BwZWRCeUludGVyYWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnBsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigncGFubGVmdCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uUGFuTGVmdChldmVudCkge1xuICAgICAgICB0aGlzLnBhbihldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdwYW5yaWdodCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uUGFuUmlnaHQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5wYW4oZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdwYW5lbmQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvblBhbkVuZChldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuZ2VzdHVyZXNTdXBwb3J0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb25zdCBzbGlkZVdpZHRoID0gdGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICBjb25zdCBwYW5PZmZzZXQgPSAoc2xpZGVXaWR0aCAvIDEwMDApO1xuICAgICAgICBjb25zdCBkZWx0YVggPSBNYXRoLmFicyhldmVudC5kZWx0YVgpICsgcGFuT2Zmc2V0IDwgc2xpZGVXaWR0aCA/IE1hdGguYWJzKGV2ZW50LmRlbHRhWCkgOiBzbGlkZVdpZHRoIC0gcGFuT2Zmc2V0O1xuICAgICAgICBjb25zdCB2ZWxvY2l0eSA9IE1hdGguYWJzKGV2ZW50LnZlbG9jaXR5KTtcbiAgICAgICAgdGhpcy5yZXNldFNsaWRlU3R5bGVzKHRoaXMuY3VycmVudEl0ZW0pO1xuICAgICAgICBpZiAodGhpcy5pbmNvbWluZ1NsaWRlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2xpZGVTdHlsZXModGhpcy5pbmNvbWluZ1NsaWRlKTtcbiAgICAgICAgICAgIGlmIChzbGlkZVdpZHRoIC8gMiA8IGRlbHRhWCB8fCB2ZWxvY2l0eSA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluY29taW5nU2xpZGUuZGlyZWN0aW9uID0gZXZlbnQuZGVsdGFYIDwgMCA/IERpcmVjdGlvbi5ORVhUIDogRGlyZWN0aW9uLlBSRVY7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ1NsaWRlLnByZXZpb3VzID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGlvblBvc2l0aW9uID0gdGhpcy5hbmltYXRpb25UeXBlID09PSBIb3Jpem9udGFsQW5pbWF0aW9uVHlwZS5mYWRlID9cbiAgICAgICAgICAgICAgICAgICAgZGVsdGFYIC8gc2xpZGVXaWR0aCA6IChzbGlkZVdpZHRoIC0gZGVsdGFYKSAvIHNsaWRlV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBpZiAodmVsb2NpdHkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RHVyYXRpb24gPSB0aGlzLmRlZmF1bHRBbmltYXRpb25EdXJhdGlvbiAvIHZlbG9jaXR5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmluY29taW5nU2xpZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbS5kaXJlY3Rpb24gPSBldmVudC5kZWx0YVggPiAwID8gRGlyZWN0aW9uLk5FWFQgOiBEaXJlY3Rpb24uUFJFVjtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzSXRlbSA9IHRoaXMuaW5jb21pbmdTbGlkZTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzSXRlbS5wcmV2aW91cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb25Qb3NpdGlvbiA9IHRoaXMuYW5pbWF0aW9uVHlwZSA9PT0gSG9yaXpvbnRhbEFuaW1hdGlvblR5cGUuZmFkZSA/XG4gICAgICAgICAgICAgICAgICAgIE1hdGguYWJzKChzbGlkZVdpZHRoIC0gZGVsdGFYKSAvIHNsaWRlV2lkdGgpIDogZGVsdGFYIC8gc2xpZGVXaWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXlBbmltYXRpb25zKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdG9wcGVkQnlJbnRlcmFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5wbGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMuc2xpZGVzLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZTogUXVlcnlMaXN0PElneFNsaWRlQ29tcG9uZW50PikgPT4gdGhpcy5pbml0U2xpZGVzKGNoYW5nZSkpO1xuXG4gICAgICAgIHRoaXMuaW5pdFNsaWRlcyh0aGlzLnNsaWRlcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmxhc3RJbnRlcnZhbCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmxhc3RJbnRlcnZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzbGlkZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm92aWRlZCBgaW5kZXhgIG9yIG51bGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBzbGlkZTEgPSAgdGhpcy5jYXJvdXNlbC5nZXQoMSk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpOiBJZ3hTbGlkZUNvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5maW5kKChzbGlkZSkgPT4gc2xpZGUuaW5kZXggPT09IGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbmV3IHNsaWRlIHRvIHRoZSBjYXJvdXNlbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jYXJvdXNlbC5hZGQobmV3U2xpZGUpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGFkZChzbGlkZTogSWd4U2xpZGVDb21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgbmV3U2xpZGVzID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgICAgICBuZXdTbGlkZXMucHVzaChzbGlkZSk7XG4gICAgICAgIHRoaXMuc2xpZGVzLnJlc2V0KG5ld1NsaWRlcyk7XG4gICAgICAgIHRoaXMuc2xpZGVzLm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBzbGlkZSBmcm9tIHRoZSBjYXJvdXNlbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jYXJvdXNlbC5yZW1vdmUoc2xpZGUpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZShzbGlkZTogSWd4U2xpZGVDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKHNsaWRlICYmIHNsaWRlID09PSB0aGlzLmdldChzbGlkZS5pbmRleCkpIHsgLy8gY2hlY2sgaWYgdGhlIHJlcXVlc3RlZCBzbGlkZSBmb3IgZGVsZXRlIGlzIHByZXNlbnQgaW4gdGhlIGNhcm91c2VsXG4gICAgICAgICAgICBjb25zdCBuZXdTbGlkZXMgPSB0aGlzLnNsaWRlcy50b0FycmF5KCk7XG4gICAgICAgICAgICBuZXdTbGlkZXMuc3BsaWNlKHNsaWRlLmluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLnJlc2V0KG5ld1NsaWRlcyk7XG4gICAgICAgICAgICB0aGlzLnNsaWRlcy5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEtpY2tzIGluIGEgdHJhbnNpdGlvbiBmb3IgYSBnaXZlbiBzbGlkZSB3aXRoIGEgZ2l2ZW4gYGRpcmVjdGlvbmAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2Fyb3VzZWwuc2VsZWN0KHRoaXMuY2Fyb3VzZWwuZ2V0KDIpLCBEaXJlY3Rpb24uTkVYVCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KHNsaWRlOiBJZ3hTbGlkZUNvbXBvbmVudCwgZGlyZWN0aW9uOiBEaXJlY3Rpb24gPSBEaXJlY3Rpb24uTk9ORSkge1xuICAgICAgICBpZiAoc2xpZGUgJiYgc2xpZGUgIT09IHRoaXMuY3VycmVudEl0ZW0pIHtcbiAgICAgICAgICAgIHNsaWRlLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICAgICAgICAgIHNsaWRlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2l0aW9ucyB0byB0aGUgbmV4dCBzbGlkZSBpbiB0aGUgY2Fyb3VzZWwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2Fyb3VzZWwubmV4dCgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG5leHQoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXROZXh0SW5kZXgoKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYgIXRoaXMubG9vcCkge1xuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0KHRoaXMuZ2V0KGluZGV4KSwgRGlyZWN0aW9uLk5FWFQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zaXRpb25zIHRvIHRoZSBwcmV2aW91cyBzbGlkZSBpbiB0aGUgY2Fyb3VzZWwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2Fyb3VzZWwucHJldigpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHByZXYoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRQcmV2SW5kZXgoKTtcblxuICAgICAgICBpZiAoIXRoaXMubG9vcCAmJiBpbmRleCA9PT0gdGhpcy50b3RhbCAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdCh0aGlzLmdldChpbmRleCksIERpcmVjdGlvbi5QUkVWKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXN1bWVzIHBsYXlpbmcgb2YgdGhlIGNhcm91c2VsIGlmIGluIHBhdXNlZCBzdGF0ZS5cbiAgICAgKiBObyBvcGVyYXRpb24gb3RoZXJ3aXNlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNhcm91c2VsLnBsYXkoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgcGxheSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBsYXlpbmcpIHtcbiAgICAgICAgICAgIHRoaXMucGxheWluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhcm91c2VsUGxheWluZy5lbWl0KHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5yZXN0YXJ0SW50ZXJ2YWwoKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEJ5SW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0b3BzIHNsaWRlIHRyYW5zaXRpb25zIGlmIHRoZSBgcGF1c2VgIG9wdGlvbiBpcyBzZXQgdG8gYHRydWVgLlxuICAgICAqIE5vIG9wZXJhdGlvbiBvdGhlcndpc2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICB0aGlzLmNhcm91c2VsLnN0b3AoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMucGF1c2UpIHtcbiAgICAgICAgICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jYXJvdXNlbFBhdXNlZC5lbWl0KHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5yZXNldEludGVydmFsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0UHJldmlvdXNFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJldmlvdXNJdGVtLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEN1cnJlbnRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcblxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRJbnRlcnZhbCgpIHtcbiAgICAgICAgaWYgKHRoaXMubGFzdEludGVydmFsKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMubGFzdEludGVydmFsKTtcbiAgICAgICAgICAgIHRoaXMubGFzdEludGVydmFsID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdGFydEludGVydmFsKCkge1xuICAgICAgICB0aGlzLnJlc2V0SW50ZXJ2YWwoKTtcblxuICAgICAgICBpZiAoIWlzTmFOKHRoaXMuaW50ZXJ2YWwpICYmIHRoaXMuaW50ZXJ2YWwgPiAwICYmIHRoaXMucGxhdGZvcm1VdGlsLmlzQnJvd3Nlcikge1xuICAgICAgICAgICAgdGhpcy5sYXN0SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGljayA9ICt0aGlzLmludGVydmFsO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBsYXlpbmcgJiYgdGhpcy50b3RhbCAmJiAhaXNOYU4odGljaykgJiYgdGljayA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcy5pbnRlcnZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgbmV4dEJ1dHRvbkRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMubG9vcCAmJiB0aGlzLmN1cnJlbnQgPT09ICh0aGlzLnRvdGFsIC0gMSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IHByZXZCdXR0b25EaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmxvb3AgJiYgdGhpcy5jdXJyZW50ID09PSAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TmV4dEluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAodGhpcy5jdXJyZW50ICsgMSkgJSB0aGlzLnRvdGFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJldkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQgLSAxIDwgMCA/IHRoaXMudG90YWwgLSAxIDogdGhpcy5jdXJyZW50IC0gMTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0U2xpZGVTdHlsZXMoc2xpZGU6IElneFNsaWRlQ29tcG9uZW50KSB7XG4gICAgICAgIHNsaWRlLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICAgIHNsaWRlLm5hdGl2ZUVsZW1lbnQuc3R5bGUub3BhY2l0eSA9ICcnO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFuKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHNsaWRlV2lkdGggPSB0aGlzLmN1cnJlbnRJdGVtLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgIGNvbnN0IHBhbk9mZnNldCA9IChzbGlkZVdpZHRoIC8gMTAwMCk7XG4gICAgICAgIGNvbnN0IGRlbHRhWCA9IGV2ZW50LmRlbHRhWDtcbiAgICAgICAgY29uc3QgaW5kZXggPSBkZWx0YVggPCAwID8gdGhpcy5nZXROZXh0SW5kZXgoKSA6IHRoaXMuZ2V0UHJldkluZGV4KCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGRlbHRhWCA8IDAgPyBzbGlkZVdpZHRoICsgZGVsdGFYIDogLXNsaWRlV2lkdGggKyBkZWx0YVg7XG5cbiAgICAgICAgaWYgKCF0aGlzLmdlc3R1cmVzU3VwcG9ydCB8fCBldmVudC5pc0ZpbmFsIHx8IE1hdGguYWJzKGRlbHRhWCkgKyBwYW5PZmZzZXQgPj0gc2xpZGVXaWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmxvb3AgJiYgKCh0aGlzLmN1cnJlbnQgPT09IDAgJiYgZGVsdGFYID4gMCkgfHwgKHRoaXMuY3VycmVudCA9PT0gdGhpcy50b3RhbCAtIDEgJiYgZGVsdGFYIDwgMCkpKSB7XG4gICAgICAgICAgICB0aGlzLmluY29taW5nU2xpZGUgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNQbGF5aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWRCeUludGVyYWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucHJldmlvdXNJdGVtICYmIHRoaXMucHJldmlvdXNJdGVtLnByZXZpb3VzKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzSXRlbS5wcmV2aW91cyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmluaXNoQW5pbWF0aW9ucygpO1xuXG4gICAgICAgIGlmICh0aGlzLmluY29taW5nU2xpZGUpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gdGhpcy5pbmNvbWluZ1NsaWRlLmluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFNsaWRlU3R5bGVzKHRoaXMuaW5jb21pbmdTbGlkZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ1NsaWRlLnByZXZpb3VzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ1NsaWRlID0gdGhpcy5nZXQoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbmNvbWluZ1NsaWRlID0gdGhpcy5nZXQoaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5jb21pbmdTbGlkZS5wcmV2aW91cyA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uVHlwZSA9PT0gSG9yaXpvbnRhbEFuaW1hdGlvblR5cGUuZmFkZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBgJHtNYXRoLmFicyhvZmZzZXQpIC8gc2xpZGVXaWR0aH1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7ZGVsdGFYfXB4KWA7XG4gICAgICAgICAgICB0aGlzLmluY29taW5nU2xpZGUubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke29mZnNldH1weClgO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZXIoc2xpZGU6IElneFNsaWRlQ29tcG9uZW50KSB7XG4gICAgICAgIHJldHVybiBtZXJnZSh0aGlzLmRlc3Ryb3kkLCBzbGlkZS5pc0Rlc3Ryb3llZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblNsaWRlQWN0aXZhdGVkKHNsaWRlOiBJZ3hTbGlkZUNvbXBvbmVudCkge1xuICAgICAgICBpZiAoc2xpZGUuYWN0aXZlICYmIHNsaWRlICE9PSB0aGlzLmN1cnJlbnRJdGVtKSB7XG4gICAgICAgICAgICBpZiAoc2xpZGUuZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uTk9ORSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0luZGV4ID0gc2xpZGUuaW5kZXg7XG4gICAgICAgICAgICAgICAgc2xpZGUuZGlyZWN0aW9uID0gbmV3SW5kZXggPiB0aGlzLmN1cnJlbnQgPyBEaXJlY3Rpb24uTkVYVCA6IERpcmVjdGlvbi5QUkVWO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50SXRlbSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzSXRlbSAmJiB0aGlzLnByZXZpb3VzSXRlbS5wcmV2aW91cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzSXRlbS5wcmV2aW91cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtLmRpcmVjdGlvbiA9IHNsaWRlLmRpcmVjdGlvbjtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtLmFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c0l0ZW0gPSB0aGlzLmN1cnJlbnRJdGVtO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW0gPSBzbGlkZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJBbmltYXRpb25zKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW0gPSBzbGlkZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2xpZGVDaGFuZ2VkLmVtaXQoeyBjYXJvdXNlbDogdGhpcywgc2xpZGUgfSk7XG4gICAgICAgICAgICB0aGlzLnJlc3RhcnRJbnRlcnZhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIGZpbmlzaEFuaW1hdGlvbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmFuaW1hdGlvblN0YXJ0ZWQodGhpcy5sZWF2ZUFuaW1hdGlvblBsYXllcikpIHtcbiAgICAgICAgICAgIHRoaXMubGVhdmVBbmltYXRpb25QbGF5ZXIuZmluaXNoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hbmltYXRpb25TdGFydGVkKHRoaXMuZW50ZXJBbmltYXRpb25QbGF5ZXIpKSB7XG4gICAgICAgICAgICB0aGlzLmVudGVyQW5pbWF0aW9uUGxheWVyLmZpbmlzaCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0U2xpZGVzKGNoYW5nZTogUXVlcnlMaXN0PElneFNsaWRlQ29tcG9uZW50Pikge1xuICAgICAgICBjb25zdCBkaWZmID0gdGhpcy5kaWZmZXIuZGlmZihjaGFuZ2UudG9BcnJheSgpKTtcbiAgICAgICAgaWYgKGRpZmYpIHtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLnJlZHVjZSgoYW55LCBjLCBpbmQpID0+IGMuaW5kZXggPSBpbmQsIDApOyAvLyByZXNldCBzbGlkZXMgaW5kZXhlc1xuICAgICAgICAgICAgZGlmZi5mb3JFYWNoQWRkZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPElneFNsaWRlQ29tcG9uZW50PikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNsaWRlID0gcmVjb3JkLml0ZW07XG4gICAgICAgICAgICAgICAgc2xpZGUudG90YWwgPSB0aGlzLnRvdGFsO1xuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVBZGRlZC5lbWl0KHsgY2Fyb3VzZWw6IHRoaXMsIHNsaWRlIH0pO1xuICAgICAgICAgICAgICAgIGlmIChzbGlkZS5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbSA9IHNsaWRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzbGlkZS5hY3RpdmVDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZXIoc2xpZGUpKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMub25TbGlkZUFjdGl2YXRlZChzbGlkZSkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRpZmYuZm9yRWFjaFJlbW92ZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPElneFNsaWRlQ29tcG9uZW50PikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNsaWRlID0gcmVjb3JkLml0ZW07XG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZVJlbW92ZWQuZW1pdCh7IGNhcm91c2VsOiB0aGlzLCBzbGlkZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAoc2xpZGUuYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtID0gdGhpcy5nZXQoc2xpZGUuaW5kZXggPCB0aGlzLnRvdGFsID8gc2xpZGUuaW5kZXggOiB0aGlzLnRvdGFsIC0gMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2xpZGVzU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNsaWRlc1NlbGVjdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm1VdGlsLmlzQnJvd3Nlcikge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZVNsaWRlcyA9IHRoaXMuc2xpZGVzLmZpbHRlcihzbGlkZSA9PiBzbGlkZS5hY3RpdmUgJiYgc2xpZGUuaW5kZXggIT09IHRoaXMuY3VycmVudEl0ZW0uaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmVTbGlkZXMuZm9yRWFjaChzbGlkZSA9PiBzbGlkZS5hY3RpdmUgPSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRvdGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVzLmZpcnN0LmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGxheSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBmb2N1c1NsaWRlRWxlbWVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMubGVhdmVBbmltYXRpb25QbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMubGVhdmVBbmltYXRpb25QbGF5ZXIuYW5pbWF0aW9uRW5kXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVzLmZpbmQocyA9PiBzLmFjdGl2ZSkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5zbGlkZXMuZmluZChzID0+IHMuYWN0aXZlKS5uYXRpdmVFbGVtZW50LmZvY3VzKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNsaWRlRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIGNhcm91c2VsOiBJZ3hDYXJvdXNlbENvbXBvbmVudDtcbiAgICBzbGlkZTogSWd4U2xpZGVDb21wb25lbnQ7XG59XG4iLCI8bmctdGVtcGxhdGUgI2RlZmF1bHRJbmRpY2F0b3IgbGV0LXNsaWRlPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtbmF2LWRvdFwiXG4gICAgICAgIFtjbGFzcy5pZ3gtbmF2LWRvdC0tYWN0aXZlXT1cInNsaWRlLmFjdGl2ZVwiPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TmV4dEJ1dHRvbiBsZXQtZGlzYWJsZWQ+XG4gICAgPHNwYW4gY2xhc3M9XCJpZ3gtbmF2LWFycm93XCJcbiAgICAgICAgICBbY2xhc3MuaWd4LW5hdi1hcnJvdy0tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgPGlneC1pY29uPmFycm93X2ZvcndhcmQ8L2lneC1pY29uPlxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFByZXZCdXR0b24gbGV0LWRpc2FibGVkPlxuICAgIDxzcGFuIGNsYXNzPVwiaWd4LW5hdi1hcnJvd1wiXG4gICAgICAgICAgW2NsYXNzLmlneC1uYXYtYXJyb3ctLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgIDxpZ3gtaWNvbj5hcnJvd19iYWNrPC9pZ3gtaWNvbj5cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2ICpuZ0lmPVwic2hvd0luZGljYXRvcnNcIiBbbmdDbGFzc109XCJpbmRpY2F0b3JzT3JpZW50YXRpb25DbGFzc1wiIFthdHRyLnJvbGVdPVwiJ3RhYmxpc3QnXCI+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgc2xpZGUgb2Ygc2xpZGVzXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtY2Fyb3VzZWwtaW5kaWNhdG9yc19faW5kaWNhdG9yXCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdChzbGlkZSlcIlxuICAgICAgICBbaWRdPVwiJ3RhYi0nKyBzbGlkZS5pbmRleCArICctJyArIHRvdGFsXCJcbiAgICAgICAgW2F0dHIucm9sZV09XCIndGFiJ1wiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb3VyY2VTdHJpbmdzLmlneF9jYXJvdXNlbF9zbGlkZSArICcgJyArIChzbGlkZS5pbmRleCArIDEpICsgJyAnICsgcmVzb3VyY2VTdHJpbmdzLmlneF9jYXJvdXNlbF9vZiArICcgJyArIHRoaXMudG90YWxcIlxuICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIidwYW5lbC0nICsgc2xpZGUuaW5kZXhcIlxuICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInNsaWRlLmFjdGl2ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0SW5kaWNhdG9yVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IHNsaWRlfTtcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwic2hvd0luZGljYXRvcnNMYWJlbFwiIFtuZ0NsYXNzXT1cImluZGljYXRvcnNPcmllbnRhdGlvbkNsYXNzXCI+XG4gICAgPHNwYW4gW2lkXT1cImxhYmVsSWRcIiBjbGFzcz1cImlneC1jYXJvdXNlbF9fbGFiZWxcIj57e2dldENhcm91c2VsTGFiZWx9fTwvc3Bhbj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiaWd4LWNhcm91c2VsX19pbm5lclwiIFthdHRyLmFyaWEtbGl2ZV09XCIhaW50ZXJ2YWwgfHwgc3RvcHBlZEJ5SW50ZXJhY3Rpb24gPyAncG9saXRlJyA6ICdvZmYnXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJuYXZpZ2F0aW9uICYmIHNsaWRlcy5sZW5ndGhcIiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJpZ3gtY2Fyb3VzZWxfX2Fycm93LS1wcmV2XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXNvdXJjZVN0cmluZ3MuaWd4X2Nhcm91c2VsX3ByZXZpb3VzX3NsaWRlXCIgKGtleWRvd24uZW50ZXIpPVwicHJldigpXCIgKGNsaWNrKT1cInByZXYoKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRQcmV2QnV0dG9uVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IHByZXZCdXR0b25EaXNhYmxlZH07XCI+PC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cIm5hdmlnYXRpb24gJiYgc2xpZGVzLmxlbmd0aFwiIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImlneC1jYXJvdXNlbF9fYXJyb3ctLW5leHRcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInJlc291cmNlU3RyaW5ncy5pZ3hfY2Fyb3VzZWxfbmV4dF9zbGlkZVwiIChrZXlkb3duLmVudGVyKT1cIm5leHQoKVwiIChjbGljayk9XCJuZXh0KClcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0TmV4dEJ1dHRvblRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBuZXh0QnV0dG9uRGlzYWJsZWR9O1wiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cblxuXG4iXX0=
966
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2Nhcm91c2VsL2Nhcm91c2VsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYXJvdXNlbC9jYXJvdXNlbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RSxPQUFPLEVBR0gsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBRWYsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLFVBQVUsRUFDVixLQUFLLEVBS0wsTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkYsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBa0IsTUFBTSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUVyRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUU3RixPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0YsT0FBTyxFQUFFLDZCQUE2QixFQUFFLDhCQUE4QixFQUFFLDhCQUE4QixFQUFFLE1BQU0sdUJBQXVC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QztnQkFXaEMsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyxZQUFZO2dCQVVuQixZQUFZO3NCQURsQixZQUFZO3VCQUFDLFlBQVk7Z0JBU25CLFNBQVM7c0JBRGYsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTzVCLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVM3QixRQUFRO3NCQURkLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiwgTmdDbGFzcywgTmdGb3IsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZUNoYW5nZVJlY29yZCxcbiAgICBJdGVyYWJsZURpZmZlcixcbiAgICBJdGVyYWJsZURpZmZlcnMsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSGFtbWVyR2VzdHVyZUNvbmZpZywgSEFNTUVSX0dFU1RVUkVfQ09ORklHIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBtZXJnZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSUNhcm91c2VsUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL2Nhcm91c2VsLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDdXJyZW50UmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBJQmFzZUV2ZW50QXJncywgbWtlbnVtLCBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcblxuaW1wb3J0IHsgSWd4QW5ndWxhckFuaW1hdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hbmltYXRpb24vYW5ndWxhci1hbmltYXRpb24tc2VydmljZSc7XG5pbXBvcnQgeyBBbmltYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYW5pbWF0aW9uL2FuaW1hdGlvbic7XG5pbXBvcnQgeyBEaXJlY3Rpb24sIEhvcml6b250YWxBbmltYXRpb25UeXBlLCBJZ3hDYXJvdXNlbENvbXBvbmVudEJhc2UgfSBmcm9tICcuL2Nhcm91c2VsLWJhc2UnO1xuaW1wb3J0IHsgSWd4Q2Fyb3VzZWxJbmRpY2F0b3JEaXJlY3RpdmUsIElneENhcm91c2VsTmV4dEJ1dHRvbkRpcmVjdGl2ZSwgSWd4Q2Fyb3VzZWxQcmV2QnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi9jYXJvdXNlbC5kaXJlY3RpdmVzJztcbmltcG9ydCB7IElneFNsaWRlQ29tcG9uZW50IH0gZnJvbSAnLi9zbGlkZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbmV4cG9ydCBjb25zdCBDYXJvdXNlbEluZGljYXRvcnNPcmllbnRhdGlvbiA9IG1rZW51bSh7XG4gICAgYm90dG9tOiAnYm90dG9tJyxcbiAgICB0b3A6ICd0b3AnXG59KTtcbmV4cG9ydCB0eXBlIENhcm91c2VsSW5kaWNhdG9yc09yaWVudGF0aW9uID0gKHR5cGVvZiBDYXJvdXNlbEluZGljYXRvcnNPcmllbnRhdGlvbilba2V5b2YgdHlwZW9mIENhcm91c2VsSW5kaWNhdG9yc09yaWVudGF0aW9uXTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENhcm91c2VsSGFtbWVyQ29uZmlnIGV4dGVuZHMgSGFtbWVyR2VzdHVyZUNvbmZpZyB7XG4gICAgcHVibGljIG92ZXJyaWRlIG92ZXJyaWRlcyA9IHtcbiAgICAgICAgcGFuOiB7IGRpcmVjdGlvbjogSGFtbWVyLkRJUkVDVElPTl9IT1JJWk9OVEFMIH1cbiAgICB9O1xufVxuLyoqXG4gKiAqKklnbml0ZSBVSSBmb3IgQW5ndWxhciBDYXJvdXNlbCoqIC1cbiAqIFtEb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5pbmZyYWdpc3RpY3MuY29tL3Byb2R1Y3RzL2lnbml0ZS11aS1hbmd1bGFyL2FuZ3VsYXIvY29tcG9uZW50cy9jYXJvdXNlbC5odG1sKVxuICpcbiAqIFRoZSBJZ25pdGUgVUkgQ2Fyb3VzZWwgaXMgdXNlZCB0byBicm93c2Ugb3IgbmF2aWdhdGUgdGhyb3VnaCBhIGNvbGxlY3Rpb24gb2Ygc2xpZGVzLiBTbGlkZXMgY2FuIGNvbnRhaW4gY3VzdG9tXG4gKiBjb250ZW50IHN1Y2ggYXMgaW1hZ2VzIG9yIGNhcmRzIGFuZCBiZSB1c2VkIGZvciB0aGluZ3Mgc3VjaCBhcyBvbi1ib2FyZGluZyB0dXRvcmlhbHMgb3IgcGFnZS1iYXNlZCBpbnRlcmZhY2VzLlxuICogSXQgY2FuIGJlIHVzZWQgYXMgYSBzZXBhcmF0ZSBmdWxsc2NyZWVuIGVsZW1lbnQgb3IgaW5zaWRlIGFub3RoZXIgY29tcG9uZW50LlxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGBodG1sXG4gKiA8aWd4LWNhcm91c2VsPlxuICogICA8aWd4LXNsaWRlPlxuICogICAgIDxoMz5GaXJzdCBTbGlkZSBIZWFkZXI8L2gzPlxuICogICAgIDxwPkZpcnN0IHNsaWRlIENvbnRlbnQ8L3A+XG4gKiAgIDxpZ3gtc2xpZGU+XG4gKiAgIDxpZ3gtc2xpZGU+XG4gKiAgICAgPGgzPlNlY29uZCBTbGlkZSBIZWFkZXI8L2gzPlxuICogICAgIDxwPlNlY29uZCBTbGlkZSBDb250ZW50PC9wPlxuICogPC9pZ3gtY2Fyb3VzZWw+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEhBTU1FUl9HRVNUVVJFX0NPTkZJRyxcbiAgICAgICAgICAgIHVzZUNsYXNzOiBDYXJvdXNlbEhhbW1lckNvbmZpZ1xuICAgICAgICB9XG4gICAgXSxcbiAgICBzZWxlY3RvcjogJ2lneC1jYXJvdXNlbCcsXG4gICAgdGVtcGxhdGVVcmw6ICdjYXJvdXNlbC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG91dGxpbmUtc3R5bGU6IG5vbmU7XG4gICAgfWBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0lneEljb25Db21wb25lbnQsIE5nSWYsIE5nQ2xhc3MsIE5nRm9yLCBOZ1RlbXBsYXRlT3V0bGV0XVxufSlcblxuZXhwb3J0IGNsYXNzIElneENhcm91c2VsQ29tcG9uZW50IGV4dGVuZHMgSWd4Q2Fyb3VzZWxDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0IHtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGBpZGAgb2YgdGhlIGNhcm91c2VsLlxuICAgICAqIElmIG5vdCBzZXQsIHRoZSBgaWRgIG9mIHRoZSBmaXJzdCBjYXJvdXNlbCBjb21wb25lbnQgd2lsbCBiZSBgXCJpZ3gtY2Fyb3VzZWwtMFwiYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCBpZD1cIm15LWZpcnN0LWNhcm91c2VsXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1jYXJvdXNlbC0ke05FWFRfSUQrK31gO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGByb2xlYCBhdHRyaWJ1dGUgb2YgdGhlIGNhcm91c2VsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2Fyb3VzZWxSb2xlID0gIHRoaXMuY2Fyb3VzZWwucm9sZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcHVibGljIHJvbGUgPSAncmVnaW9uJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcm9sZWRlc2NyaXB0aW9uJylcbiAgICBwdWJsaWMgcm9sZURlc2NyaXB0aW9uID0gJ2Nhcm91c2VsJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWxsZWRieScpXG4gICAgcHVibGljIGdldCBsYWJlbElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93SW5kaWNhdG9yc0xhYmVsID8gYCR7dGhpcy5pZH0tbGFiZWxgIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjbGFzcyBvZiB0aGUgY2Fyb3VzZWwgY29tcG9uZW50LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2xhc3MgPSAgdGhpcy5jYXJvdXNlbC5jc3NDbGFzcztcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhcm91c2VsJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LWNhcm91c2VsJztcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGB0b3VjaC1hY3Rpb25gIHN0eWxlIG9mIHRoZSBgbGlzdCBpdGVtYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHRvdWNoQWN0aW9uID0gdGhpcy5saXN0SXRlbS50b3VjaEFjdGlvbjtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnRvdWNoLWFjdGlvbicpXG4gICAgcHVibGljIGdldCB0b3VjaEFjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VzdHVyZXNTdXBwb3J0ID8gJ3Bhbi15JyA6ICdhdXRvJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIGNhcm91c2VsIHNob3VsZCBgbG9vcGAgYmFjayB0byB0aGUgZmlyc3Qgc2xpZGUgYWZ0ZXIgcmVhY2hpbmcgdGhlIGxhc3Qgc2xpZGUuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgW2xvb3BdPVwiZmFsc2VcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgd2hldGhlciB0aGUgY2Fyb3VzZWwgd2lsbCBgcGF1c2VgIHRoZSBzbGlkZSB0cmFuc2l0aW9ucyBvbiB1c2VyIGludGVyYWN0aW9ucy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtY2Fyb3VzZWwgW3BhdXNlXT1cImZhbHNlXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgcGF1c2UgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgd2hldGhlciB0aGUgY2Fyb3VzZWwgc2hvdWxkIHJlbmRlciB0aGUgbGVmdC9yaWdodCBgbmF2aWdhdGlvbmAgYnV0dG9ucy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCBbbmF2aWdhdGlvbl0gPSBcImZhbHNlXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbmF2aWdhdGlvbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBjYXJvdXNlbCBzaG91bGQgc3VwcG9ydCBrZXlib2FyZCBuYXZpZ2F0aW9uLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhcm91c2VsIFtrZXlib2FyZFN1cHBvcnRdID0gXCJmYWxzZVwiPjwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGtleWJvYXJkU3VwcG9ydCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBjYXJvdXNlbCBzaG91bGQgc3VwcG9ydCBnZXN0dXJlcy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCBbZ2VzdHVyZXNTdXBwb3J0XSA9IFwiZmFsc2VcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBnZXN0dXJlc1N1cHBvcnQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgdGhlIG1heGltdW0gaW5kZXhlcyB0aGF0IGNhbiBiZSBzaG93bi5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGA1YC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCBbbWF4aW11bUluZGljYXRvcnNDb3VudF0gPSBcIjEwXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbWF4aW11bUluZGljYXRvcnNDb3VudCA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgdGhlIGRpc3BsYXkgbW9kZSBvZiBjYXJvdXNlbCBpbmRpY2F0b3JzLiBJdCBjYW4gYmUgdG9wIG9yIGJvdHRvbS5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBib3R0b21gLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhcm91c2VsIGluZGljYXRvcnNPcmllbnRhdGlvbj0ndG9wJz5cbiAgICAgKiA8aWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneFNsaWRlQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGluZGljYXRvcnNPcmllbnRhdGlvbjogQ2Fyb3VzZWxJbmRpY2F0b3JzT3JpZW50YXRpb24gPSBDYXJvdXNlbEluZGljYXRvcnNPcmllbnRhdGlvbi5ib3R0b207XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgdGhlIGFuaW1hdGlvbiB0eXBlIG9mIGNhcm91c2VsLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYHNsaWRlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCBhbmltYXRpb25UeXBlPSdub25lJz5cbiAgICAgKiA8aWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneFNsaWRlQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG92ZXJyaWRlIGFuaW1hdGlvblR5cGU6IEhvcml6b250YWxBbmltYXRpb25UeXBlID0gSG9yaXpvbnRhbEFuaW1hdGlvblR5cGUuc2xpZGU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIHRlbXBsYXRlLCBpZiBhbnksIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgY2Fyb3VzZWwgaW5kaWNhdG9yc1xuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIFNldCBpbiB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlDdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG15Q29tcG9uZW50LmN1c3RvbVRlbXBsYXRlO1xuICAgICAqIG15Q29tcG9uZW50LmNhcm91c2VsLmluZGljYXRvclRlbXBsYXRlID0gbXlDdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLSBTZXQgaW4gbWFya3VwIC0tPlxuICAgICAqICA8aWd4LWNhcm91c2VsICNjYXJvdXNlbD5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICAgICAgPG5nLXRlbXBsYXRlIGlneENhcm91c2VsSW5kaWNhdG9yIGxldC1zbGlkZT5cbiAgICAgKiAgICAgICAgIDxpZ3gtaWNvbiAqbmdJZj1cInNsaWRlLmFjdGl2ZVwiPmJyaWdodG5lc3NfNzwvaWd4LWljb24+XG4gICAgICogICAgICAgICA8aWd4LWljb24gKm5nSWY9XCIhc2xpZGUuYWN0aXZlXCI+YnJpZ2h0bmVzc181PC9pZ3gtaWNvbj5cbiAgICAgKiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogIDwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4Q2Fyb3VzZWxJbmRpY2F0b3JEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgaW5kaWNhdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1c3RvbSB0ZW1wbGF0ZSwgaWYgYW55LCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIGNhcm91c2VsIG5leHQgYnV0dG9uXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gU2V0IGluIHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteUN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbXlDb21wb25lbnQuY3VzdG9tVGVtcGxhdGU7XG4gICAgICogbXlDb21wb25lbnQuY2Fyb3VzZWwubmV4dEJ1dHRvblRlbXBsYXRlID0gbXlDdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLSBTZXQgaW4gbWFya3VwIC0tPlxuICAgICAqICA8aWd4LWNhcm91c2VsICNjYXJvdXNlbD5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICAgICAgPG5nLXRlbXBsYXRlIGlneENhcm91c2VsTmV4dEJ1dHRvbiBsZXQtZGlzYWJsZWQ+XG4gICAgICogICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWd4QnV0dG9uPVwiZmFiXCIgaWd4UmlwcGxlPVwid2hpdGVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgKiAgICAgICAgICAgICAgPGlneC1pY29uPmFkZDwvaWd4LWljb24+XG4gICAgICogICAgICAgICAgPC9idXR0b24+XG4gICAgICogICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqICA8L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneENhcm91c2VsTmV4dEJ1dHRvbkRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBuZXh0QnV0dG9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1c3RvbSB0ZW1wbGF0ZSwgaWYgYW55LCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIGNhcm91c2VsIHByZXZpb3VzIGJ1dHRvblxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIFNldCBpbiB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlDdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG15Q29tcG9uZW50LmN1c3RvbVRlbXBsYXRlO1xuICAgICAqIG15Q29tcG9uZW50LmNhcm91c2VsLm5leHRCdXR0b25UZW1wbGF0ZSA9IG15Q3VzdG9tVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS0gU2V0IGluIG1hcmt1cCAtLT5cbiAgICAgKiAgPGlneC1jYXJvdXNlbCAjY2Fyb3VzZWw+XG4gICAgICogICAgICAuLi5cbiAgICAgKiAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hDYXJvdXNlbFByZXZCdXR0b24gbGV0LWRpc2FibGVkPlxuICAgICAqICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlneEJ1dHRvbj1cImZhYlwiIGlneFJpcHBsZT1cIndoaXRlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICogICAgICAgICAgICAgIDxpZ3gtaWNvbj5yZW1vdmU8L2lneC1pY29uPlxuICAgICAqICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAqICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgPC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hDYXJvdXNlbFByZXZCdXR0b25EaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgcHJldkJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xsZWN0aW9uIG9mIGBzbGlkZXNgIGN1cnJlbnRseSBpbiB0aGUgY2Fyb3VzZWwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBzbGlkZXM6IFF1ZXJ5TGlzdDxJZ3hTbGlkZUNvbXBvbmVudD4gPSB0aGlzLmNhcm91c2VsLnNsaWRlcztcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4U2xpZGVDb21wb25lbnQpXG4gICAgcHVibGljIHNsaWRlczogUXVlcnlMaXN0PElneFNsaWRlQ29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciBhIHNsaWRlIHRyYW5zaXRpb24gaGFzIGhhcHBlbmVkLlxuICAgICAqIFByb3ZpZGVzIHJlZmVyZW5jZXMgdG8gdGhlIGBJZ3hDYXJvdXNlbENvbXBvbmVudGAgYW5kIGBJZ3hTbGlkZUNvbXBvbmVudGAgYXMgZXZlbnQgYXJndW1lbnRzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhcm91c2VsIChzbGlkZUNoYW5nZWQpPVwic2xpZGVDaGFuZ2VkKCRldmVudClcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgc2xpZGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJU2xpZGVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgYSBzbGlkZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgY2Fyb3VzZWwuXG4gICAgICogUHJvdmlkZXMgcmVmZXJlbmNlcyB0byB0aGUgYElneENhcm91c2VsQ29tcG9uZW50YCBhbmQgYElneFNsaWRlQ29tcG9uZW50YCBhcyBldmVudCBhcmd1bWVudHMuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgKHNsaWRlQWRkZWQpPVwic2xpZGVBZGRlZCgkZXZlbnQpXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIHNsaWRlQWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElTbGlkZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciBhIHNsaWRlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY2Fyb3VzZWwuXG4gICAgICogUHJvdmlkZXMgcmVmZXJlbmNlcyB0byB0aGUgYElneENhcm91c2VsQ29tcG9uZW50YCBhbmQgYElneFNsaWRlQ29tcG9uZW50YCBhcyBldmVudCBhcmd1bWVudHMuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2Fyb3VzZWwgKHNsaWRlUmVtb3ZlZCk9XCJzbGlkZVJlbW92ZWQoJGV2ZW50KVwiPjwvaWd4LWNhcm91c2VsPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyBzbGlkZVJlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElTbGlkZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciB0aGUgY2Fyb3VzZWwgaGFzIGJlZW4gcGF1c2VkLlxuICAgICAqIFByb3ZpZGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBgSWd4Q2Fyb3VzZWxDb21wb25lbnRgIGFzIGFuIGV2ZW50IGFyZ3VtZW50LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhcm91c2VsIChjYXJvdXNlbFBhdXNlZCk9XCJjYXJvdXNlbFBhdXNlZCgkZXZlbnQpXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIGNhcm91c2VsUGF1c2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hDYXJvdXNlbENvbXBvbmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciB0aGUgY2Fyb3VzZWwgaGFzIHJlc3VtZWQgdHJhbnNpdGlvbmluZyBiZXR3ZWVuIGBzbGlkZXNgLlxuICAgICAqIFByb3ZpZGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBgSWd4Q2Fyb3VzZWxDb21wb25lbnRgIGFzIGFuIGV2ZW50IGFyZ3VtZW50LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhcm91c2VsIChjYXJvdXNlbFBsYXlpbmcpPVwiY2Fyb3VzZWxQbGF5aW5nKCRldmVudClcIj48L2lneC1jYXJvdXNlbD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgY2Fyb3VzZWxQbGF5aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hDYXJvdXNlbENvbXBvbmVudD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRJbmRpY2F0b3InLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIGRlZmF1bHRJbmRpY2F0b3I6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0TmV4dEJ1dHRvbicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByaXZhdGUgZGVmYXVsdE5leHRCdXR0b246IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0UHJldkJ1dHRvbicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByaXZhdGUgZGVmYXVsdFByZXZCdXR0b246IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHN0b3BwZWRCeUludGVyYWN0aW9uOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBjdXJyZW50SXRlbTogSWd4U2xpZGVDb21wb25lbnQ7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHByZXZpb3VzSXRlbTogSWd4U2xpZGVDb21wb25lbnQ7XG4gICAgcHJpdmF0ZSBfaW50ZXJ2YWw6IG51bWJlcjtcbiAgICBwcml2YXRlIF9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLkNhcm91c2VsUmVzU3RyaW5ncztcbiAgICBwcml2YXRlIGxhc3RJbnRlcnZhbDogYW55O1xuICAgIHByaXZhdGUgcGxheWluZzogYm9vbGVhbjtcbiAgICBwcml2YXRlIGRlc3Ryb3llZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHByaXZhdGUgZGlmZmVyOiBJdGVyYWJsZURpZmZlcjxJZ3hTbGlkZUNvbXBvbmVudD4gfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIGluY29taW5nU2xpZGU6IElneFNsaWRlQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCBzZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlc291cmNlU3RyaW5ncyh2YWx1ZTogSUNhcm91c2VsUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlc291cmNlU3RyaW5ncygpOiBJQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldCBnZXRJbmRpY2F0b3JUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5kaWNhdG9yVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGljYXRvclRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRJbmRpY2F0b3I7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IGdldE5leHRCdXR0b25UZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMubmV4dEJ1dHRvblRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZXh0QnV0dG9uVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdE5leHRCdXR0b247XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IGdldFByZXZCdXR0b25UZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMucHJldkJ1dHRvblRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmV2QnV0dG9uVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFByZXZCdXR0b247XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IGluZGljYXRvcnNPcmllbnRhdGlvbkNsYXNzKCkge1xuICAgICAgICByZXR1cm4gYGlneC1jYXJvdXNlbC1pbmRpY2F0b3JzLS0ke3RoaXMuaW5kaWNhdG9yc09yaWVudGF0aW9ufWA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dJbmRpY2F0b3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b3RhbCA8PSB0aGlzLm1heGltdW1JbmRpY2F0b3JzQ291bnQgJiYgdGhpcy50b3RhbCA+IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dJbmRpY2F0b3JzTGFiZWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvdGFsID4gdGhpcy5tYXhpbXVtSW5kaWNhdG9yc0NvdW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldCBnZXRDYXJvdXNlbExhYmVsKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5jdXJyZW50ICsgMX0gJHt0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfY2Fyb3VzZWxfb2Z9ICR7dGhpcy50b3RhbH1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBgc2xpZGVzYCBpbiB0aGUgY2Fyb3VzZWwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBzbGlkZUNvdW50ID0gIHRoaXMuY2Fyb3VzZWwudG90YWw7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRvdGFsKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnNsaWRlcz8ubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgc2xpZGUgYmVpbmcgY3VycmVudGx5IHNob3duLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY3VycmVudFNsaWRlTnVtYmVyID0gIHRoaXMuY2Fyb3VzZWwuY3VycmVudDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY3VycmVudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gIXRoaXMuY3VycmVudEl0ZW0gPyAwIDogdGhpcy5jdXJyZW50SXRlbS5pbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBjYXJvdXNlbCBpcyBwbGF5aW5nLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNQbGF5aW5nID0gIHRoaXMuY2Fyb3VzZWwuaXNQbGF5aW5nO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBpc1BsYXlpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXlpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyDQsCBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGNhcm91c2VsIGlzIGRlc3Ryb3llZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzRGVzdHJveWVkID0gIHRoaXMuY2Fyb3VzZWwuaXNEZXN0cm95ZWQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzRGVzdHJveWVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXN0cm95ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGNhcm91c2VsIGVsZW1lbnQgaW4gdGhlIERPTS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IG5hdGl2ZUVsZW1lbnQgPSAgdGhpcy5jYXJvdXNlbC5uYXRpdmVFbGVtZW50O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB0aW1lIGBpbnRlcnZhbGAgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgc2xpZGUgY2hhbmdlcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHRpbWVJbnRlcnZhbCA9IHRoaXMuY2Fyb3VzZWwuaW50ZXJ2YWw7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaW50ZXJ2YWwoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVydmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRpbWUgYGludGVydmFsYCBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBzbGlkZSBjaGFuZ2VzLlxuICAgICAqIElmIG5vdCBzZXQsIHRoZSBjYXJvdXNlbCB3aWxsIG5vdCBjaGFuZ2UgYHNsaWRlc2AgYXV0b21hdGljYWxseS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYXJvdXNlbCBbaW50ZXJ2YWxdID0gXCIxMDAwXCI+PC9pZ3gtY2Fyb3VzZWw+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q2Fyb3VzZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGludGVydmFsKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSArdmFsdWU7XG4gICAgICAgIHRoaXMucmVzdGFydEludGVydmFsKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBpdGVyYWJsZURpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICAgICAgQEluamVjdChJZ3hBbmd1bGFyQW5pbWF0aW9uU2VydmljZSkgYW5pbWF0aW9uU2VydmljZTogQW5pbWF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwbGF0Zm9ybVV0aWw6IFBsYXRmb3JtVXRpbCkge1xuICAgICAgICBzdXBlcihhbmltYXRpb25TZXJ2aWNlLCBjZHIpO1xuICAgICAgICB0aGlzLmRpZmZlciA9IHRoaXMuaXRlcmFibGVEaWZmZXJzLmZpbmQoW10pLmNyZWF0ZShudWxsKTtcbiAgICB9XG5cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd3JpZ2h0JywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duQXJyb3dSaWdodChldmVudCkge1xuICAgICAgICBpZiAodGhpcy5rZXlib2FyZFN1cHBvcnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTbGlkZUVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2xlZnQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleWRvd25BcnJvd0xlZnQoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMua2V5Ym9hcmRTdXBwb3J0KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5wcmV2KCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzU2xpZGVFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3RhcCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uVGFwKGV2ZW50KSB7XG4gICAgICAgIC8vIHBsYXkgcGF1c2Ugb25seSB3aGVuIHRhcCBvbiBzbGlkZVxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2lneC1zbGlkZScpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1BsYXlpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXVzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3BwZWRCeUludGVyYWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RvcHBlZEJ5SW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5ob21lJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duSG9tZShldmVudCkge1xuICAgICAgICBpZiAodGhpcy5rZXlib2FyZFN1cHBvcnQgJiYgdGhpcy5zbGlkZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLmZpcnN0LmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmZvY3VzU2xpZGVFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW5kJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duRW5kKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmtleWJvYXJkU3VwcG9ydCAmJiB0aGlzLnNsaWRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXMubGFzdC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5mb2N1c1NsaWRlRWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJylcbiAgICBwdWJsaWMgb25Nb3VzZUVudGVyKCkge1xuICAgICAgICBpZiAodGhpcy5wYXVzZSAmJiB0aGlzLmlzUGxheWluZykge1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkQnlJbnRlcmFjdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJylcbiAgICBwdWJsaWMgb25Nb3VzZUxlYXZlKCkge1xuICAgICAgICBpZiAodGhpcy5zdG9wcGVkQnlJbnRlcmFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5wbGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3BhbmxlZnQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvblBhbkxlZnQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5wYW4oZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigncGFucmlnaHQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvblBhblJpZ2h0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMucGFuKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigncGFuZW5kJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25QYW5FbmQoZXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdlc3R1cmVzU3VwcG9ydCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3Qgc2xpZGVXaWR0aCA9IHRoaXMuY3VycmVudEl0ZW0ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgY29uc3QgcGFuT2Zmc2V0ID0gKHNsaWRlV2lkdGggLyAxMDAwKTtcbiAgICAgICAgY29uc3QgZGVsdGFYID0gTWF0aC5hYnMoZXZlbnQuZGVsdGFYKSArIHBhbk9mZnNldCA8IHNsaWRlV2lkdGggPyBNYXRoLmFicyhldmVudC5kZWx0YVgpIDogc2xpZGVXaWR0aCAtIHBhbk9mZnNldDtcbiAgICAgICAgY29uc3QgdmVsb2NpdHkgPSBNYXRoLmFicyhldmVudC52ZWxvY2l0eSk7XG4gICAgICAgIHRoaXMucmVzZXRTbGlkZVN0eWxlcyh0aGlzLmN1cnJlbnRJdGVtKTtcbiAgICAgICAgaWYgKHRoaXMuaW5jb21pbmdTbGlkZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNsaWRlU3R5bGVzKHRoaXMuaW5jb21pbmdTbGlkZSk7XG4gICAgICAgICAgICBpZiAoc2xpZGVXaWR0aCAvIDIgPCBkZWx0YVggfHwgdmVsb2NpdHkgPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ1NsaWRlLmRpcmVjdGlvbiA9IGV2ZW50LmRlbHRhWCA8IDAgPyBEaXJlY3Rpb24uTkVYVCA6IERpcmVjdGlvbi5QUkVWO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5jb21pbmdTbGlkZS5wcmV2aW91cyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb25Qb3NpdGlvbiA9IHRoaXMuYW5pbWF0aW9uVHlwZSA9PT0gSG9yaXpvbnRhbEFuaW1hdGlvblR5cGUuZmFkZSA/XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhWCAvIHNsaWRlV2lkdGggOiAoc2xpZGVXaWR0aCAtIGRlbHRhWCkgLyBzbGlkZVdpZHRoO1xuXG4gICAgICAgICAgICAgICAgaWYgKHZlbG9jaXR5ID4gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0R1cmF0aW9uID0gdGhpcy5kZWZhdWx0QW5pbWF0aW9uRHVyYXRpb24gLyB2ZWxvY2l0eTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ1NsaWRlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW0uZGlyZWN0aW9uID0gZXZlbnQuZGVsdGFYID4gMCA/IERpcmVjdGlvbi5ORVhUIDogRGlyZWN0aW9uLlBSRVY7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c0l0ZW0gPSB0aGlzLmluY29taW5nU2xpZGU7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c0l0ZW0ucHJldmlvdXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uUG9zaXRpb24gPSB0aGlzLmFuaW1hdGlvblR5cGUgPT09IEhvcml6b250YWxBbmltYXRpb25UeXBlLmZhZGUgP1xuICAgICAgICAgICAgICAgICAgICBNYXRoLmFicygoc2xpZGVXaWR0aCAtIGRlbHRhWCkgLyBzbGlkZVdpZHRoKSA6IGRlbHRhWCAvIHNsaWRlV2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5QW5pbWF0aW9ucygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3RvcHBlZEJ5SW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMucGxheSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnNsaWRlcy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChjaGFuZ2U6IFF1ZXJ5TGlzdDxJZ3hTbGlkZUNvbXBvbmVudD4pID0+IHRoaXMuaW5pdFNsaWRlcyhjaGFuZ2UpKTtcblxuICAgICAgICB0aGlzLmluaXRTbGlkZXModGhpcy5zbGlkZXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5sYXN0SW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5sYXN0SW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2xpZGUgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdmlkZWQgYGluZGV4YCBvciBudWxsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgc2xpZGUxID0gIHRoaXMuY2Fyb3VzZWwuZ2V0KDEpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldChpbmRleDogbnVtYmVyKTogSWd4U2xpZGVDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXMuZmluZCgoc2xpZGUpID0+IHNsaWRlLmluZGV4ID09PSBpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIG5ldyBzbGlkZSB0byB0aGUgY2Fyb3VzZWwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2Fyb3VzZWwuYWRkKG5ld1NsaWRlKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBhZGQoc2xpZGU6IElneFNsaWRlQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IG5ld1NsaWRlcyA9IHRoaXMuc2xpZGVzLnRvQXJyYXkoKTtcbiAgICAgICAgbmV3U2xpZGVzLnB1c2goc2xpZGUpO1xuICAgICAgICB0aGlzLnNsaWRlcy5yZXNldChuZXdTbGlkZXMpO1xuICAgICAgICB0aGlzLnNsaWRlcy5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgc2xpZGUgZnJvbSB0aGUgY2Fyb3VzZWwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2Fyb3VzZWwucmVtb3ZlKHNsaWRlKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmUoc2xpZGU6IElneFNsaWRlQ29tcG9uZW50KSB7XG4gICAgICAgIGlmIChzbGlkZSAmJiBzbGlkZSA9PT0gdGhpcy5nZXQoc2xpZGUuaW5kZXgpKSB7IC8vIGNoZWNrIGlmIHRoZSByZXF1ZXN0ZWQgc2xpZGUgZm9yIGRlbGV0ZSBpcyBwcmVzZW50IGluIHRoZSBjYXJvdXNlbFxuICAgICAgICAgICAgY29uc3QgbmV3U2xpZGVzID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgICAgICAgICAgbmV3U2xpZGVzLnNwbGljZShzbGlkZS5pbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLnNsaWRlcy5yZXNldChuZXdTbGlkZXMpO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXMubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLaWNrcyBpbiBhIHRyYW5zaXRpb24gZm9yIGEgZ2l2ZW4gc2xpZGUgd2l0aCBhIGdpdmVuIGBkaXJlY3Rpb25gLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNhcm91c2VsLnNlbGVjdCh0aGlzLmNhcm91c2VsLmdldCgyKSwgRGlyZWN0aW9uLk5FWFQpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdChzbGlkZTogSWd4U2xpZGVDb21wb25lbnQsIGRpcmVjdGlvbjogRGlyZWN0aW9uID0gRGlyZWN0aW9uLk5PTkUpIHtcbiAgICAgICAgaWYgKHNsaWRlICYmIHNsaWRlICE9PSB0aGlzLmN1cnJlbnRJdGVtKSB7XG4gICAgICAgICAgICBzbGlkZS5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICAgICAgICBzbGlkZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNpdGlvbnMgdG8gdGhlIG5leHQgc2xpZGUgaW4gdGhlIGNhcm91c2VsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNhcm91c2VsLm5leHQoKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBuZXh0KCkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0TmV4dEluZGV4KCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAwICYmICF0aGlzLmxvb3ApIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdCh0aGlzLmdldChpbmRleCksIERpcmVjdGlvbi5ORVhUKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2l0aW9ucyB0byB0aGUgcHJldmlvdXMgc2xpZGUgaW4gdGhlIGNhcm91c2VsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNhcm91c2VsLnByZXYoKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBJZ3hDYXJvdXNlbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBwcmV2KCkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0UHJldkluZGV4KCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmxvb3AgJiYgaW5kZXggPT09IHRoaXMudG90YWwgLSAxKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3QodGhpcy5nZXQoaW5kZXgpLCBEaXJlY3Rpb24uUFJFVik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzdW1lcyBwbGF5aW5nIG9mIHRoZSBjYXJvdXNlbCBpZiBpbiBwYXVzZWQgc3RhdGUuXG4gICAgICogTm8gb3BlcmF0aW9uIG90aGVyd2lzZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jYXJvdXNlbC5wbGF5KCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHBsYXkoKSB7XG4gICAgICAgIGlmICghdGhpcy5wbGF5aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jYXJvdXNlbFBsYXlpbmcuZW1pdCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucmVzdGFydEludGVydmFsKCk7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWRCeUludGVyYWN0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdG9wcyBzbGlkZSB0cmFuc2l0aW9ucyBpZiB0aGUgYHBhdXNlYCBvcHRpb24gaXMgc2V0IHRvIGB0cnVlYC5cbiAgICAgKiBObyBvcGVyYXRpb24gb3RoZXJ3aXNlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgdGhpcy5jYXJvdXNlbC5zdG9wKCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlck9mIElneENhcm91c2VsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhdXNlKSB7XG4gICAgICAgICAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2Fyb3VzZWxQYXVzZWQuZW1pdCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRJbnRlcnZhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFByZXZpb3VzRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXZpb3VzSXRlbS5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRDdXJyZW50RWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEl0ZW0ubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0SW50ZXJ2YWwoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhc3RJbnRlcnZhbCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmxhc3RJbnRlcnZhbCk7XG4gICAgICAgICAgICB0aGlzLmxhc3RJbnRlcnZhbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc3RhcnRJbnRlcnZhbCgpIHtcbiAgICAgICAgdGhpcy5yZXNldEludGVydmFsKCk7XG5cbiAgICAgICAgaWYgKCFpc05hTih0aGlzLmludGVydmFsKSAmJiB0aGlzLmludGVydmFsID4gMCAmJiB0aGlzLnBsYXRmb3JtVXRpbC5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpY2sgPSArdGhpcy5pbnRlcnZhbDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wbGF5aW5nICYmIHRoaXMudG90YWwgJiYgIWlzTmFOKHRpY2spICYmIHRpY2sgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IG5leHRCdXR0b25EaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmxvb3AgJiYgdGhpcy5jdXJyZW50ID09PSAodGhpcy50b3RhbCAtIDEpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldCBwcmV2QnV0dG9uRGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5sb29wICYmIHRoaXMuY3VycmVudCA9PT0gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5leHRJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKHRoaXMuY3VycmVudCArIDEpICUgdGhpcy50b3RhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByZXZJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50IC0gMSA8IDAgPyB0aGlzLnRvdGFsIC0gMSA6IHRoaXMuY3VycmVudCAtIDE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFNsaWRlU3R5bGVzKHNsaWRlOiBJZ3hTbGlkZUNvbXBvbmVudCkge1xuICAgICAgICBzbGlkZS5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgICBzbGlkZS5uYXRpdmVFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhbihldmVudCkge1xuICAgICAgICBjb25zdCBzbGlkZVdpZHRoID0gdGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICBjb25zdCBwYW5PZmZzZXQgPSAoc2xpZGVXaWR0aCAvIDEwMDApO1xuICAgICAgICBjb25zdCBkZWx0YVggPSBldmVudC5kZWx0YVg7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGVsdGFYIDwgMCA/IHRoaXMuZ2V0TmV4dEluZGV4KCkgOiB0aGlzLmdldFByZXZJbmRleCgpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBkZWx0YVggPCAwID8gc2xpZGVXaWR0aCArIGRlbHRhWCA6IC1zbGlkZVdpZHRoICsgZGVsdGFYO1xuXG4gICAgICAgIGlmICghdGhpcy5nZXN0dXJlc1N1cHBvcnQgfHwgZXZlbnQuaXNGaW5hbCB8fCBNYXRoLmFicyhkZWx0YVgpICsgcGFuT2Zmc2V0ID49IHNsaWRlV2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5sb29wICYmICgodGhpcy5jdXJyZW50ID09PSAwICYmIGRlbHRhWCA+IDApIHx8ICh0aGlzLmN1cnJlbnQgPT09IHRoaXMudG90YWwgLSAxICYmIGRlbHRhWCA8IDApKSkge1xuICAgICAgICAgICAgdGhpcy5pbmNvbWluZ1NsaWRlID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkQnlJbnRlcmFjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnByZXZpb3VzSXRlbSAmJiB0aGlzLnByZXZpb3VzSXRlbS5wcmV2aW91cykge1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0l0ZW0ucHJldmlvdXMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbmlzaEFuaW1hdGlvbnMoKTtcblxuICAgICAgICBpZiAodGhpcy5pbmNvbWluZ1NsaWRlKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IHRoaXMuaW5jb21pbmdTbGlkZS5pbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTbGlkZVN0eWxlcyh0aGlzLmluY29taW5nU2xpZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5jb21pbmdTbGlkZS5wcmV2aW91cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5jb21pbmdTbGlkZSA9IHRoaXMuZ2V0KGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5jb21pbmdTbGlkZSA9IHRoaXMuZ2V0KGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluY29taW5nU2xpZGUucHJldmlvdXMgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLmFuaW1hdGlvblR5cGUgPT09IEhvcml6b250YWxBbmltYXRpb25UeXBlLmZhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW0ubmF0aXZlRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gYCR7TWF0aC5hYnMob2Zmc2V0KSAvIHNsaWRlV2lkdGh9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW0ubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke2RlbHRhWH1weClgO1xuICAgICAgICAgICAgdGhpcy5pbmNvbWluZ1NsaWRlLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtvZmZzZXR9cHgpYDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdW5zdWJzY3JpYmVyKHNsaWRlOiBJZ3hTbGlkZUNvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gbWVyZ2UodGhpcy5kZXN0cm95JCwgc2xpZGUuaXNEZXN0cm95ZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25TbGlkZUFjdGl2YXRlZChzbGlkZTogSWd4U2xpZGVDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKHNsaWRlLmFjdGl2ZSAmJiBzbGlkZSAhPT0gdGhpcy5jdXJyZW50SXRlbSkge1xuICAgICAgICAgICAgaWYgKHNsaWRlLmRpcmVjdGlvbiA9PT0gRGlyZWN0aW9uLk5PTkUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IHNsaWRlLmluZGV4O1xuICAgICAgICAgICAgICAgIHNsaWRlLmRpcmVjdGlvbiA9IG5ld0luZGV4ID4gdGhpcy5jdXJyZW50ID8gRGlyZWN0aW9uLk5FWFQgOiBEaXJlY3Rpb24uUFJFVjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEl0ZW0pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmV2aW91c0l0ZW0gJiYgdGhpcy5wcmV2aW91c0l0ZW0ucHJldmlvdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c0l0ZW0ucHJldmlvdXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbS5kaXJlY3Rpb24gPSBzbGlkZS5kaXJlY3Rpb247XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbS5hY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNJdGVtID0gdGhpcy5jdXJyZW50SXRlbTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtID0gc2xpZGU7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyQW5pbWF0aW9ucygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtID0gc2xpZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNsaWRlQ2hhbmdlZC5lbWl0KHsgY2Fyb3VzZWw6IHRoaXMsIHNsaWRlIH0pO1xuICAgICAgICAgICAgdGhpcy5yZXN0YXJ0SW50ZXJ2YWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBmaW5pc2hBbmltYXRpb25zKCkge1xuICAgICAgICBpZiAodGhpcy5hbmltYXRpb25TdGFydGVkKHRoaXMubGVhdmVBbmltYXRpb25QbGF5ZXIpKSB7XG4gICAgICAgICAgICB0aGlzLmxlYXZlQW5pbWF0aW9uUGxheWVyLmZpbmlzaCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uU3RhcnRlZCh0aGlzLmVudGVyQW5pbWF0aW9uUGxheWVyKSkge1xuICAgICAgICAgICAgdGhpcy5lbnRlckFuaW1hdGlvblBsYXllci5maW5pc2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFNsaWRlcyhjaGFuZ2U6IFF1ZXJ5TGlzdDxJZ3hTbGlkZUNvbXBvbmVudD4pIHtcbiAgICAgICAgY29uc3QgZGlmZiA9IHRoaXMuZGlmZmVyLmRpZmYoY2hhbmdlLnRvQXJyYXkoKSk7XG4gICAgICAgIGlmIChkaWZmKSB7XG4gICAgICAgICAgICB0aGlzLnNsaWRlcy5yZWR1Y2UoKGFueSwgYywgaW5kKSA9PiBjLmluZGV4ID0gaW5kLCAwKTsgLy8gcmVzZXQgc2xpZGVzIGluZGV4ZXNcbiAgICAgICAgICAgIGRpZmYuZm9yRWFjaEFkZGVkSXRlbSgocmVjb3JkOiBJdGVyYWJsZUNoYW5nZVJlY29yZDxJZ3hTbGlkZUNvbXBvbmVudD4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzbGlkZSA9IHJlY29yZC5pdGVtO1xuICAgICAgICAgICAgICAgIHNsaWRlLnRvdGFsID0gdGhpcy50b3RhbDtcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlQWRkZWQuZW1pdCh7IGNhcm91c2VsOiB0aGlzLCBzbGlkZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAoc2xpZGUuYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW0gPSBzbGlkZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2xpZGUuYWN0aXZlQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVyKHNsaWRlKSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uU2xpZGVBY3RpdmF0ZWQoc2xpZGUpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkaWZmLmZvckVhY2hSZW1vdmVkSXRlbSgocmVjb3JkOiBJdGVyYWJsZUNoYW5nZVJlY29yZDxJZ3hTbGlkZUNvbXBvbmVudD4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzbGlkZSA9IHJlY29yZC5pdGVtO1xuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVSZW1vdmVkLmVtaXQoeyBjYXJvdXNlbDogdGhpcywgc2xpZGUgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHNsaWRlLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICBzbGlkZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbSA9IHRoaXMuZ2V0KHNsaWRlLmluZGV4IDwgdGhpcy50b3RhbCA/IHNsaWRlLmluZGV4IDogdGhpcy50b3RhbCAtIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNsaWRlc1NlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTbGlkZXNTZWxlY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtVXRpbC5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVTbGlkZXMgPSB0aGlzLnNsaWRlcy5maWx0ZXIoc2xpZGUgPT4gc2xpZGUuYWN0aXZlICYmIHNsaWRlLmluZGV4ICE9PSB0aGlzLmN1cnJlbnRJdGVtLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlU2xpZGVzLmZvckVhY2goc2xpZGUgPT4gc2xpZGUuYWN0aXZlID0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50b3RhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNsaWRlcy5maXJzdC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnBsYXkoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgZm9jdXNTbGlkZUVsZW1lbnQoKSB7XG4gICAgICAgIGlmICh0aGlzLmxlYXZlQW5pbWF0aW9uUGxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmxlYXZlQW5pbWF0aW9uUGxheWVyLmFuaW1hdGlvbkVuZFxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlcy5maW5kKHMgPT4gcy5hY3RpdmUpLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuc2xpZGVzLmZpbmQocyA9PiBzLmFjdGl2ZSkubmF0aXZlRWxlbWVudC5mb2N1cygpKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTbGlkZUV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICBjYXJvdXNlbDogSWd4Q2Fyb3VzZWxDb21wb25lbnQ7XG4gICAgc2xpZGU6IElneFNsaWRlQ29tcG9uZW50O1xufVxuIiwiPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5kaWNhdG9yIGxldC1zbGlkZT5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LW5hdi1kb3RcIlxuICAgICAgICBbY2xhc3MuaWd4LW5hdi1kb3QtLWFjdGl2ZV09XCJzbGlkZS5hY3RpdmVcIj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE5leHRCdXR0b24gbGV0LWRpc2FibGVkPlxuICAgIDxzcGFuIGNsYXNzPVwiaWd4LW5hdi1hcnJvd1wiXG4gICAgICAgICAgW2NsYXNzLmlneC1uYXYtYXJyb3ctLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgIDxpZ3gtaWNvbj5hcnJvd19mb3J3YXJkPC9pZ3gtaWNvbj5cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRQcmV2QnV0dG9uIGxldC1kaXNhYmxlZD5cbiAgICA8c3BhbiBjbGFzcz1cImlneC1uYXYtYXJyb3dcIlxuICAgICAgICAgIFtjbGFzcy5pZ3gtbmF2LWFycm93LS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgICA8aWd4LWljb24+YXJyb3dfYmFjazwvaWd4LWljb24+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiAqbmdJZj1cInNob3dJbmRpY2F0b3JzXCIgW25nQ2xhc3NdPVwiaW5kaWNhdG9yc09yaWVudGF0aW9uQ2xhc3NcIiBbYXR0ci5yb2xlXT1cIid0YWJsaXN0J1wiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHNsaWRlIG9mIHNsaWRlc1wiXG4gICAgICAgIGNsYXNzPVwiaWd4LWNhcm91c2VsLWluZGljYXRvcnNfX2luZGljYXRvclwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3Qoc2xpZGUpXCJcbiAgICAgICAgW2lkXT1cIid0YWItJysgc2xpZGUuaW5kZXggKyAnLScgKyB0b3RhbFwiXG4gICAgICAgIFthdHRyLnJvbGVdPVwiJ3RhYidcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJlc291cmNlU3RyaW5ncy5pZ3hfY2Fyb3VzZWxfc2xpZGUgKyAnICcgKyAoc2xpZGUuaW5kZXggKyAxKSArICcgJyArIHJlc291cmNlU3RyaW5ncy5pZ3hfY2Fyb3VzZWxfb2YgKyAnICcgKyB0aGlzLnRvdGFsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCIncGFuZWwtJyArIHNsaWRlLmluZGV4XCJcbiAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJzbGlkZS5hY3RpdmVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdldEluZGljYXRvclRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBzbGlkZX07XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cInNob3dJbmRpY2F0b3JzTGFiZWxcIiBbbmdDbGFzc109XCJpbmRpY2F0b3JzT3JpZW50YXRpb25DbGFzc1wiPlxuICAgIDxzcGFuIFtpZF09XCJsYWJlbElkXCIgY2xhc3M9XCJpZ3gtY2Fyb3VzZWxfX2xhYmVsXCI+e3tnZXRDYXJvdXNlbExhYmVsfX08L3NwYW4+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImlneC1jYXJvdXNlbF9faW5uZXJcIiBbYXR0ci5hcmlhLWxpdmVdPVwiIWludGVydmFsIHx8IHN0b3BwZWRCeUludGVyYWN0aW9uID8gJ3BvbGl0ZScgOiAnb2ZmJ1wiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwibmF2aWdhdGlvbiAmJiBzbGlkZXMubGVuZ3RoXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwiaWd4LWNhcm91c2VsX19hcnJvdy0tcHJldlwiIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb3VyY2VTdHJpbmdzLmlneF9jYXJvdXNlbF9wcmV2aW91c19zbGlkZVwiIChrZXlkb3duLmVudGVyKT1cInByZXYoKVwiIChjbGljayk9XCJwcmV2KClcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0UHJldkJ1dHRvblRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBwcmV2QnV0dG9uRGlzYWJsZWR9O1wiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJuYXZpZ2F0aW9uICYmIHNsaWRlcy5sZW5ndGhcIiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJpZ3gtY2Fyb3VzZWxfX2Fycm93LS1uZXh0XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXNvdXJjZVN0cmluZ3MuaWd4X2Nhcm91c2VsX25leHRfc2xpZGVcIiAoa2V5ZG93bi5lbnRlcik9XCJuZXh0KClcIiAoY2xpY2spPVwibmV4dCgpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdldE5leHRCdXR0b25UZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogbmV4dEJ1dHRvbkRpc2FibGVkfTtcIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG5cblxuIl19
@@ -190,11 +190,11 @@ export class IgxComboDropDownComponent extends IgxDropDownComponent {
190
190
  }
191
191
  }
192
192
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.8", ngImport: i0, type: IgxComboDropDownComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.IgxSelectionAPIService }, { token: IGX_COMBO_COMPONENT }, { token: i2.IgxComboAPIService }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
193
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.8", type: IgxComboDropDownComponent, isStandalone: true, selector: "igx-combo-drop-down", inputs: { singleMode: "singleMode" }, providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxComboDropDownComponent }], queries: [{ propertyName: "children", predicate: IgxComboItemComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"igx-drop-down__list\" [style.width]=\"width\"\n igxToggle\n [style.--component-size]=\"getComponentSizeStyles()\"\n (appended)=\"onToggleContentAppended($event)\"\n (opening)=\"onToggleOpening($event)\" (opened)=\"onToggleOpened()\"\n (closing)=\"onToggleClosing($event)\" (closed)=\"onToggleClosed()\">\n <div class=\"igx-drop-down__list-scroll\" #scrollContainer [attr.id]=\"this.listId\" role=\"listbox\" [attr.aria-labelledby]=\"this.labelledBy\"\n [style.height]=\"height\"\n [style.maxHeight]=\"maxHeight\">\n <ng-container *ngIf=\"!collapsed\">\n <ng-content></ng-content>\n </ng-container>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: IgxToggleDirective, selector: "[igxToggle]", inputs: ["id"], outputs: ["opened", "opening", "closed", "closing", "appended"], exportAs: ["toggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
193
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.8", type: IgxComboDropDownComponent, isStandalone: true, selector: "igx-combo-drop-down", inputs: { singleMode: "singleMode" }, providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxComboDropDownComponent }], queries: [{ propertyName: "children", predicate: IgxComboItemComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"igx-drop-down__list\" [style.width]=\"width\"\n igxToggle\n [style.--component-size]=\"getComponentSizeStyles()\"\n (appended)=\"onToggleContentAppended($event)\"\n (opening)=\"onToggleOpening($event)\" (opened)=\"onToggleOpened()\"\n (closing)=\"onToggleClosing($event)\" (closed)=\"onToggleClosed()\">\n <div class=\"igx-drop-down__list-scroll\" #scrollContainer [attr.id]=\"listId\" role=\"listbox\" [attr.aria-labelledby]=\"labelledBy\"\n [style.height]=\"height\"\n [style.maxHeight]=\"maxHeight\">\n <ng-container *ngIf=\"!collapsed\">\n <ng-content></ng-content>\n </ng-container>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: IgxToggleDirective, selector: "[igxToggle]", inputs: ["id"], outputs: ["opened", "opening", "closed", "closing", "appended"], exportAs: ["toggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
194
194
  }
195
195
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImport: i0, type: IgxComboDropDownComponent, decorators: [{
196
196
  type: Component,
197
- args: [{ selector: 'igx-combo-drop-down', providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxComboDropDownComponent }], standalone: true, imports: [IgxToggleDirective, NgIf], template: "<div class=\"igx-drop-down__list\" [style.width]=\"width\"\n igxToggle\n [style.--component-size]=\"getComponentSizeStyles()\"\n (appended)=\"onToggleContentAppended($event)\"\n (opening)=\"onToggleOpening($event)\" (opened)=\"onToggleOpened()\"\n (closing)=\"onToggleClosing($event)\" (closed)=\"onToggleClosed()\">\n <div class=\"igx-drop-down__list-scroll\" #scrollContainer [attr.id]=\"this.listId\" role=\"listbox\" [attr.aria-labelledby]=\"this.labelledBy\"\n [style.height]=\"height\"\n [style.maxHeight]=\"maxHeight\">\n <ng-container *ngIf=\"!collapsed\">\n <ng-content></ng-content>\n </ng-container>\n </div>\n</div>\n" }]
197
+ args: [{ selector: 'igx-combo-drop-down', providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxComboDropDownComponent }], standalone: true, imports: [IgxToggleDirective, NgIf], template: "<div class=\"igx-drop-down__list\" [style.width]=\"width\"\n igxToggle\n [style.--component-size]=\"getComponentSizeStyles()\"\n (appended)=\"onToggleContentAppended($event)\"\n (opening)=\"onToggleOpening($event)\" (opened)=\"onToggleOpened()\"\n (closing)=\"onToggleClosing($event)\" (closed)=\"onToggleClosed()\">\n <div class=\"igx-drop-down__list-scroll\" #scrollContainer [attr.id]=\"listId\" role=\"listbox\" [attr.aria-labelledby]=\"labelledBy\"\n [style.height]=\"height\"\n [style.maxHeight]=\"maxHeight\">\n <ng-container *ngIf=\"!collapsed\">\n <ng-content></ng-content>\n </ng-container>\n </div>\n</div>\n" }]
198
198
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.IgxSelectionAPIService }, { type: undefined, decorators: [{
199
199
  type: Inject,
200
200
  args: [IGX_COMBO_COMPONENT]
@@ -209,4 +209,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImpor
209
209
  type: ContentChildren,
210
210
  args: [IgxComboItemComponent, { descendants: true }]
211
211
  }] } });
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm8tZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NvbWJvL2NvbWJvLWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kcm9wLWRvd24vZHJvcC1kb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDZ0IsU0FBUyxFQUFjLE1BQU0sRUFBdUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQzFILE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBZ0IsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRSxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFJdEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUEwQixNQUFNLGlCQUFpQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7OztBQUUzRSxjQUFjO0FBUWQsTUFBTSxPQUFPLHlCQUEwQixTQUFRLG9CQUFvQjtJQVkvRCx3QkFBd0I7SUFDeEIsSUFBb0IsZUFBZTtRQUMvQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7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bUJBQW1COzswQkFFMUIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUI7NENBN0RwQyxVQUFVO3NCQURoQixLQUFLO2dCQVFVLFFBQVE7c0JBRHZCLGVBQWU7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIFF1ZXJ5TGlzdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBDb250ZW50Q2hpbGRyZW4sIE9wdGlvbmFsLCBJbnB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneENvbWJvQmFzZSwgSUdYX0NPTUJPX0NPTVBPTkVOVCB9IGZyb20gJy4vY29tYm8uY29tbW9uJztcbmltcG9ydCB7IElEcm9wRG93bkJhc2UsIElHWF9EUk9QRE9XTl9CQVNFIH0gZnJvbSAnLi4vZHJvcC1kb3duL2Ryb3AtZG93bi5jb21tb24nO1xuaW1wb3J0IHsgSWd4RHJvcERvd25Db21wb25lbnQgfSBmcm9tICcuLi9kcm9wLWRvd24vZHJvcC1kb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcm9wRG93bkFjdGlvbktleSB9IGZyb20gJy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tbW9uJztcbmltcG9ydCB7IElneENvbWJvQWRkSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tYm8tYWRkLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbWJvQVBJU2VydmljZSB9IGZyb20gJy4vY29tYm8uYXBpJztcbmltcG9ydCB7IElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9kcm9wLWRvd24vZHJvcC1kb3duLWl0ZW0uYmFzZSc7XG5pbXBvcnQgeyBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgSWd4Q29tYm9JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21iby1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eVRva2VuLCBJRGlzcGxheURlbnNpdHlPcHRpb25zIH0gZnJvbSAnLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSWd4VG9nZ2xlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90b2dnbGUvdG9nZ2xlLmRpcmVjdGl2ZSc7XG5cbi8qKiBAaGlkZGVuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1jb21iby1kcm9wLWRvd24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi4vZHJvcC1kb3duL2Ryb3AtZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJR1hfRFJPUERPV05fQkFTRSwgdXNlRXhpc3Rpbmc6IElneENvbWJvRHJvcERvd25Db21wb25lbnQgfV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbSWd4VG9nZ2xlRGlyZWN0aXZlLCBOZ0lmXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hDb21ib0Ryb3BEb3duQ29tcG9uZW50IGV4dGVuZHMgSWd4RHJvcERvd25Db21wb25lbnQgaW1wbGVtZW50cyBJRHJvcERvd25CYXNlLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNpbmdsZU1vZGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneENvbWJvSXRlbUNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBjaGlsZHJlbjogUXVlcnlMaXN0PElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmU+ID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgc2Nyb2xsQ29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlydERpci5kYy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgaXNTY3JvbGxlZFRvTGFzdCgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy52aXJ0RGlyLnNjcm9sbFBvc2l0aW9uO1xuICAgICAgICBjb25zdCBzY3JvbGxIZWlnaHQgPSB0aGlzLnZpcnREaXIuZ2V0U2Nyb2xsKCkuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihzY3JvbGxUb3AgKyB0aGlzLnZpcnREaXIuaWd4Rm9yQ29udGFpbmVyU2l6ZSkgPT09IHNjcm9sbEhlaWdodDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGxhc3RWaXNpYmxlSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tYm8udG90YWxJdGVtQ291bnQgP1xuICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzLmNvbWJvLml0ZW1zTWF4SGVpZ2h0IC8gdGhpcy5jb21iby5pdGVtSGVpZ2h0KSA6XG4gICAgICAgICAgICB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBzb3J0ZWRDaGlsZHJlbigpOiBJZ3hEcm9wRG93bkl0ZW1CYXNlRGlyZWN0aXZlW10ge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi50b0FycmF5KClcbiAgICAgICAgICAgICAgICAuc29ydCgoYTogSWd4RHJvcERvd25JdGVtQmFzZURpcmVjdGl2ZSwgYjogSWd4RHJvcERvd25JdGVtQmFzZURpcmVjdGl2ZSkgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgbm9uLWhlYWRlciBpdGVtc1xuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBteURyb3BEb3duSXRlbXMgPSB0aGlzLmRyb3Bkb3duLml0ZW1zO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgaXRlbXMoKTogSWd4Q29tYm9JdGVtQ29tcG9uZW50W10ge1xuICAgICAgICBjb25zdCBpdGVtczogSWd4Q29tYm9JdGVtQ29tcG9uZW50W10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgc29ydGVkQ2hpbGRyZW4gPSB0aGlzLnNvcnRlZENoaWxkcmVuIGFzIElneENvbWJvSXRlbUNvbXBvbmVudFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBzb3J0ZWRDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGlmICghY2hpbGQuaXNIZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBzZWxlY3Rpb246IElneFNlbGVjdGlvbkFQSVNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSUdYX0NPTUJPX0NPTVBPTkVOVCkgcHVibGljIGNvbWJvOiBJZ3hDb21ib0Jhc2UsXG4gICAgICAgIHByb3RlY3RlZCBjb21ib0FQSTogSWd4Q29tYm9BUElTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgY2RyLCBzZWxlY3Rpb24sIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uRm9jdXMoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZEl0ZW0gPSB0aGlzLl9mb2N1c2VkSXRlbSB8fCB0aGlzLml0ZW1zWzBdO1xuICAgICAgICB0aGlzLmNvbWJvLnNldEFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkJsdXIoX2V2dD8pIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkSXRlbSA9IG51bGw7XG4gICAgICAgIHRoaXMuY29tYm8uc2V0QWN0aXZlRGVzY2VuZGFudCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG9uVG9nZ2xlT3BlbmVkKCkge1xuICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuYXZpZ2F0ZUZpcnN0KCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRlSXRlbSh0aGlzLnZpcnREaXIuaWd4Rm9yT2YuZmluZEluZGV4KGUgPT4gIWU/LmlzSGVhZGVyKSk7XG4gICAgICAgIHRoaXMuY29tYm8uc2V0QWN0aXZlRGVzY2VuZGFudCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmF2aWdhdGVQcmV2KCkge1xuICAgICAgICBpZiAodGhpcy5fZm9jdXNlZEl0ZW0gJiYgdGhpcy5fZm9jdXNlZEl0ZW0uaW5kZXggPT09IDAgJiYgdGhpcy52aXJ0RGlyLnN0YXRlLnN0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29tYm8uZm9jdXNTZWFyY2hJbnB1dChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5uYXZpZ2F0ZVByZXYoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbWJvLnNldEFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmF2aWdhdGVOZXh0KCkge1xuICAgICAgICBjb25zdCBsYXN0SW5kZXggPSB0aGlzLmNvbWJvLnRvdGFsSXRlbUNvdW50ID8gdGhpcy5jb21iby50b3RhbEl0ZW1Db3VudCAtIDEgOiB0aGlzLnZpcnREaXIuaWd4Rm9yT2YubGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKHRoaXMuX2ZvY3VzZWRJdGVtICYmIHRoaXMuX2ZvY3VzZWRJdGVtLmluZGV4ID09PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBZGRJdGVtQnV0dG9uKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5uYXZpZ2F0ZU5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbWJvLnNldEFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBzZWxlY3RJdGVtKGl0ZW06IElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmUpIHtcbiAgICAgICAgaWYgKGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21ib0FQSS5zZXRfc2VsZWN0ZWRfaXRlbShpdGVtLml0ZW1JRCk7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWRJdGVtID0gaXRlbTtcbiAgICAgICAgdGhpcy5jb21iby5zZXRBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgdXBkYXRlU2Nyb2xsUG9zaXRpb24oKSB7XG4gICAgICAgIHRoaXMudmlydERpci5nZXRTY3JvbGwoKS5zY3JvbGxUb3AgPSB0aGlzLl9zY3JvbGxQb3NpdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBvbkl0ZW1BY3Rpb25LZXkoa2V5OiBEcm9wRG93bkFjdGlvbktleSkge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSBEcm9wRG93bkFjdGlvbktleS5FTlRFUjpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVudGVyKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERyb3BEb3duQWN0aW9uS2V5LlNQQUNFOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU3BhY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRHJvcERvd25BY3Rpb25LZXkuRVNDQVBFOlxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMudmlydERpci5nZXRTY3JvbGwoKS5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbEhhbmRsZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpcnREaXIuZ2V0U2Nyb2xsKCkucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxIYW5kbGVyKTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2Nyb2xsVG9IaWRkZW5JdGVtKF9uZXdJdGVtOiBhbnkpOiB2b2lkIHsgfVxuXG4gICAgcHJvdGVjdGVkIHNjcm9sbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY29tYm9BUEkuZGlzYWJsZVRyYW5zaXRpb25zID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBoYW5kbGVFbnRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBZGRJdGVtRm9jdXNlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbWJvLmFkZEl0ZW1Ub0NvbGxlY3Rpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zaW5nbGVNb2RlICYmIHRoaXMuZm9jdXNlZEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuY29tYm8uc2VsZWN0KHRoaXMuZm9jdXNlZEl0ZW0uaXRlbUlEKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVNwYWNlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0FkZEl0ZW1Gb2N1c2VkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbSh0aGlzLmZvY3VzZWRJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNBZGRJdGVtRm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNlZEl0ZW0gaW5zdGFuY2VvZiBJZ3hDb21ib0FkZEl0ZW1Db21wb25lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c0FkZEl0ZW1CdXR0b24oKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbWJvLmlzQWRkQnV0dG9uVmlzaWJsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRJdGVtID0gdGhpcy5pdGVtc1t0aGlzLml0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImlneC1kcm9wLWRvd25fX2xpc3RcIiBbc3R5bGUud2lkdGhdPVwid2lkdGhcIlxuICAgIGlneFRvZ2dsZVxuICAgIFtzdHlsZS4tLWNvbXBvbmVudC1zaXplXT1cImdldENvbXBvbmVudFNpemVTdHlsZXMoKVwiXG4gICAgKGFwcGVuZGVkKT1cIm9uVG9nZ2xlQ29udGVudEFwcGVuZGVkKCRldmVudClcIlxuICAgIChvcGVuaW5nKT1cIm9uVG9nZ2xlT3BlbmluZygkZXZlbnQpXCIgKG9wZW5lZCk9XCJvblRvZ2dsZU9wZW5lZCgpXCJcbiAgICAoY2xvc2luZyk9XCJvblRvZ2dsZUNsb3NpbmcoJGV2ZW50KVwiIChjbG9zZWQpPVwib25Ub2dnbGVDbG9zZWQoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZHJvcC1kb3duX19saXN0LXNjcm9sbFwiICNzY3JvbGxDb250YWluZXIgW2F0dHIuaWRdPVwidGhpcy5saXN0SWRcIiByb2xlPVwibGlzdGJveFwiIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJ0aGlzLmxhYmVsbGVkQnlcIlxuICAgIFtzdHlsZS5oZWlnaHRdPVwiaGVpZ2h0XCJcbiAgICBbc3R5bGUubWF4SGVpZ2h0XT1cIm1heEhlaWdodFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbGxhcHNlZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm8tZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NvbWJvL2NvbWJvLWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kcm9wLWRvd24vZHJvcC1kb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDZ0IsU0FBUyxFQUFjLE1BQU0sRUFBdUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQzFILE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBZ0IsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRSxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFJdEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUEwQixNQUFNLGlCQUFpQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7OztBQUUzRSxjQUFjO0FBUWQsTUFBTSxPQUFPLHlCQUEwQixTQUFRLG9CQUFvQjtJQVkvRCx3QkFBd0I7SUFDeEIsSUFBb0IsZUFBZTtRQUMvQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7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bUJBQW1COzswQkFFMUIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUI7NENBN0RwQyxVQUFVO3NCQURoQixLQUFLO2dCQVFVLFFBQVE7c0JBRHZCLGVBQWU7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIFF1ZXJ5TGlzdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBDb250ZW50Q2hpbGRyZW4sIE9wdGlvbmFsLCBJbnB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneENvbWJvQmFzZSwgSUdYX0NPTUJPX0NPTVBPTkVOVCB9IGZyb20gJy4vY29tYm8uY29tbW9uJztcbmltcG9ydCB7IElEcm9wRG93bkJhc2UsIElHWF9EUk9QRE9XTl9CQVNFIH0gZnJvbSAnLi4vZHJvcC1kb3duL2Ryb3AtZG93bi5jb21tb24nO1xuaW1wb3J0IHsgSWd4RHJvcERvd25Db21wb25lbnQgfSBmcm9tICcuLi9kcm9wLWRvd24vZHJvcC1kb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcm9wRG93bkFjdGlvbktleSB9IGZyb20gJy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tbW9uJztcbmltcG9ydCB7IElneENvbWJvQWRkSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tYm8tYWRkLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbWJvQVBJU2VydmljZSB9IGZyb20gJy4vY29tYm8uYXBpJztcbmltcG9ydCB7IElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9kcm9wLWRvd24vZHJvcC1kb3duLWl0ZW0uYmFzZSc7XG5pbXBvcnQgeyBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgSWd4Q29tYm9JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21iby1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eVRva2VuLCBJRGlzcGxheURlbnNpdHlPcHRpb25zIH0gZnJvbSAnLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSWd4VG9nZ2xlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90b2dnbGUvdG9nZ2xlLmRpcmVjdGl2ZSc7XG5cbi8qKiBAaGlkZGVuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1jb21iby1kcm9wLWRvd24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi4vZHJvcC1kb3duL2Ryb3AtZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJR1hfRFJPUERPV05fQkFTRSwgdXNlRXhpc3Rpbmc6IElneENvbWJvRHJvcERvd25Db21wb25lbnQgfV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbSWd4VG9nZ2xlRGlyZWN0aXZlLCBOZ0lmXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hDb21ib0Ryb3BEb3duQ29tcG9uZW50IGV4dGVuZHMgSWd4RHJvcERvd25Db21wb25lbnQgaW1wbGVtZW50cyBJRHJvcERvd25CYXNlLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNpbmdsZU1vZGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneENvbWJvSXRlbUNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBjaGlsZHJlbjogUXVlcnlMaXN0PElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmU+ID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgc2Nyb2xsQ29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlydERpci5kYy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgaXNTY3JvbGxlZFRvTGFzdCgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy52aXJ0RGlyLnNjcm9sbFBvc2l0aW9uO1xuICAgICAgICBjb25zdCBzY3JvbGxIZWlnaHQgPSB0aGlzLnZpcnREaXIuZ2V0U2Nyb2xsKCkuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihzY3JvbGxUb3AgKyB0aGlzLnZpcnREaXIuaWd4Rm9yQ29udGFpbmVyU2l6ZSkgPT09IHNjcm9sbEhlaWdodDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGxhc3RWaXNpYmxlSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tYm8udG90YWxJdGVtQ291bnQgP1xuICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzLmNvbWJvLml0ZW1zTWF4SGVpZ2h0IC8gdGhpcy5jb21iby5pdGVtSGVpZ2h0KSA6XG4gICAgICAgICAgICB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBzb3J0ZWRDaGlsZHJlbigpOiBJZ3hEcm9wRG93bkl0ZW1CYXNlRGlyZWN0aXZlW10ge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi50b0FycmF5KClcbiAgICAgICAgICAgICAgICAuc29ydCgoYTogSWd4RHJvcERvd25JdGVtQmFzZURpcmVjdGl2ZSwgYjogSWd4RHJvcERvd25JdGVtQmFzZURpcmVjdGl2ZSkgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgbm9uLWhlYWRlciBpdGVtc1xuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBteURyb3BEb3duSXRlbXMgPSB0aGlzLmRyb3Bkb3duLml0ZW1zO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgaXRlbXMoKTogSWd4Q29tYm9JdGVtQ29tcG9uZW50W10ge1xuICAgICAgICBjb25zdCBpdGVtczogSWd4Q29tYm9JdGVtQ29tcG9uZW50W10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgc29ydGVkQ2hpbGRyZW4gPSB0aGlzLnNvcnRlZENoaWxkcmVuIGFzIElneENvbWJvSXRlbUNvbXBvbmVudFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBzb3J0ZWRDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGlmICghY2hpbGQuaXNIZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBzZWxlY3Rpb246IElneFNlbGVjdGlvbkFQSVNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSUdYX0NPTUJPX0NPTVBPTkVOVCkgcHVibGljIGNvbWJvOiBJZ3hDb21ib0Jhc2UsXG4gICAgICAgIHByb3RlY3RlZCBjb21ib0FQSTogSWd4Q29tYm9BUElTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgY2RyLCBzZWxlY3Rpb24sIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uRm9jdXMoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZEl0ZW0gPSB0aGlzLl9mb2N1c2VkSXRlbSB8fCB0aGlzLml0ZW1zWzBdO1xuICAgICAgICB0aGlzLmNvbWJvLnNldEFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkJsdXIoX2V2dD8pIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkSXRlbSA9IG51bGw7XG4gICAgICAgIHRoaXMuY29tYm8uc2V0QWN0aXZlRGVzY2VuZGFudCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG9uVG9nZ2xlT3BlbmVkKCkge1xuICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuYXZpZ2F0ZUZpcnN0KCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRlSXRlbSh0aGlzLnZpcnREaXIuaWd4Rm9yT2YuZmluZEluZGV4KGUgPT4gIWU/LmlzSGVhZGVyKSk7XG4gICAgICAgIHRoaXMuY29tYm8uc2V0QWN0aXZlRGVzY2VuZGFudCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmF2aWdhdGVQcmV2KCkge1xuICAgICAgICBpZiAodGhpcy5fZm9jdXNlZEl0ZW0gJiYgdGhpcy5fZm9jdXNlZEl0ZW0uaW5kZXggPT09IDAgJiYgdGhpcy52aXJ0RGlyLnN0YXRlLnN0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29tYm8uZm9jdXNTZWFyY2hJbnB1dChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5uYXZpZ2F0ZVByZXYoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbWJvLnNldEFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmF2aWdhdGVOZXh0KCkge1xuICAgICAgICBjb25zdCBsYXN0SW5kZXggPSB0aGlzLmNvbWJvLnRvdGFsSXRlbUNvdW50ID8gdGhpcy5jb21iby50b3RhbEl0ZW1Db3VudCAtIDEgOiB0aGlzLnZpcnREaXIuaWd4Rm9yT2YubGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKHRoaXMuX2ZvY3VzZWRJdGVtICYmIHRoaXMuX2ZvY3VzZWRJdGVtLmluZGV4ID09PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBZGRJdGVtQnV0dG9uKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5uYXZpZ2F0ZU5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbWJvLnNldEFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBzZWxlY3RJdGVtKGl0ZW06IElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmUpIHtcbiAgICAgICAgaWYgKGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21ib0FQSS5zZXRfc2VsZWN0ZWRfaXRlbShpdGVtLml0ZW1JRCk7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWRJdGVtID0gaXRlbTtcbiAgICAgICAgdGhpcy5jb21iby5zZXRBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgdXBkYXRlU2Nyb2xsUG9zaXRpb24oKSB7XG4gICAgICAgIHRoaXMudmlydERpci5nZXRTY3JvbGwoKS5zY3JvbGxUb3AgPSB0aGlzLl9zY3JvbGxQb3NpdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBvbkl0ZW1BY3Rpb25LZXkoa2V5OiBEcm9wRG93bkFjdGlvbktleSkge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSBEcm9wRG93bkFjdGlvbktleS5FTlRFUjpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVudGVyKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERyb3BEb3duQWN0aW9uS2V5LlNQQUNFOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU3BhY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRHJvcERvd25BY3Rpb25LZXkuRVNDQVBFOlxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMudmlydERpci5nZXRTY3JvbGwoKS5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbEhhbmRsZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpcnREaXIuZ2V0U2Nyb2xsKCkucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxIYW5kbGVyKTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2Nyb2xsVG9IaWRkZW5JdGVtKF9uZXdJdGVtOiBhbnkpOiB2b2lkIHsgfVxuXG4gICAgcHJvdGVjdGVkIHNjcm9sbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY29tYm9BUEkuZGlzYWJsZVRyYW5zaXRpb25zID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBoYW5kbGVFbnRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBZGRJdGVtRm9jdXNlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbWJvLmFkZEl0ZW1Ub0NvbGxlY3Rpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zaW5nbGVNb2RlICYmIHRoaXMuZm9jdXNlZEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuY29tYm8uc2VsZWN0KHRoaXMuZm9jdXNlZEl0ZW0uaXRlbUlEKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVNwYWNlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0FkZEl0ZW1Gb2N1c2VkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbSh0aGlzLmZvY3VzZWRJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNBZGRJdGVtRm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNlZEl0ZW0gaW5zdGFuY2VvZiBJZ3hDb21ib0FkZEl0ZW1Db21wb25lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c0FkZEl0ZW1CdXR0b24oKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbWJvLmlzQWRkQnV0dG9uVmlzaWJsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRJdGVtID0gdGhpcy5pdGVtc1t0aGlzLml0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImlneC1kcm9wLWRvd25fX2xpc3RcIiBbc3R5bGUud2lkdGhdPVwid2lkdGhcIlxuICAgIGlneFRvZ2dsZVxuICAgIFtzdHlsZS4tLWNvbXBvbmVudC1zaXplXT1cImdldENvbXBvbmVudFNpemVTdHlsZXMoKVwiXG4gICAgKGFwcGVuZGVkKT1cIm9uVG9nZ2xlQ29udGVudEFwcGVuZGVkKCRldmVudClcIlxuICAgIChvcGVuaW5nKT1cIm9uVG9nZ2xlT3BlbmluZygkZXZlbnQpXCIgKG9wZW5lZCk9XCJvblRvZ2dsZU9wZW5lZCgpXCJcbiAgICAoY2xvc2luZyk9XCJvblRvZ2dsZUNsb3NpbmcoJGV2ZW50KVwiIChjbG9zZWQpPVwib25Ub2dnbGVDbG9zZWQoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZHJvcC1kb3duX19saXN0LXNjcm9sbFwiICNzY3JvbGxDb250YWluZXIgW2F0dHIuaWRdPVwibGlzdElkXCIgcm9sZT1cImxpc3Rib3hcIiBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWxsZWRCeVwiXG4gICAgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIlxuICAgIFtzdHlsZS5tYXhIZWlnaHRdPVwibWF4SGVpZ2h0XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sbGFwc2VkXCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=