@decaf-ts/for-angular 0.0.23 → 0.0.25

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 (36) hide show
  1. package/components/component-renderer/component-renderer.component.d.ts +3 -2
  2. package/components/crud-field/crud-field.component.d.ts +4 -2
  3. package/components/fieldset/fieldset.component.d.ts +10 -1
  4. package/components/for-angular-components.module.d.ts +3 -2
  5. package/components/index.d.ts +1 -0
  6. package/components/layout/layout.component.d.ts +1 -24
  7. package/components/model-renderer/model-renderer.component.d.ts +6 -1
  8. package/components/stepped-form/stepped-form.component.d.ts +255 -0
  9. package/engine/NgxBaseComponent.d.ts +2 -2
  10. package/engine/NgxCrudFormField.d.ts +1 -0
  11. package/engine/NgxFormService.d.ts +381 -48
  12. package/engine/NgxRenderingEngine.d.ts +4 -2
  13. package/engine/interfaces.d.ts +1 -1
  14. package/engine/types.d.ts +4 -3
  15. package/esm2022/components/component-renderer/component-renderer.component.mjs +10 -4
  16. package/esm2022/components/crud-field/crud-field.component.mjs +14 -3
  17. package/esm2022/components/crud-form/crud-form.component.mjs +3 -3
  18. package/esm2022/components/empty-state/empty-state.component.mjs +2 -2
  19. package/esm2022/components/fieldset/fieldset.component.mjs +5 -3
  20. package/esm2022/components/for-angular-components.module.mjs +12 -7
  21. package/esm2022/components/index.mjs +2 -1
  22. package/esm2022/components/layout/layout.component.mjs +4 -29
  23. package/esm2022/components/list/list.component.mjs +3 -3
  24. package/esm2022/components/model-renderer/model-renderer.component.mjs +10 -3
  25. package/esm2022/components/stepped-form/stepped-form.component.mjs +306 -0
  26. package/esm2022/engine/NgxBaseComponent.mjs +10 -4
  27. package/esm2022/engine/NgxCrudFormField.mjs +19 -17
  28. package/esm2022/engine/NgxFormService.mjs +438 -57
  29. package/esm2022/engine/NgxRenderingEngine.mjs +21 -10
  30. package/esm2022/engine/ValidatorFactory.mjs +4 -4
  31. package/esm2022/engine/interfaces.mjs +1 -1
  32. package/esm2022/engine/types.mjs +1 -1
  33. package/esm2022/i18n/data/en.json +5 -0
  34. package/fesm2022/decaf-ts-for-angular.mjs +837 -137
  35. package/fesm2022/decaf-ts-for-angular.mjs.map +1 -1
  36. package/package.json +1 -1
@@ -212,7 +212,7 @@ let CrudFormComponent = class CrudFormComponent {
212
212
  });
213
213
  }
214
214
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CrudFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
215
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CrudFormComponent, isStandalone: true, selector: "ngx-decaf-crud-form", inputs: { model: "model", modelId: "modelId", updateOn: "updateOn", target: "target", method: "method", options: "options", action: "action", operation: "operation", handlers: "handlers", formGroup: "formGroup", childOf: "childOf", rendererId: "rendererId", uid: "uid", allowClear: "allowClear" }, outputs: { submitEvent: "submitEvent" }, host: { properties: { "attr.id": "uid" } }, viewQueries: [{ propertyName: "component", first: true, predicate: ["reactiveForm"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if(operation !== 'read' && operation !== 'delete') {\n <form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" novalidate [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div class=\"dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left\">\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{ action ? action : options.buttons.submit.text}}\n </ion-button>\n </div>\n @if(!action) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n Back\n </ion-button>\n </div>\n }\n </div>\n </form>\n} @else {\n <div [class]=\"'dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left ' + operation\" [id]=\"uid\">\n @if(operation === OperationKeys.READ && modelId) {\n <div>\n <ion-button\n (click)=\"handleDelete()\"\n color=\"danger\"\n type=\"button\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n Delete\n </ion-button>\n </div>\n\n }\n @if(operation === OperationKeys.CREATE || operation === OperationKeys.UPDATE) {\n\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n </div>\n }\n\n @if(options.buttons.clear) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{ [OperationKeys.DELETE, OperationKeys.READ, OperationKeys.UPDATE].includes(operation) ? 'Back' : options.buttons.clear?.text}}\n </ion-button>\n </div>\n\n }\n </div>\n}\n\n", styles: [".dcf-buttons-container{margin-top:1.8rem;margin-bottom:0}@media (min-width: 768px){.dcf-buttons-container.dcf-flex{flex-direction:row-reverse}}@media (max-width: 767px){.dcf-buttons-container.dcf-flex div{width:100%}.dcf-buttons-container.dcf-flex ion-button{width:100%;margin-bottom:1rem}}form{padding:2rem 1rem}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
215
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CrudFormComponent, isStandalone: true, selector: "ngx-decaf-crud-form", inputs: { model: "model", modelId: "modelId", updateOn: "updateOn", target: "target", method: "method", options: "options", action: "action", operation: "operation", handlers: "handlers", formGroup: "formGroup", childOf: "childOf", rendererId: "rendererId", uid: "uid", allowClear: "allowClear" }, outputs: { submitEvent: "submitEvent" }, host: { properties: { "attr.id": "uid" } }, viewQueries: [{ propertyName: "component", first: true, predicate: ["reactiveForm"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if(operation !== 'read' && operation !== 'delete') {\n <form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" novalidate [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div class=\"dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left\">\n <div>\n <ion-button type=\"submit\" [expand]=\"action ? 'block' : 'default'\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{ action ? action : options.buttons.submit.text}}\n </ion-button>\n </div>\n @if(!action) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n Back\n </ion-button>\n </div>\n }\n </div>\n </form>\n} @else {\n <div [class]=\"'dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left ' + operation\" [id]=\"uid\">\n @if(operation === OperationKeys.READ && modelId) {\n <div>\n <ion-button\n (click)=\"handleDelete()\"\n color=\"danger\"\n type=\"button\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n Delete\n </ion-button>\n </div>\n\n }\n @if(operation === OperationKeys.CREATE || operation === OperationKeys.UPDATE) {\n\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n </div>\n }\n\n @if(options.buttons.clear) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{ [OperationKeys.DELETE, OperationKeys.READ, OperationKeys.UPDATE].includes(operation) ? 'Back' : options.buttons.clear?.text}}\n </ion-button>\n </div>\n\n }\n </div>\n}\n\n", styles: [".dcf-buttons-container{margin-top:1.8rem;margin-bottom:0}@media (min-width: 768px){.dcf-buttons-container.dcf-flex{flex-direction:row-reverse}}@media (max-width: 767px){.dcf-buttons-container.dcf-flex div{width:100%}.dcf-buttons-container.dcf-flex ion-button{width:100%;margin-bottom:1rem}}form{padding:2rem 1rem}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
216
216
  };
217
217
  CrudFormComponent = __decorate([
218
218
  Dynamic()
@@ -220,7 +220,7 @@ CrudFormComponent = __decorate([
220
220
  export { CrudFormComponent };
221
221
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CrudFormComponent, decorators: [{
222
222
  type: Component,
223
- args: [{ standalone: true, selector: 'ngx-decaf-crud-form', imports: [ReactiveFormsModule, IonButton, IonIcon], host: { '[attr.id]': 'uid' }, template: "@if(operation !== 'read' && operation !== 'delete') {\n <form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" novalidate [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div class=\"dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left\">\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{ action ? action : options.buttons.submit.text}}\n </ion-button>\n </div>\n @if(!action) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n Back\n </ion-button>\n </div>\n }\n </div>\n </form>\n} @else {\n <div [class]=\"'dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left ' + operation\" [id]=\"uid\">\n @if(operation === OperationKeys.READ && modelId) {\n <div>\n <ion-button\n (click)=\"handleDelete()\"\n color=\"danger\"\n type=\"button\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n Delete\n </ion-button>\n </div>\n\n }\n @if(operation === OperationKeys.CREATE || operation === OperationKeys.UPDATE) {\n\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n </div>\n }\n\n @if(options.buttons.clear) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{ [OperationKeys.DELETE, OperationKeys.READ, OperationKeys.UPDATE].includes(operation) ? 'Back' : options.buttons.clear?.text}}\n </ion-button>\n </div>\n\n }\n </div>\n}\n\n", styles: [".dcf-buttons-container{margin-top:1.8rem;margin-bottom:0}@media (min-width: 768px){.dcf-buttons-container.dcf-flex{flex-direction:row-reverse}}@media (max-width: 767px){.dcf-buttons-container.dcf-flex div{width:100%}.dcf-buttons-container.dcf-flex ion-button{width:100%;margin-bottom:1rem}}form{padding:2rem 1rem}\n"] }]
223
+ args: [{ standalone: true, selector: 'ngx-decaf-crud-form', imports: [ReactiveFormsModule, IonButton, IonIcon], host: { '[attr.id]': 'uid' }, template: "@if(operation !== 'read' && operation !== 'delete') {\n <form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" novalidate [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div class=\"dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left\">\n <div>\n <ion-button type=\"submit\" [expand]=\"action ? 'block' : 'default'\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{ action ? action : options.buttons.submit.text}}\n </ion-button>\n </div>\n @if(!action) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n Back\n </ion-button>\n </div>\n }\n </div>\n </form>\n} @else {\n <div [class]=\"'dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left ' + operation\" [id]=\"uid\">\n @if(operation === OperationKeys.READ && modelId) {\n <div>\n <ion-button\n (click)=\"handleDelete()\"\n color=\"danger\"\n type=\"button\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n Delete\n </ion-button>\n </div>\n\n }\n @if(operation === OperationKeys.CREATE || operation === OperationKeys.UPDATE) {\n\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n </div>\n }\n\n @if(options.buttons.clear) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{ [OperationKeys.DELETE, OperationKeys.READ, OperationKeys.UPDATE].includes(operation) ? 'Back' : options.buttons.clear?.text}}\n </ion-button>\n </div>\n\n }\n </div>\n}\n\n", styles: [".dcf-buttons-container{margin-top:1.8rem;margin-bottom:0}@media (min-width: 768px){.dcf-buttons-container.dcf-flex{flex-direction:row-reverse}}@media (max-width: 767px){.dcf-buttons-container.dcf-flex div{width:100%}.dcf-buttons-container.dcf-flex ion-button{width:100%;margin-bottom:1rem}}form{padding:2rem 1rem}\n"] }]
224
224
  }], propDecorators: { model: [{
225
225
  type: Input
226
226
  }], modelId: [{
@@ -256,4 +256,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
256
256
  }], submitEvent: [{
257
257
  type: Output
258
258
  }] } });
259
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQWEsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFpQixPQUFPLEVBQUUsY0FBYyxFQUErRCxNQUFNLGNBQWMsQ0FBQztBQUVuSSxPQUFPLEVBQWtCLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQUcvRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQStESSxJQUFNLGlCQUFpQixHQUF2QixNQUFNLGlCQUFpQjtJQUF2QjtRQTJCTDs7Ozs7Ozs7O1dBU0c7UUFFSCxhQUFRLEdBQW9CLFFBQVEsQ0FBQztRQWNyQzs7Ozs7Ozs7O1dBU0c7UUFFSCxXQUFNLEdBQW1C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LE9BQU87O0FBd0R0QyxpQkFBaUI7SUE5RDdCLE9BQU8sRUFBRTtHQThERyxpQkFBaUIsQ0FxVjdCOzs0RkFyVlksaUJBQWlCO2tCQTdEN0IsU0FBUztpQ0FDSSxJQUFJLFlBQ04scUJBQXFCLFdBR3RCLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxRQUM1QyxFQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUM7OEJBa0UxQixLQUFLO3NCQURKLEtBQUs7Z0JBZU4sT0FBTztzQkFETixLQUFLO2dCQWNOLFFBQVE7c0JBRFAsS0FBSztnQkFhTixTQUFTO3NCQURSLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQWM5RCxNQUFNO3NCQURMLEtBQUs7Z0JBY04sTUFBTTtzQkFETCxLQUFLO2dCQWFOLE9BQU87c0JBRE4sS0FBSztnQkFhTixNQUFNO3NCQURMLEtBQUs7Z0JBY04sU0FBUztzQkFEUixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFhekIsUUFBUTtzQkFEUCxLQUFLO2dCQWFOLFNBQVM7c0JBRFIsS0FBSztnQkFXTixPQUFPO3NCQUROLEtBQUs7Z0JBYU4sVUFBVTtzQkFEVCxLQUFLO2dCQVlOLEdBQUc7c0JBREYsS0FBSztnQkFnQk4sVUFBVTtzQkFEVCxLQUFLO2dCQTJCTixXQUFXO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElGb3JtRWxlbWVudCB9IGZyb20gJy4uLy4uL2VuZ2luZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE5neEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZW5naW5lL05neEZvcm1TZXJ2aWNlJztcbmltcG9ydCB7IENydWRGb3JtRXZlbnQsIER5bmFtaWMsIEV2ZW50Q29uc3RhbnRzLCBGaWVsZFVwZGF0ZU1vZGUsIEhhbmRsZXJMaWtlLCBIVE1MRm9ybVRhcmdldCwgUmVuZGVyZWRNb2RlbCB9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBDcnVkRm9ybU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IENydWRPcGVyYXRpb25zLCBPcGVyYXRpb25LZXlzIH0gZnJvbSAnQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgRGVmYXVsdEZvcm1SZWFjdGl2ZU9wdGlvbnMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICdAZGVjYWYtdHMvbG9nZ2luZyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbVZhbHVlIH0gZnJvbSAnLi4vLi4vaGVscGVycyc7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuLi8uLi9mb3ItYW5ndWxhci1jb21tb24ubW9kdWxlJztcbmltcG9ydCB7IElvbkJ1dHRvbiwgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuXG5cbi8qKlxuICogQGNvbXBvbmVudCBDcnVkRm9ybUNvbXBvbmVudFxuICogQGV4YW1wbGUgPG5neC1kZWNhZi1jcnVkLWZvcm1cbiAqICAgYWN0aW9uPVwiY3JlYXRlXCJcbiAqICAgb3BlcmF0aW9uPVwiY3JlYXRlXCJcbiAqICAgZm9ybUdyb3VwPVwiZm9ybUdyb3VwXCJcbiAqICAgcmVuZGVyZXJJZD1cInJlbmRlcmVySWRcIlxuICogICBzdWJtaXRFdmVudD1cInN1Ym1pdEV2ZW50XCJcbiAqICAgdGFyZ2V0PVwiX3NlbGZcIlxuICogICBtZXRob2Q9XCJldmVudFwiPlxuICogPC9uZ3gtZGVjYWYtY3J1ZC1mb3JtPlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gLSBUaGUgYWN0aW9uIHRvIGJlIHBlcmZvcm1lZCAoY3JlYXRlLCByZWFkLCB1cGRhdGUsIGRlbGV0ZSlcbiAqIEBwYXJhbSB7Q3J1ZE9wZXJhdGlvbnN9IG9wZXJhdGlvbiAtIFRoZSBDUlVEIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQgKGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBkZWxldGUpXG4gKiBAcGFyYW0ge0Zvcm1Hcm91cH0gZm9ybUdyb3VwIC0gVGhlIGZvcm0gZ3JvdXBcbiAqIEBwYXJhbSB7c3RyaW5nfSByZW5kZXJlcklkIC0gVGhlIHJlbmRlcmVyIGlkXG4gKiBAcGFyYW0ge1N1Ym1pdEV2ZW50fSBzdWJtaXRFdmVudCAtIFRoZSBzdWJtaXQgZXZlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBUaGUgdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIC0gVGhlIG1ldGhvZFxuICovXG5ARHluYW1pYygpXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICduZ3gtZGVjYWYtY3J1ZC1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NydWQtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NydWQtZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZSwgSW9uQnV0dG9uLCBJb25JY29uXSxcbiAgaG9zdDogeydbYXR0ci5pZF0nOiAndWlkJ30sXG59KVxuLyoqXG4gKiBAY2xhc3MgQ3J1ZEZvcm1Db21wb25lbnRcbiAqIEBpbXBsZW1lbnRzIE9uSW5pdCwgSUZvcm1FbGVtZW50LCBPbkRlc3Ryb3ksIFJlbmRlcmVkTW9kZWxcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBgQ3J1ZEZvcm1Db21wb25lbnRgIGlzIGFuIEFuZ3VsYXIgY29tcG9uZW50IGRlc2lnbmVkIHRvIHByb3ZpZGUgYSBmbGV4aWJsZSBhbmQgZXh0ZW5zaWJsZSBmb3JtIGludGVyZmFjZSBmb3IgcGVyZm9ybWluZyBDUlVEIChDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlKSBvcGVyYXRpb25zIG9uIGEgZGF0YSBtb2RlbC4gSXQgaW50ZWdyYXRlcyB3aXRoIEFuZ3VsYXIncyByZWFjdGl2ZSBmb3JtcyBhbmQgc3VwcG9ydHMgYWR2YW5jZWQgY29uZmlndXJhdGlvbiwgdmFsaWRhdGlvbiwgYW5kIGV2ZW50IGhhbmRsaW5nIGZvciBhIHdpZGUgcmFuZ2Ugb2YgdXNlIGNhc2VzLlxuICpcbiAqIEBzdW1tYXJ5XG4gKiAtIFN1cHBvcnRzIGR5bmFtaWMgZm9ybSByZW5kZXJpbmcgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGRhdGEgbW9kZWwgYW5kIG9wZXJhdGlvbiB0eXBlLlxuICogLSBIYW5kbGVzIGZvcm0gdmFsaWRhdGlvbiwgc3VibWlzc2lvbiwgYW5kIHJlc2V0IGxvZ2ljIHdpdGggY3VzdG9taXphYmxlIGJlaGF2aW9yLlxuICogLSBFbWl0cyBzdHJ1Y3R1cmVkIGV2ZW50cyBmb3IgZm9ybSBhY3Rpb25zLCBlbmFibGluZyBkZWNvdXBsZWQgYnVzaW5lc3MgbG9naWMuXG4gKiAtIEludGVncmF0ZXMgd2l0aCBleHRlcm5hbCBzZXJ2aWNlcyBmb3IgbG9nZ2luZywgZm9ybSBtYW5hZ2VtZW50LCBhbmQgbmF2aWdhdGlvbi5cbiAqIC0gUHJvdmlkZXMgZXh0ZW5zaXZlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgZm9ybSBhcHBlYXJhbmNlIGFuZCBiZWhhdmlvci5cbiAqXG4gKiBAaW5wdXRzXG4gKiAtIGBtb2RlbGA6IFRoZSByZXBvc2l0b3J5IG1vZGVsIGZvciBkYXRhIG9wZXJhdGlvbnMuXG4gKiAtIGBtb2RlbElkYDogVGhlIHByaW1hcnkgZGF0YSBtb2RlbCBpbnN0YW5jZSBmb3IgQ1JVRCBvcGVyYXRpb25zLlxuICogLSBgdXBkYXRlT25gOiBEZXRlcm1pbmVzIHdoZW4gZm9ybSBmaWVsZCB2YWxpZGF0aW9uIGlzIHRyaWdnZXJlZCAoYGNoYW5nZWAsIGBibHVyYCwgb3IgYHN1Ym1pdGApLlxuICogLSBgY29tcG9uZW50YDogUmVmZXJlbmNlIHRvIHRoZSByZWFjdGl2ZSBmb3JtIERPTSBlbGVtZW50LlxuICogLSBgdGFyZ2V0YDogU3BlY2lmaWVzIHRoZSBmb3JtIHN1Ym1pc3Npb24gdGFyZ2V0IChlLmcuLCBgX3NlbGZgLCBgX2JsYW5rYCkuXG4gKiAtIGBtZXRob2RgOiBEZWZpbmVzIHRoZSBmb3JtIHN1Ym1pc3Npb24gc3RyYXRlZ3kgKGBnZXRgLCBgcG9zdGAsIG9yIGBldmVudGApLlxuICogLSBgb3B0aW9uc2A6IENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgZm9ybSBiZWhhdmlvciBhbmQgcmVuZGVyaW5nLlxuICogLSBgYWN0aW9uYDogT3B0aW9uYWwgY3VzdG9tIGFjdGlvbiBpZGVudGlmaWVyIGZvciBzdWJtaXNzaW9uIGNvbnRleHQuXG4gKiAtIGBvcGVyYXRpb25gOiBUaGUgY3VycmVudCBDUlVEIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQgKHJlcXVpcmVkKS5cbiAqIC0gYGhhbmRsZXJzYDogQ3VzdG9tIGV2ZW50IGhhbmRsZXJzIGZvciBmb3JtIGFjdGlvbnMuXG4gKiAtIGBmb3JtR3JvdXBgOiBBbmd1bGFyIEZvcm1Hcm91cCBmb3IgZm9ybSBzdGF0ZSBtYW5hZ2VtZW50LlxuICogLSBgY2hpbGRPZmA6IFBhdGggdG8gdGhlIHBhcmVudCBGb3JtR3JvdXAgaWYgbmVzdGVkLlxuICogLSBgcmVuZGVyZXJJZGA6IFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZm9ybSByZW5kZXJlci5cbiAqIC0gYHVpZGA6IFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCByZWNvcmQuXG4gKiAtIGBhbGxvd0NsZWFyYDogRW5hYmxlcyBvciBkaXNhYmxlcyBmb3JtIGNsZWFyaW5nIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQG91dHB1dHNcbiAqIC0gYHN1Ym1pdEV2ZW50YDogRW1pdHMgYENydWRGb3JtRXZlbnRgIG9iamVjdHMgb24gZm9ybSBzdWJtaXNzaW9uLlxuICpcbiAqIEBwcm90ZWN0ZWRcbiAqIC0gYE9wZXJhdGlvbktleXNgOiBSZWZlcmVuY2UgdG8gQ1JVRCBvcGVyYXRpb24gY29uc3RhbnRzIGZvciB0ZW1wbGF0ZSB1c2FnZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogLSBgbG9nZ2VyYDogTG9nZ2VyIGluc3RhbmNlIGZvciBzdHJ1Y3R1cmVkIGxvZ2dpbmcuXG4gKiAtIGBsb2NhdGlvbmA6IEFuZ3VsYXIgTG9jYXRpb24gc2VydmljZSBmb3IgbmF2aWdhdGlvbi5cbiAqXG4gKiBAbGlmZWN5Y2xlXG4gKiAtIGBuZ09uSW5pdGA6IEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQsIGNvbmZpZ3VyZXMgbG9nZ2VyLCBtZXJnZXMgb3B0aW9ucywgYW5kIHNldHMgZm9ybSBzdGF0ZSBiYXNlZCBvbiBvcGVyYXRpb24uXG4gKiAtIGBuZ09uRGVzdHJveWA6IENsZWFucyB1cCByZXNvdXJjZXMgYW5kIHVucmVnaXN0ZXJzIHRoZSBGb3JtR3JvdXAuXG4gKlxuICogQG1ldGhvZHNcbiAqIC0gYHN1Ym1pdChldmVudDogU3VibWl0RXZlbnQpYDogSGFuZGxlcyBmb3JtIHN1Ym1pc3Npb24sIHZhbGlkYXRpb24sIGFuZCBldmVudCBlbWlzc2lvbi5cbiAqIC0gYGhhbmRsZVJlc2V0KClgOiBSZXNldHMgdGhlIGZvcm0gb3IgbmF2aWdhdGVzIGJhY2sgYmFzZWQgb24gdGhlIG9wZXJhdGlvbi5cbiAqIC0gYGhhbmRsZURlbGV0ZSgpYDogRW1pdHMgYSBkZWxldGUgZXZlbnQgZm9yIHRoZSBjdXJyZW50IHJlY29yZC5cbiAqXG4gKiBAdXNhZ2VcbiAqIFVzZSB0aGlzIGNvbXBvbmVudCB3aXRoaW4gQW5ndWxhciB0ZW1wbGF0ZXMgdG8gcHJvdmlkZSBhIHJvYnVzdCBDUlVEIGZvcm0gaW50ZXJmYWNlLiBDb25maWd1cmUgaW5wdXRzIHRvIG1hdGNoIHlvdXIgZGF0YSBtb2RlbCBhbmQgZGVzaXJlZCBiZWhhdmlvciwgYW5kIGhhbmRsZSBvdXRwdXQgZXZlbnRzIHRvIGltcGxlbWVudCBjdXN0b20gYnVzaW5lc3MgbG9naWMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDcnVkRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgSUZvcm1FbGVtZW50LCBPbkRlc3Ryb3ksIFJlbmRlcmVkTW9kZWwge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwb3NpdG9yeSBtb2RlbCBmb3IgZGF0YSBvcGVyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBUaGUgZGF0YSBtb2RlbCByZXBvc2l0b3J5IHRoYXQgdGhpcyBjb21wb25lbnQgd2lsbCB1c2UgZm9yIENSVUQgb3BlcmF0aW9ucy5cbiAgICogVGhpcyBwcm92aWRlcyBhIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGEgbGF5ZXIgZm9yIHJldHJpZXZpbmcgYW5kIG1hbmlwdWxhdGluZyBkYXRhLlxuICAgKlxuICAgKiBAdHlwZSB7TW9kZWx8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBtb2RlbCE6IE1vZGVsIHwgdW5kZWZpbmVkO1xuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgcHJpbWFyeSBkYXRhIG1vZGVsIHVzZWQgZm9yIENSVUQgb3BlcmF0aW9ucy5cbiAgICogQHN1bW1hcnkgVGhpcyBpbnB1dCBwcm92aWRlcyB0aGUgbWFpbiBNb2RlbCBpbnN0YW5jZSB0aGF0IHRoZSBmb3JtIGludGVyYWN0cyB3aXRoIGZvclxuICAgKiBjcmVhdGluZywgcmVhZGluZywgdXBkYXRpbmcsIG9yIGRlbGV0aW5nIHJlY29yZHMuIEl0IHNlcnZlcyBhcyB0aGUgc291cmNlIG9mIHNjaGVtYVxuICAgKiBhbmQgdmFsaWRhdGlvbiBydWxlcyBmb3IgdGhlIGZvcm0gZmllbGRzLCBhbmQgaXMgcmVxdWlyZWQgZm9yIG1vc3Qgb3BlcmF0aW9ucyBleGNlcHRcbiAgICogZm9yIGNlcnRhaW4gcmVhZCBvciBkZWxldGUgc2NlbmFyaW9zLlxuICAgKlxuICAgKiBAdHlwZSB7TW9kZWwgfCB1bmRlZmluZWR9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgbW9kZWxJZCE6IE1vZGVsIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRmllbGQgdXBkYXRlIHRyaWdnZXIgbW9kZSBmb3IgZm9ybSB2YWxpZGF0aW9uLlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHdoZW4gZm9ybSBmaWVsZCB2YWxpZGF0aW9uIHNob3VsZCBiZSB0cmlnZ2VyZWQuIE9wdGlvbnMgaW5jbHVkZVxuICAgKiAnY2hhbmdlJywgJ2JsdXInLCBvciAnc3VibWl0Jy4gVGhpcyBhZmZlY3RzIHRoZSB1c2VyIGV4cGVyaWVuY2UgYnkgY29udHJvbGxpbmdcbiAgICogd2hlbiB2YWxpZGF0aW9uIGZlZWRiYWNrIGlzIHNob3duIHRvIHRoZSB1c2VyIGR1cmluZyBmb3JtIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7RmllbGRVcGRhdGVNb2RlfVxuICAgKiBAZGVmYXVsdCAnY2hhbmdlJ1xuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHVwZGF0ZU9uOiBGaWVsZFVwZGF0ZU1vZGUgPSAnY2hhbmdlJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jZSB0byB0aGUgcmVhY3RpdmUgZm9ybSBET00gZWxlbWVudC5cbiAgICogQHN1bW1hcnkgVmlld0NoaWxkIHJlZmVyZW5jZSB0aGF0IHByb3ZpZGVzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGZvcm0ncyBET00gZWxlbWVudC5cbiAgICogVGhpcyBlbmFibGVzIHByb2dyYW1tYXRpYyBtYW5pcHVsYXRpb24gb2YgdGhlIGZvcm0gZWxlbWVudCBhbmQgYWNjZXNzIHRvIG5hdGl2ZVxuICAgKiBIVE1MIGZvcm0gcHJvcGVydGllcyBhbmQgbWV0aG9kcyB3aGVuIG5lZWRlZC5cbiAgICpcbiAgICogQHR5cGUge0VsZW1lbnRSZWZ9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQFZpZXdDaGlsZCgncmVhY3RpdmVGb3JtJywgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGNvbXBvbmVudCE6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGb3JtIHN1Ym1pc3Npb24gdGFyZ2V0IHNwZWNpZmljYXRpb24uXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB3aGVyZSB0byBkaXNwbGF5IHRoZSByZXNwb25zZSBhZnRlciBmb3JtIHN1Ym1pc3Npb24sIHNpbWlsYXJcbiAgICogdG8gdGhlIEhUTUwgZm9ybSB0YXJnZXQgYXR0cmlidXRlLiBPcHRpb25zIGluY2x1ZGUgJ19zZWxmJywgJ19ibGFuaycsICdfcGFyZW50JyxcbiAgICogJ190b3AnLCBvciBhIG5hbWVkIGZyYW1lLiBDb250cm9scyB0aGUgYnJvd3NlciBiZWhhdmlvciBmb3IgZm9ybSByZXNwb25zZXMuXG4gICAqXG4gICAqIEB0eXBlIHtIVE1MRm9ybVRhcmdldH1cbiAgICogQGRlZmF1bHQgJ19zZWxmJ1xuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHRhcmdldDogSFRNTEZvcm1UYXJnZXQgPSAnX3NlbGYnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSFRUUCBtZXRob2Qgb3Igc3VibWlzc2lvbiBzdHJhdGVneSBmb3IgdGhlIGZvcm0uXG4gICAqIEBzdW1tYXJ5IERlZmluZXMgaG93IHRoZSBmb3JtIHNob3VsZCBiZSBzdWJtaXR0ZWQuICdnZXQnIGFuZCAncG9zdCcgY29ycmVzcG9uZFxuICAgKiB0byBzdGFuZGFyZCBIVFRQIG1ldGhvZHMgZm9yIHRyYWRpdGlvbmFsIGZvcm0gc3VibWlzc2lvbiwgd2hpbGUgJ2V2ZW50JyB1c2VzXG4gICAqIEFuZ3VsYXIgZXZlbnQtZHJpdmVuIHN1Ym1pc3Npb24gZm9yIHNpbmdsZS1wYWdlIGFwcGxpY2F0aW9uIHdvcmtmbG93cy5cbiAgICpcbiAgICogQHR5cGUgeydnZXQnIHwgJ3Bvc3QnIHwgJ2V2ZW50J31cbiAgICogQGRlZmF1bHQgJ2V2ZW50J1xuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIG1ldGhvZDogJ2dldCcgfCAncG9zdCcgfCAnZXZlbnQnID0gJ2V2ZW50JztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIENSVUQgZm9ybSBiZWhhdmlvci5cbiAgICogQHN1bW1hcnkgQ29udGFpbnMgdmFyaW91cyBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRoYXQgY29udHJvbCBmb3JtIHJlbmRlcmluZyxcbiAgICogdmFsaWRhdGlvbiwgYW5kIGJlaGF2aW9yLiBUaGVzZSBvcHRpb25zIGFyZSBtZXJnZWQgd2l0aCBkZWZhdWx0IHNldHRpbmdzXG4gICAqIGR1cmluZyBjb21wb25lbnQgaW5pdGlhbGl6YXRpb24gdG8gY3VzdG9taXplIHRoZSBmb3JtJ3MgZnVuY3Rpb25hbGl0eS5cbiAgICpcbiAgICogQHR5cGUge0NydWRGb3JtT3B0aW9uc31cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBvcHRpb25zITogQ3J1ZEZvcm1PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gT3B0aW9uYWwgYWN0aW9uIGlkZW50aWZpZXIgZm9yIGZvcm0gc3VibWlzc2lvbiBjb250ZXh0LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgYSBjdXN0b20gYWN0aW9uIG5hbWUgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBzdWJtaXQgZXZlbnQuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgZGVmYXVsdHMgdG8gdGhlIHN0YW5kYXJkIHN1Ym1pdCBldmVudCBjb25zdGFudC4gVXNlZCB0b1xuICAgKiBkaXN0aW5ndWlzaCBiZXR3ZWVuIGRpZmZlcmVudCB0eXBlcyBvZiBmb3JtIHN1Ym1pc3Npb25zIHdpdGhpbiB0aGUgc2FtZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYWN0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGN1cnJlbnQgQ1JVRCBvcGVyYXRpb24gYmVpbmcgcGVyZm9ybWVkLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIHR5cGUgb2Ygb3BlcmF0aW9uIHRoaXMgZm9ybSBpcyBoYW5kbGluZyAoQ1JFQVRFLCBSRUFELCBVUERBVEUsIERFTEVURSkuXG4gICAqIFRoaXMgaXMgYSByZXF1aXJlZCBpbnB1dCB0aGF0IGRldGVybWluZXMgZm9ybSBiZWhhdmlvciwgdmFsaWRhdGlvbiBydWxlcywgYW5kIGF2YWlsYWJsZSBhY3Rpb25zLlxuICAgKiBUaGUgb3BlcmF0aW9uIGFmZmVjdHMgZm9ybSBzdGF0ZSwgYnV0dG9uIHZpc2liaWxpdHksIGFuZCBzdWJtaXNzaW9uIGxvZ2ljLlxuICAgKlxuICAgKiBAdHlwZSB7Q3J1ZE9wZXJhdGlvbnN9XG4gICAqIEByZXF1aXJlZFxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIG9wZXJhdGlvbiE6IENydWRPcGVyYXRpb25zO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3VzdG9tIGV2ZW50IGhhbmRsZXJzIGZvciBmb3JtIGFjdGlvbnMuXG4gICAqIEBzdW1tYXJ5IEEgcmVjb3JkIG9mIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb25zIGtleWVkIGJ5IGV2ZW50IG5hbWVzIHRoYXQgY2FuIGJlXG4gICAqIHRyaWdnZXJlZCBkdXJpbmcgZm9ybSBvcGVyYXRpb25zLiBUaGVzZSBoYW5kbGVycyBwcm92aWRlIGV4dGVuc2liaWxpdHkgZm9yXG4gICAqIGN1c3RvbSBidXNpbmVzcyBsb2dpYyBhbmQgY2FuIGJlIGludm9rZWQgZm9yIHZhcmlvdXMgZm9ybSBldmVudHMgYW5kIGFjdGlvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtIYW5kbGVyTGlrZX1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBoYW5kbGVycyE6IEhhbmRsZXJMaWtlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQW5ndWxhciByZWFjdGl2ZSBGb3JtR3JvdXAgZm9yIGZvcm0gc3RhdGUgbWFuYWdlbWVudC5cbiAgICogQHN1bW1hcnkgVGhlIEZvcm1Hcm91cCBpbnN0YW5jZSB0aGF0IG1hbmFnZXMgYWxsIGZvcm0gY29udHJvbHMsIHZhbGlkYXRpb24sXG4gICAqIGFuZCBmb3JtIHN0YXRlLiBUaGlzIGlzIHRoZSBtYWluIGludGVyZmFjZSBmb3IgYWNjZXNzaW5nIGZvcm0gdmFsdWVzIGFuZFxuICAgKiBjb250cm9sbGluZyBmb3JtIGJlaGF2aW9yLiBNYXkgYmUgdW5kZWZpbmVkIGZvciByZWFkLW9ubHkgb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge0Zvcm1Hcm91cCB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBmb3JtR3JvdXAhOiBGb3JtR3JvdXAgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXRoIHRvIHRoZSBwYXJlbnQgRm9ybUdyb3VwLCBpZiBuZXN0ZWQuXG4gICAqIEBzdW1tYXJ5IEZ1bGwgZG90LWRlbGltaXRlZCBwYXRoIG9mIHRoZSBwYXJlbnQgRm9ybUdyb3VwLiBTZXQgb25seSB3aGVuIGlzIHBhcnQgb2YgYSBuZXN0ZWQgc3RydWN0dXJlLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNoaWxkT2Y/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGZvcm0gcmVuZGVyZXIuXG4gICAqIEBzdW1tYXJ5IEEgdW5pcXVlIHN0cmluZyBpZGVudGlmaWVyIHVzZWQgdG8gcmVnaXN0ZXIgYW5kIG1hbmFnZSB0aGlzIGZvcm1cbiAgICogaW5zdGFuY2Ugd2l0aGluIHRoZSBOZ3hGb3JtU2VydmljZS4gVGhpcyBJRCBpcyBhbHNvIHVzZWQgYXMgdGhlIEhUTUwgaWRcbiAgICogYXR0cmlidXRlIGZvciB0aGUgZm9ybSBlbGVtZW50LCBlbmFibGluZyBET00gcXVlcmllcyBhbmQgZm9ybSBtYW5hZ2VtZW50LlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHJlbmRlcmVySWQhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgcmVjb3JkLlxuICAgKiBAc3VtbWFyeSBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCByZWNvcmQgYmVpbmcgZGlzcGxheWVkIG9yIG1hbmlwdWxhdGVkLlxuICAgKiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHByaW1hcnkga2V5IGZvciBvcGVyYXRpb25zIG9uIHNwZWNpZmljIHJlY29yZHMuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdWlkOiBzdHJpbmcgPSBnZW5lcmF0ZVJhbmRvbVZhbHVlKDEyKTtcblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHJlY29yZCBpbnN0YW5jZS5cbiAgICogQHN1bW1hcnkgVGhpcyBwcm9wZXJ0eSBob2xkcyBhIHVuaXF1ZSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBzcGVjaWZpYyByZWNvcmQgYmVpbmcgbWFuYWdlZCBieSB0aGUgZm9ybS5cbiAgICogSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgaWYgbm90IHByb3ZpZGVkLCBlbnN1cmluZyBlYWNoIGZvcm0gaW5zdGFuY2UgaGFzIGEgZGlzdGluY3QgaWRlbnRpZmllci5cbiAgICogVGhlIHVpZCBpcyB1c2VkIGZvciB0cmFja2luZywgcmVmZXJlbmNpbmcsIGFuZCBlbWl0dGluZyBldmVudHMgcmVsYXRlZCB0byB0aGUgY3VycmVudCByZWNvcmQsIGFuZCBtYXkgYmUgdXNlZFxuICAgKiBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBwcmltYXJ5IGtleSBmb3IgQ1JVRCBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBSYW5kb21seSBnZW5lcmF0ZWQgMTItY2hhcmFjdGVyIHN0cmluZ1xuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGFsbG93Q2xlYXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIENSVUQgb3BlcmF0aW9uIGNvbnN0YW50cyBmb3IgdGVtcGxhdGUgdXNhZ2UuXG4gICAqIEBzdW1tYXJ5IEV4cG9zZXMgdGhlIE9wZXJhdGlvbktleXMgZW51bSB0byB0aGUgY29tcG9uZW50IHRlbXBsYXRlLCBlbmFibGluZ1xuICAgKiBjb25kaXRpb25hbCByZW5kZXJpbmcgYW5kIGJlaGF2aW9yIGJhc2VkIG9uIG9wZXJhdGlvbiB0eXBlcy4gVGhpcyBwcm90ZWN0ZWRcbiAgICogcmVhZG9ubHkgcHJvcGVydHkgZW5zdXJlcyB0aGF0IHRlbXBsYXRlIGxvZ2ljIGNhbiBhY2Nlc3Mgb3BlcmF0aW9uIGNvbnN0YW50c1xuICAgKiB3aGlsZSBtYWludGFpbmluZyBlbmNhcHN1bGF0aW9uIGFuZCBwcmV2ZW50aW5nIGFjY2lkZW50YWwgbW9kaWZpY2F0aW9uLlxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEByZWFkb25seVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBPcGVyYXRpb25LZXlzID0gT3BlcmF0aW9uS2V5cztcblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgZW1pdHRlciBmb3IgZm9ybSBzdWJtaXNzaW9uIGV2ZW50cy5cbiAgICogQHN1bW1hcnkgRW1pdHMgQ3J1ZEZvcm1FdmVudCBvYmplY3RzIHdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkLCBwcm92aWRpbmdcbiAgICogZm9ybSBkYXRhLCBjb21wb25lbnQgaW5mb3JtYXRpb24sIGFuZCBhbnkgYXNzb2NpYXRlZCBoYW5kbGVycyB0byBwYXJlbnRcbiAgICogY29tcG9uZW50cy4gVGhpcyBlbmFibGVzIGRlY291cGxlZCBoYW5kbGluZyBvZiBmb3JtIHN1Ym1pc3Npb24gbG9naWMuXG4gICAqXG4gICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8Q3J1ZEZvcm1FdmVudD59XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHN1Ym1pdEV2ZW50OiBFdmVudEVtaXR0ZXI8Q3J1ZEZvcm1FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPENydWRGb3JtRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dnZXIgaW5zdGFuY2UgZm9yIHRoZSBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGxvZ2dpbmcgY2FwYWJpbGl0aWVzIGZvciB0aGUgY29tcG9uZW50LCBhbGxvd2luZyBmb3IgY29uc2lzdGVudFxuICAgKiBhbmQgc3RydWN0dXJlZCBsb2dnaW5nIG9mIGluZm9ybWF0aW9uLCB3YXJuaW5ncywgYW5kIGVycm9ycy4gVGhpcyBsb2dnZXIgaXMgaW5pdGlhbGl6ZWRcbiAgICogaW4gdGhlIG5nT25Jbml0IG1ldGhvZCB1c2luZyB0aGUgZ2V0TG9nZ2VyIGZ1bmN0aW9uIGZyb20gdGhlIEZvckFuZ3VsYXJDb21tb25Nb2R1bGUuXG4gICAqXG4gICAqIFRoZSBsb2dnZXIgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBjb21wb25lbnQgdG8gcmVjb3JkIGltcG9ydGFudCBldmVudHMsIGRlYnVnIGluZm9ybWF0aW9uLFxuICAgKiBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gSXQgaGVscHMgaW4gbW9uaXRvcmluZyB0aGUgY29tcG9uZW50J3MgYmVoYXZpb3IsIHRyYWNraW5nIHRoZSBmbG93XG4gICAqIG9mIG9wZXJhdGlvbnMsIGFuZCBmYWNpbGl0YXRpbmcgZWFzaWVyIGRlYnVnZ2luZyBhbmQgbWFpbnRlbmFuY2UuXG4gICAqXG4gICAqIEB0eXBlIHtMb2dnZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBsb2dnZXIhOiBMb2dnZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBbmd1bGFyIExvY2F0aW9uIHNlcnZpY2UuXG4gICAqIEBzdW1tYXJ5IEluamVjdGVkIHNlcnZpY2UgdGhhdCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGJyb3dzZXIncyBVUkwgYW5kIGhpc3RvcnkuXG4gICAqIFRoaXMgc2VydmljZSBpcyB1c2VkIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBicm93c2VyJ3MgaGlzdG9yeSBBUEksIGFsbG93aW5nXG4gICAqIGZvciBiYWNrIG5hdmlnYXRpb24gYW5kIFVSTCBtYW5pcHVsYXRpb24gb3V0c2lkZSBvZiBBbmd1bGFyJ3Mgcm91dGVyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7TG9jYXRpb259XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24gPSBpbmplY3QoTG9jYXRpb24pO1xuXG4gIC8vIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBpZiAoIVtPcGVyYXRpb25LZXlzLlJFQUQsIE9wZXJhdGlvbktleXMuREVMRVRFXS5pbmNsdWRlcyh0aGlzLm9wZXJhdGlvbikpXG4gICAgLy8gICBOZ3hGb3JtU2VydmljZS5mb3JtQWZ0ZXJWaWV3SW5pdCh0aGlzLCB0aGlzLnJlbmRlcmVySWQpO1xuICAvLyB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnQgaW5pdGlhbGl6YXRpb24gbGlmZWN5Y2xlIG1ldGhvZC5cbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCBieSBzZXR0aW5nIHVwIHRoZSBsb2dnZXIsIGNvbmZpZ3VyaW5nIGZvcm0gc3RhdGVcbiAgICogYmFzZWQgb24gdGhlIG9wZXJhdGlvbiB0eXBlLCBhbmQgbWVyZ2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZvciBSRUFEIGFuZCBERUxFVEVcbiAgICogb3BlcmF0aW9ucywgdGhlIGZvcm1Hcm91cCBpcyBzZXQgdG8gdW5kZWZpbmVkIHNpbmNlIHRoZXNlIG9wZXJhdGlvbnMgZG9uJ3QgcmVxdWlyZVxuICAgKiBmb3JtIGlucHV0LiBDb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG1lcmdlZCB3aXRoIGRlZmF1bHQgc2V0dGluZ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5sb2dnZXIpXG4gICAgICB0aGlzLmxvZ2dlciA9IGdldExvZ2dlcih0aGlzKTtcbiAgICBpZiAodGhpcy5vcGVyYXRpb24gPT09IE9wZXJhdGlvbktleXMuUkVBRCB8fCB0aGlzLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5ERUxFVEUpXG4gICAgICB0aGlzLmZvcm1Hcm91cCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBEZWZhdWx0Rm9ybVJlYWN0aXZlT3B0aW9ucyxcbiAgICAgIHRoaXMub3B0aW9ucyB8fCB7fSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnQgY2xlYW51cCBsaWZlY3ljbGUgbWV0aG9kLlxuICAgKiBAc3VtbWFyeSBQZXJmb3JtcyBjbGVhbnVwIG9wZXJhdGlvbnMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cbiAgICogVW5yZWdpc3RlcnMgdGhlIEZvcm1Hcm91cCBmcm9tIHRoZSBOZ3hGb3JtU2VydmljZSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuICAgKiBhbmQgZW5zdXJlIHByb3BlciByZXNvdXJjZSBjbGVhbnVwLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXApXG4gICAgICBOZ3hGb3JtU2VydmljZS51bnJlZ2lzdGVyKHRoaXMuZm9ybUdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBmb3JtIHN1Ym1pc3Npb24gd2l0aCB2YWxpZGF0aW9uIGFuZCBldmVudCBlbWlzc2lvbi5cbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIGZvcm0gc3VibWlzc2lvbiBieSBmaXJzdCBwcmV2ZW50aW5nIGRlZmF1bHQgYnJvd3NlciBiZWhhdmlvcixcbiAgICogdGhlbiB2YWxpZGF0aW5nIGFsbCBmb3JtIGZpZWxkcyB1c2luZyBOZ3hGb3JtU2VydmljZS4gSWYgdmFsaWRhdGlvbiBwYXNzZXMsXG4gICAqIGV4dHJhY3RzIGZvcm0gZGF0YSBhbmQgZW1pdHMgYSBzdWJtaXRFdmVudCB3aXRoIHRoZSBkYXRhLCBjb21wb25lbnQgaW5mb3JtYXRpb24sXG4gICAqIGFuZCBhbnkgYXNzb2NpYXRlZCBoYW5kbGVycy4gUmV0dXJucyBmYWxzZSBpZiB2YWxpZGF0aW9uIGZhaWxzLlxuICAgKlxuICAgKiBAcGFyYW0ge1N1Ym1pdEV2ZW50fSBldmVudCAtIFRoZSBicm93c2VyJ3MgbmF0aXZlIGZvcm0gc3VibWl0IGV2ZW50XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4gfCB2b2lkPn0gUmV0dXJucyBmYWxzZSBpZiB2YWxpZGF0aW9uIGZhaWxzLCB2b2lkIGlmIHN1Y2Nlc3NmdWxcbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBhc3luYyBzdWJtaXQoZXZlbnQ6IFN1Ym1pdEV2ZW50KTogUHJvbWlzZTxib29sZWFuIHwgdm9pZD4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCFOZ3hGb3JtU2VydmljZS52YWxpZGF0ZUZpZWxkcyh0aGlzLmZvcm1Hcm91cCBhcyBGb3JtR3JvdXApKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGRhdGEgPSBOZ3hGb3JtU2VydmljZS5nZXRGb3JtRGF0YSh0aGlzLmZvcm1Hcm91cCBhcyBGb3JtR3JvdXApO1xuICAgIHRoaXMuc3VibWl0RXZlbnQuZW1pdCh7XG4gICAgICBkYXRhLFxuICAgICAgY29tcG9uZW50OiAnQ3J1ZEZvcm1Db21wb25lbnQnLFxuICAgICAgbmFtZTogdGhpcy5hY3Rpb24gfHwgRXZlbnRDb25zdGFudHMuU1VCTUlULFxuICAgICAgaGFuZGxlcnM6IHRoaXMuaGFuZGxlcnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgZm9ybSByZXNldCBvciBuYXZpZ2F0aW9uIGJhY2sgZnVuY3Rpb25hbGl0eS5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgZGlmZmVyZW50IHJlc2V0IGJlaGF2aW9yIGJhc2VkIG9uIHRoZSBjdXJyZW50IG9wZXJhdGlvbi5cbiAgICogRm9yIENSRUFURSBhbmQgVVBEQVRFIG9wZXJhdGlvbnMsIHJlc2V0cyB0aGUgZm9ybSB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cbiAgICogRm9yIFJFQUQgYW5kIERFTEVURSBvcGVyYXRpb25zLCBuYXZpZ2F0ZXMgYmFjayBpbiB0aGUgYnJvd3NlciBoaXN0b3J5XG4gICAqIHNpbmNlIHRoZXNlIG9wZXJhdGlvbnMgZG9uJ3QgaGF2ZSBtb2RpZmlhYmxlIGZvcm0gZGF0YSB0byByZXNldC5cbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlUmVzZXQoKTogdm9pZCB7XG4gICAgaWYoIVtPcGVyYXRpb25LZXlzLkRFTEVURSwgT3BlcmF0aW9uS2V5cy5SRUFEXS5pbmNsdWRlcyh0aGlzLm9wZXJhdGlvbikgJiYgdGhpcy5hbGxvd0NsZWFyKVxuICAgICAgcmV0dXJuIE5neEZvcm1TZXJ2aWNlLnJlc2V0KHRoaXMuZm9ybUdyb3VwIGFzIEZvcm1Hcm91cCk7XG4gICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgZGVsZXRlIG9wZXJhdGlvbnMgYnkgZW1pdHRpbmcgZGVsZXRlIGV2ZW50cy5cbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIGRlbGV0ZSByZXF1ZXN0cyBieSBlbWl0dGluZyBhIHN1Ym1pdCBldmVudCB3aXRoIHRoZVxuICAgKiByZWNvcmQncyB1bmlxdWUgaWRlbnRpZmllciBhcyBkYXRhLiBUaGlzIGFsbG93cyBwYXJlbnQgY29tcG9uZW50cyB0b1xuICAgKiBoYW5kbGUgdGhlIGFjdHVhbCBkZWxldGlvbiBsb2dpYyB3aGlsZSBtYWludGFpbmluZyBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zLlxuICAgKiBUaGUgZXZlbnQgaW5jbHVkZXMgdGhlIHVpZCBhbmQgc3RhbmRhcmQgY29tcG9uZW50IGlkZW50aWZpY2F0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVEZWxldGUoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJtaXRFdmVudC5lbWl0KHtcbiAgICAgIGRhdGE6IHRoaXMubW9kZWxJZCxcbiAgICAgIGNvbXBvbmVudDogJ0NydWRGb3JtQ29tcG9uZW50JyxcbiAgICAgIG5hbWU6IEV2ZW50Q29uc3RhbnRzLlNVQk1JVCxcbiAgICB9KTtcbiAgfVxuXG59XG4iLCJAaWYob3BlcmF0aW9uICE9PSAncmVhZCcgJiYgb3BlcmF0aW9uICE9PSAnZGVsZXRlJykge1xuICA8Zm9ybSAjcmVhY3RpdmVGb3JtIFtpZF09XCJyZW5kZXJlcklkXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiAoc3VibWl0KT1cInN1Ym1pdCgkZXZlbnQpXCIgbm92YWxpZGF0ZSBbdGFyZ2V0XT1cInRhcmdldFwiPlxuICAgIDxuZy1jb250ZW50ICNmb3JtQ29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cImRjZi1idXR0b25zLWNvbnRhaW5lciBkY2YtZ3JpZCBkY2YtZ3JpZC1jb2xsYXBzZSBkY2YtZmxleCBkY2YtZmxleC1sZWZ0XCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt7IGFjdGlvbiA/IGFjdGlvbiA6IG9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudGV4dH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmKCFhY3Rpb24pIHtcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiaGFuZGxlUmVzZXQoKVwiPlxuICAgICAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvbikge1xuICAgICAgICAgICAgICA8aW9uLWljb24gIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQmFja1xuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbn0gQGVsc2Uge1xuICA8ZGl2IFtjbGFzc109XCInZGNmLWJ1dHRvbnMtY29udGFpbmVyIGRjZi1ncmlkIGRjZi1ncmlkLWNvbGxhcHNlIGRjZi1mbGV4IGRjZi1mbGV4LWxlZnQgJyArIG9wZXJhdGlvblwiIFtpZF09XCJ1aWRcIj5cbiAgICBAaWYob3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLlJFQUQgJiYgbW9kZWxJZCkge1xuICAgICAgPGRpdj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRGVsZXRlKClcIlxuICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvbikge1xuICAgICAgICAgICAgPGlvbi1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBEZWxldGVcbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICB9XG4gICAgQGlmKG9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5DUkVBVEUgfHwgb3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLlVQREFURSkge1xuXG4gICAgICA8ZGl2PlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt7b3B0aW9ucy5idXR0b25zLnN1Ym1pdC50ZXh0fX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5jbGVhcikge1xuICAgICAgPGRpdj5cbiAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiaGFuZGxlUmVzZXQoKVwiPlxuICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb24pIHtcbiAgICAgICAgICAgIDxpb24taWNvbiAgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt7IFtPcGVyYXRpb25LZXlzLkRFTEVURSwgT3BlcmF0aW9uS2V5cy5SRUFELCBPcGVyYXRpb25LZXlzLlVQREFURV0uaW5jbHVkZXMob3BlcmF0aW9uKSA/ICdCYWNrJyA6IG9wdGlvbnMuYnV0dG9ucy5jbGVhcj8udGV4dH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgfVxuICA8L2Rpdj5cbn1cblxuIl19
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQWEsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFpQixPQUFPLEVBQUUsY0FBYyxFQUErRCxNQUFNLGNBQWMsQ0FBQztBQUVuSSxPQUFPLEVBQWtCLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQUcvRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQStESSxJQUFNLGlCQUFpQixHQUF2QixNQUFNLGlCQUFpQjtJQUF2QjtRQTJCTDs7Ozs7Ozs7O1dBU0c7UUFFSCxhQUFRLEdBQW9CLFFBQVEsQ0FBQztRQWNyQzs7Ozs7Ozs7O1dBU0c7UUFFSCxXQUFNLEdBQW1C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T0FBTzs7QUF3RHRDLGlCQUFpQjtJQTlEN0IsT0FBTyxFQUFFO0dBOERHLGlCQUFpQixDQXFWN0I7OzRGQXJWWSxpQkFBaUI7a0JBN0Q3QixTQUFTO2lDQUNJLElBQUksWUFDTixxQkFBcUIsV0FHdEIsQ0FBQyxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFFBQzVDLEVBQUMsV0FBVyxFQUFFLEtBQUssRUFBQzs4QkFrRTFCLEtBQUs7c0JBREosS0FBSztnQkFlTixPQUFPO3NCQUROLEtBQUs7Z0JBY04sUUFBUTtzQkFEUCxLQUFLO2dCQWFOLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBYzlELE1BQU07c0JBREwsS0FBSztnQkFjTixNQUFNO3NCQURMLEtBQUs7Z0JBYU4sT0FBTztzQkFETixLQUFLO2dCQWFOLE1BQU07c0JBREwsS0FBSztnQkFjTixTQUFTO3NCQURSLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQWF6QixRQUFRO3NCQURQLEtBQUs7Z0JBYU4sU0FBUztzQkFEUixLQUFLO2dCQVdOLE9BQU87c0JBRE4sS0FBSztnQkFhTixVQUFVO3NCQURULEtBQUs7Z0JBWU4sR0FBRztzQkFERixLQUFLO2dCQWdCTixVQUFVO3NCQURULEtBQUs7Z0JBMkJOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUZvcm1FbGVtZW50IH0gZnJvbSAnLi4vLi4vZW5naW5lL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTmd4Rm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9lbmdpbmUvTmd4Rm9ybVNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J1ZEZvcm1FdmVudCwgRHluYW1pYywgRXZlbnRDb25zdGFudHMsIEZpZWxkVXBkYXRlTW9kZSwgSGFuZGxlckxpa2UsIEhUTUxGb3JtVGFyZ2V0LCBSZW5kZXJlZE1vZGVsIH0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7IENydWRGb3JtT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQ3J1ZE9wZXJhdGlvbnMsIE9wZXJhdGlvbktleXMgfSBmcm9tICdAZGVjYWYtdHMvZGItZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBEZWZhdWx0Rm9ybVJlYWN0aXZlT3B0aW9ucyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSAnQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uJztcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJ0BkZWNhZi10cy9sb2dnaW5nJztcbmltcG9ydCB7IGdlbmVyYXRlUmFuZG9tVmFsdWUgfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4uLy4uL2Zvci1hbmd1bGFyLWNvbW1vbi5tb2R1bGUnO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5cblxuLyoqXG4gKiBAY29tcG9uZW50IENydWRGb3JtQ29tcG9uZW50XG4gKiBAZXhhbXBsZSA8bmd4LWRlY2FmLWNydWQtZm9ybVxuICogICBhY3Rpb249XCJjcmVhdGVcIlxuICogICBvcGVyYXRpb249XCJjcmVhdGVcIlxuICogICBmb3JtR3JvdXA9XCJmb3JtR3JvdXBcIlxuICogICByZW5kZXJlcklkPVwicmVuZGVyZXJJZFwiXG4gKiAgIHN1Ym1pdEV2ZW50PVwic3VibWl0RXZlbnRcIlxuICogICB0YXJnZXQ9XCJfc2VsZlwiXG4gKiAgIG1ldGhvZD1cImV2ZW50XCI+XG4gKiA8L25neC1kZWNhZi1jcnVkLWZvcm0+XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbiAtIFRoZSBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkIChjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgZGVsZXRlKVxuICogQHBhcmFtIHtDcnVkT3BlcmF0aW9uc30gb3BlcmF0aW9uIC0gVGhlIENSVUQgb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZCAoY3JlYXRlLCByZWFkLCB1cGRhdGUsIGRlbGV0ZSlcbiAqIEBwYXJhbSB7Rm9ybUdyb3VwfSBmb3JtR3JvdXAgLSBUaGUgZm9ybSBncm91cFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbmRlcmVySWQgLSBUaGUgcmVuZGVyZXIgaWRcbiAqIEBwYXJhbSB7U3VibWl0RXZlbnR9IHN1Ym1pdEV2ZW50IC0gVGhlIHN1Ym1pdCBldmVudFxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldCAtIFRoZSB0YXJnZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgLSBUaGUgbWV0aG9kXG4gKi9cbkBEeW5hbWljKClcbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ25neC1kZWNhZi1jcnVkLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3J1ZC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlLCBJb25CdXR0b24sIElvbkljb25dLFxuICBob3N0OiB7J1thdHRyLmlkXSc6ICd1aWQnfSxcbn0pXG4vKipcbiAqIEBjbGFzcyBDcnVkRm9ybUNvbXBvbmVudFxuICogQGltcGxlbWVudHMgT25Jbml0LCBJRm9ybUVsZW1lbnQsIE9uRGVzdHJveSwgUmVuZGVyZWRNb2RlbFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIGBDcnVkRm9ybUNvbXBvbmVudGAgaXMgYW4gQW5ndWxhciBjb21wb25lbnQgZGVzaWduZWQgdG8gcHJvdmlkZSBhIGZsZXhpYmxlIGFuZCBleHRlbnNpYmxlIGZvcm0gaW50ZXJmYWNlIGZvciBwZXJmb3JtaW5nIENSVUQgKENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUpIG9wZXJhdGlvbnMgb24gYSBkYXRhIG1vZGVsLiBJdCBpbnRlZ3JhdGVzIHdpdGggQW5ndWxhcidzIHJlYWN0aXZlIGZvcm1zIGFuZCBzdXBwb3J0cyBhZHZhbmNlZCBjb25maWd1cmF0aW9uLCB2YWxpZGF0aW9uLCBhbmQgZXZlbnQgaGFuZGxpbmcgZm9yIGEgd2lkZSByYW5nZSBvZiB1c2UgY2FzZXMuXG4gKlxuICogQHN1bW1hcnlcbiAqIC0gU3VwcG9ydHMgZHluYW1pYyBmb3JtIHJlbmRlcmluZyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZGF0YSBtb2RlbCBhbmQgb3BlcmF0aW9uIHR5cGUuXG4gKiAtIEhhbmRsZXMgZm9ybSB2YWxpZGF0aW9uLCBzdWJtaXNzaW9uLCBhbmQgcmVzZXQgbG9naWMgd2l0aCBjdXN0b21pemFibGUgYmVoYXZpb3IuXG4gKiAtIEVtaXRzIHN0cnVjdHVyZWQgZXZlbnRzIGZvciBmb3JtIGFjdGlvbnMsIGVuYWJsaW5nIGRlY291cGxlZCBidXNpbmVzcyBsb2dpYy5cbiAqIC0gSW50ZWdyYXRlcyB3aXRoIGV4dGVybmFsIHNlcnZpY2VzIGZvciBsb2dnaW5nLCBmb3JtIG1hbmFnZW1lbnQsIGFuZCBuYXZpZ2F0aW9uLlxuICogLSBQcm92aWRlcyBleHRlbnNpdmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBmb3JtIGFwcGVhcmFuY2UgYW5kIGJlaGF2aW9yLlxuICpcbiAqIEBpbnB1dHNcbiAqIC0gYG1vZGVsYDogVGhlIHJlcG9zaXRvcnkgbW9kZWwgZm9yIGRhdGEgb3BlcmF0aW9ucy5cbiAqIC0gYG1vZGVsSWRgOiBUaGUgcHJpbWFyeSBkYXRhIG1vZGVsIGluc3RhbmNlIGZvciBDUlVEIG9wZXJhdGlvbnMuXG4gKiAtIGB1cGRhdGVPbmA6IERldGVybWluZXMgd2hlbiBmb3JtIGZpZWxkIHZhbGlkYXRpb24gaXMgdHJpZ2dlcmVkIChgY2hhbmdlYCwgYGJsdXJgLCBvciBgc3VibWl0YCkuXG4gKiAtIGBjb21wb25lbnRgOiBSZWZlcmVuY2UgdG8gdGhlIHJlYWN0aXZlIGZvcm0gRE9NIGVsZW1lbnQuXG4gKiAtIGB0YXJnZXRgOiBTcGVjaWZpZXMgdGhlIGZvcm0gc3VibWlzc2lvbiB0YXJnZXQgKGUuZy4sIGBfc2VsZmAsIGBfYmxhbmtgKS5cbiAqIC0gYG1ldGhvZGA6IERlZmluZXMgdGhlIGZvcm0gc3VibWlzc2lvbiBzdHJhdGVneSAoYGdldGAsIGBwb3N0YCwgb3IgYGV2ZW50YCkuXG4gKiAtIGBvcHRpb25zYDogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBmb3JtIGJlaGF2aW9yIGFuZCByZW5kZXJpbmcuXG4gKiAtIGBhY3Rpb25gOiBPcHRpb25hbCBjdXN0b20gYWN0aW9uIGlkZW50aWZpZXIgZm9yIHN1Ym1pc3Npb24gY29udGV4dC5cbiAqIC0gYG9wZXJhdGlvbmA6IFRoZSBjdXJyZW50IENSVUQgb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZCAocmVxdWlyZWQpLlxuICogLSBgaGFuZGxlcnNgOiBDdXN0b20gZXZlbnQgaGFuZGxlcnMgZm9yIGZvcm0gYWN0aW9ucy5cbiAqIC0gYGZvcm1Hcm91cGA6IEFuZ3VsYXIgRm9ybUdyb3VwIGZvciBmb3JtIHN0YXRlIG1hbmFnZW1lbnQuXG4gKiAtIGBjaGlsZE9mYDogUGF0aCB0byB0aGUgcGFyZW50IEZvcm1Hcm91cCBpZiBuZXN0ZWQuXG4gKiAtIGByZW5kZXJlcklkYDogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBmb3JtIHJlbmRlcmVyLlxuICogLSBgdWlkYDogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHJlY29yZC5cbiAqIC0gYGFsbG93Q2xlYXJgOiBFbmFibGVzIG9yIGRpc2FibGVzIGZvcm0gY2xlYXJpbmcgZnVuY3Rpb25hbGl0eS5cbiAqXG4gKiBAb3V0cHV0c1xuICogLSBgc3VibWl0RXZlbnRgOiBFbWl0cyBgQ3J1ZEZvcm1FdmVudGAgb2JqZWN0cyBvbiBmb3JtIHN1Ym1pc3Npb24uXG4gKlxuICogQHByb3RlY3RlZFxuICogLSBgT3BlcmF0aW9uS2V5c2A6IFJlZmVyZW5jZSB0byBDUlVEIG9wZXJhdGlvbiBjb25zdGFudHMgZm9yIHRlbXBsYXRlIHVzYWdlLlxuICpcbiAqIEBwcml2YXRlXG4gKiAtIGBsb2dnZXJgOiBMb2dnZXIgaW5zdGFuY2UgZm9yIHN0cnVjdHVyZWQgbG9nZ2luZy5cbiAqIC0gYGxvY2F0aW9uYDogQW5ndWxhciBMb2NhdGlvbiBzZXJ2aWNlIGZvciBuYXZpZ2F0aW9uLlxuICpcbiAqIEBsaWZlY3ljbGVcbiAqIC0gYG5nT25Jbml0YDogSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCwgY29uZmlndXJlcyBsb2dnZXIsIG1lcmdlcyBvcHRpb25zLCBhbmQgc2V0cyBmb3JtIHN0YXRlIGJhc2VkIG9uIG9wZXJhdGlvbi5cbiAqIC0gYG5nT25EZXN0cm95YDogQ2xlYW5zIHVwIHJlc291cmNlcyBhbmQgdW5yZWdpc3RlcnMgdGhlIEZvcm1Hcm91cC5cbiAqXG4gKiBAbWV0aG9kc1xuICogLSBgc3VibWl0KGV2ZW50OiBTdWJtaXRFdmVudClgOiBIYW5kbGVzIGZvcm0gc3VibWlzc2lvbiwgdmFsaWRhdGlvbiwgYW5kIGV2ZW50IGVtaXNzaW9uLlxuICogLSBgaGFuZGxlUmVzZXQoKWA6IFJlc2V0cyB0aGUgZm9ybSBvciBuYXZpZ2F0ZXMgYmFjayBiYXNlZCBvbiB0aGUgb3BlcmF0aW9uLlxuICogLSBgaGFuZGxlRGVsZXRlKClgOiBFbWl0cyBhIGRlbGV0ZSBldmVudCBmb3IgdGhlIGN1cnJlbnQgcmVjb3JkLlxuICpcbiAqIEB1c2FnZVxuICogVXNlIHRoaXMgY29tcG9uZW50IHdpdGhpbiBBbmd1bGFyIHRlbXBsYXRlcyB0byBwcm92aWRlIGEgcm9idXN0IENSVUQgZm9ybSBpbnRlcmZhY2UuIENvbmZpZ3VyZSBpbnB1dHMgdG8gbWF0Y2ggeW91ciBkYXRhIG1vZGVsIGFuZCBkZXNpcmVkIGJlaGF2aW9yLCBhbmQgaGFuZGxlIG91dHB1dCBldmVudHMgdG8gaW1wbGVtZW50IGN1c3RvbSBidXNpbmVzcyBsb2dpYy5cbiAqL1xuZXhwb3J0IGNsYXNzIENydWRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBJRm9ybUVsZW1lbnQsIE9uRGVzdHJveSwgUmVuZGVyZWRNb2RlbCB7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBvc2l0b3J5IG1vZGVsIGZvciBkYXRhIG9wZXJhdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFRoZSBkYXRhIG1vZGVsIHJlcG9zaXRvcnkgdGhhdCB0aGlzIGNvbXBvbmVudCB3aWxsIHVzZSBmb3IgQ1JVRCBvcGVyYXRpb25zLlxuICAgKiBUaGlzIHByb3ZpZGVzIGEgY29ubmVjdGlvbiB0byB0aGUgZGF0YSBsYXllciBmb3IgcmV0cmlldmluZyBhbmQgbWFuaXB1bGF0aW5nIGRhdGEuXG4gICAqXG4gICAqIEB0eXBlIHtNb2RlbHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIG1vZGVsITogTW9kZWwgfCB1bmRlZmluZWQ7XG5cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBwcmltYXJ5IGRhdGEgbW9kZWwgdXNlZCBmb3IgQ1JVRCBvcGVyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBUaGlzIGlucHV0IHByb3ZpZGVzIHRoZSBtYWluIE1vZGVsIGluc3RhbmNlIHRoYXQgdGhlIGZvcm0gaW50ZXJhY3RzIHdpdGggZm9yXG4gICAqIGNyZWF0aW5nLCByZWFkaW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgcmVjb3Jkcy4gSXQgc2VydmVzIGFzIHRoZSBzb3VyY2Ugb2Ygc2NoZW1hXG4gICAqIGFuZCB2YWxpZGF0aW9uIHJ1bGVzIGZvciB0aGUgZm9ybSBmaWVsZHMsIGFuZCBpcyByZXF1aXJlZCBmb3IgbW9zdCBvcGVyYXRpb25zIGV4Y2VwdFxuICAgKiBmb3IgY2VydGFpbiByZWFkIG9yIGRlbGV0ZSBzY2VuYXJpb3MuXG4gICAqXG4gICAqIEB0eXBlIHtNb2RlbCB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBtb2RlbElkITogTW9kZWwgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGaWVsZCB1cGRhdGUgdHJpZ2dlciBtb2RlIGZvciBmb3JtIHZhbGlkYXRpb24uXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgd2hlbiBmb3JtIGZpZWxkIHZhbGlkYXRpb24gc2hvdWxkIGJlIHRyaWdnZXJlZC4gT3B0aW9ucyBpbmNsdWRlXG4gICAqICdjaGFuZ2UnLCAnYmx1cicsIG9yICdzdWJtaXQnLiBUaGlzIGFmZmVjdHMgdGhlIHVzZXIgZXhwZXJpZW5jZSBieSBjb250cm9sbGluZ1xuICAgKiB3aGVuIHZhbGlkYXRpb24gZmVlZGJhY2sgaXMgc2hvd24gdG8gdGhlIHVzZXIgZHVyaW5nIGZvcm0gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEB0eXBlIHtGaWVsZFVwZGF0ZU1vZGV9XG4gICAqIEBkZWZhdWx0ICdjaGFuZ2UnXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdXBkYXRlT246IEZpZWxkVXBkYXRlTW9kZSA9ICdjaGFuZ2UnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIHRoZSByZWFjdGl2ZSBmb3JtIERPTSBlbGVtZW50LlxuICAgKiBAc3VtbWFyeSBWaWV3Q2hpbGQgcmVmZXJlbmNlIHRoYXQgcHJvdmlkZXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgZm9ybSdzIERPTSBlbGVtZW50LlxuICAgKiBUaGlzIGVuYWJsZXMgcHJvZ3JhbW1hdGljIG1hbmlwdWxhdGlvbiBvZiB0aGUgZm9ybSBlbGVtZW50IGFuZCBhY2Nlc3MgdG8gbmF0aXZlXG4gICAqIEhUTUwgZm9ybSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIHdoZW4gbmVlZGVkLlxuICAgKlxuICAgKiBAdHlwZSB7RWxlbWVudFJlZn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBAVmlld0NoaWxkKCdyZWFjdGl2ZUZvcm0nLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgY29tcG9uZW50ITogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZvcm0gc3VibWlzc2lvbiB0YXJnZXQgc3BlY2lmaWNhdGlvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHdoZXJlIHRvIGRpc3BsYXkgdGhlIHJlc3BvbnNlIGFmdGVyIGZvcm0gc3VibWlzc2lvbiwgc2ltaWxhclxuICAgKiB0byB0aGUgSFRNTCBmb3JtIHRhcmdldCBhdHRyaWJ1dGUuIE9wdGlvbnMgaW5jbHVkZSAnX3NlbGYnLCAnX2JsYW5rJywgJ19wYXJlbnQnLFxuICAgKiAnX3RvcCcsIG9yIGEgbmFtZWQgZnJhbWUuIENvbnRyb2xzIHRoZSBicm93c2VyIGJlaGF2aW9yIGZvciBmb3JtIHJlc3BvbnNlcy5cbiAgICpcbiAgICogQHR5cGUge0hUTUxGb3JtVGFyZ2V0fVxuICAgKiBAZGVmYXVsdCAnX3NlbGYnXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdGFyZ2V0OiBIVE1MRm9ybVRhcmdldCA9ICdfc2VsZic7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIVFRQIG1ldGhvZCBvciBzdWJtaXNzaW9uIHN0cmF0ZWd5IGZvciB0aGUgZm9ybS5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyBob3cgdGhlIGZvcm0gc2hvdWxkIGJlIHN1Ym1pdHRlZC4gJ2dldCcgYW5kICdwb3N0JyBjb3JyZXNwb25kXG4gICAqIHRvIHN0YW5kYXJkIEhUVFAgbWV0aG9kcyBmb3IgdHJhZGl0aW9uYWwgZm9ybSBzdWJtaXNzaW9uLCB3aGlsZSAnZXZlbnQnIHVzZXNcbiAgICogQW5ndWxhciBldmVudC1kcml2ZW4gc3VibWlzc2lvbiBmb3Igc2luZ2xlLXBhZ2UgYXBwbGljYXRpb24gd29ya2Zsb3dzLlxuICAgKlxuICAgKiBAdHlwZSB7J2dldCcgfCAncG9zdCcgfCAnZXZlbnQnfVxuICAgKiBAZGVmYXVsdCAnZXZlbnQnXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgbWV0aG9kOiAnZ2V0JyB8ICdwb3N0JyB8ICdldmVudCcgPSAnZXZlbnQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQ1JVRCBmb3JtIGJlaGF2aW9yLlxuICAgKiBAc3VtbWFyeSBDb250YWlucyB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdGhhdCBjb250cm9sIGZvcm0gcmVuZGVyaW5nLFxuICAgKiB2YWxpZGF0aW9uLCBhbmQgYmVoYXZpb3IuIFRoZXNlIG9wdGlvbnMgYXJlIG1lcmdlZCB3aXRoIGRlZmF1bHQgc2V0dGluZ3NcbiAgICogZHVyaW5nIGNvbXBvbmVudCBpbml0aWFsaXphdGlvbiB0byBjdXN0b21pemUgdGhlIGZvcm0ncyBmdW5jdGlvbmFsaXR5LlxuICAgKlxuICAgKiBAdHlwZSB7Q3J1ZEZvcm1PcHRpb25zfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIG9wdGlvbnMhOiBDcnVkRm9ybU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBPcHRpb25hbCBhY3Rpb24gaWRlbnRpZmllciBmb3IgZm9ybSBzdWJtaXNzaW9uIGNvbnRleHQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyBhIGN1c3RvbSBhY3Rpb24gbmFtZSB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHN1Ym1pdCBldmVudC5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBkZWZhdWx0cyB0byB0aGUgc3RhbmRhcmQgc3VibWl0IGV2ZW50IGNvbnN0YW50LiBVc2VkIHRvXG4gICAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZmVyZW50IHR5cGVzIG9mIGZvcm0gc3VibWlzc2lvbnMgd2l0aGluIHRoZSBzYW1lIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBhY3Rpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY3VycmVudCBDUlVEIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgdHlwZSBvZiBvcGVyYXRpb24gdGhpcyBmb3JtIGlzIGhhbmRsaW5nIChDUkVBVEUsIFJFQUQsIFVQREFURSwgREVMRVRFKS5cbiAgICogVGhpcyBpcyBhIHJlcXVpcmVkIGlucHV0IHRoYXQgZGV0ZXJtaW5lcyBmb3JtIGJlaGF2aW9yLCB2YWxpZGF0aW9uIHJ1bGVzLCBhbmQgYXZhaWxhYmxlIGFjdGlvbnMuXG4gICAqIFRoZSBvcGVyYXRpb24gYWZmZWN0cyBmb3JtIHN0YXRlLCBidXR0b24gdmlzaWJpbGl0eSwgYW5kIHN1Ym1pc3Npb24gbG9naWMuXG4gICAqXG4gICAqIEB0eXBlIHtDcnVkT3BlcmF0aW9uc31cbiAgICogQHJlcXVpcmVkXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgb3BlcmF0aW9uITogQ3J1ZE9wZXJhdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXN0b20gZXZlbnQgaGFuZGxlcnMgZm9yIGZvcm0gYWN0aW9ucy5cbiAgICogQHN1bW1hcnkgQSByZWNvcmQgb2YgZXZlbnQgaGFuZGxlciBmdW5jdGlvbnMga2V5ZWQgYnkgZXZlbnQgbmFtZXMgdGhhdCBjYW4gYmVcbiAgICogdHJpZ2dlcmVkIGR1cmluZyBmb3JtIG9wZXJhdGlvbnMuIFRoZXNlIGhhbmRsZXJzIHByb3ZpZGUgZXh0ZW5zaWJpbGl0eSBmb3JcbiAgICogY3VzdG9tIGJ1c2luZXNzIGxvZ2ljIGFuZCBjYW4gYmUgaW52b2tlZCBmb3IgdmFyaW91cyBmb3JtIGV2ZW50cyBhbmQgYWN0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge0hhbmRsZXJMaWtlfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGhhbmRsZXJzITogSGFuZGxlckxpa2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBbmd1bGFyIHJlYWN0aXZlIEZvcm1Hcm91cCBmb3IgZm9ybSBzdGF0ZSBtYW5hZ2VtZW50LlxuICAgKiBAc3VtbWFyeSBUaGUgRm9ybUdyb3VwIGluc3RhbmNlIHRoYXQgbWFuYWdlcyBhbGwgZm9ybSBjb250cm9scywgdmFsaWRhdGlvbixcbiAgICogYW5kIGZvcm0gc3RhdGUuIFRoaXMgaXMgdGhlIG1haW4gaW50ZXJmYWNlIGZvciBhY2Nlc3NpbmcgZm9ybSB2YWx1ZXMgYW5kXG4gICAqIGNvbnRyb2xsaW5nIGZvcm0gYmVoYXZpb3IuIE1heSBiZSB1bmRlZmluZWQgZm9yIHJlYWQtb25seSBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7Rm9ybUdyb3VwIHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGZvcm1Hcm91cCE6IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhdGggdG8gdGhlIHBhcmVudCBGb3JtR3JvdXAsIGlmIG5lc3RlZC5cbiAgICogQHN1bW1hcnkgRnVsbCBkb3QtZGVsaW1pdGVkIHBhdGggb2YgdGhlIHBhcmVudCBGb3JtR3JvdXAuIFNldCBvbmx5IHdoZW4gaXMgcGFydCBvZiBhIG5lc3RlZCBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgY2hpbGRPZj86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZm9ybSByZW5kZXJlci5cbiAgICogQHN1bW1hcnkgQSB1bmlxdWUgc3RyaW5nIGlkZW50aWZpZXIgdXNlZCB0byByZWdpc3RlciBhbmQgbWFuYWdlIHRoaXMgZm9ybVxuICAgKiBpbnN0YW5jZSB3aXRoaW4gdGhlIE5neEZvcm1TZXJ2aWNlLiBUaGlzIElEIGlzIGFsc28gdXNlZCBhcyB0aGUgSFRNTCBpZFxuICAgKiBhdHRyaWJ1dGUgZm9yIHRoZSBmb3JtIGVsZW1lbnQsIGVuYWJsaW5nIERPTSBxdWVyaWVzIGFuZCBmb3JtIG1hbmFnZW1lbnQuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgcmVuZGVyZXJJZCE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCByZWNvcmQuXG4gICAqIEBzdW1tYXJ5IEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHJlY29yZCBiZWluZyBkaXNwbGF5ZWQgb3IgbWFuaXB1bGF0ZWQuXG4gICAqIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcHJpbWFyeSBrZXkgZm9yIG9wZXJhdGlvbnMgb24gc3BlY2lmaWMgcmVjb3Jkcy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IG51bWJlcn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICB1aWQ6IHN0cmluZyA9IGdlbmVyYXRlUmFuZG9tVmFsdWUoMTIpO1xuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgcmVjb3JkIGluc3RhbmNlLlxuICAgKiBAc3VtbWFyeSBUaGlzIHByb3BlcnR5IGhvbGRzIGEgdW5pcXVlIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHNwZWNpZmljIHJlY29yZCBiZWluZyBtYW5hZ2VkIGJ5IHRoZSBmb3JtLlxuICAgKiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBpZiBub3QgcHJvdmlkZWQsIGVuc3VyaW5nIGVhY2ggZm9ybSBpbnN0YW5jZSBoYXMgYSBkaXN0aW5jdCBpZGVudGlmaWVyLlxuICAgKiBUaGUgdWlkIGlzIHVzZWQgZm9yIHRyYWNraW5nLCByZWZlcmVuY2luZywgYW5kIGVtaXR0aW5nIGV2ZW50cyByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHJlY29yZCwgYW5kIG1heSBiZSB1c2VkXG4gICAqIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHByaW1hcnkga2V5IGZvciBDUlVEIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IFJhbmRvbWx5IGdlbmVyYXRlZCAxMi1jaGFyYWN0ZXIgc3RyaW5nXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYWxsb3dDbGVhcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2UgdG8gQ1JVRCBvcGVyYXRpb24gY29uc3RhbnRzIGZvciB0ZW1wbGF0ZSB1c2FnZS5cbiAgICogQHN1bW1hcnkgRXhwb3NlcyB0aGUgT3BlcmF0aW9uS2V5cyBlbnVtIHRvIHRoZSBjb21wb25lbnQgdGVtcGxhdGUsIGVuYWJsaW5nXG4gICAqIGNvbmRpdGlvbmFsIHJlbmRlcmluZyBhbmQgYmVoYXZpb3IgYmFzZWQgb24gb3BlcmF0aW9uIHR5cGVzLiBUaGlzIHByb3RlY3RlZFxuICAgKiByZWFkb25seSBwcm9wZXJ0eSBlbnN1cmVzIHRoYXQgdGVtcGxhdGUgbG9naWMgY2FuIGFjY2VzcyBvcGVyYXRpb24gY29uc3RhbnRzXG4gICAqIHdoaWxlIG1haW50YWluaW5nIGVuY2Fwc3VsYXRpb24gYW5kIHByZXZlbnRpbmcgYWNjaWRlbnRhbCBtb2RpZmljYXRpb24uXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHJlYWRvbmx5XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IE9wZXJhdGlvbktleXMgPSBPcGVyYXRpb25LZXlzO1xuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudCBlbWl0dGVyIGZvciBmb3JtIHN1Ym1pc3Npb24gZXZlbnRzLlxuICAgKiBAc3VtbWFyeSBFbWl0cyBDcnVkRm9ybUV2ZW50IG9iamVjdHMgd2hlbiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQsIHByb3ZpZGluZ1xuICAgKiBmb3JtIGRhdGEsIGNvbXBvbmVudCBpbmZvcm1hdGlvbiwgYW5kIGFueSBhc3NvY2lhdGVkIGhhbmRsZXJzIHRvIHBhcmVudFxuICAgKiBjb21wb25lbnRzLiBUaGlzIGVuYWJsZXMgZGVjb3VwbGVkIGhhbmRsaW5nIG9mIGZvcm0gc3VibWlzc2lvbiBsb2dpYy5cbiAgICpcbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxDcnVkRm9ybUV2ZW50Pn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KClcbiAgc3VibWl0RXZlbnQ6IEV2ZW50RW1pdHRlcjxDcnVkRm9ybUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q3J1ZEZvcm1FdmVudD4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ2dlciBpbnN0YW5jZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgbG9nZ2luZyBjYXBhYmlsaXRpZXMgZm9yIHRoZSBjb21wb25lbnQsIGFsbG93aW5nIGZvciBjb25zaXN0ZW50XG4gICAqIGFuZCBzdHJ1Y3R1cmVkIGxvZ2dpbmcgb2YgaW5mb3JtYXRpb24sIHdhcm5pbmdzLCBhbmQgZXJyb3JzLiBUaGlzIGxvZ2dlciBpcyBpbml0aWFsaXplZFxuICAgKiBpbiB0aGUgbmdPbkluaXQgbWV0aG9kIHVzaW5nIHRoZSBnZXRMb2dnZXIgZnVuY3Rpb24gZnJvbSB0aGUgRm9yQW5ndWxhckNvbW1vbk1vZHVsZS5cbiAgICpcbiAgICogVGhlIGxvZ2dlciBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGNvbXBvbmVudCB0byByZWNvcmQgaW1wb3J0YW50IGV2ZW50cywgZGVidWcgaW5mb3JtYXRpb24sXG4gICAqIGFuZCBwb3RlbnRpYWwgaXNzdWVzLiBJdCBoZWxwcyBpbiBtb25pdG9yaW5nIHRoZSBjb21wb25lbnQncyBiZWhhdmlvciwgdHJhY2tpbmcgdGhlIGZsb3dcbiAgICogb2Ygb3BlcmF0aW9ucywgYW5kIGZhY2lsaXRhdGluZyBlYXNpZXIgZGVidWdnaW5nIGFuZCBtYWludGVuYW5jZS5cbiAgICpcbiAgICogQHR5cGUge0xvZ2dlcn1cbiAgICogQHByaXZhdGVcbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGxvZ2dlciE6IExvZ2dlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFuZ3VsYXIgTG9jYXRpb24gc2VydmljZS5cbiAgICogQHN1bW1hcnkgSW5qZWN0ZWQgc2VydmljZSB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYnJvd3NlcidzIFVSTCBhbmQgaGlzdG9yeS5cbiAgICogVGhpcyBzZXJ2aWNlIGlzIHVzZWQgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGJyb3dzZXIncyBoaXN0b3J5IEFQSSwgYWxsb3dpbmdcbiAgICogZm9yIGJhY2sgbmF2aWdhdGlvbiBhbmQgVVJMIG1hbmlwdWxhdGlvbiBvdXRzaWRlIG9mIEFuZ3VsYXIncyByb3V0ZXIuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtMb2NhdGlvbn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XG5cbiAgLy8gbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIGlmICghW09wZXJhdGlvbktleXMuUkVBRCwgT3BlcmF0aW9uS2V5cy5ERUxFVEVdLmluY2x1ZGVzKHRoaXMub3BlcmF0aW9uKSlcbiAgICAvLyAgIE5neEZvcm1TZXJ2aWNlLmZvcm1BZnRlclZpZXdJbml0KHRoaXMsIHRoaXMucmVuZGVyZXJJZCk7XG4gIC8vIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbXBvbmVudCBpbml0aWFsaXphdGlvbiBsaWZlY3ljbGUgbWV0aG9kLlxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50IGJ5IHNldHRpbmcgdXAgdGhlIGxvZ2dlciwgY29uZmlndXJpbmcgZm9ybSBzdGF0ZVxuICAgKiBiYXNlZCBvbiB0aGUgb3BlcmF0aW9uIHR5cGUsIGFuZCBtZXJnaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIFJFQUQgYW5kIERFTEVURVxuICAgKiBvcGVyYXRpb25zLCB0aGUgZm9ybUdyb3VwIGlzIHNldCB0byB1bmRlZmluZWQgc2luY2UgdGhlc2Ugb3BlcmF0aW9ucyBkb24ndCByZXF1aXJlXG4gICAqIGZvcm0gaW5wdXQuIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbWVyZ2VkIHdpdGggZGVmYXVsdCBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmxvZ2dlcilcbiAgICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKHRoaXMpO1xuICAgIGlmICh0aGlzLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5SRUFEIHx8IHRoaXMub3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLkRFTEVURSlcbiAgICAgIHRoaXMuZm9ybUdyb3VwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIERlZmF1bHRGb3JtUmVhY3RpdmVPcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zIHx8IHt9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbXBvbmVudCBjbGVhbnVwIGxpZmVjeWNsZSBtZXRob2QuXG4gICAqIEBzdW1tYXJ5IFBlcmZvcm1zIGNsZWFudXAgb3BlcmF0aW9ucyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxuICAgKiBVbnJlZ2lzdGVycyB0aGUgRm9ybUdyb3VwIGZyb20gdGhlIE5neEZvcm1TZXJ2aWNlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzXG4gICAqIGFuZCBlbnN1cmUgcHJvcGVyIHJlc291cmNlIGNsZWFudXAuXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cClcbiAgICAgIE5neEZvcm1TZXJ2aWNlLnVucmVnaXN0ZXIodGhpcy5mb3JtR3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGZvcm0gc3VibWlzc2lvbiB3aXRoIHZhbGlkYXRpb24gYW5kIGV2ZW50IGVtaXNzaW9uLlxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgZm9ybSBzdWJtaXNzaW9uIGJ5IGZpcnN0IHByZXZlbnRpbmcgZGVmYXVsdCBicm93c2VyIGJlaGF2aW9yLFxuICAgKiB0aGVuIHZhbGlkYXRpbmcgYWxsIGZvcm0gZmllbGRzIHVzaW5nIE5neEZvcm1TZXJ2aWNlLiBJZiB2YWxpZGF0aW9uIHBhc3NlcyxcbiAgICogZXh0cmFjdHMgZm9ybSBkYXRhIGFuZCBlbWl0cyBhIHN1Ym1pdEV2ZW50IHdpdGggdGhlIGRhdGEsIGNvbXBvbmVudCBpbmZvcm1hdGlvbixcbiAgICogYW5kIGFueSBhc3NvY2lhdGVkIGhhbmRsZXJzLiBSZXR1cm5zIGZhbHNlIGlmIHZhbGlkYXRpb24gZmFpbHMuXG4gICAqXG4gICAqIEBwYXJhbSB7U3VibWl0RXZlbnR9IGV2ZW50IC0gVGhlIGJyb3dzZXIncyBuYXRpdmUgZm9ybSBzdWJtaXQgZXZlbnRcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbiB8IHZvaWQ+fSBSZXR1cm5zIGZhbHNlIGlmIHZhbGlkYXRpb24gZmFpbHMsIHZvaWQgaWYgc3VjY2Vzc2Z1bFxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIGFzeW5jIHN1Ym1pdChldmVudDogU3VibWl0RXZlbnQpOiBQcm9taXNlPGJvb2xlYW4gfCB2b2lkPiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIU5neEZvcm1TZXJ2aWNlLnZhbGlkYXRlRmllbGRzKHRoaXMuZm9ybUdyb3VwIGFzIEZvcm1Hcm91cCkpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZGF0YSA9IE5neEZvcm1TZXJ2aWNlLmdldEZvcm1EYXRhKHRoaXMuZm9ybUdyb3VwIGFzIEZvcm1Hcm91cCk7XG4gICAgdGhpcy5zdWJtaXRFdmVudC5lbWl0KHtcbiAgICAgIGRhdGEsXG4gICAgICBjb21wb25lbnQ6ICdDcnVkRm9ybUNvbXBvbmVudCcsXG4gICAgICBuYW1lOiB0aGlzLmFjdGlvbiB8fCBFdmVudENvbnN0YW50cy5TVUJNSVQsXG4gICAgICBoYW5kbGVyczogdGhpcy5oYW5kbGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBmb3JtIHJlc2V0IG9yIG5hdmlnYXRpb24gYmFjayBmdW5jdGlvbmFsaXR5LlxuICAgKiBAc3VtbWFyeSBQcm92aWRlcyBkaWZmZXJlbnQgcmVzZXQgYmVoYXZpb3IgYmFzZWQgb24gdGhlIGN1cnJlbnQgb3BlcmF0aW9uLlxuICAgKiBGb3IgQ1JFQVRFIGFuZCBVUERBVEUgb3BlcmF0aW9ucywgcmVzZXRzIHRoZSBmb3JtIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuICAgKiBGb3IgUkVBRCBhbmQgREVMRVRFIG9wZXJhdGlvbnMsIG5hdmlnYXRlcyBiYWNrIGluIHRoZSBicm93c2VyIGhpc3RvcnlcbiAgICogc2luY2UgdGhlc2Ugb3BlcmF0aW9ucyBkb24ndCBoYXZlIG1vZGlmaWFibGUgZm9ybSBkYXRhIHRvIHJlc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVSZXNldCgpOiB2b2lkIHtcbiAgICBpZighW09wZXJhdGlvbktleXMuREVMRVRFLCBPcGVyYXRpb25LZXlzLlJFQURdLmluY2x1ZGVzKHRoaXMub3BlcmF0aW9uKSAmJiB0aGlzLmFsbG93Q2xlYXIpXG4gICAgICByZXR1cm4gTmd4Rm9ybVNlcnZpY2UucmVzZXQodGhpcy5mb3JtR3JvdXAgYXMgRm9ybUdyb3VwKTtcbiAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBkZWxldGUgb3BlcmF0aW9ucyBieSBlbWl0dGluZyBkZWxldGUgZXZlbnRzLlxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgZGVsZXRlIHJlcXVlc3RzIGJ5IGVtaXR0aW5nIGEgc3VibWl0IGV2ZW50IHdpdGggdGhlXG4gICAqIHJlY29yZCdzIHVuaXF1ZSBpZGVudGlmaWVyIGFzIGRhdGEuIFRoaXMgYWxsb3dzIHBhcmVudCBjb21wb25lbnRzIHRvXG4gICAqIGhhbmRsZSB0aGUgYWN0dWFsIGRlbGV0aW9uIGxvZ2ljIHdoaWxlIG1haW50YWluaW5nIHNlcGFyYXRpb24gb2YgY29uY2VybnMuXG4gICAqIFRoZSBldmVudCBpbmNsdWRlcyB0aGUgdWlkIGFuZCBzdGFuZGFyZCBjb21wb25lbnQgaWRlbnRpZmljYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIGhhbmRsZURlbGV0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1Ym1pdEV2ZW50LmVtaXQoe1xuICAgICAgZGF0YTogdGhpcy5tb2RlbElkLFxuICAgICAgY29tcG9uZW50OiAnQ3J1ZEZvcm1Db21wb25lbnQnLFxuICAgICAgbmFtZTogRXZlbnRDb25zdGFudHMuU1VCTUlULFxuICAgIH0pO1xuICB9XG5cbn1cbiIsIkBpZihvcGVyYXRpb24gIT09ICdyZWFkJyAmJiBvcGVyYXRpb24gIT09ICdkZWxldGUnKSB7XG4gIDxmb3JtICNyZWFjdGl2ZUZvcm0gW2lkXT1cInJlbmRlcmVySWRcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIChzdWJtaXQpPVwic3VibWl0KCRldmVudClcIiBub3ZhbGlkYXRlIFt0YXJnZXRdPVwidGFyZ2V0XCI+XG4gICAgPG5nLWNvbnRlbnQgI2Zvcm1Db250ZW50PjwvbmctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwiZGNmLWJ1dHRvbnMtY29udGFpbmVyIGRjZi1ncmlkIGRjZi1ncmlkLWNvbGxhcHNlIGRjZi1mbGV4IGRjZi1mbGV4LWxlZnRcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxpb24tYnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBbZXhwYW5kXT1cImFjdGlvbiA/ICdibG9jaycgOiAnZGVmYXVsdCdcIj5cbiAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt7IGFjdGlvbiA/IGFjdGlvbiA6IG9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudGV4dH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmKCFhY3Rpb24pIHtcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiaGFuZGxlUmVzZXQoKVwiPlxuICAgICAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvbikge1xuICAgICAgICAgICAgICA8aW9uLWljb24gIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQmFja1xuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbn0gQGVsc2Uge1xuICA8ZGl2IFtjbGFzc109XCInZGNmLWJ1dHRvbnMtY29udGFpbmVyIGRjZi1ncmlkIGRjZi1ncmlkLWNvbGxhcHNlIGRjZi1mbGV4IGRjZi1mbGV4LWxlZnQgJyArIG9wZXJhdGlvblwiIFtpZF09XCJ1aWRcIj5cbiAgICBAaWYob3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLlJFQUQgJiYgbW9kZWxJZCkge1xuICAgICAgPGRpdj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRGVsZXRlKClcIlxuICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvbikge1xuICAgICAgICAgICAgPGlvbi1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBEZWxldGVcbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICB9XG4gICAgQGlmKG9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5DUkVBVEUgfHwgb3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLlVQREFURSkge1xuXG4gICAgICA8ZGl2PlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt7b3B0aW9ucy5idXR0b25zLnN1Ym1pdC50ZXh0fX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5jbGVhcikge1xuICAgICAgPGRpdj5cbiAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiaGFuZGxlUmVzZXQoKVwiPlxuICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb24pIHtcbiAgICAgICAgICAgIDxpb24taWNvbiAgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt7IFtPcGVyYXRpb25LZXlzLkRFTEVURSwgT3BlcmF0aW9uS2V5cy5SRUFELCBPcGVyYXRpb25LZXlzLlVQREFURV0uaW5jbHVkZXMob3BlcmF0aW9uKSA/ICdCYWNrJyA6IG9wdGlvbnMuYnV0dG9ucy5jbGVhcj8udGV4dH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgfVxuICA8L2Rpdj5cbn1cblxuIl19
@@ -214,7 +214,7 @@ let EmptyStateComponent = class EmptyStateComponent extends NgxBaseComponent {
214
214
  * @memberOf EmptyStateComponent
215
215
  */
216
216
  async ngOnInit() {
217
- this.parseProps(this);
217
+ this.initialize();
218
218
  this.translatable = stringToBoolean(this.translatable);
219
219
  this.showIcon = stringToBoolean(this.showIcon);
220
220
  this.locale = this.getLocale(this.translatable);
@@ -342,4 +342,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
342
342
  }], searchValue: [{
343
343
  type: Input
344
344
  }] } });
345
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsY0FBYyxFQUNkLE9BQU8sR0FDUixNQUNJLDJCQUEyQixDQUFDO0FBQ2pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFtQixNQUFNLGNBQWMsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUd6Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQWVJLElBQU0sbUJBQW1CLEdBQXpCLE1BQU0sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBa012RDs7Ozs7OztPQU9HO0lBQ0g7UUFDRSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQXpNL0I7Ozs7Ozs7OztXQVNHO1FBRUgsVUFBSyxHQUFXLE9BQU8sQ0FBQztRQUV4Qjs7Ozs7Ozs7O1dBU0c7UUFFSCxlQUFVLEdBQUcsUUFBUSxDQUFDO1FBRXRCOzs7Ozs7OztXQVFHO1FBRUgsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUV0Qjs7Ozs7Ozs7O1dBU0c7UUFFSCxrQkFBYSxHQUFXLFFBQVEsQ0FBQztRQUVqQzs7Ozs7Ozs7O1dBU0c7UUFFSCxhQUFRLEdBQW9CLElBQUksQ0FBQztRQUVqQzs7Ozs7Ozs7O1dBU0c7UUFFSCxTQUFJLEdBQVcsd0JBQXdCLENBQUM7UUFFeEM7Ozs7Ozs7O1dBUUc7UUFFSCxhQUFRLEdBQXVCLE9BQU8sQ0FBQztRQUV2Qzs7Ozs7Ozs7V0FRRztRQUVILGNBQVMsR0FBWSxRQUFRLENBQUM7UUEwQjlCOzs7Ozs7Ozs7V0FTRztRQUVILGVBQVUsR0FBbUMsT0FBTyxDQUFDO1FBRXJEOzs7Ozs7OztXQVFHO1FBRUgsZ0JBQVcsR0FBWSxTQUFTLENBQUM7UUFFakM7Ozs7Ozs7O1dBUUc7UUFFSCxlQUFVLEdBQW1DLFNBQVMsQ0FBQztRQWN2RDs7Ozs7Ozs7V0FRRztRQUNLLFdBQU0sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEMsY0FBUyxHQUFpQixNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFL0MsY0FBUyxHQUFxQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQWU3RCxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTBCRztJQUNILEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFaEQsMEJBQTBCO1FBQzFCLG9FQUFvRTtRQUNwRSwwRUFBMEU7UUFDMUUsOEVBQThFO1FBQzlFLElBQUk7UUFFSixJQUFJLENBQUMsVUFBVSxHQUFHLG1CQUFtQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxzQkFBc0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRTdELElBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWTtZQUN0QyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFrQixDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWdDRztJQUNILFdBQVc7UUFDVCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzNCLElBQUcsQ0FBQyxFQUFFO1lBQ0osT0FBTyxLQUFLLENBQUM7UUFDZixJQUFHLEVBQUUsWUFBWSxRQUFRO1lBQ3ZCLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQVksQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUdGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQXVCSTtJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFlO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RCxDQUFDOytHQW5VVSxtQkFBbUI7bUdBQW5CLG1CQUFtQixzY0NuRWhDLDA1QkFtQ0EsbWFEMEJJLE9BQU8seUxBQ1AsY0FBYywrRUFDZCxPQUFPOztBQUlFLG1CQUFtQjtJQWQvQixPQUFPLEVBQUU7O0dBY0csbUJBQW1CLENBb1UvQjs7NEZBcFVZLG1CQUFtQjtrQkFiL0IsU0FBUzsrQkFDRSx1QkFBdUIsY0FHckIsSUFBSSxXQUNQO3dCQUNQLGFBQWE7d0JBQ2IsT0FBTzt3QkFDUCxjQUFjO3dCQUNkLE9BQU87cUJBQ1I7d0RBZ0JELEtBQUs7c0JBREosS0FBSztnQkFjTixVQUFVO3NCQURULEtBQUs7Z0JBYU4sUUFBUTtzQkFEUCxLQUFLO2dCQWNOLGFBQWE7c0JBRFosS0FBSztnQkFjTixRQUFRO3NCQURQLEtBQUs7Z0JBY04sSUFBSTtzQkFESCxLQUFLO2dCQWFOLFFBQVE7c0JBRFAsS0FBSztnQkFhTixTQUFTO3NCQURSLEtBQUs7Z0JBYU4sVUFBVTtzQkFEVCxLQUFLO2dCQWFOLFVBQVU7c0JBRFQsS0FBSztnQkFjTixVQUFVO3NCQURULEtBQUs7Z0JBYU4sV0FBVztzQkFEVixLQUFLO2dCQWFOLFVBQVU7c0JBRFQsS0FBSztnQkFhTixXQUFXO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uSW5pdCAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIElvbkNhcmQsXG4gIElvbkNhcmRDb250ZW50LFxuICBJb25JY29uLFxufVxuZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgKiBhcyBhbGxJY29ucyBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IER5bmFtaWMsIFN0cmluZ09yQm9vbGVhbiB9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBzdHJpbmdUb0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IE5neEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbmdpbmUvTmd4QmFzZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBGdW5jdGlvbkxpa2UgfSBmcm9tICcuLi8uLi9lbmdpbmUvdHlwZXMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgZW1wdHkgc3RhdGUgbWVzc2FnZXMgd2l0aCBvcHRpb25hbCBhY3Rpb25zLlxuICogQHN1bW1hcnkgVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBzdGFuZGFyZGl6ZWQgd2F5IHRvIGRpc3BsYXkgZW1wdHkgc3RhdGUgbWVzc2FnZXNcbiAqIHdoZW4gbm8gZGF0YSBpcyBhdmFpbGFibGUgb3Igd2hlbiBhIHVzZXIgbmVlZHMgdG8gdGFrZSBhbiBhY3Rpb24gdG8gcG9wdWxhdGUgY29udGVudC5cbiAqIEl0IGluY2x1ZGVzIGN1c3RvbWl6YWJsZSB0aXRsZSwgc3VidGl0bGUsIGljb24sIGFuZCBhY3Rpb24gYnV0dG9uIGVsZW1lbnRzIHRoYXQgY2FuIGJlXG4gKiBzdHlsZWQgYW5kIGNvbmZpZ3VyZWQgdGhyb3VnaCBpbnB1dCBwcm9wZXJ0aWVzLiBUaGUgY29tcG9uZW50IHN1cHBvcnRzIGxvY2FsaXphdGlvblxuICogYW5kIGNhbiB0cmlnZ2VyIG5hdmlnYXRpb24gb3IgY3VzdG9tIGFjdGlvbnMgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKlxuICogQG1lcm1haWRcbiAqIGNsYXNzRGlhZ3JhbVxuICogICBjbGFzcyBFbXB0eVN0YXRlQ29tcG9uZW50IHtcbiAqICAgICArc3RyaW5nIHRpdGxlXG4gKiAgICAgK3N0cmluZyB0aXRsZUNvbG9yXG4gKiAgICAgK3N0cmluZyBzdWJ0aXRsZVxuICogICAgICtzdHJpbmcgc3VidGl0bGVDb2xvclxuICogICAgICtTdHJpbmdPckJvb2xlYW4gc2hvd0ljb25cbiAqICAgICArc3RyaW5nIGljb25cbiAqICAgICArc3RyaW5nIGljb25TaXplXG4gKiAgICAgK3N0cmluZyBpY29uQ29sb3JcbiAqICAgICArc3RyaW5nfEZ1bmN0aW9uIGJ1dHRvbkxpbmtcbiAqICAgICArc3RyaW5nIGJ1dHRvblRleHRcbiAqICAgICArc3RyaW5nIGJ1dHRvbkZpbGxcbiAqICAgICArc3RyaW5nIGJ1dHRvbkNvbG9yXG4gKiAgICAgK3N0cmluZyBidXR0b25TaXplXG4gKiAgICAgK3N0cmluZyBzZWFyY2hWYWx1ZVxuICogICAgIC1Sb3V0ZXIgUm91dGVyXG4gKiAgICAgK25nT25Jbml0KClcbiAqICAgICAraGFuZGxlQ2xpY2soKVxuICogICB9XG4gKiAgIEVtcHR5U3RhdGVDb21wb25lbnQgLS18PiBOZ3hCYXNlQ29tcG9uZW50XG4gKiAgIEVtcHR5U3RhdGVDb21wb25lbnQgLS18PiBPbkluaXRcbiAqXG4gKiBAZXh0ZW5kcyB7Tmd4QmFzZUNvbXBvbmVudH1cbiAqIEBpbXBsZW1lbnRzIHtPbkluaXR9XG4gKi9cbkBEeW5hbWljKClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1kZWNhZi1lbXB0eS1zdGF0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbXB0eS1zdGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VtcHR5LXN0YXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVQaXBlLFxuICAgIElvbkNhcmQsXG4gICAgSW9uQ2FyZENvbnRlbnQsXG4gICAgSW9uSWNvblxuICBdXG5cbn0pXG5leHBvcnQgY2xhc3MgRW1wdHlTdGF0ZUNvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG1haW4gdGl0bGUgZGlzcGxheWVkIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBwcmltYXJ5IG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGUgZW1wdHkgc3RhdGUgY29tcG9uZW50LlxuICAgKiBUaGlzIHRleHQgaXMgdHlwaWNhbGx5IHVzZWQgdG8gaW5mb3JtIHRoZSB1c2VyIGFib3V0IHdoeSB0aGV5J3JlIHNlZWluZyBhbiBlbXB0eSB2aWV3LlxuICAgKiBJZiB0cmFuc2xhdGFibGUgaXMgdHJ1ZSwgdGhpcyB3aWxsIGJlIHByb2Nlc3NlZCB0aHJvdWdoIHRoZSBsb2NhbGl6YXRpb24gc3lzdGVtLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBcInRpdGxlXCJcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHRpdGxlOiBzdHJpbmcgPSBcInRpdGxlXCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY29sb3Igb2YgdGhlIHRpdGxlIHRleHQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgY29sb3IgZm9yIHRoZSB0aXRsZSB0ZXh0IHVzaW5nIHRoZSBhcHBsaWNhdGlvbidzIGNvbG9yIHN5c3RlbS5cbiAgICogVGhlIHZhbHVlIHNob3VsZCBjb3JyZXNwb25kIHRvIGEgY29sb3IgdmFyaWFibGUgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24ncyB0aGVtZS5cbiAgICogVGhlIGNvbXBvbmVudCB3aWxsIGF1dG9tYXRpY2FsbHkgcHJlZml4IHRoaXMgd2l0aCBcImNvbG9yLVwiIHRvIGNyZWF0ZSB0aGUgQ1NTIGNsYXNzLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnZ3JheS02J1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdGl0bGVDb2xvciA9ICdncmF5LTYnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlY29uZGFyeSBtZXNzYWdlIGRpc3BsYXllZCBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGFkZGl0aW9uYWwgY29udGV4dCBvciBpbnN0cnVjdGlvbnMgYmVsb3cgdGhlIG1haW4gdGl0bGUuXG4gICAqIFRoaXMgdGV4dCBpcyB0eXBpY2FsbHkgdXNlZCB0byBndWlkZSB0aGUgdXNlciBvbiB3aGF0IGFjdGlvbnMgdGhleSBjYW4gdGFrZS5cbiAgICogSWYgdHJhbnNsYXRhYmxlIGlzIHRydWUsIHRoaXMgd2lsbCBiZSBwcm9jZXNzZWQgdGhyb3VnaCB0aGUgbG9jYWxpemF0aW9uIHN5c3RlbS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHN1YnRpdGxlOiBzdHJpbmcgPSBcIlwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbG9yIG9mIHRoZSBzdWJ0aXRsZSB0ZXh0LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgc3VidGl0bGUgdGV4dCB1c2luZyB0aGUgYXBwbGljYXRpb24ncyBjb2xvciBzeXN0ZW0uXG4gICAqIFRoZSB2YWx1ZSBzaG91bGQgY29ycmVzcG9uZCB0byBhIGNvbG9yIHZhcmlhYmxlIGRlZmluZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgdGhlbWUuXG4gICAqIFRoZSBjb21wb25lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHByZWZpeCB0aGlzIHdpdGggXCJjb2xvci1cIiB0byBjcmVhdGUgdGhlIENTUyBjbGFzcy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2dyYXktNCdcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHN1YnRpdGxlQ29sb3I6IHN0cmluZyA9ICdncmF5LTQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgd2hldGhlciB0aGUgaWNvbiBpcyBkaXNwbGF5ZWQuXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgaWYgdGhlIHZpc3VhbCBpY29uIHNob3VsZCBiZSBzaG93biBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIFRoaXMgY2FuIGJlIHByb3ZpZGVkIGFzIGEgYm9vbGVhbiBvciBhIHN0cmluZyB0aGF0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgYm9vbGVhbi5cbiAgICogSWNvbnMgaGVscCB2aXN1YWxseSBjb21tdW5pY2F0ZSB0aGUgZW1wdHkgc3RhdGUgY29udGV4dCB0byB1c2Vycy5cbiAgICpcbiAgICogQHR5cGUge1N0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc2hvd0ljb246IFN0cmluZ09yQm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbmFtZSBvZiB0aGUgaWNvbiB0byBkaXNwbGF5LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hpY2ggaWNvbiB0byBzaG93IHdoZW4gc2hvd0ljb24gaXMgdHJ1ZS5cbiAgICogVGhlIGNvbXBvbmVudCB1c2VzIHRoZSBpY29uIHN5c3RlbSBkZWZpbmVkIGluIHRoZSBhcHBsaWNhdGlvbixcbiAgICogYW5kIHRoaXMgdmFsdWUgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYW4gYXZhaWxhYmxlIGljb24gbmFtZS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgXCJ0aS1pbmZvLXNxdWFyZS1yb3VuZGVkXCJcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGljb246IHN0cmluZyA9IFwidGktaW5mby1zcXVhcmUtcm91bmRlZFwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNpemUgb2YgdGhlIGRpc3BsYXllZCBpY29uLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgaWNvbiBzaG93biBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIENhbiBiZSBlaXRoZXIgJ2xhcmdlJyBvciAnc21hbGwnIHRvIGFjY29tbW9kYXRlIGRpZmZlcmVudCBsYXlvdXQgbmVlZHMuXG4gICAqXG4gICAqIEB0eXBlIHsnbGFyZ2UnIHwgJ3NtYWxsJyB8IHVuZGVmaW5lZH1cbiAgICogQGRlZmF1bHQgJ2xhcmdlJ1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaWNvblNpemU/OiAnbGFyZ2UnIHwgJ3NtYWxsJyA9ICdsYXJnZSc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY29sb3Igb2YgdGhlIGRpc3BsYXllZCBpY29uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgaWNvbiB1c2luZyBJb25pYydzIHByZWRlZmluZWQgY29sb3Igc3lzdGVtLlxuICAgKiBUaGlzIGFsbG93cyB0aGUgaWNvbiB0byBtYXRjaCB0aGUgYXBwbGljYXRpb24ncyBjb2xvciBzY2hlbWUuXG4gICAqXG4gICAqIEB0eXBlIHtQcmVkZWZpbmVkQ29sb3JzIHwgdW5kZWZpbmVkfVxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaWNvbkNvbG9yPzogc3RyaW5nID0gJ21lZGl1bSc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbmF2aWdhdGlvbiB0YXJnZXQgb3IgYWN0aW9uIGZvciB0aGUgYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hlcmUgdGhlIGJ1dHRvbiBzaG91bGQgbmF2aWdhdGUgdG8gd2hlbiBjbGlja2VkIG9yIHdoYXQgZnVuY3Rpb25cbiAgICogaXQgc2hvdWxkIGV4ZWN1dGUuIFRoaXMgY2FuIGJlIGVpdGhlciBhIFVSTCBzdHJpbmcgb3IgYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgbmF2aWdhdGlvbi5cbiAgICogV2hlbiBub3QgcHJvdmlkZWQsIHRoZSBidXR0b24gd2lsbCBub3QgcGVyZm9ybSBhbnkgYWN0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgRnVuY3Rpb25MaWtlIHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uTGluaz86IHN0cmluZyB8IEZ1bmN0aW9uTGlrZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSB0ZXh0IGRpc3BsYXllZCBvbiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBsYWJlbCBmb3IgdGhlIGFjdGlvbiBidXR0b24gaW4gdGhlIGVtcHR5IHN0YXRlLlxuICAgKiBJZiB0cmFuc2xhdGFibGUgaXMgdHJ1ZSwgdGhpcyB3aWxsIGJlIHByb2Nlc3NlZCB0aHJvdWdoIHRoZSBsb2NhbGl6YXRpb24gc3lzdGVtLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBidXR0b24gd2lsbCBub3QgZGlzcGxheSBhbnkgdGV4dC5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgZmlsbCBzdHlsZSBvZiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgQ29udHJvbHMgdGhlIHZpc3VhbCBzdHlsZSBvZiB0aGUgYnV0dG9uIHVzaW5nIElvbmljJ3MgYnV0dG9uIGZpbGwgb3B0aW9ucy5cbiAgICogJ3NvbGlkJyBjcmVhdGVzIGEgYnV0dG9uIHdpdGggYSBzb2xpZCBiYWNrZ3JvdW5kLCAnb3V0bGluZScgY3JlYXRlcyBhIGJ1dHRvbiB3aXRoXG4gICAqIGp1c3QgYSBib3JkZXIsIGFuZCAnY2xlYXInIGNyZWF0ZXMgYSBidXR0b24gd2l0aCBubyBiYWNrZ3JvdW5kIG9yIGJvcmRlci5cbiAgICpcbiAgICogQHR5cGUgeydjbGVhcicgfCAnc29saWQnIHwgJ291dGxpbmUnfVxuICAgKiBAZGVmYXVsdCAnc29saWQnXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25GaWxsOiAnY2xlYXInIHwgJ3NvbGlkJyB8ICdvdXRsaW5lJyA9ICAnc29saWQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbG9yIG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgYnV0dG9uIHVzaW5nIElvbmljJ3MgY29sb3Igc3lzdGVtLlxuICAgKiBUaGlzIGFsbG93cyB0aGUgYnV0dG9uIHRvIG1hdGNoIHRoZSBhcHBsaWNhdGlvbidzIGNvbG9yIHNjaGVtZS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25Db2xvcjogc3RyaW5nID0gICdwcmltYXJ5JztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzaXplIG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgYnV0dG9uIHNob3duIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogQ2FuIGJlICdsYXJnZScsICdzbWFsbCcsIG9yICdkZWZhdWx0JyB0byBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgbGF5b3V0IG5lZWRzLlxuICAgKlxuICAgKiBAdHlwZSB7J2xhcmdlJyB8ICdzbWFsbCcgfCAnZGVmYXVsdCd9XG4gICAqIEBkZWZhdWx0ICdkZWZhdWx0J1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uU2l6ZTogJ2xhcmdlJyB8ICdzbWFsbCcgfCAnZGVmYXVsdCcgPSAgJ2RlZmF1bHQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlYXJjaCB2YWx1ZSB0aGF0IHJlc3VsdGVkIGluIG5vIHJlc3VsdHMuXG4gICAqIEBzdW1tYXJ5IFdoZW4gdGhlIGVtcHR5IHN0YXRlIGlzIHNob3duIGR1ZSB0byBhIHNlYXJjaCB3aXRoIG5vIHJlc3VsdHMsXG4gICAqIHRoaXMgcHJvcGVydHkgY2FuIGhvbGQgdGhlIHNlYXJjaCB0ZXJtIHRoYXQgd2FzIHVzZWQuIFRoaXMgY2FuIGJlIGRpc3BsYXllZFxuICAgKiBpbiB0aGUgZW1wdHkgc3RhdGUgbWVzc2FnZSB0byBwcm92aWRlIGNvbnRleHQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBzZWFyY2hWYWx1ZSE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNlcnZpY2UgZm9yIGhhbmRsaW5nIG5hdmlnYXRpb24gb3BlcmF0aW9ucy5cbiAgICogQHN1bW1hcnkgSW5qZWN0ZWQgc2VydmljZSB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIG5hdmlnYXRpbmcgYmV0d2VlbiByb3V0ZXMuXG4gICAqIFRoaXMgc2VydmljZSBpcyB1c2VkIHdoZW4gdGhlIGJ1dHRvbkxpbmsgaXMgYSBzdHJpbmcgVVJMIHRvIG5hdmlnYXRlIHRvIHRoYXQgbG9jYXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSb3V0ZXJ9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIHJvdXRlcjogUm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuXG4gIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIHNlYXJjaFN1YnRpdGxlITogU2FmZUh0bWxcblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBFbXB0eVN0YXRlQ29tcG9uZW50LlxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIG5ldyBFbXB0eVN0YXRlQ29tcG9uZW50IGJ5IGNhbGxpbmcgdGhlIHBhcmVudCBjbGFzcyBjb25zdHJ1Y3RvclxuICAgKiB3aXRoIHRoZSBjb21wb25lbnQgbmFtZSBmb3IgbG9nZ2luZyBhbmQgaWRlbnRpZmljYXRpb24gcHVycG9zZXMuIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzXG4gICAqIGEgc3RhbmRhcmRpemVkIHdheSB0byBkaXNwbGF5IGVtcHR5IHN0YXRlIG1lc3NhZ2VzIHdpdGggb3B0aW9uYWwgaWNvbnMgYW5kIGFjdGlvbiBidXR0b25zLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFbXB0eVN0YXRlQ29tcG9uZW50XCIpO1xuICAgIGFkZEljb25zKGFsbEljb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCBhZnRlciBBbmd1bGFyIGZpcnN0IGRpc3BsYXlzIHRoZSBkYXRhLWJvdW5kIHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IFNldHMgdXAgdGhlIGNvbXBvbmVudCBieSBwcm9jZXNzaW5nIGJvb2xlYW4gaW5wdXRzLCBhcHBseWluZyBsb2NhbGl6YXRpb24gdG8gdGV4dFxuICAgKiBlbGVtZW50cyBpZiB0cmFuc2xhdGlvbiBpcyBlbmFibGVkLCBhbmQgZm9ybWF0dGluZyBDU1MgY2xhc3NlcyBmb3IgdGl0bGUgYW5kIHN1YnRpdGxlIGNvbG9ycy5cbiAgICogVGhpcyBtZXRob2QgcHJlcGFyZXMgdGhlIGNvbXBvbmVudCBmb3IgdXNlciBpbnRlcmFjdGlvbiBieSBlbnN1cmluZyBhbGwgcHJvcGVydGllcyBhcmVcbiAgICogcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIGxvY2FsaXplZC5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBBbmd1bGFyIExpZmVjeWNsZVxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKlxuICAgKiAgIEEtPj5FOiBuZ09uSW5pdCgpXG4gICAqICAgRS0+PkU6IFByb2Nlc3MgdHJhbnNsYXRhYmxlIGZsYWdcbiAgICogICBFLT4+RTogUHJvY2VzcyBzaG93SWNvbiBmbGFnXG4gICAqICAgRS0+PkU6IEdldCBsb2NhbGUgc2V0dGluZ3NcbiAgICogICBhbHQgdHJhbnNsYXRhYmxlIGlzIHRydWVcbiAgICogICAgIEUtPj5FOiBMb2NhbGl6ZSB0aXRsZVxuICAgKiAgICAgRS0+PkU6IExvY2FsaXplIHN1YnRpdGxlXG4gICAqICAgICBFLT4+RTogTG9jYWxpemUgYnV0dG9uVGV4dFxuICAgKiAgIGVuZFxuICAgKiAgIEUtPj5FOiBGb3JtYXQgdGl0bGUgQ1NTIGNsYXNzXG4gICAqICAgRS0+PkU6IEZvcm1hdCBzdWJ0aXRsZSBDU1MgY2xhc3NcbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucGFyc2VQcm9wcyh0aGlzKTtcbiAgICB0aGlzLnRyYW5zbGF0YWJsZSA9IHN0cmluZ1RvQm9vbGVhbih0aGlzLnRyYW5zbGF0YWJsZSk7XG4gICAgdGhpcy5zaG93SWNvbiA9IHN0cmluZ1RvQm9vbGVhbih0aGlzLnNob3dJY29uKTtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxlKHRoaXMudHJhbnNsYXRhYmxlKTtcblxuICAgIC8vIGlmKHRoaXMudHJhbnNsYXRhYmxlKSB7XG4gICAgLy8gICB0aGlzLnRpdGxlID0gZ2VuZXJhdGVMb2NhbGVGcm9tU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLnRpdGxlKTtcbiAgICAvLyAgIHRoaXMuc3VidGl0bGUgPSBnZW5lcmF0ZUxvY2FsZUZyb21TdHJpbmcodGhpcy5sb2NhbGUsIHRoaXMuc3VidGl0bGUpO1xuICAgIC8vICAgdGhpcy5idXR0b25UZXh0ID0gZ2VuZXJhdGVMb2NhbGVGcm9tU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLmJ1dHRvblRleHQpO1xuICAgIC8vIH1cblxuICAgIHRoaXMudGl0bGVDb2xvciA9IGBkY2YtdGl0bGUgY29sb3ItJHt0aGlzLnRpdGxlQ29sb3J9YDtcbiAgICB0aGlzLnN1YnRpdGxlQ29sb3IgPSBgZGNmLXN1YnRpdGxlIGNvbG9yLSR7dGhpcy50aXRsZUNvbG9yfWA7XG5cbiAgICBpZih0aGlzLnNlYXJjaFZhbHVlICYmIHRoaXMudHJhbnNsYXRhYmxlKVxuICAgICAgdGhpcy5zZWFyY2hTdWJ0aXRsZSA9IGF3YWl0IHRoaXMuZ2V0U2VhcmNoU3VidGl0bGUodGhpcy5zdWJ0aXRsZSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBhY3Rpb24gYnV0dG9uIGluIHRoZSBlbXB0eSBzdGF0ZVxuICAgKiBjb21wb25lbnQuIEl0IHN1cHBvcnRzIHRocmVlIG5hdmlnYXRpb24gcGF0dGVybnM6IDEpIG5vIGFjdGlvbiB3aGVuIGJ1dHRvbkxpbmsgaXMgbm90IHByb3ZpZGVkLFxuICAgKiAyKSBjdXN0b20gZnVuY3Rpb24gZXhlY3V0aW9uIHdoZW4gYnV0dG9uTGluayBpcyBhIGZ1bmN0aW9uLCBhbmQgMykgbmF2aWdhdGlvbiB0byBhIHNwZWNpZmljIFVSTFxuICAgKiB3aGVuIGJ1dHRvbkxpbmsgaXMgYSBzdHJpbmcuIFRoaXMgZmxleGliaWxpdHkgYWxsb3dzIHRoZSBlbXB0eSBzdGF0ZSB0byB0cmlnZ2VyIHZhcmlvdXMgYWN0aW9uc1xuICAgKiBiYXNlZCBvbiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIHVzZWQuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IE4gYXMgUm91dGVyXG4gICAqXG4gICAqICAgVS0+PkU6IENsaWNrIGFjdGlvbiBidXR0b25cbiAgICogICBFLT4+RTogaGFuZGxlQ2xpY2soKVxuICAgKiAgIGFsdCBidXR0b25MaW5rIGlzIG5vdCBwcm92aWRlZFxuICAgKiAgICAgRS0tPj5VOiBSZXR1cm4gZmFsc2UgKG5vIGFjdGlvbilcbiAgICogICBlbHNlIGJ1dHRvbkxpbmsgaXMgYSBmdW5jdGlvblxuICAgKiAgICAgRS0+PkU6IEV4ZWN1dGUgYnV0dG9uTGluayBmdW5jdGlvblxuICAgKiAgICAgRS0tPj5VOiBSZXR1cm4gZnVuY3Rpb24gcmVzdWx0XG4gICAqICAgZWxzZSBidXR0b25MaW5rIGlzIGEgVVJMIHN0cmluZ1xuICAgKiAgICAgRS0+Pk46IG5hdmlnYXRlRm9yd2FyZChidXR0b25MaW5rKVxuICAgKiAgICAgTi0tPj5FOiBSZXR1cm4gbmF2aWdhdGlvbiByZXN1bHRcbiAgICogICAgIEUtLT4+VTogUmV0dXJuIG5hdmlnYXRpb24gcmVzdWx0XG4gICAqICAgZW5kXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCB2b2lkIHwgUHJvbWlzZTxib29sZWFuPn1cbiAgICogICAtIGZhbHNlIGlmIG5vIGFjdGlvbiBpcyB0YWtlblxuICAgKiAgIC0gVGhlIHJlc3VsdCBvZiB0aGUgYnV0dG9uTGluayBmdW5jdGlvbiBpZiBpdCdzIGEgZnVuY3Rpb25cbiAgICogICAtIEEgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIG5hdmlnYXRpb24gcmVzdWx0IGlmIGJ1dHRvbkxpbmsgaXMgYSBVUkxcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGhhbmRsZUNsaWNrKCk6IGJvb2xlYW4gfCB2b2lkIHwgUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZm4gPSB0aGlzLmJ1dHRvbkxpbms7XG4gICAgaWYoIWZuKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmKGZuIGluc3RhbmNlb2YgRnVuY3Rpb24pXG4gICAgICByZXR1cm4gZm4oKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZm4gYXMgc3RyaW5nXSk7XG4gIH1cblxuXG4gLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBsb2NhbGl6ZWQgYW5kIHNhbml0aXplZCBzdWJ0aXRsZSBmb3Igc2VhcmNoIHJlc3VsdHMuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHRha2VzIGEgY29udGVudCBzdHJpbmcsIHR5cGljYWxseSB0aGUgc3VidGl0bGUsIGFuZCBwcm9jZXNzZXMgaXRcbiAgICogdGhyb3VnaCB0aGUgdHJhbnNsYXRpb24gc2VydmljZS4gSXQgcmVwbGFjZXMgYSBwbGFjZWhvbGRlciAoJ3ZhbHVlMCcpIHdpdGggdGhlIGFjdHVhbFxuICAgKiBzZWFyY2ggdmFsdWUsIHRoZW4gc2FuaXRpemVzIHRoZSByZXN1bHQgdG8gc2FmZWx5IHVzZSBhcyBIVE1MLiBUaGlzIGlzIHBhcnRpY3VsYXJseVxuICAgKiB1c2VmdWwgZm9yIGRpc3BsYXlpbmcgZHluYW1pYywgbG9jYWxpemVkIG1lc3NhZ2VzIGluIHRoZSBlbXB0eSBzdGF0ZSB3aGVuIGEgc2VhcmNoXG4gICAqIHlpZWxkcyBubyByZXN1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIFRoZSBjb250ZW50IHN0cmluZyB0byBiZSB0cmFuc2xhdGVkIGFuZCBwcm9jZXNzZWRcbiAgICogQHJldHVybiB7UHJvbWlzZTxTYWZlSHRtbD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgc2FuaXRpemVkIEhUTUwgc3RyaW5nXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IFQgYXMgVHJhbnNsYXRlU2VydmljZVxuICAgKiAgIHBhcnRpY2lwYW50IFMgYXMgRG9tU2FuaXRpemVyXG4gICAqXG4gICAqICAgRS0+PlQ6IGluc3RhbnQoY29udGVudCwgeyd2YWx1ZTAnOiBzZWFyY2hWYWx1ZX0pXG4gICAqICAgVC0tPj5FOiBSZXR1cm4gdHJhbnNsYXRlZCBzdHJpbmdcbiAgICogICBFLT4+UzogYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodHJhbnNsYXRlZFN0cmluZylcbiAgICogICBTLS0+PkU6IFJldHVybiBzYW5pdGl6ZWQgU2FmZUh0bWxcbiAgICpcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGFzeW5jIGdldFNlYXJjaFN1YnRpdGxlKGNvbnRlbnQ6IHN0cmluZyk6IFByb21pc2U8U2FmZUh0bWw+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGNvbnRlbnQsIHsndmFsdWUwJzogdGhpcy5zZWFyY2hWYWx1ZX0pO1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChyZXN1bHQpO1xuICB9XG59XG4iLCJcbjxpb24tY2FyZCBbaWRdPVwidWlkXCIgW2NsYXNzXT1cImNsYXNzTmFtZVwiPlxuICA8aW9uLWNhcmQtY29udGVudD5cbiAgICBAaWYoaWNvbiAmJiBzaG93SWNvbikge1xuICAgICAgPGRpdiBjbGFzcz1cImRjZi1pY29uLWNvbnRhaW5lclwiPlxuICAgICAgICA8aW9uLWljb25cbiAgICAgICAgICBuYW1lPVwiYWxlcnQtY2lyY2xlLW91dGxpbmVcIlxuICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgY29sb3I9XCJkYW5nZXJcIlxuICAgICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmKHRpdGxlKSB7XG4gICAgICA8aDUgW2NsYXNzXT1cInRpdGxlQ29sb3JcIiBbaW5uZXJIVE1MXT1cInRpdGxlXCI+PC9oNT5cbiAgICB9XG4gICAgQGlmKHN1YnRpdGxlKSB7XG4gICAgICBAaWYoIXNlYXJjaFZhbHVlKSB7XG4gICAgICAgIDxwIFtjbGFzc109XCJzdWJ0aXRsZUNvbG9yXCIgW2lubmVySFRNTF09XCJzdWJ0aXRsZVwiPjwvcD5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8cCBbY2xhc3NdPVwic3VidGl0bGVDb2xvclwiIFtpbm5lckhUTUxdPVwic2VhcmNoU3VidGl0bGVcIj48L3A+XG4gICAgICB9XG4gICAgfVxuICAgIEBpZihidXR0b25MaW5rICYmIGJ1dHRvblRleHQpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgW3NpemVdPVwiYnV0dG9uU2l6ZVwiXG4gICAgICAgICAgW2ZpbGxdPVwiYnV0dG9uRmlsbFwiXG4gICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbkNvbG9yXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2soKVwiPlxuICAgICAgICAgIHt7ICBidXR0b25UZXh0IH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9pb24tY2FyZC1jb250ZW50PlxuPC9pb24tY2FyZD5cbiJdfQ==
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsY0FBYyxFQUNkLE9BQU8sR0FDUixNQUNJLDJCQUEyQixDQUFDO0FBQ2pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFtQixNQUFNLGNBQWMsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUd6Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQWVJLElBQU0sbUJBQW1CLEdBQXpCLE1BQU0sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBa012RDs7Ozs7OztPQU9HO0lBQ0g7UUFDRSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQXpNL0I7Ozs7Ozs7OztXQVNHO1FBRUgsVUFBSyxHQUFXLE9BQU8sQ0FBQztRQUV4Qjs7Ozs7Ozs7O1dBU0c7UUFFSCxlQUFVLEdBQUcsUUFBUSxDQUFDO1FBRXRCOzs7Ozs7OztXQVFHO1FBRUgsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUV0Qjs7Ozs7Ozs7O1dBU0c7UUFFSCxrQkFBYSxHQUFXLFFBQVEsQ0FBQztRQUVqQzs7Ozs7Ozs7O1dBU0c7UUFFSCxhQUFRLEdBQW9CLElBQUksQ0FBQztRQUVqQzs7Ozs7Ozs7O1dBU0c7UUFFSCxTQUFJLEdBQVcsd0JBQXdCLENBQUM7UUFFeEM7Ozs7Ozs7O1dBUUc7UUFFSCxhQUFRLEdBQXVCLE9BQU8sQ0FBQztRQUV2Qzs7Ozs7Ozs7V0FRRztRQUVILGNBQVMsR0FBWSxRQUFRLENBQUM7UUEwQjlCOzs7Ozs7Ozs7V0FTRztRQUVILGVBQVUsR0FBbUMsT0FBTyxDQUFDO1FBRXJEOzs7Ozs7OztXQVFHO1FBRUgsZ0JBQVcsR0FBWSxTQUFTLENBQUM7UUFFakM7Ozs7Ozs7O1dBUUc7UUFFSCxlQUFVLEdBQW1DLFNBQVMsQ0FBQztRQWN2RDs7Ozs7Ozs7V0FRRztRQUNLLFdBQU0sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEMsY0FBUyxHQUFpQixNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFL0MsY0FBUyxHQUFxQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQWU3RCxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTBCRztJQUNILEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVoRCwwQkFBMEI7UUFDMUIsb0VBQW9FO1FBQ3BFLDBFQUEwRTtRQUMxRSw4RUFBOEU7UUFDOUUsSUFBSTtRQUVKLElBQUksQ0FBQyxVQUFVLEdBQUcsbUJBQW1CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsYUFBYSxHQUFHLHNCQUFzQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFN0QsSUFBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxZQUFZO1lBQ3RDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQWtCLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BZ0NHO0lBQ0gsV0FBVztRQUNULE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDM0IsSUFBRyxDQUFDLEVBQUU7WUFDSixPQUFPLEtBQUssQ0FBQztRQUNmLElBQUcsRUFBRSxZQUFZLFFBQVE7WUFDdkIsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBWSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBR0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBdUJJO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE9BQWU7UUFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUM7UUFDbkYsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hELENBQUM7K0dBblVVLG1CQUFtQjttR0FBbkIsbUJBQW1CLHNjQ25FaEMsMDVCQW1DQSxtYUQwQkksT0FBTyx5TEFDUCxjQUFjLCtFQUNkLE9BQU87O0FBSUUsbUJBQW1CO0lBZC9CLE9BQU8sRUFBRTs7R0FjRyxtQkFBbUIsQ0FvVS9COzs0RkFwVVksbUJBQW1CO2tCQWIvQixTQUFTOytCQUNFLHVCQUF1QixjQUdyQixJQUFJLFdBQ1A7d0JBQ1AsYUFBYTt3QkFDYixPQUFPO3dCQUNQLGNBQWM7d0JBQ2QsT0FBTztxQkFDUjt3REFnQkQsS0FBSztzQkFESixLQUFLO2dCQWNOLFVBQVU7c0JBRFQsS0FBSztnQkFhTixRQUFRO3NCQURQLEtBQUs7Z0JBY04sYUFBYTtzQkFEWixLQUFLO2dCQWNOLFFBQVE7c0JBRFAsS0FBSztnQkFjTixJQUFJO3NCQURILEtBQUs7Z0JBYU4sUUFBUTtzQkFEUCxLQUFLO2dCQWFOLFNBQVM7c0JBRFIsS0FBSztnQkFhTixVQUFVO3NCQURULEtBQUs7Z0JBYU4sVUFBVTtzQkFEVCxLQUFLO2dCQWNOLFVBQVU7c0JBRFQsS0FBSztnQkFhTixXQUFXO3NCQURWLEtBQUs7Z0JBYU4sVUFBVTtzQkFEVCxLQUFLO2dCQWFOLFdBQVc7c0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0ICB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSW9uQ2FyZCxcbiAgSW9uQ2FyZENvbnRlbnQsXG4gIElvbkljb24sXG59XG5mcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCAqIGFzIGFsbEljb25zIGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgRHluYW1pYywgU3RyaW5nT3JCb29sZWFuIH0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7IHN0cmluZ1RvQm9vbGVhbiB9IGZyb20gJy4uLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgTmd4QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VuZ2luZS9OZ3hCYXNlQ29tcG9uZW50JztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEZ1bmN0aW9uTGlrZSB9IGZyb20gJy4uLy4uL2VuZ2luZS90eXBlcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudCBmb3IgZGlzcGxheWluZyBlbXB0eSBzdGF0ZSBtZXNzYWdlcyB3aXRoIG9wdGlvbmFsIGFjdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGlzIGNvbXBvbmVudCBwcm92aWRlcyBhIHN0YW5kYXJkaXplZCB3YXkgdG8gZGlzcGxheSBlbXB0eSBzdGF0ZSBtZXNzYWdlc1xuICogd2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZSBvciB3aGVuIGEgdXNlciBuZWVkcyB0byB0YWtlIGFuIGFjdGlvbiB0byBwb3B1bGF0ZSBjb250ZW50LlxuICogSXQgaW5jbHVkZXMgY3VzdG9taXphYmxlIHRpdGxlLCBzdWJ0aXRsZSwgaWNvbiwgYW5kIGFjdGlvbiBidXR0b24gZWxlbWVudHMgdGhhdCBjYW4gYmVcbiAqIHN0eWxlZCBhbmQgY29uZmlndXJlZCB0aHJvdWdoIGlucHV0IHByb3BlcnRpZXMuIFRoZSBjb21wb25lbnQgc3VwcG9ydHMgbG9jYWxpemF0aW9uXG4gKiBhbmQgY2FuIHRyaWdnZXIgbmF2aWdhdGlvbiBvciBjdXN0b20gYWN0aW9ucyB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZC5cbiAqXG4gKiBAbWVybWFpZFxuICogY2xhc3NEaWFncmFtXG4gKiAgIGNsYXNzIEVtcHR5U3RhdGVDb21wb25lbnQge1xuICogICAgICtzdHJpbmcgdGl0bGVcbiAqICAgICArc3RyaW5nIHRpdGxlQ29sb3JcbiAqICAgICArc3RyaW5nIHN1YnRpdGxlXG4gKiAgICAgK3N0cmluZyBzdWJ0aXRsZUNvbG9yXG4gKiAgICAgK1N0cmluZ09yQm9vbGVhbiBzaG93SWNvblxuICogICAgICtzdHJpbmcgaWNvblxuICogICAgICtzdHJpbmcgaWNvblNpemVcbiAqICAgICArc3RyaW5nIGljb25Db2xvclxuICogICAgICtzdHJpbmd8RnVuY3Rpb24gYnV0dG9uTGlua1xuICogICAgICtzdHJpbmcgYnV0dG9uVGV4dFxuICogICAgICtzdHJpbmcgYnV0dG9uRmlsbFxuICogICAgICtzdHJpbmcgYnV0dG9uQ29sb3JcbiAqICAgICArc3RyaW5nIGJ1dHRvblNpemVcbiAqICAgICArc3RyaW5nIHNlYXJjaFZhbHVlXG4gKiAgICAgLVJvdXRlciBSb3V0ZXJcbiAqICAgICArbmdPbkluaXQoKVxuICogICAgICtoYW5kbGVDbGljaygpXG4gKiAgIH1cbiAqICAgRW1wdHlTdGF0ZUNvbXBvbmVudCAtLXw+IE5neEJhc2VDb21wb25lbnRcbiAqICAgRW1wdHlTdGF0ZUNvbXBvbmVudCAtLXw+IE9uSW5pdFxuICpcbiAqIEBleHRlbmRzIHtOZ3hCYXNlQ29tcG9uZW50fVxuICogQGltcGxlbWVudHMge09uSW5pdH1cbiAqL1xuQER5bmFtaWMoKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LWRlY2FmLWVtcHR5LXN0YXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VtcHR5LXN0YXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZW1wdHktc3RhdGUuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgSW9uQ2FyZCxcbiAgICBJb25DYXJkQ29udGVudCxcbiAgICBJb25JY29uXG4gIF1cblxufSlcbmV4cG9ydCBjbGFzcyBFbXB0eVN0YXRlQ29tcG9uZW50IGV4dGVuZHMgTmd4QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbWFpbiB0aXRsZSBkaXNwbGF5ZWQgaW4gdGhlIGVtcHR5IHN0YXRlLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIHByaW1hcnkgbWVzc2FnZSB0byBzaG93IGluIHRoZSBlbXB0eSBzdGF0ZSBjb21wb25lbnQuXG4gICAqIFRoaXMgdGV4dCBpcyB0eXBpY2FsbHkgdXNlZCB0byBpbmZvcm0gdGhlIHVzZXIgYWJvdXQgd2h5IHRoZXkncmUgc2VlaW5nIGFuIGVtcHR5IHZpZXcuXG4gICAqIElmIHRyYW5zbGF0YWJsZSBpcyB0cnVlLCB0aGlzIHdpbGwgYmUgcHJvY2Vzc2VkIHRocm91Z2ggdGhlIGxvY2FsaXphdGlvbiBzeXN0ZW0uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IFwidGl0bGVcIlxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdGl0bGU6IHN0cmluZyA9IFwidGl0bGVcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBjb2xvciBvZiB0aGUgdGl0bGUgdGV4dC5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBjb2xvciBmb3IgdGhlIHRpdGxlIHRleHQgdXNpbmcgdGhlIGFwcGxpY2F0aW9uJ3MgY29sb3Igc3lzdGVtLlxuICAgKiBUaGUgdmFsdWUgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYSBjb2xvciB2YXJpYWJsZSBkZWZpbmVkIGluIHRoZSBhcHBsaWNhdGlvbidzIHRoZW1lLlxuICAgKiBUaGUgY29tcG9uZW50IHdpbGwgYXV0b21hdGljYWxseSBwcmVmaXggdGhpcyB3aXRoIFwiY29sb3ItXCIgdG8gY3JlYXRlIHRoZSBDU1MgY2xhc3MuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdncmF5LTYnXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICB0aXRsZUNvbG9yID0gJ2dyYXktNic7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc2Vjb25kYXJ5IG1lc3NhZ2UgZGlzcGxheWVkIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgYWRkaXRpb25hbCBjb250ZXh0IG9yIGluc3RydWN0aW9ucyBiZWxvdyB0aGUgbWFpbiB0aXRsZS5cbiAgICogVGhpcyB0ZXh0IGlzIHR5cGljYWxseSB1c2VkIHRvIGd1aWRlIHRoZSB1c2VyIG9uIHdoYXQgYWN0aW9ucyB0aGV5IGNhbiB0YWtlLlxuICAgKiBJZiB0cmFuc2xhdGFibGUgaXMgdHJ1ZSwgdGhpcyB3aWxsIGJlIHByb2Nlc3NlZCB0aHJvdWdoIHRoZSBsb2NhbGl6YXRpb24gc3lzdGVtLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc3VidGl0bGU6IHN0cmluZyA9IFwiXCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY29sb3Igb2YgdGhlIHN1YnRpdGxlIHRleHQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgY29sb3IgZm9yIHRoZSBzdWJ0aXRsZSB0ZXh0IHVzaW5nIHRoZSBhcHBsaWNhdGlvbidzIGNvbG9yIHN5c3RlbS5cbiAgICogVGhlIHZhbHVlIHNob3VsZCBjb3JyZXNwb25kIHRvIGEgY29sb3IgdmFyaWFibGUgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24ncyB0aGVtZS5cbiAgICogVGhlIGNvbXBvbmVudCB3aWxsIGF1dG9tYXRpY2FsbHkgcHJlZml4IHRoaXMgd2l0aCBcImNvbG9yLVwiIHRvIGNyZWF0ZSB0aGUgQ1NTIGNsYXNzLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnZ3JheS00J1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc3VidGl0bGVDb2xvcjogc3RyaW5nID0gJ2dyYXktNCc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb250cm9scyB3aGV0aGVyIHRoZSBpY29uIGlzIGRpc3BsYXllZC5cbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyBpZiB0aGUgdmlzdWFsIGljb24gc2hvdWxkIGJlIHNob3duIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogVGhpcyBjYW4gYmUgcHJvdmlkZWQgYXMgYSBib29sZWFuIG9yIGEgc3RyaW5nIHRoYXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBib29sZWFuLlxuICAgKiBJY29ucyBoZWxwIHZpc3VhbGx5IGNvbW11bmljYXRlIHRoZSBlbXB0eSBzdGF0ZSBjb250ZXh0IHRvIHVzZXJzLlxuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nT3JCb29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBzaG93SWNvbjogU3RyaW5nT3JCb29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBuYW1lIG9mIHRoZSBpY29uIHRvIGRpc3BsYXkuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB3aGljaCBpY29uIHRvIHNob3cgd2hlbiBzaG93SWNvbiBpcyB0cnVlLlxuICAgKiBUaGUgY29tcG9uZW50IHVzZXMgdGhlIGljb24gc3lzdGVtIGRlZmluZWQgaW4gdGhlIGFwcGxpY2F0aW9uLFxuICAgKiBhbmQgdGhpcyB2YWx1ZSBzaG91bGQgY29ycmVzcG9uZCB0byBhbiBhdmFpbGFibGUgaWNvbiBuYW1lLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBcInRpLWluZm8tc3F1YXJlLXJvdW5kZWRcIlxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaWNvbjogc3RyaW5nID0gXCJ0aS1pbmZvLXNxdWFyZS1yb3VuZGVkXCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc2l6ZSBvZiB0aGUgZGlzcGxheWVkIGljb24uXG4gICAqIEBzdW1tYXJ5IENvbnRyb2xzIHRoZSBzaXplIG9mIHRoZSBpY29uIHNob3duIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogQ2FuIGJlIGVpdGhlciAnbGFyZ2UnIG9yICdzbWFsbCcgdG8gYWNjb21tb2RhdGUgZGlmZmVyZW50IGxheW91dCBuZWVkcy5cbiAgICpcbiAgICogQHR5cGUgeydsYXJnZScgfCAnc21hbGwnIHwgdW5kZWZpbmVkfVxuICAgKiBAZGVmYXVsdCAnbGFyZ2UnXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBpY29uU2l6ZT86ICdsYXJnZScgfCAnc21hbGwnID0gJ2xhcmdlJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBjb2xvciBvZiB0aGUgZGlzcGxheWVkIGljb24uXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgY29sb3IgZm9yIHRoZSBpY29uIHVzaW5nIElvbmljJ3MgcHJlZGVmaW5lZCBjb2xvciBzeXN0ZW0uXG4gICAqIFRoaXMgYWxsb3dzIHRoZSBpY29uIHRvIG1hdGNoIHRoZSBhcHBsaWNhdGlvbidzIGNvbG9yIHNjaGVtZS5cbiAgICpcbiAgICogQHR5cGUge1ByZWRlZmluZWRDb2xvcnMgfCB1bmRlZmluZWR9XG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBpY29uQ29sb3I/OiBzdHJpbmcgPSAnbWVkaXVtJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBuYXZpZ2F0aW9uIHRhcmdldCBvciBhY3Rpb24gZm9yIHRoZSBidXR0b24uXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB3aGVyZSB0aGUgYnV0dG9uIHNob3VsZCBuYXZpZ2F0ZSB0byB3aGVuIGNsaWNrZWQgb3Igd2hhdCBmdW5jdGlvblxuICAgKiBpdCBzaG91bGQgZXhlY3V0ZS4gVGhpcyBjYW4gYmUgZWl0aGVyIGEgVVJMIHN0cmluZyBvciBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBuYXZpZ2F0aW9uLlxuICAgKiBXaGVuIG5vdCBwcm92aWRlZCwgdGhlIGJ1dHRvbiB3aWxsIG5vdCBwZXJmb3JtIGFueSBhY3Rpb24uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCBGdW5jdGlvbkxpa2UgfCB1bmRlZmluZWR9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25MaW5rPzogc3RyaW5nIHwgRnVuY3Rpb25MaWtlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHRleHQgZGlzcGxheWVkIG9uIHRoZSBhY3Rpb24gYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGxhYmVsIGZvciB0aGUgYWN0aW9uIGJ1dHRvbiBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIElmIHRyYW5zbGF0YWJsZSBpcyB0cnVlLCB0aGlzIHdpbGwgYmUgcHJvY2Vzc2VkIHRocm91Z2ggdGhlIGxvY2FsaXphdGlvbiBzeXN0ZW0uXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIGJ1dHRvbiB3aWxsIG5vdCBkaXNwbGF5IGFueSB0ZXh0LlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBmaWxsIHN0eWxlIG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgdmlzdWFsIHN0eWxlIG9mIHRoZSBidXR0b24gdXNpbmcgSW9uaWMncyBidXR0b24gZmlsbCBvcHRpb25zLlxuICAgKiAnc29saWQnIGNyZWF0ZXMgYSBidXR0b24gd2l0aCBhIHNvbGlkIGJhY2tncm91bmQsICdvdXRsaW5lJyBjcmVhdGVzIGEgYnV0dG9uIHdpdGhcbiAgICoganVzdCBhIGJvcmRlciwgYW5kICdjbGVhcicgY3JlYXRlcyBhIGJ1dHRvbiB3aXRoIG5vIGJhY2tncm91bmQgb3IgYm9yZGVyLlxuICAgKlxuICAgKiBAdHlwZSB7J2NsZWFyJyB8ICdzb2xpZCcgfCAnb3V0bGluZSd9XG4gICAqIEBkZWZhdWx0ICdzb2xpZCdcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGJ1dHRvbkZpbGw6ICdjbGVhcicgfCAnc29saWQnIHwgJ291dGxpbmUnID0gICdzb2xpZCc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY29sb3Igb2YgdGhlIGFjdGlvbiBidXR0b24uXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgY29sb3IgZm9yIHRoZSBidXR0b24gdXNpbmcgSW9uaWMncyBjb2xvciBzeXN0ZW0uXG4gICAqIFRoaXMgYWxsb3dzIHRoZSBidXR0b24gdG8gbWF0Y2ggdGhlIGFwcGxpY2F0aW9uJ3MgY29sb3Igc2NoZW1lLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAncHJpbWFyeSdcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGJ1dHRvbkNvbG9yOiBzdHJpbmcgPSAgJ3ByaW1hcnknO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNpemUgb2YgdGhlIGFjdGlvbiBidXR0b24uXG4gICAqIEBzdW1tYXJ5IENvbnRyb2xzIHRoZSBzaXplIG9mIHRoZSBidXR0b24gc2hvd24gaW4gdGhlIGVtcHR5IHN0YXRlLlxuICAgKiBDYW4gYmUgJ2xhcmdlJywgJ3NtYWxsJywgb3IgJ2RlZmF1bHQnIHRvIGFjY29tbW9kYXRlIGRpZmZlcmVudCBsYXlvdXQgbmVlZHMuXG4gICAqXG4gICAqIEB0eXBlIHsnbGFyZ2UnIHwgJ3NtYWxsJyB8ICdkZWZhdWx0J31cbiAgICogQGRlZmF1bHQgJ2RlZmF1bHQnXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25TaXplOiAnbGFyZ2UnIHwgJ3NtYWxsJyB8ICdkZWZhdWx0JyA9ICAnZGVmYXVsdCc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc2VhcmNoIHZhbHVlIHRoYXQgcmVzdWx0ZWQgaW4gbm8gcmVzdWx0cy5cbiAgICogQHN1bW1hcnkgV2hlbiB0aGUgZW1wdHkgc3RhdGUgaXMgc2hvd24gZHVlIHRvIGEgc2VhcmNoIHdpdGggbm8gcmVzdWx0cyxcbiAgICogdGhpcyBwcm9wZXJ0eSBjYW4gaG9sZCB0aGUgc2VhcmNoIHRlcm0gdGhhdCB3YXMgdXNlZC4gVGhpcyBjYW4gYmUgZGlzcGxheWVkXG4gICAqIGluIHRoZSBlbXB0eSBzdGF0ZSBtZXNzYWdlIHRvIHByb3ZpZGUgY29udGV4dCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNlYXJjaFZhbHVlITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2VydmljZSBmb3IgaGFuZGxpbmcgbmF2aWdhdGlvbiBvcGVyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBJbmplY3RlZCBzZXJ2aWNlIHRoYXQgcHJvdmlkZXMgbWV0aG9kcyBmb3IgbmF2aWdhdGluZyBiZXR3ZWVuIHJvdXRlcy5cbiAgICogVGhpcyBzZXJ2aWNlIGlzIHVzZWQgd2hlbiB0aGUgYnV0dG9uTGluayBpcyBhIHN0cmluZyBVUkwgdG8gbmF2aWdhdGUgdG8gdGhhdCBsb2NhdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1JvdXRlcn1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG5cbiAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgc2VhcmNoU3VidGl0bGUhOiBTYWZlSHRtbFxuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEVtcHR5U3RhdGVDb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IEVtcHR5U3RhdGVDb21wb25lbnQgYnkgY2FsbGluZyB0aGUgcGFyZW50IGNsYXNzIGNvbnN0cnVjdG9yXG4gICAqIHdpdGggdGhlIGNvbXBvbmVudCBuYW1lIGZvciBsb2dnaW5nIGFuZCBpZGVudGlmaWNhdGlvbiBwdXJwb3Nlcy4gVGhpcyBjb21wb25lbnQgcHJvdmlkZXNcbiAgICogYSBzdGFuZGFyZGl6ZWQgd2F5IHRvIGRpc3BsYXkgZW1wdHkgc3RhdGUgbWVzc2FnZXMgd2l0aCBvcHRpb25hbCBpY29ucyBhbmQgYWN0aW9uIGJ1dHRvbnMuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVtcHR5U3RhdGVDb21wb25lbnRcIik7XG4gICAgYWRkSWNvbnMoYWxsSWNvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50IGFmdGVyIEFuZ3VsYXIgZmlyc3QgZGlzcGxheXMgdGhlIGRhdGEtYm91bmQgcHJvcGVydGllcy5cbiAgICogQHN1bW1hcnkgU2V0cyB1cCB0aGUgY29tcG9uZW50IGJ5IHByb2Nlc3NpbmcgYm9vbGVhbiBpbnB1dHMsIGFwcGx5aW5nIGxvY2FsaXphdGlvbiB0byB0ZXh0XG4gICAqIGVsZW1lbnRzIGlmIHRyYW5zbGF0aW9uIGlzIGVuYWJsZWQsIGFuZCBmb3JtYXR0aW5nIENTUyBjbGFzc2VzIGZvciB0aXRsZSBhbmQgc3VidGl0bGUgY29sb3JzLlxuICAgKiBUaGlzIG1ldGhvZCBwcmVwYXJlcyB0aGUgY29tcG9uZW50IGZvciB1c2VyIGludGVyYWN0aW9uIGJ5IGVuc3VyaW5nIGFsbCBwcm9wZXJ0aWVzIGFyZVxuICAgKiBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgbG9jYWxpemVkLlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBBIGFzIEFuZ3VsYXIgTGlmZWN5Y2xlXG4gICAqICAgcGFydGljaXBhbnQgRSBhcyBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqXG4gICAqICAgQS0+PkU6IG5nT25Jbml0KClcbiAgICogICBFLT4+RTogUHJvY2VzcyB0cmFuc2xhdGFibGUgZmxhZ1xuICAgKiAgIEUtPj5FOiBQcm9jZXNzIHNob3dJY29uIGZsYWdcbiAgICogICBFLT4+RTogR2V0IGxvY2FsZSBzZXR0aW5nc1xuICAgKiAgIGFsdCB0cmFuc2xhdGFibGUgaXMgdHJ1ZVxuICAgKiAgICAgRS0+PkU6IExvY2FsaXplIHRpdGxlXG4gICAqICAgICBFLT4+RTogTG9jYWxpemUgc3VidGl0bGVcbiAgICogICAgIEUtPj5FOiBMb2NhbGl6ZSBidXR0b25UZXh0XG4gICAqICAgZW5kXG4gICAqICAgRS0+PkU6IEZvcm1hdCB0aXRsZSBDU1MgY2xhc3NcbiAgICogICBFLT4+RTogRm9ybWF0IHN1YnRpdGxlIENTUyBjbGFzc1xuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgdGhpcy50cmFuc2xhdGFibGUgPSBzdHJpbmdUb0Jvb2xlYW4odGhpcy50cmFuc2xhdGFibGUpO1xuICAgIHRoaXMuc2hvd0ljb24gPSBzdHJpbmdUb0Jvb2xlYW4odGhpcy5zaG93SWNvbik7XG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLmdldExvY2FsZSh0aGlzLnRyYW5zbGF0YWJsZSk7XG5cbiAgICAvLyBpZih0aGlzLnRyYW5zbGF0YWJsZSkge1xuICAgIC8vICAgdGhpcy50aXRsZSA9IGdlbmVyYXRlTG9jYWxlRnJvbVN0cmluZyh0aGlzLmxvY2FsZSwgdGhpcy50aXRsZSk7XG4gICAgLy8gICB0aGlzLnN1YnRpdGxlID0gZ2VuZXJhdGVMb2NhbGVGcm9tU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLnN1YnRpdGxlKTtcbiAgICAvLyAgIHRoaXMuYnV0dG9uVGV4dCA9IGdlbmVyYXRlTG9jYWxlRnJvbVN0cmluZyh0aGlzLmxvY2FsZSwgdGhpcy5idXR0b25UZXh0KTtcbiAgICAvLyB9XG5cbiAgICB0aGlzLnRpdGxlQ29sb3IgPSBgZGNmLXRpdGxlIGNvbG9yLSR7dGhpcy50aXRsZUNvbG9yfWA7XG4gICAgdGhpcy5zdWJ0aXRsZUNvbG9yID0gYGRjZi1zdWJ0aXRsZSBjb2xvci0ke3RoaXMudGl0bGVDb2xvcn1gO1xuXG4gICAgaWYodGhpcy5zZWFyY2hWYWx1ZSAmJiB0aGlzLnRyYW5zbGF0YWJsZSlcbiAgICAgIHRoaXMuc2VhcmNoU3VidGl0bGUgPSBhd2FpdCB0aGlzLmdldFNlYXJjaFN1YnRpdGxlKHRoaXMuc3VidGl0bGUgYXMgc3RyaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBjbGljayBldmVudHMgb24gdGhlIGFjdGlvbiBidXR0b24uXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgYWN0aW9uIGJ1dHRvbiBpbiB0aGUgZW1wdHkgc3RhdGVcbiAgICogY29tcG9uZW50LiBJdCBzdXBwb3J0cyB0aHJlZSBuYXZpZ2F0aW9uIHBhdHRlcm5zOiAxKSBubyBhY3Rpb24gd2hlbiBidXR0b25MaW5rIGlzIG5vdCBwcm92aWRlZCxcbiAgICogMikgY3VzdG9tIGZ1bmN0aW9uIGV4ZWN1dGlvbiB3aGVuIGJ1dHRvbkxpbmsgaXMgYSBmdW5jdGlvbiwgYW5kIDMpIG5hdmlnYXRpb24gdG8gYSBzcGVjaWZpYyBVUkxcbiAgICogd2hlbiBidXR0b25MaW5rIGlzIGEgc3RyaW5nLiBUaGlzIGZsZXhpYmlsaXR5IGFsbG93cyB0aGUgZW1wdHkgc3RhdGUgdG8gdHJpZ2dlciB2YXJpb3VzIGFjdGlvbnNcbiAgICogYmFzZWQgb24gdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyB1c2VkLlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBFIGFzIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBOIGFzIFJvdXRlclxuICAgKlxuICAgKiAgIFUtPj5FOiBDbGljayBhY3Rpb24gYnV0dG9uXG4gICAqICAgRS0+PkU6IGhhbmRsZUNsaWNrKClcbiAgICogICBhbHQgYnV0dG9uTGluayBpcyBub3QgcHJvdmlkZWRcbiAgICogICAgIEUtLT4+VTogUmV0dXJuIGZhbHNlIChubyBhY3Rpb24pXG4gICAqICAgZWxzZSBidXR0b25MaW5rIGlzIGEgZnVuY3Rpb25cbiAgICogICAgIEUtPj5FOiBFeGVjdXRlIGJ1dHRvbkxpbmsgZnVuY3Rpb25cbiAgICogICAgIEUtLT4+VTogUmV0dXJuIGZ1bmN0aW9uIHJlc3VsdFxuICAgKiAgIGVsc2UgYnV0dG9uTGluayBpcyBhIFVSTCBzdHJpbmdcbiAgICogICAgIEUtPj5OOiBuYXZpZ2F0ZUZvcndhcmQoYnV0dG9uTGluaylcbiAgICogICAgIE4tLT4+RTogUmV0dXJuIG5hdmlnYXRpb24gcmVzdWx0XG4gICAqICAgICBFLS0+PlU6IFJldHVybiBuYXZpZ2F0aW9uIHJlc3VsdFxuICAgKiAgIGVuZFxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgdm9pZCB8IFByb21pc2U8Ym9vbGVhbj59XG4gICAqICAgLSBmYWxzZSBpZiBubyBhY3Rpb24gaXMgdGFrZW5cbiAgICogICAtIFRoZSByZXN1bHQgb2YgdGhlIGJ1dHRvbkxpbmsgZnVuY3Rpb24gaWYgaXQncyBhIGZ1bmN0aW9uXG4gICAqICAgLSBBIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBuYXZpZ2F0aW9uIHJlc3VsdCBpZiBidXR0b25MaW5rIGlzIGEgVVJMXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVDbGljaygpOiBib29sZWFuIHwgdm9pZCB8IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGZuID0gdGhpcy5idXR0b25MaW5rO1xuICAgIGlmKCFmbilcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZihmbiBpbnN0YW5jZW9mIEZ1bmN0aW9uKVxuICAgICAgcmV0dXJuIGZuKCk7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2ZuIGFzIHN0cmluZ10pO1xuICB9XG5cblxuIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2VuZXJhdGVzIGEgbG9jYWxpemVkIGFuZCBzYW5pdGl6ZWQgc3VidGl0bGUgZm9yIHNlYXJjaCByZXN1bHRzLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCB0YWtlcyBhIGNvbnRlbnQgc3RyaW5nLCB0eXBpY2FsbHkgdGhlIHN1YnRpdGxlLCBhbmQgcHJvY2Vzc2VzIGl0XG4gICAqIHRocm91Z2ggdGhlIHRyYW5zbGF0aW9uIHNlcnZpY2UuIEl0IHJlcGxhY2VzIGEgcGxhY2Vob2xkZXIgKCd2YWx1ZTAnKSB3aXRoIHRoZSBhY3R1YWxcbiAgICogc2VhcmNoIHZhbHVlLCB0aGVuIHNhbml0aXplcyB0aGUgcmVzdWx0IHRvIHNhZmVseSB1c2UgYXMgSFRNTC4gVGhpcyBpcyBwYXJ0aWN1bGFybHlcbiAgICogdXNlZnVsIGZvciBkaXNwbGF5aW5nIGR5bmFtaWMsIGxvY2FsaXplZCBtZXNzYWdlcyBpbiB0aGUgZW1wdHkgc3RhdGUgd2hlbiBhIHNlYXJjaFxuICAgKiB5aWVsZHMgbm8gcmVzdWx0cy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgLSBUaGUgY29udGVudCBzdHJpbmcgdG8gYmUgdHJhbnNsYXRlZCBhbmQgcHJvY2Vzc2VkXG4gICAqIEByZXR1cm4ge1Byb21pc2U8U2FmZUh0bWw+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIHNhbml0aXplZCBIVE1MIHN0cmluZ1xuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBFIGFzIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBUIGFzIFRyYW5zbGF0ZVNlcnZpY2VcbiAgICogICBwYXJ0aWNpcGFudCBTIGFzIERvbVNhbml0aXplclxuICAgKlxuICAgKiAgIEUtPj5UOiBpbnN0YW50KGNvbnRlbnQsIHsndmFsdWUwJzogc2VhcmNoVmFsdWV9KVxuICAgKiAgIFQtLT4+RTogUmV0dXJuIHRyYW5zbGF0ZWQgc3RyaW5nXG4gICAqICAgRS0+PlM6IGJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRyYW5zbGF0ZWRTdHJpbmcpXG4gICAqICAgUy0tPj5FOiBSZXR1cm4gc2FuaXRpemVkIFNhZmVIdG1sXG4gICAqXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBhc3luYyBnZXRTZWFyY2hTdWJ0aXRsZShjb250ZW50OiBzdHJpbmcpOiBQcm9taXNlPFNhZmVIdG1sPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy50cmFuc2xhdGUuaW5zdGFudChjb250ZW50LCB7J3ZhbHVlMCc6IHRoaXMuc2VhcmNoVmFsdWV9KTtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwocmVzdWx0KTtcbiAgfVxufVxuIiwiXG48aW9uLWNhcmQgW2lkXT1cInVpZFwiIFtjbGFzc109XCJjbGFzc05hbWVcIj5cbiAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgQGlmKGljb24gJiYgc2hvd0ljb24pIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJkY2YtaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgPGlvbi1pY29uXG4gICAgICAgICAgbmFtZT1cImFsZXJ0LWNpcmNsZS1vdXRsaW5lXCJcbiAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZih0aXRsZSkge1xuICAgICAgPGg1IFtjbGFzc109XCJ0aXRsZUNvbG9yXCIgW2lubmVySFRNTF09XCJ0aXRsZVwiPjwvaDU+XG4gICAgfVxuICAgIEBpZihzdWJ0aXRsZSkge1xuICAgICAgQGlmKCFzZWFyY2hWYWx1ZSkge1xuICAgICAgICA8cCBbY2xhc3NdPVwic3VidGl0bGVDb2xvclwiIFtpbm5lckhUTUxdPVwic3VidGl0bGVcIj48L3A+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHAgW2NsYXNzXT1cInN1YnRpdGxlQ29sb3JcIiBbaW5uZXJIVE1MXT1cInNlYXJjaFN1YnRpdGxlXCI+PC9wPlxuICAgICAgfVxuICAgIH1cbiAgICBAaWYoYnV0dG9uTGluayAmJiBidXR0b25UZXh0KSB7XG4gICAgICA8ZGl2PlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIFtzaXplXT1cImJ1dHRvblNpemVcIlxuICAgICAgICAgIFtmaWxsXT1cImJ1dHRvbkZpbGxcIlxuICAgICAgICAgIFtjb2xvcl09XCJidXR0b25Db2xvclwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKClcIj5cbiAgICAgICAgICB7eyAgYnV0dG9uVGV4dCB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvaW9uLWNhcmQtY29udGVudD5cbjwvaW9uLWNhcmQ+XG4iXX0=