@fundamental-ngx/platform 0.44.0-rc.6 → 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/esm2022/action-bar/action-bar.component.mjs +3 -3
  2. package/esm2022/button/button.component.mjs +4 -3
  3. package/esm2022/dynamic-page/dynamic-page-header/header/dynamic-page-header.component.mjs +3 -2
  4. package/esm2022/feed-input/feed-input.component.mjs +3 -2
  5. package/esm2022/form/checkbox/checkbox.component.mjs +6 -5
  6. package/esm2022/form/checkbox-group/checkbox-group.component.mjs +3 -3
  7. package/esm2022/form/date-picker/date-picker.component.mjs +7 -6
  8. package/esm2022/form/datetime-picker/datetime-picker.component.mjs +6 -5
  9. package/esm2022/form/form-generator/form-generator/form-generator.component.mjs +3 -2
  10. package/esm2022/form/form-group/form-field/form-field.component.mjs +4 -3
  11. package/esm2022/form/form-group/form-group.component.mjs +3 -3
  12. package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +3 -3
  13. package/esm2022/form/platform-file-uploader/platform-file-uploader.component.mjs +4 -3
  14. package/esm2022/form/radio-group/radio/radio.component.mjs +4 -3
  15. package/esm2022/form/select/commons/base-select.mjs +3 -3
  16. package/esm2022/form/select/select/select.component.mjs +4 -4
  17. package/esm2022/form/text-area/text-area.component.mjs +4 -4
  18. package/esm2022/form/time-picker/time-picker.component.mjs +3 -2
  19. package/esm2022/list/base-list-item.mjs +5 -5
  20. package/esm2022/page-footer/page-footer.component.mjs +3 -2
  21. package/esm2022/search-field/search-field.component.mjs +4 -4
  22. package/esm2022/smart-filter-bar/smart-filter-bar.component.mjs +7 -6
  23. package/esm2022/thumbnail/thumbnail-details/thumbnail-details.component.mjs +3 -2
  24. package/esm2022/thumbnail/thumbnail-image/thumbnail-image.component.mjs +3 -3
  25. package/esm2022/thumbnail/thumbnail.component.mjs +3 -3
  26. package/esm2022/upload-collection/upload-collection/upload-collection.component.mjs +5 -5
  27. package/esm2022/value-help-dialog/components/define-tab/define-tab.component.mjs +4 -3
  28. package/esm2022/value-help-dialog/components/select-tab/select-tab.component.mjs +3 -2
  29. package/esm2022/value-help-dialog/components/value-help-dialog-search/value-help-dialog-search.component.mjs +3 -2
  30. package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +5 -5
  31. package/fesm2022/fundamental-ngx-platform-action-bar.mjs +2 -2
  32. package/fesm2022/fundamental-ngx-platform-action-bar.mjs.map +1 -1
  33. package/fesm2022/fundamental-ngx-platform-button.mjs +3 -3
  34. package/fesm2022/fundamental-ngx-platform-button.mjs.map +1 -1
  35. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs +2 -1
  36. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
  37. package/fesm2022/fundamental-ngx-platform-feed-input.mjs +2 -1
  38. package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
  39. package/fesm2022/fundamental-ngx-platform-form.mjs +31 -30
  40. package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
  41. package/fesm2022/fundamental-ngx-platform-list.mjs +4 -4
  42. package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
  43. package/fesm2022/fundamental-ngx-platform-page-footer.mjs +2 -1
  44. package/fesm2022/fundamental-ngx-platform-page-footer.mjs.map +1 -1
  45. package/fesm2022/fundamental-ngx-platform-search-field.mjs +3 -3
  46. package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
  47. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +7 -7
  48. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  49. package/fesm2022/fundamental-ngx-platform-thumbnail.mjs +4 -4
  50. package/fesm2022/fundamental-ngx-platform-thumbnail.mjs.map +1 -1
  51. package/fesm2022/fundamental-ngx-platform-upload-collection.mjs +11 -10
  52. package/fesm2022/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  53. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +9 -8
  54. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  55. package/fundamental-ngx-platform-v0.44.0.tgz +0 -0
  56. package/package.json +4 -4
  57. package/schematics/ng-add/index.js +1 -1
  58. package/fundamental-ngx-platform-v0.44.0-rc.6.tgz +0 -0
@@ -6,7 +6,7 @@ import { FocusKeyManager, LiveAnnouncer } from '@angular/cdk/a11y';
6
6
  import { TemplatePortal } from '@angular/cdk/portal';
7
7
  import { firstValueFrom, fromEvent, isObservable, merge, Observable, of, Subject } from 'rxjs';
8
8
  import { filter, map, take, takeUntil } from 'rxjs/operators';
9
- import { DynamicComponentService, KeyUtil, RtlService } from '@fundamental-ngx/cdk/utils';
9
+ import { DynamicComponentService, KeyUtil, RtlService, warnOnce } from '@fundamental-ngx/cdk/utils';
10
10
  import { PopoverComponent } from '@fundamental-ngx/core/popover';
11
11
  import { BaseComponent, SearchFieldDataSource } from '@fundamental-ngx/platform/shared';
12
12
  import { SEARCH_FIELD_COMPONENT } from './search-field-mobile/search-field-mobile.interface';
@@ -103,7 +103,7 @@ export class SearchFieldComponent extends BaseComponent {
103
103
  * Message announced by screen reader, when search suggestions opens.
104
104
  */
105
105
  set searchSuggestionMessage(value) {
106
- console.warn('Property searchSuggestionMessage is deprecated. Use i18n capabilities instead.');
106
+ warnOnce('Property searchSuggestionMessage is deprecated. Use i18n capabilities instead.');
107
107
  this._searchSuggestionMessage = value;
108
108
  }
109
109
  get searchSuggestionMessage() {
@@ -115,7 +115,7 @@ export class SearchFieldComponent extends BaseComponent {
115
115
  * direction for navigating the suggestion. This is not necessry in case of 0 suggestion.
116
116
  */
117
117
  set searchSuggestionNavigateMessage(value) {
118
- console.warn('Property searchSuggestionNavigateMessage is deprecated. Use i18n capabilities instead.');
118
+ warnOnce('Property searchSuggestionNavigateMessage is deprecated. Use i18n capabilities instead.');
119
119
  this._searchSuggestionNavigateMessage = value;
120
120
  }
121
121
  get searchSuggestionNavigateMessage() {
@@ -617,4 +617,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
617
617
  name: 'suggestionMatches'
618
618
  }]
619
619
  }] });
620
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9zZWFyY2gtZmllbGQvc2VhcmNoLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9zZWFyY2gtZmllbGQvc2VhcmNoLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBRUosU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBcUIsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzdGLE9BQU8sRUFBbUIsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVB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LEVBQUUsTUFBTSxHQUFHLEtBQUs7UUFDNUQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE1BQU0sR0FBRyxFQUFFLENBQUM7U0FDZjtRQUNELElBQUksTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2xCLE9BQU8sTUFBTSxDQUFDO1NBQ2pCO1FBQ0QsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7OEdBWFEscUJBQXFCOzRHQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBSGpDLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLG1CQUFtQjtpQkFDNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdG9yLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUGlwZSxcbiAgICBQaXBlVHJhbnNmb3JtLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERPV05fQVJST1csIEVTQ0FQRSwgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb24sIE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBGb2N1c2FibGVPcHRpb24sIEZvY3VzS2V5TWFuYWdlciwgTGl2ZUFubm91bmNlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5cbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBmcm9tRXZlbnQsIGlzT2JzZXJ2YWJsZSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSwgS2V5VXRpbCwgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9wb3BvdmVyJztcbmltcG9ydCB7IE1vYmlsZU1vZGVDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgU2VhcmNoRmllbGREYXRhU291cmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHtcbiAgICBTRUFSQ0hfRklFTERfQ09NUE9ORU5ULFxuICAgIFNlYXJjaEZpZWxkTW9iaWxlSW50ZXJmYWNlXG59IGZyb20gJy4vc2VhcmNoLWZpZWxkLW1vYmlsZS9zZWFyY2gtZmllbGQtbW9iaWxlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTZWFyY2hGaWVsZE1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4vc2VhcmNoLWZpZWxkLW1vYmlsZS9zZWFyY2gtZmllbGQvc2VhcmNoLWZpZWxkLW1vYmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGxhdGZvcm1TZWFyY2hGaWVsZE1vYmlsZU1vZHVsZSB9IGZyb20gJy4vc2VhcmNoLWZpZWxkLW1vYmlsZS9zZWFyY2gtZmllbGQtbW9iaWxlLm1vZHVsZSc7XG5pbXBvcnQgeyBGZExhbmd1YWdlLCBGRF9MQU5HVUFHRSwgVHJhbnNsYXRpb25SZXNvbHZlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGRF9TSEVMTEJBUl9TRUFSQ0hfQ09NUE9ORU5UIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoZWxsYmFyJztcbmltcG9ydCB7IFNlYXJjaENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoSW5wdXQge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBjYXRlZ29yeTogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWdnZXN0aW9uSXRlbSB7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBpc0hpc3RvcmljYWw/OiBzdHJpbmc7XG4gICAgZGF0YT86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWYWx1ZUxhYmVsSXRlbSB7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tmZHBTZWFyY2hGaWVsZFN1Z2dlc3Rpb25dJyxcbiAgICBob3N0OiB7XG4gICAgICAgIHRhYmluZGV4OiAnLTEnLFxuICAgICAgICByb2xlOiAnbGlzdC1pdGVtJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoRmllbGRTdWdnZXN0aW9uRGlyZWN0aXZlIGltcGxlbWVudHMgRm9jdXNhYmxlT3B0aW9uIHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZikge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxufVxuXG5sZXQgc2VhcmNoRmllbGRJZENvdW50ID0gMDtcblxudHlwZSBBcHBlYXJhbmNlID0gU2VhcmNoQ29tcG9uZW50WydhcHBlYXJhbmNlJ10gfCB1bmRlZmluZWQ7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLXNlYXJjaC1maWVsZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoLWZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycygpLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRF9TSEVMTEJBUl9TRUFSQ0hfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFNlYXJjaEZpZWxkQ29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaEZpZWxkQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTZWFyY2hGaWVsZE1vYmlsZUludGVyZmFjZSwgU2VhcmNoQ29tcG9uZW50XG57XG4gICAgLyoqIFR5cGUgb2YgY29tcG9uZW50IHVzZWQgdG8gcmVuZGVyIHRoZSBjYXRlZ29yaWVzIGRyb3Bkb3duLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2F0ZWdvcnlNb2RlOiAnbWVudScgfCAnc2VsZWN0JyA9ICdtZW51JztcblxuICAgIC8qKiBBZGRpdGlvbmFsIGFwcGVhcmFuY2UgY29uZmlndXJhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhcHBlYXJhbmNlKHZhbHVlOiBBcHBlYXJhbmNlKSB7XG4gICAgICAgIGlmIChlcXVhbCh2YWx1ZSwgdGhpcy5hcHBlYXJhbmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYXBwZWFyYW5jZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGFwcGVhcmFuY2UoKTogQXBwZWFyYW5jZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBlYXJhbmNlO1xuICAgIH1cblxuICAgIC8qKiBQbGFjZWhvbGRlciB0ZXh0IGZvciBzZWFyY2ggaW5wdXQgZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgLyoqIFNldCBNb2JpbGUgTW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlOiBib29sZWFuO1xuXG4gICAgLyoqIFNlYXJjaCBGaWVsZCBNb2JpbGUgY29uZmlndXJhdGlvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlQ29uZmlnOiBNb2JpbGVNb2RlQ29uZmlnO1xuXG4gICAgLyoqIFdoZXRoZXIgZGlzcGxheSBSZWZyZXNoIGJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVJlZnJlc2ggPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIGRpc3BsYXkgc2VhcmNoIGJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVNlYXJjaCA9IGZhbHNlO1xuXG4gICAgLyoqIExpc3Qgb2Ygc3RyaW5nIHZhbHVlcyB0byBwb3B1bGF0ZSBzdWdnZXN0aW9uIGRyb3Bkb3duIHNlbGVjdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdWdnZXN0aW9ucyh2YWx1ZTogU3VnZ2VzdGlvbkl0ZW1bXSB8IE9ic2VydmFibGU8U3VnZ2VzdGlvbkl0ZW1bXT4pIHtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnMgPSB2YWx1ZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBjb252ZXJ0IHN1Z2dlc3Rpb25zIHRvIGFuIGFycmF5IG9mIHN0cmluZyBmb3IgXCJkcm9wZG93biB2YWx1ZXNcIlxuICAgICAgICAgICAgY29uc3QgZHJvcGRvd25WYWx1ZXMgPSB2YWx1ZS5tYXAoKHN1Z2dlc3Rpb246IFN1Z2dlc3Rpb25JdGVtKSA9PiBzdWdnZXN0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2Ryb3Bkb3duVmFsdWVzJCA9IG9mKGRyb3Bkb3duVmFsdWVzKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLl9kcm9wZG93blZhbHVlcyQgPSB2YWx1ZS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25JdGVtW10pID0+IHN1Z2dlc3Rpb25zLm1hcCgoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi52YWx1ZSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZHJvcGRvd25WYWx1ZXMkID0gb2YoW10pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzdWdnZXN0aW9ucygpOiBTdWdnZXN0aW9uSXRlbVtdIHwgT2JzZXJ2YWJsZTxTdWdnZXN0aW9uSXRlbVtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0aW9ucztcbiAgICB9XG5cbiAgICAvKiogRGF0YXNvdXJjZSBmb3Igc3VnZ2VzdGlvbiBsaXN0ICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogU2VhcmNoRmllbGREYXRhU291cmNlPGFueT4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplRGF0YVNvdXJjZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGRhdGFTb3VyY2UoKTogU2VhcmNoRmllbGREYXRhU291cmNlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKiogSW5pdGlhbCBpbnB1dCB0ZXh0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5wdXRUZXh0OiBzdHJpbmc7XG5cbiAgICAvKiogTGlzdCBvZiBjYXRlZ29yaWVzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNhdGVnb3JpZXModmFsdWU6IFZhbHVlTGFiZWxJdGVtW10pIHtcbiAgICAgICAgdGhpcy5fY2F0ZWdvcmllcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9zaG93Q2F0ZWdvcnlEcm9wZG93biA9IEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIGdldCBjYXRlZ29yaWVzKCk6IFZhbHVlTGFiZWxJdGVtW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcmllcztcbiAgICB9XG5cbiAgICAvKiogQ3VycmVudCBjYXRlZ29yeSwgdmFsdWUgc2hvdWxkIGJlIHByZXNlbnQgaW4gY2F0ZWdvcmllcyBhcnJheSAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VycmVudENhdGVnb3J5OiBWYWx1ZUxhYmVsSXRlbTtcblxuICAgIC8qKiBTZXQgbGFiZWwgZm9yIGNhdGVnb3J5IGRyb3Bkb3duIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNhdGVnb3J5TGFiZWwgPSAnQ2F0ZWdvcnknO1xuXG4gICAgLyoqIEhpZGUgZGlzcGxheSBvZiBjYXRlZ29yeSBsYWJlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZUNhdGVnb3J5TGFiZWwgPSBmYWxzZTtcblxuICAgIC8qKiBUb2dnbGUgXCJsb2FkaW5nXCIgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQVJJQSBsYWJlbCB0byBzcGVjaWZ5IHdoYXQgdGhlIHNlYXJjaCBmaWVsZCBpc1xuICAgICAqIE5vdCBzaG93biBpbiB0aGUgVUksIG9ubHkgdmlzaWJsZSBieSB0aGUgc2NyZWVuLXJlYWRlcnMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWw6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBJZCBvZiBlbGVtZW50cyAoc2VwYXJhdGVkIGJ5IHNwYWNlKSBmb3Igc2V0dGluZyBhcmlhLWxhYmVsbGVkYnkgZm9yIHNlYXJjaCBpbnB1dFxuICAgICAqIE5vdCBzaG93biBpbiB0aGUgVUksIG9ubHkgdmlzaWJsZSBieSB0aGUgc2NyZWVuLXJlYWRlcnMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRieTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBNZXNzYWdlIGFubm91bmNlZCBieSBzY3JlZW4gcmVhZGVyLCB3aGVuIHNlYXJjaCBzdWdnZXN0aW9ucyBvcGVucy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWFyY2hTdWdnZXN0aW9uTWVzc2FnZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignUHJvcGVydHkgc2VhcmNoU3VnZ2VzdGlvbk1lc3NhZ2UgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWQuJyk7XG4gICAgICAgIHRoaXMuX3NlYXJjaFN1Z2dlc3Rpb25NZXNzYWdlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IHNlYXJjaFN1Z2dlc3Rpb25NZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hTdWdnZXN0aW9uTWVzc2FnZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIFNlY29uZCBwYXJ0IG9mIG1lc3NhZ2UgZm9yIHNlYXJjaCBzdWdnZXN0aW9uLlxuICAgICAqIGRpcmVjdGlvbiBmb3IgbmF2aWdhdGluZyB0aGUgc3VnZ2VzdGlvbi4gVGhpcyBpcyBub3QgbmVjZXNzcnkgaW4gY2FzZSBvZiAwIHN1Z2dlc3Rpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VhcmNoU3VnZ2VzdGlvbk5hdmlnYXRlTWVzc2FnZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignUHJvcGVydHkgc2VhcmNoU3VnZ2VzdGlvbk5hdmlnYXRlTWVzc2FnZSBpcyBkZXByZWNhdGVkLiBVc2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZC4nKTtcbiAgICAgICAgdGhpcy5fc2VhcmNoU3VnZ2VzdGlvbk5hdmlnYXRlTWVzc2FnZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBzZWFyY2hTdWdnZXN0aW9uTmF2aWdhdGVNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hTdWdnZXN0aW9uTmF2aWdhdGVNZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRvIGFsd2F5cyBzaG93IHNlYXJjaCBidXR0b24uICovXG4gICAgQElucHV0KClcbiAgICBmb3JjZVNlYXJjaEJ1dHRvbiA9IGZhbHNlO1xuXG4gICAgLyoqIElucHV0IGNoYW5nZSBldmVudC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBpbnB1dENoYW5nZTogRXZlbnRFbWl0dGVyPFNlYXJjaElucHV0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKiBTZWFyY2ggc3VibWl0IGV2ZW50LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlYXJjaFN1Ym1pdDogRXZlbnRFbWl0dGVyPFNlYXJjaElucHV0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKiBDYW5jZWwgc2VhcmNoIGV2ZW50LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGNhbmNlbFNlYXJjaDogRXZlbnRFbWl0dGVyPFNlYXJjaElucHV0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKiBPcGVuIG1vYmlsZSBtb2RlIGV2ZW50LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGlzT3BlbkNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdjYXRlZ29yeURyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgY2F0ZWdvcnlEcm9wZG93bjogUG9wb3ZlckNvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cCcsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIGlucHV0R3JvdXA6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdpbnB1dEZpZWxkJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgaW5wdXRGaWVsZDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0RmllbGRUZW1wbGF0ZScpXG4gICAgaW5wdXRGaWVsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdzdWdnZXN0aW9uTWVudVRlbXBsYXRlJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgc3VnZ2VzdGlvbk1lbnVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbihTZWFyY2hGaWVsZFN1Z2dlc3Rpb25EaXJlY3RpdmUpXG4gICAgc3VnZ2VzdGlvbkl0ZW1zOiBRdWVyeUxpc3Q8U2VhcmNoRmllbGRTdWdnZXN0aW9uRGlyZWN0aXZlPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHNlYXJjaEZpZWxkVmFsdWUoKTogU2VhcmNoSW5wdXQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dDogdGhpcy5pbnB1dFRleHQsXG4gICAgICAgICAgICBjYXRlZ29yeTogdGhpcy5fY3VycmVudENhdGVnb3J5Py52YWx1ZSB8fCBudWxsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuIEZvY3VzIHN0YXRlICovXG4gICAgZ2V0IGlzRm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50Py5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmlucHV0RmllbGQ/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT2JzZXJ2YWJsZSBsaXN0IG9mIHN0cmluZyB2YWx1ZXMgdGFrZW4gZnJvbSBgc3VnZ2VzdGlvbnNgIHRvIHBvcHVsYXRlIGRyb3Bkb3duIG1lbnUuXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIF9kcm9wZG93blZhbHVlcyQ6IE9ic2VydmFibGU8c3RyaW5nW10+ID0gb2YoW10pO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudGx5IHNldCBjYXRlZ29yeS5cbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgX2N1cnJlbnRDYXRlZ29yeT86IFZhbHVlTGFiZWxJdGVtO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gc2hvdyB0eXBlYWhlYWQgZHJvcGRvd24uXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIF9zaG93RHJvcGRvd24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRvIHNob3cgY2F0ZWdvcnkgZHJvcGRvd24uIFRoaXMgaXMgZGVwZW5kZW50IG9uIGxlbmd0aCBvZiBgY2F0ZWdvcnlWYWx1ZXNgIHByb3BlcnR5LlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBfc2hvd0NhdGVnb3J5RHJvcGRvd24gPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lucHV0SWQgPSAnJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3N1Ym1pdElkID0gJyc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZW51SWQgPSAnJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3JlZnJlc2hJZCA9ICcnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2xlYXJJZCA9ICcnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGlyOiBEaXJlY3Rpb24gPSAnbHRyJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaXNPcGVuID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc1JlZnJlc2ggPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzU2VhcmNoRG9uZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWFyY2hTdWdnZXN0aW9uTWVzc2FnZTogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWFyY2hTdWdnZXN0aW9uTmF2aWdhdGVNZXNzYWdlOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1Z2dlc3Rpb25zOiBTdWdnZXN0aW9uSXRlbVtdIHwgT2JzZXJ2YWJsZTxTdWdnZXN0aW9uSXRlbVtdPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGF0YVNvdXJjZTogU2VhcmNoRmllbGREYXRhU291cmNlPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhdGVnb3JpZXM6IFZhbHVlTGFiZWxJdGVtW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2N1cnJlbnRTZWFyY2hTdWdnZXN0aW9uQW5ub3VjZW1lbnRNZXNzYWdlID0gJyc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1Z2dlc3Rpb25PdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3VnZ2VzdGlvblBvcnRhbDogVGVtcGxhdGVQb3J0YWw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1Z2dlc3Rpb25rZXlNYW5hZ2VyOiBGb2N1c0tleU1hbmFnZXI8U2VhcmNoRmllbGRTdWdnZXN0aW9uRGlyZWN0aXZlPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRpb25SZXNvbHZlciA9IG5ldyBUcmFuc2xhdGlvblJlc29sdmVyKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhU291cmNlQ2hhbmdlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hcHBlYXJhbmNlOiBBcHBlYXJhbmNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9vdmVybGF5OiBPdmVybGF5LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGw6IFJ0bFNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgcmVhZG9ubHkgX2RvY3VtZW50OiBEb2N1bWVudCxcbiAgICAgICAgQEluamVjdChGRF9MQU5HVUFHRSkgcHJpdmF0ZSByZWFkb25seSBfbGFuZ3VhZ2UkOiBPYnNlcnZhYmxlPEZkTGFuZ3VhZ2U+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9saXZlQW5ub3VuY2VyOiBMaXZlQW5ub3VuY2VyLFxuICAgICAgICByZWFkb25seSBfZHluYW1pY0NvbXBvbmVudFNlcnZpY2U6IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgICAgICByZWFkb25seSBjb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9jZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBoYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSAmJiB0aGlzLmlzT3BlbiAmJiBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VTQ0FQRV0pKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dEaWFsb2coZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYmFzZUlkID0gJ2ZkcC1zZWFyY2gtZmllbGQnO1xuICAgICAgICB0aGlzLl9pbnB1dElkID0gYCR7YmFzZUlkfS1pbnB1dC0ke3NlYXJjaEZpZWxkSWRDb3VudCsrfWA7XG4gICAgICAgIHRoaXMuX3N1Ym1pdElkID0gYCR7YmFzZUlkfS1zdWJtaXQtJHtzZWFyY2hGaWVsZElkQ291bnQrK31gO1xuICAgICAgICB0aGlzLl9tZW51SWQgPSBgJHtiYXNlSWR9LW1lbnUtJHtzZWFyY2hGaWVsZElkQ291bnQrK31gO1xuXG4gICAgICAgIHRoaXMuX2lzUmVmcmVzaCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMuX3J0bCkge1xuICAgICAgICAgICAgdGhpcy5fcnRsLnJ0bC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChpc1J0bDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RpciA9IGlzUnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VXBNb2JpbGVNb2RlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCdjYXRlZ29yaWVzJyBpbiBjaGFuZ2VzIHx8ICdjdXJyZW50Q2F0ZWdvcnknIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudENhdGVnb3J5KHRoaXMuY3VycmVudENhdGVnb3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9zdWdnZXN0aW9uT3ZlcmxheVJlZikge1xuICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbk92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbk92ZXJsYXlSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N1Z2dlc3Rpb25rZXlNYW5hZ2VyPy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgc2VhcmNoIGlucHV0IGZpZWxkLlxuICAgICAqL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0RmllbGQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIENhcHR1cmluZyBvbktleWRvd24gb2YgaW5wdXQgZWxlbWVudCAqL1xuICAgIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtVUF9BUlJPVywgRE9XTl9BUlJPV10pKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fc3VnZ2VzdGlvbmtleU1hbmFnZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdWdnZXN0aW9ua2V5TWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbRVNDQVBFXSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VTdWdnZXN0aW9uTWVudSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcHR1cmluZyB2YWx1ZSBjaGFuZ2UgaW4gaW5wdXQgdGV4dCBmaWVsZCBvZiBjb21ib2JveC5cbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25WYWx1ZUNoYW5nZShldmVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIC8vIHdoZW4gc2VhcmNoIHJlc3VsdCBub3QgY2hhbmdlZCBidXQgaW5wdXQgdGV4dCBpcyBjaGFuZ2VkLlxuICAgICAgICAvLyBhZ2FpbiBuZWVkIHRvIGFubm91bmNlIHRoZSByZXN1bHQsIHNvIGNsZWFyIHRoaXMgbWVzc2FnZS5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5fY3VycmVudFNlYXJjaFN1Z2dlc3Rpb25Bbm5vdWNlbWVudE1lc3NhZ2UgPSAnJykpO1xuICAgICAgICB0aGlzLl9pc1NlYXJjaERvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNSZWZyZXNoID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMubW9iaWxlICYmICF0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5vcGVuTW9iaWxlTW9kZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KHRoaXMuc2VhcmNoRmllbGRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGlucHV0U3RyOiBzdHJpbmcgPSBldmVudC50cmltKCk7XG4gICAgICAgIGlmIChpbnB1dFN0ci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VTdWdnZXN0aW9uTWVudSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5vcGVuU3VnZ2VzdGlvbk1lbnUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgbWF0Y2guc2V0KCdrZXl3b3JkJywgaW5wdXRTdHIpO1xuICAgICAgICAgICAgbWF0Y2guc2V0KCdjYXRlZ29yeScsIHRoaXMuX2N1cnJlbnRDYXRlZ29yeT8udmFsdWUgfHwgbnVsbCk7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5tYXRjaChtYXRjaCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91cGRhdGVTZWFyY2hBbm5vdWNlbWVudFRleHQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXB0dXJpbmcgaXRlbSBzZWxlY3Rpb24gZnJvbSBkcm9wZG93biBtZW51IG9mIGNvbWJvYm94LlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkl0ZW1DbGljayhldmVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gZXZlbnQ7XG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdCh0aGlzLnNlYXJjaEZpZWxkVmFsdWUpO1xuICAgICAgICB0aGlzLnNlYXJjaFN1Ym1pdC5lbWl0KHRoaXMuc2VhcmNoRmllbGRWYWx1ZSk7XG4gICAgICAgIHRoaXMuY2xvc2VTdWdnZXN0aW9uTWVudSgpO1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0RpYWxvZyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNTZWFyY2hEb25lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGdldHMgZXhlY3V0ZWQgb24ga2V5Ym9hcmQgZW50ZXIgb2YgaW5wdXQgdGV4dCBmaWVsZC5cbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25TZWFyY2hTdWJtaXQoZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsU2VhcmNoLmVtaXQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VhcmNoU3VibWl0LmVtaXQodGhpcy5zZWFyY2hGaWVsZFZhbHVlKTtcblxuICAgICAgICB0aGlzLl9pc1JlZnJlc2ggPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLmlucHV0VGV4dCkge1xuICAgICAgICAgICAgdGhpcy5faXNTZWFyY2hEb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xvc2VTdWdnZXN0aW9uTWVudShmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBjdXJyZW50IGNhdGVnb3J5LlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXRDdXJyZW50Q2F0ZWdvcnkoY3VycmVudENhdGVnb3J5OiBWYWx1ZUxhYmVsSXRlbSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50Q2F0ZWdvcnkgPVxuICAgICAgICAgICAgY3VycmVudENhdGVnb3J5ICYmXG4gICAgICAgICAgICB0aGlzLmNhdGVnb3JpZXM/LmZpbmQoXG4gICAgICAgICAgICAgICAgKGNhdGVnb3J5KSA9PiBjYXRlZ29yeS5sYWJlbCA9PT0gY3VycmVudENhdGVnb3J5LmxhYmVsICYmIGNhdGVnb3J5LnZhbHVlID09PSBjdXJyZW50Q2F0ZWdvcnkudmFsdWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KHRoaXMuc2VhcmNoRmllbGRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbiBzdWdnZXN0aW9uIG1lbnVcbiAgICAgKi9cbiAgICBvcGVuU3VnZ2VzdGlvbk1lbnUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xvc2VTdWdnZXN0aW9uTWVudSgpO1xuICAgICAgICB0aGlzLl9zdWdnZXN0aW9ua2V5TWFuYWdlcj8uZGVzdHJveSgpO1xuICAgICAgICB0aGlzLl9zdWdnZXN0aW9ua2V5TWFuYWdlciA9IG5ldyBGb2N1c0tleU1hbmFnZXIodGhpcy5zdWdnZXN0aW9uSXRlbXMpO1xuICAgICAgICBpZiAodGhpcy5fc2hvd0Ryb3Bkb3duKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGUgb3ZlcmxheVxuICAgICAgICBjb25zdCBvdmVybGF5Q29uZmlnID0gdGhpcy5fY3JlYXRlU3VnZ2V0aW9uT3ZlcmxheUNvbmZpZygpO1xuICAgICAgICB0aGlzLl9zdWdnZXN0aW9uT3ZlcmxheVJlZiA9IHRoaXMuX292ZXJsYXkuY3JlYXRlKG92ZXJsYXlDb25maWcpO1xuXG4gICAgICAgIC8vIGdldCBwb3J0YWwgdG8gYXR0YWNoIHRvIG92ZXJsYXlcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGlvblBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLnN1Z2dlc3Rpb25NZW51VGVtcGxhdGUsIHRoaXMuX3ZpZXdDb250YWluZXJSZWYpO1xuICAgICAgICB0aGlzLl9zdWdnZXN0aW9uT3ZlcmxheVJlZi5hdHRhY2godGhpcy5fc3VnZ2VzdGlvblBvcnRhbCk7XG5cbiAgICAgICAgLy8gYWRkIHN1YnNjcmlwdGlvbiB0byBjYXB0dXJlIG91dHNpZGUgY2xpY2tzXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ2NsaWNrJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgISF0aGlzLl9zdWdnZXN0aW9uT3ZlcmxheVJlZiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuX3N1Z2dlc3Rpb25PdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dEcm9wZG93blxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBmb2N1cyA9ICEodGFyZ2V0LnRhZ05hbWUgPT09ICdJTlBVVCcgJiYgdGhpcy5faW5wdXRJZCAhPT0gdGFyZ2V0LmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlU3VnZ2VzdGlvbk1lbnUoZm9jdXMpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc2hvd0Ryb3Bkb3duID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9wZW5Nb2JpbGVNb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dEaWFsb2codHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBkaWFsb2dBcHByb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uSXRlbUNsaWNrKHRoaXMuaW5wdXRUZXh0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGRpYWxvZ0Rpc21pc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd0RpYWxvZyhmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzaG93RGlhbG9nKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4gIT09IGlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBpc09wZW47XG5cbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQoaXNPcGVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2xvc2VTdWdnZXN0aW9uTWVudShmb2N1cyA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zdWdnZXN0aW9uT3ZlcmxheVJlZikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N1Z2dlc3Rpb25PdmVybGF5UmVmLmRldGFjaCgpO1xuICAgICAgICBpZiAoZm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zaG93RHJvcGRvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNsZWFyVGV4dElucHV0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9ICcnO1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdCh0aGlzLnNlYXJjaEZpZWxkVmFsdWUpO1xuICAgICAgICB0aGlzLmNhbmNlbFNlYXJjaC5lbWl0KHRoaXMuc2VhcmNoRmllbGRWYWx1ZSk7XG5cbiAgICAgICAgdGhpcy5faXNSZWZyZXNoID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5faXNTZWFyY2hEb25lID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jbG9zZVN1Z2dlc3Rpb25NZW51KGZhbHNlKTtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NyZWF0ZVN1Z2dldGlvbk92ZXJsYXlDb25maWcoKTogT3ZlcmxheUNvbmZpZyB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uczogQ29ubmVjdGVkUG9zaXRpb25bXSA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAndG9wJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5fb3ZlcmxheVxuICAgICAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuaW5wdXRHcm91cClcbiAgICAgICAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24oKVxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnMocG9zaXRpb25zKTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xuICAgICAgICByZXR1cm4gbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneSxcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5LFxuICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJyxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLmlucHV0R3JvdXAubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pbml0aWFsaXplRGF0YVNvdXJjZShkYXRhU291cmNlOiBTZWFyY2hGaWVsZERhdGFTb3VyY2U8YW55Pik6IHZvaWQge1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlQ2hhbmdlZCQubmV4dCgpO1xuICAgICAgICBkYXRhU291cmNlXG4gICAgICAgICAgICAub3BlbigpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwobWVyZ2UodGhpcy5fb25EZXN0cm95JCwgdGhpcy5fZGF0YVNvdXJjZUNoYW5nZWQkKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHJvcGRvd25WYWx1ZXMkID0gb2YoZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiByZXR1cm4gY291bnQgZm9yIG1hdGNoaW5nIHN1Z2dlc3Rpb24gd2l0aCBpbnB1dCB0ZXh0XG4gICAgICogQHJldHVybnMgbnVtYmVyXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0U3VnZ2VzdGlvbnNMZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5fZHJvcGRvd25WYWx1ZXMkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKHN1Z2dlc3Rpb25zKSA9PiB7XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz8uZm9yRWFjaCgoc3VnZ2VzdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0VGV4dCAmJiBzdWdnZXN0aW9uPy50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5pbnB1dFRleHQ/LnRyaW0oKT8udG9Mb3dlckNhc2UoKSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGFzeW5jIF91cGRhdGVTZWFyY2hBbm5vdWNlbWVudFRleHQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIGNyZWF0ZSBzZWFyY2ggc3VnZ2VzdGlvbiBtZXNzYWdlIHdpdGggY291bnQuXG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25Db3VudCA9IHRoaXMuX2dldFN1Z2dlc3Rpb25zTGVuZ3RoKCk7XG4gICAgICAgIGxldCB7IHNlYXJjaFN1Z2dlc3Rpb25NZXNzYWdlLCBzZWFyY2hTdWdnZXN0aW9uTmF2aWdhdGVNZXNzYWdlIH0gPSB0aGlzO1xuICAgICAgICBpZiAoc2VhcmNoU3VnZ2VzdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHNlYXJjaFN1Z2dlc3Rpb25NZXNzYWdlID0gc3VnZ2VzdGlvbkNvdW50ICsgJyAnICsgc2VhcmNoU3VnZ2VzdGlvbk1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzZWFyY2hTdWdnZXN0aW9uTWVzc2FnZSB8fCAhc2VhcmNoU3VnZ2VzdGlvbk5hdmlnYXRlTWVzc2FnZSkge1xuICAgICAgICAgICAgY29uc3QgbGFuZyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2xhbmd1YWdlJCk7XG4gICAgICAgICAgICBpZiAoIXNlYXJjaFN1Z2dlc3Rpb25NZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoU3VnZ2VzdGlvbk1lc3NhZ2UgPSB0aGlzLl90cmFuc2xhdGlvblJlc29sdmVyLnJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybVNlYXJjaEZpZWxkLnNlYXJjaFN1Z2dlc3Rpb25NZXNzYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgeyBjb3VudDogc3VnZ2VzdGlvbkNvdW50IH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzZWFyY2hTdWdnZXN0aW9uTmF2aWdhdGVNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoU3VnZ2VzdGlvbk5hdmlnYXRlTWVzc2FnZSA9IHRoaXMuX3RyYW5zbGF0aW9uUmVzb2x2ZXIucmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgbGFuZyxcbiAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtU2VhcmNoRmllbGQuc2VhcmNoU3VnZ2VzdGlvbk5hdmlnYXRlTWVzc2FnZSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hTdWdnZXN0aW9uQW5ub3VjZW1lbnRNZXNzYWdlID1cbiAgICAgICAgICAgIHNlYXJjaFN1Z2dlc3Rpb25NZXNzYWdlICsgKHN1Z2dlc3Rpb25Db3VudCA+IDAgPyBzZWFyY2hTdWdnZXN0aW9uTmF2aWdhdGVNZXNzYWdlIDogJycpO1xuICAgICAgICBpZiAodGhpcy5pbnB1dFRleHQ/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2xpdmVBbm5vdW5jZXIuYW5ub3VuY2UodGhpcy5fY3VycmVudFNlYXJjaFN1Z2dlc3Rpb25Bbm5vdWNlbWVudE1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGFzeW5jIF9zZXRVcE1vYmlsZU1vZGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogU0VBUkNIX0ZJRUxEX0NPTVBPTkVOVCwgdXNlVmFsdWU6IHRoaXMgfV0sXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuX2luamVjdG9yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmNyZWF0ZUR5bmFtaWNNb2R1bGUoXG4gICAgICAgICAgICB7IGlucHV0RmllbGRUZW1wbGF0ZTogdGhpcy5pbnB1dEZpZWxkVGVtcGxhdGUsIHN1Z2dlc3Rpb25NZW51VGVtcGxhdGU6IHRoaXMuc3VnZ2VzdGlvbk1lbnVUZW1wbGF0ZSB9LFxuICAgICAgICAgICAgUGxhdGZvcm1TZWFyY2hGaWVsZE1vYmlsZU1vZHVsZSxcbiAgICAgICAgICAgIFNlYXJjaEZpZWxkTW9iaWxlQ29tcG9uZW50LFxuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgICAgIGluamVjdG9yXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgbmFtZTogJ3N1Z2dlc3Rpb25NYXRjaGVzJ1xufSlcbmV4cG9ydCBjbGFzcyBTdWdnZXN0aW9uTWF0Y2hlc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRyYW5zZm9ybSh2YWx1ZXM6IHN0cmluZ1tdIHwgbnVsbCwgbWF0Y2g6IHN0cmluZywgbW9iaWxlID0gZmFsc2UpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9iaWxlICYmICFtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9jZXNzZWRNYXRjaCA9IG1hdGNoLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gdmFsdWVzLmZpbHRlcigodmFsdWUpID0+IHZhbHVlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihwcm9jZXNzZWRNYXRjaCkgPiAtMSk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1vYmlsZSA/IG1vYmlsZVRlbXBsYXRlIDogaW5wdXRGaWVsZFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbW9iaWxlVGVtcGxhdGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0RmllbGRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzZWFyY2hDYXRlZ29yeU1lbnU+XG4gICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImZkcC1zZWFyY2gtZmllbGRfX2NhdGVnb3J5LWJ1dHRvbiBmZC1pbnB1dC1ncm91cF9fYnV0dG9uIGZkLWJ1dHRvbiBmZC1idXR0b24tLW1lbnUge3tcbiAgICAgICAgICAgIGFwcGVhcmFuY2U/LmNhdGVnb3J5QnV0dG9uQ2xhc3NcbiAgICAgICAgfX1cIlxuICAgICAgICBbZmRwTWVudVRyaWdnZXJGb3JdPVwiY2F0ZWdvcnlNZW51XCJcbiAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmRwLXNlYXJjaC1maWVsZF9fY2F0ZWdvcnktbGFiZWxcIiAqbmdJZj1cIiFoaWRlQ2F0ZWdvcnlMYWJlbFwiPlxuICAgICAgICAgICAge3sgX2N1cnJlbnRDYXRlZ29yeT8ubGFiZWwgfHwgY2F0ZWdvcnlMYWJlbCB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGZkcC1tZW51ICNjYXRlZ29yeU1lbnU+XG4gICAgICAgIDxmZHAtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzXCIgKGl0ZW1TZWxlY3QpPVwic2V0Q3VycmVudENhdGVnb3J5KGNhdGVnb3J5KVwiXG4gICAgICAgICAgICA+e3sgY2F0ZWdvcnkubGFiZWwgfX1cbiAgICAgICAgPC9mZHAtbWVudS1pdGVtPlxuICAgIDwvZmRwLW1lbnU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NlYXJjaENhdGVnb3J5U2VsZWN0PlxuICAgIDxmZC1zZWxlY3RcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNhdGVnb3J5TGFiZWxcIlxuICAgICAgICBbc2VsZWN0Q29udHJvbENsYXNzXT1cImFwcGVhcmFuY2U/LmNhdGVnb3J5QnV0dG9uQ2xhc3NcIlxuICAgICAgICBbc2VsZWN0RHJvcGRvd25CdXR0b25DbGFzc109XCJhcHBlYXJhbmNlPy5jYXRlZ29yeURyb3Bkb3duQnV0dG9uQ2xhc3NcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwic2V0Q3VycmVudENhdGVnb3J5KCRldmVudClcIlxuICAgID5cbiAgICAgICAgPGxpIGZkLW9wdGlvbiAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllc1wiIFt2YWx1ZV09XCJjYXRlZ29yeVwiPnt7IGNhdGVnb3J5LmxhYmVsIH19PC9saT5cbiAgICA8L2ZkLXNlbGVjdD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5wdXRGaWVsZFRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZHAtc2VhcmNoLWZpZWxkXCJcbiAgICAgICAgW2NsYXNzLndpdGgtY2F0ZWdvcmllc109XCJfc2hvd0NhdGVnb3J5RHJvcGRvd25cIlxuICAgICAgICBbY2xhc3MuaXMtbG9hZGluZ109XCJpc0xvYWRpbmdcIlxuICAgICAgICBbY2xhc3MuaXMtY29tcGFjdF09XCJjb250ZW50RGVuc2l0eU9ic2VydmVyLmlzQ29tcGFjdCQgfCBhc3luY1wiXG4gICAgICAgIFtjbGFzcy5oaWRlLWNhdGVnb3J5LWxhYmVsXT1cImhpZGVDYXRlZ29yeUxhYmVsXCJcbiAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICNpbnB1dEdyb3VwXG4gICAgICAgICAgICBjbGFzcz1cImZkcC1zZWFyY2gtZmllbGRfX2lucHV0LWdyb3VwIGZkLWlucHV0LWdyb3VwIHt7IGFwcGVhcmFuY2U/LnNlYXJjaENsYXNzIH19XCJcbiAgICAgICAgICAgIFtjbGFzcy5pcy1mb2N1c109XCJpc0ZvY3VzZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2FkZG9uIGZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uIHt7IGFwcGVhcmFuY2U/LnNlYXJjaENhdGVnb3J5Q2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiX3Nob3dDYXRlZ29yeURyb3Bkb3duXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYXRlZ29yeU1vZGUgPT09ICdzZWxlY3QnID8gc2VhcmNoQ2F0ZWdvcnlTZWxlY3QgOiBzZWFyY2hDYXRlZ29yeU1lbnVcIlxuICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgI2lucHV0RmllbGRcbiAgICAgICAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtc2VhcmNoLWZpZWxkX19pbnB1dCBmZC1pbnB1dCBmZC1pbnB1dC1ncm91cF9faW5wdXQge3sgYXBwZWFyYW5jZT8uc2VhcmNoRmllbGRDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiX2lucHV0SWRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIl9tZW51SWRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiX3Nob3dEcm9wZG93biA/ICd0cnVlJyA6ICdmYWxzZSdcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvblNlYXJjaFN1Ym1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucHV0VGV4dFwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibW9iaWxlICYmIG9wZW5Nb2JpbGVNb2RlKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1pbnB1dC1ncm91cF9fYWRkb24gZmQtaW5wdXQtZ3JvdXBfX2FkZG9uLS1idXR0b24ge3sgYXBwZWFyYW5jZT8uYWRkb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpbnB1dFRleHQgJiYgaW5wdXRUZXh0Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVNlYXJjaEZpZWxkLmNsZWFyQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1zZWFyY2gtZmllbGRfX2NsZWFyIGZkLWJ1dHRvbiBmZC1idXR0b24tLXRyYW5zcGFyZW50IHt7IGFwcGVhcmFuY2U/LmJ1dHRvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLWlucHV0LWdyb3VwX19idXR0b25dPVwiIWFwcGVhcmFuY2U/LnJlbW92ZUdyb3VwQnV0dG9uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cIl9jbGVhcklkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyVGV4dElucHV0KClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGZkLWljb24gZ2x5cGg9XCJkZWNsaW5lXCI+PC9mZC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0LWdyb3VwX19hZGRvbiBmZC1pbnB1dC1ncm91cF9fYWRkb24tLWJ1dHRvbiB7eyBhcHBlYXJhbmNlPy5hZGRvbkNsYXNzIH19IHt7XG4gICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U/LnNlYXJjaFN1Ym1pdENsYXNzXG4gICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9yY2VTZWFyY2hCdXR0b24gfHwgaXNMb2FkaW5nIHx8ICghaXNMb2FkaW5nICYmICFfaXNTZWFyY2hEb25lKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkaXNhYmxlU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVNlYXJjaEZpZWxkLnN1Ym1pdEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtc2VhcmNoLWZpZWxkX19zdWJtaXQgZmQtYnV0dG9uIGZkLWJ1dHRvbi0tdHJhbnNwYXJlbnQge3sgYXBwZWFyYW5jZT8uYnV0dG9uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtaW5wdXQtZ3JvdXBfX2J1dHRvbl09XCIhYXBwZWFyYW5jZT8ucmVtb3ZlR3JvdXBCdXR0b25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cIl9zdWJtaXRJZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VhcmNoU3VibWl0KClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGZkLWljb24gZ2x5cGg9XCJzZWFyY2hcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2FkZG9uIGZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uIHt7IGFwcGVhcmFuY2U/LmFkZG9uQ2xhc3MgfX0ge3tcbiAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT8uc2VhcmNoU3VibWl0Q2xhc3NcbiAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhZGlzYWJsZVJlZnJlc2ggJiYgIWlzTG9hZGluZyAmJiAoX2lzUmVmcmVzaCB8fCBfaXNTZWFyY2hEb25lKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtU2VhcmNoRmllbGQuc3luY2hyb25pemVCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXNlYXJjaC1maWVsZF9fbG9hZGluZyBmZC1pbnB1dC1ncm91cF9fYnV0dG9uIGZkLWJ1dHRvbiBmZC1idXR0b24tLXRyYW5zcGFyZW50IHt7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPy5idXR0b25DbGFzc1xuICAgICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiX3JlZnJlc2hJZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlYXJjaFN1Ym1pdCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIGdseXBoPVwic3luY2hyb25pemVcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzdWdnZXN0aW9uTWVudVRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZHAtc2VhcmNoLWZpZWxkX19zdWdnZXN0aW9uLWRyb3Bkb3duXCJcbiAgICAgICAgW2F0dHIuZGlyXT1cIl9kaXJcIlxuICAgICAgICAqbmdJZj1cIihfZHJvcGRvd25WYWx1ZXMkIHwgYXN5bmMgfCBzdWdnZXN0aW9uTWF0Y2hlcyA6IGlucHV0VGV4dCA6IG1vYmlsZSk/Lmxlbmd0aFwiXG4gICAgPlxuICAgICAgICA8bmF2XG4gICAgICAgICAgICBjbGFzcz1cImZkLW1lbnVcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICBbY2xhc3MuaXMtY29tcGFjdF09XCJjb250ZW50RGVuc2l0eU9ic2VydmVyLmlzQ29tcGFjdCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbY2xhc3MuZmQtbWVudS0tbW9iaWxlXT1cIm1vYmlsZVwiXG4gICAgICAgICAgICBbY2xhc3MuZmQtbWVudS0tb3ZlcmZsb3ddPVwiIW1vYmlsZVwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJfbWVudUlkXCJcbiAgICAgICAgICAgICNtZW51XG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImZkLW1lbnVfX2xpc3RcIiByb2xlPVwibWVudVwiPlxuICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICBmZHBTZWFyY2hGaWVsZFN1Z2dlc3Rpb25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtc2VhcmNoLWZpZWxkX19zdWdnZXN0aW9uLWl0ZW0gZmQtbWVudV9faXRlbSBmZC1tZW51X19saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZhbHVlIG9mIF9kcm9wZG93blZhbHVlcyQgfCBhc3luYyB8IHN1Z2dlc3Rpb25NYXRjaGVzIDogaW5wdXRUZXh0IDogbW9iaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25JdGVtQ2xpY2sodmFsdWUpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnRhYik9XCJvbkl0ZW1DbGljayh2YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5dXAuc3BhY2UpPVwib25JdGVtQ2xpY2sodmFsdWUpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2sodmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJ2YWx1ZSB8IGhpZ2hsaWdodCA6IGlucHV0VGV4dCA6IHRydWUgOiB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICAgICAgICA+PC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbmF2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
620
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9zZWFyY2gtZmllbGQvc2VhcmNoLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9zZWFyY2gtZmllbGQvc2VhcmNoLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBRUosU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBcUIsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzdGLE9BQU8sRUFBbUIsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVwRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEYsT0FBTyxFQUNILHNCQUFzQixFQUV6QixNQUFNLHFEQUFxRCxDQUFDO0FBQzdELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQzlHLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ25HLE9BQU8sRUFBYyxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoSCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU5RSxPQUFPLEtBQUssTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQXlCcEMsTUFBTSxPQUFPLDhCQUE4QjtJQUN2QyxjQUFjO0lBQ2QsWUFBb0IsT0FBbUI7UUFBbkIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtJQUFHLENBQUM7SUFFM0MsY0FBYztJQUNkLEtBQUs7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QyxDQUFDOzhHQVBRLDhCQUE4QjtrR0FBOUIsOEJBQThCOzsyRkFBOUIsOEJBQThCO2tCQVAxQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLElBQUksRUFBRTt3QkFDRixRQUFRLEVBQUUsSUFBSTt3QkFDZCxJQUFJLEVBQUUsV0FBVztxQkFDcEI7aUJBQ0o7O0FBV0QsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFrQjNCLE1BQU0sT0FBTyxvQkFDVCxTQUFRLGFBQWE7SUFPckIsMkNBQTJDO0lBQzNDLElBQ0ksVUFBVSxDQUFDLEtBQWlCO1FBQzVCLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDL0IsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFzQkQsdUVBQXVFO0lBQ3ZFLElBQ0ksV0FBVyxDQUFDLEtBQXNEO1FBQ2xFLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0QixrRUFBa0U7WUFDbEUsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQTBCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzlDO2FBQU0sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQzlCLEdBQUcsQ0FBQyxDQUFDLFdBQTZCLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUM1RixDQUFDO1NBQ0w7YUFBTTtZQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbEM7SUFDTCxDQUFDO0lBQ0QsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsSUFDSSxVQUFVLENBQUMsS0FBaUM7UUFDNUMsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDckM7SUFDTCxDQUFDO0lBQ0QsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFNRCwwQkFBMEI7SUFDMUIsSUFDSSxVQUFVLENBQUMsS0FBdUI7UUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUNELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBZ0NEOzs7T0FHRztJQUNILElBQ0ksdUJBQXVCLENBQUMsS0FBYTtRQUNyQyxRQUFRLENBQUMsZ0ZBQWdGLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLHVCQUF1QjtRQUN2QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQ0ksK0JBQStCLENBQUMsS0FBYTtRQUM3QyxRQUFRLENBQUMsd0ZBQXdGLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsZ0NBQWdDLEdBQUcsS0FBSyxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFJLCtCQUErQjtRQUMvQixPQUFPLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQztJQUNqRCxDQUFDO0lBOENELGNBQWM7SUFDZCxJQUFJLGdCQUFnQjtRQUNoQixPQUFPO1lBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3BCLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxJQUFJLElBQUk7U0FDakQsQ0FBQztJQUNOLENBQUM7SUFDRCwwQkFBMEI7SUFDMUIsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQztJQUM1RSxDQUFDO0lBNEZELGNBQWM7SUFDZCxZQUNXLFVBQW1DLEVBQ3pCLFFBQWlCLEVBQ2pCLGlCQUFtQyxFQUNuQyxTQUFtQixFQUNqQixHQUFzQixFQUNaLElBQWdCLEVBQ1YsU0FBbUIsRUFDaEIsVUFBa0MsRUFDdkQsY0FBNkIsRUFDckMsd0JBQWlELEVBQ2pELHNCQUE4QztRQUV2RCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFaSixlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNqQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUNaLFNBQUksR0FBSixJQUFJLENBQVk7UUFDVixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ2hCLGVBQVUsR0FBVixVQUFVLENBQXdCO1FBQ3ZELG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQ3JDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBeUI7UUFDakQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQTdTM0QsZ0VBQWdFO1FBRWhFLGlCQUFZLEdBQXNCLE1BQU0sQ0FBQztRQTZCekMscUNBQXFDO1FBRXJDLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXZCLG9DQUFvQztRQUVwQyxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQW1EdEIsOENBQThDO1FBRTlDLGtCQUFhLEdBQUcsVUFBVSxDQUFDO1FBRTNCLHFDQUFxQztRQUVyQyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFFMUIsNkJBQTZCO1FBRTdCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUE2Q2xCLDRDQUE0QztRQUU1QyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFFMUIsMEJBQTBCO1FBRTFCLGdCQUFXLEdBQThCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUQsMkJBQTJCO1FBRTNCLGlCQUFZLEdBQThCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFN0QsMkJBQTJCO1FBRTNCLGlCQUFZLEdBQThCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFN0QsOEJBQThCO1FBRTlCLGlCQUFZLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFzQ2xFOzs7V0FHRztRQUNILHFCQUFnQixHQUF5QixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFRaEQ7OztXQUdHO1FBQ0gsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFdEI7OztXQUdHO1FBQ0gsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBRTlCLGNBQWM7UUFDZCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBRWQsY0FBYztRQUNkLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFFZixjQUFjO1FBQ2QsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUViLGNBQWM7UUFDZCxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBRWhCLGNBQWM7UUFDZCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBRWQsY0FBYztRQUNkLFNBQUksR0FBYyxLQUFLLENBQUM7UUFFeEIsY0FBYztRQUNkLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFZixjQUFjO1FBQ2QsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQixjQUFjO1FBQ2Qsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFpQnRCLGNBQWM7UUFDTiwrQ0FBMEMsR0FBRyxFQUFFLENBQUM7UUFXeEQsY0FBYztRQUNOLHlCQUFvQixHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUV6RCxjQUFjO1FBQ0csZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRW5ELGNBQWM7UUFDRyx3QkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBb0IzRCxDQUFDO0lBRUQsY0FBYztJQUVkLGFBQWEsQ0FBQyxLQUFvQjtRQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7WUFDbEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQjtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2QsUUFBUTtRQUNKLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxNQUFNLFVBQVUsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxNQUFNLFdBQVcsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO1FBQzVELElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxNQUFNLFNBQVMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO1FBRXhELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXZCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUU7Z0JBQ3pFLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLFlBQVksSUFBSSxPQUFPLElBQUksaUJBQWlCLElBQUksT0FBTyxFQUFFO1lBQ3pELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDakQ7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM1QixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztTQUNyQztRQUNELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxTQUFTLENBQUMsS0FBb0I7UUFDMUIsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLE9BQU87U0FDVjtRQUVELElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRTtZQUNsRCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMvQztTQUNKO2FBQU0sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7WUFDM0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxLQUFhO1FBQ3ZCLDREQUE0RDtRQUM1RCw0REFBNEQ7UUFDNUQsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFFeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUM3QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDekI7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3QyxNQUFNLFFBQVEsR0FBVyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNkLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzdCO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7WUFDeEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQztZQUU1RCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNoQztRQUVELElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsS0FBYTtRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxDQUFDLEtBQWE7UUFDeEIsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pCLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTlDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXZCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUM3QjtRQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsa0JBQWtCLENBQUMsZUFBK0I7UUFDOUMsSUFBSSxDQUFDLGdCQUFnQjtZQUNqQixlQUFlO2dCQUNmLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUNqQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxlQUFlLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssZUFBZSxDQUFDLEtBQUssQ0FDckcsQ0FBQztRQUVOLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQjtRQUNkLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixPQUFPO1NBQ1Y7UUFFRCxpQkFBaUI7UUFDakIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFDM0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWpFLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFMUQsNkNBQTZDO1FBQzdDLFNBQVMsQ0FBYSxRQUFRLEVBQUUsT0FBTyxDQUFDO2FBQ25DLElBQUksQ0FDRCxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNiLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO1lBQzNDLE9BQU8sQ0FDSCxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQjtnQkFDNUIsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQzNELElBQUksQ0FBQyxhQUFhLENBQ3JCLENBQUM7UUFDTixDQUFDLENBQUMsRUFDRixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDOUI7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQztZQUMzQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0UsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVELGNBQWM7SUFDZCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsY0FBYztJQUNkLGFBQWE7UUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsY0FBYztJQUNkLGFBQWE7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxjQUFjO0lBQ2QsVUFBVSxDQUFDLE1BQWU7UUFDdEIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRTtZQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUVyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNsQztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2QsbUJBQW1CLENBQUMsS0FBSyxHQUFHLElBQUk7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM3QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEMsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDaEI7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQsY0FBYztJQUNkLGNBQWM7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTlDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTNCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELGNBQWM7SUFDZCw2QkFBNkI7UUFDekIsTUFBTSxTQUFTLEdBQXdCO1lBQ25DO2dCQUNJLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixPQUFPLEVBQUUsUUFBUTtnQkFDakIsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLFFBQVEsRUFBRSxLQUFLO2FBQ2xCO1lBQ0Q7Z0JBQ0ksT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixRQUFRLEVBQUUsUUFBUTthQUNyQjtTQUNKLENBQUM7UUFDRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRO2FBQ2pDLFFBQVEsRUFBRTthQUNWLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7YUFDcEMsa0JBQWtCLEVBQUU7YUFDcEIsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkUsT0FBTyxJQUFJLGFBQWEsQ0FBQztZQUNyQixnQkFBZ0I7WUFDaEIsY0FBYztZQUNkLGFBQWEsRUFBRSxrQ0FBa0M7WUFDakQsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFdBQVc7U0FDbkQsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWM7SUFDZCxxQkFBcUIsQ0FBQyxVQUFzQztRQUN4RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEMsVUFBVTthQUNMLElBQUksRUFBRTthQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQzthQUNsRSxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHFCQUFxQjtRQUN6QixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUM5RSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQ2hDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDakcsS0FBSyxFQUFFLENBQUM7aUJBQ1g7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELGNBQWM7SUFDTixLQUFLLENBQUMsNEJBQTRCO1FBQ3RDLCtDQUErQztRQUMvQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNyRCxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsK0JBQStCLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDeEUsSUFBSSx1QkFBdUIsRUFBRTtZQUN6Qix1QkFBdUIsR0FBRyxlQUFlLEdBQUcsR0FBRyxHQUFHLHVCQUF1QixDQUFDO1NBQzdFO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixJQUFJLENBQUMsK0JBQStCLEVBQUU7WUFDOUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyx1QkFBdUIsRUFBRTtnQkFDMUIsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FDdkQsSUFBSSxFQUNKLDZDQUE2QyxFQUM3QyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsQ0FDN0IsQ0FBQzthQUNMO1lBQ0QsSUFBSSxDQUFDLCtCQUErQixFQUFFO2dCQUNsQywrQkFBK0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUMvRCxJQUFJLEVBQ0oscURBQXFELENBQ3hELENBQUM7YUFDTDtTQUNKO1FBQ0QsSUFBSSxDQUFDLDBDQUEwQztZQUMzQyx1QkFBdUIsR0FBRyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsMENBQTBDLENBQUMsQ0FBQztTQUNqRjtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sS0FBSyxDQUFDLGdCQUFnQjtRQUMxQixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQzdCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNoRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDekIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHdCQUF3QixDQUFDLG1CQUFtQixDQUM3QyxFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFDcEcsK0JBQStCLEVBQy9CLDBCQUEwQixFQUMxQixJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLFFBQVEsQ0FDWCxDQUFDO0lBQ04sQ0FBQzs4R0ExcEJRLG9CQUFvQixzTUE2U2pCLFFBQVEsYUFDUixXQUFXO2tHQTlTZCxvQkFBb0IsbTRCQVJsQjtZQUNQLCtCQUErQixFQUFFO1lBQ2pDO2dCQUNJLE9BQU8sRUFBRSw0QkFBNEI7Z0JBQ3JDLFdBQVcsRUFBRSxvQkFBb0I7YUFDcEM7U0FDSix5akJBOExhLDhCQUE4Qiw0RkNwU2hELDhwT0FrS0EseWtqRUR0RmEsOEJBQThCLHdaQTRyQjlCLHFCQUFxQjs7MkZBaHFCckIsb0JBQW9CO2tCQWRoQyxTQUFTOytCQUNJLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO3dCQUNQLCtCQUErQixFQUFFO3dCQUNqQzs0QkFDSSxPQUFPLEVBQUUsNEJBQTRCOzRCQUNyQyxXQUFXLHNCQUFzQjt5QkFDcEM7cUJBQ0o7OzBCQThTSSxRQUFROzswQkFDUixNQUFNOzJCQUFDLFFBQVE7OzBCQUNmLE1BQU07MkJBQUMsV0FBVzttSkF4U3ZCLFlBQVk7c0JBRFgsS0FBSztnQkFLRixVQUFVO3NCQURiLEtBQUs7Z0JBZ0JOLFdBQVc7c0JBRFYsS0FBSztnQkFLTixNQUFNO3NCQURMLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxLQUFLO2dCQUtOLGNBQWM7c0JBRGIsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBS0YsV0FBVztzQkFEZCxLQUFLO2dCQXFCRixVQUFVO3NCQURiLEtBQUs7Z0JBWU4sU0FBUztzQkFEUixLQUFLO2dCQUtGLFVBQVU7c0JBRGIsS0FBSztnQkFXTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sYUFBYTtzQkFEWixLQUFLO2dCQUtOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBUU4sU0FBUztzQkFEUixLQUFLO2dCQVFOLGNBQWM7c0JBRGIsS0FBSztnQkFRRix1QkFBdUI7c0JBRDFCLEtBQUs7Z0JBZ0JGLCtCQUErQjtzQkFEbEMsS0FBSztnQkFZTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS04sV0FBVztzQkFEVixNQUFNO2dCQUtQLFlBQVk7c0JBRFgsTUFBTTtnQkFLUCxZQUFZO3NCQURYLE1BQU07Z0JBS1AsWUFBWTtzQkFEWCxNQUFNO2dCQUtQLGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFLaEQsVUFBVTtzQkFEVCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSzFDLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUsxQyxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUsvQixzQkFBc0I7c0JBRHJCLFNBQVM7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUt0RCxlQUFlO3NCQURkLFlBQVk7dUJBQUMsOEJBQThCO2dCQTRINUMsYUFBYTtzQkFEWixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7QUF5V3ZDLE1BQU0sT0FBTyxxQkFBcUI7SUFDOUIsY0FBYztJQUNkLFNBQVMsQ0FBQyxNQUF1QixFQUFFLEtBQWEsRUFBRSxNQUFNLEdBQUcsS0FBSztRQUM1RCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsTUFBTSxHQUFHLEVBQUUsQ0FBQztTQUNmO1FBQ0QsSUFBSSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDbEIsT0FBTyxNQUFNLENBQUM7U0FDakI7UUFDRCxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQzs4R0FYUSxxQkFBcUI7NEdBQXJCLHFCQUFxQjs7MkZBQXJCLHFCQUFxQjtrQkFIakMsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsbUJBQW1CO2lCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBQaXBlLFxuICAgIFBpcGVUcmFuc2Zvcm0sXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgRVNDQVBFLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBDb25uZWN0ZWRQb3NpdGlvbiwgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IEZvY3VzYWJsZU9wdGlvbiwgRm9jdXNLZXlNYW5hZ2VyLCBMaXZlQW5ub3VuY2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcblxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIGZyb21FdmVudCwgaXNPYnNlcnZhYmxlLCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLCBLZXlVdGlsLCBSdGxTZXJ2aWNlLCB3YXJuT25jZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9wb3BvdmVyJztcbmltcG9ydCB7IE1vYmlsZU1vZGVDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgU2VhcmNoRmllbGREYXRhU291cmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHtcbiAgICBTRUFSQ0hfRklFTERfQ09NUE9ORU5ULFxuICAgIFNlYXJjaEZpZWxkTW9iaWxlSW50ZXJmYWNlXG59IGZyb20gJy4vc2VhcmNoLWZpZWxkLW1vYmlsZS9zZWFyY2gtZmllbGQtbW9iaWxlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTZWFyY2hGaWVsZE1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4vc2VhcmNoLWZpZWxkLW1vYmlsZS9zZWFyY2gtZmllbGQvc2VhcmNoLWZpZWxkLW1vYmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGxhdGZvcm1TZWFyY2hGaWVsZE1vYmlsZU1vZHVsZSB9IGZyb20gJy4vc2VhcmNoLWZpZWxkLW1vYmlsZS9zZWFyY2gtZmllbGQtbW9iaWxlLm1vZHVsZSc7XG5pbXBvcnQgeyBGZExhbmd1YWdlLCBGRF9MQU5HVUFHRSwgVHJhbnNsYXRpb25SZXNvbHZlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGRF9TSEVMTEJBUl9TRUFSQ0hfQ09NUE9ORU5UIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoZWxsYmFyJztcbmltcG9ydCB7IFNlYXJjaENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoSW5wdXQge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBjYXRlZ29yeTogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWdnZXN0aW9uSXRlbSB7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBpc0hpc3RvcmljYWw/OiBzdHJpbmc7XG4gICAgZGF0YT86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWYWx1ZUxhYmVsSXRlbSB7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tmZHBTZWFyY2hGaWVsZFN1Z2dlc3Rpb25dJyxcbiAgICBob3N0OiB7XG4gICAgICAgIHRhYmluZGV4OiAnLTEnLFxuICAgICAgICByb2xlOiAnbGlzdC1pdGVtJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoRmllbGRTdWdnZXN0aW9uRGlyZWN0aXZlIGltcGxlbWVudHMgRm9jdXNhYmxlT3B0aW9uIHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZikge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxufVxuXG5sZXQgc2VhcmNoRmllbGRJZENvdW50ID0gMDtcblxudHlwZSBBcHBlYXJhbmNlID0gU2VhcmNoQ29tcG9uZW50WydhcHBlYXJhbmNlJ10gfCB1bmRlZmluZWQ7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLXNlYXJjaC1maWVsZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoLWZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycygpLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRF9TSEVMTEJBUl9TRUFSQ0hfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFNlYXJjaEZpZWxkQ29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaEZpZWxkQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTZWFyY2hGaWVsZE1vYmlsZUludGVyZmFjZSwgU2VhcmNoQ29tcG9uZW50XG57XG4gICAgLyoqIFR5cGUgb2YgY29tcG9uZW50IHVzZWQgdG8gcmVuZGVyIHRoZSBjYXRlZ29yaWVzIGRyb3Bkb3duLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2F0ZWdvcnlNb2RlOiAnbWVudScgfCAnc2VsZWN0JyA9ICdtZW51JztcblxuICAgIC8qKiBBZGRpdGlvbmFsIGFwcGVhcmFuY2UgY29uZmlndXJhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhcHBlYXJhbmNlKHZhbHVlOiBBcHBlYXJhbmNlKSB7XG4gICAgICAgIGlmIChlcXVhbCh2YWx1ZSwgdGhpcy5hcHBlYXJhbmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYXBwZWFyYW5jZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGFwcGVhcmFuY2UoKTogQXBwZWFyYW5jZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBlYXJhbmNlO1xuICAgIH1cblxuICAgIC8qKiBQbGFjZWhvbGRlciB0ZXh0IGZvciBzZWFyY2ggaW5wdXQgZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgLyoqIFNldCBNb2JpbGUgTW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlOiBib29sZWFuO1xuXG4gICAgLyoqIFNlYXJjaCBGaWVsZCBNb2JpbGUgY29uZmlndXJhdGlvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlQ29uZmlnOiBNb2JpbGVNb2RlQ29uZmlnO1xuXG4gICAgLyoqIFdoZXRoZXIgZGlzcGxheSBSZWZyZXNoIGJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVJlZnJlc2ggPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIGRpc3BsYXkgc2VhcmNoIGJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVNlYXJjaCA9IGZhbHNlO1xuXG4gICAgLyoqIExpc3Qgb2Ygc3RyaW5nIHZhbHVlcyB0byBwb3B1bGF0ZSBzdWdnZXN0aW9uIGRyb3Bkb3duIHNlbGVjdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdWdnZXN0aW9ucyh2YWx1ZTogU3VnZ2VzdGlvbkl0ZW1bXSB8IE9ic2VydmFibGU8U3VnZ2VzdGlvbkl0ZW1bXT4pIHtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnMgPSB2YWx1ZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBjb252ZXJ0IHN1Z2dlc3Rpb25zIHRvIGFuIGFycmF5IG9mIHN0cmluZyBmb3IgXCJkcm9wZG93biB2YWx1ZXNcIlxuICAgICAgICAgICAgY29uc3QgZHJvcGRvd25WYWx1ZXMgPSB2YWx1ZS5tYXAoKHN1Z2dlc3Rpb246IFN1Z2dlc3Rpb25JdGVtKSA9PiBzdWdnZXN0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2Ryb3Bkb3duVmFsdWVzJCA9IG9mKGRyb3Bkb3duVmFsdWVzKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLl9kcm9wZG93blZhbHVlcyQgPSB2YWx1ZS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25JdGVtW10pID0+IHN1Z2dlc3Rpb25zLm1hcCgoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi52YWx1ZSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZHJvcGRvd25WYWx1ZXMkID0gb2YoW10pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzdWdnZXN0aW9ucygpOiBTdWdnZXN0aW9uSXRlbVtdIHwgT2JzZXJ2YWJsZTxTdWdnZXN0aW9uSXRlbVtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0aW9ucztcbiAgICB9XG5cbiAgICAvKiogRGF0YXNvdXJjZSBmb3Igc3VnZ2VzdGlvbiBsaXN0ICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogU2VhcmNoRmllbGREYXRhU291cmNlPGFueT4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplRGF0YVNvdXJjZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGRhdGFTb3VyY2UoKTogU2VhcmNoRmllbGREYXRhU291cmNlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKiogSW5pdGlhbCBpbnB1dCB0ZXh0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5wdXRUZXh0OiBzdHJpbmc7XG5cbiAgICAvKiogTGlzdCBvZiBjYXRlZ29yaWVzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNhdGVnb3JpZXModmFsdWU6IFZhbHVlTGFiZWxJdGVtW10pIHtcbiAgICAgICAgdGhpcy5fY2F0ZWdvcmllcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9zaG93Q2F0ZWdvcnlEcm9wZG93biA9IEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIGdldCBjYXRlZ29yaWVzKCk6IFZhbHVlTGFiZWxJdGVtW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcmllcztcbiAgICB9XG5cbiAgICAvKiogQ3VycmVudCBjYXRlZ29yeSwgdmFsdWUgc2hvdWxkIGJlIHByZXNlbnQgaW4gY2F0ZWdvcmllcyBhcnJheSAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VycmVudENhdGVnb3J5OiBWYWx1ZUxhYmVsSXRlbTtcblxuICAgIC8qKiBTZXQgbGFiZWwgZm9yIGNhdGVnb3J5IGRyb3Bkb3duIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNhdGVnb3J5TGFiZWwgPSAnQ2F0ZWdvcnknO1xuXG4gICAgLyoqIEhpZGUgZGlzcGxheSBvZiBjYXRlZ29yeSBsYWJlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZUNhdGVnb3J5TGFiZWwgPSBmYWxzZTtcblxuICAgIC8qKiBUb2dnbGUgXCJsb2FkaW5nXCIgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQVJJQSBsYWJlbCB0byBzcGVjaWZ5IHdoYXQgdGhlIHNlYXJjaCBmaWVsZCBpc1xuICAgICAqIE5vdCBzaG93biBpbiB0aGUgVUksIG9ubHkgdmlzaWJsZSBieSB0aGUgc2NyZWVuLXJlYWRlcnMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWw6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBJZCBvZiBlbGVtZW50cyAoc2VwYXJhdGVkIGJ5IHNwYWNlKSBmb3Igc2V0dGluZyBhcmlhLWxhYmVsbGVkYnkgZm9yIHNlYXJjaCBpbnB1dFxuICAgICAqIE5vdCBzaG93biBpbiB0aGUgVUksIG9ubHkgdmlzaWJsZSBieSB0aGUgc2NyZWVuLXJlYWRlcnMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRieTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBNZXNzYWdlIGFubm91bmNlZCBieSBzY3JlZW4gcmVhZGVyLCB3aGVuIHNlYXJjaCBzdWdnZXN0aW9ucyBvcGVucy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWFyY2hTdWdnZXN0aW9uTWVzc2FnZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHdhcm5PbmNlKCdQcm9wZXJ0eSBzZWFyY2hTdWdnZXN0aW9uTWVzc2FnZSBpcyBkZXByZWNhdGVkLiBVc2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZC4nKTtcbiAgICAgICAgdGhpcy5fc2VhcmNoU3VnZ2VzdGlvbk1lc3NhZ2UgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgc2VhcmNoU3VnZ2VzdGlvbk1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFN1Z2dlc3Rpb25NZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogU2Vjb25kIHBhcnQgb2YgbWVzc2FnZSBmb3Igc2VhcmNoIHN1Z2dlc3Rpb24uXG4gICAgICogZGlyZWN0aW9uIGZvciBuYXZpZ2F0aW5nIHRoZSBzdWdnZXN0aW9uLiBUaGlzIGlzIG5vdCBuZWNlc3NyeSBpbiBjYXNlIG9mIDAgc3VnZ2VzdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWFyY2hTdWdnZXN0aW9uTmF2aWdhdGVNZXNzYWdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgd2Fybk9uY2UoJ1Byb3BlcnR5IHNlYXJjaFN1Z2dlc3Rpb25OYXZpZ2F0ZU1lc3NhZ2UgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWQuJyk7XG4gICAgICAgIHRoaXMuX3NlYXJjaFN1Z2dlc3Rpb25OYXZpZ2F0ZU1lc3NhZ2UgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgc2VhcmNoU3VnZ2VzdGlvbk5hdmlnYXRlTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoU3VnZ2VzdGlvbk5hdmlnYXRlTWVzc2FnZTtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0byBhbHdheXMgc2hvdyBzZWFyY2ggYnV0dG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZm9yY2VTZWFyY2hCdXR0b24gPSBmYWxzZTtcblxuICAgIC8qKiBJbnB1dCBjaGFuZ2UgZXZlbnQuICovXG4gICAgQE91dHB1dCgpXG4gICAgaW5wdXRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxTZWFyY2hJbnB1dD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogU2VhcmNoIHN1Ym1pdCBldmVudC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzZWFyY2hTdWJtaXQ6IEV2ZW50RW1pdHRlcjxTZWFyY2hJbnB1dD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogQ2FuY2VsIHNlYXJjaCBldmVudC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBjYW5jZWxTZWFyY2g6IEV2ZW50RW1pdHRlcjxTZWFyY2hJbnB1dD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogT3BlbiBtb2JpbGUgbW9kZSBldmVudC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBpc09wZW5DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnY2F0ZWdvcnlEcm9wZG93bicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIGNhdGVnb3J5RHJvcGRvd246IFBvcG92ZXJDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0R3JvdXAnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBpbnB1dEdyb3VwOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRGaWVsZCcsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIGlucHV0RmllbGQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdpbnB1dEZpZWxkVGVtcGxhdGUnKVxuICAgIGlucHV0RmllbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnc3VnZ2VzdGlvbk1lbnVUZW1wbGF0ZScsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHN1Z2dlc3Rpb25NZW51VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oU2VhcmNoRmllbGRTdWdnZXN0aW9uRGlyZWN0aXZlKVxuICAgIHN1Z2dlc3Rpb25JdGVtczogUXVlcnlMaXN0PFNlYXJjaEZpZWxkU3VnZ2VzdGlvbkRpcmVjdGl2ZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBzZWFyY2hGaWVsZFZhbHVlKCk6IFNlYXJjaElucHV0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMuaW5wdXRUZXh0LFxuICAgICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuX2N1cnJlbnRDYXRlZ29yeT8udmFsdWUgfHwgbnVsbFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiBGb2N1cyBzdGF0ZSAqL1xuICAgIGdldCBpc0ZvY3VzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kb2N1bWVudD8uYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5pbnB1dEZpZWxkPy5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9ic2VydmFibGUgbGlzdCBvZiBzdHJpbmcgdmFsdWVzIHRha2VuIGZyb20gYHN1Z2dlc3Rpb25zYCB0byBwb3B1bGF0ZSBkcm9wZG93biBtZW51LlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBfZHJvcGRvd25WYWx1ZXMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiA9IG9mKFtdKTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnRseSBzZXQgY2F0ZWdvcnkuXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIF9jdXJyZW50Q2F0ZWdvcnk/OiBWYWx1ZUxhYmVsSXRlbTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRvIHNob3cgdHlwZWFoZWFkIGRyb3Bkb3duLlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBfc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBzaG93IGNhdGVnb3J5IGRyb3Bkb3duLiBUaGlzIGlzIGRlcGVuZGVudCBvbiBsZW5ndGggb2YgYGNhdGVnb3J5VmFsdWVzYCBwcm9wZXJ0eS5cbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgX3Nob3dDYXRlZ29yeURyb3Bkb3duID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pbnB1dElkID0gJyc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zdWJtaXRJZCA9ICcnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbWVudUlkID0gJyc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9yZWZyZXNoSWQgPSAnJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NsZWFySWQgPSAnJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2RpcjogRGlyZWN0aW9uID0gJ2x0cic7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGlzT3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNSZWZyZXNoID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc1NlYXJjaERvbmUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VhcmNoU3VnZ2VzdGlvbk1lc3NhZ2U6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VhcmNoU3VnZ2VzdGlvbk5hdmlnYXRlTWVzc2FnZTogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWdnZXN0aW9uczogU3VnZ2VzdGlvbkl0ZW1bXSB8IE9ic2VydmFibGU8U3VnZ2VzdGlvbkl0ZW1bXT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RhdGFTb3VyY2U6IFNlYXJjaEZpZWxkRGF0YVNvdXJjZTxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYXRlZ29yaWVzOiBWYWx1ZUxhYmVsSXRlbVtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jdXJyZW50U2VhcmNoU3VnZ2VzdGlvbkFubm91Y2VtZW50TWVzc2FnZSA9ICcnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWdnZXN0aW9uT3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1Z2dlc3Rpb25Qb3J0YWw6IFRlbXBsYXRlUG9ydGFsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWdnZXN0aW9ua2V5TWFuYWdlcjogRm9jdXNLZXlNYW5hZ2VyPFNlYXJjaEZpZWxkU3VnZ2VzdGlvbkRpcmVjdGl2ZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RyYW5zbGF0aW9uUmVzb2x2ZXIgPSBuZXcgVHJhbnNsYXRpb25SZXNvbHZlcigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGF0YVNvdXJjZUNoYW5nZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXBwZWFyYW5jZTogQXBwZWFyYW5jZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsOiBSdGxTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IF9kb2N1bWVudDogRG9jdW1lbnQsXG4gICAgICAgIEBJbmplY3QoRkRfTEFOR1VBR0UpIHByaXZhdGUgcmVhZG9ubHkgX2xhbmd1YWdlJDogT2JzZXJ2YWJsZTxGZExhbmd1YWdlPixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfbGl2ZUFubm91bmNlcjogTGl2ZUFubm91bmNlcixcbiAgICAgICAgcmVhZG9ubHkgX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlOiBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgICAgICAgcmVhZG9ubHkgY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlclxuICAgICkge1xuICAgICAgICBzdXBlcihfY2QpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUgJiYgdGhpcy5pc09wZW4gJiYgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFU0NBUEVdKSkge1xuICAgICAgICAgICAgdGhpcy5zaG93RGlhbG9nKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJhc2VJZCA9ICdmZHAtc2VhcmNoLWZpZWxkJztcbiAgICAgICAgdGhpcy5faW5wdXRJZCA9IGAke2Jhc2VJZH0taW5wdXQtJHtzZWFyY2hGaWVsZElkQ291bnQrK31gO1xuICAgICAgICB0aGlzLl9zdWJtaXRJZCA9IGAke2Jhc2VJZH0tc3VibWl0LSR7c2VhcmNoRmllbGRJZENvdW50Kyt9YDtcbiAgICAgICAgdGhpcy5fbWVudUlkID0gYCR7YmFzZUlkfS1tZW51LSR7c2VhcmNoRmllbGRJZENvdW50Kyt9YDtcblxuICAgICAgICB0aGlzLl9pc1JlZnJlc2ggPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLl9ydGwpIHtcbiAgICAgICAgICAgIHRoaXMuX3J0bC5ydGwucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoaXNSdGw6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaXIgPSBpc1J0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFVwTW9iaWxlTW9kZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICgnY2F0ZWdvcmllcycgaW4gY2hhbmdlcyB8fCAnY3VycmVudENhdGVnb3J5JyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnNldEN1cnJlbnRDYXRlZ29yeSh0aGlzLmN1cnJlbnRDYXRlZ29yeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fc3VnZ2VzdGlvbk92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1Z2dlc3Rpb25PdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIHRoaXMuX3N1Z2dlc3Rpb25PdmVybGF5UmVmID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdWdnZXN0aW9ua2V5TWFuYWdlcj8uZGVzdHJveSgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgdGhlIHNlYXJjaCBpbnB1dCBmaWVsZC5cbiAgICAgKi9cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBDYXB0dXJpbmcgb25LZXlkb3duIG9mIGlucHV0IGVsZW1lbnQgKi9cbiAgICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbVVBfQVJST1csIERPV05fQVJST1ddKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3N1Z2dlc3Rpb25rZXlNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbmtleU1hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VTQ0FQRV0pKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlU3VnZ2VzdGlvbk1lbnUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXB0dXJpbmcgdmFsdWUgY2hhbmdlIGluIGlucHV0IHRleHQgZmllbGQgb2YgY29tYm9ib3guXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uVmFsdWVDaGFuZ2UoZXZlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICAvLyB3aGVuIHNlYXJjaCByZXN1bHQgbm90IGNoYW5nZWQgYnV0IGlucHV0IHRleHQgaXMgY2hhbmdlZC5cbiAgICAgICAgLy8gYWdhaW4gbmVlZCB0byBhbm5vdW5jZSB0aGUgcmVzdWx0LCBzbyBjbGVhciB0aGlzIG1lc3NhZ2UuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuX2N1cnJlbnRTZWFyY2hTdWdnZXN0aW9uQW5ub3VjZW1lbnRNZXNzYWdlID0gJycpKTtcbiAgICAgICAgdGhpcy5faXNTZWFyY2hEb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzUmVmcmVzaCA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSAmJiAhdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub3Blbk1vYmlsZU1vZGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdCh0aGlzLnNlYXJjaEZpZWxkVmFsdWUpO1xuICAgICAgICBjb25zdCBpbnB1dFN0cjogc3RyaW5nID0gZXZlbnQudHJpbSgpO1xuICAgICAgICBpZiAoaW5wdXRTdHIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlU3VnZ2VzdGlvbk1lbnUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMub3BlblN1Z2dlc3Rpb25NZW51KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIG1hdGNoLnNldCgna2V5d29yZCcsIGlucHV0U3RyKTtcbiAgICAgICAgICAgIG1hdGNoLnNldCgnY2F0ZWdvcnknLCB0aGlzLl9jdXJyZW50Q2F0ZWdvcnk/LnZhbHVlIHx8IG51bGwpO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UubWF0Y2gobWF0Y2gpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlU2VhcmNoQW5ub3VjZW1lbnRUZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FwdHVyaW5nIGl0ZW0gc2VsZWN0aW9uIGZyb20gZHJvcGRvd24gbWVudSBvZiBjb21ib2JveC5cbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25JdGVtQ2xpY2soZXZlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9IGV2ZW50O1xuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQodGhpcy5zZWFyY2hGaWVsZFZhbHVlKTtcbiAgICAgICAgdGhpcy5zZWFyY2hTdWJtaXQuZW1pdCh0aGlzLnNlYXJjaEZpZWxkVmFsdWUpO1xuICAgICAgICB0aGlzLmNsb3NlU3VnZ2VzdGlvbk1lbnUoKTtcbiAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dEaWFsb2coZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzU2VhcmNoRG9uZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayBmdW5jdGlvbiB3aGljaCBnZXRzIGV4ZWN1dGVkIG9uIGtleWJvYXJkIGVudGVyIG9mIGlucHV0IHRleHQgZmllbGQuXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uU2VhcmNoU3VibWl0KGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbFNlYXJjaC5lbWl0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlYXJjaFN1Ym1pdC5lbWl0KHRoaXMuc2VhcmNoRmllbGRWYWx1ZSk7XG5cbiAgICAgICAgdGhpcy5faXNSZWZyZXNoID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5pbnB1dFRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzU2VhcmNoRG9uZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsb3NlU3VnZ2VzdGlvbk1lbnUoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgY3VycmVudCBjYXRlZ29yeS5cbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0Q3VycmVudENhdGVnb3J5KGN1cnJlbnRDYXRlZ29yeTogVmFsdWVMYWJlbEl0ZW0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudENhdGVnb3J5ID1cbiAgICAgICAgICAgIGN1cnJlbnRDYXRlZ29yeSAmJlxuICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzPy5maW5kKFxuICAgICAgICAgICAgICAgIChjYXRlZ29yeSkgPT4gY2F0ZWdvcnkubGFiZWwgPT09IGN1cnJlbnRDYXRlZ29yeS5sYWJlbCAmJiBjYXRlZ29yeS52YWx1ZSA9PT0gY3VycmVudENhdGVnb3J5LnZhbHVlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdCh0aGlzLnNlYXJjaEZpZWxkVmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW4gc3VnZ2VzdGlvbiBtZW51XG4gICAgICovXG4gICAgb3BlblN1Z2dlc3Rpb25NZW51KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlU3VnZ2VzdGlvbk1lbnUoKTtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbmtleU1hbmFnZXI/LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbmtleU1hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyKHRoaXMuc3VnZ2VzdGlvbkl0ZW1zKTtcbiAgICAgICAgaWYgKHRoaXMuX3Nob3dEcm9wZG93bikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3JlYXRlIG92ZXJsYXlcbiAgICAgICAgY29uc3Qgb3ZlcmxheUNvbmZpZyA9IHRoaXMuX2NyZWF0ZVN1Z2dldGlvbk92ZXJsYXlDb25maWcoKTtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbk92ZXJsYXlSZWYgPSB0aGlzLl9vdmVybGF5LmNyZWF0ZShvdmVybGF5Q29uZmlnKTtcblxuICAgICAgICAvLyBnZXQgcG9ydGFsIHRvIGF0dGFjaCB0byBvdmVybGF5XG4gICAgICAgIHRoaXMuX3N1Z2dlc3Rpb25Qb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5zdWdnZXN0aW9uTWVudVRlbXBsYXRlLCB0aGlzLl92aWV3Q29udGFpbmVyUmVmKTtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbk92ZXJsYXlSZWYuYXR0YWNoKHRoaXMuX3N1Z2dlc3Rpb25Qb3J0YWwpO1xuXG4gICAgICAgIC8vIGFkZCBzdWJzY3JpcHRpb24gdG8gY2FwdHVyZSBvdXRzaWRlIGNsaWNrc1xuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdjbGljaycpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICEhdGhpcy5fc3VnZ2VzdGlvbk92ZXJsYXlSZWYgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLl9zdWdnZXN0aW9uT3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5jb250YWlucyh0YXJnZXQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaG93RHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9jdXMgPSAhKHRhcmdldC50YWdOYW1lID09PSAnSU5QVVQnICYmIHRoaXMuX2lucHV0SWQgIT09IHRhcmdldC5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZVN1Z2dlc3Rpb25NZW51KGZvY3VzKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3Nob3dEcm9wZG93biA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvcGVuTW9iaWxlTW9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93RGlhbG9nKHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZGlhbG9nQXBwcm92ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkl0ZW1DbGljayh0aGlzLmlucHV0VGV4dCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBkaWFsb2dEaXNtaXNzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dEaWFsb2coZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2hvd0RpYWxvZyhpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuICE9PSBpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gaXNPcGVuO1xuXG4gICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KGlzT3Blbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNsb3NlU3VnZ2VzdGlvbk1lbnUoZm9jdXMgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fc3VnZ2VzdGlvbk92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdWdnZXN0aW9uT3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjbGVhclRleHRJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQodGhpcy5zZWFyY2hGaWVsZFZhbHVlKTtcbiAgICAgICAgdGhpcy5jYW5jZWxTZWFyY2guZW1pdCh0aGlzLnNlYXJjaEZpZWxkVmFsdWUpO1xuXG4gICAgICAgIHRoaXMuX2lzUmVmcmVzaCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2lzU2VhcmNoRG9uZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY2xvc2VTdWdnZXN0aW9uTWVudShmYWxzZSk7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jcmVhdGVTdWdnZXRpb25PdmVybGF5Q29uZmlnKCk6IE92ZXJsYXlDb25maWcge1xuICAgICAgICBjb25zdCBwb3NpdGlvbnM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICBvdmVybGF5WTogJ3RvcCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMuX292ZXJsYXlcbiAgICAgICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLmlucHV0R3JvdXApXG4gICAgICAgICAgICAud2l0aExvY2tlZFBvc2l0aW9uKClcbiAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKHBvc2l0aW9ucyk7XG4gICAgICAgIGNvbnN0IHNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKTtcbiAgICAgICAgcmV0dXJuIG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneSxcbiAgICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCcsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5pbnB1dEdyb3VwLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGhcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaW5pdGlhbGl6ZURhdGFTb3VyY2UoZGF0YVNvdXJjZTogU2VhcmNoRmllbGREYXRhU291cmNlPGFueT4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZUNoYW5nZWQkLm5leHQoKTtcbiAgICAgICAgZGF0YVNvdXJjZVxuICAgICAgICAgICAgLm9wZW4oKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKG1lcmdlKHRoaXMuX29uRGVzdHJveSQsIHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VkJCkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Ryb3Bkb3duVmFsdWVzJCA9IG9mKGRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gcmV0dXJuIGNvdW50IGZvciBtYXRjaGluZyBzdWdnZXN0aW9uIHdpdGggaW5wdXQgdGV4dFxuICAgICAqIEByZXR1cm5zIG51bWJlclxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldFN1Z2dlc3Rpb25zTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIHRoaXMuX2Ryb3Bkb3duVmFsdWVzJC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzdWdnZXN0aW9ucykgPT4ge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnM/LmZvckVhY2goKHN1Z2dlc3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dFRleHQgJiYgc3VnZ2VzdGlvbj8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuaW5wdXRUZXh0Py50cmltKCk/LnRvTG93ZXJDYXNlKCkpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBhc3luYyBfdXBkYXRlU2VhcmNoQW5ub3VjZW1lbnRUZXh0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBjcmVhdGUgc2VhcmNoIHN1Z2dlc3Rpb24gbWVzc2FnZSB3aXRoIGNvdW50LlxuICAgICAgICBjb25zdCBzdWdnZXN0aW9uQ291bnQgPSB0aGlzLl9nZXRTdWdnZXN0aW9uc0xlbmd0aCgpO1xuICAgICAgICBsZXQgeyBzZWFyY2hTdWdnZXN0aW9uTWVzc2FnZSwgc2VhcmNoU3VnZ2VzdGlvbk5hdmlnYXRlTWVzc2FnZSB9ID0gdGhpcztcbiAgICAgICAgaWYgKHNlYXJjaFN1Z2dlc3Rpb25NZXNzYWdlKSB7XG4gICAgICAgICAgICBzZWFyY2hTdWdnZXN0aW9uTWVzc2FnZSA9IHN1Z2dlc3Rpb25Db3VudCArICcgJyArIHNlYXJjaFN1Z2dlc3Rpb25NZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2VhcmNoU3VnZ2VzdGlvbk1lc3NhZ2UgfHwgIXNlYXJjaFN1Z2dlc3Rpb25OYXZpZ2F0ZU1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhbmcgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl9sYW5ndWFnZSQpO1xuICAgICAgICAgICAgaWYgKCFzZWFyY2hTdWdnZXN0aW9uTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHNlYXJjaFN1Z2dlc3Rpb25NZXNzYWdlID0gdGhpcy5fdHJhbnNsYXRpb25SZXNvbHZlci5yZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm1TZWFyY2hGaWVsZC5zZWFyY2hTdWdnZXN0aW9uTWVzc2FnZScsXG4gICAgICAgICAgICAgICAgICAgIHsgY291bnQ6IHN1Z2dlc3Rpb25Db3VudCB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VhcmNoU3VnZ2VzdGlvbk5hdmlnYXRlTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHNlYXJjaFN1Z2dlc3Rpb25OYXZpZ2F0ZU1lc3NhZ2UgPSB0aGlzLl90cmFuc2xhdGlvblJlc29sdmVyLnJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybVNlYXJjaEZpZWxkLnNlYXJjaFN1Z2dlc3Rpb25OYXZpZ2F0ZU1lc3NhZ2UnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoU3VnZ2VzdGlvbkFubm91Y2VtZW50TWVzc2FnZSA9XG4gICAgICAgICAgICBzZWFyY2hTdWdnZXN0aW9uTWVzc2FnZSArIChzdWdnZXN0aW9uQ291bnQgPiAwID8gc2VhcmNoU3VnZ2VzdGlvbk5hdmlnYXRlTWVzc2FnZSA6ICcnKTtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRUZXh0Py5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKHRoaXMuX2N1cnJlbnRTZWFyY2hTdWdnZXN0aW9uQW5ub3VjZW1lbnRNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0VXBNb2JpbGVNb2RlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFNFQVJDSF9GSUVMRF9DT01QT05FTlQsIHVzZVZhbHVlOiB0aGlzIH1dLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLl9pbmplY3RvclxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9keW5hbWljQ29tcG9uZW50U2VydmljZS5jcmVhdGVEeW5hbWljTW9kdWxlKFxuICAgICAgICAgICAgeyBpbnB1dEZpZWxkVGVtcGxhdGU6IHRoaXMuaW5wdXRGaWVsZFRlbXBsYXRlLCBzdWdnZXN0aW9uTWVudVRlbXBsYXRlOiB0aGlzLnN1Z2dlc3Rpb25NZW51VGVtcGxhdGUgfSxcbiAgICAgICAgICAgIFBsYXRmb3JtU2VhcmNoRmllbGRNb2JpbGVNb2R1bGUsXG4gICAgICAgICAgICBTZWFyY2hGaWVsZE1vYmlsZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgICBpbmplY3RvclxuICAgICAgICApO1xuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIG5hbWU6ICdzdWdnZXN0aW9uTWF0Y2hlcydcbn0pXG5leHBvcnQgY2xhc3MgU3VnZ2VzdGlvbk1hdGNoZXNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0cmFuc2Zvcm0odmFsdWVzOiBzdHJpbmdbXSB8IG51bGwsIG1hdGNoOiBzdHJpbmcsIG1vYmlsZSA9IGZhbHNlKTogc3RyaW5nW10ge1xuICAgICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICAgICAgdmFsdWVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vYmlsZSAmJiAhbWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkTWF0Y2ggPSBtYXRjaC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YocHJvY2Vzc2VkTWF0Y2gpID4gLTEpO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2JpbGUgPyBtb2JpbGVUZW1wbGF0ZSA6IGlucHV0RmllbGRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI21vYmlsZVRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dEZpZWxkVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoQ2F0ZWdvcnlNZW51PlxuICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJmZHAtc2VhcmNoLWZpZWxkX19jYXRlZ29yeS1idXR0b24gZmQtaW5wdXQtZ3JvdXBfX2J1dHRvbiBmZC1idXR0b24gZmQtYnV0dG9uLS1tZW51IHt7XG4gICAgICAgICAgICBhcHBlYXJhbmNlPy5jYXRlZ29yeUJ1dHRvbkNsYXNzXG4gICAgICAgIH19XCJcbiAgICAgICAgW2ZkcE1lbnVUcmlnZ2VyRm9yXT1cImNhdGVnb3J5TWVudVwiXG4gICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZkcC1zZWFyY2gtZmllbGRfX2NhdGVnb3J5LWxhYmVsXCIgKm5nSWY9XCIhaGlkZUNhdGVnb3J5TGFiZWxcIj5cbiAgICAgICAgICAgIHt7IF9jdXJyZW50Q2F0ZWdvcnk/LmxhYmVsIHx8IGNhdGVnb3J5TGFiZWwgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxmZHAtbWVudSAjY2F0ZWdvcnlNZW51PlxuICAgICAgICA8ZmRwLW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllc1wiIChpdGVtU2VsZWN0KT1cInNldEN1cnJlbnRDYXRlZ29yeShjYXRlZ29yeSlcIlxuICAgICAgICAgICAgPnt7IGNhdGVnb3J5LmxhYmVsIH19XG4gICAgICAgIDwvZmRwLW1lbnUtaXRlbT5cbiAgICA8L2ZkcC1tZW51PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzZWFyY2hDYXRlZ29yeVNlbGVjdD5cbiAgICA8ZmQtc2VsZWN0XG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJjYXRlZ29yeUxhYmVsXCJcbiAgICAgICAgW3NlbGVjdENvbnRyb2xDbGFzc109XCJhcHBlYXJhbmNlPy5jYXRlZ29yeUJ1dHRvbkNsYXNzXCJcbiAgICAgICAgW3NlbGVjdERyb3Bkb3duQnV0dG9uQ2xhc3NdPVwiYXBwZWFyYW5jZT8uY2F0ZWdvcnlEcm9wZG93bkJ1dHRvbkNsYXNzXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInNldEN1cnJlbnRDYXRlZ29yeSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICAgIDxsaSBmZC1vcHRpb24gKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXNcIiBbdmFsdWVdPVwiY2F0ZWdvcnlcIj57eyBjYXRlZ29yeS5sYWJlbCB9fTwvbGk+XG4gICAgPC9mZC1zZWxlY3Q+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lucHV0RmllbGRUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmRwLXNlYXJjaC1maWVsZFwiXG4gICAgICAgIFtjbGFzcy53aXRoLWNhdGVnb3JpZXNdPVwiX3Nob3dDYXRlZ29yeURyb3Bkb3duXCJcbiAgICAgICAgW2NsYXNzLmlzLWxvYWRpbmddPVwiaXNMb2FkaW5nXCJcbiAgICAgICAgW2NsYXNzLmlzLWNvbXBhY3RdPVwiY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvbXBhY3QkIHwgYXN5bmNcIlxuICAgICAgICBbY2xhc3MuaGlkZS1jYXRlZ29yeS1sYWJlbF09XCJoaWRlQ2F0ZWdvcnlMYWJlbFwiXG4gICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjaW5wdXRHcm91cFxuICAgICAgICAgICAgY2xhc3M9XCJmZHAtc2VhcmNoLWZpZWxkX19pbnB1dC1ncm91cCBmZC1pbnB1dC1ncm91cCB7eyBhcHBlYXJhbmNlPy5zZWFyY2hDbGFzcyB9fVwiXG4gICAgICAgICAgICBbY2xhc3MuaXMtZm9jdXNdPVwiaXNGb2N1c2VkXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0LWdyb3VwX19hZGRvbiBmZC1pbnB1dC1ncm91cF9fYWRkb24tLWJ1dHRvbiB7eyBhcHBlYXJhbmNlPy5zZWFyY2hDYXRlZ29yeUNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIl9zaG93Q2F0ZWdvcnlEcm9wZG93blwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2F0ZWdvcnlNb2RlID09PSAnc2VsZWN0JyA/IHNlYXJjaENhdGVnb3J5U2VsZWN0IDogc2VhcmNoQ2F0ZWdvcnlNZW51XCJcbiAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICNpbnB1dEZpZWxkXG4gICAgICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXNlYXJjaC1maWVsZF9faW5wdXQgZmQtaW5wdXQgZmQtaW5wdXQtZ3JvdXBfX2lucHV0IHt7IGFwcGVhcmFuY2U/LnNlYXJjaEZpZWxkQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cIl9pbnB1dElkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJfbWVudUlkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIl9zaG93RHJvcGRvd24gPyAndHJ1ZScgOiAnZmFsc2UnXCJcbiAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25TZWFyY2hTdWJtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpbnB1dFRleHRcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vYmlsZSAmJiBvcGVuTW9iaWxlTW9kZSgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2FkZG9uIGZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uIHt7IGFwcGVhcmFuY2U/LmFkZG9uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaW5wdXRUZXh0ICYmIGlucHV0VGV4dC5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1TZWFyY2hGaWVsZC5jbGVhckJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtc2VhcmNoLWZpZWxkX19jbGVhciBmZC1idXR0b24gZmQtYnV0dG9uLS10cmFuc3BhcmVudCB7eyBhcHBlYXJhbmNlPy5idXR0b25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1pbnB1dC1ncm91cF9fYnV0dG9uXT1cIiFhcHBlYXJhbmNlPy5yZW1vdmVHcm91cEJ1dHRvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJfY2xlYXJJZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclRleHRJbnB1dCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIGdseXBoPVwiZGVjbGluZVwiPjwvZmQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1pbnB1dC1ncm91cF9fYWRkb24gZmQtaW5wdXQtZ3JvdXBfX2FkZG9uLS1idXR0b24ge3sgYXBwZWFyYW5jZT8uYWRkb25DbGFzcyB9fSB7e1xuICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPy5zZWFyY2hTdWJtaXRDbGFzc1xuICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImZvcmNlU2VhcmNoQnV0dG9uIHx8IGlzTG9hZGluZyB8fCAoIWlzTG9hZGluZyAmJiAhX2lzU2VhcmNoRG9uZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZGlzYWJsZVNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1TZWFyY2hGaWVsZC5zdWJtaXRCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXNlYXJjaC1maWVsZF9fc3VibWl0IGZkLWJ1dHRvbiBmZC1idXR0b24tLXRyYW5zcGFyZW50IHt7IGFwcGVhcmFuY2U/LmJ1dHRvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLWlucHV0LWdyb3VwX19idXR0b25dPVwiIWFwcGVhcmFuY2U/LnJlbW92ZUdyb3VwQnV0dG9uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJfc3VibWl0SWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlYXJjaFN1Ym1pdCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIGdseXBoPVwic2VhcmNoXCI+PC9mZC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0LWdyb3VwX19hZGRvbiBmZC1pbnB1dC1ncm91cF9fYWRkb24tLWJ1dHRvbiB7eyBhcHBlYXJhbmNlPy5hZGRvbkNsYXNzIH19IHt7XG4gICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U/LnNlYXJjaFN1Ym1pdENsYXNzXG4gICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRpc2FibGVSZWZyZXNoICYmICFpc0xvYWRpbmcgJiYgKF9pc1JlZnJlc2ggfHwgX2lzU2VhcmNoRG9uZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVNlYXJjaEZpZWxkLnN5bmNocm9uaXplQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1zZWFyY2gtZmllbGRfX2xvYWRpbmcgZmQtaW5wdXQtZ3JvdXBfX2J1dHRvbiBmZC1idXR0b24gZmQtYnV0dG9uLS10cmFuc3BhcmVudCB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT8uYnV0dG9uQ2xhc3NcbiAgICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cIl9yZWZyZXNoSWRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWFyY2hTdWJtaXQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiBnbHlwaD1cInN5bmNocm9uaXplXCI+PC9mZC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3VnZ2VzdGlvbk1lbnVUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmRwLXNlYXJjaC1maWVsZF9fc3VnZ2VzdGlvbi1kcm9wZG93blwiXG4gICAgICAgIFthdHRyLmRpcl09XCJfZGlyXCJcbiAgICAgICAgKm5nSWY9XCIoX2Ryb3Bkb3duVmFsdWVzJCB8IGFzeW5jIHwgc3VnZ2VzdGlvbk1hdGNoZXMgOiBpbnB1dFRleHQgOiBtb2JpbGUpPy5sZW5ndGhcIlxuICAgID5cbiAgICAgICAgPG5hdlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1tZW51XCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLWNvbXBhY3RdPVwiY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvbXBhY3QkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW2NsYXNzLmZkLW1lbnUtLW1vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgW2NsYXNzLmZkLW1lbnUtLW92ZXJmbG93XT1cIiFtb2JpbGVcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwiX21lbnVJZFwiXG4gICAgICAgICAgICAjbWVudVxuICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJmZC1tZW51X19saXN0XCIgcm9sZT1cIm1lbnVcIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgZmRwU2VhcmNoRmllbGRTdWdnZXN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXNlYXJjaC1maWVsZF9fc3VnZ2VzdGlvbi1pdGVtIGZkLW1lbnVfX2l0ZW0gZmQtbWVudV9fbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBfZHJvcGRvd25WYWx1ZXMkIHwgYXN5bmMgfCBzdWdnZXN0aW9uTWF0Y2hlcyA6IGlucHV0VGV4dCA6IG1vYmlsZVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uSXRlbUNsaWNrKHZhbHVlKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi50YWIpPVwib25JdGVtQ2xpY2sodmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleXVwLnNwYWNlKT1cIm9uSXRlbUNsaWNrKHZhbHVlKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKHZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidmFsdWUgfCBoaWdobGlnaHQgOiBpbnB1dFRleHQgOiB0cnVlIDogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgICAgICAgPjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L25hdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=